Skip to content

Commit

Permalink
lib: improve error message when index not found on cjs
Browse files Browse the repository at this point in the history
PR-URL: #53859
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Marco Ippolito <[email protected]>
  • Loading branch information
H4ad authored Jul 20, 2024
1 parent 6fc0218 commit cf8e535
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 9 deletions.
15 changes: 8 additions & 7 deletions src/node_file.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3185,6 +3185,8 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
return;
}

std::string package_initial_file = "";

ada::result<ada::url_aggregator> file_path_url;
std::optional<std::string> initial_file_path;
std::string file_path;
Expand All @@ -3207,6 +3209,8 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& 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]);

Expand Down Expand Up @@ -3262,13 +3266,10 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {
}
}

std::optional<std::string> module_path =
node::url::FileURLToPath(env, *package_json_url);
std::optional<std::string> module_base;
if (package_initial_file == "")
package_initial_file = *initial_file_path + ".js";

if (!module_path.has_value()) {
return;
}
std::optional<std::string> module_base;

if (args.Length() >= 3 && args[2]->IsString()) {
Utf8Value utf8_base_path(isolate, args[2]);
Expand All @@ -3293,7 +3294,7 @@ void BindingData::LegacyMainResolve(const FunctionCallbackInfo<Value>& args) {

THROW_ERR_MODULE_NOT_FOUND(isolate,
"Cannot find package '%s' imported from %s",
*module_path,
package_initial_file,
*module_base);
}

Expand Down
17 changes: 15 additions & 2 deletions test/es-module/test-cjs-legacyMainResolve.js
Original file line number Diff line number Diff line change
Expand Up @@ -129,15 +129,28 @@ describe('legacyMainResolve', () => {
);
assert.throws(
() => legacyMainResolve(packageJsonUrl, { main: null }, packageJsonUrl),
{ code: 'ERR_MODULE_NOT_FOUND' },
{ message: /index\.js/, 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),
{ 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' },
);
});

Expand Down

0 comments on commit cf8e535

Please sign in to comment.