code: function buildSources (path, options) {
    var excludes = options.excludes;
    var sources = [];
  
    if (options.defaults) {
      sources = options.defaults.concat(sources);
    }
  
    var environment = getEnvironment(options);
  
    var basename = nodePath.basename(path);
    var ext = nodePath.extname(basename);
  
    var pathNoExt = path.slice(0, 0 - ext.length);
  
    if (!ext) {
      ext = '.json';
    }
  
    sources.push(pathNoExt + ext);
  
    if (excludes['env-file'] !== true) {
      sources.push(pathNoExt + '-' + environment + ext);
    }
  
    if (excludes['local-file'] !== true) {
      sources.push(pathNoExt + '-local' + ext);
    }
  
    if (excludes['env'] !== true) {
      sources.push(getEnvNodeConfig());
    }
  
    if (excludes['command-line'] !== true) {
      sources.push(getCommandLineNodeConfig());
    }
  
    if (options.overrides) {
      sources = sources.concat(options.overrides);
    }
  
    if (typeof options.sources === 'function') {
      var newSources = options.sources(sources);
      if (newSources != null) {
        sources = newSources;
      }
    }
  
    return sources;
  }
docs: Given a path, generate an array of sources to be merged
  together in the correct order. A source can be any of the following:
  - A String path to a JSON file
  - A Function that asychronously provides a configuration object to merge
  - A configuration object