feat: enable Array.fromAsync (#21048)

This commit is contained in:
Bartek Iwańczuk 2023-11-01 23:25:18 +01:00 committed by GitHub
parent 24c3c96958
commit ab72019a17
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 1 deletions

View file

@ -368,7 +368,8 @@ pub fn main() {
// Using same default as VSCode:
// https://github.com/microsoft/vscode/blob/48d4ba271686e8072fc6674137415bc80d936bc7/extensions/typescript-language-features/src/configuration/configuration.ts#L213-L214
DenoSubcommand::Lsp => vec!["--max-old-space-size=3072".to_string()],
_ => vec![],
// TODO(bartlomieju): upstream this to `deno_core` crate
_ => vec!["--harmony-array-from-async".to_string()],
};
init_v8_flags(&default_v8_flags, &flags.v8_flags, get_v8_flags_from_env());
deno_core::JsRuntime::init_platform(None);

View file

@ -500,6 +500,7 @@ Deno.test(function consoleTestStringifyFunctionWithProperties() {
[isArray]: [Function: isArray] { [length]: 1, [name]: "isArray" },
[from]: [Function: from] { [length]: 1, [name]: "from" },
[of]: [Function: of] { [length]: 0, [name]: "of" },
[fromAsync]: [Function: fromAsync] { [length]: 1, [name]: "fromAsync" },
[Symbol(Symbol.species)]: [Getter]
}`,
);

View file

@ -153,3 +153,20 @@ Deno.test(async function promiseWithResolvers() {
await assertRejects(() => promise, Error, "boom!");
}
});
Deno.test(async function arrayFromAsync() {
// Taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fromAsync#examples
// Thank you.
const asyncIterable = (async function* () {
for (let i = 0; i < 5; i++) {
await new Promise((resolve) => setTimeout(resolve, 10 * i));
yield i;
}
})();
const a = await Array.fromAsync(asyncIterable);
assertEquals(a, [0, 1, 2, 3, 4]);
const b = await Array.fromAsync(new Map([[1, 2], [3, 4]]));
assertEquals(b, [[1, 2], [3, 4]]);
});

View file

@ -291,3 +291,17 @@ interface BigUint64Array {
with(index: number, value: number): BigUint64Array;
}
// NOTE(bartlomieju): taken from https://github.com/microsoft/TypeScript/issues/50803#issuecomment-1249030430
// while we wait for these types to officially ship
interface ArrayConstructor {
fromAsync<T>(
iterableOrArrayLike: AsyncIterable<T> | Iterable<T | Promise<T>> | ArrayLike<T | Promise<T>>,
): Promise<T[]>;
fromAsync<T, U>(
iterableOrArrayLike: AsyncIterable<T> | Iterable<T> | ArrayLike<T>,
mapFn: (value: Awaited<T>) => U,
thisArg?: any,
): Promise<Awaited<U>[]>;
}