112 lines
3.3 KiB
JavaScript
112 lines
3.3 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.npmRunner = exports.shRunner = exports.bsRunner = exports.execRunner = void 0;
|
||
|
const Rx = require("rx");
|
||
|
const types_1 = require("./types");
|
||
|
/**
|
||
|
* @param {import("./types").RunnerOption} runner
|
||
|
*/
|
||
|
function execRunner(runner) {
|
||
|
return Rx.Observable.concat(runner.run.map(r => {
|
||
|
if ("bs" in r) {
|
||
|
return bsRunner(r);
|
||
|
}
|
||
|
if ("sh" in r) {
|
||
|
let cmd;
|
||
|
if (typeof r.sh === "string") {
|
||
|
cmd = r.sh;
|
||
|
}
|
||
|
else if ("cmd" in r.sh) {
|
||
|
cmd = r.sh.cmd;
|
||
|
}
|
||
|
else {
|
||
|
return Rx.Observable.throw(new Error("invalid `sh` config"));
|
||
|
}
|
||
|
return shRunner(r, {
|
||
|
cmd: cmd
|
||
|
});
|
||
|
}
|
||
|
if ("npm" in r) {
|
||
|
return npmRunner(r);
|
||
|
}
|
||
|
throw new Error("unreachable");
|
||
|
}));
|
||
|
}
|
||
|
exports.execRunner = execRunner;
|
||
|
/**
|
||
|
* @param {import("./types").Runner} runner
|
||
|
*/
|
||
|
function bsRunner(runner) {
|
||
|
if (!("bs" in runner))
|
||
|
throw new Error("unreachable");
|
||
|
/** @type {import("./types").BsSideEffect[]} */
|
||
|
const effects = [];
|
||
|
if (runner.bs === "inject") {
|
||
|
effects.push({
|
||
|
type: "inject",
|
||
|
files: runner.files.map(f => {
|
||
|
return {
|
||
|
path: f,
|
||
|
event: "bs-runner"
|
||
|
};
|
||
|
})
|
||
|
});
|
||
|
}
|
||
|
else if (runner.bs === "reload") {
|
||
|
effects.push({
|
||
|
type: "reload",
|
||
|
files: []
|
||
|
});
|
||
|
}
|
||
|
return Rx.Observable.concat(Rx.Observable.just((0, types_1.toRunnerNotification)({
|
||
|
status: "start",
|
||
|
effects: [],
|
||
|
runner
|
||
|
})), Rx.Observable.just((0, types_1.toRunnerNotification)({
|
||
|
status: "end",
|
||
|
effects: effects,
|
||
|
runner
|
||
|
})));
|
||
|
}
|
||
|
exports.bsRunner = bsRunner;
|
||
|
/**
|
||
|
* @param {import("./types").Runner} runner
|
||
|
* @param {object} params
|
||
|
* @param {string} params.cmd
|
||
|
*/
|
||
|
function shRunner(runner, params) {
|
||
|
return Rx.Observable.concat(Rx.Observable.just((0, types_1.toRunnerNotification)({ status: "start", effects: [], runner })), Rx.Observable.just((0, types_1.toRunnerNotification)({ status: "end", effects: [], runner })));
|
||
|
}
|
||
|
exports.shRunner = shRunner;
|
||
|
/**
|
||
|
* @param {import("./types").Runner} runner
|
||
|
*/
|
||
|
function npmRunner(runner) {
|
||
|
if (!("npm" in runner))
|
||
|
throw new Error("unreachble");
|
||
|
return Rx.Observable.just(runner).flatMap(runner => {
|
||
|
try {
|
||
|
const runAll = require("npm-run-all");
|
||
|
const runAllRunner = runAll(runner.npm, {
|
||
|
parallel: false,
|
||
|
stdout: process.stdout,
|
||
|
stdin: process.stdin,
|
||
|
stderr: process.stderr
|
||
|
});
|
||
|
const p = runAllRunner.then(results => {
|
||
|
if (results.some(r => r.code !== 0))
|
||
|
throw new Error("failed");
|
||
|
return results;
|
||
|
});
|
||
|
return Rx.Observable.fromPromise(p).map(results => {
|
||
|
return (0, types_1.toRunnerNotification)({ status: "end", effects: [], runner });
|
||
|
});
|
||
|
}
|
||
|
catch (e) {
|
||
|
console.log("e", e);
|
||
|
return Rx.Observable.throw(e);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
exports.npmRunner = npmRunner;
|
||
|
//# sourceMappingURL=runner.js.map
|