@controlplane/cli
Version:
Control Plane Corporation CLI
214 lines • 8.75 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cli = void 0;
const yargs = require("yargs/yargs");
const generic_1 = require("../commands/generic");
const command_1 = require("./command");
const profile_1 = require("../commands/profile");
const format_1 = require("../format/format");
const version_1 = require("../util/version");
const agent_1 = require("../commands/agent");
const auditctx_1 = require("../commands/auditctx");
const cloudaccount_1 = require("../commands/cloudaccount");
const complete_1 = require("./complete");
const convert_1 = require("../commands/convert");
const domain_1 = require("../commands/domain");
const group_1 = require("../commands/group");
const gvc_1 = require("../commands/gvc");
const identity_1 = require("../commands/identity");
const image_1 = require("../commands/image");
const location_1 = require("../commands/location");
const logs_1 = require("../commands/logs");
const memcachecluster_1 = require("../commands/memcachecluster");
const misc_1 = require("./misc");
const mk8s_1 = require("../commands/mk8s");
const org_1 = require("../commands/org");
const policy_1 = require("../commands/policy");
const quota_1 = require("../commands/quota");
const rest_1 = require("../commands/rest");
const secret_1 = require("../commands/secret");
const serviceaccount_1 = require("../commands/serviceaccount");
const spicedbcluster_1 = require("../commands/spicedbcluster");
const task_1 = require("../commands/task");
const user_1 = require("../commands/user");
const volumeset_1 = require("../commands/volumeset");
const workload_1 = require("../commands/workload");
const logger_1 = require("../util/logger");
const client_1 = require("../session/client");
const account_1 = require("../commands/account");
const io_1 = require("../util/io");
const stack_1 = require("../commands/stack");
const helm_1 = require("../commands/helm");
const cp_1 = require("../commands/cp");
const ipset_1 = require("../commands/ipset");
const portforward_1 = require("../commands/portforward");
const operator_1 = require("../commands/operator");
class Cli {
constructor(env) {
this.env = env;
this.env = env;
}
makeParser(spying, onFinish, afterHelpText, version) {
const parser = yargs()
.epilog(`© ${new Date().getFullYear()} Control Plane Corporation${afterHelpText ? `\n\n${afterHelpText}` : ''}`)
.help()
.strict()
.version(version)
.detectLocale(false)
.wrap(require('yargs').terminalWidth())
.parserConfiguration({
'sort-commands': true,
'strip-aliased': true,
'parse-numbers': false,
'populate--': true,
})
.recommendCommands()
.demandCommand()
.scriptName('cpln')
.onFinishCommand(onFinish);
let spy;
if (spying) {
const root = {
name: 'cpln',
commands: [
{
name: 'help',
description: 'Show help',
},
],
description: '',
positional: [],
options: [
{
name: 'help',
alias: ['h'],
description: 'Show help',
},
],
};
// install our model spy here
parser['_command_stack'] = [root];
spy = new command_1.Spy(parser, root);
spy.start();
}
this.configure(parser);
if (spy) {
spy.restore();
}
return parser;
}
configure(parser) {
// add root commands here
parser
// generic
.command(new profile_1.ProfileCmd().toYargs())
.command(new complete_1.CompletionCommand().toYargs())
.command(new misc_1.MiscCommand().toYargs())
.command(new rest_1.RestCmd().toYargs())
// cpln specific
.command(new profile_1.Login().toYargs())
.command(new account_1.AccountCmd().toYargs())
.command(new org_1.OrgCmd().toYargs())
.command(new user_1.UserCmd().toYargs())
.command(new group_1.GroupCmd().toYargs())
.command(new stack_1.StackCmd().toYargs())
.command(new serviceaccount_1.ServiceaccountCmd().toYargs())
.command(new secret_1.SecretCmd().toYargs())
.command(new generic_1.Apply().toYargs())
.command(new convert_1.Convert().toYargs())
.command(new generic_1.DeleteFromFiles().toYargs())
.command(new quota_1.QuotaCmd().toYargs())
.command(new policy_1.PolicyCmd().toYargs())
.command(new cloudaccount_1.CloudaccountCmd().toYargs())
.command(new gvc_1.GvcCmd().toYargs())
.command(new workload_1.WorkloadCmd().toYargs())
.command(new identity_1.IdentityCmd().toYargs())
.command(new task_1.TaskCmd().toYargs())
.command(new domain_1.DomainCmd().toYargs())
.command(new agent_1.AgentCmd().toYargs())
.command(new image_1.ImageCmd().toYargs())
.command(new auditctx_1.AuditContext().toYargs())
.command(new logs_1.Logs().toYargs())
.command(new volumeset_1.VolumeSetCmd().toYargs())
.command(new location_1.LocationCmd().toYargs())
.command(new mk8s_1.Mk8sCmd().toYargs())
.command(new helm_1.HelmCmd().toYargs())
.command(new cp_1.CpCmd().toYargs())
.command(new ipset_1.IpSetCmd().toYargs())
.command(new portforward_1.PortForwardCmd().toYargs())
.command(new operator_1.OperatorCmd().toYargs());
if (process.env.CPLN_BETA) {
parser //
.command(new spicedbcluster_1.SpicedbClusterCmd().toYargs())
.command(new memcachecluster_1.MemcacheClusterCmd().toYargs());
}
}
async run(args) {
const rootDir = (0, io_1.getRootDir)();
// Check for new version
const newVersionMessage = await (0, version_1.checkForNewVersion)(rootDir);
// Prepare parser parameters
let onFinish = () => { };
let about = version_1.About;
if (newVersionMessage) {
onFinish = () => (0, format_1.write)(this.env.err, newVersionMessage);
about = { ...about, message: newVersionMessage };
}
// Stringify about to represent cpln version
let version = JSON.stringify(about, null, 2);
// Call parser
const parser = this.makeParser(false, onFinish, newVersionMessage, JSON.stringify(about, null, 2));
// properties will be put in the args object
const ctx = {
_env: this.env,
// pass down a parser factory for use by the completer
_parser: () => this.makeParser(true, onFinish, newVersionMessage, version),
};
let output;
// try to set the verbose flag early
parser.middleware((args) => {
if (args.verbose || process.env.CPLN_DEBUG) {
// bump the console level
logger_1.logger.transports[0].level = 'debug';
}
if (args.debug) {
// bump the wire level
client_1.wire.transports[0].level = 'debug';
}
output = args.output || 'json';
}, true);
parser.showHelpOnFail(false);
const handler = (msg, error, yargs) => {
if (error) {
logger_1.logger.debug('Abnormal exit ', { error: error });
// Keep this block in sync with session.abort
(0, format_1.write)(this.env.err, (0, format_1.format)(error, { output, _hints: { kind: 'error' } }) + '\n');
process.exit(1);
}
// bad command
if (msg) {
console.error(msg + '\n');
}
if (yargs) {
console.error(yargs.help());
}
else {
(0, format_1.write)(this.env.err, 'Unknown error\n');
}
process.exit(127);
};
parser.fail(handler);
process.on('unhandledRejection', (reason) => {
//logger.info('Unhandled rejection' + reason + reason.stack);
handler('', reason);
});
try {
parser.parse(args, ctx);
}
catch (e) {
handler('', e, undefined);
}
}
}
exports.Cli = Cli;
//# sourceMappingURL=cli.js.map