bippy 0.6.1-dev.61475ed → 0.6.1-dev.93556ef

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 (67) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +51 -48
  3. package/dist/core.cjs +1 -1
  4. package/dist/core.d.cts +45 -60
  5. package/dist/core.d.ts +45 -60
  6. package/dist/core.js +1 -1
  7. package/dist/core2.cjs +9 -0
  8. package/dist/core2.d.cts +11 -3
  9. package/dist/core2.d.ts +11 -3
  10. package/dist/core2.js +9 -0
  11. package/dist/errors.d.cts +410 -0
  12. package/dist/errors.d.ts +410 -0
  13. package/dist/index.cjs +1 -1
  14. package/dist/index.d.cts +11 -3
  15. package/dist/index.d.ts +11 -3
  16. package/dist/index.iife.js +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/install-hook-only.cjs +1 -1
  19. package/dist/install-hook-only.d.cts +9 -1
  20. package/dist/install-hook-only.d.ts +9 -1
  21. package/dist/install-hook-only.iife.js +1 -1
  22. package/dist/install-hook-only.js +1 -1
  23. package/dist/rdt-hook.cjs +1 -1
  24. package/dist/rdt-hook.js +1 -1
  25. package/dist/source.cjs +14 -5
  26. package/dist/source.d.cts +86 -69
  27. package/dist/source.d.ts +86 -69
  28. package/dist/source.js +14 -5
  29. package/package.json +22 -16
  30. package/src/core.ts +348 -344
  31. package/src/errors.ts +34 -0
  32. package/src/install-hook-only.ts +2 -2
  33. package/src/rdt-hook.ts +160 -161
  34. package/src/react-internals/generated/react-work-tags.ts +318 -0
  35. package/src/react-internals/index.ts +67 -0
  36. package/src/react-internals/semver.ts +80 -0
  37. package/src/react-internals/types.ts +186 -0
  38. package/src/source/constants.ts +1 -1
  39. package/src/source/error-stack.ts +11 -0
  40. package/src/source/get-display-name-from-source.ts +44 -40
  41. package/src/source/get-source.ts +43 -26
  42. package/src/source/index.ts +11 -1
  43. package/src/source/inspect-hooks.ts +220 -207
  44. package/src/source/owner-stack.ts +119 -174
  45. package/src/source/parse-debug-stack.ts +4 -4
  46. package/src/source/parse-hook-names.ts +14 -53
  47. package/src/source/parse-stack.ts +14 -31
  48. package/src/source/renderer-dispatchers.ts +30 -0
  49. package/src/source/symbolication.ts +709 -120
  50. package/dist/get-source.cjs +0 -19
  51. package/dist/get-source.js +0 -19
  52. package/dist/react-refresh.cjs +0 -9
  53. package/dist/react-refresh.d.cts +0 -66
  54. package/dist/react-refresh.d.ts +0 -66
  55. package/dist/react-refresh.js +0 -9
  56. package/dist/unsubscribe.d.cts +0 -298
  57. package/dist/unsubscribe.d.ts +0 -298
  58. package/src/react-refresh/constants.ts +0 -9
  59. package/src/react-refresh/detect-hmr-transport.ts +0 -33
  60. package/src/react-refresh/index.ts +0 -173
  61. package/src/react-refresh/metro-hmr-transport.ts +0 -188
  62. package/src/react-refresh/next-webpack-hmr-transport.ts +0 -72
  63. package/src/react-refresh/normalize-hmr-file-path.ts +0 -24
  64. package/src/react-refresh/types.ts +0 -7
  65. package/src/react-refresh/vite-hmr-transport.ts +0 -116
  66. package/src/types.ts +0 -438
  67. package/src/unsubscribe.ts +0 -17
package/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2024 Aiden Bai
1
+ Copyright 2024-present Aiden Bai
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
4
 
package/README.md CHANGED
@@ -192,6 +192,8 @@ const unsubscribe = instrument({
192
192
  unsubscribe();
193
193
  ```
194
194
 
195
+ instrumentation, React DevTools, and hook-listener failures propagate unchanged. callback dispatch stops at the failure so the caller controls error handling. failures created by bippy, such as unsupported hooks and source-map timeouts, use the exported `BippyError` subclasses.
196
+
195
197
  ### getRDTHook
196
198
 
197
199
  returns the `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` object. great for advanced use cases, such as accessing or modifying the `renderers` property.
@@ -337,9 +339,7 @@ import { memo } from "react";
337
339
  const RealComponent = () => {
338
340
  return <div>hello</div>;
339
341
  };
340
- const MemoizedComponent = memo(() => {
341
- return <div>hello</div>;
342
- });
342
+ const MemoizedComponent = memo(RealComponent);
343
343
 
344
344
  console.log(getType(fiberForMemoizedComponent) === RealComponent);
345
345
  ```
@@ -492,26 +492,13 @@ the function traverses up the fiber tree to find the context provider matching t
492
492
 
493
493
  ### getSource
494
494
 
495
- gets the source code location of a composite fiber.
495
+ gets the source code location of any fiber with development source metadata. resolution is based on fiber debug data and source maps, so it is independent of the renderer's host instances and works with DOM, native, terminal, canvas, PDF, and custom reconcilers.
496
496
 
497
497
  ```typescript
498
498
  import { getSource } from "bippy/source";
499
499
 
500
- // random fiber on the DOM
501
- const hostFiber = getFiberFromHostInstance(document.querySelector("div"));
502
-
503
- // get nearest composite fiber up the tree
504
- const compositeFiber = traverseFiber(
505
- hostFiber,
506
- (fiber) => {
507
- if (isCompositeFiber(fiber)) {
508
- return fiber;
509
- }
510
- },
511
- true,
512
- );
513
-
514
- const source = await getSource(compositeFiber);
500
+ const fiber = getFiberFromHostInstance(hostInstance);
501
+ const source = await getSource(fiber);
515
502
  // {
516
503
  // columnNumber: 12,
517
504
  // fileName: 'path/to/file.tsx',
@@ -522,10 +509,32 @@ const source = await getSource(compositeFiber);
522
509
  > **caveats:**
523
510
  >
524
511
  > - only available in dev mode
525
- > - only works for composite fibers (function/class components)
526
- > - captures the location where the component is _used_, not where it's _defined_
527
- > - in react 18, resolves `_debugSource` directly (see [react#31981](https://github.com/facebook/react/issues/31981))
528
- > - in react >18, `_debugSource` is not available for host fibers
512
+ > - source availability is controlled by react and the renderer; production builds normally remove debug metadata
513
+ > - captures the location where the element is _used_; definition locations are recovered when react exposes an owned child debug stack
514
+ > - react 18 requires `_debugSource` from the JSX source transform (see [react#31981](https://github.com/facebook/react/issues/31981))
515
+ > - react 19 uses `_debugStack` and works for both composite and host fibers
516
+ > - source-map fetching is optional; runtimes without `fetch` still receive the unsymbolicated source location
517
+
518
+ source maps are discovered from `SourceMap` headers, source map annotations, or Metro's `.bundle` to `.map` convention. HTTP, Chrome, Firefox, and Safari WebExtension URLs work without adapters. Metro bundle options such as `platform=ios` or `platform=android` are preserved when requesting the map.
519
+
520
+ `getSource`, `getOwnerStack`, `getParentStack`, `getDisplayNameFromSource`, `parseHookNames`, and `getSourceMap` accept an optional `SourceFetch`. use it for packaged React Native bundles, desktop runtimes, virtual filesystems, or renderer-specific URLs that the runtime's global `fetch` cannot load. a virtual bundle response can provide a `SourceMap` header when the map is stored separately:
521
+
522
+ ```typescript
523
+ import { getSource, type SourceFetch } from "bippy/source";
524
+
525
+ const sourceFetch: SourceFetch = async (url, init) => {
526
+ const resource = nativeSourceArtifacts.get(url);
527
+ if (!resource) return fetch(url, init);
528
+
529
+ return new Response(resource.content, {
530
+ headers: resource.sourceMapUrl ? { SourceMap: resource.sourceMapUrl } : undefined,
531
+ });
532
+ };
533
+
534
+ const source = await getSource(fiber, true, sourceFetch);
535
+ ```
536
+
537
+ custom loaders are isolated in their own source-map cache and may resolve schemes such as `file:`. bippy never reads those schemes through the global fetch implementation. `getSourceMap` also accepts request limits, an abort signal, and a timeout.
529
538
 
530
539
  ### getOwnerStack / getParentStack
531
540
 
@@ -545,31 +554,6 @@ const parentFrames = await getParentStack(fiber);
545
554
  // includes every wrapper between the fiber and the root
546
555
  ```
547
556
 
548
- ### instrumentReactRefresh
549
-
550
- subscribes to fast refresh (HMR) updates from `bippy/react-refresh`. works with any bundler that uses react-refresh (vite, next.js webpack, next.js turbopack, metro) without bundler-specific code: bippy auto-detects the bundler's HMR transport and augments each update with the hot-updated source file paths.
551
-
552
- the handler runs after react has re-rendered with the new component types, so `updatedFibers`/`staleFibers` are the mounted fibers matching the hot-swapped component types.
553
-
554
- returns an unsubscribe function (a no-op during SSR, so no environment checks needed). the returned function is also a `Disposable`, so it works with `using`.
555
-
556
- ```typescript
557
- import { instrumentReactRefresh } from "bippy/react-refresh";
558
- import { getDisplayName } from "bippy";
559
-
560
- const unsubscribe = instrumentReactRefresh({
561
- onRefresh(update) {
562
- for (const fiber of update.updatedFibers) {
563
- console.log("hot updated:", getDisplayName(fiber.type));
564
- }
565
- console.log("changed files:", update.filePaths);
566
- },
567
- });
568
-
569
- // later
570
- unsubscribe();
571
- ```
572
-
573
557
  ## example
574
558
 
575
559
  here's a mini toy version of [`react-scan`](https://github.com/aidenybai/react-scan) that highlights renders in your app.
@@ -631,6 +615,25 @@ instrument({
631
615
  });
632
616
  ```
633
617
 
618
+ ## renderer support
619
+
620
+ bippy observes renderers through the React DevTools global hook. a renderer is automatically supported when it injects its reconciler and forwards commits to that hook.
621
+
622
+ | level | renderers | coverage |
623
+ | ------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
624
+ | automatic | React DOM, Remotion | unit matrix and browser e2e |
625
+ | automatic | React Native Fabric, React Native Skia | iOS and Android Detox e2e |
626
+ | automatic | React Three Fiber, Ink, react-nil | unit matrix |
627
+ | automatic | `@opentui/react`, `@pixi/react`, React BabylonJS | unit matrix with non-DOM host instances |
628
+ | compatibility | `@react-pdf/renderer` | its real reconciler root is forwarded through a synthetic DevTools hook bridge because react-pdf does not inject itself |
629
+ | compatibility | React Konva | its exported reconciler is injected by a test bridge because upstream automatic injection is disabled |
630
+
631
+ compatibility entries are not zero-config support claims. the bridge implementations in [`packages/bippy/tests/renderer-adapters.tsx`](packages/bippy/tests/renderer-adapters.tsx) verify bippy's fiber APIs against the real host trees while keeping the missing upstream DevTools integration explicit. React Native Windows, macOS, and NativeScript are not currently asserted.
632
+
633
+ terminal renderers must load bippy before their reconciler initializes. importing `bippy` first works in Node and Bun; `bippy/install-hook-only` is also available as a minimal prelude when application import order is controlled elsewhere. the test suite verifies OpenTUI in clean Node and Bun processes and verifies that Ink can replace the hook with full React DevTools without losing either renderer.
634
+
635
+ `@testing-library/react` is a React DOM testing utility, not a renderer. bippy uses it throughout the test suite, including hydration, event-driven updates, portals, unmounts, and error-boundary recovery.
636
+
634
637
  ## glossary
635
638
 
636
639
  - fiber: a “unit of execution” in react, representing a component or dom element
package/dist/core.cjs CHANGED
@@ -6,4 +6,4 @@
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
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./rdt-hook.cjs`),t=60111,n=`Symbol(react.concurrent_mode)`,r=`Symbol(react.async_mode)`,i=13366,a=e=>typeof e==`object`&&!!e&&`$$typeof`in e&&[`Symbol(react.element)`,`Symbol(react.transitional.element)`].includes(String(e.$$typeof)),o=e=>typeof e==`object`&&!!e&&`tag`in e&&`stateNode`in e&&`return`in e&&`child`in e&&`sibling`in e&&`flags`in e,s=e=>{switch(e.tag){case 5:case 26:case 27:return!0;default:return typeof e.type==`string`}},c=e=>{switch(e.tag){case 1:case 11:case 0:case 14:case 15:return!0;default:return!1}},l=e=>!e||typeof e!=`object`?!1:`pendingProps`in e&&!(`containerInfo`in e),u=(e,t)=>{try{let n=e.dependencies,r=e.alternate?.dependencies;if(!n||!r||typeof n!=`object`||!(`firstContext`in n)||typeof r!=`object`||!(`firstContext`in r))return!1;let i=n.firstContext,a=r.firstContext;for(;i&&typeof i==`object`&&`memoizedValue`in i||a&&typeof a==`object`&&`memoizedValue`in a;){if(t(i,a)===!0)return!0;i=i?.next,a=a?.next}}catch{}return!1},ee=(e,t)=>{try{let n=e.memoizedState,r=e.alternate?.memoizedState;for(;n||r;){if(t(n,r)===!0)return!0;n=n?.next,r=r?.next}}catch{}return!1},d=(e,t)=>{try{let n=e.memoizedProps,r=e.alternate?.memoizedProps||{};for(let e of Object.keys(n))if(t(e,n[e],r[e])===!0)return!0;for(let e of Object.keys(r))if(!(e in n)&&t(e,n[e],r[e])===!0)return!0}catch{}return!1},f=e=>{let t=e.memoizedProps,n=e.alternate?.memoizedProps||{},r=e.flags??e.effectTag??0;switch(e.tag){case 1:case 9:case 11:case 0:case 14:case 15:return(r&1)==1;default:return e.alternate?n!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref:!0}},p=e=>!!(e.flags&(i|8)||e.subtreeFlags&(i|8)),te=e=>{let t=[],n=[e];for(;n.length;){let e=n.pop();e&&(s(e)&&p(e)&&f(e)&&t.push(e),e.child&&n.push(e.child),e.sibling&&n.push(e.sibling))}return t},ne=e=>{let t=[],n=e;for(;n.return;)t.push(n),n=n.return;return t},m=e=>{switch(e.tag){case 18:return!0;case 7:case 6:case 23:case 22:return!0;case 3:return!1;default:{let i=typeof e.type==`object`&&e.type!==null?e.type.$$typeof:e.type;if(typeof i==`symbol`)return i.description===`react.concurrent_mode`||i.description===`react.async_mode`;switch(i){case t:case n:case r:return!0;default:return!1}}}},h=(e,t=!1)=>{let n=_(e,s,t);return n||=_(e,s,!t),n},g=e=>{let t=[],n=[];for(s(e)?t.push(e):e.child&&n.push(e.child);n.length;){let e=n.pop();if(!e)break;s(e)?t.push(e):e.child&&n.push(e.child),e.sibling&&n.push(e.sibling)}return t};function _(e,t,n=!1){if(!e)return null;let r=t(e);if(r instanceof Promise)return(async()=>{if(await r===!0)return e;let i=n?e.return:e.child;for(;i;){let e=await y(i,t,n);if(e)return e;i=n?null:i.sibling}return null})();if(r===!0)return e;let i=n?e.return:e.child;for(;i;){let e=v(i,t,n);if(e)return e;i=n?null:i.sibling}return null}const v=(e,t,n=!1)=>{if(!e)return null;if(t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let e=v(r,t,n);if(e)return e;r=n?null:r.sibling}return null},y=async(e,t,n=!1)=>{if(!e)return null;if(await t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let e=await y(r,t,n);if(e)return e;r=n?null:r.sibling}return null},b=e=>{let t=e?.actualDuration??0,n=t,r=e?.child??null;for(;t>0&&r!=null;)n-=r.actualDuration??0,r=r.sibling;return{selfTime:n,totalTime:t}},x=e=>!!e.updateQueue?.memoCache,S=e=>{let t=e;return typeof t==`function`?t:typeof t==`object`&&t?S(t.type||t.render):null},re=e=>{let t=e;if(typeof t==`string`)return t;if(typeof t!=`function`&&!(typeof t==`object`&&t))return null;let n=t.displayName||t.name||null;if(n)return n;let r=S(t);return r&&(r.displayName||r.name)||null},ie=e=>{try{if(typeof e.version==`string`&&e.bundleType>0)return`development`}catch{}return`production`},ae=()=>{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;return!!t?._instrumentationIsActive||e.l(t)||e.c(t)},C=new Set,oe=e=>{let t=e.alternate;if(!t)return e;if(t.actualStartTime&&e.actualStartTime)return t.actualStartTime>e.actualStartTime?t:e;for(let t of C){let n=_(t.current,t=>{if(t===e)return!0});if(n)return n}return e};let w=0;const T=new WeakMap,E=(e,t=w++)=>{T.set(e,t)},D=e=>{let t=T.get(e);return t===void 0&&e.alternate&&(t=T.get(e.alternate)),t===void 0&&(t=w++,E(e,t)),t},O=(e,t,n)=>{let r=t;for(;r!=null;){if(T.has(r)||D(r),!m(r)&&f(r)&&e(r,`mount`),r.tag===13)if(r.memoizedState!==null){let t=r.child,n=t?t.sibling:null;if(n){let t=n.child;t!==null&&O(e,t,!1)}}else{let t=null;r.child!==null&&(t=r.child.child),t!==null&&O(e,t,!1)}else r.child!=null&&O(e,r.child,!0);r=n?r.sibling:null}},k=(e,t,n,r)=>{if(T.has(t)||D(t),!n)return;T.has(n)||D(n);let i=t.tag===13,a=!m(t);a&&f(t)&&e(t,`update`);let o=i&&n.memoizedState!==null,s=i&&t.memoizedState!==null;if(o&&s){let r=t.child?.sibling??null,i=n.child?.sibling??null;r!==null&&i!==null&&k(e,r,i,t)}else if(o&&!s){let n=t.child;n!==null&&O(e,n,!0)}else if(!o&&s){j(e,n);let r=t.child?.sibling??null;r!==null&&O(e,r,!0)}else if(t.child!==n.child){let n=t.child;for(;n;){if(n.alternate){let i=n.alternate;k(e,n,i,a?t:r)}else O(e,n,!1);n=n.sibling}}},A=(e,t)=>{(t.tag===3||!m(t))&&e(t,`unmount`)},j=(e,t)=>{let n=t.tag===13&&t.memoizedState!==null,r=t.child;for(n&&(r=(t.child?.sibling??null)?.child??null);r!==null;)r.return!==null&&(A(e,r),j(e,r)),r=r.sibling};let M=0;const N=new WeakMap,se=(e,t)=>{let n=`current`in e?e.current:e,r=N.get(e);r||(r={id:M++,prevFiber:null},N.set(e,r));let{prevFiber:i}=r;if(!n)A(t,n);else if(i!==null){let e=i&&i.memoizedState!=null&&i.memoizedState.element!=null&&i.memoizedState.isDehydrated!==!0,r=n.memoizedState!=null&&n.memoizedState.element!=null&&n.memoizedState.isDehydrated!==!0;!e&&r?O(t,n,!1):e&&r?k(t,n,n.alternate,null):e&&!r&&A(t,n)}else O(t,n,!0);r.prevFiber=n},P=new Set;let F=!1;const I=()=>{if(F||!e.a())return;let t=e.i();if(t?.renderers){F=!0,Q(t);for(let e of t.renderers.values())P.add(e);e.u(e=>{P.add(e)})}},L=t=>{if(!e.a())return null;let n=t;for(;n.return;)n=n.return;let r=Z.get(n.stateNode);return r===void 0?null:e.i().renderers?.get(r)??null},R=e=>{I();let t=L(e);return t?[t]:Array.from(P)},z=(e,t,n,r)=>{for(let i of e)try{i.overrideProps?.(t,n,r)}catch{}},B=(e,t)=>{let n=e.memoizedState;for(let e=0;e<t;e++){if(!n?.next)return null;n=n.next}let r=n?.queue;return H(r)&&typeof r.dispatch==`function`?r.dispatch:null},V=(e,t)=>{let n=e;for(;n;){let e=n.type;if(e===t||e?.Provider===t)return n;n=n.return}return null},H=e=>Object.prototype.toString.call(e)===`[object Object]`&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null),U=(e,t=[])=>{if(!H(e))return[{path:t,value:e}];let n=[];for(let r in e){let i=e[r],a=t.concat(r);H(i)?n.push(...U(i,a)):n.push({path:a,value:i})}return n},W=e=>H(e)?U(e):[{path:[],value:e}],G=(e,t)=>{let n=R(e);for(let{path:r,value:i}of W(t))z(n,e,r,i)},ce=(e,t,n)=>{let r=R(e).filter(e=>!!e.overrideHookState),i=W(n);if(r.length>0){let n=String(t);for(let t of r)for(let{path:r,value:a}of i)try{t.overrideHookState?.(e,n,r,a)}catch{}return}if(H(n))return;let a=B(e,t);if(a)try{a(n)}catch{}},le=(e,t,n)=>{let r=V(e,t);if(!r)return;let i=R(r);for(let{path:e,value:t}of W(n))z(i,r,[`value`,...e],t),r.alternate&&z(i,r.alternate,[`value`,...e],t)},K=new Set,q=new Set,J=new Set,Y=new Set,X=new WeakMap,Z=new WeakMap,Q=e=>{let t=X.get(e)??{};if(X.set(e,t),!t.onCommitFiberRoot||e.onCommitFiberRoot!==t.onCommitFiberRoot){let n=e.onCommitFiberRoot,r=(t,i,a)=>{if(n?.(t,i,a),X.get(e)?.onCommitFiberRoot===r){C.add(i),Z.set(i,t);for(let e of K)e(t,i,a)}};t.onCommitFiberRoot=r,e.onCommitFiberRoot=r}if(!t.onCommitFiberUnmount||e.onCommitFiberUnmount!==t.onCommitFiberUnmount){let n=e.onCommitFiberUnmount,r=(t,i)=>{if(n?.(t,i),X.get(e)?.onCommitFiberUnmount===r)for(let e of q)e(t,i)};t.onCommitFiberUnmount=r,e.onCommitFiberUnmount=r}if(!t.onPostCommitFiberRoot||e.onPostCommitFiberRoot!==t.onPostCommitFiberRoot){let n=e.onPostCommitFiberRoot,r=(t,i)=>{if(n?.(t,i),X.get(e)?.onPostCommitFiberRoot===r)for(let e of J)e(t,i)};t.onPostCommitFiberRoot=r,e.onPostCommitFiberRoot=r}if(!t.onScheduleFiberRoot||e.onScheduleFiberRoot!==t.onScheduleFiberRoot){let n=e.onScheduleFiberRoot,r=(t,i,a)=>{if(n?.(t,i,a),X.get(e)?.onScheduleFiberRoot===r)for(let e of Y)e(t,i,a)};t.onScheduleFiberRoot=r,e.onScheduleFiberRoot=r}},ue=t=>{let n=e.i(t.onActive);n._instrumentationSource=t.name??e.t,Q(n);let{onActive:r,onCommitFiberRoot:i,onCommitFiberUnmount:a,onPostCommitFiberRoot:o,onScheduleFiberRoot:s}=t;return i&&K.add(i),a&&q.add(a),o&&J.add(o),s&&Y.add(s),e.m(()=>{r&&e.n.delete(r),i&&K.delete(i),a&&q.delete(a),o&&J.delete(o),s&&Y.delete(s)})},$=new Set,de=e=>e.startsWith(`__reactContainer$`)||e.startsWith(`__reactInternalInstance$`)||e.startsWith(`__reactFiber`),fe=e=>{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t?.renderers)for(let n of t.renderers.values())try{let t=n.findFiberByHostInstance?.(e);if(t)return t}catch{}if(typeof e==`object`&&e){if(`_reactRootContainer`in e)return e._reactRootContainer?._internalRoot?.current?.child;let t=e.__internalInstanceHandle??e._internalInstanceHandle;if(l(t))return t;let n=e;for(let e of $){let t=n[e];if(t)return t}for(let e of Object.keys(n))if(de(e))return $.add(e),n[e]||null;for(let t of C){if(L(t.current)?.findFiberByHostInstance)continue;let n=_(t.current,t=>t.stateNode===e);if(n)return n}}return null};exports.ActivityComponentTag=28,exports.BIPPY_INSTRUMENTATION_STRING=e.t,exports.CONCURRENT_MODE_NUMBER=t,exports.CONCURRENT_MODE_SYMBOL_DESCRIPTION=`react.concurrent_mode`,exports.CONCURRENT_MODE_SYMBOL_STRING=n,exports.ClassComponentTag=1,exports.ContextConsumerTag=9,exports.DEPRECATED_ASYNC_MODE_SYMBOL_DESCRIPTION=`react.async_mode`,exports.DEPRECATED_ASYNC_MODE_SYMBOL_STRING=r,exports.DehydratedSuspenseComponentTag=18,exports.ELEMENT_TYPE_SYMBOL_STRING=`Symbol(react.element)`,exports.ForwardRefTag=11,exports.FragmentTag=7,exports.FunctionComponentTag=0,exports.HostComponentTag=5,exports.HostHoistableTag=26,exports.HostPortalTag=4,exports.HostRootTag=3,exports.HostSingletonTag=27,exports.HostTextTag=6,exports.LazyComponentTag=16,exports.LegacyHiddenComponentTag=23,exports.MemoComponentTag=14,exports.OffscreenComponentTag=22,exports.SimpleMemoComponentTag=15,exports.SuspenseComponentTag=13,exports.SuspenseListComponentTag=19,exports.TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING=`Symbol(react.transitional.element)`,exports.ViewTransitionComponentTag=30,exports._fiberRoots=C,exports._onActiveListeners=e.n,exports._renderers=e.r,exports.detectReactBuildType=ie,exports.didFiberCommit=p,exports.didFiberRender=f,exports.getDisplayName=re,exports.getFiberFromHostInstance=fe,exports.getFiberId=D,exports.getFiberStack=ne,exports.getLatestFiber=oe,exports.getMutatedHostFibers=te,exports.getNearestHostFiber=h,exports.getNearestHostFibers=g,exports.getRDTHook=e.i,exports.getTimings=b,exports.getType=S,exports.hasMemoCache=x,exports.hasRDTHook=e.a,exports.installRDTHook=e.o,exports.instrument=ue,exports.isClientEnvironment=e.s,exports.isCompositeFiber=c,exports.isFiber=l,exports.isHostFiber=s,exports.isInstrumentationActive=ae,exports.isReactRefresh=e.c,exports.isRealReactDevtools=e.l,exports.isValidElement=a,exports.isValidFiber=o,exports.onRendererInject=e.u,exports.overrideContext=le,exports.overrideHookState=ce,exports.overrideProps=G,exports.patchRDTHook=e.d,exports.safelyInstallRDTHook=e.f,exports.setFiberId=E,exports.toUnsubscribe=e.m,exports.traverseContexts=u,exports.traverseFiber=_,exports.traverseProps=d,exports.traverseRenderedFibers=se,exports.traverseState=ee,exports.version=e.p;
9
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rdt-hook.cjs"),t=require("./core2.cjs");exports.BIPPY_INSTRUMENTATION_STRING=e.t,exports.BippyError=t.M,exports.BippyHookInspectionError=t.N,exports.BippyHookRenderError=t.P,exports.BippySourceMapError=t.F,exports.BippyUnsupportedHookError=t.I,exports.ReactSymbols=t.R,exports._fiberRoots=t.t,exports._onActiveListeners=e.n,exports._renderers=e.r,exports.detectReactBuildType=t.n,exports.didFiberCommit=t.r,exports.didFiberRender=t.i,exports.getDisplayName=t.a,exports.getFiberFromHostInstance=t.o,exports.getFiberId=t.s,exports.getFiberStack=t.c,exports.getLatestFiber=t.l,exports.getMutatedHostFibers=t.u,exports.getNearestHostFiber=t.d,exports.getNearestHostFibers=t.f,exports.getRDTHook=e.a,exports.getReactWorkTags=t.z,exports.getTimings=t.p,exports.getType=t.m,exports.hasMemoCache=t.h,exports.hasRDTHook=e.o,exports.installRDTHook=e.s,exports.instrument=t.g,exports.isCompositeFiber=t._,exports.isFiber=t.v,exports.isHostFiber=t.y,exports.isInstrumentationActive=t.b,exports.isRealReactDevtools=e.c,exports.isValidElement=t.x,exports.isValidFiber=t.S,exports.onRendererInject=e.u,exports.overrideContext=t.C,exports.overrideHookState=t.w,exports.overrideProps=t.T,exports.patchRDTHook=e.d,exports.setFiberId=t.E,exports.traverseContexts=t.D,exports.traverseFiber=t.O,exports.traverseProps=t.k,exports.traverseRenderedFibers=t.A,exports.traverseState=t.j,exports.version=e.f;
package/dist/core.d.cts CHANGED
@@ -1,62 +1,51 @@
1
- import { A as ReactRenderer, E as ReactDevToolsGlobalHook, a as ContextDependency, d as FiberRoot, t as Unsubscribe, u as Fiber, v as MemoizedState } from "./unsubscribe.cjs";
1
+ /**
2
+ * @license bippy
3
+ *
4
+ * Copyright (c) Aiden Bai
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ import { D as ReactRenderer, T as ReactDevToolsGlobalHook, b as MemoizedState, g as FiberRoot, m as Fiber, u as ContextDependency, v as HostFiber } from "./errors.cjs";
2
10
  import * as React from "react";
3
-
11
+ //#region src/react-internals/semver.d.ts
12
+ declare const compareSemver: (leftVersion: string, rightVersion: string) => -1 | 0 | 1 | null;
13
+ //#endregion
4
14
  //#region src/rdt-hook.d.ts
15
+ interface Unsubscribe extends Disposable {
16
+ (): void;
17
+ }
18
+ interface ActiveListener {
19
+ (): unknown;
20
+ }
21
+ interface RendererInjectListener {
22
+ (renderer: ReactRenderer): void;
23
+ }
5
24
  declare const version: string | undefined;
6
25
  declare const BIPPY_INSTRUMENTATION_STRING: string;
7
26
  declare const isRealReactDevtools: (rdtHook?: ReactDevToolsGlobalHook | undefined | null) => boolean;
8
- declare const isReactRefresh: (rdtHook?: ReactDevToolsGlobalHook | undefined | null) => boolean;
9
- declare const _onActiveListeners: Set<() => unknown>;
27
+ declare const _onActiveListeners: Set<ActiveListener>;
10
28
  declare const _renderers: Set<ReactRenderer>;
11
- /**
12
- * Subscribes to future renderer injections into the DevTools hook. The
13
- * single shared inject wrapper lets multiple consumers (override methods,
14
- * react-refresh, user code) observe renderers without stacking patches
15
- * whose restore order matters. Returns an unsubscribe function.
16
- */
17
- declare const onRendererInject: (listener: (renderer: ReactRenderer) => void) => Unsubscribe;
18
- declare const installRDTHook: (onActive?: () => unknown) => ReactDevToolsGlobalHook;
19
- declare const patchRDTHook: (onActive?: () => unknown) => void;
29
+ declare const onRendererInject: (listener: RendererInjectListener) => Unsubscribe;
30
+ declare const installRDTHook: (onActive?: ActiveListener) => ReactDevToolsGlobalHook;
31
+ declare const patchRDTHook: (onActive?: ActiveListener) => void;
20
32
  declare const hasRDTHook: () => boolean;
21
33
  /**
22
34
  * Returns the current React DevTools global hook.
23
35
  */
24
- declare const getRDTHook: (onActive?: () => unknown) => ReactDevToolsGlobalHook;
25
- declare const isClientEnvironment: () => boolean;
26
- /**
27
- * Usually used purely for side effect
28
- */
29
- declare const safelyInstallRDTHook: () => void;
36
+ declare const getRDTHook: (onActive?: ActiveListener) => ReactDevToolsGlobalHook;
30
37
  //#endregion
31
38
  //#region src/core.d.ts
32
- declare const FunctionComponentTag = 0;
33
- declare const ClassComponentTag = 1;
34
- declare const HostRootTag = 3;
35
- declare const HostPortalTag = 4;
36
- declare const HostComponentTag = 5;
37
- declare const HostTextTag = 6;
38
- declare const FragmentTag = 7;
39
- declare const ContextConsumerTag = 9;
40
- declare const ForwardRefTag = 11;
41
- declare const SuspenseComponentTag = 13;
42
- declare const MemoComponentTag = 14;
43
- declare const SimpleMemoComponentTag = 15;
44
- declare const LazyComponentTag = 16;
45
- declare const DehydratedSuspenseComponentTag = 18;
46
- declare const SuspenseListComponentTag = 19;
47
- declare const OffscreenComponentTag = 22;
48
- declare const LegacyHiddenComponentTag = 23;
49
- declare const HostHoistableTag = 26;
50
- declare const HostSingletonTag = 27;
51
- declare const ActivityComponentTag = 28;
52
- declare const ViewTransitionComponentTag = 30;
53
- declare const CONCURRENT_MODE_NUMBER = 60111;
54
- declare const ELEMENT_TYPE_SYMBOL_STRING = "Symbol(react.element)";
55
- declare const TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING = "Symbol(react.transitional.element)";
56
- declare const CONCURRENT_MODE_SYMBOL_STRING = "Symbol(react.concurrent_mode)";
57
- declare const DEPRECATED_ASYNC_MODE_SYMBOL_STRING = "Symbol(react.async_mode)";
58
- declare const CONCURRENT_MODE_SYMBOL_DESCRIPTION = "react.concurrent_mode";
59
- declare const DEPRECATED_ASYNC_MODE_SYMBOL_DESCRIPTION = "react.async_mode";
39
+ interface FiberSelector {
40
+ (node: Fiber): boolean | Promise<boolean | void> | void;
41
+ }
42
+ interface FiberTimings {
43
+ selfTime: number;
44
+ totalTime: number;
45
+ }
46
+ interface RenderHandler {
47
+ (fiber: Fiber, phase: RenderPhase): unknown;
48
+ }
60
49
  /**
61
50
  * Returns `true` if object is a React Element.
62
51
  *
@@ -72,7 +61,7 @@ declare const isValidFiber: (fiber: unknown) => fiber is Fiber;
72
61
  *
73
62
  * @see https://reactnative.dev/architecture/glossary#host-view-tree-and-host-view
74
63
  */
75
- declare const isHostFiber: (fiber: Fiber) => boolean;
64
+ declare const isHostFiber: (fiber: Fiber) => fiber is HostFiber;
76
65
  /**
77
66
  * Returns `true` if fiber is a composite fiber. Composite fibers are fibers that can render (like functional components, class components, etc.)
78
67
  *
@@ -129,6 +118,7 @@ declare const getNearestHostFibers: (fiber: Fiber) => Fiber[];
129
118
  */
130
119
  declare function traverseFiber(fiber: Fiber | null, selector: (node: Fiber) => boolean | void, ascending?: boolean): Fiber | null;
131
120
  declare function traverseFiber(fiber: Fiber | null, selector: (node: Fiber) => Promise<boolean | void>, ascending?: boolean): Promise<Fiber | null>;
121
+ declare function traverseFiber(fiber: Fiber | null, selector: FiberSelector, ascending?: boolean): Fiber | null | Promise<Fiber | null>;
132
122
  /**
133
123
  * Returns the timings of the {@link Fiber}.
134
124
  *
@@ -138,10 +128,7 @@ declare function traverseFiber(fiber: Fiber | null, selector: (node: Fiber) => P
138
128
  * console.log(selfTime, totalTime);
139
129
  * ```
140
130
  */
141
- declare const getTimings: (fiber?: Fiber | null) => {
142
- selfTime: number;
143
- totalTime: number;
144
- };
131
+ declare const getTimings: (fiber?: Fiber | null) => FiberTimings;
145
132
  /**
146
133
  * Returns `true` if the {@link Fiber} uses React Compiler's memo cache.
147
134
  */
@@ -162,14 +149,13 @@ declare const detectReactBuildType: (renderer: ReactRenderer) => "development" |
162
149
  * Returns `true` if bippy's instrumentation is active.
163
150
  */
164
151
  declare const isInstrumentationActive: () => boolean;
165
- declare const _fiberRoots: Set<any>;
152
+ declare const _fiberRoots: Set<FiberRoot>;
166
153
  /**
167
154
  * Returns the latest fiber (since it may be double-buffered).
168
155
  */
169
156
  declare const getLatestFiber: (fiber: Fiber) => Fiber;
170
- type RenderHandler = <S>(fiber: Fiber, phase: RenderPhase, state?: S) => unknown;
171
157
  type RenderPhase = "mount" | "unmount" | "update";
172
- declare const setFiberId: (fiber: Fiber, id?: number) => void;
158
+ declare const setFiberId: (fiber: Fiber, fiberId?: number) => void;
173
159
  declare const getFiberId: (fiber: Fiber) => number;
174
160
  /**
175
161
  * Creates a fiber visitor function. Must pass a fiber root and a render handler.
@@ -178,14 +164,14 @@ declare const getFiberId: (fiber: Fiber) => number;
178
164
  * console.log(phase)
179
165
  * })
180
166
  */
181
- declare const traverseRenderedFibers: (root: FiberRoot, onRender: RenderHandler) => void;
167
+ declare const traverseRenderedFibers: (root: Fiber | FiberRoot, onRender: RenderHandler) => void;
182
168
  declare const overrideProps: (fiber: Fiber, partialValue: Record<string, unknown>) => void;
183
169
  declare const overrideHookState: (fiber: Fiber, id: number, partialValue: unknown) => void;
184
170
  declare const overrideContext: (fiber: Fiber, contextType: unknown, partialValue: unknown) => void;
185
171
  interface InstrumentationOptions {
186
172
  name?: string;
187
173
  onActive?: () => unknown;
188
- onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: number | void) => unknown;
174
+ onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: number | void, didError?: boolean) => unknown;
189
175
  onCommitFiberUnmount?: (rendererID: number, fiber: Fiber) => unknown;
190
176
  onPostCommitFiberRoot?: (rendererID: number, root: FiberRoot) => unknown;
191
177
  onScheduleFiberRoot?: (rendererID: number, root: FiberRoot, children: React.ReactNode) => unknown;
@@ -195,8 +181,7 @@ interface InstrumentationOptions {
195
181
  * dispatches to a set of listeners, so multiple `instrument` calls compose
196
182
  * without stacking patches. Returns an unsubscribe function that removes
197
183
  * exactly the handlers this call registered.
198
- * The returned function is also a `Disposable`, so it composes with other
199
- * bippy subscriptions through `using`.
184
+ * The unsubscribe function can also be disposed through `using`.
200
185
  * @example
201
186
  * const unsubscribe = instrument({
202
187
  * onActive() {
@@ -211,4 +196,4 @@ interface InstrumentationOptions {
211
196
  declare const instrument: (options: InstrumentationOptions) => Unsubscribe;
212
197
  declare const getFiberFromHostInstance: <T>(hostInstance: T) => Fiber | null;
213
198
  //#endregion
214
- export { isValidFiber as $, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING as A, getLatestFiber as B, MemoComponentTag as C, SimpleMemoComponentTag as D, RenderPhase as E, didFiberRender as F, getType as G, getNearestHostFiber as H, getDisplayName as I, isCompositeFiber as J, hasMemoCache as K, getFiberFromHostInstance as L, _fiberRoots as M, detectReactBuildType as N, SuspenseComponentTag as O, didFiberCommit as P, isValidElement as Q, getFiberId as R, LegacyHiddenComponentTag as S, RenderHandler as T, getNearestHostFibers as U, getMutatedHostFibers as V, getTimings as W, isHostFiber as X, isFiber as Y, isInstrumentationActive as Z, HostRootTag as _, isRealReactDevtools as _t, ClassComponentTag as a, traverseFiber as at, InstrumentationOptions as b, safelyInstallRDTHook as bt, DEPRECATED_ASYNC_MODE_SYMBOL_STRING as c, traverseState as ct, ForwardRefTag as d, _renderers as dt, overrideContext as et, FragmentTag as f, getRDTHook as ft, HostPortalTag as g, isReactRefresh as gt, HostHoistableTag as h, isClientEnvironment as ht, CONCURRENT_MODE_SYMBOL_STRING as i, traverseContexts as it, ViewTransitionComponentTag as j, SuspenseListComponentTag as k, DehydratedSuspenseComponentTag as l, BIPPY_INSTRUMENTATION_STRING as lt, HostComponentTag as m, installRDTHook as mt, CONCURRENT_MODE_NUMBER as n, overrideProps as nt, ContextConsumerTag as o, traverseProps as ot, FunctionComponentTag as p, hasRDTHook as pt, instrument as q, CONCURRENT_MODE_SYMBOL_DESCRIPTION as r, setFiberId as rt, DEPRECATED_ASYNC_MODE_SYMBOL_DESCRIPTION as s, traverseRenderedFibers as st, ActivityComponentTag as t, overrideHookState as tt, ELEMENT_TYPE_SYMBOL_STRING as u, _onActiveListeners as ut, HostSingletonTag as v, onRendererInject as vt, OffscreenComponentTag as w, LazyComponentTag as x, version as xt, HostTextTag as y, patchRDTHook as yt, getFiberStack as z };
199
+ export { setFiberId as A, getRDTHook as B, isHostFiber as C, overrideContext as D, isValidFiber as E, traverseState as F, patchRDTHook as G, installRDTHook as H, BIPPY_INSTRUMENTATION_STRING as I, version as K, Unsubscribe as L, traverseFiber as M, traverseProps as N, overrideHookState as O, traverseRenderedFibers as P, _onActiveListeners as R, isFiber as S, isValidElement as T, isRealReactDevtools as U, hasRDTHook as V, onRendererInject as W, getTimings as _, _fiberRoots as a, instrument as b, didFiberRender as c, getFiberId as d, getFiberStack as f, getNearestHostFibers as g, getNearestHostFiber as h, RenderPhase as i, traverseContexts as j, overrideProps as k, getDisplayName as l, getMutatedHostFibers as m, InstrumentationOptions as n, detectReactBuildType as o, getLatestFiber as p, compareSemver as q, RenderHandler as r, didFiberCommit as s, FiberTimings as t, getFiberFromHostInstance as u, getType as v, isInstrumentationActive as w, isCompositeFiber as x, hasMemoCache as y, _renderers as z };
package/dist/core.d.ts CHANGED
@@ -1,62 +1,51 @@
1
- import { A as ReactRenderer, E as ReactDevToolsGlobalHook, a as ContextDependency, d as FiberRoot, t as Unsubscribe, u as Fiber, v as MemoizedState } from "./unsubscribe.js";
1
+ /**
2
+ * @license bippy
3
+ *
4
+ * Copyright (c) Aiden Bai
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ import { D as ReactRenderer, T as ReactDevToolsGlobalHook, b as MemoizedState, g as FiberRoot, m as Fiber, u as ContextDependency, v as HostFiber } from "./errors.js";
2
10
  import * as React from "react";
3
-
11
+ //#region src/react-internals/semver.d.ts
12
+ declare const compareSemver: (leftVersion: string, rightVersion: string) => -1 | 0 | 1 | null;
13
+ //#endregion
4
14
  //#region src/rdt-hook.d.ts
15
+ interface Unsubscribe extends Disposable {
16
+ (): void;
17
+ }
18
+ interface ActiveListener {
19
+ (): unknown;
20
+ }
21
+ interface RendererInjectListener {
22
+ (renderer: ReactRenderer): void;
23
+ }
5
24
  declare const version: string | undefined;
6
25
  declare const BIPPY_INSTRUMENTATION_STRING: string;
7
26
  declare const isRealReactDevtools: (rdtHook?: ReactDevToolsGlobalHook | undefined | null) => boolean;
8
- declare const isReactRefresh: (rdtHook?: ReactDevToolsGlobalHook | undefined | null) => boolean;
9
- declare const _onActiveListeners: Set<() => unknown>;
27
+ declare const _onActiveListeners: Set<ActiveListener>;
10
28
  declare const _renderers: Set<ReactRenderer>;
11
- /**
12
- * Subscribes to future renderer injections into the DevTools hook. The
13
- * single shared inject wrapper lets multiple consumers (override methods,
14
- * react-refresh, user code) observe renderers without stacking patches
15
- * whose restore order matters. Returns an unsubscribe function.
16
- */
17
- declare const onRendererInject: (listener: (renderer: ReactRenderer) => void) => Unsubscribe;
18
- declare const installRDTHook: (onActive?: () => unknown) => ReactDevToolsGlobalHook;
19
- declare const patchRDTHook: (onActive?: () => unknown) => void;
29
+ declare const onRendererInject: (listener: RendererInjectListener) => Unsubscribe;
30
+ declare const installRDTHook: (onActive?: ActiveListener) => ReactDevToolsGlobalHook;
31
+ declare const patchRDTHook: (onActive?: ActiveListener) => void;
20
32
  declare const hasRDTHook: () => boolean;
21
33
  /**
22
34
  * Returns the current React DevTools global hook.
23
35
  */
24
- declare const getRDTHook: (onActive?: () => unknown) => ReactDevToolsGlobalHook;
25
- declare const isClientEnvironment: () => boolean;
26
- /**
27
- * Usually used purely for side effect
28
- */
29
- declare const safelyInstallRDTHook: () => void;
36
+ declare const getRDTHook: (onActive?: ActiveListener) => ReactDevToolsGlobalHook;
30
37
  //#endregion
31
38
  //#region src/core.d.ts
32
- declare const FunctionComponentTag = 0;
33
- declare const ClassComponentTag = 1;
34
- declare const HostRootTag = 3;
35
- declare const HostPortalTag = 4;
36
- declare const HostComponentTag = 5;
37
- declare const HostTextTag = 6;
38
- declare const FragmentTag = 7;
39
- declare const ContextConsumerTag = 9;
40
- declare const ForwardRefTag = 11;
41
- declare const SuspenseComponentTag = 13;
42
- declare const MemoComponentTag = 14;
43
- declare const SimpleMemoComponentTag = 15;
44
- declare const LazyComponentTag = 16;
45
- declare const DehydratedSuspenseComponentTag = 18;
46
- declare const SuspenseListComponentTag = 19;
47
- declare const OffscreenComponentTag = 22;
48
- declare const LegacyHiddenComponentTag = 23;
49
- declare const HostHoistableTag = 26;
50
- declare const HostSingletonTag = 27;
51
- declare const ActivityComponentTag = 28;
52
- declare const ViewTransitionComponentTag = 30;
53
- declare const CONCURRENT_MODE_NUMBER = 60111;
54
- declare const ELEMENT_TYPE_SYMBOL_STRING = "Symbol(react.element)";
55
- declare const TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING = "Symbol(react.transitional.element)";
56
- declare const CONCURRENT_MODE_SYMBOL_STRING = "Symbol(react.concurrent_mode)";
57
- declare const DEPRECATED_ASYNC_MODE_SYMBOL_STRING = "Symbol(react.async_mode)";
58
- declare const CONCURRENT_MODE_SYMBOL_DESCRIPTION = "react.concurrent_mode";
59
- declare const DEPRECATED_ASYNC_MODE_SYMBOL_DESCRIPTION = "react.async_mode";
39
+ interface FiberSelector {
40
+ (node: Fiber): boolean | Promise<boolean | void> | void;
41
+ }
42
+ interface FiberTimings {
43
+ selfTime: number;
44
+ totalTime: number;
45
+ }
46
+ interface RenderHandler {
47
+ (fiber: Fiber, phase: RenderPhase): unknown;
48
+ }
60
49
  /**
61
50
  * Returns `true` if object is a React Element.
62
51
  *
@@ -72,7 +61,7 @@ declare const isValidFiber: (fiber: unknown) => fiber is Fiber;
72
61
  *
73
62
  * @see https://reactnative.dev/architecture/glossary#host-view-tree-and-host-view
74
63
  */
75
- declare const isHostFiber: (fiber: Fiber) => boolean;
64
+ declare const isHostFiber: (fiber: Fiber) => fiber is HostFiber;
76
65
  /**
77
66
  * Returns `true` if fiber is a composite fiber. Composite fibers are fibers that can render (like functional components, class components, etc.)
78
67
  *
@@ -129,6 +118,7 @@ declare const getNearestHostFibers: (fiber: Fiber) => Fiber[];
129
118
  */
130
119
  declare function traverseFiber(fiber: Fiber | null, selector: (node: Fiber) => boolean | void, ascending?: boolean): Fiber | null;
131
120
  declare function traverseFiber(fiber: Fiber | null, selector: (node: Fiber) => Promise<boolean | void>, ascending?: boolean): Promise<Fiber | null>;
121
+ declare function traverseFiber(fiber: Fiber | null, selector: FiberSelector, ascending?: boolean): Fiber | null | Promise<Fiber | null>;
132
122
  /**
133
123
  * Returns the timings of the {@link Fiber}.
134
124
  *
@@ -138,10 +128,7 @@ declare function traverseFiber(fiber: Fiber | null, selector: (node: Fiber) => P
138
128
  * console.log(selfTime, totalTime);
139
129
  * ```
140
130
  */
141
- declare const getTimings: (fiber?: Fiber | null) => {
142
- selfTime: number;
143
- totalTime: number;
144
- };
131
+ declare const getTimings: (fiber?: Fiber | null) => FiberTimings;
145
132
  /**
146
133
  * Returns `true` if the {@link Fiber} uses React Compiler's memo cache.
147
134
  */
@@ -162,14 +149,13 @@ declare const detectReactBuildType: (renderer: ReactRenderer) => "development" |
162
149
  * Returns `true` if bippy's instrumentation is active.
163
150
  */
164
151
  declare const isInstrumentationActive: () => boolean;
165
- declare const _fiberRoots: Set<any>;
152
+ declare const _fiberRoots: Set<FiberRoot>;
166
153
  /**
167
154
  * Returns the latest fiber (since it may be double-buffered).
168
155
  */
169
156
  declare const getLatestFiber: (fiber: Fiber) => Fiber;
170
- type RenderHandler = <S>(fiber: Fiber, phase: RenderPhase, state?: S) => unknown;
171
157
  type RenderPhase = "mount" | "unmount" | "update";
172
- declare const setFiberId: (fiber: Fiber, id?: number) => void;
158
+ declare const setFiberId: (fiber: Fiber, fiberId?: number) => void;
173
159
  declare const getFiberId: (fiber: Fiber) => number;
174
160
  /**
175
161
  * Creates a fiber visitor function. Must pass a fiber root and a render handler.
@@ -178,14 +164,14 @@ declare const getFiberId: (fiber: Fiber) => number;
178
164
  * console.log(phase)
179
165
  * })
180
166
  */
181
- declare const traverseRenderedFibers: (root: FiberRoot, onRender: RenderHandler) => void;
167
+ declare const traverseRenderedFibers: (root: Fiber | FiberRoot, onRender: RenderHandler) => void;
182
168
  declare const overrideProps: (fiber: Fiber, partialValue: Record<string, unknown>) => void;
183
169
  declare const overrideHookState: (fiber: Fiber, id: number, partialValue: unknown) => void;
184
170
  declare const overrideContext: (fiber: Fiber, contextType: unknown, partialValue: unknown) => void;
185
171
  interface InstrumentationOptions {
186
172
  name?: string;
187
173
  onActive?: () => unknown;
188
- onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: number | void) => unknown;
174
+ onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: number | void, didError?: boolean) => unknown;
189
175
  onCommitFiberUnmount?: (rendererID: number, fiber: Fiber) => unknown;
190
176
  onPostCommitFiberRoot?: (rendererID: number, root: FiberRoot) => unknown;
191
177
  onScheduleFiberRoot?: (rendererID: number, root: FiberRoot, children: React.ReactNode) => unknown;
@@ -195,8 +181,7 @@ interface InstrumentationOptions {
195
181
  * dispatches to a set of listeners, so multiple `instrument` calls compose
196
182
  * without stacking patches. Returns an unsubscribe function that removes
197
183
  * exactly the handlers this call registered.
198
- * The returned function is also a `Disposable`, so it composes with other
199
- * bippy subscriptions through `using`.
184
+ * The unsubscribe function can also be disposed through `using`.
200
185
  * @example
201
186
  * const unsubscribe = instrument({
202
187
  * onActive() {
@@ -211,4 +196,4 @@ interface InstrumentationOptions {
211
196
  declare const instrument: (options: InstrumentationOptions) => Unsubscribe;
212
197
  declare const getFiberFromHostInstance: <T>(hostInstance: T) => Fiber | null;
213
198
  //#endregion
214
- export { isValidFiber as $, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING as A, getLatestFiber as B, MemoComponentTag as C, SimpleMemoComponentTag as D, RenderPhase as E, didFiberRender as F, getType as G, getNearestHostFiber as H, getDisplayName as I, isCompositeFiber as J, hasMemoCache as K, getFiberFromHostInstance as L, _fiberRoots as M, detectReactBuildType as N, SuspenseComponentTag as O, didFiberCommit as P, isValidElement as Q, getFiberId as R, LegacyHiddenComponentTag as S, RenderHandler as T, getNearestHostFibers as U, getMutatedHostFibers as V, getTimings as W, isHostFiber as X, isFiber as Y, isInstrumentationActive as Z, HostRootTag as _, isRealReactDevtools as _t, ClassComponentTag as a, traverseFiber as at, InstrumentationOptions as b, safelyInstallRDTHook as bt, DEPRECATED_ASYNC_MODE_SYMBOL_STRING as c, traverseState as ct, ForwardRefTag as d, _renderers as dt, overrideContext as et, FragmentTag as f, getRDTHook as ft, HostPortalTag as g, isReactRefresh as gt, HostHoistableTag as h, isClientEnvironment as ht, CONCURRENT_MODE_SYMBOL_STRING as i, traverseContexts as it, ViewTransitionComponentTag as j, SuspenseListComponentTag as k, DehydratedSuspenseComponentTag as l, BIPPY_INSTRUMENTATION_STRING as lt, HostComponentTag as m, installRDTHook as mt, CONCURRENT_MODE_NUMBER as n, overrideProps as nt, ContextConsumerTag as o, traverseProps as ot, FunctionComponentTag as p, hasRDTHook as pt, instrument as q, CONCURRENT_MODE_SYMBOL_DESCRIPTION as r, setFiberId as rt, DEPRECATED_ASYNC_MODE_SYMBOL_DESCRIPTION as s, traverseRenderedFibers as st, ActivityComponentTag as t, overrideHookState as tt, ELEMENT_TYPE_SYMBOL_STRING as u, _onActiveListeners as ut, HostSingletonTag as v, onRendererInject as vt, OffscreenComponentTag as w, LazyComponentTag as x, version as xt, HostTextTag as y, patchRDTHook as yt, getFiberStack as z };
199
+ export { setFiberId as A, getRDTHook as B, isHostFiber as C, overrideContext as D, isValidFiber as E, traverseState as F, patchRDTHook as G, installRDTHook as H, BIPPY_INSTRUMENTATION_STRING as I, version as K, Unsubscribe as L, traverseFiber as M, traverseProps as N, overrideHookState as O, traverseRenderedFibers as P, _onActiveListeners as R, isFiber as S, isValidElement as T, isRealReactDevtools as U, hasRDTHook as V, onRendererInject as W, getTimings as _, _fiberRoots as a, instrument as b, didFiberRender as c, getFiberId as d, getFiberStack as f, getNearestHostFibers as g, getNearestHostFiber as h, RenderPhase as i, traverseContexts as j, overrideProps as k, getDisplayName as l, getMutatedHostFibers as m, InstrumentationOptions as n, detectReactBuildType as o, getLatestFiber as p, compareSemver as q, RenderHandler as r, didFiberCommit as s, FiberTimings as t, getFiberFromHostInstance as u, getType as v, isInstrumentationActive as w, isCompositeFiber as x, hasMemoCache as y, _renderers as z };
package/dist/core.js CHANGED
@@ -6,4 +6,4 @@
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
- import{a as e,c as t,d as n,f as r,i,l as a,m as o,n as s,o as c,p as l,r as ee,s as te,t as u,u as d}from"./rdt-hook.js";const ne=0,f=1,re=3,ie=4,ae=5,oe=6,se=7,ce=9,le=11,ue=13,de=14,fe=15,pe=16,me=18,he=19,ge=22,_e=23,ve=26,ye=27,be=28,xe=30,p=60111,Se=`Symbol(react.element)`,Ce=`Symbol(react.transitional.element)`,m=`Symbol(react.concurrent_mode)`,h=`Symbol(react.async_mode)`,we=`react.concurrent_mode`,Te=`react.async_mode`,g=13366,Ee=e=>typeof e==`object`&&!!e&&`$$typeof`in e&&[`Symbol(react.element)`,`Symbol(react.transitional.element)`].includes(String(e.$$typeof)),De=e=>typeof e==`object`&&!!e&&`tag`in e&&`stateNode`in e&&`return`in e&&`child`in e&&`sibling`in e&&`flags`in e,_=e=>{switch(e.tag){case 5:case 26:case 27:return!0;default:return typeof e.type==`string`}},Oe=e=>{switch(e.tag){case 1:case 11:case 0:case 14:case 15:return!0;default:return!1}},v=e=>!e||typeof e!=`object`?!1:`pendingProps`in e&&!(`containerInfo`in e),ke=(e,t)=>{try{let n=e.dependencies,r=e.alternate?.dependencies;if(!n||!r||typeof n!=`object`||!(`firstContext`in n)||typeof r!=`object`||!(`firstContext`in r))return!1;let i=n.firstContext,a=r.firstContext;for(;i&&typeof i==`object`&&`memoizedValue`in i||a&&typeof a==`object`&&`memoizedValue`in a;){if(t(i,a)===!0)return!0;i=i?.next,a=a?.next}}catch{}return!1},Ae=(e,t)=>{try{let n=e.memoizedState,r=e.alternate?.memoizedState;for(;n||r;){if(t(n,r)===!0)return!0;n=n?.next,r=r?.next}}catch{}return!1},je=(e,t)=>{try{let n=e.memoizedProps,r=e.alternate?.memoizedProps||{};for(let e of Object.keys(n))if(t(e,n[e],r[e])===!0)return!0;for(let e of Object.keys(r))if(!(e in n)&&t(e,n[e],r[e])===!0)return!0}catch{}return!1},y=e=>{let t=e.memoizedProps,n=e.alternate?.memoizedProps||{},r=e.flags??e.effectTag??0;switch(e.tag){case 1:case 9:case 11:case 0:case 14:case 15:return(r&1)==1;default:return e.alternate?n!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref:!0}},b=e=>!!(e.flags&(g|8)||e.subtreeFlags&(g|8)),x=e=>{let t=[],n=[e];for(;n.length;){let e=n.pop();e&&(_(e)&&b(e)&&y(e)&&t.push(e),e.child&&n.push(e.child),e.sibling&&n.push(e.sibling))}return t},S=e=>{let t=[],n=e;for(;n.return;)t.push(n),n=n.return;return t},C=e=>{switch(e.tag){case 18:return!0;case 7:case 6:case 23:case 22:return!0;case 3:return!1;default:{let t=typeof e.type==`object`&&e.type!==null?e.type.$$typeof:e.type;if(typeof t==`symbol`)return t.description===`react.concurrent_mode`||t.description===`react.async_mode`;switch(t){case p:case m:case h:return!0;default:return!1}}}},Me=(e,t=!1)=>{let n=w(e,_,t);return n||=w(e,_,!t),n},Ne=e=>{let t=[],n=[];for(_(e)?t.push(e):e.child&&n.push(e.child);n.length;){let e=n.pop();if(!e)break;_(e)?t.push(e):e.child&&n.push(e.child),e.sibling&&n.push(e.sibling)}return t};function w(e,t,n=!1){if(!e)return null;let r=t(e);if(r instanceof Promise)return(async()=>{if(await r===!0)return e;let i=n?e.return:e.child;for(;i;){let e=await E(i,t,n);if(e)return e;i=n?null:i.sibling}return null})();if(r===!0)return e;let i=n?e.return:e.child;for(;i;){let e=T(i,t,n);if(e)return e;i=n?null:i.sibling}return null}const T=(e,t,n=!1)=>{if(!e)return null;if(t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let e=T(r,t,n);if(e)return e;r=n?null:r.sibling}return null},E=async(e,t,n=!1)=>{if(!e)return null;if(await t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let e=await E(r,t,n);if(e)return e;r=n?null:r.sibling}return null},Pe=e=>{let t=e?.actualDuration??0,n=t,r=e?.child??null;for(;t>0&&r!=null;)n-=r.actualDuration??0,r=r.sibling;return{selfTime:n,totalTime:t}},Fe=e=>!!e.updateQueue?.memoCache,D=e=>{let t=e;return typeof t==`function`?t:typeof t==`object`&&t?D(t.type||t.render):null},Ie=e=>{let t=e;if(typeof t==`string`)return t;if(typeof t!=`function`&&!(typeof t==`object`&&t))return null;let n=t.displayName||t.name||null;if(n)return n;let r=D(t);return r&&(r.displayName||r.name)||null},Le=e=>{try{if(typeof e.version==`string`&&e.bundleType>0)return`development`}catch{}return`production`},Re=()=>{let e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;return!!e?._instrumentationIsActive||a(e)||t(e)},O=new Set,ze=e=>{let t=e.alternate;if(!t)return e;if(t.actualStartTime&&e.actualStartTime)return t.actualStartTime>e.actualStartTime?t:e;for(let t of O){let n=w(t.current,t=>{if(t===e)return!0});if(n)return n}return e};let k=0;const A=new WeakMap,j=(e,t=k++)=>{A.set(e,t)},M=e=>{let t=A.get(e);return t===void 0&&e.alternate&&(t=A.get(e.alternate)),t===void 0&&(t=k++,j(e,t)),t},N=(e,t,n)=>{let r=t;for(;r!=null;){if(A.has(r)||M(r),!C(r)&&y(r)&&e(r,`mount`),r.tag===13)if(r.memoizedState!==null){let t=r.child,n=t?t.sibling:null;if(n){let t=n.child;t!==null&&N(e,t,!1)}}else{let t=null;r.child!==null&&(t=r.child.child),t!==null&&N(e,t,!1)}else r.child!=null&&N(e,r.child,!0);r=n?r.sibling:null}},P=(e,t,n,r)=>{if(A.has(t)||M(t),!n)return;A.has(n)||M(n);let i=t.tag===13,a=!C(t);a&&y(t)&&e(t,`update`);let o=i&&n.memoizedState!==null,s=i&&t.memoizedState!==null;if(o&&s){let r=t.child?.sibling??null,i=n.child?.sibling??null;r!==null&&i!==null&&P(e,r,i,t)}else if(o&&!s){let n=t.child;n!==null&&N(e,n,!0)}else if(!o&&s){I(e,n);let r=t.child?.sibling??null;r!==null&&N(e,r,!0)}else if(t.child!==n.child){let n=t.child;for(;n;){if(n.alternate){let i=n.alternate;P(e,n,i,a?t:r)}else N(e,n,!1);n=n.sibling}}},F=(e,t)=>{(t.tag===3||!C(t))&&e(t,`unmount`)},I=(e,t)=>{let n=t.tag===13&&t.memoizedState!==null,r=t.child;for(n&&(r=(t.child?.sibling??null)?.child??null);r!==null;)r.return!==null&&(F(e,r),I(e,r)),r=r.sibling};let Be=0;const L=new WeakMap,Ve=(e,t)=>{let n=`current`in e?e.current:e,r=L.get(e);r||(r={id:Be++,prevFiber:null},L.set(e,r));let{prevFiber:i}=r;if(!n)F(t,n);else if(i!==null){let e=i&&i.memoizedState!=null&&i.memoizedState.element!=null&&i.memoizedState.isDehydrated!==!0,r=n.memoizedState!=null&&n.memoizedState.element!=null&&n.memoizedState.isDehydrated!==!0;!e&&r?N(t,n,!1):e&&r?P(t,n,n.alternate,null):e&&!r&&F(t,n)}else N(t,n,!0);r.prevFiber=n},R=new Set;let z=!1;const He=()=>{if(z||!e())return;let t=i();if(t?.renderers){z=!0,Q(t);for(let e of t.renderers.values())R.add(e);d(e=>{R.add(e)})}},B=t=>{if(!e())return null;let n=t;for(;n.return;)n=n.return;let r=Z.get(n.stateNode);return r===void 0?null:i().renderers?.get(r)??null},V=e=>{He();let t=B(e);return t?[t]:Array.from(R)},H=(e,t,n,r)=>{for(let i of e)try{i.overrideProps?.(t,n,r)}catch{}},Ue=(e,t)=>{let n=e.memoizedState;for(let e=0;e<t;e++){if(!n?.next)return null;n=n.next}let r=n?.queue;return U(r)&&typeof r.dispatch==`function`?r.dispatch:null},We=(e,t)=>{let n=e;for(;n;){let e=n.type;if(e===t||e?.Provider===t)return n;n=n.return}return null},U=e=>Object.prototype.toString.call(e)===`[object Object]`&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null),W=(e,t=[])=>{if(!U(e))return[{path:t,value:e}];let n=[];for(let r in e){let i=e[r],a=t.concat(r);U(i)?n.push(...W(i,a)):n.push({path:a,value:i})}return n},G=e=>U(e)?W(e):[{path:[],value:e}],Ge=(e,t)=>{let n=V(e);for(let{path:r,value:i}of G(t))H(n,e,r,i)},Ke=(e,t,n)=>{let r=V(e).filter(e=>!!e.overrideHookState),i=G(n);if(r.length>0){let n=String(t);for(let t of r)for(let{path:r,value:a}of i)try{t.overrideHookState?.(e,n,r,a)}catch{}return}if(U(n))return;let a=Ue(e,t);if(a)try{a(n)}catch{}},qe=(e,t,n)=>{let r=We(e,t);if(!r)return;let i=V(r);for(let{path:e,value:t}of G(n))H(i,r,[`value`,...e],t),r.alternate&&H(i,r.alternate,[`value`,...e],t)},K=new Set,q=new Set,J=new Set,Y=new Set,X=new WeakMap,Z=new WeakMap,Q=e=>{let t=X.get(e)??{};if(X.set(e,t),!t.onCommitFiberRoot||e.onCommitFiberRoot!==t.onCommitFiberRoot){let n=e.onCommitFiberRoot,r=(t,i,a)=>{if(n?.(t,i,a),X.get(e)?.onCommitFiberRoot===r){O.add(i),Z.set(i,t);for(let e of K)e(t,i,a)}};t.onCommitFiberRoot=r,e.onCommitFiberRoot=r}if(!t.onCommitFiberUnmount||e.onCommitFiberUnmount!==t.onCommitFiberUnmount){let n=e.onCommitFiberUnmount,r=(t,i)=>{if(n?.(t,i),X.get(e)?.onCommitFiberUnmount===r)for(let e of q)e(t,i)};t.onCommitFiberUnmount=r,e.onCommitFiberUnmount=r}if(!t.onPostCommitFiberRoot||e.onPostCommitFiberRoot!==t.onPostCommitFiberRoot){let n=e.onPostCommitFiberRoot,r=(t,i)=>{if(n?.(t,i),X.get(e)?.onPostCommitFiberRoot===r)for(let e of J)e(t,i)};t.onPostCommitFiberRoot=r,e.onPostCommitFiberRoot=r}if(!t.onScheduleFiberRoot||e.onScheduleFiberRoot!==t.onScheduleFiberRoot){let n=e.onScheduleFiberRoot,r=(t,i,a)=>{if(n?.(t,i,a),X.get(e)?.onScheduleFiberRoot===r)for(let e of Y)e(t,i,a)};t.onScheduleFiberRoot=r,e.onScheduleFiberRoot=r}},Je=e=>{let t=i(e.onActive);t._instrumentationSource=e.name??u,Q(t);let{onActive:n,onCommitFiberRoot:r,onCommitFiberUnmount:a,onPostCommitFiberRoot:c,onScheduleFiberRoot:l}=e;return r&&K.add(r),a&&q.add(a),c&&J.add(c),l&&Y.add(l),o(()=>{n&&s.delete(n),r&&K.delete(r),a&&q.delete(a),c&&J.delete(c),l&&Y.delete(l)})},$=new Set,Ye=e=>e.startsWith(`__reactContainer$`)||e.startsWith(`__reactInternalInstance$`)||e.startsWith(`__reactFiber`),Xe=e=>{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t?.renderers)for(let n of t.renderers.values())try{let t=n.findFiberByHostInstance?.(e);if(t)return t}catch{}if(typeof e==`object`&&e){if(`_reactRootContainer`in e)return e._reactRootContainer?._internalRoot?.current?.child;let t=e.__internalInstanceHandle??e._internalInstanceHandle;if(v(t))return t;let n=e;for(let e of $){let t=n[e];if(t)return t}for(let e of Object.keys(n))if(Ye(e))return $.add(e),n[e]||null;for(let t of O){if(B(t.current)?.findFiberByHostInstance)continue;let n=w(t.current,t=>t.stateNode===e);if(n)return n}}return null};export{be as ActivityComponentTag,u as BIPPY_INSTRUMENTATION_STRING,p as CONCURRENT_MODE_NUMBER,we as CONCURRENT_MODE_SYMBOL_DESCRIPTION,m as CONCURRENT_MODE_SYMBOL_STRING,f as ClassComponentTag,ce as ContextConsumerTag,Te as DEPRECATED_ASYNC_MODE_SYMBOL_DESCRIPTION,h as DEPRECATED_ASYNC_MODE_SYMBOL_STRING,me as DehydratedSuspenseComponentTag,Se as ELEMENT_TYPE_SYMBOL_STRING,le as ForwardRefTag,se as FragmentTag,ne as FunctionComponentTag,ae as HostComponentTag,ve as HostHoistableTag,ie as HostPortalTag,re as HostRootTag,ye as HostSingletonTag,oe as HostTextTag,pe as LazyComponentTag,_e as LegacyHiddenComponentTag,de as MemoComponentTag,ge as OffscreenComponentTag,fe as SimpleMemoComponentTag,ue as SuspenseComponentTag,he as SuspenseListComponentTag,Ce as TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING,xe as ViewTransitionComponentTag,O as _fiberRoots,s as _onActiveListeners,ee as _renderers,Le as detectReactBuildType,b as didFiberCommit,y as didFiberRender,Ie as getDisplayName,Xe as getFiberFromHostInstance,M as getFiberId,S as getFiberStack,ze as getLatestFiber,x as getMutatedHostFibers,Me as getNearestHostFiber,Ne as getNearestHostFibers,i as getRDTHook,Pe as getTimings,D as getType,Fe as hasMemoCache,e as hasRDTHook,c as installRDTHook,Je as instrument,te as isClientEnvironment,Oe as isCompositeFiber,v as isFiber,_ as isHostFiber,Re as isInstrumentationActive,t as isReactRefresh,a as isRealReactDevtools,Ee as isValidElement,De as isValidFiber,d as onRendererInject,qe as overrideContext,Ke as overrideHookState,Ge as overrideProps,n as patchRDTHook,r as safelyInstallRDTHook,j as setFiberId,o as toUnsubscribe,ke as traverseContexts,w as traverseFiber,je as traverseProps,Ve as traverseRenderedFibers,Ae as traverseState,l as version};
9
+ import{a as e,c as t,d as n,f as r,n as i,o as a,r as o,s,t as c,u as l}from"./rdt-hook.js";import{A as u,C as d,D as f,E as p,F as m,I as h,M as g,N as _,O as v,P as y,R as b,S as x,T as S,_ as C,a as w,b as T,c as E,d as D,f as O,g as k,h as A,i as j,j as M,k as N,l as P,m as F,n as I,o as L,p as R,r as z,s as B,t as V,u as H,v as U,w as W,x as G,y as K,z as q}from"./core2.js";export{c as BIPPY_INSTRUMENTATION_STRING,g as BippyError,_ as BippyHookInspectionError,y as BippyHookRenderError,m as BippySourceMapError,h as BippyUnsupportedHookError,b as ReactSymbols,V as _fiberRoots,i as _onActiveListeners,o as _renderers,I as detectReactBuildType,z as didFiberCommit,j as didFiberRender,w as getDisplayName,L as getFiberFromHostInstance,B as getFiberId,E as getFiberStack,P as getLatestFiber,H as getMutatedHostFibers,D as getNearestHostFiber,O as getNearestHostFibers,e as getRDTHook,q as getReactWorkTags,R as getTimings,F as getType,A as hasMemoCache,a as hasRDTHook,s as installRDTHook,k as instrument,C as isCompositeFiber,U as isFiber,K as isHostFiber,T as isInstrumentationActive,t as isRealReactDevtools,G as isValidElement,x as isValidFiber,l as onRendererInject,d as overrideContext,W as overrideHookState,S as overrideProps,n as patchRDTHook,p as setFiberId,f as traverseContexts,v as traverseFiber,N as traverseProps,u as traverseRenderedFibers,M as traverseState,r as version};