1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.transformIncludesAndExcludes = exports.isPluginRequired = undefined;
|
7 | exports.default = buildPreset;
|
8 |
|
9 | var _semver = require("semver");
|
10 |
|
11 | var _semver2 = _interopRequireDefault(_semver);
|
12 |
|
13 | var _builtIns = require("../data/built-ins.json");
|
14 |
|
15 | var _builtIns2 = _interopRequireDefault(_builtIns);
|
16 |
|
17 | var _defaultIncludes = require("./default-includes");
|
18 |
|
19 | var _moduleTransformations = require("./module-transformations");
|
20 |
|
21 | var _moduleTransformations2 = _interopRequireDefault(_moduleTransformations);
|
22 |
|
23 | var _normalizeOptions = require("./normalize-options.js");
|
24 |
|
25 | var _normalizeOptions2 = _interopRequireDefault(_normalizeOptions);
|
26 |
|
27 | var _plugins = require("../data/plugins.json");
|
28 |
|
29 | var _plugins2 = _interopRequireDefault(_plugins);
|
30 |
|
31 | var _transformPolyfillRequirePlugin = require("./transform-polyfill-require-plugin");
|
32 |
|
33 | var _transformPolyfillRequirePlugin2 = _interopRequireDefault(_transformPolyfillRequirePlugin);
|
34 |
|
35 | var _targetsParser = require("./targets-parser");
|
36 |
|
37 | var _targetsParser2 = _interopRequireDefault(_targetsParser);
|
38 |
|
39 | var _utils = require("./utils");
|
40 |
|
41 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
42 |
|
43 | function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | var isPluginRequired = exports.isPluginRequired = function isPluginRequired(supportedEnvironments, plugin) {
|
57 | var targetEnvironments = Object.keys(supportedEnvironments);
|
58 |
|
59 | if (targetEnvironments.length === 0) {
|
60 | return true;
|
61 | }
|
62 |
|
63 | var isRequiredForEnvironments = targetEnvironments.filter(function (environment) {
|
64 |
|
65 | if (!plugin[environment]) {
|
66 | return true;
|
67 | }
|
68 |
|
69 | var lowestImplementedVersion = plugin[environment];
|
70 | var lowestTargetedVersion = supportedEnvironments[environment];
|
71 |
|
72 | if (!_semver2.default.valid(lowestTargetedVersion)) {
|
73 | throw new Error(
|
74 |
|
75 | "Invalid version passed for target \"" + environment + "\": \"" + lowestTargetedVersion + "\". Versions must be in semver format (major.minor.patch)");
|
76 | }
|
77 |
|
78 | return _semver2.default.gt((0, _utils.semverify)(lowestImplementedVersion), lowestTargetedVersion);
|
79 | });
|
80 |
|
81 | return isRequiredForEnvironments.length > 0;
|
82 | };
|
83 |
|
84 | var hasBeenLogged = false;
|
85 |
|
86 | var logPlugin = function logPlugin(plugin, targets, list) {
|
87 | var envList = list[plugin] || {};
|
88 | var filteredList = Object.keys(targets).reduce(function (a, b) {
|
89 | if (!envList[b] || _semver2.default.lt(targets[b], (0, _utils.semverify)(envList[b]))) {
|
90 | a[b] = (0, _utils.prettifyVersion)(targets[b]);
|
91 | }
|
92 | return a;
|
93 | }, {});
|
94 | var logStr = " " + plugin + " " + JSON.stringify(filteredList);
|
95 | console.log(logStr);
|
96 | };
|
97 |
|
98 | var filterItem = function filterItem(targets, exclusions, list, item) {
|
99 | var isDefault = _defaultIncludes.defaultWebIncludes.indexOf(item) >= 0;
|
100 | var notExcluded = exclusions.indexOf(item) === -1;
|
101 |
|
102 | if (isDefault) return notExcluded;
|
103 | var isRequired = isPluginRequired(targets, list[item]);
|
104 | return isRequired && notExcluded;
|
105 | };
|
106 |
|
107 | var getBuiltInTargets = function getBuiltInTargets(targets) {
|
108 | var builtInTargets = (0, _utils._extends)({}, targets);
|
109 | if (builtInTargets.uglify != null) {
|
110 | delete builtInTargets.uglify;
|
111 | }
|
112 | return builtInTargets;
|
113 | };
|
114 |
|
115 | var transformIncludesAndExcludes = exports.transformIncludesAndExcludes = function transformIncludesAndExcludes(opts) {
|
116 | return {
|
117 | all: opts,
|
118 | plugins: opts.filter(function (opt) {
|
119 | return !opt.match(/^(es\d+|web)\./);
|
120 | }),
|
121 | builtIns: opts.filter(function (opt) {
|
122 | return opt.match(/^(es\d+|web)\./);
|
123 | })
|
124 | };
|
125 | };
|
126 |
|
127 | function getPlatformSpecificDefaultFor(targets) {
|
128 | var targetNames = Object.keys(targets);
|
129 | var isAnyTarget = !targetNames.length;
|
130 | var isWebTarget = targetNames.some(function (name) {
|
131 | return name !== "node";
|
132 | });
|
133 |
|
134 | return isAnyTarget || isWebTarget ? _defaultIncludes.defaultWebIncludes : [];
|
135 | }
|
136 |
|
137 | function buildPreset(context) {
|
138 | var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
139 |
|
140 | var validatedOptions = (0, _normalizeOptions2.default)(opts);
|
141 | var debug = validatedOptions.debug,
|
142 | loose = validatedOptions.loose,
|
143 | moduleType = validatedOptions.moduleType,
|
144 | spec = validatedOptions.spec,
|
145 | useBuiltIns = validatedOptions.useBuiltIns;
|
146 |
|
147 |
|
148 | var targets = (0, _targetsParser2.default)(validatedOptions.targets);
|
149 | var include = transformIncludesAndExcludes(validatedOptions.include);
|
150 | var exclude = transformIncludesAndExcludes(validatedOptions.exclude);
|
151 |
|
152 | var filterPlugins = filterItem.bind(null, targets, exclude.plugins, _plugins2.default);
|
153 | var transformations = Object.keys(_plugins2.default).filter(filterPlugins).concat(include.plugins);
|
154 |
|
155 | var polyfills = void 0;
|
156 | var polyfillTargets = void 0;
|
157 | if (useBuiltIns) {
|
158 | polyfillTargets = getBuiltInTargets(targets);
|
159 | var filterBuiltIns = filterItem.bind(null, polyfillTargets, exclude.builtIns, _builtIns2.default);
|
160 | polyfills = Object.keys(_builtIns2.default).concat(getPlatformSpecificDefaultFor(polyfillTargets)).filter(filterBuiltIns).concat(include.builtIns);
|
161 | }
|
162 |
|
163 | if (debug && !hasBeenLogged) {
|
164 | hasBeenLogged = true;
|
165 | console.log("babel-preset-env: `DEBUG` option");
|
166 | console.log("\nUsing targets:");
|
167 | console.log(JSON.stringify((0, _utils.prettifyTargets)(targets), null, 2));
|
168 | console.log("\nModules transform: " + moduleType);
|
169 | console.log("\nUsing plugins:");
|
170 | transformations.forEach(function (transform) {
|
171 | logPlugin(transform, targets, _plugins2.default);
|
172 | });
|
173 | if (useBuiltIns && polyfills.length) {
|
174 | console.log("\nUsing polyfills:");
|
175 | polyfills.forEach(function (polyfill) {
|
176 | logPlugin(polyfill, polyfillTargets, _builtIns2.default);
|
177 | });
|
178 | }
|
179 | }
|
180 |
|
181 | var regenerator = transformations.indexOf("transform-regenerator") >= 0;
|
182 | var modulePlugin = moduleType !== false && _moduleTransformations2.default[moduleType];
|
183 | var plugins = [];
|
184 |
|
185 |
|
186 |
|
187 | modulePlugin && plugins.push([require("babel-plugin-" + modulePlugin), { loose: loose }]);
|
188 |
|
189 | plugins.push.apply(plugins, _toConsumableArray(transformations.map(function (pluginName) {
|
190 | return [require("babel-plugin-" + pluginName), { spec: spec, loose: loose }];
|
191 | })));
|
192 |
|
193 | useBuiltIns && plugins.push([_transformPolyfillRequirePlugin2.default, { polyfills: polyfills, regenerator: regenerator }]);
|
194 |
|
195 | return {
|
196 | plugins: plugins
|
197 | };
|
198 | } |
\ | No newline at end of file |