@rnm/tscx
Version:
A tsc wrapper with many convenient options.
59 lines • 8 kB
JavaScript
import { copyfiles, exec, remove, tsc } from "./cmd/index.js";
export class TaskQueue {
currentSubprocess = undefined;
tasks = [];
// Note: Each event should not have more than one listeners! Main class requires this feature.
listeners = new Map();
isStartCalled = false;
isStopCalled = false;
constructor({ removeConfig, tscConfig, copyfilesConfig, execConfig, }) {
if (removeConfig) {
this.tasks.push(() => remove(removeConfig));
}
this.tasks.push(() => tsc(tscConfig));
if (copyfilesConfig) {
this.tasks.push(() => copyfiles(copyfilesConfig));
}
if (execConfig) {
this.tasks.push(() => exec(execConfig));
}
}
start() {
if (this.isStartCalled)
return this;
const execNextTask = (index = 0) => {
const task = this.tasks[index];
if (!task) {
throw new Error("Internal Error. No task to execute. This should not happen. If you see this error, please open an issue.");
}
this.currentSubprocess = task();
this.currentSubprocess.on("close", (code, signal) => {
// will not execute next task when the task is failed or there is not next task
if (code || signal || index >= this.tasks.length - 1) {
this.currentSubprocess = undefined;
this.listeners.get("close")?.(code, signal);
return;
}
execNextTask(index + 1);
});
};
execNextTask();
this.isStartCalled = true;
return this;
}
on(event, listener) {
this.listeners.set(event, listener);
return this;
}
stop() {
if (this.isStopCalled)
return this;
this.currentSubprocess?.kill();
this.isStopCalled = true;
return this;
}
isRunning() {
return !!this.currentSubprocess;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1xdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90YXNrLXF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVM5RCxNQUFNLE9BQU8sU0FBUztJQUNaLGlCQUFpQixHQUEwQyxTQUFTLENBQUM7SUFDNUQsS0FBSyxHQUEyQyxFQUFFLENBQUM7SUFDcEUsOEZBQThGO0lBQzdFLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztJQUNqRSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFN0IsWUFBWSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsR0FDTztRQUNqQixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN0QyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQ2IsMEdBQTBHLENBQzNHLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNsRCwrRUFBK0U7Z0JBQy9FLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3JELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7b0JBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUM1QyxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLFlBQVksRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsRUFBRSxDQUNBLEtBQWMsRUFDZCxRQUFzRTtRQUV0RSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBjaGlsZFByb2Nlc3MgZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgY29weWZpbGVzLCBleGVjLCByZW1vdmUsIHRzYyB9IGZyb20gXCIuL2NtZC9pbmRleC50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tRdWV1ZU9wdGlvbnMge1xuICByZW1vdmVDb25maWc/OiBQYXJhbWV0ZXJzPHR5cGVvZiByZW1vdmU+WzBdO1xuICB0c2NDb25maWc6IFBhcmFtZXRlcnM8dHlwZW9mIHRzYz5bMF07XG4gIGNvcHlmaWxlc0NvbmZpZz86IFBhcmFtZXRlcnM8dHlwZW9mIGNvcHlmaWxlcz5bMF07XG4gIGV4ZWNDb25maWc/OiBQYXJhbWV0ZXJzPHR5cGVvZiBleGVjPlswXTtcbn1cblxuZXhwb3J0IGNsYXNzIFRhc2tRdWV1ZSB7XG4gIHByaXZhdGUgY3VycmVudFN1YnByb2Nlc3M6IGNoaWxkUHJvY2Vzcy5DaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFza3M6IEFycmF5PCgpID0+IGNoaWxkUHJvY2Vzcy5DaGlsZFByb2Nlc3M+ID0gW107XG4gIC8vIE5vdGU6IEVhY2ggZXZlbnQgc2hvdWxkIG5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgbGlzdGVuZXJzISBNYWluIGNsYXNzIHJlcXVpcmVzIHRoaXMgZmVhdHVyZS5cbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnMgPSBuZXcgTWFwPHN0cmluZywgKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPigpO1xuICBwcml2YXRlIGlzU3RhcnRDYWxsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1N0b3BDYWxsZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgcmVtb3ZlQ29uZmlnLFxuICAgIHRzY0NvbmZpZyxcbiAgICBjb3B5ZmlsZXNDb25maWcsXG4gICAgZXhlY0NvbmZpZyxcbiAgfTogVGFza1F1ZXVlT3B0aW9ucykge1xuICAgIGlmIChyZW1vdmVDb25maWcpIHtcbiAgICAgIHRoaXMudGFza3MucHVzaCgoKSA9PiByZW1vdmUocmVtb3ZlQ29uZmlnKSk7XG4gICAgfVxuICAgIHRoaXMudGFza3MucHVzaCgoKSA9PiB0c2ModHNjQ29uZmlnKSk7XG4gICAgaWYgKGNvcHlmaWxlc0NvbmZpZykge1xuICAgICAgdGhpcy50YXNrcy5wdXNoKCgpID0+IGNvcHlmaWxlcyhjb3B5ZmlsZXNDb25maWcpKTtcbiAgICB9XG4gICAgaWYgKGV4ZWNDb25maWcpIHtcbiAgICAgIHRoaXMudGFza3MucHVzaCgoKSA9PiBleGVjKGV4ZWNDb25maWcpKTtcbiAgICB9XG4gIH1cblxuICBzdGFydCgpIHtcbiAgICBpZiAodGhpcy5pc1N0YXJ0Q2FsbGVkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBleGVjTmV4dFRhc2sgPSAoaW5kZXggPSAwKSA9PiB7XG4gICAgICBjb25zdCB0YXNrID0gdGhpcy50YXNrc1tpbmRleF07XG4gICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgRXJyb3IuIE5vIHRhc2sgdG8gZXhlY3V0ZS4gVGhpcyBzaG91bGQgbm90IGhhcHBlbi4gSWYgeW91IHNlZSB0aGlzIGVycm9yLCBwbGVhc2Ugb3BlbiBhbiBpc3N1ZS5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudFN1YnByb2Nlc3MgPSB0YXNrKCk7XG4gICAgICB0aGlzLmN1cnJlbnRTdWJwcm9jZXNzLm9uKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAvLyB3aWxsIG5vdCBleGVjdXRlIG5leHQgdGFzayB3aGVuIHRoZSB0YXNrIGlzIGZhaWxlZCBvciB0aGVyZSBpcyBub3QgbmV4dCB0YXNrXG4gICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBpbmRleCA+PSB0aGlzLnRhc2tzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTdWJwcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMubGlzdGVuZXJzLmdldChcImNsb3NlXCIpPy4oY29kZSwgc2lnbmFsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXhlY05leHRUYXNrKGluZGV4ICsgMSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGV4ZWNOZXh0VGFzaygpO1xuICAgIHRoaXMuaXNTdGFydENhbGxlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvbihcbiAgICBldmVudDogXCJjbG9zZVwiLFxuICAgIGxpc3RlbmVyOiAoY29kZTogbnVtYmVyIHwgbnVsbCwgc2lnbmFsOiBOb2RlSlMuU2lnbmFscyB8IG51bGwpID0+IHZvaWQsXG4gICkge1xuICAgIHRoaXMubGlzdGVuZXJzLnNldChldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICBpZiAodGhpcy5pc1N0b3BDYWxsZWQpIHJldHVybiB0aGlzO1xuICAgIHRoaXMuY3VycmVudFN1YnByb2Nlc3M/LmtpbGwoKTtcbiAgICB0aGlzLmlzU3RvcENhbGxlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpc1J1bm5pbmcoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5jdXJyZW50U3VicHJvY2VzcztcbiAgfVxufVxuIl19