surgio 2.18.4 → 2.19.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 (51) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/build/command/check.js +7 -11
  3. package/build/command/clean-cache.d.ts +1 -1
  4. package/build/command/clean-cache.js +10 -2
  5. package/build/command/doctor.js +6 -14
  6. package/build/command/generate.js +10 -12
  7. package/build/command/lint.js +1 -1
  8. package/build/command/new.js +4 -12
  9. package/build/command/subscriptions.js +5 -10
  10. package/build/command/upload.js +9 -13
  11. package/build/constant/constant.d.ts +4 -0
  12. package/build/constant/constant.js +6 -2
  13. package/build/generator/template.d.ts +1 -1
  14. package/build/index.d.ts +10 -1
  15. package/build/index.js +12 -13
  16. package/build/provider/ClashProvider.d.ts +1 -1
  17. package/build/provider/Provider.js +47 -24
  18. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +1 -1
  19. package/build/provider/ShadowsocksSubscribeProvider.d.ts +1 -1
  20. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +1 -1
  21. package/build/provider/SsdProvider.d.ts +2 -2
  22. package/build/redis.d.ts +9 -0
  23. package/build/redis.js +61 -0
  24. package/build/types.d.ts +8 -1
  25. package/build/utils/cache.d.ts +13 -1
  26. package/build/utils/cache.js +41 -3
  27. package/build/utils/clash.d.ts +2 -2
  28. package/build/utils/command.d.ts +2 -0
  29. package/build/utils/command.js +23 -0
  30. package/build/utils/config.d.ts +3 -1
  31. package/build/utils/config.js +41 -3
  32. package/build/utils/filter.d.ts +7 -4
  33. package/build/utils/filter.js +15 -2
  34. package/build/utils/http-client.d.ts +1 -1
  35. package/build/utils/index.d.ts +8 -5
  36. package/build/utils/index.js +22 -5
  37. package/build/utils/linter.d.ts +1 -1
  38. package/build/utils/loon.d.ts +1 -1
  39. package/build/utils/patch-proxy.js +2 -7
  40. package/build/utils/quantumult.d.ts +2 -2
  41. package/build/utils/remote-snippet.d.ts +1 -1
  42. package/build/utils/remote-snippet.js +8 -5
  43. package/build/utils/ss.js +13 -15
  44. package/build/utils/ssr.js +4 -7
  45. package/build/utils/surge.d.ts +1 -1
  46. package/build/utils/tmp-helper.d.ts +21 -7
  47. package/build/utils/tmp-helper.js +47 -16
  48. package/build/utils/trojan.js +4 -7
  49. package/build/utils/v2ray.d.ts +1 -1
  50. package/build/utils/v2ray.js +6 -8
  51. package/package.json +13 -22
@@ -28,8 +28,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const logger_1 = require("@surgio/logger");
30
30
  const joi_1 = __importDefault(require("joi"));
31
+ const constant_1 = require("../constant");
31
32
  const types_1 = require("../types");
32
33
  const cache_1 = require("../utils/cache");
34
+ const config_1 = require("../utils/config");
35
+ const env_flag_1 = require("../utils/env-flag");
33
36
  const http_client_1 = __importStar(require("../utils/http-client"));
34
37
  const subscription_1 = require("../utils/subscription");
35
38
  const utils_1 = require("../utils");
@@ -93,29 +96,49 @@ class Provider {
93
96
  });
94
97
  }
95
98
  static async requestCacheableResource(url, options = {}) {
96
- const cacheKey = `${(0, utils_1.toBase64)((0, http_client_1.getUserAgent)(options.requestUserAgent || ''))}:${url}`;
97
- return cache_1.SubscriptionCache.has(cacheKey)
98
- ? cache_1.SubscriptionCache.get(cacheKey)
99
- : await (async () => {
100
- const headers = {};
101
- if (options.requestUserAgent) {
102
- headers['user-agent'] = (0, http_client_1.getUserAgent)(options.requestUserAgent);
103
- }
104
- const res = await http_client_1.default.get(url, {
105
- responseType: 'text',
106
- headers,
107
- });
108
- const subsciptionCacheItem = {
109
- body: res.body,
110
- };
111
- if (res.headers['subscription-userinfo']) {
112
- subsciptionCacheItem.subscriptionUserinfo =
113
- (0, subscription_1.parseSubscriptionUserInfo)(res.headers['subscription-userinfo']);
114
- logger.debug('%s received subscription userinfo - raw: %s | parsed: %j', url, res.headers['subscription-userinfo'], subsciptionCacheItem.subscriptionUserinfo);
115
- }
116
- cache_1.SubscriptionCache.set(cacheKey, subsciptionCacheItem);
117
- return subsciptionCacheItem;
118
- })();
99
+ var _a, _b;
100
+ const cacheType = ((_b = (_a = (0, config_1.getConfig)()) === null || _a === void 0 ? void 0 : _a.cache) === null || _b === void 0 ? void 0 : _b.type) || 'default';
101
+ const cacheKey = `${constant_1.CACHE_KEYS.Provider}:${(0, utils_1.toMD5)((0, http_client_1.getUserAgent)(options.requestUserAgent || '') + url)}`;
102
+ const requestResource = async () => {
103
+ const headers = {};
104
+ if (options.requestUserAgent) {
105
+ headers['user-agent'] = (0, http_client_1.getUserAgent)(options.requestUserAgent);
106
+ }
107
+ const res = await http_client_1.default.get(url, {
108
+ responseType: 'text',
109
+ headers,
110
+ });
111
+ const subsciptionCacheItem = {
112
+ body: res.body,
113
+ };
114
+ if (res.headers['subscription-userinfo']) {
115
+ subsciptionCacheItem.subscriptionUserinfo = (0, subscription_1.parseSubscriptionUserInfo)(res.headers['subscription-userinfo']);
116
+ logger.debug('%s received subscription userinfo - raw: %s | parsed: %j', url, res.headers['subscription-userinfo'], subsciptionCacheItem.subscriptionUserinfo);
117
+ }
118
+ return subsciptionCacheItem;
119
+ };
120
+ if (cacheType === 'default') {
121
+ return cache_1.SubscriptionCache.has(cacheKey)
122
+ ? cache_1.SubscriptionCache.get(cacheKey)
123
+ : await (async () => {
124
+ const subsciptionCacheItem = await requestResource();
125
+ cache_1.SubscriptionCache.set(cacheKey, subsciptionCacheItem);
126
+ return subsciptionCacheItem;
127
+ })();
128
+ }
129
+ else {
130
+ const redisCache = new cache_1.RedisCache();
131
+ const cachedValue = await redisCache.getCache(cacheKey);
132
+ return cachedValue
133
+ ? cachedValue
134
+ : await (async () => {
135
+ const subsciptionCacheItem = await requestResource();
136
+ await redisCache.setCache(cacheKey, subsciptionCacheItem, {
137
+ ttl: (0, utils_1.msToSeconds)((0, env_flag_1.getProviderCacheMaxage)()),
138
+ });
139
+ return subsciptionCacheItem;
140
+ })();
141
+ }
119
142
  }
120
143
  get nextPort() {
121
144
  if (this.startPort) {
@@ -133,4 +156,4 @@ class Provider {
133
156
  }
134
157
  }
135
158
  exports.default = Provider;
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE4QztBQUM5Qyw4Q0FBc0I7QUFFdEIsb0NBS2tCO0FBQ2xCLDBDQUF5RTtBQUN6RSxvRUFBZ0U7QUFDaEUsd0RBQWtFO0FBQ2xFLG9DQUFvQztBQUVwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLGlCQUFpQjtDQUMzQixDQUFDLENBQUM7QUFFSCxNQUFxQixRQUFRO0lBa0IzQixZQUFtQixJQUFZLEVBQUUsTUFBc0I7UUFBcEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUM3QixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLElBQUksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNmLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQVMsMkJBQW1CLENBQUMsQ0FBQztpQkFDcEQsUUFBUSxFQUFFO1lBQ2IsVUFBVSxFQUFFLGFBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQ3pCLGFBQUcsQ0FBQyxRQUFRLEVBQUUsRUFDZCxhQUFHLENBQUMsTUFBTSxDQUFDO2dCQUNULE1BQU0sRUFBRSxhQUFHLENBQUMsUUFBUSxFQUFFO2dCQUN0QixXQUFXLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTthQUNwQyxDQUFDLENBQ0g7WUFDRCxhQUFhLEVBQUUsYUFBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FDNUIsYUFBRyxDQUFDLFFBQVEsRUFBRSxFQUNkLGFBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ1QsTUFBTSxFQUFFLGFBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RCLFdBQVcsRUFBRSxhQUFHLENBQUMsT0FBTyxF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
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE4QztBQUM5Qyw4Q0FBc0I7QUFFdEIsMENBQXlDO0FBQ3pDLG9DQUtrQjtBQUNsQiwwQ0FJd0I7QUFDeEIsNENBQTRDO0FBQzVDLGdEQUEyRDtBQUMzRCxvRUFBZ0U7QUFDaEUsd0RBQWtFO0FBQ2xFLG9DQUE4QztBQUU5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLGlCQUFpQjtDQUMzQixDQUFDLENBQUM7QUFFSCxNQUFxQixRQUFRO0lBa0IzQixZQUFtQixJQUFZLEVBQUUsTUFBc0I7UUFBcEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUM3QixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLElBQUksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNmLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQVMsMkJBQW1CLENBQUMsQ0FBQztpQkFDcEQsUUFBUSxFQUFFO1lBQ2IsVUFBVSxFQUFFLGFBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQ3pCLGFBQUcsQ0FBQyxRQUFRLEVBQUUsRUFDZCxhQUFHLENBQUMsTUFBTSxDQUFDO2dCQUNULE1BQU0sRUFBRSxhQUFHLENBQUMsUUFBUSxFQUFFO2dCQUN0QixXQUFXLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTthQUNwQyxDQUFDLENBQ0g7WUFDRCxhQUFhLEVBQUUsYUFBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FDNUIsYUFBRyxDQUFDLFFBQVEsRUFBRSxFQUNkLGFBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ1QsTUFBTSxFQUFFLGFBQUcsQ0FBQyxRQUFR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
@@ -9,4 +9,4 @@ export default class ShadowsocksJsonSubscribeProvider extends Provider {
9
9
  requestUserAgent?: string;
10
10
  }): ReturnType<typeof getShadowsocksJSONConfig>;
11
11
  }
12
- export declare const getShadowsocksJSONConfig: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
12
+ export declare const getShadowsocksJSONConfig: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
@@ -15,7 +15,7 @@ export default class ShadowsocksSubscribeProvider extends Provider {
15
15
  /**
16
16
  * @see https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html
17
17
  */
18
- export declare const getShadowsocksSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
18
+ export declare const getShadowsocksSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
19
19
  readonly nodeList: ReadonlyArray<ShadowsocksNodeConfig>;
20
20
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
21
21
  }>;
@@ -12,7 +12,7 @@ export default class ShadowsocksrSubscribeProvider extends Provider {
12
12
  requestUserAgent?: string;
13
13
  }): Promise<ReadonlyArray<ShadowsocksrNodeConfig>>;
14
14
  }
15
- export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
15
+ export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
16
16
  readonly nodeList: ReadonlyArray<ShadowsocksrNodeConfig>;
17
17
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
18
18
  }>;
@@ -12,11 +12,11 @@ export default class SsdProvider extends Provider {
12
12
  requestUserAgent?: string;
13
13
  }): Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
14
14
  }
15
- export declare const getSsdSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
15
+ export declare const getSsdSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
16
16
  readonly nodeList: ReadonlyArray<ShadowsocksNodeConfig>;
17
17
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
18
18
  }>;
19
- export declare const parseSsdConfig: (globalConfig: SsdSubscription, server: SsdServer, udpRelay?: boolean | undefined) => ShadowsocksNodeConfig | undefined;
19
+ export declare const parseSsdConfig: (globalConfig: SsdSubscription, server: SsdServer, udpRelay?: boolean) => ShadowsocksNodeConfig | undefined;
20
20
  export interface SsdSubscription {
21
21
  airport: string;
22
22
  port: number;
@@ -0,0 +1,9 @@
1
+ import Redis from 'ioredis';
2
+ declare const redis: {
3
+ hasRedis: () => boolean;
4
+ createRedis(_redisURL: string, customRedis?: any): Redis;
5
+ getRedis(): Redis;
6
+ destroyRedis(): Promise<void>;
7
+ cleanCache(): Promise<void>;
8
+ };
9
+ export default redis;
package/build/redis.js ADDED
@@ -0,0 +1,61 @@
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
+ const logger_1 = require("@surgio/logger");
7
+ const ioredis_1 = __importDefault(require("ioredis"));
8
+ const constant_1 = require("./constant");
9
+ const logger = (0, logger_1.createLogger)({ service: 'surgio:redis' });
10
+ const prepareRedis = () => {
11
+ let client = null;
12
+ let redisURL = null;
13
+ return {
14
+ hasRedis: () => !!client,
15
+ createRedis(_redisURL, customRedis) {
16
+ if (client && redisURL) {
17
+ logger.debug('Redis client already created with URL: %s', redisURL);
18
+ return client;
19
+ }
20
+ redisURL = _redisURL;
21
+ if (customRedis) {
22
+ client = new customRedis(_redisURL);
23
+ }
24
+ else {
25
+ client = new ioredis_1.default(_redisURL);
26
+ }
27
+ return client;
28
+ },
29
+ getRedis() {
30
+ if (!client) {
31
+ throw new Error('Redis client is not initialized');
32
+ }
33
+ return client;
34
+ },
35
+ async destroyRedis() {
36
+ if (client) {
37
+ await client.quit();
38
+ client = null;
39
+ redisURL = null;
40
+ }
41
+ },
42
+ async cleanCache() {
43
+ if (!client) {
44
+ return;
45
+ }
46
+ const keysToRemove = await Promise.all(Object.keys(constant_1.CACHE_KEYS).map((key) => {
47
+ if (!client)
48
+ return;
49
+ return client.keys(`${constant_1.CACHE_KEYS[key]}:*`);
50
+ }));
51
+ await Promise.all(keysToRemove.map((keys) => {
52
+ if (!client || !keys || !keys.length)
53
+ return;
54
+ return client.del(keys);
55
+ }));
56
+ },
57
+ };
58
+ };
59
+ const redis = prepareRedis();
60
+ exports.default = redis;
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVkaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBOEM7QUFDOUMsc0RBQTRCO0FBRTVCLHlDQUF3QztBQUV4QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUV6RCxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDeEIsSUFBSSxNQUFNLEdBQWlCLElBQUksQ0FBQztJQUNoQyxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDO0lBRW5DLE9BQU87UUFDTCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDeEIsV0FBVyxDQUFDLFNBQWlCLEVBQUUsV0FBaUI7WUFDOUMsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO2dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRSxPQUFPLE1BQU0sQ0FBQzthQUNmO1lBQ0QsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUVyQixJQUFJLFdBQVcsRUFBRTtnQkFDZixNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsTUFBTSxHQUFHLElBQUksaUJBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQjtZQUVELE9BQU8sTUFBZSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxRQUFRO1lBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7YUFDcEQ7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsS0FBSyxDQUFDLFlBQVk7WUFDaEIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQzthQUNqQjtRQUNILENBQUM7UUFDRCxLQUFLLENBQUMsVUFBVTtZQUNkLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsT0FBTzthQUNSO1lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTztnQkFFcEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcscUJBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUVGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPO2dCQUM3QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsTUFBTSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7QUFFN0Isa0JBQWUsS0FBSyxDQUFDIn0=
package/build/types.d.ts CHANGED
@@ -21,11 +21,11 @@ export declare enum SupportProviderEnum {
21
21
  Trojan = "trojan"
22
22
  }
23
23
  export interface CommandConfig {
24
+ publicUrl: string;
24
25
  readonly output: string;
25
26
  readonly artifacts: ReadonlyArray<ArtifactConfig>;
26
27
  readonly remoteSnippets?: ReadonlyArray<RemoteSnippetConfig>;
27
28
  readonly urlBase: string;
28
- publicUrl: string;
29
29
  readonly providerDir: string;
30
30
  readonly templateDir: string;
31
31
  readonly configDir: string;
@@ -71,6 +71,10 @@ export interface CommandConfig {
71
71
  readonly [name: string]: NodeNameFilterType | SortedNodeNameFilterType;
72
72
  };
73
73
  readonly customParams?: PlainObjectOf<string | boolean | number>;
74
+ readonly cache?: {
75
+ readonly type?: 'redis' | 'default';
76
+ readonly redisUrl?: string;
77
+ };
74
78
  }
75
79
  export interface RemoteSnippetConfig {
76
80
  readonly url: string;
@@ -109,6 +113,9 @@ export interface ProviderConfig {
109
113
  readonly renameNode?: (name: string) => string;
110
114
  readonly relayUrl?: boolean | string;
111
115
  readonly requestUserAgent?: string;
116
+ readonly cache?: {
117
+ readonly type?: 'redis' | 'default';
118
+ };
112
119
  }
113
120
  export interface BlackSSLProviderConfig extends ProviderConfig {
114
121
  readonly username: string;
@@ -6,4 +6,16 @@ export interface SubsciptionCacheItem {
6
6
  }
7
7
  export declare const ConfigCache: NodeCache;
8
8
  export declare const SubscriptionCache: NodeCache;
9
- export declare const cleanCaches: () => void;
9
+ export declare class RedisCache {
10
+ namespace?: string | undefined;
11
+ private redisClient;
12
+ constructor(namespace?: string | undefined);
13
+ getCacheKey(key: string): string;
14
+ setCache: (key: string, value: unknown, { ttl }?: {
15
+ ttl?: number | undefined;
16
+ }) => Promise<void>;
17
+ getCache: <T>(key: string) => Promise<T | undefined>;
18
+ hasCache: (key: string) => Promise<boolean>;
19
+ deleteCache: (key: string) => Promise<void>;
20
+ }
21
+ export declare const cleanCaches: () => Promise<void>;
@@ -3,10 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.cleanCaches = exports.SubscriptionCache = exports.ConfigCache = void 0;
6
+ exports.cleanCaches = exports.RedisCache = exports.SubscriptionCache = exports.ConfigCache = void 0;
7
7
  const node_cache_1 = __importDefault(require("node-cache"));
8
8
  const env_flag_1 = require("./env-flag");
9
9
  const index_1 = require("./index");
10
+ const redis_1 = __importDefault(require("../redis"));
10
11
  exports.ConfigCache = new node_cache_1.default({
11
12
  stdTTL: (0, index_1.msToSeconds)((0, env_flag_1.getProviderCacheMaxage)()),
12
13
  maxKeys: 300,
@@ -17,9 +18,46 @@ exports.SubscriptionCache = new node_cache_1.default({
17
18
  maxKeys: 300,
18
19
  useClones: false,
19
20
  });
20
- const cleanCaches = () => {
21
+ class RedisCache {
22
+ constructor(namespace) {
23
+ this.namespace = namespace;
24
+ this.setCache = async (key, value, { ttl } = {}) => {
25
+ const storeValue = JSON.stringify(value);
26
+ if (typeof ttl === 'undefined') {
27
+ await this.redisClient.set(this.getCacheKey(key), storeValue);
28
+ }
29
+ else {
30
+ await this.redisClient.set(this.getCacheKey(key), storeValue, 'EX', ttl);
31
+ }
32
+ };
33
+ this.getCache = async (key) => {
34
+ const value = await this.redisClient.get(this.getCacheKey(key));
35
+ if (!value) {
36
+ return undefined;
37
+ }
38
+ return JSON.parse(value);
39
+ };
40
+ this.hasCache = async (key) => {
41
+ const value = await this.redisClient.exists(this.getCacheKey(key));
42
+ return !!value;
43
+ };
44
+ this.deleteCache = async (key) => {
45
+ await this.redisClient.del(this.getCacheKey(key));
46
+ };
47
+ this.redisClient = redis_1.default.getRedis();
48
+ }
49
+ getCacheKey(key) {
50
+ return this.namespace ? `${this.namespace}:${key}` : key;
51
+ }
52
+ }
53
+ exports.RedisCache = RedisCache;
54
+ // istanbul ignore next
55
+ const cleanCaches = async () => {
21
56
  exports.ConfigCache.flushAll();
22
57
  exports.SubscriptionCache.flushAll();
58
+ if (redis_1.default.hasRedis()) {
59
+ await redis_1.default.cleanCache();
60
+ }
23
61
  };
24
62
  exports.cleanCaches = cleanCaches;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNERBQW1DO0FBR25DLHlDQUFvRDtBQUNwRCxtQ0FBc0M7QUFPekIsUUFBQSxXQUFXLEdBQUcsSUFBSSxvQkFBUyxDQUFDO0lBQ3ZDLE1BQU0sRUFBRSxJQUFBLG1CQUFXLEVBQUMsSUFBQSxpQ0FBc0IsR0FBRSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxHQUFHO0lBQ1osU0FBUyxFQUFFLEtBQUs7Q0FDakIsQ0FBQyxDQUFDO0FBRVUsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLG9CQUFTLENBQUM7SUFDN0MsTUFBTSxFQUFFLElBQUEsbUJBQVcsRUFBQyxJQUFBLGlDQUFzQixHQUFFLENBQUM7SUFDN0MsT0FBTyxFQUFFLEdBQUc7SUFDWixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDLENBQUM7QUFFSSxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUU7SUFDOUIsbUJBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2Qix5QkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFIVyxRQUFBLFdBQVcsZUFHdEIifQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsNERBQW1DO0FBR25DLHlDQUFvRDtBQUNwRCxtQ0FBc0M7QUFDdEMscURBQTZCO0FBT2hCLFFBQUEsV0FBVyxHQUFHLElBQUksb0JBQVMsQ0FBQztJQUN2QyxNQUFNLEVBQUUsSUFBQSxtQkFBVyxFQUFDLElBQUEsaUNBQXNCLEdBQUUsQ0FBQztJQUM3QyxPQUFPLEVBQUUsR0FBRztJQUNaLFNBQVMsRUFBRSxLQUFLO0NBQ2pCLENBQUMsQ0FBQztBQUVVLFFBQUEsaUJBQWlCLEdBQUcsSUFBSSxvQkFBUyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxJQUFBLG1CQUFXLEVBQUMsSUFBQSxpQ0FBc0IsR0FBRSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxHQUFHO0lBQ1osU0FBUyxFQUFFLEtBQUs7Q0FDakIsQ0FBQyxDQUFDO0FBRUgsTUFBYSxVQUFVO0lBR3JCLFlBQW1CLFNBQWtCO1FBQWxCLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFRckMsYUFBUSxHQUFHLEtBQUssRUFDZCxHQUFXLEVBQ1gsS0FBYyxFQUNkLEVBQUUsR0FBRyxLQUF1QixFQUFFLEVBQzlCLEVBQUU7WUFDRixNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpELElBQUksT0FBTyxHQUFHLEtBQUssV0FBVyxFQUFFO2dCQUM5QixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDL0Q7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDMUU7UUFDSCxDQUFDLENBQUM7UUFFRixhQUFRLEdBQUcsS0FBSyxFQUFLLEdBQVcsRUFBMEIsRUFBRTtZQUMxRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVoRSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1lBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBTSxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUVGLGFBQVEsR0FBRyxLQUFLLEVBQUUsR0FBVyxFQUFvQixFQUFFO1lBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRW5FLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRixnQkFBVyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUNsQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUM7UUF2Q0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDM0QsQ0FBQztDQW1DRjtBQTVDRCxnQ0E0Q0M7QUFFRCx1QkFBdUI7QUFDaEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDcEMsbUJBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2Qix5QkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU3QixJQUFJLGVBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNwQixNQUFNLGVBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQUMxQjtBQUNILENBQUMsQ0FBQztBQVBXLFFBQUEsV0FBVyxlQU90QiJ9
@@ -1,3 +1,3 @@
1
1
  import { NodeFilterType, NodeNameFilterType, PossibleNodeConfigType, SimpleNodeConfig, SortedNodeNameFilterType } from '../types';
2
- export declare const getClashNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: SortedNodeNameFilterType | NodeFilterType | undefined) => ReadonlyArray<any>;
3
- export declare const getClashNodeNames: (list: ReadonlyArray<SimpleNodeConfig>, filter?: SortedNodeNameFilterType | NodeNameFilterType | undefined, existingProxies?: readonly string[] | undefined) => ReadonlyArray<string>;
2
+ export declare const getClashNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: NodeFilterType | SortedNodeNameFilterType) => ReadonlyArray<any>;
3
+ export declare const getClashNodeNames: (list: ReadonlyArray<SimpleNodeConfig>, filter?: NodeNameFilterType | SortedNodeNameFilterType, existingProxies?: ReadonlyArray<string>) => ReadonlyArray<string>;
@@ -0,0 +1,2 @@
1
+ import CommonBin from 'common-bin';
2
+ export declare const defineGlobalOptions: (yargs: CommonBin['yargs']) => void;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineGlobalOptions = void 0;
4
+ const defineGlobalOptions = (yargs) => {
5
+ yargs.options({
6
+ c: {
7
+ alias: 'config',
8
+ default: './surgio.conf.js',
9
+ description: '配置文件',
10
+ },
11
+ V: {
12
+ alias: 'verbose',
13
+ demandOption: false,
14
+ describe: '打印调试日志',
15
+ type: 'boolean',
16
+ },
17
+ });
18
+ yargs.group(['help', 'version', 'config', 'verbose'], 'Global Options:');
19
+ // 禁用 yargs 内部生成的 help 信息,似乎和 common-bin 的 load 有冲突
20
+ yargs.help(false);
21
+ };
22
+ exports.defineGlobalOptions = defineGlobalOptions;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVPLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUF5QixFQUFRLEVBQUU7SUFDckUsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNaLENBQUMsRUFBRTtZQUNELEtBQUssRUFBRSxRQUFRO1lBQ2YsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixXQUFXLEVBQUUsTUFBTTtTQUNwQjtRQUNELENBQUMsRUFBRTtZQUNELEtBQUssRUFBRSxTQUFTO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1lBQ25CLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLElBQUksRUFBRSxTQUFTO1NBQ2hCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFekUsbURBQW1EO0lBQ25ELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBbkJXLFFBQUEsbUJBQW1CLHVCQW1COUIifQ==
@@ -1,4 +1,6 @@
1
1
  import { CommandConfig } from '../types';
2
- export declare const loadConfig: (cwd: string, configPath: string, override?: Partial<CommandConfig> | undefined) => CommandConfig;
2
+ export declare const loadConfig: (cwd: string, configPath: string, override?: Partial<CommandConfig>) => CommandConfig;
3
+ export declare const getConfig: () => CommandConfig;
4
+ export declare const setConfig: <T extends keyof CommandConfig>(key: T, value: CommandConfig[T]) => CommandConfig;
3
5
  export declare const normalizeConfig: (cwd: string, userConfig: Partial<CommandConfig>) => CommandConfig;
4
6
  export declare const validateConfig: (userConfig: Partial<CommandConfig>) => void;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.validateConfig = exports.normalizeConfig = exports.loadConfig = void 0;
6
+ exports.validateConfig = exports.normalizeConfig = exports.setConfig = exports.getConfig = exports.loadConfig = void 0;
7
7
  const joi_1 = __importDefault(require("joi"));
8
8
  const fs_extra_1 = __importDefault(require("fs-extra"));
9
9
  const lodash_1 = __importDefault(require("lodash"));
@@ -11,12 +11,14 @@ const path_1 = __importDefault(require("path"));
11
11
  const url_1 = require("url");
12
12
  const util_1 = require("util");
13
13
  const deprecation_1 = require("../misc/deprecation");
14
+ const redis_1 = __importDefault(require("../redis"));
14
15
  const constant_1 = require("../constant");
15
16
  const flag_1 = require("./flag");
16
17
  const index_1 = require("./index");
17
18
  const showDEP005 = (0, util_1.deprecate)(lodash_1.default.noop, deprecation_1.DEP005, 'DEP005');
18
19
  const showDEP006 = (0, util_1.deprecate)(lodash_1.default.noop, deprecation_1.DEP006, 'DEP006');
19
20
  const showDEP008 = (0, util_1.deprecate)(lodash_1.default.noop, deprecation_1.DEP008, 'DEP008');
21
+ let finalConfig = null;
20
22
  const loadConfig = (cwd, configPath, override) => {
21
23
  const absPath = path_1.default.resolve(cwd, configPath);
22
24
  if (!fs_extra_1.default.existsSync(absPath)) {
@@ -44,9 +46,30 @@ const loadConfig = (cwd, configPath, override) => {
44
46
  if (override) {
45
47
  return Object.assign(Object.assign({}, (0, exports.normalizeConfig)(cwd, userConfig)), override);
46
48
  }
47
- return (0, exports.normalizeConfig)(cwd, userConfig);
49
+ finalConfig = (0, exports.normalizeConfig)(cwd, userConfig);
50
+ return finalConfig;
48
51
  };
49
52
  exports.loadConfig = loadConfig;
53
+ const getConfig = () => {
54
+ if (!finalConfig) {
55
+ throw new Error('请先调用 loadConfig 方法');
56
+ }
57
+ return finalConfig;
58
+ };
59
+ exports.getConfig = getConfig;
60
+ const setConfig = (key, value) => {
61
+ if (!finalConfig) {
62
+ throw new Error('请先调用 loadConfig 方法');
63
+ }
64
+ if (lodash_1.default.isPlainObject(value)) {
65
+ finalConfig[key] = Object.assign(Object.assign({}, finalConfig[key]), value);
66
+ }
67
+ else {
68
+ finalConfig[key] = value;
69
+ }
70
+ return finalConfig;
71
+ };
72
+ exports.setConfig = setConfig;
50
73
  const normalizeConfig = (cwd, userConfig) => {
51
74
  var _a, _b, _c;
52
75
  const defaultConfig = {
@@ -71,6 +94,9 @@ const normalizeConfig = (cwd, userConfig) => {
71
94
  proxyTestUrl: constant_1.PROXY_TEST_URL,
72
95
  proxyTestInterval: constant_1.PROXY_TEST_INTERVAL,
73
96
  checkHostname: false,
97
+ cache: {
98
+ type: 'default',
99
+ },
74
100
  };
75
101
  const config = lodash_1.default.defaultsDeep(userConfig, defaultConfig);
76
102
  // istanbul ignore next
@@ -103,6 +129,12 @@ const normalizeConfig = (cwd, userConfig) => {
103
129
  if (((_c = config.clashConfig) === null || _c === void 0 ? void 0 : _c.ssrFormat) === 'legacy') {
104
130
  showDEP008();
105
131
  }
132
+ if (config.cache && config.cache.type === 'redis') {
133
+ if (!config.cache.redisUrl) {
134
+ throw new Error('缓存配置错误,请检查 cache.redisUrl 配置');
135
+ }
136
+ redis_1.default.createRedis(config.cache.redisUrl);
137
+ }
106
138
  return config;
107
139
  };
108
140
  exports.normalizeConfig = normalizeConfig;
@@ -177,6 +209,12 @@ const validateConfig = (userConfig) => {
177
209
  supportSort: joi_1.default.boolean().strict(),
178
210
  }))),
179
211
  customParams: joi_1.default.object(),
212
+ cache: joi_1.default.object({
213
+ type: joi_1.default.string().valid('redis', 'default'),
214
+ redisUrl: joi_1.default.string().uri({
215
+ scheme: [/rediss?/],
216
+ }),
217
+ }),
180
218
  }).unknown();
181
219
  const { error } = schema.validate(userConfig);
182
220
  // istanbul ignore next
@@ -185,4 +223,4 @@ const validateConfig = (userConfig) => {
185
223
  }
186
224
  };
187
225
  exports.validateConfig = validateConfig;
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FBc0I7QUFDdEIsd0RBQTBCO0FBQzFCLG9EQUF1QjtBQUN2QixnREFBd0I7QUFDeEIsNkJBQTBCO0FBQzFCLCtCQUFpQztBQUNqQyxxREFBNkQ7QUFHN0QsMENBQWtFO0FBQ2xFLGlDQUFvQztBQUNwQyxtQ0FBNkM7QUFFN0MsTUFBTSxVQUFVLEdBQUcsSUFBQSxnQkFBUyxFQUFDLGdCQUFDLENBQUMsSUFBSSxFQUFFLG9CQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBQSxnQkFBUyxFQUFDLGdCQUFDLENBQUMsSUFBSSxFQUFFLG9CQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBQSxnQkFBUyxFQUFDLGdCQUFDLENBQUMsSUFBSSxFQUFFLG9CQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFaEQsTUFBTSxVQUFVLEdBQUcsQ0FDeEIsR0FBVyxFQUNYLFVBQWtCLEVBQ2xCLFFBQWlDLEVBQ2xCLEVBQUU7SUFDakIsTUFBTSxPQUFPLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFOUMsSUFBSSxDQUFDLGtCQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxPQUFPLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsTUFBTSxVQUFVLEdBQUcsZ0JBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFakQsSUFBQSxzQkFBYyxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTNCLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRTtRQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3BCLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDL0MsSUFBQSxpQkFBVSxFQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3REO3FCQUFNLElBQUksZ0JBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUM5QyxJQUFBLGlCQUFVLEVBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDdEQ7cUJBQU07b0JBQ0osVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQW9DLENBQUMsT0FBTyxDQUNqRSxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNQLElBQUEsaUJBQVUsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzFCLENBQUMsQ0FDRixDQUFDO2lCQUNIO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztLQUNKO0lBRUQsSUFBSSxRQUFRLEVBQUU7UUFDWix1Q0FDSyxJQUFBLHVCQUFlLEVBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUNoQyxRQUFRLEVBQ1g7S0FDSDtJQUVELE9BQU8sSUFBQSx1QkFBZSxFQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUM7QUF6Q1csUUFBQSxVQUFVLGNBeUNyQjtBQUVLLE1BQU0sZUFBZSxHQUFHLENBQzdCLEdBQVcsRUFDWCxVQUFrQyxFQUNuQixFQUFFOztJQUNqQixNQUFNLGFBQWEsR0FBMkI7UUFDNUMsU0FBUyxFQUFFLEVBQUU7UUFDYixPQUFPLEVBQUUsR0FBRztRQUNaLE1BQU0sRUFBRSxjQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7UUFDaEMsV0FBVyxFQUFFLGNBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQztRQUN6QyxXQUFXLEVBQUUsY0FBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDO1FBQ3pDLFNBQVMsRUFBRSxJQUFBLDBCQUFrQixHQUFFO1FBQy9CLFdBQVcsRUFBRTtZQUNYLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsS0FBSyxFQUFFLFFBQVE7WUFDZixlQUFlLEVBQUUsS0FBSztZQUN0QixTQUFTLEVBQUUsSUFBSTtTQUNoQjtRQUNELFdBQVcsRUFBRTtZQUNYLFNBQVMsRUFBRSxRQUFRO1NBQ3BCO1FBQ0QsaUJBQWlCLEVBQUU7WUFDakIsU0FBUyxFQUFFLElBQUk7U0FDaEI7UUFDRCxZQUFZLEVBQUUseUJBQWM7UUFDNUIsaUJBQWlCLEVBQUUsOEJBQW1CO1FBQ3RDLGFBQWEsRUFBRSxLQUFLO0tBQ3JCLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBa0IsZ0JBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXhFLHVCQUF1QjtJQUN2QixJQUFJLENBQUMsa0JBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxNQUFNLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQztLQUNuRDtJQUNELHVCQUF1QjtJQUN2QixJQUFJLENBQUMsa0JBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxNQUFNLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQztLQUNuRDtJQUVELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7S0FDM0M7U0FBTTtRQUNMLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0tBQ3hCO0lBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0tBQzdDO0lBRUQsdUJBQXVCO0lBQ3ZCLElBQUksQ0FBQSxNQUFBLE1BQU0sQ0FBQyxXQUFXLDBDQUFFLGlCQUFpQixNQUFLLFFBQVEsRUFBRTtRQUN0RCxVQUFVLEVBQUUsQ0FBQztLQUNkO0lBRUQsdUJBQXVCO0lBQ3ZCLElBQUksQ0FBQSxNQUFBLE1BQU0sQ0FBQyxXQUFXLDBDQUFFLEtBQUssTUFBSyxVQUFVLEVBQUU7UUFDNUMsVUFBVSxFQUFFLENBQUM7S0FDZDtJQUVELHVCQUF1QjtJQUN2QixJQUFJLENBQUEsTUFBQSxNQUFNLENBQUMsV0FBVywwQ0FBRSxTQUFTLE1BQUssUUFBUSxFQUFFO1FBQzlDLFVBQVUsRUFBRSxDQUFDO0tBQ2Q7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFqRVcsUUFBQSxlQUFlLG1CQWlFMUI7QUFFSyxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQWtDLEVBQVEsRUFBRTtJQUN6RSxNQUFNLGNBQWMsR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQUksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzdCLFVBQVUsRUFBRSxhQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxRQUFRLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNqQyxRQUFRLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNqQyxnQkFBZ0IsRUFBRSxhQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqRCxZQUFZLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRTtRQUMxQixrQkFBa0IsRUFBRSxhQUFHLENBQUMsUUFBUSxFQUFFO1FBQ2xDLE9BQU8sRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO1FBQ3JCLFdBQVcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO0tBQzFCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNiLE1BQU0sbUJBQW1CLEdBQUcsYUFBRyxDQUFDLE1BQU0sQ0FBQztRQUNyQyxHQUFHLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRTthQUNkLEdBQUcsQ0FBQztZQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztTQUNuQixDQUFDO2FBQ0QsUUFBUSxFQUFFO1FBQ2IsSUFBSSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDN0IsYUFBYSxFQUFFLGFBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUU7S0FDdEMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxNQUFNLEdBQUcsYUFBRyxDQUFDLE1BQU0sQ0FBQztRQUN4QixTQUFTLEVBQUUsYUFBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7UUFDdkQsY0FBYyxFQUFFLGFBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDdEQsT0FBTyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDckIsTUFBTSxFQUFFLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDakIsTUFBTSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDcEIsTUFBTSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDcEIsUUFBUSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDdEIsTUFBTSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDL0IsV0FBVyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDcEMsZUFBZSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7U0FDekMsQ0FBQztRQUNGLE9BQU8sRUFBRSxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ2xCLFlBQVksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN6QyxLQUFLLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDbEMsS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ25DLENBQUM7UUFDRixLQUFLLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDeEMsYUFBRyxDQUFDLE1BQU0sRUFBRTtZQUNaLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDcEIsYUFBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3RELENBQUM7UUFDRixXQUFXLEVBQUUsYUFBRyxDQUFDLE1BQU0sQ0FBQztZQUN0QixpQkFBaUIsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7WUFDckQsS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQztZQUMvQyxlQUFlLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUN2QyxTQUFTLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtTQUNsQyxDQUFDLENBQUMsT0FBTyxFQUFFO1FBQ1osaUJBQWlCLEVBQUUsYUFBRyxDQUFDLE1BQU0sQ0FBQztZQUM1QixTQUFTLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtTQUNsQyxDQUFDLENBQUMsT0FBTyxFQUFFO1FBQ1osV0FBVyxFQUFFLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDdEIsU0FBUyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztTQUNsRCxDQUFDLENBQUMsT0FBTyxFQUFFO1FBQ1osU0FBUyxFQUFFLGFBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUU7UUFDakMsT0FBTyxFQUFFLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDbEIsV0FBVyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDekIsSUFBSSxFQUFFLGFBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDNUIsWUFBWSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsZUFBZSxFQUFFLGFBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUU7U0FDeEMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNaLFlBQVksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQzdCLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztTQUNuQixDQUFDO1FBQ0YsaUJBQWlCLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRTtRQUMvQixhQUFhLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FDakMsYUFBRyxDQUFDLE1BQU0sRUFBRSxFQUNaLGFBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQ2IsYUFBRyxDQUFDLFFBQVEsRUFBRSxFQUNkLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDVCxNQUFNLEVBQUUsYUFBRyxDQUFDLFFBQVEsRUFBRTtZQUN0QixXQUFXLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtTQUNwQyxDQUFDLENBQ0gsQ0FDRjtRQUNELFlBQVksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO0tBQzNCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTlDLHVCQUF1QjtJQUN2QixJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sS0FBSyxDQUFDO0tBQ2I7QUFDSCxDQUFDLENBQUM7QUFyRlcsUUFBQSxjQUFjLGtCQXFGekIifQ==
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FBc0I7QUFDdEIsd0RBQTBCO0FBQzFCLG9EQUF1QjtBQUN2QixnREFBd0I7QUFDeEIsNkJBQTBCO0FBQzFCLCtCQUFpQztBQUVqQyxxREFBNkQ7QUFDN0QscURBQTZCO0FBRTdCLDBDQUFrRTtBQUNsRSxpQ0FBb0M7QUFDcEMsbUNBQTZDO0FBRTdDLE1BQU0sVUFBVSxHQUFHLElBQUEsZ0JBQVMsRUFBQyxnQkFBQyxDQUFDLElBQUksRUFBRSxvQkFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sVUFBVSxHQUFHLElBQUEsZ0JBQVMsRUFBQyxnQkFBQyxDQUFDLElBQUksRUFBRSxvQkFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sVUFBVSxHQUFHLElBQUEsZ0JBQVMsRUFBQyxnQkFBQyxDQUFDLElBQUksRUFBRSxvQkFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBRXZELElBQUksV0FBVyxHQUF5QixJQUFJLENBQUM7QUFFdEMsTUFBTSxVQUFVLEdBQUcsQ0FDeEIsR0FBVyxFQUNYLFVBQWtCLEVBQ2xCLFFBQWlDLEVBQ2xCLEVBQUU7SUFDakIsTUFBTSxPQUFPLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFOUMsSUFBSSxDQUFDLGtCQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxPQUFPLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsTUFBTSxVQUFVLEdBQUcsZ0JBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFakQsSUFBQSxzQkFBYyxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTNCLElB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
@@ -12,11 +12,13 @@ export declare class SortFilterWithSortedKeywords implements SortedNodeNameFilte
12
12
  filter<T>(nodeList: ReadonlyArray<T & SimpleNodeConfig>): ReadonlyArray<T & SimpleNodeConfig>;
13
13
  }
14
14
  export declare const validateFilter: (filter: any) => boolean;
15
- export declare const applyFilter: <T extends SimpleNodeConfig>(nodeList: readonly T[], filter?: SortedNodeNameFilterType | NodeNameFilterType | undefined) => readonly T[];
16
- export declare const mergeFilters: (filters: ReadonlyArray<NodeNameFilterType>, isStrict?: boolean | undefined) => NodeNameFilterType;
17
- export declare const useKeywords: (keywords: ReadonlyArray<string>, isStrict?: boolean | undefined) => NodeNameFilterType;
18
- export declare const discardKeywords: (keywords: ReadonlyArray<string>, isStrict?: boolean | undefined) => NodeNameFilterType;
15
+ export declare const applyFilter: <T extends SimpleNodeConfig>(nodeList: readonly T[], filter?: NodeNameFilterType | SortedNodeNameFilterType) => readonly T[];
16
+ export declare const mergeFilters: (filters: ReadonlyArray<NodeNameFilterType>, isStrict?: boolean) => NodeNameFilterType;
17
+ export declare const useKeywords: (keywords: ReadonlyArray<string>, isStrict?: boolean) => NodeNameFilterType;
18
+ export declare const discardKeywords: (keywords: ReadonlyArray<string>, isStrict?: boolean) => NodeNameFilterType;
19
19
  export declare const useRegexp: (regexp: RegExp) => NodeNameFilterType;
20
+ export declare const useGlob: (glob: string) => NodeNameFilterType;
21
+ export declare const discardGlob: (glob: string) => NodeNameFilterType;
20
22
  export declare const useProviders: (keywords: ReadonlyArray<string>, isStrict?: boolean) => NodeNameFilterType;
21
23
  export declare const discardProviders: (keywords: ReadonlyArray<string>, isStrict?: boolean) => NodeNameFilterType;
22
24
  export declare const useSortedKeywords: (keywords: ReadonlyArray<string>) => SortedNodeNameFilterType;
@@ -31,6 +33,7 @@ export declare const taiwanFilter: NodeNameFilterType;
31
33
  export declare const chinaBackFilter: NodeNameFilterType;
32
34
  export declare const chinaOutFilter: NodeNameFilterType;
33
35
  export declare const youtubePremiumFilter: NodeNameFilterType;
36
+ export declare const matchGlob: (str: string, glob: string) => boolean;
34
37
  export declare const shadowsocksFilter: NodeNameFilterType;
35
38
  export declare const shadowsocksrFilter: NodeNameFilterType;
36
39
  export declare const vmessFilter: NodeNameFilterType;