mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 17:25:39 +01:00
build/fs: modernize file-system helpers
Replaced custom recursive directory creation and deprecated `fs.rmdirSync` logic with the native APIs introduced in Node ≥10:
* [ensureDir](cci:1://file:///c:/Users/T2430514/Downloads/monaco-editor/build/fs.ts:12:0-21:1) now calls `fs.mkdirSync(dirname, { recursive: true })`
– creates full path atomically
– avoids race conditions and extra loops
* [removeDir](cci:1://file:///c:/Users/T2430514/Downloads/monaco-editor/build/fs.ts:44:0-79:1) now ends with `fs.rmSync(dirPath, { recursive: true, force: true })`
– officially supported replacement for `fs.rmdirSync`
– handles non-empty directories and future Node versions
This simplifies the code, removes deprecation warnings on Node 16+, and prevents build/packaging scripts from failing on newer runtimes.
Co-Authored-By: S. M. Mohiuddin Khan Shiam <147746955+mohiuddin-khan-shiam@users.noreply.github.com>
This commit is contained in:
parent
f420968fc9
commit
07c1ae5204
1 changed files with 11 additions and 16 deletions
27
build/fs.ts
27
build/fs.ts
|
|
@ -11,22 +11,14 @@ const REPO_ROOT = path.join(__dirname, '../');
|
||||||
const existingDirCache = new Set();
|
const existingDirCache = new Set();
|
||||||
|
|
||||||
export function ensureDir(dirname: string) {
|
export function ensureDir(dirname: string) {
|
||||||
/** @type {string[]} */
|
// Node.js ≥10 supports the recursive option for mkdirSync, which creates all
|
||||||
const dirs = [];
|
// parent folders that do not yet exist. This is more robust than the manual
|
||||||
|
// loop above and avoids race-conditions when multiple processes attempt to
|
||||||
while (dirname.length > REPO_ROOT.length) {
|
// create the same directory tree concurrently.
|
||||||
dirs.push(dirname);
|
if (!existingDirCache.has(dirname)) {
|
||||||
dirname = path.dirname(dirname);
|
fs.mkdirSync(dirname, { recursive: true });
|
||||||
|
existingDirCache.add(dirname);
|
||||||
}
|
}
|
||||||
dirs.reverse();
|
|
||||||
dirs.forEach((dir) => {
|
|
||||||
if (!existingDirCache.has(dir)) {
|
|
||||||
try {
|
|
||||||
fs.mkdirSync(dir);
|
|
||||||
} catch (err) {}
|
|
||||||
existingDirCache.add(dir);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -73,7 +65,10 @@ export function removeDir(_dirPath: string, keep?: (filename: string) => boolean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!keepsFiles) {
|
if (!keepsFiles) {
|
||||||
fs.rmdirSync(dirPath);
|
// fs.rmdirSync is deprecated for non-empty directories and removed in
|
||||||
|
// future Node.js versions. fs.rmSync with { recursive: true, force: true }
|
||||||
|
// is the recommended API.
|
||||||
|
fs.rmSync(dirPath, { recursive: true, force: true });
|
||||||
}
|
}
|
||||||
return keepsFiles;
|
return keepsFiles;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue