weapp-ide-cli
Version:
让微信开发者工具,用起来更加方便!
196 lines (188 loc) • 5.47 kB
JavaScript
// src/defaults.ts
import os from "os";
import path from "pathe";
var homedir = os.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 = os.type();
var defaultCustomConfigDirPath = path.join(homedir, ".weapp-ide-cli");
var defaultCustomConfigFilePath = path.join(
defaultCustomConfigDirPath,
"config.json"
);
var defaultPath = defaultPathMap[operatingSystemName];
// src/logger.ts
import logger from "@weapp-core/logger";
var logger_default = logger;
// src/utils.ts
import process from "process";
import path2 from "pathe";
async function execute(cliPath, argv) {
const { execa } = await import("execa");
const task = execa(cliPath, argv);
task?.stdout?.pipe(process.stdout);
await task;
}
function resolvePath(filePath) {
if (path2.isAbsolute(filePath)) {
return filePath;
} else {
return path2.resolve(process.cwd(), filePath);
}
}
function alias(argv, entry) {
let findIdx = argv.indexOf(entry.find);
if (findIdx > -1) {
argv[findIdx] = entry.replacement;
} else {
findIdx = argv.indexOf(entry.replacement);
}
if (findIdx > -1) {
const paramIdx = findIdx + 1;
const param = argv[paramIdx];
if (param && param[0] !== "-") {
argv[paramIdx] = resolvePath(param);
} else {
argv.splice(paramIdx, 0, process.cwd());
}
}
return argv;
}
function pathCompat(argv, option) {
const findIdx = argv.indexOf(option);
if (findIdx > -1) {
const paramIdx = findIdx + 1;
const param = argv[paramIdx];
if (param && param[0] !== "-") {
argv[paramIdx] = resolvePath(param);
} else {
argv.splice(paramIdx, 0, process.cwd());
}
}
return argv;
}
function createAlias(entry) {
return function(argv) {
return alias(argv, entry);
};
}
function createPathCompat(option) {
return function(argv) {
return pathCompat(argv, option);
};
}
// src/parse.ts
import process2 from "process";
import readline from "readline";
import fs2 from "fs-extra";
// 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
import fs from "fs-extra";
function createCustomConfig(params) {
return fs.outputJSON(
defaultCustomConfigFilePath,
{
cliPath: params.cliPath
},
{
encoding: "utf8",
spaces: 2
}
);
}
async function getConfig() {
const isExisted = await fs.exists(defaultCustomConfigFilePath);
if (isExisted) {
const content = await fs.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/parse.ts
var isSupported = Boolean(defaultPath);
function rlSetConfig() {
const rl = readline.createInterface({
input: process2.stdin,
output: process2.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(argv) {
if (isSupported) {
const { cliPath } = await getConfig();
const isExisted = await fs2.exists(cliPath);
if (isExisted) {
if (argv[0] === "config") {
await rlSetConfig();
return;
}
const formattedArgv = parseArgv(argv);
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} !`);
}
}
export {
operatingSystemName,
defaultCustomConfigDirPath,
defaultCustomConfigFilePath,
defaultPath,
logger_default,
execute,
resolvePath,
createAlias,
createPathCompat,
parse
};