UNPKG

2.77 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.enginesToBabelTargets = enginesToBabelTargets;
7exports.getMinSemver = getMinSemver;
8
9var _assert = _interopRequireDefault(require("assert"));
10
11var _semver = _interopRequireDefault(require("semver"));
12
13function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
15// List of browsers to exclude when the esmodule target is specified.
16// Based on https://caniuse.com/#feat=es6-module
17const ESMODULE_BROWSERS = ['not ie <= 11', 'not edge < 16', 'not firefox < 60', 'not chrome < 61', 'not safari < 11', 'not opera < 48', 'not ios_saf < 11', 'not op_mini all', 'not android < 76', 'not blackberry > 0', 'not op_mob > 0', 'not and_chr < 76', 'not and_ff < 68', 'not ie_mob > 0', 'not and_uc > 0', 'not samsung < 8.2', 'not and_qq > 0', 'not baidu > 0', 'not kaios > 0'];
18
19function enginesToBabelTargets(env) {
20 // "Targets" is the name @babel/preset-env uses for what Parcel calls engines.
21 // This should not be confused with Parcel's own targets.
22 // Unlike Parcel's engines, @babel/preset-env expects to work with minimum
23 // versions, not semver ranges, of its targets.
24 let targets = {};
25
26 for (let engineName of Object.keys(env.engines)) {
27 let engineValue = env.engines[engineName]; // if the engineValue is a string, it might be a semver range. Use the minimum
28 // possible version instead.
29
30 if (engineName === 'browsers') {
31 targets[engineName] = engineValue;
32 } else {
33 var _minVersion;
34
35 (0, _assert.default)(typeof engineValue === 'string');
36 let minVersion = getMinSemver(engineValue);
37 targets[engineName] = (_minVersion = minVersion) !== null && _minVersion !== void 0 ? _minVersion : engineValue;
38 }
39 }
40
41 if (env.outputFormat === 'esmodule' && env.isBrowser()) {
42 // If there is already a browsers target, add a blacklist to exclude
43 // instead of using babel's esmodules target. This allows specifying
44 // a newer set of browsers than the baseline esmodule support list.
45 // See https://github.com/babel/babel/issues/8809.
46 if (targets.browsers) {
47 let browsers = Array.isArray(targets.browsers) ? targets.browsers : [targets.browsers];
48 targets.browsers = [...browsers, ...ESMODULE_BROWSERS];
49 } else {
50 targets.esmodules = true;
51 }
52 }
53
54 return targets;
55} // TODO: Replace with `minVersion` (https://github.com/npm/node-semver#ranges-1)
56// once semver has been upgraded across Parcel.
57
58
59function getMinSemver(version) {
60 try {
61 let range = new _semver.default.Range(version);
62 let sorted = range.set.sort((a, b) => a[0].semver.compare(b[0].semver));
63 return sorted[0][0].semver.version;
64 } catch (err) {
65 return null;
66 }
67}
\No newline at end of file