navy
Version:
Quick and powerful development environments using Docker and Docker Compose
78 lines (56 loc) • 1.93 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
var _chalk = _interopRequireDefault(require("chalk"));
var _readline = _interopRequireDefault(require("readline"));
var _cliSpinners = require("cli-spinners");
var _ = require("../");
let spinnerIndex = 0;
let spinnerFrame = _cliSpinners.dots.frames[0];
async function _default(services, opts) {
const navy = (0, _.getNavy)(opts.navy);
const servicesToCheck = services.length === 0 ? undefined : services;
if (!process.stdout.isTTY) {
await navy.waitForHealthy(servicesToCheck);
console.log('Now available');
return;
}
let healthyStatus = [];
let drawnLines = 0;
function draw() {
drawnLines = 0;
if (healthyStatus.length === 0) {
console.log('Waiting');
drawnLines = 1;
return;
}
const lines = healthyStatus.map(service => `${service.health !== 'healthy' ? _chalk.default.yellow(spinnerFrame) : _chalk.default.green('✔')} ${service.service}`);
drawnLines = lines.length;
console.log(lines.join('\n'));
}
function redraw() {
_readline.default.clearLine(process.stdout, 0);
_readline.default.cursorTo(process.stdout, 0);
for (let i = 0; i < drawnLines; i++) {
_readline.default.moveCursor(process.stdout, 0, -1);
_readline.default.clearLine(process.stdout, 0);
}
draw();
}
const spinner = setInterval(() => {
spinnerIndex++;
if (spinnerIndex >= _cliSpinners.dots.frames.length) {
spinnerIndex = 0;
}
spinnerFrame = _cliSpinners.dots.frames[spinnerIndex];
redraw();
}, _cliSpinners.dots.interval);
draw();
await navy.waitForHealthy(servicesToCheck, servicesHealth => healthyStatus = servicesHealth);
redraw();
clearInterval(spinner);
}
module.exports = exports.default;