UNPKG

orionsoft-react-scripts

Version:

Orionsoft Configuration and scripts for Create React App.

125 lines (107 loc) 4.02 kB
'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; var path = require('path'); var fs = require('fs'); var JSON5 = require('json5'); var pathExists = require('path-exists'); var INFINITY = 1 / 0; var BABELRC_FILENAME = '.babelrc'; var PACKAGE_FILENAME = 'package.json'; var nullConf = { file: null, config: null }; function asyncFind(resolve, dir, depth) { if (depth < 0) { return resolve(nullConf); } var babelrc = path.join(dir, BABELRC_FILENAME); return pathExists(babelrc).then(function (exists) { if (exists) { fs.readFile(babelrc, 'utf8', function (err, data) { if (!err) { resolve({ file: babelrc, config: JSON5.parse(data) }); } }); } return exists; }).then(function (exists) { if (!exists) { var _ret = function () { var packageFile = path.join(dir, PACKAGE_FILENAME); return { v: pathExists(packageFile).then(function (ex) { if (ex) { fs.readFile(packageFile, 'utf8', function (err, data) { var packageJson = JSON.parse(data); if (packageJson.babel) { resolve({ file: packageFile, config: packageJson.babel }); } }); } }) }; }(); if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } return exists; }).then(function (exists) { if (!exists) { var nextDir = path.dirname(dir); if (nextDir === dir) { resolve(nullConf); } else { asyncFind(resolve, nextDir, depth - 1); } } }); } module.exports = function findBabelConfig(start) { var depth = arguments.length <= 1 || arguments[1] === undefined ? INFINITY : arguments[1]; if (!start) { return new Promise(function (resolve) { return resolve(nullConf); }); } var dir = path.isAbsolute(start) ? start : path.join(process.cwd(), start); return new Promise(function (resolve) { asyncFind(resolve, dir, depth); }); }; module.exports.sync = function findBabelConfigSync(start) { var depth = arguments.length <= 1 || arguments[1] === undefined ? INFINITY : arguments[1]; if (!start) { return nullConf; } var dir = path.isAbsolute(start) ? start : path.join(process.cwd(), start); var loopLeft = depth; // eslint-disable-next-line no-cond-assign do { var babelrc = path.join(dir, BABELRC_FILENAME); if (pathExists.sync(babelrc)) { var babelrcContent = fs.readFileSync(babelrc, 'utf8'); return { file: babelrc, config: JSON5.parse(babelrcContent) }; } var packageFile = path.join(dir, PACKAGE_FILENAME); if (pathExists.sync(packageFile)) { var packageContent = fs.readFileSync(packageFile, 'utf8'); var packageJson = JSON.parse(packageContent); if (packageJson.babel) { return { file: packageFile, config: packageJson.babel }; } } if (loopLeft-- === 0) { return nullConf; } } while (dir !== (dir = path.dirname(dir))); return nullConf; };