@kosko/cli
Version:
Organize Kubernetes manifests in JavaScript.
71 lines • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.migrateCmd = void 0;
const tslib_1 = require("tslib");
const migrate_1 = require("@kosko/migrate");
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const get_stdin_1 = tslib_1.__importDefault(require("get-stdin"));
const path_1 = require("path");
const debug_1 = tslib_1.__importDefault(require("../cli/debug.js"));
const print_1 = require("../cli/print.js");
const debug = debug_1.default.extend("migrate");
function concatFiles(arr) {
if (!arr.length)
return "";
let output = "";
for (const s of arr) {
if (!s.startsWith("---"))
output += "---\n";
output += s + "\n";
}
return output;
}
function readFileString(path) {
debug("Reading file", path);
return fs_extra_1.default.readFile(path, "utf8");
}
async function readFilesInDir(dir) {
debug("Reading directory", dir);
const files = await fs_extra_1.default.readdir(dir);
const contents = await Promise.all(files.map((file) => readFileString(path_1.join(dir, file))));
return concatFiles(contents);
}
function readFiles(cwd, files) {
return Promise.all(files.map(async (file) => {
if (file === "-") {
debug("Reading from stdin");
return get_stdin_1.default();
}
const path = path_1.resolve(cwd, file);
const stats = await fs_extra_1.default.stat(path);
return stats.isDirectory() ? readFilesInDir(path) : readFileString(path);
}));
}
function toArray(input) {
return Array.isArray(input) ? input : [input];
}
exports.migrateCmd = {
command: "migrate",
describe: "Migrate YAML into components",
builder(argv) {
/* istanbul ignore next */
return (argv
// HACK: Don't set the type of filename option to "array" because yargs
// can't parse `migrate -f -` properly.
// Link: https://github.com/tommy351/kosko/issues/17
.option("filename", {
type: "string",
describe: "File, directory to migrate",
required: true,
alias: "f"
})
.example("$0 migrate -f path/to/file", "Read from the path")
.example("$0 migrate -f -", "Read from stdin"));
},
async handler(args) {
const file = concatFiles(await readFiles(args.cwd, toArray(args.filename)));
const content = await migrate_1.migrateString(file);
await print_1.print(content);
}
};
//# sourceMappingURL=migrate.js.map