Skip to content

Commit abf07ec

Browse files
committed
loader: make require.resolve throw error for unknown builtin modules
Fixes: #43274
1 parent 797e41c commit abf07ec

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

lib/internal/modules/cjs/loader.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -854,9 +854,14 @@ Module._load = function(request, parent, isMain) {
854854
};
855855

856856
Module._resolveFilename = function(request, parent, isMain, options) {
857-
if (StringPrototypeStartsWith(request, 'node:') ||
858-
(NativeModule.canBeRequiredByUsers(request) &&
859-
NativeModule.canBeRequiredWithoutScheme(request))) {
857+
if ((
858+
StringPrototypeStartsWith(request, 'node:') &&
859+
NativeModule.canBeRequiredByUsers(StringPrototypeSlice(request, 5))
860+
) ||
861+
(
862+
NativeModule.canBeRequiredByUsers(request) &&
863+
NativeModule.canBeRequiredWithoutScheme(request)
864+
)) {
860865
return request;
861866
}
862867

test/parallel/test-require-resolve.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,18 @@ require(fixtures.path('resolve-paths', 'default', 'verify-paths.js'));
8080
assert.strictEqual(resolvedPaths.includes('/node_modules'), false);
8181
});
8282
}
83+
84+
// For direct use of require expressions inside of CJS modules,
85+
// all kinds of specifiers should work without issue.
86+
{
87+
assert.strictEqual(require.resolve('node:test'), 'node:test');
88+
assert.strictEqual(require.resolve('node:fs'), 'node:fs');
89+
90+
assert.throws(
91+
() => require.resolve('node:unknown'),
92+
{
93+
code: 'MODULE_NOT_FOUND',
94+
message: /^Cannot find module 'node:unknown'/,
95+
},
96+
);
97+
}

0 commit comments

Comments
 (0)