surgio 2.25.2 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/bin/dev +17 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/run +8 -0
  4. package/bin/run.cmd +3 -0
  5. package/build/base-command.d.ts +18 -0
  6. package/build/base-command.js +74 -0
  7. package/build/commands/check.d.ts +10 -0
  8. package/build/commands/check.js +88 -0
  9. package/build/commands/clean-cache.d.ts +6 -0
  10. package/build/commands/clean-cache.js +29 -0
  11. package/build/commands/doctor.d.ts +6 -0
  12. package/build/commands/doctor.js +21 -0
  13. package/build/commands/generate.d.ts +7 -0
  14. package/build/commands/generate.js +93 -0
  15. package/build/commands/lint.d.ts +6 -0
  16. package/build/commands/lint.js +36 -0
  17. package/build/commands/new.d.ts +6 -0
  18. package/build/commands/new.js +36 -0
  19. package/build/commands/subscriptions.d.ts +7 -0
  20. package/build/commands/subscriptions.js +96 -0
  21. package/build/commands/upload.d.ts +6 -0
  22. package/build/commands/upload.js +87 -0
  23. package/build/config.d.ts +6 -0
  24. package/build/config.js +151 -0
  25. package/build/constant/constant.d.ts +17 -16
  26. package/build/constant/constant.js +3 -2
  27. package/build/constant/env.js +1 -1
  28. package/build/constant/error.js +1 -1
  29. package/build/constant/index.js +1 -1
  30. package/build/generate.d.ts +0 -1
  31. package/build/generate.js +3 -65
  32. package/build/generator/artifact.d.ts +299 -64
  33. package/build/generator/artifact.js +90 -92
  34. package/build/generator/index.d.ts +2 -0
  35. package/build/generator/index.js +19 -0
  36. package/build/generator/template.js +2 -6
  37. package/build/hooks/init.d.ts +3 -0
  38. package/build/hooks/init.js +32 -0
  39. package/build/index.d.ts +55 -53
  40. package/build/index.js +13 -51
  41. package/build/internal.d.ts +4 -0
  42. package/build/internal.js +21 -0
  43. package/build/misc/deprecation.d.ts +1 -6
  44. package/build/misc/deprecation.js +1 -8
  45. package/build/misc/flag_cn.js +1 -1
  46. package/build/provider/BlackSSLProvider.d.ts +4 -3
  47. package/build/provider/BlackSSLProvider.js +24 -16
  48. package/build/provider/ClashProvider.d.ts +7 -10
  49. package/build/provider/ClashProvider.js +165 -76
  50. package/build/provider/CustomProvider.d.ts +4 -3
  51. package/build/provider/CustomProvider.js +81 -50
  52. package/build/provider/Provider.d.ts +9 -22
  53. package/build/provider/Provider.js +31 -69
  54. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +4 -5
  55. package/build/provider/ShadowsocksJsonSubscribeProvider.js +27 -21
  56. package/build/provider/ShadowsocksSubscribeProvider.d.ts +5 -8
  57. package/build/provider/ShadowsocksSubscribeProvider.js +30 -27
  58. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +5 -8
  59. package/build/provider/ShadowsocksrSubscribeProvider.js +30 -23
  60. package/build/provider/SsdProvider.d.ts +5 -8
  61. package/build/provider/SsdProvider.js +56 -39
  62. package/build/provider/TrojanProvider.d.ts +5 -8
  63. package/build/provider/TrojanProvider.js +37 -30
  64. package/build/provider/V2rayNSubscribeProvider.d.ts +4 -5
  65. package/build/provider/V2rayNSubscribeProvider.js +61 -33
  66. package/build/provider/index.d.ts +16 -2
  67. package/build/provider/index.js +12 -5
  68. package/build/provider/types.d.ts +10 -1
  69. package/build/provider/types.js +1 -1
  70. package/build/redis.js +1 -1
  71. package/build/types.d.ts +45 -236
  72. package/build/types.js +2 -1
  73. package/build/utils/cache.js +29 -27
  74. package/build/utils/clash.d.ts +204 -3
  75. package/build/utils/clash.js +247 -106
  76. package/build/utils/configurables.d.ts +71 -0
  77. package/build/utils/configurables.js +8 -0
  78. package/build/utils/constant.js +1 -1
  79. package/build/utils/dns.js +1 -1
  80. package/build/utils/doctor.d.ts +2 -0
  81. package/build/utils/doctor.js +38 -0
  82. package/build/utils/env-flag.js +2 -2
  83. package/build/utils/error-helper.d.ts +2 -2
  84. package/build/utils/error-helper.js +30 -16
  85. package/build/utils/filter.d.ts +46 -43
  86. package/build/utils/filter.js +51 -30
  87. package/build/utils/flag.js +1 -1
  88. package/build/utils/http-client.js +38 -5
  89. package/build/utils/index.d.ts +13 -21
  90. package/build/utils/index.js +98 -117
  91. package/build/utils/linter.js +5 -2
  92. package/build/utils/loon.d.ts +3 -2
  93. package/build/utils/loon.js +67 -5
  94. package/build/utils/quantumult.d.ts +3 -3
  95. package/build/utils/quantumult.js +190 -258
  96. package/build/utils/relayable-url.js +1 -1
  97. package/build/utils/remote-snippet.js +3 -4
  98. package/build/utils/ss.js +27 -17
  99. package/build/utils/ssr.js +3 -4
  100. package/build/utils/subscription.js +7 -7
  101. package/build/utils/surfboard.d.ts +3 -2
  102. package/build/utils/surfboard.js +142 -126
  103. package/build/utils/surge.d.ts +4 -2
  104. package/build/utils/surge.js +328 -300
  105. package/build/utils/time.d.ts +1 -0
  106. package/build/utils/time.js +6 -0
  107. package/build/utils/tmp-helper.js +8 -1
  108. package/build/utils/trojan.js +19 -11
  109. package/build/utils/v2ray.js +2 -2
  110. package/build/validators/artifact.d.ts +35 -0
  111. package/build/validators/artifact.js +17 -0
  112. package/build/validators/common.d.ts +121 -0
  113. package/build/validators/common.js +52 -0
  114. package/build/validators/filter.d.ts +10 -0
  115. package/build/validators/filter.js +15 -0
  116. package/build/validators/hooks.d.ts +7 -0
  117. package/build/validators/hooks.js +8 -0
  118. package/build/validators/http.d.ts +137 -0
  119. package/build/validators/http.js +19 -0
  120. package/build/validators/index.d.ts +15 -0
  121. package/build/validators/index.js +32 -0
  122. package/build/validators/provider.d.ts +109 -0
  123. package/build/validators/provider.js +41 -0
  124. package/build/validators/shadowsocks.d.ts +86 -0
  125. package/build/validators/shadowsocks.js +29 -0
  126. package/build/validators/shadowsocksr.d.ts +77 -0
  127. package/build/validators/shadowsocksr.js +19 -0
  128. package/build/validators/snell.d.ts +71 -0
  129. package/build/validators/snell.js +20 -0
  130. package/build/validators/socks5.d.ts +77 -0
  131. package/build/validators/socks5.js +19 -0
  132. package/build/validators/surgio-config.d.ts +307 -0
  133. package/build/validators/surgio-config.js +95 -0
  134. package/build/validators/trojan.d.ts +86 -0
  135. package/build/validators/trojan.js +15 -0
  136. package/build/validators/tuic.d.ts +301 -0
  137. package/build/validators/tuic.js +21 -0
  138. package/build/validators/vmess.d.ts +92 -0
  139. package/build/validators/vmess.js +29 -0
  140. package/build/validators/wireguard.d.ts +123 -0
  141. package/build/validators/wireguard.js +26 -0
  142. package/config.d.ts +1 -0
  143. package/config.js +1 -0
  144. package/constant.d.ts +1 -0
  145. package/constant.js +1 -0
  146. package/generator.d.ts +1 -0
  147. package/generator.js +1 -0
  148. package/hygen-template/artifact/new/index.js +15 -15
  149. package/hygen-template/provider/new/index.js +8 -7
  150. package/hygen-template/template/new/index.js +3 -3
  151. package/index.d.ts +1 -0
  152. package/index.js +1 -0
  153. package/internal.d.ts +1 -0
  154. package/internal.js +1 -0
  155. package/package.json +112 -75
  156. package/provider.d.ts +1 -0
  157. package/provider.js +1 -0
  158. package/utils.d.ts +1 -0
  159. package/utils.js +1 -0
  160. package/bin/surgio.js +0 -8
  161. package/build/command/check.d.ts +0 -9
  162. package/build/command/check.js +0 -79
  163. package/build/command/clean-cache.d.ts +0 -8
  164. package/build/command/clean-cache.js +0 -43
  165. package/build/command/doctor.d.ts +0 -9
  166. package/build/command/doctor.js +0 -63
  167. package/build/command/generate.d.ts +0 -8
  168. package/build/command/generate.js +0 -64
  169. package/build/command/lint.d.ts +0 -7
  170. package/build/command/lint.js +0 -42
  171. package/build/command/new.d.ts +0 -7
  172. package/build/command/new.js +0 -44
  173. package/build/command/subscriptions.d.ts +0 -10
  174. package/build/command/subscriptions.js +0 -87
  175. package/build/command/upload.d.ts +0 -9
  176. package/build/command/upload.js +0 -101
  177. package/build/utils/command.d.ts +0 -2
  178. package/build/utils/command.js +0 -23
  179. package/build/utils/config.d.ts +0 -6
  180. package/build/utils/config.js +0 -245
  181. package/build/utils/patch-proxy.d.ts +0 -1
  182. package/build/utils/patch-proxy.js +0 -19
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ // istanbul ignore file
7
+ const core_1 = require("@oclif/core");
8
+ const ali_oss_1 = __importDefault(require("ali-oss"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const node_dir_1 = __importDefault(require("node-dir"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const base_command_1 = __importDefault(require("../base-command"));
13
+ const redis_1 = __importDefault(require("../redis"));
14
+ const config_1 = require("../config");
15
+ class UploadCommand extends base_command_1.default {
16
+ static description = '上传规则到阿里云 OSS';
17
+ async run() {
18
+ const config = this.surgioConfig;
19
+ if (this.flags.output) {
20
+ (0, config_1.setConfig)('output', this.flags.output);
21
+ }
22
+ const ossConfig = {
23
+ region: config?.upload?.region,
24
+ bucket: config?.upload?.bucket,
25
+ endpoint: config?.upload?.endpoint,
26
+ accessKeyId: process.env.OSS_ACCESS_KEY_ID || config?.upload?.accessKeyId,
27
+ accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET || config?.upload?.accessKeySecret,
28
+ };
29
+ const client = new ali_oss_1.default({
30
+ secure: true,
31
+ ...ossConfig,
32
+ });
33
+ const prefix = config?.upload?.prefix || '/';
34
+ const fileList = await node_dir_1.default.promiseFiles(config.output);
35
+ const files = fileList.map((filePath) => ({
36
+ fileName: path_1.default.basename(filePath),
37
+ filePath,
38
+ }));
39
+ const fileNameList = files.map((file) => file.fileName);
40
+ const upload = () => {
41
+ return Promise.all(files.map((file) => {
42
+ const { fileName, filePath } = file;
43
+ const objectName = `${prefix}${fileName}`;
44
+ const readStream = fs_extra_1.default.createReadStream(filePath);
45
+ return client.put(objectName, readStream, {
46
+ mime: 'text/plain; charset=utf-8',
47
+ headers: {
48
+ 'Cache-Control': 'private, no-cache, no-store',
49
+ },
50
+ });
51
+ }));
52
+ };
53
+ const deleteUnwanted = async () => {
54
+ const list = await client.list({
55
+ prefix,
56
+ delimiter: '/',
57
+ });
58
+ const deleteList = [];
59
+ for (const key in list.objects) {
60
+ if (list.objects.hasOwnProperty(key)) {
61
+ const object = list.objects[key];
62
+ const objectName = object.name.replace(prefix, '');
63
+ const isExist = fileNameList.indexOf(objectName) > -1;
64
+ if (objectName && !isExist) {
65
+ deleteList.push(object.name);
66
+ }
67
+ }
68
+ }
69
+ if (deleteList.length) {
70
+ await client.deleteMulti(deleteList);
71
+ }
72
+ };
73
+ this.ora.start('开始上传到阿里云 OSS');
74
+ await upload();
75
+ await deleteUnwanted();
76
+ await redis_1.default.destroyRedis();
77
+ this.ora.succeed();
78
+ }
79
+ }
80
+ UploadCommand.flags = {
81
+ output: core_1.Flags.string({
82
+ char: 'o',
83
+ description: '生成规则的目录',
84
+ }),
85
+ };
86
+ exports.default = UploadCommand;
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3VwbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVCQUF1QjtBQUN2QixzQ0FBbUM7QUFDbkMsc0RBQXlCO0FBQ3pCLHdEQUF5QjtBQUN6Qix3REFBMEI7QUFDMUIsZ0RBQXVCO0FBRXZCLG1FQUF5QztBQUN6QyxxREFBNEI7QUFDNUIsc0NBQXFDO0FBRXJDLE1BQU0sYUFBYyxTQUFRLHNCQUFpQztJQUMzRCxNQUFNLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQTtJQUU1QixLQUFLLENBQUMsR0FBRztRQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7UUFFaEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNyQixJQUFBLGtCQUFTLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDdkM7UUFFRCxNQUFNLFNBQVMsR0FBRztZQUNoQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO1lBQzlCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07WUFDOUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUTtZQUNsQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVc7WUFDekUsZUFBZSxFQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlO1NBQ3ZFLENBQUE7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFHLENBQUM7WUFDckIsTUFBTSxFQUFFLElBQUk7WUFDWixHQUFHLFNBQVM7U0FDYixDQUFDLENBQUE7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFF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
@@ -0,0 +1,6 @@
1
+ import { CommandConfig, CommandConfigBeforeNormalize } from './types';
2
+ export declare const loadConfig: (cwd: string, override?: Partial<CommandConfig>) => CommandConfig;
3
+ export declare const getConfig: () => CommandConfig;
4
+ export declare const setConfig: <T extends "artifacts" | "customParams" | "customFilters" | "remoteSnippets" | "urlBase" | "upload" | "binPath" | "flags" | "surgeConfig" | "surfboardConfig" | "quantumultXConfig" | "clashConfig" | "gateway" | "checkHostname" | "proxyTestUrl" | "proxyTestInterval" | "internetTestUrl" | "analytics" | "cache" | "publicUrl" | "output" | "providerDir" | "templateDir" | "configDir">(key: T, value: CommandConfig[T]) => CommandConfig;
5
+ export declare const normalizeConfig: (cwd: string, userConfig: Partial<CommandConfigBeforeNormalize>) => CommandConfig;
6
+ export declare const validateConfig: (userConfig: Partial<CommandConfig>) => CommandConfigBeforeNormalize;
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateConfig = exports.normalizeConfig = exports.setConfig = exports.getConfig = exports.loadConfig = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const url_1 = require("url");
11
+ const constant_1 = require("./constant");
12
+ const redis_1 = __importDefault(require("./redis"));
13
+ const validators_1 = require("./validators");
14
+ const flag_1 = require("./utils/flag");
15
+ const utils_1 = require("./utils");
16
+ let finalConfig = null;
17
+ const loadConfig = (cwd, override) => {
18
+ const absPath = path_1.default.join(cwd, 'surgio.conf.js');
19
+ // istanbul ignore next
20
+ if (!fs_extra_1.default.existsSync(absPath)) {
21
+ throw new Error(`配置文件 ${absPath} 不存在`);
22
+ }
23
+ const userConfig = (0, exports.validateConfig)(lodash_1.default.cloneDeep(require(absPath)));
24
+ if (userConfig.flags) {
25
+ Object.keys(userConfig.flags).forEach((emoji) => {
26
+ if (userConfig.flags) {
27
+ if (typeof userConfig.flags[emoji] === 'string') {
28
+ (0, flag_1.addFlagMap)(userConfig.flags[emoji], emoji);
29
+ }
30
+ else if (lodash_1.default.isRegExp(userConfig.flags[emoji])) {
31
+ (0, flag_1.addFlagMap)(userConfig.flags[emoji], emoji);
32
+ }
33
+ else {
34
+ ;
35
+ userConfig.flags[emoji].forEach((name) => {
36
+ (0, flag_1.addFlagMap)(name, emoji);
37
+ });
38
+ }
39
+ }
40
+ });
41
+ }
42
+ if (override) {
43
+ return {
44
+ ...(0, exports.normalizeConfig)(cwd, userConfig),
45
+ ...override,
46
+ };
47
+ }
48
+ finalConfig = (0, exports.normalizeConfig)(cwd, userConfig);
49
+ return finalConfig;
50
+ };
51
+ exports.loadConfig = loadConfig;
52
+ const getConfig = () => {
53
+ // istanbul ignore next
54
+ if (!finalConfig) {
55
+ throw new Error('请先调用 loadConfig 方法');
56
+ }
57
+ return finalConfig;
58
+ };
59
+ exports.getConfig = getConfig;
60
+ const setConfig = (key, value) => {
61
+ // istanbul ignore next
62
+ if (!finalConfig) {
63
+ throw new Error('请先调用 loadConfig 方法');
64
+ }
65
+ if (lodash_1.default.isPlainObject(value)) {
66
+ finalConfig[key] = {
67
+ ...finalConfig[key],
68
+ ...value,
69
+ };
70
+ }
71
+ else {
72
+ finalConfig[key] = value;
73
+ }
74
+ return finalConfig;
75
+ };
76
+ exports.setConfig = setConfig;
77
+ const normalizeConfig = (cwd, userConfig) => {
78
+ const defaultConfig = {
79
+ artifacts: [],
80
+ urlBase: '/',
81
+ output: path_1.default.join(cwd, './dist'),
82
+ templateDir: path_1.default.join(cwd, './template'),
83
+ providerDir: path_1.default.join(cwd, './provider'),
84
+ configDir: (0, utils_1.ensureConfigFolder)(),
85
+ surgeConfig: {
86
+ resolveHostname: false,
87
+ vmessAEAD: true,
88
+ },
89
+ clashConfig: {
90
+ enableShadowTls: false,
91
+ enableTuic: false,
92
+ },
93
+ quantumultXConfig: {
94
+ vmessAEAD: true,
95
+ },
96
+ surfboardConfig: {
97
+ vmessAEAD: true,
98
+ },
99
+ proxyTestUrl: constant_1.PROXY_TEST_URL,
100
+ proxyTestInterval: constant_1.PROXY_TEST_INTERVAL,
101
+ internetTestUrl: constant_1.INTERNET_TEST_URL,
102
+ checkHostname: false,
103
+ cache: {
104
+ type: 'default',
105
+ },
106
+ gateway: {
107
+ passRequestUserAgent: false,
108
+ },
109
+ };
110
+ const config = lodash_1.default.defaultsDeep(userConfig, defaultConfig);
111
+ // istanbul ignore next
112
+ if (!fs_extra_1.default.existsSync(config.templateDir)) {
113
+ throw new Error(`仓库内缺少 ${config.templateDir} 目录`);
114
+ }
115
+ // istanbul ignore next
116
+ if (!fs_extra_1.default.existsSync(config.providerDir)) {
117
+ throw new Error(`仓库内缺少 ${config.providerDir} 目录`);
118
+ }
119
+ if (/http/i.test(config.urlBase)) {
120
+ const urlObject = new url_1.URL(config.urlBase);
121
+ config.publicUrl = urlObject.origin + '/';
122
+ }
123
+ else {
124
+ config.publicUrl = '/';
125
+ }
126
+ // istanbul ignore next
127
+ if (config.cache && config.cache.type === 'redis') {
128
+ if (!config.cache.redisUrl) {
129
+ throw new Error('缓存配置错误,请检查 cache.redisUrl 配置');
130
+ }
131
+ redis_1.default.createRedis(config.cache.redisUrl);
132
+ }
133
+ // istanbul ignore next
134
+ if (config.gateway) {
135
+ if (config.gateway.auth && !config.gateway.accessToken) {
136
+ throw new Error('请检查 gateway.accessToken 配置');
137
+ }
138
+ }
139
+ return config;
140
+ };
141
+ exports.normalizeConfig = normalizeConfig;
142
+ const validateConfig = (userConfig) => {
143
+ const result = validators_1.SurgioConfigValidator.safeParse(userConfig);
144
+ // istanbul ignore next
145
+ if (!result.success) {
146
+ throw result.error;
147
+ }
148
+ return result.data;
149
+ };
150
+ exports.validateConfig = validateConfig;
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx3REFBeUI7QUFDekIsb0RBQXNCO0FBQ3RCLGdEQUF1QjtBQUN2Qiw2QkFBeUI7QUFFekIseUNBSW1CO0FBQ25CLG9EQUEyQjtBQUUzQiw2Q0FBb0Q7QUFDcEQsdUNBQXlDO0FBQ3pDLG1DQUE0QztBQUU1QyxJQUFJLFdBQVcsR0FBeUIsSUFBSSxDQUFBO0FBRXJDLE1BQU0sVUFBVSxHQUFHLENBQ3hCLEdBQVcsRUFDWCxRQUFpQyxFQUNsQixFQUFFO0lBQ2pCLE1BQU0sT0FBTyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUE7SUFFaEQsdUJBQXVCO0lBQ3ZCLElBQUksQ0FBQyxrQkFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQTtLQUN2QztJQUVELE1BQU0sVUFBVSxHQUFHLElBQUEsc0JBQWMsRUFBQyxnQkFBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRWhFLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRTtRQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3BCLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDL0MsSUFBQSxpQkFBVSxFQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7aUJBQ3JEO3FCQUFNLElBQUksZ0JBQUMsQ0FBQyxR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
@@ -1,26 +1,27 @@
1
1
  export declare const NETWORK_SURGIO_UA = "surgio";
2
2
  export declare const OBFS_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1";
3
3
  export declare const PROXY_TEST_URL = "http://cp.cloudflare.com/generate_204";
4
+ export declare const INTERNET_TEST_URL = "http://connect.rom.miui.com/generate_204";
4
5
  export declare const PROXY_TEST_INTERVAL = 1200;
5
- export declare const CLASH_SUPPORTED_RULE: ReadonlyArray<string>;
6
- export declare const QUANTUMULT_X_SUPPORTED_RULE: ReadonlyArray<string>;
7
- export declare const LOON_SUPPORTED_RULE: ReadonlyArray<string>;
8
- export declare const MELLOW_UNSUPPORTED_RULE: ReadonlyArray<string>;
9
- export declare const SURFBOARD_SUPPORTED_RULE: ReadonlyArray<string>;
6
+ export declare const CLASH_SUPPORTED_RULE: readonly ["DOMAIN-SUFFIX", "DOMAIN-KEYWORD", "DOMAIN", "SRC-IP-CIDR", "IP-CIDR", "IP-CIDR6", "GEOIP", "DST-PORT", "SRC-PORT", "MATCH", "FINAL", "PROCESS-NAME"];
7
+ export declare const QUANTUMULT_X_SUPPORTED_RULE: readonly ["USER-AGENT", "HOST", "HOST-KEYWORD", "HOST-SUFFIX", "DOMAIN", "DOMAIN-SUFFIX", "DOMAIN-KEYWORD", "IP-CIDR", "IP-CIDR6", "GEOIP", "FINAL"];
8
+ export declare const LOON_SUPPORTED_RULE: readonly ["DOMAIN-SUFFIX", "DOMAIN", "DOMAIN-KEYWORD", "USER-AGENT", "URL-REGEX", "IP-CIDR", "GEOIP", "FINAL"];
9
+ export declare const MELLOW_UNSUPPORTED_RULE: readonly ["URL-REGEX", "USER-AGENT", "AND", "OR", "NOT", "DEST-PORT", "IN-PORT", "SRC-IP", "RULE-SET"];
10
+ export declare const SURFBOARD_SUPPORTED_RULE: readonly ["DOMAIN-SUFFIX", "DOMAIN", "DOMAIN-KEYWORD", "IP-CIDR", "IP-CIDR6", "GEOIP", "FINAL", "PROCESS-NAME", "RULE-SET", "DOMAIN-SET"];
10
11
  export declare const CATEGORIES: {
11
- SNIPPET: string;
12
- SURGE: string;
13
- QUANTUMULT_X: string;
14
- QUANTUMULT_X_SERVER: string;
15
- QUANTUMULT_X_FILTER: string;
16
- QUANTUMULT_X_REWRITE: string;
17
- CLASH: string;
18
- LOON: string;
19
- SURFBOARD: string;
12
+ readonly SNIPPET: "Snippet";
13
+ readonly SURGE: "Surge";
14
+ readonly QUANTUMULT_X: "Quantumult X";
15
+ readonly QUANTUMULT_X_SERVER: "Quantumult X Server";
16
+ readonly QUANTUMULT_X_FILTER: "Quantumult X Filter";
17
+ readonly QUANTUMULT_X_REWRITE: "Quantumult X Rewrite";
18
+ readonly CLASH: "Clash";
19
+ readonly LOON: "Loon";
20
+ readonly SURFBOARD: "Surfboard";
20
21
  };
21
22
  export declare const RELAY_SERVICE = "https://surgio-cors.herokuapp.com/";
22
23
  export declare const TMP_FOLDER_NAME = "surgio-config";
23
24
  export declare const CACHE_KEYS: {
24
- RemoteSnippets: string;
25
- Provider: string;
25
+ readonly RemoteSnippets: "remote-snippets";
26
+ readonly Provider: "provider";
26
27
  };
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  // istanbul ignore file
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.CACHE_KEYS = exports.TMP_FOLDER_NAME = exports.RELAY_SERVICE = exports.CATEGORIES = exports.SURFBOARD_SUPPORTED_RULE = exports.MELLOW_UNSUPPORTED_RULE = exports.LOON_SUPPORTED_RULE = exports.QUANTUMULT_X_SUPPORTED_RULE = exports.CLASH_SUPPORTED_RULE = exports.PROXY_TEST_INTERVAL = exports.PROXY_TEST_URL = exports.OBFS_UA = exports.NETWORK_SURGIO_UA = void 0;
4
+ exports.CACHE_KEYS = exports.TMP_FOLDER_NAME = exports.RELAY_SERVICE = exports.CATEGORIES = exports.SURFBOARD_SUPPORTED_RULE = exports.MELLOW_UNSUPPORTED_RULE = exports.LOON_SUPPORTED_RULE = exports.QUANTUMULT_X_SUPPORTED_RULE = exports.CLASH_SUPPORTED_RULE = exports.PROXY_TEST_INTERVAL = exports.INTERNET_TEST_URL = exports.PROXY_TEST_URL = exports.OBFS_UA = exports.NETWORK_SURGIO_UA = void 0;
5
5
  exports.NETWORK_SURGIO_UA = 'surgio';
6
6
  exports.OBFS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1';
7
7
  exports.PROXY_TEST_URL = 'http://cp.cloudflare.com/generate_204';
8
+ exports.INTERNET_TEST_URL = 'http://connect.rom.miui.com/generate_204';
8
9
  exports.PROXY_TEST_INTERVAL = 1200; // 1200s
9
10
  exports.CLASH_SUPPORTED_RULE = [
10
11
  'DOMAIN-SUFFIX',
@@ -85,4 +86,4 @@ exports.CACHE_KEYS = {
85
86
  RemoteSnippets: 'remote-snippets',
86
87
  Provider: 'provider',
87
88
  };
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvY29uc3RhbnQvY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUF1Qjs7O0FBRVYsUUFBQSxpQkFBaUIsR0FBRyxRQUFRLENBQUM7QUFFN0IsUUFBQSxPQUFPLEdBQ2xCLDJJQUEySSxDQUFDO0FBRWpJLFFBQUEsY0FBYyxHQUFHLHVDQUF1QyxDQUFDO0FBRXpELFFBQUEsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUTtBQUVwQyxRQUFBLG9CQUFvQixHQUEwQjtJQUN6RCxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLFFBQVE7SUFDUixhQUFhO0lBQ2IsU0FBUztJQUNULFVBQVU7SUFDVixPQUFPO0lBQ1AsVUFBVTtJQUNWLFVBQVU7SUFDVixPQUFPO0lBQ1AsT0FBTztJQUNQLGNBQWM7Q0FDZixDQUFDO0FBRVcsUUFBQSwyQkFBMkIsR0FBMEI7SUFDaEUsWUFBWTtJQUNaLE1BQU07SUFDTixjQUFjO0lBQ2QsYUFBYTtJQUNiLFFBQVE7SUFDUixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxVQUFVO0lBQ1YsT0FBTztJQUNQLE9BQU87Q0FDUixDQUFDO0FBRUYsZ0VBQWdFO0FBQ25ELFFBQUEsbUJBQW1CLEdBQTBCO0lBQ3hELGVBQWU7SUFDZixRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixXQUFXO0lBQ1gsU0FBUztJQUNULE9BQU87SUFDUCxPQUFPO0NBQ1IsQ0FBQztBQUVXLFFBQUEsdUJBQXVCLEdBQTBCO0lBQzVELFdBQVc7SUFDWCxZQUFZO0lBQ1osS0FBSztJQUNMLElBQUk7SUFDSixLQUFLO0lBQ0wsV0FBVztJQUNYLFNBQVM7SUFDVCxRQUFRO0lBQ1IsVUFBVTtDQUNYLENBQUM7QUFFRiwwREFBMEQ7QUFDN0MsUUFBQSx3QkFBd0IsR0FBMEI7SUFDN0QsZUFBZTtJQUNmLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsU0FBUztJQUNULFVBQVU7SUFDVixPQUFPO0lBQ1AsT0FBTztJQUNQLGNBQWM7SUFDZCxVQUFVO0lBQ1YsWUFBWTtDQUNiLENBQUM7QUFFVyxRQUFBLFVBQVUsR0FBRztJQUN4QixPQUFPLEVBQUUsU0FBUztJQUNsQixLQUFLLEVBQUUsT0FBTztJQUNkLFlBQVksRUFBRSxjQUFjO0lBQzVCLG1CQUFtQixFQUFFLHFCQUFxQjtJQUMxQyxtQkFBbUIsRUFBRSxxQkFBcUI7SUFDMUMsb0JBQW9CLEVBQUUsc0JBQXNCO0lBQzVDLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07SUFDWixTQUFTLEVBQUUsV0FBVztDQUN2QixDQUFDO0FBRVcsUUFBQSxhQUFhLEdBQUcsb0NBQW9DLENBQUM7QUFFckQsUUFBQSxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBRWxDLFFBQUEsVUFBVSxHQUFHO0lBQ3hCLGNBQWMsRUFBRSxpQkFBaUI7SUFDakMsUUFBUSxFQUFFLFVBQVU7Q0FDckIsQ0FBQyJ9
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RhbnQvY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUF1Qjs7O0FBRVYsUUFBQSxpQkFBaUIsR0FBRyxRQUFRLENBQUE7QUFFNUIsUUFBQSxPQUFPLEdBQ2xCLDJJQUEySSxDQUFBO0FBRWhJLFFBQUEsY0FBYyxHQUFHLHVDQUF1QyxDQUFBO0FBRXhELFFBQUEsaUJBQWlCLEdBQUcsMENBQTBDLENBQUE7QUFFOUQsUUFBQSxtQkFBbUIsR0FBRyxJQUFJLENBQUEsQ0FBQyxRQUFRO0FBRW5DLFFBQUEsb0JBQW9CLEdBQUc7SUFDbEMsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsYUFBYTtJQUNiLFNBQVM7SUFDVCxVQUFVO0lBQ1YsT0FBTztJQUNQLFVBQVU7SUFDVixVQUFVO0lBQ1YsT0FBTztJQUNQLE9BQU87SUFDUCxjQUFjO0NBQ04sQ0FBQTtBQUVHLFFBQUEsMkJBQTJCLEdBQUc7SUFDekMsWUFBWTtJQUNaLE1BQU07SUFDTixjQUFjO0lBQ2QsYUFBYTtJQUNiLFFBQVE7SUFDUixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxVQUFVO0lBQ1YsT0FBTztJQUNQLE9BQU87Q0FDQyxDQUFBO0FBRVYsZ0VBQWdFO0FBQ25ELFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsZUFBZTtJQUNmLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLFdBQVc7SUFDWCxTQUFTO0lBQ1QsT0FBTztJQUNQLE9BQU87Q0FDQyxDQUFBO0FBRUcsUUFBQSx1QkFBdUIsR0FBRztJQUNyQyxXQUFXO0lBQ1gsWUFBWTtJQUNaLEtBQUs7SUFDTCxJQUFJO0lBQ0osS0FBSztJQUNMLFdBQVc7SUFDWCxTQUFTO0lBQ1QsUUFBUTtJQUNSLFVBQVU7Q0FDRixDQUFBO0FBRVYsMERBQTBEO0FBQzdDLFFBQUEsd0JBQXdCLEdBQUc7SUFDdEMsZUFBZTtJQUNmLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsU0FBUztJQUNULFVBQVU7SUFDVixPQUFPO0lBQ1AsT0FBTztJQUNQLGNBQWM7SUFDZCxVQUFVO0lBQ1YsWUFBWTtDQUNKLENBQUE7QUFFRyxRQUFBLFVBQVUsR0FBRztJQUN4QixPQUFPLEVBQUUsU0FBUztJQUNsQixLQUFLLEVBQUUsT0FBTztJQUNkLFlBQVksRUFBRSxjQUFjO0lBQzVCLG1CQUFtQixFQUFFLHFCQUFxQjtJQUMxQyxtQkFBbUIsRUFBRSxxQkFBcUI7SUFDMUMsb0JBQW9CLEVBQUUsc0JBQXNCO0lBQzVDLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07SUFDWixTQUFTLEVBQUUsV0FBVztDQUNkLENBQUE7QUFFRyxRQUFBLGFBQWEsR0FBRyxvQ0FBb0MsQ0FBQTtBQUVwRCxRQUFBLGVBQWUsR0FBRyxlQUFlLENBQUE7QUFFakMsUUFBQSxVQUFVLEdBQUc7SUFDeEIsY0FBYyxFQUFFLGlCQUFpQjtJQUNqQyxRQUFRLEVBQUUsVUFBVTtDQUNaLENBQUEifQ==
@@ -9,4 +9,4 @@ exports.ENV_SURGIO_NETWORK_CLASH_UA = 'SURGIO_NETWORK_CLASH_UA';
9
9
  exports.ENV_SURGIO_REMOTE_SNIPPET_CACHE_MAXAGE = 'SURGIO_REMOTE_SNIPPET_CACHE_MAXAGE';
10
10
  exports.ENV_SURGIO_PROVIDER_CACHE_MAXAGE = 'SURGIO_PROVIDER_CACHE_MAXAGE';
11
11
  exports.ENV_SURGIO_GFW_FREE = 'SURGIO_GFW_FREE';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbnN0YW50L2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLHVCQUF1QixHQUFHLHdCQUF3QixDQUFDO0FBRW5ELFFBQUEsMkJBQTJCLEdBQUcsZ0NBQWdDLENBQUM7QUFFL0QsUUFBQSw4QkFBOEIsR0FBRyw0QkFBNEIsQ0FBQztBQUU5RCxRQUFBLHdCQUF3QixHQUFHLHNCQUFzQixDQUFDO0FBRWxELFFBQUEsMkJBQTJCLEdBQUcseUJBQXlCLENBQUM7QUFFeEQsUUFBQSxzQ0FBc0MsR0FDakQsb0NBQW9DLENBQUM7QUFFMUIsUUFBQSxnQ0FBZ0MsR0FBRyw4QkFBOEIsQ0FBQztBQUVsRSxRQUFBLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDIn0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50L2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLHVCQUF1QixHQUFHLHdCQUF3QixDQUFBO0FBRWxELFFBQUEsMkJBQTJCLEdBQUcsZ0NBQWdDLENBQUE7QUFFOUQsUUFBQSw4QkFBOEIsR0FBRyw0QkFBNEIsQ0FBQTtBQUU3RCxRQUFBLHdCQUF3QixHQUFHLHNCQUFzQixDQUFBO0FBRWpELFFBQUEsMkJBQTJCLEdBQUcseUJBQXlCLENBQUE7QUFFdkQsUUFBQSxzQ0FBc0MsR0FDakQsb0NBQW9DLENBQUE7QUFFekIsUUFBQSxnQ0FBZ0MsR0FBRyw4QkFBOEIsQ0FBQTtBQUVqRSxRQUFBLG1CQUFtQixHQUFHLGlCQUFpQixDQUFBIn0=
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ERR_INVALID_FILTER = void 0;
4
4
  exports.ERR_INVALID_FILTER = '传入的过滤器无效,请检查语法和变量名是否正确';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvY29uc3RhbnQvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FDN0Isd0JBQXdCLENBQUMifQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RhbnQvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQSJ9
@@ -17,4 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./env"), exports);
18
18
  __exportStar(require("./error"), exports);
19
19
  __exportStar(require("./constant"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvY29uc3RhbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0QiwwQ0FBd0I7QUFDeEIsNkNBQTJCIn0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RhbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFxQjtBQUNyQiwwQ0FBdUI7QUFDdkIsNkNBQTBCIn0=
@@ -1,4 +1,3 @@
1
1
  import { Environment } from 'nunjucks';
2
2
  import { ArtifactConfig, CommandConfig, RemoteSnippet } from './types';
3
3
  export declare function generate(config: CommandConfig, artifact: ArtifactConfig, remoteSnippetList: ReadonlyArray<RemoteSnippet>, templateEngine: Environment): Promise<string>;
4
- export default function (config: CommandConfig, skipFail?: boolean, cacheSnippet?: boolean): Promise<void>;
package/build/generate.js CHANGED
@@ -1,75 +1,13 @@
1
1
  'use strict';
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.generate = void 0;
7
- const fs_extra_1 = __importDefault(require("fs-extra"));
8
- const ora_1 = __importDefault(require("ora"));
9
- const path_1 = __importDefault(require("path"));
10
- const logger_1 = require("@surgio/logger");
11
- const artifact_1 = require("./generator/artifact");
12
- const template_1 = require("./generator/template");
13
- const remote_snippet_1 = require("./utils/remote-snippet");
14
- const spinner = (0, ora_1.default)();
15
- async function run(config, skipFail, cacheSnippet) {
16
- const artifactList = config.artifacts;
17
- const distPath = config.output;
18
- const remoteSnippetsConfig = config.remoteSnippets || [];
19
- const remoteSnippetList = await (0, remote_snippet_1.loadRemoteSnippetList)(remoteSnippetsConfig, cacheSnippet);
20
- const templateEngine = (0, template_1.getEngine)(config.templateDir);
21
- await fs_extra_1.default.mkdirp(distPath);
22
- for (const artifact of artifactList) {
23
- spinner.start(`正在生成规则 ${artifact.name}`);
24
- try {
25
- const artifactInstance = new artifact_1.Artifact(config, artifact, {
26
- remoteSnippetList,
27
- });
28
- artifactInstance.once('initProvider:end', () => {
29
- spinner.text = `已处理 Provider ${artifactInstance.initProgress}/${artifactInstance.providerNameList.length}...`;
30
- });
31
- await artifactInstance.init();
32
- const result = artifactInstance.render(templateEngine);
33
- const destFilePath = path_1.default.join(config.output, artifact.name);
34
- if (artifact.destDir) {
35
- fs_extra_1.default.accessSync(artifact.destDir, fs_extra_1.default.constants.W_OK);
36
- await fs_extra_1.default.writeFile(path_1.default.join(artifact.destDir, artifact.name), result);
37
- }
38
- else {
39
- await fs_extra_1.default.writeFile(destFilePath, result);
40
- }
41
- spinner.succeed(`规则 ${artifact.name} 生成成功`);
42
- }
43
- catch (err) {
44
- spinner.fail(`规则 ${artifact.name} 生成失败`);
45
- // istanbul ignore next
46
- if (skipFail) {
47
- console.error(err.stack || err);
48
- }
49
- else {
50
- throw err;
51
- }
52
- }
53
- }
54
- }
4
+ const generator_1 = require("./generator");
55
5
  async function generate(config, artifact, remoteSnippetList, templateEngine) {
56
- const artifactInstance = new artifact_1.Artifact(config, artifact, {
6
+ const artifactInstance = new generator_1.Artifact(config, artifact, {
57
7
  remoteSnippetList,
58
8
  });
59
9
  await artifactInstance.init();
60
10
  return artifactInstance.render(templateEngine);
61
11
  }
62
12
  exports.generate = generate;
63
- async function default_1(config, skipFail, cacheSnippet) {
64
- logger_1.logger.info('开始生成规则');
65
- await run(config, skipFail, cacheSnippet).catch((err) => {
66
- // istanbul ignore next
67
- if (spinner.isSpinning) {
68
- spinner.fail();
69
- }
70
- throw err;
71
- });
72
- logger_1.logger.info('规则生成成功');
73
- }
74
- exports.default = default_1;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvZ2VuZXJhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7Ozs7QUFFYix3REFBMEI7QUFFMUIsOENBQXNCO0FBQ3RCLGdEQUF3QjtBQUN4QiwyQ0FBd0M7QUFDeEMsbURBQWdEO0FBRWhELG1EQUFpRDtBQUVqRCwyREFBK0Q7QUFFL0QsTUFBTSxPQUFPLEdBQUcsSUFBQSxhQUFHLEdBQUUsQ0FBQztBQUV0QixLQUFLLFVBQVUsR0FBRyxDQUNoQixNQUFxQixFQUNyQixRQUFrQixFQUNsQixZQUFzQjtJQUV0QixNQUFNLFlBQVksR0FBa0MsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNyRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQy9CLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFDekQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUEsc0NBQXFCLEVBQ25ELG9CQUFvQixFQUNwQixZQUFZLENBQ2IsQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHLElBQUEsb0JBQVMsRUFBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFckQsTUFBTSxrQkFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUUxQixLQUFLLE1BQU0sUUFBUSxJQUFJLFlBQVksRUFBRTtRQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFekMsSUFBSTtZQUNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxtQkFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7Z0JBQ3RELGlCQUFpQjthQUNsQixDQUFDLENBQUM7WUFFSCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxH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
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2VuZXJhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFBOzs7QUFJWiwyQ0FBc0M7QUFHL0IsS0FBSyxVQUFVLFFBQVEsQ0FDNUIsTUFBcUIsRUFDckIsUUFBd0IsRUFDeEIsaUJBQStDLEVBQy9DLGNBQTJCO0lBRTNCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxvQkFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7UUFDdEQsaUJBQWlCO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUE7SUFFN0IsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7QUFDaEQsQ0FBQztBQWJELDRCQWFDIn0=