Skip to content

Commit f7c0795

Browse files
Replace fs-extra with built-ins (#4819)
* Replace fs-extra with built-ins * Use Object.entries * Replace fs-extra with built-ins, use nullish coalescing assignment * Replace fs-extra with built-ins * Require from node:fs/promises * Replace fs-extra with built-ins * Replace fs-extra with built-ins, use promise version * Replace fs-extra with built-ins * Replace unlink with node:fs/promises * Replace writeFile with node:fs/promises * Replace loop and writeFile with node:fs/promises and Promise.all * Fix, use rmSync Co-authored-by: Lukas Taegert-Atkinson <[email protected]>
1 parent 061ec1f commit f7c0795

6 files changed

Lines changed: 50 additions & 32 deletions

File tree

build-plugins/clean-before-write.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
import fs from 'fs-extra';
1+
import { rm } from 'node:fs/promises';
22
import type { Plugin } from 'rollup';
33

44
export default function cleanBeforeWrite(directory: string): Plugin {
5-
let removePromise: Promise<void> | null = null;
5+
let removePromise: Promise<void>;
66
return {
77
generateBundle(_options, _bundle, isWrite) {
88
if (isWrite) {
99
// Only remove before first write, but make all writes wait on the removal
10-
removePromise ||= fs.remove(directory);
10+
removePromise ??= rm(directory, {
11+
force: true,
12+
recursive: true
13+
});
1114
return removePromise;
1215
}
1316
},

build-plugins/copy-types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import { readFile } from 'node:fs/promises';
12
import { resolve } from 'node:path';
2-
import fs from 'fs-extra';
33
import type { Plugin } from 'rollup';
44

55
export default function copyTypes(fileName: string): Plugin {
@@ -8,7 +8,7 @@ export default function copyTypes(fileName: string): Plugin {
88
if (isWrite) {
99
this.emitFile({
1010
fileName,
11-
source: await fs.readFile(resolve('src/rollup/types.d.ts'), 'utf8'),
11+
source: await readFile(resolve('src/rollup/types.d.ts'), 'utf8'),
1212
type: 'asset'
1313
});
1414
}

build-plugins/replace-browser-modules.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export const resolutions = {
1414
[resolve('src/utils/resolveId')]: resolve('browser/src/resolveId.ts')
1515
};
1616

17-
for (const key of Object.keys(resolutions)) {
18-
resolutions[`${key}.ts`] = resolutions[key];
17+
for (const [key, value] of Object.entries(resolutions)) {
18+
resolutions[`${key}.ts`] = value;
1919
}
2020

2121
export default function replaceBrowserModules(): Plugin {

scripts/perf-init.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/* eslint-disable no-console */
22

3+
import { rmSync } from 'node:fs';
34
import { argv, chdir, exit } from 'node:process';
45
import { fileURLToPath } from 'node:url';
5-
import fs from 'fs-extra';
66
import { findConfigFileName } from './find-config.js';
77
import { runWithEcho } from './helpers.js';
88

@@ -19,7 +19,10 @@ if (argv.length !== 3 || !VALID_REPO.test(repoWithBranch)) {
1919
}
2020

2121
console.error(`Cleaning up '${TARGET_DIR}'...`);
22-
fs.removeSync(TARGET_DIR);
22+
rmSync(TARGET_DIR, {
23+
force: true,
24+
recursive: true
25+
});
2326

2427
const [, repo, , branch] = VALID_REPO.exec(repoWithBranch);
2528

test/utils.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ const {
66
readdirSync,
77
renameSync,
88
unlinkSync,
9+
rmSync,
910
writeFileSync,
1011
writeSync
1112
} = require('node:fs');
1213
const { basename, join } = require('node:path');
1314
const { platform, version } = require('node:process');
1415
const fixturify = require('fixturify');
15-
const { removeSync } = require('fs-extra');
1616

1717
exports.wait = function wait(ms) {
1818
return new Promise(fulfil => {
@@ -133,7 +133,10 @@ function runTestsInDirectory(directory, runTest) {
133133
loadConfigAndRunTest(directory, runTest);
134134
} else if (fileNames.length === 0) {
135135
console.warn(`Removing empty test directory ${directory}`);
136-
removeSync(directory);
136+
rmSync(directory, {
137+
force: true,
138+
recursive: true
139+
});
137140
} else {
138141
describe(basename(directory), () => {
139142
for (const fileName of fileNames.filter(name => name[0] !== '.').sort()) {
@@ -147,7 +150,10 @@ function getFileNamesAndRemoveOutput(directory) {
147150
try {
148151
return readdirSync(directory).filter(fileName => {
149152
if (fileName === '_actual') {
150-
removeSync(join(directory, '_actual'));
153+
rmSync(join(directory, '_actual'), {
154+
force: true,
155+
recursive: true
156+
});
151157
return false;
152158
}
153159
if (fileName === '_actual.js') {

test/watch/index.js

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
const assert = require('node:assert');
2-
const {
3-
existsSync,
4-
promises: fs,
5-
readdirSync,
6-
readFileSync,
7-
unlinkSync,
8-
writeFileSync
9-
} = require('node:fs');
2+
const { existsSync, readdirSync, readFileSync, rmSync, unlinkSync } = require('node:fs');
3+
const { rm, unlink, writeFile } = require('node:fs/promises');
104
const { resolve } = require('node:path');
115
const { chdir, cwd, hrtime } = require('node:process');
12-
const { copy, removeSync } = require('fs-extra');
6+
const { copy } = require('fs-extra');
137
const rollup = require('../../dist/rollup');
148
const { atomicWriteFileSync, wait } = require('../utils');
159

@@ -18,7 +12,10 @@ describe('rollup.watch', () => {
1812

1913
beforeEach(() => {
2014
chdir(cwd());
21-
return removeSync('test/_tmp');
15+
return rm('test/_tmp', {
16+
force: true,
17+
recursive: true
18+
});
2219
});
2320

2421
afterEach(() => {
@@ -240,7 +237,7 @@ describe('rollup.watch', () => {
240237
let ids;
241238
const expectedIds = [WATCHED_ID, resolve('test/_tmp/input/main.js')];
242239
await copy('test/watch/samples/watch-files', 'test/_tmp/input');
243-
await fs.unlink(WATCHED_ID);
240+
await unlink(WATCHED_ID);
244241
await wait(100);
245242
watcher = rollup.watch({
246243
input: 'test/_tmp/input/main.js',
@@ -350,7 +347,7 @@ describe('rollup.watch', () => {
350347
assert.strictEqual(lastEvent, null);
351348
atomicWriteFileSync(WATCHED_ID, 'another');
352349
await wait(100);
353-
unlinkSync(WATCHED_ID);
350+
await unlink(WATCHED_ID);
354351
},
355352
'START',
356353
'BUNDLE_START',
@@ -361,7 +358,7 @@ describe('rollup.watch', () => {
361358
lastEvent = null;
362359
atomicWriteFileSync(WATCHED_ID, '123');
363360
await wait(100);
364-
unlinkSync(WATCHED_ID);
361+
await unlink(WATCHED_ID);
365362
// To ensure there is always another change to trigger a rebuild
366363
atomicWriteFileSync(MAIN_ID, 'export default 43;');
367364
},
@@ -1107,7 +1104,10 @@ describe('rollup.watch', () => {
11071104
'END',
11081105
() => {
11091106
[dynamicName, staticName, chunkName] = readdirSync('test/_tmp/output').sort();
1110-
removeSync('test/_tmp/output');
1107+
rmSync('test/_tmp/output', {
1108+
force: true,
1109+
recursive: true
1110+
});
11111111

11121112
// this should only update the hash of that particular entry point
11131113
atomicWriteFileSync(
@@ -1122,7 +1122,10 @@ describe('rollup.watch', () => {
11221122
() => {
11231123
const [newDynamicName, newStaticName, newChunkName] =
11241124
readdirSync('test/_tmp/output').sort();
1125-
removeSync('test/_tmp/output');
1125+
rmSync('test/_tmp/output', {
1126+
force: true,
1127+
recursive: true
1128+
});
11261129
assert.notEqual(newStaticName, staticName);
11271130
assert.strictEqual(newDynamicName, dynamicName);
11281131
assert.strictEqual(newChunkName, chunkName);
@@ -1384,7 +1387,9 @@ describe('rollup.watch', () => {
13841387
const transformFile = resolve('test/_tmp/input/transform');
13851388
const watchFiles = [buildStartFile, loadFile, resolveIdFile, transformFile];
13861389
await copy('test/watch/samples/basic', 'test/_tmp/input');
1387-
for (const file of watchFiles) writeFileSync(file, 'initial');
1390+
1391+
await Promise.all(watchFiles.map(file => writeFile(file, 'initial')));
1392+
13881393
watcher = rollup.watch({
13891394
input: 'test/_tmp/input/main.js',
13901395
output: {
@@ -1415,11 +1420,12 @@ describe('rollup.watch', () => {
14151420
'BUNDLE_START',
14161421
'BUNDLE_END',
14171422
'END',
1418-
() => {
1423+
async () => {
14191424
assert.strictEqual(run('../_tmp/output/bundle.js'), 42);
14201425
// sometimes the watcher is triggered during the initial run
14211426
watchChangeIds.clear();
1422-
for (const file_2 of watchFiles) writeFileSync(file_2, 'changed');
1427+
1428+
await Promise.all(watchFiles.map(file => writeFile(file, 'changed')));
14231429
},
14241430
'START',
14251431
'BUNDLE_START',
@@ -1646,7 +1652,7 @@ describe('rollup.watch', () => {
16461652

16471653
it('respects unlinked and re-added watched files', async () => {
16481654
await copy('test/watch/samples/basic', 'test/_tmp/input');
1649-
writeFileSync('test/_tmp/input/dep', '');
1655+
await writeFile('test/_tmp/input/dep', '');
16501656
watcher = rollup.watch({
16511657
input: 'test/_tmp/input/main.js',
16521658
output: {
@@ -1693,7 +1699,7 @@ describe('rollup.watch', () => {
16931699
let transformRuns = 0;
16941700
await copy('test/watch/samples/watch-files', 'test/_tmp/input');
16951701
await wait(100);
1696-
writeFileSync('test/_tmp/input/alsoWatched', 'initial');
1702+
await writeFile('test/_tmp/input/alsoWatched', 'initial');
16971703
watcher = rollup.watch({
16981704
input: 'test/_tmp/input/main.js',
16991705
output: {

0 commit comments

Comments
 (0)