bippy 0.7.3-dev.e2b879b → 0.7.3-dev.e910a3b
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 +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/rdt-hook.cjs +1 -1
- package/dist/rdt-hook.js +1 -1
- package/package.json +1 -1
- package/src/react.ts +129 -75
package/dist/index.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`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));const c=require("./rdt-hook.cjs");require("./install-hook-only.cjs");const l=require("./core.cjs");let u=require("react");u=s(u,1);const d=e=>e,f=()=>
|
|
9
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));const c=require("./rdt-hook.cjs");require("./install-hook-only.cjs");const l=require("./core.cjs");let u=require("react");u=s(u,1);const d=e=>typeof e==`object`&&!!e&&`lastRenderedReducer`in e,f=(e,t)=>{for(let n=e.memoizedState;n;n=n.next)if(Array.isArray(n.memoizedState)&&n.memoizedState[0]===t)return!0;return!1},p=(e,t)=>{for(let n=e.memoizedState;n;n=n.next)if(d(n.queue)&&n.queue.lastRenderedReducer===t)return n.queue;return null},m=e=>{for(let t of c.n)try{let n=t.getCurrentFiber?.();if(n&&l.h(n)&&f(n,e))return n}catch{}return null},h=(e,t)=>{let n;if(t)try{n=Function.prototype.bind}catch{}if(!n)return u.default.useReducer(e,void 0),null;let r=null,i=!0,a=new Proxy(n,{apply:(t,n,a)=>{if(i&&!r)try{let t=a.find(t=>d(t)&&t.lastRenderedReducer===e);if(t){let e=a.find(e=>l.h(e)&&l.h(e.return));e&&(r={fiber:e,queue:t})}}catch{}return Reflect.apply(t,n,a)}});try{try{Reflect.set(Function.prototype,`bind`,a)}catch{}return u.default.useReducer(e,void 0),r}finally{i=!1,r=null;try{Function.prototype.bind===a&&Reflect.set(Function.prototype,`bind`,n)}catch{}}},g=({fiber:e,queue:t},n)=>{if(t?.lastRenderedReducer!==n)return null;let r=e;for(;r.return;)r=r.return;let i=r.stateNode;if(typeof i!=`object`||!i||!(`current`in i)||!l.h(i.current))return null;let a=i.current.alternate;return l.b(a,t=>{if(t!==e&&t!==e.alternate)return!1;let n=t;for(;n.return;)n=n.return;return n===a})},_=()=>{"use no memo";let e=u.default.useRef(null),t=e=>e;u.default.useMemo(()=>t,[t]);let n=e.current?null:m(t),r=h(t,!e.current&&!n);if(n)return e.current={fiber:n,queue:p(n,t)},n;let i=r??e.current;if(!i)return;let a=i.fiber,o=r?.fiber??(f(a,t)?a:a.alternate&&f(a.alternate,t)?a.alternate:g(i,t));return o&&(e.current={fiber:o,queue:i.queue}),o??void 0};exports.BIPPY_INSTRUMENTATION_STRING=c.t,exports.BippyError=l.S,exports.BippyHookInspectionError=l.C,exports.BippyHookRenderError=l.w,exports.BippySourceMapError=l.T,exports.BippyUnsupportedHookError=l.E,exports.MutationMask=l.D,exports.ReactBuildType=l.j,exports.ReactFiberFlags=l.M,exports.ReactSymbols=l.N,exports._fiberRoots=l.t,exports._renderers=c.n,exports.compareSemver=l.F,exports.detectReactBuildType=l.n,exports.didFiberRender=l.r,exports.getDisplayName=l.i,exports.getFiber=l.a,exports.getFiberById=l.o,exports.getFiberFromHostInstance=l.s,exports.getFiberId=l.c,exports.getLatestFiber=l.l,exports.getRDTHook=c.i,exports.getReactWorkTags=l.P,exports.getReactWorkTagsForFiber=l.O,exports.getReactWorkTagsForRenderer=l.k,exports.getRenderer=l.u,exports.getType=l.d,exports.hasMemoCache=l.f,exports.hasRDTHook=c.a,exports.installRDTHook=c.o,exports.instrument=l.p,exports.isCompositeFiber=l.m,exports.isFiber=l.h,exports.isFiberRootUnmounted=c.s,exports.isHostFiber=l.g,exports.isInstrumentationActive=l._,exports.isReactRefresh=c.c,exports.isRealReactDevtools=c.l,exports.isValidElement=l.v,exports.onRendererInject=c.f,exports.patchRDTHook=c.p,exports.setFiberId=l.y,exports.setReactWorkTagsForFiber=l.A,exports.traverseFiber=l.b,exports.traverseRenderedFibers=l.x,exports.useFiber=_,exports.version=c.h;
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* LICENSE file in the root directory of this source tree.
|
|
8
8
|
*/
|
|
9
9
|
import { $ as getReactWorkTags, A as FiberUpdateQueue, B as ReactMemoCache, C as ContextDependency, D as Fiber, E as Dependencies, F as ReactContext, G as WorkTag, H as RendererDispatcherRef, I as ReactDebugInfo, J as ReactFiberFlags, K as HostWorkTag, L as ReactDevToolsEventHandler, M as LegacyDispatcherRef, N as MemoizedState, O as FiberDebugSource, P as Props, Q as ReactWorkTagVersion, R as ReactDevToolsGlobalHook, S as setReactWorkTagsForFiber, T as DebugThenableState, U as ServerComponentInfo, V as ReactRenderer, W as Source, X as ReactWorkTag, Y as ReactSymbols, Z as ReactWorkTagMap, _ as patchRDTHook, a as BippyUnsupportedHookError, b as getReactWorkTagsForFiber, c as Unsubscribe, d as hasRDTHook, f as installRDTHook, g as onRendererInject, h as isRealReactDevtools, i as BippySourceMapError, j as HostFiber, k as FiberRoot, l as _renderers, m as isReactRefresh, n as BippyHookInspectionError, o as BIPPY_INSTRUMENTATION_STRING, p as isFiberRootUnmounted, q as ReactBuildType, r as BippyHookRenderError, s as ReactDevToolsTarget, t as BippyError, u as getRDTHook, v as version, w as CurrentDispatcherRef, x as getReactWorkTagsForRenderer, y as MutationMask, z as ReactIOInfo } from "./errors.js";
|
|
10
|
-
import * as React from "react";
|
|
10
|
+
import * as React$1 from "react";
|
|
11
11
|
//#region src/react-internals/semver.d.ts
|
|
12
12
|
declare const compareSemver: (leftVersion: string, rightVersion: string) => -1 | 0 | 1 | null;
|
|
13
13
|
//#endregion
|
|
@@ -23,7 +23,7 @@ interface RenderHandler {
|
|
|
23
23
|
*
|
|
24
24
|
* @see https://react.dev/reference/react/isValidElement
|
|
25
25
|
*/
|
|
26
|
-
declare const isValidElement: (element: unknown) => element is React.ReactElement;
|
|
26
|
+
declare const isValidElement: (element: unknown) => element is React$1.ReactElement;
|
|
27
27
|
/**
|
|
28
28
|
* Returns `true` if object is a React Fiber.
|
|
29
29
|
*/
|
|
@@ -60,7 +60,7 @@ declare const hasMemoCache: (fiber: Fiber) => boolean;
|
|
|
60
60
|
/**
|
|
61
61
|
* Returns the type (e.g. component definition) of the {@link Fiber}
|
|
62
62
|
*/
|
|
63
|
-
declare const getType: (type: unknown) => null | React.ComponentType<unknown>;
|
|
63
|
+
declare const getType: (type: unknown) => null | React$1.ComponentType<unknown>;
|
|
64
64
|
/**
|
|
65
65
|
* Returns the display name of the {@link Fiber} type.
|
|
66
66
|
*/
|
|
@@ -101,7 +101,7 @@ interface InstrumentationOptions {
|
|
|
101
101
|
onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: number | void, didError?: boolean) => unknown;
|
|
102
102
|
onCommitFiberUnmount?: (rendererID: number, fiber: Fiber) => unknown;
|
|
103
103
|
onPostCommitFiberRoot?: (rendererID: number, root: FiberRoot) => unknown;
|
|
104
|
-
onScheduleFiberRoot?: (rendererID: number, root: FiberRoot, children: React.ReactNode) => unknown;
|
|
104
|
+
onScheduleFiberRoot?: (rendererID: number, root: FiberRoot, children: React$1.ReactNode) => unknown;
|
|
105
105
|
}
|
|
106
106
|
/**
|
|
107
107
|
* Instruments the DevTools hook. Each hook event is patched once and
|
package/dist/index.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,f as n,h as r,i,l as a,n as o,o as s,p as c,s as l,t as u}from"./rdt-hook.js";import"./install-hook-only.js";import{A as
|
|
9
|
+
import{a as e,c as t,f as n,h as r,i,l as a,n as o,o as s,p as c,s as l,t as u}from"./rdt-hook.js";import"./install-hook-only.js";import{A as d,C as f,D as p,E as m,F as h,M as g,N as _,O as v,P as y,S as b,T as x,_ as S,a as C,b as w,c as T,d as E,f as D,g as O,h as k,i as A,j,k as M,l as N,m as P,n as F,o as I,p as L,r as R,s as z,t as B,u as V,v as H,w as U,x as W,y as G}from"./core.js";import K from"react";const q=e=>typeof e==`object`&&!!e&&`lastRenderedReducer`in e,J=(e,t)=>{for(let n=e.memoizedState;n;n=n.next)if(Array.isArray(n.memoizedState)&&n.memoizedState[0]===t)return!0;return!1},Y=(e,t)=>{for(let n=e.memoizedState;n;n=n.next)if(q(n.queue)&&n.queue.lastRenderedReducer===t)return n.queue;return null},X=e=>{for(let t of o)try{let n=t.getCurrentFiber?.();if(n&&k(n)&&J(n,e))return n}catch{}return null},Z=(e,t)=>{let n;if(t)try{n=Function.prototype.bind}catch{}if(!n)return K.useReducer(e,void 0),null;let r=null,i=!0,a=new Proxy(n,{apply:(t,n,a)=>{if(i&&!r)try{let t=a.find(t=>q(t)&&t.lastRenderedReducer===e);if(t){let e=a.find(e=>k(e)&&k(e.return));e&&(r={fiber:e,queue:t})}}catch{}return Reflect.apply(t,n,a)}});try{try{Reflect.set(Function.prototype,`bind`,a)}catch{}return K.useReducer(e,void 0),r}finally{i=!1,r=null;try{Function.prototype.bind===a&&Reflect.set(Function.prototype,`bind`,n)}catch{}}},Q=({fiber:e,queue:t},n)=>{if(t?.lastRenderedReducer!==n)return null;let r=e;for(;r.return;)r=r.return;let i=r.stateNode;if(typeof i!=`object`||!i||!(`current`in i)||!k(i.current))return null;let a=i.current.alternate;return w(a,t=>{if(t!==e&&t!==e.alternate)return!1;let n=t;for(;n.return;)n=n.return;return n===a})},$=()=>{"use no memo";let e=K.useRef(null),t=e=>e;K.useMemo(()=>t,[t]);let n=e.current?null:X(t),r=Z(t,!e.current&&!n);if(n)return e.current={fiber:n,queue:Y(n,t)},n;let i=r??e.current;if(!i)return;let a=i.fiber,o=r?.fiber??(J(a,t)?a:a.alternate&&J(a.alternate,t)?a.alternate:Q(i,t));return o&&(e.current={fiber:o,queue:i.queue}),o??void 0};export{u as BIPPY_INSTRUMENTATION_STRING,b as BippyError,f as BippyHookInspectionError,U as BippyHookRenderError,x as BippySourceMapError,m as BippyUnsupportedHookError,p as MutationMask,j as ReactBuildType,g as ReactFiberFlags,_ as ReactSymbols,B as _fiberRoots,o as _renderers,h as compareSemver,F as detectReactBuildType,R as didFiberRender,A as getDisplayName,C as getFiber,I as getFiberById,z as getFiberFromHostInstance,T as getFiberId,N as getLatestFiber,i as getRDTHook,y as getReactWorkTags,v as getReactWorkTagsForFiber,M as getReactWorkTagsForRenderer,V as getRenderer,E as getType,D as hasMemoCache,e as hasRDTHook,s as installRDTHook,L as instrument,P as isCompositeFiber,k as isFiber,l as isFiberRootUnmounted,O as isHostFiber,S as isInstrumentationActive,t as isReactRefresh,a as isRealReactDevtools,H as isValidElement,n as onRendererInject,c as patchRDTHook,G as setFiberId,d as setReactWorkTagsForFiber,w as traverseFiber,W as traverseRenderedFibers,$ as useFiber,r as version};
|
package/dist/rdt-hook.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
|
-
const e=`0.7.3-dev.
|
|
9
|
+
const e=`0.7.3-dev.e910a3b`,t=`bippy-${e}`,n=Object.defineProperty,r=()=>{},i=e=>e.__REACT_DEVTOOLS_GLOBAL_HOOK__,a=e=>Object.assign(e,{[Symbol.dispose]:e}),o=e=>{let t=e.current.memoizedState;return t===null||t!==void 0&&(t.element===null||t.element===void 0)},s=e=>{if(!(typeof process<`u`&&process.versions?.node))try{Function.prototype.toString.call(e).indexOf(`^_^`)>-1&&setTimeout(()=>{throw Error(`React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://react.dev/link/perf-use-production-build`)})}catch{}},c=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>!!(e&&`getFiberRoots`in e&&e._isBippyHook!==!0),l=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>{if(!e||typeof e.inject!=`function`||c(e))return!1;try{return Function.prototype.toString.call(e.inject).includes(`(injected)`)}catch{return!1}},u=new Set,d=new Set,f=new WeakMap,p=new Set,m=new Set,h=new WeakMap,g=(e,t)=>{u.add(e);let n=f.get(e)??new Set;n.add(t),f.set(e,n)},_=(e,t)=>{let n=f.get(e);n?.delete(t),(!n||n.size===0)&&(f.delete(e),u.delete(e))},v=e=>{for(let t of u)f.get(t)?.has(e)&&t()},y=(e,t)=>{for(let n of p)n.target===e&&n.listener(t)},b=(e,t)=>{for(let n of m)n(e,t)},x=(e,t=globalThis)=>{k(void 0,t);let n={listener:e,target:t};return p.add(n),a(()=>{p.delete(n)})},S=e=>(m.add(e),a(()=>{m.delete(e)})),C=e=>Object.prototype.toString.call(e)===`[object Map]`,w=e=>(C(e.renderers)||(e.renderers=new Map),e.renderers),T=(e,t,n,r,i)=>{n.set(r,i),d.add(i),e._instrumentationIsActive||(e._instrumentationIsActive=!0,v(t));let a=h.get(t)??new WeakSet;h.set(t,a),!a.has(i)&&(a.add(i),y(t,i))},E=(e,i=globalThis)=>{e&&g(e,i);let a=new Map,c=new Map,l=e=>{let t=c.get(e)??new Set;return c.set(e,t),t},u=0,f={_instrumentationIsActive:!1,_instrumentationSource:t,_isBippyHook:!0,checkDCE:s,getFiberRoots:l,hasUnsupportedRendererAttached:!1,inject:e=>{let t=++u;return T(f,i,a,t,e),t},on:r,onCommitFiberRoot:(e,t)=>{let n=l(e);o(t)?n.delete(t):n.add(t)},onCommitFiberUnmount:r,onPostCommitFiberRoot:r,renderers:a,supportsFiber:!0,supportsFlight:!0};try{if(n(i,`__REACT_DEVTOOLS_GLOBAL_HOOK__`,{configurable:!0,enumerable:!0,get:()=>f,set:t=>{if(t&&typeof t==`object`){let n=f.renderers;f=t;let r=w(f);n.forEach((e,t)=>{d.add(e),r.set(t,e)}),(n.size>0||m.size>0)&&D(e,i),b(f,i)}}}),i===globalThis&&typeof window<`u`){let e=window.hasOwnProperty.bind(window),t=Object.getOwnPropertyDescriptor(window,`hasOwnProperty`),r=!1,i=()=>{t?n(window,`hasOwnProperty`,t):Reflect.deleteProperty(window,`hasOwnProperty`)};n(window,`hasOwnProperty`,{configurable:!0,value:t=>!r&&t===`__REACT_DEVTOOLS_GLOBAL_HOOK__`?(r=!0,i(),globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=void 0,!1):e(t),writable:!0})}}catch{D(e,i)}return f},D=(e,n=globalThis)=>{e&&g(e,n);let a=!1,o=i(n);if(!o)return;let u=w(o);if(!o._instrumentationSource){o.checkDCE=s,o.supportsFiber=!0,o.supportsFlight=!0,o.hasUnsupportedRendererAttached=!1,o._instrumentationSource=t,o._instrumentationIsActive=!1;let e=c(o);e||(o.on=r),u.size?(u.forEach(e=>d.add(e)),o._instrumentationIsActive=!0,v(n),a=!0):!e&&l(o)&&(o._instrumentationIsActive=!0,v(n),a=!0);let i=o.inject;o.inject=e=>{let t=i.call(o,e);return T(o,n,u,t,e),t}}!a&&(u.size||o._instrumentationIsActive)&&e?.()},O=(e=globalThis)=>Object.hasOwn(e,`__REACT_DEVTOOLS_GLOBAL_HOOK__`),k=(e,t=globalThis)=>O(t)?(D(e,t),i(t)??E(e,t)):E(e,t);Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return C}});
|
package/dist/rdt-hook.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
|
-
const e=`0.7.3-dev.
|
|
9
|
+
const e=`0.7.3-dev.e910a3b`,t=`bippy-${e}`,n=Object.defineProperty,r=()=>{},i=e=>e.__REACT_DEVTOOLS_GLOBAL_HOOK__,a=e=>Object.assign(e,{[Symbol.dispose]:e}),o=e=>{let t=e.current.memoizedState;return t===null||t!==void 0&&(t.element===null||t.element===void 0)},s=e=>{if(!(typeof process<`u`&&process.versions?.node))try{Function.prototype.toString.call(e).indexOf(`^_^`)>-1&&setTimeout(()=>{throw Error(`React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://react.dev/link/perf-use-production-build`)})}catch{}},c=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>!!(e&&`getFiberRoots`in e&&e._isBippyHook!==!0),l=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>{if(!e||typeof e.inject!=`function`||c(e))return!1;try{return Function.prototype.toString.call(e.inject).includes(`(injected)`)}catch{return!1}},u=new Set,d=new Set,f=new WeakMap,p=new Set,m=new Set,h=new WeakMap,g=(e,t)=>{u.add(e);let n=f.get(e)??new Set;n.add(t),f.set(e,n)},_=(e,t)=>{let n=f.get(e);n?.delete(t),(!n||n.size===0)&&(f.delete(e),u.delete(e))},v=e=>{for(let t of u)f.get(t)?.has(e)&&t()},y=(e,t)=>{for(let n of p)n.target===e&&n.listener(t)},b=(e,t)=>{for(let n of m)n(e,t)},x=(e,t=globalThis)=>{k(void 0,t);let n={listener:e,target:t};return p.add(n),a(()=>{p.delete(n)})},S=e=>(m.add(e),a(()=>{m.delete(e)})),C=e=>Object.prototype.toString.call(e)===`[object Map]`,w=e=>(C(e.renderers)||(e.renderers=new Map),e.renderers),T=(e,t,n,r,i)=>{n.set(r,i),d.add(i),e._instrumentationIsActive||(e._instrumentationIsActive=!0,v(t));let a=h.get(t)??new WeakSet;h.set(t,a),!a.has(i)&&(a.add(i),y(t,i))},E=(e,i=globalThis)=>{e&&g(e,i);let a=new Map,c=new Map,l=e=>{let t=c.get(e)??new Set;return c.set(e,t),t},u=0,f={_instrumentationIsActive:!1,_instrumentationSource:t,_isBippyHook:!0,checkDCE:s,getFiberRoots:l,hasUnsupportedRendererAttached:!1,inject:e=>{let t=++u;return T(f,i,a,t,e),t},on:r,onCommitFiberRoot:(e,t)=>{let n=l(e);o(t)?n.delete(t):n.add(t)},onCommitFiberUnmount:r,onPostCommitFiberRoot:r,renderers:a,supportsFiber:!0,supportsFlight:!0};try{if(n(i,`__REACT_DEVTOOLS_GLOBAL_HOOK__`,{configurable:!0,enumerable:!0,get:()=>f,set:t=>{if(t&&typeof t==`object`){let n=f.renderers;f=t;let r=w(f);n.forEach((e,t)=>{d.add(e),r.set(t,e)}),(n.size>0||m.size>0)&&D(e,i),b(f,i)}}}),i===globalThis&&typeof window<`u`){let e=window.hasOwnProperty.bind(window),t=Object.getOwnPropertyDescriptor(window,`hasOwnProperty`),r=!1,i=()=>{t?n(window,`hasOwnProperty`,t):Reflect.deleteProperty(window,`hasOwnProperty`)};n(window,`hasOwnProperty`,{configurable:!0,value:t=>!r&&t===`__REACT_DEVTOOLS_GLOBAL_HOOK__`?(r=!0,i(),globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=void 0,!1):e(t),writable:!0})}}catch{D(e,i)}return f},D=(e,n=globalThis)=>{e&&g(e,n);let a=!1,o=i(n);if(!o)return;let u=w(o);if(!o._instrumentationSource){o.checkDCE=s,o.supportsFiber=!0,o.supportsFlight=!0,o.hasUnsupportedRendererAttached=!1,o._instrumentationSource=t,o._instrumentationIsActive=!1;let e=c(o);e||(o.on=r),u.size?(u.forEach(e=>d.add(e)),o._instrumentationIsActive=!0,v(n),a=!0):!e&&l(o)&&(o._instrumentationIsActive=!0,v(n),a=!0);let i=o.inject;o.inject=e=>{let t=i.call(o,e);return T(o,n,u,t,e),t}}!a&&(u.size||o._instrumentationIsActive)&&e?.()},O=(e=globalThis)=>Object.hasOwn(e,`__REACT_DEVTOOLS_GLOBAL_HOOK__`),k=(e,t=globalThis)=>O(t)?(D(e,t),i(t)??E(e,t)):E(e,t);export{O as a,l as c,S as d,x as f,e as h,k as i,c as l,_ as m,d as n,E as o,D as p,a as r,o as s,t,C as u};
|
package/package.json
CHANGED
package/src/react.ts
CHANGED
|
@@ -1,98 +1,152 @@
|
|
|
1
1
|
import "./install-hook-only.js";
|
|
2
|
-
import
|
|
3
|
-
import { isFiber } from "./core.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { isFiber, traverseFiber } from "./core.js";
|
|
4
|
+
import { _renderers } from "./rdt-hook.js";
|
|
4
5
|
import type { Fiber } from "./react-internals/index.js";
|
|
5
6
|
|
|
6
7
|
export type { Fiber } from "./react-internals/index.js";
|
|
7
8
|
|
|
8
|
-
interface
|
|
9
|
-
|
|
10
|
-
next: unknown;
|
|
9
|
+
interface RenderMarker {
|
|
10
|
+
(state: undefined): undefined;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const subscribeToEmptyStore = (): (() => void) => unsubscribeFromEmptyStore;
|
|
17
|
-
const useSyncExternalStore: unknown = Reflect.get(React, "useSyncExternalStore");
|
|
13
|
+
interface ReducerQueue {
|
|
14
|
+
lastRenderedReducer: unknown;
|
|
15
|
+
}
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const bindProxy = new Proxy(originalBind, {
|
|
24
|
-
apply: (bind, functionToBind, boundArguments) => {
|
|
25
|
-
const fiber = boundArguments[1];
|
|
26
|
-
if (!capturedFiber && isFiber(fiber)) {
|
|
27
|
-
capturedFiber = fiber;
|
|
28
|
-
}
|
|
29
|
-
return Reflect.apply(bind, functionToBind, boundArguments);
|
|
30
|
-
},
|
|
31
|
-
});
|
|
32
|
-
Reflect.set(Function.prototype, "bind", bindProxy);
|
|
17
|
+
interface FiberCapture {
|
|
18
|
+
fiber: Fiber;
|
|
19
|
+
queue: ReducerQueue | null;
|
|
20
|
+
}
|
|
33
21
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
} finally {
|
|
37
|
-
if (Function.prototype.bind === bindProxy) {
|
|
38
|
-
Reflect.set(Function.prototype, "bind", originalBind);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
22
|
+
const isReducerQueue = (value: unknown): value is ReducerQueue =>
|
|
23
|
+
typeof value === "object" && value !== null && "lastRenderedReducer" in value;
|
|
41
24
|
|
|
42
|
-
|
|
25
|
+
const hasRenderMarker = (fiber: Fiber, renderMarker: RenderMarker): boolean => {
|
|
26
|
+
for (let hook = fiber.memoizedState; hook; hook = hook.next) {
|
|
27
|
+
if (Array.isArray(hook.memoizedState) && hook.memoizedState[0] === renderMarker) return true;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
43
30
|
};
|
|
44
31
|
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
]);
|
|
32
|
+
const getReducerQueue = (fiber: Fiber, renderMarker: RenderMarker): ReducerQueue | null => {
|
|
33
|
+
for (let hook = fiber.memoizedState; hook; hook = hook.next) {
|
|
34
|
+
if (isReducerQueue(hook.queue) && hook.queue.lastRenderedReducer === renderMarker)
|
|
35
|
+
return hook.queue;
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
52
38
|
};
|
|
53
39
|
|
|
54
|
-
const
|
|
55
|
-
|
|
40
|
+
const getDevToolsFiber = (renderMarker: RenderMarker): Fiber | null => {
|
|
41
|
+
for (const renderer of _renderers) {
|
|
42
|
+
try {
|
|
43
|
+
const fiber = renderer.getCurrentFiber?.();
|
|
44
|
+
if (fiber && isFiber(fiber) && hasRenderMarker(fiber, renderMarker)) return fiber;
|
|
45
|
+
} catch {}
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
56
48
|
};
|
|
57
49
|
|
|
58
|
-
const
|
|
59
|
-
|
|
50
|
+
const captureReducerFiber = (
|
|
51
|
+
renderMarker: RenderMarker,
|
|
52
|
+
shouldCapture: boolean,
|
|
53
|
+
): FiberCapture | null => {
|
|
54
|
+
let originalBind: typeof Function.prototype.bind | undefined;
|
|
55
|
+
if (shouldCapture) {
|
|
56
|
+
try {
|
|
57
|
+
originalBind = Function.prototype.bind;
|
|
58
|
+
} catch {}
|
|
59
|
+
}
|
|
60
|
+
if (!originalBind) {
|
|
61
|
+
React.useReducer(renderMarker, undefined);
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
60
64
|
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
let capture: FiberCapture | null = null;
|
|
66
|
+
let isCapturing = true;
|
|
67
|
+
// HACK: Production React binds a new reducer's Fiber and queue; validate the private reducer marker, not argument positions.
|
|
68
|
+
const bindProxy = new Proxy(originalBind, {
|
|
69
|
+
apply: (bind, callback, boundArguments) => {
|
|
70
|
+
if (isCapturing && !capture) {
|
|
71
|
+
try {
|
|
72
|
+
const queue = boundArguments.find(
|
|
73
|
+
(argument): argument is ReducerQueue =>
|
|
74
|
+
isReducerQueue(argument) && argument.lastRenderedReducer === renderMarker,
|
|
75
|
+
);
|
|
76
|
+
if (queue) {
|
|
77
|
+
const fiber = boundArguments.find(
|
|
78
|
+
(argument): argument is Fiber => isFiber(argument) && isFiber(argument.return),
|
|
79
|
+
);
|
|
80
|
+
if (fiber) capture = { fiber, queue };
|
|
81
|
+
}
|
|
82
|
+
} catch {}
|
|
83
|
+
}
|
|
84
|
+
return Reflect.apply(bind, callback, boundArguments);
|
|
85
|
+
},
|
|
86
|
+
});
|
|
63
87
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
88
|
+
try {
|
|
89
|
+
try {
|
|
90
|
+
Reflect.set(Function.prototype, "bind", bindProxy);
|
|
91
|
+
} catch {}
|
|
92
|
+
React.useReducer(renderMarker, undefined);
|
|
93
|
+
return capture;
|
|
94
|
+
} finally {
|
|
95
|
+
isCapturing = false;
|
|
96
|
+
capture = null;
|
|
97
|
+
try {
|
|
98
|
+
if (Function.prototype.bind === bindProxy) {
|
|
99
|
+
Reflect.set(Function.prototype, "bind", originalBind);
|
|
100
|
+
}
|
|
101
|
+
} catch {}
|
|
102
|
+
}
|
|
74
103
|
};
|
|
75
104
|
|
|
76
|
-
// HACK: React
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return
|
|
105
|
+
// HACK: React <16.13 attaches hooks after render; the shared reducer queue validates the root-walk fallback.
|
|
106
|
+
const getRenderingFiberFromRoot = (
|
|
107
|
+
{ fiber, queue }: FiberCapture,
|
|
108
|
+
renderMarker: RenderMarker,
|
|
109
|
+
): Fiber | null => {
|
|
110
|
+
if (queue?.lastRenderedReducer !== renderMarker) return null;
|
|
111
|
+
let rootFiber = fiber;
|
|
112
|
+
while (rootFiber.return) rootFiber = rootFiber.return;
|
|
113
|
+
const root = rootFiber.stateNode;
|
|
114
|
+
if (typeof root !== "object" || root === null || !("current" in root) || !isFiber(root.current)) {
|
|
115
|
+
return null;
|
|
87
116
|
}
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
);
|
|
117
|
+
const renderingRoot = root.current.alternate;
|
|
118
|
+
return traverseFiber(renderingRoot, (candidate) => {
|
|
119
|
+
if (candidate !== fiber && candidate !== fiber.alternate) return false;
|
|
120
|
+
let parent = candidate;
|
|
121
|
+
while (parent.return) parent = parent.return;
|
|
122
|
+
return parent === renderingRoot;
|
|
123
|
+
});
|
|
95
124
|
};
|
|
96
125
|
|
|
97
|
-
export const useFiber =
|
|
98
|
-
|
|
126
|
+
export const useFiber = (): Fiber | undefined => {
|
|
127
|
+
"use no memo";
|
|
128
|
+
const fiberRef = React.useRef<FiberCapture | null>(null);
|
|
129
|
+
const renderMarker: RenderMarker = (state) => state;
|
|
130
|
+
React.useMemo(() => renderMarker, [renderMarker]);
|
|
131
|
+
const devToolsFiber = fiberRef.current ? null : getDevToolsFiber(renderMarker);
|
|
132
|
+
const capture = captureReducerFiber(renderMarker, !fiberRef.current && !devToolsFiber);
|
|
133
|
+
if (devToolsFiber) {
|
|
134
|
+
fiberRef.current = {
|
|
135
|
+
fiber: devToolsFiber,
|
|
136
|
+
queue: getReducerQueue(devToolsFiber, renderMarker),
|
|
137
|
+
};
|
|
138
|
+
return devToolsFiber;
|
|
139
|
+
}
|
|
140
|
+
const knownCapture = capture ?? fiberRef.current;
|
|
141
|
+
if (!knownCapture) return undefined;
|
|
142
|
+
const knownFiber = knownCapture.fiber;
|
|
143
|
+
const fiber =
|
|
144
|
+
capture?.fiber ??
|
|
145
|
+
(hasRenderMarker(knownFiber, renderMarker)
|
|
146
|
+
? knownFiber
|
|
147
|
+
: knownFiber.alternate && hasRenderMarker(knownFiber.alternate, renderMarker)
|
|
148
|
+
? knownFiber.alternate
|
|
149
|
+
: getRenderingFiberFromRoot(knownCapture, renderMarker));
|
|
150
|
+
if (fiber) fiberRef.current = { fiber, queue: knownCapture.queue };
|
|
151
|
+
return fiber ?? undefined;
|
|
152
|
+
};
|