From 21bfcaa171eeb1c068e497267e077e5298872994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E6=9D=89?= Date: Tue, 7 Jun 2022 13:16:41 +0800 Subject: [PATCH 1/3] loader: make require.resolve throw error for unknown builtin modules Fixes: https://github.com/nodejs/node/issues/43274 --- lib/internal/modules/cjs/loader.js | 19 ++++++++++++------- test/parallel/test-require-resolve.js | 13 +++++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index b7fc3f9b2a1ea5..1696c8f43b8c47 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -780,19 +780,19 @@ Module._load = function(request, parent, isMain) { } } - const filename = Module._resolveFilename(request, parent, isMain); - if (StringPrototypeStartsWith(filename, 'node:')) { + if (StringPrototypeStartsWith(request, 'node:')) { // Slice 'node:' prefix - const id = StringPrototypeSlice(filename, 5); + const id = StringPrototypeSlice(request, 5); const module = loadNativeModule(id, request); if (!module?.canBeRequiredByUsers) { - throw new ERR_UNKNOWN_BUILTIN_MODULE(filename); + throw new ERR_UNKNOWN_BUILTIN_MODULE(request); } return module.exports; } + const filename = Module._resolveFilename(request, parent, isMain); const cachedModule = Module._cache[filename]; if (cachedModule !== undefined) { updateChildren(parent, cachedModule, true); @@ -854,9 +854,14 @@ Module._load = function(request, parent, isMain) { }; Module._resolveFilename = function(request, parent, isMain, options) { - if (StringPrototypeStartsWith(request, 'node:') || - (NativeModule.canBeRequiredByUsers(request) && - NativeModule.canBeRequiredWithoutScheme(request))) { + if (( + StringPrototypeStartsWith(request, 'node:') && + NativeModule.canBeRequiredByUsers(StringPrototypeSlice(request, 5)) + ) || + ( + NativeModule.canBeRequiredByUsers(request) && + NativeModule.canBeRequiredWithoutScheme(request) + )) { return request; } diff --git a/test/parallel/test-require-resolve.js b/test/parallel/test-require-resolve.js index e7125e39faf7c3..b12220f4d18da5 100644 --- a/test/parallel/test-require-resolve.js +++ b/test/parallel/test-require-resolve.js @@ -80,3 +80,16 @@ require(fixtures.path('resolve-paths', 'default', 'verify-paths.js')); assert.strictEqual(resolvedPaths.includes('/node_modules'), false); }); } + +{ + assert.strictEqual(require.resolve('node:test'), 'node:test'); + assert.strictEqual(require.resolve('node:fs'), 'node:fs'); + + assert.throws( + () => require.resolve('node:unknown'), + { + code: 'MODULE_NOT_FOUND', + message: /^Cannot find module 'node:unknown'/, + }, + ); +} From 9bbf815c2af774b2a4a181c66eb41d037ab0597c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E6=9D=89?= Date: Tue, 7 Jun 2022 22:27:06 +0800 Subject: [PATCH 2/3] Update lib/internal/modules/cjs/loader.js Co-authored-by: Antoine du Hamel --- lib/internal/modules/cjs/loader.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 1696c8f43b8c47..ce548408dc42cd 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -854,14 +854,15 @@ Module._load = function(request, parent, isMain) { }; Module._resolveFilename = function(request, parent, isMain, options) { - if (( - StringPrototypeStartsWith(request, 'node:') && - NativeModule.canBeRequiredByUsers(StringPrototypeSlice(request, 5)) - ) || - ( - NativeModule.canBeRequiredByUsers(request) && - NativeModule.canBeRequiredWithoutScheme(request) - )) { + if ( + ( + StringPrototypeStartsWith(request, 'node:') && + NativeModule.canBeRequiredByUsers(StringPrototypeSlice(request, 5)) + ) || ( + NativeModule.canBeRequiredByUsers(request) && + NativeModule.canBeRequiredWithoutScheme(request) + ) + ) { return request; } From c65f329dd7f2f84f81cb7c66a7b0fff61690d5bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E6=9D=89?= Date: Tue, 7 Jun 2022 22:28:07 +0800 Subject: [PATCH 3/3] Update test/parallel/test-require-resolve.js Co-authored-by: Antoine du Hamel --- test/parallel/test-require-resolve.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/parallel/test-require-resolve.js b/test/parallel/test-require-resolve.js index b12220f4d18da5..ab58033e2c9b5c 100644 --- a/test/parallel/test-require-resolve.js +++ b/test/parallel/test-require-resolve.js @@ -87,9 +87,6 @@ require(fixtures.path('resolve-paths', 'default', 'verify-paths.js')); assert.throws( () => require.resolve('node:unknown'), - { - code: 'MODULE_NOT_FOUND', - message: /^Cannot find module 'node:unknown'/, - }, + { code: 'MODULE_NOT_FOUND' }, ); }