Skip to content

Commit 5a34274

Browse files
ExE-BossDanielRosenwasser
authored andcommitted
feat(lib/es2020): Add Promise.allSettled(…) (#34065)
* feat(lib/es2020): Add `Promise.allSettled(…)` * test(lib): Update tests to account for `es2020.promise` * fix(lib/es2020): `Promise.allSettled(…)` takes `Iterable` argument * refactor(lib/es2020): Rename `Promise.allSettled(…)` return type * feat(lib/es2020): Simplify `Promise.allSettled(…)` type declaration * refactor(lib/es2020): Improve naming of `Promise.allSettled(…)` types
1 parent 8939b25 commit 5a34274

File tree

5 files changed

+36
-3
lines changed

5 files changed

+36
-3
lines changed

src/compiler/commandLineParser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ namespace ts {
5050
["es2019.string", "lib.es2019.string.d.ts"],
5151
["es2019.symbol", "lib.es2019.symbol.d.ts"],
5252
["es2020.bigint", "lib.es2020.bigint.d.ts"],
53+
["es2020.promise", "lib.es2020.promise.d.ts"],
5354
["es2020.string", "lib.es2020.string.d.ts"],
5455
["es2020.symbol.wellknown", "lib.es2020.symbol.wellknown.d.ts"],
5556
["esnext.array", "lib.es2019.array.d.ts"],

src/lib/es2020.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/// <reference lib="es2019" />
22
/// <reference lib="es2020.bigint" />
3+
/// <reference lib="es2020.promise" />
34
/// <reference lib="es2020.string" />
45
/// <reference lib="es2020.symbol.wellknown" />

src/lib/es2020.promise.d.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
interface PromiseFulfilledResult<T> {
2+
status: "fulfilled";
3+
value: T;
4+
}
5+
6+
interface PromiseRejectedResult {
7+
status: "rejected";
8+
reason: any;
9+
}
10+
11+
type PromiseSettledResult<T> = PromiseFulfilledResult<T> | PromiseRejectedResult;
12+
13+
interface PromiseConstructor {
14+
/**
15+
* Creates a Promise that is resolved with an array of results when all
16+
* of the provided Promises resolve or reject.
17+
* @param values An array of Promises.
18+
* @returns A new Promise.
19+
*/
20+
allSettled<T extends readonly unknown[] | readonly [unknown]>(values: T):
21+
Promise<{ -readonly [P in keyof T]: PromiseSettledResult<T[P] extends PromiseLike<infer U> ? U : T[P]> }>;
22+
23+
/**
24+
* Creates a Promise that is resolved with an array of results when all
25+
* of the provided Promises resolve or reject.
26+
* @param values An array of Promises.
27+
* @returns A new Promise.
28+
*/
29+
allSettled<T>(values: Iterable<T>): Promise<PromiseSettledResult<T extends PromiseLike<infer U> ? U : T>[]>;
30+
}

src/lib/libs.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"es2019.string",
4242
"es2019.symbol",
4343
"es2020.bigint",
44+
"es2020.promise",
4445
"es2020.string",
4546
"es2020.symbol.wellknown",
4647
"esnext.intl",

src/testRunner/unittests/config/commandLineParsing.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ namespace ts {
8585
assertParseResult(["--lib", "es5,invalidOption", "0.ts"],
8686
{
8787
errors: [{
88-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', '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', 'es2020.bigint', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.",
88+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', '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', 'es2020.bigint', 'es2020.promise', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.",
8989
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
9090
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
9191
file: undefined,
@@ -287,7 +287,7 @@ namespace ts {
287287
assertParseResult(["--lib", "es5,", "es7", "0.ts"],
288288
{
289289
errors: [{
290-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', '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', 'es2020.bigint', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.",
290+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', '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', 'es2020.bigint', 'es2020.promise', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.",
291291
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
292292
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
293293
file: undefined,
@@ -306,7 +306,7 @@ namespace ts {
306306
assertParseResult(["--lib", "es5, ", "es7", "0.ts"],
307307
{
308308
errors: [{
309-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', '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', 'es2020.bigint', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.",
309+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', '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', 'es2020.bigint', 'es2020.promise', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.",
310310
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
311311
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
312312
file: undefined,

0 commit comments

Comments
 (0)