Skip to content

Commit 8c2eeb2

Browse files
committed
bug(esnext): add definitions for flatten and flatMap
Fixes #20410
1 parent aa9e2ba commit 8c2eeb2

8 files changed

+66
-11
lines changed

Gulpfile.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ const es2018LibrarySourceMap = es2018LibrarySource.map(source =>
150150
({ target: "lib." + source, sources: ["header.d.ts", source] }));
151151

152152
const esnextLibrarySource = [
153-
"esnext.asynciterable.d.ts"
153+
"esnext.asynciterable.d.ts",
154+
"esnext.array.d.ts"
154155
];
155156

156157
const esnextLibrarySourceMap = esnextLibrarySource.map(source =>

Jakefile.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,8 @@ var es2018LibrarySourceMap = es2018LibrarySource.map(function (source) {
213213
});
214214

215215
var esnextLibrarySource = [
216-
"esnext.asynciterable.d.ts"
216+
"esnext.asynciterable.d.ts",
217+
"esnext.array.d.ts"
217218
];
218219

219220
var esnextLibrarySourceMap = esnextLibrarySource.map(function (source) {

src/compiler/commandLineParser.ts

+1
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ namespace ts {
144144
"es2017.string": "lib.es2017.string.d.ts",
145145
"es2017.intl": "lib.es2017.intl.d.ts",
146146
"es2017.typedarrays": "lib.es2017.typedarrays.d.ts",
147+
"esnext.array": "lib.esnext.array.d.ts",
147148
"esnext.asynciterable": "lib.esnext.asynciterable.d.ts",
148149
}),
149150
},

src/harness/unittests/commandLineParsing.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ namespace ts {
6060
assertParseResult(["--lib", "es5,invalidOption", "0.ts"],
6161
{
6262
errors: [{
63-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
63+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.array', 'esnext.asynciterable'.",
6464
category: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
6565
code: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
6666

@@ -263,7 +263,7 @@ namespace ts {
263263
assertParseResult(["--lib", "es5,", "es7", "0.ts"],
264264
{
265265
errors: [{
266-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
266+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.array', 'esnext.asynciterable'.",
267267
category: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
268268
code: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
269269

@@ -283,7 +283,7 @@ namespace ts {
283283
assertParseResult(["--lib", "es5, ", "es7", "0.ts"],
284284
{
285285
errors: [{
286-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
286+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.array', 'esnext.asynciterable'.",
287287
category: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
288288
code: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
289289

src/harness/unittests/convertCompilerOptionsFromJson.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ namespace ts {
266266
file: undefined,
267267
start: 0,
268268
length: 0,
269-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
269+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.array', 'esnext.asynciterable'.",
270270
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
271271
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
272272
}]
@@ -297,7 +297,7 @@ namespace ts {
297297
file: undefined,
298298
start: 0,
299299
length: 0,
300-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
300+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.array', 'esnext.asynciterable'.",
301301
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
302302
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
303303
}]
@@ -328,7 +328,7 @@ namespace ts {
328328
file: undefined,
329329
start: 0,
330330
length: 0,
331-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
331+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.array', 'esnext.asynciterable'.",
332332
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
333333
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
334334
}]
@@ -359,7 +359,7 @@ namespace ts {
359359
file: undefined,
360360
start: 0,
361361
length: 0,
362-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
362+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.array', 'esnext.asynciterable'.",
363363
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
364364
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
365365
}]

src/lib/es2018.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
/// <reference path="lib.es2017.d.ts" />
1+
/// <reference path="lib.es2017.d.ts" />

src/lib/esnext.array.d.ts

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
interface ReadonlyArray<T> {
2+
3+
/**
4+
* Calls a defined callback function on each element of an array. Then, flattens the result into
5+
* a new array.
6+
* This is identical to a map followed by a flatten of depth 1.
7+
*
8+
* @param callback A function that accepts up to three arguments. The flatMap method calls the
9+
* callback function one time for each element in the array.
10+
* @param thisArg An object to which the this keyword can refer in the callback function. If
11+
* thisArg is omitted, undefined is used as the this value.
12+
*/
13+
flatMap<U, This = undefined> (
14+
callback: (this: This, value: T, index: number, array: T[]) => U|U[],
15+
thisArg?: This
16+
): U[]
17+
18+
/**
19+
* Returns a new array with all sub-array elements concatenated into it recursively up to the
20+
* specified depth. If no depth is provided, flatten method defaults to the depth of 1.
21+
*
22+
* @param depth The maximum recursion depth
23+
*/
24+
flatten<U>(this: ReadonlyArray<U>, depth?: number): U[];
25+
}
26+
27+
interface Array<T> {
28+
29+
/**
30+
* Calls a defined callback function on each element of an array. Then, flattens the result into
31+
* a new array.
32+
* This is identical to a map followed by a flatten of depth 1.
33+
*
34+
* @param callback A function that accepts up to three arguments. The flatMap method calls the
35+
* callback function one time for each element in the array.
36+
* @param thisArg An object to which the this keyword can refer in the callback function. If
37+
* thisArg is omitted, undefined is used as the this value.
38+
*/
39+
flatMap<U, This = undefined> (
40+
callback: (this: This, value: T, index: number, array: T[]) => U|U[],
41+
thisArg?: This
42+
): U[]
43+
44+
/**
45+
* Returns a new array with all sub-array elements concatenated into it recursively up to the
46+
* specified depth. If no depth is provided, flatten method defaults to the depth of 1.
47+
*
48+
* @param depth The maximum recursion depth
49+
*/
50+
flatten<U>(this: U[], depth?: number): U[];
51+
}

src/lib/esnext.d.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
/// <reference path="lib.es2017.d.ts" />
1+
/// <reference path="lib.es2018.d.ts" />
22
/// <reference path="lib.esnext.asynciterable.d.ts" />
3+
/// <reference path="lib.esnext.array.d.ts" />

0 commit comments

Comments
 (0)