lazy-js-utils
Version:
A collection of lazy-loaded JavaScript utilities for efficient development
140 lines (137 loc) • 4.55 kB
JavaScript
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;
}
});
;