mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-12 01:00:34 +08:00
Minor Changes + Housekeeping
This commit is contained in:
parent
b325f31990
commit
dda0555c0b
@ -9,7 +9,7 @@ import { domainDeduper } from './lib/domain-deduper';
|
|||||||
import { appendArrayInPlace } from './lib/append-array-in-place';
|
import { appendArrayInPlace } from './lib/append-array-in-place';
|
||||||
import { sortDomains } from './lib/stable-sort-domain';
|
import { sortDomains } from './lib/stable-sort-domain';
|
||||||
|
|
||||||
const getS3OSSDomainsPromise = (async (): Promise<Set<string>> => {
|
const getS3OSSDomainsPromise = (async (): Promise<string[]> => {
|
||||||
const trie = createTrie(
|
const trie = createTrie(
|
||||||
(await getPublicSuffixListTextPromise()).split('\n'),
|
(await getPublicSuffixListTextPromise()).split('\n'),
|
||||||
true,
|
true,
|
||||||
@ -45,7 +45,7 @@ const getS3OSSDomainsPromise = (async (): Promise<Set<string>> => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return S3OSSDomains;
|
return Array.from(S3OSSDomains);
|
||||||
})();
|
})();
|
||||||
|
|
||||||
export const buildCdnDownloadConf = task(import.meta.main, import.meta.path)(async (span) => {
|
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'))
|
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);
|
appendArrayInPlace(downloadDomainSet, steamDomainSet);
|
||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
|
|||||||
@ -20,8 +20,8 @@ const s = new Sema(2);
|
|||||||
const latestTopUserAgentsPromise = fsFetchCache.apply(
|
const latestTopUserAgentsPromise = fsFetchCache.apply(
|
||||||
'https://cdn.jsdelivr.net/npm/top-user-agents@latest/src/desktop.json',
|
'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')
|
() => fetchWithRetry('https://cdn.jsdelivr.net/npm/top-user-agents@latest/src/desktop.json')
|
||||||
.then(res => res.json() as any)
|
.then(res => res.json() as Promise<string[]>)
|
||||||
.then((userAgents: string[]) => userAgents.filter(ua => ua.startsWith('Mozilla/5.0 '))),
|
.then((userAgents) => userAgents.filter(ua => ua.startsWith('Mozilla/5.0 '))),
|
||||||
{
|
{
|
||||||
serializer: serializeArray,
|
serializer: serializeArray,
|
||||||
deserializer: deserializeArray,
|
deserializer: deserializeArray,
|
||||||
|
|||||||
@ -13,35 +13,6 @@ const createNode = (): Node => {
|
|||||||
return node;
|
return node;
|
||||||
};
|
};
|
||||||
|
|
||||||
const deepNodeToJSON = (node: Node, wset: WeakSet<Node>) => {
|
|
||||||
if (wset.has(node)) {
|
|
||||||
return 'circular';
|
|
||||||
}
|
|
||||||
wset.add(node);
|
|
||||||
|
|
||||||
const obj: Record<string, any> = {};
|
|
||||||
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<Node>();
|
|
||||||
return () => {
|
|
||||||
try {
|
|
||||||
return JSON.stringify(deepNodeToJSON(node, wset), null, 2);
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const createKeywordFilter = (keys: string[] | Set<string>) => {
|
const createKeywordFilter = (keys: string[] | Set<string>) => {
|
||||||
const root = createNode();
|
const root = createNode();
|
||||||
|
|
||||||
@ -92,7 +63,7 @@ const createKeywordFilter = (keys: string[] | Set<string>) => {
|
|||||||
// };
|
// };
|
||||||
// build();
|
// build();
|
||||||
|
|
||||||
const tester = (text: string) => {
|
return (text: string) => {
|
||||||
let node: Node | undefined = root;
|
let node: Node | undefined = root;
|
||||||
|
|
||||||
for (let i = 0, textLen = text.length; i < textLen; i++) {
|
for (let i = 0, textLen = text.length; i < textLen; i++) {
|
||||||
@ -111,10 +82,6 @@ const createKeywordFilter = (keys: string[] | Set<string>) => {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
tester[Bun.inspect.custom] = createNodeInspectCustom(root);
|
|
||||||
|
|
||||||
return tester;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createKeywordFilter;
|
export default createKeywordFilter;
|
||||||
|
|||||||
@ -159,7 +159,7 @@ const MARK = 'this_ruleset_is_made_by_sukkaw.ruleset.skk.moe';
|
|||||||
export const createRuleset = (
|
export const createRuleset = (
|
||||||
parentSpan: Span,
|
parentSpan: Span,
|
||||||
title: string, description: string[] | readonly string[], date: Date, content: string[],
|
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) => {
|
) => parentSpan.traceChild(`create ruleset: ${path.basename(surgePath, path.extname(surgePath))}`).traceAsyncFn((childSpan) => {
|
||||||
const surgeContent = withBannerArray(
|
const surgeContent = withBannerArray(
|
||||||
title, description, date,
|
title, description, date,
|
||||||
@ -177,7 +177,7 @@ export const createRuleset = (
|
|||||||
_clashContent = [`DOMAIN,${MARK}`, ...surgeRulesetToClashClassicalTextRuleset(content)];
|
_clashContent = [`DOMAIN,${MARK}`, ...surgeRulesetToClashClassicalTextRuleset(content)];
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new TypeError(`Unknown type: ${type as any}`);
|
throw new TypeError(`Unknown type: ${type}`);
|
||||||
}
|
}
|
||||||
return withBannerArray(title, description, date, _clashContent);
|
return withBannerArray(title, description, date, _clashContent);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -426,15 +426,15 @@ class TimSort<T> {
|
|||||||
|
|
||||||
this.tmp = new Array(this.tmpStorageLength);
|
this.tmp = new Array(this.tmpStorageLength);
|
||||||
|
|
||||||
this.stackLength = (
|
if (this.length < 120) {
|
||||||
this.length < 120
|
this.stackLength = 5;
|
||||||
? 5
|
} else if (this.length < 1542) {
|
||||||
: this.length < 1542
|
this.stackLength = 10;
|
||||||
? 10
|
} else if (this.length < 119151) {
|
||||||
: this.length < 119151
|
this.stackLength = 19;
|
||||||
? 19
|
} else {
|
||||||
: 40
|
this.stackLength = 40;
|
||||||
);
|
}
|
||||||
|
|
||||||
this.runStart = new Array(this.stackLength);
|
this.runStart = new Array(this.stackLength);
|
||||||
this.runLength = new Array(this.stackLength);
|
this.runLength = new Array(this.stackLength);
|
||||||
|
|||||||
@ -166,19 +166,19 @@ function printTree(initialTree: TraceResult, printNode: (node: TraceResult, bran
|
|||||||
}
|
}
|
||||||
|
|
||||||
function printStats(stats: TraceResult[]): void {
|
function printStats(stats: TraceResult[]): void {
|
||||||
stats.sort((a, b) => a.start - b.start);
|
|
||||||
|
|
||||||
const longestTaskName = Math.max(...stats.map(i => i.name.length));
|
const longestTaskName = Math.max(...stats.map(i => i.name.length));
|
||||||
const realStart = Math.min(...stats.map(i => i.start));
|
const realStart = Math.min(...stats.map(i => i.start));
|
||||||
const realEnd = Math.max(...stats.map(i => i.end));
|
const realEnd = Math.max(...stats.map(i => i.end));
|
||||||
|
|
||||||
const statsStep = ((realEnd - realStart) / 120) | 0;
|
const statsStep = ((realEnd - realStart) / 120) | 0;
|
||||||
|
|
||||||
stats.forEach(stat => {
|
stats
|
||||||
console.log(
|
.sort((a, b) => a.start - b.start)
|
||||||
`[${stat.name}]${' '.repeat(longestTaskName - stat.name.length)}`,
|
.forEach(stat => {
|
||||||
' '.repeat(((stat.start - realStart) / statsStep) | 0),
|
console.log(
|
||||||
'='.repeat(Math.max(((stat.end - stat.start) / statsStep) | 0, 1))
|
`[${stat.name}]${' '.repeat(longestTaskName - stat.name.length)}`,
|
||||||
);
|
' '.repeat(((stat.start - realStart) / statsStep) | 0),
|
||||||
});
|
'='.repeat(Math.max(((stat.end - stat.start) / statsStep) | 0, 1))
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
16
package.json
16
package.json
@ -29,21 +29,21 @@
|
|||||||
"punycode": "^2.3.1",
|
"punycode": "^2.3.1",
|
||||||
"table": "^6.8.2",
|
"table": "^6.8.2",
|
||||||
"tar-stream": "^3.1.7",
|
"tar-stream": "^3.1.7",
|
||||||
"tldts": "^6.1.29",
|
"tldts": "^6.1.30",
|
||||||
"tldts-experimental": "^6.1.29",
|
"tldts-experimental": "^6.1.30",
|
||||||
"yaml": "^2.4.5"
|
"yaml": "^2.4.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint-sukka/node": "^6.0.0-beta.29",
|
"@eslint-sukka/node": "^6.0.0",
|
||||||
"@types/async-retry": "^1.4.8",
|
"@types/async-retry": "^1.4.8",
|
||||||
"@types/bun": "^1.1.5",
|
"@types/bun": "^1.1.6",
|
||||||
"@types/tar-stream": "^3.1.3",
|
"@types/tar-stream": "^3.1.3",
|
||||||
"bun-types": "^1.1.17",
|
"bun-types": "^1.1.17",
|
||||||
"eslint": "^9.5.0",
|
"eslint": "^9.6.0",
|
||||||
"eslint-config-sukka": "^6.0.0-beta.29",
|
"eslint-config-sukka": "^6.0.0",
|
||||||
"eslint-formatter-sukka": "^6.0.0-beta.29",
|
"eslint-formatter-sukka": "^6.0.0",
|
||||||
"mitata": "^0.1.11",
|
"mitata": "^0.1.11",
|
||||||
"typescript": "^5.5.2"
|
"typescript": "^5.5.3"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"has": "npm:@nolyfill/has@latest"
|
"has": "npm:@nolyfill/has@latest"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user