UNPKG

typescript-assistant

Version:

Combines and integrates professional Typescript tools into your project

83 lines 3.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createWindowsTaskRunner = exports.createDefaultTaskRunner = void 0; const child_process_1 = require("child_process"); const path = require("path"); const readline_1 = require("readline"); const kill = require("tree-kill"); let strip = (line) => /^\s*(.*?)\s*$/m.exec(line)[1]; let createDefaultTaskRunner = () => { return { runTask: (command, args, config) => { 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); 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) => { if (code === 0 || code === null) { resolve(); } else { reject(`Process exited with code ${code}`); } }); }); return { result, kill: () => { kill(task.pid); }, }; }, }; }; exports.createDefaultTaskRunner = createDefaultTaskRunner; let createWindowsTaskRunner = () => { let delegate = (0, exports.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