weapp-ide-cli
Version:
让微信开发者工具,用起来更加方便!
218 lines (207 loc) • 7.27 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
// src/cli.ts
var import_node_process3 = __toESM(require("process"), 1);
// src/logger.ts
var import_logger = __toESM(require("@weapp-core/logger"), 1);
var logger_default = import_logger.default;
// src/parse.ts
var import_node_process2 = __toESM(require("process"), 1);
var import_node_readline = __toESM(require("readline"), 1);
var import_fs_extra2 = __toESM(require("fs-extra"), 1);
// src/compose.ts
function compose(...funcs) {
if (funcs.length === 0) {
return (arg) => arg;
}
if (funcs.length === 1) {
return funcs[0];
}
return funcs.reduce(
(a, b) => (...args) => a(b(...args))
);
}
// src/config.ts
var import_fs_extra = __toESM(require("fs-extra"), 1);
// src/defaults.ts
var import_node_os = __toESM(require("os"), 1);
var import_pathe = __toESM(require("pathe"), 1);
var homedir = import_node_os.default.homedir();
var SupportedPlatformsMap = {
Windows_NT: "Windows_NT",
Darwin: "Darwin"
};
var defaultPathMap = {
[SupportedPlatformsMap.Windows_NT]: "C:\\Program Files (x86)\\Tencent\\\u5FAE\u4FE1web\u5F00\u53D1\u8005\u5DE5\u5177\\cli.bat",
[SupportedPlatformsMap.Darwin]: "/Applications/wechatwebdevtools.app/Contents/MacOS/cli"
};
var operatingSystemName = import_node_os.default.type();
var defaultCustomConfigDirPath = import_pathe.default.join(homedir, ".weapp-ide-cli");
var defaultCustomConfigFilePath = import_pathe.default.join(
defaultCustomConfigDirPath,
"config.json"
);
var defaultPath = defaultPathMap[operatingSystemName];
// src/config.ts
function createCustomConfig(params) {
return import_fs_extra.default.outputJSON(
defaultCustomConfigFilePath,
{
cliPath: params.cliPath
},
{
encoding: "utf8",
spaces: 2
}
);
}
async function getConfig() {
const isExisted = await import_fs_extra.default.exists(defaultCustomConfigFilePath);
if (isExisted) {
const content = await import_fs_extra.default.readFile(defaultCustomConfigFilePath, {
encoding: "utf8"
});
const config = JSON.parse(content);
logger_default.log("> \u5168\u5C40\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84\uFF1A", defaultCustomConfigFilePath);
logger_default.log("> \u81EA\u5B9A\u4E49cli\u8DEF\u5F84\uFF1A", config.cliPath);
return config;
} else {
return {
cliPath: defaultPath
};
}
}
// src/utils.ts
var import_node_process = __toESM(require("process"), 1);
var import_pathe2 = __toESM(require("pathe"), 1);
async function execute(cliPath, argv2) {
const { execa } = await import("execa");
const task = execa(cliPath, argv2);
task?.stdout?.pipe(import_node_process.default.stdout);
await task;
}
function resolvePath(filePath) {
if (import_pathe2.default.isAbsolute(filePath)) {
return filePath;
} else {
return import_pathe2.default.resolve(import_node_process.default.cwd(), filePath);
}
}
function alias(argv2, entry) {
let findIdx = argv2.indexOf(entry.find);
if (findIdx > -1) {
argv2[findIdx] = entry.replacement;
} else {
findIdx = argv2.indexOf(entry.replacement);
}
if (findIdx > -1) {
const paramIdx = findIdx + 1;
const param = argv2[paramIdx];
if (param && param[0] !== "-") {
argv2[paramIdx] = resolvePath(param);
} else {
argv2.splice(paramIdx, 0, import_node_process.default.cwd());
}
}
return argv2;
}
function pathCompat(argv2, option) {
const findIdx = argv2.indexOf(option);
if (findIdx > -1) {
const paramIdx = findIdx + 1;
const param = argv2[paramIdx];
if (param && param[0] !== "-") {
argv2[paramIdx] = resolvePath(param);
} else {
argv2.splice(paramIdx, 0, import_node_process.default.cwd());
}
}
return argv2;
}
function createAlias(entry) {
return function(argv2) {
return alias(argv2, entry);
};
}
function createPathCompat(option) {
return function(argv2) {
return pathCompat(argv2, option);
};
}
// src/parse.ts
var isSupported = Boolean(defaultPath);
function rlSetConfig() {
const rl = import_node_readline.default.createInterface({
input: import_node_process2.default.stdin,
output: import_node_process2.default.stdout
});
logger_default.log("\u8BF7\u8BBE\u7F6E\u5FAE\u4FE1web\u5F00\u53D1\u8005\u5DE5\u5177 cli \u7684\u8DEF\u5F84");
logger_default.log("> \u63D0\u793A\uFF1A\u547D\u4EE4\u884C\u5DE5\u5177\u9ED8\u8BA4\u6240\u5728\u4F4D\u7F6E\uFF1A");
logger_default.log("- MacOS: <\u5B89\u88C5\u8DEF\u5F84>/Contents/MacOS/cli");
logger_default.log("- Windows: <\u5B89\u88C5\u8DEF\u5F84>/cli.bat");
return new Promise((resolve, _reject) => {
rl.question("\u8BF7\u8F93\u5165\u5FAE\u4FE1web\u5F00\u53D1\u8005\u5DE5\u5177cli\u8DEF\u5F84\uFF1A", async (cliPath) => {
await createCustomConfig({
cliPath
});
logger_default.log(`\u5168\u5C40\u914D\u7F6E\u5B58\u50A8\u4F4D\u7F6E\uFF1A${defaultCustomConfigFilePath}`);
resolve(cliPath);
});
});
}
var parseArgv = compose(
createAlias({ find: "-p", replacement: "--project" }),
createPathCompat("--result-output"),
createPathCompat("-r"),
createPathCompat("--qr-output"),
createPathCompat("-o"),
createPathCompat("--info-output"),
createPathCompat("-i")
);
async function parse(argv2) {
if (isSupported) {
const { cliPath } = await getConfig();
const isExisted = await import_fs_extra2.default.exists(cliPath);
if (isExisted) {
if (argv2[0] === "config") {
await rlSetConfig();
return;
}
const formattedArgv = parseArgv(argv2);
await execute(cliPath, formattedArgv);
} else {
logger_default.log(
"\u5728\u5F53\u524D\u81EA\u5B9A\u4E49\u8DEF\u5F84\u4E2D,\u672A\u627E\u5230\u5FAE\u4FE1web\u5F00\u53D1\u8005\u547D\u4EE4\u884C\u5DE5\u5177\uFF0C\u8BF7\u91CD\u65B0\u6307\u5B9A\u8DEF\u5F84"
);
await rlSetConfig();
}
} else {
logger_default.log(`\u5FAE\u4FE1web\u5F00\u53D1\u8005\u5DE5\u5177\u4E0D\u652F\u6301\u5F53\u524D\u5E73\u53F0\uFF1A${operatingSystemName} !`);
}
}
// src/cli.ts
var argv = import_node_process3.default.argv.slice(2);
parse(argv).catch((err) => {
logger_default.error(err);
});