react-dom 16.11.0 → 16.14.0

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.
Files changed (28) hide show
  1. package/build-info.json +5 -5
  2. package/cjs/react-dom-server.browser.development.js +331 -596
  3. package/cjs/react-dom-server.browser.production.min.js +37 -37
  4. package/cjs/react-dom-server.node.development.js +330 -595
  5. package/cjs/react-dom-server.node.production.min.js +38 -38
  6. package/cjs/react-dom-test-utils.development.js +171 -326
  7. package/cjs/react-dom-test-utils.production.min.js +17 -17
  8. package/cjs/react-dom-unstable-fizz.browser.development.js +11 -25
  9. package/cjs/react-dom-unstable-fizz.browser.production.min.js +3 -3
  10. package/cjs/react-dom-unstable-fizz.node.development.js +24 -27
  11. package/cjs/react-dom-unstable-fizz.node.production.min.js +4 -3
  12. package/cjs/react-dom-unstable-native-dependencies.development.js +190 -305
  13. package/cjs/react-dom-unstable-native-dependencies.production.min.js +23 -27
  14. package/cjs/react-dom.development.js +9554 -12269
  15. package/cjs/react-dom.production.min.js +280 -278
  16. package/cjs/react-dom.profiling.min.js +285 -282
  17. package/package.json +30 -25
  18. package/umd/react-dom-server.browser.development.js +3320 -3596
  19. package/umd/react-dom-server.browser.production.min.js +35 -35
  20. package/umd/react-dom-test-utils.development.js +1200 -1355
  21. package/umd/react-dom-test-utils.production.min.js +23 -23
  22. package/umd/react-dom-unstable-fizz.browser.development.js +105 -119
  23. package/umd/react-dom-unstable-fizz.browser.production.min.js +3 -3
  24. package/umd/react-dom-unstable-native-dependencies.development.js +1333 -1449
  25. package/umd/react-dom-unstable-native-dependencies.production.min.js +21 -22
  26. package/umd/react-dom.development.js +19871 -22597
  27. package/umd/react-dom.production.min.js +229 -231
  28. package/umd/react-dom.profiling.min.js +237 -239
@@ -1,4 +1,4 @@
1
- /** @license React v16.11.0
1
+ /** @license React v16.14.0
2
2
  * react-dom-test-utils.development.js
3
3
  *
4
4
  * Copyright (c) Facebook, Inc. and its affiliates.
@@ -10,1645 +10,1490 @@
10
10
  'use strict';
11
11
 
12
12
  (function (global, factory) {
13
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react'), require('react-dom')) :
14
- typeof define === 'function' && define.amd ? define(['react', 'react-dom'], factory) :
15
- (global.ReactTestUtils = factory(global.React,global.ReactDOM));
16
- }(this, (function (React,ReactDOM) { 'use strict';
13
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react'), require('react-dom')) :
14
+ typeof define === 'function' && define.amd ? define(['react', 'react-dom'], factory) :
15
+ (global = global || self, global.ReactTestUtils = factory(global.React, global.ReactDOM));
16
+ }(this, (function (React, ReactDOM) { 'use strict';
17
17
 
18
- var ReactInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
19
- var _assign = ReactInternals.assign;
18
+ var ReactInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
19
+ var _assign = ReactInternals.assign;
20
20
 
21
- // Do not require this module directly! Use normal `invariant` calls with
22
- // template literal strings. The messages will be replaced with error codes
23
- // during build.
21
+ var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.
22
+ // Current owner and dispatcher used to share the same ref,
23
+ // but PR #14548 split them out to better support the react-debug-tools package.
24
24
 
25
- /**
26
- * Use invariant() to assert state which your program assumes to be true.
27
- *
28
- * Provide sprintf-style format (only %s is supported) and arguments
29
- * to provide information about what broke and what you were
30
- * expecting.
31
- *
32
- * The invariant message will be stripped in production, but the invariant
33
- * will remain to ensure logic does not differ in production.
34
- */
35
-
36
- /**
37
- * Similar to invariant but only logs a warning if the condition is not met.
38
- * This can be used to log issues in development environments in critical
39
- * paths. Removing the logging code for production environments will keep the
40
- * same logic and follow the same code paths.
41
- */
42
- var warningWithoutStack = function () {};
25
+ if (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {
26
+ ReactSharedInternals.ReactCurrentDispatcher = {
27
+ current: null
28
+ };
29
+ }
43
30
 
44
- {
45
- warningWithoutStack = function (condition, format) {
46
- for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
47
- args[_key - 2] = arguments[_key];
48
- }
31
+ if (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {
32
+ ReactSharedInternals.ReactCurrentBatchConfig = {
33
+ suspense: null
34
+ };
35
+ }
49
36
 
50
- if (format === undefined) {
51
- throw new Error('`warningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');
52
- }
37
+ // by calls to these methods by a Babel plugin.
38
+ //
39
+ // In PROD (or in packages without access to React internals),
40
+ // they are left as they are instead.
53
41
 
54
- if (args.length > 8) {
55
- // Check before the condition to catch violations early.
56
- throw new Error('warningWithoutStack() currently supports at most 8 arguments.');
57
- }
42
+ function warn(format) {
43
+ {
44
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
45
+ args[_key - 1] = arguments[_key];
46
+ }
58
47
 
59
- if (condition) {
60
- return;
48
+ printWarning('warn', format, args);
61
49
  }
50
+ }
51
+ function error(format) {
52
+ {
53
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
54
+ args[_key2 - 1] = arguments[_key2];
55
+ }
62
56
 
63
- if (typeof console !== 'undefined') {
64
- var argsWithFormat = args.map(function (item) {
65
- return '' + item;
66
- });
67
- argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
68
- // breaks IE9: https://github.com/facebook/react/issues/13610
69
-
70
- Function.prototype.apply.call(console.error, console, argsWithFormat);
57
+ printWarning('error', format, args);
71
58
  }
59
+ }
72
60
 
73
- try {
74
- // --- Welcome to debugging React ---
75
- // This error was thrown as a convenience so that you can use this stack
76
- // to find the callsite that caused this warning to fire.
77
- var argIndex = 0;
78
- var message = 'Warning: ' + format.replace(/%s/g, function () {
79
- return args[argIndex++];
80
- });
81
- throw new Error(message);
82
- } catch (x) {}
83
- };
84
- }
85
-
86
- var warningWithoutStack$1 = warningWithoutStack;
87
-
88
- /**
89
- * `ReactInstanceMap` maintains a mapping from a public facing stateful
90
- * instance (key) and the internal representation (value). This allows public
91
- * methods to accept the user facing instance as an argument and map them back
92
- * to internal methods.
93
- *
94
- * Note that this module is currently shared and assumed to be stateless.
95
- * If this becomes an actual Map, that will break.
96
- */
97
-
98
- /**
99
- * This API should be called `delete` but we'd have to make sure to always
100
- * transform these to strings for IE support. When this transform is fully
101
- * supported we can rename it.
102
- */
103
-
104
- function get(key) {
105
- return key._reactInternalFiber;
106
- }
61
+ function printWarning(level, format, args) {
62
+ // When changing this logic, you might want to also
63
+ // update consoleWithStackDev.www.js as well.
64
+ {
65
+ var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\n in') === 0;
107
66
 
108
- var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.
109
- // Current owner and dispatcher used to share the same ref,
110
- // but PR #14548 split them out to better support the react-debug-tools package.
67
+ if (!hasExistingStack) {
68
+ var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
69
+ var stack = ReactDebugCurrentFrame.getStackAddendum();
111
70
 
112
- if (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {
113
- ReactSharedInternals.ReactCurrentDispatcher = {
114
- current: null
115
- };
116
- }
71
+ if (stack !== '') {
72
+ format += '%s';
73
+ args = args.concat([stack]);
74
+ }
75
+ }
117
76
 
118
- if (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {
119
- ReactSharedInternals.ReactCurrentBatchConfig = {
120
- suspense: null
121
- };
122
- }
77
+ var argsWithFormat = args.map(function (item) {
78
+ return '' + item;
79
+ }); // Careful: RN currently depends on this prefix
123
80
 
124
- // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
125
- // nor polyfill, then a plain number is used for performance.
81
+ argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
82
+ // breaks IE9: https://github.com/facebook/react/issues/13610
83
+ // eslint-disable-next-line react-internal/no-production-logging
126
84
 
85
+ Function.prototype.apply.call(console[level], console, argsWithFormat);
127
86
 
87
+ try {
88
+ // --- Welcome to debugging React ---
89
+ // This error was thrown as a convenience so that you can use this stack
90
+ // to find the callsite that caused this warning to fire.
91
+ var argIndex = 0;
92
+ var message = 'Warning: ' + format.replace(/%s/g, function () {
93
+ return args[argIndex++];
94
+ });
95
+ throw new Error(message);
96
+ } catch (x) {}
97
+ }
98
+ }
128
99
 
100
+ /**
101
+ * `ReactInstanceMap` maintains a mapping from a public facing stateful
102
+ * instance (key) and the internal representation (value). This allows public
103
+ * methods to accept the user facing instance as an argument and map them back
104
+ * to internal methods.
105
+ *
106
+ * Note that this module is currently shared and assumed to be stateless.
107
+ * If this becomes an actual Map, that will break.
108
+ */
109
+ function get(key) {
110
+ return key._reactInternalFiber;
111
+ }
129
112
 
113
+ var FunctionComponent = 0;
114
+ var ClassComponent = 1;
130
115
 
116
+ var HostRoot = 3; // Root of a host tree. Could be nested inside another node.
131
117
 
132
- // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
133
- // (unstable) APIs that have been removed. Can we remove the symbols?
118
+ var HostComponent = 5;
119
+ var HostText = 6;
134
120
 
135
- {
136
-
137
- }
121
+ // Don't change these two values. They're used by React Dev Tools.
122
+ var NoEffect =
123
+ /* */
124
+ 0;
138
125
 
139
- var FunctionComponent = 0;
140
- var ClassComponent = 1;
141
- // Before we know whether it is function or class
126
+ var Placement =
127
+ /* */
128
+ 2;
129
+ var Hydrating =
130
+ /* */
131
+ 1024;
142
132
 
143
- var HostRoot = 3; // Root of a host tree. Could be nested inside another node.
133
+ var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
134
+ function getNearestMountedFiber(fiber) {
135
+ var node = fiber;
136
+ var nearestMounted = fiber;
144
137
 
145
- // A subtree. Could be an entry point to a different renderer.
138
+ if (!fiber.alternate) {
139
+ // If there is no alternate, this might be a new tree that isn't inserted
140
+ // yet. If it is, then it will have a pending insertion effect on it.
141
+ var nextNode = node;
146
142
 
147
- var HostComponent = 5;
148
- var HostText = 6;
143
+ do {
144
+ node = nextNode;
149
145
 
150
- // Don't change these two values. They're used by React Dev Tools.
151
- var NoEffect =
152
- /* */
153
- 0;
154
- // You can change the rest (and add more).
146
+ if ((node.effectTag & (Placement | Hydrating)) !== NoEffect) {
147
+ // This is an insertion or in-progress hydration. The nearest possible
148
+ // mounted fiber is the parent but we need to continue to figure out
149
+ // if that one is still mounted.
150
+ nearestMounted = node.return;
151
+ }
155
152
 
156
- var Placement =
157
- /* */
158
- 2;
153
+ nextNode = node.return;
154
+ } while (nextNode);
155
+ } else {
156
+ while (node.return) {
157
+ node = node.return;
158
+ }
159
+ }
159
160
 
161
+ if (node.tag === HostRoot) {
162
+ // TODO: Check if this was a nested HostRoot when used with
163
+ // renderContainerIntoSubtree.
164
+ return nearestMounted;
165
+ } // If we didn't hit the root, that means that we're in an disconnected tree
166
+ // that has been unmounted.
160
167
 
161
168
 
169
+ return null;
170
+ }
162
171
 
172
+ function assertIsMounted(fiber) {
173
+ if (!(getNearestMountedFiber(fiber) === fiber)) {
174
+ {
175
+ throw Error( "Unable to find node on an unmounted component." );
176
+ }
177
+ }
178
+ }
163
179
 
180
+ function findCurrentFiberUsingSlowPath(fiber) {
181
+ var alternate = fiber.alternate;
164
182
 
183
+ if (!alternate) {
184
+ // If there is no alternate, then we only need to check if it is mounted.
185
+ var nearestMounted = getNearestMountedFiber(fiber);
165
186
 
187
+ if (!(nearestMounted !== null)) {
188
+ {
189
+ throw Error( "Unable to find node on an unmounted component." );
190
+ }
191
+ }
166
192
 
193
+ if (nearestMounted !== fiber) {
194
+ return null;
195
+ }
167
196
 
168
- var Hydrating =
169
- /* */
170
- 1024;
171
- // Passive & Update & Callback & Ref & Snapshot
197
+ return fiber;
198
+ } // If we have two possible branches, we'll walk backwards up to the root
199
+ // to see what path the root points to. On the way we may hit one of the
200
+ // special cases and we'll deal with them.
172
201
 
173
- // Union of all host effects
174
202
 
175
- // Helps identify side effects in begin-phase lifecycle hooks and setState reducers:
203
+ var a = fiber;
204
+ var b = alternate;
176
205
 
177
- // In some cases, StrictMode should also double-render lifecycles.
178
- // This can be confusing for tests though,
179
- // And it can be bad for performance in production.
180
- // This feature flag can be used to control the behavior:
206
+ while (true) {
207
+ var parentA = a.return;
181
208
 
182
- // To preserve the "Pause on caught exceptions" behavior of the debugger, we
183
- // replay the begin phase of a failed component inside invokeGuardedCallback.
209
+ if (parentA === null) {
210
+ // We're at the root.
211
+ break;
212
+ }
184
213
 
185
- // Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:
214
+ var parentB = parentA.alternate;
186
215
 
187
- // Gather advanced timing metrics for Profiler subtrees.
216
+ if (parentB === null) {
217
+ // There is no alternate. This is an unusual case. Currently, it only
218
+ // happens when a Suspense component is hidden. An extra fragment fiber
219
+ // is inserted in between the Suspense fiber and its children. Skip
220
+ // over this extra fragment fiber and proceed to the next parent.
221
+ var nextParent = parentA.return;
188
222
 
189
- // Trace which interactions trigger each commit.
223
+ if (nextParent !== null) {
224
+ a = b = nextParent;
225
+ continue;
226
+ } // If there's no parent, we're at the root.
190
227
 
191
- // SSR experiments
192
228
 
229
+ break;
230
+ } // If both copies of the parent fiber point to the same child, we can
231
+ // assume that the child is current. This happens when we bailout on low
232
+ // priority: the bailed out fiber's child reuses the current child.
193
233
 
194
- // Only used in www builds.
195
234
 
196
- // Only used in www builds.
235
+ if (parentA.child === parentB.child) {
236
+ var child = parentA.child;
197
237
 
198
- // Disable javascript: URL strings in href for XSS protection.
238
+ while (child) {
239
+ if (child === a) {
240
+ // We've determined that A is the current branch.
241
+ assertIsMounted(parentA);
242
+ return fiber;
243
+ }
199
244
 
200
- // React Fire: prevent the value and checked attributes from syncing
201
- // with their related DOM properties
245
+ if (child === b) {
246
+ // We've determined that B is the current branch.
247
+ assertIsMounted(parentA);
248
+ return alternate;
249
+ }
202
250
 
203
- // These APIs will no longer be "unstable" in the upcoming 16.7 release,
204
- // Control this behavior with a flag to support 16.6 minor releases in the meanwhile.
251
+ child = child.sibling;
252
+ } // We should never have an alternate for any mounting node. So the only
253
+ // way this could possibly happen is if this was unmounted, if at all.
205
254
 
206
255
 
207
- // Experimental React Flare event system and event components support.
256
+ {
257
+ {
258
+ throw Error( "Unable to find node on an unmounted component." );
259
+ }
260
+ }
261
+ }
208
262
 
209
- // Experimental Host Component support.
263
+ if (a.return !== b.return) {
264
+ // The return pointer of A and the return pointer of B point to different
265
+ // fibers. We assume that return pointers never criss-cross, so A must
266
+ // belong to the child set of A.return, and B must belong to the child
267
+ // set of B.return.
268
+ a = parentA;
269
+ b = parentB;
270
+ } else {
271
+ // The return pointers point to the same fiber. We'll have to use the
272
+ // default, slow path: scan the child sets of each parent alternate to see
273
+ // which child belongs to which set.
274
+ //
275
+ // Search parent A's child set
276
+ var didFindChild = false;
277
+ var _child = parentA.child;
210
278
 
211
- // Experimental Scope support.
279
+ while (_child) {
280
+ if (_child === a) {
281
+ didFindChild = true;
282
+ a = parentA;
283
+ b = parentB;
284
+ break;
285
+ }
212
286
 
213
- // New API for JSX transforms to target - https://github.com/reactjs/rfcs/pull/107
287
+ if (_child === b) {
288
+ didFindChild = true;
289
+ b = parentA;
290
+ a = parentB;
291
+ break;
292
+ }
214
293
 
215
- // We will enforce mocking scheduler with scheduler/unstable_mock at some point. (v17?)
216
- // Till then, we warn about the missing mock, but still fallback to a sync mode compatible version
294
+ _child = _child.sibling;
295
+ }
217
296
 
218
- // For tests, we flush suspense fallbacks in an act scope;
219
- // *except* in some of our own tests, where we test incremental loading states.
297
+ if (!didFindChild) {
298
+ // Search parent B's child set
299
+ _child = parentB.child;
300
+
301
+ while (_child) {
302
+ if (_child === a) {
303
+ didFindChild = true;
304
+ a = parentB;
305
+ b = parentA;
306
+ break;
307
+ }
220
308
 
221
- // Add a callback property to suspense to notify which promises are currently
222
- // in the update queue. This allows reporting and tracing of what is causing
223
- // the user to see a loading state.
224
- // Also allows hydration callbacks to fire when a dehydrated boundary gets
225
- // hydrated or deleted.
309
+ if (_child === b) {
310
+ didFindChild = true;
311
+ b = parentB;
312
+ a = parentA;
313
+ break;
314
+ }
226
315
 
227
- // Part of the simplification of React.createElement so we can eventually move
228
- // from React.createElement to React.jsx
229
- // https://github.com/reactjs/rfcs/blob/createlement-rfc/text/0000-create-element-changes.md
316
+ _child = _child.sibling;
317
+ }
230
318
 
231
- var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
232
- function getNearestMountedFiber(fiber) {
233
- var node = fiber;
234
- var nearestMounted = fiber;
319
+ if (!didFindChild) {
320
+ {
321
+ throw Error( "Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue." );
322
+ }
323
+ }
324
+ }
325
+ }
235
326
 
236
- if (!fiber.alternate) {
237
- // If there is no alternate, this might be a new tree that isn't inserted
238
- // yet. If it is, then it will have a pending insertion effect on it.
239
- var nextNode = node;
327
+ if (!(a.alternate === b)) {
328
+ {
329
+ throw Error( "Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue." );
330
+ }
331
+ }
332
+ } // If the root is not a host container, we're in a disconnected tree. I.e.
333
+ // unmounted.
240
334
 
241
- do {
242
- node = nextNode;
243
335
 
244
- if ((node.effectTag & (Placement | Hydrating)) !== NoEffect) {
245
- // This is an insertion or in-progress hydration. The nearest possible
246
- // mounted fiber is the parent but we need to continue to figure out
247
- // if that one is still mounted.
248
- nearestMounted = node.return;
336
+ if (!(a.tag === HostRoot)) {
337
+ {
338
+ throw Error( "Unable to find node on an unmounted component." );
249
339
  }
250
-
251
- nextNode = node.return;
252
- } while (nextNode);
253
- } else {
254
- while (node.return) {
255
- node = node.return;
256
340
  }
257
- }
258
341
 
259
- if (node.tag === HostRoot) {
260
- // TODO: Check if this was a nested HostRoot when used with
261
- // renderContainerIntoSubtree.
262
- return nearestMounted;
263
- } // If we didn't hit the root, that means that we're in an disconnected tree
264
- // that has been unmounted.
342
+ if (a.stateNode.current === a) {
343
+ // We've determined that A is the current branch.
344
+ return fiber;
345
+ } // Otherwise B has to be current branch.
265
346
 
266
347
 
267
- return null;
268
- }
269
-
270
-
271
-
272
-
273
-
274
- function assertIsMounted(fiber) {
275
- if (!(getNearestMountedFiber(fiber) === fiber)) {
276
- {
277
- throw Error("Unable to find node on an unmounted component.");
278
- }
348
+ return alternate;
279
349
  }
280
- }
281
-
282
- function findCurrentFiberUsingSlowPath(fiber) {
283
- var alternate = fiber.alternate;
284
350
 
285
- if (!alternate) {
286
- // If there is no alternate, then we only need to check if it is mounted.
287
- var nearestMounted = getNearestMountedFiber(fiber);
288
-
289
- if (!(nearestMounted !== null)) {
290
- {
291
- throw Error("Unable to find node on an unmounted component.");
292
- }
293
- }
351
+ var EVENT_POOL_SIZE = 10;
352
+ /**
353
+ * @interface Event
354
+ * @see http://www.w3.org/TR/DOM-Level-3-Events/
355
+ */
294
356
 
295
- if (nearestMounted !== fiber) {
357
+ var EventInterface = {
358
+ type: null,
359
+ target: null,
360
+ // currentTarget is set when dispatching; no use in copying it here
361
+ currentTarget: function () {
296
362
  return null;
297
- }
298
-
299
- return fiber;
300
- } // If we have two possible branches, we'll walk backwards up to the root
301
- // to see what path the root points to. On the way we may hit one of the
302
- // special cases and we'll deal with them.
363
+ },
364
+ eventPhase: null,
365
+ bubbles: null,
366
+ cancelable: null,
367
+ timeStamp: function (event) {
368
+ return event.timeStamp || Date.now();
369
+ },
370
+ defaultPrevented: null,
371
+ isTrusted: null
372
+ };
303
373
 
374
+ function functionThatReturnsTrue() {
375
+ return true;
376
+ }
304
377
 
305
- var a = fiber;
306
- var b = alternate;
378
+ function functionThatReturnsFalse() {
379
+ return false;
380
+ }
381
+ /**
382
+ * Synthetic events are dispatched by event plugins, typically in response to a
383
+ * top-level event delegation handler.
384
+ *
385
+ * These systems should generally use pooling to reduce the frequency of garbage
386
+ * collection. The system should check `isPersistent` to determine whether the
387
+ * event should be released into the pool after being dispatched. Users that
388
+ * need a persisted event should invoke `persist`.
389
+ *
390
+ * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
391
+ * normalizing browser quirks. Subclasses do not necessarily have to implement a
392
+ * DOM interface; custom application-specific events can also subclass this.
393
+ *
394
+ * @param {object} dispatchConfig Configuration used to dispatch this event.
395
+ * @param {*} targetInst Marker identifying the event target.
396
+ * @param {object} nativeEvent Native browser event.
397
+ * @param {DOMEventTarget} nativeEventTarget Target node.
398
+ */
307
399
 
308
- while (true) {
309
- var parentA = a.return;
310
400
 
311
- if (parentA === null) {
312
- // We're at the root.
313
- break;
401
+ function SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {
402
+ {
403
+ // these have a getter/setter for warnings
404
+ delete this.nativeEvent;
405
+ delete this.preventDefault;
406
+ delete this.stopPropagation;
407
+ delete this.isDefaultPrevented;
408
+ delete this.isPropagationStopped;
314
409
  }
315
410
 
316
- var parentB = parentA.alternate;
317
-
318
- if (parentB === null) {
319
- // There is no alternate. This is an unusual case. Currently, it only
320
- // happens when a Suspense component is hidden. An extra fragment fiber
321
- // is inserted in between the Suspense fiber and its children. Skip
322
- // over this extra fragment fiber and proceed to the next parent.
323
- var nextParent = parentA.return;
411
+ this.dispatchConfig = dispatchConfig;
412
+ this._targetInst = targetInst;
413
+ this.nativeEvent = nativeEvent;
414
+ var Interface = this.constructor.Interface;
324
415
 
325
- if (nextParent !== null) {
326
- a = b = nextParent;
416
+ for (var propName in Interface) {
417
+ if (!Interface.hasOwnProperty(propName)) {
327
418
  continue;
328
- } // If there's no parent, we're at the root.
419
+ }
329
420
 
421
+ {
422
+ delete this[propName]; // this has a getter/setter for warnings
423
+ }
330
424
 
331
- break;
332
- } // If both copies of the parent fiber point to the same child, we can
333
- // assume that the child is current. This happens when we bailout on low
334
- // priority: the bailed out fiber's child reuses the current child.
425
+ var normalize = Interface[propName];
335
426
 
427
+ if (normalize) {
428
+ this[propName] = normalize(nativeEvent);
429
+ } else {
430
+ if (propName === 'target') {
431
+ this.target = nativeEventTarget;
432
+ } else {
433
+ this[propName] = nativeEvent[propName];
434
+ }
435
+ }
436
+ }
336
437
 
337
- if (parentA.child === parentB.child) {
338
- var child = parentA.child;
438
+ var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
339
439
 
340
- while (child) {
341
- if (child === a) {
342
- // We've determined that A is the current branch.
343
- assertIsMounted(parentA);
344
- return fiber;
345
- }
440
+ if (defaultPrevented) {
441
+ this.isDefaultPrevented = functionThatReturnsTrue;
442
+ } else {
443
+ this.isDefaultPrevented = functionThatReturnsFalse;
444
+ }
346
445
 
347
- if (child === b) {
348
- // We've determined that B is the current branch.
349
- assertIsMounted(parentA);
350
- return alternate;
351
- }
446
+ this.isPropagationStopped = functionThatReturnsFalse;
447
+ return this;
448
+ }
352
449
 
353
- child = child.sibling;
354
- } // We should never have an alternate for any mounting node. So the only
355
- // way this could possibly happen is if this was unmounted, if at all.
450
+ _assign(SyntheticEvent.prototype, {
451
+ preventDefault: function () {
452
+ this.defaultPrevented = true;
453
+ var event = this.nativeEvent;
356
454
 
455
+ if (!event) {
456
+ return;
457
+ }
357
458
 
358
- {
359
- {
360
- throw Error("Unable to find node on an unmounted component.");
361
- }
459
+ if (event.preventDefault) {
460
+ event.preventDefault();
461
+ } else if (typeof event.returnValue !== 'unknown') {
462
+ event.returnValue = false;
362
463
  }
363
- }
364
464
 
365
- if (a.return !== b.return) {
366
- // The return pointer of A and the return pointer of B point to different
367
- // fibers. We assume that return pointers never criss-cross, so A must
368
- // belong to the child set of A.return, and B must belong to the child
369
- // set of B.return.
370
- a = parentA;
371
- b = parentB;
372
- } else {
373
- // The return pointers point to the same fiber. We'll have to use the
374
- // default, slow path: scan the child sets of each parent alternate to see
375
- // which child belongs to which set.
376
- //
377
- // Search parent A's child set
378
- var didFindChild = false;
379
- var _child = parentA.child;
380
-
381
- while (_child) {
382
- if (_child === a) {
383
- didFindChild = true;
384
- a = parentA;
385
- b = parentB;
386
- break;
387
- }
465
+ this.isDefaultPrevented = functionThatReturnsTrue;
466
+ },
467
+ stopPropagation: function () {
468
+ var event = this.nativeEvent;
388
469
 
389
- if (_child === b) {
390
- didFindChild = true;
391
- b = parentA;
392
- a = parentB;
393
- break;
394
- }
470
+ if (!event) {
471
+ return;
472
+ }
395
473
 
396
- _child = _child.sibling;
474
+ if (event.stopPropagation) {
475
+ event.stopPropagation();
476
+ } else if (typeof event.cancelBubble !== 'unknown') {
477
+ // The ChangeEventPlugin registers a "propertychange" event for
478
+ // IE. This event does not support bubbling or cancelling, and
479
+ // any references to cancelBubble throw "Member not found". A
480
+ // typeof check of "unknown" circumvents this issue (and is also
481
+ // IE specific).
482
+ event.cancelBubble = true;
397
483
  }
398
484
 
399
- if (!didFindChild) {
400
- // Search parent B's child set
401
- _child = parentB.child;
485
+ this.isPropagationStopped = functionThatReturnsTrue;
486
+ },
402
487
 
403
- while (_child) {
404
- if (_child === a) {
405
- didFindChild = true;
406
- a = parentB;
407
- b = parentA;
408
- break;
409
- }
488
+ /**
489
+ * We release all dispatched `SyntheticEvent`s after each event loop, adding
490
+ * them back into the pool. This allows a way to hold onto a reference that
491
+ * won't be added back into the pool.
492
+ */
493
+ persist: function () {
494
+ this.isPersistent = functionThatReturnsTrue;
495
+ },
410
496
 
411
- if (_child === b) {
412
- didFindChild = true;
413
- b = parentB;
414
- a = parentA;
415
- break;
416
- }
497
+ /**
498
+ * Checks if this event should be released back into the pool.
499
+ *
500
+ * @return {boolean} True if this should not be released, false otherwise.
501
+ */
502
+ isPersistent: functionThatReturnsFalse,
417
503
 
418
- _child = _child.sibling;
419
- }
504
+ /**
505
+ * `PooledClass` looks for `destructor` on each instance it releases.
506
+ */
507
+ destructor: function () {
508
+ var Interface = this.constructor.Interface;
420
509
 
421
- if (!didFindChild) {
422
- {
423
- throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.");
424
- }
510
+ for (var propName in Interface) {
511
+ {
512
+ Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));
425
513
  }
426
514
  }
427
- }
428
515
 
429
- if (!(a.alternate === b)) {
516
+ this.dispatchConfig = null;
517
+ this._targetInst = null;
518
+ this.nativeEvent = null;
519
+ this.isDefaultPrevented = functionThatReturnsFalse;
520
+ this.isPropagationStopped = functionThatReturnsFalse;
521
+ this._dispatchListeners = null;
522
+ this._dispatchInstances = null;
523
+
430
524
  {
431
- throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.");
525
+ Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));
526
+ Object.defineProperty(this, 'isDefaultPrevented', getPooledWarningPropertyDefinition('isDefaultPrevented', functionThatReturnsFalse));
527
+ Object.defineProperty(this, 'isPropagationStopped', getPooledWarningPropertyDefinition('isPropagationStopped', functionThatReturnsFalse));
528
+ Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', function () {}));
529
+ Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', function () {}));
432
530
  }
433
531
  }
434
- } // If the root is not a host container, we're in a disconnected tree. I.e.
435
- // unmounted.
532
+ });
436
533
 
534
+ SyntheticEvent.Interface = EventInterface;
535
+ /**
536
+ * Helper to reduce boilerplate when creating subclasses.
537
+ */
437
538
 
438
- if (!(a.tag === HostRoot)) {
439
- {
440
- throw Error("Unable to find node on an unmounted component.");
441
- }
442
- }
443
-
444
- if (a.stateNode.current === a) {
445
- // We've determined that A is the current branch.
446
- return fiber;
447
- } // Otherwise B has to be current branch.
539
+ SyntheticEvent.extend = function (Interface) {
540
+ var Super = this;
448
541
 
542
+ var E = function () {};
449
543
 
450
- return alternate;
451
- }
544
+ E.prototype = Super.prototype;
545
+ var prototype = new E();
452
546
 
453
- /* eslint valid-typeof: 0 */
454
- var EVENT_POOL_SIZE = 10;
455
- /**
456
- * @interface Event
457
- * @see http://www.w3.org/TR/DOM-Level-3-Events/
458
- */
547
+ function Class() {
548
+ return Super.apply(this, arguments);
549
+ }
459
550
 
460
- var EventInterface = {
461
- type: null,
462
- target: null,
463
- // currentTarget is set when dispatching; no use in copying it here
464
- currentTarget: function () {
465
- return null;
466
- },
467
- eventPhase: null,
468
- bubbles: null,
469
- cancelable: null,
470
- timeStamp: function (event) {
471
- return event.timeStamp || Date.now();
472
- },
473
- defaultPrevented: null,
474
- isTrusted: null
475
- };
476
-
477
- function functionThatReturnsTrue() {
478
- return true;
479
- }
480
-
481
- function functionThatReturnsFalse() {
482
- return false;
483
- }
484
- /**
485
- * Synthetic events are dispatched by event plugins, typically in response to a
486
- * top-level event delegation handler.
487
- *
488
- * These systems should generally use pooling to reduce the frequency of garbage
489
- * collection. The system should check `isPersistent` to determine whether the
490
- * event should be released into the pool after being dispatched. Users that
491
- * need a persisted event should invoke `persist`.
492
- *
493
- * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
494
- * normalizing browser quirks. Subclasses do not necessarily have to implement a
495
- * DOM interface; custom application-specific events can also subclass this.
496
- *
497
- * @param {object} dispatchConfig Configuration used to dispatch this event.
498
- * @param {*} targetInst Marker identifying the event target.
499
- * @param {object} nativeEvent Native browser event.
500
- * @param {DOMEventTarget} nativeEventTarget Target node.
501
- */
551
+ _assign(prototype, Class.prototype);
502
552
 
553
+ Class.prototype = prototype;
554
+ Class.prototype.constructor = Class;
555
+ Class.Interface = _assign({}, Super.Interface, Interface);
556
+ Class.extend = Super.extend;
557
+ addEventPoolingTo(Class);
558
+ return Class;
559
+ };
503
560
 
504
- function SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {
505
- {
506
- // these have a getter/setter for warnings
507
- delete this.nativeEvent;
508
- delete this.preventDefault;
509
- delete this.stopPropagation;
510
- delete this.isDefaultPrevented;
511
- delete this.isPropagationStopped;
512
- }
561
+ addEventPoolingTo(SyntheticEvent);
562
+ /**
563
+ * Helper to nullify syntheticEvent instance properties when destructing
564
+ *
565
+ * @param {String} propName
566
+ * @param {?object} getVal
567
+ * @return {object} defineProperty object
568
+ */
513
569
 
514
- this.dispatchConfig = dispatchConfig;
515
- this._targetInst = targetInst;
516
- this.nativeEvent = nativeEvent;
517
- var Interface = this.constructor.Interface;
570
+ function getPooledWarningPropertyDefinition(propName, getVal) {
571
+ var isFunction = typeof getVal === 'function';
572
+ return {
573
+ configurable: true,
574
+ set: set,
575
+ get: get
576
+ };
518
577
 
519
- for (var propName in Interface) {
520
- if (!Interface.hasOwnProperty(propName)) {
521
- continue;
578
+ function set(val) {
579
+ var action = isFunction ? 'setting the method' : 'setting the property';
580
+ warn(action, 'This is effectively a no-op');
581
+ return val;
522
582
  }
523
583
 
524
- {
525
- delete this[propName]; // this has a getter/setter for warnings
584
+ function get() {
585
+ var action = isFunction ? 'accessing the method' : 'accessing the property';
586
+ var result = isFunction ? 'This is a no-op function' : 'This is set to null';
587
+ warn(action, result);
588
+ return getVal;
526
589
  }
527
590
 
528
- var normalize = Interface[propName];
529
-
530
- if (normalize) {
531
- this[propName] = normalize(nativeEvent);
532
- } else {
533
- if (propName === 'target') {
534
- this.target = nativeEventTarget;
535
- } else {
536
- this[propName] = nativeEvent[propName];
591
+ function warn(action, result) {
592
+ {
593
+ error("This synthetic event is reused for performance reasons. If you're seeing this, " + "you're %s `%s` on a released/nullified synthetic event. %s. " + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result);
537
594
  }
538
595
  }
539
596
  }
540
597
 
541
- var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
542
-
543
- if (defaultPrevented) {
544
- this.isDefaultPrevented = functionThatReturnsTrue;
545
- } else {
546
- this.isDefaultPrevented = functionThatReturnsFalse;
547
- }
548
-
549
- this.isPropagationStopped = functionThatReturnsFalse;
550
- return this;
551
- }
598
+ function getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeInst) {
599
+ var EventConstructor = this;
552
600
 
553
- _assign(SyntheticEvent.prototype, {
554
- preventDefault: function () {
555
- this.defaultPrevented = true;
556
- var event = this.nativeEvent;
557
-
558
- if (!event) {
559
- return;
601
+ if (EventConstructor.eventPool.length) {
602
+ var instance = EventConstructor.eventPool.pop();
603
+ EventConstructor.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);
604
+ return instance;
560
605
  }
561
606
 
562
- if (event.preventDefault) {
563
- event.preventDefault();
564
- } else if (typeof event.returnValue !== 'unknown') {
565
- event.returnValue = false;
566
- }
607
+ return new EventConstructor(dispatchConfig, targetInst, nativeEvent, nativeInst);
608
+ }
567
609
 
568
- this.isDefaultPrevented = functionThatReturnsTrue;
569
- },
570
- stopPropagation: function () {
571
- var event = this.nativeEvent;
610
+ function releasePooledEvent(event) {
611
+ var EventConstructor = this;
572
612
 
573
- if (!event) {
574
- return;
613
+ if (!(event instanceof EventConstructor)) {
614
+ {
615
+ throw Error( "Trying to release an event instance into a pool of a different type." );
616
+ }
575
617
  }
576
618
 
577
- if (event.stopPropagation) {
578
- event.stopPropagation();
579
- } else if (typeof event.cancelBubble !== 'unknown') {
580
- // The ChangeEventPlugin registers a "propertychange" event for
581
- // IE. This event does not support bubbling or cancelling, and
582
- // any references to cancelBubble throw "Member not found". A
583
- // typeof check of "unknown" circumvents this issue (and is also
584
- // IE specific).
585
- event.cancelBubble = true;
619
+ event.destructor();
620
+
621
+ if (EventConstructor.eventPool.length < EVENT_POOL_SIZE) {
622
+ EventConstructor.eventPool.push(event);
586
623
  }
624
+ }
587
625
 
588
- this.isPropagationStopped = functionThatReturnsTrue;
589
- },
626
+ function addEventPoolingTo(EventConstructor) {
627
+ EventConstructor.eventPool = [];
628
+ EventConstructor.getPooled = getPooledEvent;
629
+ EventConstructor.release = releasePooledEvent;
630
+ }
590
631
 
591
632
  /**
592
- * We release all dispatched `SyntheticEvent`s after each event loop, adding
593
- * them back into the pool. This allows a way to hold onto a reference that
594
- * won't be added back into the pool.
633
+ * HTML nodeType values that represent the type of the node
595
634
  */
596
- persist: function () {
597
- this.isPersistent = functionThatReturnsTrue;
598
- },
635
+ var ELEMENT_NODE = 1;
636
+
637
+ // Do not use the below two methods directly!
638
+ // Instead use constants exported from DOMTopLevelEventTypes in ReactDOM.
639
+ // (It is the only module that is allowed to access these methods.)
640
+ function unsafeCastStringToDOMTopLevelType(topLevelType) {
641
+ return topLevelType;
642
+ }
643
+
644
+ var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');
599
645
 
600
646
  /**
601
- * Checks if this event should be released back into the pool.
647
+ * Generate a mapping of standard vendor prefixes using the defined style property and event name.
602
648
  *
603
- * @return {boolean} True if this should not be released, false otherwise.
649
+ * @param {string} styleProp
650
+ * @param {string} eventName
651
+ * @returns {object}
604
652
  */
605
- isPersistent: functionThatReturnsFalse,
606
653
 
654
+ function makePrefixMap(styleProp, eventName) {
655
+ var prefixes = {};
656
+ prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
657
+ prefixes['Webkit' + styleProp] = 'webkit' + eventName;
658
+ prefixes['Moz' + styleProp] = 'moz' + eventName;
659
+ return prefixes;
660
+ }
607
661
  /**
608
- * `PooledClass` looks for `destructor` on each instance it releases.
662
+ * A list of event names to a configurable list of vendor prefixes.
609
663
  */
610
- destructor: function () {
611
- var Interface = this.constructor.Interface;
612
664
 
613
- for (var propName in Interface) {
614
- {
615
- Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));
616
- }
617
- }
618
665
 
619
- this.dispatchConfig = null;
620
- this._targetInst = null;
621
- this.nativeEvent = null;
622
- this.isDefaultPrevented = functionThatReturnsFalse;
623
- this.isPropagationStopped = functionThatReturnsFalse;
624
- this._dispatchListeners = null;
625
- this._dispatchInstances = null;
666
+ var vendorPrefixes = {
667
+ animationend: makePrefixMap('Animation', 'AnimationEnd'),
668
+ animationiteration: makePrefixMap('Animation', 'AnimationIteration'),
669
+ animationstart: makePrefixMap('Animation', 'AnimationStart'),
670
+ transitionend: makePrefixMap('Transition', 'TransitionEnd')
671
+ };
672
+ /**
673
+ * Event names that have already been detected and prefixed (if applicable).
674
+ */
626
675
 
627
- {
628
- Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));
629
- Object.defineProperty(this, 'isDefaultPrevented', getPooledWarningPropertyDefinition('isDefaultPrevented', functionThatReturnsFalse));
630
- Object.defineProperty(this, 'isPropagationStopped', getPooledWarningPropertyDefinition('isPropagationStopped', functionThatReturnsFalse));
631
- Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', function () {}));
632
- Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', function () {}));
633
- }
634
- }
635
- });
676
+ var prefixedEventNames = {};
677
+ /**
678
+ * Element to check for prefixes on.
679
+ */
636
680
 
637
- SyntheticEvent.Interface = EventInterface;
638
- /**
639
- * Helper to reduce boilerplate when creating subclasses.
640
- */
681
+ var style = {};
682
+ /**
683
+ * Bootstrap if a DOM exists.
684
+ */
641
685
 
642
- SyntheticEvent.extend = function (Interface) {
643
- var Super = this;
686
+ if (canUseDOM) {
687
+ style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,
688
+ // the un-prefixed "animation" and "transition" properties are defined on the
689
+ // style object but the events that fire will still be prefixed, so we need
690
+ // to check if the un-prefixed events are usable, and if not remove them from the map.
644
691
 
645
- var E = function () {};
692
+ if (!('AnimationEvent' in window)) {
693
+ delete vendorPrefixes.animationend.animation;
694
+ delete vendorPrefixes.animationiteration.animation;
695
+ delete vendorPrefixes.animationstart.animation;
696
+ } // Same as above
646
697
 
647
- E.prototype = Super.prototype;
648
- var prototype = new E();
649
698
 
650
- function Class() {
651
- return Super.apply(this, arguments);
699
+ if (!('TransitionEvent' in window)) {
700
+ delete vendorPrefixes.transitionend.transition;
701
+ }
652
702
  }
703
+ /**
704
+ * Attempts to determine the correct vendor prefixed event name.
705
+ *
706
+ * @param {string} eventName
707
+ * @returns {string}
708
+ */
653
709
 
654
- _assign(prototype, Class.prototype);
655
710
 
656
- Class.prototype = prototype;
657
- Class.prototype.constructor = Class;
658
- Class.Interface = _assign({}, Super.Interface, Interface);
659
- Class.extend = Super.extend;
660
- addEventPoolingTo(Class);
661
- return Class;
662
- };
711
+ function getVendorPrefixedEventName(eventName) {
712
+ if (prefixedEventNames[eventName]) {
713
+ return prefixedEventNames[eventName];
714
+ } else if (!vendorPrefixes[eventName]) {
715
+ return eventName;
716
+ }
663
717
 
664
- addEventPoolingTo(SyntheticEvent);
665
- /**
666
- * Helper to nullify syntheticEvent instance properties when destructing
667
- *
668
- * @param {String} propName
669
- * @param {?object} getVal
670
- * @return {object} defineProperty object
671
- */
718
+ var prefixMap = vendorPrefixes[eventName];
672
719
 
673
- function getPooledWarningPropertyDefinition(propName, getVal) {
674
- var isFunction = typeof getVal === 'function';
675
- return {
676
- configurable: true,
677
- set: set,
678
- get: get
679
- };
720
+ for (var styleProp in prefixMap) {
721
+ if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {
722
+ return prefixedEventNames[eventName] = prefixMap[styleProp];
723
+ }
724
+ }
680
725
 
681
- function set(val) {
682
- var action = isFunction ? 'setting the method' : 'setting the property';
683
- warn(action, 'This is effectively a no-op');
684
- return val;
726
+ return eventName;
685
727
  }
686
728
 
687
- function get() {
688
- var action = isFunction ? 'accessing the method' : 'accessing the property';
689
- var result = isFunction ? 'This is a no-op function' : 'This is set to null';
690
- warn(action, result);
691
- return getVal;
692
- }
729
+ /**
730
+ * To identify top level events in ReactDOM, we use constants defined by this
731
+ * module. This is the only module that uses the unsafe* methods to express
732
+ * that the constants actually correspond to the browser event names. This lets
733
+ * us save some bundle size by avoiding a top level type -> event name map.
734
+ * The rest of ReactDOM code should import top level types from this file.
735
+ */
693
736
 
694
- function warn(action, result) {
695
- var warningCondition = false;
696
- !warningCondition ? warningWithoutStack$1(false, "This synthetic event is reused for performance reasons. If you're seeing this, " + "you're %s `%s` on a released/nullified synthetic event. %s. " + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;
697
- }
698
- }
699
-
700
- function getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeInst) {
701
- var EventConstructor = this;
702
-
703
- if (EventConstructor.eventPool.length) {
704
- var instance = EventConstructor.eventPool.pop();
705
- EventConstructor.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);
706
- return instance;
707
- }
708
-
709
- return new EventConstructor(dispatchConfig, targetInst, nativeEvent, nativeInst);
710
- }
737
+ var TOP_ABORT = unsafeCastStringToDOMTopLevelType('abort');
738
+ var TOP_ANIMATION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationend'));
739
+ var TOP_ANIMATION_ITERATION = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationiteration'));
740
+ var TOP_ANIMATION_START = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationstart'));
741
+ var TOP_BLUR = unsafeCastStringToDOMTopLevelType('blur');
742
+ var TOP_CAN_PLAY = unsafeCastStringToDOMTopLevelType('canplay');
743
+ var TOP_CAN_PLAY_THROUGH = unsafeCastStringToDOMTopLevelType('canplaythrough');
744
+ var TOP_CANCEL = unsafeCastStringToDOMTopLevelType('cancel');
745
+ var TOP_CHANGE = unsafeCastStringToDOMTopLevelType('change');
746
+ var TOP_CLICK = unsafeCastStringToDOMTopLevelType('click');
747
+ var TOP_CLOSE = unsafeCastStringToDOMTopLevelType('close');
748
+ var TOP_COMPOSITION_END = unsafeCastStringToDOMTopLevelType('compositionend');
749
+ var TOP_COMPOSITION_START = unsafeCastStringToDOMTopLevelType('compositionstart');
750
+ var TOP_COMPOSITION_UPDATE = unsafeCastStringToDOMTopLevelType('compositionupdate');
751
+ var TOP_CONTEXT_MENU = unsafeCastStringToDOMTopLevelType('contextmenu');
752
+ var TOP_COPY = unsafeCastStringToDOMTopLevelType('copy');
753
+ var TOP_CUT = unsafeCastStringToDOMTopLevelType('cut');
754
+ var TOP_DOUBLE_CLICK = unsafeCastStringToDOMTopLevelType('dblclick');
755
+ var TOP_DRAG = unsafeCastStringToDOMTopLevelType('drag');
756
+ var TOP_DRAG_END = unsafeCastStringToDOMTopLevelType('dragend');
757
+ var TOP_DRAG_ENTER = unsafeCastStringToDOMTopLevelType('dragenter');
758
+ var TOP_DRAG_EXIT = unsafeCastStringToDOMTopLevelType('dragexit');
759
+ var TOP_DRAG_LEAVE = unsafeCastStringToDOMTopLevelType('dragleave');
760
+ var TOP_DRAG_OVER = unsafeCastStringToDOMTopLevelType('dragover');
761
+ var TOP_DRAG_START = unsafeCastStringToDOMTopLevelType('dragstart');
762
+ var TOP_DROP = unsafeCastStringToDOMTopLevelType('drop');
763
+ var TOP_DURATION_CHANGE = unsafeCastStringToDOMTopLevelType('durationchange');
764
+ var TOP_EMPTIED = unsafeCastStringToDOMTopLevelType('emptied');
765
+ var TOP_ENCRYPTED = unsafeCastStringToDOMTopLevelType('encrypted');
766
+ var TOP_ENDED = unsafeCastStringToDOMTopLevelType('ended');
767
+ var TOP_ERROR = unsafeCastStringToDOMTopLevelType('error');
768
+ var TOP_FOCUS = unsafeCastStringToDOMTopLevelType('focus');
769
+ var TOP_INPUT = unsafeCastStringToDOMTopLevelType('input');
770
+ var TOP_KEY_DOWN = unsafeCastStringToDOMTopLevelType('keydown');
771
+ var TOP_KEY_PRESS = unsafeCastStringToDOMTopLevelType('keypress');
772
+ var TOP_KEY_UP = unsafeCastStringToDOMTopLevelType('keyup');
773
+ var TOP_LOAD = unsafeCastStringToDOMTopLevelType('load');
774
+ var TOP_LOAD_START = unsafeCastStringToDOMTopLevelType('loadstart');
775
+ var TOP_LOADED_DATA = unsafeCastStringToDOMTopLevelType('loadeddata');
776
+ var TOP_LOADED_METADATA = unsafeCastStringToDOMTopLevelType('loadedmetadata');
777
+ var TOP_MOUSE_DOWN = unsafeCastStringToDOMTopLevelType('mousedown');
778
+ var TOP_MOUSE_MOVE = unsafeCastStringToDOMTopLevelType('mousemove');
779
+ var TOP_MOUSE_OUT = unsafeCastStringToDOMTopLevelType('mouseout');
780
+ var TOP_MOUSE_OVER = unsafeCastStringToDOMTopLevelType('mouseover');
781
+ var TOP_MOUSE_UP = unsafeCastStringToDOMTopLevelType('mouseup');
782
+ var TOP_PASTE = unsafeCastStringToDOMTopLevelType('paste');
783
+ var TOP_PAUSE = unsafeCastStringToDOMTopLevelType('pause');
784
+ var TOP_PLAY = unsafeCastStringToDOMTopLevelType('play');
785
+ var TOP_PLAYING = unsafeCastStringToDOMTopLevelType('playing');
786
+ var TOP_PROGRESS = unsafeCastStringToDOMTopLevelType('progress');
787
+ var TOP_RATE_CHANGE = unsafeCastStringToDOMTopLevelType('ratechange');
788
+ var TOP_SCROLL = unsafeCastStringToDOMTopLevelType('scroll');
789
+ var TOP_SEEKED = unsafeCastStringToDOMTopLevelType('seeked');
790
+ var TOP_SEEKING = unsafeCastStringToDOMTopLevelType('seeking');
791
+ var TOP_SELECTION_CHANGE = unsafeCastStringToDOMTopLevelType('selectionchange');
792
+ var TOP_STALLED = unsafeCastStringToDOMTopLevelType('stalled');
793
+ var TOP_SUSPEND = unsafeCastStringToDOMTopLevelType('suspend');
794
+ var TOP_TEXT_INPUT = unsafeCastStringToDOMTopLevelType('textInput');
795
+ var TOP_TIME_UPDATE = unsafeCastStringToDOMTopLevelType('timeupdate');
796
+ var TOP_TOGGLE = unsafeCastStringToDOMTopLevelType('toggle');
797
+ var TOP_TOUCH_CANCEL = unsafeCastStringToDOMTopLevelType('touchcancel');
798
+ var TOP_TOUCH_END = unsafeCastStringToDOMTopLevelType('touchend');
799
+ var TOP_TOUCH_MOVE = unsafeCastStringToDOMTopLevelType('touchmove');
800
+ var TOP_TOUCH_START = unsafeCastStringToDOMTopLevelType('touchstart');
801
+ var TOP_TRANSITION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('transitionend'));
802
+ var TOP_VOLUME_CHANGE = unsafeCastStringToDOMTopLevelType('volumechange');
803
+ var TOP_WAITING = unsafeCastStringToDOMTopLevelType('waiting');
804
+ var TOP_WHEEL = unsafeCastStringToDOMTopLevelType('wheel'); // List of events that need to be individually attached to media elements.
805
+
806
+ var PLUGIN_EVENT_SYSTEM = 1;
807
+
808
+ var didWarnAboutMessageChannel = false;
809
+ var enqueueTaskImpl = null;
810
+ function enqueueTask(task) {
811
+ if (enqueueTaskImpl === null) {
812
+ try {
813
+ // read require off the module object to get around the bundlers.
814
+ // we don't want them to detect a require and bundle a Node polyfill.
815
+ var requireString = ('require' + Math.random()).slice(0, 7);
816
+ var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's
817
+ // version of setImmediate, bypassing fake timers if any.
818
+
819
+ enqueueTaskImpl = nodeRequire('timers').setImmediate;
820
+ } catch (_err) {
821
+ // we're in a browser
822
+ // we can't use regular timers because they may still be faked
823
+ // so we try MessageChannel+postMessage instead
824
+ enqueueTaskImpl = function (callback) {
825
+ {
826
+ if (didWarnAboutMessageChannel === false) {
827
+ didWarnAboutMessageChannel = true;
711
828
 
712
- function releasePooledEvent(event) {
713
- var EventConstructor = this;
829
+ if (typeof MessageChannel === 'undefined') {
830
+ error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.');
831
+ }
832
+ }
833
+ }
714
834
 
715
- if (!(event instanceof EventConstructor)) {
716
- {
717
- throw Error("Trying to release an event instance into a pool of a different type.");
835
+ var channel = new MessageChannel();
836
+ channel.port1.onmessage = callback;
837
+ channel.port2.postMessage(undefined);
838
+ };
839
+ }
718
840
  }
719
- }
720
-
721
- event.destructor();
722
841
 
723
- if (EventConstructor.eventPool.length < EVENT_POOL_SIZE) {
724
- EventConstructor.eventPool.push(event);
842
+ return enqueueTaskImpl(task);
725
843
  }
726
- }
727
844
 
728
- function addEventPoolingTo(EventConstructor) {
729
- EventConstructor.eventPool = [];
730
- EventConstructor.getPooled = getPooledEvent;
731
- EventConstructor.release = releasePooledEvent;
732
- }
845
+ var ReactInternals$1 = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
846
+ var _ReactInternals$Sched = ReactInternals$1.Scheduler,
847
+ unstable_cancelCallback = _ReactInternals$Sched.unstable_cancelCallback,
848
+ unstable_now = _ReactInternals$Sched.unstable_now,
849
+ unstable_scheduleCallback = _ReactInternals$Sched.unstable_scheduleCallback,
850
+ unstable_shouldYield = _ReactInternals$Sched.unstable_shouldYield,
851
+ unstable_requestPaint = _ReactInternals$Sched.unstable_requestPaint,
852
+ unstable_getFirstCallbackNode = _ReactInternals$Sched.unstable_getFirstCallbackNode,
853
+ unstable_runWithPriority = _ReactInternals$Sched.unstable_runWithPriority,
854
+ unstable_next = _ReactInternals$Sched.unstable_next,
855
+ unstable_continueExecution = _ReactInternals$Sched.unstable_continueExecution,
856
+ unstable_pauseExecution = _ReactInternals$Sched.unstable_pauseExecution,
857
+ unstable_getCurrentPriorityLevel = _ReactInternals$Sched.unstable_getCurrentPriorityLevel,
858
+ unstable_ImmediatePriority = _ReactInternals$Sched.unstable_ImmediatePriority,
859
+ unstable_UserBlockingPriority = _ReactInternals$Sched.unstable_UserBlockingPriority,
860
+ unstable_NormalPriority = _ReactInternals$Sched.unstable_NormalPriority,
861
+ unstable_LowPriority = _ReactInternals$Sched.unstable_LowPriority,
862
+ unstable_IdlePriority = _ReactInternals$Sched.unstable_IdlePriority,
863
+ unstable_forceFrameRate = _ReactInternals$Sched.unstable_forceFrameRate,
864
+ unstable_flushAllWithoutAsserting = _ReactInternals$Sched.unstable_flushAllWithoutAsserting;
865
+
866
+ // ReactDOM.js, and ReactTestUtils.js:
867
+
868
+ var _ReactDOM$__SECRET_IN = ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Events,
869
+
870
+ /* eslint-disable no-unused-vars */
871
+ getInstanceFromNode = _ReactDOM$__SECRET_IN[0],
872
+ getNodeFromInstance = _ReactDOM$__SECRET_IN[1],
873
+ getFiberCurrentPropsFromNode = _ReactDOM$__SECRET_IN[2],
874
+ injectEventPluginsByName = _ReactDOM$__SECRET_IN[3],
875
+ eventNameDispatchConfigs = _ReactDOM$__SECRET_IN[4],
876
+ accumulateTwoPhaseDispatches = _ReactDOM$__SECRET_IN[5],
877
+ accumulateDirectDispatches = _ReactDOM$__SECRET_IN[6],
878
+ enqueueStateRestore = _ReactDOM$__SECRET_IN[7],
879
+ restoreStateIfNeeded = _ReactDOM$__SECRET_IN[8],
880
+ dispatchEvent = _ReactDOM$__SECRET_IN[9],
881
+ runEventsInBatch = _ReactDOM$__SECRET_IN[10],
882
+
883
+ /* eslint-enable no-unused-vars */
884
+ flushPassiveEffects = _ReactDOM$__SECRET_IN[11],
885
+ IsThisRendererActing = _ReactDOM$__SECRET_IN[12];
886
+ var batchedUpdates = ReactDOM.unstable_batchedUpdates;
887
+ var IsSomeRendererActing = ReactSharedInternals.IsSomeRendererActing; // this implementation should be exactly the same in
888
+ // ReactTestUtilsAct.js, ReactTestRendererAct.js, createReactNoop.js
889
+
890
+ var isSchedulerMocked = typeof unstable_flushAllWithoutAsserting === 'function';
891
+
892
+ var flushWork = unstable_flushAllWithoutAsserting || function () {
893
+ var didFlushWork = false;
894
+
895
+ while (flushPassiveEffects()) {
896
+ didFlushWork = true;
897
+ }
733
898
 
734
- /**
735
- * Forked from fbjs/warning:
736
- * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js
737
- *
738
- * Only change is we use console.warn instead of console.error,
739
- * and do nothing when 'console' is not supported.
740
- * This really simplifies the code.
741
- * ---
742
- * Similar to invariant but only logs a warning if the condition is not met.
743
- * This can be used to log issues in development environments in critical
744
- * paths. Removing the logging code for production environments will keep the
745
- * same logic and follow the same code paths.
746
- */
747
- var lowPriorityWarningWithoutStack = function () {};
899
+ return didFlushWork;
900
+ };
748
901
 
749
- {
750
- var printWarning = function (format) {
751
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
752
- args[_key - 1] = arguments[_key];
902
+ function flushWorkAndMicroTasks(onDone) {
903
+ try {
904
+ flushWork();
905
+ enqueueTask(function () {
906
+ if (flushWork()) {
907
+ flushWorkAndMicroTasks(onDone);
908
+ } else {
909
+ onDone();
910
+ }
911
+ });
912
+ } catch (err) {
913
+ onDone(err);
753
914
  }
915
+ } // we track the 'depth' of the act() calls with this counter,
916
+ // so we can tell if any async act() calls try to run in parallel.
754
917
 
755
- var argIndex = 0;
756
- var message = 'Warning: ' + format.replace(/%s/g, function () {
757
- return args[argIndex++];
758
- });
759
918
 
760
- if (typeof console !== 'undefined') {
761
- console.warn(message);
762
- }
919
+ var actingUpdatesScopeDepth = 0;
763
920
 
764
- try {
765
- // --- Welcome to debugging React ---
766
- // This error was thrown as a convenience so that you can use this stack
767
- // to find the callsite that caused this warning to fire.
768
- throw new Error(message);
769
- } catch (x) {}
770
- };
921
+ function act(callback) {
771
922
 
772
- lowPriorityWarningWithoutStack = function (condition, format) {
773
- if (format === undefined) {
774
- throw new Error('`lowPriorityWarningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');
775
- }
923
+ var previousActingUpdatesScopeDepth = actingUpdatesScopeDepth;
924
+ var previousIsSomeRendererActing;
925
+ var previousIsThisRendererActing;
926
+ actingUpdatesScopeDepth++;
927
+ previousIsSomeRendererActing = IsSomeRendererActing.current;
928
+ previousIsThisRendererActing = IsThisRendererActing.current;
929
+ IsSomeRendererActing.current = true;
930
+ IsThisRendererActing.current = true;
776
931
 
777
- if (!condition) {
778
- for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
779
- args[_key2 - 2] = arguments[_key2];
780
- }
932
+ function onDone() {
933
+ actingUpdatesScopeDepth--;
934
+ IsSomeRendererActing.current = previousIsSomeRendererActing;
935
+ IsThisRendererActing.current = previousIsThisRendererActing;
781
936
 
782
- printWarning.apply(void 0, [format].concat(args));
937
+ {
938
+ if (actingUpdatesScopeDepth > previousActingUpdatesScopeDepth) {
939
+ // if it's _less than_ previousActingUpdatesScopeDepth, then we can assume the 'other' one has warned
940
+ error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ');
941
+ }
942
+ }
783
943
  }
784
- };
785
- }
786
944
 
787
- var lowPriorityWarningWithoutStack$1 = lowPriorityWarningWithoutStack;
945
+ var result;
788
946
 
789
- /**
790
- * HTML nodeType values that represent the type of the node
791
- */
792
- var ELEMENT_NODE = 1;
793
-
794
- // Do not use the below two methods directly!
795
- // Instead use constants exported from DOMTopLevelEventTypes in ReactDOM.
796
- // (It is the only module that is allowed to access these methods.)
797
- function unsafeCastStringToDOMTopLevelType(topLevelType) {
798
- return topLevelType;
799
- }
947
+ try {
948
+ result = batchedUpdates(callback);
949
+ } catch (error) {
950
+ // on sync errors, we still want to 'cleanup' and decrement actingUpdatesScopeDepth
951
+ onDone();
952
+ throw error;
953
+ }
800
954
 
801
- var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');
955
+ if (result !== null && typeof result === 'object' && typeof result.then === 'function') {
956
+ // setup a boolean that gets set to true only
957
+ // once this act() call is await-ed
958
+ var called = false;
802
959
 
803
- /**
804
- * Generate a mapping of standard vendor prefixes using the defined style property and event name.
805
- *
806
- * @param {string} styleProp
807
- * @param {string} eventName
808
- * @returns {object}
809
- */
960
+ {
961
+ if (typeof Promise !== 'undefined') {
962
+ //eslint-disable-next-line no-undef
963
+ Promise.resolve().then(function () {}).then(function () {
964
+ if (called === false) {
965
+ error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, interleaving multiple act ' + 'calls and mixing their scopes. You should - await act(async () => ...);');
966
+ }
967
+ });
968
+ }
969
+ } // in the async case, the returned thenable runs the callback, flushes
970
+ // effects and microtasks in a loop until flushPassiveEffects() === false,
971
+ // and cleans up
810
972
 
811
- function makePrefixMap(styleProp, eventName) {
812
- var prefixes = {};
813
- prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
814
- prefixes['Webkit' + styleProp] = 'webkit' + eventName;
815
- prefixes['Moz' + styleProp] = 'moz' + eventName;
816
- return prefixes;
817
- }
818
- /**
819
- * A list of event names to a configurable list of vendor prefixes.
820
- */
821
973
 
974
+ return {
975
+ then: function (resolve, reject) {
976
+ called = true;
977
+ result.then(function () {
978
+ if (actingUpdatesScopeDepth > 1 || isSchedulerMocked === true && previousIsSomeRendererActing === true) {
979
+ onDone();
980
+ resolve();
981
+ return;
982
+ } // we're about to exit the act() scope,
983
+ // now's the time to flush tasks/effects
822
984
 
823
- var vendorPrefixes = {
824
- animationend: makePrefixMap('Animation', 'AnimationEnd'),
825
- animationiteration: makePrefixMap('Animation', 'AnimationIteration'),
826
- animationstart: makePrefixMap('Animation', 'AnimationStart'),
827
- transitionend: makePrefixMap('Transition', 'TransitionEnd')
828
- };
829
- /**
830
- * Event names that have already been detected and prefixed (if applicable).
831
- */
832
985
 
833
- var prefixedEventNames = {};
834
- /**
835
- * Element to check for prefixes on.
836
- */
986
+ flushWorkAndMicroTasks(function (err) {
987
+ onDone();
837
988
 
838
- var style = {};
839
- /**
840
- * Bootstrap if a DOM exists.
841
- */
989
+ if (err) {
990
+ reject(err);
991
+ } else {
992
+ resolve();
993
+ }
994
+ });
995
+ }, function (err) {
996
+ onDone();
997
+ reject(err);
998
+ });
999
+ }
1000
+ };
1001
+ } else {
1002
+ {
1003
+ if (result !== undefined) {
1004
+ error('The callback passed to act(...) function ' + 'must return undefined, or a Promise. You returned %s', result);
1005
+ }
1006
+ } // flush effects until none remain, and cleanup
842
1007
 
843
- if (canUseDOM) {
844
- style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,
845
- // the un-prefixed "animation" and "transition" properties are defined on the
846
- // style object but the events that fire will still be prefixed, so we need
847
- // to check if the un-prefixed events are usable, and if not remove them from the map.
848
1008
 
849
- if (!('AnimationEvent' in window)) {
850
- delete vendorPrefixes.animationend.animation;
851
- delete vendorPrefixes.animationiteration.animation;
852
- delete vendorPrefixes.animationstart.animation;
853
- } // Same as above
1009
+ try {
1010
+ if (actingUpdatesScopeDepth === 1 && (isSchedulerMocked === false || previousIsSomeRendererActing === false)) {
1011
+ // we're about to exit the act() scope,
1012
+ // now's the time to flush effects
1013
+ flushWork();
1014
+ }
854
1015
 
1016
+ onDone();
1017
+ } catch (err) {
1018
+ onDone();
1019
+ throw err;
1020
+ } // in the sync case, the returned thenable only warns *if* await-ed
855
1021
 
856
- if (!('TransitionEvent' in window)) {
857
- delete vendorPrefixes.transitionend.transition;
858
- }
859
- }
860
- /**
861
- * Attempts to determine the correct vendor prefixed event name.
862
- *
863
- * @param {string} eventName
864
- * @returns {string}
865
- */
866
1022
 
1023
+ return {
1024
+ then: function (resolve) {
1025
+ {
1026
+ error('Do not await the result of calling act(...) with sync logic, it is not a Promise.');
1027
+ }
867
1028
 
868
- function getVendorPrefixedEventName(eventName) {
869
- if (prefixedEventNames[eventName]) {
870
- return prefixedEventNames[eventName];
871
- } else if (!vendorPrefixes[eventName]) {
872
- return eventName;
1029
+ resolve();
1030
+ }
1031
+ };
1032
+ }
873
1033
  }
874
1034
 
875
- var prefixMap = vendorPrefixes[eventName];
1035
+ var findDOMNode = ReactDOM.findDOMNode; // Keep in sync with ReactDOMUnstableNativeDependencies.js
1036
+ // ReactDOM.js, and ReactTestUtilsAct.js:
876
1037
 
877
- for (var styleProp in prefixMap) {
878
- if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {
879
- return prefixedEventNames[eventName] = prefixMap[styleProp];
880
- }
881
- }
1038
+ var _ReactDOM$__SECRET_IN$1 = ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Events,
1039
+ getInstanceFromNode$1 = _ReactDOM$__SECRET_IN$1[0],
882
1040
 
883
- return eventName;
884
- }
1041
+ /* eslint-disable no-unused-vars */
1042
+ getNodeFromInstance$1 = _ReactDOM$__SECRET_IN$1[1],
1043
+ getFiberCurrentPropsFromNode$1 = _ReactDOM$__SECRET_IN$1[2],
1044
+ injectEventPluginsByName$1 = _ReactDOM$__SECRET_IN$1[3],
885
1045
 
886
- /**
887
- * To identify top level events in ReactDOM, we use constants defined by this
888
- * module. This is the only module that uses the unsafe* methods to express
889
- * that the constants actually correspond to the browser event names. This lets
890
- * us save some bundle size by avoiding a top level type -> event name map.
891
- * The rest of ReactDOM code should import top level types from this file.
892
- */
1046
+ /* eslint-enable no-unused-vars */
1047
+ eventNameDispatchConfigs$1 = _ReactDOM$__SECRET_IN$1[4],
1048
+ accumulateTwoPhaseDispatches$1 = _ReactDOM$__SECRET_IN$1[5],
1049
+ accumulateDirectDispatches$1 = _ReactDOM$__SECRET_IN$1[6],
1050
+ enqueueStateRestore$1 = _ReactDOM$__SECRET_IN$1[7],
1051
+ restoreStateIfNeeded$1 = _ReactDOM$__SECRET_IN$1[8],
1052
+ dispatchEvent$1 = _ReactDOM$__SECRET_IN$1[9],
1053
+ runEventsInBatch$1 = _ReactDOM$__SECRET_IN$1[10],
893
1054
 
894
- var TOP_ABORT = unsafeCastStringToDOMTopLevelType('abort');
895
- var TOP_ANIMATION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationend'));
896
- var TOP_ANIMATION_ITERATION = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationiteration'));
897
- var TOP_ANIMATION_START = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationstart'));
898
- var TOP_BLUR = unsafeCastStringToDOMTopLevelType('blur');
899
- var TOP_CAN_PLAY = unsafeCastStringToDOMTopLevelType('canplay');
900
- var TOP_CAN_PLAY_THROUGH = unsafeCastStringToDOMTopLevelType('canplaythrough');
901
- var TOP_CANCEL = unsafeCastStringToDOMTopLevelType('cancel');
902
- var TOP_CHANGE = unsafeCastStringToDOMTopLevelType('change');
903
- var TOP_CLICK = unsafeCastStringToDOMTopLevelType('click');
904
- var TOP_CLOSE = unsafeCastStringToDOMTopLevelType('close');
905
- var TOP_COMPOSITION_END = unsafeCastStringToDOMTopLevelType('compositionend');
906
- var TOP_COMPOSITION_START = unsafeCastStringToDOMTopLevelType('compositionstart');
907
- var TOP_COMPOSITION_UPDATE = unsafeCastStringToDOMTopLevelType('compositionupdate');
908
- var TOP_CONTEXT_MENU = unsafeCastStringToDOMTopLevelType('contextmenu');
909
- var TOP_COPY = unsafeCastStringToDOMTopLevelType('copy');
910
- var TOP_CUT = unsafeCastStringToDOMTopLevelType('cut');
911
- var TOP_DOUBLE_CLICK = unsafeCastStringToDOMTopLevelType('dblclick');
912
-
913
- var TOP_DRAG = unsafeCastStringToDOMTopLevelType('drag');
914
- var TOP_DRAG_END = unsafeCastStringToDOMTopLevelType('dragend');
915
- var TOP_DRAG_ENTER = unsafeCastStringToDOMTopLevelType('dragenter');
916
- var TOP_DRAG_EXIT = unsafeCastStringToDOMTopLevelType('dragexit');
917
- var TOP_DRAG_LEAVE = unsafeCastStringToDOMTopLevelType('dragleave');
918
- var TOP_DRAG_OVER = unsafeCastStringToDOMTopLevelType('dragover');
919
- var TOP_DRAG_START = unsafeCastStringToDOMTopLevelType('dragstart');
920
- var TOP_DROP = unsafeCastStringToDOMTopLevelType('drop');
921
- var TOP_DURATION_CHANGE = unsafeCastStringToDOMTopLevelType('durationchange');
922
- var TOP_EMPTIED = unsafeCastStringToDOMTopLevelType('emptied');
923
- var TOP_ENCRYPTED = unsafeCastStringToDOMTopLevelType('encrypted');
924
- var TOP_ENDED = unsafeCastStringToDOMTopLevelType('ended');
925
- var TOP_ERROR = unsafeCastStringToDOMTopLevelType('error');
926
- var TOP_FOCUS = unsafeCastStringToDOMTopLevelType('focus');
927
-
928
- var TOP_INPUT = unsafeCastStringToDOMTopLevelType('input');
929
-
930
- var TOP_KEY_DOWN = unsafeCastStringToDOMTopLevelType('keydown');
931
- var TOP_KEY_PRESS = unsafeCastStringToDOMTopLevelType('keypress');
932
- var TOP_KEY_UP = unsafeCastStringToDOMTopLevelType('keyup');
933
- var TOP_LOAD = unsafeCastStringToDOMTopLevelType('load');
934
- var TOP_LOAD_START = unsafeCastStringToDOMTopLevelType('loadstart');
935
- var TOP_LOADED_DATA = unsafeCastStringToDOMTopLevelType('loadeddata');
936
- var TOP_LOADED_METADATA = unsafeCastStringToDOMTopLevelType('loadedmetadata');
937
-
938
- var TOP_MOUSE_DOWN = unsafeCastStringToDOMTopLevelType('mousedown');
939
- var TOP_MOUSE_MOVE = unsafeCastStringToDOMTopLevelType('mousemove');
940
- var TOP_MOUSE_OUT = unsafeCastStringToDOMTopLevelType('mouseout');
941
- var TOP_MOUSE_OVER = unsafeCastStringToDOMTopLevelType('mouseover');
942
- var TOP_MOUSE_UP = unsafeCastStringToDOMTopLevelType('mouseup');
943
- var TOP_PASTE = unsafeCastStringToDOMTopLevelType('paste');
944
- var TOP_PAUSE = unsafeCastStringToDOMTopLevelType('pause');
945
- var TOP_PLAY = unsafeCastStringToDOMTopLevelType('play');
946
- var TOP_PLAYING = unsafeCastStringToDOMTopLevelType('playing');
947
-
948
-
949
-
950
-
951
-
952
-
953
-
954
-
955
- var TOP_PROGRESS = unsafeCastStringToDOMTopLevelType('progress');
956
- var TOP_RATE_CHANGE = unsafeCastStringToDOMTopLevelType('ratechange');
957
-
958
- var TOP_SCROLL = unsafeCastStringToDOMTopLevelType('scroll');
959
- var TOP_SEEKED = unsafeCastStringToDOMTopLevelType('seeked');
960
- var TOP_SEEKING = unsafeCastStringToDOMTopLevelType('seeking');
961
- var TOP_SELECTION_CHANGE = unsafeCastStringToDOMTopLevelType('selectionchange');
962
- var TOP_STALLED = unsafeCastStringToDOMTopLevelType('stalled');
963
-
964
- var TOP_SUSPEND = unsafeCastStringToDOMTopLevelType('suspend');
965
- var TOP_TEXT_INPUT = unsafeCastStringToDOMTopLevelType('textInput');
966
- var TOP_TIME_UPDATE = unsafeCastStringToDOMTopLevelType('timeupdate');
967
- var TOP_TOGGLE = unsafeCastStringToDOMTopLevelType('toggle');
968
- var TOP_TOUCH_CANCEL = unsafeCastStringToDOMTopLevelType('touchcancel');
969
- var TOP_TOUCH_END = unsafeCastStringToDOMTopLevelType('touchend');
970
- var TOP_TOUCH_MOVE = unsafeCastStringToDOMTopLevelType('touchmove');
971
- var TOP_TOUCH_START = unsafeCastStringToDOMTopLevelType('touchstart');
972
- var TOP_TRANSITION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('transitionend'));
973
- var TOP_VOLUME_CHANGE = unsafeCastStringToDOMTopLevelType('volumechange');
974
- var TOP_WAITING = unsafeCastStringToDOMTopLevelType('waiting');
975
- var TOP_WHEEL = unsafeCastStringToDOMTopLevelType('wheel'); // List of events that need to be individually attached to media elements.
976
- // Note that events in this list will *not* be listened to at the top level
977
- // unless they're explicitly whitelisted in `ReactBrowserEventEmitter.listenTo`.
978
-
979
- var PLUGIN_EVENT_SYSTEM = 1;
980
-
981
- var didWarnAboutMessageChannel = false;
982
- var enqueueTask;
983
-
984
- try {
985
- // read require off the module object to get around the bundlers.
986
- // we don't want them to detect a require and bundle a Node polyfill.
987
- var requireString = ('require' + Math.random()).slice(0, 7);
988
- var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's
989
- // version of setImmediate, bypassing fake timers if any.
990
-
991
- enqueueTask = nodeRequire('timers').setImmediate;
992
- } catch (_err) {
993
- // we're in a browser
994
- // we can't use regular timers because they may still be faked
995
- // so we try MessageChannel+postMessage instead
996
- enqueueTask = function (callback) {
997
- {
998
- if (didWarnAboutMessageChannel === false) {
999
- didWarnAboutMessageChannel = true;
1000
- !(typeof MessageChannel !== 'undefined') ? warningWithoutStack$1(false, 'This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.') : void 0;
1001
- }
1002
- }
1055
+ /* eslint-disable no-unused-vars */
1056
+ flushPassiveEffects$1 = _ReactDOM$__SECRET_IN$1[11],
1057
+ IsThisRendererActing$1
1058
+ /* eslint-enable no-unused-vars */
1059
+ = _ReactDOM$__SECRET_IN$1[12];
1003
1060
 
1004
- var channel = new MessageChannel();
1005
- channel.port1.onmessage = callback;
1006
- channel.port2.postMessage(undefined);
1007
- };
1008
- }
1009
-
1010
- var enqueueTask$1 = enqueueTask;
1011
-
1012
- var ReactInternals$1 = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
1013
- var _ReactInternals$Sched = ReactInternals$1.Scheduler;
1014
- var unstable_cancelCallback = _ReactInternals$Sched.unstable_cancelCallback;
1015
- var unstable_now = _ReactInternals$Sched.unstable_now;
1016
- var unstable_scheduleCallback = _ReactInternals$Sched.unstable_scheduleCallback;
1017
- var unstable_shouldYield = _ReactInternals$Sched.unstable_shouldYield;
1018
- var unstable_requestPaint = _ReactInternals$Sched.unstable_requestPaint;
1019
- var unstable_getFirstCallbackNode = _ReactInternals$Sched.unstable_getFirstCallbackNode;
1020
- var unstable_runWithPriority = _ReactInternals$Sched.unstable_runWithPriority;
1021
- var unstable_next = _ReactInternals$Sched.unstable_next;
1022
- var unstable_continueExecution = _ReactInternals$Sched.unstable_continueExecution;
1023
- var unstable_pauseExecution = _ReactInternals$Sched.unstable_pauseExecution;
1024
- var unstable_getCurrentPriorityLevel = _ReactInternals$Sched.unstable_getCurrentPriorityLevel;
1025
- var unstable_ImmediatePriority = _ReactInternals$Sched.unstable_ImmediatePriority;
1026
- var unstable_UserBlockingPriority = _ReactInternals$Sched.unstable_UserBlockingPriority;
1027
- var unstable_NormalPriority = _ReactInternals$Sched.unstable_NormalPriority;
1028
- var unstable_LowPriority = _ReactInternals$Sched.unstable_LowPriority;
1029
- var unstable_IdlePriority = _ReactInternals$Sched.unstable_IdlePriority;
1030
- var unstable_forceFrameRate = _ReactInternals$Sched.unstable_forceFrameRate;
1031
- var unstable_flushAllWithoutAsserting = _ReactInternals$Sched.unstable_flushAllWithoutAsserting;
1032
-
1033
- // ReactDOM.js, and ReactTestUtils.js:
1034
-
1035
- var _ReactDOM$__SECRET_IN$1 = ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Events;
1036
- var getInstanceFromNode$1 = _ReactDOM$__SECRET_IN$1[0];
1037
- var getNodeFromInstance$1 = _ReactDOM$__SECRET_IN$1[1];
1038
- var getFiberCurrentPropsFromNode$1 = _ReactDOM$__SECRET_IN$1[2];
1039
- var injectEventPluginsByName$1 = _ReactDOM$__SECRET_IN$1[3];
1040
- var eventNameDispatchConfigs$1 = _ReactDOM$__SECRET_IN$1[4];
1041
- var accumulateTwoPhaseDispatches$1 = _ReactDOM$__SECRET_IN$1[5];
1042
- var accumulateDirectDispatches$1 = _ReactDOM$__SECRET_IN$1[6];
1043
- var enqueueStateRestore$1 = _ReactDOM$__SECRET_IN$1[7];
1044
- var restoreStateIfNeeded$1 = _ReactDOM$__SECRET_IN$1[8];
1045
- var dispatchEvent$1 = _ReactDOM$__SECRET_IN$1[9];
1046
- var runEventsInBatch$1 = _ReactDOM$__SECRET_IN$1[10];
1047
- var flushPassiveEffects$1 = _ReactDOM$__SECRET_IN$1[11];
1048
- var IsThisRendererActing$1 = _ReactDOM$__SECRET_IN$1[12];
1049
- var batchedUpdates = ReactDOM.unstable_batchedUpdates;
1050
- var IsSomeRendererActing = ReactSharedInternals.IsSomeRendererActing; // this implementation should be exactly the same in
1051
- // ReactTestUtilsAct.js, ReactTestRendererAct.js, createReactNoop.js
1052
-
1053
- var isSchedulerMocked = typeof unstable_flushAllWithoutAsserting === 'function';
1054
-
1055
- var flushWork = unstable_flushAllWithoutAsserting || function () {
1056
- var didFlushWork = false;
1057
-
1058
- while (flushPassiveEffects$1()) {
1059
- didFlushWork = true;
1060
- }
1061
+ function Event(suffix) {}
1061
1062
 
1062
- return didFlushWork;
1063
- };
1063
+ var hasWarnedAboutDeprecatedMockComponent = false;
1064
+ /**
1065
+ * @class ReactTestUtils
1066
+ */
1064
1067
 
1065
- function flushWorkAndMicroTasks(onDone) {
1066
- try {
1067
- flushWork();
1068
- enqueueTask$1(function () {
1069
- if (flushWork()) {
1070
- flushWorkAndMicroTasks(onDone);
1071
- } else {
1072
- onDone();
1073
- }
1074
- });
1075
- } catch (err) {
1076
- onDone(err);
1077
- }
1078
- } // we track the 'depth' of the act() calls with this counter,
1079
- // so we can tell if any async act() calls try to run in parallel.
1080
-
1081
-
1082
- var actingUpdatesScopeDepth = 0;
1083
- function act(callback) {
1084
- var previousActingUpdatesScopeDepth = actingUpdatesScopeDepth;
1085
- var previousIsSomeRendererActing;
1086
- var previousIsThisRendererActing;
1087
- actingUpdatesScopeDepth++;
1088
- previousIsSomeRendererActing = IsSomeRendererActing.current;
1089
- previousIsThisRendererActing = IsThisRendererActing$1.current;
1090
- IsSomeRendererActing.current = true;
1091
- IsThisRendererActing$1.current = true;
1092
-
1093
- function onDone() {
1094
- actingUpdatesScopeDepth--;
1095
- IsSomeRendererActing.current = previousIsSomeRendererActing;
1096
- IsThisRendererActing$1.current = previousIsThisRendererActing;
1068
+ /**
1069
+ * Simulates a top level event being dispatched from a raw event that occurred
1070
+ * on an `Element` node.
1071
+ * @param {number} topLevelType A number from `TopLevelEventTypes`
1072
+ * @param {!Element} node The dom to simulate an event occurring on.
1073
+ * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
1074
+ */
1097
1075
 
1098
- {
1099
- if (actingUpdatesScopeDepth > previousActingUpdatesScopeDepth) {
1100
- // if it's _less than_ previousActingUpdatesScopeDepth, then we can assume the 'other' one has warned
1101
- warningWithoutStack$1(false, 'You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ');
1102
- }
1103
- }
1076
+ function simulateNativeEventOnNode(topLevelType, node, fakeNativeEvent) {
1077
+ fakeNativeEvent.target = node;
1078
+ dispatchEvent$1(topLevelType, PLUGIN_EVENT_SYSTEM, document, fakeNativeEvent);
1104
1079
  }
1080
+ /**
1081
+ * Simulates a top level event being dispatched from a raw event that occurred
1082
+ * on the `ReactDOMComponent` `comp`.
1083
+ * @param {Object} topLevelType A type from `BrowserEventConstants.topLevelTypes`.
1084
+ * @param {!ReactDOMComponent} comp
1085
+ * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
1086
+ */
1105
1087
 
1106
- var result;
1107
1088
 
1108
- try {
1109
- result = batchedUpdates(callback);
1110
- } catch (error) {
1111
- // on sync errors, we still want to 'cleanup' and decrement actingUpdatesScopeDepth
1112
- onDone();
1113
- throw error;
1089
+ function simulateNativeEventOnDOMComponent(topLevelType, comp, fakeNativeEvent) {
1090
+ simulateNativeEventOnNode(topLevelType, findDOMNode(comp), fakeNativeEvent);
1114
1091
  }
1115
1092
 
1116
- if (result !== null && typeof result === 'object' && typeof result.then === 'function') {
1117
- // setup a boolean that gets set to true only
1118
- // once this act() call is await-ed
1119
- var called = false;
1120
-
1121
- {
1122
- if (typeof Promise !== 'undefined') {
1123
- //eslint-disable-next-line no-undef
1124
- Promise.resolve().then(function () {}).then(function () {
1125
- if (called === false) {
1126
- warningWithoutStack$1(false, 'You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, interleaving multiple act ' + 'calls and mixing their scopes. You should - await act(async () => ...);');
1127
- }
1128
- });
1129
- }
1130
- } // in the async case, the returned thenable runs the callback, flushes
1131
- // effects and microtasks in a loop until flushPassiveEffects() === false,
1132
- // and cleans up
1093
+ function findAllInRenderedFiberTreeInternal(fiber, test) {
1094
+ if (!fiber) {
1095
+ return [];
1096
+ }
1133
1097
 
1098
+ var currentParent = findCurrentFiberUsingSlowPath(fiber);
1134
1099
 
1135
- return {
1136
- then: function (resolve, reject) {
1137
- called = true;
1138
- result.then(function () {
1139
- if (actingUpdatesScopeDepth > 1 || isSchedulerMocked === true && previousIsSomeRendererActing === true) {
1140
- onDone();
1141
- resolve();
1142
- return;
1143
- } // we're about to exit the act() scope,
1144
- // now's the time to flush tasks/effects
1100
+ if (!currentParent) {
1101
+ return [];
1102
+ }
1145
1103
 
1104
+ var node = currentParent;
1105
+ var ret = [];
1146
1106
 
1147
- flushWorkAndMicroTasks(function (err) {
1148
- onDone();
1107
+ while (true) {
1108
+ if (node.tag === HostComponent || node.tag === HostText || node.tag === ClassComponent || node.tag === FunctionComponent) {
1109
+ var publicInst = node.stateNode;
1149
1110
 
1150
- if (err) {
1151
- reject(err);
1152
- } else {
1153
- resolve();
1154
- }
1155
- });
1156
- }, function (err) {
1157
- onDone();
1158
- reject(err);
1159
- });
1111
+ if (test(publicInst)) {
1112
+ ret.push(publicInst);
1113
+ }
1160
1114
  }
1161
- };
1162
- } else {
1163
- {
1164
- !(result === undefined) ? warningWithoutStack$1(false, 'The callback passed to act(...) function ' + 'must return undefined, or a Promise. You returned %s', result) : void 0;
1165
- } // flush effects until none remain, and cleanup
1166
-
1167
1115
 
1168
- try {
1169
- if (actingUpdatesScopeDepth === 1 && (isSchedulerMocked === false || previousIsSomeRendererActing === false)) {
1170
- // we're about to exit the act() scope,
1171
- // now's the time to flush effects
1172
- flushWork();
1116
+ if (node.child) {
1117
+ node.child.return = node;
1118
+ node = node.child;
1119
+ continue;
1173
1120
  }
1174
1121
 
1175
- onDone();
1176
- } catch (err) {
1177
- onDone();
1178
- throw err;
1179
- } // in the sync case, the returned thenable only warns *if* await-ed
1180
-
1122
+ if (node === currentParent) {
1123
+ return ret;
1124
+ }
1181
1125
 
1182
- return {
1183
- then: function (resolve) {
1184
- {
1185
- warningWithoutStack$1(false, 'Do not await the result of calling act(...) with sync logic, it is not a Promise.');
1126
+ while (!node.sibling) {
1127
+ if (!node.return || node.return === currentParent) {
1128
+ return ret;
1186
1129
  }
1187
1130
 
1188
- resolve();
1131
+ node = node.return;
1189
1132
  }
1190
- };
1191
- }
1192
- }
1193
-
1194
- var findDOMNode = ReactDOM.findDOMNode; // Keep in sync with ReactDOMUnstableNativeDependencies.js
1195
- // ReactDOM.js, and ReactTestUtilsAct.js:
1196
-
1197
- var _ReactDOM$__SECRET_IN = ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Events;
1198
- var getInstanceFromNode = _ReactDOM$__SECRET_IN[0];
1199
- var getNodeFromInstance = _ReactDOM$__SECRET_IN[1];
1200
- var getFiberCurrentPropsFromNode = _ReactDOM$__SECRET_IN[2];
1201
- var injectEventPluginsByName = _ReactDOM$__SECRET_IN[3];
1202
- var eventNameDispatchConfigs = _ReactDOM$__SECRET_IN[4];
1203
- var accumulateTwoPhaseDispatches = _ReactDOM$__SECRET_IN[5];
1204
- var accumulateDirectDispatches = _ReactDOM$__SECRET_IN[6];
1205
- var enqueueStateRestore = _ReactDOM$__SECRET_IN[7];
1206
- var restoreStateIfNeeded = _ReactDOM$__SECRET_IN[8];
1207
- var dispatchEvent = _ReactDOM$__SECRET_IN[9];
1208
- var runEventsInBatch = _ReactDOM$__SECRET_IN[10];
1209
- var flushPassiveEffects = _ReactDOM$__SECRET_IN[11];
1210
- var IsThisRendererActing = _ReactDOM$__SECRET_IN[12];
1211
-
1212
- function Event(suffix) {}
1213
-
1214
- var hasWarnedAboutDeprecatedMockComponent = false;
1215
- /**
1216
- * @class ReactTestUtils
1217
- */
1218
-
1219
- /**
1220
- * Simulates a top level event being dispatched from a raw event that occurred
1221
- * on an `Element` node.
1222
- * @param {number} topLevelType A number from `TopLevelEventTypes`
1223
- * @param {!Element} node The dom to simulate an event occurring on.
1224
- * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
1225
- */
1226
-
1227
- function simulateNativeEventOnNode(topLevelType, node, fakeNativeEvent) {
1228
- fakeNativeEvent.target = node;
1229
- dispatchEvent(topLevelType, PLUGIN_EVENT_SYSTEM, fakeNativeEvent);
1230
- }
1231
- /**
1232
- * Simulates a top level event being dispatched from a raw event that occurred
1233
- * on the `ReactDOMComponent` `comp`.
1234
- * @param {Object} topLevelType A type from `BrowserEventConstants.topLevelTypes`.
1235
- * @param {!ReactDOMComponent} comp
1236
- * @param {?Event} fakeNativeEvent Fake native event to use in SyntheticEvent.
1237
- */
1238
-
1239
-
1240
- function simulateNativeEventOnDOMComponent(topLevelType, comp, fakeNativeEvent) {
1241
- simulateNativeEventOnNode(topLevelType, findDOMNode(comp), fakeNativeEvent);
1242
- }
1243
-
1244
- function findAllInRenderedFiberTreeInternal(fiber, test) {
1245
- if (!fiber) {
1246
- return [];
1247
- }
1248
-
1249
- var currentParent = findCurrentFiberUsingSlowPath(fiber);
1250
-
1251
- if (!currentParent) {
1252
- return [];
1253
- }
1254
-
1255
- var node = currentParent;
1256
- var ret = [];
1257
-
1258
- while (true) {
1259
- if (node.tag === HostComponent || node.tag === HostText || node.tag === ClassComponent || node.tag === FunctionComponent) {
1260
- var publicInst = node.stateNode;
1261
1133
 
1262
- if (test(publicInst)) {
1263
- ret.push(publicInst);
1264
- }
1134
+ node.sibling.return = node.return;
1135
+ node = node.sibling;
1265
1136
  }
1137
+ }
1266
1138
 
1267
- if (node.child) {
1268
- node.child.return = node;
1269
- node = node.child;
1270
- continue;
1139
+ function validateClassInstance(inst, methodName) {
1140
+ if (!inst) {
1141
+ // This is probably too relaxed but it's existing behavior.
1142
+ return;
1271
1143
  }
1272
1144
 
1273
- if (node === currentParent) {
1274
- return ret;
1145
+ if (get(inst)) {
1146
+ // This is a public instance indeed.
1147
+ return;
1275
1148
  }
1276
1149
 
1277
- while (!node.sibling) {
1278
- if (!node.return || node.return === currentParent) {
1279
- return ret;
1280
- }
1150
+ var received;
1151
+ var stringified = '' + inst;
1281
1152
 
1282
- node = node.return;
1153
+ if (Array.isArray(inst)) {
1154
+ received = 'an array';
1155
+ } else if (inst && inst.nodeType === ELEMENT_NODE && inst.tagName) {
1156
+ received = 'a DOM node';
1157
+ } else if (stringified === '[object Object]') {
1158
+ received = 'object with keys {' + Object.keys(inst).join(', ') + '}';
1159
+ } else {
1160
+ received = stringified;
1283
1161
  }
1284
1162
 
1285
- node.sibling.return = node.return;
1286
- node = node.sibling;
1287
- }
1288
- }
1289
-
1290
- function validateClassInstance(inst, methodName) {
1291
- if (!inst) {
1292
- // This is probably too relaxed but it's existing behavior.
1293
- return;
1294
- }
1295
-
1296
- if (get(inst)) {
1297
- // This is a public instance indeed.
1298
- return;
1299
- }
1300
-
1301
- var received;
1302
- var stringified = '' + inst;
1303
-
1304
- if (Array.isArray(inst)) {
1305
- received = 'an array';
1306
- } else if (inst && inst.nodeType === ELEMENT_NODE && inst.tagName) {
1307
- received = 'a DOM node';
1308
- } else if (stringified === '[object Object]') {
1309
- received = 'object with keys {' + Object.keys(inst).join(', ') + '}';
1310
- } else {
1311
- received = stringified;
1312
- }
1313
-
1314
- {
1315
1163
  {
1316
- throw Error(methodName + "(...): the first argument must be a React class instance. Instead received: " + received + ".");
1164
+ {
1165
+ throw Error( methodName + "(...): the first argument must be a React class instance. Instead received: " + received + "." );
1166
+ }
1317
1167
  }
1318
1168
  }
1319
- }
1320
- /**
1321
- * Utilities for making it easy to test React components.
1322
- *
1323
- * See https://reactjs.org/docs/test-utils.html
1324
- *
1325
- * Todo: Support the entire DOM.scry query syntax. For now, these simple
1326
- * utilities will suffice for testing purposes.
1327
- * @lends ReactTestUtils
1328
- */
1169
+ /**
1170
+ * Utilities for making it easy to test React components.
1171
+ *
1172
+ * See https://reactjs.org/docs/test-utils.html
1173
+ *
1174
+ * Todo: Support the entire DOM.scry query syntax. For now, these simple
1175
+ * utilities will suffice for testing purposes.
1176
+ * @lends ReactTestUtils
1177
+ */
1329
1178
 
1330
1179
 
1331
- var ReactTestUtils = {
1332
- renderIntoDocument: function (element) {
1333
- var div = document.createElement('div'); // None of our tests actually require attaching the container to the
1334
- // DOM, and doing so creates a mess that we rely on test isolation to
1335
- // clean up, so we're going to stop honoring the name of this method
1336
- // (and probably rename it eventually) if no problems arise.
1337
- // document.documentElement.appendChild(div);
1338
-
1339
- return ReactDOM.render(element, div);
1340
- },
1341
- isElement: function (element) {
1342
- return React.isValidElement(element);
1343
- },
1344
- isElementOfType: function (inst, convenienceConstructor) {
1345
- return React.isValidElement(inst) && inst.type === convenienceConstructor;
1346
- },
1347
- isDOMComponent: function (inst) {
1348
- return !!(inst && inst.nodeType === ELEMENT_NODE && inst.tagName);
1349
- },
1350
- isDOMComponentElement: function (inst) {
1351
- return !!(inst && React.isValidElement(inst) && !!inst.tagName);
1352
- },
1353
- isCompositeComponent: function (inst) {
1354
- if (ReactTestUtils.isDOMComponent(inst)) {
1355
- // Accessing inst.setState warns; just return false as that'll be what
1356
- // this returns when we have DOM nodes as refs directly
1357
- return false;
1358
- }
1180
+ var ReactTestUtils = {
1181
+ renderIntoDocument: function (element) {
1182
+ var div = document.createElement('div'); // None of our tests actually require attaching the container to the
1183
+ // DOM, and doing so creates a mess that we rely on test isolation to
1184
+ // clean up, so we're going to stop honoring the name of this method
1185
+ // (and probably rename it eventually) if no problems arise.
1186
+ // document.documentElement.appendChild(div);
1187
+
1188
+ return ReactDOM.render(element, div);
1189
+ },
1190
+ isElement: function (element) {
1191
+ return React.isValidElement(element);
1192
+ },
1193
+ isElementOfType: function (inst, convenienceConstructor) {
1194
+ return React.isValidElement(inst) && inst.type === convenienceConstructor;
1195
+ },
1196
+ isDOMComponent: function (inst) {
1197
+ return !!(inst && inst.nodeType === ELEMENT_NODE && inst.tagName);
1198
+ },
1199
+ isDOMComponentElement: function (inst) {
1200
+ return !!(inst && React.isValidElement(inst) && !!inst.tagName);
1201
+ },
1202
+ isCompositeComponent: function (inst) {
1203
+ if (ReactTestUtils.isDOMComponent(inst)) {
1204
+ // Accessing inst.setState warns; just return false as that'll be what
1205
+ // this returns when we have DOM nodes as refs directly
1206
+ return false;
1207
+ }
1359
1208
 
1360
- return inst != null && typeof inst.render === 'function' && typeof inst.setState === 'function';
1361
- },
1362
- isCompositeComponentWithType: function (inst, type) {
1363
- if (!ReactTestUtils.isCompositeComponent(inst)) {
1364
- return false;
1365
- }
1209
+ return inst != null && typeof inst.render === 'function' && typeof inst.setState === 'function';
1210
+ },
1211
+ isCompositeComponentWithType: function (inst, type) {
1212
+ if (!ReactTestUtils.isCompositeComponent(inst)) {
1213
+ return false;
1214
+ }
1366
1215
 
1367
- var internalInstance = get(inst);
1368
- var constructor = internalInstance.type;
1369
- return constructor === type;
1370
- },
1371
- findAllInRenderedTree: function (inst, test) {
1372
- validateClassInstance(inst, 'findAllInRenderedTree');
1216
+ var internalInstance = get(inst);
1217
+ var constructor = internalInstance.type;
1218
+ return constructor === type;
1219
+ },
1220
+ findAllInRenderedTree: function (inst, test) {
1221
+ validateClassInstance(inst, 'findAllInRenderedTree');
1373
1222
 
1374
- if (!inst) {
1375
- return [];
1376
- }
1377
-
1378
- var internalInstance = get(inst);
1379
- return findAllInRenderedFiberTreeInternal(internalInstance, test);
1380
- },
1223
+ if (!inst) {
1224
+ return [];
1225
+ }
1381
1226
 
1382
- /**
1383
- * Finds all instance of components in the rendered tree that are DOM
1384
- * components with the class name matching `className`.
1385
- * @return {array} an array of all the matches.
1386
- */
1387
- scryRenderedDOMComponentsWithClass: function (root, classNames) {
1388
- validateClassInstance(root, 'scryRenderedDOMComponentsWithClass');
1389
- return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
1390
- if (ReactTestUtils.isDOMComponent(inst)) {
1391
- var className = inst.className;
1227
+ var internalInstance = get(inst);
1228
+ return findAllInRenderedFiberTreeInternal(internalInstance, test);
1229
+ },
1392
1230
 
1393
- if (typeof className !== 'string') {
1394
- // SVG, probably.
1395
- className = inst.getAttribute('class') || '';
1396
- }
1231
+ /**
1232
+ * Finds all instance of components in the rendered tree that are DOM
1233
+ * components with the class name matching `className`.
1234
+ * @return {array} an array of all the matches.
1235
+ */
1236
+ scryRenderedDOMComponentsWithClass: function (root, classNames) {
1237
+ validateClassInstance(root, 'scryRenderedDOMComponentsWithClass');
1238
+ return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
1239
+ if (ReactTestUtils.isDOMComponent(inst)) {
1240
+ var className = inst.className;
1241
+
1242
+ if (typeof className !== 'string') {
1243
+ // SVG, probably.
1244
+ className = inst.getAttribute('class') || '';
1245
+ }
1397
1246
 
1398
- var classList = className.split(/\s+/);
1247
+ var classList = className.split(/\s+/);
1399
1248
 
1400
- if (!Array.isArray(classNames)) {
1401
- if (!(classNames !== undefined)) {
1402
- {
1403
- throw Error("TestUtils.scryRenderedDOMComponentsWithClass expects a className as a second argument.");
1249
+ if (!Array.isArray(classNames)) {
1250
+ if (!(classNames !== undefined)) {
1251
+ {
1252
+ throw Error( "TestUtils.scryRenderedDOMComponentsWithClass expects a className as a second argument." );
1253
+ }
1404
1254
  }
1255
+
1256
+ classNames = classNames.split(/\s+/);
1405
1257
  }
1406
1258
 
1407
- classNames = classNames.split(/\s+/);
1259
+ return classNames.every(function (name) {
1260
+ return classList.indexOf(name) !== -1;
1261
+ });
1408
1262
  }
1409
1263
 
1410
- return classNames.every(function (name) {
1411
- return classList.indexOf(name) !== -1;
1412
- });
1413
- }
1264
+ return false;
1265
+ });
1266
+ },
1414
1267
 
1415
- return false;
1416
- });
1417
- },
1268
+ /**
1269
+ * Like scryRenderedDOMComponentsWithClass but expects there to be one result,
1270
+ * and returns that one result, or throws exception if there is any other
1271
+ * number of matches besides one.
1272
+ * @return {!ReactDOMComponent} The one match.
1273
+ */
1274
+ findRenderedDOMComponentWithClass: function (root, className) {
1275
+ validateClassInstance(root, 'findRenderedDOMComponentWithClass');
1276
+ var all = ReactTestUtils.scryRenderedDOMComponentsWithClass(root, className);
1418
1277
 
1419
- /**
1420
- * Like scryRenderedDOMComponentsWithClass but expects there to be one result,
1421
- * and returns that one result, or throws exception if there is any other
1422
- * number of matches besides one.
1423
- * @return {!ReactDOMComponent} The one match.
1424
- */
1425
- findRenderedDOMComponentWithClass: function (root, className) {
1426
- validateClassInstance(root, 'findRenderedDOMComponentWithClass');
1427
- var all = ReactTestUtils.scryRenderedDOMComponentsWithClass(root, className);
1278
+ if (all.length !== 1) {
1279
+ throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for class:' + className);
1280
+ }
1428
1281
 
1429
- if (all.length !== 1) {
1430
- throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for class:' + className);
1431
- }
1282
+ return all[0];
1283
+ },
1432
1284
 
1433
- return all[0];
1434
- },
1285
+ /**
1286
+ * Finds all instance of components in the rendered tree that are DOM
1287
+ * components with the tag name matching `tagName`.
1288
+ * @return {array} an array of all the matches.
1289
+ */
1290
+ scryRenderedDOMComponentsWithTag: function (root, tagName) {
1291
+ validateClassInstance(root, 'scryRenderedDOMComponentsWithTag');
1292
+ return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
1293
+ return ReactTestUtils.isDOMComponent(inst) && inst.tagName.toUpperCase() === tagName.toUpperCase();
1294
+ });
1295
+ },
1435
1296
 
1436
- /**
1437
- * Finds all instance of components in the rendered tree that are DOM
1438
- * components with the tag name matching `tagName`.
1439
- * @return {array} an array of all the matches.
1440
- */
1441
- scryRenderedDOMComponentsWithTag: function (root, tagName) {
1442
- validateClassInstance(root, 'scryRenderedDOMComponentsWithTag');
1443
- return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
1444
- return ReactTestUtils.isDOMComponent(inst) && inst.tagName.toUpperCase() === tagName.toUpperCase();
1445
- });
1446
- },
1297
+ /**
1298
+ * Like scryRenderedDOMComponentsWithTag but expects there to be one result,
1299
+ * and returns that one result, or throws exception if there is any other
1300
+ * number of matches besides one.
1301
+ * @return {!ReactDOMComponent} The one match.
1302
+ */
1303
+ findRenderedDOMComponentWithTag: function (root, tagName) {
1304
+ validateClassInstance(root, 'findRenderedDOMComponentWithTag');
1305
+ var all = ReactTestUtils.scryRenderedDOMComponentsWithTag(root, tagName);
1447
1306
 
1448
- /**
1449
- * Like scryRenderedDOMComponentsWithTag but expects there to be one result,
1450
- * and returns that one result, or throws exception if there is any other
1451
- * number of matches besides one.
1452
- * @return {!ReactDOMComponent} The one match.
1453
- */
1454
- findRenderedDOMComponentWithTag: function (root, tagName) {
1455
- validateClassInstance(root, 'findRenderedDOMComponentWithTag');
1456
- var all = ReactTestUtils.scryRenderedDOMComponentsWithTag(root, tagName);
1307
+ if (all.length !== 1) {
1308
+ throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for tag:' + tagName);
1309
+ }
1457
1310
 
1458
- if (all.length !== 1) {
1459
- throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for tag:' + tagName);
1460
- }
1311
+ return all[0];
1312
+ },
1461
1313
 
1462
- return all[0];
1463
- },
1314
+ /**
1315
+ * Finds all instances of components with type equal to `componentType`.
1316
+ * @return {array} an array of all the matches.
1317
+ */
1318
+ scryRenderedComponentsWithType: function (root, componentType) {
1319
+ validateClassInstance(root, 'scryRenderedComponentsWithType');
1320
+ return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
1321
+ return ReactTestUtils.isCompositeComponentWithType(inst, componentType);
1322
+ });
1323
+ },
1464
1324
 
1465
- /**
1466
- * Finds all instances of components with type equal to `componentType`.
1467
- * @return {array} an array of all the matches.
1468
- */
1469
- scryRenderedComponentsWithType: function (root, componentType) {
1470
- validateClassInstance(root, 'scryRenderedComponentsWithType');
1471
- return ReactTestUtils.findAllInRenderedTree(root, function (inst) {
1472
- return ReactTestUtils.isCompositeComponentWithType(inst, componentType);
1473
- });
1474
- },
1325
+ /**
1326
+ * Same as `scryRenderedComponentsWithType` but expects there to be one result
1327
+ * and returns that one result, or throws exception if there is any other
1328
+ * number of matches besides one.
1329
+ * @return {!ReactComponent} The one match.
1330
+ */
1331
+ findRenderedComponentWithType: function (root, componentType) {
1332
+ validateClassInstance(root, 'findRenderedComponentWithType');
1333
+ var all = ReactTestUtils.scryRenderedComponentsWithType(root, componentType);
1475
1334
 
1476
- /**
1477
- * Same as `scryRenderedComponentsWithType` but expects there to be one result
1478
- * and returns that one result, or throws exception if there is any other
1479
- * number of matches besides one.
1480
- * @return {!ReactComponent} The one match.
1481
- */
1482
- findRenderedComponentWithType: function (root, componentType) {
1483
- validateClassInstance(root, 'findRenderedComponentWithType');
1484
- var all = ReactTestUtils.scryRenderedComponentsWithType(root, componentType);
1335
+ if (all.length !== 1) {
1336
+ throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for componentType:' + componentType);
1337
+ }
1485
1338
 
1486
- if (all.length !== 1) {
1487
- throw new Error('Did not find exactly one match (found: ' + all.length + ') ' + 'for componentType:' + componentType);
1488
- }
1339
+ return all[0];
1340
+ },
1341
+
1342
+ /**
1343
+ * Pass a mocked component module to this method to augment it with
1344
+ * useful methods that allow it to be used as a dummy React component.
1345
+ * Instead of rendering as usual, the component will become a simple
1346
+ * <div> containing any provided children.
1347
+ *
1348
+ * @param {object} module the mock function object exported from a
1349
+ * module that defines the component to be mocked
1350
+ * @param {?string} mockTagName optional dummy root tag name to return
1351
+ * from render method (overrides
1352
+ * module.mockTagName if provided)
1353
+ * @return {object} the ReactTestUtils object (for chaining)
1354
+ */
1355
+ mockComponent: function (module, mockTagName) {
1356
+ {
1357
+ if (!hasWarnedAboutDeprecatedMockComponent) {
1358
+ hasWarnedAboutDeprecatedMockComponent = true;
1489
1359
 
1490
- return all[0];
1491
- },
1360
+ warn('ReactTestUtils.mockComponent() is deprecated. ' + 'Use shallow rendering or jest.mock() instead.\n\n' + 'See https://fb.me/test-utils-mock-component for more information.');
1361
+ }
1362
+ }
1492
1363
 
1364
+ mockTagName = mockTagName || module.mockTagName || 'div';
1365
+ module.prototype.render.mockImplementation(function () {
1366
+ return React.createElement(mockTagName, null, this.props.children);
1367
+ });
1368
+ return this;
1369
+ },
1370
+ nativeTouchData: function (x, y) {
1371
+ return {
1372
+ touches: [{
1373
+ pageX: x,
1374
+ pageY: y
1375
+ }]
1376
+ };
1377
+ },
1378
+ Simulate: null,
1379
+ SimulateNative: {},
1380
+ act: act
1381
+ };
1493
1382
  /**
1494
- * Pass a mocked component module to this method to augment it with
1495
- * useful methods that allow it to be used as a dummy React component.
1496
- * Instead of rendering as usual, the component will become a simple
1497
- * <div> containing any provided children.
1383
+ * Exports:
1498
1384
  *
1499
- * @param {object} module the mock function object exported from a
1500
- * module that defines the component to be mocked
1501
- * @param {?string} mockTagName optional dummy root tag name to return
1502
- * from render method (overrides
1503
- * module.mockTagName if provided)
1504
- * @return {object} the ReactTestUtils object (for chaining)
1385
+ * - `ReactTestUtils.Simulate.click(Element)`
1386
+ * - `ReactTestUtils.Simulate.mouseMove(Element)`
1387
+ * - `ReactTestUtils.Simulate.change(Element)`
1388
+ * - ... (All keys from event plugin `eventTypes` objects)
1505
1389
  */
1506
- mockComponent: function (module, mockTagName) {
1507
- if (!hasWarnedAboutDeprecatedMockComponent) {
1508
- hasWarnedAboutDeprecatedMockComponent = true;
1509
- lowPriorityWarningWithoutStack$1(false, 'ReactTestUtils.mockComponent() is deprecated. ' + 'Use shallow rendering or jest.mock() instead.\n\n' + 'See https://fb.me/test-utils-mock-component for more information.');
1510
- }
1511
-
1512
- mockTagName = mockTagName || module.mockTagName || 'div';
1513
- module.prototype.render.mockImplementation(function () {
1514
- return React.createElement(mockTagName, null, this.props.children);
1515
- });
1516
- return this;
1517
- },
1518
- nativeTouchData: function (x, y) {
1519
- return {
1520
- touches: [{
1521
- pageX: x,
1522
- pageY: y
1523
- }]
1524
- };
1525
- },
1526
- Simulate: null,
1527
- SimulateNative: {},
1528
- act: act
1529
- };
1530
- /**
1531
- * Exports:
1532
- *
1533
- * - `ReactTestUtils.Simulate.click(Element)`
1534
- * - `ReactTestUtils.Simulate.mouseMove(Element)`
1535
- * - `ReactTestUtils.Simulate.change(Element)`
1536
- * - ... (All keys from event plugin `eventTypes` objects)
1537
- */
1538
1390
 
1539
- function makeSimulator(eventType) {
1540
- return function (domNode, eventData) {
1541
- if (!!React.isValidElement(domNode)) {
1542
- {
1543
- throw Error("TestUtils.Simulate expected a DOM node as the first argument but received a React element. Pass the DOM node you wish to simulate the event on instead. Note that TestUtils.Simulate will not work if you are using shallow rendering.");
1391
+ function makeSimulator(eventType) {
1392
+ return function (domNode, eventData) {
1393
+ if (!!React.isValidElement(domNode)) {
1394
+ {
1395
+ throw Error( "TestUtils.Simulate expected a DOM node as the first argument but received a React element. Pass the DOM node you wish to simulate the event on instead. Note that TestUtils.Simulate will not work if you are using shallow rendering." );
1396
+ }
1544
1397
  }
1545
- }
1546
1398
 
1547
- if (!!ReactTestUtils.isCompositeComponent(domNode)) {
1548
- {
1549
- throw Error("TestUtils.Simulate expected a DOM node as the first argument but received a component instance. Pass the DOM node you wish to simulate the event on instead.");
1399
+ if (!!ReactTestUtils.isCompositeComponent(domNode)) {
1400
+ {
1401
+ throw Error( "TestUtils.Simulate expected a DOM node as the first argument but received a component instance. Pass the DOM node you wish to simulate the event on instead." );
1402
+ }
1550
1403
  }
1551
- }
1552
-
1553
- var dispatchConfig = eventNameDispatchConfigs[eventType];
1554
- var fakeNativeEvent = new Event();
1555
- fakeNativeEvent.target = domNode;
1556
- fakeNativeEvent.type = eventType.toLowerCase(); // We don't use SyntheticEvent.getPooled in order to not have to worry about
1557
- // properly destroying any properties assigned from `eventData` upon release
1558
-
1559
- var targetInst = getInstanceFromNode(domNode);
1560
- var event = new SyntheticEvent(dispatchConfig, targetInst, fakeNativeEvent, domNode); // Since we aren't using pooling, always persist the event. This will make
1561
- // sure it's marked and won't warn when setting additional properties.
1562
1404
 
1563
- event.persist();
1405
+ var dispatchConfig = eventNameDispatchConfigs$1[eventType];
1406
+ var fakeNativeEvent = new Event();
1407
+ fakeNativeEvent.target = domNode;
1408
+ fakeNativeEvent.type = eventType.toLowerCase(); // We don't use SyntheticEvent.getPooled in order to not have to worry about
1409
+ // properly destroying any properties assigned from `eventData` upon release
1564
1410
 
1565
- _assign(event, eventData);
1411
+ var targetInst = getInstanceFromNode$1(domNode);
1412
+ var event = new SyntheticEvent(dispatchConfig, targetInst, fakeNativeEvent, domNode); // Since we aren't using pooling, always persist the event. This will make
1413
+ // sure it's marked and won't warn when setting additional properties.
1566
1414
 
1567
- if (dispatchConfig.phasedRegistrationNames) {
1568
- accumulateTwoPhaseDispatches(event);
1569
- } else {
1570
- accumulateDirectDispatches(event);
1571
- }
1415
+ event.persist();
1572
1416
 
1573
- ReactDOM.unstable_batchedUpdates(function () {
1574
- // Normally extractEvent enqueues a state restore, but we'll just always
1575
- // do that since we're by-passing it here.
1576
- enqueueStateRestore(domNode);
1577
- runEventsInBatch(event);
1578
- });
1579
- restoreStateIfNeeded();
1580
- };
1581
- }
1417
+ _assign(event, eventData);
1582
1418
 
1583
- function buildSimulators() {
1584
- ReactTestUtils.Simulate = {};
1585
- var eventType;
1419
+ if (dispatchConfig.phasedRegistrationNames) {
1420
+ accumulateTwoPhaseDispatches$1(event);
1421
+ } else {
1422
+ accumulateDirectDispatches$1(event);
1423
+ }
1586
1424
 
1587
- for (eventType in eventNameDispatchConfigs) {
1588
- /**
1589
- * @param {!Element|ReactDOMComponent} domComponentOrNode
1590
- * @param {?object} eventData Fake event data to use in SyntheticEvent.
1591
- */
1592
- ReactTestUtils.Simulate[eventType] = makeSimulator(eventType);
1425
+ ReactDOM.unstable_batchedUpdates(function () {
1426
+ // Normally extractEvent enqueues a state restore, but we'll just always
1427
+ // do that since we're by-passing it here.
1428
+ enqueueStateRestore$1(domNode);
1429
+ runEventsInBatch$1(event);
1430
+ });
1431
+ restoreStateIfNeeded$1();
1432
+ };
1593
1433
  }
1594
- }
1595
-
1596
- buildSimulators();
1597
- /**
1598
- * Exports:
1599
- *
1600
- * - `ReactTestUtils.SimulateNative.click(Element/ReactDOMComponent)`
1601
- * - `ReactTestUtils.SimulateNative.mouseMove(Element/ReactDOMComponent)`
1602
- * - `ReactTestUtils.SimulateNative.mouseIn/ReactDOMComponent)`
1603
- * - `ReactTestUtils.SimulateNative.mouseOut(Element/ReactDOMComponent)`
1604
- * - ... (All keys from `BrowserEventConstants.topLevelTypes`)
1605
- *
1606
- * Note: Top level event types are a subset of the entire set of handler types
1607
- * (which include a broader set of "synthetic" events). For example, onDragDone
1608
- * is a synthetic event. Except when testing an event plugin or React's event
1609
- * handling code specifically, you probably want to use ReactTestUtils.Simulate
1610
- * to dispatch synthetic events.
1611
- */
1612
1434
 
1613
- function makeNativeSimulator(eventType, topLevelType) {
1614
- return function (domComponentOrNode, nativeEventData) {
1615
- var fakeNativeEvent = new Event(eventType);
1435
+ function buildSimulators() {
1436
+ ReactTestUtils.Simulate = {};
1437
+ var eventType;
1616
1438
 
1617
- _assign(fakeNativeEvent, nativeEventData);
1618
-
1619
- if (ReactTestUtils.isDOMComponent(domComponentOrNode)) {
1620
- simulateNativeEventOnDOMComponent(topLevelType, domComponentOrNode, fakeNativeEvent);
1621
- } else if (domComponentOrNode.tagName) {
1622
- // Will allow on actual dom nodes.
1623
- simulateNativeEventOnNode(topLevelType, domComponentOrNode, fakeNativeEvent);
1439
+ for (eventType in eventNameDispatchConfigs$1) {
1440
+ /**
1441
+ * @param {!Element|ReactDOMComponent} domComponentOrNode
1442
+ * @param {?object} eventData Fake event data to use in SyntheticEvent.
1443
+ */
1444
+ ReactTestUtils.Simulate[eventType] = makeSimulator(eventType);
1624
1445
  }
1625
- };
1626
- }
1627
-
1628
- [[TOP_ABORT, 'abort'], [TOP_ANIMATION_END, 'animationEnd'], [TOP_ANIMATION_ITERATION, 'animationIteration'], [TOP_ANIMATION_START, 'animationStart'], [TOP_BLUR, 'blur'], [TOP_CAN_PLAY_THROUGH, 'canPlayThrough'], [TOP_CAN_PLAY, 'canPlay'], [TOP_CANCEL, 'cancel'], [TOP_CHANGE, 'change'], [TOP_CLICK, 'click'], [TOP_CLOSE, 'close'], [TOP_COMPOSITION_END, 'compositionEnd'], [TOP_COMPOSITION_START, 'compositionStart'], [TOP_COMPOSITION_UPDATE, 'compositionUpdate'], [TOP_CONTEXT_MENU, 'contextMenu'], [TOP_COPY, 'copy'], [TOP_CUT, 'cut'], [TOP_DOUBLE_CLICK, 'doubleClick'], [TOP_DRAG_END, 'dragEnd'], [TOP_DRAG_ENTER, 'dragEnter'], [TOP_DRAG_EXIT, 'dragExit'], [TOP_DRAG_LEAVE, 'dragLeave'], [TOP_DRAG_OVER, 'dragOver'], [TOP_DRAG_START, 'dragStart'], [TOP_DRAG, 'drag'], [TOP_DROP, 'drop'], [TOP_DURATION_CHANGE, 'durationChange'], [TOP_EMPTIED, 'emptied'], [TOP_ENCRYPTED, 'encrypted'], [TOP_ENDED, 'ended'], [TOP_ERROR, 'error'], [TOP_FOCUS, 'focus'], [TOP_INPUT, 'input'], [TOP_KEY_DOWN, 'keyDown'], [TOP_KEY_PRESS, 'keyPress'], [TOP_KEY_UP, 'keyUp'], [TOP_LOAD_START, 'loadStart'], [TOP_LOAD_START, 'loadStart'], [TOP_LOAD, 'load'], [TOP_LOADED_DATA, 'loadedData'], [TOP_LOADED_METADATA, 'loadedMetadata'], [TOP_MOUSE_DOWN, 'mouseDown'], [TOP_MOUSE_MOVE, 'mouseMove'], [TOP_MOUSE_OUT, 'mouseOut'], [TOP_MOUSE_OVER, 'mouseOver'], [TOP_MOUSE_UP, 'mouseUp'], [TOP_PASTE, 'paste'], [TOP_PAUSE, 'pause'], [TOP_PLAY, 'play'], [TOP_PLAYING, 'playing'], [TOP_PROGRESS, 'progress'], [TOP_RATE_CHANGE, 'rateChange'], [TOP_SCROLL, 'scroll'], [TOP_SEEKED, 'seeked'], [TOP_SEEKING, 'seeking'], [TOP_SELECTION_CHANGE, 'selectionChange'], [TOP_STALLED, 'stalled'], [TOP_SUSPEND, 'suspend'], [TOP_TEXT_INPUT, 'textInput'], [TOP_TIME_UPDATE, 'timeUpdate'], [TOP_TOGGLE, 'toggle'], [TOP_TOUCH_CANCEL, 'touchCancel'], [TOP_TOUCH_END, 'touchEnd'], [TOP_TOUCH_MOVE, 'touchMove'], [TOP_TOUCH_START, 'touchStart'], [TOP_TRANSITION_END, 'transitionEnd'], [TOP_VOLUME_CHANGE, 'volumeChange'], [TOP_WAITING, 'waiting'], [TOP_WHEEL, 'wheel']].forEach(function (_ref) {
1629
- var topLevelType = _ref[0],
1630
- eventType = _ref[1];
1446
+ }
1631
1447
 
1448
+ buildSimulators();
1632
1449
  /**
1633
- * @param {!Element|ReactDOMComponent} domComponentOrNode
1634
- * @param {?Event} nativeEventData Fake native event to use in SyntheticEvent.
1450
+ * Exports:
1451
+ *
1452
+ * - `ReactTestUtils.SimulateNative.click(Element/ReactDOMComponent)`
1453
+ * - `ReactTestUtils.SimulateNative.mouseMove(Element/ReactDOMComponent)`
1454
+ * - `ReactTestUtils.SimulateNative.mouseIn/ReactDOMComponent)`
1455
+ * - `ReactTestUtils.SimulateNative.mouseOut(Element/ReactDOMComponent)`
1456
+ * - ... (All keys from `BrowserEventConstants.topLevelTypes`)
1457
+ *
1458
+ * Note: Top level event types are a subset of the entire set of handler types
1459
+ * (which include a broader set of "synthetic" events). For example, onDragDone
1460
+ * is a synthetic event. Except when testing an event plugin or React's event
1461
+ * handling code specifically, you probably want to use ReactTestUtils.Simulate
1462
+ * to dispatch synthetic events.
1635
1463
  */
1636
- ReactTestUtils.SimulateNative[eventType] = makeNativeSimulator(eventType, topLevelType);
1637
- });
1638
1464
 
1465
+ function makeNativeSimulator(eventType, topLevelType) {
1466
+ return function (domComponentOrNode, nativeEventData) {
1467
+ var fakeNativeEvent = new Event(eventType);
1639
1468
 
1640
- var ReactTestUtils$2 = Object.freeze({
1641
- default: ReactTestUtils
1642
- });
1469
+ _assign(fakeNativeEvent, nativeEventData);
1643
1470
 
1644
- var ReactTestUtils$3 = ( ReactTestUtils$2 && ReactTestUtils ) || ReactTestUtils$2;
1471
+ if (ReactTestUtils.isDOMComponent(domComponentOrNode)) {
1472
+ simulateNativeEventOnDOMComponent(topLevelType, domComponentOrNode, fakeNativeEvent);
1473
+ } else if (domComponentOrNode.tagName) {
1474
+ // Will allow on actual dom nodes.
1475
+ simulateNativeEventOnNode(topLevelType, domComponentOrNode, fakeNativeEvent);
1476
+ }
1477
+ };
1478
+ }
1479
+
1480
+ [[TOP_ABORT, 'abort'], [TOP_ANIMATION_END, 'animationEnd'], [TOP_ANIMATION_ITERATION, 'animationIteration'], [TOP_ANIMATION_START, 'animationStart'], [TOP_BLUR, 'blur'], [TOP_CAN_PLAY_THROUGH, 'canPlayThrough'], [TOP_CAN_PLAY, 'canPlay'], [TOP_CANCEL, 'cancel'], [TOP_CHANGE, 'change'], [TOP_CLICK, 'click'], [TOP_CLOSE, 'close'], [TOP_COMPOSITION_END, 'compositionEnd'], [TOP_COMPOSITION_START, 'compositionStart'], [TOP_COMPOSITION_UPDATE, 'compositionUpdate'], [TOP_CONTEXT_MENU, 'contextMenu'], [TOP_COPY, 'copy'], [TOP_CUT, 'cut'], [TOP_DOUBLE_CLICK, 'doubleClick'], [TOP_DRAG_END, 'dragEnd'], [TOP_DRAG_ENTER, 'dragEnter'], [TOP_DRAG_EXIT, 'dragExit'], [TOP_DRAG_LEAVE, 'dragLeave'], [TOP_DRAG_OVER, 'dragOver'], [TOP_DRAG_START, 'dragStart'], [TOP_DRAG, 'drag'], [TOP_DROP, 'drop'], [TOP_DURATION_CHANGE, 'durationChange'], [TOP_EMPTIED, 'emptied'], [TOP_ENCRYPTED, 'encrypted'], [TOP_ENDED, 'ended'], [TOP_ERROR, 'error'], [TOP_FOCUS, 'focus'], [TOP_INPUT, 'input'], [TOP_KEY_DOWN, 'keyDown'], [TOP_KEY_PRESS, 'keyPress'], [TOP_KEY_UP, 'keyUp'], [TOP_LOAD_START, 'loadStart'], [TOP_LOAD_START, 'loadStart'], [TOP_LOAD, 'load'], [TOP_LOADED_DATA, 'loadedData'], [TOP_LOADED_METADATA, 'loadedMetadata'], [TOP_MOUSE_DOWN, 'mouseDown'], [TOP_MOUSE_MOVE, 'mouseMove'], [TOP_MOUSE_OUT, 'mouseOut'], [TOP_MOUSE_OVER, 'mouseOver'], [TOP_MOUSE_UP, 'mouseUp'], [TOP_PASTE, 'paste'], [TOP_PAUSE, 'pause'], [TOP_PLAY, 'play'], [TOP_PLAYING, 'playing'], [TOP_PROGRESS, 'progress'], [TOP_RATE_CHANGE, 'rateChange'], [TOP_SCROLL, 'scroll'], [TOP_SEEKED, 'seeked'], [TOP_SEEKING, 'seeking'], [TOP_SELECTION_CHANGE, 'selectionChange'], [TOP_STALLED, 'stalled'], [TOP_SUSPEND, 'suspend'], [TOP_TEXT_INPUT, 'textInput'], [TOP_TIME_UPDATE, 'timeUpdate'], [TOP_TOGGLE, 'toggle'], [TOP_TOUCH_CANCEL, 'touchCancel'], [TOP_TOUCH_END, 'touchEnd'], [TOP_TOUCH_MOVE, 'touchMove'], [TOP_TOUCH_START, 'touchStart'], [TOP_TRANSITION_END, 'transitionEnd'], [TOP_VOLUME_CHANGE, 'volumeChange'], [TOP_WAITING, 'waiting'], [TOP_WHEEL, 'wheel']].forEach(function (_ref) {
1481
+ var topLevelType = _ref[0],
1482
+ eventType = _ref[1];
1483
+
1484
+ /**
1485
+ * @param {!Element|ReactDOMComponent} domComponentOrNode
1486
+ * @param {?Event} nativeEventData Fake native event to use in SyntheticEvent.
1487
+ */
1488
+ ReactTestUtils.SimulateNative[eventType] = makeNativeSimulator(eventType, topLevelType);
1489
+ });
1645
1490
 
1646
- // TODO: decide on the top-level export form.
1647
- // This is hacky but makes it work with both Rollup and Jest.
1491
+ // TODO: decide on the top-level export form.
1492
+ // This is hacky but makes it work with both Rollup and Jest.
1648
1493
 
1649
1494
 
1650
- var testUtils = ReactTestUtils$3.default || ReactTestUtils$3;
1495
+ var testUtils = ReactTestUtils.default || ReactTestUtils;
1651
1496
 
1652
- return testUtils;
1497
+ return testUtils;
1653
1498
 
1654
1499
  })));