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); 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;