Skip to content

Commit bd6e025

Browse files
committed
Iterator join proposal
1 parent 889181b commit bd6e025

File tree

18 files changed

+156
-0
lines changed

18 files changed

+156
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2347,6 +2347,8 @@ export const data = {
23472347
},
23482348
'esnext.iterator.concat': {
23492349
},
2350+
'esnext.iterator.join': {
2351+
},
23502352
'esnext.iterator.range': {
23512353
},
23522354
'esnext.iterator.to-async': {

packages/core-js-pure/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,8 @@
582582
"./proposals/iterator-helpers.js": "./proposals/iterator-helpers.js",
583583
"./proposals/iterator-chunking": "./proposals/iterator-chunking.js",
584584
"./proposals/iterator-chunking.js": "./proposals/iterator-chunking.js",
585+
"./proposals/iterator-join": "./proposals/iterator-join.js",
586+
"./proposals/iterator-join.js": "./proposals/iterator-join.js",
585587
"./proposals/iterator-range": "./proposals/iterator-range.js",
586588
"./proposals/iterator-range.js": "./proposals/iterator-range.js",
587589
"./proposals/iterator-sequencing": "./proposals/iterator-sequencing.js",
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
var $toString = require('../internals/to-string');
4+
var anObject = require('../internals/an-object');
5+
var getIteratorDirect = require('../internals/get-iterator-direct');
6+
var isNullOrUndefined = require('../internals/is-null-or-undefined');
7+
var iterate = require('../internals/iterate');
8+
var iteratorClose = require('../internals/iterator-close');
9+
var uncurryThis = require('../internals/function-uncurry-this');
10+
11+
var stringConcat = uncurryThis(''.concat);
12+
13+
// `Iterator.prototype.join` method
14+
// https://bakkot.github.io/proposal-iterator-join/
15+
// dependency: es.iterator.constructor
16+
$({ target: 'Iterator', proto: true, real: true, forced: true }, {
17+
join: function join(separator) {
18+
var O = anObject(this);
19+
var sep;
20+
try {
21+
sep = separator === undefined ? ',' : $toString(separator);
22+
} catch (error) {
23+
iteratorClose(O, 'throw', error);
24+
}
25+
var first = true;
26+
var result = '';
27+
var iterated = getIteratorDirect(O);
28+
iterate(iterated, function (value) {
29+
if (first) {
30+
first = false;
31+
} else {
32+
result = stringConcat(result, sep);
33+
}
34+
if (isNullOrUndefined(value)) return;
35+
result = stringConcat(result, $toString(value));
36+
}, { IS_RECORD: true });
37+
return result;
38+
},
39+
});

packages/core-js/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,8 @@
576576
"./proposals/iterator-helpers.js": "./proposals/iterator-helpers.js",
577577
"./proposals/iterator-chunking": "./proposals/iterator-chunking.js",
578578
"./proposals/iterator-chunking.js": "./proposals/iterator-chunking.js",
579+
"./proposals/iterator-join": "./proposals/iterator-join.js",
580+
"./proposals/iterator-join.js": "./proposals/iterator-join.js",
579581
"./proposals/iterator-range": "./proposals/iterator-range.js",
580582
"./proposals/iterator-range.js": "./proposals/iterator-range.js",
581583
"./proposals/iterator-sequencing": "./proposals/iterator-sequencing.js",

scripts/build-entries/entries-definitions.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,6 +1306,12 @@ export const features = {
13061306
namespace: 'Iterator',
13071307
name: 'forEach',
13081308
},
1309+
'iterator/join': {
1310+
modules: ['esnext.iterator.join'],
1311+
template: $uncurried,
1312+
namespace: 'Iterator',
1313+
name: 'join',
1314+
},
13091315
'iterator/map': {
13101316
modules: ['es.iterator.map'],
13111317
template: $uncurried,
@@ -3457,6 +3463,13 @@ export const proposals = {
34573463
'esnext.iterator.windows',
34583464
],
34593465
},
3466+
'iterator-join': {
3467+
link: 'https://github.com/bakkot/proposal-iterator-join',
3468+
stage: 0,
3469+
modules: [
3470+
'esnext.iterator.join',
3471+
],
3472+
},
34603473
'iterator-range': {
34613474
link: 'https://github.com/tc39/proposal-Number.range',
34623475
stage: 2,

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
@@ -33,6 +33,7 @@ import "core-js/modules/esnext.function.demethodize";
3333
import "core-js/modules/esnext.function.metadata";
3434
import "core-js/modules/esnext.iterator.chunks";
3535
import "core-js/modules/esnext.iterator.concat";
36+
import "core-js/modules/esnext.iterator.join";
3637
import "core-js/modules/esnext.iterator.range";
3738
import "core-js/modules/esnext.iterator.to-async";
3839
import "core-js/modules/esnext.iterator.windows";

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
@@ -33,6 +33,7 @@ import "core-js/modules/esnext.function.demethodize";
3333
import "core-js/modules/esnext.function.metadata";
3434
import "core-js/modules/esnext.iterator.chunks";
3535
import "core-js/modules/esnext.iterator.concat";
36+
import "core-js/modules/esnext.iterator.join";
3637
import "core-js/modules/esnext.iterator.range";
3738
import "core-js/modules/esnext.iterator.to-async";
3839
import "core-js/modules/esnext.iterator.windows";

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
@@ -299,6 +299,7 @@ import "core-js/modules/esnext.function.demethodize";
299299
import "core-js/modules/esnext.function.metadata";
300300
import "core-js/modules/esnext.iterator.chunks";
301301
import "core-js/modules/esnext.iterator.concat";
302+
import "core-js/modules/esnext.iterator.join";
302303
import "core-js/modules/esnext.iterator.range";
303304
import "core-js/modules/esnext.iterator.to-async";
304305
import "core-js/modules/esnext.iterator.windows";

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
@@ -299,6 +299,7 @@ import "core-js/modules/esnext.function.demethodize";
299299
import "core-js/modules/esnext.function.metadata";
300300
import "core-js/modules/esnext.iterator.chunks";
301301
import "core-js/modules/esnext.iterator.concat";
302+
import "core-js/modules/esnext.iterator.join";
302303
import "core-js/modules/esnext.iterator.range";
303304
import "core-js/modules/esnext.iterator.to-async";
304305
import "core-js/modules/esnext.iterator.windows";

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import "core-js/modules/esnext.function.demethodize";
3333
import "core-js/modules/esnext.function.metadata";
3434
import "core-js/modules/esnext.iterator.chunks";
3535
import "core-js/modules/esnext.iterator.concat";
36+
import "core-js/modules/esnext.iterator.join";
3637
import "core-js/modules/esnext.iterator.range";
3738
import "core-js/modules/esnext.iterator.to-async";
3839
import "core-js/modules/esnext.iterator.windows";

0 commit comments

Comments
 (0)