From 3ffc3d73ac75cf85f2c2ab57fa8361431ca07102 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Thu, 4 Sep 2025 12:01:32 +0200 Subject: [PATCH] esm: fix missed renaming in ModuleJob.runSync MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://redirect.github.com/nodejs/node/pull/59675 missed a case when renaming .async to .hasAsyncGraph. This fixes that and add a test that would previously crash with the missed rename. PR-URL: https://github.com/nodejs/node/pull/59724 Refs: https://github.com/nodejs/node/pull/59675 Reviewed-By: Chengzhong Wu Reviewed-By: Ulises Gascón Reviewed-By: Marco Ippolito --- lib/internal/modules/esm/module_job.js | 2 +- .../test-import-require-tla-twice.js | 21 +++++++++++++++++++ .../import-require-tla-twice/hook.js | 6 ++++++ .../import-require-tla-twice/require-tla.js | 11 ++++++++++ .../import-require-tla-twice/tla.mjs | 1 + 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 test/es-module/test-import-require-tla-twice.js create mode 100644 test/fixtures/es-modules/import-require-tla-twice/hook.js create mode 100644 test/fixtures/es-modules/import-require-tla-twice/require-tla.js create mode 100644 test/fixtures/es-modules/import-require-tla-twice/tla.mjs diff --git a/lib/internal/modules/esm/module_job.js b/lib/internal/modules/esm/module_job.js index 3b48233d63..82f8961b16 100644 --- a/lib/internal/modules/esm/module_job.js +++ b/lib/internal/modules/esm/module_job.js @@ -335,7 +335,7 @@ class ModuleJob extends ModuleJobBase { const parentFilename = urlToFilename(parent?.filename); this.module.hasAsyncGraph ??= this.module.isGraphAsync(); - if (this.module.async && !getOptionValue('--experimental-print-required-tla')) { + if (this.module.hasAsyncGraph && !getOptionValue('--experimental-print-required-tla')) { throw new ERR_REQUIRE_ASYNC_MODULE(filename, parentFilename); } if (status === kInstantiated) { diff --git a/test/es-module/test-import-require-tla-twice.js b/test/es-module/test-import-require-tla-twice.js new file mode 100644 index 0000000000..a7cb32a983 --- /dev/null +++ b/test/es-module/test-import-require-tla-twice.js @@ -0,0 +1,21 @@ +'use strict'; +// This tests that in the require() in imported CJS can retry loading an ESM with TLA +// twice and get the correct error both times. + +require('../common'); +const { spawnSyncAndAssert } = require('../common/child_process'); +const fixtures = require('../common/fixtures'); +const assert = require('assert'); + +spawnSyncAndAssert( + process.execPath, + ['--import', fixtures.fileURL('es-modules', 'import-require-tla-twice', 'hook.js'), + fixtures.path('es-modules', 'import-require-tla-twice', 'require-tla.js'), + ], + { + stdout(output) { + const matches = output.matchAll(/e\.code === ERR_REQUIRE_ASYNC_MODULE true/g); + assert.strictEqual([...matches].length, 2); + } + } +); diff --git a/test/fixtures/es-modules/import-require-tla-twice/hook.js b/test/fixtures/es-modules/import-require-tla-twice/hook.js new file mode 100644 index 0000000000..b1a32daad2 --- /dev/null +++ b/test/fixtures/es-modules/import-require-tla-twice/hook.js @@ -0,0 +1,6 @@ +const { registerHooks } = require('module'); +registerHooks({ + load(url, context, nextLoad) { + return nextLoad(url, context); + } +}); diff --git a/test/fixtures/es-modules/import-require-tla-twice/require-tla.js b/test/fixtures/es-modules/import-require-tla-twice/require-tla.js new file mode 100644 index 0000000000..1959ac4779 --- /dev/null +++ b/test/fixtures/es-modules/import-require-tla-twice/require-tla.js @@ -0,0 +1,11 @@ +try { + require('./tla.mjs'); +} catch (e) { + console.log('e.code === ERR_REQUIRE_ASYNC_MODULE', e.code === 'ERR_REQUIRE_ASYNC_MODULE'); +} + +try { + require('./tla.mjs'); +} catch (e) { + console.log('e.code === ERR_REQUIRE_ASYNC_MODULE', e.code === 'ERR_REQUIRE_ASYNC_MODULE'); +} diff --git a/test/fixtures/es-modules/import-require-tla-twice/tla.mjs b/test/fixtures/es-modules/import-require-tla-twice/tla.mjs new file mode 100644 index 0000000000..143bce3586 --- /dev/null +++ b/test/fixtures/es-modules/import-require-tla-twice/tla.mjs @@ -0,0 +1 @@ +await Promise.resolve('1');