UNPKG

@ipp/cli

Version:

An image build orchestrator for the modern web

77 lines (76 loc) 3 kB
"use strict"; /** * 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"); }