// 'use strict'; const os = require('os'); const createExplorer = require('./createExplorer'); const loaders = require('./loaders'); module.exports = cosmiconfig; function cosmiconfig( moduleName , options ) { options = options || {}; const defaults = { packageProp: moduleName, searchPlaces: [ 'package.json', `.${moduleName}rc`, `.${moduleName}rc.json`, `.${moduleName}rc.yaml`, `.${moduleName}rc.yml`, `.${moduleName}rc.js`, `${moduleName}.config.js`, ], ignoreEmptySearchPlaces: true, stopDir: os.homedir(), cache: true, transform: identity, }; const normalizedOptions = Object.assign( {}, defaults, options, { loaders: normalizeLoaders(options.loaders), } ); return createExplorer(normalizedOptions); } cosmiconfig.loadJs = loaders.loadJs; cosmiconfig.loadJson = loaders.loadJson; cosmiconfig.loadYaml = loaders.loadYaml; function normalizeLoaders(rawLoaders ) { const defaults = { '.js': { sync: loaders.loadJs, async: loaders.loadJs }, '.json': { sync: loaders.loadJson, async: loaders.loadJson }, '.yaml': { sync: loaders.loadYaml, async: loaders.loadYaml }, '.yml': { sync: loaders.loadYaml, async: loaders.loadYaml }, noExt: { sync: loaders.loadYaml, async: loaders.loadYaml }, }; if (!rawLoaders) { return defaults; } return Object.keys(rawLoaders).reduce((result, ext) => { const entry = rawLoaders && rawLoaders[ext]; if (typeof entry === 'function') { result[ext] = { sync: entry, async: entry }; } else { result[ext] = entry; } return result; }, defaults); } function identity(x) { return x; }