quicksilver-cli
Version:
Cli tool for Quicksilver
84 lines (83 loc) • 3.18 kB
JavaScript
;
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, "\\\\"));
}