UNPKG

surgio

Version:

Generating rules for Surge, Clash, Quantumult like a PRO

74 lines 3.48 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.render = exports.combineExtendFunctions = exports.extendEndpoints = exports.extendOutbounds = exports.createExtendFunction = void 0; const path_1 = require("path"); const lodash_1 = __importDefault(require("lodash")); const fs_extra_1 = __importDefault(require("fs-extra")); const createExtendFunction = (extendKey) => { const extendFunction = (extendValue) => { return (jsonInput, extendContext = {}) => { const jsonInputCopy = lodash_1.default.cloneDeep(jsonInput); const isExist = lodash_1.default.get(jsonInputCopy, extendKey); const extendValueIsFunction = lodash_1.default.isFunction(extendValue); const valueToExtend = extendValueIsFunction ? extendValue(extendContext) : extendValue; if (isExist) { if (lodash_1.default.isArray(isExist)) { if (lodash_1.default.isArray(valueToExtend)) { lodash_1.default.set(jsonInputCopy, extendKey, [...isExist, ...valueToExtend]); } else { lodash_1.default.set(jsonInputCopy, extendKey, [...isExist, valueToExtend]); } } else if (lodash_1.default.isPlainObject(isExist) && lodash_1.default.isPlainObject(valueToExtend)) { lodash_1.default.set(jsonInputCopy, extendKey, lodash_1.default.mergeWith({}, isExist, valueToExtend, (objValue, srcValue) => { if (lodash_1.default.isArray(objValue) && lodash_1.default.isArray(srcValue)) { return [...objValue, ...srcValue]; } return undefined; })); } else { lodash_1.default.set(jsonInputCopy, extendKey, valueToExtend); } } else { lodash_1.default.set(jsonInputCopy, extendKey, valueToExtend); } return jsonInputCopy; }; }; return extendFunction; }; exports.createExtendFunction = createExtendFunction; exports.extendOutbounds = (0, exports.createExtendFunction)('outbounds'); exports.extendEndpoints = (0, exports.createExtendFunction)('endpoints'); const combineExtendFunctions = (...args) => { return (jsonInput, extendContext = {}) => { return args.reduce((acc, extend) => extend(acc, extendContext), jsonInput); }; }; exports.combineExtendFunctions = combineExtendFunctions; const render = (templateDir, fileName, extend, extendContext) => { const templatePath = (0, path_1.join)(templateDir, fileName); const jsonInput = fs_extra_1.default.readJsonSync(templatePath); try { const jsonOutput = extend(jsonInput, extendContext); return JSON.stringify(jsonOutput, null, 2); } catch (error) { // istanbul ignore next if (error instanceof Error) { throw new Error(`Error when rendering JSON template ${fileName}: ${error.message}`); } // istanbul ignore next throw new Error(`Error when rendering JSON template ${fileName}`); } }; exports.render = render; //# sourceMappingURL=json-template.js.map