@goldstack/template-dynamodb-cli
Version:
Utilities for building modules for DynamoDB access.
130 lines • 6.04 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.run = void 0;
const utils_cli_1 = require("@goldstack/utils-cli");
const utils_log_1 = require("@goldstack/utils-log");
const utils_package_1 = require("@goldstack/utils-package");
const utils_package_config_1 = require("@goldstack/utils-package-config");
const utils_terraform_1 = require("@goldstack/utils-terraform");
const utils_terraform_aws_1 = require("@goldstack/utils-terraform-aws");
const assert_1 = __importDefault(require("assert"));
const yargs_1 = __importDefault(require("yargs"));
const dynamoDBTableCli_1 = require("./dynamoDBTableCli");
__exportStar(require("./gsiMigrationUtils"), exports);
const run = async ({ args, migrations, }) => {
await (0, utils_cli_1.wrapCli)(async () => {
// biome-ignore lint/suspicious/noExplicitAny: yargs command definition
const deploymentPositional = (yargs) => {
return yargs.positional('deployment', {
type: 'string',
describe: 'Name of the deployment of the table',
demandOption: true,
});
};
const argv = await (0, utils_package_1.buildCli)({
yargs: yargs_1.default,
deployCommands: (0, utils_package_1.buildDeployCommands)(),
infraCommands: (0, utils_terraform_1.infraCommands)(),
})
.usage('$0 <table>')
.command('table <init|delete|migrate-to> <deployment>', 'Utility commands for DynamoDB table', (yargs) => {
yargs
.command('init', 'Initialise DynamoDB table and run all applicable migrations', deploymentPositional)
.command('delete', 'Deletes DynamoDB table and all its data', deploymentPositional)
.command('migrate-to', 'Migrate DynamoDB table', (yargs) => deploymentPositional(yargs).positional('migration-name', {
type: 'string',
describe: 'The name of the migration that the table should be migrated to.',
demandOption: true,
}));
})
.help()
.parse();
const packageConfig = new utils_package_config_1.PackageConfig({
packagePath: './',
});
const config = packageConfig.getConfig();
(0, assert_1.default)(config, 'DynamoDB package config could not be loaded.');
const command = argv._[0];
const [, , , ...opArgs] = args;
if (command === 'infra') {
const deploymentName = argv.deployment;
if (!packageConfig.hasDeployment(deploymentName)) {
if (argv['ignore-missing-deployments']) {
(0, utils_log_1.warn)(`Deployment '${deploymentName}' does not exist. Skipping infra due to --ignore-missing-deployments flag.`);
return;
}
else {
throw new Error(`Cannot find configuration for deployment '${deploymentName}'`);
}
}
const infraOperation = argv._[1];
if (infraOperation !== 'destroy') {
await (0, dynamoDBTableCli_1.dynamoDBCli)(migrations, ['init', deploymentName]);
}
let targetVersion;
let confirm;
let commandArgs;
if (infraOperation === 'upgrade') {
targetVersion = argv.targetVersion;
}
else if (infraOperation === 'terraform') {
commandArgs = opArgs.slice(2);
}
else if (infraOperation === 'destroy') {
confirm = argv.yes;
}
await (0, utils_terraform_aws_1.terraformAwsCli)({
infraOperation,
deploymentName,
targetVersion,
confirm,
commandArguments: commandArgs,
ignoreMissingDeployments: argv['ignore-missing-deployments'] || false,
skipConfirmations: argv.yes || false,
options: undefined,
});
if (infraOperation === 'destroy') {
await (0, dynamoDBTableCli_1.dynamoDBCli)(migrations, ['delete', deploymentName]);
}
return;
}
if (command === 'deploy') {
const deploymentName = argv.deployment;
if (!packageConfig.hasDeployment(deploymentName)) {
if (argv['ignore-missing-deployments']) {
(0, utils_log_1.warn)(`Deployment '${deploymentName}' does not exist. Skipping deploy due to --ignore-missing-deployments flag.`);
return;
}
else {
throw new Error(`Cannot find configuration for deployment '${deploymentName}'`);
}
}
await (0, dynamoDBTableCli_1.dynamoDBCli)(migrations, ['init', deploymentName]);
return;
}
if (command === 'table') {
await (0, dynamoDBTableCli_1.dynamoDBCli)(migrations, opArgs);
return;
}
throw new Error(`Unknown command: ${command}`);
});
};
exports.run = run;
//# sourceMappingURL=templateDynamoDBCli.js.map