@parcel/transformer-babel 2.0.0-nightly.107 → 2.0.0-nightly.1070

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.
@@ -5,50 +5,67 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _plugin = require("@parcel/plugin");
8
+ var _babelErrorUtils = require("./babelErrorUtils");
9
9
 
10
- var _sourceMap = _interopRequireDefault(require("@parcel/source-map"));
10
+ function _plugin() {
11
+ const data = require("@parcel/plugin");
11
12
 
12
- var _generator = _interopRequireDefault(require("@babel/generator"));
13
+ _plugin = function () {
14
+ return data;
15
+ };
13
16
 
14
- var _semver = _interopRequireDefault(require("semver"));
17
+ return data;
18
+ }
15
19
 
16
- var _babel = _interopRequireDefault(require("./babel7"));
20
+ function _utils() {
21
+ const data = require("@parcel/utils");
17
22
 
18
- var _utils = require("@parcel/utils");
23
+ _utils = function () {
24
+ return data;
25
+ };
19
26
 
20
- var _config = require("./config");
27
+ return data;
28
+ }
21
29
 
22
- var _babelErrorUtils = require("./babelErrorUtils");
30
+ function _sourceMap() {
31
+ const data = _interopRequireDefault(require("@parcel/source-map"));
32
+
33
+ _sourceMap = function () {
34
+ return data;
35
+ };
36
+
37
+ return data;
38
+ }
39
+
40
+ function _semver() {
41
+ const data = _interopRequireDefault(require("semver"));
42
+
43
+ _semver = function () {
44
+ return data;
45
+ };
46
+
47
+ return data;
48
+ }
49
+
50
+ var _babel = _interopRequireDefault(require("./babel7"));
51
+
52
+ var _config = require("./config");
23
53
 
24
54
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
55
 
26
- var _default = new _plugin.Transformer({
27
- async loadConfig({
56
+ var _default = new (_plugin().Transformer)({
57
+ loadConfig({
28
58
  config,
29
59
  options,
30
60
  logger
31
61
  }) {
32
- await (0, _config.load)(config, options, logger);
33
- },
34
-
35
- preSerializeConfig({
36
- config
37
- }) {
38
- return (0, _config.preSerialize)(config);
39
- },
40
-
41
- postDeserializeConfig({
42
- config,
43
- options
44
- }) {
45
- return (0, _config.postDeserialize)(config, options);
62
+ return (0, _config.load)(config, options, logger);
46
63
  },
47
64
 
48
65
  canReuseAST({
49
66
  ast
50
67
  }) {
51
- return ast.type === 'babel' && _semver.default.satisfies(ast.version, '^7.0.0');
68
+ return ast.type === 'babel' && _semver().default.satisfies(ast.version, '^7.0.0');
52
69
  },
53
70
 
54
71
  async transform({
@@ -56,14 +73,21 @@ var _default = new _plugin.Transformer({
56
73
  config,
57
74
  options
58
75
  }) {
59
- // TODO: come up with a better name
60
76
  try {
61
- if (config === null || config === void 0 ? void 0 : config.config) {
62
- if (asset.meta.babelPlugins && Array.isArray(asset.meta.babelPlugins)) {
63
- // $FlowFixMe
64
- asset.ast = await (0, _babel.default)(asset, options, config, asset.meta.babelPlugins);
77
+ if (config !== null && config !== void 0 && config.config) {
78
+ if (asset.meta.babelPlugins != null && Array.isArray(asset.meta.babelPlugins)) {
79
+ await (0, _babel.default)({
80
+ asset,
81
+ options,
82
+ babelOptions: config,
83
+ additionalPlugins: asset.meta.babelPlugins
84
+ });
65
85
  } else {
66
- asset.ast = await (0, _babel.default)(asset, options, config);
86
+ await (0, _babel.default)({
87
+ asset,
88
+ options,
89
+ babelOptions: config
90
+ });
67
91
  }
68
92
  }
69
93
 
@@ -75,25 +99,51 @@ var _default = new _plugin.Transformer({
75
99
 
76
100
  async generate({
77
101
  asset,
102
+ ast,
78
103
  options
79
104
  }) {
80
- let sourceFileName = (0, _utils.relativeUrl)(options.projectRoot, asset.filePath);
105
+ let originalSourceMap = await asset.getMap();
106
+ let sourceFileName = (0, _utils().relativeUrl)(options.projectRoot, asset.filePath);
107
+ const babelCorePath = await options.packageManager.resolve('@babel/core', asset.filePath, {
108
+ range: '^7.12.0',
109
+ saveDev: true,
110
+ shouldAutoInstall: options.shouldAutoInstall
111
+ });
112
+ const {
113
+ default: generate
114
+ } = await options.packageManager.require('@babel/generator', babelCorePath.resolved);
115
+ let {
116
+ code,
117
+ rawMappings
118
+ } = generate(ast.program, {
119
+ sourceFileName,
120
+ sourceMaps: !!asset.env.sourceMap,
121
+ comments: true
122
+ });
123
+ let map = new (_sourceMap().default)(options.projectRoot);
124
+
125
+ if (rawMappings) {
126
+ map.addIndexedMappings(rawMappings);
127
+ }
81
128
 
82
- try {
83
- // $FlowFixMe: figure out how to make AST required in generate method
84
- let generated = (0, _generator.default)(asset.ast.program, {
85
- sourceMaps: options.sourceMaps,
86
- sourceFileName: sourceFileName
87
- });
88
- return {
89
- code: generated.code,
90
- map: new _sourceMap.default(generated.rawMappings, {
91
- [sourceFileName]: null
92
- })
93
- };
94
- } catch (e) {
95
- throw await (0, _babelErrorUtils.babelErrorEnhancer)(e, asset);
129
+ if (originalSourceMap) {
130
+ // The babel AST already contains the correct mappings, but not the source contents.
131
+ // We need to copy over the source contents from the original map.
132
+ let sourcesContent = originalSourceMap.getSourcesContentMap();
133
+
134
+ for (let filePath in sourcesContent) {
135
+ let content = sourcesContent[filePath];
136
+
137
+ if (content != null) {
138
+ map.setSourceContent(filePath, content);
139
+ }
140
+ }
96
141
  }
142
+
143
+ return {
144
+ content: code,
145
+ map
146
+ };
97
147
  }
98
148
 
99
149
  });
package/lib/babel7.js CHANGED
@@ -5,61 +5,94 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = babel7;
7
7
 
8
- var _package = _interopRequireDefault(require("../package.json"));
8
+ function _assert() {
9
+ const data = _interopRequireDefault(require("assert"));
9
10
 
10
- var _assert = _interopRequireDefault(require("assert"));
11
+ _assert = function () {
12
+ return data;
13
+ };
11
14
 
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ return data;
16
+ }
17
+
18
+ function _utils() {
19
+ const data = require("@parcel/utils");
20
+
21
+ _utils = function () {
22
+ return data;
23
+ };
13
24
 
14
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
25
+ return data;
26
+ }
15
27
 
16
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
28
+ var _remapAstLocations = require("./remapAstLocations");
17
29
 
18
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
30
+ var _package = _interopRequireDefault(require("../package.json"));
31
+
32
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
33
 
20
34
  const transformerVersion = _package.default.version;
21
- (0, _assert.default)(typeof transformerVersion === 'string');
35
+ (0, _assert().default)(typeof transformerVersion === 'string');
22
36
 
23
- async function babel7(asset, options, babelOptions, additionalPlugins = []) {
24
- // If this is an internally generated config, use our internal @babel/core,
25
- // otherwise require a local version from the package we're compiling.
26
- let babel = babelOptions.internal ? require('@babel/core') : await options.packageManager.require('@babel/core', asset.filePath);
37
+ async function babel7(opts) {
38
+ var _babelOptions$config$, _babelOptions$config$2, _babelOptions$syntaxP;
27
39
 
28
- let config = _objectSpread({}, babelOptions.config, {
40
+ let {
41
+ asset,
42
+ options,
43
+ babelOptions,
44
+ additionalPlugins = []
45
+ } = opts;
46
+ const babelCore = await options.packageManager.require('@babel/core', asset.filePath, {
47
+ range: '^7.12.0',
48
+ saveDev: true,
49
+ shouldAutoInstall: options.shouldAutoInstall
50
+ });
51
+ let config = { ...babelOptions.config,
29
52
  plugins: additionalPlugins.concat(babelOptions.config.plugins),
30
53
  code: false,
31
54
  ast: true,
32
55
  filename: asset.filePath,
33
56
  babelrc: false,
34
57
  configFile: false,
35
- parserOpts: _objectSpread({}, babelOptions.config.parserOpts, {
58
+ parserOpts: { ...babelOptions.config.parserOpts,
59
+ sourceFilename: (0, _utils().relativeUrl)(options.projectRoot, asset.filePath),
36
60
  allowReturnOutsideFunction: true,
37
61
  strictMode: false,
38
62
  sourceType: 'module',
39
- plugins: ['dynamicImport']
40
- }),
63
+ plugins: [...((_babelOptions$config$ = (_babelOptions$config$2 = babelOptions.config.parserOpts) === null || _babelOptions$config$2 === void 0 ? void 0 : _babelOptions$config$2.plugins) !== null && _babelOptions$config$ !== void 0 ? _babelOptions$config$ : []), ...((_babelOptions$syntaxP = babelOptions.syntaxPlugins) !== null && _babelOptions$syntaxP !== void 0 ? _babelOptions$syntaxP : []), // Applied by preset-env
64
+ 'classProperties', 'classPrivateProperties', 'classPrivateMethods', 'exportDefaultFrom' // 'topLevelAwait'
65
+ ]
66
+ },
41
67
  caller: {
42
68
  name: 'parcel',
43
69
  version: transformerVersion,
44
- targets: JSON.stringify(babelOptions.targets)
70
+ targets: JSON.stringify(babelOptions.targets),
71
+ outputFormat: asset.env.outputFormat
45
72
  }
46
- });
47
-
48
- let code = await asset.getCode();
73
+ };
74
+ let ast = await asset.getAST();
49
75
  let res;
50
76
 
51
- if (asset.ast) {
52
- res = babel.transformFromAstSync(asset.ast.program, code, config);
77
+ if (ast) {
78
+ res = await babelCore.transformFromAstAsync(ast.program, asset.isASTDirty() ? undefined : await asset.getCode(), config);
53
79
  } else {
54
- res = babel.transformSync(code, config);
80
+ res = await babelCore.transformAsync(await asset.getCode(), config);
81
+
82
+ if (res.ast) {
83
+ let map = await asset.getMap();
84
+
85
+ if (map) {
86
+ (0, _remapAstLocations.remapAstLocations)(babelCore.types, res.ast, map);
87
+ }
88
+ }
55
89
  }
56
90
 
57
91
  if (res.ast) {
58
- return {
92
+ asset.setAST({
59
93
  type: 'babel',
60
94
  version: '7.0.0',
61
- program: res.ast,
62
- isDirty: true
63
- };
95
+ program: res.ast
96
+ });
64
97
  }
65
98
  }
@@ -7,7 +7,8 @@ exports.babelErrorEnhancer = babelErrorEnhancer;
7
7
 
8
8
  async function babelErrorEnhancer(error, asset) {
9
9
  if (error.loc) {
10
- error.message = error.message.slice(asset.filePath.length + 1, error.message.indexOf('\n')).trim();
10
+ let start = error.message.startsWith(asset.filePath) ? asset.filePath.length + 1 : 0;
11
+ error.message = error.message.slice(start).split('\n')[0].trim();
11
12
  }
12
13
 
13
14
  error.source = await asset.getCode();