diff --git a/Build/lib/stable-sort-domain.bench.ts b/Build/lib/stable-sort-domain.bench.ts new file mode 100644 index 00000000..be00c06b --- /dev/null +++ b/Build/lib/stable-sort-domain.bench.ts @@ -0,0 +1,17 @@ +import { fetchRemoteTextByLine } from './fetch-text-by-line'; +import { getGorhillPublicSuffixPromise } from './get-gorhill-publicsuffix'; +import { processLineFromReadline } from './process-line'; +import { sortDomains } from './stable-sort-domain'; + +import { bench, group, run } from 'mitata'; + +(async () => { + const data = await processLineFromReadline(await fetchRemoteTextByLine('https://osint.digitalside.it/Threat-Intel/lists/latestdomains.txt')); + const gorhill = await getGorhillPublicSuffixPromise(); + + group('sortDomains', () => { + bench('run', () => sortDomains(data, gorhill)); + }); + + run(); +})(); diff --git a/Build/lib/stable-sort-domain.ts b/Build/lib/stable-sort-domain.ts index 7f65ac38..f8b5c831 100644 --- a/Build/lib/stable-sort-domain.ts +++ b/Build/lib/stable-sort-domain.ts @@ -1,4 +1,5 @@ import type { PublicSuffixList } from '@gorhill/publicsuffixlist'; +import { sort } from 'timsort'; const compare = (a: string | null, b: string | null) => { if (a === b) return 0; @@ -50,5 +51,7 @@ export const sortDomains = (inputs: string[], gorhill: PublicSuffixList) => { return compare($a, $b) || compare(a, b); }; - return inputs.sort(sorter); + sort(inputs, sorter); + + return inputs; }; diff --git a/bun.lockb b/bun.lockb index 360abbcb..5605f47b 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 677db73d..efff81b0 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "punycode": "^2.3.1", "table": "^6.8.2", "tar-stream": "^3.1.7", + "timsort": "^0.3.0", "tldts": "^6.1.19" }, "devDependencies": { @@ -37,6 +38,7 @@ "@types/async-retry": "^1.4.8", "@types/bun": "^1.1.1", "@types/tar-stream": "^3.1.3", + "@types/timsort": "^0.3.3", "bun-types": "^1.1.7", "eslint": "^9.2.0", "eslint-config-sukka": "6.0.0-beta.3",