From cf8e5356d9fbbdca40d9b9fe062b3c292b7e91e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vinicius=20Louren=C3=A7o?= <12551007+H4ad@users.noreply.github.com> Date: Fri, 19 Jul 2024 21:22:24 -0300 Subject: [PATCH] lib: improve error message when index not found on cjs PR-URL: https://github.com/nodejs/node/pull/53859 Reviewed-By: James M Snell Reviewed-By: Marco Ippolito --- src/node_file.cc | 15 ++++++++------- test/es-module/test-cjs-legacyMainResolve.js | 17 +++++++++++++++-- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/node_file.cc b/src/node_file.cc index f90283e9f2a54a..0839463d5079e3 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -3185,6 +3185,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; @@ -3207,6 +3209,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]); @@ -3262,13 +3266,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]); @@ -3293,7 +3294,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' }, ); });