uTools-quickcommand/src/js/composer/generateUBrowserCode.js

101 lines
2.3 KiB
JavaScript

/**
* 生成 UBrowser 代码
* @param {Object} argvs UBrowser 配置对象
* @returns {string} 生成的代码
*/
import { stringifyVarInputVal } from "./varInputValManager";
import { stringifyArgv } from "./formatString";
// ubrowser 默认运行配置
const defaultRunConfigs = {
show: true,
width: 800,
height: 600,
center: true,
minWidth: 0,
minHeight: 0,
resizable: true,
movable: true,
minimizable: true,
maximizable: true,
alwaysOnTop: false,
fullscreen: false,
fullscreenable: true,
enableLargerThanScreen: false,
opacity: 1,
};
// 生成完整的 ubrowser 代码
export function generateUBrowserCode(argvs) {
const lines = ["utools.ubrowser"];
// 首先添加 goto 操作
if (argvs.goto) {
const args = [];
// url
if (argvs.goto.url) {
args.push(stringifyVarInputVal(argvs.goto.url));
}
// headers
const headers = {};
// 处理标准headers
Object.entries(argvs.goto.headers || {}).forEach(([key, value]) => {
if (value?.value) {
headers[key] = value.value;
}
});
// 处理其他headers
Object.entries(argvs.goto.otherHeaders || {}).forEach(([key, value]) => {
if (value?.value) {
headers[key] = value.value;
}
});
if (Object.keys(headers).length > 0) {
args.push(stringifyArgv(headers));
}
// timeout
if (argvs.goto.timeout) {
if (args.length === 1) {
args.push("undefined");
}
args.push(argvs.goto.timeout);
}
lines[0] += `.goto(${args.join(", ")})`;
}
// 添加其他操作
if (argvs.operations?.length) {
argvs.operations.forEach(({ value, args }) => {
const stringifiedArgs = args
.map((arg) => stringifyArgv(arg))
.filter(Boolean);
lines.push(` .${value}(${stringifiedArgs.join(", ")})`);
});
}
// 最后添加 run 配置(只包含非默认值)
if (argvs.run) {
const runOptions = {};
Object.entries(argvs.run).forEach(([key, value]) => {
if (value !== defaultRunConfigs[key]) {
runOptions[key] = value;
}
});
if (Object.keys(runOptions).length > 0) {
lines.push(
` .run(${JSON.stringify(runOptions, null, 2).replace(/\n/g, "\n ")})`
);
} else {
lines.push(" .run()");
}
}
return lines.join("\n");
}