UNPKG

@goldstack/template-dynamodb-cli

Version:

Utilities for building modules for DynamoDB access.

130 lines 6.04 kB
"use strict"; 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