@parcel/transformer-react-refresh-wrap 2.0.0-nightly.151 → 2.0.0-nightly.1511

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.
@@ -4,141 +4,60 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
- var _semver = _interopRequireDefault(require("semver"));
9
-
10
- var _path = _interopRequireDefault(require("path"));
11
-
12
- var _plugin = require("@parcel/plugin");
13
-
14
- var _utils = require("@parcel/utils");
15
-
16
- var _sourceMap = _interopRequireDefault(require("@parcel/source-map"));
17
-
18
- var _generator = _interopRequireDefault(require("@babel/generator"));
19
-
20
- var _parser = require("@babel/parser");
21
-
22
- var _template = _interopRequireDefault(require("@babel/template"));
23
-
24
- var t = _interopRequireWildcard(require("@babel/types"));
25
-
26
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
27
-
28
- 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; }
29
-
30
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
-
32
- const WRAPPER = _path.default.join(__dirname, 'helpers', 'helpers.js');
33
-
34
- const wrapper = _template.default.statements(`
35
- var helpers = require(%%helper%%);
36
- var prevRefreshReg = window.$RefreshReg$;
37
- var prevRefreshSig = window.$RefreshSig$;
38
- helpers.prelude(module);
39
-
40
- try {
41
- %%module%%
42
- helpers.postlude(module);
43
- } finally {
44
- window.$RefreshReg$ = prevRefreshReg;
45
- window.$RefreshSig$ = prevRefreshSig;
7
+ function _path() {
8
+ const data = _interopRequireDefault(require("path"));
9
+ _path = function () {
10
+ return data;
11
+ };
12
+ return data;
46
13
  }
47
- `);
48
-
14
+ function _plugin() {
15
+ const data = require("@parcel/plugin");
16
+ _plugin = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
49
22
  function shouldExclude(asset, options) {
50
- return !asset.isSource || !options.hot || !asset.env.isBrowser() || options.mode !== 'development' || !asset.getDependencies().find(v => v.moduleSpecifier === 'react');
23
+ return !asset.isSource || !options.hmrOptions || !asset.env.isBrowser() || asset.env.isLibrary || 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' || v.specifier === '@emotion/react' || v.specifier === '@emotion/react/jsx-runtime' || v.specifier === '@emotion/react/jsx-dev-runtime');
51
24
  }
52
-
53
- var _default = new _plugin.Transformer({
54
- canReuseAST({
55
- ast
56
- }) {
57
- return ast.type === 'babel' && _semver.default.satisfies(ast.version, '^7.0.0');
58
- },
59
-
60
- async parse({
25
+ var _default = exports.default = new (_plugin().Transformer)({
26
+ async transform({
61
27
  asset,
62
28
  options
63
29
  }) {
64
30
  if (shouldExclude(asset, options)) {
65
- return null;
66
- }
67
-
68
- let code = await asset.getCode();
69
- return {
70
- type: 'babel',
71
- version: '7.0.0',
72
- isDirty: false,
73
- program: (0, _parser.parse)(code, {
74
- sourceFilename: this.name,
75
- allowReturnOutsideFunction: true,
76
- strictMode: false,
77
- sourceType: 'module',
78
- plugins: ['exportDefaultFrom', 'exportNamespaceFrom', 'dynamicImport']
79
- })
80
- };
81
- },
82
-
83
- transform({
84
- asset,
85
- options
86
- }) {
87
- let ast = asset.ast;
88
-
89
- if (!ast || shouldExclude(asset, options)) {
90
31
  return [asset];
91
32
  }
33
+ let wrapperPath = `@parcel/transformer-react-refresh-wrap/${_path().default.basename(__dirname)}/helpers/helpers.js`;
34
+ let code = await asset.getCode();
35
+ let map = await asset.getMap();
36
+ let name = `$parcel$ReactRefreshHelpers$${asset.id.slice(-4)}`;
37
+ code = `var ${name} = require(${JSON.stringify(wrapperPath)});
38
+ var prevRefreshReg = window.$RefreshReg$;
39
+ var prevRefreshSig = window.$RefreshSig$;
40
+ ${name}.prelude(module);
92
41
 
93
- let wrapperPath = _path.default.relative(_path.default.dirname(asset.filePath), WRAPPER).replace(/\\/g, '/');
94
-
95
- if (!wrapperPath.startsWith('.')) {
96
- wrapperPath = './' + wrapperPath;
42
+ try {
43
+ ${code}
44
+ ${name}.postlude(module);
45
+ } finally {
46
+ window.$RefreshReg$ = prevRefreshReg;
47
+ window.$RefreshSig$ = prevRefreshSig;
48
+ }`;
49
+ asset.setCode(code);
50
+ if (map) {
51
+ map.offsetLines(1, 6);
52
+ asset.setMap(map);
97
53
  }
98
54
 
99
- ast.program.program.body = wrapper({
100
- helper: t.stringLiteral(wrapperPath),
101
- module: ast.program.program.body
102
- });
103
- ast.isDirty = true; // The JSTransformer has already run, do it manually
104
-
55
+ // The JSTransformer has already run, do it manually
105
56
  asset.addDependency({
106
- moduleSpecifier: wrapperPath
57
+ specifier: wrapperPath,
58
+ specifierType: 'esm',
59
+ resolveFrom: __filename
107
60
  });
108
61
  return [asset];
109
- },
110
-
111
- async generate({
112
- asset,
113
- options
114
- }) {
115
- let code = await asset.getCode();
116
- let res = {
117
- code
118
- };
119
- let ast = asset.ast;
120
-
121
- if (ast && ast.isDirty !== false) {
122
- let sourceFileName = (0, _utils.relativeUrl)(options.projectRoot, asset.filePath);
123
- let generated = (0, _generator.default)(ast.program, {
124
- sourceMaps: options.sourceMaps,
125
- sourceFileName: sourceFileName
126
- }, code);
127
- res.code = generated.code; // $FlowFixMe...
128
-
129
- res.map = new _sourceMap.default(generated.rawMappings, {
130
- [sourceFileName]: null
131
- });
132
- }
133
-
134
- if (asset.meta.globals && asset.meta.globals.size > 0) {
135
- res.code = Array.from(asset.meta.globals.values()).map(g => g ? g.code : '').join('\n') + '\n' + res.code;
136
- }
137
-
138
- delete asset.meta.globals;
139
- return res;
140
62
  }
141
-
142
- });
143
-
144
- exports.default = _default;
63
+ });
@@ -1,27 +1,39 @@
1
1
  "use strict";
2
2
 
3
3
  var Refresh = require('react-refresh/runtime');
4
-
5
4
  function debounce(func, delay) {
6
5
  if (process.env.NODE_ENV === 'test') {
7
6
  return function (args) {
8
7
  func.call(null, args);
9
8
  };
10
9
  } else {
11
- var timeout = undefined;
10
+ let timeout = undefined;
11
+ let lastTime = 0;
12
12
  return function (args) {
13
- clearTimeout(timeout);
14
- timeout = setTimeout(function () {
15
- timeout = undefined;
13
+ // Call immediately if last call was more than the delay ago.
14
+ // Otherwise, set a timeout. This means the first call is fast
15
+ // (for the common case of a single update), and subsequent updates
16
+ // are batched.
17
+ let now = Date.now();
18
+ if (now - lastTime > delay) {
19
+ lastTime = now;
16
20
  func.call(null, args);
17
- }, delay);
21
+ } else {
22
+ clearTimeout(timeout);
23
+ timeout = setTimeout(function () {
24
+ timeout = undefined;
25
+ lastTime = Date.now();
26
+ func.call(null, args);
27
+ }, delay);
28
+ }
18
29
  };
19
30
  }
20
31
  }
21
-
22
32
  var enqueueUpdate = debounce(function () {
23
33
  Refresh.performReactRefresh();
24
- }, 30); // Everthing below is either adapted or copied from
34
+ }, 30);
35
+
36
+ // Everthing below is either adapted or copied from
25
37
  // https://github.com/facebook/metro/blob/61de16bd1edd7e738dd0311c89555a644023ab2d/packages/metro/src/lib/polyfills/require.js
26
38
  // MIT License - Copyright (c) Facebook, Inc. and its affiliates.
27
39
 
@@ -29,161 +41,133 @@ module.exports.prelude = function (module) {
29
41
  window.$RefreshReg$ = function (type, id) {
30
42
  Refresh.register(type, module.id + ' ' + id);
31
43
  };
32
-
33
44
  window.$RefreshSig$ = Refresh.createSignatureFunctionForTransform;
34
45
  };
35
-
36
46
  module.exports.postlude = function (module) {
37
47
  if (isReactRefreshBoundary(module.exports)) {
38
48
  registerExportsForReactRefresh(module);
39
-
40
49
  if (module.hot) {
41
50
  module.hot.dispose(function (data) {
51
+ if (Refresh.hasUnrecoverableErrors()) {
52
+ window.location.reload();
53
+ }
42
54
  data.prevExports = module.exports;
43
55
  });
44
56
  module.hot.accept(function (getParents) {
45
57
  var prevExports = module.hot.data.prevExports;
46
- var nextExports = module.exports; // Since we just executed the code for it, it's possible
58
+ var nextExports = module.exports;
59
+ // Since we just executed the code for it, it's possible
47
60
  // that the new exports make it ineligible for being a boundary.
48
-
49
- var isNoLongerABoundary = !isReactRefreshBoundary(nextExports); // It can also become ineligible if its exports are incompatible
61
+ var isNoLongerABoundary = !isReactRefreshBoundary(nextExports);
62
+ // It can also become ineligible if its exports are incompatible
50
63
  // with the previous exports.
51
64
  // For example, if you add/remove/change exports, we'll want
52
65
  // to re-execute the importing modules, and force those components
53
66
  // to re-render. Similarly, if you convert a class component
54
67
  // to a function, we want to invalidate the boundary.
55
-
56
68
  var didInvalidate = shouldInvalidateReactRefreshBoundary(prevExports, nextExports);
57
-
58
69
  if (isNoLongerABoundary || didInvalidate) {
59
70
  // We'll be conservative. The only case in which we won't do a full
60
71
  // reload is if all parent modules are also refresh boundaries.
61
72
  // In that case we'll add them to the current queue.
62
73
  var parents = getParents();
63
-
64
74
  if (parents.length === 0) {
65
75
  // Looks like we bubbled to the root. Can't recover from that.
66
76
  window.location.reload();
67
77
  return;
68
78
  }
69
-
70
79
  return parents;
71
80
  }
72
-
73
81
  enqueueUpdate();
74
82
  });
75
83
  }
76
-
77
- if (Refresh.hasUnrecoverableErrors()) {
78
- window.location.reload();
79
- }
80
84
  }
81
85
  };
82
-
83
86
  function isReactRefreshBoundary(exports) {
84
87
  if (Refresh.isLikelyComponentType(exports)) {
85
88
  return true;
86
89
  }
87
-
88
90
  if (exports == null || typeof exports !== 'object') {
89
91
  // Exit if we can't iterate over exports.
90
92
  return false;
91
93
  }
92
-
93
94
  var hasExports = false;
94
95
  var areAllExportsComponents = true;
95
-
96
+ let isESM = ('__esModule' in exports);
96
97
  for (var key in exports) {
97
98
  hasExports = true;
98
-
99
99
  if (key === '__esModule') {
100
100
  continue;
101
101
  }
102
-
103
102
  var desc = Object.getOwnPropertyDescriptor(exports, key);
104
-
105
- if (desc && desc.get) {
106
- // Don't invoke getters as they may have side effects.
103
+ if (desc && desc.get && !isESM) {
104
+ // Don't invoke getters for CJS as they may have side effects.
107
105
  return false;
108
106
  }
109
-
110
107
  var exportValue = exports[key];
111
-
112
108
  if (!Refresh.isLikelyComponentType(exportValue)) {
113
109
  areAllExportsComponents = false;
114
110
  }
115
111
  }
116
-
117
112
  return hasExports && areAllExportsComponents;
118
113
  }
119
-
120
114
  function shouldInvalidateReactRefreshBoundary(prevExports, nextExports) {
121
115
  var prevSignature = getRefreshBoundarySignature(prevExports);
122
116
  var nextSignature = getRefreshBoundarySignature(nextExports);
123
-
124
117
  if (prevSignature.length !== nextSignature.length) {
125
118
  return true;
126
119
  }
127
-
128
120
  for (var i = 0; i < nextSignature.length; i++) {
129
121
  if (prevSignature[i] !== nextSignature[i]) {
130
122
  return true;
131
123
  }
132
124
  }
133
-
134
125
  return false;
135
- } // When this signature changes, it's unsafe to stop at this refresh boundary.
136
-
126
+ }
137
127
 
128
+ // When this signature changes, it's unsafe to stop at this refresh boundary.
138
129
  function getRefreshBoundarySignature(exports) {
139
130
  var signature = [];
140
131
  signature.push(Refresh.getFamilyByType(exports));
141
-
142
132
  if (exports == null || typeof exports !== 'object') {
143
133
  // Exit if we can't iterate over exports.
144
134
  // (This is important for legacy environments.)
145
135
  return signature;
146
136
  }
147
-
137
+ let isESM = ('__esModule' in exports);
148
138
  for (var key in exports) {
149
139
  if (key === '__esModule') {
150
140
  continue;
151
141
  }
152
-
153
142
  var desc = Object.getOwnPropertyDescriptor(exports, key);
154
-
155
- if (desc && desc.get) {
143
+ if (desc && desc.get && !isESM) {
144
+ // Don't invoke getters for CJS as they may have side effects.
156
145
  continue;
157
146
  }
158
-
159
147
  var exportValue = exports[key];
160
148
  signature.push(key);
161
149
  signature.push(Refresh.getFamilyByType(exportValue));
162
150
  }
163
-
164
151
  return signature;
165
152
  }
166
-
167
153
  function registerExportsForReactRefresh(module) {
168
154
  var exports = module.exports,
169
- id = module.id;
155
+ id = module.id;
170
156
  Refresh.register(exports, id + ' %exports%');
171
-
172
157
  if (exports == null || typeof exports !== 'object') {
173
158
  // Exit if we can't iterate over exports.
174
159
  // (This is important for legacy environments.)
175
160
  return;
176
161
  }
177
-
162
+ let isESM = ('__esModule' in exports);
178
163
  for (var key in exports) {
179
164
  var desc = Object.getOwnPropertyDescriptor(exports, key);
180
-
181
- if (desc && desc.get) {
182
- // Don't invoke getters as they may have side effects.
165
+ if (desc && desc.get && !isESM) {
166
+ // Don't invoke getters for CJS as they may have side effects.
183
167
  continue;
184
168
  }
185
-
186
169
  var exportValue = exports[key];
187
- Refresh.register(exportValue, id + ' %exports% ' + key);
170
+ var typeID = id + ' %exports% ' + key;
171
+ Refresh.register(exportValue, typeID);
188
172
  }
189
173
  }
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "@parcel/transformer-react-refresh-wrap",
3
- "version": "2.0.0-nightly.151+1af603e1",
3
+ "version": "2.0.0-nightly.1511+2059029ee",
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,19 +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.1509+2059029ee"
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/plugin": "2.0.0-nightly.151+1af603e1",
24
- "@parcel/source-map": "2.0.0-nightly.151+1af603e1",
25
- "@parcel/utils": "2.0.0-nightly.151+1af603e1",
26
- "react-refresh": "^0.6.0",
27
- "semver": "^5.4.1"
23
+ "@parcel/plugin": "2.0.0-nightly.1511+2059029ee",
24
+ "@parcel/utils": "2.0.0-nightly.1511+2059029ee",
25
+ "react-refresh": "^0.9.0"
28
26
  },
29
- "gitHead": "1af603e1cfab014585ded8aec4d3dcdb7e685987"
27
+ "gitHead": "2059029ee91e5f03a273b0954d3e629d7375f986"
30
28
  }
@@ -1,138 +1,71 @@
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
4
  import {Transformer} from '@parcel/plugin';
8
- import {relativeUrl} from '@parcel/utils';
9
- import SourceMap from '@parcel/source-map';
10
- import generate from '@babel/generator';
11
- import {parse} from '@babel/parser';
12
- import template from '@babel/template';
13
- import * as t from '@babel/types';
14
-
15
- const WRAPPER = path.join(__dirname, 'helpers', 'helpers.js');
16
-
17
- const wrapper = template.statements<{|
18
- helper: StringLiteral,
19
- module: Array<Statement>,
20
- |}>(`
21
- var helpers = require(%%helper%%);
22
- var prevRefreshReg = window.$RefreshReg$;
23
- var prevRefreshSig = window.$RefreshSig$;
24
- helpers.prelude(module);
25
-
26
- try {
27
- %%module%%
28
- helpers.postlude(module);
29
- } finally {
30
- window.$RefreshReg$ = prevRefreshReg;
31
- window.$RefreshSig$ = prevRefreshSig;
32
- }
33
- `);
34
5
 
35
6
  function shouldExclude(asset, options) {
36
7
  return (
37
8
  !asset.isSource ||
38
- !options.hot ||
9
+ !options.hmrOptions ||
39
10
  !asset.env.isBrowser() ||
11
+ asset.env.isLibrary ||
12
+ asset.env.isWorker() ||
13
+ asset.env.isWorklet() ||
40
14
  options.mode !== 'development' ||
41
- !asset.getDependencies().find(v => v.moduleSpecifier === 'react')
15
+ !asset
16
+ .getDependencies()
17
+ .find(
18
+ v =>
19
+ v.specifier === 'react' ||
20
+ v.specifier === 'react/jsx-runtime' ||
21
+ v.specifier === 'react/jsx-dev-runtime' ||
22
+ v.specifier === '@emotion/react' ||
23
+ v.specifier === '@emotion/react/jsx-runtime' ||
24
+ v.specifier === '@emotion/react/jsx-dev-runtime',
25
+ )
42
26
  );
43
27
  }
44
28
 
45
- export default new Transformer({
46
- canReuseAST({ast}) {
47
- return ast.type === 'babel' && semver.satisfies(ast.version, '^7.0.0');
48
- },
49
-
50
- async parse({asset, options}) {
29
+ export default (new Transformer({
30
+ async transform({asset, options}) {
51
31
  if (shouldExclude(asset, options)) {
52
- return null;
32
+ return [asset];
53
33
  }
54
34
 
35
+ let wrapperPath = `@parcel/transformer-react-refresh-wrap/${path.basename(
36
+ __dirname,
37
+ )}/helpers/helpers.js`;
38
+
55
39
  let code = await asset.getCode();
56
- return {
57
- type: 'babel',
58
- version: '7.0.0',
59
- isDirty: false,
60
- program: parse(code, {
61
- sourceFilename: this.name,
62
- allowReturnOutsideFunction: true,
63
- strictMode: false,
64
- sourceType: 'module',
65
- plugins: ['exportDefaultFrom', 'exportNamespaceFrom', 'dynamicImport'],
66
- }),
67
- };
68
- },
40
+ let map = await asset.getMap();
41
+ let name = `$parcel$ReactRefreshHelpers$${asset.id.slice(-4)}`;
69
42
 
70
- transform({asset, options}) {
71
- let ast = asset.ast;
72
- if (!ast || shouldExclude(asset, options)) {
73
- return [asset];
74
- }
43
+ code = `var ${name} = require(${JSON.stringify(wrapperPath)});
44
+ var prevRefreshReg = window.$RefreshReg$;
45
+ var prevRefreshSig = window.$RefreshSig$;
46
+ ${name}.prelude(module);
75
47
 
76
- let wrapperPath = path
77
- .relative(path.dirname(asset.filePath), WRAPPER)
78
- .replace(/\\/g, '/');
79
- if (!wrapperPath.startsWith('.')) {
80
- wrapperPath = './' + wrapperPath;
81
- }
48
+ try {
49
+ ${code}
50
+ ${name}.postlude(module);
51
+ } finally {
52
+ window.$RefreshReg$ = prevRefreshReg;
53
+ window.$RefreshSig$ = prevRefreshSig;
54
+ }`;
82
55
 
83
- ast.program.program.body = wrapper({
84
- helper: t.stringLiteral(wrapperPath),
85
- module: ast.program.program.body,
86
- });
87
- ast.isDirty = true;
56
+ asset.setCode(code);
57
+ if (map) {
58
+ map.offsetLines(1, 6);
59
+ asset.setMap(map);
60
+ }
88
61
 
89
62
  // The JSTransformer has already run, do it manually
90
63
  asset.addDependency({
91
- moduleSpecifier: wrapperPath,
64
+ specifier: wrapperPath,
65
+ specifierType: 'esm',
66
+ resolveFrom: __filename,
92
67
  });
93
68
 
94
69
  return [asset];
95
70
  },
96
-
97
- async generate({asset, options}) {
98
- let code = await asset.getCode();
99
- let res = {
100
- code,
101
- };
102
-
103
- let ast = asset.ast;
104
- if (ast && ast.isDirty !== false) {
105
- let sourceFileName: string = relativeUrl(
106
- options.projectRoot,
107
- asset.filePath,
108
- );
109
-
110
- let generated = generate(
111
- ast.program,
112
- {
113
- sourceMaps: options.sourceMaps,
114
- sourceFileName: sourceFileName,
115
- },
116
- code,
117
- );
118
-
119
- res.code = generated.code;
120
- // $FlowFixMe...
121
- res.map = new SourceMap(generated.rawMappings, {
122
- [sourceFileName]: null,
123
- });
124
- }
125
-
126
- if (asset.meta.globals && asset.meta.globals.size > 0) {
127
- res.code =
128
- Array.from(asset.meta.globals.values())
129
- .map(g => (g ? g.code : ''))
130
- .join('\n') +
131
- '\n' +
132
- res.code;
133
- }
134
- delete asset.meta.globals;
135
-
136
- return res;
137
- },
138
- });
71
+ }): Transformer);
@@ -2,21 +2,33 @@ 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
- var timeout = undefined;
10
- return function(args) {
11
- clearTimeout(timeout);
12
- timeout = setTimeout(function() {
13
- timeout = undefined;
9
+ let timeout = undefined;
10
+ let lastTime = 0;
11
+ return function (args) {
12
+ // Call immediately if last call was more than the delay ago.
13
+ // Otherwise, set a timeout. This means the first call is fast
14
+ // (for the common case of a single update), and subsequent updates
15
+ // are batched.
16
+ let now = Date.now();
17
+ if (now - lastTime > delay) {
18
+ lastTime = now;
14
19
  func.call(null, args);
15
- }, delay);
20
+ } else {
21
+ clearTimeout(timeout);
22
+ timeout = setTimeout(function () {
23
+ timeout = undefined;
24
+ lastTime = Date.now();
25
+ func.call(null, args);
26
+ }, delay);
27
+ }
16
28
  };
17
29
  }
18
30
  }
19
- var enqueueUpdate = debounce(function() {
31
+ var enqueueUpdate = debounce(function () {
20
32
  Refresh.performReactRefresh();
21
33
  }, 30);
22
34
 
@@ -24,23 +36,27 @@ var enqueueUpdate = debounce(function() {
24
36
  // https://github.com/facebook/metro/blob/61de16bd1edd7e738dd0311c89555a644023ab2d/packages/metro/src/lib/polyfills/require.js
25
37
  // MIT License - Copyright (c) Facebook, Inc. and its affiliates.
26
38
 
27
- module.exports.prelude = function(module) {
28
- window.$RefreshReg$ = function(type, id) {
39
+ module.exports.prelude = function (module) {
40
+ window.$RefreshReg$ = function (type, id) {
29
41
  Refresh.register(type, module.id + ' ' + id);
30
42
  };
31
43
  window.$RefreshSig$ = Refresh.createSignatureFunctionForTransform;
32
44
  };
33
45
 
34
- module.exports.postlude = function(module) {
46
+ module.exports.postlude = function (module) {
35
47
  if (isReactRefreshBoundary(module.exports)) {
36
48
  registerExportsForReactRefresh(module);
37
49
 
38
50
  if (module.hot) {
39
- module.hot.dispose(function(data) {
51
+ module.hot.dispose(function (data) {
52
+ if (Refresh.hasUnrecoverableErrors()) {
53
+ window.location.reload();
54
+ }
55
+
40
56
  data.prevExports = module.exports;
41
57
  });
42
58
 
43
- module.hot.accept(function(getParents) {
59
+ module.hot.accept(function (getParents) {
44
60
  var prevExports = module.hot.data.prevExports;
45
61
  var nextExports = module.exports;
46
62
  // Since we just executed the code for it, it's possible
@@ -71,9 +87,6 @@ module.exports.postlude = function(module) {
71
87
  enqueueUpdate();
72
88
  });
73
89
  }
74
- if (Refresh.hasUnrecoverableErrors()) {
75
- window.location.reload();
76
- }
77
90
  }
78
91
  };
79
92
 
@@ -87,14 +100,15 @@ function isReactRefreshBoundary(exports) {
87
100
  }
88
101
  var hasExports = false;
89
102
  var areAllExportsComponents = true;
103
+ let isESM = '__esModule' in exports;
90
104
  for (var key in exports) {
91
105
  hasExports = true;
92
106
  if (key === '__esModule') {
93
107
  continue;
94
108
  }
95
109
  var desc = Object.getOwnPropertyDescriptor(exports, key);
96
- if (desc && desc.get) {
97
- // Don't invoke getters as they may have side effects.
110
+ if (desc && desc.get && !isESM) {
111
+ // Don't invoke getters for CJS as they may have side effects.
98
112
  return false;
99
113
  }
100
114
  var exportValue = exports[key];
@@ -128,12 +142,14 @@ function getRefreshBoundarySignature(exports) {
128
142
  // (This is important for legacy environments.)
129
143
  return signature;
130
144
  }
145
+ let isESM = '__esModule' in exports;
131
146
  for (var key in exports) {
132
147
  if (key === '__esModule') {
133
148
  continue;
134
149
  }
135
150
  var desc = Object.getOwnPropertyDescriptor(exports, key);
136
- if (desc && desc.get) {
151
+ if (desc && desc.get && !isESM) {
152
+ // Don't invoke getters for CJS as they may have side effects.
137
153
  continue;
138
154
  }
139
155
  var exportValue = exports[key];
@@ -152,10 +168,11 @@ function registerExportsForReactRefresh(module) {
152
168
  // (This is important for legacy environments.)
153
169
  return;
154
170
  }
171
+ let isESM = '__esModule' in exports;
155
172
  for (var key in exports) {
156
173
  var desc = Object.getOwnPropertyDescriptor(exports, key);
157
- if (desc && desc.get) {
158
- // Don't invoke getters as they may have side effects.
174
+ if (desc && desc.get && !isESM) {
175
+ // Don't invoke getters for CJS as they may have side effects.
159
176
  continue;
160
177
  }
161
178
  var exportValue = exports[key];