Skip to content

Commit 994cc96

Browse files
committed
move joint iteration to stage 3
1 parent 4794bcc commit 994cc96

File tree

17 files changed

+125
-110
lines changed

17 files changed

+125
-110
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22
### Unreleased
3+
- [Joint iteration proposal](https://github.com/tc39/proposal-joint-iteration):
4+
- Built-ins:
5+
- `Iterator.zip`
6+
- `Iterator.zipKeyed`
7+
- Moved to stage 3, November 2025 TC39 meeting
8+
- Added `/actual/` namespace entries, unconditional forced replacement changed to feature detection
39
- Fixed increasing `.size` in `URLSearchParams.prototype.append` polyfill in IE8-
410
- Compat data improvements:
511
- [`Map` upsert proposal](https://github.com/tc39/proposal-upsert) features marked as shipped in Safari 26.2

README.md

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,12 @@ structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
169169
- [`Math.sumPrecise`](#mathsumprecise)
170170
- [Stage 3 proposals](#stage-3-proposals)
171171
- [`Iterator` sequencing](#iterator-sequencing)
172+
- [Joint iteration](#joint-iteration)
172173
- [`Map` upsert](#map-upsert)
173174
- [`JSON.parse` source text access](#jsonparse-source-text-access)
174175
- [`Symbol.metadata` for decorators metadata proposal](#symbolmetadata-for-decorators-metadata-proposal)
175176
- [Stage 2.7 proposals](#stage-27-proposals)
176177
- [`Iterator` chunking](#iterator-chunking)
177-
- [Joint iteration](#joint-iteration)
178178
- [Stage 2 proposals](#stage-2-proposals)
179179
- [`AsyncIterator` helpers](#asynciterator-helpers)
180180
- [`Iterator.range`](#iteratorrange)
@@ -2707,6 +2707,57 @@ Iterator.concat([0, 1].values(), [2, 3], function * () {
27072707
}()).toArray(); // => [0, 1, 2, 3, 4, 5]
27082708
```
27092709

2710+
##### [Joint iteration](https://github.com/tc39/proposal-joint-iteration)[](#index)
2711+
Modules [esnext.iterator.zip](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.iterator.zip.js), [esnext.iterator.zip-keyed](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.iterator.zip-keyed.js)
2712+
```ts
2713+
class Iterator {
2714+
zip<T extends readonly Iterable<unknown>[]>(
2715+
iterables: T,
2716+
options?: {
2717+
mode?: 'shortest' | 'longest' | 'strict';
2718+
padding?: { [K in keyof T]?: T[K] extends Iterable<infer U> ? U : never };
2719+
}
2720+
): IterableIterator<{ [K in keyof T]: T[K] extends Iterable<infer U> ? U : never }>;
2721+
zipKeyed<K extends PropertyKey, V extends Record<K, Iterable<unknown>>>(
2722+
iterables: V,
2723+
options?: {
2724+
mode?: 'shortest' | 'longest' | 'strict';
2725+
padding?: { [P in keyof V]?: V[P] extends Iterable<infer U> ? U : never };
2726+
}
2727+
): IterableIterator<{ [P in keyof V]: V[P] extends Iterable<infer U> ? U : never }>;
2728+
}
2729+
```
2730+
[*CommonJS entry points:*](#commonjs-api)
2731+
```
2732+
core-js/proposals/joint-iteration
2733+
core-js(-pure)/actual|full/iterator/zip
2734+
core-js(-pure)/actual|full/iterator/zip-keyed
2735+
```
2736+
[*Example*](https://tinyurl.com/vutnf2nu):
2737+
```js
2738+
Iterator.zip([
2739+
[0, 1, 2],
2740+
[3, 4, 5],
2741+
]).toArray(); // => [[0, 3], [1, 4], [2, 5]]
2742+
2743+
Iterator.zipKeyed({
2744+
a: [0, 1, 2],
2745+
b: [3, 4, 5, 6],
2746+
c: [7, 8, 9],
2747+
}, {
2748+
mode: 'longest',
2749+
padding: { c: 10 },
2750+
}).toArray();
2751+
/*
2752+
[
2753+
{ a: 0, b: 3, c: 7 },
2754+
{ a: 1, b: 4, c: 8 },
2755+
{ a: 2, b: 5, c: 9 },
2756+
{ a: undefined, b: 6, c: 10 },
2757+
];
2758+
*/
2759+
```
2760+
27102761
##### [`Map` upsert](https://github.com/thumbsupep/proposal-upsert)[](#index)
27112762
Modules [`esnext.map.get-or-insert`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.map.get-or-insert.js), [`esnext.map.get-or-insert-computed`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.map.get-or-insert-computed.js), [`esnext.weak-map.get-or-insert`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.weak-map.get-or-insert.js) and [`esnext.weak-map.get-or-insert-computed`](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.weak-map.get-or-insert-computed.js)
27122763
```ts
@@ -2835,57 +2886,6 @@ let windowsPartial = Array.from([0, 1].values().windows(3, 'allow-partial')); /
28352886
let windowsFull = Array.from([0, 1].values().windows(3)); // []
28362887
```
28372888

2838-
##### [Joint iteration](https://github.com/tc39/proposal-joint-iteration)[](#index)
2839-
Modules [esnext.iterator.zip](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.iterator.zip.js), [esnext.iterator.zip-keyed](https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/esnext.iterator.zip-keyed.js)
2840-
```ts
2841-
class Iterator {
2842-
zip<T extends readonly Iterable<unknown>[]>(
2843-
iterables: T,
2844-
options?: {
2845-
mode?: 'shortest' | 'longest' | 'strict';
2846-
padding?: { [K in keyof T]?: T[K] extends Iterable<infer U> ? U : never };
2847-
}
2848-
): IterableIterator<{ [K in keyof T]: T[K] extends Iterable<infer U> ? U : never }>;
2849-
zipKeyed<K extends PropertyKey, V extends Record<K, Iterable<unknown>>>(
2850-
iterables: V,
2851-
options?: {
2852-
mode?: 'shortest' | 'longest' | 'strict';
2853-
padding?: { [P in keyof V]?: V[P] extends Iterable<infer U> ? U : never };
2854-
}
2855-
): IterableIterator<{ [P in keyof V]: V[P] extends Iterable<infer U> ? U : never }>;
2856-
}
2857-
```
2858-
[*CommonJS entry points:*](#commonjs-api)
2859-
```
2860-
core-js/proposals/joint-iteration
2861-
core-js(-pure)/full/iterator/zip
2862-
core-js(-pure)/full/iterator/zip-keyed
2863-
```
2864-
[*Example*](https://tinyurl.com/vutnf2nu):
2865-
```js
2866-
Iterator.zip([
2867-
[0, 1, 2],
2868-
[3, 4, 5],
2869-
]).toArray(); // => [[0, 3], [1, 4], [2, 5]]
2870-
2871-
Iterator.zipKeyed({
2872-
a: [0, 1, 2],
2873-
b: [3, 4, 5, 6],
2874-
c: [7, 8, 9],
2875-
}, {
2876-
mode: 'longest',
2877-
padding: { c: 10 },
2878-
}).toArray();
2879-
/*
2880-
[
2881-
{ a: 0, b: 3, c: 7 },
2882-
{ a: 1, b: 4, c: 8 },
2883-
{ a: 2, b: 5, c: 9 },
2884-
{ a: undefined, b: 6, c: 10 },
2885-
];
2886-
*/
2887-
```
2888-
28892889
#### Stage 2 proposals[](#index)
28902890
[*CommonJS entry points:*](#commonjs-api)
28912891
```

docs/web/docs/features/proposals/joint-iteration.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ class Iterator {
2828
## [Entry points]({docs-version}/docs/usage#h-entry-points)
2929
```ts
3030
core-js/proposals/joint-iteration
31-
core-js(-pure)/full/iterator/zip
32-
core-js(-pure)/full/iterator/zip-keyed
31+
core-js(-pure)/actual|full/iterator/zip
32+
core-js(-pure)/actual|full/iterator/zip-keyed
3333
```
3434

3535
## Example

docs/web/docs/menu.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,10 @@
242242
"title": "Iterator sequencing",
243243
"url": "{docs-version}/docs/features/proposals/iterator-sequencing"
244244
},
245+
{
246+
"title": "Joint iteration",
247+
"url": "{docs-version}/docs/features/proposals/joint-iteration"
248+
},
245249
{
246250
"title": "Map upsert",
247251
"url": "{docs-version}/docs/features/proposals/map-upsert"
@@ -259,10 +263,6 @@
259263
{
260264
"title": "Stage 2.7 proposals",
261265
"children": [
262-
{
263-
"title": "Joint iteration",
264-
"url": "{docs-version}/docs/features/proposals/joint-iteration"
265-
},
266266
{
267267
"title": "Iterator chunking",
268268
"url": "{docs-version}/docs/features/proposals/iterator-chunking"

packages/core-js/actual/iterator/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
22
var parent = require('../../stable/iterator');
3+
require('../../modules/es.object.create');
34
require('../../modules/es.promise');
45
require('../../modules/esnext.iterator.constructor');
56
require('../../modules/esnext.iterator.concat');
@@ -17,5 +18,7 @@ require('../../modules/esnext.iterator.some');
1718
require('../../modules/esnext.iterator.take');
1819
require('../../modules/esnext.iterator.to-array');
1920
require('../../modules/esnext.iterator.to-async');
21+
require('../../modules/esnext.iterator.zip');
22+
require('../../modules/esnext.iterator.zip-keyed');
2023

2124
module.exports = parent;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'use strict';
2+
require('../../modules/es.array.iterator');
3+
require('../../modules/es.object.create');
4+
require('../../modules/es.object.to-string');
5+
require('../../modules/es.string.iterator');
6+
require('../../modules/es.iterator.constructor');
7+
require('../../modules/es.iterator.drop');
8+
require('../../modules/es.iterator.every');
9+
require('../../modules/es.iterator.filter');
10+
require('../../modules/es.iterator.find');
11+
require('../../modules/es.iterator.flat-map');
12+
require('../../modules/es.iterator.for-each');
13+
require('../../modules/es.iterator.map');
14+
require('../../modules/es.iterator.reduce');
15+
require('../../modules/es.iterator.some');
16+
require('../../modules/es.iterator.take');
17+
require('../../modules/es.iterator.to-array');
18+
require('../../modules/es.reflect.own-keys');
19+
require('../../modules/esnext.iterator.zip-keyed');
20+
require('../../modules/web.dom-collections.iterator');
21+
22+
var entryUnbind = require('../../internals/entry-unbind');
23+
24+
module.exports = entryUnbind('Iterator', 'zipKeyed');
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
'use strict';
2+
require('../../modules/es.array.iterator');
3+
require('../../modules/es.object.to-string');
4+
require('../../modules/es.string.iterator');
5+
require('../../modules/es.iterator.constructor');
6+
require('../../modules/es.iterator.drop');
7+
require('../../modules/es.iterator.every');
8+
require('../../modules/es.iterator.filter');
9+
require('../../modules/es.iterator.find');
10+
require('../../modules/es.iterator.flat-map');
11+
require('../../modules/es.iterator.for-each');
12+
require('../../modules/es.iterator.map');
13+
require('../../modules/es.iterator.reduce');
14+
require('../../modules/es.iterator.some');
15+
require('../../modules/es.iterator.take');
16+
require('../../modules/es.iterator.to-array');
17+
require('../../modules/esnext.iterator.zip');
18+
require('../../modules/web.dom-collections.iterator');
19+
20+
var entryUnbind = require('../../internals/entry-unbind');
21+
22+
module.exports = entryUnbind('Iterator', 'zip');

packages/core-js/full/iterator/index.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22
var parent = require('../../actual/iterator');
33
require('../../modules/esnext.iterator.chunks');
44
require('../../modules/esnext.iterator.range');
5-
require('../../modules/esnext.iterator.sliding');
65
require('../../modules/esnext.iterator.windows');
7-
require('../../modules/esnext.iterator.zip');
8-
require('../../modules/esnext.iterator.zip-keyed');
96
// TODO: Remove from `core-js@4`
107
require('../../modules/esnext.iterator.as-indexed-pairs');
118
require('../../modules/esnext.iterator.indexed');
9+
require('../../modules/esnext.iterator.sliding');
1210

1311
module.exports = parent;
Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,7 @@
11
'use strict';
2-
require('../../modules/es.array.iterator');
3-
require('../../modules/es.object.create');
4-
require('../../modules/es.object.to-string');
5-
require('../../modules/es.string.iterator');
6-
require('../../modules/es.iterator.constructor');
7-
require('../../modules/es.iterator.drop');
8-
require('../../modules/es.iterator.every');
9-
require('../../modules/es.iterator.filter');
10-
require('../../modules/es.iterator.find');
11-
require('../../modules/es.iterator.flat-map');
12-
require('../../modules/es.iterator.for-each');
13-
require('../../modules/es.iterator.map');
14-
require('../../modules/es.iterator.reduce');
15-
require('../../modules/es.iterator.some');
16-
require('../../modules/es.iterator.take');
17-
require('../../modules/es.iterator.to-array');
18-
require('../../modules/es.reflect.own-keys');
2+
var parent = require('../../actual/iterator/zip-keyed');
193
require('../../modules/esnext.iterator.chunks');
204
require('../../modules/esnext.iterator.sliding');
215
require('../../modules/esnext.iterator.windows');
22-
require('../../modules/esnext.iterator.zip-keyed');
23-
require('../../modules/web.dom-collections.iterator');
246

25-
var entryUnbind = require('../../internals/entry-unbind');
26-
27-
module.exports = entryUnbind('Iterator', 'zipKeyed');
7+
module.exports = parent;
Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,7 @@
11
'use strict';
2-
require('../../modules/es.array.iterator');
3-
require('../../modules/es.object.to-string');
4-
require('../../modules/es.string.iterator');
5-
require('../../modules/es.iterator.constructor');
6-
require('../../modules/es.iterator.drop');
7-
require('../../modules/es.iterator.every');
8-
require('../../modules/es.iterator.filter');
9-
require('../../modules/es.iterator.find');
10-
require('../../modules/es.iterator.flat-map');
11-
require('../../modules/es.iterator.for-each');
12-
require('../../modules/es.iterator.map');
13-
require('../../modules/es.iterator.reduce');
14-
require('../../modules/es.iterator.some');
15-
require('../../modules/es.iterator.take');
16-
require('../../modules/es.iterator.to-array');
2+
var parent = require('../../actual/iterator/zip');
173
require('../../modules/esnext.iterator.chunks');
184
require('../../modules/esnext.iterator.sliding');
195
require('../../modules/esnext.iterator.windows');
20-
require('../../modules/esnext.iterator.zip');
21-
require('../../modules/web.dom-collections.iterator');
226

23-
var entryUnbind = require('../../internals/entry-unbind');
24-
25-
module.exports = entryUnbind('Iterator', 'zip');
7+
module.exports = parent;

0 commit comments

Comments
 (0)