@parcel/transformer-react-refresh-wrap 2.0.0-beta.1 → 2.0.0-nightly.1002

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,107 +5,71 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _semver = _interopRequireDefault(require("semver"));
8
+ function _path() {
9
+ const data = _interopRequireDefault(require("path"));
9
10
 
10
- var _path = _interopRequireDefault(require("path"));
11
+ _path = function () {
12
+ return data;
13
+ };
11
14
 
12
- var _babelAstUtils = require("@parcel/babel-ast-utils");
13
-
14
- var _plugin = require("@parcel/plugin");
15
-
16
- var _utils = require("@parcel/utils");
17
-
18
- var _template = _interopRequireDefault(require("@babel/template"));
15
+ return data;
16
+ }
19
17
 
20
- var t = _interopRequireWildcard(require("@babel/types"));
18
+ function _plugin() {
19
+ const data = require("@parcel/plugin");
21
20
 
22
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
21
+ _plugin = function () {
22
+ return data;
23
+ };
23
24
 
24
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+ return data;
26
+ }
25
27
 
26
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
29
 
28
- const WRAPPER = _path.default.join(__dirname, 'helpers', 'helpers.js');
29
-
30
- const wrapper = _template.default.statements(`
31
- var helpers = require(%%helper%%);
32
- var prevRefreshReg = window.$RefreshReg$;
33
- var prevRefreshSig = window.$RefreshSig$;
34
- helpers.prelude(module);
35
-
36
- try {
37
- %%module%%
38
- helpers.postlude(module);
39
- } finally {
40
- window.$RefreshReg$ = prevRefreshReg;
41
- window.$RefreshSig$ = prevRefreshSig;
42
- }
43
- `);
44
-
45
30
  function shouldExclude(asset, options) {
46
- return !asset.isSource || !options.hot || !asset.env.isBrowser() || options.mode !== 'development' || !asset.getDependencies().find(v => v.moduleSpecifier === 'react');
31
+ return !asset.isSource || !options.hmrOptions || !asset.env.isBrowser() || asset.env.isWorker() || asset.env.isWorklet() || options.mode !== 'development' || !asset.getDependencies().find(v => v.specifier === 'react' || v.specifier === 'react/jsx-runtime' || v.specifier === 'react/jsx-dev-runtime');
47
32
  }
48
33
 
49
- var _default = new _plugin.Transformer({
50
- canReuseAST({
51
- ast
52
- }) {
53
- return ast.type === 'babel' && _semver.default.satisfies(ast.version, '^7.0.0');
54
- },
55
-
56
- async parse({
57
- asset,
58
- options
59
- }) {
60
- if (shouldExclude(asset, options)) {
61
- return null;
62
- }
63
-
64
- return (0, _babelAstUtils.parse)({
65
- asset,
66
- code: await asset.getCode(),
67
- options
68
- });
69
- },
70
-
34
+ var _default = new (_plugin().Transformer)({
71
35
  async transform({
72
36
  asset,
73
37
  options
74
38
  }) {
75
- let ast = await asset.getAST();
76
-
77
- if (!ast || shouldExclude(asset, options)) {
39
+ if (shouldExclude(asset, options)) {
78
40
  return [asset];
79
41
  }
80
42
 
81
- let wrapperPath = (0, _utils.relativePath)(_path.default.dirname(asset.filePath), WRAPPER);
43
+ let wrapperPath = `@parcel/transformer-react-refresh-wrap/${_path().default.basename(__dirname)}/helpers/helpers.js`;
44
+ let code = await asset.getCode();
45
+ let map = await asset.getMap();
46
+ let name = `$parcel$ReactRefreshHelpers$${asset.id.slice(-4)}`;
47
+ code = `var ${name} = require(${JSON.stringify(wrapperPath)});
48
+ var prevRefreshReg = window.$RefreshReg$;
49
+ var prevRefreshSig = window.$RefreshSig$;
50
+ ${name}.prelude(module);
82
51
 
83
- if (!wrapperPath.startsWith('.')) {
84
- wrapperPath = './' + wrapperPath;
85
- }
52
+ try {
53
+ ${code}
54
+ ${name}.postlude(module);
55
+ } finally {
56
+ window.$RefreshReg$ = prevRefreshReg;
57
+ window.$RefreshSig$ = prevRefreshSig;
58
+ }`;
59
+ asset.setCode(code);
60
+
61
+ if (map) {
62
+ map.offsetLines(1, 6);
63
+ asset.setMap(map);
64
+ } // The JSTransformer has already run, do it manually
86
65
 
87
- ast.program.program.body = wrapper({
88
- helper: t.stringLiteral(wrapperPath),
89
- module: ast.program.program.body
90
- });
91
- asset.setAST(ast); // The JSTransformer has already run, do it manually
92
66
 
93
67
  asset.addDependency({
94
- moduleSpecifier: wrapperPath
68
+ specifier: wrapperPath,
69
+ specifierType: 'esm',
70
+ resolveFrom: __filename
95
71
  });
96
72
  return [asset];
97
- },
98
-
99
- generate({
100
- asset,
101
- ast,
102
- options
103
- }) {
104
- return (0, _babelAstUtils.generate)({
105
- asset,
106
- ast,
107
- options
108
- });
109
73
  }
110
74
 
111
75
  });
@@ -92,6 +92,7 @@ function isReactRefreshBoundary(exports) {
92
92
 
93
93
  var hasExports = false;
94
94
  var areAllExportsComponents = true;
95
+ let isESM = ('__esModule' in exports);
95
96
 
96
97
  for (var key in exports) {
97
98
  hasExports = true;
@@ -102,8 +103,8 @@ function isReactRefreshBoundary(exports) {
102
103
 
103
104
  var desc = Object.getOwnPropertyDescriptor(exports, key);
104
105
 
105
- if (desc && desc.get) {
106
- // Don't invoke getters as they may have side effects.
106
+ if (desc && desc.get && !isESM) {
107
+ // Don't invoke getters for CJS as they may have side effects.
107
108
  return false;
108
109
  }
109
110
 
@@ -145,6 +146,8 @@ function getRefreshBoundarySignature(exports) {
145
146
  return signature;
146
147
  }
147
148
 
149
+ let isESM = ('__esModule' in exports);
150
+
148
151
  for (var key in exports) {
149
152
  if (key === '__esModule') {
150
153
  continue;
@@ -152,7 +155,8 @@ function getRefreshBoundarySignature(exports) {
152
155
 
153
156
  var desc = Object.getOwnPropertyDescriptor(exports, key);
154
157
 
155
- if (desc && desc.get) {
158
+ if (desc && desc.get && !isESM) {
159
+ // Don't invoke getters for CJS as they may have side effects.
156
160
  continue;
157
161
  }
158
162
 
@@ -175,11 +179,13 @@ function registerExportsForReactRefresh(module) {
175
179
  return;
176
180
  }
177
181
 
182
+ let isESM = ('__esModule' in exports);
183
+
178
184
  for (var key in exports) {
179
185
  var desc = Object.getOwnPropertyDescriptor(exports, key);
180
186
 
181
- if (desc && desc.get) {
182
- // Don't invoke getters as they may have side effects.
187
+ if (desc && desc.get && !isESM) {
188
+ // Don't invoke getters for CJS as they may have side effects.
183
189
  continue;
184
190
  }
185
191
 
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "@parcel/transformer-react-refresh-wrap",
3
- "version": "2.0.0-beta.1",
3
+ "version": "2.0.0-nightly.1002+5530a6ef",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
+ "funding": {
9
+ "type": "opencollective",
10
+ "url": "https://opencollective.com/parcel"
11
+ },
8
12
  "repository": {
9
13
  "type": "git",
10
14
  "url": "https://github.com/parcel-bundler/parcel.git"
@@ -12,22 +16,13 @@
12
16
  "main": "lib/ReactRefreshWrapTransformer.js",
13
17
  "source": "src/ReactRefreshWrapTransformer.js",
14
18
  "engines": {
15
- "node": ">= 10.0.0",
16
- "parcel": "^2.0.0-alpha.1.1"
19
+ "node": ">= 12.0.0",
20
+ "parcel": "2.0.0-nightly.1000+5530a6ef"
17
21
  },
18
22
  "dependencies": {
19
- "@babel/generator": "^7.0.0",
20
- "@babel/parser": "^7.0.0",
21
- "@babel/template": "^7.0.0",
22
- "@babel/types": "^7.0.0",
23
- "@parcel/babel-ast-utils": "2.0.0-beta.1",
24
- "@parcel/plugin": "2.0.0-beta.1",
25
- "@parcel/utils": "2.0.0-beta.1",
26
- "react-refresh": "^0.6.0",
27
- "semver": "^5.4.1"
28
- },
29
- "peerDependencies": {
30
- "@parcel/core": "^2.0.0-alpha.3.1"
23
+ "@parcel/plugin": "2.0.0-nightly.1002+5530a6ef",
24
+ "@parcel/utils": "2.0.0-nightly.1002+5530a6ef",
25
+ "react-refresh": "^0.9.0"
31
26
  },
32
- "gitHead": "74335525be92e23bac4ed1bf30595443cfb238e3"
27
+ "gitHead": "5530a6eff8b619873353baeb0457ae4ec591e9fa"
33
28
  }
@@ -1,88 +1,67 @@
1
1
  // @flow
2
2
 
3
- import type {StringLiteral, Statement} from '@babel/types';
4
-
5
- import semver from 'semver';
6
3
  import path from 'path';
7
- import {generate, parse} from '@parcel/babel-ast-utils';
8
4
  import {Transformer} from '@parcel/plugin';
9
- import {relativePath} from '@parcel/utils';
10
- import template from '@babel/template';
11
- import * as t from '@babel/types';
12
-
13
- const WRAPPER = path.join(__dirname, 'helpers', 'helpers.js');
14
-
15
- const wrapper = template.statements<{|
16
- helper: StringLiteral,
17
- module: Array<Statement>,
18
- |}>(`
19
- var helpers = require(%%helper%%);
20
- var prevRefreshReg = window.$RefreshReg$;
21
- var prevRefreshSig = window.$RefreshSig$;
22
- helpers.prelude(module);
23
-
24
- try {
25
- %%module%%
26
- helpers.postlude(module);
27
- } finally {
28
- window.$RefreshReg$ = prevRefreshReg;
29
- window.$RefreshSig$ = prevRefreshSig;
30
- }
31
- `);
32
5
 
33
6
  function shouldExclude(asset, options) {
34
7
  return (
35
8
  !asset.isSource ||
36
- !options.hot ||
9
+ !options.hmrOptions ||
37
10
  !asset.env.isBrowser() ||
11
+ asset.env.isWorker() ||
12
+ asset.env.isWorklet() ||
38
13
  options.mode !== 'development' ||
39
- !asset.getDependencies().find(v => v.moduleSpecifier === 'react')
14
+ !asset
15
+ .getDependencies()
16
+ .find(
17
+ v =>
18
+ v.specifier === 'react' ||
19
+ v.specifier === 'react/jsx-runtime' ||
20
+ v.specifier === 'react/jsx-dev-runtime',
21
+ )
40
22
  );
41
23
  }
42
24
 
43
- export default new Transformer({
44
- canReuseAST({ast}) {
45
- return ast.type === 'babel' && semver.satisfies(ast.version, '^7.0.0');
46
- },
47
-
48
- async parse({asset, options}) {
25
+ export default (new Transformer({
26
+ async transform({asset, options}) {
49
27
  if (shouldExclude(asset, options)) {
50
- return null;
28
+ return [asset];
51
29
  }
52
30
 
53
- return parse({
54
- asset,
55
- code: await asset.getCode(),
56
- options,
57
- });
58
- },
31
+ let wrapperPath = `@parcel/transformer-react-refresh-wrap/${path.basename(
32
+ __dirname,
33
+ )}/helpers/helpers.js`;
59
34
 
60
- async transform({asset, options}) {
61
- let ast = await asset.getAST();
62
- if (!ast || shouldExclude(asset, options)) {
63
- return [asset];
64
- }
35
+ let code = await asset.getCode();
36
+ let map = await asset.getMap();
37
+ let name = `$parcel$ReactRefreshHelpers$${asset.id.slice(-4)}`;
65
38
 
66
- let wrapperPath = relativePath(path.dirname(asset.filePath), WRAPPER);
67
- if (!wrapperPath.startsWith('.')) {
68
- wrapperPath = './' + wrapperPath;
69
- }
39
+ code = `var ${name} = require(${JSON.stringify(wrapperPath)});
40
+ var prevRefreshReg = window.$RefreshReg$;
41
+ var prevRefreshSig = window.$RefreshSig$;
42
+ ${name}.prelude(module);
70
43
 
71
- ast.program.program.body = wrapper({
72
- helper: t.stringLiteral(wrapperPath),
73
- module: ast.program.program.body,
74
- });
75
- asset.setAST(ast);
44
+ try {
45
+ ${code}
46
+ ${name}.postlude(module);
47
+ } finally {
48
+ window.$RefreshReg$ = prevRefreshReg;
49
+ window.$RefreshSig$ = prevRefreshSig;
50
+ }`;
51
+
52
+ asset.setCode(code);
53
+ if (map) {
54
+ map.offsetLines(1, 6);
55
+ asset.setMap(map);
56
+ }
76
57
 
77
58
  // The JSTransformer has already run, do it manually
78
59
  asset.addDependency({
79
- moduleSpecifier: wrapperPath,
60
+ specifier: wrapperPath,
61
+ specifierType: 'esm',
62
+ resolveFrom: __filename,
80
63
  });
81
64
 
82
65
  return [asset];
83
66
  },
84
-
85
- generate({asset, ast, options}) {
86
- return generate({asset, ast, options});
87
- },
88
- });
67
+ }): Transformer);
@@ -2,21 +2,21 @@ var Refresh = require('react-refresh/runtime');
2
2
 
3
3
  function debounce(func, delay) {
4
4
  if (process.env.NODE_ENV === 'test') {
5
- return function(args) {
5
+ return function (args) {
6
6
  func.call(null, args);
7
7
  };
8
8
  } else {
9
9
  var timeout = undefined;
10
- return function(args) {
10
+ return function (args) {
11
11
  clearTimeout(timeout);
12
- timeout = setTimeout(function() {
12
+ timeout = setTimeout(function () {
13
13
  timeout = undefined;
14
14
  func.call(null, args);
15
15
  }, delay);
16
16
  };
17
17
  }
18
18
  }
19
- var enqueueUpdate = debounce(function() {
19
+ var enqueueUpdate = debounce(function () {
20
20
  Refresh.performReactRefresh();
21
21
  }, 30);
22
22
 
@@ -24,19 +24,19 @@ var enqueueUpdate = debounce(function() {
24
24
  // https://github.com/facebook/metro/blob/61de16bd1edd7e738dd0311c89555a644023ab2d/packages/metro/src/lib/polyfills/require.js
25
25
  // MIT License - Copyright (c) Facebook, Inc. and its affiliates.
26
26
 
27
- module.exports.prelude = function(module) {
28
- window.$RefreshReg$ = function(type, id) {
27
+ module.exports.prelude = function (module) {
28
+ window.$RefreshReg$ = function (type, id) {
29
29
  Refresh.register(type, module.id + ' ' + id);
30
30
  };
31
31
  window.$RefreshSig$ = Refresh.createSignatureFunctionForTransform;
32
32
  };
33
33
 
34
- module.exports.postlude = function(module) {
34
+ module.exports.postlude = function (module) {
35
35
  if (isReactRefreshBoundary(module.exports)) {
36
36
  registerExportsForReactRefresh(module);
37
37
 
38
38
  if (module.hot) {
39
- module.hot.dispose(function(data) {
39
+ module.hot.dispose(function (data) {
40
40
  if (Refresh.hasUnrecoverableErrors()) {
41
41
  window.location.reload();
42
42
  }
@@ -44,7 +44,7 @@ module.exports.postlude = function(module) {
44
44
  data.prevExports = module.exports;
45
45
  });
46
46
 
47
- module.hot.accept(function(getParents) {
47
+ module.hot.accept(function (getParents) {
48
48
  var prevExports = module.hot.data.prevExports;
49
49
  var nextExports = module.exports;
50
50
  // Since we just executed the code for it, it's possible
@@ -88,14 +88,15 @@ function isReactRefreshBoundary(exports) {
88
88
  }
89
89
  var hasExports = false;
90
90
  var areAllExportsComponents = true;
91
+ let isESM = '__esModule' in exports;
91
92
  for (var key in exports) {
92
93
  hasExports = true;
93
94
  if (key === '__esModule') {
94
95
  continue;
95
96
  }
96
97
  var desc = Object.getOwnPropertyDescriptor(exports, key);
97
- if (desc && desc.get) {
98
- // Don't invoke getters as they may have side effects.
98
+ if (desc && desc.get && !isESM) {
99
+ // Don't invoke getters for CJS as they may have side effects.
99
100
  return false;
100
101
  }
101
102
  var exportValue = exports[key];
@@ -129,12 +130,14 @@ function getRefreshBoundarySignature(exports) {
129
130
  // (This is important for legacy environments.)
130
131
  return signature;
131
132
  }
133
+ let isESM = '__esModule' in exports;
132
134
  for (var key in exports) {
133
135
  if (key === '__esModule') {
134
136
  continue;
135
137
  }
136
138
  var desc = Object.getOwnPropertyDescriptor(exports, key);
137
- if (desc && desc.get) {
139
+ if (desc && desc.get && !isESM) {
140
+ // Don't invoke getters for CJS as they may have side effects.
138
141
  continue;
139
142
  }
140
143
  var exportValue = exports[key];
@@ -153,10 +156,11 @@ function registerExportsForReactRefresh(module) {
153
156
  // (This is important for legacy environments.)
154
157
  return;
155
158
  }
159
+ let isESM = '__esModule' in exports;
156
160
  for (var key in exports) {
157
161
  var desc = Object.getOwnPropertyDescriptor(exports, key);
158
- if (desc && desc.get) {
159
- // Don't invoke getters as they may have side effects.
162
+ if (desc && desc.get && !isESM) {
163
+ // Don't invoke getters for CJS as they may have side effects.
160
164
  continue;
161
165
  }
162
166
  var exportValue = exports[key];