@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.
- package/lib/ReactRefreshWrapTransformer.js +41 -77
- package/lib/helpers/helpers.js +11 -5
- package/package.json +11 -16
- package/src/ReactRefreshWrapTransformer.js +41 -62
- package/src/helpers/helpers.js +18 -14
|
@@ -5,107 +5,71 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
function _path() {
|
|
9
|
+
const data = _interopRequireDefault(require("path"));
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
_path = function () {
|
|
12
|
+
return data;
|
|
13
|
+
};
|
|
11
14
|
|
|
12
|
-
|
|
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
|
-
|
|
18
|
+
function _plugin() {
|
|
19
|
+
const data = require("@parcel/plugin");
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
_plugin = function () {
|
|
22
|
+
return data;
|
|
23
|
+
};
|
|
23
24
|
|
|
24
|
-
|
|
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.
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
if (!ast || shouldExclude(asset, options)) {
|
|
39
|
+
if (shouldExclude(asset, options)) {
|
|
78
40
|
return [asset];
|
|
79
41
|
}
|
|
80
42
|
|
|
81
|
-
let wrapperPath = (
|
|
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
|
-
|
|
84
|
-
|
|
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
|
-
|
|
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
|
});
|
package/lib/helpers/helpers.js
CHANGED
|
@@ -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-
|
|
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": ">=
|
|
16
|
-
"parcel": "
|
|
19
|
+
"node": ">= 12.0.0",
|
|
20
|
+
"parcel": "2.0.0-nightly.1000+5530a6ef"
|
|
17
21
|
},
|
|
18
22
|
"dependencies": {
|
|
19
|
-
"@
|
|
20
|
-
"@
|
|
21
|
-
"
|
|
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": "
|
|
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.
|
|
9
|
+
!options.hmrOptions ||
|
|
37
10
|
!asset.env.isBrowser() ||
|
|
11
|
+
asset.env.isWorker() ||
|
|
12
|
+
asset.env.isWorklet() ||
|
|
38
13
|
options.mode !== 'development' ||
|
|
39
|
-
!asset
|
|
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
|
-
|
|
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
|
|
28
|
+
return [asset];
|
|
51
29
|
}
|
|
52
30
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
options,
|
|
57
|
-
});
|
|
58
|
-
},
|
|
31
|
+
let wrapperPath = `@parcel/transformer-react-refresh-wrap/${path.basename(
|
|
32
|
+
__dirname,
|
|
33
|
+
)}/helpers/helpers.js`;
|
|
59
34
|
|
|
60
|
-
|
|
61
|
-
let
|
|
62
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
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);
|
package/src/helpers/helpers.js
CHANGED
|
@@ -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];
|