navy
Version:
Quick and powerful development environments using Docker and Docker Compose
70 lines (49 loc) • 2.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
var _chalk = _interopRequireDefault(require("chalk"));
var _ = require("../");
var _serviceHost = require("../util/service-host");
var _table = _interopRequireDefault(require("../util/table"));
const SMALL_WINDOW_COLUMNS = 185;
function getStatus(service, state) {
let statusString = service.status === 'exited' ? _chalk.default.red(service.status) : service.status;
if (state && state.services && state.services[service.name]) {
const serviceState = state.services[service.name];
if (serviceState._develop) {
statusString += ' ' + _chalk.default.yellow('(development)');
}
if (serviceState._tag) {
statusString += ' ' + _chalk.default.cyan(`@ ${serviceState._tag}`);
}
}
return statusString;
}
function getPorts(service) {
if (!service || !service.raw || !service.raw.NetworkSettings || !service.raw.NetworkSettings.Ports) {
return '-';
}
const ports = service.raw.NetworkSettings.Ports;
const portKeys = Object.keys(ports);
return portKeys.map(portKey => {
return ports[portKey] ? `${ports[portKey].map(conf => conf.HostPort).join(', ')}->${portKey}` : portKey;
}).join(', ');
}
const getDisplayUrl = serviceUrl => serviceUrl != null ? serviceUrl : '-';
async function _default(opts) {
const navy = (0, _.getNavy)(opts.navy);
const ps = await navy.ps();
const state = await navy.getState(); // $FlowIgnore getWindowSize not on type
const isSmallConsole = process.stdout.isTTY && process.stdout.getWindowSize()[0] < SMALL_WINDOW_COLUMNS;
if (opts.json) {
return console.log(JSON.stringify(ps, null, 2));
}
if (isSmallConsole) {
return console.log((0, _table.default)([['ID', 'NAME', 'STATUS', 'PORTS', 'URL'], ...ps.map(service => [service.id.substring(0, 12), service.name, getStatus(service, state), getPorts(service), getDisplayUrl((0, _serviceHost.getUrlFromService)(service))])]));
}
console.log((0, _table.default)([['ID', 'NAME', 'IMAGE', 'STATUS', 'PORTS', 'URL'], ...ps.map(service => [service.id.substring(0, 12), service.name, service.image, getStatus(service, state), getPorts(service), getDisplayUrl((0, _serviceHost.getUrlFromService)(service))])]));
}
module.exports = exports.default;