UNPKG

@rnm/tscx

Version:

A tsc wrapper with many convenient options.

59 lines 8 kB
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