UNPKG

typescript-assistant

Version:

Combines and integrates professional Typescript tools into your project

90 lines 3.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createWindowsTaskRunner = void 0; exports.createDefaultTaskRunner = createDefaultTaskRunner; const child_process_1 = require("child_process"); const path = require("path"); const readline_1 = require("readline"); const kill = require("tree-kill"); function strip(line) { return /^\s*(.*?)\s*$/m.exec(line)[1]; } function createDefaultTaskRunner() { return { runTask(command, args, config) { let start = performance.now(); let loggerCategory = config.name; let logger = config.logger; let readableCommand = command .replace(`.${path.sep}node_modules${path.sep}.bin${path.sep}`, "") .replace(".cmd", ""); logger.log(loggerCategory, `running command ${readableCommand} ${args.join(" ")}`); let task = (0, child_process_1.spawn)(command, args, { shell: true }); let stdout = (0, readline_1.createInterface)({ input: task.stdout }); stdout.on("line", (line) => { line = strip(line); if (!line) { return; } let handled = false; if (config.handleOutput) { handled = config.handleOutput(line); } if (!handled) { logger.log(loggerCategory, line); } }); let stderr = (0, readline_1.createInterface)({ input: task.stderr }); stderr.on("line", (line) => { line = strip(line); if (!line) { return; } let handled = false; if (config.handleError) { handled = config.handleError(line); } if (!handled) { logger.error(loggerCategory, line); } }); let result = new Promise((resolve, reject) => { task.on("close", (code) => { let end = performance.now(); let elapsedTime = (end - start) / 1000; logger.log(loggerCategory, `command ${readableCommand} ${args.join(" ")} took ${elapsedTime.toFixed(1)}s`); if (code === 0 || code === null) { resolve(); } else { // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors reject(`Process exited with code ${code}`); } }); }); return { result, kill() { kill(task.pid); }, }; }, }; } let createWindowsTaskRunner = () => { let delegate = createDefaultTaskRunner(); let translateToWindows = (command) => { if (command.charAt(0) === ".") { // we just assume it is something from the ./node_modules/.bin/ folder command += ".cmd"; } return command.replace(/\//g, "\\"); }; return { runTask: (command, args, config) => { return delegate.runTask(translateToWindows(command), args, config); }, }; }; exports.createWindowsTaskRunner = createWindowsTaskRunner; //# sourceMappingURL=taskrunner.js.map