in lib/painlessConfigAsCode.js [103:168]
function initialize(options) {
options = options || {};
if (!options.skipDotEnv) {
preloadDotEnv(options);
}
const provider = options.provider || painlessConfig;
let environmentInstances = null;
const applicationRoot = options.applicationRoot || appRoot;
const applicationName = options.applicationName || provider.get(ApplicationNameEnvironmentVariableKey);
let configurationEnvironmentKeyNames = (provider.get('CONFIGURATION_ENVIRONMENT_KEYS') || 'CONFIGURATION_ENVIRONMENT,NODE_ENV').split(',');
if (!configurationEnvironmentKeyNames || configurationEnvironmentKeyNames.length === 0) {
throw new Error('No configuration environment key name(s) defined');
}
let environment = null;
for (let i = 0; !environment && i < configurationEnvironmentKeyNames.length; i++) {
environment = provider.get(configurationEnvironmentKeyNames[i]);
}
if (!environment) {
return provider;
}
const providers = [
provider,
];
if (provider.testConfiguration) {
providers.push(objectProvider(provider.testConfiguration[environment], applicationName));
} else {
const appRoot = applicationRoot.toString();
const pkg = tryGetPackage(appRoot);
const appName = applicationName || (pkg && pkg.painlessConfigApplicationName ? pkg.painlessConfigApplicationName : undefined);
const environmentDirectoryKey = provider.get('ENVIRONMENT_DIRECTORY_KEY') || 'ENVIRONMENT_DIRECTORY';
const directoryName = options.directoryName || provider.get(environmentDirectoryKey) || 'env';
configureLocalEnvironment(providers, appRoot, directoryName, environment, appName);
const environmentModulesKey = provider.get('ENVIRONMENT_MODULES_KEY') || 'ENVIRONMENT_MODULES';
const environmentModules = (provider.get(environmentModulesKey) || '').split(',');
let painlessConfigEnvironments = pkg ? pkg.painlessConfigEnvironments : null;
if (painlessConfigEnvironments) {
if (Array.isArray(painlessConfigEnvironments)) {
// This is ready-to-use as-is
} else if (painlessConfigEnvironments.split) {
painlessConfigEnvironments = painlessConfigEnvironments.split(',');
} else {
throw new Error('Unknown how to process the painlessConfigEnvironments values in package.json');
}
environmentModules.push(...painlessConfigEnvironments);
}
environmentInstances = configurePackageEnvironments(providers, environmentModules, environment, appName);
}
return {
environmentInstances: environmentInstances,
get: function (key) {
for (let i = 0; i < providers.length; i++) {
const value = providers[i].get(key);
if (value !== undefined) {
return value;
}
}
}
};
}