Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: nodejs/node
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: main
Choose a base ref
...
head repository: himself65/node
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: himself65/fix-import
Choose a head ref
Able to merge. These branches can be automatically merged.
  • 1 commit
  • 4 files changed
  • 1 contributor

Commits on Jan 6, 2025

  1. esm: fix misleading error when import empty package.json

    himself65 committed Jan 6, 2025
    Copy the full SHA
    011628e View commit details
Showing with 28 additions and 4 deletions.
  1. +1 −1 src/node_file.cc
  2. +3 −3 test/es-module/test-cjs-legacyMainResolve.js
  3. +23 −0 test/es-module/test-import-empty.js
  4. +1 −0 test/fixtures/node_modules/empty/package.json
2 changes: 1 addition & 1 deletion src/node_file.cc
Original file line number Diff line number Diff line change
@@ -3493,7 +3493,7 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
}

THROW_ERR_MODULE_NOT_FOUND(isolate,
"Cannot find package '%s' imported from %s",
"Entry point '%s' resolved from '%s' incorrectly",
package_initial_file,
*module_base);
}
6 changes: 3 additions & 3 deletions test/es-module/test-cjs-legacyMainResolve.js
Original file line number Diff line number Diff line change
@@ -129,15 +129,15 @@ describe('legacyMainResolve', () => {
);
assert.throws(
() => legacyMainResolve(packageJsonUrl, { main: null }, packageJsonUrl),
{ message: /index\.js/, code: 'ERR_MODULE_NOT_FOUND' },
{ message: /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/, code: 'ERR_MODULE_NOT_FOUND' },
);
});

it('should not crash when cannot resolve to a file that contains special chars', () => {
const packageJsonUrl = pathToFileURL('/c/file%20with%20percents/package.json');
assert.throws(
() => legacyMainResolve(packageJsonUrl, { main: null }, packageJsonUrl),
{ message: /index\.js/, code: 'ERR_MODULE_NOT_FOUND' },
{ message: /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/, code: 'ERR_MODULE_NOT_FOUND' },
);
});

@@ -150,7 +150,7 @@ describe('legacyMainResolve', () => {
);
assert.throws(
() => legacyMainResolve(packageJsonUrl, { main: './index.node' }, packageJsonUrl),
{ message: /index\.node/, code: 'ERR_MODULE_NOT_FOUND' },
{ message: /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/, code: 'ERR_MODULE_NOT_FOUND' },
);
});

23 changes: 23 additions & 0 deletions test/es-module/test-import-empty.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
'use strict';

Check failure on line 1 in test/es-module/test-import-empty.js

GitHub Actions / test-linux

--- stdout --- ::debug::starting to run Import empty module ::debug::starting to run <anonymous> ::error title=<anonymous>,file=dir%20with $unusual"chars?'åß∂ƒ©∆¬…`/dir%20with $unusual"chars?'åß∂ƒ©∆¬…`/test/es-module/test-import-empty.js,line=18,col=12::Error [ERR_TEST_FAILURE]: The input did not match the regular expression /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/. Input: 'node:internal/modules/esm/resolve:204\n' + ' const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified);\n' + ' ^\n' + '\n' + 'Error: Entry point \'/home/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/node_modules/empty/index.js\' resolved from \'/home/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/[eval]\' incorrectly\n' + ' at legacyMainResolve (node:internal/modules/esm/resolve:204:26)\n' + ' at packageResolve (node:internal/modules/esm/resolve:778:12)\n' + ' at moduleResolve (node:internal/modules/esm/resolve:854:18)\n' + ' at defaultResolve (node:internal/modules/esm/resolve:984:11)\n' + ' at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:716:12)\n' + ' at #cachedDefaultResolve (node:internal/modules/esm/loader:640:25)\n' + ' at ModuleLoader.resolve (node:internal/modules/esm/loader:623:38)\n' + ' at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:276:38)\n' + ' at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:579:36)\n' + ' at TracingChannel.tracePromise (node:diagnostics_channel:344:14) {\n' + " code: 'ERR_MODULE_NOT_FOUND'\n" + '}\n' + '\n' + 'Node.js v24.0.0-pre\n' at async Promise.all (index 0) { code: 'ERR_TEST_FAILURE', failureType: 'testCodeFailure', cause: AssertionError [ERR_ASSERTION]: The input did not match the regular expression /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/. Input: 'node:internal/modules/esm/resolve:204\n' + ' const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified);\n' + ' ^\n' + '\n' + 'Error: Entry point \'/home/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/node_modules/empty/index.js\' resolved from \'/home/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/[eval]\' incorrectly\n' + ' at legacyMainResolve (node:internal/modules/esm/resolve:204:26)\n' + ' at packageResolve (node:internal/modules/esm/resolve:778:12)\n' + ' at moduleResolve (node:internal/modules/esm/resolve:854:18)\n' + ' at defaultResolve (node:internal/modules/esm/resolve:984:11)\n' + ' at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:716:12)\n' + ' at #cachedDefaultResolve (node:internal/modules/esm/loader:640:25)\n' + ' at ModuleLoader.resolve (node:internal/modules/esm/loader:623:38)\n' + ' at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:276:38)\n' + ' at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:579:36)\n' + ' at TracingChannel.tracePromise (node:diagnostics_channel:344:14) {\n' + " code: 'ERR_MODULE_NOT_FOUND'\n" + '}\n' + '\n' + 'Node.js v24.0.0-pre\n' at TestContext.<anonymous> (/home/runner/work/node/node/dir%20with $unusual"chars?'åß∂ƒ©∆¬…`/test/es-module/test-import-empty.js:18:12) at async Test.run (node:internal/test_runner/test:917:9) at async Promise.all (index 0) at async Suite.run (node:internal/test_runner/test:1296:7) at async startSubtestAfterBootstrap (node:internal/test_runner/harness:297:3) { generatedMessage: true, code: 'ERR_ASSERTION', actual: 'node:internal/modules/esm/resolve:204\n const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified);\n ^\n\nError: Entry point \'/home/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/node_modules/empty/index.js\

Check failure on line 1 in test/es-module/test-import-empty.js

GitHub Actions / test-macOS (macos-13)

--- stdout --- ::debug::starting to run Import empty module ::debug::starting to run <anonymous> ::error title=<anonymous>,file=dir%20with $unusual"chars?'åß∂ƒ©∆¬…`/dir%20with $unusual"chars?'åß∂ƒ©∆¬…`/test/es-module/test-import-empty.js,line=18,col=12::Error [ERR_TEST_FAILURE]: The input did not match the regular expression /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/. Input: 'node:internal/modules/esm/resolve:204\n' + ' const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified);\n' + ' ^\n' + '\n' + 'Error: Entry point \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/node_modules/empty/index.js\' resolved from \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/[eval]\' incorrectly\n' + ' at legacyMainResolve (node:internal/modules/esm/resolve:204:26)\n' + ' at packageResolve (node:internal/modules/esm/resolve:778:12)\n' + ' at moduleResolve (node:internal/modules/esm/resolve:854:18)\n' + ' at defaultResolve (node:internal/modules/esm/resolve:984:11)\n' + ' at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:716:12)\n' + ' at #cachedDefaultResolve (node:internal/modules/esm/loader:640:25)\n' + ' at ModuleLoader.resolve (node:internal/modules/esm/loader:623:38)\n' + ' at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:276:38)\n' + ' at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:579:36)\n' + ' at TracingChannel.tracePromise (node:diagnostics_channel:344:14) {\n' + " code: 'ERR_MODULE_NOT_FOUND'\n" + '}\n' + '\n' + 'Node.js v24.0.0-pre\n' at async Promise.all (index 0) { code: 'ERR_TEST_FAILURE', failureType: 'testCodeFailure', cause: AssertionError [ERR_ASSERTION]: The input did not match the regular expression /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/. Input: 'node:internal/modules/esm/resolve:204\n' + ' const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified);\n' + ' ^\n' + '\n' + 'Error: Entry point \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/node_modules/empty/index.js\' resolved from \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/[eval]\' incorrectly\n' + ' at legacyMainResolve (node:internal/modules/esm/resolve:204:26)\n' + ' at packageResolve (node:internal/modules/esm/resolve:778:12)\n' + ' at moduleResolve (node:internal/modules/esm/resolve:854:18)\n' + ' at defaultResolve (node:internal/modules/esm/resolve:984:11)\n' + ' at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:716:12)\n' + ' at #cachedDefaultResolve (node:internal/modules/esm/loader:640:25)\n' + ' at ModuleLoader.resolve (node:internal/modules/esm/loader:623:38)\n' + ' at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:276:38)\n' + ' at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:579:36)\n' + ' at TracingChannel.tracePromise (node:diagnostics_channel:344:14) {\n' + " code: 'ERR_MODULE_NOT_FOUND'\n" + '}\n' + '\n' + 'Node.js v24.0.0-pre\n' at TestContext.<anonymous> (/Users/runner/work/node/node/dir%20with $unusual"chars?'åß∂ƒ©∆¬…`/test/es-module/test-import-empty.js:18:12) at async Test.run (node:internal/test_runner/test:917:9) at async Promise.all (index 0) at async Suite.run (node:internal/test_runner/test:1296:7) at async startSubtestAfterBootstrap (node:internal/test_runner/harness:297:3) { generatedMessage: true, code: 'ERR_ASSERTION', actual: 'node:internal/modules/esm/resolve:204\n const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified);\n ^\n\nError: Entry point \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/node_modules/empty/ind

Check failure on line 1 in test/es-module/test-import-empty.js

GitHub Actions / test-macOS (macos-14)

--- stdout --- ::debug::starting to run Import empty module ::debug::starting to run <anonymous> ::error title=<anonymous>,file=dir%20with $unusual"chars?'åß∂ƒ©∆¬…`/dir%20with $unusual"chars?'åß∂ƒ©∆¬…`/test/es-module/test-import-empty.js,line=18,col=12::Error [ERR_TEST_FAILURE]: The input did not match the regular expression /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/. Input: 'node:internal/modules/esm/resolve:204\n' + ' const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified);\n' + ' ^\n' + '\n' + 'Error: Entry point \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/node_modules/empty/index.js\' resolved from \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/[eval]\' incorrectly\n' + ' at legacyMainResolve (node:internal/modules/esm/resolve:204:26)\n' + ' at packageResolve (node:internal/modules/esm/resolve:778:12)\n' + ' at moduleResolve (node:internal/modules/esm/resolve:854:18)\n' + ' at defaultResolve (node:internal/modules/esm/resolve:984:11)\n' + ' at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:716:12)\n' + ' at #cachedDefaultResolve (node:internal/modules/esm/loader:640:25)\n' + ' at ModuleLoader.resolve (node:internal/modules/esm/loader:623:38)\n' + ' at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:276:38)\n' + ' at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:579:36)\n' + ' at TracingChannel.tracePromise (node:diagnostics_channel:344:14) {\n' + " code: 'ERR_MODULE_NOT_FOUND'\n" + '}\n' + '\n' + 'Node.js v24.0.0-pre\n' at async Promise.all (index 0) { code: 'ERR_TEST_FAILURE', failureType: 'testCodeFailure', cause: AssertionError [ERR_ASSERTION]: The input did not match the regular expression /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/. Input: 'node:internal/modules/esm/resolve:204\n' + ' const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified);\n' + ' ^\n' + '\n' + 'Error: Entry point \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/node_modules/empty/index.js\' resolved from \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/[eval]\' incorrectly\n' + ' at legacyMainResolve (node:internal/modules/esm/resolve:204:26)\n' + ' at packageResolve (node:internal/modules/esm/resolve:778:12)\n' + ' at moduleResolve (node:internal/modules/esm/resolve:854:18)\n' + ' at defaultResolve (node:internal/modules/esm/resolve:984:11)\n' + ' at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:716:12)\n' + ' at #cachedDefaultResolve (node:internal/modules/esm/loader:640:25)\n' + ' at ModuleLoader.resolve (node:internal/modules/esm/loader:623:38)\n' + ' at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:276:38)\n' + ' at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:579:36)\n' + ' at TracingChannel.tracePromise (node:diagnostics_channel:344:14) {\n' + " code: 'ERR_MODULE_NOT_FOUND'\n" + '}\n' + '\n' + 'Node.js v24.0.0-pre\n' at TestContext.<anonymous> (/Users/runner/work/node/node/dir%20with $unusual"chars?'åß∂ƒ©∆¬…`/test/es-module/test-import-empty.js:18:12) at async Test.run (node:internal/test_runner/test:917:9) at async Promise.all (index 0) at async Suite.run (node:internal/test_runner/test:1296:7) at async startSubtestAfterBootstrap (node:internal/test_runner/harness:297:3) { generatedMessage: true, code: 'ERR_ASSERTION', actual: 'node:internal/modules/esm/resolve:204\n const resolvedOption = FSLegacyMainResolve(pkgPath, packageConfig.main, baseStringified);\n ^\n\nError: Entry point \'/Users/runner/work/node/node/dir%20with $unusual"chars?\'åß∂ƒ©∆¬…`/test/fixtures/node_modules/empty/ind

const { spawnPromisified } = require('../common');
const fixtures = require('../common/fixtures.js');
const assert = require('node:assert');
const { execPath } = require('node:process');
const { describe, it } = require('node:test');

describe('Import empty module', { concurrency: true }, () => {
it(async () => {
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
'--no-warnings',
'--eval',
'import("empty")',
], {
cwd: fixtures.path(),
});
assert.match(stderr, /Entry point '[\w\S]+' resolved from '[\w\S]+' incorrectly/);
assert.strictEqual(stdout, '');
assert.strictEqual(code, 1);
assert.strictEqual(signal, null);
});
});
1 change: 1 addition & 0 deletions test/fixtures/node_modules/empty/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.