UNPKG

@goldstack/infra

Version:

Utilities for defining infrastructure for npm packages.

85 lines 4.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.readTerraformStateVariable = exports.writeDeploymentState = exports.writeDeploymentsState = exports.readDeploymentState = exports.getDeploymentState = exports.readDeploymentsState = exports.hasDeploymentsState = exports.validateDeploymentsState = void 0; const utils_config_1 = require("@goldstack/utils-config"); const utils_sh_1 = require("@goldstack/utils-sh"); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const deploymentsStateSchema_json_1 = __importDefault(require("./schemas/deploymentsStateSchema.json")); const deploymentsStatePath = 'src/state/deployments.json'; const validateDeploymentsState = (deploymentsState) => { return (0, utils_config_1.validateConfig)(deploymentsState, deploymentsStateSchema_json_1.default, { errorMessage: 'Cannot validate deployments state.', }); }; exports.validateDeploymentsState = validateDeploymentsState; const hasDeploymentsState = (packageDir) => { return fs_1.default.existsSync(packageDir + deploymentsStatePath); }; exports.hasDeploymentsState = hasDeploymentsState; const readDeploymentsState = (packageDir, options) => { if (!(0, exports.hasDeploymentsState)(packageDir)) { if (options && options.createIfNotExist) { return []; } throw new Error(`Deployments state does not exist in ${path_1.default.resolve(packageDir + deploymentsStatePath)}. Have you deployed this package yet?`); } const data = JSON.parse((0, utils_sh_1.read)(packageDir + deploymentsStatePath)); return (0, exports.validateDeploymentsState)(data); }; exports.readDeploymentsState = readDeploymentsState; const getDeploymentState = (deploymentsState, deploymentName, options) => { const deploymentState = deploymentsState.find((deploymentState) => deploymentState.name === deploymentName); if (!deploymentState) { if (options && options.createIfNotExist) { return { name: deploymentName, }; } throw new Error(`Deployment state not defined for deployment '${deploymentName}'. Did you set up the infrastructure for this deployment with 'yarn infra up [deploymentName]'?`); } return deploymentState; }; exports.getDeploymentState = getDeploymentState; const readDeploymentState = (packageDir, deploymentName, options) => { const deploymentsState = (0, exports.readDeploymentsState)(packageDir, options); return (0, exports.getDeploymentState)(deploymentsState, deploymentName, options); }; exports.readDeploymentState = readDeploymentState; const writeDeploymentsState = (packageDir, deploymentsState) => { (0, utils_sh_1.write)(JSON.stringify(deploymentsState, null, 2), packageDir + deploymentsStatePath); }; exports.writeDeploymentsState = writeDeploymentsState; const writeDeploymentState = (packageDir, deploymentState) => { let deploymentsState; if ((0, exports.hasDeploymentsState)(packageDir)) { deploymentsState = (0, exports.readDeploymentsState)(packageDir); } else { deploymentsState = []; } const idx = deploymentsState.findIndex((deployment) => deployment.name === deploymentState.name); if (idx === -1) { deploymentsState.push(deploymentState); } else { deploymentsState[idx] = deploymentState; } (0, exports.writeDeploymentsState)(packageDir, deploymentsState); }; exports.writeDeploymentState = writeDeploymentState; const readTerraformStateVariable = (deploymentState, variableName) => { if (!deploymentState.terraform) { throw new Error(`Terraform configuration not defined in deployment state for ${deploymentState.name}. Make sure to stand up the infrastructure for this module using 'yarn infra up'.`); } const tfVar = deploymentState.terraform[variableName]; if (!tfVar) { throw new Error(`Terraform variable '${variableName}' not defined in deployment state.`); } return tfVar.value; }; exports.readTerraformStateVariable = readTerraformStateVariable; //# sourceMappingURL=deploymentState.js.map