3 var yaml = require('js-yaml');
4 var parseJson = require('parse-json');
5 var requireFromString = require('require-from-string');
6 var readFile = require('./readFile');
8 module.exports = function (filepath, options) {
9 return loadExtensionlessRc().then(function (result) {
10 if (result) return result;
11 if (options.rcExtensions) return loadRcWithExtensions();
15 function loadExtensionlessRc() {
16 return readRcFile().then(function (content) {
17 if (!content) return null;
19 var pasedConfig = (options.rcStrictJson)
20 ? parseJson(content, filepath)
21 : yaml.safeLoad(content, {
31 function loadRcWithExtensions() {
32 return readRcFile('json').then(function (content) {
34 var successFilepath = filepath + '.json';
36 config: parseJson(content, successFilepath),
37 filepath: successFilepath,
40 // If not content was found in the file with extension,
41 // try the next possible extension
42 return readRcFile('yaml');
43 }).then(function (content) {
45 // If the previous check returned an object with a config
46 // property, then it succeeded and this step can be skipped
47 if (content.config) return content;
48 // If it just returned a string, then *this* check succeeded
49 var successFilepath = filepath + '.yaml';
51 config: yaml.safeLoad(content, { filename: successFilepath }),
52 filepath: successFilepath,
55 return readRcFile('yml');
56 }).then(function (content) {
58 if (content.config) return content;
59 var successFilepath = filepath + '.yml';
61 config: yaml.safeLoad(content, { filename: successFilepath }),
62 filepath: successFilepath,
65 return readRcFile('js');
66 }).then(function (content) {
68 if (content.config) return content;
69 var successFilepath = filepath + '.js';
71 config: requireFromString(content, successFilepath),
72 filepath: successFilepath,
79 function readRcFile(extension) {
80 var filepathWithExtension = (extension)
81 ? filepath + '.' + extension
83 return readFile(filepathWithExtension);