'use strict'; // Flags: --experimental-vm-modules --js-source-phase-imports require('../common'); const assert = require('assert'); const { SourceTextModule } = require('vm'); const test = require('node:test'); test('simple graph', async function simple() { const foo = new SourceTextModule('export default 5;'); foo.linkRequests([]); globalThis.fiveResult = undefined; const bar = new SourceTextModule('import five from "foo"; fiveResult = five'); bar.linkRequests([foo]); bar.instantiate(); await bar.evaluate(); assert.strictEqual(globalThis.fiveResult, 5); delete globalThis.fiveResult; }); test('invalid link values', () => { const invalidValues = [ undefined, null, {}, SourceTextModule.prototype, ]; for (const value of invalidValues) { const module = new SourceTextModule('import "foo"'); assert.throws(() => module.linkRequests([value]), { code: 'ERR_VM_MODULE_NOT_MODULE', }); } }); test('mismatch linkage', () => { const foo = new SourceTextModule('export default 5;'); foo.linkRequests([]); // Link with more modules than requested. const bar = new SourceTextModule('import foo from "foo";'); assert.throws(() => bar.linkRequests([foo, foo]), { code: 'ERR_MODULE_LINK_MISMATCH', }); // Link with fewer modules than requested. const baz = new SourceTextModule('import foo from "foo"; import bar from "bar";'); assert.throws(() => baz.linkRequests([foo]), { code: 'ERR_MODULE_LINK_MISMATCH', }); // Link a same module cache key with different instances. const qux = new SourceTextModule(` import foo from "foo"; import source Foo from "foo"; `); assert.throws(() => qux.linkRequests([foo, bar]), { code: 'ERR_MODULE_LINK_MISMATCH', }); }); test('instantiate error should hint about module identifier', () => { const foo = new SourceTextModule('import bar from "bar"', { identifier: 'file://foo' }); const bar = new SourceTextModule('import "unknown"', { identifier: 'file://bar' }); foo.linkRequests([bar]); assert.throws(() => foo.instantiate(), { message: `request for 'unknown' can not be resolved on module 'file://bar' that is not linked`, code: 'ERR_VM_MODULE_LINK_FAILURE', }); });