UNPKG

3.17 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = getBabelTargets;
7
8var _browserslist = _interopRequireDefault(require("browserslist"));
9
10var _semver = _interopRequireDefault(require("semver"));
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14const BROWSER_CONTEXT = new Set(['browser', 'web-worker', 'service-worker']); // https://github.com/browserslist/browserslist/blob/04d7b3cc6ebeb62baf6d62aeb90f1bfd0c11117c/test/config.test.js#L23
15
16/**
17 * Loads target node and browser versions from the following locations:
18 * - package.json engines field
19 * - package.json browserslist field
20 * - browserslist or .browserslistrc files
21 *
22 * "Targets" is the name @babel/preset-env uses for what Parcel calls engines.
23 * This should not be confused with Parcel's own targets.
24 * Unlike Parcel's engines, @babel/preset-env expects to work with minimum
25 * versions, not semver ranges, of its targets.
26 */
27async function getBabelTargets(config) {
28 let targets = {};
29 let compileTarget = BROWSER_CONTEXT.has(config.env.context) ? 'browsers' : config.env.context;
30 let pkg = await config.getPackage();
31 let packageEngines = pkg === null || pkg === void 0 ? void 0 : pkg.engines;
32
33 if (compileTarget === 'node') {
34 let nodeVersion = packageEngines === null || packageEngines === void 0 ? void 0 : packageEngines.node; // Use package.engines.node by default if we are compiling for node.
35
36 if (typeof nodeVersion === 'string') {
37 try {
38 targets.node = getMinSemver(nodeVersion);
39 } catch (e) {
40 throw new Error("Expected 'node' engine to be a valid Semver Range");
41 }
42 }
43 } else {
44 let browsers;
45
46 if (packageEngines && (typeof packageEngines.browsers === 'string' || Array.isArray(packageEngines.browsers))) {
47 browsers = packageEngines.browsers;
48 } else if (pkg && pkg.browserslist) {
49 browsers = pkg.browserslist;
50 } else {
51 let browserslist = await loadBrowserslist(config);
52
53 if (browserslist) {
54 browsers = browserslist;
55 }
56 } // Parse browser targets
57
58
59 if (typeof browsers === 'object' && browsers != null && !Array.isArray(browsers)) {
60 let env = process.env.NODE_ENV || 'development';
61 browsers = browsers[env] || browsers.defaults;
62 }
63
64 if (browsers) {
65 targets.browsers = (0, _browserslist.default)(browsers).sort();
66 }
67 } // Dont compile if we couldn't find any targets
68
69
70 if (Object.keys(targets).length === 0) {
71 return null;
72 }
73
74 return targets;
75}
76
77async function loadBrowserslist(config) {
78 let browserslistConfig = await config.getConfig(['browserslist', '.browserslistrc'], {
79 parse: false
80 });
81
82 if (browserslistConfig) {
83 return _browserslist.default.parseConfig(browserslistConfig);
84 }
85} // TODO: Replace with `minVersion` (https://github.com/npm/node-semver#ranges-1)
86// once semver has been upgraded across Parcel.
87
88
89function getMinSemver(version) {
90 let range = new _semver.default.Range(version);
91 let sorted = range.set.sort((a, b) => a[0].semver.compare(b[0].semver));
92 return sorted[0][0].semver.version;
93}
\No newline at end of file