You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.9 KiB
81 lines
1.9 KiB
// |
|
'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; |
|
}
|
|
|