Skip to content

Commit 2b383e9

Browse files
committed
move joint iteration to stage 3
1 parent 5e64990 commit 2b383e9

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
@@ -5,6 +5,12 @@
55
- `Iterator.concat`
66
- Moved to stable ES, [November 2025 TC39 meeting](https://github.com/tc39/proposals/commit/33be3cb6d6743c7cc8628c547423f49078c0b655)
77
- Added `es.` namespace modules, `/es/` and `/stable/` namespaces entries
8+
- [Joint iteration proposal](https://github.com/tc39/proposal-joint-iteration):
9+
- Built-ins:
10+
- `Iterator.zip`
11+
- `Iterator.zipKeyed`
12+
- Moved to stage 3, November 2025 TC39 meeting
13+
- Added `/actual/` namespace entries, unconditional forced replacement changed to feature detection
814
- Fixed increasing `.size` in `URLSearchParams.prototype.append` polyfill in IE8-
915
- Compat data improvements:
1016
- [`Iterator.concat`](https://github.com/tc39/proposal-iterator-sequencing) marked as [shipped in FF147](https://bugzilla.mozilla.org/show_bug.cgi?id=1986672#c4)

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
- [New `Set` methods](#new-set-methods)
170170
- [`Math.sumPrecise`](#mathsumprecise)
171171
- [Stage 3 proposals](#stage-3-proposals)
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)
@@ -2705,6 +2705,57 @@ core-js/proposals/math-sum
27052705
core-js(-pure)/stage/3
27062706
```
27072707

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

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

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
{
243243
"title": "Stage 3 proposals",
244244
"children": [
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)