| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- "use strict";
- exports.__esModule = true;
- var _assign = require("babel-runtime/core-js/object/assign");
- var _assign2 = _interopRequireDefault(_assign);
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
- exports.default = buildConfigChain;
- var _resolve = require("../../../helpers/resolve");
- var _resolve2 = _interopRequireDefault(_resolve);
- var _json = require("json5");
- var _json2 = _interopRequireDefault(_json);
- var _pathIsAbsolute = require("path-is-absolute");
- var _pathIsAbsolute2 = _interopRequireDefault(_pathIsAbsolute);
- var _path = require("path");
- var _path2 = _interopRequireDefault(_path);
- var _fs = require("fs");
- var _fs2 = _interopRequireDefault(_fs);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var existsCache = {};
- var jsonCache = {};
- var BABELIGNORE_FILENAME = ".babelignore";
- var BABELRC_FILENAME = ".babelrc";
- var PACKAGE_FILENAME = "package.json";
- function exists(filename) {
- var cached = existsCache[filename];
- if (cached == null) {
- return existsCache[filename] = _fs2.default.existsSync(filename);
- } else {
- return cached;
- }
- }
- function buildConfigChain() {
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- var log = arguments[1];
- var filename = opts.filename;
- var builder = new ConfigChainBuilder(log);
- if (opts.babelrc !== false) {
- builder.findConfigs(filename);
- }
- builder.mergeConfig({
- options: opts,
- alias: "base",
- dirname: filename && _path2.default.dirname(filename)
- });
- return builder.configs;
- }
- var ConfigChainBuilder = function () {
- function ConfigChainBuilder(log) {
- (0, _classCallCheck3.default)(this, ConfigChainBuilder);
- this.resolvedConfigs = [];
- this.configs = [];
- this.log = log;
- }
- ConfigChainBuilder.prototype.findConfigs = function findConfigs(loc) {
- if (!loc) return;
- if (!(0, _pathIsAbsolute2.default)(loc)) {
- loc = _path2.default.join(process.cwd(), loc);
- }
- var foundConfig = false;
- var foundIgnore = false;
- while (loc !== (loc = _path2.default.dirname(loc))) {
- if (!foundConfig) {
- var configLoc = _path2.default.join(loc, BABELRC_FILENAME);
- if (exists(configLoc)) {
- this.addConfig(configLoc);
- foundConfig = true;
- }
- var pkgLoc = _path2.default.join(loc, PACKAGE_FILENAME);
- if (!foundConfig && exists(pkgLoc)) {
- foundConfig = this.addConfig(pkgLoc, "babel", JSON);
- }
- }
- if (!foundIgnore) {
- var ignoreLoc = _path2.default.join(loc, BABELIGNORE_FILENAME);
- if (exists(ignoreLoc)) {
- this.addIgnoreConfig(ignoreLoc);
- foundIgnore = true;
- }
- }
- if (foundIgnore && foundConfig) return;
- }
- };
- ConfigChainBuilder.prototype.addIgnoreConfig = function addIgnoreConfig(loc) {
- var file = _fs2.default.readFileSync(loc, "utf8");
- var lines = file.split("\n");
- lines = lines.map(function (line) {
- return line.replace(/#(.*?)$/, "").trim();
- }).filter(function (line) {
- return !!line;
- });
- if (lines.length) {
- this.mergeConfig({
- options: { ignore: lines },
- alias: loc,
- dirname: _path2.default.dirname(loc)
- });
- }
- };
- ConfigChainBuilder.prototype.addConfig = function addConfig(loc, key) {
- var json = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _json2.default;
- if (this.resolvedConfigs.indexOf(loc) >= 0) {
- return false;
- }
- this.resolvedConfigs.push(loc);
- var content = _fs2.default.readFileSync(loc, "utf8");
- var options = void 0;
- try {
- options = jsonCache[content] = jsonCache[content] || json.parse(content);
- if (key) options = options[key];
- } catch (err) {
- err.message = loc + ": Error while parsing JSON - " + err.message;
- throw err;
- }
- this.mergeConfig({
- options: options,
- alias: loc,
- dirname: _path2.default.dirname(loc)
- });
- return !!options;
- };
- ConfigChainBuilder.prototype.mergeConfig = function mergeConfig(_ref) {
- var options = _ref.options,
- alias = _ref.alias,
- loc = _ref.loc,
- dirname = _ref.dirname;
- if (!options) {
- return false;
- }
- options = (0, _assign2.default)({}, options);
- dirname = dirname || process.cwd();
- loc = loc || alias;
- if (options.extends) {
- var extendsLoc = (0, _resolve2.default)(options.extends, dirname);
- if (extendsLoc) {
- this.addConfig(extendsLoc);
- } else {
- if (this.log) this.log.error("Couldn't resolve extends clause of " + options.extends + " in " + alias);
- }
- delete options.extends;
- }
- this.configs.push({
- options: options,
- alias: alias,
- loc: loc,
- dirname: dirname
- });
- var envOpts = void 0;
- var envKey = process.env.BABEL_ENV || process.env.NODE_ENV || "development";
- if (options.env) {
- envOpts = options.env[envKey];
- delete options.env;
- }
- this.mergeConfig({
- options: envOpts,
- alias: alias + ".env." + envKey,
- dirname: dirname
- });
- };
- return ConfigChainBuilder;
- }();
- module.exports = exports["default"];
|