mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
fs: restore fs patchability in ESM loader
Temporarily restore fs patchability in ESM loader as a workaround for helping downstream projects that depend on this undocumented hidden contract transition into using hook proper APIs. This patch intentionally avoids adding a test and instead adds warning comments to hopefully steer new code away from depending on it. PR-URL: https://github.com/nodejs/node/pull/62835 Refs: https://github.com/nodejs/node/issues/62012 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
1 parent
d1ac02f841
commit
9531947fd6
3 files changed
+18
-6
No files matched your search
@@ -9,7 +9,7 @@ const {
|
||||
|
||||
const { defaultGetFormat } = require('internal/modules/esm/get_format');
|
||||
const { validateAttributes, emitImportAssertionWarning } = require('internal/modules/esm/assert');
|
||||
const { readFileSync } = require('fs');
|
||||
const fs = require('fs');
|
||||
|
||||
const { Buffer: { from: BufferFrom } } = require('buffer');
|
||||
|
||||
@@ -34,7 +34,11 @@ function getSourceSync(url, context) {
|
||||
const responseURL = href;
|
||||
let source;
|
||||
if (protocol === 'file:') {
|
||||
source = readFileSync(url);
|
||||
// If you are reading this code to figure out how to patch Node.js module loading
|
||||
// behavior - DO NOT depend on the patchability in new code: Node.js
|
||||
// internals may stop going through the JavaScript fs module entirely.
|
||||
// Prefer module.registerHooks() or other more formal fs hooks released in the future.
|
||||
source = fs.readFileSync(url);
|
||||
} else if (protocol === 'data:') {
|
||||
const result = dataURLProcessor(url);
|
||||
if (result === 'failure') {
|
||||
|
||||
@@ -25,7 +25,7 @@ const {
|
||||
const assert = require('internal/assert');
|
||||
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 { sep, posix: { relative: relativePosixPath }, resolve } = require('path');
|
||||
@@ -273,7 +273,11 @@ function finalizeResolution(resolved, base, preserveSymlinks) {
|
||||
}
|
||||
|
||||
if (!preserveSymlinks) {
|
||||
const real = realpathSync(path, {
|
||||
// If you are reading this code to figure out how to patch Node.js module loading
|
||||
// behavior - DO NOT depend on the patchability in new code: Node.js
|
||||
// internals may stop going through the JavaScript fs module entirely.
|
||||
// Prefer module.registerHooks() or other more formal fs hooks released in the future.
|
||||
const real = fs.realpathSync(path, {
|
||||
[internalFS.realpathCacheKey]: realpathCache,
|
||||
});
|
||||
const { search, hash } = resolved;
|
||||
|
||||
@@ -22,7 +22,7 @@ const {
|
||||
|
||||
const { BuiltinModule } = require('internal/bootstrap/realm');
|
||||
const assert = require('internal/assert');
|
||||
const { readFileSync } = require('fs');
|
||||
const fs = require('fs');
|
||||
const { dirname, extname } = require('path');
|
||||
const {
|
||||
assertBufferSource,
|
||||
@@ -343,7 +343,11 @@ translators.set('commonjs', function commonjsStrategy(url, translateContext, par
|
||||
|
||||
try {
|
||||
// We still need to read the FS to detect the exports.
|
||||
translateContext.source ??= readFileSync(new URL(url), 'utf8');
|
||||
// If you are reading this code to figure out how to patch Node.js module loading
|
||||
// behavior - DO NOT depend on the patchability in new code: Node.js
|
||||
// internals may stop going through the JavaScript fs module entirely.
|
||||
// Prefer module.registerHooks() or other more formal fs hooks released in the future.
|
||||
translateContext.source ??= fs.readFileSync(new URL(url), 'utf8');
|
||||
} catch {
|
||||
// Continue regardless of error.
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user