Skip to content

Commit 212efd6

Browse files
committed
Add support for primitives in Promise.allKeyed & Promise.allSettledKeyed types & add tests
1 parent 725e0bf commit 212efd6

File tree

8 files changed

+93
-12
lines changed

8 files changed

+93
-12
lines changed

packages/core-js-types/src/base/proposals/await-dictionary.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ interface PromiseConstructor {
99
* @param promises - An object of promises
1010
* @returns A new `Promise` that resolves to an object of fulfilled values or rejects if any promise rejects.
1111
*/
12-
allKeyed<D extends Record<PropertyKey, Promise<unknown>>>(promises: D): Promise<{ [k in keyof D]: Awaited<D[k]> }>;
12+
allKeyed<D extends Record<PropertyKey, unknown>>(promises: D): Promise<{ [k in keyof D]: Awaited<D[k]> }>;
1313

1414
/**
1515
* Takes an object whose values are promises and returns a single `Promise` that resolves
@@ -18,7 +18,7 @@ interface PromiseConstructor {
1818
* @returns A new Promise that resolves to an object with the same keys as the input object,
1919
* where each key maps to the settlement result (`{ status, value }` or `{ status, reason }`) of the corresponding promise.
2020
*/
21-
allSettledKeyed<D extends Record<PropertyKey, Promise<unknown>>>(promises: D): Promise<{ [k in keyof D]: CoreJS.CoreJSPromiseSettledResult<Awaited<D[k]>> }>;
21+
allSettledKeyed<D extends Record<PropertyKey, unknown>>(promises: D): Promise<{ [k in keyof D]: CoreJS.CoreJSPromiseSettledResult<Awaited<D[k]>> }>;
2222
}
2323

2424
declare var Promise: PromiseConstructor;

packages/core-js-types/src/base/pure/proposals/await-dictionary.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ declare namespace CoreJS {
1313
* @param promises - An object of promises
1414
* @returns A new `Promise` that resolves to an object of fulfilled values or rejects if any promise rejects.
1515
*/
16-
allKeyed<D extends Record<PropertyKey, Promise<unknown>>>(promises: D): CoreJS.CoreJSPromise<{ [k in keyof D]: Awaited<D[k]> }>;
16+
allKeyed<D extends Record<PropertyKey, unknown>>(promises: D): CoreJS.CoreJSPromise<{ [k in keyof D]: Awaited<D[k]> }>;
1717

1818
/**
1919
* Takes an object whose values are promises and returns a single `Promise` that resolves
@@ -22,7 +22,7 @@ declare namespace CoreJS {
2222
* @returns A new Promise that resolves to an object with the same keys as the input object,
2323
* where each key maps to the settlement result (`{ status, value }` or `{ status, reason }`) of the corresponding promise.
2424
*/
25-
allSettledKeyed<D extends Record<PropertyKey, Promise<unknown>>>(promises: D): CoreJS.CoreJSPromise<{ [k in keyof D]: CoreJS.CoreJSPromiseSettledResult<Awaited<D[k]>> }>;
25+
allSettledKeyed<D extends Record<PropertyKey, unknown>>(promises: D): Promise<{ [k in keyof D]: CoreJS.CoreJSPromiseSettledResult<Awaited<D[k]>> }>;
2626
}
2727

2828
var CoreJSPromise: CoreJSPromiseConstructor;

tests/type-definitions/global/proposals/await-dictionary.test.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ const resNS2: Promise<{ a: number, b: string, c: boolean }> = $Promise.allKeyed(
2323
const resNS3: Promise<{ [sym]: CoreJSPromiseResult<number> }> = allSettledKeyed({
2424
[sym]: Promise.resolve(1),
2525
});
26+
Promise.allKeyed({
27+
a: 1,
28+
b: Promise.resolve('string'),
29+
c: 3,
30+
});
2631

2732
// @ts-expect-error
2833
allKeyed();
@@ -42,8 +47,6 @@ const res2: Promise<{ [sym]: number }> = Promise.allKeyed({
4247
// @ts-expect-error
4348
Promise.allKeyed();
4449
// @ts-expect-error
45-
Promise.allKeyed({ a: 1, b: Promise.resolve(2) });
46-
// @ts-expect-error
4750
Promise.allKeyed([Promise.resolve(1), Promise.resolve(2)]);
4851

4952
const resASK: Promise<{ a: CoreJSPromiseResult<number>, b: CoreJSPromiseResult<string>, c: CoreJSPromiseResult<boolean> }> = Promise.allSettledKeyed({
@@ -56,9 +59,13 @@ const resASK2: Promise<{ [sym]: CoreJSPromiseResult<number> }> = Promise.allSett
5659
[sym]: Promise.resolve(1),
5760
});
5861

62+
Promise.allSettledKeyed({
63+
a: 1,
64+
b: Promise.resolve('string'),
65+
c: 3,
66+
});
67+
5968
// @ts-expect-error
6069
Promise.allSettledKeyed();
6170
// @ts-expect-error
62-
Promise.allSettledKeyed({ a: 1, b: Promise.resolve(2) });
63-
// @ts-expect-error
6471
Promise.allSettledKeyed([Promise.resolve(1), Promise.resolve(2)]);

tests/type-definitions/pure/proposals/await-dictionary.test.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,34 @@ const res2 = promiseAllKeyed({
1616
});
1717
assertCoreJSPromiseLike<{ [sym]: number }>(res2);
1818

19+
promiseAllKeyed({
20+
a: 1,
21+
b: promiseResolve('string'),
22+
c: 3,
23+
});
24+
1925
// @ts-expect-error
2026
promiseAllKeyed();
2127
// @ts-expect-error
22-
promiseAllKeyed({ a: 1, b: promiseResolve(2) });
23-
// @ts-expect-error
2428
promiseAllKeyed([promiseResolve(1), promiseResolve(2)]);
2529

30+
promiseAllSettledKeyed({
31+
a: Promise.resolve(1),
32+
b: Promise.resolve('string'),
33+
c: Promise.resolve(true),
34+
});
35+
36+
promiseAllSettledKeyed({
37+
[sym]: Promise.resolve(1),
38+
});
39+
40+
promiseAllSettledKeyed({
41+
a: 1,
42+
b: Promise.resolve('string'),
43+
c: 3,
44+
});
45+
2646
// @ts-expect-error
2747
promiseAllSettledKeyed();
2848
// @ts-expect-error
29-
promiseAllSettledKeyed({ a: 1, b: promiseResolve(2) });
30-
// @ts-expect-error
3149
promiseAllSettledKeyed([promiseResolve(1), promiseResolve(2)]);

tests/unit-global/esnext.promise.all-keyed.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@ QUnit.test('Promise.allKeyed', assert => {
66
assert.true(Promise.allKeyed({}) instanceof Promise, 'returns a promise');
77
});
88

9+
QUnit.test('Promise.allKeyed, resolved with primitives', assert => {
10+
return Promise.allKeyed({
11+
a: 1,
12+
b: Promise.resolve(2),
13+
c: 3,
14+
}).then(it => {
15+
assert.deepEqual(it, {
16+
a: 1,
17+
b: 2,
18+
c: 3,
19+
}, 'resolved with a correct value');
20+
});
21+
});
22+
923
QUnit.test('Promise.allKeyed, resolved', assert => {
1024
return Promise.allKeyed({
1125
a: Promise.resolve(1),

tests/unit-global/esnext.promise.all-settled-keyed.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@ QUnit.test('Promise.allSettledKeyed, resolved', assert => {
2020
});
2121
});
2222

23+
QUnit.test('Promise.allSettledKeyed, resolved with primitives', assert => {
24+
return Promise.allSettledKeyed({
25+
a: 1,
26+
b: Promise.resolve(2),
27+
c: 3,
28+
}).then(it => {
29+
assert.deepEqual(it, {
30+
a: { value: 1, status: 'fulfilled' },
31+
b: { value: 2, status: 'fulfilled' },
32+
c: { value: 3, status: 'fulfilled' },
33+
}, 'resolved with a correct value');
34+
});
35+
});
36+
2337
QUnit.test('Promise.allSettledKeyed, resolved with rejection', assert => {
2438
return Promise.allSettledKeyed({
2539
a: Promise.resolve(1),

tests/unit-pure/esnext.promise.all-keyed.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@ QUnit.test('Promise.allKeyed, resolved', assert => {
2222
});
2323
});
2424

25+
QUnit.test('Promise.allKeyed, resolved with primitives', assert => {
26+
return Promise.allKeyed({
27+
a: 1,
28+
b: Promise.resolve(2),
29+
c: 3,
30+
}).then(it => {
31+
assert.deepEqual(it, {
32+
a: 1,
33+
b: 2,
34+
c: 3,
35+
}, 'resolved with a correct value');
36+
});
37+
});
38+
2539
QUnit.test('Promise.allKeyed, resolved with rejection', assert => {
2640
return Promise.allKeyed({
2741
a: Promise.resolve(1),

tests/unit-pure/esnext.promise.all-settled-keyed.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@ QUnit.test('Promise.allSettledKeyed, resolved', assert => {
2222
});
2323
});
2424

25+
QUnit.test('Promise.allSettledKeyed, resolved with primitives', assert => {
26+
return Promise.allSettledKeyed({
27+
a: 1,
28+
b: Promise.resolve(2),
29+
c: 3,
30+
}).then(it => {
31+
assert.deepEqual(it, {
32+
a: { value: 1, status: 'fulfilled' },
33+
b: { value: 2, status: 'fulfilled' },
34+
c: { value: 3, status: 'fulfilled' },
35+
}, 'resolved with a correct value');
36+
});
37+
});
38+
2539
QUnit.test('Promise.allSettledKeyed, resolved with rejection', assert => {
2640
return Promise.allSettledKeyed({
2741
a: Promise.resolve(1),

0 commit comments

Comments
 (0)