From dda0555c0b40fef0930adad041eca731bdaa8d54 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Tue, 2 Jul 2024 10:50:09 +0800 Subject: [PATCH] Minor Changes + Housekeeping --- Build/build-cdn-download-conf.ts | 6 ++--- Build/build-speedtest-domainset.ts | 4 ++-- Build/lib/aho-corasick.ts | 35 +---------------------------- Build/lib/create-file.ts | 4 ++-- Build/lib/timsort.ts | 18 +++++++-------- Build/trace/index.ts | 18 +++++++-------- bun.lockb | Bin 109722 -> 112978 bytes package.json | 16 ++++++------- 8 files changed, 34 insertions(+), 67 deletions(-) diff --git a/Build/build-cdn-download-conf.ts b/Build/build-cdn-download-conf.ts index f930a0ba..6771dcc9 100644 --- a/Build/build-cdn-download-conf.ts +++ b/Build/build-cdn-download-conf.ts @@ -9,7 +9,7 @@ import { domainDeduper } from './lib/domain-deduper'; import { appendArrayInPlace } from './lib/append-array-in-place'; import { sortDomains } from './lib/stable-sort-domain'; -const getS3OSSDomainsPromise = (async (): Promise> => { +const getS3OSSDomainsPromise = (async (): Promise => { const trie = createTrie( (await getPublicSuffixListTextPromise()).split('\n'), true, @@ -45,7 +45,7 @@ const getS3OSSDomainsPromise = (async (): Promise> => { } }); - return S3OSSDomains; + return Array.from(S3OSSDomains); })(); export const buildCdnDownloadConf = task(import.meta.main, import.meta.path)(async (span) => { @@ -62,7 +62,7 @@ export const buildCdnDownloadConf = task(import.meta.main, import.meta.path)(asy readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/domainset/steam.conf')) ]); - appendArrayInPlace(downloadDomainSet, Array.from(S3OSSDomains).map((domain) => `.${domain}`)); + appendArrayInPlace(downloadDomainSet, S3OSSDomains.map(domain => `.${domain}`)); appendArrayInPlace(downloadDomainSet, steamDomainSet); return Promise.all([ diff --git a/Build/build-speedtest-domainset.ts b/Build/build-speedtest-domainset.ts index d92ca573..c82714e9 100644 --- a/Build/build-speedtest-domainset.ts +++ b/Build/build-speedtest-domainset.ts @@ -20,8 +20,8 @@ const s = new Sema(2); const latestTopUserAgentsPromise = fsFetchCache.apply( 'https://cdn.jsdelivr.net/npm/top-user-agents@latest/src/desktop.json', () => fetchWithRetry('https://cdn.jsdelivr.net/npm/top-user-agents@latest/src/desktop.json') - .then(res => res.json() as any) - .then((userAgents: string[]) => userAgents.filter(ua => ua.startsWith('Mozilla/5.0 '))), + .then(res => res.json() as Promise) + .then((userAgents) => userAgents.filter(ua => ua.startsWith('Mozilla/5.0 '))), { serializer: serializeArray, deserializer: deserializeArray, diff --git a/Build/lib/aho-corasick.ts b/Build/lib/aho-corasick.ts index ad7675ef..c1ab6984 100644 --- a/Build/lib/aho-corasick.ts +++ b/Build/lib/aho-corasick.ts @@ -13,35 +13,6 @@ const createNode = (): Node => { return node; }; -const deepNodeToJSON = (node: Node, wset: WeakSet) => { - if (wset.has(node)) { - return 'circular'; - } - wset.add(node); - - const obj: Record = {}; - if (node[WORDEND]) { - obj['[end]'] = node[WORDEND]; - } - - node.forEach((value, key) => { - obj[key] = deepNodeToJSON(value, wset); - }); - return obj; -}; - -function createNodeInspectCustom(node: Node) { - const wset = new WeakSet(); - return () => { - try { - return JSON.stringify(deepNodeToJSON(node, wset), null, 2); - } catch (e) { - console.error(e); - return ''; - } - }; -} - const createKeywordFilter = (keys: string[] | Set) => { const root = createNode(); @@ -92,7 +63,7 @@ const createKeywordFilter = (keys: string[] | Set) => { // }; // build(); - const tester = (text: string) => { + return (text: string) => { let node: Node | undefined = root; for (let i = 0, textLen = text.length; i < textLen; i++) { @@ -111,10 +82,6 @@ const createKeywordFilter = (keys: string[] | Set) => { return false; }; - - tester[Bun.inspect.custom] = createNodeInspectCustom(root); - - return tester; }; export default createKeywordFilter; diff --git a/Build/lib/create-file.ts b/Build/lib/create-file.ts index e8d911a1..07f32cbe 100644 --- a/Build/lib/create-file.ts +++ b/Build/lib/create-file.ts @@ -159,7 +159,7 @@ const MARK = 'this_ruleset_is_made_by_sukkaw.ruleset.skk.moe'; export const createRuleset = ( parentSpan: Span, title: string, description: string[] | readonly string[], date: Date, content: string[], - type: 'ruleset' | 'domainset', surgePath: string, clashPath: string + type: ('ruleset' | 'domainset' | string & {}), surgePath: string, clashPath: string ) => parentSpan.traceChild(`create ruleset: ${path.basename(surgePath, path.extname(surgePath))}`).traceAsyncFn((childSpan) => { const surgeContent = withBannerArray( title, description, date, @@ -177,7 +177,7 @@ export const createRuleset = ( _clashContent = [`DOMAIN,${MARK}`, ...surgeRulesetToClashClassicalTextRuleset(content)]; break; default: - throw new TypeError(`Unknown type: ${type as any}`); + throw new TypeError(`Unknown type: ${type}`); } return withBannerArray(title, description, date, _clashContent); }); diff --git a/Build/lib/timsort.ts b/Build/lib/timsort.ts index 9ff4d0e3..a1be8a1b 100644 --- a/Build/lib/timsort.ts +++ b/Build/lib/timsort.ts @@ -426,15 +426,15 @@ class TimSort { this.tmp = new Array(this.tmpStorageLength); - this.stackLength = ( - this.length < 120 - ? 5 - : this.length < 1542 - ? 10 - : this.length < 119151 - ? 19 - : 40 - ); + if (this.length < 120) { + this.stackLength = 5; + } else if (this.length < 1542) { + this.stackLength = 10; + } else if (this.length < 119151) { + this.stackLength = 19; + } else { + this.stackLength = 40; + } this.runStart = new Array(this.stackLength); this.runLength = new Array(this.stackLength); diff --git a/Build/trace/index.ts b/Build/trace/index.ts index 298b30e0..48f71d11 100644 --- a/Build/trace/index.ts +++ b/Build/trace/index.ts @@ -166,19 +166,19 @@ function printTree(initialTree: TraceResult, printNode: (node: TraceResult, bran } function printStats(stats: TraceResult[]): void { - stats.sort((a, b) => a.start - b.start); - const longestTaskName = Math.max(...stats.map(i => i.name.length)); const realStart = Math.min(...stats.map(i => i.start)); const realEnd = Math.max(...stats.map(i => i.end)); const statsStep = ((realEnd - realStart) / 120) | 0; - stats.forEach(stat => { - console.log( - `[${stat.name}]${' '.repeat(longestTaskName - stat.name.length)}`, - ' '.repeat(((stat.start - realStart) / statsStep) | 0), - '='.repeat(Math.max(((stat.end - stat.start) / statsStep) | 0, 1)) - ); - }); + stats + .sort((a, b) => a.start - b.start) + .forEach(stat => { + console.log( + `[${stat.name}]${' '.repeat(longestTaskName - stat.name.length)}`, + ' '.repeat(((stat.start - realStart) / statsStep) | 0), + '='.repeat(Math.max(((stat.end - stat.start) / statsStep) | 0, 1)) + ); + }); } diff --git a/bun.lockb b/bun.lockb index f4ad9b575a877ca49be09d9056610a0cd28650ca..d3c93e0edb260f8a2c71dd37d9f6c9b12a2f511f 100755 GIT binary patch delta 22046 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 delta 21020 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