1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
6 |
|
7 | const browserslist = require('browserslist');
|
8 |
|
9 | const semver = require('semver');
|
10 |
|
11 | const Path = require('path');
|
12 |
|
13 | const DEFAULT_ENGINES = {
|
14 | browsers: ['> 0.25%'],
|
15 | node: '8'
|
16 | };
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | function getTargetEngines(_x, _x2) {
|
26 | return _getTargetEngines.apply(this, arguments);
|
27 | }
|
28 |
|
29 | function _getTargetEngines() {
|
30 | _getTargetEngines = (0, _asyncToGenerator2.default)(function* (asset, isTargetApp) {
|
31 | let targets = {};
|
32 | let path = isTargetApp ? Path.join(asset.options.rootDir, 'index') : asset.name;
|
33 | let compileTarget = asset.options.target === 'browser' ? 'browsers' : asset.options.target;
|
34 | let pkg = yield asset.getConfig(['package.json'], {
|
35 | path
|
36 | });
|
37 | let engines = pkg && pkg.engines;
|
38 | let nodeVersion = engines && getMinSemver(engines.node);
|
39 |
|
40 | if (compileTarget === 'node') {
|
41 |
|
42 | if (typeof nodeVersion === 'string') {
|
43 | targets.node = nodeVersion;
|
44 | }
|
45 | } else {
|
46 | if (engines && (typeof engines.browsers === 'string' || Array.isArray(engines.browsers))) {
|
47 | targets.browsers = engines.browsers;
|
48 | } else if (pkg && pkg.browserslist) {
|
49 | targets.browsers = pkg.browserslist;
|
50 | } else {
|
51 | let browserslist = yield loadBrowserslist(asset, path);
|
52 |
|
53 | if (browserslist) {
|
54 | targets.browsers = browserslist;
|
55 | } else {
|
56 | let babelTargets = yield loadBabelrc(asset, path);
|
57 |
|
58 | if (babelTargets && babelTargets.browsers) {
|
59 | targets.browsers = babelTargets.browsers;
|
60 | } else if (babelTargets && babelTargets.node && !nodeVersion) {
|
61 | nodeVersion = babelTargets.node;
|
62 | }
|
63 | }
|
64 | }
|
65 |
|
66 |
|
67 | if (!isTargetApp && !targets.browsers && typeof nodeVersion === 'string') {
|
68 | targets.node = nodeVersion;
|
69 | }
|
70 | }
|
71 |
|
72 |
|
73 | if (isTargetApp && !targets[compileTarget] && DEFAULT_ENGINES[compileTarget]) {
|
74 | targets[compileTarget] = DEFAULT_ENGINES[compileTarget];
|
75 | }
|
76 |
|
77 |
|
78 | if (targets.browsers) {
|
79 | if (typeof targets.browsers === 'object' && !Array.isArray(targets.browsers)) {
|
80 | let env = asset.options.production ? 'production' : process.env.NODE_ENV || 'development';
|
81 | targets.browsers = targets.browsers[env] || targets.browsers.defaults;
|
82 | }
|
83 |
|
84 | if (targets.browsers) {
|
85 | targets.browsers = browserslist(targets.browsers).sort();
|
86 | }
|
87 | }
|
88 |
|
89 |
|
90 | if (Object.keys(targets).length === 0) {
|
91 | return null;
|
92 | }
|
93 |
|
94 | return targets;
|
95 | });
|
96 | return _getTargetEngines.apply(this, arguments);
|
97 | }
|
98 |
|
99 | function getMinSemver(version) {
|
100 | try {
|
101 | let range = new semver.Range(version);
|
102 | let sorted = range.set.sort((a, b) => a[0].semver.compare(b[0].semver));
|
103 | return sorted[0][0].semver.version;
|
104 | } catch (err) {
|
105 | return null;
|
106 | }
|
107 | }
|
108 |
|
109 | function loadBrowserslist(_x3, _x4) {
|
110 | return _loadBrowserslist.apply(this, arguments);
|
111 | }
|
112 |
|
113 | function _loadBrowserslist() {
|
114 | _loadBrowserslist = (0, _asyncToGenerator2.default)(function* (asset, path) {
|
115 | let config = yield asset.getConfig(['browserslist', '.browserslistrc'], {
|
116 | path,
|
117 | load: false
|
118 | });
|
119 |
|
120 | if (config) {
|
121 | return browserslist.readConfig(config);
|
122 | }
|
123 | });
|
124 | return _loadBrowserslist.apply(this, arguments);
|
125 | }
|
126 |
|
127 | function loadBabelrc(_x5, _x6) {
|
128 | return _loadBabelrc.apply(this, arguments);
|
129 | }
|
130 |
|
131 | function _loadBabelrc() {
|
132 | _loadBabelrc = (0, _asyncToGenerator2.default)(function* (asset, path) {
|
133 | let config = yield asset.getConfig(['.babelrc', '.babelrc.js'], {
|
134 | path
|
135 | });
|
136 |
|
137 | if (config && config.presets) {
|
138 | let env = config.presets.find(plugin => Array.isArray(plugin) && (plugin[0] === 'env' || plugin[0] === '@babel/env'));
|
139 |
|
140 | if (env && env[1] && env[1].targets) {
|
141 | return env[1].targets;
|
142 | }
|
143 | }
|
144 | });
|
145 | return _loadBabelrc.apply(this, arguments);
|
146 | }
|
147 |
|
148 | module.exports = getTargetEngines; |
\ | No newline at end of file |