@zambelz/zhc
Version:
API Management Tools
112 lines • 4.31 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execPostRequestScript = exports.execPreRequestScript = void 0;
const node_vm_1 = __importDefault(require("node:vm"));
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const global_1 = require("../../../utils/global");
const logger_1 = require("../../../utils/logger");
const fileOperation_1 = require("../../../utils/fileOperation");
const common_1 = require("../../../utils/common");
const builtInModules = (showLog = false) => {
const defaultModules = {
btoa,
atob,
fs: node_fs_1.default,
path: node_path_1.default,
JSON
};
if (showLog) {
return { ...defaultModules, console };
}
return defaultModules;
};
const loadScript = (type, scriptName) => {
const finalScriptName = `${scriptName}.js`;
const scriptLocation = node_path_1.default.join(global_1.SCRIPTS_PATH, finalScriptName);
if (!node_fs_1.default.existsSync(scriptLocation)) {
(0, logger_1.logWarning)(`${type}-request script "${finalScriptName}.js" not found`);
return undefined;
}
const script = node_fs_1.default.readFileSync(scriptLocation, "utf-8");
return script;
};
const updateEnv = (path, unparsedData, parsedData) => {
const totalLines = (unparsedData.length + Object.keys(parsedData).length);
if (totalLines === 0) {
(0, logger_1.logWarning)("Failed to update env file");
return;
}
const indexedParsedData = Object.entries(parsedData);
let nextParsedIndex = 0;
const contents = ["{\n"];
for (let i = 1; i < totalLines; i++) {
const unparsedContent = unparsedData.find(line => line.line === i);
if (unparsedContent) {
let unparsedContentValue = unparsedContent.value;
if (unparsedContentValue !== "\n") {
unparsedContentValue += "\n";
}
contents.push(unparsedContentValue);
continue;
}
const [key, value] = indexedParsedData[nextParsedIndex];
let parsedValue = undefined;
if (typeof value === "string") {
parsedValue = `"${value}"`;
}
if (typeof value === "boolean" || typeof value === "number") {
parsedValue = value;
}
if (!parsedValue) {
(0, logger_1.logWarning)(`Failed to update env file`);
return;
}
let parsedContent = `\t"${key}": ${parsedValue}`;
if (nextParsedIndex < indexedParsedData.length - 1) {
parsedContent += ",";
}
parsedContent += "\n";
contents.push(parsedContent);
nextParsedIndex++;
}
const lastContent = contents[contents.length - 1].replaceAll(" ", "");
if (lastContent !== "\n") {
contents.push("\n");
}
contents.push("}");
(0, fileOperation_1.appendFile)({
path,
force: true,
contents
});
};
const execPreRequestScript = (scriptName, env, showLog = false) => {
const content = (0, common_1.parseContent)(env.content);
const variables = content.parsed;
const script = loadScript("Pre", scriptName);
if (!script) {
(0, logger_1.logWarning)("Failed to load Pre-request script content");
return variables;
}
node_vm_1.default.runInNewContext(script, { variables, ...builtInModules(showLog) });
updateEnv(env.path, content.unparseable, variables);
return variables;
};
exports.execPreRequestScript = execPreRequestScript;
const execPostRequestScript = (scriptName, env, response, showLog = false) => {
const script = loadScript("Post", scriptName);
if (!script) {
(0, logger_1.logWarning)("Failed to load Post-request script content");
return env.parsed;
}
const variables = env.parsed;
node_vm_1.default.runInNewContext(script, { variables, response, ...builtInModules(showLog) });
updateEnv(env.path, env.unparseable, variables);
return variables;
};
exports.execPostRequestScript = execPostRequestScript;
//# sourceMappingURL=requestScript.js.map