Skip to content

Commit cb4c768

Browse files
authored
Add Array.prototype.findLast() and Array.prototype.findLastIndex() (#49636)
Signed-off-by: mbasov2 <mbasov2@bloomberg.net>
1 parent 86ccd20 commit cb4c768

27 files changed

+971
-37
lines changed

src/compiler/commandLineParser.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ const libEntries: [string, string][] = [
156156
["es2020", "lib.es2020.d.ts"],
157157
["es2021", "lib.es2021.d.ts"],
158158
["es2022", "lib.es2022.d.ts"],
159+
["es2023", "lib.es2023.d.ts"],
159160
["esnext", "lib.esnext.d.ts"],
160161
// Host only
161162
["dom", "lib.dom.d.ts"],
@@ -209,7 +210,8 @@ const libEntries: [string, string][] = [
209210
["es2022.sharedmemory", "lib.es2022.sharedmemory.d.ts"],
210211
["es2022.string", "lib.es2022.string.d.ts"],
211212
["es2022.regexp", "lib.es2022.regexp.d.ts"],
212-
["esnext.array", "lib.es2022.array.d.ts"],
213+
["es2023.array", "lib.es2023.array.d.ts"],
214+
["esnext.array", "lib.es2023.array.d.ts"],
213215
["esnext.symbol", "lib.es2019.symbol.d.ts"],
214216
["esnext.asynciterable", "lib.es2018.asynciterable.d.ts"],
215217
["esnext.intl", "lib.esnext.intl.d.ts"],

src/lib/es2023.array.d.ts

+324
Large diffs are not rendered by default.

src/lib/es2023.d.ts

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/// <reference lib="es2022" />
2+
/// <reference lib="es2023.array" />

src/lib/es2023.full.d.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/// <reference lib="es2023" />
2+
/// <reference lib="dom" />
3+
/// <reference lib="webworker.importscripts" />
4+
/// <reference lib="scripthost" />
5+
/// <reference lib="dom.iterable" />

src/lib/esnext.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
/// <reference lib="es2022" />
1+
/// <reference lib="es2023" />
22
/// <reference lib="esnext.intl" />

src/lib/libs.json

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"es2020",
1111
"es2021",
1212
"es2022",
13+
"es2023",
1314
"esnext",
1415
// Host only
1516
"dom.generated",
@@ -63,6 +64,7 @@
6364
"es2022.sharedmemory",
6465
"es2022.string",
6566
"es2022.regexp",
67+
"es2023.array",
6668
"esnext.intl",
6769
// Default libraries
6870
"es5.full",
@@ -74,6 +76,7 @@
7476
"es2020.full",
7577
"es2021.full",
7678
"es2022.full",
79+
"es2023.full",
7780
"esnext.full"
7881
],
7982
"paths": {

tests/baselines/reference/callWithSpread4.symbols

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ declare const pli: {
3030

3131
(streams: ReadonlyArray<R | W | RW>): Promise<void>;
3232
>streams : Symbol(streams, Decl(callWithSpread4.ts, 5, 5))
33-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --) ... and 1 more)
33+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --) ... and 2 more)
3434
>R : Symbol(R, Decl(callWithSpread4.ts, 0, 0))
3535
>W : Symbol(W, Decl(callWithSpread4.ts, 0, 22))
3636
>RW : Symbol(RW, Decl(callWithSpread4.ts, 1, 22))
@@ -43,7 +43,7 @@ declare const pli: {
4343
>RW : Symbol(RW, Decl(callWithSpread4.ts, 1, 22))
4444
>W : Symbol(W, Decl(callWithSpread4.ts, 0, 22))
4545
>streams : Symbol(streams, Decl(callWithSpread4.ts, 6, 23))
46-
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
46+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 4 more)
4747
>RW : Symbol(RW, Decl(callWithSpread4.ts, 1, 22))
4848
>W : Symbol(W, Decl(callWithSpread4.ts, 0, 22))
4949
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))

tests/baselines/reference/config/commandLineParsing/parseCommandLine/Parse --lib option with extra comma.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ WatchOptions::
1010
FileNames::
1111
es7,0.ts
1212
Errors::
13-
error TS6046: Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'webworker.iterable', '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', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2019.intl', 'es2020.bigint', 'es2020.date', 'es2020.promise', 'es2020.sharedmemory', 'es2020.string', 'es2020.symbol.wellknown', 'es2020.intl', 'es2020.number', 'es2021.promise', 'es2021.string', 'es2021.weakref', 'es2021.intl', 'es2022.array', 'es2022.error', 'es2022.intl', 'es2022.object', 'es2022.sharedmemory', 'es2022.string', 'es2022.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint', 'esnext.string', 'esnext.promise', 'esnext.weakref'.
13+
error TS6046: Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'webworker.iterable', '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', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2019.intl', 'es2020.bigint', 'es2020.date', 'es2020.promise', 'es2020.sharedmemory', 'es2020.string', 'es2020.symbol.wellknown', 'es2020.intl', 'es2020.number', 'es2021.promise', 'es2021.string', 'es2021.weakref', 'es2021.intl', 'es2022.array', 'es2022.error', 'es2022.intl', 'es2022.object', 'es2022.sharedmemory', 'es2022.string', 'es2022.regexp', 'es2023.array', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint', 'esnext.string', 'esnext.promise', 'esnext.weakref'.

tests/baselines/reference/config/commandLineParsing/parseCommandLine/Parse --lib option with trailing white-space.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ WatchOptions::
1010
FileNames::
1111
es7,0.ts
1212
Errors::
13-
error TS6046: Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'webworker.iterable', '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', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2019.intl', 'es2020.bigint', 'es2020.date', 'es2020.promise', 'es2020.sharedmemory', 'es2020.string', 'es2020.symbol.wellknown', 'es2020.intl', 'es2020.number', 'es2021.promise', 'es2021.string', 'es2021.weakref', 'es2021.intl', 'es2022.array', 'es2022.error', 'es2022.intl', 'es2022.object', 'es2022.sharedmemory', 'es2022.string', 'es2022.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint', 'esnext.string', 'esnext.promise', 'esnext.weakref'.
13+
error TS6046: Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'webworker.iterable', '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', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2019.intl', 'es2020.bigint', 'es2020.date', 'es2020.promise', 'es2020.sharedmemory', 'es2020.string', 'es2020.symbol.wellknown', 'es2020.intl', 'es2020.number', 'es2021.promise', 'es2021.string', 'es2021.weakref', 'es2021.intl', 'es2022.array', 'es2022.error', 'es2022.intl', 'es2022.object', 'es2022.sharedmemory', 'es2022.string', 'es2022.regexp', 'es2023.array', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint', 'esnext.string', 'esnext.promise', 'esnext.weakref'.

tests/baselines/reference/config/commandLineParsing/parseCommandLine/Parse invalid option of library flags.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ WatchOptions::
1010
FileNames::
1111
0.ts
1212
Errors::
13-
error TS6046: Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'webworker.iterable', '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', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2019.intl', 'es2020.bigint', 'es2020.date', 'es2020.promise', 'es2020.sharedmemory', 'es2020.string', 'es2020.symbol.wellknown', 'es2020.intl', 'es2020.number', 'es2021.promise', 'es2021.string', 'es2021.weakref', 'es2021.intl', 'es2022.array', 'es2022.error', 'es2022.intl', 'es2022.object', 'es2022.sharedmemory', 'es2022.string', 'es2022.regexp', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint', 'esnext.string', 'esnext.promise', 'esnext.weakref'.
13+
error TS6046: Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'webworker.iterable', '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', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2019.intl', 'es2020.bigint', 'es2020.date', 'es2020.promise', 'es2020.sharedmemory', 'es2020.string', 'es2020.symbol.wellknown', 'es2020.intl', 'es2020.number', 'es2021.promise', 'es2021.string', 'es2021.weakref', 'es2021.intl', 'es2022.array', 'es2022.error', 'es2022.intl', 'es2022.object', 'es2022.sharedmemory', 'es2022.string', 'es2022.regexp', 'es2023.array', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint', 'esnext.string', 'esnext.promise', 'esnext.weakref'.

tests/baselines/reference/dependentDestructuredVariables.symbols

+2-2
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ interface B<T> { variant: 'b', value: Array<T> }
378378
>T : Symbol(T, Decl(dependentDestructuredVariables.ts, 148, 12))
379379
>variant : Symbol(B.variant, Decl(dependentDestructuredVariables.ts, 148, 16))
380380
>value : Symbol(B.value, Decl(dependentDestructuredVariables.ts, 148, 30))
381-
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
381+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 4 more)
382382
>T : Symbol(T, Decl(dependentDestructuredVariables.ts, 148, 12))
383383

384384
type AB<T> = A<T> | B<T>;
@@ -399,7 +399,7 @@ declare function printValueList<T>(t: Array<T>): void;
399399
>printValueList : Symbol(printValueList, Decl(dependentDestructuredVariables.ts, 152, 43))
400400
>T : Symbol(T, Decl(dependentDestructuredVariables.ts, 154, 32))
401401
>t : Symbol(t, Decl(dependentDestructuredVariables.ts, 154, 35))
402-
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
402+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 4 more)
403403
>T : Symbol(T, Decl(dependentDestructuredVariables.ts, 154, 32))
404404

405405
function unrefined1<T>(ab: AB<T>): void {

tests/baselines/reference/findLast.js

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
//// [findLast.ts]
2+
const itemNumber: number | undefined = [0].findLast((item) => item === 0);
3+
const itemString: string | undefined = ["string"].findLast((item) => item === "string");
4+
new Int8Array().findLast((item) => item === 0);
5+
new Uint8Array().findLast((item) => item === 0);
6+
new Uint8ClampedArray().findLast((item) => item === 0);
7+
new Int16Array().findLast((item) => item === 0);
8+
new Uint16Array().findLast((item) => item === 0);
9+
new Int32Array().findLast((item) => item === 0);
10+
new Uint32Array().findLast((item) => item === 0);
11+
new Float32Array().findLast((item) => item === 0);
12+
new Float64Array().findLast((item) => item === 0);
13+
new BigInt64Array().findLast((item) => item === BigInt(0));
14+
new BigUint64Array().findLast((item) => item === BigInt(0));
15+
16+
const indexNumber: number = [0].findLastIndex((item) => item === 0);
17+
const indexString: number = ["string"].findLastIndex((item) => item === "string");
18+
new Int8Array().findLastIndex((item) => item === 0);
19+
new Uint8Array().findLastIndex((item) => item === 0);
20+
new Uint8ClampedArray().findLastIndex((item) => item === 0);
21+
new Int16Array().findLastIndex((item) => item === 0);
22+
new Uint16Array().findLastIndex((item) => item === 0);
23+
new Int32Array().findLastIndex((item) => item === 0);
24+
new Uint32Array().findLastIndex((item) => item === 0);
25+
new Float32Array().findLastIndex((item) => item === 0);
26+
new Float64Array().findLastIndex((item) => item === 0);
27+
new BigInt64Array().findLastIndex((item) => item === BigInt(0));
28+
new BigUint64Array().findLastIndex((item) => item === BigInt(0));
29+
30+
31+
//// [findLast.js]
32+
const itemNumber = [0].findLast((item) => item === 0);
33+
const itemString = ["string"].findLast((item) => item === "string");
34+
new Int8Array().findLast((item) => item === 0);
35+
new Uint8Array().findLast((item) => item === 0);
36+
new Uint8ClampedArray().findLast((item) => item === 0);
37+
new Int16Array().findLast((item) => item === 0);
38+
new Uint16Array().findLast((item) => item === 0);
39+
new Int32Array().findLast((item) => item === 0);
40+
new Uint32Array().findLast((item) => item === 0);
41+
new Float32Array().findLast((item) => item === 0);
42+
new Float64Array().findLast((item) => item === 0);
43+
new BigInt64Array().findLast((item) => item === BigInt(0));
44+
new BigUint64Array().findLast((item) => item === BigInt(0));
45+
const indexNumber = [0].findLastIndex((item) => item === 0);
46+
const indexString = ["string"].findLastIndex((item) => item === "string");
47+
new Int8Array().findLastIndex((item) => item === 0);
48+
new Uint8Array().findLastIndex((item) => item === 0);
49+
new Uint8ClampedArray().findLastIndex((item) => item === 0);
50+
new Int16Array().findLastIndex((item) => item === 0);
51+
new Uint16Array().findLastIndex((item) => item === 0);
52+
new Int32Array().findLastIndex((item) => item === 0);
53+
new Uint32Array().findLastIndex((item) => item === 0);
54+
new Float32Array().findLastIndex((item) => item === 0);
55+
new Float64Array().findLastIndex((item) => item === 0);
56+
new BigInt64Array().findLastIndex((item) => item === BigInt(0));
57+
new BigUint64Array().findLastIndex((item) => item === BigInt(0));

0 commit comments

Comments
 (0)