rerender-lens 0.3.0 → 0.4.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.
@@ -1,10 +1,37 @@
1
- var RerenderLens = (function (exports) {
2
- 'use strict';
1
+ /* rerender-lens 0.4.0 — rerender-lens.core.js: types, version, diff, report, state, overlay. Built by scripts/build-vendor.mjs; do not edit. */
2
+ (() => {
3
+ var __defProp = Object.defineProperty;
4
+ var __export = (target, all) => {
5
+ for (var name in all)
6
+ __defProp(target, name, { get: all[name], enumerable: true });
7
+ };
3
8
 
4
9
  // src/types.ts
10
+ var types_exports = {};
11
+ __export(types_exports, {
12
+ MARKER: () => MARKER
13
+ });
5
14
  var MARKER = "rerenderLens";
6
15
 
16
+ // src/version.ts
17
+ var version_exports = {};
18
+ __export(version_exports, {
19
+ VERSION: () => VERSION
20
+ });
21
+ var VERSION = true ? "0.4.0" : "dev";
22
+
7
23
  // src/diff.ts
24
+ var diff_exports = {};
25
+ __export(diff_exports, {
26
+ DEFAULT_DIFF_BUDGET: () => DEFAULT_DIFF_BUDGET,
27
+ beginDiffScope: () => beginDiffScope,
28
+ classify: () => classify,
29
+ deepEqual: () => deepEqual,
30
+ diffBudgetExhausted: () => diffBudgetExhausted,
31
+ diffRecords: () => diffRecords,
32
+ firstDifferentPath: () => firstDifferentPath,
33
+ isReactElement: () => isReactElement
34
+ });
8
35
  var REACT_ELEMENT = /* @__PURE__ */ Symbol.for("react.element");
9
36
  var REACT_TRANSITIONAL_ELEMENT = /* @__PURE__ */ Symbol.for("react.transitional.element");
10
37
  function isReactElement(v) {
@@ -27,10 +54,49 @@ var RerenderLens = (function (exports) {
27
54
  set.add(b);
28
55
  return false;
29
56
  }
57
+ var scope = null;
58
+ var DEFAULT_DIFF_BUDGET = 5e4;
59
+ function beginDiffScope(budget = 2e5) {
60
+ const previous = scope;
61
+ scope = { cache: /* @__PURE__ */ new WeakMap(), remaining: budget, exhausted: false };
62
+ return () => {
63
+ scope = previous;
64
+ };
65
+ }
66
+ function diffBudgetExhausted() {
67
+ return scope?.exhausted === true;
68
+ }
30
69
  function deepEqual(a, b, seen = /* @__PURE__ */ new Map()) {
31
70
  if (Object.is(a, b)) return true;
32
71
  if (typeof a !== typeof b) return false;
33
72
  if (typeof a !== "object" || a === null || b === null) return false;
73
+ if (!scope) {
74
+ const end = beginDiffScope(DEFAULT_DIFF_BUDGET);
75
+ try {
76
+ return deepEqual(a, b, seen);
77
+ } finally {
78
+ end();
79
+ }
80
+ }
81
+ const sc = scope;
82
+ const objA = a;
83
+ const objB = b;
84
+ const hit = sc.cache.get(objA)?.get(objB);
85
+ if (hit !== void 0) return hit;
86
+ if (--sc.remaining < 0) {
87
+ sc.exhausted = true;
88
+ return false;
89
+ }
90
+ const result = deepEqualObjects(objA, objB, seen);
91
+ let m = sc.cache.get(objA);
92
+ if (!m) {
93
+ m = /* @__PURE__ */ new WeakMap();
94
+ sc.cache.set(objA, m);
95
+ }
96
+ m.set(objB, result);
97
+ return result;
98
+ }
99
+ function deepEqualObjects(a, b, seen) {
34
100
  const objA = a;
35
101
  const objB = b;
36
102
  if (remember(seen, objA, objB)) return true;
@@ -59,6 +125,10 @@ var RerenderLens = (function (exports) {
59
125
  }
60
126
  if (a instanceof Set) {
61
127
  if (!(b instanceof Set) || a.size !== b.size) return false;
128
+ if (a.size > 50) {
129
+ for (const v of a) if (!b.has(v)) return false;
130
+ return true;
131
+ }
62
132
  outer: for (const v of a) {
63
133
  if (b.has(v)) continue;
64
134
  for (const w of b) if (deepEqual(v, w, seen)) continue outer;
@@ -74,9 +144,10 @@ var RerenderLens = (function (exports) {
74
144
  const ka = Object.keys(a);
75
145
  const kb = Object.keys(b);
76
146
  if (ka.length !== kb.length) return false;
147
+ const rb = b;
77
148
  for (const k of ka) {
78
149
  if (!Object.prototype.hasOwnProperty.call(b, k)) return false;
79
- if (!deepEqual(a[k], b[k], seen)) return false;
150
+ if (!deepEqual(a[k], rb[k], seen)) return false;
80
151
  }
81
152
  return true;
82
153
  }
@@ -118,7 +189,7 @@ var RerenderLens = (function (exports) {
118
189
  if (Object.is(a, b)) continue;
119
190
  const kind = classify(a, b);
120
191
  if (kind === "different") {
121
- changes.push({ path: firstDifferentPath(a, b, path), kind, prev: a, next: b });
192
+ changes.push({ path: diffBudgetExhausted() ? path : firstDifferentPath(a, b, path), kind, prev: a, next: b });
122
193
  } else {
123
194
  changes.push({ path, kind, prev: a, next: b });
124
195
  }
@@ -145,6 +216,15 @@ var RerenderLens = (function (exports) {
145
216
  }
146
217
 
147
218
  // src/report.ts
219
+ var report_exports = {};
220
+ __export(report_exports, {
221
+ buildReport: () => buildReport,
222
+ fixFor: () => fixFor,
223
+ hookLabel: () => hookLabel,
224
+ printReport: () => printReport,
225
+ storeAdvice: () => storeAdvice,
226
+ summarize: () => summarize
227
+ });
148
228
  var now = () => typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
149
229
  var hookLabel = (c) => c.custom && c.custom.length ? `${c.custom.join(" \u203A ")} \u203A ${c.hook}#${c.index}` : `${c.hook} #${c.index}`;
150
230
  function storeAdvice(custom) {
@@ -298,13 +378,13 @@ var RerenderLens = (function (exports) {
298
378
  removed: "removed"
299
379
  };
300
380
  function summarize(report) {
301
- const counts2 = /* @__PURE__ */ new Map();
381
+ const counts = /* @__PURE__ */ new Map();
302
382
  for (const c of [...report.propChanges, ...report.stateChanges, ...report.hookChanges]) {
303
- counts2.set(c.kind, (counts2.get(c.kind) ?? 0) + 1);
383
+ counts.set(c.kind, (counts.get(c.kind) ?? 0) + 1);
304
384
  }
305
- const parts = [...counts2].map(([kind, n]) => `${n} ${KIND_LABEL[kind]}`);
306
- if (parts.length === 0) parts.push("no changes");
307
- return parts.join(", ");
385
+ const parts2 = [...counts].map(([kind, n]) => `${n} ${KIND_LABEL[kind]}`);
386
+ if (parts2.length === 0) parts2.push("no changes");
387
+ return parts2.join(", ");
308
388
  }
309
389
  function printReport(report, options) {
310
390
  const c = options.console ?? console;
@@ -324,12 +404,18 @@ var RerenderLens = (function (exports) {
324
404
  }
325
405
 
326
406
  // src/state.ts
407
+ var state_exports = {};
408
+ __export(state_exports, {
409
+ dispatch: () => dispatch,
410
+ getState: () => getState,
411
+ warnOnce: () => warnOnce
412
+ });
327
413
  var KEY = /* @__PURE__ */ Symbol.for("rerender-lens.state");
328
414
  function getState() {
329
415
  const g = globalThis;
330
416
  let s = g[KEY];
331
417
  if (!s) {
332
- s = { options: {}, enabled: false, printed: /* @__PURE__ */ new Map(), detach: null, nextInstanceId: 1, nextCommitId: 1, warnedOnce: /* @__PURE__ */ new Set(), scheduled: 0, commits: 0, overheadMs: 0, maxCommitMs: 0 };
418
+ s = { options: {}, enabled: false, printed: /* @__PURE__ */ new Map(), detach: null, nextInstanceId: 1, nextCommitId: 1, warnedOnce: /* @__PURE__ */ new Set(), scheduled: 0, commits: 0, overheadMs: 0, maxCommitMs: 0, truncated: 0 };
333
419
  g[KEY] = s;
334
420
  }
335
421
  return s;
@@ -342,7 +428,7 @@ var RerenderLens = (function (exports) {
342
428
  }
343
429
  function dispatch(report, override) {
344
430
  const s = getState();
345
- const options = s.options;
431
+ const options = override ? { ...s.options, ...override } : s.options;
346
432
  if (!options.silent && (report.avoidable || options.logAll)) {
347
433
  const max = options.maxReportsPerComponent ?? 0;
348
434
  const n = (s.printed.get(report.component) ?? 0) + 1;
@@ -359,12 +445,346 @@ var RerenderLens = (function (exports) {
359
445
  try {
360
446
  options.notifier(report);
361
447
  } catch (err) {
362
- (options.console ?? console).warn("[rerender-lens] notifier threw", err);
448
+ warnOnce("notifier", `notifier threw: ${String(err)}`);
363
449
  }
364
450
  }
365
451
  }
366
452
 
453
+ // src/overlay.ts
454
+ var overlay_exports = {};
455
+ __export(overlay_exports, {
456
+ clearHighlight: () => clearHighlight,
457
+ destroyOverlay: () => destroyOverlay,
458
+ flash: () => flash,
459
+ highlight: () => highlight
460
+ });
461
+ var ROOT_ID = "rerender-lens-overlay";
462
+ var layer = null;
463
+ function ensureLayer() {
464
+ if (typeof document === "undefined" || !document.body) return null;
465
+ if (layer && layer.root.isConnected) return layer;
466
+ let root = document.getElementById(ROOT_ID);
467
+ if (!root) {
468
+ root = document.createElement("div");
469
+ root.id = ROOT_ID;
470
+ root.setAttribute("aria-hidden", "true");
471
+ Object.assign(root.style, {
472
+ position: "fixed",
473
+ inset: "0",
474
+ pointerEvents: "none",
475
+ zIndex: "2147483647",
476
+ overflow: "visible"
477
+ });
478
+ document.body.appendChild(root);
479
+ }
480
+ layer = { root, sticky: [] };
481
+ return layer;
482
+ }
483
+ function box(rect, color, fill, label) {
484
+ const b = document.createElement("div");
485
+ Object.assign(b.style, {
486
+ position: "absolute",
487
+ left: `${rect.left}px`,
488
+ top: `${rect.top}px`,
489
+ width: `${Math.max(rect.width, 2)}px`,
490
+ height: `${Math.max(rect.height, 2)}px`,
491
+ boxSizing: "border-box",
492
+ border: `2px solid ${color}`,
493
+ background: fill,
494
+ borderRadius: "2px"
495
+ });
496
+ if (label) {
497
+ const tag = document.createElement("span");
498
+ tag.textContent = label;
499
+ Object.assign(tag.style, {
500
+ position: "absolute",
501
+ left: "-2px",
502
+ top: rect.top > 20 ? "-20px" : "100%",
503
+ font: "11px/16px system-ui, sans-serif",
504
+ color: "#fff",
505
+ background: color,
506
+ padding: "1px 5px",
507
+ borderRadius: "2px",
508
+ whiteSpace: "nowrap"
509
+ });
510
+ b.appendChild(tag);
511
+ }
512
+ return b;
513
+ }
514
+ function highlight(target) {
515
+ const l = ensureLayer();
516
+ if (!l) return;
517
+ for (const s of l.sticky) s.remove();
518
+ l.sticky = [];
519
+ if (!target) return;
520
+ const frag = document.createDocumentFragment();
521
+ for (const rect of measure(target.nodes)) {
522
+ const b = box(rect, "#1a73e8", "rgba(26, 115, 232, 0.12)", target.label);
523
+ frag.appendChild(b);
524
+ l.sticky.push(b);
525
+ }
526
+ l.root.appendChild(frag);
527
+ }
528
+ var MAX_BOXES = 100;
529
+ function measure(nodes) {
530
+ const rects = [];
531
+ for (const node of nodes) {
532
+ if (rects.length >= MAX_BOXES) break;
533
+ const rect = node.getBoundingClientRect();
534
+ if (rect.width === 0 && rect.height === 0) continue;
535
+ rects.push(rect);
536
+ }
537
+ return rects;
538
+ }
539
+ function clearHighlight() {
540
+ highlight(null);
541
+ }
542
+ function flash(target, duration = 500) {
543
+ const l = ensureLayer();
544
+ if (!l) return;
545
+ const frag = document.createDocumentFragment();
546
+ const boxes = [];
547
+ for (const rect of measure(target.nodes)) {
548
+ const b = box(rect, "#d93025", "rgba(217, 48, 37, 0.15)");
549
+ b.style.transition = `opacity ${duration}ms ease-out`;
550
+ frag.appendChild(b);
551
+ boxes.push(b);
552
+ }
553
+ if (!boxes.length) return;
554
+ l.root.appendChild(frag);
555
+ requestAnimationFrame(() => {
556
+ for (const b of boxes) b.style.opacity = "0";
557
+ });
558
+ setTimeout(() => {
559
+ for (const b of boxes) b.remove();
560
+ }, duration + 50);
561
+ }
562
+ function destroyOverlay() {
563
+ if (layer) layer.root.remove();
564
+ layer = null;
565
+ }
566
+
567
+ // vendor-rerender-lens.core.js
568
+ var parts = globalThis.__RERENDER_LENS_PARTS__ = globalThis.__RERENDER_LENS_PARTS__ || {};
569
+ parts["types"] = types_exports;
570
+ parts["version"] = version_exports;
571
+ parts["diff"] = diff_exports;
572
+ parts["report"] = report_exports;
573
+ parts["state"] = state_exports;
574
+ parts["overlay"] = overlay_exports;
575
+ })();
576
+
577
+ ;
578
+ /* rerender-lens 0.4.0 — rerender-lens.engine.js: fiber, tracker, hookNames. Built by scripts/build-vendor.mjs; do not edit. */
579
+ (() => {
580
+ var __create = Object.create;
581
+ var __defProp = Object.defineProperty;
582
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
583
+ var __getOwnPropNames = Object.getOwnPropertyNames;
584
+ var __getProtoOf = Object.getPrototypeOf;
585
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
586
+ var __commonJS = (cb, mod) => function __require() {
587
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
588
+ };
589
+ var __export = (target, all) => {
590
+ for (var name in all)
591
+ __defProp(target, name, { get: all[name], enumerable: true });
592
+ };
593
+ var __copyProps = (to, from, except, desc) => {
594
+ if (from && typeof from === "object" || typeof from === "function") {
595
+ for (let key of __getOwnPropNames(from))
596
+ if (!__hasOwnProp.call(to, key) && key !== except)
597
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
598
+ }
599
+ return to;
600
+ };
601
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
602
+ // If the importer is in node compatibility mode or this is not an ESM
603
+ // file that has been converted to a CommonJS file using a Babel-
604
+ // compatible transform (i.e. "__esModule" has not been set), then set
605
+ // "default" to the CommonJS "module.exports" for node compatibility.
606
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
607
+ mod
608
+ ));
609
+
610
+ // rerender-lens-part:diff
611
+ var require_diff = __commonJS({
612
+ "rerender-lens-part:diff"(exports, module) {
613
+ var p = globalThis.__RERENDER_LENS_PARTS__;
614
+ if (!p || !p["diff"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
615
+ module.exports = p["diff"];
616
+ }
617
+ });
618
+
619
+ // rerender-lens-part:report
620
+ var require_report = __commonJS({
621
+ "rerender-lens-part:report"(exports, module) {
622
+ var p = globalThis.__RERENDER_LENS_PARTS__;
623
+ if (!p || !p["report"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
624
+ module.exports = p["report"];
625
+ }
626
+ });
627
+
628
+ // rerender-lens-part:state
629
+ var require_state = __commonJS({
630
+ "rerender-lens-part:state"(exports, module) {
631
+ var p = globalThis.__RERENDER_LENS_PARTS__;
632
+ if (!p || !p["state"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
633
+ module.exports = p["state"];
634
+ }
635
+ });
636
+
637
+ // rerender-lens-part:types
638
+ var require_types = __commonJS({
639
+ "rerender-lens-part:types"(exports, module) {
640
+ var p = globalThis.__RERENDER_LENS_PARTS__;
641
+ if (!p || !p["types"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
642
+ module.exports = p["types"];
643
+ }
644
+ });
645
+
646
+ // src/fiber.ts
647
+ var fiber_exports = {};
648
+ __export(fiber_exports, {
649
+ COMMIT_TIME_BUDGET_MS: () => COMMIT_TIME_BUDGET_MS,
650
+ MAX_REPORTS_PER_COMMIT: () => MAX_REPORTS_PER_COMMIT,
651
+ attach: () => attach,
652
+ durationsOf: () => durationsOf,
653
+ ensureDevtoolsHook: () => ensureDevtoolsHook,
654
+ fiberById: () => fiberById,
655
+ fiberForNode: () => fiberForNode,
656
+ fiberName: () => fiberName,
657
+ fiberType: () => fiberType,
658
+ findProvider: () => findProvider,
659
+ getDispatcherRef: () => getDispatcherRef,
660
+ getRenderers: () => getRenderers,
661
+ hostNodesOf: () => hostNodesOf,
662
+ instanceIdOf: () => instanceIdOf,
663
+ isMemoizedFiber: () => isMemoizedFiber,
664
+ isProductionReact: () => isProductionReact,
665
+ nearestComponent: () => nearestComponent,
666
+ onCommit: () => onCommit,
667
+ parseStackLocation: () => parseStackLocation,
668
+ priorityLabel: () => priorityLabel,
669
+ snapshotContexts: () => snapshotContexts,
670
+ snapshotHooks: () => snapshotHooks,
671
+ sourceOf: () => sourceOf
672
+ });
673
+ var import_diff = __toESM(require_diff(), 1);
674
+ var import_report = __toESM(require_report(), 1);
675
+ var import_state2 = __toESM(require_state(), 1);
676
+
677
+ // src/tracker.ts
678
+ var tracker_exports = {};
679
+ __export(tracker_exports, {
680
+ configure: () => configure,
681
+ disable: () => disable,
682
+ getDisplayName: () => getDisplayName,
683
+ init: () => init,
684
+ isEnabled: () => isEnabled,
685
+ shouldTrack: () => shouldTrack,
686
+ track: () => track
687
+ });
688
+ var import_types = __toESM(require_types(), 1);
689
+ var import_state = __toESM(require_state(), 1);
690
+ var MEMO = /* @__PURE__ */ Symbol.for("react.memo");
691
+ var FORWARD_REF = /* @__PURE__ */ Symbol.for("react.forward_ref");
692
+ var isMemo = (t) => typeof t === "object" && t !== null && t.$$typeof === MEMO;
693
+ var isForwardRef = (t) => typeof t === "object" && t !== null && t.$$typeof === FORWARD_REF;
694
+ var isClass = (t) => typeof t === "function" && !!t.prototype?.isReactComponent;
695
+ var isPureClass = (t) => isClass(t) && !!t.prototype.isPureReactComponent;
696
+ var isComponentLike = (t) => typeof t === "function" || isMemo(t) || isForwardRef(t);
697
+ function getDisplayName(type) {
698
+ if (typeof type === "string") return type;
699
+ if (isMemo(type)) return type.displayName ?? getDisplayName(type.type);
700
+ if (isForwardRef(type)) return type.displayName ?? getDisplayName(type.render);
701
+ if (typeof type === "function") {
702
+ const t = type;
703
+ return t.displayName ?? (t.name || "Anonymous");
704
+ }
705
+ return "Anonymous";
706
+ }
707
+ function hasMarker(type) {
708
+ if (type === null || typeof type !== "function" && typeof type !== "object") return false;
709
+ if (type[import_types.MARKER] === true) return true;
710
+ if (isMemo(type)) return hasMarker(type.type);
711
+ if (isForwardRef(type)) return hasMarker(type.render);
712
+ return false;
713
+ }
714
+ function matches(m, name) {
715
+ if (typeof m === "string") return m === name;
716
+ if (m instanceof RegExp) return m.test(name);
717
+ return m(name);
718
+ }
719
+ function shouldTrack(type, o) {
720
+ if (!isComponentLike(type)) return false;
721
+ const name = getDisplayName(type);
722
+ if (o.exclude?.some((m) => matches(m, name))) return false;
723
+ if (hasMarker(type)) return true;
724
+ if (o.include?.some((m) => matches(m, name))) return true;
725
+ if (o.trackAllComponents) return true;
726
+ if (o.trackAllMemoized) return isMemo(type) || isPureClass(type);
727
+ return false;
728
+ }
729
+ function init(options = {}) {
730
+ const s = (0, import_state.getState)();
731
+ s.options = { ...options };
732
+ s.printed.clear();
733
+ if (!s.enabled) {
734
+ s.detach = attach();
735
+ s.enabled = true;
736
+ }
737
+ return disable;
738
+ }
739
+ function configure(options) {
740
+ const s = (0, import_state.getState)();
741
+ s.options = { ...s.options, ...options };
742
+ }
743
+ function disable() {
744
+ const s = (0, import_state.getState)();
745
+ if (!s.enabled) return;
746
+ s.detach?.();
747
+ s.detach = null;
748
+ s.enabled = false;
749
+ }
750
+ function isEnabled() {
751
+ return (0, import_state.getState)().enabled;
752
+ }
753
+ function track(component, name) {
754
+ const t = component;
755
+ t[import_types.MARKER] = true;
756
+ if (name) t.displayName = name;
757
+ return component;
758
+ }
759
+
367
760
  // src/hookNames.ts
761
+ var hookNames_exports = {};
762
+ __export(hookNames_exports, {
763
+ HOOK_NODE_COUNT: () => NODE_COUNT,
764
+ clearHookNameCache: () => clearHookNameCache,
765
+ customHooksFromStack: () => customHooksFromStack,
766
+ resolveHookNames: () => resolveHookNames
767
+ });
768
+ var NODE_COUNT = {
769
+ useState: 1,
770
+ useReducer: 1,
771
+ useRef: 1,
772
+ useMemo: 1,
773
+ useCallback: 1,
774
+ useEffect: 1,
775
+ useLayoutEffect: 1,
776
+ useInsertionEffect: 1,
777
+ useImperativeHandle: 1,
778
+ useSyncExternalStore: 2,
779
+ useTransition: 2,
780
+ useDeferredValue: 1,
781
+ useId: 1,
782
+ useOptimistic: 1,
783
+ useActionState: 3,
784
+ useFormState: 3,
785
+ useEffectEvent: 1,
786
+ useCacheRefresh: 1
787
+ };
368
788
  var noop = () => {
369
789
  };
370
790
  function customHooksFromStack(stack, componentName, marker) {
@@ -528,6 +948,8 @@ var RerenderLens = (function (exports) {
528
948
  }
529
949
  return result.byNode;
530
950
  }
951
+ function clearHookNameCache() {
952
+ }
531
953
 
532
954
  // src/fiber.ts
533
955
  var FunctionComponent = 0;
@@ -616,10 +1038,10 @@ var RerenderLens = (function (exports) {
616
1038
  try {
617
1039
  onCommit(root, priorityLabel(priority));
618
1040
  } catch (err) {
619
- warnOnce("commit", `failed to inspect a commit: ${String(err)}`);
1041
+ (0, import_state2.warnOnce)("commit", `failed to inspect a commit: ${String(err)}`);
620
1042
  } finally {
621
1043
  const spent = nowMs() - started;
622
- const s = getState();
1044
+ const s = (0, import_state2.getState)();
623
1045
  s.overheadMs += spent;
624
1046
  if (spent > s.maxCommitMs) s.maxCommitMs = spent;
625
1047
  }
@@ -628,7 +1050,7 @@ var RerenderLens = (function (exports) {
628
1050
  hook.onCommitFiberRoot = patched;
629
1051
  const previousSchedule = hook.onScheduleFiberRoot;
630
1052
  const patchedSchedule = function(id, root, children) {
631
- getState().scheduled++;
1053
+ (0, import_state2.getState)().scheduled++;
632
1054
  if (typeof previousSchedule === "function") return previousSchedule.call(this, id, root, children);
633
1055
  };
634
1056
  hook.onScheduleFiberRoot = patchedSchedule;
@@ -702,11 +1124,14 @@ var RerenderLens = (function (exports) {
702
1124
  var ids = /* @__PURE__ */ new WeakMap();
703
1125
  var fibersById = /* @__PURE__ */ new Map();
704
1126
  var hasWeakRef = typeof WeakRef === "function";
705
- function remember2(id, fiber) {
1127
+ var pruneAt = 5e3;
1128
+ function remember(id, fiber) {
706
1129
  if (!hasWeakRef) return;
1130
+ if (fibersById.get(id)?.deref() === fiber) return;
707
1131
  fibersById.set(id, new WeakRef(fiber));
708
- if (fibersById.size > 5e3) {
1132
+ if (fibersById.size > pruneAt) {
709
1133
  for (const [k, ref] of fibersById) if (!ref.deref()) fibersById.delete(k);
1134
+ pruneAt = Math.max(5e3, fibersById.size * 2);
710
1135
  }
711
1136
  }
712
1137
  function instanceIdOf(fiber) {
@@ -723,13 +1148,13 @@ var RerenderLens = (function (exports) {
723
1148
  const existing = instanceIdOf(fiber);
724
1149
  if (existing !== void 0) {
725
1150
  ids.set(fiber, existing);
726
- remember2(existing, fiber);
1151
+ remember(existing, fiber);
727
1152
  return existing;
728
1153
  }
729
- const s = getState();
1154
+ const s = (0, import_state2.getState)();
730
1155
  const id = s.nextInstanceId++;
731
1156
  ids.set(fiber, id);
732
- remember2(id, fiber);
1157
+ remember(id, fiber);
733
1158
  return id;
734
1159
  }
735
1160
  function hostNodesOf(fiber, limit = 50) {
@@ -761,7 +1186,7 @@ var RerenderLens = (function (exports) {
761
1186
  }
762
1187
  var INTERNAL_FRAME = /react-dom|react_jsx|jsx-(dev-)?runtime|\/react\/|node_modules\/react|react-stack-bottom-frame|react_stack_bottom_frame|scheduler/;
763
1188
  function parseStackLocation(stack) {
764
- for (const line of stack.split("\n")) {
1189
+ for (const line of stack.split("\n", 24)) {
765
1190
  const m = /(?:at\s+(?:.*?\s+)?\(?|@)?((?:https?|file|webpack|vite|blob):[^\s()]+?):(\d+):(\d+)\)?\s*$/.exec(line.trim());
766
1191
  if (!m || !m[1] || INTERNAL_FRAME.test(m[1])) continue;
767
1192
  return { fileName: m[1], lineNumber: Number(m[2]), columnNumber: Number(m[3]) };
@@ -777,9 +1202,16 @@ var RerenderLens = (function (exports) {
777
1202
  return out;
778
1203
  }
779
1204
  const st = fiber._debugStack;
780
- const text = typeof st === "string" ? st : st && typeof st.stack === "string" ? st.stack : null;
781
- return text ? parseStackLocation(text) : void 0;
1205
+ if (st && typeof st === "object") {
1206
+ if (sourceCache.has(st)) return sourceCache.get(st);
1207
+ const text = typeof st.stack === "string" ? st.stack : null;
1208
+ const out = text ? parseStackLocation(text) : void 0;
1209
+ sourceCache.set(st, out);
1210
+ return out;
1211
+ }
1212
+ return typeof st === "string" ? parseStackLocation(st) : void 0;
782
1213
  }
1214
+ var sourceCache = /* @__PURE__ */ new WeakMap();
783
1215
  function bumpCount(fiber) {
784
1216
  const prev = counts.get(fiber) ?? (fiber.alternate ? counts.get(fiber.alternate) : void 0) ?? 0;
785
1217
  const n = prev + 1;
@@ -803,7 +1235,7 @@ var RerenderLens = (function (exports) {
803
1235
  }
804
1236
  var isStateNode = (n) => !!n.queue && typeof n.queue.lastRenderedReducer === "function";
805
1237
  var isStoreNode = (n) => !!n.queue && typeof n.queue.getSnapshot === "function";
806
- function hookLabel2(node) {
1238
+ function hookLabel(node) {
807
1239
  if (isStoreNode(node)) return "useSyncExternalStore";
808
1240
  if (isStateNode(node)) {
809
1241
  const r = node.queue.lastRenderedReducer;
@@ -828,7 +1260,7 @@ var RerenderLens = (function (exports) {
828
1260
  let i = 0;
829
1261
  for (let n = first; n; n = n.next, i++) {
830
1262
  if (!isStateNode(n) && !isStoreNode(n)) continue;
831
- const hook = labels?.[i] ?? hookLabel2(n);
1263
+ const hook = labels?.[i] ?? hookLabel(n);
832
1264
  out.push({ path: `${hook}#${i}`, hook, index: i, value: n.memoizedState });
833
1265
  }
834
1266
  return out;
@@ -848,12 +1280,12 @@ var RerenderLens = (function (exports) {
848
1280
  let i = 0;
849
1281
  while (a && b) {
850
1282
  if ((isStateNode(b) || isStoreNode(b)) && !Object.is(a.memoizedState, b.memoizedState)) {
851
- const hook = labels?.[i] ?? hookLabel2(b);
1283
+ const hook = labels?.[i] ?? hookLabel(b);
852
1284
  out.push({
853
1285
  path: `${hook}#${i}`,
854
1286
  hook,
855
1287
  index: i,
856
- kind: classify(a.memoizedState, b.memoizedState),
1288
+ kind: (0, import_diff.classify)(a.memoizedState, b.memoizedState),
857
1289
  prev: a.memoizedState,
858
1290
  next: b.memoizedState
859
1291
  });
@@ -875,7 +1307,7 @@ var RerenderLens = (function (exports) {
875
1307
  }
876
1308
  return null;
877
1309
  }
878
- var isPlainObject2 = (v) => typeof v === "object" && v !== null && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
1310
+ var isPlainObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
879
1311
  function diffContexts(fiber, alt) {
880
1312
  const out = [];
881
1313
  let a = alt.dependencies?.firstContext ?? null;
@@ -888,7 +1320,7 @@ var RerenderLens = (function (exports) {
888
1320
  path: `useContext(${name})`,
889
1321
  hook: "useContext",
890
1322
  index: i,
891
- kind: classify(a.memoizedValue, b.memoizedValue),
1323
+ kind: (0, import_diff.classify)(a.memoizedValue, b.memoizedValue),
892
1324
  prev: a.memoizedValue,
893
1325
  next: b.memoizedValue
894
1326
  };
@@ -897,7 +1329,7 @@ var RerenderLens = (function (exports) {
897
1329
  const path = componentPath(provider);
898
1330
  change.provider = { component: path[path.length - 1] ?? null, path };
899
1331
  }
900
- if (isPlainObject2(a.memoizedValue) && isPlainObject2(b.memoizedValue)) {
1332
+ if (isPlainObject(a.memoizedValue) && isPlainObject(b.memoizedValue)) {
901
1333
  const prev = a.memoizedValue;
902
1334
  const next = b.memoizedValue;
903
1335
  const keys = /* @__PURE__ */ new Set([...Object.keys(prev), ...Object.keys(next)]);
@@ -912,16 +1344,16 @@ var RerenderLens = (function (exports) {
912
1344
  }
913
1345
  return out;
914
1346
  }
915
- var isGenuine2 = (c) => c.kind === "different" || c.kind === "added" || c.kind === "removed";
1347
+ var isGenuine = (c) => c.kind === "different" || c.kind === "added" || c.kind === "removed";
916
1348
  function analyze(fiber, alt, trackHooks) {
917
1349
  const prevProps = alt.memoizedProps ?? {};
918
1350
  const nextProps = fiber.memoizedProps ?? {};
919
- const propChanges = prevProps === nextProps ? [] : diffRecords(prevProps, nextProps);
1351
+ const propChanges = prevProps === nextProps ? [] : (0, import_diff.diffRecords)(prevProps, nextProps);
920
1352
  let stateChanges = [];
921
1353
  let hookChanges = [];
922
1354
  if (fiber.tag === ClassComponent) {
923
1355
  if (alt.memoizedState !== fiber.memoizedState) {
924
- stateChanges = diffRecords(
1356
+ stateChanges = (0, import_diff.diffRecords)(
925
1357
  alt.memoizedState ?? {},
926
1358
  fiber.memoizedState ?? {}
927
1359
  );
@@ -931,9 +1363,9 @@ var RerenderLens = (function (exports) {
931
1363
  }
932
1364
  const isStateHook = (h) => h.hook !== "useContext" && h.hook !== "useSyncExternalStore";
933
1365
  const causes = [];
934
- if (propChanges.some(isGenuine2)) causes.push("props");
935
- if (stateChanges.some(isGenuine2) || hookChanges.some((h) => isStateHook(h) && isGenuine2(h))) causes.push("state");
936
- if (hookChanges.some((h) => !isStateHook(h) && isGenuine2(h))) causes.push("hooks");
1366
+ if (propChanges.some(isGenuine)) causes.push("props");
1367
+ if (stateChanges.some(isGenuine) || hookChanges.some((h) => isStateHook(h) && isGenuine(h))) causes.push("state");
1368
+ if (hookChanges.some((h) => !isStateHook(h) && isGenuine(h))) causes.push("hooks");
937
1369
  const trigger = causes.length === 0 ? "parent" : causes.length === 1 ? causes[0] : "mixed";
938
1370
  return { propChanges, stateChanges, hookChanges, trigger };
939
1371
  }
@@ -967,8 +1399,10 @@ var RerenderLens = (function (exports) {
967
1399
  }
968
1400
  var lastCommit = null;
969
1401
  var EFFECT_LOOP_WINDOW_MS = 50;
1402
+ var MAX_REPORTS_PER_COMMIT = 200;
1403
+ var COMMIT_TIME_BUDGET_MS = 25;
970
1404
  function onCommit(root, commitPriority) {
971
- const s = getState();
1405
+ const s = (0, import_state2.getState)();
972
1406
  if (!s.enabled) return;
973
1407
  s.commits++;
974
1408
  const o = s.options;
@@ -997,7 +1431,8 @@ var RerenderLens = (function (exports) {
997
1431
  const updaters = updatersOf(root);
998
1432
  let commitCause;
999
1433
  let afterCommit;
1000
- if (lastCommit && at - lastCommit.at < EFFECT_LOOP_WINDOW_MS && updaters.some((u) => lastCommit.rendered.has(u))) {
1434
+ const inputDriven = commitPriority === "immediate" || commitPriority === "user-blocking";
1435
+ if (!inputDriven && lastCommit && at - lastCommit.at < EFFECT_LOOP_WINDOW_MS && updaters.some((u) => lastCommit.rendered.has(u))) {
1001
1436
  commitCause = "effect-after-commit";
1002
1437
  afterCommit = lastCommit.id;
1003
1438
  } else if (suspenseResolved) commitCause = "suspense-resolved";
@@ -1009,122 +1444,212 @@ var RerenderLens = (function (exports) {
1009
1444
  lastCommit = { id: commitId, at, rendered: renderedNames };
1010
1445
  const dispatcherRef = o.resolveHookNames ? getDispatcherRef() : null;
1011
1446
  const parentCache = /* @__PURE__ */ new Map();
1012
- for (const fiber of rendered) {
1013
- const alt = fiber.alternate;
1014
- const a = analyze(fiber, alt, trackHooks);
1015
- const durations = durationsOf(fiber);
1016
- let hookState = o.includeState !== false && trackHooks ? snapshotHooks(fiber) : void 0;
1017
- if (dispatcherRef && fiber.tag !== ClassComponent && (a.hookChanges.length || hookState && hookState.length)) {
1018
- const names = resolveHookNames(fiber, dispatcherRef);
1019
- if (names.size) {
1020
- for (const c of a.hookChanges) if (c.hook !== "useContext" && names.has(c.index)) c.custom = names.get(c.index);
1021
- if (hookState) hookState = hookState.map((h) => names.has(h.index) ? { ...h, custom: names.get(h.index) } : h);
1447
+ const endDiffScope = (0, import_diff.beginDiffScope)();
1448
+ const deadline = at + COMMIT_TIME_BUDGET_MS;
1449
+ try {
1450
+ for (let i = 0; i < rendered.length; i++) {
1451
+ if (i >= MAX_REPORTS_PER_COMMIT || (i & 15) === 15 && nowMs() > deadline) {
1452
+ s.truncated += rendered.length - i;
1453
+ (0, import_state2.warnOnce)("truncated", `a commit rendered ${rendered.length} tracked components; only ${i} were reported (see info().truncated). Narrow \`include\` or turn off includeState.`);
1454
+ break;
1455
+ }
1456
+ const fiber = rendered[i];
1457
+ const alt = fiber.alternate;
1458
+ const a = analyze(fiber, alt, trackHooks);
1459
+ const durations = durationsOf(fiber);
1460
+ let hookState = o.includeState !== false && trackHooks ? snapshotHooks(fiber) : void 0;
1461
+ if (dispatcherRef && fiber.tag !== ClassComponent && (a.hookChanges.length || hookState && hookState.length)) {
1462
+ const names = resolveHookNames(fiber, dispatcherRef);
1463
+ if (names.size) {
1464
+ for (const c of a.hookChanges) if (c.hook !== "useContext" && names.has(c.index)) c.custom = names.get(c.index);
1465
+ if (hookState) hookState = hookState.map((h) => names.has(h.index) ? { ...h, custom: names.get(h.index) } : h);
1466
+ }
1022
1467
  }
1468
+ const report = (0, import_report.buildReport)({
1469
+ component: fiberName(fiber),
1470
+ instanceId: instanceId(fiber),
1471
+ renderCount: bumpCount(fiber),
1472
+ prevProps: alt.memoizedProps ?? {},
1473
+ nextProps: fiber.memoizedProps ?? {},
1474
+ propChanges: a.propChanges,
1475
+ stateChanges: a.stateChanges,
1476
+ hookChanges: a.hookChanges,
1477
+ ...o.includeState !== false ? {
1478
+ hookState,
1479
+ contexts: trackHooks ? snapshotContexts(fiber) : void 0,
1480
+ state: fiber.tag === ClassComponent && fiber.memoizedState && typeof fiber.memoizedState === "object" ? fiber.memoizedState : void 0
1481
+ } : {},
1482
+ updaters,
1483
+ commitCause,
1484
+ afterCommit,
1485
+ key: fiber.key === null || fiber.key === void 0 ? null : String(fiber.key),
1486
+ parent: a.trigger === "parent" ? nearestRenderedAncestor(fiber, parentCache, trackHooks) : null,
1487
+ owner: ownerName(fiber),
1488
+ path: componentPath(fiber),
1489
+ memoized: isMemoizedFiber(fiber),
1490
+ selfDuration: durations ? durations.self : void 0,
1491
+ treeDuration: durations ? durations.tree : void 0,
1492
+ commitId,
1493
+ commitPriority,
1494
+ source: sourceOf(fiber)
1495
+ });
1496
+ (0, import_state2.dispatch)(report);
1023
1497
  }
1024
- const report = buildReport({
1025
- component: fiberName(fiber),
1026
- instanceId: instanceId(fiber),
1027
- renderCount: bumpCount(fiber),
1028
- prevProps: alt.memoizedProps ?? {},
1029
- nextProps: fiber.memoizedProps ?? {},
1030
- propChanges: a.propChanges,
1031
- stateChanges: a.stateChanges,
1032
- hookChanges: a.hookChanges,
1033
- ...o.includeState !== false ? {
1034
- hookState,
1035
- contexts: trackHooks ? snapshotContexts(fiber) : void 0,
1036
- state: fiber.tag === ClassComponent && fiber.memoizedState && typeof fiber.memoizedState === "object" ? fiber.memoizedState : void 0
1037
- } : {},
1038
- updaters,
1039
- commitCause,
1040
- afterCommit,
1041
- key: fiber.key === null || fiber.key === void 0 ? null : String(fiber.key),
1042
- parent: a.trigger === "parent" ? nearestRenderedAncestor(fiber, parentCache, trackHooks) : null,
1043
- owner: ownerName(fiber),
1044
- path: componentPath(fiber),
1045
- memoized: isMemoizedFiber(fiber),
1046
- selfDuration: durations ? durations.self : void 0,
1047
- treeDuration: durations ? durations.tree : void 0,
1048
- commitId,
1049
- commitPriority,
1050
- source: sourceOf(fiber)
1051
- });
1052
- dispatch(report);
1498
+ } finally {
1499
+ endDiffScope();
1053
1500
  }
1054
1501
  }
1055
1502
 
1056
- // src/tracker.ts
1057
- var MEMO = /* @__PURE__ */ Symbol.for("react.memo");
1058
- var FORWARD_REF = /* @__PURE__ */ Symbol.for("react.forward_ref");
1059
- var isMemo = (t) => typeof t === "object" && t !== null && t.$$typeof === MEMO;
1060
- var isForwardRef = (t) => typeof t === "object" && t !== null && t.$$typeof === FORWARD_REF;
1061
- var isClass = (t) => typeof t === "function" && !!t.prototype?.isReactComponent;
1062
- var isPureClass = (t) => isClass(t) && !!t.prototype.isPureReactComponent;
1063
- var isComponentLike = (t) => typeof t === "function" || isMemo(t) || isForwardRef(t);
1064
- function getDisplayName(type) {
1065
- if (typeof type === "string") return type;
1066
- if (isMemo(type)) return type.displayName ?? getDisplayName(type.type);
1067
- if (isForwardRef(type)) return type.displayName ?? getDisplayName(type.render);
1068
- if (typeof type === "function") {
1069
- const t = type;
1070
- return t.displayName ?? (t.name || "Anonymous");
1071
- }
1072
- return "Anonymous";
1073
- }
1074
- function hasMarker(type) {
1075
- if (type === null || typeof type !== "function" && typeof type !== "object") return false;
1076
- if (type[MARKER] === true) return true;
1077
- if (isMemo(type)) return hasMarker(type.type);
1078
- if (isForwardRef(type)) return hasMarker(type.render);
1079
- return false;
1080
- }
1081
- function matches(m, name) {
1082
- if (typeof m === "string") return m === name;
1083
- if (m instanceof RegExp) return m.test(name);
1084
- return m(name);
1085
- }
1086
- function shouldTrack(type, o) {
1087
- if (!isComponentLike(type)) return false;
1088
- const name = getDisplayName(type);
1089
- if (o.exclude?.some((m) => matches(m, name))) return false;
1090
- if (hasMarker(type)) return true;
1091
- if (o.include?.some((m) => matches(m, name))) return true;
1092
- if (o.trackAllComponents) return true;
1093
- if (o.trackAllMemoized) return isMemo(type) || isPureClass(type);
1094
- return false;
1095
- }
1096
- function init(options = {}) {
1097
- const s = getState();
1098
- s.options = { ...options };
1099
- s.printed.clear();
1100
- if (!s.enabled) {
1101
- s.detach = attach();
1102
- s.enabled = true;
1503
+ // vendor-rerender-lens.engine.js
1504
+ var parts = globalThis.__RERENDER_LENS_PARTS__ = globalThis.__RERENDER_LENS_PARTS__ || {};
1505
+ parts["fiber"] = fiber_exports;
1506
+ parts["tracker"] = tracker_exports;
1507
+ parts["hookNames"] = hookNames_exports;
1508
+ })();
1509
+
1510
+ ;
1511
+ /* rerender-lens 0.4.0 — rerender-lens.js: devtools bridge + notifiers (window.RerenderLens). Built by scripts/build-vendor.mjs; do not edit. */
1512
+ "use strict";
1513
+ var RerenderLens = (() => {
1514
+ var __create = Object.create;
1515
+ var __defProp = Object.defineProperty;
1516
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
1517
+ var __getOwnPropNames = Object.getOwnPropertyNames;
1518
+ var __getProtoOf = Object.getPrototypeOf;
1519
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
1520
+ var __commonJS = (cb, mod) => function __require() {
1521
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
1522
+ };
1523
+ var __export = (target, all) => {
1524
+ for (var name in all)
1525
+ __defProp(target, name, { get: all[name], enumerable: true });
1526
+ };
1527
+ var __copyProps = (to, from, except, desc) => {
1528
+ if (from && typeof from === "object" || typeof from === "function") {
1529
+ for (let key of __getOwnPropNames(from))
1530
+ if (!__hasOwnProp.call(to, key) && key !== except)
1531
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
1103
1532
  }
1104
- return disable;
1105
- }
1106
- function configure(options) {
1107
- const s = getState();
1108
- s.options = { ...s.options, ...options };
1109
- }
1110
- function disable() {
1111
- const s = getState();
1112
- if (!s.enabled) return;
1113
- s.detach?.();
1114
- s.detach = null;
1115
- s.enabled = false;
1116
- }
1117
- function isEnabled() {
1118
- return getState().enabled;
1119
- }
1120
- function track(component, name) {
1121
- const t = component;
1122
- t[MARKER] = true;
1123
- if (name) t.displayName = name;
1124
- return component;
1125
- }
1533
+ return to;
1534
+ };
1535
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
1536
+ // If the importer is in node compatibility mode or this is not an ESM
1537
+ // file that has been converted to a CommonJS file using a Babel-
1538
+ // compatible transform (i.e. "__esModule" has not been set), then set
1539
+ // "default" to the CommonJS "module.exports" for node compatibility.
1540
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
1541
+ mod
1542
+ ));
1543
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1544
+
1545
+ // rerender-lens-part:types
1546
+ var require_types = __commonJS({
1547
+ "rerender-lens-part:types"(exports, module) {
1548
+ var p = globalThis.__RERENDER_LENS_PARTS__;
1549
+ if (!p || !p["types"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
1550
+ module.exports = p["types"];
1551
+ }
1552
+ });
1553
+
1554
+ // rerender-lens-part:tracker
1555
+ var require_tracker = __commonJS({
1556
+ "rerender-lens-part:tracker"(exports, module) {
1557
+ var p = globalThis.__RERENDER_LENS_PARTS__;
1558
+ if (!p || !p["tracker"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
1559
+ module.exports = p["tracker"];
1560
+ }
1561
+ });
1562
+
1563
+ // rerender-lens-part:fiber
1564
+ var require_fiber = __commonJS({
1565
+ "rerender-lens-part:fiber"(exports, module) {
1566
+ var p = globalThis.__RERENDER_LENS_PARTS__;
1567
+ if (!p || !p["fiber"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
1568
+ module.exports = p["fiber"];
1569
+ }
1570
+ });
1571
+
1572
+ // rerender-lens-part:diff
1573
+ var require_diff = __commonJS({
1574
+ "rerender-lens-part:diff"(exports, module) {
1575
+ var p = globalThis.__RERENDER_LENS_PARTS__;
1576
+ if (!p || !p["diff"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
1577
+ module.exports = p["diff"];
1578
+ }
1579
+ });
1580
+
1581
+ // rerender-lens-part:report
1582
+ var require_report = __commonJS({
1583
+ "rerender-lens-part:report"(exports, module) {
1584
+ var p = globalThis.__RERENDER_LENS_PARTS__;
1585
+ if (!p || !p["report"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
1586
+ module.exports = p["report"];
1587
+ }
1588
+ });
1589
+
1590
+ // rerender-lens-part:state
1591
+ var require_state = __commonJS({
1592
+ "rerender-lens-part:state"(exports, module) {
1593
+ var p = globalThis.__RERENDER_LENS_PARTS__;
1594
+ if (!p || !p["state"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
1595
+ module.exports = p["state"];
1596
+ }
1597
+ });
1598
+
1599
+ // rerender-lens-part:overlay
1600
+ var require_overlay = __commonJS({
1601
+ "rerender-lens-part:overlay"(exports, module) {
1602
+ var p = globalThis.__RERENDER_LENS_PARTS__;
1603
+ if (!p || !p["overlay"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
1604
+ module.exports = p["overlay"];
1605
+ }
1606
+ });
1607
+
1608
+ // rerender-lens-part:version
1609
+ var require_version = __commonJS({
1610
+ "rerender-lens-part:version"(exports, module) {
1611
+ var p = globalThis.__RERENDER_LENS_PARTS__;
1612
+ if (!p || !p["version"]) throw new Error("rerender-lens: load vendor/rerender-lens.core.js and vendor/rerender-lens.engine.js before vendor/rerender-lens.js");
1613
+ module.exports = p["version"];
1614
+ }
1615
+ });
1616
+
1617
+ // src/inject.ts
1618
+ var inject_exports = {};
1619
+ __export(inject_exports, {
1620
+ DEVTOOLS_MARKER: () => DEVTOOLS_MARKER,
1621
+ MARKER: () => import_types.MARKER,
1622
+ PROTOCOL_VERSION: () => PROTOCOL_VERSION,
1623
+ VERSION: () => import_version2.VERSION,
1624
+ buildReport: () => import_report2.buildReport,
1625
+ classify: () => import_diff2.classify,
1626
+ combineNotifiers: () => combineNotifiers,
1627
+ configure: () => import_tracker2.configure,
1628
+ createCollector: () => createCollector,
1629
+ createDevtoolsNotifier: () => createDevtoolsNotifier,
1630
+ deepEqual: () => import_diff2.deepEqual,
1631
+ diffRecords: () => import_diff2.diffRecords,
1632
+ disable: () => import_tracker2.disable,
1633
+ ensureDevtoolsHook: () => import_fiber2.ensureDevtoolsHook,
1634
+ getDisplayName: () => import_tracker2.getDisplayName,
1635
+ getRenderers: () => import_fiber2.getRenderers,
1636
+ init: () => import_tracker2.init,
1637
+ isEnabled: () => import_tracker2.isEnabled,
1638
+ isProductionReact: () => import_fiber2.isProductionReact,
1639
+ printReport: () => import_report2.printReport,
1640
+ serialize: () => serialize,
1641
+ shouldTrack: () => import_tracker2.shouldTrack,
1642
+ summarize: () => import_report2.summarize,
1643
+ track: () => import_tracker2.track
1644
+ });
1645
+ var import_types = __toESM(require_types(), 1);
1646
+ var import_tracker2 = __toESM(require_tracker(), 1);
1647
+ var import_fiber2 = __toESM(require_fiber(), 1);
1648
+ var import_diff2 = __toESM(require_diff(), 1);
1649
+ var import_report2 = __toESM(require_report(), 1);
1126
1650
 
1127
1651
  // src/fixes.ts
1652
+ var import_report = __toESM(require_report(), 1);
1128
1653
  var AVOIDABLE = /* @__PURE__ */ new Set(["deep-equal", "function", "element"]);
1129
1654
  var rootOf = (path) => path.split(/[.[]/)[0] || path;
1130
1655
  function fixesFor(r) {
@@ -1176,7 +1701,7 @@ var RerenderLens = (function (exports) {
1176
1701
  const chain = c.custom || [];
1177
1702
  const redux = chain.some((n) => /^use(App)?Selector$/.test(n));
1178
1703
  const zustand = !redux && chain.some((n) => /^use[A-Z]\w*Store$/.test(n) || n === "useStore" || n === "useBoundStore");
1179
- out.push({ kind: "storeSnapshot", owner: r.component, target: r.component, prop: c.path, label: redux ? `memoize the selector in <${r.component}>` : zustand ? `useShallow in <${r.component}>` : `stable getSnapshot in <${r.component}>`, detail: storeAdvice(c.custom) });
1704
+ out.push({ kind: "storeSnapshot", owner: r.component, target: r.component, prop: c.path, label: redux ? `memoize the selector in <${r.component}>` : zustand ? `useShallow in <${r.component}>` : `stable getSnapshot in <${r.component}>`, detail: (0, import_report.storeAdvice)(c.custom) });
1180
1705
  } else {
1181
1706
  out.push({ kind: "bailout", owner: r.component, target: r.component, prop: c.path, label: `bail out before setting ${c.path} in <${r.component}>`, detail: `${c.path} was set to a value deep-equal to the current one (new reference).` });
1182
1707
  }
@@ -1242,25 +1767,25 @@ var RerenderLens = (function (exports) {
1242
1767
 
1243
1768
  // src/budget.ts
1244
1769
  function avoidableCounts(reports) {
1245
- const counts2 = {};
1246
- for (const r of reports) if (r.avoidable) counts2[r.component] = (counts2[r.component] || 0) + 1;
1247
- return counts2;
1770
+ const counts = {};
1771
+ for (const r of reports) if (r.avoidable) counts[r.component] = (counts[r.component] || 0) + 1;
1772
+ return counts;
1248
1773
  }
1249
1774
  function checkBudget(reports, budget) {
1250
1775
  const b = typeof budget === "number" ? { "*": budget } : budget;
1251
1776
  const fallback = typeof b["*"] === "number" ? b["*"] : 0;
1252
- const counts2 = avoidableCounts(reports);
1777
+ const counts = avoidableCounts(reports);
1253
1778
  const violations = [];
1254
1779
  const slack = [];
1255
- const names = /* @__PURE__ */ new Set([...Object.keys(counts2), ...Object.keys(b).filter((k) => k !== "*")]);
1780
+ const names = /* @__PURE__ */ new Set([...Object.keys(counts), ...Object.keys(b).filter((k) => k !== "*")]);
1256
1781
  for (const component of names) {
1257
1782
  const allowed = typeof b[component] === "number" ? b[component] : fallback;
1258
- const avoidable = counts2[component] || 0;
1783
+ const avoidable = counts[component] || 0;
1259
1784
  if (avoidable > allowed) violations.push({ component, avoidable, allowed });
1260
1785
  else if (avoidable < allowed) slack.push({ component, avoidable, allowed });
1261
1786
  }
1262
1787
  violations.sort((x, y) => y.avoidable - y.allowed - (x.avoidable - x.allowed));
1263
- return { ok: violations.length === 0, violations, slack, counts: counts2 };
1788
+ return { ok: violations.length === 0, violations, slack, counts };
1264
1789
  }
1265
1790
  function assertWithinBudget(reports, budget) {
1266
1791
  const result = checkBudget(reports, budget);
@@ -1310,101 +1835,19 @@ ${formatFixes(reports)}`);
1310
1835
  };
1311
1836
  }
1312
1837
 
1313
- // src/overlay.ts
1314
- var ROOT_ID = "rerender-lens-overlay";
1315
- var layer = null;
1316
- function ensureLayer() {
1317
- if (typeof document === "undefined" || !document.body) return null;
1318
- if (layer && layer.root.isConnected) return layer;
1319
- let root = document.getElementById(ROOT_ID);
1320
- if (!root) {
1321
- root = document.createElement("div");
1322
- root.id = ROOT_ID;
1323
- root.setAttribute("aria-hidden", "true");
1324
- Object.assign(root.style, {
1325
- position: "fixed",
1326
- inset: "0",
1327
- pointerEvents: "none",
1328
- zIndex: "2147483647",
1329
- overflow: "visible"
1330
- });
1331
- document.body.appendChild(root);
1332
- }
1333
- layer = { root, sticky: [] };
1334
- return layer;
1335
- }
1336
- function box(rect, color, fill, label) {
1337
- const b = document.createElement("div");
1338
- Object.assign(b.style, {
1339
- position: "absolute",
1340
- left: `${rect.left}px`,
1341
- top: `${rect.top}px`,
1342
- width: `${Math.max(rect.width, 2)}px`,
1343
- height: `${Math.max(rect.height, 2)}px`,
1344
- boxSizing: "border-box",
1345
- border: `2px solid ${color}`,
1346
- background: fill,
1347
- borderRadius: "2px"
1348
- });
1349
- if (label) {
1350
- const tag = document.createElement("span");
1351
- tag.textContent = label;
1352
- Object.assign(tag.style, {
1353
- position: "absolute",
1354
- left: "-2px",
1355
- top: rect.top > 20 ? "-20px" : "100%",
1356
- font: "11px/16px system-ui, sans-serif",
1357
- color: "#fff",
1358
- background: color,
1359
- padding: "1px 5px",
1360
- borderRadius: "2px",
1361
- whiteSpace: "nowrap"
1362
- });
1363
- b.appendChild(tag);
1364
- }
1365
- return b;
1366
- }
1367
- function highlight(target) {
1368
- const l = ensureLayer();
1369
- if (!l) return;
1370
- for (const s of l.sticky) s.remove();
1371
- l.sticky = [];
1372
- if (!target) return;
1373
- for (const node of target.nodes) {
1374
- const rect = node.getBoundingClientRect();
1375
- if (rect.width === 0 && rect.height === 0) continue;
1376
- const b = box(rect, "#1a73e8", "rgba(26, 115, 232, 0.12)", target.label);
1377
- l.root.appendChild(b);
1378
- l.sticky.push(b);
1379
- }
1380
- }
1381
- function clearHighlight() {
1382
- highlight(null);
1383
- }
1384
- function flash(target, duration = 500) {
1385
- const l = ensureLayer();
1386
- if (!l) return;
1387
- for (const node of target.nodes) {
1388
- const rect = node.getBoundingClientRect();
1389
- if (rect.width === 0 && rect.height === 0) continue;
1390
- const b = box(rect, "#d93025", "rgba(217, 48, 37, 0.15)");
1391
- b.style.transition = `opacity ${duration}ms ease-out`;
1392
- l.root.appendChild(b);
1393
- requestAnimationFrame(() => {
1394
- b.style.opacity = "0";
1395
- });
1396
- setTimeout(() => b.remove(), duration + 50);
1397
- }
1398
- }
1399
-
1400
- // src/version.ts
1401
- var VERSION = "0.3.0" ;
1402
-
1403
1838
  // src/devtools.ts
1839
+ var import_diff = __toESM(require_diff(), 1);
1840
+ var import_tracker = __toESM(require_tracker(), 1);
1841
+ var import_state = __toESM(require_state(), 1);
1842
+ var import_fiber = __toESM(require_fiber(), 1);
1843
+ var import_overlay = __toESM(require_overlay(), 1);
1844
+ var import_version = __toESM(require_version(), 1);
1404
1845
  var DEVTOOLS_MARKER = "__rerenderLens";
1405
1846
  var PROTOCOL_VERSION = 2;
1406
1847
  var DEFAULT_CHANNEL = "rerender-lens";
1407
- function serialize(value, maxDepth = 6, seen = /* @__PURE__ */ new WeakSet(), depth = 0) {
1848
+ var SERIALIZE_MAX_ENTRIES = 100;
1849
+ var SERIALIZE_MAX_NODES = 2e4;
1850
+ function serialize(value, maxDepth = 4, seen = /* @__PURE__ */ new WeakSet(), depth = 0, budget = { nodes: SERIALIZE_MAX_NODES }) {
1408
1851
  if (value === null || value === void 0) return value;
1409
1852
  const t = typeof value;
1410
1853
  if (t === "string" || t === "boolean") return value;
@@ -1415,24 +1858,56 @@ ${formatFixes(reports)}`);
1415
1858
  const obj = value;
1416
1859
  if (seen.has(obj)) return "[Circular]";
1417
1860
  if (depth >= maxDepth) return "[\u2026]";
1861
+ if (--budget.nodes < 0) return "[\u2026]";
1862
+ const next = (v) => serialize(v, maxDepth, seen, depth + 1, budget);
1418
1863
  seen.add(obj);
1419
1864
  try {
1420
- if (isReactElement(obj)) {
1421
- const out2 = { $type: "element", name: getDisplayName(obj.type) };
1865
+ if ((0, import_diff.isReactElement)(obj)) {
1866
+ const out2 = { $type: "element", name: (0, import_tracker.getDisplayName)(obj.type) };
1422
1867
  if (obj.key !== null && obj.key !== void 0) out2.key = String(obj.key);
1423
- out2.props = serialize(obj.props, maxDepth, seen, depth + 1);
1868
+ out2.props = next(obj.props);
1424
1869
  return out2;
1425
1870
  }
1426
1871
  if (obj instanceof Date) return { $type: "Date", value: obj.toISOString() };
1427
1872
  if (obj instanceof RegExp) return { $type: "RegExp", value: String(obj) };
1873
+ if (ArrayBuffer.isView(obj) || obj instanceof ArrayBuffer) {
1874
+ const bin = obj;
1875
+ return { $type: bin.constructor?.name || "ArrayBuffer", length: typeof bin.length === "number" ? bin.length : bin.byteLength };
1876
+ }
1877
+ if (obj instanceof Promise) return "[Promise]";
1878
+ if (typeof Node !== "undefined" && obj instanceof Node) return typeof Element !== "undefined" && obj instanceof Element ? `<${obj.tagName.toLowerCase()}>` : `[${obj.nodeName}]`;
1879
+ if (obj === globalThis) return "[Window]";
1428
1880
  if (obj instanceof Map) {
1429
- return { $type: "Map", entries: [...obj].map(([k, v]) => [serialize(k, maxDepth, seen, depth + 1), serialize(v, maxDepth, seen, depth + 1)]) };
1881
+ const entries = [];
1882
+ for (const [k, v] of obj) {
1883
+ if (entries.length >= SERIALIZE_MAX_ENTRIES) {
1884
+ entries.push(["\u2026", `+${obj.size - SERIALIZE_MAX_ENTRIES} more`]);
1885
+ break;
1886
+ }
1887
+ entries.push([next(k), next(v)]);
1888
+ }
1889
+ return { $type: "Map", entries };
1890
+ }
1891
+ if (obj instanceof Set) {
1892
+ const values = [];
1893
+ for (const v of obj) {
1894
+ if (values.length >= SERIALIZE_MAX_ENTRIES) {
1895
+ values.push(`\u2026+${obj.size - SERIALIZE_MAX_ENTRIES} more`);
1896
+ break;
1897
+ }
1898
+ values.push(next(v));
1899
+ }
1900
+ return { $type: "Set", values };
1901
+ }
1902
+ if (Array.isArray(obj)) {
1903
+ const out2 = obj.slice(0, SERIALIZE_MAX_ENTRIES).map(next);
1904
+ if (obj.length > SERIALIZE_MAX_ENTRIES) out2.push(`\u2026+${obj.length - SERIALIZE_MAX_ENTRIES} more`);
1905
+ return out2;
1430
1906
  }
1431
- if (obj instanceof Set) return { $type: "Set", values: [...obj].map((v) => serialize(v, maxDepth, seen, depth + 1)) };
1432
- if (Array.isArray(obj)) return obj.map((v) => serialize(v, maxDepth, seen, depth + 1));
1433
- if (typeof Element !== "undefined" && obj instanceof Element) return `<${obj.tagName.toLowerCase()}>`;
1434
1907
  const out = {};
1435
- for (const k of Object.keys(obj)) out[k] = serialize(obj[k], maxDepth, seen, depth + 1);
1908
+ const keys = Object.keys(obj);
1909
+ for (const k of keys.slice(0, SERIALIZE_MAX_ENTRIES)) out[k] = next(obj[k]);
1910
+ if (keys.length > SERIALIZE_MAX_ENTRIES) out["\u2026"] = `+${keys.length - SERIALIZE_MAX_ENTRIES} more`;
1436
1911
  const proto = Object.getPrototypeOf(obj);
1437
1912
  if (proto && proto !== Object.prototype && proto.constructor?.name) out.$type = proto.constructor.name;
1438
1913
  return out;
@@ -1472,33 +1947,42 @@ ${formatFixes(reports)}`);
1472
1947
  }
1473
1948
  function createDevtoolsNotifier(options = {}) {
1474
1949
  const bufferSize = options.bufferSize ?? 300;
1475
- const maxDepth = options.maxDepth ?? 6;
1950
+ const maxDepth = options.maxDepth ?? 4;
1476
1951
  const target = options.target ?? (typeof window !== "undefined" ? window : void 0);
1477
1952
  const buffer = [];
1478
1953
  let seq = 0;
1479
1954
  let flashOn = options.flashAvoidable ?? false;
1955
+ let live = !target || typeof target.addEventListener !== "function";
1956
+ if (!live) {
1957
+ target.addEventListener("message", (event) => {
1958
+ const data = event.data;
1959
+ if ((event.source === target || !event.source) && data && data.__rerenderLensReady === true) live = true;
1960
+ });
1961
+ }
1480
1962
  const post = (type, payload) => {
1481
- if (!target) return;
1963
+ if (!target || type === "report" && !live) return;
1482
1964
  const msg = { [DEVTOOLS_MARKER]: true, version: PROTOCOL_VERSION, type, payload };
1483
1965
  target.postMessage(msg, "*");
1484
1966
  };
1485
1967
  const source = options.source ?? "page";
1486
1968
  const info = () => ({
1487
1969
  count: buffer.length,
1488
- library: VERSION,
1970
+ library: import_version.VERSION,
1489
1971
  protocol: PROTOCOL_VERSION,
1490
- react: getRenderers(),
1491
- production: isProductionReact(),
1492
- enabled: isEnabled(),
1493
- options: serializeOptions(getState().options),
1972
+ react: (0, import_fiber.getRenderers)(),
1973
+ production: (0, import_fiber.isProductionReact)(),
1974
+ enabled: (0, import_tracker.isEnabled)(),
1975
+ options: serializeOptions((0, import_state.getState)().options),
1494
1976
  source,
1495
1977
  injected: typeof window !== "undefined" && typeof window.__RERENDER_LENS_INJECTED__ === "string",
1496
- scheduled: getState().scheduled,
1497
- commits: getState().commits,
1498
- overhead: { totalMs: getState().overheadMs, maxCommitMs: getState().maxCommitMs }
1978
+ scheduled: (0, import_state.getState)().scheduled,
1979
+ commits: (0, import_state.getState)().commits,
1980
+ overhead: { totalMs: (0, import_state.getState)().overheadMs, maxCommitMs: (0, import_state.getState)().maxCommitMs },
1981
+ truncated: (0, import_state.getState)().truncated
1499
1982
  });
1500
1983
  const bridge = {
1501
1984
  replay: () => {
1985
+ live = true;
1502
1986
  post("hello", info());
1503
1987
  for (const e of buffer) post("report", e.payload);
1504
1988
  },
@@ -1510,7 +1994,7 @@ ${formatFixes(reports)}`);
1510
1994
  return buffer.length;
1511
1995
  },
1512
1996
  version: PROTOCOL_VERSION,
1513
- library: VERSION,
1997
+ library: import_version.VERSION,
1514
1998
  info,
1515
1999
  pull: (since = 0) => {
1516
2000
  const first = buffer[0];
@@ -1519,41 +2003,41 @@ ${formatFixes(reports)}`);
1519
2003
  return { seq, reports, dropped };
1520
2004
  },
1521
2005
  configure: (next) => {
1522
- configure(deserializeOptions(next ?? {}));
1523
- return serializeOptions(getState().options);
2006
+ (0, import_tracker.configure)(deserializeOptions(next ?? {}));
2007
+ return serializeOptions((0, import_state.getState)().options);
1524
2008
  },
1525
- getOptions: () => serializeOptions(getState().options),
2009
+ getOptions: () => serializeOptions((0, import_state.getState)().options),
1526
2010
  highlight: (id) => {
1527
2011
  if (id === null || id === void 0) {
1528
- clearHighlight();
2012
+ (0, import_overlay.clearHighlight)();
1529
2013
  return true;
1530
2014
  }
1531
- const fiber = fiberById(id);
2015
+ const fiber = (0, import_fiber.fiberById)(id);
1532
2016
  if (!fiber) {
1533
- clearHighlight();
2017
+ (0, import_overlay.clearHighlight)();
1534
2018
  return false;
1535
2019
  }
1536
- const nodes = hostNodesOf(fiber);
1537
- highlight({ nodes, label: fiberName(fiber) });
2020
+ const nodes = (0, import_fiber.hostNodesOf)(fiber);
2021
+ (0, import_overlay.highlight)({ nodes, label: (0, import_fiber.fiberName)(fiber) });
1538
2022
  return nodes.length > 0;
1539
2023
  },
1540
2024
  flashAvoidable: (on) => {
1541
2025
  flashOn = !!on;
1542
2026
  },
1543
2027
  inspect: (node) => {
1544
- const comp = nearestComponent(fiberForNode(node));
2028
+ const comp = (0, import_fiber.nearestComponent)((0, import_fiber.fiberForNode)(node));
1545
2029
  if (!comp) return null;
1546
- const id = instanceIdOf(comp) ?? null;
2030
+ const id = (0, import_fiber.instanceIdOf)(comp) ?? null;
1547
2031
  const path = [];
1548
2032
  let f = comp.return;
1549
2033
  while (f) {
1550
- if (f.tag === 0 || f.tag === 1 || f.tag === 11 || f.tag === 14 || f.tag === 15) path.unshift(fiberName(f));
2034
+ if (f.tag === 0 || f.tag === 1 || f.tag === 11 || f.tag === 14 || f.tag === 15) path.unshift((0, import_fiber.fiberName)(f));
1551
2035
  f = f.return;
1552
2036
  }
1553
2037
  return {
1554
- component: fiberName(comp),
2038
+ component: (0, import_fiber.fiberName)(comp),
1555
2039
  instanceId: id,
1556
- tracked: shouldTrack(fiberType(comp), getState().options),
2040
+ tracked: (0, import_tracker.shouldTrack)((0, import_fiber.fiberType)(comp), (0, import_state.getState)().options),
1557
2041
  path,
1558
2042
  reports: id === null ? [] : buffer.filter((e) => e.instanceId === id).slice(-20).map((e) => e.payload)
1559
2043
  };
@@ -1681,37 +2165,14 @@ ${formatFixes(reports)}`);
1681
2165
  if (buffer.length > bufferSize) buffer.splice(0, buffer.length - bufferSize);
1682
2166
  postAll("report", payload);
1683
2167
  if (flashOn && report.avoidable && report.instanceId) {
1684
- const fiber = fiberById(report.instanceId);
1685
- if (fiber) flash({ nodes: hostNodesOf(fiber), label: report.component });
2168
+ const fiber = (0, import_fiber.fiberById)(report.instanceId);
2169
+ if (fiber) (0, import_overlay.flash)({ nodes: (0, import_fiber.hostNodesOf)(fiber), label: report.component });
1686
2170
  }
1687
2171
  };
1688
2172
  }
1689
2173
 
1690
- exports.DEVTOOLS_MARKER = DEVTOOLS_MARKER;
1691
- exports.MARKER = MARKER;
1692
- exports.PROTOCOL_VERSION = PROTOCOL_VERSION;
1693
- exports.VERSION = VERSION;
1694
- exports.buildReport = buildReport;
1695
- exports.classify = classify;
1696
- exports.combineNotifiers = combineNotifiers;
1697
- exports.configure = configure;
1698
- exports.createCollector = createCollector;
1699
- exports.createDevtoolsNotifier = createDevtoolsNotifier;
1700
- exports.deepEqual = deepEqual;
1701
- exports.diffRecords = diffRecords;
1702
- exports.disable = disable;
1703
- exports.ensureDevtoolsHook = ensureDevtoolsHook;
1704
- exports.getDisplayName = getDisplayName;
1705
- exports.getRenderers = getRenderers;
1706
- exports.init = init;
1707
- exports.isEnabled = isEnabled;
1708
- exports.isProductionReact = isProductionReact;
1709
- exports.printReport = printReport;
1710
- exports.serialize = serialize;
1711
- exports.shouldTrack = shouldTrack;
1712
- exports.summarize = summarize;
1713
- exports.track = track;
1714
-
1715
- return exports;
1716
-
1717
- })({});
2174
+ // src/inject.ts
2175
+ var import_version2 = __toESM(require_version(), 1);
2176
+ return __toCommonJS(inject_exports);
2177
+ })();
2178
+ globalThis.RerenderLens = RerenderLens;