From 50a3d3331706428ea96aad6f8ae90c12d6f24155 Mon Sep 17 00:00:00 2001 From: Divya B Date: Fri, 5 Dec 2025 23:12:15 +0530 Subject: [PATCH 1/2] errors: add ERR_AMBIGUOUS_MODULE_SYNTAX message --- lib/internal/errors.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/internal/errors.js b/lib/internal/errors.js index 23a54754e2a321..d9550c151c9595 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -1133,6 +1133,11 @@ E('ERR_ACCESS_DENIED', return msg; }, Error); + + E('ERR_AMBIGUOUS_MODULE_SYNTAX', + 'The module syntax is ambiguous. This file mixes CommonJS (require, module.exports) and ES Module features (import, export, or top-level await). Use either CommonJS or ES Modules consistently in the same file.', + Error); + E('ERR_AMBIGUOUS_ARGUMENT', 'The "%s" argument is ambiguous. %s', TypeError); E('ERR_ARG_NOT_ITERABLE', '%s must be iterable', TypeError); E('ERR_ASSERTION', '%s', Error); From 4b35ee1e74f1dc3de3148b511458c45f72e9a0a7 Mon Sep 17 00:00:00 2001 From: Divya B Date: Tue, 9 Dec 2025 09:44:36 +0530 Subject: [PATCH 2/2] test: add test for ERR_AMBIGUOUS_MODULE_SYNTAX --- .../es-module/test-ambiguous-module-syntax.js | 31 +++++++++++++++++++ .../es-modules/ambiguous-mixed-syntax.js | 8 +++++ 2 files changed, 39 insertions(+) create mode 100644 test/es-module/test-ambiguous-module-syntax.js create mode 100644 test/fixtures/es-modules/ambiguous-mixed-syntax.js diff --git a/test/es-module/test-ambiguous-module-syntax.js b/test/es-module/test-ambiguous-module-syntax.js new file mode 100644 index 00000000000000..060ddb82543faa --- /dev/null +++ b/test/es-module/test-ambiguous-module-syntax.js @@ -0,0 +1,31 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const { spawnSync } = require('child_process'); +const fixtures = require('../common/fixtures'); + +// Skip if ESM is not supported in this environment +common.skipIfESMUnsupported(__filename); + +// Fixture that mixes CJS + ESM +const entry = fixtures.path('es-modules', 'ambiguous-mixed-syntax.js'); + +const result = spawnSync(process.execPath, [entry], { + encoding: 'utf8' +}); + +// Node should exit with an error +assert.notStrictEqual(result.status, 0); + +// Error code must be present +assert.ok( + /ERR_AMBIGUOUS_MODULE_SYNTAX/.test(result.stderr), + `stderr did not contain ERR_AMBIGUOUS_MODULE_SYNTAX:\n${result.stderr}` +); + +// Your new explanatory message should appear +assert.ok( + /mixes CommonJS/.test(result.stderr), + `stderr did not contain expected message:\n${result.stderr}` +); diff --git a/test/fixtures/es-modules/ambiguous-mixed-syntax.js b/test/fixtures/es-modules/ambiguous-mixed-syntax.js new file mode 100644 index 00000000000000..18631e97461564 --- /dev/null +++ b/test/fixtures/es-modules/ambiguous-mixed-syntax.js @@ -0,0 +1,8 @@ +// This file intentionally mixes CommonJS and ES Module syntax +// to trigger ERR_AMBIGUOUS_MODULE_SYNTAX. + +// CommonJS +const fs = require('fs'); + +// ES Modules +export const value = 123;