normalize-options.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.validateModulesOption = exports.validateSpecOption = exports.validateLooseOption = exports.validateBoolOption = exports.checkDuplicateIncludeExcludes = exports.normalizePluginNames = exports.normalizePluginName = exports.validateIncludesAndExcludes = undefined;
  4. exports.default = normalizeOptions;
  5. var _invariant = require("invariant");
  6. var _invariant2 = _interopRequireDefault(_invariant);
  7. var _builtIns = require("../data/built-ins.json");
  8. var _builtIns2 = _interopRequireDefault(_builtIns);
  9. var _defaultIncludes = require("./default-includes");
  10. var _moduleTransformations = require("./module-transformations");
  11. var _moduleTransformations2 = _interopRequireDefault(_moduleTransformations);
  12. var _plugins = require("../data/plugins.json");
  13. var _plugins2 = _interopRequireDefault(_plugins);
  14. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  15. var validIncludesAndExcludes = [].concat(Object.keys(_plugins2.default), Object.keys(_moduleTransformations2.default).map(function (m) {
  16. return _moduleTransformations2.default[m];
  17. }), Object.keys(_builtIns2.default), _defaultIncludes.defaultWebIncludes);
  18. var hasBeenWarned = false;
  19. var validateIncludesAndExcludes = exports.validateIncludesAndExcludes = function validateIncludesAndExcludes() {
  20. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  21. var type = arguments[1];
  22. (0, _invariant2.default)(Array.isArray(opts), "Invalid Option: The '" + type + "' option must be an Array<String> of plugins/built-ins");
  23. var unknownOpts = [];
  24. opts.forEach(function (opt) {
  25. if (validIncludesAndExcludes.indexOf(opt) === -1) {
  26. unknownOpts.push(opt);
  27. }
  28. });
  29. (0, _invariant2.default)(unknownOpts.length === 0, "Invalid Option: The plugins/built-ins '" + unknownOpts + "' passed to the '" + type + "' option are not\n valid. Please check data/[plugin-features|built-in-features].js in babel-preset-env");
  30. return opts;
  31. };
  32. var normalizePluginName = exports.normalizePluginName = function normalizePluginName(plugin) {
  33. return plugin.replace(/^babel-plugin-/, "");
  34. };
  35. var normalizePluginNames = exports.normalizePluginNames = function normalizePluginNames(plugins) {
  36. return plugins.map(normalizePluginName);
  37. };
  38. var checkDuplicateIncludeExcludes = exports.checkDuplicateIncludeExcludes = function checkDuplicateIncludeExcludes() {
  39. var include = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  40. var exclude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  41. var duplicates = include.filter(function (opt) {
  42. return exclude.indexOf(opt) >= 0;
  43. });
  44. (0, _invariant2.default)(duplicates.length === 0, "Invalid Option: The plugins/built-ins '" + duplicates + "' were found in both the \"include\" and\n \"exclude\" options.");
  45. };
  46. var validateBoolOption = exports.validateBoolOption = function validateBoolOption(name, value, defaultValue) {
  47. if (typeof value === "undefined") {
  48. value = defaultValue;
  49. }
  50. if (typeof value !== "boolean") {
  51. throw new Error("Preset env: '" + name + "' option must be a boolean.");
  52. }
  53. return value;
  54. };
  55. var validateLooseOption = exports.validateLooseOption = function validateLooseOption(looseOpt) {
  56. return validateBoolOption("loose", looseOpt, false);
  57. };
  58. var validateSpecOption = exports.validateSpecOption = function validateSpecOption(specOpt) {
  59. return validateBoolOption("spec", specOpt, false);
  60. };
  61. var validateModulesOption = exports.validateModulesOption = function validateModulesOption() {
  62. var modulesOpt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "commonjs";
  63. (0, _invariant2.default)(modulesOpt === false || Object.keys(_moduleTransformations2.default).indexOf(modulesOpt) > -1, "Invalid Option: The 'modules' option must be either 'false' to indicate no modules, or a\n module type which can be be one of: 'commonjs' (default), 'amd', 'umd', 'systemjs'.");
  64. return modulesOpt;
  65. };
  66. function normalizeOptions(opts) {
  67. // TODO: remove whitelist in favor of include in next major
  68. if (opts.whitelist && !hasBeenWarned) {
  69. console.warn("Deprecation Warning: The \"whitelist\" option has been deprecated in favor of \"include\" to\n match the newly added \"exclude\" option (instead of \"blacklist\").");
  70. hasBeenWarned = true;
  71. }
  72. (0, _invariant2.default)(!(opts.whitelist && opts.include), "Invalid Option: The \"whitelist\" and the \"include\" option are the same and one can be used at\n a time");
  73. if (opts.exclude) {
  74. opts.exclude = normalizePluginNames(opts.exclude);
  75. }
  76. if (opts.whitelist || opts.include) {
  77. opts.include = normalizePluginNames(opts.whitelist || opts.include);
  78. }
  79. checkDuplicateIncludeExcludes(opts.include, opts.exclude);
  80. return {
  81. debug: opts.debug,
  82. exclude: validateIncludesAndExcludes(opts.exclude, "exclude"),
  83. include: validateIncludesAndExcludes(opts.include, "include"),
  84. loose: validateLooseOption(opts.loose),
  85. moduleType: validateModulesOption(opts.modules),
  86. spec: validateSpecOption(opts.spec),
  87. targets: opts.targets,
  88. useBuiltIns: opts.useBuiltIns
  89. };
  90. }