mirror of https://github.com/electron/electron
111 lines
5.1 KiB
Diff
111 lines
5.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Attard <marshallofsound@electronjs.org>
|
|
Date: Tue, 7 Mar 2023 16:17:41 -0800
|
|
Subject: fix: lazyload fs in esm loaders to apply asar patches
|
|
|
|
Changes { foo } from fs to just "fs.foo" so that our patching of fs is applied to esm loaders
|
|
|
|
diff --git a/lib/internal/modules/esm/load.js b/lib/internal/modules/esm/load.js
|
|
index 6a15fcae677b3bda58fc85f705862bbcd9feec9d..449131b9af99744c08d62d73f8d124cef5c9cc71 100644
|
|
--- a/lib/internal/modules/esm/load.js
|
|
+++ b/lib/internal/modules/esm/load.js
|
|
@@ -10,7 +10,7 @@ const { kEmptyObject } = require('internal/util');
|
|
const { defaultGetFormat } = require('internal/modules/esm/get_format');
|
|
const { validateAttributes, emitImportAssertionWarning } = require('internal/modules/esm/assert');
|
|
const { getOptionValue } = require('internal/options');
|
|
-const { readFileSync } = require('fs');
|
|
+const fs = require('fs');
|
|
|
|
// Do not eagerly grab .manifest, it may be in TDZ
|
|
const policy = getOptionValue('--experimental-policy') ?
|
|
@@ -42,8 +42,7 @@ async function getSource(url, context) {
|
|
let responseURL = href;
|
|
let source;
|
|
if (protocol === 'file:') {
|
|
- const { readFile: readFileAsync } = require('internal/fs/promises').exports;
|
|
- source = await readFileAsync(url);
|
|
+ source = await fs.promises.readFile(url);
|
|
} else if (protocol === 'data:') {
|
|
const match = RegExpPrototypeExec(DATA_URL_PATTERN, url.pathname);
|
|
if (!match) {
|
|
@@ -82,7 +81,7 @@ function getSourceSync(url, context) {
|
|
const responseURL = href;
|
|
let source;
|
|
if (protocol === 'file:') {
|
|
- source = readFileSync(url);
|
|
+ source = fs.readFileSync(url);
|
|
} else if (protocol === 'data:') {
|
|
const match = RegExpPrototypeExec(DATA_URL_PATTERN, url.pathname);
|
|
if (!match) {
|
|
diff --git a/lib/internal/modules/esm/resolve.js b/lib/internal/modules/esm/resolve.js
|
|
index 8c9e8bfb4e828d044b236a11c0890cb4f0161050..30f6abd5d2d3fb7aceaa6191ebd99642e34d9ee4 100644
|
|
--- a/lib/internal/modules/esm/resolve.js
|
|
+++ b/lib/internal/modules/esm/resolve.js
|
|
@@ -24,7 +24,7 @@ const {
|
|
} = primordials;
|
|
const internalFS = require('internal/fs/utils');
|
|
const { BuiltinModule } = require('internal/bootstrap/realm');
|
|
-const { realpathSync } = require('fs');
|
|
+const fs = require('fs');
|
|
const { getOptionValue } = require('internal/options');
|
|
// Do not eagerly grab .manifest, it may be in TDZ
|
|
const policy = getOptionValue('--experimental-policy') ?
|
|
@@ -251,7 +251,7 @@ function finalizeResolution(resolved, base, preserveSymlinks) {
|
|
throw err;
|
|
}
|
|
|
|
- const stats = internalModuleStat(toNamespacedPath(StringPrototypeEndsWith(path, '/') ?
|
|
+ const stats = internalFsBinding.internalModuleStat(toNamespacedPath(StringPrototypeEndsWith(path, '/') ?
|
|
StringPrototypeSlice(path, -1) : path));
|
|
|
|
// Check for stats.isDirectory()
|
|
@@ -267,7 +267,7 @@ function finalizeResolution(resolved, base, preserveSymlinks) {
|
|
}
|
|
|
|
if (!preserveSymlinks) {
|
|
- const real = realpathSync(path, {
|
|
+ const real = fs.realpathSync(path, {
|
|
[internalFS.realpathCacheKey]: realpathCache,
|
|
});
|
|
const { search, hash } = resolved;
|
|
@@ -826,7 +826,7 @@ function packageResolve(specifier, base, conditions) {
|
|
let packageJSONPath = fileURLToPath(packageJSONUrl);
|
|
let lastPath;
|
|
do {
|
|
- const stat = internalModuleStat(toNamespacedPath(StringPrototypeSlice(packageJSONPath, 0,
|
|
+ const stat = internalFsBinding.internalModuleStat(toNamespacedPath(StringPrototypeSlice(packageJSONPath, 0,
|
|
packageJSONPath.length - 13)));
|
|
// Check for !stat.isDirectory()
|
|
if (stat !== 1) {
|
|
diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js
|
|
index 11d64bfd66259a5c5cf089de713af35ec9cde2aa..4831f3678cde9b4edad04922932c8239a7908a04 100644
|
|
--- a/lib/internal/modules/esm/translators.js
|
|
+++ b/lib/internal/modules/esm/translators.js
|
|
@@ -32,7 +32,7 @@ function lazyTypes() {
|
|
const { containsModuleSyntax } = internalBinding('contextify');
|
|
const { BuiltinModule } = require('internal/bootstrap/realm');
|
|
const assert = require('internal/assert');
|
|
-const { readFileSync } = require('fs');
|
|
+const fs = require('fs');
|
|
const { dirname, extname, isAbsolute } = require('path');
|
|
const {
|
|
loadBuiltinModule,
|
|
@@ -376,7 +376,7 @@ translators.set('commonjs', async function commonjsStrategy(url, source,
|
|
|
|
try {
|
|
// We still need to read the FS to detect the exports.
|
|
- source ??= readFileSync(new URL(url), 'utf8');
|
|
+ source ??= fs.readFileSync(new URL(url), 'utf8');
|
|
} catch {
|
|
// Continue regardless of error.
|
|
}
|
|
@@ -445,7 +445,7 @@ function cjsPreparseModuleExports(filename, source) {
|
|
isAbsolute(resolved)) {
|
|
// TODO: this should be calling the `load` hook chain to get the source
|
|
// (and fallback to reading the FS only if the source is nullish).
|
|
- const source = readFileSync(resolved, 'utf-8');
|
|
+ const source = fs.readFileSync(resolved, 'utf-8');
|
|
const { exportNames: reexportNames } = cjsPreparseModuleExports(resolved, source);
|
|
for (const name of reexportNames) {
|
|
exportNames.add(name);
|