import { mustCall, spawnPromisified } from '../common/index.mjs'; import { ok, match, notStrictEqual } from 'node:assert'; import { spawn as spawnAsync } from 'node:child_process'; import { execPath } from 'node:process'; import { describe, it } from 'node:test'; describe('ESM: http import via CLI', { concurrency: true }, () => { const disallowedSpecifier = 'http://example.com'; it('should throw disallowed error for insecure protocol', async () => { const { code, stderr } = await spawnPromisified(execPath, [ '--experimental-network-imports', '--input-type=module', '--eval', `import ${JSON.stringify(disallowedSpecifier)}`, ]); notStrictEqual(code, 0); // [ERR_NETWORK_IMPORT_DISALLOWED]: import of 'http://example.com/' by // …/[eval1] is not supported: http can only be used to load local // resources (use https instead). match(stderr, /ERR_NETWORK_IMPORT_DISALLOWED/); ok(stderr.includes(disallowedSpecifier)); }); it('should throw disallowed error for insecure protocol in REPL', () => { const child = spawnAsync(execPath, [ '--experimental-network-imports', '--input-type=module', ]); child.stdin.end(`import ${JSON.stringify(disallowedSpecifier)}`); let stderr = ''; child.stderr.setEncoding('utf8'); child.stderr.on('data', (data) => stderr += data); child.on('close', mustCall((code, _signal) => { notStrictEqual(code, 0); // [ERR_NETWORK_IMPORT_DISALLOWED]: import of 'http://example.com/' by // …/[stdin] is not supported: http can only be used to load local // resources (use https instead). match(stderr, /\[ERR_NETWORK_IMPORT_DISALLOWED\]/); ok(stderr.includes(disallowedSpecifier)); })); }); });