UNPKG

@zambelz/zhc

Version:
112 lines 4.31 kB
"use strict"; 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