UNPKG

surgio

Version:

查看完整使用文档,前往 [surgio.royli.dev](https://surgio.royli.dev)。

142 lines 12.9 kB
'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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