@parcel/transformer-babel 2.0.0-nightly.127 → 2.0.0-nightly.1273

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,65 +5,92 @@ 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({
55
72
  asset,
56
73
  config,
74
+ logger,
57
75
  options
58
76
  }) {
59
- // TODO: come up with a better name
60
77
  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);
78
+ if (config !== null && config !== void 0 && config.config) {
79
+ if (asset.meta.babelPlugins != null && Array.isArray(asset.meta.babelPlugins)) {
80
+ await (0, _babel.default)({
81
+ asset,
82
+ options,
83
+ logger,
84
+ babelOptions: config,
85
+ additionalPlugins: asset.meta.babelPlugins
86
+ });
65
87
  } else {
66
- asset.ast = await (0, _babel.default)(asset, options, config);
88
+ await (0, _babel.default)({
89
+ asset,
90
+ options,
91
+ logger,
92
+ babelOptions: config
93
+ });
67
94
  }
68
95
  }
69
96
 
@@ -75,25 +102,51 @@ var _default = new _plugin.Transformer({
75
102
 
76
103
  async generate({
77
104
  asset,
105
+ ast,
78
106
  options
79
107
  }) {
80
- let sourceFileName = (0, _utils.relativeUrl)(options.projectRoot, asset.filePath);
108
+ let originalSourceMap = await asset.getMap();
109
+ let sourceFileName = (0, _utils().relativeUrl)(options.projectRoot, asset.filePath);
110
+ const babelCorePath = await options.packageManager.resolve('@babel/core', asset.filePath, {
111
+ range: '^7.12.0',
112
+ saveDev: true,
113
+ shouldAutoInstall: options.shouldAutoInstall
114
+ });
115
+ const {
116
+ default: generate
117
+ } = await options.packageManager.require('@babel/generator', babelCorePath.resolved);
118
+ let {
119
+ code,
120
+ rawMappings
121
+ } = generate(ast.program, {
122
+ sourceFileName,
123
+ sourceMaps: !!asset.env.sourceMap,
124
+ comments: true
125
+ });
126
+ let map = new (_sourceMap().default)(options.projectRoot);
127
+
128
+ if (rawMappings) {
129
+ map.addIndexedMappings(rawMappings);
130
+ }
81
131
 
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);
132
+ if (originalSourceMap) {
133
+ // The babel AST already contains the correct mappings, but not the source contents.
134
+ // We need to copy over the source contents from the original map.
135
+ let sourcesContent = originalSourceMap.getSourcesContentMap();
136
+
137
+ for (let filePath in sourcesContent) {
138
+ let content = sourcesContent[filePath];
139
+
140
+ if (content != null) {
141
+ map.setSourceContent(filePath, content);
142
+ }
143
+ }
96
144
  }
145
+
146
+ return {
147
+ content: code,
148
+ map
149
+ };
97
150
  }
98
151
 
99
152
  });
package/lib/babel7.js CHANGED
@@ -5,65 +5,133 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = babel7;
7
7
 
8
- var _assert = _interopRequireDefault(require("assert"));
8
+ function _assert() {
9
+ const data = _interopRequireDefault(require("assert"));
9
10
 
10
- var _constants = require("./constants");
11
+ _assert = function () {
12
+ return data;
13
+ };
11
14
 
12
- var _package = _interopRequireDefault(require("../package.json"));
15
+ return data;
16
+ }
13
17
 
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ function _path() {
19
+ const data = _interopRequireDefault(require("path"));
20
+
21
+ _path = function () {
22
+ return data;
23
+ };
24
+
25
+ return data;
26
+ }
27
+
28
+ function _diagnostic() {
29
+ const data = require("@parcel/diagnostic");
30
+
31
+ _diagnostic = function () {
32
+ return data;
33
+ };
15
34
 
16
- 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; }
35
+ return data;
36
+ }
17
37
 
18
- 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; }
38
+ function _utils() {
39
+ const data = require("@parcel/utils");
19
40
 
20
- 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; }
41
+ _utils = function () {
42
+ return data;
43
+ };
44
+
45
+ return data;
46
+ }
47
+
48
+ var _remapAstLocations = require("./remapAstLocations");
49
+
50
+ var _package = _interopRequireDefault(require("../package.json"));
51
+
52
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
53
 
22
54
  const transformerVersion = _package.default.version;
23
- (0, _assert.default)(typeof transformerVersion === 'string');
55
+ (0, _assert().default)(typeof transformerVersion === 'string');
24
56
 
25
- async function babel7(asset, options, babelOptions, additionalPlugins = []) {
26
- // If this is an internally generated config, use our internal @babel/core,
27
- // otherwise require a local version from the package we're compiling.
28
- let babel = babelOptions.internal ? require('@babel/core') : await options.packageManager.require('@babel/core', asset.filePath, {
29
- range: _constants.BABEL_RANGE
30
- });
57
+ async function babel7(opts) {
58
+ var _babelOptions$config$, _babelOptions$config$2, _babelOptions$syntaxP;
31
59
 
32
- let config = _objectSpread({}, babelOptions.config, {
60
+ let {
61
+ asset,
62
+ options,
63
+ babelOptions,
64
+ additionalPlugins = []
65
+ } = opts;
66
+ const babelCore = await options.packageManager.require('@babel/core', asset.filePath, {
67
+ range: '^7.12.0',
68
+ saveDev: true,
69
+ shouldAutoInstall: options.shouldAutoInstall
70
+ });
71
+ let config = { ...babelOptions.config,
33
72
  plugins: additionalPlugins.concat(babelOptions.config.plugins),
34
73
  code: false,
35
74
  ast: true,
36
75
  filename: asset.filePath,
37
76
  babelrc: false,
38
77
  configFile: false,
39
- parserOpts: _objectSpread({}, babelOptions.config.parserOpts, {
78
+ parserOpts: { ...babelOptions.config.parserOpts,
79
+ sourceFilename: (0, _utils().relativeUrl)(options.projectRoot, asset.filePath),
40
80
  allowReturnOutsideFunction: true,
41
81
  strictMode: false,
42
82
  sourceType: 'module',
43
- plugins: ['dynamicImport']
44
- }),
83
+ 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
84
+ 'classProperties', 'classPrivateProperties', 'classPrivateMethods', 'exportDefaultFrom' // 'topLevelAwait'
85
+ ]
86
+ },
45
87
  caller: {
46
88
  name: 'parcel',
47
89
  version: transformerVersion,
48
- targets: JSON.stringify(babelOptions.targets)
90
+ targets: JSON.stringify(babelOptions.targets),
91
+ outputFormat: asset.env.outputFormat
49
92
  }
50
- });
51
-
52
- let code = await asset.getCode();
93
+ };
94
+ let ast = await asset.getAST();
53
95
  let res;
54
96
 
55
- if (asset.ast) {
56
- res = babel.transformFromAstSync(asset.ast.program, code, config);
97
+ if (ast) {
98
+ res = await babelCore.transformFromAstAsync(ast.program, asset.isASTDirty() ? undefined : await asset.getCode(), config);
57
99
  } else {
58
- res = babel.transformSync(code, config);
100
+ res = await babelCore.transformAsync(await asset.getCode(), config);
101
+
102
+ if (res.ast) {
103
+ let map = await asset.getMap();
104
+
105
+ if (map) {
106
+ (0, _remapAstLocations.remapAstLocations)(babelCore.types, res.ast, map);
107
+ }
108
+ }
109
+
110
+ if (res.externalDependencies) {
111
+ for (let f of res.externalDependencies) {
112
+ if (!_path().default.isAbsolute(f)) {
113
+ opts.logger.warn({
114
+ message: (0, _diagnostic().md)`Ignoring non-absolute Babel external dependency: ${f}`,
115
+ hints: ['Please report this to the corresponding Babel plugin and/or to Parcel.']
116
+ });
117
+ } else {
118
+ if (await options.inputFS.exists(f)) {
119
+ asset.invalidateOnFileChange(f);
120
+ } else {
121
+ asset.invalidateOnFileCreate({
122
+ filePath: f
123
+ });
124
+ }
125
+ }
126
+ }
127
+ }
59
128
  }
60
129
 
61
130
  if (res.ast) {
62
- return {
131
+ asset.setAST({
63
132
  type: 'babel',
64
133
  version: '7.0.0',
65
- program: res.ast,
66
- isDirty: true
67
- };
134
+ program: res.ast
135
+ });
68
136
  }
69
137
  }
@@ -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();