bippy 0.0.4 → 0.0.6

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/README.md CHANGED
@@ -1,26 +1,74 @@
1
1
  # <img src="https://github.com/aidenybai/bippy/blob/main/.github/assets/bippy.png?raw=true" width="60" align="center" /> bippy
2
2
 
3
- a kitchen sink of utilities for working with react fiber. this project assumes that you don't have access to the actual react application code. used internally for [`react-scan`](https://github.com/aidenybai/react-scan).
3
+ a hacky way to get fibers from react. used internally for [`react-scan`](https://github.com/aidenybai/react-scan).
4
+
5
+ bippy works by setting a "fake" version of the `__REACT_DEVTOOLS_GLOBAL_HOOK__` object. this gives us access to react internals without actually using react devtools.
4
6
 
5
7
  > [!WARNING]
6
- > this project accesses react internals. this is not recommended and may break production apps - unless you acknowledge this risk and know exactly you're doing.
8
+ > this project uses react internals, which can change at any time. **this is not recommended for usage and may break production apps** - unless you acknowledge this risk and know exactly you're doing.
7
9
 
8
10
  ## example
9
11
 
10
- this script logs every rendered fiber in the current [commit](https://react.dev/learn/render-and-commit).
12
+ here i wrote a `getRenderInfo` function, where you're able to pass any component identifier and get back the number of times it rendered, as well as the total and self time. this is done by traversing the fiber tree during a [commit](https://react.dev/learn/render-and-commit) via `onCommitFiberRoot`.
13
+
14
+ inspect it live [here](https://bippy.million.dev/).
11
15
 
12
16
  ```jsx
13
- import { instrument, traverseFiberRoot } from 'bippy'; // must be imported BEFORE react
17
+ import {
18
+ instrument,
19
+ createRenderVisitor,
20
+ getTimings,
21
+ getDisplayName,
22
+ } from 'bippy'; // must be imported BEFORE react
23
+ import React, { useState } from 'react';
24
+ import ReactDOM from 'react-dom/client';
25
+
26
+ const componentRenderMap = new WeakMap();
27
+
28
+ const visitor = createRenderVisitor({
29
+ onRender(fiber) {
30
+ const componentType = fiber.elementType;
31
+ if (
32
+ typeof componentType !== 'function' &&
33
+ (typeof componentType !== 'object' || !componentType)
34
+ ) {
35
+ return;
36
+ }
37
+ const render = componentRenderMap.get(componentType) || {
38
+ count: 0,
39
+ selfTime: 0,
40
+ totalTime: 0,
41
+ displayName: getDisplayName(componentType),
42
+ };
43
+ render.count++;
44
+ const { selfTime, totalTime } = getTimings(fiber);
45
+ render.selfTime += selfTime;
46
+ render.totalTime += totalTime;
47
+ componentRenderMap.set(componentType, render);
48
+ },
49
+ });
14
50
 
15
51
  instrument({
16
- onCommitFiberRoot: traverseFiberRoot({
17
- onRender(fiber) {
18
- const displayName = getDisplayName(fiber.type);
19
- if (!displayName) return;
20
- console.log(`${displayName} rendered`, fiber);
21
- },
22
- }),
52
+ onCommitFiberRoot: (rendererID, fiberRoot) => {
53
+ visitor(rendererID, fiberRoot);
54
+ },
23
55
  });
56
+
57
+ export const getRenderInfo = (componentType) => {
58
+ return componentRenderMap.get(componentType);
59
+ };
60
+
61
+ function App() {
62
+ const [count, setCount] = useState(0);
63
+ const renderInfo = getRenderInfo(App);
64
+ return (
65
+ <button onClick={() => setCount(count + 1)}>
66
+ rendered: {JSON.stringify(renderInfo, null, 2)}
67
+ </button>
68
+ );
69
+ }
70
+
71
+ ReactDOM.createRoot(document.getElementById('root')).render(<App />);
24
72
  ```
25
73
 
26
74
  ## misc
package/dist/index.d.mts CHANGED
@@ -20,6 +20,8 @@ declare const HostRoot = 3;
20
20
  declare const CONCURRENT_MODE_NUMBER = 60111;
21
21
  declare const CONCURRENT_MODE_SYMBOL_STRING = "Symbol(react.concurrent_mode)";
22
22
  declare const DEPRECATED_ASYNC_MODE_SYMBOL_STRING = "Symbol(react.async_mode)";
23
+ declare const isHostComponent: (fiber: Fiber) => boolean;
24
+ declare const isCompositeComponent: (fiber: Fiber) => boolean;
23
25
  declare const traverseContexts: (fiber: Fiber, selector: (prevValue: {
24
26
  context: React.Context<unknown>;
25
27
  memoizedValue: unknown;
@@ -32,8 +34,7 @@ declare const traverseState: (fiber: Fiber, selector: (prevValue: {
32
34
  }, nextValue: {
33
35
  memoizedState: unknown;
34
36
  }) => boolean | void) => boolean;
35
- declare const isHostComponent: (fiber: Fiber) => boolean;
36
- declare const isCompositeComponent: (fiber: Fiber) => boolean;
37
+ declare const traverseProps: (fiber: Fiber, selector: (prevValue: unknown, nextValue: unknown) => boolean | void) => boolean;
37
38
  declare const didFiberRender: (fiber: Fiber) => boolean;
38
39
  declare const shouldFilterFiber: (fiber: Fiber) => boolean;
39
40
  declare const getNearestHostFiber: (fiber: Fiber) => Fiber | null;
@@ -42,7 +43,6 @@ declare const getTimings: (fiber?: Fiber | null | undefined) => {
42
43
  selfTime: number;
43
44
  totalTime: number;
44
45
  };
45
- declare const getFiberFromElement: (element: HTMLElement) => Fiber | null;
46
46
  declare const hasMemoCache: (fiber: Fiber) => boolean;
47
47
  declare const getType: (type: any) => any;
48
48
  declare const getDisplayName: (type: any) => string | null;
@@ -58,8 +58,9 @@ declare const getRDTHook: () => {
58
58
  onPostCommitFiberRoot: (rendererID: number, root: unknown) => void;
59
59
  inject: (renderer: unknown) => number;
60
60
  };
61
- declare const traverseFiberRoot: ({ onRender, }: {
61
+ declare const createRenderVisitor: ({ onRender, onError, }: {
62
62
  onRender: (fiber: Fiber) => void;
63
+ onError?: (error: unknown) => void;
63
64
  }) => (_rendererID: number, root: FiberRoot) => void;
64
65
  declare const instrument: ({ onCommitFiberRoot, onCommitFiberUnmount, onPostCommitFiberRoot, }: {
65
66
  onCommitFiberRoot?: (rendererID: number, root: FiberRoot) => void;
@@ -78,4 +79,4 @@ declare const instrument: ({ onCommitFiberRoot, onCommitFiberUnmount, onPostComm
78
79
  inject: (renderer: unknown) => number;
79
80
  };
80
81
 
81
- export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, LegacyHiddenComponent, MemoComponentTag, OffscreenComponent, PerformedWorkFlag, SimpleMemoComponentTag, didFiberRender, getDisplayName, getFiberFromElement, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeComponent, isHostComponent, shouldFilterFiber, traverseContexts, traverseFiber, traverseFiberRoot, traverseState };
82
+ export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, LegacyHiddenComponent, MemoComponentTag, OffscreenComponent, PerformedWorkFlag, SimpleMemoComponentTag, createRenderVisitor, didFiberRender, getDisplayName, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeComponent, isHostComponent, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseState };
package/dist/index.d.ts CHANGED
@@ -20,6 +20,8 @@ declare const HostRoot = 3;
20
20
  declare const CONCURRENT_MODE_NUMBER = 60111;
21
21
  declare const CONCURRENT_MODE_SYMBOL_STRING = "Symbol(react.concurrent_mode)";
22
22
  declare const DEPRECATED_ASYNC_MODE_SYMBOL_STRING = "Symbol(react.async_mode)";
23
+ declare const isHostComponent: (fiber: Fiber) => boolean;
24
+ declare const isCompositeComponent: (fiber: Fiber) => boolean;
23
25
  declare const traverseContexts: (fiber: Fiber, selector: (prevValue: {
24
26
  context: React.Context<unknown>;
25
27
  memoizedValue: unknown;
@@ -32,8 +34,7 @@ declare const traverseState: (fiber: Fiber, selector: (prevValue: {
32
34
  }, nextValue: {
33
35
  memoizedState: unknown;
34
36
  }) => boolean | void) => boolean;
35
- declare const isHostComponent: (fiber: Fiber) => boolean;
36
- declare const isCompositeComponent: (fiber: Fiber) => boolean;
37
+ declare const traverseProps: (fiber: Fiber, selector: (prevValue: unknown, nextValue: unknown) => boolean | void) => boolean;
37
38
  declare const didFiberRender: (fiber: Fiber) => boolean;
38
39
  declare const shouldFilterFiber: (fiber: Fiber) => boolean;
39
40
  declare const getNearestHostFiber: (fiber: Fiber) => Fiber | null;
@@ -42,7 +43,6 @@ declare const getTimings: (fiber?: Fiber | null | undefined) => {
42
43
  selfTime: number;
43
44
  totalTime: number;
44
45
  };
45
- declare const getFiberFromElement: (element: HTMLElement) => Fiber | null;
46
46
  declare const hasMemoCache: (fiber: Fiber) => boolean;
47
47
  declare const getType: (type: any) => any;
48
48
  declare const getDisplayName: (type: any) => string | null;
@@ -58,8 +58,9 @@ declare const getRDTHook: () => {
58
58
  onPostCommitFiberRoot: (rendererID: number, root: unknown) => void;
59
59
  inject: (renderer: unknown) => number;
60
60
  };
61
- declare const traverseFiberRoot: ({ onRender, }: {
61
+ declare const createRenderVisitor: ({ onRender, onError, }: {
62
62
  onRender: (fiber: Fiber) => void;
63
+ onError?: (error: unknown) => void;
63
64
  }) => (_rendererID: number, root: FiberRoot) => void;
64
65
  declare const instrument: ({ onCommitFiberRoot, onCommitFiberUnmount, onPostCommitFiberRoot, }: {
65
66
  onCommitFiberRoot?: (rendererID: number, root: FiberRoot) => void;
@@ -78,4 +79,4 @@ declare const instrument: ({ onCommitFiberRoot, onCommitFiberUnmount, onPostComm
78
79
  inject: (renderer: unknown) => number;
79
80
  };
80
81
 
81
- export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, LegacyHiddenComponent, MemoComponentTag, OffscreenComponent, PerformedWorkFlag, SimpleMemoComponentTag, didFiberRender, getDisplayName, getFiberFromElement, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeComponent, isHostComponent, shouldFilterFiber, traverseContexts, traverseFiber, traverseFiberRoot, traverseState };
82
+ export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, LegacyHiddenComponent, MemoComponentTag, OffscreenComponent, PerformedWorkFlag, SimpleMemoComponentTag, createRenderVisitor, didFiberRender, getDisplayName, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, instrument, isCompositeComponent, isHostComponent, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseState };
@@ -1 +1 @@
1
- !function(e){"use strict";var t="Symbol(react.concurrent_mode)",o="Symbol(react.async_mode)",n=e=>5===e.tag||26===e.tag||27===e.tag,r=e=>{switch(e.tag){case 18:case 6:case 7:case 23:case 22:return!0;case 3:return!1;default:{const n="object"==typeof e.type&&null!==e.type?e.type.$$typeof:e.type;switch("symbol"==typeof n?n.toString():n){case 60111:case t:case o:return!0;default:return!1}}}},i=(e,t,o=!1)=>{if(!e)return null;if(!0===t(e))return e;let n=o?e.return:e.child;for(;n;){const e=i(n,t,o);if(e)return e;n=o?null:n.sibling}return null},a=()=>{},s=()=>{let e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;const t=new Map;let o=0;return e??={checkDCE:a,supportsFiber:!0,supportsFlight:!0,renderers:t,onCommitFiberRoot:a,onCommitFiberUnmount:a,onPostCommitFiberRoot:a,inject(e){const n=++o;return t.set(n,e),n}},globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=e,e};"undefined"!=typeof window&&s();e.CONCURRENT_MODE_NUMBER=60111,e.CONCURRENT_MODE_SYMBOL_STRING=t,e.ClassComponentTag=1,e.ContextConsumerTag=9,e.DEPRECATED_ASYNC_MODE_SYMBOL_STRING=o,e.DehydratedSuspenseComponent=18,e.ForwardRefTag=11,e.Fragment=7,e.FunctionComponentTag=0,e.HostComponentTag=5,e.HostHoistableTag=26,e.HostRoot=3,e.HostSingletonTag=27,e.HostText=6,e.LegacyHiddenComponent=23,e.MemoComponentTag=14,e.OffscreenComponent=22,e.PerformedWorkFlag=1,e.SimpleMemoComponentTag=15,e.createOnCommitFiberRootRenderHandler=({onRender:e})=>(t,o)=>{const n=o.current,i=null!==n.alternate&&Boolean(n.alternate.memoizedState?.element)&&!0!==n.alternate.memoizedState.isDehydrated,a=Boolean(n.memoizedState?.element),s=(t,o)=>{let n=t;for(;null!=n;){!r(n)&&e(n),null!=n.child&&s(n.child,!0),n=o?n.sibling:null}},l=(t,o)=>{if(!o)return;if(!r(t)&&e(t),t.child!==o.child){let e=t.child;for(;e;){const t=e.alternate;t?l(e,t):s(e,!1),e=e.sibling}}};!i&&a?s(n,!1):i&&a&&l(n,n.alternate)},e.didFiberRender=e=>{const 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!(1&~n);default:return!e.alternate||(o!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref)}},e.getFiberFromElement=e=>{if("__REACT_DEVTOOLS_GLOBAL_HOOK__"in window){const{renderers:t}=s();if(!t)return null;for(const[o,n]of Array.from(t))try{const t=n.findFiberByHostInstance(e);if(t)return t}catch(e){}}if("_reactRootContainer"in e)return e._reactRootContainer?._internalRoot?.current?.child;for(const t in e)if(t.startsWith("__reactInternalInstance$")||t.startsWith("__reactFiber"))return e[t];return null},e.getNearestHostFiber=e=>{let t=i(e,n);return t||(t=i(e,n,!0)),t},e.getRDTHook=s,e.getTimings=e=>{const t=e?.actualDuration??0;let o=t,n=e?.child??null;for(;t>0&&null!=n;)o-=n.actualDuration??0,n=n.sibling;return{selfTime:o,totalTime:t}},e.hasMemoCache=e=>Boolean(e.updateQueue?.memoCache),e.instrument=({onCommitFiberRoot:e,onCommitFiberUnmount:t,onPostCommitFiberRoot:o})=>{const n=s(),r=n.onCommitFiberRoot;e&&(n.onCommitFiberRoot=(t,o)=>{r&&r(t,o),e(t,o)});const i=n.onCommitFiberUnmount;t&&(n.onCommitFiberUnmount=(e,o)=>{i&&i(e,o),t(e,o)});const a=n.onPostCommitFiberRoot;return o&&(n.onPostCommitFiberRoot=(e,t)=>{a&&a(e,t)}),n},e.isCompositeComponent=e=>0===e.tag||1===e.tag||15===e.tag||14===e.tag||11===e.tag,e.isHostComponent=n,e.shouldFilterFiber=r,e.traverseContexts=(e,t)=>{const o=e.dependencies,n=e.alternate?.dependencies;if(!o||!n)return!1;if("object"!=typeof o||!("firstContext"in o)||"object"!=typeof n||!("firstContext"in n))return!1;let r=o.firstContext,i=n.firstContext;for(;r&&"object"==typeof r&&"memoizedValue"in r&&i&&"object"==typeof i&&"memoizedValue"in i;){if(!0===t(r,i))return!0;r=r.next,i=i.next}return!1},e.traverseFiber=i,e.traverseState=(e,t)=>{let o=e.memoizedState,n=e.alternate?.memoizedState;for(;o&&n;){if(!0===t(o,n))return!0;o=o.next,n=n.next}return!1}}({});
1
+ var Bippy=function(e){"use strict";var t="Symbol(react.concurrent_mode)",o="Symbol(react.async_mode)",n=e=>5===e.tag||26===e.tag||27===e.tag,r=e=>{const 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!(1&~n);default:return!e.alternate||(o!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref)}},a=e=>{switch(e.tag){case 18:case 6:case 7:case 23:case 22:return!0;case 3:return!1;default:{const n="object"==typeof e.type&&null!==e.type?e.type.$$typeof:e.type;switch("symbol"==typeof n?n.toString():n){case 60111:case t:case o:return!0;default:return!1}}}},i=(e,t,o=!1)=>{if(!e)return null;if(!0===t(e))return e;let n=o?e.return:e.child;for(;n;){const e=i(n,t,o);if(e)return e;n=o?null:n.sibling}return null},s=e=>"function"==typeof e?e:"object"==typeof e&&e?s(e.type||e.render):null,l=()=>{},m=()=>{let e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;const t=new Map;let o=0;e??={checkDCE:l,supportsFiber:!0,supportsFlight:!0,renderers:t,onCommitFiberRoot:l,onCommitFiberUnmount:l,onPostCommitFiberRoot:l,inject(e){const n=++o;return t.set(n,e),n}};try{globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=e}catch{}return e};"undefined"!=typeof window&&m();return e.CONCURRENT_MODE_NUMBER=60111,e.CONCURRENT_MODE_SYMBOL_STRING=t,e.ClassComponentTag=1,e.ContextConsumerTag=9,e.DEPRECATED_ASYNC_MODE_SYMBOL_STRING=o,e.DehydratedSuspenseComponent=18,e.ForwardRefTag=11,e.Fragment=7,e.FunctionComponentTag=0,e.HostComponentTag=5,e.HostHoistableTag=26,e.HostRoot=3,e.HostSingletonTag=27,e.HostText=6,e.LegacyHiddenComponent=23,e.MemoComponentTag=14,e.OffscreenComponent=22,e.PerformedWorkFlag=1,e.SimpleMemoComponentTag=15,e.createRenderVisitor=({onRender:e,onError:t})=>(o,n)=>{try{const t=n.current,o=null!==t.alternate&&Boolean(t.alternate.memoizedState?.element)&&!0!==t.alternate.memoizedState.isDehydrated,i=Boolean(t.memoizedState?.element),s=(t,o)=>{let n=t;for(;null!=n;){!a(n)&&r(n)&&e(n),null!=n.child&&s(n.child,!0),n=o?n.sibling:null}},l=(t,o)=>{if(!o)return;if(!a(t)&&r(t)&&e(t),t.child!==o.child){let e=t.child;for(;e;){const t=e.alternate;t?l(e,t):s(e,!1),e=e.sibling}}};!o&&i?s(t,!1):o&&i&&l(t,t.alternate)}catch(e){if(!t)throw e;t(e)}},e.didFiberRender=r,e.getDisplayName=e=>{if("function"!=typeof e&&("object"!=typeof e||!e))return null;const t=e.displayName||e.name||null;return t||((e=s(e))&&(e.displayName||e.name)||null)},e.getNearestHostFiber=e=>{let t=i(e,n);return t||(t=i(e,n,!0)),t},e.getRDTHook=m,e.getTimings=e=>{const t=e?.actualDuration??0;let o=t,n=e?.child??null;for(;t>0&&null!=n;)o-=n.actualDuration??0,n=n.sibling;return{selfTime:o,totalTime:t}},e.getType=s,e.hasMemoCache=e=>Boolean(e.updateQueue?.memoCache),e.instrument=({onCommitFiberRoot:e,onCommitFiberUnmount:t,onPostCommitFiberRoot:o})=>{const n=m(),r=n.onCommitFiberRoot;e&&(n.onCommitFiberRoot=(t,o)=>{r&&r(t,o),e(t,o)});const a=n.onCommitFiberUnmount;t&&(n.onCommitFiberUnmount=(e,o)=>{a&&a(e,o),t(e,o)});const i=n.onPostCommitFiberRoot;return o&&(n.onPostCommitFiberRoot=(e,t)=>{i&&i(e,t)}),n},e.isCompositeComponent=e=>0===e.tag||1===e.tag||15===e.tag||14===e.tag||11===e.tag,e.isHostComponent=n,e.shouldFilterFiber=a,e.traverseContexts=(e,t)=>{try{const o=e.dependencies,n=e.alternate?.dependencies;if(!o||!n)return!1;if("object"!=typeof o||!("firstContext"in o)||"object"!=typeof n||!("firstContext"in n))return!1;let r=o.firstContext,a=n.firstContext;for(;r&&"object"==typeof r&&"memoizedValue"in r&&a&&"object"==typeof a&&"memoizedValue"in a;){if(!0===t(r,a))return!0;r=r.next,a=a.next}}catch{}return!1},e.traverseFiber=i,e.traverseProps=(e,t)=>{try{const o=e.memoizedProps,n=e.alternate?.memoizedProps||{};for(const e in{...n,...o}){const r=n?.[e],a=o?.[e];if(!0===t(r,a))return!0}}catch{}return!1},e.traverseState=(e,t)=>{try{let o=e.memoizedState,n=e.alternate?.memoizedState;for(;o&&n;){if(!0===t(o,n))return!0;o=o.next,n=n.next}}catch{}return!1},e}({});
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e="Symbol(react.concurrent_mode)",t="Symbol(react.async_mode)",o=e=>5===e.tag||26===e.tag||27===e.tag,r=e=>{const t=e.memoizedProps,o=e.alternate?.memoizedProps||{},r=e.flags??e.effectTag??0;switch(e.tag){case 1:case 0:case 9:case 11:case 14:case 15:return!(1&~r);default:return!e.alternate||(o!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref)}},n=o=>{switch(o.tag){case 18:case 6:case 7:case 23:case 22:return!0;case 3:return!1;default:{const r="object"==typeof o.type&&null!==o.type?o.type.$$typeof:o.type;switch("symbol"==typeof r?r.toString():r){case 60111:case e:case t:return!0;default:return!1}}}},s=(e,t,o=!1)=>{if(!e)return null;if(!0===t(e))return e;let r=o?e.return:e.child;for(;r;){const e=s(r,t,o);if(e)return e;r=o?null:r.sibling}return null},a=e=>"function"==typeof e?e:"object"==typeof e&&e?a(e.type||e.render):null,i=()=>{},l=()=>{let e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;const t=new Map;let o=0;e??={checkDCE:i,supportsFiber:!0,supportsFlight:!0,renderers:t,onCommitFiberRoot:i,onCommitFiberUnmount:i,onPostCommitFiberRoot:i,inject(e){const r=++o;return t.set(r,e),r}};try{globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=e}catch{}return e};"undefined"!=typeof window&&l();exports.CONCURRENT_MODE_NUMBER=60111,exports.CONCURRENT_MODE_SYMBOL_STRING=e,exports.ClassComponentTag=1,exports.ContextConsumerTag=9,exports.DEPRECATED_ASYNC_MODE_SYMBOL_STRING=t,exports.DehydratedSuspenseComponent=18,exports.ForwardRefTag=11,exports.Fragment=7,exports.FunctionComponentTag=0,exports.HostComponentTag=5,exports.HostHoistableTag=26,exports.HostRoot=3,exports.HostSingletonTag=27,exports.HostText=6,exports.LegacyHiddenComponent=23,exports.MemoComponentTag=14,exports.OffscreenComponent=22,exports.PerformedWorkFlag=1,exports.SimpleMemoComponentTag=15,exports.didFiberRender=r,exports.getDisplayName=e=>{const t=e.displayName||e.name||null;return t||((e=a(e))&&(e.displayName||e.name)||null)},exports.getFiberFromElement=e=>{const{renderers:t}=l();if(!t)return null;for(const[o,r]of Array.from(t))try{const t=r.findFiberByHostInstance(e);if(t)return t}catch(e){}if("_reactRootContainer"in e)return e._reactRootContainer?._internalRoot?.current?.child;for(const t in e)if(t.startsWith("__reactInternalInstance$")||t.startsWith("__reactFiber"))return e[t];return null},exports.getNearestHostFiber=e=>{let t=s(e,o);return t||(t=s(e,o,!0)),t},exports.getRDTHook=l,exports.getTimings=e=>{const t=e?.actualDuration??0;let o=t,r=e?.child??null;for(;t>0&&null!=r;)o-=r.actualDuration??0,r=r.sibling;return{selfTime:o,totalTime:t}},exports.getType=a,exports.hasMemoCache=e=>Boolean(e.updateQueue?.memoCache),exports.instrument=({onCommitFiberRoot:e,onCommitFiberUnmount:t,onPostCommitFiberRoot:o})=>{const r=l(),n=r.onCommitFiberRoot;e&&(r.onCommitFiberRoot=(t,o)=>{n&&n(t,o),e(t,o)});const s=r.onCommitFiberUnmount;t&&(r.onCommitFiberUnmount=(e,o)=>{s&&s(e,o),t(e,o)});const a=r.onPostCommitFiberRoot;return o&&(r.onPostCommitFiberRoot=(e,t)=>{a&&a(e,t)}),r},exports.isCompositeComponent=e=>0===e.tag||1===e.tag||15===e.tag||14===e.tag||11===e.tag,exports.isHostComponent=o,exports.shouldFilterFiber=n,exports.traverseContexts=(e,t)=>{const o=e.dependencies,r=e.alternate?.dependencies;if(!o||!r)return!1;if("object"!=typeof o||!("firstContext"in o)||"object"!=typeof r||!("firstContext"in r))return!1;let n=o.firstContext,s=r.firstContext;for(;n&&"object"==typeof n&&"memoizedValue"in n&&s&&"object"==typeof s&&"memoizedValue"in s;){if(!0===t(n,s))return!0;n=n.next,s=s.next}return!1},exports.traverseFiber=s,exports.traverseFiberRoot=({onRender:e})=>(t,o)=>{const s=o.current,a=null!==s.alternate&&Boolean(s.alternate.memoizedState?.element)&&!0!==s.alternate.memoizedState.isDehydrated,i=Boolean(s.memoizedState?.element),l=(t,o)=>{let s=t;for(;null!=s;){!n(s)&&r(s)&&e(s),null!=s.child&&l(s.child,!0),s=o?s.sibling:null}},m=(t,o)=>{if(!o)return;if(!n(t)&&r(t)&&e(t),t.child!==o.child){let e=t.child;for(;e;){const t=e.alternate;t?m(e,t):l(e,!1),e=e.sibling}}};!a&&i?l(s,!1):a&&i&&m(s,s.alternate)},exports.traverseState=(e,t)=>{let o=e.memoizedState,r=e.alternate?.memoizedState;for(;o&&r;){if(!0===t(o,r))return!0;o=o.next,r=r.next}return!1};
1
+ "use strict";var e="Symbol(react.concurrent_mode)",t="Symbol(react.async_mode)",o=e=>5===e.tag||26===e.tag||27===e.tag,r=e=>{const t=e.memoizedProps,o=e.alternate?.memoizedProps||{},r=e.flags??e.effectTag??0;switch(e.tag){case 1:case 0:case 9:case 11:case 14:case 15:return!(1&~r);default:return!e.alternate||(o!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref)}},n=o=>{switch(o.tag){case 18:case 6:case 7:case 23:case 22:return!0;case 3:return!1;default:{const r="object"==typeof o.type&&null!==o.type?o.type.$$typeof:o.type;switch("symbol"==typeof r?r.toString():r){case 60111:case e:case t:return!0;default:return!1}}}},s=(e,t,o=!1)=>{if(!e)return null;if(!0===t(e))return e;let r=o?e.return:e.child;for(;r;){const e=s(r,t,o);if(e)return e;r=o?null:r.sibling}return null},a=e=>"function"==typeof e?e:"object"==typeof e&&e?a(e.type||e.render):null,i=()=>{},l=()=>{let e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;const t=new Map;let o=0;e??={checkDCE:i,supportsFiber:!0,supportsFlight:!0,renderers:t,onCommitFiberRoot:i,onCommitFiberUnmount:i,onPostCommitFiberRoot:i,inject(e){const r=++o;return t.set(r,e),r}};try{globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=e}catch{}return e};"undefined"!=typeof window&&l();exports.CONCURRENT_MODE_NUMBER=60111,exports.CONCURRENT_MODE_SYMBOL_STRING=e,exports.ClassComponentTag=1,exports.ContextConsumerTag=9,exports.DEPRECATED_ASYNC_MODE_SYMBOL_STRING=t,exports.DehydratedSuspenseComponent=18,exports.ForwardRefTag=11,exports.Fragment=7,exports.FunctionComponentTag=0,exports.HostComponentTag=5,exports.HostHoistableTag=26,exports.HostRoot=3,exports.HostSingletonTag=27,exports.HostText=6,exports.LegacyHiddenComponent=23,exports.MemoComponentTag=14,exports.OffscreenComponent=22,exports.PerformedWorkFlag=1,exports.SimpleMemoComponentTag=15,exports.createRenderVisitor=({onRender:e,onError:t})=>(o,s)=>{try{const t=s.current,o=null!==t.alternate&&Boolean(t.alternate.memoizedState?.element)&&!0!==t.alternate.memoizedState.isDehydrated,a=Boolean(t.memoizedState?.element),i=(t,o)=>{let s=t;for(;null!=s;){!n(s)&&r(s)&&e(s),null!=s.child&&i(s.child,!0),s=o?s.sibling:null}},l=(t,o)=>{if(!o)return;if(!n(t)&&r(t)&&e(t),t.child!==o.child){let e=t.child;for(;e;){const t=e.alternate;t?l(e,t):i(e,!1),e=e.sibling}}};!o&&a?i(t,!1):o&&a&&l(t,t.alternate)}catch(e){if(!t)throw e;t(e)}},exports.didFiberRender=r,exports.getDisplayName=e=>{if("function"!=typeof e&&("object"!=typeof e||!e))return null;const t=e.displayName||e.name||null;return t||((e=a(e))&&(e.displayName||e.name)||null)},exports.getNearestHostFiber=e=>{let t=s(e,o);return t||(t=s(e,o,!0)),t},exports.getRDTHook=l,exports.getTimings=e=>{const t=e?.actualDuration??0;let o=t,r=e?.child??null;for(;t>0&&null!=r;)o-=r.actualDuration??0,r=r.sibling;return{selfTime:o,totalTime:t}},exports.getType=a,exports.hasMemoCache=e=>Boolean(e.updateQueue?.memoCache),exports.instrument=({onCommitFiberRoot:e,onCommitFiberUnmount:t,onPostCommitFiberRoot:o})=>{const r=l(),n=r.onCommitFiberRoot;e&&(r.onCommitFiberRoot=(t,o)=>{n&&n(t,o),e(t,o)});const s=r.onCommitFiberUnmount;t&&(r.onCommitFiberUnmount=(e,o)=>{s&&s(e,o),t(e,o)});const a=r.onPostCommitFiberRoot;return o&&(r.onPostCommitFiberRoot=(e,t)=>{a&&a(e,t)}),r},exports.isCompositeComponent=e=>0===e.tag||1===e.tag||15===e.tag||14===e.tag||11===e.tag,exports.isHostComponent=o,exports.shouldFilterFiber=n,exports.traverseContexts=(e,t)=>{try{const o=e.dependencies,r=e.alternate?.dependencies;if(!o||!r)return!1;if("object"!=typeof o||!("firstContext"in o)||"object"!=typeof r||!("firstContext"in r))return!1;let n=o.firstContext,s=r.firstContext;for(;n&&"object"==typeof n&&"memoizedValue"in n&&s&&"object"==typeof s&&"memoizedValue"in s;){if(!0===t(n,s))return!0;n=n.next,s=s.next}}catch{}return!1},exports.traverseFiber=s,exports.traverseProps=(e,t)=>{try{const o=e.memoizedProps,r=e.alternate?.memoizedProps||{};for(const e in{...r,...o}){const n=r?.[e],s=o?.[e];if(!0===t(n,s))return!0}}catch{}return!1},exports.traverseState=(e,t)=>{try{let o=e.memoizedState,r=e.alternate?.memoizedState;for(;o&&r;){if(!0===t(o,r))return!0;o=o.next,r=r.next}}catch{}return!1};
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var e=1,t=1,n=0,o=9,r=11,a=14,i=15,l=5,c=26,s=27,u=18,m=6,f=7,d=23,b=22,p=3,y=60111,_="Symbol(react.concurrent_mode)",C="Symbol(react.async_mode)",h=(e,t)=>{const n=e.dependencies,o=e.alternate?.dependencies;if(!n||!o)return!1;if("object"!=typeof n||!("firstContext"in n)||"object"!=typeof o||!("firstContext"in o))return!1;let r=n.firstContext,a=o.firstContext;for(;r&&"object"==typeof r&&"memoizedValue"in r&&a&&"object"==typeof a&&"memoizedValue"in a;){if(!0===t(r,a))return!0;r=r.next,a=a.next}return!1},g=(e,t)=>{let n=e.memoizedState,o=e.alternate?.memoizedState;for(;n&&o;){if(!0===t(n,o))return!0;n=n.next,o=o.next}return!1},F=e=>5===e.tag||26===e.tag||27===e.tag,R=e=>0===e.tag||1===e.tag||15===e.tag||14===e.tag||11===e.tag,S=e=>{const t=e.memoizedProps,n=e.alternate?.memoizedProps||{},o=e.flags??e.effectTag??0;switch(e.tag){case 1:case 0:case 9:case 11:case 14:case 15:return!(1&~o);default:return!e.alternate||(n!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref)}},z=e=>{switch(e.tag){case 18:case 6:case 7:case 23:case 22:return!0;case 3:return!1;default:{const t="object"==typeof e.type&&null!==e.type?e.type.$$typeof:e.type;switch("symbol"==typeof t?t.toString():t){case 60111:case _:case C:return!0;default:return!1}}}},O=e=>{let t=x(e,F);return t||(t=x(e,F,!0)),t},x=(e,t,n=!1)=>{if(!e)return null;if(!0===t(e))return e;let o=n?e.return:e.child;for(;o;){const e=x(o,t,n);if(e)return e;o=n?null:o.sibling}return null},T=e=>{const t=e?.actualDuration??0;let n=t,o=e?.child??null;for(;t>0&&null!=o;)n-=o.actualDuration??0,o=o.sibling;return{selfTime:n,totalTime:t}},j=e=>{const{renderers:t}=P();if(!t)return null;for(const[n,o]of Array.from(t))try{const t=o.findFiberByHostInstance(e);if(t)return t}catch(e){}if("_reactRootContainer"in e)return e._reactRootContainer?._internalRoot?.current?.child;for(const t in e)if(t.startsWith("__reactInternalInstance$")||t.startsWith("__reactFiber"))return e[t];return null},w=e=>Boolean(e.updateQueue?.memoCache),B=e=>"function"==typeof e?e:"object"==typeof e&&e?B(e.type||e.render):null,D=e=>{const t=e.displayName||e.name||null;return t||((e=B(e))&&(e.displayName||e.name)||null)},L=()=>{},P=()=>{let e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;const t=new Map;let n=0;e??={checkDCE:L,supportsFiber:!0,supportsFlight:!0,renderers:t,onCommitFiberRoot:L,onCommitFiberUnmount:L,onPostCommitFiberRoot:L,inject(e){const o=++n;return t.set(o,e),o}};try{globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=e}catch{}return e};"undefined"!=typeof window&&P();var A=({onRender:e})=>(t,n)=>{const o=n.current,r=null!==o.alternate&&Boolean(o.alternate.memoizedState?.element)&&!0!==o.alternate.memoizedState.isDehydrated,a=Boolean(o.memoizedState?.element),i=(t,n)=>{let o=t;for(;null!=o;){!z(o)&&S(o)&&e(o),null!=o.child&&i(o.child,!0),o=n?o.sibling:null}},l=(t,n)=>{if(!n)return;if(!z(t)&&S(t)&&e(t),t.child!==n.child){let e=t.child;for(;e;){const t=e.alternate;t?l(e,t):i(e,!1),e=e.sibling}}};!r&&a?i(o,!1):r&&a&&l(o,o.alternate)},E=({onCommitFiberRoot:e,onCommitFiberUnmount:t,onPostCommitFiberRoot:n})=>{const o=P(),r=o.onCommitFiberRoot;e&&(o.onCommitFiberRoot=(t,n)=>{r&&r(t,n),e(t,n)});const a=o.onCommitFiberUnmount;t&&(o.onCommitFiberUnmount=(e,n)=>{a&&a(e,n),t(e,n)});const i=o.onPostCommitFiberRoot;return n&&(o.onPostCommitFiberRoot=(e,t)=>{i&&i(e,t)}),o};export{y as CONCURRENT_MODE_NUMBER,_ as CONCURRENT_MODE_SYMBOL_STRING,t as ClassComponentTag,o as ContextConsumerTag,C as DEPRECATED_ASYNC_MODE_SYMBOL_STRING,u as DehydratedSuspenseComponent,r as ForwardRefTag,f as Fragment,n as FunctionComponentTag,l as HostComponentTag,c as HostHoistableTag,p as HostRoot,s as HostSingletonTag,m as HostText,d as LegacyHiddenComponent,a as MemoComponentTag,b as OffscreenComponent,e as PerformedWorkFlag,i as SimpleMemoComponentTag,S as didFiberRender,D as getDisplayName,j as getFiberFromElement,O as getNearestHostFiber,P as getRDTHook,T as getTimings,B as getType,w as hasMemoCache,E as instrument,R as isCompositeComponent,F as isHostComponent,z as shouldFilterFiber,h as traverseContexts,x as traverseFiber,A as traverseFiberRoot,g as traverseState};
1
+ var e=1,t=1,o=0,n=9,r=11,a=14,i=15,l=5,c=26,m=27,s=18,u=6,f=7,d=23,p=22,b=3,y=60111,h="Symbol(react.concurrent_mode)",g="Symbol(react.async_mode)",C=e=>5===e.tag||26===e.tag||27===e.tag,_=e=>0===e.tag||1===e.tag||15===e.tag||14===e.tag||11===e.tag,F=(e,t)=>{try{const o=e.dependencies,n=e.alternate?.dependencies;if(!o||!n)return!1;if("object"!=typeof o||!("firstContext"in o)||"object"!=typeof n||!("firstContext"in n))return!1;let r=o.firstContext,a=n.firstContext;for(;r&&"object"==typeof r&&"memoizedValue"in r&&a&&"object"==typeof a&&"memoizedValue"in a;){if(!0===t(r,a))return!0;r=r.next,a=a.next}}catch{}return!1},z=(e,t)=>{try{let o=e.memoizedState,n=e.alternate?.memoizedState;for(;o&&n;){if(!0===t(o,n))return!0;o=o.next,n=n.next}}catch{}return!1},S=(e,t)=>{try{const o=e.memoizedProps,n=e.alternate?.memoizedProps||{};for(const e in{...n,...o}){const r=n?.[e],a=o?.[e];if(!0===t(r,a))return!0}}catch{}return!1},R=e=>{const 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!(1&~n);default:return!e.alternate||(o!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref)}},O=e=>{switch(e.tag){case 18:case 6:case 7:case 23:case 22:return!0;case 3:return!1;default:{const t="object"==typeof e.type&&null!==e.type?e.type.$$typeof:e.type;switch("symbol"==typeof t?t.toString():t){case 60111:case h:case g:return!0;default:return!1}}}},x=e=>{let t=T(e,C);return t||(t=T(e,C,!0)),t},T=(e,t,o=!1)=>{if(!e)return null;if(!0===t(e))return e;let n=o?e.return:e.child;for(;n;){const e=T(n,t,o);if(e)return e;n=o?null:n.sibling}return null},j=e=>{const t=e?.actualDuration??0;let o=t,n=e?.child??null;for(;t>0&&null!=n;)o-=n.actualDuration??0,n=n.sibling;return{selfTime:o,totalTime:t}},P=e=>Boolean(e.updateQueue?.memoCache),w=e=>"function"==typeof e?e:"object"==typeof e&&e?w(e.type||e.render):null,D=e=>{if("function"!=typeof e&&("object"!=typeof e||!e))return null;const t=e.displayName||e.name||null;return t||((e=w(e))&&(e.displayName||e.name)||null)},E=()=>{},L=()=>{let e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;const t=new Map;let o=0;e??={checkDCE:E,supportsFiber:!0,supportsFlight:!0,renderers:t,onCommitFiberRoot:E,onCommitFiberUnmount:E,onPostCommitFiberRoot:E,inject(e){const n=++o;return t.set(n,e),n}};try{globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=e}catch{}return e};"undefined"!=typeof window&&L();var B=({onRender:e,onError:t})=>(o,n)=>{try{const t=n.current,o=null!==t.alternate&&Boolean(t.alternate.memoizedState?.element)&&!0!==t.alternate.memoizedState.isDehydrated,r=Boolean(t.memoizedState?.element),a=(t,o)=>{let n=t;for(;null!=n;){!O(n)&&R(n)&&e(n),null!=n.child&&a(n.child,!0),n=o?n.sibling:null}},i=(t,o)=>{if(!o)return;if(!O(t)&&R(t)&&e(t),t.child!==o.child){let e=t.child;for(;e;){const t=e.alternate;t?i(e,t):a(e,!1),e=e.sibling}}};!o&&r?a(t,!1):o&&r&&i(t,t.alternate)}catch(e){if(!t)throw e;t(e)}},A=({onCommitFiberRoot:e,onCommitFiberUnmount:t,onPostCommitFiberRoot:o})=>{const n=L(),r=n.onCommitFiberRoot;e&&(n.onCommitFiberRoot=(t,o)=>{r&&r(t,o),e(t,o)});const a=n.onCommitFiberUnmount;t&&(n.onCommitFiberUnmount=(e,o)=>{a&&a(e,o),t(e,o)});const i=n.onPostCommitFiberRoot;return o&&(n.onPostCommitFiberRoot=(e,t)=>{i&&i(e,t)}),n};export{y as CONCURRENT_MODE_NUMBER,h as CONCURRENT_MODE_SYMBOL_STRING,t as ClassComponentTag,n as ContextConsumerTag,g as DEPRECATED_ASYNC_MODE_SYMBOL_STRING,s as DehydratedSuspenseComponent,r as ForwardRefTag,f as Fragment,o as FunctionComponentTag,l as HostComponentTag,c as HostHoistableTag,b as HostRoot,m as HostSingletonTag,u as HostText,d as LegacyHiddenComponent,a as MemoComponentTag,p as OffscreenComponent,e as PerformedWorkFlag,i as SimpleMemoComponentTag,B as createRenderVisitor,R as didFiberRender,D as getDisplayName,x as getNearestHostFiber,L as getRDTHook,j as getTimings,w as getType,P as hasMemoCache,A as instrument,_ as isCompositeComponent,C as isHostComponent,O as shouldFilterFiber,F as traverseContexts,T as traverseFiber,S as traverseProps,z as traverseState};
@@ -1 +1 @@
1
- !function(){"use strict";var e,o,r=Object.getOwnPropertyNames;(e={"src/rsc-shim.ts"(){throw new Error("This module cannot be imported from a Server Component module. It should only be used from a Client Component.")}},function(){return o||(0,e[r(e)[0]])((o={exports:{}}).exports,o),o.exports})()}();
1
+ var Bippy=function(){"use strict";var r,e,o=Object.getOwnPropertyNames;return(r={"src/rsc-shim.ts"(){throw new Error("This module cannot be imported from a Server Component module. It should only be used from a Client Component.")}},function(){return e||(0,r[o(r)[0]])((e={exports:{}}).exports,e),e.exports})()}();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bippy",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "a kitchen sink of utilities for working with react fiber",
5
5
  "keywords": [
6
6
  "react",