Skip to content

Commit f528240

Browse files
slowcheetahzloirock
authored andcommitted
Iterator join proposal
1 parent b0f07ea commit f528240

File tree

20 files changed

+186
-0
lines changed

20 files changed

+186
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Iterator join
2+
[Specification](https://bakkot.github.io/proposal-iterator-join/)\
3+
[Proposal repo](https://github.com/bakkot/proposal-iterator-join)
4+
5+
## Modules
6+
[`esnext.iterator.join`](https://github.com/zloirock/core-js/blob/v4/packages/core-js/modules/esnext.iterator.join.js)
7+
8+
## Built-ins signatures
9+
```ts
10+
class Iterator {
11+
join(separator?: string | undefined): string;
12+
}
13+
```
14+
15+
## [Entry points]({docs-version}/docs/usage#h-entry-points)
16+
```ts
17+
core-js/proposals/iterator-join
18+
core-js(-pure)/full/iterator/join
19+
```
20+
21+
## Examples
22+
```js
23+
const digits = () => [1, 2, 3].values();
24+
digits().join(); // => '1,2,3'
25+
26+
const words = () => ['Hello', 'core-js'].values();
27+
words().join(' '); // => 'Hello core-js'
28+
```

docs/web/docs/menu.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,10 @@
341341
{
342342
"title": "Function.prototype.demethodize",
343343
"url": "{docs-version}/docs/features/proposals/function-prototype-demethodize"
344+
},
345+
{
346+
"title": "Iterator join",
347+
"url": "{docs-version}/docs/features/proposals/iterator-join"
344348
}
345349
]
346350
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2348,6 +2348,8 @@ export const data = {
23482348
},
23492349
'esnext.iterator.concat': {
23502350
},
2351+
'esnext.iterator.join': {
2352+
},
23512353
'esnext.iterator.range': {
23522354
},
23532355
'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: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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 $join = uncurryThis([].join);
12+
var push = uncurryThis([].push);
13+
14+
// `Iterator.prototype.join` method
15+
// https://bakkot.github.io/proposal-iterator-join/
16+
// dependency: es.iterator.constructor
17+
$({ target: 'Iterator', proto: true, real: true, forced: true }, {
18+
join: function join(separator) {
19+
var O = anObject(this);
20+
var sep;
21+
try {
22+
sep = separator === undefined ? ',' : $toString(separator);
23+
} catch (error) {
24+
iteratorClose(O, 'throw', error);
25+
}
26+
var result = [];
27+
var iterated = getIteratorDirect(O);
28+
iterate(iterated, function (value) {
29+
push(result, isNullOrUndefined(value) ? '' : $toString(value));
30+
}, { IS_RECORD: true });
31+
return $join(result, sep);
32+
},
33+
});

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: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,6 +1306,18 @@ 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+
},
1315+
'iterator/prototype/join': {
1316+
modules: ['esnext.iterator.join'],
1317+
template: $prototype,
1318+
namespace: 'Iterator',
1319+
name: 'join',
1320+
},
13091321
'iterator/map': {
13101322
modules: ['es.iterator.map'],
13111323
template: $uncurried,
@@ -3457,6 +3469,13 @@ export const proposals = {
34573469
'esnext.iterator.windows',
34583470
],
34593471
},
3472+
'iterator-join': {
3473+
link: 'https://github.com/bakkot/proposal-iterator-join',
3474+
stage: 0,
3475+
modules: [
3476+
'esnext.iterator.join',
3477+
],
3478+
},
34603479
'iterator-range': {
34613480
link: 'https://github.com/tc39/proposal-Number.range',
34623481
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";

0 commit comments

Comments
 (0)