typescript-assistant
Version:
Combines and integrates professional Typescript tools into your project
83 lines • 3.1 kB
JavaScript
;
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