Skip to content

Commit e9c5ca8

Browse files
authored
Merge pull request #1509 from zloirock/object-keys-length
Object.keysLength stage 2 proposal
2 parents 80a862f + 10182e1 commit e9c5ca8

File tree

19 files changed

+112
-1
lines changed

19 files changed

+112
-1
lines changed

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
181181
- [`String.dedent`](#stringdedent)
182182
- [`Symbol` predicates](#symbol-predicates)
183183
- [`Symbol.customMatcher` for extractors](#symbolcustommatcher-for-extractors)
184+
- [`Object.keysLength`](#objectkeyslength)
184185
- [Stage 1 proposals](#stage-1-proposals)
185186
- [`.of` and `.from` methods on collection constructors](#of-and-from-methods-on-collection-constructors)
186187
- [`Array` filtering](#array-filtering)
@@ -2991,6 +2992,23 @@ core-js/proposals/pattern-extractors
29912992
core-js(-pure)/full/symbol/custom-matcher
29922993
```
29932994

2995+
##### [`Object.keysLength`](https://github.com/tc39/proposal-object-keys-length)[⬆](#index)
2996+
Module [`esnext.object.keys-length`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.object.keys-length.js).
2997+
```ts
2998+
class Object {
2999+
static keysLength(obj: Object): number;
3000+
}
3001+
```
3002+
[*CommonJS entry points:*](#commonjs-api)
3003+
```
3004+
core-js/proposals/object-keys-length
3005+
core-js(-pure)/full/object/keys-length
3006+
```
3007+
*Examples*:
3008+
```js
3009+
Object.keysLength({ a: 1, b: 2 }); // => 2
3010+
```
3011+
29943012
#### Stage 1 proposals[⬆](#index)
29953013
[*CommonJS entry points:*](#commonjs-api)
29963014
```
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Object.keysLength
2+
[Specification](https://tc39.es/proposal-object-keys-length/)\
3+
[Proposal repo](https://github.com/tc39/proposal-object-keys-length)
4+
5+
## Modules
6+
[`esnext.object.keys-length`](https://github.com/zloirock/core-js/blob/v4/packages/core-js/modules/esnext.object.keys-length.js)
7+
8+
## Built-ins signatures
9+
```ts
10+
class Object {
11+
static keysLength(obj: Object): number;
12+
}
13+
```
14+
15+
## [Entry points]({docs-version}/docs/usage#h-entry-points)
16+
```plaintext
17+
core-js/proposals/object-keys-length
18+
core-js(-pure)/full/object/keys-length
19+
```
20+
21+
## Examples
22+
```js
23+
Object.keysLength({ a: 1, b: 2 }); // => 2
24+
```

docs/web/docs/menu.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,10 @@
307307
{
308308
"title": "Symbol.customMatcher for extractors",
309309
"url": "{docs-version}/docs/features/proposals/symbol-custommatcher-for-extractors"
310+
},
311+
{
312+
"title": "Object.keysLength",
313+
"url": "{docs-version}/docs/features/proposals/object-keys-length"
310314
}
311315
]
312316
},

packages/core-js-compat/src/data.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2461,6 +2461,8 @@ export const data = {
24612461
},
24622462
'esnext.number.clamp': {
24632463
},
2464+
'esnext.object.keys-length': {
2465+
},
24642466
'esnext.promise.all-keyed': {
24652467
},
24662468
'esnext.promise.all-settled-keyed': {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
var getBuiltInStaticMethod = require('../internals/get-built-in-static-method');
4+
var toObject = require('../internals/to-object');
5+
6+
// `Object.keysLength` method
7+
// https://github.com/tc39/proposal-object-keys-length
8+
$({ target: 'Object', stat: true, forced: true }, {
9+
keysLength: function keysLength(O) {
10+
return getBuiltInStaticMethod('Object', 'keys')(toObject(O)).length;
11+
},
12+
});

scripts/build-entries/entries-definitions.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1848,6 +1848,12 @@ export const features = {
18481848
namespace: 'Object',
18491849
name: 'keys',
18501850
},
1851+
'object/keys-length': {
1852+
modules: ['esnext.object.keys-length'],
1853+
template: $static,
1854+
namespace: 'Object',
1855+
name: 'keysLength',
1856+
},
18511857
'object/lookup-getter': {
18521858
modules: ['es.object.lookup-getter'],
18531859
template: $uncurried,
@@ -3546,6 +3552,13 @@ export const proposals = {
35463552
'es.object.get-own-property-descriptors',
35473553
],
35483554
},
3555+
'object-keys-length': {
3556+
link: 'https://github.com/tc39/proposal-object-keys-length',
3557+
stage: 2,
3558+
modules: [
3559+
'esnext.object.keys-length',
3560+
],
3561+
},
35493562
'object-values-entries': {
35503563
link: 'https://github.com/tc39/proposal-object-values-entries',
35513564
stage: 4,

tests/babel-plugin/fixtures/entry-global/import-full-chrome-135-v4.0/output.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import "core-js/modules/esnext.iterator.zip-keyed";
4646
import "core-js/modules/esnext.map.from";
4747
import "core-js/modules/esnext.map.of";
4848
import "core-js/modules/esnext.number.clamp";
49+
import "core-js/modules/esnext.object.keys-length";
4950
import "core-js/modules/esnext.promise.all-keyed";
5051
import "core-js/modules/esnext.promise.all-settled-keyed";
5152
import "core-js/modules/esnext.set.from";

tests/babel-plugin/fixtures/entry-global/import-full-chrome-135-v4.999/output.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import "core-js/modules/esnext.iterator.zip-keyed";
4646
import "core-js/modules/esnext.map.from";
4747
import "core-js/modules/esnext.map.of";
4848
import "core-js/modules/esnext.number.clamp";
49+
import "core-js/modules/esnext.object.keys-length";
4950
import "core-js/modules/esnext.promise.all-keyed";
5051
import "core-js/modules/esnext.promise.all-settled-keyed";
5152
import "core-js/modules/esnext.set.from";

tests/babel-plugin/fixtures/entry-global/import-full-ie11-v4.0/output.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ import "core-js/modules/esnext.iterator.zip-keyed";
315315
import "core-js/modules/esnext.map.from";
316316
import "core-js/modules/esnext.map.of";
317317
import "core-js/modules/esnext.number.clamp";
318+
import "core-js/modules/esnext.object.keys-length";
318319
import "core-js/modules/esnext.promise.all-keyed";
319320
import "core-js/modules/esnext.promise.all-settled-keyed";
320321
import "core-js/modules/esnext.set.from";

tests/babel-plugin/fixtures/entry-global/import-full-ie11-v4.999/output.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ import "core-js/modules/esnext.iterator.zip-keyed";
315315
import "core-js/modules/esnext.map.from";
316316
import "core-js/modules/esnext.map.of";
317317
import "core-js/modules/esnext.number.clamp";
318+
import "core-js/modules/esnext.object.keys-length";
318319
import "core-js/modules/esnext.promise.all-keyed";
319320
import "core-js/modules/esnext.promise.all-settled-keyed";
320321
import "core-js/modules/esnext.set.from";

0 commit comments

Comments
 (0)