| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- //
- 'use strict';
- const yaml = require('js-yaml');
- const requireFromString = require('require-from-string');
- const readFile = require('./readFile');
- const parseJson = require('./parseJson');
- const path = require('path');
- module.exports = function loadDefinedFile(
- filepath ,
- options
-
-
-
- ) {
- function parseContent(content ) {
- if (!content) {
- throw new Error(`Config file is empty! Filepath - "${filepath}".`);
- }
- let parsedConfig;
- switch (options.format || inferFormat(filepath)) {
- case 'json':
- parsedConfig = parseJson(content, filepath);
- break;
- case 'yaml':
- parsedConfig = yaml.safeLoad(content, {
- filename: filepath,
- });
- break;
- case 'js':
- parsedConfig = requireFromString(content, filepath);
- break;
- default:
- parsedConfig = tryAllParsing(content, filepath);
- }
- if (!parsedConfig) {
- throw new Error(`Failed to parse "${filepath}" as JSON, JS, or YAML.`);
- }
- return {
- config: parsedConfig,
- filepath,
- };
- }
- return !options.sync
- ? readFile(filepath, { throwNotFound: true }).then(parseContent)
- : parseContent(readFile.sync(filepath, { throwNotFound: true }));
- };
- function inferFormat(filepath ) {
- switch (path.extname(filepath)) {
- case '.js':
- return 'js';
- case '.json':
- return 'json';
- // istanbul ignore next
- case '.yml':
- case '.yaml':
- return 'yaml';
- default:
- return undefined;
- }
- }
- function tryAllParsing(content , filepath ) {
- return tryYaml(content, filepath, () => {
- return tryRequire(content, filepath, () => {
- return null;
- });
- });
- }
- function tryYaml(content , filepath , cb ) {
- try {
- const 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();
- }
- }
|