![Shelley Vohr](/assets/img/avatar_default.png)
* 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
133 lines
5.4 KiB
Diff
133 lines
5.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Attard <marshallofsound@electronjs.org>
|
|
Date: Wed, 8 Mar 2023 13:02:17 -0800
|
|
Subject: chore: expose ImportModuleDynamically and
|
|
HostInitializeImportMetaObjectCallback to embedders
|
|
|
|
This also subtly changes the behavior of shouldNotRegisterESMLoader to ensure that node sets up the handlers
|
|
internally but simply avoids setting its own handlers on the Isolate. This is so that Electron can set it to
|
|
its own blended handler between Node and Blink.
|
|
|
|
Not upstreamable.
|
|
|
|
diff --git a/lib/internal/modules/esm/utils.js b/lib/internal/modules/esm/utils.js
|
|
index d393d4336a0c1e681e4f6b4e5c7cf2bcc5fc287e..807cb5172e0c2178b6c20e81f8175141d3a0284f 100644
|
|
--- a/lib/internal/modules/esm/utils.js
|
|
+++ b/lib/internal/modules/esm/utils.js
|
|
@@ -30,7 +30,7 @@ const {
|
|
ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING,
|
|
ERR_INVALID_ARG_VALUE,
|
|
} = require('internal/errors').codes;
|
|
-const { getOptionValue } = require('internal/options');
|
|
+const { getOptionValue, getEmbedderOptions } = require('internal/options');
|
|
const {
|
|
loadPreloadModules,
|
|
initializeFrozenIntrinsics,
|
|
@@ -273,12 +273,13 @@ let _forceDefaultLoader = false;
|
|
* @param {boolean} [forceDefaultLoader=false] - A boolean indicating disabling custom loaders.
|
|
*/
|
|
function initializeESM(forceDefaultLoader = false) {
|
|
+ const shouldSetOnIsolate = !getEmbedderOptions().shouldNotRegisterESMLoader;
|
|
_forceDefaultLoader = forceDefaultLoader;
|
|
initializeDefaultConditions();
|
|
// Setup per-realm callbacks that locate data or callbacks that we keep
|
|
// track of for different ESM modules.
|
|
- setInitializeImportMetaObjectCallback(initializeImportMetaObject);
|
|
- setImportModuleDynamicallyCallback(importModuleDynamicallyCallback);
|
|
+ setInitializeImportMetaObjectCallback(initializeImportMetaObject, shouldSetOnIsolate);
|
|
+ setImportModuleDynamicallyCallback(importModuleDynamicallyCallback, shouldSetOnIsolate);
|
|
}
|
|
|
|
/**
|
|
diff --git a/src/module_wrap.cc b/src/module_wrap.cc
|
|
index 48b61e8b7600701c4992a98ff802614ce915faee..4e9835e502a8d078a448aa4253f37de0f49f4854 100644
|
|
--- a/src/module_wrap.cc
|
|
+++ b/src/module_wrap.cc
|
|
@@ -813,7 +813,7 @@ MaybeLocal<Module> ModuleWrap::ResolveModuleCallback(
|
|
return module->module_.Get(isolate);
|
|
}
|
|
|
|
-static MaybeLocal<Promise> ImportModuleDynamically(
|
|
+MaybeLocal<Promise> ImportModuleDynamically(
|
|
Local<Context> context,
|
|
Local<v8::Data> host_defined_options,
|
|
Local<Value> resource_name,
|
|
@@ -878,12 +878,13 @@ void ModuleWrap::SetImportModuleDynamicallyCallback(
|
|
Realm* realm = Realm::GetCurrent(args);
|
|
HandleScope handle_scope(isolate);
|
|
|
|
- CHECK_EQ(args.Length(), 1);
|
|
+ CHECK_EQ(args.Length(), 2);
|
|
CHECK(args[0]->IsFunction());
|
|
Local<Function> import_callback = args[0].As<Function>();
|
|
realm->set_host_import_module_dynamically_callback(import_callback);
|
|
|
|
- isolate->SetHostImportModuleDynamicallyCallback(ImportModuleDynamically);
|
|
+ if (args[1]->IsBoolean() && args[1]->BooleanValue(isolate))
|
|
+ isolate->SetHostImportModuleDynamicallyCallback(ImportModuleDynamically);
|
|
}
|
|
|
|
void ModuleWrap::HostInitializeImportMetaObjectCallback(
|
|
@@ -925,13 +926,14 @@ void ModuleWrap::SetInitializeImportMetaObjectCallback(
|
|
Realm* realm = Realm::GetCurrent(args);
|
|
Isolate* isolate = realm->isolate();
|
|
|
|
- CHECK_EQ(args.Length(), 1);
|
|
+ CHECK_EQ(args.Length(), 2);
|
|
CHECK(args[0]->IsFunction());
|
|
Local<Function> import_meta_callback = args[0].As<Function>();
|
|
realm->set_host_initialize_import_meta_object_callback(import_meta_callback);
|
|
|
|
- isolate->SetHostInitializeImportMetaObjectCallback(
|
|
- HostInitializeImportMetaObjectCallback);
|
|
+ if (args[1]->IsBoolean() && args[1]->BooleanValue(isolate))
|
|
+ isolate->SetHostInitializeImportMetaObjectCallback(
|
|
+ HostInitializeImportMetaObjectCallback);
|
|
}
|
|
|
|
MaybeLocal<Value> ModuleWrap::SyntheticModuleEvaluationStepsCallback(
|
|
diff --git a/src/module_wrap.h b/src/module_wrap.h
|
|
index 83b5793013cbc453cf92c0a006fc7be3c06ad276..90353954bc497cb4ae413dc134850f8abb4efc7c 100644
|
|
--- a/src/module_wrap.h
|
|
+++ b/src/module_wrap.h
|
|
@@ -8,6 +8,7 @@
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
#include "base_object.h"
|
|
+#include "node.h"
|
|
#include "v8-script.h"
|
|
|
|
namespace node {
|
|
@@ -33,7 +34,14 @@ enum HostDefinedOptions : int {
|
|
kLength = 9,
|
|
};
|
|
|
|
-class ModuleWrap : public BaseObject {
|
|
+NODE_EXTERN v8::MaybeLocal<v8::Promise> ImportModuleDynamically(
|
|
+ v8::Local<v8::Context> context,
|
|
+ v8::Local<v8::Data> host_defined_options,
|
|
+ v8::Local<v8::Value> resource_name,
|
|
+ v8::Local<v8::String> specifier,
|
|
+ v8::Local<v8::FixedArray> import_assertions);
|
|
+
|
|
+class NODE_EXTERN ModuleWrap : public BaseObject {
|
|
public:
|
|
enum InternalFields {
|
|
kModuleSlot = BaseObject::kInternalFieldCount,
|
|
@@ -91,6 +99,8 @@ class ModuleWrap : public BaseObject {
|
|
static void CreateRequiredModuleFacade(
|
|
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
|
|
+ static ModuleWrap* GetFromModule(node::Environment*, v8::Local<v8::Module>);
|
|
+
|
|
private:
|
|
ModuleWrap(Realm* realm,
|
|
v8::Local<v8::Object> object,
|
|
@@ -129,7 +139,6 @@ class ModuleWrap : public BaseObject {
|
|
v8::Local<v8::String> specifier,
|
|
v8::Local<v8::FixedArray> import_attributes,
|
|
v8::Local<v8::Module> referrer);
|
|
- static ModuleWrap* GetFromModule(node::Environment*, v8::Local<v8::Module>);
|
|
|
|
v8::Global<v8::Module> module_;
|
|
std::unordered_map<std::string, v8::Global<v8::Object>> resolve_cache_;
|