@ipp/cli
Version:
An image build orchestrator for the modern web
77 lines (76 loc) • 3 kB
JavaScript
;
/**
* Image Processing Pipeline - Copyright (c) Marcus Cemes
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TextUi = void 0;
const chalk_1 = __importDefault(require("chalk"));
const process_1 = require("process");
const operators_1 = require("rxjs/operators");
const constants_1 = require("../../constants");
const state_1 = require("../../lib/state");
const INTERVAL = 1000;
const concurrency = (obs) => obs
.pipe((0, operators_1.map)(({ concurrency }) => concurrency), (0, operators_1.distinctUntilChanged)())
.subscribe((value) => {
line(`> Concurrency change: ${value}`, chalk_1.default.cyan);
});
const status = (obs) => obs
.pipe((0, operators_1.map)(({ status }) => status), (0, operators_1.distinctUntilChanged)())
.subscribe((value) => {
line(`> Status change: ${parseStatus(value)}`, chalk_1.default.cyan);
});
const stats = (obs) => obs
.pipe((0, operators_1.map)(({ images }) => [images.found, images.completed, images.failed]), (0, operators_1.debounceTime)(INTERVAL), (0, operators_1.distinctUntilChanged)((p, c) => c.every((v, i) => v === p[i])))
.subscribe((stats) => {
line(`| ${stats.map((x) => pad(x)).join(" | ")} |`);
});
const STATE_FUNCTIONS = [concurrency, status, stats];
const TextUi = (ctx) => {
line("Image Processing Pipeline", chalk_1.default.whiteBright);
line(`${constants_1.REPOSITORY_SHORT} - v${constants_1.VERSION}\n`, chalk_1.default.whiteBright);
line("| Total | Completed | Failed |");
const subscriptions = STATE_FUNCTIONS.map((sub) => sub(ctx.state));
return {
stop: (state) => {
for (const sub of subscriptions)
sub.unsubscribe();
printSummary(state);
},
};
};
exports.TextUi = TextUi;
function printSummary(state) {
[
"\n -- Summary --\n",
`Total: ${chalk_1.default.whiteBright(pad(state.images.found))}`,
`Completed: ${chalk_1.default.greenBright(pad(state.images.completed))}`,
`Failed: ${chalk_1.default.redBright(pad(state.images.failed))}`,
].forEach((l) => line(l, chalk_1.default.whiteBright));
}
function parseStatus(status) {
switch (status) {
case state_1.Status.READY:
return "READY";
case state_1.Status.PROCESSING:
return "PROCESSING";
case state_1.Status.COMPLETE:
return "COMPLETE";
case state_1.Status.ERROR:
return "ERROR";
case state_1.Status.INTERRUPT:
return "INTERRUPT";
}
}
function pad(n, padding = 3) {
return n.toString().padStart(padding);
}
function line(text, modifier) {
process_1.stdout.write((modifier ? modifier(text) : text) + "\n");
}