diff --git a/src/node_file.cc b/src/node_file.cc index c59235b51cca9f..f0cccd9c596f25 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -3072,6 +3072,8 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo& args) { return; } + std::string package_initial_file = ""; + ada::result file_path_url; std::optional initial_file_path; std::string file_path; @@ -3094,6 +3096,8 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo& args) { FromNamespacedPath(&initial_file_path.value()); + package_initial_file = *initial_file_path; + for (int i = 0; i < legacy_main_extensions_with_main_end; i++) { file_path = *initial_file_path + std::string(legacy_main_extensions[i]); @@ -3149,13 +3153,10 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo& args) { } } - std::optional module_path = - node::url::FileURLToPath(env, *package_json_url); - std::optional module_base; + if (package_initial_file == "") + package_initial_file = *initial_file_path + ".js"; - if (!module_path.has_value()) { - return; - } + std::optional module_base; if (args.Length() >= 3 && args[2]->IsString()) { Utf8Value utf8_base_path(isolate, args[2]); @@ -3180,7 +3181,7 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo& args) { THROW_ERR_MODULE_NOT_FOUND(isolate, "Cannot find package '%s' imported from %s", - *module_path, + package_initial_file, *module_base); } diff --git a/test/es-module/test-cjs-legacyMainResolve.js b/test/es-module/test-cjs-legacyMainResolve.js index 1dc7d8faafe6eb..0bfeb567a22b1f 100644 --- a/test/es-module/test-cjs-legacyMainResolve.js +++ b/test/es-module/test-cjs-legacyMainResolve.js @@ -129,7 +129,7 @@ describe('legacyMainResolve', () => { ); assert.throws( () => legacyMainResolve(packageJsonUrl, { main: null }, packageJsonUrl), - { code: 'ERR_MODULE_NOT_FOUND' }, + { message: /index\.js/, code: 'ERR_MODULE_NOT_FOUND' }, ); }); @@ -137,7 +137,20 @@ describe('legacyMainResolve', () => { const packageJsonUrl = pathToFileURL('/c/file%20with%20percents/package.json'); assert.throws( () => legacyMainResolve(packageJsonUrl, { main: null }, packageJsonUrl), - { code: 'ERR_MODULE_NOT_FOUND' }, + { message: /index\.js/, code: 'ERR_MODULE_NOT_FOUND' }, + ); + }); + + it('should report main file on error message when not found', () => { + const packageJsonUrl = pathToFileURL( + path.resolve( + fixtures.path('/es-modules/legacy-main-resolver'), + 'package.json' + ) + ); + assert.throws( + () => legacyMainResolve(packageJsonUrl, { main: './index.node' }, packageJsonUrl), + { message: /index\.node/, code: 'ERR_MODULE_NOT_FOUND' }, ); });