mirror of
https://github.com/SukkaW/Surge.git
synced 2026-09-13 02:54:38 +08:00
Chore: skip file writing stream
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
import { asyncWriteToStream } from 'foxts/async-write-to-stream';
|
|
||||||
import { fastStringArrayJoin } from 'foxts/fast-string-array-join';
|
import { fastStringArrayJoin } from 'foxts/fast-string-array-join';
|
||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import picocolors from 'picocolors';
|
import picocolors from 'picocolors';
|
||||||
@@ -6,7 +5,6 @@ import type { Span } from '../trace';
|
|||||||
import { readFileByLine } from './fetch-text-by-line';
|
import { readFileByLine } from './fetch-text-by-line';
|
||||||
import { writeFile } from './misc';
|
import { writeFile } from './misc';
|
||||||
import { createCompareSource, fileEqualWithCommentComparator } from 'foxts/compare-source';
|
import { createCompareSource, fileEqualWithCommentComparator } from 'foxts/compare-source';
|
||||||
import { promisify } from 'node:util';
|
|
||||||
import { extractContentHashFromFile } from './content-hash';
|
import { extractContentHashFromFile } from './content-hash';
|
||||||
|
|
||||||
const fileEqual = createCompareSource(fileEqualWithCommentComparator);
|
const fileEqual = createCompareSource(fileEqualWithCommentComparator);
|
||||||
@@ -49,26 +47,12 @@ export async function compareAndWriteFile(span: Span, linesA: string[], filePath
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return span.traceChildAsync<void>(`writing ${filePath}`, async () => {
|
return writeFileLines(span, linesA, filePath);
|
||||||
const linesALen = linesA.length;
|
}
|
||||||
|
|
||||||
// The default highwater mark is normally 16384,
|
export function writeFileLines(span: Span, linesA: string[], filePath: string): Promise<void> {
|
||||||
// So we make sure direct write to file if the content is
|
return span.traceChildAsync<void>(
|
||||||
// most likely less than 250 lines
|
`writing ${filePath}`,
|
||||||
if (linesALen < 250) {
|
() => writeFile(filePath, fastStringArrayJoin(linesA, '\n') + '\n')
|
||||||
return writeFile(filePath, fastStringArrayJoin(linesA, '\n'));
|
);
|
||||||
}
|
|
||||||
|
|
||||||
const writeStream = fs.createWriteStream(filePath);
|
|
||||||
for (let i = 0; i < linesALen; i++) {
|
|
||||||
const p = asyncWriteToStream(writeStream, linesA[i] + '\n');
|
|
||||||
// eslint-disable-next-line no-await-in-loop -- stream high water mark
|
|
||||||
if (p) await p;
|
|
||||||
}
|
|
||||||
await new Promise<void>(resolve => {
|
|
||||||
// Since we previously poped the last empty line for comparison, we need to add it back here to ensure final EOF line
|
|
||||||
writeStream.end(resolve);
|
|
||||||
});
|
|
||||||
await promisify(writeStream.close.bind(writeStream))();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user