mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
* chore: upgrade Node.js to v24.10.0 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: fixup crypto patch Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: fixup crypto test patch Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: prepare for v8 sandboxing https://github.com/nodejs/node/pull/58376 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * esm: fix module.exports export on CJS modules https://github.com/nodejs/node/pull/57366 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: fixup lazyload fs patch Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * esm: Source Phase Imports for WebAssembly https://github.com/nodejs/node/pull/56919 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * module: remove --experimental-default-type https://github.com/nodejs/node/pull/56092 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * lib,src: refactor assert to load error source from memory https://github.com/nodejs/node/pull/59751 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: add source location to v8::TaskRunner https://github.com/nodejs/node/pull/54077 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: remove dependency on wrapper-descriptor-based CppHeap https://github.com/nodejs/node/pull/54077 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: do not use soon-to-be-deprecated V8 API https://github.com/nodejs/node/pull/53174 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: stop using deprecated fields of v8::FastApiCallbackOptions https://github.com/nodejs/node/pull/54077 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * test: update v8-stats test for V8 12.6 https://github.com/nodejs/node/pull/54077 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * esm: unflag --experimental-wasm-modules https://github.com/nodejs/node/pull/57038 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * test: adapt assert tests to stack trace changes https://github.com/nodejs/node/pull/58070 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src,test: unregister the isolate after disposal and before freeing https://github.com/nodejs/node/pull/58070 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: use cppgc to manage ContextifyContext https://github.com/nodejs/node/pull/56522 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: replace uses of FastApiTypedArray https://github.com/nodejs/node/pull/58070 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * module: integrate TypeScript into compile cache https://github.com/nodejs/node/pull/56629 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * deps: update ada to 3.2.7 https://github.com/nodejs/node/pull/59336 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: make minor cleanups in encoding_binding.cc https://github.com/nodejs/node/pull/57448 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: switch from `Get/SetPrototype` to `Get/SetPrototypeV2` https://github.com/nodejs/node/pull/55453 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: use non-deprecated Get/SetPrototype methods https://github.com/nodejs/node/pull/59671 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: simplify string_bytes with views https://github.com/nodejs/node/pull/54876 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: improve utf8 string generation performance https://github.com/nodejs/node/pull/54873 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: use non-deprecated Utf8LengthV2() method https://github.com/nodejs/node/pull/58070 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: use non-deprecated WriteUtf8V2() method https://github.com/nodejs/node/pull/58070 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: refactor WriteUCS2 and remove flags argument https://github.com/nodejs/node/pull/58163 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: use String::WriteV2() in TwoByteValue https://github.com/nodejs/node/pull/58164 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * node-api: use WriteV2 in napi_get_value_string_utf16 https://github.com/nodejs/node/pull/58165 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * node-api: use WriteOneByteV2 in napi_get_value_string_latin1 https://github.com/nodejs/node/pull/58325 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: migrate WriteOneByte to WriteOneByteV2 https://github.com/nodejs/node/pull/59634 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fs: introduce dirent\.parentPath https://github.com/nodejs/node/pull/50976 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: avoid copy by using std::views::keys https://github.com/nodejs/node/pull/56080 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: fixup patch indices Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fix: errant use of context->GetIsolate() Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fix: tweak BoringSSL compat patch for new changes Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fix: add back missing isolate dtor declaration Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fixup! esm: fix module.exports export on CJS modules Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * cli: remove --no-experimental-fetch flag https://github.com/nodejs/node/pull/52611/files Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * esm: Source Phase Imports for WebAssembly https://github.com/nodejs/node/pull/56919 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fixup! src: prepare for v8 sandboxing Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: bump @types/node to v24 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: fix const assignment in crypto test Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fix: sandbox pointer patch issues Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: rework source phase import patch Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: add percentage support to --max-old-space-size https://github.com/nodejs/node/pull/59082 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: fixup crypto tests Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: HostImportModuleWithPhaseDynamically todo Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fix: cjs esm failures Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fix: v8::Object::Wrappable issues -b72a615754-490bac2496-4896a0dd69Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: remove deleted specs Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * src: use v8::ExternalMemoryAccounter https://github.com/nodejs/node/pull/58070 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fs: port SonicBoom module to fs module as FastUtf8Stream https://github.com/nodejs/node/pull/58897 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: tweak sandboxed pr patch Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * test: disable parallel/test-os-checked-function Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * test: use WHATWG URL instead of url.parse Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * fix: OPENSSL_secure_zalloc doesn't work in BoringSSL Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * chore: fix accidental extra line Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> * 7017517: [defer-import-eval] Parse import defer syntax https://chromium-review.googlesource.com/c/v8/v8/+/7017517 Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
124 lines
5.1 KiB
Diff
124 lines
5.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Fedor Indutny <indutny@signal.org>
|
|
Date: Mon, 31 Mar 2025 11:21:29 -0700
|
|
Subject: fix: expose ReadFileSync override for modules
|
|
|
|
To avoid copying out `package.json` files out of the ASAR file we need
|
|
an API override to replace the native `ReadFileSync` in the `modules`
|
|
binding.
|
|
|
|
diff --git a/src/env_properties.h b/src/env_properties.h
|
|
index 2884149d82d180e0d2ecfa7ac8fd92f201f1cb55..dded4bf3d7106d127efbad81087f0c375b2b2c95 100644
|
|
--- a/src/env_properties.h
|
|
+++ b/src/env_properties.h
|
|
@@ -490,6 +490,7 @@
|
|
V(maybe_cache_generated_source_map, v8::Function) \
|
|
V(messaging_deserialize_create_object, v8::Function) \
|
|
V(message_port, v8::Object) \
|
|
+ V(modules_read_file_sync, v8::Function) \
|
|
V(builtin_module_require, v8::Function) \
|
|
V(performance_entry_callback, v8::Function) \
|
|
V(prepare_stack_trace_callback, v8::Function) \
|
|
diff --git a/src/node_modules.cc b/src/node_modules.cc
|
|
index b93ccedaf703f86ae2092c304785394c471d520c..bdbc511ef3f680bbac6770b89f47acaee95d56a2 100644
|
|
--- a/src/node_modules.cc
|
|
+++ b/src/node_modules.cc
|
|
@@ -23,6 +23,7 @@ namespace modules {
|
|
using v8::Array;
|
|
using v8::Context;
|
|
using v8::External;
|
|
+using v8::Function;
|
|
using v8::FunctionCallbackInfo;
|
|
using v8::HandleScope;
|
|
using v8::Integer;
|
|
@@ -94,6 +95,7 @@ Local<Array> BindingData::PackageConfig::Serialize(Realm* realm) const {
|
|
|
|
const BindingData::PackageConfig* BindingData::GetPackageJSON(
|
|
Realm* realm, std::string_view path, ErrorContext* error_context) {
|
|
+ auto isolate = realm->isolate();
|
|
auto binding_data = realm->GetBindingData<BindingData>();
|
|
|
|
auto cache_entry = binding_data->package_configs_.find(path.data());
|
|
@@ -103,8 +105,36 @@ const BindingData::PackageConfig* BindingData::GetPackageJSON(
|
|
|
|
PackageConfig package_config{};
|
|
package_config.file_path = path;
|
|
+
|
|
+ Local<Function> modules_read_file_sync = realm->modules_read_file_sync();
|
|
+
|
|
+ int read_err;
|
|
// No need to exclude BOM since simdjson will skip it.
|
|
- if (ReadFileSync(&package_config.raw_json, path.data()) < 0) {
|
|
+ if (modules_read_file_sync.IsEmpty()) {
|
|
+ read_err = ReadFileSync(&package_config.raw_json, path.data());
|
|
+ } else {
|
|
+ Local<Value> args[] = {
|
|
+ v8::String::NewFromUtf8(isolate, path.data()).ToLocalChecked(),
|
|
+ };
|
|
+ Local<Value> result = modules_read_file_sync->Call(
|
|
+ realm->context(),
|
|
+ Undefined(isolate),
|
|
+ arraysize(args),
|
|
+ args).ToLocalChecked();
|
|
+
|
|
+ if (result->IsUndefined()) {
|
|
+ // Fallback
|
|
+ read_err = ReadFileSync(&package_config.raw_json, path.data());
|
|
+ } else if (result->IsFalse()) {
|
|
+ // Not found
|
|
+ read_err = -1;
|
|
+ } else {
|
|
+ BufferValue data(isolate, result);
|
|
+ package_config.raw_json = data.ToString();
|
|
+ read_err = 0;
|
|
+ }
|
|
+ }
|
|
+ if (read_err < 0) {
|
|
return nullptr;
|
|
}
|
|
simdjson::ondemand::document document;
|
|
@@ -242,6 +272,12 @@ const BindingData::PackageConfig* BindingData::GetPackageJSON(
|
|
return &cached.first->second;
|
|
}
|
|
|
|
+void BindingData::OverrideReadFileSync(const FunctionCallbackInfo<Value>& args) {
|
|
+ Realm* realm = Realm::GetCurrent(args);
|
|
+ CHECK(args[0]->IsFunction());
|
|
+ realm->set_modules_read_file_sync(args[0].As<Function>());
|
|
+}
|
|
+
|
|
void BindingData::ReadPackageJSON(const FunctionCallbackInfo<Value>& args) {
|
|
CHECK_GE(args.Length(), 1); // path, [is_esm, base, specifier]
|
|
CHECK(args[0]->IsString()); // path
|
|
@@ -674,6 +710,8 @@ void SaveCompileCacheEntry(const FunctionCallbackInfo<Value>& args) {
|
|
void BindingData::CreatePerIsolateProperties(IsolateData* isolate_data,
|
|
Local<ObjectTemplate> target) {
|
|
Isolate* isolate = isolate_data->isolate();
|
|
+ SetMethod(isolate, target, "overrideReadFileSync", OverrideReadFileSync);
|
|
+
|
|
SetMethod(isolate, target, "readPackageJSON", ReadPackageJSON);
|
|
SetMethod(isolate,
|
|
target,
|
|
@@ -733,6 +771,8 @@ void BindingData::CreatePerContextProperties(Local<Object> target,
|
|
|
|
void BindingData::RegisterExternalReferences(
|
|
ExternalReferenceRegistry* registry) {
|
|
+ registry->Register(OverrideReadFileSync);
|
|
+
|
|
registry->Register(ReadPackageJSON);
|
|
registry->Register(GetNearestParentPackageJSONType);
|
|
registry->Register(GetPackageScopeConfig<false>);
|
|
diff --git a/src/node_modules.h b/src/node_modules.h
|
|
index e4ba6b75bc86d14deada835903ba68a4cb0eccc5..ae77f9ec81b358bd356993617cd07671d382e8ca 100644
|
|
--- a/src/node_modules.h
|
|
+++ b/src/node_modules.h
|
|
@@ -54,6 +54,8 @@ class BindingData : public SnapshotableObject {
|
|
SET_SELF_SIZE(BindingData)
|
|
SET_MEMORY_INFO_NAME(BindingData)
|
|
|
|
+ static void OverrideReadFileSync(
|
|
+ const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void ReadPackageJSON(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void GetNearestParentPackageJSONType(
|
|
const v8::FunctionCallbackInfo<v8::Value>& args);
|