| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | 'use strict';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 BABELRC_JS_FILENAME = '.babelrc.js';var BABEL_CONFIG_JS_FILENAME = 'babel.config.js';var PACKAGE_FILENAME = 'package.json';var nullConf = { file: null, config: null };function getBabelJsConfig(file) {    // eslint-disable-next-line global-require, import/no-dynamic-require    var configModule = require(file);    if (typeof configModule === 'function') {        return configModule();    }    // eslint-disable-next-line no-underscore-dangle    return configModule && configModule.__esModule ? configModule.default : configModule;}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 babelJSrc = path.join(dir, BABELRC_JS_FILENAME);            return pathExists(babelJSrc).then(function (ex) {                if (ex) {                    var config = getBabelJsConfig(babelJSrc);                    resolve({                        file: babelJSrc,                        config                    });                }            });        }        return exists;    }).then(function (exists) {        if (!exists) {            var packageFile = path.join(dir, PACKAGE_FILENAME);            return 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                            });                        }                    });                }            });        }        return exists;    }).then(function (exists) {        if (!exists) {            var babelConfigJSrc = path.join(dir, BABEL_CONFIG_JS_FILENAME);            return pathExists(babelConfigJSrc).then(function (ex) {                if (ex) {                    var config = getBabelJsConfig(babelConfigJSrc);                    resolve({                        file: babelConfigJSrc,                        config                    });                }            });        }        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 ? arguments[1] : INFINITY;    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 ? arguments[1] : INFINITY;    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 babelJSrc = path.join(dir, BABELRC_JS_FILENAME);        if (pathExists.sync(babelJSrc)) {            var config = getBabelJsConfig(babelJSrc);            return {                file: babelJSrc,                config            };        }        var babelConfigJSrc = path.join(dir, BABEL_CONFIG_JS_FILENAME);        if (pathExists.sync(babelConfigJSrc)) {            var _config = getBabelJsConfig(babelConfigJSrc);            return {                file: babelConfigJSrc,                config: _config            };        }        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;        }        loopLeft -= 1;    } while (dir !== (dir = path.dirname(dir)));    return nullConf;};
 |