UNPKG

@creditkarma/dynamic-config

Version:

Dynamic Config for Node.js backed by Consul and Vault

140 lines 4.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadSettings = exports.configSettingsSchema = exports.SETTINGS_FILE_NAME = void 0; const fs = require("fs"); const logger_1 = require("./logger"); const utils_1 = require("./utils"); const translators_1 = require("./translators"); const resolvers_1 = require("./resolvers"); const loaders_1 = require("./loaders"); exports.SETTINGS_FILE_NAME = 'config-settings.json'; exports.configSettingsSchema = { type: 'object', properties: { configPath: { type: 'string', }, configEnv: { type: 'string', }, remoteOptions: { type: 'object', }, resolvers: { type: 'array', items: { type: 'string', }, }, loaders: { type: 'array', items: { type: 'string', }, }, translators: { type: 'array', items: { type: 'string', }, }, schemas: { type: 'object', }, }, }; const defaultTranslatorMap = { debug: translators_1.debugTranslator, env: translators_1.envTranslator, consul: translators_1.consulTranslator, }; const defaultLoaderMap = { js: loaders_1.jsLoader, ts: loaders_1.tsLoader, json: loaders_1.jsonLoader, yml: loaders_1.ymlLoader, yaml: loaders_1.ymlLoader, }; const defaultResolverMap = { package: resolvers_1.packageResolver, consul: resolvers_1.consulResolver, vault: resolvers_1.vaultResolver, }; function settingsToOptions(settings) { const result = {}; if (settings.configPath !== undefined) { result.configPath = settings.configPath; } if (settings.configEnv !== undefined) { result.configEnv = settings.configEnv; } if (settings.remoteOptions !== undefined) { result.remoteOptions = settings.remoteOptions; } if (settings.resolvers !== undefined) { result.resolvers = {}; if (settings.resolvers.indexOf('consul') > -1) { result.resolvers.remote = defaultResolverMap.consul(); } if (settings.resolvers.indexOf('vault') > -1) { result.resolvers.secret = defaultResolverMap.vault(); } } else { result.resolvers = { remote: (0, resolvers_1.consulResolver)(), secret: (0, resolvers_1.vaultResolver)(), }; } if (settings.loaders !== undefined) { result.loaders = settings.loaders.reduce((acc, next) => { if (defaultLoaderMap[next] !== undefined) { acc.push(defaultLoaderMap[next]); } return acc; }, []); } else { result.loaders = [loaders_1.jsonLoader, loaders_1.ymlLoader, loaders_1.jsLoader, loaders_1.tsLoader]; } if (settings.translators !== undefined) { result.translators = settings.translators.reduce((acc, next) => { if (defaultTranslatorMap[next] !== undefined) { acc.push(defaultTranslatorMap[next]); } return acc; }, []); } else { result.translators = [translators_1.envTranslator, translators_1.consulTranslator]; } return result; } function loadSettings() { const settingsPath = utils_1.FileUtils.findFile(exports.SETTINGS_FILE_NAME, []); if (settingsPath !== null) { try { const content = fs .readFileSync(settingsPath) .toString('utf-8'); const settings = JSON.parse(content); if (utils_1.JSONUtils.objectMatchesSchema(exports.configSettingsSchema, settings)) { return settingsToOptions(settings); } else { logger_1.defaultLogger.error(`Config settings does not match the expected schema`); return settingsToOptions({}); } } catch (e) { logger_1.defaultLogger.error(`Failed to load config-settings from file[${settingsPath}]`); return settingsToOptions({}); } } else { logger_1.defaultLogger.log(`Unable to find static config-settings`); return settingsToOptions({}); } } exports.loadSettings = loadSettings; //# sourceMappingURL=SettingsLoader.js.map