kubricate
Version:
A TypeScript framework for building reusable, type-safe Kubernetes infrastructure ā without the YAML mess.
62 lines ⢠2.2 kB
JavaScript
import c from 'ansis';
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
import { MARK_INFO } from '../internal/constant.js';
import { ConsoleLogger } from '../internal/logger.js';
import { generateCommand } from './generate.js';
import { secretCommand } from './secret/index.js';
const errorHelper = (msg, yargs) => {
if (msg?.includes('Unknown argument')) {
const unknownArg = msg.match(/Unknown argument: (.+)/)?.[1];
console.error(c.red(`\nā Error: Unknown option "${unknownArg}".\n`));
console.info(c.cyan(`${MARK_INFO} Check the help for a list of available options.\n`));
yargs.showHelp();
console.log('\n');
return `Unknown option "${unknownArg}"`;
}
// Fallback to default error handling
if (msg) {
console.error(msg);
} else {
console.error('Unknown error occurred');
}
console.log('\n');
};
export function cliEntryPoint(argv, options) {
return new Promise((resolve, reject) => {
yargs(hideBin(argv)).scriptName(options.scriptName).usage('$0 <command>').version(options.version).option('root', {
type: 'string',
describe: 'Root directory'
}).option('config', {
type: 'string',
describe: 'Config file path'
}).option('verbose', {
type: 'boolean',
describe: 'Enable verbose output'
}).option('silent', {
type: 'boolean',
describe: 'Suppress all output'
}).option('dry-run', {
type: 'boolean',
describe: 'Dry run mode (Not Stable Yet)'
}).middleware(argv => {
let level = 'info';
if (argv.silent) level = 'silent';else if (argv.verbose) level = 'debug';
argv.logger = new ConsoleLogger(level);
argv.version = options.version;
}).command(generateCommand).command(secretCommand).help().alias('h', 'help').alias('v', 'version').demandCommand(1, '').fail((msg, err, yargs) => {
if (!msg && !err) {
errorHelper(msg, yargs);
return resolve();
}
if (msg) {
return reject(new Error(errorHelper(msg, yargs)));
}
if (err) {
errorHelper(msg, yargs);
return reject(err);
}
}).strict().parse();
});
}
//# sourceMappingURL=entrypoint.js.map