surgio
Version:
查看完整使用文档,前往 [surgio.royli.dev](https://surgio.royli.dev)。
142 lines • 12.9 kB
JavaScript
'use strict';
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = __importDefault(require("assert"));
const chalk_1 = __importDefault(require("chalk"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const lodash_1 = __importDefault(require("lodash"));
const ora_1 = __importDefault(require("ora"));
const path_1 = __importDefault(require("path"));
const template_1 = __importDefault(require("./template"));
const utils_1 = require("./utils");
const filter_1 = require("./utils/filter");
const getProvider_1 = __importDefault(require("./utils/getProvider"));
const flag_1 = require("./utils/flag");
const spinner = ora_1.default();
async function run(config) {
const artifactList = config.artifacts;
const distPath = config.output;
const remoteSnippetsConfig = config.remoteSnippets || [];
const remoteSnippetList = await utils_1.loadRemoteSnippetList(remoteSnippetsConfig);
await fs_extra_1.default.remove(distPath);
await fs_extra_1.default.mkdir(distPath);
for (const artifact of artifactList) {
spinner.start(`Generating ${artifact.name}`);
const result = await generate(config, artifact, remoteSnippetList);
const destFilePath = path_1.default.join(config.output, artifact.name);
await fs_extra_1.default.writeFile(destFilePath, result);
spinner.succeed();
}
}
async function generate(config, artifact, remoteSnippetList) {
const templateEngine = template_1.default(config.templateDir);
const { name: artifactName, template, customParams, } = artifact;
assert_1.default(artifactName, 'You must specify the artifact\'s name.');
assert_1.default(template, 'You must specify the artifact\'s template.');
assert_1.default(artifact.provider, 'You must specify the artifact\'s provider.');
const recipeList = artifact.recipe ? artifact.recipe : [artifact.provider];
const nodeList = [];
const nodeNameList = [];
let customFilters;
let netflixFilter;
let youtubePremiumFilter;
if (config.binPath && config.binPath.v2ray) {
config.binPath.vmess = config.binPath.v2ray;
}
for (const providerName of recipeList) {
const filePath = path_1.default.resolve(config.providerDir, `${providerName}.js`);
if (!fs_extra_1.default.existsSync(filePath)) {
throw new Error(`${filePath} cannot be found.`);
}
const provider = getProvider_1.default(require(filePath));
const nodeConfigList = await provider.getNodeList();
if (!netflixFilter) {
netflixFilter = provider.netflixFilter || filter_1.netflixFilter;
}
if (!youtubePremiumFilter) {
youtubePremiumFilter = provider.youtubePremiumFilter || filter_1.youtubePremiumFilter;
}
if (!customFilters) {
customFilters = provider.customFilters;
}
nodeConfigList.forEach(nodeConfig => {
let isValid = false;
if (!provider.nodeFilter) {
isValid = true;
}
else if (provider.nodeFilter(nodeConfig)) {
isValid = true;
}
if (config.binPath && config.binPath[nodeConfig.type]) {
nodeConfig.binPath = config.binPath[nodeConfig.type];
nodeConfig.localPort = provider.nextPort;
}
nodeConfig.surgeConfig = config.surgeConfig;
if (provider.addFlag) {
nodeConfig.nodeName = flag_1.prependFlag(nodeConfig.nodeName);
}
if (isValid) {
nodeNameList.push({
type: nodeConfig.type,
enable: nodeConfig.enable,
nodeName: nodeConfig.nodeName,
});
nodeList.push(nodeConfig);
}
});
}
try {
return templateEngine.render(`${template}.tpl`, Object.assign(Object.assign({ downloadUrl: utils_1.getDownloadUrl(config.urlBase, artifactName), nodes: nodeList, names: nodeNameList, remoteSnippets: lodash_1.default.keyBy(remoteSnippetList, item => {
return item.name;
}), nodeList, provider: artifact.provider, providerName: artifact.provider, artifactName, getDownloadUrl: (name) => utils_1.getDownloadUrl(config.urlBase, name), getNodeNames: utils_1.getNodeNames,
getClashNodes: utils_1.getClashNodes,
getClashNodeNames: utils_1.getClashNodeNames,
getSurgeNodes: utils_1.getSurgeNodes,
getShadowsocksNodes: utils_1.getShadowsocksNodes,
getShadowsocksNodesJSON: utils_1.getShadowsocksNodesJSON,
getShadowsocksrNodes: utils_1.getShadowsocksrNodes,
getQuantumultNodes: utils_1.getQuantumultNodes,
usFilter: filter_1.usFilter,
hkFilter: filter_1.hkFilter,
japanFilter: filter_1.japanFilter,
koreaFilter: filter_1.koreaFilter,
singaporeFilter: filter_1.singaporeFilter,
taiwanFilter: filter_1.taiwanFilter,
toUrlSafeBase64: utils_1.toUrlSafeBase64,
toBase64: utils_1.toBase64,
encodeURIComponent,
netflixFilter,
youtubePremiumFilter,
customFilters }, (customParams ? customParams : {})), (artifact.proxyGroupModifier ? {
clashProxyConfig: {
Proxy: utils_1.getClashNodes(nodeList),
'Proxy Group': utils_1.normalizeClashProxyGroupConfig(nodeList, Object.assign({ usFilter: filter_1.usFilter,
hkFilter: filter_1.hkFilter,
japanFilter: filter_1.japanFilter,
koreaFilter: filter_1.koreaFilter,
singaporeFilter: filter_1.singaporeFilter,
taiwanFilter: filter_1.taiwanFilter,
netflixFilter,
youtubePremiumFilter }, customFilters), artifact.proxyGroupModifier),
},
} : {})));
}
catch (err) {
console.error('模板渲染错误');
throw err;
}
}
exports.generate = generate;
async function default_1(config) {
console.log(chalk_1.default.cyan('Start generating configs.'));
await run(config)
.catch(err => {
spinner.fail();
throw err;
});
console.log(chalk_1.default.cyan('Configs generated successfully.'));
}
exports.default = default_1;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvZ2VuZXJhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7OztBQUViLG9EQUE0QjtBQUM1QixrREFBMEI7QUFDMUIsd0RBQTBCO0FBQzFCLG9EQUF1QjtBQUN2Qiw4Q0FBc0I7QUFDdEIsZ0RBQXdCO0FBRXhCLDBEQUFtQztBQVVuQyxtQ0FjaUI7QUFDakIsMkNBS3dCO0FBQ3hCLHNFQUE4QztBQUM5Qyx1Q0FBMkM7QUFFM0MsTUFBTSxPQUFPLEdBQUcsYUFBRyxFQUFFLENBQUM7QUFFdEIsS0FBSyxVQUFVLEdBQUcsQ0FBQyxNQUFxQjtJQUN0QyxNQUFNLFlBQVksR0FBa0MsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNyRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQy9CLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFDekQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLDZCQUFxQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFNUUsTUFBTSxrQkFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQixNQUFNLGtCQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXpCLEtBQUssTUFBTSxRQUFRLElBQUksWUFBWSxFQUFFO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU3QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3RCxNQUFNLGtCQUFFLENBQUMs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