1 | const fs = require('fs')
|
2 | const path = require('path')
|
3 | const findup = require('find-up')
|
4 | const merge = require('deepmerge')
|
5 |
|
6 | const finds = name => [
|
7 | `${name}.json`,
|
8 | `.${name}rc`,
|
9 | `${name}rc.js`,
|
10 | `${name}rc.json`,
|
11 | `${name}rc.yml`,
|
12 | `${name}rc.yaml`,
|
13 | `${name}.config.js`,
|
14 | `${name}.config.json`,
|
15 | ]
|
16 |
|
17 | const loadConfigFile = (name, defaultConfig = {}) => {
|
18 | let file
|
19 |
|
20 | try {
|
21 | const filepath = findup.sync(finds(name))
|
22 | const isJS = path.extname(filepath) === '.js'
|
23 |
|
24 | file = isJS
|
25 | ? require(filepath)
|
26 | : JSON.parse(fs.readFileSync(filepath, 'utf-8'))
|
27 | } catch (err) {
|
28 | file = defaultConfig
|
29 | }
|
30 |
|
31 | return defaultConfig !== null ? merge(defaultConfig, file) : file
|
32 | }
|
33 |
|
34 | module.exports = loadConfigFile
|