mirror of
https://github.com/nodejs/node.git
synced 2025-12-28 07:50:41 +00:00
Some checks are pending
Coverage Linux (without intl) / coverage-linux-without-intl (push) Waiting to run
Coverage Linux / coverage-linux (push) Waiting to run
Coverage Windows / coverage-windows (push) Waiting to run
Test and upload documentation to artifacts / build-docs (push) Waiting to run
Linters / lint-addon-docs (push) Waiting to run
Linters / lint-cpp (push) Waiting to run
Linters / format-cpp (push) Waiting to run
Linters / lint-js-and-md (push) Waiting to run
Linters / lint-py (push) Waiting to run
Linters / lint-yaml (push) Waiting to run
Linters / lint-sh (push) Waiting to run
Linters / lint-codeowners (push) Waiting to run
Linters / lint-pr-url (push) Waiting to run
Linters / lint-readme (push) Waiting to run
Notify on Push / Notify on Force Push on `main` (push) Waiting to run
Notify on Push / Notify on Push on `main` that lacks metadata (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
Expose `hasTopLevelAwait` and `hasAsyncGraph` on `vm.SourceTextModule`. `hasAsyncGraph` requires the module to be instantiated first. PR-URL: https://github.com/nodejs/node/pull/59865 Fixes: https://github.com/nodejs/node/issues/59656 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
68 lines
1.4 KiB
JavaScript
68 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
// Flags: --experimental-vm-modules
|
|
|
|
require('../common');
|
|
|
|
const assert = require('assert');
|
|
|
|
const { SourceTextModule } = require('vm');
|
|
const test = require('node:test');
|
|
|
|
test('module is not instantiated yet', () => {
|
|
const foo = new SourceTextModule(`
|
|
export const foo = 4
|
|
export default 5;
|
|
`);
|
|
assert.throws(() => foo.hasAsyncGraph(), {
|
|
code: 'ERR_VM_MODULE_STATUS',
|
|
});
|
|
});
|
|
|
|
test('simple module with top-level await', () => {
|
|
const foo = new SourceTextModule(`
|
|
export const foo = 4
|
|
export default 5;
|
|
|
|
await 0;
|
|
`);
|
|
foo.linkRequests([]);
|
|
foo.instantiate();
|
|
|
|
assert.strictEqual(foo.hasAsyncGraph(), true);
|
|
});
|
|
|
|
test('simple module with non top-level await', () => {
|
|
const foo = new SourceTextModule(`
|
|
export const foo = 4
|
|
export default 5;
|
|
|
|
export async function f() {
|
|
await 0;
|
|
}
|
|
`);
|
|
foo.linkRequests([]);
|
|
foo.instantiate();
|
|
|
|
assert.strictEqual(foo.hasAsyncGraph(), false);
|
|
});
|
|
|
|
test('module with a dependency containing top-level await', () => {
|
|
const foo = new SourceTextModule(`
|
|
export const foo = 4
|
|
export default 5;
|
|
|
|
await 0;
|
|
`);
|
|
foo.linkRequests([]);
|
|
|
|
const bar = new SourceTextModule(`
|
|
export { foo } from 'foo';
|
|
`);
|
|
bar.linkRequests([foo]);
|
|
bar.instantiate();
|
|
|
|
assert.strictEqual(foo.hasAsyncGraph(), true);
|
|
assert.strictEqual(bar.hasAsyncGraph(), true);
|
|
});
|