kui-shell
Version:
This is the monorepo for Kui, the hybrid command-line/GUI electron-based Kubernetes tool
91 lines • 4.05 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const debug_1 = require("debug");
const js_yaml_1 = require("js-yaml");
const core_1 = require("@kui-shell/core");
const name_1 = require("../util/name");
const crud_1 = require("../view/modes/crud");
const resource_1 = require("../model/resource");
const strings = core_1.i18n('plugin-k8s');
const debug = debug_1.default('k8s/controller/summary');
const renderDescribe = (command, getCmd, summaryCmd, resource, summary, parsedOptions) => __awaiter(void 0, void 0, void 0, function* () {
debug('renderDescribe', command, resource, summary);
const metadata = resource.metadata || new resource_1.DefaultKubeMetadata();
const status = resource.status || new resource_1.DefaultKubeStatus();
const output = parsedOptions.o || parsedOptions.output || 'yaml';
const modes = [
{
mode: 'summary',
label: strings('summary'),
defaultMode: true,
direct: summaryCmd,
execOptions: { delegationOk: true },
leaveBottomStripeAlone: true
}
];
modes.push({
mode: 'raw',
label: 'YAML',
direct: `${getCmd} -o ${output}`,
execOptions: { noDelegation: true },
order: 999,
leaveBottomStripeAlone: true
});
modes.push(crud_1.deleteResourceButton());
const { name, nameHash } = name_1.default(resource);
const version = metadata && metadata.labels && metadata.labels.version;
const badges = [];
const startTime = resource && status && status.startTime && new Date(status.startTime);
const endTime = resource && status && status.completionTime && new Date(status.completionTime);
const duration = startTime && endTime && endTime.getTime() - startTime.getTime();
const description = {
type: 'custom',
isEntity: true,
name,
nameHash,
duration,
badges,
version,
resource,
modes,
contentType: output,
content: output === 'json' ? summary : js_yaml_1.safeDump(summary).trim()
};
debug('description', description, resource);
return description;
});
function toMap(table) {
return table.body.reduce((map, row) => {
map[row.key] = row.name;
row.attributes.forEach(({ key, value }) => {
map[key] = value;
});
return map;
}, {});
}
const describe = ({ command, parsedOptions, execOptions }) => __awaiter(void 0, void 0, void 0, function* () {
const noDelegationPlease = Object.assign({}, execOptions, { noDelegation: true });
delete noDelegationPlease.delegationOk;
const getCmd = command.replace(/summary/, 'get').replace(/(-o|--output)[= ](yaml|json)/, '');
const summaryCmd = command.replace(/get/, 'summary').replace(/(-o|--output)[= ](yaml|json)/, '');
debug('summaryCmd', summaryCmd);
debug('getCmd', getCmd);
const [resource, summary] = yield Promise.all([
core_1.REPL.rexec(getCmd, noDelegationPlease),
core_1.REPL.qexec(`${getCmd} -o wide`, undefined, undefined, noDelegationPlease).then(toMap)
]);
debug('resource', resource);
debug('summary', summary);
return renderDescribe(command, getCmd, summaryCmd, resource, summary, parsedOptions);
});
exports.default = describe;
//# sourceMappingURL=describe.js.map