async function composeGraphs()

in lib/multiGraphBuilder.js [15:59]


async function composeGraphs(api) {
  api = api || {};
  const options = api.options || {};
  let applicationRoot = (options.applicationRoot || appRoot).toString();

  const paths = [];

  // Configuration directory presence in the app
  // -------------------------------------------
  addAppConfigDirectory(paths, api, options, applicationRoot);

  // Configuration packages defined explicitly in app's package.json
  // ---------------------------------------------------------------
  let pkg = getPackage(applicationRoot);
  if (pkg && pkg.painlessConfigObjectPackages) {
    let pco = Array.isArray(pkg.painlessConfigObjectPackages) ? pkg.painlessConfigObjectPackages : pkg.painlessConfigObjectPackages.split(',');
    addConfigPackages(paths, applicationRoot, pco);
  }

  // Environment-based configuration packages
  // ----------------------------------------
  const additionalPackagesKey = api.environment.get('CONFIGURATION_PACKAGES_KEY') || 'CONFIGURATION_PACKAGES';
  let configurationPakages = api.environment.get(additionalPackagesKey);
  if (configurationPakages) {
    configurationPakages = configurationPakages.split(',');
    addConfigPackages(paths, applicationRoot, configurationPakages);
  }

  if (paths.length === 0) {
    throw new Error('No configuration packages or directories were found to process. Consider using "options.graph" as an option to the configuration resolver if you do not need to use configuration directories. Otherwise, check that you have configured your package.json or other environment values as needed.');
  }

  // Build the graph
  // ---------------
  let graph = {};
  for (const p of paths.reverse()) {
    const result = await graphBuilder(api, p);
    const overwriteMerge = (destinationArray, sourceArray/* , options*/) => sourceArray;
    graph = deepmerge(graph, result, { arrayMerge: overwriteMerge });
  }
  if (!graph || Object.getOwnPropertyNames(graph).length === 0) {
    throw new Error(`Successfully processed ${paths.length} configuration graph packages or directories, yet the resulting graph object did not have properties. This is likely an error or issue that should be corrected. Or, alternatively, use options.graph as an input to the resolver.`);
  }
  return graph;
}