mirror of
https://github.com/morhetz/gruvbox.git
synced 2025-11-16 23:33:38 -05:00
93 lines
2.8 KiB
JavaScript
93 lines
2.8 KiB
JavaScript
'use strict';
|
|
|
|
var fs = require('graceful-fs');
|
|
var Promise = require('pinkie-promise');
|
|
var yaml = require('js-yaml');
|
|
var parseJson = require('parse-json');
|
|
var requireFromString = require('require-from-string');
|
|
|
|
module.exports = function(filepath, options) {
|
|
return loadExtensionlessRc().then(function(result) {
|
|
if (result) return result;
|
|
if (options.extensions) return loadRcWithExtensions();
|
|
return null;
|
|
});
|
|
|
|
function loadExtensionlessRc() {
|
|
return readRcFile().then(function(content) {
|
|
if (!content) return null;
|
|
|
|
var pasedConfig = (options.strictJson)
|
|
? 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) {
|
|
return new Promise(function(resolve, reject) {
|
|
var filepathWithExtension = (extension) ? filepath + '.' + extension : filepath;
|
|
fs.readFile(filepathWithExtension, 'utf8', function(fileError, content) {
|
|
if (fileError) {
|
|
if (fileError.code === 'ENOENT') return resolve(null);
|
|
return reject(fileError);
|
|
}
|
|
resolve(content);
|
|
});
|
|
});
|
|
}
|
|
};
|