mirror of
https://github.com/thangisme/notes.git
synced 2024-11-01 00:37:33 -04:00
86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
var yaml = require('js-yaml');
|
|
var parseJson = require('parse-json');
|
|
var requireFromString = require('require-from-string');
|
|
var readFile = require('./readFile');
|
|
|
|
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);
|
|
}
|
|
};
|