From 34c316f509fba574d36cb530f93d65af595f05e1 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Sun, 2 Mar 2025 00:28:44 +0800 Subject: [PATCH] Chore: improve trace output --- Build/lib/rules/base.ts | 31 +++++++++++------------ Build/lib/writing-strategy/adguardhome.ts | 2 ++ Build/lib/writing-strategy/base.ts | 2 ++ Build/lib/writing-strategy/clash.ts | 6 +++++ Build/lib/writing-strategy/singbox.ts | 2 ++ Build/lib/writing-strategy/surge.ts | 6 +++++ 6 files changed, 33 insertions(+), 16 deletions(-) diff --git a/Build/lib/rules/base.ts b/Build/lib/rules/base.ts index 44b48e53..c22aa566 100644 --- a/Build/lib/rules/base.ts +++ b/Build/lib/rules/base.ts @@ -1,6 +1,6 @@ import type { Span } from '../../trace'; import { HostnameSmolTrie } from '../trie'; -import { invariant, not } from 'foxts/guard'; +import { not, nullthrow } from 'foxts/guard'; import type { MaybePromise } from '../misc'; import type { BaseWriteStrategy } from '../writing-strategy/base'; import { merge as mergeCidr } from 'fast-cidr-tools'; @@ -442,25 +442,24 @@ export class FileOutput { return childSpan.traceChildAsync('output to disk', (childSpan) => { const promises: Array | void> = []; - invariant(this.title, 'Missing title'); - invariant(this.description, 'Missing description'); - for (let i = 0, len = this.strategies.length; i < len; i++) { const strategy = this.strategies[i]; if (strategy) { const basename = (strategy.overwriteFilename || this.id) + '.' + strategy.fileExtension; - promises.push(strategy.output( - childSpan, - this.title, - this.description, - this.date, - path.join( - strategy.outputDir, - strategy.type - ? path.join(strategy.type, basename) - : basename - ) - )); + promises.push( + childSpan.traceChildAsync('write ' + strategy.name, (childSpan) => Promise.resolve(strategy.output( + childSpan, + nullthrow(this.title, 'Missing title'), + nullthrow(this.description, 'Missing description'), + this.date, + path.join( + strategy.outputDir, + strategy.type + ? path.join(strategy.type, basename) + : basename + ) + ))) + ); } } diff --git a/Build/lib/writing-strategy/adguardhome.ts b/Build/lib/writing-strategy/adguardhome.ts index a35a7a28..0f25a0fb 100644 --- a/Build/lib/writing-strategy/adguardhome.ts +++ b/Build/lib/writing-strategy/adguardhome.ts @@ -4,6 +4,8 @@ import { noop } from 'foxts/noop'; import { notSupported } from '../misc'; export class AdGuardHome extends BaseWriteStrategy { + public readonly name = 'adguardhome'; + // readonly type = 'domainset'; readonly fileExtension = 'txt'; readonly type = ''; diff --git a/Build/lib/writing-strategy/base.ts b/Build/lib/writing-strategy/base.ts index d8885c63..0e487ee4 100644 --- a/Build/lib/writing-strategy/base.ts +++ b/Build/lib/writing-strategy/base.ts @@ -6,6 +6,8 @@ import { compareAndWriteFile } from '../create-file'; * date is written to a file. */ export abstract class BaseWriteStrategy { + public abstract readonly name: string; + /** * Sometimes a ruleset will create extra files (e.g. reject-url-regex w/ mitm.sgmodule), * and doesn't share the same filename and id. This property is used to overwrite the filename. diff --git a/Build/lib/writing-strategy/clash.ts b/Build/lib/writing-strategy/clash.ts index 537b002c..1cedc076 100644 --- a/Build/lib/writing-strategy/clash.ts +++ b/Build/lib/writing-strategy/clash.ts @@ -6,6 +6,8 @@ import { OUTPUT_CLASH_DIR } from '../../constants/dir'; import { appendArrayInPlace } from '../append-array-in-place'; export class ClashDomainSet extends BaseWriteStrategy { + public readonly name = 'clash domainset'; + // readonly type = 'domainset'; readonly fileExtension = 'txt'; readonly type = 'domainset'; @@ -43,6 +45,8 @@ export class ClashDomainSet extends BaseWriteStrategy { } export class ClashIPSet extends BaseWriteStrategy { + public readonly name = 'clash ipcidr'; + // readonly type = 'domainset'; readonly fileExtension = 'txt'; readonly type = 'ip'; @@ -80,6 +84,8 @@ export class ClashIPSet extends BaseWriteStrategy { } export class ClashClassicRuleSet extends BaseWriteStrategy { + public readonly name = 'clash classic ruleset'; + readonly fileExtension = 'txt'; protected result: string[] = ['DOMAIN,this_ruleset_is_made_by_sukkaw.ruleset.skk.moe']; diff --git a/Build/lib/writing-strategy/singbox.ts b/Build/lib/writing-strategy/singbox.ts index 19fe5e29..d42d7058 100644 --- a/Build/lib/writing-strategy/singbox.ts +++ b/Build/lib/writing-strategy/singbox.ts @@ -26,6 +26,8 @@ export interface SingboxSourceFormat { } export class SingboxSource extends BaseWriteStrategy { + public readonly name = 'singbox'; + readonly fileExtension = 'json'; static readonly jsonToLines = (json: unknown): string[] => stringify(json).split('\n'); diff --git a/Build/lib/writing-strategy/surge.ts b/Build/lib/writing-strategy/surge.ts index 4a1f1624..3507c51f 100644 --- a/Build/lib/writing-strategy/surge.ts +++ b/Build/lib/writing-strategy/surge.ts @@ -9,6 +9,8 @@ import { OUTPUT_MODULES_DIR, OUTPUT_SURGE_DIR } from '../../constants/dir'; import { withBannerArray, withIdentityContent } from '../misc'; export class SurgeDomainSet extends BaseWriteStrategy { + public readonly name = 'surge domainset'; + // readonly type = 'domainset'; readonly fileExtension = 'conf'; type = 'domainset'; @@ -46,6 +48,8 @@ export class SurgeDomainSet extends BaseWriteStrategy { } export class SurgeRuleSet extends BaseWriteStrategy { + public readonly name = 'surge ruleset'; + readonly fileExtension = 'conf'; protected result: string[] = ['DOMAIN,this_ruleset_is_made_by_sukkaw.ruleset.skk.moe']; @@ -132,6 +136,8 @@ export class SurgeRuleSet extends BaseWriteStrategy { } export class SurgeMitmSgmodule extends BaseWriteStrategy { + public readonly name = 'surge sgmodule'; + // readonly type = 'domainset'; readonly fileExtension = 'sgmodule'; readonly type = '';