mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-13 01:30:37 +08:00
Chore: migrate fileEqual to use foxts util
This commit is contained in:
parent
3e277a62fc
commit
8722cd5755
@ -5,80 +5,9 @@ import picocolors from 'picocolors';
|
|||||||
import type { Span } from '../trace';
|
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 { invariant } from 'foxts/guard';
|
import { createCompareSource, fileEqualWithCommentComparator } from 'foxts/compare-source';
|
||||||
|
|
||||||
export async function fileEqual(linesA: string[], source: AsyncIterable<string> | Iterable<string>): Promise<boolean> {
|
export const fileEqual = createCompareSource(fileEqualWithCommentComparator);
|
||||||
if (linesA.length === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const aLen = linesA.length;
|
|
||||||
|
|
||||||
const maxIndexA = aLen - 1;
|
|
||||||
let index = -1;
|
|
||||||
|
|
||||||
const iterator = Symbol.asyncIterator in source
|
|
||||||
? source[Symbol.asyncIterator]()
|
|
||||||
: (
|
|
||||||
Symbol.iterator in source
|
|
||||||
? source[Symbol.iterator]()
|
|
||||||
: null
|
|
||||||
);
|
|
||||||
|
|
||||||
invariant(iterator, 'source must be iterable or async iterable');
|
|
||||||
|
|
||||||
let result = await iterator.next();
|
|
||||||
let lineB: string = result.value;
|
|
||||||
|
|
||||||
while (!result.done) {
|
|
||||||
index++;
|
|
||||||
|
|
||||||
// b become bigger
|
|
||||||
if (index === aLen) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const lineA = linesA[index];
|
|
||||||
|
|
||||||
if (lineA.length === 0) {
|
|
||||||
if (lineB.length === 0) {
|
|
||||||
// eslint-disable-next-line no-await-in-loop -- sequential
|
|
||||||
result = await iterator.next();
|
|
||||||
lineB = result.value;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const aFirstChar = lineA.charCodeAt(0);
|
|
||||||
if (aFirstChar !== lineB.charCodeAt(0)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now both line has the same first char
|
|
||||||
// We only need to compare one of them
|
|
||||||
if (
|
|
||||||
aFirstChar === 35 // #
|
|
||||||
|| aFirstChar === 33 // !
|
|
||||||
) {
|
|
||||||
// eslint-disable-next-line no-await-in-loop -- sequential
|
|
||||||
result = await iterator.next();
|
|
||||||
lineB = result.value;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lineA !== lineB) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-await-in-loop -- sequential
|
|
||||||
result = await iterator.next();
|
|
||||||
lineB = result.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// b is not smaller than a
|
|
||||||
return index === maxIndexA;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function compareAndWriteFile(span: Span, linesA: string[], filePath: string) {
|
export async function compareAndWriteFile(span: Span, linesA: string[], filePath: string) {
|
||||||
const isEqual = await span.traceChildAsync(`compare ${filePath}`, async () => {
|
const isEqual = await span.traceChildAsync(`compare ${filePath}`, async () => {
|
||||||
|
|||||||
@ -31,7 +31,7 @@
|
|||||||
"fast-cidr-tools": "^0.3.2",
|
"fast-cidr-tools": "^0.3.2",
|
||||||
"fast-fifo": "^1.3.2",
|
"fast-fifo": "^1.3.2",
|
||||||
"fdir": "^6.4.4",
|
"fdir": "^6.4.4",
|
||||||
"foxts": "^3.1.1",
|
"foxts": "^3.3.1",
|
||||||
"hash-wasm": "^4.12.0",
|
"hash-wasm": "^4.12.0",
|
||||||
"json-stringify-pretty-compact": "3.0.0",
|
"json-stringify-pretty-compact": "3.0.0",
|
||||||
"picocolors": "^1.1.1",
|
"picocolors": "^1.1.1",
|
||||||
@ -39,7 +39,7 @@
|
|||||||
"tar-fs": "^3.0.8",
|
"tar-fs": "^3.0.8",
|
||||||
"tldts": "^6.1.86",
|
"tldts": "^6.1.86",
|
||||||
"tldts-experimental": "^6.1.86",
|
"tldts-experimental": "^6.1.86",
|
||||||
"undici": "^7.8.0",
|
"undici": "^7.9.0",
|
||||||
"undici-cache-store-better-sqlite3": "^1.0.0",
|
"undici-cache-store-better-sqlite3": "^1.0.0",
|
||||||
"whoiser": "^1.18.0",
|
"whoiser": "^1.18.0",
|
||||||
"why-is-node-running": "^3.2.2",
|
"why-is-node-running": "^3.2.2",
|
||||||
|
|||||||
32
pnpm-lock.yaml
generated
32
pnpm-lock.yaml
generated
@ -50,8 +50,8 @@ importers:
|
|||||||
specifier: ^6.4.4
|
specifier: ^6.4.4
|
||||||
version: 6.4.4(picomatch@4.0.2)
|
version: 6.4.4(picomatch@4.0.2)
|
||||||
foxts:
|
foxts:
|
||||||
specifier: ^3.1.1
|
specifier: ^3.3.1
|
||||||
version: 3.1.1
|
version: 3.3.1
|
||||||
hash-wasm:
|
hash-wasm:
|
||||||
specifier: ^4.12.0
|
specifier: ^4.12.0
|
||||||
version: 4.12.0
|
version: 4.12.0
|
||||||
@ -74,11 +74,11 @@ importers:
|
|||||||
specifier: ^6.1.86
|
specifier: ^6.1.86
|
||||||
version: 6.1.86
|
version: 6.1.86
|
||||||
undici:
|
undici:
|
||||||
specifier: ^7.8.0
|
specifier: ^7.9.0
|
||||||
version: 7.8.0
|
version: 7.9.0
|
||||||
undici-cache-store-better-sqlite3:
|
undici-cache-store-better-sqlite3:
|
||||||
specifier: ^1.0.0
|
specifier: ^1.0.0
|
||||||
version: 1.0.0(undici@7.8.0)
|
version: 1.0.0(undici@7.9.0)
|
||||||
whoiser:
|
whoiser:
|
||||||
specifier: ^1.18.0
|
specifier: ^1.18.0
|
||||||
version: 1.18.0(patch_hash=01fa406613b6f7b55ad41a6e49450f5a6b1b198b837c4f3fe11edc48c779189f)
|
version: 1.18.0(patch_hash=01fa406613b6f7b55ad41a6e49450f5a6b1b198b837c4f3fe11edc48c779189f)
|
||||||
@ -1356,8 +1356,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
|
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
foxts@3.1.1:
|
foxts@3.3.1:
|
||||||
resolution: {integrity: sha512-ZPKa4ZA/daMu+V441qGUSaC3WH3lkumQeHGvMVtxFC1iIehNbwZKFNlk3KXIO/4PnOz0xZpTohKP0Y5cBnULMQ==}
|
resolution: {integrity: sha512-1lgjnxGQBPdCJsjFnUls3YkE2tYTwcrWpeSBu3P8rzCl2qgP+T4WDuwCWnCNprPlAmnEMQD6uydWUyO7gG6HRQ==}
|
||||||
|
|
||||||
fresh@2.0.0:
|
fresh@2.0.0:
|
||||||
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
|
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
|
||||||
@ -2094,8 +2094,8 @@ packages:
|
|||||||
undici-types@6.21.0:
|
undici-types@6.21.0:
|
||||||
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
|
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
|
||||||
|
|
||||||
undici@7.8.0:
|
undici@7.9.0:
|
||||||
resolution: {integrity: sha512-vFv1GA99b7eKO1HG/4RPu2Is3FBTWBrmzqzO0mz+rLxN3yXkE4mqRcb8g8fHxzX4blEysrNZLqg5RbJLqX5buA==}
|
resolution: {integrity: sha512-e696y354tf5cFZPXsF26Yg+5M63+5H3oE6Vtkh2oqbvsE2Oe7s2nIbcQh5lmG7Lp/eS29vJtTpw9+p6PX0qNSg==}
|
||||||
engines: {node: '>=20.18.1'}
|
engines: {node: '>=20.18.1'}
|
||||||
|
|
||||||
unpipe@1.0.0:
|
unpipe@1.0.0:
|
||||||
@ -3107,7 +3107,7 @@ snapshots:
|
|||||||
eslint-plugin-regexp: 2.7.0(eslint@9.26.0)
|
eslint-plugin-regexp: 2.7.0(eslint@9.26.0)
|
||||||
eslint-plugin-sukka: 6.19.0(eslint@9.26.0)(typescript@5.8.3)
|
eslint-plugin-sukka: 6.19.0(eslint@9.26.0)(typescript@5.8.3)
|
||||||
eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)
|
eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)
|
||||||
foxts: 3.1.1
|
foxts: 3.3.1
|
||||||
jsonc-eslint-parser: 2.4.0
|
jsonc-eslint-parser: 2.4.0
|
||||||
picocolors: 1.1.1
|
picocolors: 1.1.1
|
||||||
typescript-eslint: 8.32.0(eslint@9.26.0)(typescript@5.8.3)
|
typescript-eslint: 8.32.0(eslint@9.26.0)(typescript@5.8.3)
|
||||||
@ -3241,7 +3241,7 @@ snapshots:
|
|||||||
'@eslint-sukka/shared': 6.19.0(eslint@9.26.0)(typescript@5.8.3)
|
'@eslint-sukka/shared': 6.19.0(eslint@9.26.0)(typescript@5.8.3)
|
||||||
'@typescript-eslint/type-utils': 8.32.0(eslint@9.26.0)(typescript@5.8.3)
|
'@typescript-eslint/type-utils': 8.32.0(eslint@9.26.0)(typescript@5.8.3)
|
||||||
'@typescript-eslint/utils': 8.32.0(eslint@9.26.0)(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.32.0(eslint@9.26.0)(typescript@5.8.3)
|
||||||
foxts: 3.1.1
|
foxts: 3.3.1
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@ -3455,7 +3455,7 @@ snapshots:
|
|||||||
|
|
||||||
forwarded@0.2.0: {}
|
forwarded@0.2.0: {}
|
||||||
|
|
||||||
foxts@3.1.1: {}
|
foxts@3.3.1: {}
|
||||||
|
|
||||||
fresh@2.0.0: {}
|
fresh@2.0.0: {}
|
||||||
|
|
||||||
@ -4212,15 +4212,15 @@ snapshots:
|
|||||||
|
|
||||||
typescript@5.8.3: {}
|
typescript@5.8.3: {}
|
||||||
|
|
||||||
undici-cache-store-better-sqlite3@1.0.0(undici@7.8.0):
|
undici-cache-store-better-sqlite3@1.0.0(undici@7.9.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
better-sqlite3: 11.10.0
|
better-sqlite3: 11.10.0
|
||||||
foxts: 3.1.1
|
foxts: 3.3.1
|
||||||
undici: 7.8.0
|
undici: 7.9.0
|
||||||
|
|
||||||
undici-types@6.21.0: {}
|
undici-types@6.21.0: {}
|
||||||
|
|
||||||
undici@7.8.0: {}
|
undici@7.9.0: {}
|
||||||
|
|
||||||
unpipe@1.0.0: {}
|
unpipe@1.0.0: {}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user