// Flags: --experimental-require-module 'use strict'; require('../common'); const assert = require('assert'); const { spawnSyncAndExit } = require('../common/child_process'); const fixtures = require('../common/fixtures'); const message = /require\(\) cannot be used on an ESM graph with top-level await/; const code = 'ERR_REQUIRE_ASYNC_MODULE'; assert.throws(() => { require('../fixtures/es-modules/tla/rejected.mjs'); }, { message, code }); assert.throws(() => { require('../fixtures/es-modules/tla/unresolved.mjs'); }, { message, code }); assert.throws(() => { require('../fixtures/es-modules/tla/resolved.mjs'); }, { message, code }); // Test TLA in inner graphs. assert.throws(() => { require('../fixtures/es-modules/tla/parent.mjs'); }, { message, code }); { spawnSyncAndExit(process.execPath, [ '--experimental-require-module', fixtures.path('es-modules/tla/require-execution.js'), ], { signal: null, status: 1, stderr(output) { assert.doesNotMatch(output, /I am executed/); assert.match(output, message); return true; }, stdout: '' }); } { spawnSyncAndExit(process.execPath, [ '--experimental-require-module', '--experimental-print-required-tla', fixtures.path('es-modules/tla/require-execution.js'), ], { signal: null, status: 1, stderr(output) { assert.match(output, /I am executed/); assert.match(output, /Error: unexpected top-level await at.*execution\.mjs:3/); assert.match(output, /await Promise\.resolve\('hi'\)/); assert.match(output, message); return true; }, stdout: '' }); }