mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
89 lines
2.2 KiB
TypeScript
89 lines
2.2 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
*/
|
|
|
|
import {patchMacroTask} from '../common/utils';
|
|
import {ZoneType} from '../zone-impl';
|
|
|
|
export function patchFs(Zone: ZoneType): void {
|
|
Zone.__load_patch('fs', (global: any, Zone: ZoneType, api: _ZonePrivate) => {
|
|
let fs: any;
|
|
try {
|
|
fs = require('fs');
|
|
} catch (err) {}
|
|
|
|
if (!fs) return;
|
|
|
|
// watch, watchFile, unwatchFile has been patched
|
|
// because EventEmitter has been patched
|
|
const TO_PATCH_MACROTASK_METHODS = [
|
|
'access',
|
|
'appendFile',
|
|
'chmod',
|
|
'chown',
|
|
'close',
|
|
'exists',
|
|
'fchmod',
|
|
'fchown',
|
|
'fdatasync',
|
|
'fstat',
|
|
'fsync',
|
|
'ftruncate',
|
|
'futimes',
|
|
'lchmod',
|
|
'lchown',
|
|
'lutimes',
|
|
'link',
|
|
'lstat',
|
|
'mkdir',
|
|
'mkdtemp',
|
|
'open',
|
|
'opendir',
|
|
'read',
|
|
'readdir',
|
|
'readFile',
|
|
'readlink',
|
|
'realpath',
|
|
'rename',
|
|
'rmdir',
|
|
'stat',
|
|
'symlink',
|
|
'truncate',
|
|
'unlink',
|
|
'utimes',
|
|
'write',
|
|
'writeFile',
|
|
'writev',
|
|
];
|
|
|
|
TO_PATCH_MACROTASK_METHODS.filter(
|
|
(name) => !!fs[name] && typeof fs[name] === 'function',
|
|
).forEach((name) => {
|
|
patchMacroTask(fs, name, (self: any, args: any[]) => {
|
|
return {
|
|
name: 'fs.' + name,
|
|
args: args,
|
|
cbIdx: args.length > 0 ? args.length - 1 : -1,
|
|
target: self,
|
|
};
|
|
});
|
|
});
|
|
|
|
const realpathOriginalDelegate = fs.realpath?.[api.symbol('OriginalDelegate')];
|
|
// This is the only specific method that should be additionally patched because the previous
|
|
// `patchMacroTask` has overridden the `realpath` function and its `native` property.
|
|
if (realpathOriginalDelegate?.native) {
|
|
fs.realpath.native = realpathOriginalDelegate.native;
|
|
patchMacroTask(fs.realpath, 'native', (self, args) => ({
|
|
args,
|
|
target: self,
|
|
cbIdx: args.length > 0 ? args.length - 1 : -1,
|
|
name: 'fs.realpath.native',
|
|
}));
|
|
}
|
|
});
|
|
}
|