UNPKG

quicksilver-cli

Version:
84 lines (83 loc) 3.18 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const path = __importStar(require("path")); const system_1 = require("./system"); const ProjectUtil = __importStar(require("./project")); const fs = __importStar(require("fs")); const log4js = require("log4js"); async function getEnv(rootProjectPath, key, initData) { const logger = log4js.getLogger("environment"); ProjectUtil.copyEnvironmentConfigFileIfNotExists(rootProjectPath); const environmentJsonPath = path.join(rootProjectPath, ProjectUtil.environmentConfigFile); const content = fs.readFileSync(environmentJsonPath, { encoding: "utf8" }); const environmentJson = initEnvironmentJson(content, initData)[key]; const env = Object.assign({}, process.env); for (let key of Object.keys(environmentJson)) { if (typeof environmentJson[key] == "string") { env[key] = environmentJson[key]; } else { const joiner = path.delimiter; const arrayJoiner = ["CATALINA_OPTS"].includes(key) ? " " : joiner; const joinItems = environmentJson[key].join(arrayJoiner); if (key in env) { env[key] = `${joinItems}${joiner}${env[key]}`; } else { env[key] = `${joinItems}${joiner}`; } } logger.info(`Environment variable: ${key}=${env[key]}`); } return env; } exports.getEnv = getEnv; function initEnvironmentJson(content, initData) { content = content.replace(/\\/g, "/"); const keys = getKeys(content); const keysResult = { ...initData }; const env = process.env; extractAll(keysResult, keys, env); const props = system_1.getJVMVariables(); extractAll(keysResult, keys, props); let custom = JSON.parse(content).custom; let customString = JSON.stringify(custom); customString = replaceAll(customString, keysResult); custom = JSON.parse(customString); Object.assign(keysResult, custom, initData); content = replaceAll(content, keysResult); return JSON.parse(content); } exports.initEnvironmentJson = initEnvironmentJson; function getKeys(source) { const regExp = /\$\{(.*)}/g; const paramsSet = {}; let execResult; while (execResult = regExp.exec(source)) { paramsSet[execResult[1]] = 1; } return Object.keys(paramsSet); } function extractAll(target, keys, source) { keys.forEach(key => { if (key in source) { target[key] = source[key]; } }); } function replaceAll(source, param) { for (let key in param) { source = replace(source, key, param[key]); } return source; } function replace(source, key, value) { return source.replace(new RegExp("\\${" + key + "}", "g"), value.replace(/\\/g, "\\\\")); }