4 const yaml = require('js-yaml');
5 const requireFromString = require('require-from-string');
6 const readFile = require('./readFile');
7 const parseJson = require('./parseJson');
8 const funcRunner = require('./funcRunner');
10 module.exports = function loadRc(
19 return readFile(filepath)
20 .then(parseExtensionlessRcFile)
21 .then(checkExtensionlessRcResult);
23 return checkExtensionlessRcResult(
24 parseExtensionlessRcFile(readFile.sync(filepath))
28 function checkExtensionlessRcResult(result) {
29 if (result) return result;
30 if (options.rcExtensions) return loadRcWithExtensions();
34 function parseExtensionlessRcFile(content ) {
35 if (!content) return null;
36 const pasedConfig = options.rcStrictJson
37 ? parseJson(content, filepath)
38 : yaml.safeLoad(content, { filename: filepath });
45 function loadRcWithExtensions() {
46 let foundConfig = null;
47 return funcRunner(readRcFile('json'), [
49 // Since this is the first try, config cannot have been found, so don't
50 // check `if (foundConfig)`.
52 const successFilepath = `${filepath}.json`;
54 config: parseJson(jsonContent, successFilepath),
55 filepath: successFilepath,
58 return readRcFile('yaml');
64 } else if (yamlContent) {
65 const successFilepath = `${filepath}.yaml`;
67 config: yaml.safeLoad(yamlContent, { filename: successFilepath }),
68 filepath: successFilepath,
71 return readRcFile('yml');
77 } else if (ymlContent) {
78 const successFilepath = `${filepath}.yml`;
80 config: yaml.safeLoad(ymlContent, { filename: successFilepath }),
81 filepath: successFilepath,
84 return readRcFile('js');
90 } else if (jsContent) {
91 const successFilepath = `${filepath}.js`;
93 config: requireFromString(jsContent, successFilepath),
94 filepath: successFilepath,
104 function readRcFile(extension ) {
105 const filepathWithExtension = `${filepath}.${extension}`;
107 ? readFile(filepathWithExtension)
108 : readFile.sync(filepathWithExtension);