rerender-lens 0.1.0 → 0.2.0
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/CHANGELOG.md +95 -6
- package/README.md +156 -74
- package/dist/index.cjs +1051 -68
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +232 -22
- package/dist/index.d.ts +232 -22
- package/dist/index.js +1028 -10
- package/dist/index.js.map +1 -1
- package/package.json +10 -24
- package/dist/chunk-3YHI7BCU.js +0 -544
- package/dist/chunk-3YHI7BCU.js.map +0 -1
- package/dist/chunk-DOYB4MKH.cjs +0 -562
- package/dist/chunk-DOYB4MKH.cjs.map +0 -1
- package/dist/jsx-dev-runtime.cjs +0 -32
- package/dist/jsx-dev-runtime.cjs.map +0 -1
- package/dist/jsx-dev-runtime.d.cts +0 -8
- package/dist/jsx-dev-runtime.d.ts +0 -8
- package/dist/jsx-dev-runtime.js +0 -9
- package/dist/jsx-dev-runtime.js.map +0 -1
- package/dist/jsx-runtime.cjs +0 -34
- package/dist/jsx-runtime.cjs.map +0 -1
- package/dist/jsx-runtime.d.cts +0 -9
- package/dist/jsx-runtime.d.ts +0 -9
- package/dist/jsx-runtime.js +0 -10
- package/dist/jsx-runtime.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hook.ts","../src/notifiers.ts","../src/devtools.ts"],"names":["useRef","diffRecords","dispatch","buildReport","getState","useEffect","isReactElement","getDisplayName"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { Options } from './types';\nimport { diffRecords } from './diff';\nimport { buildReport } from './report';\nimport { dispatch, getState } from './state';\n\ntype HookOptions = Pick<Options, 'notifier' | 'silent' | 'console' | 'collapse' | 'logAll'>;\n\n/**\n * Track one component from the inside, without patching React:\n *\n * ```ts\n * function Row(props) {\n * useWhyRerender('Row', props);\n * ...\n * }\n * ```\n *\n * Pass any object of values you care about (props, selected state, context values).\n * Reports go to the console and to the notifier configured via `init`, or to\n * `options.notifier` when given.\n */\nexport function useWhyRerender(name: string, values: Record<string, unknown>, options?: HookOptions): void {\n const ref = useRef<{ committed: Record<string, unknown> | null; reported: boolean; count: number }>({\n committed: null,\n reported: false,\n count: 0,\n });\n const st = ref.current;\n // Compare against the last *committed* values. StrictMode renders twice before a\n // commit; `reported` makes sure the second pass does not produce a duplicate.\n if (st.committed && !st.reported) {\n st.reported = true;\n st.count++;\n const propChanges = diffRecords(st.committed, values);\n dispatch(\n buildReport({\n component: name,\n renderCount: st.count,\n prevProps: st.committed,\n nextProps: values,\n propChanges,\n }),\n options ? { ...getState().options, ...options } : undefined,\n );\n }\n useEffect(() => {\n st.committed = values;\n st.reported = false;\n });\n}\n","import type { Notifier, RenderReport } from './types';\n\nexport interface Collector {\n /** Every report received, in order. */\n readonly reports: RenderReport[];\n /** Reports where `avoidable` is true. */\n readonly avoidable: RenderReport[];\n /** Pass this to `init({ notifier })`. */\n readonly notifier: Notifier;\n clear(): void;\n /** Throws with a readable message if any avoidable re-render was recorded. */\n assertNoAvoidable(): void;\n}\n\n/** Collect reports in memory. Meant for tests. */\nexport function createCollector(): Collector {\n const reports: RenderReport[] = [];\n return {\n reports,\n get avoidable() {\n return reports.filter((r) => r.avoidable);\n },\n notifier: (r) => {\n reports.push(r);\n },\n clear: () => {\n reports.length = 0;\n },\n assertNoAvoidable() {\n const bad = reports.filter((r) => r.avoidable);\n if (bad.length === 0) return;\n const lines = bad.map((r) => ` <${r.component}> render #${r.renderCount}:\\n${r.reasons.map((x) => ` - ${x}`).join('\\n')}`);\n throw new Error(`${bad.length} avoidable re-render${bad.length === 1 ? '' : 's'} detected:\\n${lines.join('\\n')}`);\n },\n };\n}\n\nexport function combineNotifiers(...notifiers: Array<Notifier | undefined | null | false>): Notifier {\n const list = notifiers.filter((n): n is Notifier => typeof n === 'function');\n return (report) => {\n for (const n of list) n(report);\n };\n}\n","import type { Notifier, RenderReport } from './types';\nimport { isReactElement } from './diff';\nimport { getDisplayName } from './tracker';\n\nexport const DEVTOOLS_MARKER = '__rerenderLens' as const;\nexport const PROTOCOL_VERSION = 1;\n\nexport interface DevtoolsMessage {\n [DEVTOOLS_MARKER]: true;\n version: number;\n type: 'report' | 'clear' | 'hello';\n payload?: unknown;\n}\n\nexport interface DevtoolsNotifierOptions {\n /** How many reports to keep for `replay()`. Default 300. */\n bufferSize?: number;\n /** Where to post. Default `window`. */\n target?: Pick<Window, 'postMessage'>;\n /** Max serialization depth. Default 6. */\n maxDepth?: number;\n}\n\nexport interface DevtoolsBridge {\n /** Re-post every buffered report (a panel that opened late calls this). */\n replay(): void;\n clear(): void;\n readonly size: number;\n readonly version: number;\n}\n\ndeclare global {\n interface Window {\n __RERENDER_LENS_DEVTOOLS__?: DevtoolsBridge;\n }\n}\n\n/** Convert a report into a structured-clone-safe value (functions, elements, cycles removed). */\nexport function serialize(value: unknown, maxDepth = 6, seen: WeakSet<object> = new WeakSet(), depth = 0): unknown {\n if (value === null || value === undefined) return value;\n const t = typeof value;\n if (t === 'string' || t === 'boolean') return value;\n if (t === 'number') return Number.isFinite(value as number) ? value : String(value);\n if (t === 'bigint') return `${String(value)}n`;\n if (t === 'symbol') return String(value);\n if (t === 'function') return `ƒ ${(value as { name?: string }).name || 'anonymous'}`;\n const obj = value as object;\n if (seen.has(obj)) return '[Circular]';\n if (depth >= maxDepth) return '[…]';\n seen.add(obj);\n try {\n if (isReactElement(obj)) return `<${getDisplayName(obj.type)}>`;\n if (obj instanceof Date) return { $type: 'Date', value: obj.toISOString() };\n if (obj instanceof RegExp) return { $type: 'RegExp', value: String(obj) };\n if (obj instanceof Map) {\n return { $type: 'Map', entries: [...obj].map(([k, v]) => [serialize(k, maxDepth, seen, depth + 1), serialize(v, maxDepth, seen, depth + 1)]) };\n }\n if (obj instanceof Set) return { $type: 'Set', values: [...obj].map((v) => serialize(v, maxDepth, seen, depth + 1)) };\n if (Array.isArray(obj)) return obj.map((v) => serialize(v, maxDepth, seen, depth + 1));\n if (typeof Element !== 'undefined' && obj instanceof Element) return `<${obj.tagName.toLowerCase()}>`;\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(obj)) out[k] = serialize((obj as Record<string, unknown>)[k], maxDepth, seen, depth + 1);\n const proto = Object.getPrototypeOf(obj) as { constructor?: { name?: string } } | null;\n if (proto && proto !== Object.prototype && proto.constructor?.name) out.$type = proto.constructor.name;\n return out;\n } finally {\n seen.delete(obj);\n }\n}\n\n/**\n * A notifier that posts every report on `window` for a DevTools extension to pick up.\n * Also installs `window.__RERENDER_LENS_DEVTOOLS__` with `replay()` / `clear()`.\n */\nexport function createDevtoolsNotifier(options: DevtoolsNotifierOptions = {}): Notifier {\n const bufferSize = options.bufferSize ?? 300;\n const maxDepth = options.maxDepth ?? 6;\n const target = options.target ?? (typeof window !== 'undefined' ? window : undefined);\n const buffer: unknown[] = [];\n\n const post = (type: DevtoolsMessage['type'], payload?: unknown): void => {\n if (!target) return;\n const msg: DevtoolsMessage = { [DEVTOOLS_MARKER]: true, version: PROTOCOL_VERSION, type, payload };\n target.postMessage(msg, '*');\n };\n\n const bridge: DevtoolsBridge = {\n replay: () => {\n post('hello', { count: buffer.length });\n for (const p of buffer) post('report', p);\n },\n clear: () => {\n buffer.length = 0;\n post('clear');\n },\n get size() {\n return buffer.length;\n },\n version: PROTOCOL_VERSION,\n };\n if (typeof window !== 'undefined') window.__RERENDER_LENS_DEVTOOLS__ = bridge;\n post('hello', { count: 0 });\n\n return (report: RenderReport) => {\n const payload = serialize(report, maxDepth);\n buffer.push(payload);\n if (buffer.length > bufferSize) buffer.splice(0, buffer.length - bufferSize);\n post('report', payload);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/diff.ts","../src/report.ts","../src/state.ts","../src/fiber.ts","../src/tracker.ts","../src/hook.ts","../src/notifiers.ts","../src/overlay.ts","../src/version.ts","../src/devtools.ts"],"names":["counts","remember","isPlainObject","isGenuine","useRef","useEffect","out"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Why a single prop/state/hook value differs between two renders. */\nexport type ChangeKind =\n /** New reference, but deep-equal to the previous value. Avoidable. */\n | 'deep-equal'\n /** A new function with the same name/body shape. Almost always avoidable. */\n | 'function'\n /** A new React element that renders the same type with deep-equal props. Avoidable. */\n | 'element'\n /** The value genuinely changed. */\n | 'different'\n /** Key was added. */\n | 'added'\n /** Key was removed. */\n | 'removed';\n\nexport interface Change {\n /** Dot path from the root, e.g. `style.color` or `items[2]`. */\n path: string;\n kind: ChangeKind;\n prev: unknown;\n next: unknown;\n}\n\n/** What caused a re-render. */\nexport type RenderTrigger =\n /** At least one prop genuinely changed. */\n | 'props'\n /** Props are equal by value, but the parent re-rendered. Wrap in React.memo. */\n | 'parent'\n /** Own state (useState/useReducer/this.setState) changed. */\n | 'state'\n /** A non-state hook value (useContext, useSyncExternalStore) changed. */\n | 'hooks'\n /** More than one of the above. */\n | 'mixed';\n\nexport interface HookChange extends Change {\n /** `useState`, `useReducer`, `useContext`, `useSyncExternalStore`, or `state` when the exact hook is unknown. */\n hook: string;\n /** Position of the hook in call order (0-based). */\n index: number;\n /** `useContext` only: the component that renders the nearest matching Provider, and its ancestry. */\n provider?: { component: string | null; path: string[] };\n /** `useContext` only, object values: top-level keys whose value changed (shallow), and how many keys the value has. */\n changedKeys?: string[];\n totalKeys?: number;\n}\n\n/** Scheduler priority of the commit, as React reports it to the DevTools hook (transitions run at `normal`). */\nexport type CommitPriority = 'immediate' | 'user-blocking' | 'normal' | 'low' | 'idle';\n\nexport interface ParentInfo {\n /** Display name of the nearest ancestor component that also rendered in this commit. */\n name: string;\n /** Why that ancestor rendered. */\n trigger: RenderTrigger;\n}\n\n/** Where a component's element was created (React <= 18: `_debugSource`; React 19: parsed from `_debugStack`). */\nexport interface SourceLocation {\n fileName: string;\n lineNumber?: number;\n columnNumber?: number;\n}\n\nexport interface RenderReport {\n /** Display name of the tracked component. */\n component: string;\n /** Stable id of this component instance (fiber) across its lifetime. */\n instanceId: number;\n /** Monotonic id of the React commit that produced this report. Reports from one commit share it. 0 for `useWhyRerender`. */\n commitId: number;\n /** Priority React assigned to the commit: `immediate` for discrete input (clicks, keys), `user-blocking` for continuous input, `normal` for transitions and async updates. */\n commitPriority?: CommitPriority;\n /** Monotonic per-instance update count (1 = first update; mount is never reported). */\n renderCount: number;\n trigger: RenderTrigger;\n /** True when the re-render produced no genuine change in props, state, or hooks. */\n avoidable: boolean;\n props: { prev: Record<string, unknown>; next: Record<string, unknown> };\n propChanges: Change[];\n /** Class components only. */\n stateChanges: Change[];\n /** Function components: state hooks and contexts that changed. */\n hookChanges: HookChange[];\n /** Nearest ancestor that rendered in the same commit, or null when the update started here. */\n parent: ParentInfo | null;\n /** Component that created this element (dev builds only). */\n owner: string | null;\n /** Component ancestry from the root down to this component, display names only. */\n path: string[];\n /** True for `React.memo` components and `PureComponent` classes: props alone decide whether they re-render. */\n memoized: boolean;\n /** Time spent in this component's own render (children excluded), in ms, when React exposes it (dev/profiling builds). */\n selfDuration?: number;\n /** Time spent rendering this component and everything below it that rendered in the same commit, in ms. */\n treeDuration?: number;\n /** Source location of the element that rendered this component, when React exposes it (dev builds). */\n source?: SourceLocation;\n /** Human-readable explanations and suggested fixes. */\n reasons: string[];\n /** `performance.now()` (or `Date.now()`) when the report was produced. */\n time: number;\n}\n\nexport type Notifier = (report: RenderReport) => void;\n\nexport type ComponentMatcher = string | RegExp | ((displayName: string) => boolean);\n\nexport interface Options {\n /** Track every `React.memo`-wrapped component and every `PureComponent`. Default false. */\n trackAllMemoized?: boolean;\n /** Track every component, memoized or not. Noisy. Default false. */\n trackAllComponents?: boolean;\n /** Components to track by display name (string = exact match). */\n include?: ComponentMatcher[];\n /** Components never to track, even when marked. */\n exclude?: ComponentMatcher[];\n /** Diff hook state and contexts of function components. Default true. */\n trackHooks?: boolean;\n /** Report re-renders caused by genuine changes too, not only avoidable ones. Default false. */\n logAll?: boolean;\n /** Do not print to the console. Reports still reach `notifier`. Default false. */\n silent?: boolean;\n /** Receive every report. Combine several with `combineNotifiers`. */\n notifier?: Notifier;\n /** Use `console.groupCollapsed` instead of `console.group`. Default true. */\n collapse?: boolean;\n /** Console-like sink used for printing. Default `console`. */\n console?: Pick<Console, 'log' | 'group' | 'groupCollapsed' | 'groupEnd' | 'warn'>;\n /** Skip commits caused by Fast Refresh / hot module replacement. Default true. */\n ignoreHotReload?: boolean;\n /** Stop printing a component after this many reports (0 = unlimited). The notifier still receives them. Default 0. */\n maxReportsPerComponent?: number;\n}\n\n/** Marker static: `MyComponent.rerenderLens = true` opts a component in. */\nexport const MARKER = 'rerenderLens' as const;\n\nexport interface TrackableStatics {\n [MARKER]?: boolean;\n displayName?: string;\n name?: string;\n}\n","import type { Change, ChangeKind } from './types';\n\nconst REACT_ELEMENT = Symbol.for('react.element');\nconst REACT_TRANSITIONAL_ELEMENT = Symbol.for('react.transitional.element');\n\nexport function isReactElement(v: unknown): v is { type: unknown; props: Record<string, unknown>; key: unknown } {\n if (typeof v !== 'object' || v === null) return false;\n const t = (v as { $$typeof?: unknown }).$$typeof;\n return t === REACT_ELEMENT || t === REACT_TRANSITIONAL_ELEMENT;\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n if (typeof v !== 'object' || v === null) return false;\n const proto = Object.getPrototypeOf(v);\n return proto === Object.prototype || proto === null;\n}\n\ntype Seen = Map<object, Set<object>>;\n\nfunction remember(seen: Seen, a: object, b: object): boolean {\n let set = seen.get(a);\n if (!set) {\n set = new Set();\n seen.set(a, set);\n }\n if (set.has(b)) return true;\n set.add(b);\n return false;\n}\n\n/**\n * Structural equality that understands Map, Set, Date, RegExp, typed arrays,\n * React elements and cyclic references. Functions are equal only by reference.\n */\nexport function deepEqual(a: unknown, b: unknown, seen: Seen = new Map()): boolean {\n if (Object.is(a, b)) return true;\n if (typeof a !== typeof b) return false;\n if (typeof a !== 'object' || a === null || b === null) return false;\n const objA = a as object;\n const objB = b as object;\n\n if (remember(seen, objA, objB)) return true; // cycle: assume equal on this branch\n\n if (a instanceof Date) return b instanceof Date && a.getTime() === b.getTime();\n if (a instanceof RegExp) return b instanceof RegExp && a.source === b.source && a.flags === b.flags;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (!deepEqual(a[i], b[i], seen)) return false;\n return true;\n }\n if (Array.isArray(b)) return false;\n\n if (ArrayBuffer.isView(a)) {\n if (!ArrayBuffer.isView(b) || a.constructor !== b.constructor) return false;\n const ta = a as unknown as ArrayLike<number>;\n const tb = b as unknown as ArrayLike<number>;\n if (ta.length !== tb.length) return false;\n for (let i = 0; i < ta.length; i++) if (ta[i] !== tb[i]) return false;\n return true;\n }\n\n if (a instanceof Map) {\n if (!(b instanceof Map) || a.size !== b.size) return false;\n for (const [k, v] of a) {\n if (!b.has(k) || !deepEqual(v, b.get(k), seen)) return false;\n }\n return true;\n }\n if (a instanceof Set) {\n if (!(b instanceof Set) || a.size !== b.size) return false;\n outer: for (const v of a) {\n if (b.has(v)) continue;\n for (const w of b) if (deepEqual(v, w, seen)) continue outer;\n return false;\n }\n return true;\n }\n\n if (isReactElement(a)) {\n if (!isReactElement(b)) return false;\n return a.type === b.type && a.key === b.key && deepEqual(a.props, b.props, seen);\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n const ka = Object.keys(a);\n const kb = Object.keys(b);\n if (ka.length !== kb.length) return false;\n for (const k of ka) {\n if (!Object.prototype.hasOwnProperty.call(b, k)) return false;\n if (!deepEqual(a[k], (b as Record<string, unknown>)[k], seen)) return false;\n }\n return true;\n }\n\n // Class instances, DOM nodes, promises, etc.: reference equality only.\n return false;\n}\n\n/** Classify why two values differ. Assumes `!Object.is(prev, next)`. */\nexport function classify(prev: unknown, next: unknown): ChangeKind {\n if (typeof prev === 'function' && typeof next === 'function') {\n return prev.name === next.name && prev.toString() === next.toString() ? 'function' : 'different';\n }\n if (isReactElement(prev) && isReactElement(next)) {\n return deepEqual(prev, next) ? 'element' : 'different';\n }\n return deepEqual(prev, next) ? 'deep-equal' : 'different';\n}\n\nfunction joinPath(base: string, key: string | number): string {\n if (typeof key === 'number') return `${base}[${key}]`;\n if (base === '') return key;\n return /^[A-Za-z_$][\\w$]*$/.test(key) ? `${base}.${key}` : `${base}[${JSON.stringify(key)}]`;\n}\n\n/**\n * Shallow-diff two records. Every changed key produces exactly one Change;\n * for `different` values that are plain objects/arrays, the nested path that\n * actually differs is reported in `path` to make the console output actionable.\n */\nexport function diffRecords(\n prev: Record<string, unknown> | undefined | null,\n next: Record<string, unknown> | undefined | null,\n basePath = '',\n): Change[] {\n const p = prev ?? {};\n const n = next ?? {};\n const changes: Change[] = [];\n const keys = new Set([...Object.keys(p), ...Object.keys(n)]);\n for (const key of keys) {\n const inPrev = Object.prototype.hasOwnProperty.call(p, key);\n const inNext = Object.prototype.hasOwnProperty.call(n, key);\n const path = joinPath(basePath, key);\n if (inPrev && !inNext) {\n changes.push({ path, kind: 'removed', prev: p[key], next: undefined });\n continue;\n }\n if (!inPrev && inNext) {\n changes.push({ path, kind: 'added', prev: undefined, next: n[key] });\n continue;\n }\n const a = p[key];\n const b = n[key];\n if (Object.is(a, b)) continue;\n const kind = classify(a, b);\n if (kind === 'different') {\n changes.push({ path: firstDifferentPath(a, b, path), kind, prev: a, next: b });\n } else {\n changes.push({ path, kind, prev: a, next: b });\n }\n }\n return changes;\n}\n\n/** Walk plain objects/arrays to find the deepest path where the values first differ. */\nexport function firstDifferentPath(a: unknown, b: unknown, path: string, depth = 0): string {\n if (depth > 8) return path;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return `${path}.length`;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return firstDifferentPath(a[i], b[i], joinPath(path, i), depth + 1);\n }\n return path;\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n for (const k of keys) {\n if (!deepEqual(a[k], b[k])) return firstDifferentPath(a[k], b[k], joinPath(path, k), depth + 1);\n }\n return path;\n }\n return path;\n}\n","import type { Change, CommitPriority, HookChange, Options, ParentInfo, RenderReport, RenderTrigger, SourceLocation } from './types';\n\nconst now = (): number =>\n typeof performance !== 'undefined' && typeof performance.now === 'function' ? performance.now() : Date.now();\n\nexport interface BuildInput {\n component: string;\n instanceId?: number;\n renderCount: number;\n prevProps: Record<string, unknown>;\n nextProps: Record<string, unknown>;\n propChanges: Change[];\n stateChanges?: Change[];\n hookChanges?: HookChange[];\n parent?: ParentInfo | null;\n owner?: string | null;\n path?: string[];\n /** Default true: `useWhyRerender` and the console output assume the component decides on props alone. */\n memoized?: boolean;\n selfDuration?: number;\n treeDuration?: number;\n commitId?: number;\n commitPriority?: CommitPriority;\n source?: SourceLocation;\n}\n\nconst isGenuine = (c: Change): boolean => c.kind === 'different' || c.kind === 'added' || c.kind === 'removed';\n\n/** `children` re-created in the parent's render: the classic memo-defeater, with its own advice. */\nconst isChildren = (change: Change): boolean => change.path === 'children';\n\nexport function fixFor(change: Change): string {\n if (isChildren(change) && (change.kind === 'element' || change.kind === 'deep-equal')) {\n return `lift the children out of the parent's render: memoize them with useMemo, hoist static elements to module scope, or render them from a component that does not re-render`;\n }\n switch (change.kind) {\n case 'function':\n return `wrap it in useCallback (or hoist it out of the parent's render)`;\n case 'element':\n return `memoize the element with useMemo, or pass it as children from a stable parent`;\n case 'deep-equal':\n return Array.isArray(change.next)\n ? `memoize the array with useMemo (same items, new reference)`\n : `memoize the object with useMemo, or hoist it to module scope if it is constant`;\n default:\n return '';\n }\n}\n\nfunction describe(change: Change): string {\n if (isChildren(change) && (change.kind === 'element' || change.kind === 'deep-equal')) {\n return `children are new React elements with the same types and props on every render of the parent`;\n }\n switch (change.kind) {\n case 'deep-equal':\n return `prop \"${change.path}\" is a new reference but deep-equal to the previous value`;\n case 'function':\n return `prop \"${change.path}\" is a new function instance on every render`;\n case 'element':\n return `prop \"${change.path}\" is a new React element with the same type and props`;\n case 'different':\n return `prop \"${change.path}\" changed`;\n case 'added':\n return `prop \"${change.path}\" was added`;\n case 'removed':\n return `prop \"${change.path}\" was removed`;\n }\n}\n\nexport function buildReport(input: BuildInput): RenderReport {\n const stateChanges = input.stateChanges ?? [];\n const hookChanges = input.hookChanges ?? [];\n const isStateHook = (h: HookChange): boolean => h.hook === 'useState' || h.hook === 'useReducer';\n const genuineProps = input.propChanges.some(isGenuine);\n const genuineState = stateChanges.some(isGenuine) || hookChanges.some((h) => isStateHook(h) && isGenuine(h));\n const genuineHooks = hookChanges.some((h) => !isStateHook(h) && isGenuine(h));\n const causes = [genuineProps && 'props', genuineState && 'state', genuineHooks && 'hooks'].filter(Boolean) as RenderTrigger[];\n\n let trigger: RenderTrigger;\n if (causes.length === 0) trigger = 'parent';\n else if (causes.length === 1) trigger = causes[0]!;\n else trigger = 'mixed';\n\n const avoidable = trigger === 'parent';\n const reasons: string[] = [];\n\n if (avoidable && input.propChanges.length === 0 && stateChanges.length === 0 && hookChanges.length === 0) {\n const who = input.parent ? `<${input.parent.name}> re-rendered (${describeTrigger(input.parent.trigger)})` : 'its parent re-rendered';\n reasons.push(`re-rendered with identical props because ${who}. Wrap \"${input.component}\" in React.memo (or extend PureComponent).`);\n } else if (avoidable && input.parent) {\n reasons.push(`caused by <${input.parent.name}> re-rendering (${describeTrigger(input.parent.trigger)}).`);\n }\n for (const c of input.propChanges) {\n const fix = fixFor(c);\n reasons.push(fix ? `${describe(c)}: ${fix}.` : `${describe(c)}.`);\n }\n const memoized = input.memoized !== false;\n if (avoidable && !memoized && input.propChanges.length > 0) {\n reasons.push(\n `\"${input.component}\" is not memoized, so fixing the props alone will not stop this re-render: also wrap it in React.memo (or extend PureComponent).`,\n );\n }\n for (const c of stateChanges) {\n if (isGenuine(c)) reasons.push(`state \"${c.path}\" changed.`);\n else reasons.push(`setState was called with a value deep-equal to the current \"${c.path}\" (new reference, same contents).`);\n }\n for (const c of hookChanges) {\n if (c.hook === 'useContext' && isGenuine(c)) {\n const where = c.provider && c.provider.component ? ` (provided by <${c.provider.component}>)` : '';\n const keys =\n c.changedKeys && typeof c.totalKeys === 'number' && c.changedKeys.length > 0 && c.changedKeys.length < c.totalKeys\n ? `: only ${c.changedKeys.map((k) => `\"${k}\"`).join(', ')} of ${c.totalKeys} keys changed, yet every consumer re-renders. Split the context or memoize the slices consumers read`\n : '';\n reasons.push(`${c.path} changed${where}${keys}.`);\n } else if (isGenuine(c)) reasons.push(`${c.hook} #${c.index} changed.`);\n else if (isStateHook(c))\n reasons.push(`${c.hook} #${c.index} was set to a value deep-equal to the current one (new reference, same contents): reuse the existing object or bail out before calling the setter.`);\n else reasons.push(`${c.hook} #${c.index} returned a new reference that is deep-equal to the previous value: memoize the context/store value where it is produced.`);\n }\n\n const report: RenderReport = {\n component: input.component,\n instanceId: input.instanceId ?? 0,\n commitId: input.commitId ?? 0,\n renderCount: input.renderCount,\n trigger,\n avoidable,\n memoized,\n props: { prev: input.prevProps, next: input.nextProps },\n propChanges: input.propChanges,\n stateChanges,\n hookChanges,\n parent: input.parent ?? null,\n owner: input.owner ?? null,\n path: input.path ?? [],\n reasons,\n time: now(),\n };\n if (input.selfDuration !== undefined) report.selfDuration = input.selfDuration;\n if (input.treeDuration !== undefined) report.treeDuration = input.treeDuration;\n if (input.commitPriority) report.commitPriority = input.commitPriority;\n if (input.source) report.source = input.source;\n return report;\n}\n\nfunction describeTrigger(t: RenderTrigger): string {\n switch (t) {\n case 'props':\n return 'its props changed';\n case 'state':\n return 'its state changed';\n case 'hooks':\n return 'a context or store it reads changed';\n case 'mixed':\n return 'its props and state changed';\n default:\n return 'its own parent re-rendered';\n }\n}\n\nconst KIND_LABEL: Record<Change['kind'], string> = {\n 'deep-equal': 'equal by value',\n function: 'new function',\n element: 'equal element',\n different: 'changed',\n added: 'added',\n removed: 'removed',\n};\n\nexport function summarize(report: RenderReport): string {\n const counts = new Map<string, number>();\n for (const c of [...report.propChanges, ...report.stateChanges, ...report.hookChanges]) {\n counts.set(c.kind, (counts.get(c.kind) ?? 0) + 1);\n }\n const parts = [...counts].map(([kind, n]) => `${n} ${KIND_LABEL[kind as Change['kind']]}`);\n if (parts.length === 0) parts.push('no changes');\n return parts.join(', ');\n}\n\n/** Default notifier: prints a console group per report. */\nexport function printReport(report: RenderReport, options: Options): void {\n const c = options.console ?? console;\n const open = options.collapse === false ? c.group : c.groupCollapsed;\n const verdict = report.avoidable ? 'avoidable re-render' : `re-render (${report.trigger})`;\n open.call(c, `[rerender-lens] <${report.component}> ${verdict}: ${summarize(report)}`);\n for (const r of report.reasons) c.log(`- ${r}`);\n if (report.path.length) c.log(`at ${[...report.path, report.component].join(' > ')}`);\n for (const ch of [...report.propChanges, ...report.stateChanges, ...report.hookChanges]) {\n c.log(`${ch.path} (${KIND_LABEL[ch.kind]})`, { prev: ch.prev, next: ch.next });\n }\n c.log('props', report.props);\n c.groupEnd();\n}\n","import type { Options, RenderReport } from './types';\nimport { printReport } from './report';\n\nexport interface LensState {\n options: Options;\n enabled: boolean;\n /** Per-component print counts for `maxReportsPerComponent`. */\n printed: Map<string, number>;\n /** Restores the previous `onCommitFiberRoot`. */\n detach: (() => void) | null;\n nextInstanceId: number;\n nextCommitId: number;\n warnedOnce: Set<string>;\n /** Roots React scheduled work for (dev only, via `onScheduleFiberRoot`) and commits observed. Their gap hints at renders that never committed. */\n scheduled: number;\n commits: number;\n}\n\nconst KEY = Symbol.for('rerender-lens.state');\n\n/** State lives on globalThis so the ESM and CJS builds share one instance. */\nexport function getState(): LensState {\n const g = globalThis as unknown as Record<symbol, LensState | undefined>;\n let s = g[KEY];\n if (!s) {\n s = { options: {}, enabled: false, printed: new Map(), detach: null, nextInstanceId: 1, nextCommitId: 1, warnedOnce: new Set(), scheduled: 0, commits: 0 };\n g[KEY] = s;\n }\n return s;\n}\n\nexport function warnOnce(key: string, message: string): void {\n const s = getState();\n if (s.warnedOnce.has(key)) return;\n s.warnedOnce.add(key);\n (s.options.console ?? console).warn(`[rerender-lens] ${message}`);\n}\n\n/** Print (unless silent / not avoidable / muted) and forward to the notifier. */\nexport function dispatch(report: RenderReport, override?: Options): void {\n const s = getState();\n const options: Options = override ? { ...s.options, ...override } : s.options;\n if (!options.silent && (report.avoidable || options.logAll)) {\n const max = options.maxReportsPerComponent ?? 0;\n const n = (s.printed.get(report.component) ?? 0) + 1;\n s.printed.set(report.component, n);\n if (max <= 0 || n <= max) {\n printReport(report, options);\n } else if (n === max + 1) {\n (options.console ?? console).log(\n `[rerender-lens] <${report.component}> reached maxReportsPerComponent (${max}); further reports are not printed.`,\n );\n }\n }\n if (options.notifier) {\n try {\n options.notifier(report);\n } catch (err) {\n (options.console ?? console).warn('[rerender-lens] notifier threw', err);\n }\n }\n}\n","/**\n * Fiber-tree inspection. Runs after every React commit via the DevTools global\n * hook, exactly like React DevTools itself. Element types are never touched, so\n * Fast Refresh, memo comparators and component identity all stay intact.\n */\nimport type { Change, CommitPriority, HookChange, ParentInfo, RenderTrigger, SourceLocation } from './types';\nimport { classify, diffRecords } from './diff';\nimport { buildReport } from './report';\nimport { dispatch, getState, warnOnce } from './state';\nimport { getDisplayName, shouldTrack } from './tracker';\n\n// React work tags (stable since 16.9).\nconst FunctionComponent = 0;\nconst ClassComponent = 1;\nconst HostRoot = 3;\nconst HostComponent = 5;\nconst ContextProvider = 10;\nconst ForwardRef = 11;\nconst MemoComponent = 14;\nconst SimpleMemoComponent = 15;\nconst PerformedWork = 1;\n\nexport interface ContextDependency {\n context: { displayName?: string; _currentValue?: unknown };\n memoizedValue: unknown;\n next: ContextDependency | null;\n}\n\nexport interface HookNode {\n memoizedState: unknown;\n queue: { lastRenderedReducer?: (...a: unknown[]) => unknown; dispatch?: unknown; getSnapshot?: unknown } | null;\n next: HookNode | null;\n}\n\nexport interface Fiber {\n tag: number;\n key: unknown;\n type: unknown;\n elementType: unknown;\n stateNode: unknown;\n memoizedProps: Record<string, unknown> | null;\n memoizedState: unknown;\n alternate: Fiber | null;\n child: Fiber | null;\n sibling: Fiber | null;\n return: Fiber | null;\n flags?: number;\n /** React 16 name for `flags`. */\n effectTag?: number;\n dependencies?: { firstContext: ContextDependency | null } | null;\n _debugOwner?: { type?: unknown; name?: string } | null;\n _debugHookTypes?: string[] | null;\n /** React <= 18 with the JSX dev transform. */\n _debugSource?: { fileName?: string; lineNumber?: number; columnNumber?: number } | null;\n /** React 19: an Error captured where the element was created. */\n _debugStack?: { stack?: string } | string | null;\n actualDuration?: number;\n}\n\nexport interface FiberRoot {\n current: Fiber;\n}\n\n/** What `react-dom` passes to `hook.inject`. */\nexport interface RendererInfo {\n version?: string;\n /** 1 = development build, 0 = production build. */\n bundleType?: number;\n rendererPackageName?: string;\n}\n\nexport interface DevtoolsHook {\n renderers: Map<number, unknown>;\n supportsFiber: boolean;\n inject(renderer: unknown): number;\n onCommitFiberRoot?: (id: number, root: FiberRoot, priority?: unknown, didError?: boolean) => void;\n onCommitFiberUnmount?: (id: number, fiber: Fiber) => void;\n onScheduleFiberRoot?: (id: number, root: FiberRoot, children: unknown) => void;\n onPostCommitFiberRoot?: (id: number, root: FiberRoot) => void;\n isDisabled?: boolean;\n}\n\nconst HOOK = '__REACT_DEVTOOLS_GLOBAL_HOOK__';\n\n/**\n * Make sure `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` exists. React DOM only looks\n * for it once, when the `react-dom` module is evaluated, so this must run before\n * that unless the React DevTools extension or Fast Refresh already created it.\n */\nexport function ensureDevtoolsHook(): DevtoolsHook {\n const g = globalThis as unknown as Record<string, DevtoolsHook | undefined>;\n let hook = g[HOOK];\n if (!hook) {\n let nextId = 0;\n const renderers = new Map<number, unknown>();\n hook = {\n renderers,\n supportsFiber: true,\n inject(renderer) {\n const id = ++nextId;\n renderers.set(id, renderer);\n return id;\n },\n onCommitFiberRoot() {},\n onCommitFiberUnmount() {},\n onScheduleFiberRoot() {},\n onPostCommitFiberRoot() {},\n };\n g[HOOK] = hook;\n }\n return hook;\n}\n\n/**\n * Renderers seen through `hook.inject`. Hooks created by react-refresh (Vite's preamble) never\n * fill `hook.renderers`, so `attach` wraps `inject` and records what react-dom registers.\n */\nconst capturedRenderers = new Map<number, RendererInfo>();\nconst INJECT_WRAPPED = Symbol.for('rerender-lens.injectWrapped');\n\nfunction pickRenderer(r: unknown): RendererInfo {\n const info = (r ?? {}) as RendererInfo;\n return { version: info.version, bundleType: info.bundleType, rendererPackageName: info.rendererPackageName };\n}\n\nfunction wrapInject(hook: DevtoolsHook): void {\n const h = hook as DevtoolsHook & { [INJECT_WRAPPED]?: boolean };\n if (h[INJECT_WRAPPED] || typeof hook.inject !== 'function') return;\n const original = hook.inject;\n hook.inject = function (this: unknown, renderer: unknown) {\n const id = original.call(this, renderer);\n capturedRenderers.set(typeof id === 'number' ? id : capturedRenderers.size + 1, pickRenderer(renderer));\n return id;\n };\n h[INJECT_WRAPPED] = true;\n}\n\n/** Start observing commits. Returns a function that stops observing. */\nexport function attach(): () => void {\n const hook = ensureDevtoolsHook();\n wrapInject(hook);\n const previous = hook.onCommitFiberRoot;\n const patched: DevtoolsHook['onCommitFiberRoot'] = function (this: unknown, id, root, priority, didError) {\n try {\n onCommit(root, priorityLabel(priority));\n } catch (err) {\n warnOnce('commit', `failed to inspect a commit: ${String(err)}`);\n }\n if (typeof previous === 'function') return previous.call(this, id, root, priority, didError);\n };\n hook.onCommitFiberRoot = patched;\n // Dev builds announce every scheduled root; compared with commits it shows work that never committed.\n const previousSchedule = hook.onScheduleFiberRoot;\n const patchedSchedule: DevtoolsHook['onScheduleFiberRoot'] = function (this: unknown, id, root, children) {\n getState().scheduled++;\n if (typeof previousSchedule === 'function') return previousSchedule.call(this, id, root, children);\n };\n hook.onScheduleFiberRoot = patchedSchedule;\n return () => {\n if (hook.onCommitFiberRoot === patched) hook.onCommitFiberRoot = previous;\n if (hook.onScheduleFiberRoot === patchedSchedule) hook.onScheduleFiberRoot = previousSchedule;\n };\n}\n\n/** React passes a Scheduler priority (1 immediate ... 5 idle) as the third argument of `onCommitFiberRoot`. */\nexport function priorityLabel(priority: unknown): CommitPriority | undefined {\n switch (priority) {\n case 1:\n return 'immediate';\n case 2:\n return 'user-blocking';\n case 3:\n return 'normal';\n case 4:\n return 'low';\n case 5:\n return 'idle';\n default:\n return undefined;\n }\n}\n\n/** The renderers React registered on the hook (version and dev/prod bundle type). */\nexport function getRenderers(): RendererInfo[] {\n const g = globalThis as unknown as Record<string, DevtoolsHook | undefined>;\n const hook = g[HOOK];\n const byId = new Map<number, RendererInfo>(capturedRenderers);\n if (hook && hook.renderers && typeof hook.renderers.forEach === 'function') {\n hook.renderers.forEach((r, id) => {\n if (!byId.has(id)) byId.set(id, pickRenderer(r));\n });\n }\n return [...byId.values()];\n}\n\n/** True when every registered React renderer is a production build (names minified, no hook labels). */\nexport function isProductionReact(): boolean {\n const renderers = getRenderers();\n return renderers.length > 0 && renderers.every((r) => r.bundleType === 0);\n}\n\nconst flagsOf = (f: Fiber): number => f.flags ?? f.effectTag ?? 0;\n\nconst isComponentTag = (tag: number): boolean =>\n tag === FunctionComponent || tag === ClassComponent || tag === ForwardRef || tag === MemoComponent || tag === SimpleMemoComponent;\n\n/** `React.memo` fibers, or class instances that extend `PureComponent`. */\nexport function isMemoizedFiber(fiber: Fiber): boolean {\n if (fiber.tag === MemoComponent || fiber.tag === SimpleMemoComponent) return true;\n if (fiber.tag === ClassComponent) {\n const inst = fiber.stateNode as { isPureReactComponent?: boolean } | null;\n return !!(inst && inst.isPureReactComponent);\n }\n return false;\n}\n\n/**\n * Timing from React's profiler fields. `actualDuration` covers the subtree; children that bailed\n * out were reset to 0 by `createWorkInProgress`, so subtracting the direct children leaves self time.\n */\nexport function durationsOf(fiber: Fiber): { self: number; tree: number } | null {\n if (typeof fiber.actualDuration !== 'number') return null;\n const tree = fiber.actualDuration;\n let children = 0;\n for (let c = fiber.child; c; c = c.sibling) if (typeof c.actualDuration === 'number') children += c.actualDuration;\n return { self: Math.max(0, tree - children), tree };\n}\n\n/** The value React DevTools would show as the fiber's type (memo/forwardRef outer object when present). */\nexport function fiberType(fiber: Fiber): unknown {\n return fiber.elementType ?? fiber.type;\n}\n\nexport function fiberName(fiber: Fiber): string {\n return getDisplayName(fiberType(fiber));\n}\n\n/** Was this fiber's component function/class executed in the commit that produced it? */\nfunction didRender(fiber: Fiber): boolean {\n return (flagsOf(fiber) & PerformedWork) !== 0;\n}\n\n/** True when Fast Refresh swapped the component code for this fiber in the last render. */\nfunction isHotSwapped(fiber: Fiber, alt: Fiber): boolean {\n return fiber.type !== alt.type;\n}\n\n// Per-fiber bookkeeping. Fibers alternate between two objects, so look up both.\nconst counts = new WeakMap<Fiber, number>();\nconst ids = new WeakMap<Fiber, number>();\n/** Reverse lookup for the DevTools bridge (highlight, inspect). Weak so unmounted fibers can be collected. */\nconst fibersById = new Map<number, WeakRef<Fiber>>();\nconst hasWeakRef = typeof WeakRef === 'function';\n\nfunction remember(id: number, fiber: Fiber): void {\n if (!hasWeakRef) return;\n fibersById.set(id, new WeakRef(fiber));\n if (fibersById.size > 5000) {\n for (const [k, ref] of fibersById) if (!ref.deref()) fibersById.delete(k);\n }\n}\n\n/** Instance id of a fiber if it has already been reported, without assigning one. */\nexport function instanceIdOf(fiber: Fiber): number | undefined {\n return ids.get(fiber) ?? (fiber.alternate ? ids.get(fiber.alternate) : undefined);\n}\n\n/** The most recent fiber object known for an instance id, or null when it was unmounted or never reported. */\nexport function fiberById(id: number): Fiber | null {\n const f = fibersById.get(id)?.deref() ?? null;\n if (!f) return null;\n // Prefer the alternate when it is newer (React swaps the pair on every render).\n const alt = f.alternate;\n if (alt && counts.get(alt) !== undefined && (counts.get(alt) ?? 0) > (counts.get(f) ?? 0)) return alt;\n return f;\n}\n\nfunction instanceId(fiber: Fiber): number {\n const existing = instanceIdOf(fiber);\n if (existing !== undefined) {\n ids.set(fiber, existing);\n remember(existing, fiber);\n return existing;\n }\n const s = getState();\n const id = s.nextInstanceId++;\n ids.set(fiber, id);\n remember(id, fiber);\n return id;\n}\n\n/** DOM nodes rendered directly by a component fiber (stops at the first host node on every branch). */\nexport function hostNodesOf(fiber: Fiber, limit = 50): Element[] {\n const out: Element[] = [];\n const stack: Fiber[] = [];\n for (let c = fiber.child; c; c = c.sibling) stack.push(c);\n while (stack.length && out.length < limit) {\n const f = stack.pop()!;\n if (f.tag === HostComponent) {\n if (typeof Element !== 'undefined' && f.stateNode instanceof Element) out.push(f.stateNode);\n continue;\n }\n for (let c = f.child; c; c = c.sibling) stack.push(c);\n }\n return out;\n}\n\n/** The fiber React attached to a DOM node, if any. */\nexport function fiberForNode(node: unknown): Fiber | null {\n if (!node || typeof node !== 'object') return null;\n const key = Object.keys(node).find((k) => k.startsWith('__reactFiber$') || k.startsWith('__reactInternalInstance$'));\n return key ? ((node as Record<string, Fiber | null>)[key] ?? null) : null;\n}\n\n/** Nearest component fiber at or above `fiber`. */\nexport function nearestComponent(fiber: Fiber | null): Fiber | null {\n let f: Fiber | null = fiber;\n while (f && f.tag !== HostRoot) {\n if (isComponentTag(f.tag)) return f;\n f = f.return;\n }\n return null;\n}\n\nconst INTERNAL_FRAME = /react-dom|react_jsx|jsx-(dev-)?runtime|\\/react\\/|node_modules\\/react|react-stack-bottom-frame|react_stack_bottom_frame|scheduler/;\n\n/** Parse the first application frame out of a stack string (React 19 `_debugStack`). */\nexport function parseStackLocation(stack: string): SourceLocation | undefined {\n for (const line of stack.split('\\n')) {\n const m = /(?:at\\s+(?:.*?\\s+)?\\(?|@)?((?:https?|file|webpack|vite|blob):[^\\s()]+?):(\\d+):(\\d+)\\)?\\s*$/.exec(line.trim());\n if (!m || !m[1] || INTERNAL_FRAME.test(m[1])) continue;\n return { fileName: m[1], lineNumber: Number(m[2]), columnNumber: Number(m[3]) };\n }\n return undefined;\n}\n\nexport function sourceOf(fiber: Fiber): SourceLocation | undefined {\n const src = fiber._debugSource;\n if (src && typeof src.fileName === 'string') {\n const out: SourceLocation = { fileName: src.fileName };\n if (typeof src.lineNumber === 'number') out.lineNumber = src.lineNumber;\n if (typeof src.columnNumber === 'number') out.columnNumber = src.columnNumber;\n return out;\n }\n const st = fiber._debugStack;\n const text = typeof st === 'string' ? st : st && typeof st.stack === 'string' ? st.stack : null;\n return text ? parseStackLocation(text) : undefined;\n}\n\nfunction bumpCount(fiber: Fiber): number {\n const prev = counts.get(fiber) ?? (fiber.alternate ? counts.get(fiber.alternate) : undefined) ?? 0;\n const n = prev + 1;\n counts.set(fiber, n);\n return n;\n}\n\nfunction componentPath(fiber: Fiber): string[] {\n const path: string[] = [];\n let f: Fiber | null = fiber.return;\n while (f && f.tag !== HostRoot) {\n if (isComponentTag(f.tag)) path.unshift(fiberName(f));\n f = f.return;\n }\n return path;\n}\n\nfunction ownerName(fiber: Fiber): string | null {\n const owner = fiber._debugOwner;\n if (!owner) return null;\n if (owner.type !== undefined) return getDisplayName(owner.type);\n return typeof owner.name === 'string' ? owner.name : null;\n}\n\nconst isStateNode = (n: HookNode): boolean => !!n.queue && typeof n.queue.lastRenderedReducer === 'function';\nconst isStoreNode = (n: HookNode): boolean => !!n.queue && typeof n.queue.getSnapshot === 'function';\n\nfunction hookLabel(node: HookNode): string {\n if (isStoreNode(node)) return 'useSyncExternalStore';\n if (isStateNode(node)) {\n const r = node.queue!.lastRenderedReducer!;\n return r.name === 'basicStateReducer' ? 'useState' : 'useReducer';\n }\n return 'state';\n}\n\n/** Hooks that never create a node in `memoizedState`. */\nconst NODELESS_HOOKS = new Set(['useContext', 'useDebugValue', 'use']);\n\n/** Diff the state-bearing hook nodes of a function component. */\nfunction diffHooks(fiber: Fiber, alt: Fiber): HookChange[] {\n const out: HookChange[] = [];\n if (fiber.tag === ClassComponent) return out;\n let a = alt.memoizedState as HookNode | null;\n let b = fiber.memoizedState as HookNode | null;\n if (!a || !b || typeof b !== 'object' || !('next' in b)) return out;\n\n // Only trust the dev hook-type list when it maps 1:1 onto the node list.\n const types = fiber._debugHookTypes?.filter((t) => !NODELESS_HOOKS.has(t));\n let nodeCount = 0;\n for (let n: HookNode | null = b; n; n = n.next) nodeCount++;\n const labels = types && types.length === nodeCount ? types : null;\n\n let i = 0;\n while (a && b) {\n if ((isStateNode(b) || isStoreNode(b)) && !Object.is(a.memoizedState, b.memoizedState)) {\n const hook = labels?.[i] ?? hookLabel(b);\n out.push({\n path: `${hook}#${i}`,\n hook,\n index: i,\n kind: classify(a.memoizedState, b.memoizedState),\n prev: a.memoizedState,\n next: b.memoizedState,\n });\n }\n a = a.next;\n b = b.next;\n i++;\n }\n return out;\n}\n\n/** The nearest ancestor Provider fiber of `context` (React <= 18: `type._context`; React 19: the context object itself is the provider type). */\nexport function findProvider(fiber: Fiber, context: unknown): Fiber | null {\n let f: Fiber | null = fiber.return;\n while (f && f.tag !== HostRoot) {\n if (f.tag === ContextProvider) {\n const t = f.type as { _context?: unknown } | null;\n if (t === context || (t && typeof t === 'object' && t._context === context)) return f;\n }\n f = f.return;\n }\n return null;\n}\n\nconst isPlainObject = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && v !== null && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;\n\n/** Diff the contexts this fiber reads. */\nfunction diffContexts(fiber: Fiber, alt: Fiber): HookChange[] {\n const out: HookChange[] = [];\n let a = alt.dependencies?.firstContext ?? null;\n let b = fiber.dependencies?.firstContext ?? null;\n let i = 0;\n while (a && b) {\n if (a.context === b.context && !Object.is(a.memoizedValue, b.memoizedValue)) {\n const name = b.context.displayName ?? 'Context';\n const change: HookChange = {\n path: `useContext(${name})`,\n hook: 'useContext',\n index: i,\n kind: classify(a.memoizedValue, b.memoizedValue),\n prev: a.memoizedValue,\n next: b.memoizedValue,\n };\n const provider = findProvider(fiber, b.context);\n if (provider) {\n const path = componentPath(provider);\n change.provider = { component: path[path.length - 1] ?? null, path };\n }\n if (isPlainObject(a.memoizedValue) && isPlainObject(b.memoizedValue)) {\n const prev = a.memoizedValue;\n const next = b.memoizedValue;\n const keys = new Set([...Object.keys(prev), ...Object.keys(next)]);\n change.changedKeys = [...keys].filter((k) => !Object.is(prev[k], next[k]));\n change.totalKeys = keys.size;\n }\n out.push(change);\n }\n a = a.next;\n b = b.next;\n i++;\n }\n return out;\n}\n\nconst isGenuine = (c: Change): boolean => c.kind === 'different' || c.kind === 'added' || c.kind === 'removed';\n\ninterface Analysis {\n propChanges: Change[];\n stateChanges: Change[];\n hookChanges: HookChange[];\n trigger: RenderTrigger;\n}\n\nfunction analyze(fiber: Fiber, alt: Fiber, trackHooks: boolean): Analysis {\n const prevProps = alt.memoizedProps ?? {};\n const nextProps = fiber.memoizedProps ?? {};\n const propChanges = prevProps === nextProps ? [] : diffRecords(prevProps, nextProps);\n let stateChanges: Change[] = [];\n let hookChanges: HookChange[] = [];\n if (fiber.tag === ClassComponent) {\n if (alt.memoizedState !== fiber.memoizedState) {\n stateChanges = diffRecords(\n (alt.memoizedState as Record<string, unknown>) ?? {},\n (fiber.memoizedState as Record<string, unknown>) ?? {},\n );\n }\n } else if (trackHooks) {\n hookChanges = [...diffHooks(fiber, alt), ...diffContexts(fiber, alt)];\n }\n const isStateHook = (h: HookChange): boolean => h.hook !== 'useContext' && h.hook !== 'useSyncExternalStore';\n const causes: RenderTrigger[] = [];\n if (propChanges.some(isGenuine)) causes.push('props');\n if (stateChanges.some(isGenuine) || hookChanges.some((h) => isStateHook(h) && isGenuine(h))) causes.push('state');\n if (hookChanges.some((h) => !isStateHook(h) && isGenuine(h))) causes.push('hooks');\n const trigger: RenderTrigger = causes.length === 0 ? 'parent' : causes.length === 1 ? causes[0]! : 'mixed';\n return { propChanges, stateChanges, hookChanges, trigger };\n}\n\nfunction nearestRenderedAncestor(fiber: Fiber, cache: Map<Fiber, ParentInfo | null>, trackHooks: boolean): ParentInfo | null {\n let f: Fiber | null = fiber.return;\n while (f && f.tag !== HostRoot) {\n if (isComponentTag(f.tag) && f.alternate && didRender(f)) {\n let info = cache.get(f);\n if (info === undefined) {\n info = { name: fiberName(f), trigger: analyze(f, f.alternate, trackHooks).trigger };\n cache.set(f, info);\n }\n return info;\n }\n f = f.return;\n }\n return null;\n}\n\n/** Inspect one committed root. */\nexport function onCommit(root: FiberRoot, commitPriority?: CommitPriority): void {\n const s = getState();\n if (!s.enabled) return;\n s.commits++;\n const o = s.options;\n const trackHooks = o.trackHooks !== false;\n\n const rendered: Fiber[] = [];\n let hot = false;\n const stack: Fiber[] = [root.current];\n while (stack.length) {\n const fiber = stack.pop()!;\n const alt = fiber.alternate;\n if (alt && isComponentTag(fiber.tag) && didRender(fiber)) {\n if (isHotSwapped(fiber, alt)) hot = true;\n if (shouldTrack(fiberType(fiber), o)) rendered.push(fiber);\n }\n // A bailed-out subtree keeps the same child fiber objects; nothing below it rendered.\n if (!alt || fiber.child !== alt.child) {\n for (let c = fiber.child; c; c = c.sibling) stack.push(c);\n }\n }\n if (hot && o.ignoreHotReload !== false) return;\n\n // Depth-first pop order is reversed; restore document order for readable output.\n rendered.reverse();\n if (rendered.length === 0) return;\n const commitId = s.nextCommitId++;\n const parentCache = new Map<Fiber, ParentInfo | null>();\n for (const fiber of rendered) {\n const alt = fiber.alternate!;\n const a = analyze(fiber, alt, trackHooks);\n const durations = durationsOf(fiber);\n const report = buildReport({\n component: fiberName(fiber),\n instanceId: instanceId(fiber),\n renderCount: bumpCount(fiber),\n prevProps: alt.memoizedProps ?? {},\n nextProps: fiber.memoizedProps ?? {},\n propChanges: a.propChanges,\n stateChanges: a.stateChanges,\n hookChanges: a.hookChanges,\n parent: a.trigger === 'parent' ? nearestRenderedAncestor(fiber, parentCache, trackHooks) : null,\n owner: ownerName(fiber),\n path: componentPath(fiber),\n memoized: isMemoizedFiber(fiber),\n selfDuration: durations ? durations.self : undefined,\n treeDuration: durations ? durations.tree : undefined,\n commitId,\n commitPriority,\n source: sourceOf(fiber),\n });\n dispatch(report);\n }\n}\n","import type { ComponentMatcher, Options, TrackableStatics } from './types';\nimport { MARKER } from './types';\nimport { attach } from './fiber';\nimport { getState } from './state';\n\nconst MEMO = Symbol.for('react.memo');\nconst FORWARD_REF = Symbol.for('react.forward_ref');\n\ninterface MemoType {\n $$typeof: symbol;\n type: unknown;\n displayName?: string;\n}\ninterface ForwardRefType {\n $$typeof: symbol;\n render: unknown;\n displayName?: string;\n}\n\nconst isMemo = (t: unknown): t is MemoType => typeof t === 'object' && t !== null && (t as MemoType).$$typeof === MEMO;\nconst isForwardRef = (t: unknown): t is ForwardRefType =>\n typeof t === 'object' && t !== null && (t as ForwardRefType).$$typeof === FORWARD_REF;\nconst isClass = (t: unknown): boolean =>\n typeof t === 'function' && !!(t.prototype as { isReactComponent?: unknown } | undefined)?.isReactComponent;\nconst isPureClass = (t: unknown): boolean =>\n isClass(t) && !!((t as { prototype: { isPureReactComponent?: unknown } }).prototype).isPureReactComponent;\nconst isComponentLike = (t: unknown): boolean => typeof t === 'function' || isMemo(t) || isForwardRef(t);\n\nexport function getDisplayName(type: unknown): string {\n if (typeof type === 'string') return type;\n if (isMemo(type)) return type.displayName ?? getDisplayName(type.type);\n if (isForwardRef(type)) return type.displayName ?? getDisplayName(type.render);\n if (typeof type === 'function') {\n const t = type as TrackableStatics;\n return t.displayName ?? (t.name || 'Anonymous');\n }\n return 'Anonymous';\n}\n\nfunction hasMarker(type: unknown): boolean {\n if (type === null || (typeof type !== 'function' && typeof type !== 'object')) return false;\n if ((type as TrackableStatics)[MARKER] === true) return true;\n if (isMemo(type)) return hasMarker(type.type);\n if (isForwardRef(type)) return hasMarker(type.render);\n return false;\n}\n\nfunction matches(m: ComponentMatcher, name: string): boolean {\n if (typeof m === 'string') return m === name;\n if (m instanceof RegExp) return m.test(name);\n return m(name);\n}\n\n/** Decide whether a component type is tracked under the given options. */\nexport function shouldTrack(type: unknown, o: Options): boolean {\n if (!isComponentLike(type)) return false;\n const name = getDisplayName(type);\n if (o.exclude?.some((m) => matches(m, name))) return false;\n if (hasMarker(type)) return true;\n if (o.include?.some((m) => matches(m, name))) return true;\n if (o.trackAllComponents) return true;\n if (o.trackAllMemoized) return isMemo(type) || isPureClass(type);\n return false;\n}\n\n/**\n * Start reporting re-renders of tracked components. Observes React commits\n * through the DevTools global hook; nothing in React is patched or wrapped.\n * Returns a function that stops reporting.\n */\nexport function init(options: Options = {}): () => void {\n const s = getState();\n s.options = { ...options };\n s.printed.clear();\n if (!s.enabled) {\n s.detach = attach();\n s.enabled = true;\n }\n return disable;\n}\n\n/** Merge options at runtime. Takes effect on the next commit. */\nexport function configure(options: Options): void {\n const s = getState();\n s.options = { ...s.options, ...options };\n}\n\n/** Stop reporting and restore the DevTools hook callback. */\nexport function disable(): void {\n const s = getState();\n if (!s.enabled) return;\n s.detach?.();\n s.detach = null;\n s.enabled = false;\n}\n\nexport function isEnabled(): boolean {\n return getState().enabled;\n}\n\n/**\n * Opt a component in, with types preserved: `export default track(MyComponent)`.\n * Pass `name` for anonymous arrow functions, which have no inferable name.\n */\nexport function track<T>(component: T, name?: string): T {\n const t = component as unknown as TrackableStatics;\n t[MARKER] = true;\n if (name) t.displayName = name;\n return component;\n}\n","import { useEffect, useRef } from 'react';\nimport type { Options } from './types';\nimport { diffRecords } from './diff';\nimport { buildReport } from './report';\nimport { dispatch, getState } from './state';\n\ntype HookOptions = Pick<Options, 'notifier' | 'silent' | 'console' | 'collapse' | 'logAll'>;\n\n/**\n * Track one component from the inside, without patching React:\n *\n * ```ts\n * function Row(props) {\n * useWhyRerender('Row', props);\n * ...\n * }\n * ```\n *\n * Pass any object of values you care about (props, selected state, context values).\n * Reports go to the console and to the notifier configured via `init`, or to\n * `options.notifier` when given.\n */\nexport function useWhyRerender(name: string, values: Record<string, unknown>, options?: HookOptions): void {\n const ref = useRef<{ committed: Record<string, unknown> | null; reported: boolean; count: number }>({\n committed: null,\n reported: false,\n count: 0,\n });\n const st = ref.current;\n // Compare against the last *committed* values. StrictMode renders twice before a\n // commit; `reported` makes sure the second pass does not produce a duplicate.\n if (st.committed && !st.reported) {\n st.reported = true;\n st.count++;\n const propChanges = diffRecords(st.committed, values);\n dispatch(\n buildReport({\n component: name,\n renderCount: st.count,\n prevProps: st.committed,\n nextProps: values,\n propChanges,\n }),\n options ? { ...getState().options, ...options } : undefined,\n );\n }\n useEffect(() => {\n st.committed = values;\n st.reported = false;\n });\n}\n","import type { Notifier, RenderReport } from './types';\n\nexport interface Collector {\n /** Every report received, in order. */\n readonly reports: RenderReport[];\n /** Reports where `avoidable` is true. */\n readonly avoidable: RenderReport[];\n /** Pass this to `init({ notifier })`. */\n readonly notifier: Notifier;\n clear(): void;\n /** Throws with a readable message if any avoidable re-render was recorded. */\n assertNoAvoidable(): void;\n}\n\n/** Collect reports in memory. Meant for tests. */\nexport function createCollector(): Collector {\n const reports: RenderReport[] = [];\n return {\n reports,\n get avoidable() {\n return reports.filter((r) => r.avoidable);\n },\n notifier: (r) => {\n reports.push(r);\n },\n clear: () => {\n reports.length = 0;\n },\n assertNoAvoidable() {\n const bad = reports.filter((r) => r.avoidable);\n if (bad.length === 0) return;\n const lines = bad.map((r) => ` <${r.component}> render #${r.renderCount}:\\n${r.reasons.map((x) => ` - ${x}`).join('\\n')}`);\n throw new Error(`${bad.length} avoidable re-render${bad.length === 1 ? '' : 's'} detected:\\n${lines.join('\\n')}`);\n },\n };\n}\n\nexport function combineNotifiers(...notifiers: Array<Notifier | undefined | null | false>): Notifier {\n const list = notifiers.filter((n): n is Notifier => typeof n === 'function');\n return (report) => {\n for (const n of list) n(report);\n };\n}\n","/**\n * In-page overlay used by the DevTools bridge: outlines the DOM nodes of a\n * component (hover/select in the panel) and flashes nodes whose component just\n * re-rendered avoidably. Pure DOM; nothing React-specific.\n */\n\nconst ROOT_ID = 'rerender-lens-overlay';\n\nexport interface OverlayBox {\n nodes: Element[];\n label: string;\n}\n\ninterface Layer {\n root: HTMLElement;\n sticky: HTMLElement[];\n}\n\nlet layer: Layer | null = null;\n\nfunction ensureLayer(): Layer | null {\n if (typeof document === 'undefined' || !document.body) return null;\n if (layer && layer.root.isConnected) return layer;\n let root = document.getElementById(ROOT_ID) as HTMLElement | null;\n if (!root) {\n root = document.createElement('div');\n root.id = ROOT_ID;\n root.setAttribute('aria-hidden', 'true');\n Object.assign(root.style, {\n position: 'fixed',\n inset: '0',\n pointerEvents: 'none',\n zIndex: '2147483647',\n overflow: 'visible',\n });\n document.body.appendChild(root);\n }\n layer = { root, sticky: [] };\n return layer;\n}\n\nfunction box(rect: DOMRect, color: string, fill: string, label?: string): HTMLElement {\n const b = document.createElement('div');\n Object.assign(b.style, {\n position: 'absolute',\n left: `${rect.left}px`,\n top: `${rect.top}px`,\n width: `${Math.max(rect.width, 2)}px`,\n height: `${Math.max(rect.height, 2)}px`,\n boxSizing: 'border-box',\n border: `2px solid ${color}`,\n background: fill,\n borderRadius: '2px',\n });\n if (label) {\n const tag = document.createElement('span');\n tag.textContent = label;\n Object.assign(tag.style, {\n position: 'absolute',\n left: '-2px',\n top: rect.top > 20 ? '-20px' : '100%',\n font: '11px/16px system-ui, sans-serif',\n color: '#fff',\n background: color,\n padding: '1px 5px',\n borderRadius: '2px',\n whiteSpace: 'nowrap',\n });\n b.appendChild(tag);\n }\n return b;\n}\n\n/** Outline nodes until `clearHighlight()` (or the next `highlight`). */\nexport function highlight(target: OverlayBox | null): void {\n const l = ensureLayer();\n if (!l) return;\n for (const s of l.sticky) s.remove();\n l.sticky = [];\n if (!target) return;\n for (const node of target.nodes) {\n const rect = node.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) continue;\n const b = box(rect, '#1a73e8', 'rgba(26, 115, 232, 0.12)', target.label);\n l.root.appendChild(b);\n l.sticky.push(b);\n }\n}\n\nexport function clearHighlight(): void {\n highlight(null);\n}\n\n/** Flash nodes briefly (used for avoidable re-renders). */\nexport function flash(target: OverlayBox, duration = 500): void {\n const l = ensureLayer();\n if (!l) return;\n for (const node of target.nodes) {\n const rect = node.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) continue;\n const b = box(rect, '#d93025', 'rgba(217, 48, 37, 0.15)');\n b.style.transition = `opacity ${duration}ms ease-out`;\n l.root.appendChild(b);\n requestAnimationFrame(() => {\n b.style.opacity = '0';\n });\n setTimeout(() => b.remove(), duration + 50);\n }\n}\n\n/** Remove the overlay layer entirely. */\nexport function destroyOverlay(): void {\n if (layer) layer.root.remove();\n layer = null;\n}\n","declare const __RERENDER_LENS_VERSION__: string | undefined;\n\n/** Library version, injected by the build; \"dev\" when running from source. */\nexport const VERSION: string = typeof __RERENDER_LENS_VERSION__ === 'string' ? __RERENDER_LENS_VERSION__ : 'dev';\n","import type { ComponentMatcher, Notifier, Options, RenderReport } from './types';\nimport { isReactElement } from './diff';\nimport { configure, getDisplayName, isEnabled, shouldTrack } from './tracker';\nimport { getState } from './state';\nimport { fiberById, fiberForNode, fiberName, fiberType, getRenderers, hostNodesOf, instanceIdOf, isProductionReact, nearestComponent } from './fiber';\nimport type { Fiber, RendererInfo } from './fiber';\nimport { clearHighlight, flash, highlight } from './overlay';\nimport { VERSION } from './version';\n\nexport const DEVTOOLS_MARKER = '__rerenderLens' as const;\n/** Bumped when the message shape or bridge API changes in a way the panel must know about. */\nexport const PROTOCOL_VERSION = 2;\n\nexport interface DevtoolsMessage {\n [DEVTOOLS_MARKER]: true;\n version: number;\n type: 'report' | 'clear' | 'hello';\n payload?: unknown;\n}\n\n/** Payload of a `hello` message. */\nexport interface HelloPayload {\n /** Buffered reports available for `replay()` / `pull()`. */\n count: number;\n /** Library version. */\n library: string;\n protocol: number;\n react: RendererInfo[];\n /** True when every React renderer on the page is a production build. */\n production: boolean;\n enabled: boolean;\n options: SerializableOptions;\n /** Who created this bridge: the page's own `init` call, or the extension's injected copy. */\n source: 'page' | 'extension';\n /** True when the extension injected a copy of the library into this page (whether or not it is the active one). */\n injected: boolean;\n /** Roots React scheduled (dev builds) and commits observed since `init`; the gap is work that never committed. */\n scheduled: number;\n commits: number;\n}\n\ndeclare global {\n interface Window {\n /** Set by the extension's inject script: version of the injected library. */\n __RERENDER_LENS_INJECTED__?: string;\n }\n}\n\n/** `Options` with matchers as strings (`\"Name\"` or `\"/regex/flags\"`) and no functions. */\nexport interface SerializableOptions {\n trackAllMemoized?: boolean;\n trackAllComponents?: boolean;\n include?: string[];\n exclude?: string[];\n trackHooks?: boolean;\n logAll?: boolean;\n silent?: boolean;\n collapse?: boolean;\n ignoreHotReload?: boolean;\n maxReportsPerComponent?: number;\n}\n\nexport interface DevtoolsNotifierOptions {\n /** How many reports to keep for `replay()`. Default 300. */\n bufferSize?: number;\n /** Where to post. Default `window`. */\n target?: Pick<Window, 'postMessage'>;\n /** Max serialization depth. Default 6. */\n maxDepth?: number;\n /** Flash the DOM of components that re-rendered avoidably. Default false; toggle later with `flashAvoidable`. */\n flashAvoidable?: boolean;\n /** Reported in `info()`. The extension's inject script passes `'extension'`. Default `'page'`. */\n source?: 'page' | 'extension';\n}\n\nexport interface InspectResult {\n component: string;\n instanceId: number | null;\n tracked: boolean;\n path: string[];\n /** Serialized reports for this instance, oldest first. */\n reports: unknown[];\n}\n\nexport interface PullResult {\n /** Sequence number of the newest report included; pass it back as `since`. */\n seq: number;\n reports: unknown[];\n /** True when the caller missed reports that fell out of the buffer. */\n dropped: boolean;\n}\n\nexport interface DevtoolsBridge {\n /** Re-post every buffered report (a panel that opened late calls this). */\n replay(): void;\n clear(): void;\n readonly size: number;\n readonly version: number;\n /** Library version. */\n readonly library: string;\n /** Everything the panel shows in its status line. */\n info(): HelloPayload;\n /** Reports newer than `since`. Lets a panel poll without any content script. */\n pull(since?: number): PullResult;\n /** Merge options at runtime; matchers are strings (`\"/^Grid/\"` becomes a RegExp). */\n configure(options: SerializableOptions): SerializableOptions;\n getOptions(): SerializableOptions;\n /** Outline the DOM of an instance in the page; `null` clears. */\n highlight(instanceId: number | null): boolean;\n /** Turn the avoidable-render flash on or off. */\n flashAvoidable(on: boolean): void;\n /** Re-render details for a DOM node (DevTools' `$0`). */\n inspect(node: unknown): InspectResult | null;\n}\n\ndeclare global {\n interface Window {\n __RERENDER_LENS_DEVTOOLS__?: DevtoolsBridge;\n }\n}\n\n/** Convert a report into a structured-clone-safe value (functions, elements, cycles removed). */\nexport function serialize(value: unknown, maxDepth = 6, seen: WeakSet<object> = new WeakSet(), depth = 0): unknown {\n if (value === null || value === undefined) return value;\n const t = typeof value;\n if (t === 'string' || t === 'boolean') return value;\n if (t === 'number') return Number.isFinite(value as number) ? value : String(value);\n if (t === 'bigint') return `${String(value)}n`;\n if (t === 'symbol') return String(value);\n if (t === 'function') return `ƒ ${(value as { name?: string }).name || 'anonymous'}`;\n const obj = value as object;\n if (seen.has(obj)) return '[Circular]';\n if (depth >= maxDepth) return '[…]';\n seen.add(obj);\n try {\n if (isReactElement(obj)) {\n // Keep the props so the panel can diff element trees (children) leaf by leaf.\n const out: Record<string, unknown> = { $type: 'element', name: getDisplayName(obj.type) };\n if (obj.key !== null && obj.key !== undefined) out.key = String(obj.key);\n out.props = serialize(obj.props, maxDepth, seen, depth + 1);\n return out;\n }\n if (obj instanceof Date) return { $type: 'Date', value: obj.toISOString() };\n if (obj instanceof RegExp) return { $type: 'RegExp', value: String(obj) };\n if (obj instanceof Map) {\n return { $type: 'Map', entries: [...obj].map(([k, v]) => [serialize(k, maxDepth, seen, depth + 1), serialize(v, maxDepth, seen, depth + 1)]) };\n }\n if (obj instanceof Set) return { $type: 'Set', values: [...obj].map((v) => serialize(v, maxDepth, seen, depth + 1)) };\n if (Array.isArray(obj)) return obj.map((v) => serialize(v, maxDepth, seen, depth + 1));\n if (typeof Element !== 'undefined' && obj instanceof Element) return `<${obj.tagName.toLowerCase()}>`;\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(obj)) out[k] = serialize((obj as Record<string, unknown>)[k], maxDepth, seen, depth + 1);\n const proto = Object.getPrototypeOf(obj) as { constructor?: { name?: string } } | null;\n if (proto && proto !== Object.prototype && proto.constructor?.name) out.$type = proto.constructor.name;\n return out;\n } finally {\n seen.delete(obj);\n }\n}\n\nconst matcherToString = (m: ComponentMatcher): string | null =>\n typeof m === 'string' ? m : m instanceof RegExp ? String(m) : null;\n\nconst stringToMatcher = (s: string): ComponentMatcher => {\n const m = /^\\/(.+)\\/([a-z]*)$/.exec(s);\n if (m && m[1] !== undefined) {\n try {\n return new RegExp(m[1], m[2]);\n } catch {\n return s;\n }\n }\n return s;\n};\n\n/** The current options in a JSON-safe form (function matchers and custom consoles are dropped). */\nexport function serializeOptions(o: Options): SerializableOptions {\n const out: SerializableOptions = {};\n const bools = ['trackAllMemoized', 'trackAllComponents', 'trackHooks', 'logAll', 'silent', 'collapse', 'ignoreHotReload'] as const;\n for (const k of bools) if (typeof o[k] === 'boolean') out[k] = o[k];\n if (typeof o.maxReportsPerComponent === 'number') out.maxReportsPerComponent = o.maxReportsPerComponent;\n if (o.include) out.include = o.include.map(matcherToString).filter((x): x is string => x !== null);\n if (o.exclude) out.exclude = o.exclude.map(matcherToString).filter((x): x is string => x !== null);\n return out;\n}\n\nexport function deserializeOptions(o: SerializableOptions): Options {\n const out: Options = {};\n const bools = ['trackAllMemoized', 'trackAllComponents', 'trackHooks', 'logAll', 'silent', 'collapse', 'ignoreHotReload'] as const;\n for (const k of bools) if (typeof o[k] === 'boolean') out[k] = o[k];\n if (typeof o.maxReportsPerComponent === 'number') out.maxReportsPerComponent = o.maxReportsPerComponent;\n if (Array.isArray(o.include)) out.include = o.include.filter((s) => typeof s === 'string' && s).map(stringToMatcher);\n if (Array.isArray(o.exclude)) out.exclude = o.exclude.filter((s) => typeof s === 'string' && s).map(stringToMatcher);\n return out;\n}\n\ninterface Entry {\n seq: number;\n instanceId: number;\n payload: unknown;\n}\n\n/**\n * A notifier that posts every report on `window` for a DevTools extension to pick up.\n * Also installs `window.__RERENDER_LENS_DEVTOOLS__` with `replay()` / `clear()` / `pull()` and friends.\n */\nexport function createDevtoolsNotifier(options: DevtoolsNotifierOptions = {}): Notifier {\n const bufferSize = options.bufferSize ?? 300;\n const maxDepth = options.maxDepth ?? 6;\n const target = options.target ?? (typeof window !== 'undefined' ? window : undefined);\n const buffer: Entry[] = [];\n let seq = 0;\n let flashOn = options.flashAvoidable ?? false;\n\n const post = (type: DevtoolsMessage['type'], payload?: unknown): void => {\n if (!target) return;\n const msg: DevtoolsMessage = { [DEVTOOLS_MARKER]: true, version: PROTOCOL_VERSION, type, payload };\n target.postMessage(msg, '*');\n };\n\n const source = options.source ?? 'page';\n const info = (): HelloPayload => ({\n count: buffer.length,\n library: VERSION,\n protocol: PROTOCOL_VERSION,\n react: getRenderers(),\n production: isProductionReact(),\n enabled: isEnabled(),\n options: serializeOptions(getState().options),\n source,\n injected: typeof window !== 'undefined' && typeof window.__RERENDER_LENS_INJECTED__ === 'string',\n scheduled: getState().scheduled,\n commits: getState().commits,\n });\n\n const bridge: DevtoolsBridge = {\n replay: () => {\n post('hello', info());\n for (const e of buffer) post('report', e.payload);\n },\n clear: () => {\n buffer.length = 0;\n post('clear');\n },\n get size() {\n return buffer.length;\n },\n version: PROTOCOL_VERSION,\n library: VERSION,\n info,\n pull: (since = 0) => {\n const first = buffer[0];\n const dropped = since > 0 && !!first && first.seq > since + 1;\n const reports = buffer.filter((e) => e.seq > since).map((e) => e.payload);\n return { seq, reports, dropped };\n },\n configure: (next) => {\n configure(deserializeOptions(next ?? {}));\n return serializeOptions(getState().options);\n },\n getOptions: () => serializeOptions(getState().options),\n highlight: (id) => {\n if (id === null || id === undefined) {\n clearHighlight();\n return true;\n }\n const fiber = fiberById(id);\n if (!fiber) {\n clearHighlight();\n return false;\n }\n const nodes = hostNodesOf(fiber);\n highlight({ nodes, label: fiberName(fiber) });\n return nodes.length > 0;\n },\n flashAvoidable: (on) => {\n flashOn = !!on;\n },\n inspect: (node) => {\n const comp = nearestComponent(fiberForNode(node));\n if (!comp) return null;\n const id = instanceIdOf(comp) ?? null;\n const path: string[] = [];\n let f: Fiber | null = comp.return;\n while (f) {\n if (f.tag === 0 || f.tag === 1 || f.tag === 11 || f.tag === 14 || f.tag === 15) path.unshift(fiberName(f));\n f = f.return;\n }\n return {\n component: fiberName(comp),\n instanceId: id,\n tracked: shouldTrack(fiberType(comp), getState().options),\n path,\n reports: id === null ? [] : buffer.filter((e) => e.instanceId === id).slice(-20).map((e) => e.payload),\n };\n },\n };\n if (typeof window !== 'undefined') window.__RERENDER_LENS_DEVTOOLS__ = bridge;\n post('hello', info());\n\n return (report: RenderReport) => {\n const payload = serialize(report, maxDepth);\n buffer.push({ seq: ++seq, instanceId: report.instanceId, payload });\n if (buffer.length > bufferSize) buffer.splice(0, buffer.length - bufferSize);\n post('report', payload);\n if (flashOn && report.avoidable && report.instanceId) {\n const fiber = fiberById(report.instanceId);\n if (fiber) flash({ nodes: hostNodesOf(fiber), label: report.component });\n }\n };\n}\n"]}
|