UNPKG

@adikari/config-manager

Version:

Tool to deploy configs to different stores

74 lines (64 loc) 2.32 kB
'use strict'; const Bluebird = require('bluebird'); const get = require('lodash.get'); const { readFile } = require('./fs/readFile'); const { interpolate } = require('./interpolate'); const { getValidatedSettings } = require('./get-validated-settings'); const { getAccountId } = require('./get-account-id'); const { getRegion } = require('./get-region'); const { getOutputs } = require('../cf/get-outputs'); const deepMap = require('deep-map'); const appendConfigParameters = settings => { const path = get(settings, 'config.path'); const defaults = get(settings, 'config.defaults'); const required = get(settings, 'config.required'); const allParameters = Object.assign({}, defaults, required); const parameterNames = Object.keys(allParameters) .filter(Boolean) .map(keyName => path.concat('/', keyName)); return Object.assign({}, settings, { configParameters: parameterNames }); }; const appendSecretParameters = settings => { const path = get(settings, 'secret.path'); const required = get(settings, 'secret.required'); const allParameters = Object.assign({}, required); const parameterNames = Object.keys(allParameters) .filter(Boolean) .map(keyName => path.concat('/', keyName)); return Object.assign({}, settings, { secretParameters: parameterNames }); }; const makeGetSettings = ({ settingsFilePath, variables }) => () => { return Bluebird.resolve() .then(() => readFile({ filePath: settingsFilePath })) .catch(() => { throw new Error( `Could not find configs.yml in the following directory - ${process.cwd()}` ); }) .then(config => Promise.all([ getValidatedSettings({ config }), getAccountId(), getRegion(), getOutputs({ stackNames: get(config, 'cfOutputs', []).map(stack => interpolate({ value: stack, variables }) ) }) ]) ) .then(([validatedConfig, accountId, region, cfOutputs]) => { const mergedVariables = Object.assign({}, variables, cfOutputs, { accountId, region }); return deepMap(validatedConfig, value => interpolate({ value, variables: mergedVariables }) ); }) .then(appendConfigParameters) .then(appendSecretParameters); }; module.exports = { makeGetSettings };