| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- 'use strict';
- var yaml = require('js-yaml');
- var requireFromString = require('require-from-string');
- var readFile = require('./readFile');
- var parseJson = require('./parseJson');
- module.exports = function (filepath, options) {
- return loadExtensionlessRc().then(function (result) {
- if (result) return result;
- if (options.rcExtensions) return loadRcWithExtensions();
- return null;
- });
- function loadExtensionlessRc() {
- return readRcFile().then(function (content) {
- if (!content) return null;
- var pasedConfig = (options.rcStrictJson)
- ? parseJson(content, filepath)
- : yaml.safeLoad(content, {
- filename: filepath,
- });
- return {
- config: pasedConfig,
- filepath: filepath,
- };
- });
- }
- function loadRcWithExtensions() {
- return readRcFile('json').then(function (content) {
- if (content) {
- var successFilepath = filepath + '.json';
- return {
- config: parseJson(content, successFilepath),
- filepath: successFilepath,
- };
- }
- // If not content was found in the file with extension,
- // try the next possible extension
- return readRcFile('yaml');
- }).then(function (content) {
- if (content) {
- // If the previous check returned an object with a config
- // property, then it succeeded and this step can be skipped
- if (content.config) return content;
- // If it just returned a string, then *this* check succeeded
- var successFilepath = filepath + '.yaml';
- return {
- config: yaml.safeLoad(content, { filename: successFilepath }),
- filepath: successFilepath,
- };
- }
- return readRcFile('yml');
- }).then(function (content) {
- if (content) {
- if (content.config) return content;
- var successFilepath = filepath + '.yml';
- return {
- config: yaml.safeLoad(content, { filename: successFilepath }),
- filepath: successFilepath,
- };
- }
- return readRcFile('js');
- }).then(function (content) {
- if (content) {
- if (content.config) return content;
- var successFilepath = filepath + '.js';
- return {
- config: requireFromString(content, successFilepath),
- filepath: successFilepath,
- };
- }
- return null;
- });
- }
- function readRcFile(extension) {
- var filepathWithExtension = (extension)
- ? filepath + '.' + extension
- : filepath;
- return readFile(filepathWithExtension);
- }
- };
|