function initialize()

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;
        }
      }
    }
  };
}