Refactor: refine writing strategy
Some checks are pending
Build / Build (push) Waiting to run
Build / Diff output (push) Blocked by required conditions
Build / Deploy to Cloudflare Pages (push) Blocked by required conditions
Build / Deploy to GitHub and GitLab (push) Blocked by required conditions

This commit is contained in:
SukkaW
2025-02-01 00:04:09 +08:00
parent 3926fb3484
commit 2035f5ea96
8 changed files with 41 additions and 35 deletions

View File

@@ -1,15 +1,13 @@
import path from 'node:path';
import type { Span } from '../../trace';
import { compareAndWriteFile } from '../create-file';
export abstract class BaseWriteStrategy {
// abstract readonly type: 'domainset' | 'non_ip' | 'ip' | (string & {});
public overwriteFilename: string | null = null;
public abstract readonly type: 'domainset' | 'non_ip' | 'ip' | (string & {});
abstract readonly fileExtension: 'conf' | 'txt' | 'json' | (string & {});
constructor(protected outputDir: string) {}
constructor(public readonly outputDir: string) {}
protected abstract result: string[] | null;
@@ -51,14 +49,14 @@ export abstract class BaseWriteStrategy {
return result;
};
abstract withPadding(title: string, description: string[] | readonly string[], date: Date, content: string[]): string[];
protected abstract withPadding(title: string, description: string[] | readonly string[], date: Date, content: string[]): string[];
output(
public output(
span: Span,
title: string,
description: string[] | readonly string[],
date: Date,
relativePath: string
filePath: string
): void | Promise<void> {
if (!this.result) {
return;
@@ -71,11 +69,11 @@ export abstract class BaseWriteStrategy {
date,
this.result
),
path.join(this.outputDir, relativePath)
filePath
);
};
get content() {
public get content() {
return this.result;
}
}

View File

@@ -12,7 +12,7 @@ export class ClashDomainSet extends BaseWriteStrategy {
protected result: string[] = ['this_ruleset_is_made_by_sukkaw.ruleset.skk.moe'];
constructor(protected outputDir = OUTPUT_CLASH_DIR) {
constructor(public readonly outputDir = OUTPUT_CLASH_DIR) {
super(outputDir);
}
@@ -49,7 +49,7 @@ export class ClashIPSet extends BaseWriteStrategy {
protected result: string[] = [];
constructor(protected outputDir = OUTPUT_CLASH_DIR) {
constructor(public readonly outputDir = OUTPUT_CLASH_DIR) {
super(outputDir);
}
@@ -84,7 +84,7 @@ export class ClashClassicRuleSet extends BaseWriteStrategy {
protected result: string[] = ['DOMAIN,this_ruleset_is_made_by_sukkaw.ruleset.skk.moe'];
constructor(public readonly type: string, protected outputDir = OUTPUT_CLASH_DIR) {
constructor(public readonly type: 'ip' | 'non_ip' /* | (string & {}) */, public readonly outputDir = OUTPUT_CLASH_DIR) {
super(outputDir);
}

View File

@@ -42,7 +42,11 @@ export class SingboxSource extends BaseWriteStrategy {
});
}
constructor(public type: string, protected outputDir = OUTPUT_SINGBOX_DIR) {
constructor(
/** Since sing-box only have one format that does not reflect type, we need to specify it */
public type: 'domainset' | 'non_ip' | 'ip' /* | (string & {}) */,
public readonly outputDir = OUTPUT_SINGBOX_DIR
) {
super(outputDir);
}

View File

@@ -50,7 +50,11 @@ export class SurgeRuleSet extends BaseWriteStrategy {
protected result: string[] = ['DOMAIN,this_ruleset_is_made_by_sukkaw.ruleset.skk.moe'];
constructor(public readonly type: string, outputDir = OUTPUT_SURGE_DIR) {
constructor(
/** Surge RULE-SET can be both ip or non_ip, so this needs to be specified */
public readonly type: 'ip' | 'non_ip' | (string & {}),
public readonly outputDir = OUTPUT_SURGE_DIR
) {
super(outputDir);
}
@@ -130,7 +134,7 @@ export class SurgeRuleSet extends BaseWriteStrategy {
export class SurgeMitmSgmodule extends BaseWriteStrategy {
// readonly type = 'domainset';
readonly fileExtension = 'sgmodule';
type = '';
readonly type = '';
private rules = new Set<string>();