From b820b4be1c4fa2086fed30b8454b30952c6cefba Mon Sep 17 00:00:00 2001 From: SukkaW Date: Sat, 1 Jun 2024 18:26:34 +0800 Subject: [PATCH] Perf: use `fdir` for crawling --- Build/build-common.ts | 22 ++++++++++++---------- bun.lockb | Bin 111650 -> 112002 bytes package.json | 1 + 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Build/build-common.ts b/Build/build-common.ts index 950fa979..fe0e5bc2 100644 --- a/Build/build-common.ts +++ b/Build/build-common.ts @@ -1,7 +1,6 @@ // @ts-check import * as path from 'path'; -import { PathScurry } from 'path-scurry'; import { readFileByLine } from './lib/fetch-text-by-line'; import { processLine } from './lib/process-line'; import { createRuleset } from './lib/create-file'; @@ -10,6 +9,7 @@ import type { Span } from './trace'; import { task } from './trace'; import { SHARED_DESCRIPTION } from './lib/constants'; import picocolors from 'picocolors'; +import { fdir as Fdir } from 'fdir'; const MAGIC_COMMAND_SKIP = '# $ custom_build_script'; const MAGIC_COMMAND_TITLE = '# $ meta_title '; @@ -22,27 +22,29 @@ const outputClashDir = path.resolve(import.meta.dir, '../Clash'); export const buildCommon = task(import.meta.path, async (span) => { const promises: Array> = []; - const pw = new PathScurry(sourceDir); - for await (const entry of pw) { - if (!entry.isFile()) { - continue; - } + const paths = await new Fdir() + .withRelativePaths() + .crawl(sourceDir) + .withPromise(); - const extname = path.extname(entry.name); + for (let i = 0, len = paths.length; i < len; i++) { + const relativePath = paths[i]; + + const extname = path.extname(relativePath); if (extname === '.js' || extname === '.ts') { continue; } + const fullPath = sourceDir + path.sep + relativePath; - const relativePath = entry.relative(); if (relativePath.startsWith('domainset/')) { - promises.push(transformDomainset(span, entry.fullpath(), relativePath)); + promises.push(transformDomainset(span, fullPath, relativePath)); continue; } if ( relativePath.startsWith('ip/') || relativePath.startsWith('non_ip/') ) { - promises.push(transformRuleset(span, entry.fullpath(), relativePath)); + promises.push(transformRuleset(span, fullPath, relativePath)); continue; } diff --git a/bun.lockb b/bun.lockb index 8ec2fe898d73d15e14892d11e9a45b5a912a163e..5c9ee1c486f8e0eca9c26c1849383d3601ac52ee 100755 GIT binary patch delta 18599 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 Zw-r&M+E+d0@^5xqe6w$5<(H_<{{sO_S&0Au delta 18544 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 diff --git a/package.json b/package.json index f32390ff..cafa9e95 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "ci-info": "^4.0.0", "csv-parse": "^5.5.6", "fast-cidr-tools": "^0.2.5", + "fdir": "^6.1.1", "mnemonist": "^0.39.8", "path-scurry": "^1.11.1", "picocolors": "^1.0.1",