@parcel/transformer-babel 2.0.0-beta.3.1 → 2.0.0-dev.1510
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/BabelTransformer.js +28 -81
- package/lib/babel7.js +56 -52
- package/lib/babelErrorUtils.js +15 -0
- package/lib/config.js +164 -124
- package/lib/constants.js +2 -3
- package/lib/flow.js +26 -7
- package/lib/jsx.js +2 -10
- package/lib/remapAstLocations.js +55 -0
- package/lib/utils.js +21 -38
- package/package.json +13 -17
- package/src/BabelTransformer.js +29 -11
- package/src/babel7.js +64 -12
- package/src/babelErrorUtils.js +30 -0
- package/src/config.js +209 -58
- package/src/constants.js +1 -1
- package/src/flow.js +36 -5
- package/src/jsx.js +2 -1
- package/src/remapAstLocations.js +70 -0
- package/src/utils.js +17 -14
- package/lib/astConverter.js +0 -114
- package/lib/getBabelTargets.js +0 -104
- package/src/astConverter.js +0 -102
- package/src/getBabelTargets.js +0 -97
package/lib/getBabelTargets.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = getBabelTargets;
|
|
7
|
-
|
|
8
|
-
function _browserslist() {
|
|
9
|
-
const data = _interopRequireDefault(require("browserslist"));
|
|
10
|
-
|
|
11
|
-
_browserslist = function () {
|
|
12
|
-
return data;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
return data;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function _semver() {
|
|
19
|
-
const data = _interopRequireDefault(require("semver"));
|
|
20
|
-
|
|
21
|
-
_semver = function () {
|
|
22
|
-
return data;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
return data;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
-
|
|
30
|
-
const BROWSER_CONTEXT = new Set(['browser', 'web-worker', 'service-worker']); // https://github.com/browserslist/browserslist/blob/04d7b3cc6ebeb62baf6d62aeb90f1bfd0c11117c/test/config.test.js#L23
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Loads target node and browser versions from the following locations:
|
|
34
|
-
* - package.json engines field
|
|
35
|
-
* - package.json browserslist field
|
|
36
|
-
* - browserslist or .browserslistrc files
|
|
37
|
-
*
|
|
38
|
-
* "Targets" is the name @babel/preset-env uses for what Parcel calls engines.
|
|
39
|
-
* This should not be confused with Parcel's own targets.
|
|
40
|
-
* Unlike Parcel's engines, @babel/preset-env expects to work with minimum
|
|
41
|
-
* versions, not semver ranges, of its targets.
|
|
42
|
-
*/
|
|
43
|
-
async function getBabelTargets(config) {
|
|
44
|
-
let targets = {};
|
|
45
|
-
let compileTarget = BROWSER_CONTEXT.has(config.env.context) ? 'browsers' : config.env.context;
|
|
46
|
-
let pkg = await config.getPackage();
|
|
47
|
-
let packageEngines = pkg === null || pkg === void 0 ? void 0 : pkg.engines;
|
|
48
|
-
|
|
49
|
-
if (compileTarget === 'node') {
|
|
50
|
-
let nodeVersion = packageEngines === null || packageEngines === void 0 ? void 0 : packageEngines.node; // Use package.engines.node by default if we are compiling for node.
|
|
51
|
-
|
|
52
|
-
if (typeof nodeVersion === 'string') {
|
|
53
|
-
try {
|
|
54
|
-
//$FlowFixMe catch error when minVersion() returned null
|
|
55
|
-
targets.node = _semver().default.minVersion(nodeVersion).version;
|
|
56
|
-
} catch (e) {
|
|
57
|
-
throw new Error("Expected 'node' engine to be a valid Semver Range");
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
} else {
|
|
61
|
-
let browsers;
|
|
62
|
-
|
|
63
|
-
if (packageEngines && (typeof packageEngines.browsers === 'string' || Array.isArray(packageEngines.browsers))) {
|
|
64
|
-
browsers = packageEngines.browsers;
|
|
65
|
-
} else if (pkg && pkg.browserslist) {
|
|
66
|
-
browsers = pkg.browserslist;
|
|
67
|
-
} else {
|
|
68
|
-
let browserslist = await loadBrowserslist(config);
|
|
69
|
-
|
|
70
|
-
if (browserslist) {
|
|
71
|
-
browsers = browserslist;
|
|
72
|
-
}
|
|
73
|
-
} // Parse browser targets
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (typeof browsers === 'object' && browsers != null && !Array.isArray(browsers)) {
|
|
77
|
-
var _process$env$NODE_ENV;
|
|
78
|
-
|
|
79
|
-
let env = (_process$env$NODE_ENV = process.env.NODE_ENV) !== null && _process$env$NODE_ENV !== void 0 ? _process$env$NODE_ENV : 'development';
|
|
80
|
-
browsers = browsers[env] || browsers.defaults;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (browsers != null) {
|
|
84
|
-
targets.browsers = (0, _browserslist().default)(browsers).sort();
|
|
85
|
-
}
|
|
86
|
-
} // Dont compile if we couldn't find any targets
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (Object.keys(targets).length === 0) {
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return targets;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
async function loadBrowserslist(config) {
|
|
97
|
-
let browserslistConfig = await config.getConfig(['browserslist', '.browserslistrc'], {
|
|
98
|
-
parse: false
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
if (browserslistConfig) {
|
|
102
|
-
return _browserslist().default.parseConfig(browserslistConfig.contents);
|
|
103
|
-
}
|
|
104
|
-
}
|
package/src/astConverter.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import traverse from '@babel/traverse';
|
|
2
|
-
|
|
3
|
-
// Convert between babel 7 and babel 6 AST
|
|
4
|
-
// More info on the AST Changes: https://babeljs.io/docs/en/v7-migration-api#ast-changes
|
|
5
|
-
export function babel7toBabel6(ast) {
|
|
6
|
-
const visitor = {
|
|
7
|
-
ArrowFunctionExpression: node => {
|
|
8
|
-
node.expression = node.body.type !== 'BlockStatement';
|
|
9
|
-
},
|
|
10
|
-
ExistsTypeAnnotation: node => {
|
|
11
|
-
node.type = 'ExistentialTypeParam';
|
|
12
|
-
},
|
|
13
|
-
NumberLiteralTypeAnnotation: node => {
|
|
14
|
-
node.type = 'NumericLiteralTypeAnnotation';
|
|
15
|
-
},
|
|
16
|
-
ObjectTypeIndexer: node => {
|
|
17
|
-
node.end++;
|
|
18
|
-
node.loc.end.column++;
|
|
19
|
-
},
|
|
20
|
-
ForOfStatement: node => {
|
|
21
|
-
node.type = 'ForAwaitStatement';
|
|
22
|
-
delete node.await;
|
|
23
|
-
},
|
|
24
|
-
SpreadElement: (node, path) => {
|
|
25
|
-
if (
|
|
26
|
-
path.parentPath.isObjectExpression() ||
|
|
27
|
-
path.parentPath.isArrayExpression()
|
|
28
|
-
) {
|
|
29
|
-
node.type = 'SpreadProperty';
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
RestElement: (node, path) => {
|
|
33
|
-
if (
|
|
34
|
-
path.parentPath.isObjectPattern() ||
|
|
35
|
-
path.parentPath.isArrayPattern()
|
|
36
|
-
) {
|
|
37
|
-
node.type = 'RestProperty';
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
traverse(ast, {
|
|
43
|
-
enter(path) {
|
|
44
|
-
if (path.node.variance && path.node.variance.type === 'Variance') {
|
|
45
|
-
path.node.variance = path.node.variance.kind;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
let visitorFunc = visitor[path.node.type];
|
|
49
|
-
if (visitorFunc) {
|
|
50
|
-
visitorFunc(path.node, path);
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
return ast;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export function babel6toBabel7(ast) {
|
|
59
|
-
const visitor = {
|
|
60
|
-
ArrowFunctionExpression: node => {
|
|
61
|
-
delete node.expression;
|
|
62
|
-
},
|
|
63
|
-
ExistentialTypeParam: node => {
|
|
64
|
-
node.type = 'ExistsTypeAnnotation';
|
|
65
|
-
},
|
|
66
|
-
NumericLiteralTypeAnnotation: node => {
|
|
67
|
-
node.type = 'NumberLiteralTypeAnnotation';
|
|
68
|
-
},
|
|
69
|
-
ObjectTypeIndexer: node => {
|
|
70
|
-
node.end--;
|
|
71
|
-
node.loc.end.column--;
|
|
72
|
-
},
|
|
73
|
-
ForAwaitStatement: node => {
|
|
74
|
-
node.type = 'ForOfStatement';
|
|
75
|
-
node.await = true;
|
|
76
|
-
},
|
|
77
|
-
SpreadProperty: node => {
|
|
78
|
-
node.type = 'SpreadElement';
|
|
79
|
-
},
|
|
80
|
-
RestProperty: node => {
|
|
81
|
-
node.type = 'RestElement';
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
traverse(ast, {
|
|
86
|
-
enter(path) {
|
|
87
|
-
if (path.node.variance && typeof path.node.variance === 'string') {
|
|
88
|
-
path.node.variance = {
|
|
89
|
-
type: 'VarianceNode',
|
|
90
|
-
kind: path.node.variance,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
let visitorFunc = visitor[path.node.type];
|
|
95
|
-
if (visitorFunc) {
|
|
96
|
-
visitorFunc(path.node);
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
return ast;
|
|
102
|
-
}
|
package/src/getBabelTargets.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
// @flow strict-local
|
|
2
|
-
|
|
3
|
-
import type {Config} from '@parcel/types';
|
|
4
|
-
import type {Targets as BabelTargets} from '@babel/preset-env';
|
|
5
|
-
|
|
6
|
-
import browserslist from 'browserslist';
|
|
7
|
-
import semver from 'semver';
|
|
8
|
-
|
|
9
|
-
const BROWSER_CONTEXT = new Set(['browser', 'web-worker', 'service-worker']);
|
|
10
|
-
|
|
11
|
-
// https://github.com/browserslist/browserslist/blob/04d7b3cc6ebeb62baf6d62aeb90f1bfd0c11117c/test/config.test.js#L23
|
|
12
|
-
type BrowserslistConfig = {|[string]: string | Array<string>|};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Loads target node and browser versions from the following locations:
|
|
16
|
-
* - package.json engines field
|
|
17
|
-
* - package.json browserslist field
|
|
18
|
-
* - browserslist or .browserslistrc files
|
|
19
|
-
*
|
|
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
|
-
*/
|
|
25
|
-
export default async function getBabelTargets(
|
|
26
|
-
config: Config,
|
|
27
|
-
): Promise<?BabelTargets> {
|
|
28
|
-
let targets = {};
|
|
29
|
-
let compileTarget = BROWSER_CONTEXT.has(config.env.context)
|
|
30
|
-
? 'browsers'
|
|
31
|
-
: config.env.context;
|
|
32
|
-
let pkg = await config.getPackage();
|
|
33
|
-
let packageEngines = pkg?.engines;
|
|
34
|
-
|
|
35
|
-
if (compileTarget === 'node') {
|
|
36
|
-
let nodeVersion = packageEngines?.node;
|
|
37
|
-
// Use package.engines.node by default if we are compiling for node.
|
|
38
|
-
if (typeof nodeVersion === 'string') {
|
|
39
|
-
try {
|
|
40
|
-
//$FlowFixMe catch error when minVersion() returned null
|
|
41
|
-
targets.node = semver.minVersion(nodeVersion).version;
|
|
42
|
-
} catch (e) {
|
|
43
|
-
throw new Error("Expected 'node' engine to be a valid Semver Range");
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
} else {
|
|
47
|
-
let browsers;
|
|
48
|
-
if (
|
|
49
|
-
packageEngines &&
|
|
50
|
-
(typeof packageEngines.browsers === 'string' ||
|
|
51
|
-
Array.isArray(packageEngines.browsers))
|
|
52
|
-
) {
|
|
53
|
-
browsers = packageEngines.browsers;
|
|
54
|
-
} else if (pkg && pkg.browserslist) {
|
|
55
|
-
browsers = pkg.browserslist;
|
|
56
|
-
} else {
|
|
57
|
-
let browserslist = await loadBrowserslist(config);
|
|
58
|
-
if (browserslist) {
|
|
59
|
-
browsers = browserslist;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Parse browser targets
|
|
64
|
-
if (
|
|
65
|
-
typeof browsers === 'object' &&
|
|
66
|
-
browsers != null &&
|
|
67
|
-
!Array.isArray(browsers)
|
|
68
|
-
) {
|
|
69
|
-
let env = process.env.NODE_ENV ?? 'development';
|
|
70
|
-
browsers = browsers[env] || browsers.defaults;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (browsers != null) {
|
|
74
|
-
targets.browsers = browserslist(browsers).sort();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Dont compile if we couldn't find any targets
|
|
79
|
-
if (Object.keys(targets).length === 0) {
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return targets;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
async function loadBrowserslist(config): Promise<?BrowserslistConfig> {
|
|
87
|
-
let browserslistConfig = await config.getConfig(
|
|
88
|
-
['browserslist', '.browserslistrc'],
|
|
89
|
-
{
|
|
90
|
-
parse: false,
|
|
91
|
-
},
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
if (browserslistConfig) {
|
|
95
|
-
return browserslist.parseConfig(browserslistConfig.contents);
|
|
96
|
-
}
|
|
97
|
-
}
|