UNPKG

lazy-js-utils

Version:

A collection of lazy-loaded JavaScript utilities for efficient development

140 lines (137 loc) 4.55 kB
"use strict"; const require_chunk = require('./chunk-BCwAaXi7.cjs'); const require_parallel = require('./parallel-BSxIacyY.cjs'); const require_isBool = require('./isBool-B9jCuCG_.cjs'); const node_process = require_chunk.__toESM(require("node:process")); const node_fs = require_chunk.__toESM(require("node:fs")); const node_path = require_chunk.__toESM(require("node:path")); const node_child_process = require_chunk.__toESM(require("node:child_process")); const node_worker_threads = require_chunk.__toESM(require("node:worker_threads")); //#region src/node/jsShell.ts function jsShell(commander, options) { let args = []; let stdio; let errorExit = true; let isLog = false; let cwd; let _options = {}; if (require_parallel.isPlainObject(options)) { args = options.args ?? []; stdio = options.stdio; errorExit = options.errorExit ?? true; isLog = options.isLog ?? false; cwd = options.cwd; _options = options.options ?? {}; } else if (options) stdio = options; return require_isBool.isArray(commander) ? Promise.all(commander.map((command) => executor(command))) : executor(commander); function executor(commander$1) { return new Promise((resolve, reject) => { var _child$stdout, _child$stderr; const child = node_child_process.default.spawn(commander$1, args, { shell: true, stdio, cwd, ..._options }); const pid = child.pid; let result = ""; let errorOutput = ""; (_child$stdout = child.stdout) === null || _child$stdout === void 0 || _child$stdout.on("data", (data) => { result += data.toString(); }); (_child$stderr = child.stderr) === null || _child$stderr === void 0 || _child$stderr.on("data", (data) => { if (isLog) console.error(data.toString()); errorOutput += data.toString(); }); child.on("close", (status) => { result = result.trim(); if (status === 130) { if (isLog) console.log("已取消..."); resolve({ status, result, pid }); } else if (status !== 0) { if (isLog) console.error(`Command failed with status ${status}`); if (errorExit) { reject(new Error(result || errorOutput)); node_process.default.exit(1); } else resolve({ status, result: result || errorOutput, pid }); } else resolve({ status, result, pid }); }); child.on("error", (error) => { if (isLog) console.error(error.message); if (errorExit) { reject(new Error(error.message)); node_process.default.exit(1); } else resolve({ status: null, result: error.message, pid }); }); }); } } //#endregion //#region src/node/useNodeWorker.ts /** * 这个api需要 dependencies 中安装lazy-js-utils * @param { string | NodeWorkerPayload } payload 字符串 | { params: string[] stdio?: 'inherit' | 'pipe' } * @param { string } [url] 自定义worker路径 * @returns */ async function useNodeWorker(payload, url) { if (!url) { url = node_path.default.resolve(__dirname, "../node_modules/lazy-js-utils/dist/worker/useNodeWorkerThread.js"); if (!node_fs.default.existsSync(url)) url = node_path.default.resolve(__dirname, "./worker/useNodeWorkerThread.js"); } const { params } = require_isBool.isStr(payload) ? payload = { params: payload } : payload; const commands = require_isBool.isArray(params) ? params : params.split("&&"); const result = await require_parallel.parallel(commands, (params$1) => createWorker(Object.assign(payload, { params: params$1 }))); setTimeout(node_process.default.exit); return result.length === 1 ? result[0] : result; function createWorker(payload$1) { const { Worker } = node_worker_threads.default; return new Promise((resolve) => { const seprateThread = new Worker(url); seprateThread.on("message", resolve); seprateThread.postMessage(payload$1); }); } } function useProcressNodeWorker(callback) { const { parentPort } = node_worker_threads.default; parentPort.on("message", async (data) => parentPort === null || parentPort === void 0 ? void 0 : parentPort.postMessage(await (callback === null || callback === void 0 ? void 0 : callback(data)) || (() => ""))); } //#endregion Object.defineProperty(exports, 'jsShell', { enumerable: true, get: function () { return jsShell; } }); Object.defineProperty(exports, 'useNodeWorker', { enumerable: true, get: function () { return useNodeWorker; } }); Object.defineProperty(exports, 'useProcressNodeWorker', { enumerable: true, get: function () { return useProcressNodeWorker; } });