UNPKG

painless-config

Version:

Low friction library for application configuration.

72 lines (60 loc) 1.84 kB
/* -------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See LICENSE in the project root for license information. * ------------------------------------------------------------------------------------------ */ var fs = require('fs'); var process = require('process'); var walkBack = require('walk-back'); var objectPath = require('object-path'); (function () { var config = {}; var fallbacks; var fallbackLocation; function findFallbacks() { if (fallbackLocation !== undefined) { return; } fallbackLocation = walkBack(process.cwd(), 'env.json'); } function loadFallbacks() { if (fallbacks !== undefined) { return; } findFallbacks(); if (fallbackLocation === null) { fallbacks = {}; return; } var fallbackData = fs.readFileSync(fallbackLocation, 'utf8'); fallbacks = JSON.parse(fallbackData); } function getEnvPath(env) { return env.replace(/[_-]/g, '.'); } config.get = function (variable) { var value = process.env[variable]; if (value === undefined) { loadFallbacks(); value = fallbacks[variable]; } return value; }; config.all = function () { loadFallbacks(); var all = {}; for (var env in process.env) { if (process.env.hasOwnProperty(env)) { var envPath = getEnvPath(env); objectPath.set(all, envPath, process.env[env]); } } for (var fallbackEnv in fallbacks) { var fallbackEnvPath = getEnvPath(fallbackEnv); if (objectPath.get(all, fallbackEnvPath) === undefined) { objectPath.set(all, fallbackEnvPath, fallbacks[fallbackEnv]); } } return all; }; module.exports = config; })();