bippy 0.0.19 → 0.0.20

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.cjs CHANGED
@@ -42,7 +42,10 @@ var Ref = 512;
42
42
  var Snapshot = 1024;
43
43
  var Visibility = 8192;
44
44
  var MutationMask = Placement | Update | ChildDeletion | ContentReset | Hydrating | Visibility | Snapshot;
45
- var isValidElement = (element) => typeof element === "object" && element != null && "$$typeof" in element && String(element.$$typeof) === "Symbol(react.element)";
45
+ var isValidElement = (element) => typeof element === "object" && element != null && "$$typeof" in element && // react 18 uses Symbol.for('react.element'), react 19 uses Symbol.for('react.transitional.element')
46
+ ["react.element", "react.transitional.element"].includes(
47
+ String(element.$$typeof)
48
+ );
46
49
  var isHostFiber = (fiber) => fiber.tag === HostComponentTag || // @ts-expect-error: it exists
47
50
  fiber.tag === HostHoistableTag || // @ts-expect-error: it exists
48
51
  fiber.tag === HostSingletonTag;
@@ -219,8 +222,10 @@ var getDisplayName = (type) => {
219
222
  };
220
223
  var NO_OP = () => {
221
224
  };
222
- var getRDTHook = () => {
225
+ var getRDTHook = (onActive) => {
223
226
  let rdtHook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
227
+ const isActive = rdtHook && !("_instrumentationSource" in rdtHook);
228
+ if (isActive) onActive?.();
224
229
  const renderers = /* @__PURE__ */ new Map();
225
230
  let i = 0;
226
231
  rdtHook ??= {
@@ -234,17 +239,30 @@ var getRDTHook = () => {
234
239
  inject(renderer) {
235
240
  const nextID = ++i;
236
241
  renderers.set(nextID, renderer);
242
+ if (!rdtHook._instrumentationIsActive) {
243
+ rdtHook._instrumentationIsActive = true;
244
+ onActive?.();
245
+ }
237
246
  return nextID;
238
247
  },
239
- _instrumentationSource: "bippy"
248
+ _instrumentationSource: "bippy",
249
+ _instrumentationIsActive: isActive
240
250
  };
241
251
  try {
242
- globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__ = rdtHook;
252
+ Object.defineProperty(globalThis, "__REACT_DEVTOOLS_GLOBAL_HOOK__", {
253
+ configurable: true,
254
+ value: rdtHook
255
+ });
243
256
  } catch {
244
257
  }
245
258
  return rdtHook;
246
259
  };
260
+ var isInstrumentationActive = (onActive) => {
261
+ const rdtHook = getRDTHook(onActive);
262
+ return Boolean(rdtHook._instrumentationIsActive);
263
+ };
247
264
  if (typeof window !== "undefined") {
265
+ performance.now();
248
266
  getRDTHook();
249
267
  }
250
268
  var mountFiberRecursively = (onRender, firstChild, traverseSiblings) => {
@@ -397,9 +415,10 @@ var instrument = ({
397
415
  onCommitFiberRoot,
398
416
  onCommitFiberUnmount,
399
417
  onPostCommitFiberRoot,
418
+ onActive,
400
419
  name
401
420
  }) => {
402
- const devtoolsHook = getRDTHook();
421
+ const devtoolsHook = getRDTHook(onActive);
403
422
  devtoolsHook._instrumentationSource = name ?? "bippy";
404
423
  const prevOnCommitFiberRoot = devtoolsHook.onCommitFiberRoot;
405
424
  if (onCommitFiberRoot) {
@@ -473,6 +492,7 @@ exports.hasMemoCache = hasMemoCache;
473
492
  exports.instrument = instrument;
474
493
  exports.isCompositeFiber = isCompositeFiber;
475
494
  exports.isHostFiber = isHostFiber;
495
+ exports.isInstrumentationActive = isInstrumentationActive;
476
496
  exports.isValidElement = isValidElement;
477
497
  exports.mountFiberRecursively = mountFiberRecursively;
478
498
  exports.shouldFilterFiber = shouldFilterFiber;
package/dist/index.d.cts CHANGED
@@ -11,6 +11,7 @@ interface ReactDevToolsGlobalHook {
11
11
  onPostCommitFiberRoot: (rendererID: number, root: unknown) => void;
12
12
  inject: (renderer: unknown) => number;
13
13
  _instrumentationSource?: string;
14
+ _instrumentationIsActive?: boolean;
14
15
  }
15
16
  declare const ClassComponentTag = 1;
16
17
  declare const FunctionComponentTag = 0;
@@ -74,21 +75,23 @@ declare const getTimings: (fiber?: Fiber | null | undefined) => {
74
75
  declare const hasMemoCache: (fiber: Fiber) => boolean;
75
76
  declare const getType: (type: any) => any;
76
77
  declare const getDisplayName: (type: any) => string | null;
77
- declare const getRDTHook: () => ReactDevToolsGlobalHook;
78
- type RenderHandler = <S>(fiber: Fiber, phase: 'mount' | 'update' | 'unmount', state?: S) => void;
78
+ declare const getRDTHook: (onActive?: () => unknown) => ReactDevToolsGlobalHook;
79
+ declare const isInstrumentationActive: (onActive?: () => unknown) => boolean;
80
+ type RenderHandler = <S>(fiber: Fiber, phase: 'mount' | 'update' | 'unmount', state?: S) => unknown;
79
81
  declare const mountFiberRecursively: (onRender: RenderHandler, firstChild: Fiber, traverseSiblings: boolean) => void;
80
82
  declare const updateFiberRecursively: (onRender: RenderHandler, nextFiber: Fiber, prevFiber: Fiber, parentFiber: Fiber | null) => void;
81
83
  declare const unmountFiber: (onRender: RenderHandler, fiber: Fiber) => void;
82
84
  declare const unmountFiberChildrenRecursively: (onRender: RenderHandler, fiber: Fiber) => void;
83
85
  declare const createFiberVisitor: ({ onRender: onRenderWithoutState, onError, }: {
84
86
  onRender: RenderHandler;
85
- onError?: (error: unknown) => void;
87
+ onError?: (error: unknown) => unknown;
86
88
  }) => <S>(_rendererID: number, root: FiberRoot, state?: S) => void;
87
- declare const instrument: ({ onCommitFiberRoot, onCommitFiberUnmount, onPostCommitFiberRoot, name, }: {
88
- onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: void | number) => void;
89
- onCommitFiberUnmount?: (rendererID: number, root: FiberRoot) => void;
90
- onPostCommitFiberRoot?: (rendererID: number, root: FiberRoot) => void;
89
+ declare const instrument: ({ onCommitFiberRoot, onCommitFiberUnmount, onPostCommitFiberRoot, onActive, name, }: {
90
+ onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: void | number) => unknown;
91
+ onCommitFiberUnmount?: (rendererID: number, root: FiberRoot) => unknown;
92
+ onPostCommitFiberRoot?: (rendererID: number, root: FiberRoot) => unknown;
93
+ onActive?: () => unknown;
91
94
  name?: string;
92
95
  }) => ReactDevToolsGlobalHook;
93
96
 
94
- export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ChildDeletion, ClassComponentTag, Cloned, ContentReset, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, DidCapture, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, Hydrating, LegacyHiddenComponent, MemoComponentTag, MutationMask, OffscreenComponent, OffscreenComponentTag, PerformedWork, Placement, type ReactDevToolsGlobalHook, Ref, SimpleMemoComponentTag, Snapshot, SuspenseComponentTag, Update, Visibility, createFiberVisitor, didFiberCommit, didFiberRender, getDisplayName, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isValidElement, mountFiberRecursively, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
97
+ export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ChildDeletion, ClassComponentTag, Cloned, ContentReset, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, DidCapture, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, Hydrating, LegacyHiddenComponent, MemoComponentTag, MutationMask, OffscreenComponent, OffscreenComponentTag, PerformedWork, Placement, type ReactDevToolsGlobalHook, Ref, SimpleMemoComponentTag, Snapshot, SuspenseComponentTag, Update, Visibility, createFiberVisitor, didFiberCommit, didFiberRender, getDisplayName, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isValidElement, mountFiberRecursively, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ interface ReactDevToolsGlobalHook {
11
11
  onPostCommitFiberRoot: (rendererID: number, root: unknown) => void;
12
12
  inject: (renderer: unknown) => number;
13
13
  _instrumentationSource?: string;
14
+ _instrumentationIsActive?: boolean;
14
15
  }
15
16
  declare const ClassComponentTag = 1;
16
17
  declare const FunctionComponentTag = 0;
@@ -74,21 +75,23 @@ declare const getTimings: (fiber?: Fiber | null | undefined) => {
74
75
  declare const hasMemoCache: (fiber: Fiber) => boolean;
75
76
  declare const getType: (type: any) => any;
76
77
  declare const getDisplayName: (type: any) => string | null;
77
- declare const getRDTHook: () => ReactDevToolsGlobalHook;
78
- type RenderHandler = <S>(fiber: Fiber, phase: 'mount' | 'update' | 'unmount', state?: S) => void;
78
+ declare const getRDTHook: (onActive?: () => unknown) => ReactDevToolsGlobalHook;
79
+ declare const isInstrumentationActive: (onActive?: () => unknown) => boolean;
80
+ type RenderHandler = <S>(fiber: Fiber, phase: 'mount' | 'update' | 'unmount', state?: S) => unknown;
79
81
  declare const mountFiberRecursively: (onRender: RenderHandler, firstChild: Fiber, traverseSiblings: boolean) => void;
80
82
  declare const updateFiberRecursively: (onRender: RenderHandler, nextFiber: Fiber, prevFiber: Fiber, parentFiber: Fiber | null) => void;
81
83
  declare const unmountFiber: (onRender: RenderHandler, fiber: Fiber) => void;
82
84
  declare const unmountFiberChildrenRecursively: (onRender: RenderHandler, fiber: Fiber) => void;
83
85
  declare const createFiberVisitor: ({ onRender: onRenderWithoutState, onError, }: {
84
86
  onRender: RenderHandler;
85
- onError?: (error: unknown) => void;
87
+ onError?: (error: unknown) => unknown;
86
88
  }) => <S>(_rendererID: number, root: FiberRoot, state?: S) => void;
87
- declare const instrument: ({ onCommitFiberRoot, onCommitFiberUnmount, onPostCommitFiberRoot, name, }: {
88
- onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: void | number) => void;
89
- onCommitFiberUnmount?: (rendererID: number, root: FiberRoot) => void;
90
- onPostCommitFiberRoot?: (rendererID: number, root: FiberRoot) => void;
89
+ declare const instrument: ({ onCommitFiberRoot, onCommitFiberUnmount, onPostCommitFiberRoot, onActive, name, }: {
90
+ onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: void | number) => unknown;
91
+ onCommitFiberUnmount?: (rendererID: number, root: FiberRoot) => unknown;
92
+ onPostCommitFiberRoot?: (rendererID: number, root: FiberRoot) => unknown;
93
+ onActive?: () => unknown;
91
94
  name?: string;
92
95
  }) => ReactDevToolsGlobalHook;
93
96
 
94
- export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ChildDeletion, ClassComponentTag, Cloned, ContentReset, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, DidCapture, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, Hydrating, LegacyHiddenComponent, MemoComponentTag, MutationMask, OffscreenComponent, OffscreenComponentTag, PerformedWork, Placement, type ReactDevToolsGlobalHook, Ref, SimpleMemoComponentTag, Snapshot, SuspenseComponentTag, Update, Visibility, createFiberVisitor, didFiberCommit, didFiberRender, getDisplayName, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isValidElement, mountFiberRecursively, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
97
+ export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ChildDeletion, ClassComponentTag, Cloned, ContentReset, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, DidCapture, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, Hydrating, LegacyHiddenComponent, MemoComponentTag, MutationMask, OffscreenComponent, OffscreenComponentTag, PerformedWork, Placement, type ReactDevToolsGlobalHook, Ref, SimpleMemoComponentTag, Snapshot, SuspenseComponentTag, Update, Visibility, createFiberVisitor, didFiberCommit, didFiberRender, getDisplayName, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isValidElement, mountFiberRecursively, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
@@ -6,4 +6,4 @@ var Bippy=(function(exports){'use strict';/**
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
- var k=1,D=0,O=9,H=13,_=22,P=11,z=14,M=15,E=5,N=26,V=27,I=18,U=6,j=7,A=23,L=22,B=3,W=60111,T="Symbol(react.concurrent_mode)",R="Symbol(react.async_mode)",$=1,G=2,Y=128,K=4096,Q=4,q=8,J=16,X=32,Z=512,ee=1024,te=8192,oe=13366,ne=e=>typeof e=="object"&&e!=null&&"$$typeof"in e&&String(e.$$typeof)==="Symbol(react.element)",d=e=>e.tag===5||e.tag===26||e.tag===27,re=e=>e.tag===0||e.tag===1||e.tag===15||e.tag===14||e.tag===11,ie=(e,o)=>{try{let n=e.dependencies,t=e.alternate?.dependencies;if(!n||!t||typeof n!="object"||!("firstContext"in n)||typeof t!="object"||!("firstContext"in t))return !1;let i=n.firstContext,l=t.firstContext;for(;i&&typeof i=="object"&&"memoizedValue"in i&&l&&typeof l=="object"&&"memoizedValue"in l;){if(o(i,l)===!0)return !0;i=i.next,l=l.next;}}catch{}return !1},le=(e,o)=>{try{let n=e.memoizedState,t=e.alternate?.memoizedState;for(;n&&t;){if(o(n,t)===!0)return !0;n=n.next,t=t.next;}}catch{}return !1},se=(e,o)=>{try{let n=e.memoizedProps,t=e.alternate?.memoizedProps||{};for(let i in {...t,...n}){let l=t?.[i],s=n?.[i];if(o(l,s)===!0)return !0}}catch{}return !1},g=e=>{let o=e.memoizedProps,n=e.alternate?.memoizedProps||{},t=e.flags??e.effectTag??0;switch(e.tag){case 1:case 0:case 9:case 11:case 14:case 15:return (t&1)===1;default:return e.alternate?n!==o||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref:!0}},v=e=>!!(e.flags&22||e.subtreeFlags&22),ae=e=>{let o=[],n=[e];for(;n.length;){let t=n.pop();t&&(d(t)&&v(t)&&g(t)&&o.push(t),t.child&&n.push(t.child),t.sibling&&n.push(t.sibling));}return o},ue=e=>{let o=[];for(;e.return;)o.push(e),e=e.return;let n=new Array(o.length);for(let t=0;t<o.length;t++)n[t]=o[o.length-t-1];return n},h=e=>{switch(e.tag){case 18:return !0;case 6:case 7:case 23:case 22:return !0;case 3:return !1;default:{let o=typeof e.type=="object"&&e.type!==null?e.type.$$typeof:e.type;switch(typeof o=="symbol"?o.toString():o){case 60111:case T:case R:return !0;default:return !1}}}},ce=e=>{let o=b(e,d);return o||(o=b(e,d,!0)),o},b=(e,o,n=!1)=>{if(!e)return null;if(o(e)===!0)return e;let t=n?e.return:e.child;for(;t;){let i=b(t,o,n);if(i)return i;t=n?null:t.sibling;}return null},me=e=>{let o=e?.actualDuration??0,n=o,t=e?.child??null;for(;o>0&&t!=null;)n-=t.actualDuration??0,t=t.sibling;return {selfTime:n,totalTime:o}},pe=e=>!!e.updateQueue?.memoCache,F=e=>typeof e=="function"?e:typeof e=="object"&&e?F(e.type||e.render):null,de=e=>{if(typeof e!="function"&&!(typeof e=="object"&&e))return null;let o=e.displayName||e.name||null;return o||(e=F(e),e&&(e.displayName||e.name)||null)},p=()=>{},x=()=>{let e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__,o=new Map,n=0;e??={checkDCE:p,supportsFiber:!0,supportsFlight:!0,renderers:o,onCommitFiberRoot:p,onCommitFiberUnmount:p,onPostCommitFiberRoot:p,inject(t){let i=++n;return o.set(i,t),i},_instrumentationSource:"bippy"};try{globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=e;}catch{}return e};typeof window<"u"&&x();var m=(e,o,n)=>{let t=o;for(;t!=null;){if(!h(t)&&g(t)&&e(t,"mount"),t.tag===13)if(t.memoizedState!==null){let s=t.child,u=s?s.sibling:null;if(u){let r=u.child;r!==null&&m(e,r,!1);}}else {let s=null;t.child!==null&&(s=t.child.child),s!==null&&m(e,s,!1);}else t.child!=null&&m(e,t.child,!0);t=n?t.sibling:null;}},C=(e,o,n,t)=>{if(!n)return;let i=o.tag===13,l=!h(o);l&&g(o)&&e(o,"update");let s=i&&n.memoizedState!==null,u=i&&o.memoizedState!==null;if(s&&u){let r=o.child?.sibling??null,a=n.child?.sibling??null;r!==null&&a!==null&&C(e,r,a);}else if(s&&!u){let r=o.child;r!==null&&m(e,r,!0);}else if(!s&&u){y(e,n);let r=o.child?.sibling??null;r!==null&&m(e,r,!0);}else if(o.child!==n.child){let r=o.child;for(;r;){if(r.alternate){let a=r.alternate;C(e,r,a);}else m(e,r,!1);r=r.sibling;}}},S=(e,o)=>{(o.tag===3||!h(o))&&e(o,"unmount");},y=(e,o)=>{let n=o.tag===13&&o.memoizedState!==null,t=o.child;for(n&&(t=(o.child?.sibling??null)?.child??null);t!==null;)t.return!==null&&(S(e,t),y(e,t)),t=t.sibling;},w=0,f=new WeakMap,be=({onRender:e,onError:o})=>(n,t,i)=>{let l=t.current,s=(a,c)=>e(a,c,i),u=f.get(t);u||(u={prevFiber:null,id:w++},f.set(t,u));let{prevFiber:r}=u;try{if(r!==null){let a=r&&r.memoizedState!=null&&r.memoizedState.element!=null&&r.memoizedState.isDehydrated!==!0,c=l.memoizedState!=null&&l.memoizedState.element!=null&&l.memoizedState.isDehydrated!==!0;!a&&c?m(s,l,!1):a&&c?C(s,l,l.alternate,null):a&&!c&&S(s,l);}else m(s,l,!1);}catch(a){if(o)o(a);else throw a}u.prevFiber=l;},Ce=({onCommitFiberRoot:e,onCommitFiberUnmount:o,onPostCommitFiberRoot:n,name:t})=>{let i=x();i._instrumentationSource=t??"bippy";let l=i.onCommitFiberRoot;e&&(i.onCommitFiberRoot=(r,a,c)=>{l&&l(r,a,c),e(r,a,c);});let s=i.onCommitFiberUnmount;o&&(i.onCommitFiberUnmount=(r,a)=>{s&&s(r,a),o(r,a);});let u=i.onPostCommitFiberRoot;return n&&(i.onPostCommitFiberRoot=(r,a)=>{u&&u(r,a);}),i};exports.CONCURRENT_MODE_NUMBER=W;exports.CONCURRENT_MODE_SYMBOL_STRING=T;exports.ChildDeletion=J;exports.ClassComponentTag=k;exports.Cloned=q;exports.ContentReset=X;exports.ContextConsumerTag=O;exports.DEPRECATED_ASYNC_MODE_SYMBOL_STRING=R;exports.DehydratedSuspenseComponent=I;exports.DidCapture=Y;exports.ForwardRefTag=P;exports.Fragment=j;exports.FunctionComponentTag=D;exports.HostComponentTag=E;exports.HostHoistableTag=N;exports.HostRoot=B;exports.HostSingletonTag=V;exports.HostText=U;exports.Hydrating=K;exports.LegacyHiddenComponent=A;exports.MemoComponentTag=z;exports.MutationMask=oe;exports.OffscreenComponent=L;exports.OffscreenComponentTag=_;exports.PerformedWork=$;exports.Placement=G;exports.Ref=Z;exports.SimpleMemoComponentTag=M;exports.Snapshot=ee;exports.SuspenseComponentTag=H;exports.Update=Q;exports.Visibility=te;exports.createFiberVisitor=be;exports.didFiberCommit=v;exports.didFiberRender=g;exports.getDisplayName=de;exports.getFiberStack=ue;exports.getMutatedHostFibers=ae;exports.getNearestHostFiber=ce;exports.getRDTHook=x;exports.getTimings=me;exports.getType=F;exports.hasMemoCache=pe;exports.instrument=Ce;exports.isCompositeFiber=re;exports.isHostFiber=d;exports.isValidElement=ne;exports.mountFiberRecursively=m;exports.shouldFilterFiber=h;exports.traverseContexts=ie;exports.traverseFiber=b;exports.traverseProps=se;exports.traverseState=le;exports.unmountFiber=S;exports.unmountFiberChildrenRecursively=y;exports.updateFiberRecursively=C;return exports;})({});
9
+ var _=1,D=0,H=9,O=13,P=22,z=11,M=14,I=15,E=5,N=26,V=27,A=18,U=6,j=7,L=23,B=22,W=3,$=60111,R="Symbol(react.concurrent_mode)",k="Symbol(react.async_mode)",G=1,Y=2,K=128,Q=4096,q=4,J=8,X=16,Z=32,ee=512,te=1024,ne=8192,oe=13366,re=e=>typeof e=="object"&&e!=null&&"$$typeof"in e&&["react.element","react.transitional.element"].includes(String(e.$$typeof)),d=e=>e.tag===5||e.tag===26||e.tag===27,ie=e=>e.tag===0||e.tag===1||e.tag===15||e.tag===14||e.tag===11,le=(e,t)=>{try{let o=e.dependencies,n=e.alternate?.dependencies;if(!o||!n||typeof o!="object"||!("firstContext"in o)||typeof n!="object"||!("firstContext"in n))return !1;let s=o.firstContext,r=n.firstContext;for(;s&&typeof s=="object"&&"memoizedValue"in s&&r&&typeof r=="object"&&"memoizedValue"in r;){if(t(s,r)===!0)return !0;s=s.next,r=r.next;}}catch{}return !1},se=(e,t)=>{try{let o=e.memoizedState,n=e.alternate?.memoizedState;for(;o&&n;){if(t(o,n)===!0)return !0;o=o.next,n=n.next;}}catch{}return !1},ae=(e,t)=>{try{let o=e.memoizedProps,n=e.alternate?.memoizedProps||{};for(let s in {...n,...o}){let r=n?.[s],l=o?.[s];if(t(r,l)===!0)return !0}}catch{}return !1},f=e=>{let t=e.memoizedProps,o=e.alternate?.memoizedProps||{},n=e.flags??e.effectTag??0;switch(e.tag){case 1:case 0:case 9:case 11:case 14:case 15:return (n&1)===1;default:return e.alternate?o!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref:!0}},w=e=>!!(e.flags&22||e.subtreeFlags&22),ue=e=>{let t=[],o=[e];for(;o.length;){let n=o.pop();n&&(d(n)&&w(n)&&f(n)&&t.push(n),n.child&&o.push(n.child),n.sibling&&o.push(n.sibling));}return t},ce=e=>{let t=[];for(;e.return;)t.push(e),e=e.return;let o=new Array(t.length);for(let n=0;n<t.length;n++)o[n]=t[t.length-n-1];return o},g=e=>{switch(e.tag){case 18:return !0;case 6:case 7: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;switch(typeof t=="symbol"?t.toString():t){case 60111:case R:case k:return !0;default:return !1}}}},me=e=>{let t=b(e,d);return t||(t=b(e,d,!0)),t},b=(e,t,o=!1)=>{if(!e)return null;if(t(e)===!0)return e;let n=o?e.return:e.child;for(;n;){let s=b(n,t,o);if(s)return s;n=o?null:n.sibling;}return null},pe=e=>{let t=e?.actualDuration??0,o=t,n=e?.child??null;for(;t>0&&n!=null;)o-=n.actualDuration??0,n=n.sibling;return {selfTime:o,totalTime:t}},de=e=>!!e.updateQueue?.memoCache,S=e=>typeof e=="function"?e:typeof e=="object"&&e?S(e.type||e.render):null,be=e=>{if(typeof e!="function"&&!(typeof e=="object"&&e))return null;let t=e.displayName||e.name||null;return t||(e=S(e),e&&(e.displayName||e.name)||null)},p=()=>{},h=e=>{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__,o=t&&!("_instrumentationSource"in t);o&&e?.();let n=new Map,s=0;t??={checkDCE:p,supportsFiber:!0,supportsFlight:!0,renderers:n,onCommitFiberRoot:p,onCommitFiberUnmount:p,onPostCommitFiberRoot:p,inject(r){let l=++s;return n.set(l,r),t._instrumentationIsActive||(t._instrumentationIsActive=!0,e?.()),l},_instrumentationSource:"bippy",_instrumentationIsActive:o};try{Object.defineProperty(globalThis,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!0,value:t});}catch{}return t},Ce=e=>!!h(e)._instrumentationIsActive;typeof window<"u"&&(performance.now(),h());var m=(e,t,o)=>{let n=t;for(;n!=null;){if(!g(n)&&f(n)&&e(n,"mount"),n.tag===13)if(n.memoizedState!==null){let l=n.child,u=l?l.sibling:null;if(u){let i=u.child;i!==null&&m(e,i,!1);}}else {let l=null;n.child!==null&&(l=n.child.child),l!==null&&m(e,l,!1);}else n.child!=null&&m(e,n.child,!0);n=o?n.sibling:null;}},C=(e,t,o,n)=>{if(!o)return;let s=t.tag===13,r=!g(t);r&&f(t)&&e(t,"update");let l=s&&o.memoizedState!==null,u=s&&t.memoizedState!==null;if(l&&u){let i=t.child?.sibling??null,a=o.child?.sibling??null;i!==null&&a!==null&&C(e,i,a);}else if(l&&!u){let i=t.child;i!==null&&m(e,i,!0);}else if(!l&&u){T(e,o);let i=t.child?.sibling??null;i!==null&&m(e,i,!0);}else if(t.child!==o.child){let i=t.child;for(;i;){if(i.alternate){let a=i.alternate;C(e,i,a);}else m(e,i,!1);i=i.sibling;}}},y=(e,t)=>{(t.tag===3||!g(t))&&e(t,"unmount");},T=(e,t)=>{let o=t.tag===13&&t.memoizedState!==null,n=t.child;for(o&&(n=(t.child?.sibling??null)?.child??null);n!==null;)n.return!==null&&(y(e,n),T(e,n)),n=n.sibling;},v=0,x=new WeakMap,fe=({onRender:e,onError:t})=>(o,n,s)=>{let r=n.current,l=(a,c)=>e(a,c,s),u=x.get(n);u||(u={prevFiber:null,id:v++},x.set(n,u));let{prevFiber:i}=u;try{if(i!==null){let a=i&&i.memoizedState!=null&&i.memoizedState.element!=null&&i.memoizedState.isDehydrated!==!0,c=r.memoizedState!=null&&r.memoizedState.element!=null&&r.memoizedState.isDehydrated!==!0;!a&&c?m(l,r,!1):a&&c?C(l,r,r.alternate,null):a&&!c&&y(l,r);}else m(l,r,!1);}catch(a){if(t)t(a);else throw a}u.prevFiber=r;},ge=({onCommitFiberRoot:e,onCommitFiberUnmount:t,onPostCommitFiberRoot:o,onActive:n,name:s})=>{let r=h(n);r._instrumentationSource=s??"bippy";let l=r.onCommitFiberRoot;e&&(r.onCommitFiberRoot=(a,c,F)=>{l&&l(a,c,F),e(a,c,F);});let u=r.onCommitFiberUnmount;t&&(r.onCommitFiberUnmount=(a,c)=>{u&&u(a,c),t(a,c);});let i=r.onPostCommitFiberRoot;return o&&(r.onPostCommitFiberRoot=(a,c)=>{i&&i(a,c);}),r};exports.CONCURRENT_MODE_NUMBER=$;exports.CONCURRENT_MODE_SYMBOL_STRING=R;exports.ChildDeletion=X;exports.ClassComponentTag=_;exports.Cloned=J;exports.ContentReset=Z;exports.ContextConsumerTag=H;exports.DEPRECATED_ASYNC_MODE_SYMBOL_STRING=k;exports.DehydratedSuspenseComponent=A;exports.DidCapture=K;exports.ForwardRefTag=z;exports.Fragment=j;exports.FunctionComponentTag=D;exports.HostComponentTag=E;exports.HostHoistableTag=N;exports.HostRoot=W;exports.HostSingletonTag=V;exports.HostText=U;exports.Hydrating=Q;exports.LegacyHiddenComponent=L;exports.MemoComponentTag=M;exports.MutationMask=oe;exports.OffscreenComponent=B;exports.OffscreenComponentTag=P;exports.PerformedWork=G;exports.Placement=Y;exports.Ref=ee;exports.SimpleMemoComponentTag=I;exports.Snapshot=te;exports.SuspenseComponentTag=O;exports.Update=q;exports.Visibility=ne;exports.createFiberVisitor=fe;exports.didFiberCommit=w;exports.didFiberRender=f;exports.getDisplayName=be;exports.getFiberStack=ce;exports.getMutatedHostFibers=ue;exports.getNearestHostFiber=me;exports.getRDTHook=h;exports.getTimings=pe;exports.getType=S;exports.hasMemoCache=de;exports.instrument=ge;exports.isCompositeFiber=ie;exports.isHostFiber=d;exports.isInstrumentationActive=Ce;exports.isValidElement=re;exports.mountFiberRecursively=m;exports.shouldFilterFiber=g;exports.traverseContexts=le;exports.traverseFiber=b;exports.traverseProps=ae;exports.traverseState=se;exports.unmountFiber=y;exports.unmountFiberChildrenRecursively=T;exports.updateFiberRecursively=C;return exports;})({});
package/dist/index.js CHANGED
@@ -40,7 +40,10 @@ var Ref = 512;
40
40
  var Snapshot = 1024;
41
41
  var Visibility = 8192;
42
42
  var MutationMask = Placement | Update | ChildDeletion | ContentReset | Hydrating | Visibility | Snapshot;
43
- var isValidElement = (element) => typeof element === "object" && element != null && "$$typeof" in element && String(element.$$typeof) === "Symbol(react.element)";
43
+ var isValidElement = (element) => typeof element === "object" && element != null && "$$typeof" in element && // react 18 uses Symbol.for('react.element'), react 19 uses Symbol.for('react.transitional.element')
44
+ ["react.element", "react.transitional.element"].includes(
45
+ String(element.$$typeof)
46
+ );
44
47
  var isHostFiber = (fiber) => fiber.tag === HostComponentTag || // @ts-expect-error: it exists
45
48
  fiber.tag === HostHoistableTag || // @ts-expect-error: it exists
46
49
  fiber.tag === HostSingletonTag;
@@ -217,8 +220,10 @@ var getDisplayName = (type) => {
217
220
  };
218
221
  var NO_OP = () => {
219
222
  };
220
- var getRDTHook = () => {
223
+ var getRDTHook = (onActive) => {
221
224
  let rdtHook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
225
+ const isActive = rdtHook && !("_instrumentationSource" in rdtHook);
226
+ if (isActive) onActive?.();
222
227
  const renderers = /* @__PURE__ */ new Map();
223
228
  let i = 0;
224
229
  rdtHook ??= {
@@ -232,17 +237,30 @@ var getRDTHook = () => {
232
237
  inject(renderer) {
233
238
  const nextID = ++i;
234
239
  renderers.set(nextID, renderer);
240
+ if (!rdtHook._instrumentationIsActive) {
241
+ rdtHook._instrumentationIsActive = true;
242
+ onActive?.();
243
+ }
235
244
  return nextID;
236
245
  },
237
- _instrumentationSource: "bippy"
246
+ _instrumentationSource: "bippy",
247
+ _instrumentationIsActive: isActive
238
248
  };
239
249
  try {
240
- globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__ = rdtHook;
250
+ Object.defineProperty(globalThis, "__REACT_DEVTOOLS_GLOBAL_HOOK__", {
251
+ configurable: true,
252
+ value: rdtHook
253
+ });
241
254
  } catch {
242
255
  }
243
256
  return rdtHook;
244
257
  };
258
+ var isInstrumentationActive = (onActive) => {
259
+ const rdtHook = getRDTHook(onActive);
260
+ return Boolean(rdtHook._instrumentationIsActive);
261
+ };
245
262
  if (typeof window !== "undefined") {
263
+ performance.now();
246
264
  getRDTHook();
247
265
  }
248
266
  var mountFiberRecursively = (onRender, firstChild, traverseSiblings) => {
@@ -395,9 +413,10 @@ var instrument = ({
395
413
  onCommitFiberRoot,
396
414
  onCommitFiberUnmount,
397
415
  onPostCommitFiberRoot,
416
+ onActive,
398
417
  name
399
418
  }) => {
400
- const devtoolsHook = getRDTHook();
419
+ const devtoolsHook = getRDTHook(onActive);
401
420
  devtoolsHook._instrumentationSource = name ?? "bippy";
402
421
  const prevOnCommitFiberRoot = devtoolsHook.onCommitFiberRoot;
403
422
  if (onCommitFiberRoot) {
@@ -425,4 +444,4 @@ var instrument = ({
425
444
  return devtoolsHook;
426
445
  };
427
446
 
428
- export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ChildDeletion, ClassComponentTag, Cloned, ContentReset, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, DidCapture, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, Hydrating, LegacyHiddenComponent, MemoComponentTag, MutationMask, OffscreenComponent, OffscreenComponentTag, PerformedWork, Placement, Ref, SimpleMemoComponentTag, Snapshot, SuspenseComponentTag, Update, Visibility, createFiberVisitor, didFiberCommit, didFiberRender, getDisplayName, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isValidElement, mountFiberRecursively, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
447
+ export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ChildDeletion, ClassComponentTag, Cloned, ContentReset, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, DidCapture, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, Hydrating, LegacyHiddenComponent, MemoComponentTag, MutationMask, OffscreenComponent, OffscreenComponentTag, PerformedWork, Placement, Ref, SimpleMemoComponentTag, Snapshot, SuspenseComponentTag, Update, Visibility, createFiberVisitor, didFiberCommit, didFiberRender, getDisplayName, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isValidElement, mountFiberRecursively, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bippy",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "description": "a hacky way to get fibers from react",
5
5
  "keywords": [
6
6
  "react",