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