bippy 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,31 +1,101 @@
1
1
  /**
2
2
  * @license bippy
3
3
  *
4
- * Copyright (c) Aiden Bai.
4
+ * Copyright (c) Aiden Bai, Million Software, Inc.
5
5
  *
6
6
  * This source code is licensed under the MIT license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  */
9
9
 
10
- // src/core.ts
10
+ // src/rdt-hook.ts
11
11
  var version = "0.1.0";
12
12
  var BIPPY_INSTRUMENTATION_STRING = `bippy-${version}`;
13
- var ClassComponentTag = 1;
13
+ var NO_OP = () => {
14
+ };
15
+ var checkDCE = (fn) => {
16
+ try {
17
+ const code = Function.prototype.toString.call(fn);
18
+ if (code.indexOf("^_^") > -1) {
19
+ setTimeout(() => {
20
+ throw new Error(
21
+ "React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build"
22
+ );
23
+ });
24
+ }
25
+ } catch {
26
+ }
27
+ };
28
+ var installRDTHook = (onActive) => {
29
+ const renderers = /* @__PURE__ */ new Map();
30
+ let i = 0;
31
+ const rdtHook = {
32
+ checkDCE,
33
+ supportsFiber: true,
34
+ supportsFlight: true,
35
+ hasUnsupportedRendererAttached: false,
36
+ renderers,
37
+ onCommitFiberRoot: NO_OP,
38
+ onCommitFiberUnmount: NO_OP,
39
+ onPostCommitFiberRoot: NO_OP,
40
+ inject(renderer) {
41
+ const nextID = ++i;
42
+ renderers.set(nextID, renderer);
43
+ if (!rdtHook._instrumentationIsActive) {
44
+ rdtHook._instrumentationIsActive = true;
45
+ onActive?.();
46
+ }
47
+ return nextID;
48
+ },
49
+ _instrumentationSource: BIPPY_INSTRUMENTATION_STRING,
50
+ _instrumentationIsActive: false
51
+ };
52
+ try {
53
+ Object.defineProperty(globalThis, "__REACT_DEVTOOLS_GLOBAL_HOOK__", {
54
+ value: rdtHook
55
+ });
56
+ } catch {
57
+ }
58
+ return rdtHook;
59
+ };
60
+ var hasRDTHook = () => {
61
+ return Object.prototype.hasOwnProperty.call(
62
+ globalThis,
63
+ "__REACT_DEVTOOLS_GLOBAL_HOOK__"
64
+ );
65
+ };
66
+ var getRDTHook = (onActive) => {
67
+ let rdtHook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
68
+ if (rdtHook) onActive?.();
69
+ if (!hasRDTHook()) {
70
+ rdtHook = installRDTHook(onActive);
71
+ }
72
+ return rdtHook;
73
+ };
74
+ try {
75
+ if (typeof window !== "undefined" && // @ts-expect-error `document` may not be defined in some enviroments
76
+ (window.document?.createElement || window.navigator?.product === "ReactNative") && typeof process !== "undefined" && process.versions != null && process.versions.node != null) {
77
+ installRDTHook();
78
+ }
79
+ } catch {
80
+ }
81
+
82
+ // src/core.ts
14
83
  var FunctionComponentTag = 0;
84
+ var ClassComponentTag = 1;
85
+ var HostRootTag = 3;
86
+ var HostComponentTag = 5;
87
+ var HostTextTag = 6;
88
+ var FragmentTag = 7;
15
89
  var ContextConsumerTag = 9;
16
- var SuspenseComponentTag = 13;
17
90
  var ForwardRefTag = 11;
91
+ var SuspenseComponentTag = 13;
18
92
  var MemoComponentTag = 14;
19
93
  var SimpleMemoComponentTag = 15;
20
- var HostComponentTag = 5;
94
+ var DehydratedSuspenseComponentTag = 18;
95
+ var OffscreenComponentTag = 22;
96
+ var LegacyHiddenComponentTag = 23;
21
97
  var HostHoistableTag = 26;
22
98
  var HostSingletonTag = 27;
23
- var DehydratedSuspenseComponent = 18;
24
- var HostText = 6;
25
- var Fragment = 7;
26
- var LegacyHiddenComponent = 23;
27
- var OffscreenComponent = 22;
28
- var HostRoot = 3;
29
99
  var CONCURRENT_MODE_NUMBER = 60111;
30
100
  var ELEMENT_TYPE_SYMBOL_STRING = "Symbol(react.element)";
31
101
  var TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING = "Symbol(react.transitional.element)";
@@ -47,12 +117,32 @@ var isValidElement = (element) => typeof element === "object" && element != null
47
117
  TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING
48
118
  ].includes(String(element.$$typeof));
49
119
  var isValidFiber = (fiber) => typeof fiber === "object" && fiber != null && "tag" in fiber && "stateNode" in fiber && "return" in fiber && "child" in fiber && "sibling" in fiber && "flags" in fiber;
50
- var isHostFiber = (fiber) => fiber.tag === HostComponentTag || // @ts-expect-error: it exists
51
- fiber.tag === HostHoistableTag || // @ts-expect-error: it exists
52
- fiber.tag === HostSingletonTag || typeof fiber.type === "string";
53
- var isCompositeFiber = (fiber) => fiber.tag === FunctionComponentTag || fiber.tag === ClassComponentTag || fiber.tag === SimpleMemoComponentTag || fiber.tag === MemoComponentTag || fiber.tag === ForwardRefTag;
120
+ var isHostFiber = (fiber) => {
121
+ switch (fiber.tag) {
122
+ case HostComponentTag:
123
+ // @ts-expect-error: it exists
124
+ case HostHoistableTag:
125
+ // @ts-expect-error: it exists
126
+ case HostSingletonTag:
127
+ return true;
128
+ default:
129
+ return typeof fiber.type === "string";
130
+ }
131
+ };
132
+ var isCompositeFiber = (fiber) => {
133
+ switch (fiber.tag) {
134
+ case FunctionComponentTag:
135
+ case ClassComponentTag:
136
+ case SimpleMemoComponentTag:
137
+ case MemoComponentTag:
138
+ case ForwardRefTag:
139
+ return true;
140
+ default:
141
+ return false;
142
+ }
143
+ };
54
144
  var traverseContexts = (fiber, selector) => {
55
- return safeTry(() => {
145
+ try {
56
146
  const nextDependencies = fiber.dependencies;
57
147
  const prevDependencies = fiber.alternate?.dependencies;
58
148
  if (!nextDependencies || !prevDependencies) return false;
@@ -66,23 +156,25 @@ var traverseContexts = (fiber, selector) => {
66
156
  nextContext = nextContext?.next;
67
157
  prevContext = prevContext?.next;
68
158
  }
69
- return false;
70
- });
159
+ } catch {
160
+ }
161
+ return false;
71
162
  };
72
163
  var traverseState = (fiber, selector) => {
73
- return safeTry(() => {
164
+ try {
74
165
  let nextState = fiber.memoizedState;
75
166
  let prevState = fiber.alternate?.memoizedState;
76
167
  while (nextState || prevState) {
77
168
  if (selector(nextState, prevState) === true) return true;
78
- nextState = nextState.next;
79
- prevState = prevState.next;
169
+ nextState = nextState?.next;
170
+ prevState = prevState?.next;
80
171
  }
81
- return false;
82
- });
172
+ } catch {
173
+ }
174
+ return false;
83
175
  };
84
176
  var traverseEffects = (fiber, selector) => {
85
- return safeTry(() => {
177
+ try {
86
178
  let nextState = (
87
179
  // biome-ignore lint/suspicious/noExplicitAny: underlying type is unknown
88
180
  fiber.updateQueue?.lastEffect
@@ -99,11 +191,12 @@ var traverseEffects = (fiber, selector) => {
99
191
  nextState = nextState?.next;
100
192
  prevState = prevState?.next;
101
193
  }
102
- return false;
103
- });
194
+ } catch {
195
+ }
196
+ return false;
104
197
  };
105
198
  var traverseProps = (fiber, selector) => {
106
- return safeTry(() => {
199
+ try {
107
200
  const nextProps = fiber.memoizedProps;
108
201
  const prevProps = fiber.alternate?.memoizedProps || {};
109
202
  const allKeys = /* @__PURE__ */ new Set([
@@ -115,8 +208,9 @@ var traverseProps = (fiber, selector) => {
115
208
  const nextValue = nextProps?.[propName];
116
209
  if (selector(propName, nextValue, prevValue) === true) return true;
117
210
  }
118
- return false;
119
- });
211
+ } catch {
212
+ }
213
+ return false;
120
214
  };
121
215
  var didFiberRender = (fiber) => {
122
216
  const nextProps = fiber.memoizedProps;
@@ -170,14 +264,14 @@ var getFiberStack = (fiber) => {
170
264
  };
171
265
  var shouldFilterFiber = (fiber) => {
172
266
  switch (fiber.tag) {
173
- case DehydratedSuspenseComponent:
267
+ case DehydratedSuspenseComponentTag:
174
268
  return true;
175
- case HostText:
176
- case Fragment:
177
- case LegacyHiddenComponent:
178
- case OffscreenComponent:
269
+ case HostTextTag:
270
+ case FragmentTag:
271
+ case LegacyHiddenComponentTag:
272
+ case OffscreenComponentTag:
179
273
  return true;
180
- case HostRoot:
274
+ case HostRootTag:
181
275
  return false;
182
276
  default: {
183
277
  const symbolOrNumber = typeof fiber.type === "object" && fiber.type !== null ? fiber.type.$$typeof : fiber.type;
@@ -202,18 +296,24 @@ var getNearestHostFiber = (fiber, ascending = false) => {
202
296
  };
203
297
  var getNearestHostFibers = (fiber) => {
204
298
  const hostFibers = [];
205
- const traverse = (node) => {
206
- let currentNode = node;
207
- while (currentNode) {
208
- if (isHostFiber(currentNode)) {
209
- hostFibers.push(currentNode);
210
- } else if (currentNode.child) {
211
- traverse(currentNode.child);
212
- }
213
- currentNode = currentNode.sibling;
299
+ const stack = [];
300
+ if (isHostFiber(fiber)) {
301
+ hostFibers.push(fiber);
302
+ } else if (fiber.child) {
303
+ stack.push(fiber.child);
304
+ }
305
+ while (stack.length) {
306
+ const currentNode = stack.pop();
307
+ if (!currentNode) break;
308
+ if (isHostFiber(currentNode)) {
309
+ hostFibers.push(currentNode);
310
+ } else if (currentNode.child) {
311
+ stack.push(currentNode.child);
214
312
  }
215
- };
216
- traverse(fiber);
313
+ if (currentNode.sibling) {
314
+ stack.push(currentNode.sibling);
315
+ }
316
+ }
217
317
  return hostFibers;
218
318
  };
219
319
  var traverseFiber = (fiber, selector, ascending = false) => {
@@ -265,78 +365,44 @@ var getDisplayName = (type) => {
265
365
  if (!unwrappedType) return null;
266
366
  return unwrappedType.displayName || unwrappedType.name || null;
267
367
  };
268
- var isUsingRDT = () => "reactDevtoolsAgent" in getRDTHook();
368
+ var isUsingRDT = () => {
369
+ return "reactDevtoolsAgent" in getRDTHook();
370
+ };
269
371
  var detectReactBuildType = (renderer) => {
270
- return safeTry(() => {
372
+ try {
271
373
  if (typeof renderer.version === "string" && renderer.bundleType > 0) {
272
374
  return "development";
273
375
  }
274
- return "production";
275
- });
276
- };
277
- var checkDCE = (fn) => {
278
- safeTry(() => {
279
- const code = Function.prototype.toString.call(fn);
280
- if (code.indexOf("^_^") > -1) {
281
- setTimeout(() => {
282
- throw new Error(
283
- "React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build"
284
- );
285
- });
286
- }
287
- });
288
- };
289
- var NO_OP = () => {
290
- };
291
- var installRDTHook = (onActive) => {
292
- const renderers = /* @__PURE__ */ new Map();
293
- let i = 0;
294
- const rdtHook = {
295
- checkDCE,
296
- supportsFiber: true,
297
- supportsFlight: true,
298
- hasUnsupportedRendererAttached: false,
299
- renderers,
300
- onCommitFiberRoot: NO_OP,
301
- onCommitFiberUnmount: NO_OP,
302
- onPostCommitFiberRoot: NO_OP,
303
- inject(renderer) {
304
- const nextID = ++i;
305
- renderers.set(nextID, renderer);
306
- if (!rdtHook._instrumentationIsActive) {
307
- rdtHook._instrumentationIsActive = true;
308
- onActive?.();
309
- }
310
- return nextID;
311
- },
312
- _instrumentationSource: BIPPY_INSTRUMENTATION_STRING,
313
- _instrumentationIsActive: false
314
- };
315
- safeTry(() => {
316
- Object.defineProperty(globalThis, "__REACT_DEVTOOLS_GLOBAL_HOOK__", {
317
- value: rdtHook
318
- });
319
- });
320
- return rdtHook;
321
- };
322
- var getRDTHook = (onActive) => {
323
- let rdtHook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
324
- if (rdtHook) onActive?.();
325
- if (!Object.prototype.hasOwnProperty.call(
326
- globalThis,
327
- "__REACT_DEVTOOLS_GLOBAL_HOOK__"
328
- )) {
329
- rdtHook = installRDTHook(onActive);
376
+ } catch {
330
377
  }
331
- return rdtHook;
378
+ return "production";
332
379
  };
333
380
  var isInstrumentationActive = () => {
334
381
  const rdtHook = getRDTHook();
335
382
  return Boolean(rdtHook._instrumentationIsActive) || isUsingRDT();
336
383
  };
384
+ var fiberId = 0;
385
+ var fiberIdMap = /* @__PURE__ */ new WeakMap();
386
+ var setFiberId = (fiber, id = fiberId++) => {
387
+ fiberIdMap.set(fiber, id);
388
+ };
389
+ var getFiberId = (fiber) => {
390
+ let id = fiberIdMap.get(fiber);
391
+ if (!id && fiber.alternate) {
392
+ id = fiberIdMap.get(fiber.alternate);
393
+ }
394
+ if (!id) {
395
+ id = fiberId++;
396
+ setFiberId(fiber, id);
397
+ }
398
+ return id;
399
+ };
337
400
  var mountFiberRecursively = (onRender, firstChild, traverseSiblings) => {
338
401
  let fiber = firstChild;
339
402
  while (fiber != null) {
403
+ if (!fiberIdMap.has(fiber)) {
404
+ getFiberId(fiber);
405
+ }
340
406
  const shouldIncludeInTree = !shouldFilterFiber(fiber);
341
407
  if (shouldIncludeInTree && didFiberRender(fiber)) {
342
408
  onRender(fiber, "mount");
@@ -368,7 +434,13 @@ var mountFiberRecursively = (onRender, firstChild, traverseSiblings) => {
368
434
  }
369
435
  };
370
436
  var updateFiberRecursively = (onRender, nextFiber, prevFiber, parentFiber) => {
437
+ if (!fiberIdMap.has(nextFiber)) {
438
+ getFiberId(nextFiber);
439
+ }
371
440
  if (!prevFiber) return;
441
+ if (!fiberIdMap.has(prevFiber)) {
442
+ getFiberId(prevFiber);
443
+ }
372
444
  const isSuspense = nextFiber.tag === SuspenseComponentTag;
373
445
  const shouldIncludeInTree = !shouldFilterFiber(nextFiber);
374
446
  if (shouldIncludeInTree && didFiberRender(nextFiber)) {
@@ -413,7 +485,7 @@ var updateFiberRecursively = (onRender, nextFiber, prevFiber, parentFiber) => {
413
485
  }
414
486
  };
415
487
  var unmountFiber = (onRender, fiber) => {
416
- const isRoot = fiber.tag === HostRoot;
488
+ const isRoot = fiber.tag === HostRootTag;
417
489
  if (isRoot || !shouldFilterFiber(fiber)) {
418
490
  onRender(fiber, "unmount");
419
491
  }
@@ -449,7 +521,7 @@ var createFiberVisitor = ({
449
521
  rootInstanceMap.set(root, rootInstance);
450
522
  }
451
523
  const { prevFiber } = rootInstance;
452
- safeTry(() => {
524
+ try {
453
525
  if (!rootFiber) {
454
526
  unmountFiber(onRender, root);
455
527
  } else if (prevFiber !== null) {
@@ -472,7 +544,9 @@ var createFiberVisitor = ({
472
544
  } else {
473
545
  mountFiberRecursively(onRender, rootFiber, true);
474
546
  }
475
- }, onError);
547
+ } catch (error) {
548
+ onError(error);
549
+ }
476
550
  rootInstance.prevFiber = rootFiber;
477
551
  };
478
552
  };
@@ -507,24 +581,55 @@ var instrument = (options) => {
507
581
  }
508
582
  });
509
583
  };
510
- var secure = (options) => {
584
+ var getFiberFromHostInstance = (hostInstance) => {
585
+ const rdtHook = getRDTHook();
586
+ for (const renderer of rdtHook.renderers.values()) {
587
+ try {
588
+ const fiber = renderer.findFiberByHostInstance?.(hostInstance);
589
+ if (fiber) return fiber;
590
+ } catch {
591
+ }
592
+ }
593
+ if (typeof hostInstance === "object" && hostInstance != null) {
594
+ if ("_reactRootContainer" in hostInstance) {
595
+ return hostInstance._reactRootContainer?._internalRoot?.current?.child;
596
+ }
597
+ for (const key in hostInstance) {
598
+ if (key.startsWith("__reactInternalInstance$") || key.startsWith("__reactFiber")) {
599
+ return hostInstance[key];
600
+ }
601
+ }
602
+ }
603
+ return null;
604
+ };
605
+ var secure = (options, secureOptions = {}) => {
511
606
  const onActive = options.onActive;
607
+ const isRDTHookInstalled = hasRDTHook();
608
+ const isRDT = isUsingRDT();
609
+ let timeout;
610
+ let isProduction = false;
512
611
  options.onActive = () => {
612
+ clearTimeout(timeout);
513
613
  let isSecure = true;
514
- safeTry(() => {
614
+ try {
515
615
  onActive?.();
516
616
  const rdtHook = getRDTHook();
517
617
  for (const renderer of rdtHook.renderers.values()) {
518
618
  const [majorVersion] = renderer.version.split(".");
519
- if (Number(majorVersion) < 17) {
619
+ if (Number(majorVersion) < (secureOptions.minReactMajorVersion ?? 17)) {
520
620
  isSecure = false;
521
621
  }
522
622
  const buildType = detectReactBuildType(renderer);
523
623
  if (buildType !== "development") {
524
- isSecure = false;
624
+ isProduction = true;
625
+ if (!secureOptions.dangerouslyRunInProduction) {
626
+ isSecure = false;
627
+ }
525
628
  }
526
629
  }
527
- });
630
+ } catch (err) {
631
+ secureOptions.onError?.(err);
632
+ }
528
633
  if (!isSecure) {
529
634
  options.onCommitFiberRoot = void 0;
530
635
  options.onCommitFiberUnmount = void 0;
@@ -532,40 +637,50 @@ var secure = (options) => {
532
637
  options.onActive = void 0;
533
638
  return;
534
639
  }
535
- const onCommitFiberRoot = options.onCommitFiberRoot;
536
- if (onCommitFiberRoot) {
537
- options.onCommitFiberRoot = (rendererID, root, priority) => {
538
- safeTry(() => onCommitFiberRoot(rendererID, root, priority));
539
- };
540
- }
541
- const onCommitFiberUnmount = options.onCommitFiberUnmount;
542
- if (onCommitFiberUnmount) {
543
- options.onCommitFiberUnmount = (rendererID, root) => {
544
- safeTry(() => onCommitFiberUnmount(rendererID, root));
545
- };
546
- }
547
- const onPostCommitFiberRoot = options.onPostCommitFiberRoot;
548
- if (onPostCommitFiberRoot) {
549
- options.onPostCommitFiberRoot = (rendererID, root) => {
550
- safeTry(() => onPostCommitFiberRoot(rendererID, root));
551
- };
640
+ try {
641
+ const onCommitFiberRoot = options.onCommitFiberRoot;
642
+ if (onCommitFiberRoot) {
643
+ options.onCommitFiberRoot = (rendererID, root, priority) => {
644
+ try {
645
+ onCommitFiberRoot(rendererID, root, priority);
646
+ } catch (err) {
647
+ secureOptions.onError?.(err);
648
+ }
649
+ };
650
+ }
651
+ const onCommitFiberUnmount = options.onCommitFiberUnmount;
652
+ if (onCommitFiberUnmount) {
653
+ options.onCommitFiberUnmount = (rendererID, root) => {
654
+ try {
655
+ onCommitFiberUnmount(rendererID, root);
656
+ } catch (err) {
657
+ secureOptions.onError?.(err);
658
+ }
659
+ };
660
+ }
661
+ const onPostCommitFiberRoot = options.onPostCommitFiberRoot;
662
+ if (onPostCommitFiberRoot) {
663
+ options.onPostCommitFiberRoot = (rendererID, root) => {
664
+ try {
665
+ onPostCommitFiberRoot(rendererID, root);
666
+ } catch (err) {
667
+ secureOptions.onError?.(err);
668
+ }
669
+ };
670
+ }
671
+ } catch (err) {
672
+ secureOptions.onError?.(err);
552
673
  }
553
674
  };
554
- return options;
555
- };
556
- var safeTry = (fn, onError) => {
557
- try {
558
- return fn();
559
- } catch (error) {
560
- onError?.(error);
675
+ if (!isRDTHookInstalled && !isRDT) {
676
+ timeout = setTimeout(() => {
677
+ if (!isProduction) {
678
+ secureOptions.onError?.();
679
+ }
680
+ stop();
681
+ }, secureOptions.installCheckTimeout ?? 100);
561
682
  }
562
- return null;
683
+ return options;
563
684
  };
564
685
 
565
- // src/index.ts
566
- if (typeof window !== "undefined" && // @ts-expect-error `document` may not be defined in some enviroments
567
- (window.document?.createElement || window.navigator?.product === "ReactNative") && typeof process !== "undefined" && process.versions != null && process.versions.node != null) {
568
- installRDTHook();
569
- }
570
-
571
- export { BIPPY_INSTRUMENTATION_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, getDisplayName, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getRDTHook, getTimings, getType, hasMemoCache, installRDTHook, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isUsingRDT, isValidElement, isValidFiber, mountFiberRecursively, safeTry, secure, shouldFilterFiber, traverseContexts, traverseEffects, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively, version };
686
+ export { BIPPY_INSTRUMENTATION_STRING, CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponentTag, ELEMENT_TYPE_SYMBOL_STRING, ForwardRefTag, FragmentTag, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRootTag, HostSingletonTag, HostTextTag, LegacyHiddenComponentTag, MemoComponentTag, OffscreenComponentTag, SimpleMemoComponentTag, SuspenseComponentTag, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, fiberIdMap, getDisplayName, getFiberFromHostInstance, getFiberId, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getRDTHook, getTimings, getType, hasMemoCache, hasRDTHook, installRDTHook, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isUsingRDT, isValidElement, isValidFiber, mountFiberRecursively, secure, setFiberId, shouldFilterFiber, traverseContexts, traverseEffects, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively, version };