diff options
Diffstat (limited to 'node_modules/cosmiconfig/lib/loadDefinedFile.js')
-rw-r--r-- | node_modules/cosmiconfig/lib/loadDefinedFile.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/node_modules/cosmiconfig/lib/loadDefinedFile.js b/node_modules/cosmiconfig/lib/loadDefinedFile.js new file mode 100644 index 0000000..433d83c --- /dev/null +++ b/node_modules/cosmiconfig/lib/loadDefinedFile.js @@ -0,0 +1,66 @@ +'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 readFile(filepath, { throwNotFound: true }).then(function (content) { + var parsedConfig = (function () { + switch (options.format) { + case 'json': + return parseJson(content, filepath); + case 'yaml': + return yaml.safeLoad(content, { + filename: filepath, + }); + case 'js': + return requireFromString(content, filepath); + default: + return tryAllParsing(content, filepath); + } + })(); + + if (!parsedConfig) { + throw new Error( + 'Failed to parse "' + filepath + '" as JSON, JS, or YAML.' + ); + } + + return { + config: parsedConfig, + filepath: filepath, + }; + }); +}; + +function tryAllParsing(content, filepath) { + return tryYaml(content, filepath, function () { + return tryRequire(content, filepath, function () { + return null; + }); + }); +} + +function tryYaml(content, filepath, cb) { + try { + var result = yaml.safeLoad(content, { + filename: filepath, + }); + if (typeof result === 'string') { + return cb(); + } + return result; + } catch (e) { + return cb(); + } +} + +function tryRequire(content, filepath, cb) { + try { + return requireFromString(content, filepath); + } catch (e) { + return cb(); + } +} |