@kosko/cli
Version:
Organize Kubernetes manifests in JavaScript.
115 lines • 4.05 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateCmd = exports.generateHandler = exports.generateBuilder = void 0;
const config_1 = require("@kosko/config");
const generate_1 = require("@kosko/generate");
const path_1 = require("path");
const error_1 = require("../../cli/error.js");
const set_option_1 = require("./set-option.js");
const require_1 = require("./require.js");
const env_1 = require("./env.js");
function resolveConfig(base, args) {
const { components = [], require = [] } = args.env
? config_1.getConfig(base, args.env)
: base;
return {
components: args.components && args.components.length ? args.components : components,
require: [...require, ...(args.require || [])]
};
}
/* istanbul ignore next */
function generateBuilder(argv) {
return argv
.option("env", {
type: "string",
describe: "Environment name",
alias: "e"
})
.option("require", {
type: "string",
array: true,
describe: "Require modules. Modules set in config file will also be required.",
default: [],
alias: "r"
})
.option("set", {
type: "string",
array: true,
describe: "Set values on the command line KEY=VAL (can be used multiple times)",
alias: "s",
coerce: set_option_1.parseSetOptions,
default: []
})
.positional("components", {
type: "string",
array: true,
describe: "Components to generate. This overrides components set in config file."
});
}
exports.generateBuilder = generateBuilder;
async function generateHandler(args) {
// Load config
const globalConfig = await config_1.searchConfig(args.cwd);
const config = {
...globalConfig,
...resolveConfig(globalConfig, args)
};
if (!config.components.length) {
throw new error_1.CLIError("No components are given", {
output: "No components are given. Set components in a config file or in arguments."
});
}
// Setup env
await env_1.setupEnv(config, args);
// Require external modules
for (const id of config.require) {
await require_1.localRequireDefault(id, args.cwd);
}
// Generate manifests
const result = await generate_1.generate({
path: path_1.join(args.cwd, "components"),
components: config.components,
extensions: config.extensions,
validate: args.validate
});
if (!result.manifests.length) {
throw new error_1.CLIError("No manifests are exported from components", {
output: `No manifests are exported from components. Make sure there are exported manifests in components.`
});
}
return result;
}
exports.generateHandler = generateHandler;
exports.generateCmd = {
command: "generate [components..]",
describe: "Generate Kubernetes manifests",
builder(argv) {
/* istanbul ignore next */
return generateBuilder(argv)
.option("output", {
type: "string",
describe: "Output format",
default: generate_1.PrintFormat.YAML,
choices: Object.keys(generate_1.PrintFormat).map((key) => generate_1.PrintFormat[key]),
alias: "o"
})
.option("validate", {
type: "boolean",
describe: "Validate components",
default: true
})
.example("$0 generate", "Generate manifests")
.example("$0 generate foo bar", "Specify components")
.example("$0 generate foo_*", "Use glob pattern")
.example("$0 generate --env foo", "Set environment")
.example("$0 generate -r ts-node/register", "Require external modules");
},
async handler(args) {
const result = await generateHandler(args);
generate_1.print(result, {
format: args.output,
writer: process.stdout
});
}
};
//# sourceMappingURL=index.js.map