From d24d8f1f78f6843f3983613ab833be78dcf686f2 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 9 Aug 2023 00:32:00 -0700 Subject: [PATCH] fix: avoid package.json check on built-in modules (#39418) --- ..._do_not_resolve_electron_entrypoints.patch | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/patches/node/fix_do_not_resolve_electron_entrypoints.patch b/patches/node/fix_do_not_resolve_electron_entrypoints.patch index 8d700b8fab6b..b87b4d4a1b26 100644 --- a/patches/node/fix_do_not_resolve_electron_entrypoints.patch +++ b/patches/node/fix_do_not_resolve_electron_entrypoints.patch @@ -6,19 +6,42 @@ Subject: fix: do not resolve electron entrypoints This wastes fs cycles and can result in strange behavior if this path actually exists on disk diff --git a/lib/internal/modules/run_main.js b/lib/internal/modules/run_main.js -index 5a50d5d6afab6e6648f72a1c0efa1df4cd80bcd9..0be45309028b00a6957ee473322a9452a7fa7d67 100644 +index 5a50d5d6afab6e6648f72a1c0efa1df4cd80bcd9..ebc9999358ccf16689dc02322eb1aeb86355f39b 100644 --- a/lib/internal/modules/run_main.js +++ b/lib/internal/modules/run_main.js -@@ -13,6 +13,12 @@ const { +@@ -3,6 +3,7 @@ + const { + ObjectCreate, + StringPrototypeEndsWith, ++ StringPrototypeStartsWith, + } = primordials; + const CJSLoader = require('internal/modules/cjs/loader'); + const { Module, toRealPath, readPackageScope } = CJSLoader; +@@ -13,6 +14,13 @@ const { } = require('internal/modules/esm/handle_process_exit'); function resolveMainPath(main) { + // For built-in modules used as the main entry point we _never_ + // want to waste cycles resolving them to file paths on disk + // that actually might exist -+ if (typeof main === 'string' && main.startsWith('electron/js2c')) { ++ if (typeof main === 'string' && StringPrototypeStartsWith(main, 'electron/js2c')) { + return main; + } ++ // Note extension resolution for the main entry point can be deprecated in a // future major. // Module._findPath is monkey-patchable here. +@@ -28,6 +36,13 @@ function resolveMainPath(main) { + } + + function shouldUseESMLoader(mainPath) { ++ // For built-in modules used as the main entry point we _never_ ++ // want to waste cycles resolving them to file paths on disk ++ // that actually might exist ++ if (typeof mainPath === 'string' && StringPrototypeStartsWith(mainPath, 'electron/js2c')) { ++ return false; ++ } ++ + /** + * @type {string[]} userLoaders A list of custom loaders registered by the user + * (or an empty list when none have been registered).