UNPKG

unbag

Version:

一个专门用来开发npm工具的包

104 lines 2.94 kB
import { v4 as uuidv4 } from "uuid"; import { WaitDefaultConfig, genWaitCommand, genWaitResAbsoluteFilePath, writeWaitResFile } from "./wait.mjs"; import concurrently from "concurrently"; import { usePath } from "../../utils/path.mjs"; const ParallelDefaultConfig = { wait: WaitDefaultConfig, commands: [], groups: {} }; const parallel = async config => { const needWaitCmdMap = /* @__PURE__ */new Map(); const { parallel: parallel2, root, tempDir } = config; const { commands, groupName, groups } = parallel2; const path = usePath(); const parallelTempDir = path.resolve(root, tempDir, "parallel"); const parallelWaitTempDir = path.resolve(parallelTempDir, "wait"); const finalCommands = (groupName ? groups[groupName] : commands) || []; const commandList = finalCommands.map(e => { let command = `${e.npmScript}`; if (e.wait?.func) { const waitTag = `${e.name}_wait_${uuidv4()}`; const waitCmd = genWaitCommand({ tag: waitTag, name: e.name }); command = `${waitCmd} && ${command}`; needWaitCmdMap.set(waitTag, e); } return { name: e.name, command }; }); const waitFuncObj = Object.fromEntries(needWaitCmdMap.entries()); await Promise.all(Object.keys(waitFuncObj).map(async tag => { const cmd = waitFuncObj[tag]; if (!cmd?.wait?.func) { return; } const waitResAbsoluteFilePath = genWaitResAbsoluteFilePath({ absoluteTempDir: parallelWaitTempDir, tag }); await writeWaitResFile({ absoluteFilePath: waitResAbsoluteFilePath, content: { tag, lastUpdateTime: Date.now(), finish: false, interval: cmd.wait.interval || WaitDefaultConfig.interval, timeout: cmd.wait.interval || WaitDefaultConfig.timeout } }); })); concurrently(commandList, { prefixColors: "auto", prefix: "[{time}]-[{name}]", timestampFormat: "HH:mm:ss", killOthers: ["failure"] }); Object.keys(waitFuncObj).map(async tag => { const cmd = waitFuncObj[tag]; if (!cmd?.wait?.func) { return; } const waitResAbsoluteFilePath = genWaitResAbsoluteFilePath({ absoluteTempDir: parallelWaitTempDir, tag }); try { const res = await cmd.wait.func(); await writeWaitResFile({ absoluteFilePath: waitResAbsoluteFilePath, merge: true, content: { lastUpdateTime: Date.now(), finish: true, result: res, message: res ? "success" : "false" } }); } catch (error) { await writeWaitResFile({ absoluteFilePath: waitResAbsoluteFilePath, merge: true, content: { finish: true, lastUpdateTime: Date.now(), result: false, message: error.message || "unknown error" } }); } }); }; export { ParallelDefaultConfig, parallel };