electron/patches/node/fix_do_not_resolve_electron_entrypoints.patch
Shelley Vohr c63d0d61e7
chore: bump Node.js to v22.9.0 (#44281)
* chore: bump Node.js to v22.9.0

* build: drop base64 dep in GN build

https://github.com/nodejs/node/pull/52856

* build,tools: make addons tests work with GN

https://github.com/nodejs/node/pull/50737

* fs: add fast api for InternalModuleStat

https://github.com/nodejs/node/pull/51344

* src: move package_json_reader cache to c++

https://github.com/nodejs/node/pull/50322

* crypto: disable PKCS#1 padding for privateDecrypt

https://github.com/nodejs-private/node-private/pull/525

* src: move more crypto code to ncrypto

https://github.com/nodejs/node/pull/54320

* crypto: ensure valid point on elliptic curve in SubtleCrypto.importKey

https://github.com/nodejs/node/pull/50234

* src: shift more crypto impl details to ncrypto

https://github.com/nodejs/node/pull/54028

* src: switch crypto APIs to use Maybe<void>

https://github.com/nodejs/node/pull/54775

* crypto: remove DEFAULT_ENCODING

https://github.com/nodejs/node/pull/47182

* deps: update libuv to 1.47.0

https://github.com/nodejs/node/pull/50650

* build: fix conflict gyp configs

https://github.com/nodejs/node/pull/53605

* lib,src: drop --experimental-network-imports

https://github.com/nodejs/node/pull/53822

* esm: align sync and async load implementations

https://github.com/nodejs/node/pull/49152

* esm: remove unnecessary toNamespacedPath calls

https://github.com/nodejs/node/pull/53656

* module: detect ESM syntax by trying to recompile as SourceTextModule

https://github.com/nodejs/node/pull/52413

* test: adapt debugger tests to V8 11.4

https://github.com/nodejs/node/pull/49639

* lib: update usage of always on Atomics API

https://github.com/nodejs/node/pull/49639

* test: adapt test-fs-write to V8 internal changes

https://github.com/nodejs/node/pull/49639

* test: adapt to new V8 trusted memory spaces

https://github.com/nodejs/node/pull/50115

* deps: update libuv to 1.47.0

https://github.com/nodejs/node/pull/50650

* src: use non-deprecated v8::Uint8Array::kMaxLength

https://github.com/nodejs/node/pull/50115

* src: update default V8 platform to override functions with location

https://github.com/nodejs/node/pull/51362

* src: add missing TryCatch

https://github.com/nodejs/node/pull/51362

* lib,test: handle new Iterator global

https://github.com/nodejs/node/pull/51362

* src: use non-deprecated version of CreateSyntheticModule

https://github.com/nodejs/node/pull/50115

* src: remove calls to recently deprecated V8 APIs

https://github.com/nodejs/node/pull/52996

* src: use new V8 API to define stream accessor

https://github.com/nodejs/node/pull/53084

* src: do not use deprecated V8 API

https://github.com/nodejs/node/pull/53084

* src: do not use soon-to-be-deprecated V8 API

https://github.com/nodejs/node/pull/53174

* src: migrate to new V8 interceptors API

https://github.com/nodejs/node/pull/52745

* src: use supported API to get stalled TLA messages

https://github.com/nodejs/node/pull/51362

* module: print location of unsettled top-level await in entry points

https://github.com/nodejs/node/pull/51999

* test: make snapshot comparison more flexible

https://github.com/nodejs/node/pull/54375

* test: do not set concurrency on parallelized runs

https://github.com/nodejs/node/pull/52177

* src: move FromNamespacedPath to path.cc

https://github.com/nodejs/node/pull/53540

* test: adapt to new V8 trusted memory spaces

https://github.com/nodejs/node/pull/50115

* build: add option to enable clang-cl on Windows

https://github.com/nodejs/node/pull/52870

* chore: fixup patch indices

* chore: add/remove changed files

* esm: drop support for import assertions

https://github.com/nodejs/node/pull/54890

* build: compile with C++20 support

https://github.com/nodejs/node/pull/52838

* deps: update nghttp2 to 1.62.1

https://github.com/nodejs/node/pull/52966

* src: parse inspector profiles with simdjson

https://github.com/nodejs/node/pull/51783

* build: add GN build files

https://github.com/nodejs/node/pull/47637

* deps,lib,src: add experimental web storage

https://github.com/nodejs/node/pull/52435

* build: add missing BoringSSL dep

* src: rewrite task runner in c++

https://github.com/nodejs/node/pull/52609

* fixup! build: add GN build files

* src: stop using deprecated fields of v8::FastApiCallbackOptions

https://github.com/nodejs/node/pull/54077

* fix: shadow variable

* build: add back incorrectly removed SetAccessor patch

* fixup! fixup! build: add GN build files

* crypto: fix integer comparison in crypto for BoringSSL

* src,lib: reducing C++ calls of esm legacy main resolve

https://github.com/nodejs/node/pull/48325

* src: move more crypto_dh.cc code to ncrypto

https://github.com/nodejs/node/pull/54459

* chore: fixup GN files for previous commit

* src: move more crypto code to ncrypto

https://github.com/nodejs/node/pull/54320

* Fixup Perfetto ifdef guards

* fix: missing electron_natives dep

* fix: node_use_node_platform = false

* fix: include src/node_snapshot_stub.cc in libnode

* 5507047: [import-attributes] Remove support for import assertions

https://chromium-review.googlesource.com/c/v8/v8/+/5507047

* fix: restore v8-sandbox.h in filenames.json

* fix: re-add original-fs generation logic

* fix: ngtcp2 openssl dep

* test: try removing NAPI_VERSION undef

* chore(deps): bump @types/node

* src: move more crypto_dh.cc code to ncrypto

https://github.com/nodejs/node/pull/54459

* esm: remove unnecessary toNamespacedPath calls

https://github.com/nodejs/node/pull/53656

* buffer: fix out of range for toString

https://github.com/nodejs/node/pull/54553

* lib: rewrite AsyncLocalStorage without async_hooks

https://github.com/nodejs/node/pull/48528

* module: print amount of load time of a cjs module

https://github.com/nodejs/node/pull/52213

* test: skip reproducible snapshot test on 32-bit

https://github.com/nodejs/node/pull/53592

* fixup! src: move more crypto_dh.cc code to ncrypto

* test: adjust emittedUntil return type

* chore: remove redundant wpt streams patch

* fixup! chore(deps): bump @types/node

* fix: gn executable name on Windows

* fix: build on Windows

* fix: rename conflicting win32 symbols in //third_party/sqlite

On Windows otherwise we get:

lld-link: error: duplicate symbol: sqlite3_win32_write_debug
>>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:47987
>>>            obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj
>>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj

lld-link: error: duplicate symbol: sqlite3_win32_sleep
>>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48042
>>>            obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj
>>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj

lld-link: error: duplicate symbol: sqlite3_win32_is_nt
>>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48113
>>>            obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj
>>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj

lld-link: error: duplicate symbol: sqlite3_win32_utf8_to_unicode
>>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48470
>>>            obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj
>>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj

lld-link: error: duplicate symbol: sqlite3_win32_unicode_to_utf8
>>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48486
>>>            obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj
>>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj

lld-link: error: duplicate symbol: sqlite3_win32_mbcs_to_utf8
>>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48502
>>>            obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj
>>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj

lld-link: error: duplicate symbol: sqlite3_win32_mbcs_to_utf8_v2
>>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48518
>>>            obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj
>>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj

lld-link: error: duplicate symbol: sqlite3_win32_utf8_to_mbcs
>>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48534
>>>            obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj
>>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj

lld-link: error: duplicate symbol: sqlite3_win32_utf8_to_mbcs_v2
>>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48550
>>>            obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj
>>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj

* docs: remove unnecessary ts-expect-error after types bump

* src: move package resolver to c++

https://github.com/nodejs/node/pull/50322

* build: set ASAN detect_container_overflow=0

https://github.com/nodejs/node/issues/55584

* chore: fixup rebase

* test: disable failing ASAN test

* win: almost fix race detecting ESRCH in uv_kill

https://github.com/libuv/libuv/pull/4341
2024-11-04 13:41:56 -05:00

74 lines
3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samuel Attard <marshallofsound@electronjs.org>
Date: Wed, 26 Jul 2023 17:03:15 -0700
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/esm/load.js b/lib/internal/modules/esm/load.js
index 463e76cb1abc0c2fdddba4db2ca2e00f7c591e12..d7bc3c35c77b5bf9ec122b38248d0cf1f4d2a548 100644
--- a/lib/internal/modules/esm/load.js
+++ b/lib/internal/modules/esm/load.js
@@ -111,7 +111,7 @@ async function defaultLoad(url, context = kEmptyObject) {
source = null;
format ??= 'builtin';
} else if (format !== 'commonjs' || defaultType === 'module') {
- if (source == null) {
+ if (format !== 'electron' && source == null) {
({ responseURL, source } = await getSource(urlInstance, context));
context = { __proto__: context, source };
}
diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js
index 06b31af80ebbfbf35ec787a94f345775eb512ebf..deca5aa4b8829ba9921440fcb5c285a10e40c8f0 100644
--- a/lib/internal/modules/esm/translators.js
+++ b/lib/internal/modules/esm/translators.js
@@ -354,6 +354,9 @@ function cjsPreparseModuleExports(filename, source) {
if (module && module[kModuleExportNames] !== undefined) {
return { module, exportNames: module[kModuleExportNames] };
}
+ if (filename === 'electron') {
+ return { module, exportNames: new SafeSet(['default', ...Object.keys(module.exports)]) };
+ }
const loaded = Boolean(module);
if (!loaded) {
module = new CJSModule(filename);
diff --git a/lib/internal/modules/run_main.js b/lib/internal/modules/run_main.js
index 1e1a1ea46fc6c1b43cad4038ab0d9cdf21d6ba3d..95e2fa5479ea31559fdb5a2e03515f243b231b75 100644
--- a/lib/internal/modules/run_main.js
+++ b/lib/internal/modules/run_main.js
@@ -2,6 +2,7 @@
const {
StringPrototypeEndsWith,
+ StringPrototypeStartsWith,
globalThis,
} = primordials;
@@ -26,6 +27,13 @@ const {
* @param {string} main - Entry point path
*/
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' && StringPrototypeStartsWith(main, 'electron/js2c')) {
+ return main;
+ }
+
const defaultType = getOptionValue('--experimental-default-type');
/** @type {string} */
let mainPath;
@@ -63,6 +71,13 @@ function resolveMainPath(main) {
* @param {string} mainPath - Absolute path to the main entry point
*/
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;
+ }
+
if (getOptionValue('--experimental-default-type') === 'module') { return true; }
/**