c9c4119ff9716c7c896c4da77a234cedad498e4a0beeab83d94cfd24896dfb25e00b6d8050a1a6cc60b74bc71d41fde2a335376410cfcd29b1a7427914eee4 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. "use strict";
  2. exports.__esModule = true;
  3. var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties");
  4. var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
  5. var _stringify = require("babel-runtime/core-js/json/stringify");
  6. var _stringify2 = _interopRequireDefault(_stringify);
  7. var _assign = require("babel-runtime/core-js/object/assign");
  8. var _assign2 = _interopRequireDefault(_assign);
  9. var _getIterator2 = require("babel-runtime/core-js/get-iterator");
  10. var _getIterator3 = _interopRequireDefault(_getIterator2);
  11. var _typeof2 = require("babel-runtime/helpers/typeof");
  12. var _typeof3 = _interopRequireDefault(_typeof2);
  13. var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
  14. var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
  15. var _node = require("../../../api/node");
  16. var context = _interopRequireWildcard(_node);
  17. var _plugin2 = require("../../plugin");
  18. var _plugin3 = _interopRequireDefault(_plugin2);
  19. var _babelMessages = require("babel-messages");
  20. var messages = _interopRequireWildcard(_babelMessages);
  21. var _index = require("./index");
  22. var _resolvePlugin = require("../../../helpers/resolve-plugin");
  23. var _resolvePlugin2 = _interopRequireDefault(_resolvePlugin);
  24. var _resolvePreset = require("../../../helpers/resolve-preset");
  25. var _resolvePreset2 = _interopRequireDefault(_resolvePreset);
  26. var _cloneDeepWith = require("lodash/cloneDeepWith");
  27. var _cloneDeepWith2 = _interopRequireDefault(_cloneDeepWith);
  28. var _clone = require("lodash/clone");
  29. var _clone2 = _interopRequireDefault(_clone);
  30. var _merge = require("../../../helpers/merge");
  31. var _merge2 = _interopRequireDefault(_merge);
  32. var _config2 = require("./config");
  33. var _config3 = _interopRequireDefault(_config2);
  34. var _removed = require("./removed");
  35. var _removed2 = _interopRequireDefault(_removed);
  36. var _buildConfigChain = require("./build-config-chain");
  37. var _buildConfigChain2 = _interopRequireDefault(_buildConfigChain);
  38. var _path = require("path");
  39. var _path2 = _interopRequireDefault(_path);
  40. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  41. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  42. var OptionManager = function () {
  43. function OptionManager(log) {
  44. (0, _classCallCheck3.default)(this, OptionManager);
  45. this.resolvedConfigs = [];
  46. this.options = OptionManager.createBareOptions();
  47. this.log = log;
  48. }
  49. OptionManager.memoisePluginContainer = function memoisePluginContainer(fn, loc, i, alias) {
  50. for (var _iterator = OptionManager.memoisedPlugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
  51. var _ref;
  52. if (_isArray) {
  53. if (_i >= _iterator.length) break;
  54. _ref = _iterator[_i++];
  55. } else {
  56. _i = _iterator.next();
  57. if (_i.done) break;
  58. _ref = _i.value;
  59. }
  60. var cache = _ref;
  61. if (cache.container === fn) return cache.plugin;
  62. }
  63. var obj = void 0;
  64. if (typeof fn === "function") {
  65. obj = fn(context);
  66. } else {
  67. obj = fn;
  68. }
  69. if ((typeof obj === "undefined" ? "undefined" : (0, _typeof3.default)(obj)) === "object") {
  70. var _plugin = new _plugin3.default(obj, alias);
  71. OptionManager.memoisedPlugins.push({
  72. container: fn,
  73. plugin: _plugin
  74. });
  75. return _plugin;
  76. } else {
  77. throw new TypeError(messages.get("pluginNotObject", loc, i, typeof obj === "undefined" ? "undefined" : (0, _typeof3.default)(obj)) + loc + i);
  78. }
  79. };
  80. OptionManager.createBareOptions = function createBareOptions() {
  81. var opts = {};
  82. for (var _key in _config3.default) {
  83. var opt = _config3.default[_key];
  84. opts[_key] = (0, _clone2.default)(opt.default);
  85. }
  86. return opts;
  87. };
  88. OptionManager.normalisePlugin = function normalisePlugin(plugin, loc, i, alias) {
  89. plugin = plugin.__esModule ? plugin.default : plugin;
  90. if (!(plugin instanceof _plugin3.default)) {
  91. if (typeof plugin === "function" || (typeof plugin === "undefined" ? "undefined" : (0, _typeof3.default)(plugin)) === "object") {
  92. plugin = OptionManager.memoisePluginContainer(plugin, loc, i, alias);
  93. } else {
  94. throw new TypeError(messages.get("pluginNotFunction", loc, i, typeof plugin === "undefined" ? "undefined" : (0, _typeof3.default)(plugin)));
  95. }
  96. }
  97. plugin.init(loc, i);
  98. return plugin;
  99. };
  100. OptionManager.normalisePlugins = function normalisePlugins(loc, dirname, plugins) {
  101. return plugins.map(function (val, i) {
  102. var plugin = void 0,
  103. options = void 0;
  104. if (!val) {
  105. throw new TypeError("Falsy value found in plugins");
  106. }
  107. if (Array.isArray(val)) {
  108. plugin = val[0];
  109. options = val[1];
  110. } else {
  111. plugin = val;
  112. }
  113. var alias = typeof plugin === "string" ? plugin : loc + "$" + i;
  114. if (typeof plugin === "string") {
  115. var pluginLoc = (0, _resolvePlugin2.default)(plugin, dirname);
  116. if (pluginLoc) {
  117. plugin = require(pluginLoc);
  118. } else {
  119. throw new ReferenceError(messages.get("pluginUnknown", plugin, loc, i, dirname));
  120. }
  121. }
  122. plugin = OptionManager.normalisePlugin(plugin, loc, i, alias);
  123. return [plugin, options];
  124. });
  125. };
  126. OptionManager.prototype.mergeOptions = function mergeOptions(_ref2) {
  127. var _this = this;
  128. var rawOpts = _ref2.options,
  129. extendingOpts = _ref2.extending,
  130. alias = _ref2.alias,
  131. loc = _ref2.loc,
  132. dirname = _ref2.dirname;
  133. alias = alias || "foreign";
  134. if (!rawOpts) return;
  135. if ((typeof rawOpts === "undefined" ? "undefined" : (0, _typeof3.default)(rawOpts)) !== "object" || Array.isArray(rawOpts)) {
  136. this.log.error("Invalid options type for " + alias, TypeError);
  137. }
  138. var opts = (0, _cloneDeepWith2.default)(rawOpts, function (val) {
  139. if (val instanceof _plugin3.default) {
  140. return val;
  141. }
  142. });
  143. dirname = dirname || process.cwd();
  144. loc = loc || alias;
  145. for (var _key2 in opts) {
  146. var option = _config3.default[_key2];
  147. if (!option && this.log) {
  148. if (_removed2.default[_key2]) {
  149. this.log.error("Using removed Babel 5 option: " + alias + "." + _key2 + " - " + _removed2.default[_key2].message, ReferenceError);
  150. } else {
  151. var unknownOptErr = "Unknown option: " + alias + "." + _key2 + ". Check out http://babeljs.io/docs/usage/options/ for more information about options.";
  152. var presetConfigErr = "A common cause of this error is the presence of a configuration options object without the corresponding preset name. Example:\n\nInvalid:\n `{ presets: [{option: value}] }`\nValid:\n `{ presets: [['presetName', {option: value}]] }`\n\nFor more detailed information on preset configuration, please see https://babeljs.io/docs/en/plugins#pluginpresets-options.";
  153. this.log.error(unknownOptErr + "\n\n" + presetConfigErr, ReferenceError);
  154. }
  155. }
  156. }
  157. (0, _index.normaliseOptions)(opts);
  158. if (opts.plugins) {
  159. opts.plugins = OptionManager.normalisePlugins(loc, dirname, opts.plugins);
  160. }
  161. if (opts.presets) {
  162. if (opts.passPerPreset) {
  163. opts.presets = this.resolvePresets(opts.presets, dirname, function (preset, presetLoc) {
  164. _this.mergeOptions({
  165. options: preset,
  166. extending: preset,
  167. alias: presetLoc,
  168. loc: presetLoc,
  169. dirname: dirname
  170. });
  171. });
  172. } else {
  173. this.mergePresets(opts.presets, dirname);
  174. delete opts.presets;
  175. }
  176. }
  177. if (rawOpts === extendingOpts) {
  178. (0, _assign2.default)(extendingOpts, opts);
  179. } else {
  180. (0, _merge2.default)(extendingOpts || this.options, opts);
  181. }
  182. };
  183. OptionManager.prototype.mergePresets = function mergePresets(presets, dirname) {
  184. var _this2 = this;
  185. this.resolvePresets(presets, dirname, function (presetOpts, presetLoc) {
  186. _this2.mergeOptions({
  187. options: presetOpts,
  188. alias: presetLoc,
  189. loc: presetLoc,
  190. dirname: _path2.default.dirname(presetLoc || "")
  191. });
  192. });
  193. };
  194. OptionManager.prototype.resolvePresets = function resolvePresets(presets, dirname, onResolve) {
  195. return presets.map(function (val) {
  196. var options = void 0;
  197. if (Array.isArray(val)) {
  198. if (val.length > 2) {
  199. throw new Error("Unexpected extra options " + (0, _stringify2.default)(val.slice(2)) + " passed to preset.");
  200. }
  201. var _val = val;
  202. val = _val[0];
  203. options = _val[1];
  204. }
  205. var presetLoc = void 0;
  206. try {
  207. if (typeof val === "string") {
  208. presetLoc = (0, _resolvePreset2.default)(val, dirname);
  209. if (!presetLoc) {
  210. throw new Error("Couldn't find preset " + (0, _stringify2.default)(val) + " relative to directory " + (0, _stringify2.default)(dirname));
  211. }
  212. val = require(presetLoc);
  213. }
  214. if ((typeof val === "undefined" ? "undefined" : (0, _typeof3.default)(val)) === "object" && val.__esModule) {
  215. if (val.default) {
  216. val = val.default;
  217. } else {
  218. var _val2 = val,
  219. __esModule = _val2.__esModule,
  220. rest = (0, _objectWithoutProperties3.default)(_val2, ["__esModule"]);
  221. val = rest;
  222. }
  223. }
  224. if ((typeof val === "undefined" ? "undefined" : (0, _typeof3.default)(val)) === "object" && val.buildPreset) val = val.buildPreset;
  225. if (typeof val !== "function" && options !== undefined) {
  226. throw new Error("Options " + (0, _stringify2.default)(options) + " passed to " + (presetLoc || "a preset") + " which does not accept options.");
  227. }
  228. if (typeof val === "function") val = val(context, options, { dirname: dirname });
  229. if ((typeof val === "undefined" ? "undefined" : (0, _typeof3.default)(val)) !== "object") {
  230. throw new Error("Unsupported preset format: " + val + ".");
  231. }
  232. onResolve && onResolve(val, presetLoc);
  233. } catch (e) {
  234. if (presetLoc) {
  235. e.message += " (While processing preset: " + (0, _stringify2.default)(presetLoc) + ")";
  236. }
  237. throw e;
  238. }
  239. return val;
  240. });
  241. };
  242. OptionManager.prototype.normaliseOptions = function normaliseOptions() {
  243. var opts = this.options;
  244. for (var _key3 in _config3.default) {
  245. var option = _config3.default[_key3];
  246. var val = opts[_key3];
  247. if (!val && option.optional) continue;
  248. if (option.alias) {
  249. opts[option.alias] = opts[option.alias] || val;
  250. } else {
  251. opts[_key3] = val;
  252. }
  253. }
  254. };
  255. OptionManager.prototype.init = function init() {
  256. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  257. for (var _iterator2 = (0, _buildConfigChain2.default)(opts, this.log), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
  258. var _ref3;
  259. if (_isArray2) {
  260. if (_i2 >= _iterator2.length) break;
  261. _ref3 = _iterator2[_i2++];
  262. } else {
  263. _i2 = _iterator2.next();
  264. if (_i2.done) break;
  265. _ref3 = _i2.value;
  266. }
  267. var _config = _ref3;
  268. this.mergeOptions(_config);
  269. }
  270. this.normaliseOptions(opts);
  271. return this.options;
  272. };
  273. return OptionManager;
  274. }();
  275. exports.default = OptionManager;
  276. OptionManager.memoisedPlugins = [];
  277. module.exports = exports["default"];