rerender-lens 0.4.0 → 0.7.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.
Files changed (68) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/README.md +208 -359
  3. package/dist/{budget-LkNjGtRc.d.ts → budget-CA1MS7lB.d.cts} +20 -10
  4. package/dist/{budget-COBu7jBU.d.cts → budget-ok1VDJ4t.d.ts} +20 -10
  5. package/dist/cli.cjs +322 -53
  6. package/dist/cli.cjs.map +1 -1
  7. package/dist/cli.js +322 -53
  8. package/dist/cli.js.map +1 -1
  9. package/dist/{devtools-BkCct3cJ.d.cts → devtools-Cl5n_52v.d.ts} +17 -2
  10. package/dist/{devtools-CZebzpF6.d.ts → devtools-UwQx2VYS.d.cts} +17 -2
  11. package/dist/index.cjs +537 -49
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.cts +137 -8
  14. package/dist/index.d.ts +137 -8
  15. package/dist/index.js +521 -50
  16. package/dist/index.js.map +1 -1
  17. package/dist/jest-setup.cjs +1690 -0
  18. package/dist/jest-setup.cjs.map +1 -0
  19. package/dist/jest-setup.d.cts +8 -0
  20. package/dist/jest-setup.d.ts +8 -0
  21. package/dist/jest-setup.js +1688 -0
  22. package/dist/jest-setup.js.map +1 -0
  23. package/dist/jest.cjs +1777 -0
  24. package/dist/jest.cjs.map +1 -0
  25. package/dist/jest.d.cts +23 -0
  26. package/dist/jest.d.ts +23 -0
  27. package/dist/jest.js +1768 -0
  28. package/dist/jest.js.map +1 -0
  29. package/dist/{notifiers-BjjGSHpp.d.ts → notifiers-B5poAEvE.d.cts} +8 -4
  30. package/dist/{notifiers-BGQtWKfX.d.cts → notifiers-CqQW0Eum.d.ts} +8 -4
  31. package/dist/playwright.cjs +230 -28
  32. package/dist/playwright.cjs.map +1 -1
  33. package/dist/playwright.d.cts +4 -4
  34. package/dist/playwright.d.ts +4 -4
  35. package/dist/playwright.js +230 -28
  36. package/dist/playwright.js.map +1 -1
  37. package/dist/relay.cjs +71 -19
  38. package/dist/relay.cjs.map +1 -1
  39. package/dist/relay.d.cts +25 -3
  40. package/dist/relay.d.ts +25 -3
  41. package/dist/relay.js +71 -19
  42. package/dist/relay.js.map +1 -1
  43. package/dist/rerender-lens.iife.js +457 -62
  44. package/dist/runner-report-Bvqoe89M.d.ts +46 -0
  45. package/dist/runner-report-CvpDg2zt.d.cts +46 -0
  46. package/dist/setup.cjs +209 -35
  47. package/dist/setup.cjs.map +1 -1
  48. package/dist/setup.js +209 -35
  49. package/dist/setup.js.map +1 -1
  50. package/dist/{types-BzUEVkxJ.d.cts → types-DwNN5cWe.d.cts} +82 -2
  51. package/dist/{types-BzUEVkxJ.d.ts → types-DwNN5cWe.d.ts} +82 -2
  52. package/dist/vite.d.cts +1 -1
  53. package/dist/vite.d.ts +1 -1
  54. package/dist/vitest-setup.cjs +357 -44
  55. package/dist/vitest-setup.cjs.map +1 -1
  56. package/dist/vitest-setup.d.cts +4 -4
  57. package/dist/vitest-setup.d.ts +4 -4
  58. package/dist/vitest-setup.js +357 -44
  59. package/dist/vitest-setup.js.map +1 -1
  60. package/dist/vitest.cjs +420 -80
  61. package/dist/vitest.cjs.map +1 -1
  62. package/dist/vitest.d.cts +21 -39
  63. package/dist/vitest.d.ts +21 -39
  64. package/dist/vitest.js +421 -81
  65. package/dist/vitest.js.map +1 -1
  66. package/package.json +41 -4
  67. package/panel/panel.css +49 -0
  68. package/panel/panel.js +871 -353
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/diff.ts","../src/report.ts","../src/state.ts","../src/types.ts","../src/tracker.ts","../src/hookNames.ts","../src/fiber.ts","../src/fixes.ts","../src/sessions.ts","../src/budget.ts","../src/notifiers.ts","../src/vitest.ts"],"names":["counts","init","remember","hookLabel","isPlainObject","isGenuine","cache"],"mappings":";;;;;;;AAEA,IAAM,aAAA,mBAAgB,MAAA,CAAO,GAAA,CAAI,eAAe,CAAA;AAChD,IAAM,0BAAA,mBAA6B,MAAA,CAAO,GAAA,CAAI,4BAA4B,CAAA;AAEnE,SAAS,eAAe,CAAA,EAAkF;AAC/G,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,MAAM,OAAO,KAAA;AAChD,EAAA,MAAM,IAAK,CAAA,CAA6B,QAAA;AACxC,EAAA,OAAO,CAAA,KAAM,iBAAiB,CAAA,KAAM,0BAAA;AACtC;AAEA,SAAS,cAAc,CAAA,EAA0C;AAC/D,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,MAAM,OAAO,KAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,cAAA,CAAe,CAAC,CAAA;AACrC,EAAA,OAAO,KAAA,KAAU,MAAA,CAAO,SAAA,IAAa,KAAA,KAAU,IAAA;AACjD;AAIA,SAAS,QAAA,CAAS,IAAA,EAAY,CAAA,EAAW,CAAA,EAAoB;AAC3D,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACpB,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,GAAA,uBAAU,GAAA,EAAI;AACd,IAAA,IAAA,CAAK,GAAA,CAAI,GAAG,GAAG,CAAA;AAAA,EACjB;AACA,EAAA,IAAI,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,EAAG,OAAO,IAAA;AACvB,EAAA,GAAA,CAAI,IAAI,CAAC,CAAA;AACT,EAAA,OAAO,KAAA;AACT;AAYA,IAAI,KAAA,GAA0B,IAAA;AAEvB,IAAM,mBAAA,GAAsB,GAAA;AAG5B,SAAS,cAAA,CAAe,SAAS,GAAA,EAAqB;AAC3D,EAAA,MAAM,QAAA,GAAW,KAAA;AACjB,EAAA,KAAA,GAAQ,EAAE,uBAAO,IAAI,OAAA,IAAW,SAAA,EAAW,MAAA,EAAQ,WAAW,KAAA,EAAM;AACpE,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,GAAQ,QAAA;AAAA,EACV,CAAA;AACF;AAGO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,OAAO,OAAO,SAAA,KAAc,IAAA;AAC9B;AAMO,SAAS,UAAU,CAAA,EAAY,CAAA,EAAY,IAAA,mBAAa,IAAI,KAAI,EAAY;AACjF,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,GAAG,OAAO,IAAA;AAC5B,EAAA,IAAI,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG,OAAO,KAAA;AAClC,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,MAAM,IAAA,IAAQ,CAAA,KAAM,MAAM,OAAO,KAAA;AAC9D,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,GAAA,GAAM,eAAe,mBAAmB,CAAA;AAC9C,IAAA,IAAI;AACF,MAAA,OAAO,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA;AAAA,IAC7B,CAAA,SAAE;AACA,MAAA,GAAA,EAAI;AAAA,IACN;AAAA,EACF;AACA,EAAA,MAAM,EAAA,GAAK,KAAA;AACX,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,MAAM,MAAM,EAAA,CAAG,KAAA,CAAM,IAAI,IAAI,CAAA,EAAG,IAAI,IAAI,CAAA;AACxC,EAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,GAAA;AAC9B,EAAA,IAAI,EAAE,EAAA,CAAG,SAAA,GAAY,CAAA,EAAG;AACtB,IAAA,EAAA,CAAG,SAAA,GAAY,IAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAChD,EAAA,IAAI,CAAA,GAAI,EAAA,CAAG,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AACzB,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,CAAA,uBAAQ,OAAA,EAAQ;AAChB,IAAA,EAAA,CAAG,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,CAAC,CAAA;AAAA,EACtB;AACA,EAAA,CAAA,CAAE,GAAA,CAAI,MAAM,MAAM,CAAA;AAClB,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,CAAA,EAAW,CAAA,EAAW,IAAA,EAAqB;AACnE,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,IAAI,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,IAAI,GAAG,OAAO,IAAA;AAEvC,EAAA,IAAI,CAAA,YAAa,MAAM,OAAO,CAAA,YAAa,QAAQ,CAAA,CAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,EAAQ;AAC7E,EAAA,IAAI,CAAA,YAAa,MAAA,EAAQ,OAAO,CAAA,YAAa,MAAA,IAAU,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,KAAA,KAAU,CAAA,CAAE,KAAA;AAE9F,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACpB,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,CAAC,KAAK,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AACvD,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,KAAK,IAAI,CAAC,SAAA,CAAU,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,EAAG,IAAI,GAAG,OAAO,KAAA;AAC5E,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,KAAA;AAE7B,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,EAAG;AACzB,IAAA,IAAI,CAAC,YAAY,MAAA,CAAO,CAAC,KAAK,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,WAAA,EAAa,OAAO,KAAA;AACtE,IAAA,MAAM,EAAA,GAAK,CAAA;AACX,IAAA,MAAM,EAAA,GAAK,CAAA;AACX,IAAA,IAAI,EAAA,CAAG,MAAA,KAAW,EAAA,CAAG,MAAA,EAAQ,OAAO,KAAA;AACpC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,MAAA,EAAQ,CAAA,EAAA,EAAK,IAAI,EAAA,CAAG,CAAC,CAAA,KAAM,EAAA,CAAG,CAAC,GAAG,OAAO,KAAA;AAChE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,aAAa,GAAA,EAAK;AACpB,IAAA,IAAI,EAAE,CAAA,YAAa,GAAA,CAAA,IAAQ,EAAE,IAAA,KAAS,CAAA,CAAE,MAAM,OAAO,KAAA;AACrD,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA,EAAG;AACtB,MAAA,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,KAAK,CAAC,SAAA,CAAU,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,IAAI,GAAG,OAAO,KAAA;AAAA,IACzD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,aAAa,GAAA,EAAK;AACpB,IAAA,IAAI,EAAE,CAAA,YAAa,GAAA,CAAA,IAAQ,EAAE,IAAA,KAAS,CAAA,CAAE,MAAM,OAAO,KAAA;AACrD,IAAA,IAAI,CAAA,CAAE,OAAO,EAAA,EAAI;AAEf,MAAA,KAAA,MAAW,CAAA,IAAK,GAAG,IAAI,CAAC,EAAE,GAAA,CAAI,CAAC,GAAG,OAAO,KAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,KAAA,EAAO,KAAA,MAAW,KAAK,CAAA,EAAG;AACxB,MAAA,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG;AACd,MAAA,KAAA,MAAW,CAAA,IAAK,GAAG,IAAI,SAAA,CAAU,GAAG,CAAA,EAAG,IAAI,GAAG,SAAS,KAAA;AACvD,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,cAAA,CAAe,CAAC,CAAA,EAAG;AACrB,IAAA,IAAI,CAAC,cAAA,CAAe,CAAC,CAAA,EAAG,OAAO,KAAA;AAC/B,IAAA,OAAO,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,GAAA,KAAQ,CAAA,CAAE,GAAA,IAAO,SAAA,CAAU,CAAA,CAAE,KAAA,EAAO,CAAA,CAAE,OAAO,IAAI,CAAA;AAAA,EACjF;AAEA,EAAA,IAAI,aAAA,CAAc,CAAC,CAAA,IAAK,aAAA,CAAc,CAAC,CAAA,EAAG;AACxC,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACxB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACxB,IAAA,IAAI,EAAA,CAAG,MAAA,KAAW,EAAA,CAAG,MAAA,EAAQ,OAAO,KAAA;AACpC,IAAA,MAAM,EAAA,GAAK,CAAA;AACX,IAAA,KAAA,MAAW,KAAK,EAAA,EAAI;AAClB,MAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,CAAA,EAAG,CAAC,GAAG,OAAO,KAAA;AACxD,MAAA,IAAI,CAAC,SAAA,CAAW,CAAA,CAA8B,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,EAAG,IAAI,CAAA,EAAG,OAAO,KAAA;AAAA,IACzE;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,QAAA,CAAS,MAAe,IAAA,EAA2B;AACjE,EAAA,IAAI,OAAO,IAAA,KAAS,UAAA,IAAc,OAAO,SAAS,UAAA,EAAY;AAC5D,IAAA,OAAO,IAAA,CAAK,IAAA,KAAS,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,UAAS,KAAM,IAAA,CAAK,QAAA,EAAS,GAAI,UAAA,GAAa,WAAA;AAAA,EACvF;AACA,EAAA,IAAI,cAAA,CAAe,IAAI,CAAA,IAAK,cAAA,CAAe,IAAI,CAAA,EAAG;AAChD,IAAA,OAAO,SAAA,CAAU,IAAA,EAAM,IAAI,CAAA,GAAI,SAAA,GAAY,WAAA;AAAA,EAC7C;AACA,EAAA,OAAO,SAAA,CAAU,IAAA,EAAM,IAAI,CAAA,GAAI,YAAA,GAAe,WAAA;AAChD;AAEA,SAAS,QAAA,CAAS,MAAc,GAAA,EAA8B;AAC5D,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,SAAiB,CAAA,EAAG,IAAI,IAAI,GAAG,CAAA,CAAA,CAAA;AAClD,EAAA,IAAI,IAAA,KAAS,IAAI,OAAO,GAAA;AACxB,EAAA,OAAO,oBAAA,CAAqB,IAAA,CAAK,GAAG,CAAA,GAAI,GAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA,CAAA;AAC3F;AAOO,SAAS,WAAA,CACd,IAAA,EACA,IAAA,EACA,QAAA,GAAW,EAAA,EACD;AACV,EAAA,MAAM,CAAA,GAAI,QAAQ,EAAC;AACnB,EAAA,MAAM,CAAA,GAAI,QAAQ,EAAC;AACnB,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,IAAA,mBAAO,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAC3D,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,SAAS,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAG,GAAG,CAAA;AAC1D,IAAA,MAAM,SAAS,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAG,GAAG,CAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,EAAU,GAAG,CAAA;AACnC,IAAA,IAAI,MAAA,IAAU,CAAC,MAAA,EAAQ;AACrB,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,CAAA,CAAE,GAAG,CAAA,EAAG,IAAA,EAAM,MAAA,EAAW,CAAA;AACrE,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACrB,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAA,EAAW,IAAA,EAAM,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA;AACnE,MAAA;AAAA,IACF;AACA,IAAA,MAAM,CAAA,GAAI,EAAE,GAAG,CAAA;AACf,IAAA,MAAM,CAAA,GAAI,EAAE,GAAG,CAAA;AACf,IAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,CAAA,EAAG;AACrB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,CAAA,EAAG,CAAC,CAAA;AAC1B,IAAA,IAAI,SAAS,WAAA,EAAa;AAExB,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,mBAAA,EAAoB,GAAI,OAAO,kBAAA,CAAmB,CAAA,EAAG,CAAA,EAAG,IAAI,GAAG,IAAA,EAAM,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,GAAG,CAAA;AAAA,IAC9G,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA,EAAG,IAAA,EAAM,GAAG,CAAA;AAAA,IAC/C;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,kBAAA,CAAmB,CAAA,EAAY,CAAA,EAAY,IAAA,EAAc,QAAQ,CAAA,EAAW;AAC1F,EAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,IAAA;AACtB,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACxC,IAAA,IAAI,EAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,GAAG,IAAI,CAAA,OAAA,CAAA;AACzC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,MAAA,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,OAAO,kBAAA,CAAmB,EAAE,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA,EAAG,SAAS,IAAA,EAAM,CAAC,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA;AAAA,IAChG;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,aAAA,CAAc,CAAC,CAAA,IAAK,aAAA,CAAc,CAAC,CAAA,EAAG;AACxC,IAAA,MAAM,IAAA,mBAAO,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAC3D,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,OAAO,kBAAA,CAAmB,EAAE,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA,EAAG,SAAS,IAAA,EAAM,CAAC,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA;AAAA,IAChG;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;;;ACzOA,IAAM,GAAA,GAAM,MACV,OAAO,WAAA,KAAgB,WAAA,IAAe,OAAO,WAAA,CAAY,GAAA,KAAQ,UAAA,GAAa,WAAA,CAAY,GAAA,EAAI,GAAI,KAAK,GAAA,EAAI;AA+BtG,IAAM,SAAA,GAAY,CAAC,CAAA,KACxB,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,UAAK,CAAC,CAAA,QAAA,EAAM,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAA,GAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAA;AAGjG,SAAS,YAAY,MAAA,EAAsC;AAChE,EAAA,MAAM,KAAA,GAAQ,UAAU,EAAC;AACzB,EAAA,IAAI,MAAM,IAAA,CAAK,CAAC,MAAM,eAAA,CAAgB,IAAA,CAAK,CAAC,CAAC,CAAA;AAC3C,IAAA,OAAO,6JAAA;AACT,EAAA,IAAI,MAAM,IAAA,CAAK,CAAC,MAAM,kBAAA,CAAmB,IAAA,CAAK,CAAC,CAAC,CAAA;AAC9C,IAAA,OAAO,8HAAA;AACT,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,oBAAA,CAAqB,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,KAAM,UAAA,IAAc,CAAA,KAAM,eAAe,CAAA;AAC7F,IAAA,OAAO,kJAAA;AACT,EAAA,OAAO,oJAAA;AACT;AAEA,IAAM,SAAA,GAAY,CAAC,CAAA,KAAuB,CAAA,CAAE,IAAA,KAAS,eAAe,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,IAAA,KAAS,SAAA;AAGrG,IAAM,UAAA,GAAa,CAAC,MAAA,KAA4B,MAAA,CAAO,IAAA,KAAS,UAAA;AAEzD,SAAS,OAAO,MAAA,EAAwB;AAC7C,EAAA,IAAI,UAAA,CAAW,MAAM,CAAA,KAAM,MAAA,CAAO,SAAS,SAAA,IAAa,MAAA,CAAO,SAAS,YAAA,CAAA,EAAe;AACrF,IAAA,OAAO,CAAA,uKAAA,CAAA;AAAA,EACT;AACA,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,+DAAA,CAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,6EAAA,CAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,IAC5B,CAAA,0DAAA,CAAA,GACA,CAAA,8EAAA,CAAA;AAAA,IACN;AACE,MAAA,OAAO,EAAA;AAAA;AAEb;AAEA,SAAS,SAAS,MAAA,EAAwB;AACxC,EAAA,IAAI,UAAA,CAAW,MAAM,CAAA,KAAM,MAAA,CAAO,SAAS,SAAA,IAAa,MAAA,CAAO,SAAS,YAAA,CAAA,EAAe;AACrF,IAAA,OAAO,CAAA,2FAAA,CAAA;AAAA,EACT;AACA,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,MAAA,EAAS,OAAO,IAAI,CAAA,yDAAA,CAAA;AAAA,IAC7B,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,MAAA,EAAS,OAAO,IAAI,CAAA,4CAAA,CAAA;AAAA,IAC7B,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,MAAA,EAAS,OAAO,IAAI,CAAA,qDAAA,CAAA;AAAA,IAC7B,KAAK,WAAA;AACH,MAAA,OAAO,CAAA,MAAA,EAAS,OAAO,IAAI,CAAA,SAAA,CAAA;AAAA,IAC7B,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,MAAA,EAAS,OAAO,IAAI,CAAA,WAAA,CAAA;AAAA,IAC7B,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,MAAA,EAAS,OAAO,IAAI,CAAA,aAAA,CAAA;AAAA;AAEjC;AAEO,SAAS,YAAY,KAAA,EAAiC;AAC3D,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,YAAA,IAAgB,EAAC;AAC5C,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,EAAC;AAC1C,EAAA,MAAM,cAAc,CAAC,CAAA,KAA2B,EAAE,IAAA,KAAS,UAAA,IAAc,EAAE,IAAA,KAAS,YAAA;AACpF,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,SAAS,CAAA;AACrD,EAAA,MAAM,YAAA,GAAe,YAAA,CAAa,IAAA,CAAK,SAAS,KAAK,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAA,IAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAC3G,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,WAAA,CAAY,CAAC,CAAA,IAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAC5E,EAAA,MAAM,MAAA,GAAS,CAAC,YAAA,IAAgB,OAAA,EAAS,YAAA,IAAgB,SAAS,YAAA,IAAgB,OAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAEzG,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAA,GAAU,QAAA;AAAA,OAAA,IAC1B,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAA,GAAU,OAAO,CAAC,CAAA;AAAA,OAC3C,OAAA,GAAU,OAAA;AAEf,EAAA,MAAM,YAAY,OAAA,KAAY,QAAA;AAC9B,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,IAAI,SAAA,IAAa,KAAA,CAAM,WAAA,CAAY,MAAA,KAAW,CAAA,IAAK,aAAa,MAAA,KAAW,CAAA,IAAK,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AACxG,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,MAAA,GAAS,CAAA,CAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,eAAA,EAAkB,eAAA,CAAgB,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA,CAAA,GAAM,wBAAA;AAC7G,IAAA,OAAA,CAAQ,KAAK,CAAA,yCAAA,EAA4C,GAAG,CAAA,QAAA,EAAW,KAAA,CAAM,SAAS,CAAA,0CAAA,CAA4C,CAAA;AAAA,EACpI,CAAA,MAAA,IAAW,SAAA,IAAa,KAAA,CAAM,MAAA,EAAQ;AACpC,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,WAAA,EAAc,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,gBAAA,EAAmB,eAAA,CAAgB,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EAC1G;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,MAAM,WAAA,EAAa;AACjC,IAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,IAAA,OAAA,CAAQ,IAAA,CAAK,GAAA,GAAM,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAA,GAAM,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAClE;AACA,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,KAAa,KAAA;AACpC,EAAA,IAAI,aAAa,CAAC,QAAA,IAAY,KAAA,CAAM,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1D,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,CAAA,CAAA,EAAI,MAAM,SAAS,CAAA,gIAAA;AAAA,KACrB;AAAA,EACF;AACA,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,IAAA,IAAI,SAAA,CAAU,CAAC,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,OAAA,EAAU,CAAA,CAAE,IAAI,CAAA,UAAA,CAAY,CAAA;AAAA,SACtD,OAAA,CAAQ,IAAA,CAAK,CAAA,4DAAA,EAA+D,CAAA,CAAE,IAAI,CAAA,iCAAA,CAAmC,CAAA;AAAA,EAC5H;AACA,EAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,YAAA,IAAgB,SAAA,CAAU,CAAC,CAAA,EAAG;AAC3C,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,QAAA,IAAY,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA,eAAA,EAAkB,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,EAAA,CAAA,GAAO,EAAA;AAChG,MAAA,MAAM,IAAA,GACJ,CAAA,CAAE,WAAA,IAAe,OAAO,EAAE,SAAA,KAAc,QAAA,IAAY,CAAA,CAAE,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,CAAA,CAAE,WAAA,CAAY,SAAS,CAAA,CAAE,SAAA,GACrG,CAAA,OAAA,EAAU,CAAA,CAAE,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,IAAA,EAAO,CAAA,CAAE,SAAS,CAAA,oGAAA,CAAA,GACzE,EAAA;AACN,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,CAAE,IAAI,WAAW,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IAClD,CAAA,MAAA,IAAW,SAAA,CAAU,CAAC,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA,SAAA,CAAW,CAAA;AAAA,SAAA,IACvD,YAAY,CAAC,CAAA;AACpB,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA,kJAAA,CAAoJ,CAAA;AAAA,SAAA,IACzK,CAAA,CAAE,IAAA,KAAS,sBAAA,EAAwB,OAAA,CAAQ,KAAK,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA,oEAAA,EAAuE,WAAA,CAAY,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,iBAC1J,IAAA,CAAK,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA,yHAAA,CAA2H,CAAA;AAAA,EAC9J;AACA,EAAA,IAAI,KAAA,CAAM,gBAAgB,qBAAA,EAAuB;AAC/C,IAAA,MAAM,MAAM,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA,CAAS,SAAS,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,GAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,iCAAA;AACvG,IAAA,OAAA,CAAQ,KAAK,CAAA,8CAAA,EAAiD,KAAA,CAAM,eAAe,GAAG,CAAA,IAAA,EAAO,GAAG,CAAA,6HAAA,CAA0H,CAAA;AAAA,EAC5N,CAAA,MAAA,IAAW,KAAA,CAAM,WAAA,KAAgB,mBAAA,EAAqB;AACpD,IAAA,OAAA,CAAQ,KAAK,8EAA8E,CAAA;AAAA,EAC7F;AAEA,EAAA,MAAM,MAAA,GAAuB;AAAA,IAC3B,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,UAAA,EAAY,MAAM,UAAA,IAAc,CAAA;AAAA,IAChC,QAAA,EAAU,MAAM,QAAA,IAAY,CAAA;AAAA,IAC5B,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,OAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAO,EAAE,IAAA,EAAM,MAAM,SAAA,EAAW,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,IACtD,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,YAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA,EAAQ,MAAM,MAAA,IAAU,IAAA;AAAA,IACxB,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,IACtB,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,IACrB,OAAA;AAAA,IACA,MAAM,GAAA;AAAI,GACZ;AACA,EAAA,IAAI,KAAA,CAAM,YAAA,KAAiB,MAAA,EAAW,MAAA,CAAO,eAAe,KAAA,CAAM,YAAA;AAClE,EAAA,IAAI,KAAA,CAAM,YAAA,KAAiB,MAAA,EAAW,MAAA,CAAO,eAAe,KAAA,CAAM,YAAA;AAClE,EAAA,IAAI,KAAA,CAAM,cAAA,EAAgB,MAAA,CAAO,cAAA,GAAiB,KAAA,CAAM,cAAA;AACxD,EAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,KAAA,CAAM,MAAA;AACxC,EAAA,IAAI,KAAA,CAAM,SAAA,EAAW,MAAA,CAAO,SAAA,GAAY,KAAA,CAAM,SAAA;AAC9C,EAAA,IAAI,KAAA,CAAM,QAAA,EAAU,MAAA,CAAO,QAAA,GAAW,KAAA,CAAM,QAAA;AAC5C,EAAA,IAAI,KAAA,CAAM,KAAA,EAAO,MAAA,CAAO,KAAA,GAAQ,KAAA,CAAM,KAAA;AACtC,EAAA,IAAI,MAAM,QAAA,IAAY,KAAA,CAAM,SAAS,MAAA,EAAQ,MAAA,CAAO,WAAW,KAAA,CAAM,QAAA;AACrE,EAAA,IAAI,KAAA,CAAM,WAAA,EAAa,MAAA,CAAO,WAAA,GAAc,KAAA,CAAM,WAAA;AAClD,EAAA,IAAI,KAAA,CAAM,WAAA,KAAgB,MAAA,EAAW,MAAA,CAAO,cAAc,KAAA,CAAM,WAAA;AAChE,EAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,MAAA,EAAW,MAAA,CAAO,MAAM,KAAA,CAAM,GAAA;AAChD,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAgB,CAAA,EAA0B;AACjD,EAAA,QAAQ,CAAA;AAAG,IACT,KAAK,OAAA;AACH,MAAA,OAAO,mBAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,mBAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,qCAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,6BAAA;AAAA,IACT;AACE,MAAA,OAAO,4BAAA;AAAA;AAEb;AAEA,IAAM,UAAA,GAA6C;AAAA,EACjD,YAAA,EAAc,gBAAA;AAAA,EACd,QAAA,EAAU,cAAA;AAAA,EACV,OAAA,EAAS,eAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS;AACX,CAAA;AAEO,SAAS,UAAU,MAAA,EAA8B;AACtD,EAAA,MAAMA,OAAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,KAAA,MAAW,CAAA,IAAK,CAAC,GAAG,MAAA,CAAO,WAAA,EAAa,GAAG,MAAA,CAAO,YAAA,EAAc,GAAG,MAAA,CAAO,WAAW,CAAA,EAAG;AACtF,IAAAA,OAAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAA,EAAA,CAAOA,OAAAA,CAAO,IAAI,CAAA,CAAE,IAAI,CAAA,IAAK,CAAA,IAAK,CAAC,CAAA;AAAA,EAClD;AACA,EAAA,MAAM,QAAQ,CAAC,GAAGA,OAAM,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,CAAC,MAAM,CAAA,EAAG,CAAC,IAAI,UAAA,CAAW,IAAsB,CAAC,CAAA,CAAE,CAAA;AACzF,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,KAAA,CAAM,KAAK,YAAY,CAAA;AAC/C,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAGO,SAAS,WAAA,CAAY,QAAsB,OAAA,EAAwB;AACxE,EAAA,MAAM,CAAA,GAAI,QAAQ,OAAA,IAAW,OAAA;AAC7B,EAAA,MAAM,OAAO,OAAA,CAAQ,QAAA,KAAa,KAAA,GAAQ,CAAA,CAAE,QAAQ,CAAA,CAAE,cAAA;AACtD,EAAA,MAAM,UAAU,MAAA,CAAO,SAAA,GAAY,qBAAA,GAAwB,CAAA,WAAA,EAAc,OAAO,OAAO,CAAA,CAAA,CAAA;AACvF,EAAA,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,CAAA,iBAAA,EAAoB,MAAA,CAAO,SAAS,CAAA,EAAA,EAAK,OAAO,CAAA,EAAA,EAAK,SAAA,CAAU,MAAM,CAAC,CAAA,CAAE,CAAA;AACrF,EAAA,KAAA,MAAW,KAAK,MAAA,CAAO,OAAA,IAAW,GAAA,CAAI,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA;AAC9C,EAAA,IAAI,OAAO,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,MAAM,CAAC,GAAG,MAAA,CAAO,IAAA,EAAM,OAAO,SAAS,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AACpF,EAAA,KAAA,MAAW,EAAA,IAAM,CAAC,GAAG,MAAA,CAAO,WAAA,EAAa,GAAG,MAAA,CAAO,YAAA,EAAc,GAAG,MAAA,CAAO,WAAW,CAAA,EAAG;AACvF,IAAA,CAAA,CAAE,IAAI,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,WAAW,EAAA,CAAG,IAAI,CAAC,CAAA,CAAA,CAAA,EAAK,EAAE,IAAA,EAAM,EAAA,CAAG,MAAM,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AAAA,EAC/E;AACA,EAAA,CAAA,CAAE,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AAC3B,EAAA,IAAI,MAAA,CAAO,aAAa,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,CAAE,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,UAAU,GAAA,CAAI,CAAC,MAAM,CAAC,CAAA,CAAE,MAAM,CAAA,CAAE,KAAK,CAAC,CAAC,CAAC,CAAA;AAClI,EAAA,IAAI,MAAA,CAAO,YAAY,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAAE,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,SAAS,GAAA,CAAI,CAAC,MAAM,CAAC,CAAA,CAAE,MAAM,CAAA,CAAE,KAAK,CAAC,CAAC,CAAC,CAAA;AAClI,EAAA,IAAI,OAAO,KAAA,EAAO,CAAA,CAAE,GAAA,CAAI,OAAA,EAAS,OAAO,KAAK,CAAA;AAC7C,EAAA,CAAA,CAAE,QAAA,EAAS;AACb;;;ACjNA,IAAM,GAAA,mBAAM,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AAGrC,SAAS,QAAA,GAAsB;AACpC,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,IAAI,CAAA,GAAI,EAAE,GAAG,CAAA;AACb,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,CAAA,GAAI,EAAE,OAAA,EAAS,EAAC,EAAG,OAAA,EAAS,KAAA,EAAO,OAAA,kBAAS,IAAI,GAAA,EAAI,EAAG,MAAA,EAAQ,IAAA,EAAM,cAAA,EAAgB,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,UAAA,kBAAY,IAAI,GAAA,EAAI,EAAG,SAAA,EAAW,CAAA,EAAG,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,WAAW,CAAA,EAAE;AACtM,IAAA,CAAA,CAAE,GAAG,CAAA,GAAI,CAAA;AAAA,EACX;AACA,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,QAAA,CAAS,KAAa,OAAA,EAAuB;AAC3D,EAAA,MAAM,IAAI,QAAA,EAAS;AACnB,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,EAAG;AAC3B,EAAA,CAAA,CAAE,UAAA,CAAW,IAAI,GAAG,CAAA;AACpB,EAAA,CAAC,EAAE,OAAA,CAAQ,OAAA,IAAW,SAAS,IAAA,CAAK,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAE,CAAA;AAClE;AAGO,SAAS,QAAA,CAAS,QAAsB,QAAA,EAA0B;AACvE,EAAA,MAAM,IAAI,QAAA,EAAS;AACnB,EAAA,MAAM,OAAA,GAA8D,CAAA,CAAE,OAAA;AACtE,EAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,KAAW,MAAA,CAAO,SAAA,IAAa,QAAQ,MAAA,CAAA,EAAS;AAC3D,IAAA,MAAM,GAAA,GAAM,QAAQ,sBAAA,IAA0B,CAAA;AAC9C,IAAA,MAAM,KAAK,CAAA,CAAE,OAAA,CAAQ,IAAI,MAAA,CAAO,SAAS,KAAK,CAAA,IAAK,CAAA;AACnD,IAAA,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,SAAA,EAAW,CAAC,CAAA;AACjC,IAAA,IAAI,GAAA,IAAO,CAAA,IAAK,CAAA,IAAK,GAAA,EAAK;AACxB,MAAA,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,IAC7B,CAAA,MAAA,IAAW,CAAA,KAAM,GAAA,GAAM,CAAA,EAAG;AACxB,MAAA,CAAC,OAAA,CAAQ,WAAW,OAAA,EAAS,GAAA;AAAA,QAC3B,CAAA,iBAAA,EAAoB,MAAA,CAAO,SAAS,CAAA,kCAAA,EAAqC,GAAG,CAAA,mCAAA;AAAA,OAC9E;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,SAAS,MAAM,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,UAAA,EAAY,CAAA,gBAAA,EAAmB,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IACvD;AAAA,EACF;AACF;;;ACgHO,IAAM,MAAA,GAAS,cAAA;;;AC7KtB,IAAM,IAAA,mBAAO,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AACpC,IAAM,WAAA,mBAAc,MAAA,CAAO,GAAA,CAAI,mBAAmB,CAAA;AAalD,IAAM,MAAA,GAAS,CAAC,CAAA,KAA8B,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,IAAA,IAAS,CAAA,CAAe,QAAA,KAAa,IAAA;AAClH,IAAM,YAAA,GAAe,CAAC,CAAA,KACpB,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,IAAA,IAAS,CAAA,CAAqB,QAAA,KAAa,WAAA;AAC5E,IAAM,OAAA,GAAU,CAAC,CAAA,KACf,OAAO,MAAM,UAAA,IAAc,CAAC,CAAE,CAAA,CAAE,SAAA,EAA0D,gBAAA;AAC5F,IAAM,WAAA,GAAc,CAAC,CAAA,KACnB,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAC,CAAG,CAAA,CAAwD,SAAA,CAAW,oBAAA;AACvF,IAAM,eAAA,GAAkB,CAAC,CAAA,KAAwB,OAAO,CAAA,KAAM,cAAc,MAAA,CAAO,CAAC,CAAA,IAAK,YAAA,CAAa,CAAC,CAAA;AAEhG,SAAS,eAAe,IAAA,EAAuB;AACpD,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,IAAA;AACrC,EAAA,IAAI,MAAA,CAAO,IAAI,CAAA,EAAG,OAAO,KAAK,WAAA,IAAe,cAAA,CAAe,KAAK,IAAI,CAAA;AACrE,EAAA,IAAI,YAAA,CAAa,IAAI,CAAA,EAAG,OAAO,KAAK,WAAA,IAAe,cAAA,CAAe,KAAK,MAAM,CAAA;AAC7E,EAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,IAAA,MAAM,CAAA,GAAI,IAAA;AACV,IAAA,OAAO,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,IAAA,IAAQ,WAAA,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,UAAU,IAAA,EAAwB;AACzC,EAAA,IAAI,IAAA,KAAS,QAAS,OAAO,IAAA,KAAS,cAAc,OAAO,IAAA,KAAS,UAAW,OAAO,KAAA;AACtF,EAAA,IAAK,IAAA,CAA0B,MAAM,CAAA,KAAM,IAAA,EAAM,OAAO,IAAA;AACxD,EAAA,IAAI,OAAO,IAAI,CAAA,EAAG,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAC5C,EAAA,IAAI,aAAa,IAAI,CAAA,EAAG,OAAO,SAAA,CAAU,KAAK,MAAM,CAAA;AACpD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,OAAA,CAAQ,GAAqB,IAAA,EAAuB;AAC3D,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA,KAAM,IAAA;AACxC,EAAA,IAAI,CAAA,YAAa,MAAA,EAAQ,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAC3C,EAAA,OAAO,EAAE,IAAI,CAAA;AACf;AAGO,SAAS,WAAA,CAAY,MAAe,CAAA,EAAqB;AAC9D,EAAA,IAAI,CAAC,eAAA,CAAgB,IAAI,CAAA,EAAG,OAAO,KAAA;AACnC,EAAA,MAAM,IAAA,GAAO,eAAe,IAAI,CAAA;AAChC,EAAA,IAAI,CAAA,CAAE,OAAA,EAAS,IAAA,CAAK,CAAC,CAAA,KAAM,QAAQ,CAAA,EAAG,IAAI,CAAC,CAAA,EAAG,OAAO,KAAA;AACrD,EAAA,IAAI,SAAA,CAAU,IAAI,CAAA,EAAG,OAAO,IAAA;AAC5B,EAAA,IAAI,CAAA,CAAE,OAAA,EAAS,IAAA,CAAK,CAAC,CAAA,KAAM,QAAQ,CAAA,EAAG,IAAI,CAAC,CAAA,EAAG,OAAO,IAAA;AACrD,EAAA,IAAI,CAAA,CAAE,oBAAoB,OAAO,IAAA;AACjC,EAAA,IAAI,EAAE,gBAAA,EAAkB,OAAO,OAAO,IAAI,CAAA,IAAK,YAAY,IAAI,CAAA;AAC/D,EAAA,OAAO,KAAA;AACT;AAOO,SAAS,IAAA,CAAK,OAAA,GAAmB,EAAC,EAAe;AACtD,EAAA,MAAM,IAAI,QAAA,EAAS;AACnB,EAAA,CAAA,CAAE,OAAA,GAAU,EAAE,GAAG,OAAA,EAAQ;AACzB,EAAA,CAAA,CAAE,QAAQ,KAAA,EAAM;AAChB,EAAA,IAAI,CAAC,EAAE,OAAA,EAAS;AACd,IAAA,CAAA,CAAE,SAAS,MAAA,EAAO;AAClB,IAAA,CAAA,CAAE,OAAA,GAAU,IAAA;AAAA,EACd;AACA,EAAA,OAAO,OAAA;AACT;AASO,SAAS,OAAA,GAAgB;AAC9B,EAAA,MAAM,IAAI,QAAA,EAAS;AACnB,EAAA,IAAI,CAAC,EAAE,OAAA,EAAS;AAChB,EAAA,CAAA,CAAE,MAAA,IAAS;AACX,EAAA,CAAA,CAAE,MAAA,GAAS,IAAA;AACX,EAAA,CAAA,CAAE,OAAA,GAAU,KAAA;AACd;;;AC1DA,IAAM,OAAO,MAAY;AAAC,CAAA;AAGnB,SAAS,oBAAA,CAAqB,KAAA,EAAe,aAAA,EAAuB,MAAA,EAA0B;AACnG,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,EAAG;AACpC,IAAA,MAAM,CAAA,GAAI,6CAAA,CAA8C,IAAA,CAAK,IAAI,CAAA;AACjE,IAAA,MAAM,OAAO,CAAA,GAAA,CAAK,CAAA,CAAE,CAAC,CAAA,IAAK,EAAE,CAAC,CAAA,IAAK,EAAA,EAAI,OAAA,CAAQ,aAAa,EAAE,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,GAAI,EAAA;AACzF,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG,IAAA,GAAO,IAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,aAAA,IAAiB,IAAA,CAAK,QAAA,CAAS,GAAA,GAAM,aAAa,CAAA,EAAG;AAClE,IAAA,IAAI,gBAAgB,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,IAAI,CAAA;AAC/C,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAAA,EACxB;AACA,EAAA,OAAO,KAAA;AACT;AAQA,IAAM,KAAA,uBAAY,OAAA,EAAwB;AAE1C,SAAS,cAAA,CAAe,KAAA,EAAc,aAAA,EAAuB,GAAA,EAA4B,MAAA,EAAyE;AAChK,EAAA,IAAI,OAAwB,KAAA,CAAM,aAAA;AAClC,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAmC;AAC/C,IAAA,MAAM,KAAA,GAAQ,IAAA;AACd,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAS,IAAA,EAAM,CAAA,EAAA,SAAY,IAAA,CAAK,IAAA;AACpD,IAAA,KAAA,IAAS,KAAA;AACT,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,MAAA,GAAS,CAAC,SAAA,EAAmB,KAAA,KAAmC;AACpE,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM,CAAE,KAAA,IAAS,EAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,KAAA,EAAO,aAAA,EAAe,MAAM,CAAA;AAC/D,IAAA,MAAM,KAAA,GAAQ,KAAA;AACd,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAK,CAAA;AACxB,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK,GAAA,CAAI,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA;AAC1E,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAiC,CAAA,GAAI,EAAE,aAAA,GAAgB,MAAA;AACzE,EAAA,MAAM,aAAyB,EAAC;AAChC,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,EAAc,IAAA,KAA6C;AAEzE,IAAA,MAAM,EAAA,GAAK,EAAE,CAAC,MAAA,GAAS,IAAI,GAAG,CAAA,GAAI,CAAA,KAAiB,IAAA,CAAK,GAAG,CAAC,CAAA,EAAE,CAAE,SAAS,IAAI,CAAA;AAC7E,IAAA,UAAA,CAAW,IAAI,CAAA,GAAI,EAAA;AAAA,EACrB,CAAA;AACA,EAAA,MAAA,CAAO,YAAY,MAAM;AACvB,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,UAAA,EAAY,CAAC,CAAA;AAC9B,IAAA,OAAO,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,EAC3B,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,cAAc,MAAM;AACzB,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,YAAA,EAAc,CAAC,CAAA;AAChC,IAAA,OAAO,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,EAC3B,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,QAAA,EAAU,CAACC,KAAAA,KAAS;AACzB,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,QAAA,EAAU,CAAC,CAAA;AAC5B,IAAA,OAAO,CAAA,GAAI,CAAA,CAAE,aAAA,GAAgB,EAAE,SAASA,KAAAA,EAAK;AAAA,EAC/C,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,SAAA,EAAW,CAAC,EAAA,KAAO;AACxB,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,SAAA,EAAW,CAAC,CAAA;AAC7B,IAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,OAAO,EAAA,KAAO,UAAA,GAAc,EAAA,EAAqB,GAAI,MAAA;AAAA,EACxF,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,aAAA,EAAe,CAAC,EAAA,KAAO;AAC5B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,aAAA,EAAe,CAAC,CAAA;AACjC,IAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,IAAA,OAAO,MAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,EAAA;AAAA,EACnC,CAAC,CAAA;AACD,EAAA,KAAA,MAAW,MAAA,IAAU,CAAC,WAAA,EAAa,iBAAA,EAAmB,sBAAsB,qBAAqB,CAAA,EAAG,MAAA,CAAO,MAAA,EAAQ,MAAM,KAAK,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAC,CAAA;AAC/I,EAAA,MAAA,CAAO,YAAA,EAAc,CAAC,GAAA,KAAQ;AAC5B,IAAA,MAAA,CAAO,cAAc,CAAC,CAAA;AACtB,IAAA,MAAM,CAAA,GAAI,GAAA;AACV,IAAA,OAAO,CAAA,GAAI,EAAE,aAAA,GAAgB,MAAA;AAAA,EAC/B,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,iBAAiB,MAAM,KAAK,MAAA,CAAO,eAAA,EAAiB,CAAC,CAAC,CAAA;AAC7D,EAAA,MAAA,CAAO,sBAAA,EAAwB,CAAC,UAAA,EAAY,WAAA,KAAgB;AAC1D,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,sBAAA,EAAwB,CAAC,CAAA;AAC1C,IAAA,OAAO,IAAI,CAAA,CAAE,aAAA,GAAgB,OAAO,WAAA,KAAgB,UAAA,GAAc,aAA8B,GAAI,MAAA;AAAA,EACtG,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,iBAAiB,MAAM;AAC5B,IAAA,MAAA,CAAO,iBAAiB,CAAC,CAAA;AACzB,IAAA,OAAO,CAAC,OAAO,IAAI,CAAA;AAAA,EACrB,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,kBAAA,EAAoB,CAAC,CAAA,KAAM;AAChC,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,kBAAA,EAAoB,CAAC,CAAA;AACtC,IAAA,OAAO,CAAA,GAAI,EAAE,aAAA,GAAgB,CAAA;AAAA,EAC/B,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,SAAS,MAAM;AACpB,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,EAAS,CAAC,CAAA;AAC3B,IAAA,OAAO,CAAA,GAAI,EAAE,aAAA,GAAgB,IAAA;AAAA,EAC/B,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,eAAA,EAAiB,CAAC,CAAA,KAAM;AAC7B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,eAAA,EAAiB,CAAC,CAAA;AACnC,IAAA,OAAO,CAAC,CAAA,GAAI,CAAA,CAAE,aAAA,GAAgB,GAAG,IAAI,CAAA;AAAA,EACvC,CAAC,CAAA;AACD,EAAA,KAAA,MAAW,MAAA,IAAU,CAAC,gBAAA,EAAkB,cAAc,CAAA,EAAG;AACvD,IAAA,MAAA,CAAO,MAAA,EAAQ,CAAC,GAAA,EAAKA,KAAAA,KAAS;AAC5B,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAC1B,MAAA,OAAO,CAAC,CAAA,GAAI,CAAA,CAAE,aAAA,GAAgBA,KAAAA,EAAM,MAAM,KAAK,CAAA;AAAA,IACjD,CAAC,CAAA;AAAA,EACH;AACA,EAAA,MAAA,CAAO,gBAAA,EAAkB,CAAC,EAAA,KAAO;AAC/B,IAAA,MAAA,CAAO,kBAAkB,CAAC,CAAA;AAC1B,IAAA,OAAO,EAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,mBAAmB,MAAM;AAC9B,IAAA,MAAA,CAAO,mBAAmB,CAAC,CAAA;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,yBAAA,EAA2B,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK,CAAE,CAAA;AACpG,EAAA,MAAA,CAAO,cAAA,EAAgB,CAAC,IAAA,KAAS,IAAI,MAAM,MAAA,CAAO,IAAI,CAAA,IAAK,CAAC,EAAE,IAAA,iBAAK,MAAA,CAAO,GAAA,CAAI,2BAA2B,CAAC,CAAC,CAAA;AAC3G,EAAA,MAAA,CAAO,KAAA,EAAO,CAAC,MAAA,KAAW;AACxB,IAAA,MAAA,CAAO,OAAO,CAAC,CAAA;AACf,IAAA,MAAM,CAAA,GAAI,MAAA;AACV,IAAA,IAAI,CAAA,IAAK,OAAO,CAAA,CAAE,IAAA,KAAS,UAAA,EAAY;AACrC,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,WAAA,EAAa,OAAO,CAAA,CAAE,KAAA;AACvC,MAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,IAC3E;AACA,IAAA,OAAO,CAAA,GAAI,EAAE,aAAA,GAAgB,MAAA;AAAA,EAC/B,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,aAAA,EAAe,CAAC,GAAA,KAAS,GAAA,EAA4C,aAAa,CAAA;AACzF,EAAA,OAAO,EAAE,UAAA,EAAY,aAAA,EAAe,MAAM,KAAA,EAAM;AAClD;AAGA,SAAS,iBAAiB,IAAA,EAA4E;AACpG,EAAA,IAAI,CAAA,GAAI,IAAA;AACR,EAAA,OAAO,KAAK,OAAO,CAAA,KAAM,YAAY,CAAA,CAAE,IAAA,MAAU,CAAA,CAAE,IAAA;AACnD,EAAA,IAAI,KAAK,OAAO,CAAA,KAAM,YAAY,OAAO,CAAA,CAAE,WAAW,UAAA,EAAY,OAAO,EAAE,EAAA,EAAI,CAAA,CAAE,QAAwC,IAAA,EAAO,CAAA,CAAE,OAA6B,IAAA,IAAQ,CAAA,CAAE,eAAe,WAAA,EAAY;AACpM,EAAA,IAAI,OAAO,CAAA,KAAM,UAAA,EAAY,OAAO,EAAE,IAAI,CAAA,EAAmC,IAAA,EAAO,CAAA,CAAwB,IAAA,IAAQ,WAAA,EAAY;AAChI,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,WAAA,EAAY;AACvC;AAMO,SAAS,gBAAA,CAAiB,OAAc,GAAA,EAA8D;AAC3G,EAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,GAAA,EAAK,2BAAW,GAAA,EAAI;AAClC,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAC7B,EAAA,IAAI,MAAA,SAAe,MAAA,CAAO,MAAA;AAC1B,EAAA,MAAM,SAAiB,EAAE,MAAA,sBAAY,GAAA,EAAI,EAAG,IAAI,KAAA,EAAM;AACtD,EAAA,KAAA,CAAM,GAAA,CAAI,MAAM,MAAM,CAAA;AACtB,EAAA,MAAM,EAAE,EAAA,EAAI,IAAA,EAAK,GAAI,iBAAiB,IAAI,CAAA;AAC1C,EAAA,IAAI,CAAC,EAAA,EAAI,OAAO,MAAA,CAAO,MAAA;AACvB,EAAA,MAAM,OAAO,GAAA,IAAO,GAAA;AACpB,EAAA,MAAM,MAAA,GAAS,OAAA;AACf,EAAA,MAAM,QAAA,GAAW,IAAA,GAAO,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,OAAA;AACpC,EAAA,MAAM,EAAE,YAAY,aAAA,EAAc,GAAI,eAAe,KAAA,EAAO,IAAA,EAAM,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAA;AAEvF,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,UAAA,EAAY;AAAA,IAClC,GAAA,CAAI,QAAQ,GAAA,EAAK;AACf,MAAA,IAAI,GAAA,IAAO,MAAA,EAAQ,OAAO,MAAA,CAAO,GAAa,CAAA;AAC9C,MAAA,OAAO,MAAM,MAAA;AAAA,IACf;AAAA,GACD,CAAA;AACD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,CAAM,aAAA,EAAkC,CAAA,IAAK,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,IAAU,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,IAAA,EAAM,KAAA,EAAA;AAC5G,EAAA,IAAI;AACF,IAAA,IAAI,IAAA,EAAO,GAAA,CAAuB,CAAA,GAAI,KAAA;AAAA,SAChC,IAA6B,OAAA,GAAU,KAAA;AAC7C,IAAA,MAAM,YAAY,KAAA,CAAM,GAAA,KAAQ,KAAO,KAAA,CAAM,SAAA,EAAwC,OAAO,IAAA,GAAQ,KAAA,CAAA;AACpG,IAAA,EAAA,CAAG,KAAA,CAAM,aAAA,IAAiB,EAAC,EAAG,SAAS,CAAA;AACvC,IAAA,MAAA,CAAO,EAAA,GAAK,eAAc,KAAM,KAAA;AAChC,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,MAAA,CAAO,OAAO,KAAA,EAAM;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,OAAO,KAAA,EAAM;AAAA,EACtB,CAAA,SAAE;AACA,IAAA,IAAI,IAAA,EAAO,GAAA,CAAuB,CAAA,GAAI,QAAA;AAAA,SAChC,IAA6B,OAAA,GAAU,QAAA;AAAA,EAC/C;AACA,EAAA,OAAO,MAAA,CAAO,MAAA;AAChB;;;AC3MA,IAAM,iBAAA,GAAoB,CAAA;AAC1B,IAAM,cAAA,GAAiB,CAAA;AACvB,IAAM,QAAA,GAAW,CAAA;AAEjB,IAAM,eAAA,GAAkB,EAAA;AACxB,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,aAAA,GAAgB,EAAA;AACtB,IAAM,mBAAA,GAAsB,EAAA;AAC5B,IAAM,aAAA,GAAgB,CAAA;AAgEtB,IAAM,IAAA,GAAO,gCAAA;AAEb,IAAM,KAAA,GAAQ,MAAe,OAAO,WAAA,KAAgB,WAAA,IAAe,OAAO,WAAA,CAAY,GAAA,KAAQ,UAAA,GAAa,WAAA,CAAY,GAAA,EAAI,GAAI,KAAK,GAAA,EAAI;AAOjI,SAAS,kBAAA,GAAmC;AACjD,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,IAAI,IAAA,GAAO,EAAE,IAAI,CAAA;AACjB,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAqB;AAC3C,IAAA,IAAA,GAAO;AAAA,MACL,SAAA;AAAA,MACA,aAAA,EAAe,IAAA;AAAA,MACf,OAAO,QAAA,EAAU;AACf,QAAA,MAAM,KAAK,EAAE,MAAA;AACb,QAAA,SAAA,CAAU,GAAA,CAAI,IAAI,QAAQ,CAAA;AAC1B,QAAA,OAAO,EAAA;AAAA,MACT,CAAA;AAAA,MACA,iBAAA,GAAoB;AAAA,MAAC,CAAA;AAAA,MACrB,oBAAA,GAAuB;AAAA,MAAC,CAAA;AAAA,MACxB,mBAAA,GAAsB;AAAA,MAAC,CAAA;AAAA,MACvB,qBAAA,GAAwB;AAAA,MAAC;AAAA,KAC3B;AACA,IAAA,CAAA,CAAE,IAAI,CAAA,GAAI,IAAA;AAAA,EACZ;AACA,EAAA,OAAO,IAAA;AACT;AAMA,IAAM,iBAAA,uBAAwB,GAAA,EAA0B;AACxD,IAAM,cAAA,uBAAqB,GAAA,EAA2B;AACtD,IAAM,cAAA,mBAAiB,MAAA,CAAO,GAAA,CAAI,6BAA6B,CAAA;AAE/D,IAAM,QAAA,mBAAW,MAAA,CAAO,GAAA,CAAI,wBAAwB,CAAA;AAEpD,SAAS,aAAa,CAAA,EAA0B;AAC9C,EAAA,MAAM,IAAA,GAAQ,KAAK,EAAC;AACpB,EAAA,OAAO,EAAE,SAAS,IAAA,CAAK,OAAA,EAAS,YAAY,IAAA,CAAK,UAAA,EAAY,mBAAA,EAAqB,IAAA,CAAK,mBAAA,EAAoB;AAC7G;AAEA,SAAS,WAAW,IAAA,EAA0B;AAC5C,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,IAAI,EAAE,cAAc,CAAA,IAAK,OAAO,IAAA,CAAK,WAAW,UAAA,EAAY;AAC5D,EAAA,MAAM,WAAW,IAAA,CAAK,MAAA;AACtB,EAAA,IAAA,CAAK,MAAA,GAAS,SAAyB,QAAA,EAAmB;AACxD,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA;AACvC,IAAA,MAAM,MAAM,OAAO,EAAA,KAAO,QAAA,GAAW,EAAA,GAAK,kBAAkB,IAAA,GAAO,CAAA;AACnE,IAAA,iBAAA,CAAkB,GAAA,CAAI,GAAA,EAAK,YAAA,CAAa,QAAQ,CAAC,CAAA;AACjD,IAAA,MAAM,MAAO,QAAA,EAA8D,oBAAA;AAC3E,IAAA,IAAI,OAAO,OAAO,GAAA,KAAQ,UAAU,cAAA,CAAe,GAAA,CAAI,KAAK,GAAG,CAAA;AAC/D,IAAA,OAAO,EAAA;AAAA,EACT,CAAA;AACA,EAAA,CAAA,CAAE,cAAc,CAAA,GAAI,IAAA;AACtB;AAGO,SAAS,gBAAA,GAAyC;AACvD,EAAA,KAAA,MAAW,GAAA,IAAO,cAAA,CAAe,MAAA,EAAO,EAAG,OAAO,GAAA;AAClD,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,MAAM,IAAA,GAAO,EAAE,IAAI,CAAA;AACnB,EAAA,IAAI,KAAA,GAA8B,IAAA;AAClC,EAAA,IAAI,QAAQ,IAAA,CAAK,SAAA,IAAa,OAAO,IAAA,CAAK,SAAA,CAAU,YAAY,UAAA,EAAY;AAC1E,IAAA,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC5B,MAAA,MAAM,MAAO,CAAA,EAAuD,oBAAA;AACpE,MAAA,IAAI,CAAC,KAAA,IAAS,GAAA,IAAO,OAAO,GAAA,KAAQ,UAAU,KAAA,GAAQ,GAAA;AAAA,IACxD,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,MAAA,GAAqB;AACnC,EAAA,MAAM,OAAO,kBAAA,EAAmB;AAChC,EAAA,UAAA,CAAW,IAAI,CAAA;AACf,EAAA,IAAI,IAAA,CAAK,QAAQ,CAAA,EAAG,OAAO,MAAM;AAAA,EAAC,CAAA;AAClC,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAA;AACjB,EAAA,MAAM,WAAW,IAAA,CAAK,iBAAA;AACtB,EAAA,MAAM,OAAA,GAA6C,SAAyB,EAAA,EAAI,IAAA,EAAM,UAAU,QAAA,EAAU;AACxG,IAAA,MAAM,UAAU,KAAA,EAAM;AACtB,IAAA,IAAI;AACF,MAAA,QAAA,CAAS,IAAA,EAAM,aAAA,CAAc,QAAQ,CAAC,CAAA;AAAA,IACxC,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,QAAA,EAAU,CAAA,4BAAA,EAA+B,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IACjE,CAAA,SAAE;AACA,MAAA,MAAM,KAAA,GAAQ,OAAM,GAAI,OAAA;AACxB,MAAA,MAAM,IAAI,QAAA,EAAS;AACnB,MAAA,CAAA,CAAE,UAAA,IAAc,KAAA;AAChB,MAAA,IAAI,KAAA,GAAQ,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,WAAA,GAAc,KAAA;AAAA,IAC7C;AACA,IAAA,IAAI,OAAO,QAAA,KAAa,UAAA,EAAY,OAAO,QAAA,CAAS,KAAK,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,QAAA,EAAU,QAAQ,CAAA;AAAA,EAC7F,CAAA;AACA,EAAA,IAAA,CAAK,iBAAA,GAAoB,OAAA;AAEzB,EAAA,MAAM,mBAAmB,IAAA,CAAK,mBAAA;AAC9B,EAAA,MAAM,eAAA,GAAuD,SAAyB,EAAA,EAAI,IAAA,EAAM,QAAA,EAAU;AACxG,IAAA,QAAA,EAAS,CAAE,SAAA,EAAA;AACX,IAAA,IAAI,OAAO,qBAAqB,UAAA,EAAY,OAAO,iBAAiB,IAAA,CAAK,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,QAAQ,CAAA;AAAA,EACnG,CAAA;AACA,EAAA,IAAA,CAAK,mBAAA,GAAsB,eAAA;AAC3B,EAAA,OAAO,MAAM;AACX,IAAA,IAAA,CAAK,QAAQ,CAAA,GAAI,KAAA;AACjB,IAAA,IAAI,IAAA,CAAK,iBAAA,KAAsB,OAAA,EAAS,IAAA,CAAK,iBAAA,GAAoB,QAAA;AACjE,IAAA,IAAI,IAAA,CAAK,mBAAA,KAAwB,eAAA,EAAiB,IAAA,CAAK,mBAAA,GAAsB,gBAAA;AAAA,EAC/E,CAAA;AACF;AAGO,SAAS,cAAc,QAAA,EAA+C;AAC3E,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,CAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,CAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,CAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,CAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,CAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAqBA,IAAM,UAAU,CAAC,CAAA,KAAqB,CAAA,CAAE,KAAA,IAAS,EAAE,SAAA,IAAa,CAAA;AAEhE,IAAM,cAAA,GAAiB,CAAC,GAAA,KACtB,GAAA,KAAQ,iBAAA,IAAqB,GAAA,KAAQ,cAAA,IAAkB,GAAA,KAAQ,UAAA,IAAc,GAAA,KAAQ,aAAA,IAAiB,GAAA,KAAQ,mBAAA;AAGzG,SAAS,gBAAgB,KAAA,EAAuB;AACrD,EAAA,IAAI,MAAM,GAAA,KAAQ,aAAA,IAAiB,KAAA,CAAM,GAAA,KAAQ,qBAAqB,OAAO,IAAA;AAC7E,EAAA,IAAI,KAAA,CAAM,QAAQ,cAAA,EAAgB;AAChC,IAAA,MAAM,OAAO,KAAA,CAAM,SAAA;AACnB,IAAA,OAAO,CAAC,EAAE,IAAA,IAAQ,IAAA,CAAK,oBAAA,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,YAAY,KAAA,EAAqD;AAC/E,EAAA,IAAI,OAAO,KAAA,CAAM,cAAA,KAAmB,QAAA,EAAU,OAAO,IAAA;AACrD,EAAA,MAAM,OAAO,KAAA,CAAM,cAAA;AACnB,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,CAAM,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,OAAA,EAAS,IAAI,OAAO,CAAA,CAAE,cAAA,KAAmB,QAAA,cAAsB,CAAA,CAAE,cAAA;AACpG,EAAA,OAAO,EAAE,MAAM,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,GAAO,QAAQ,GAAG,IAAA,EAAK;AACpD;AAGO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,OAAO,KAAA,CAAM,eAAe,KAAA,CAAM,IAAA;AACpC;AAEO,SAAS,UAAU,KAAA,EAAsB;AAC9C,EAAA,OAAO,cAAA,CAAe,SAAA,CAAU,KAAK,CAAC,CAAA;AACxC;AAGA,SAAS,UAAU,KAAA,EAAuB;AACxC,EAAA,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,GAAI,aAAA,MAAmB,CAAA;AAC9C;AAGA,SAAS,YAAA,CAAa,OAAc,GAAA,EAAqB;AACvD,EAAA,OAAO,KAAA,CAAM,SAAS,GAAA,CAAI,IAAA;AAC5B;AAGA,IAAM,MAAA,uBAAa,OAAA,EAAuB;AAC1C,IAAM,GAAA,uBAAU,OAAA,EAAuB;AAEvC,IAAM,UAAA,uBAAiB,GAAA,EAA4B;AACnD,IAAM,UAAA,GAAa,OAAO,OAAA,KAAY,UAAA;AAEtC,IAAI,OAAA,GAAU,GAAA;AACd,SAASC,SAAAA,CAAS,IAAY,KAAA,EAAoB;AAChD,EAAA,IAAI,CAAC,UAAA,EAAY;AACjB,EAAA,IAAI,WAAW,GAAA,CAAI,EAAE,CAAA,EAAG,KAAA,OAAY,KAAA,EAAO;AAC3C,EAAA,UAAA,CAAW,GAAA,CAAI,EAAA,EAAI,IAAI,OAAA,CAAQ,KAAK,CAAC,CAAA;AAErC,EAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC7B,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,GAAG,CAAA,IAAK,UAAA,EAAY,IAAI,CAAC,GAAA,CAAI,KAAA,EAAM,EAAG,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA;AACxE,IAAA,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,GAAA,EAAM,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA,EAC9C;AACF;AAGO,SAAS,aAAa,KAAA,EAAkC;AAC7D,EAAA,OAAO,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,KAAM,KAAA,CAAM,YAAY,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,GAAI,MAAA,CAAA;AACzE;AAYA,SAAS,WAAW,KAAA,EAAsB;AACxC,EAAA,MAAM,QAAA,GAAW,aAAa,KAAK,CAAA;AACnC,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,GAAA,CAAI,GAAA,CAAI,OAAO,QAAQ,CAAA;AACvB,IAAAA,SAAAA,CAAS,UAAU,KAAK,CAAA;AACxB,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,QAAA,EAAS;AACnB,EAAA,MAAM,KAAK,CAAA,CAAE,cAAA,EAAA;AACb,EAAA,GAAA,CAAI,GAAA,CAAI,OAAO,EAAE,CAAA;AACjB,EAAAA,SAAAA,CAAS,IAAI,KAAK,CAAA;AAClB,EAAA,OAAO,EAAA;AACT;AA0BO,SAAS,iBAAiB,KAAA,EAAmC;AAClE,EAAA,IAAI,CAAA,GAAkB,KAAA;AACtB,EAAA,OAAO,CAAA,IAAK,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC9B,IAAA,IAAI,cAAA,CAAe,CAAA,CAAE,GAAG,CAAA,EAAG,OAAO,CAAA;AAClC,IAAA,CAAA,GAAI,CAAA,CAAE,MAAA;AAAA,EACR;AACA,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,cAAA,GAAiB,kIAAA;AAGhB,SAAS,mBAAmB,KAAA,EAA2C;AAC5E,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,EAAE,CAAA,EAAG;AACxC,IAAA,MAAM,CAAA,GAAI,4FAAA,CAA6F,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AACvH,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,CAAE,CAAC,CAAA,IAAK,cAAA,CAAe,IAAA,CAAK,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG;AAC9C,IAAA,OAAO,EAAE,QAAA,EAAU,CAAA,CAAE,CAAC,CAAA,EAAG,YAAY,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,GAAG,YAAA,EAAc,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA,EAAE;AAAA,EAChF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,SAAS,KAAA,EAA0C;AACjE,EAAA,MAAM,MAAM,KAAA,CAAM,YAAA;AAClB,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,CAAI,QAAA,KAAa,QAAA,EAAU;AAC3C,IAAA,MAAM,GAAA,GAAsB,EAAE,QAAA,EAAU,GAAA,CAAI,QAAA,EAAS;AACrD,IAAA,IAAI,OAAO,GAAA,CAAI,UAAA,KAAe,QAAA,EAAU,GAAA,CAAI,aAAa,GAAA,CAAI,UAAA;AAC7D,IAAA,IAAI,OAAO,GAAA,CAAI,YAAA,KAAiB,QAAA,EAAU,GAAA,CAAI,eAAe,GAAA,CAAI,YAAA;AACjE,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAK,KAAA,CAAM,WAAA;AACjB,EAAA,IAAI,EAAA,IAAM,OAAO,EAAA,KAAO,QAAA,EAAU;AAEhC,IAAA,IAAI,YAAY,GAAA,CAAI,EAAE,GAAG,OAAO,WAAA,CAAY,IAAI,EAAE,CAAA;AAClD,IAAA,MAAM,OAAO,OAAO,EAAA,CAAG,KAAA,KAAU,QAAA,GAAW,GAAG,KAAA,GAAQ,IAAA;AACvD,IAAA,MAAM,GAAA,GAAM,IAAA,GAAO,kBAAA,CAAmB,IAAI,CAAA,GAAI,MAAA;AAC9C,IAAA,WAAA,CAAY,GAAA,CAAI,IAAI,GAAG,CAAA;AACvB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,EAAA,KAAO,QAAA,GAAW,kBAAA,CAAmB,EAAE,CAAA,GAAI,MAAA;AAC3D;AACA,IAAM,WAAA,uBAAkB,OAAA,EAA4C;AAEpE,SAAS,UAAU,KAAA,EAAsB;AACvC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,KAAM,KAAA,CAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,GAAI,MAAA,CAAA,IAAc,CAAA;AACjG,EAAA,MAAM,IAAI,IAAA,GAAO,CAAA;AACjB,EAAA,MAAA,CAAO,GAAA,CAAI,OAAO,CAAC,CAAA;AACnB,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,IAAI,IAAkB,KAAA,CAAM,MAAA;AAC5B,EAAA,OAAO,CAAA,IAAK,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC9B,IAAA,IAAI,cAAA,CAAe,EAAE,GAAG,CAAA,OAAQ,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAC,CAAA;AACpD,IAAA,CAAA,GAAI,CAAA,CAAE,MAAA;AAAA,EACR;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,UAAU,KAAA,EAA6B;AAC9C,EAAA,MAAM,QAAQ,KAAA,CAAM,WAAA;AACpB,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,IAAI,MAAM,IAAA,KAAS,MAAA,EAAW,OAAO,cAAA,CAAe,MAAM,IAAI,CAAA;AAC9D,EAAA,OAAO,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,GAAW,MAAM,IAAA,GAAO,IAAA;AACvD;AAEA,IAAM,WAAA,GAAc,CAAC,CAAA,KAAyB,CAAC,CAAC,EAAE,KAAA,IAAS,OAAO,CAAA,CAAE,KAAA,CAAM,mBAAA,KAAwB,UAAA;AAClG,IAAM,WAAA,GAAc,CAAC,CAAA,KAAyB,CAAC,CAAC,EAAE,KAAA,IAAS,OAAO,CAAA,CAAE,KAAA,CAAM,WAAA,KAAgB,UAAA;AAE1F,SAASC,WAAU,IAAA,EAAwB;AACzC,EAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG,OAAO,sBAAA;AAC9B,EAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACrB,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAO,mBAAA;AACtB,IAAA,OAAO,CAAA,CAAE,IAAA,KAAS,mBAAA,GAAsB,UAAA,GAAa,YAAA;AAAA,EACvD;AACA,EAAA,OAAO,OAAA;AACT;AAGA,IAAM,iCAAiB,IAAI,GAAA,CAAI,CAAC,YAAA,EAAc,eAAA,EAAiB,KAAK,CAAC,CAAA;AAGrE,SAAS,aAAA,CAAc,OAAc,KAAA,EAAyC;AAC5E,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,eAAA,EAAiB,MAAA,CAAO,CAAC,MAAM,CAAC,cAAA,CAAe,GAAA,CAAI,CAAC,CAAC,CAAA;AACzE,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,IAAS,CAAA,GAAqB,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,EAAE,IAAA,EAAM,SAAA,EAAA;AACpD,EAAA,OAAO,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,SAAA,GAAY,KAAA,GAAQ,IAAA;AACvD;AAEA,IAAM,UAAA,GAAa,CAAC,CAAA,KAA8B,CAAC,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,IAAW,CAAA;AAGtF,SAAS,cAAc,KAAA,EAA8B;AAC1D,EAAA,MAAM,MAAsB,EAAC;AAC7B,EAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,cAAA,EAAgB,OAAO,GAAA;AACzC,EAAA,MAAM,QAAQ,KAAA,CAAM,aAAA;AACpB,EAAA,IAAI,CAAC,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,GAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,KAAA,EAAO,KAAK,CAAA;AACzC,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,IAAS,IAAqB,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAM,CAAA,EAAA,EAAK;AACvD,IAAA,IAAI,CAAC,WAAA,CAAY,CAAC,KAAK,CAAC,WAAA,CAAY,CAAC,CAAA,EAAG;AACxC,IAAA,MAAM,IAAA,GAAO,MAAA,GAAS,CAAC,CAAA,IAAKA,WAAU,CAAC,CAAA;AACvC,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,IAAA,EAAM,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,CAAE,eAAe,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,iBAAiB,KAAA,EAAkD;AACjF,EAAA,MAAM,MAA0C,EAAC;AACjD,EAAA,KAAA,IAAS,CAAA,GAAI,MAAM,YAAA,EAAc,YAAA,IAAgB,MAAM,CAAA,EAAG,CAAA,GAAI,EAAE,IAAA,EAAM,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,EAAE,OAAA,CAAQ,WAAA,IAAe,WAAW,KAAA,EAAO,CAAA,CAAE,eAAe,CAAA;AACnJ,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,SAAA,CAAU,OAAc,GAAA,EAA0B;AACzD,EAAA,MAAM,MAAoB,EAAC;AAC3B,EAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,cAAA,EAAgB,OAAO,GAAA;AACzC,EAAA,IAAI,IAAI,GAAA,CAAI,aAAA;AACZ,EAAA,IAAI,IAAI,KAAA,CAAM,aAAA;AACd,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,IAAK,OAAO,MAAM,QAAA,IAAY,EAAE,MAAA,IAAU,CAAA,CAAA,EAAI,OAAO,GAAA;AAEhE,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,KAAA,EAAO,CAAC,CAAA;AAErC,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,KAAK,CAAA,EAAG;AACb,IAAA,IAAA,CAAK,WAAA,CAAY,CAAC,CAAA,IAAK,WAAA,CAAY,CAAC,CAAA,KAAM,CAAC,MAAA,CAAO,EAAA,CAAG,CAAA,CAAE,aAAA,EAAe,CAAA,CAAE,aAAa,CAAA,EAAG;AACtF,MAAA,MAAM,IAAA,GAAO,MAAA,GAAS,CAAC,CAAA,IAAKA,WAAU,CAAC,CAAA;AACvC,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAAA,QAClB,IAAA;AAAA,QACA,KAAA,EAAO,CAAA;AAAA,QACP,IAAA,EAAM,QAAA,CAAS,CAAA,CAAE,aAAA,EAAe,EAAE,aAAa,CAAA;AAAA,QAC/C,MAAM,CAAA,CAAE,aAAA;AAAA,QACR,MAAM,CAAA,CAAE;AAAA,OACT,CAAA;AAAA,IACH;AACA,IAAA,CAAA,GAAI,CAAA,CAAE,IAAA;AACN,IAAA,CAAA,GAAI,CAAA,CAAE,IAAA;AACN,IAAA,CAAA,EAAA;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,YAAA,CAAa,OAAc,OAAA,EAAgC;AACzE,EAAA,IAAI,IAAkB,KAAA,CAAM,MAAA;AAC5B,EAAA,OAAO,CAAA,IAAK,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC9B,IAAA,IAAI,CAAA,CAAE,QAAQ,eAAA,EAAiB;AAC7B,MAAA,MAAM,IAAI,CAAA,CAAE,IAAA;AACZ,MAAA,IAAI,CAAA,KAAM,WAAY,CAAA,IAAK,OAAO,MAAM,QAAA,IAAY,CAAA,CAAE,QAAA,KAAa,OAAA,EAAU,OAAO,CAAA;AAAA,IACtF;AACA,IAAA,CAAA,GAAI,CAAA,CAAE,MAAA;AAAA,EACR;AACA,EAAA,OAAO,IAAA;AACT;AAEA,IAAMC,iBAAgB,CAAC,CAAA,KAA6C,OAAO,CAAA,KAAM,YAAY,CAAA,KAAM,IAAA,IAAQ,CAAC,KAAA,CAAM,QAAQ,CAAC,CAAA,IAAK,OAAO,cAAA,CAAe,CAAC,MAAM,MAAA,CAAO,SAAA;AAGpK,SAAS,YAAA,CAAa,OAAc,GAAA,EAA0B;AAC5D,EAAA,MAAM,MAAoB,EAAC;AAC3B,EAAA,IAAI,CAAA,GAAI,GAAA,CAAI,YAAA,EAAc,YAAA,IAAgB,IAAA;AAC1C,EAAA,IAAI,CAAA,GAAI,KAAA,CAAM,YAAA,EAAc,YAAA,IAAgB,IAAA;AAC5C,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,KAAK,CAAA,EAAG;AACb,IAAA,IAAI,CAAA,CAAE,OAAA,KAAY,CAAA,CAAE,OAAA,IAAW,CAAC,MAAA,CAAO,EAAA,CAAG,CAAA,CAAE,aAAA,EAAe,CAAA,CAAE,aAAa,CAAA,EAAG;AAC3E,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,OAAA,CAAQ,WAAA,IAAe,SAAA;AACtC,MAAA,MAAM,MAAA,GAAqB;AAAA,QACzB,IAAA,EAAM,cAAc,IAAI,CAAA,CAAA,CAAA;AAAA,QACxB,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,CAAA;AAAA,QACP,IAAA,EAAM,QAAA,CAAS,CAAA,CAAE,aAAA,EAAe,EAAE,aAAa,CAAA;AAAA,QAC/C,MAAM,CAAA,CAAE,aAAA;AAAA,QACR,MAAM,CAAA,CAAE;AAAA,OACV;AACA,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAA,EAAO,CAAA,CAAE,OAAO,CAAA;AAC9C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAA,GAAO,cAAc,QAAQ,CAAA;AACnC,QAAA,MAAA,CAAO,QAAA,GAAW,EAAE,SAAA,EAAW,IAAA,CAAK,KAAK,MAAA,GAAS,CAAC,CAAA,IAAK,IAAA,EAAM,IAAA,EAAK;AAAA,MACrE;AACA,MAAA,IAAIA,eAAc,CAAA,CAAE,aAAa,KAAKA,cAAAA,CAAc,CAAA,CAAE,aAAa,CAAA,EAAG;AACpE,QAAA,MAAM,OAAO,CAAA,CAAE,aAAA;AACf,QAAA,MAAM,OAAO,CAAA,CAAE,aAAA;AACf,QAAA,MAAM,IAAA,mBAAO,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,GAAG,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA;AACjE,QAAA,MAAA,CAAO,cAAc,CAAC,GAAG,IAAI,CAAA,CAAE,OAAO,CAAC,CAAA,KAAM,CAAC,MAAA,CAAO,GAAG,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AACzE,QAAA,MAAA,CAAO,YAAY,IAAA,CAAK,IAAA;AAAA,MAC1B;AACA,MAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,IACjB;AACA,IAAA,CAAA,GAAI,CAAA,CAAE,IAAA;AACN,IAAA,CAAA,GAAI,CAAA,CAAE,IAAA;AACN,IAAA,CAAA,EAAA;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,IAAMC,UAAAA,GAAY,CAAC,CAAA,KAAuB,CAAA,CAAE,IAAA,KAAS,eAAe,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,IAAA,KAAS,SAAA;AASrG,SAAS,OAAA,CAAQ,KAAA,EAAc,GAAA,EAAY,UAAA,EAA+B;AACxE,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,aAAA,IAAiB,EAAC;AACxC,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,aAAA,IAAiB,EAAC;AAC1C,EAAA,MAAM,cAAc,SAAA,KAAc,SAAA,GAAY,EAAC,GAAI,WAAA,CAAY,WAAW,SAAS,CAAA;AACnF,EAAA,IAAI,eAAyB,EAAC;AAC9B,EAAA,IAAI,cAA4B,EAAC;AACjC,EAAA,IAAI,KAAA,CAAM,QAAQ,cAAA,EAAgB;AAChC,IAAA,IAAI,GAAA,CAAI,aAAA,KAAkB,KAAA,CAAM,aAAA,EAAe;AAC7C,MAAA,YAAA,GAAe,WAAA;AAAA,QACZ,GAAA,CAAI,iBAA6C,EAAC;AAAA,QAClD,KAAA,CAAM,iBAA6C;AAAC,OACvD;AAAA,IACF;AAAA,EACF,WAAW,UAAA,EAAY;AACrB,IAAA,WAAA,GAAc,CAAC,GAAG,SAAA,CAAU,KAAA,EAAO,GAAG,GAAG,GAAG,YAAA,CAAa,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,EACtE;AACA,EAAA,MAAM,cAAc,CAAC,CAAA,KAA2B,EAAE,IAAA,KAAS,YAAA,IAAgB,EAAE,IAAA,KAAS,sBAAA;AACtF,EAAA,MAAM,SAA0B,EAAC;AACjC,EAAA,IAAI,YAAY,IAAA,CAAKA,UAAS,CAAA,EAAG,MAAA,CAAO,KAAK,OAAO,CAAA;AACpD,EAAA,IAAI,aAAa,IAAA,CAAKA,UAAS,CAAA,IAAK,WAAA,CAAY,KAAK,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,KAAKA,UAAAA,CAAU,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,KAAK,OAAO,CAAA;AAChH,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,WAAA,CAAY,CAAC,CAAA,IAAKA,UAAAA,CAAU,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,KAAK,OAAO,CAAA;AACjF,EAAA,MAAM,OAAA,GAAyB,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,QAAA,GAAW,OAAO,MAAA,KAAW,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,GAAK,OAAA;AACnG,EAAA,OAAO,EAAE,WAAA,EAAa,YAAA,EAAc,WAAA,EAAa,OAAA,EAAQ;AAC3D;AAEA,SAAS,uBAAA,CAAwB,KAAA,EAAcC,MAAAA,EAAsC,UAAA,EAAwC;AAC3H,EAAA,IAAI,IAAkB,KAAA,CAAM,MAAA;AAC5B,EAAA,OAAO,CAAA,IAAK,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC9B,IAAA,IAAI,cAAA,CAAe,EAAE,GAAG,CAAA,IAAK,EAAE,SAAA,IAAa,SAAA,CAAU,CAAC,CAAA,EAAG;AACxD,MAAA,IAAI,IAAA,GAAOA,MAAAA,CAAM,GAAA,CAAI,CAAC,CAAA;AACtB,MAAA,IAAI,SAAS,MAAA,EAAW;AACtB,QAAA,IAAA,GAAO,EAAE,IAAA,EAAM,SAAA,CAAU,CAAC,CAAA,EAAG,OAAA,EAAS,OAAA,CAAQ,CAAA,EAAG,CAAA,CAAE,SAAA,EAAW,UAAU,CAAA,CAAE,OAAA,EAAQ;AAClF,QAAAA,MAAAA,CAAM,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AAAA,MACnB;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,CAAA,GAAI,CAAA,CAAE,MAAA;AAAA,EACR;AACA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,WAAW,IAAA,EAA2B;AAC7C,EAAA,MAAM,MAAM,IAAA,CAAK,gBAAA;AACjB,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,IAAI,OAAA,KAAY,UAAA,SAAmB,EAAC;AACvD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,KAAM;AACjB,IAAA,MAAM,IAAA,GAAO,iBAAiB,CAAC,CAAA;AAC/B,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,MAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IAC5C;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACT;AAGA,IAAI,UAAA,GAAuE,IAAA;AAC3E,IAAM,qBAAA,GAAwB,EAAA;AAEvB,IAAM,sBAAA,GAAyB,GAAA;AAC/B,IAAM,qBAAA,GAAwB,EAAA;AAG9B,SAAS,QAAA,CAAS,MAAiB,cAAA,EAAuC;AAC/E,EAAA,MAAM,IAAI,QAAA,EAAS;AACnB,EAAA,IAAI,CAAC,EAAE,OAAA,EAAS;AAChB,EAAA,CAAA,CAAE,OAAA,EAAA;AACF,EAAA,MAAM,IAAI,CAAA,CAAE,OAAA;AACZ,EAAA,MAAM,UAAA,GAAa,EAAE,UAAA,KAAe,KAAA;AAEpC,EAAA,MAAM,WAAoB,EAAC;AAC3B,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AACtC,EAAA,IAAI,GAAA,GAAM,KAAA;AACV,EAAA,IAAI,gBAAA,GAAmB,KAAA;AACvB,EAAA,MAAM,KAAA,GAAiB,CAAC,IAAA,CAAK,OAAO,CAAA;AACpC,EAAA,OAAO,MAAM,MAAA,EAAQ;AACnB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,EAAI;AACxB,IAAA,MAAM,MAAM,KAAA,CAAM,SAAA;AAClB,IAAA,IAAI,OAAO,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA,IAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AACxD,MAAA,IAAI,YAAA,CAAa,KAAA,EAAO,GAAG,CAAA,EAAG,GAAA,GAAM,IAAA;AACpC,MAAA,aAAA,CAAc,GAAA,CAAI,SAAA,CAAU,KAAK,CAAC,CAAA;AAClC,MAAA,IAAI,WAAA,CAAY,UAAU,KAAK,CAAA,EAAG,CAAC,CAAA,EAAG,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,IAC3D;AAEA,IAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,iBAAA,IAAqB,GAAA,IAAO,GAAA,CAAI,kBAAkB,IAAA,IAAQ,KAAA,CAAM,aAAA,KAAkB,IAAA,EAAM,gBAAA,GAAmB,IAAA;AAE7H,IAAA,IAAI,CAAC,GAAA,IAAO,KAAA,CAAM,KAAA,KAAU,IAAI,KAAA,EAAO;AACrC,MAAA,KAAA,IAAS,CAAA,GAAI,MAAM,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,CAAE,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAAA,IAC1D;AAAA,EACF;AACA,EAAA,IAAI,GAAA,IAAO,CAAA,CAAE,eAAA,KAAoB,KAAA,EAAO;AAGxC,EAAA,QAAA,CAAS,OAAA,EAAQ;AACjB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,QAAA,GAAW,WAAW,IAAI,CAAA;AAEhC,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,WAAA;AAGJ,EAAA,MAAM,WAAA,GAAc,cAAA,KAAmB,WAAA,IAAe,cAAA,KAAmB,eAAA;AACzE,EAAA,IAAI,CAAC,WAAA,IAAe,UAAA,IAAc,EAAA,GAAK,UAAA,CAAW,KAAK,qBAAA,IAAyB,QAAA,CAAS,IAAA,CAAK,CAAC,MAAM,UAAA,CAAY,QAAA,CAAS,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG;AACjI,IAAA,WAAA,GAAc,qBAAA;AACd,IAAA,WAAA,GAAc,UAAA,CAAW,EAAA;AAAA,EAC3B,CAAA,MAAA,IAAW,kBAAkB,WAAA,GAAc,mBAAA;AAC3C,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,UAAA,GAAa,EAAE,EAAA,EAAI,CAAA,CAAE,YAAA,EAAc,EAAA,EAAI,UAAU,aAAA,EAAc;AAC/D,IAAA;AAAA,EACF;AACA,EAAA,MAAM,WAAW,CAAA,CAAE,YAAA,EAAA;AACnB,EAAA,UAAA,GAAa,EAAE,EAAA,EAAI,QAAA,EAAU,EAAA,EAAI,UAAU,aAAA,EAAc;AACzD,EAAA,MAAM,aAAA,GAAgB,CAAA,CAAE,gBAAA,GAAmB,gBAAA,EAAiB,GAAI,IAAA;AAChE,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAA8B;AAEtD,EAAA,MAAM,eAAe,cAAA,EAAe;AACpC,EAAA,MAAM,WAAW,EAAA,GAAK,qBAAA;AACtB,EAAA,IAAI;AACJ,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,MAAA,IAAI,KAAK,sBAAA,IAAA,CAA4B,CAAA,GAAI,QAAQ,EAAA,IAAM,KAAA,KAAU,QAAA,EAAW;AAC1E,QAAA,CAAA,CAAE,SAAA,IAAa,SAAS,MAAA,GAAS,CAAA;AACjC,QAAA,QAAA,CAAS,aAAa,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,CAAA,0BAAA,EAA6B,CAAC,CAAA,mFAAA,CAAqF,CAAA;AAC7K,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,MAAA,MAAM,MAAM,KAAA,CAAM,SAAA;AAClB,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,KAAA,EAAO,GAAA,EAAK,UAAU,CAAA;AACxC,MAAA,MAAM,SAAA,GAAY,YAAY,KAAK,CAAA;AACnC,MAAA,IAAI,YAAY,CAAA,CAAE,YAAA,KAAiB,SAAS,UAAA,GAAa,aAAA,CAAc,KAAK,CAAA,GAAI,KAAA,CAAA;AAChF,MAAA,IAAI,aAAA,IAAiB,MAAM,GAAA,KAAQ,cAAA,KAAmB,EAAE,WAAA,CAAY,MAAA,IAAW,SAAA,IAAa,SAAA,CAAU,MAAA,CAAA,EAAU;AAC9G,QAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,KAAA,EAAO,aAAa,CAAA;AACnD,QAAA,IAAI,MAAM,IAAA,EAAM;AACd,UAAA,KAAA,MAAW,KAAK,CAAA,CAAE,WAAA,EAAa,IAAI,CAAA,CAAE,SAAS,YAAA,IAAgB,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,EAAG,CAAA,CAAE,SAAS,KAAA,CAAM,GAAA,CAAI,EAAE,KAAK,CAAA;AAC9G,UAAA,IAAI,SAAA,cAAuB,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAO,KAAA,CAAM,IAAI,CAAA,CAAE,KAAK,IAAI,EAAE,GAAG,GAAG,MAAA,EAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,KAAK,CAAA,EAAE,GAAI,CAAE,CAAA;AAAA,QACjH;AAAA,MACF;AACA,MAAA,MAAM,SAAS,WAAA,CAAY;AAAA,QACzB,SAAA,EAAW,UAAU,KAAK,CAAA;AAAA,QAC1B,UAAA,EAAY,WAAW,KAAK,CAAA;AAAA,QAC5B,WAAA,EAAa,UAAU,KAAK,CAAA;AAAA,QAC5B,SAAA,EAAW,GAAA,CAAI,aAAA,IAAiB,EAAC;AAAA,QACjC,SAAA,EAAW,KAAA,CAAM,aAAA,IAAiB,EAAC;AAAA,QACnC,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,cAAc,CAAA,CAAE,YAAA;AAAA,QAChB,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,GAAI,CAAA,CAAE,YAAA,KAAiB,KAAA,GACnB;AAAA,UACE,SAAA;AAAA,UACA,QAAA,EAAU,UAAA,GAAa,gBAAA,CAAiB,KAAK,CAAA,GAAI,KAAA,CAAA;AAAA,UACjD,KAAA,EAAO,KAAA,CAAM,GAAA,KAAQ,cAAA,IAAkB,KAAA,CAAM,aAAA,IAAiB,OAAO,KAAA,CAAM,aAAA,KAAkB,QAAA,GAAY,KAAA,CAAM,aAAA,GAA4C,KAAA;AAAA,YAE7J,EAAC;AAAA,QACL,QAAA;AAAA,QACA,WAAA;AAAA,QACA,WAAA;AAAA,QACA,GAAA,EAAK,KAAA,CAAM,GAAA,KAAQ,IAAA,IAAQ,KAAA,CAAM,QAAQ,KAAA,CAAA,GAAY,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,QAC5E,MAAA,EAAQ,EAAE,OAAA,KAAY,QAAA,GAAW,wBAAwB,KAAA,EAAO,WAAA,EAAa,UAAU,CAAA,GAAI,IAAA;AAAA,QAC3F,KAAA,EAAO,UAAU,KAAK,CAAA;AAAA,QACtB,IAAA,EAAM,cAAc,KAAK,CAAA;AAAA,QACzB,QAAA,EAAU,gBAAgB,KAAK,CAAA;AAAA,QAC/B,YAAA,EAAc,SAAA,GAAY,SAAA,CAAU,IAAA,GAAO,KAAA,CAAA;AAAA,QAC3C,YAAA,EAAc,SAAA,GAAY,SAAA,CAAU,IAAA,GAAO,KAAA,CAAA;AAAA,QAC3C,QAAA;AAAA,QACA,cAAA;AAAA,QACA,MAAA,EAAQ,SAAS,KAAK;AAAA,OACvB,CAAA;AACD,MAAA,QAAA,CAAS,MAAM,CAAA;AAAA,IACjB;AAAA,EACA,CAAA,SAAE;AACA,IAAA,YAAA,EAAa;AAAA,EACf;AACF;;;ACjsBA,IAAM,4BAAY,IAAI,GAAA,CAAY,CAAC,YAAA,EAAc,UAAA,EAAY,SAAS,CAAC,CAAA;AACvE,IAAM,MAAA,GAAS,CAAC,IAAA,KAAyB,IAAA,CAAK,MAAM,MAAM,CAAA,CAAE,CAAC,CAAA,IAAK,IAAA;AAE3D,SAAS,SAAS,CAAA,EAAwB;AAC/C,EAAA,MAAM,MAAa,EAAC;AACpB,EAAA,MAAM,QAAQ,CAAA,CAAE,KAAA,IAAU,EAAE,MAAA,IAAU,CAAA,CAAE,OAAO,IAAA,IAAS,GAAA;AACxD,EAAA,MAAM,OAAA,GAAoB,CAAC,GAAG,CAAA,CAAE,WAAA,EAAa,GAAG,CAAA,CAAE,YAAA,EAAc,GAAG,CAAA,CAAE,WAAW,CAAA;AAChF,EAAA,IAAI,EAAE,SAAA,KAAc,OAAA,CAAQ,WAAW,CAAA,IAAK,CAAA,CAAE,aAAa,KAAA,CAAA,EAAQ;AACjE,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,OAAO,CAAA,CAAE,SAAA;AAAA,MACT,QAAQ,CAAA,CAAE,SAAA;AAAA,MACV,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO,CAAA,MAAA,EAAS,CAAA,CAAE,SAAS,CAAA,eAAA,CAAA;AAAA,MAC3B,QAAQ,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,CAAA,CAAA,EAAI,EAAE,SAAS,CAAA,4CAAA,EAAgD,CAAA,CAAE,MAAA,IAAU,EAAE,MAAA,CAAO,IAAA,IAAS,YAAY,CAAA,cAAA,CAAA,GAAmB,CAAA,CAAA,EAAI,EAAE,SAAS,CAAA,sEAAA;AAAA,KAC3K,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,EAAE,WAAA,EAAa;AAC7B,IAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA;AAC1B,IAAA,IAAI,SAAS,UAAA,KAAe,CAAA,CAAE,SAAS,SAAA,IAAa,CAAA,CAAE,SAAS,YAAA,CAAA,EAAe;AAC5E,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,QAAQ,CAAA,CAAE,SAAA,EAAW,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,CAAA,qBAAA,EAAwB,EAAE,SAAS,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAA,EAAK,MAAA,EAAQ,CAAA,CAAA,EAAI,KAAK,CAAA,8BAAA,EAAiC,CAAA,CAAE,SAAS,CAAA,kBAAA,CAAA,EAAsB,CAAA;AAAA,IAC7N,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,UAAA,EAAY;AAChC,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,CAAA,YAAA,EAAe,IAAI,SAAS,KAAK,CAAA,CAAA,CAAA,EAAK,MAAA,EAAQ,CAAA,MAAA,EAAS,CAAA,CAAE,IAAI,CAAA,MAAA,EAAS,CAAA,CAAE,SAAS,CAAA,wCAAA,EAA2C,KAAK,CAAA,EAAA,CAAA,EAAM,CAAA;AAAA,IACxN,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,SAAA,EAAW;AAC/B,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,CAAA,qBAAA,EAAwB,IAAI,QAAQ,KAAK,CAAA,CAAA,CAAA,EAAK,MAAA,EAAQ,CAAA,MAAA,EAAS,CAAA,CAAE,IAAI,CAAA,MAAA,EAAS,CAAA,CAAE,SAAS,CAAA,oEAAA,EAAuE,KAAK,CAAA,EAAA,CAAA,EAAM,CAAA;AAAA,IAC/P,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,MAAA,EAAQ,CAAA,CAAE,SAAA,EAAW,IAAA,EAAM,MAAM,KAAA,EAAO,CAAA,QAAA,EAAW,IAAI,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,CAAA,EAAK,MAAA,EAAQ,CAAA,MAAA,EAAS,CAAA,CAAE,IAAI,CAAA,MAAA,EAAS,CAAA,CAAE,SAAS,cAAc,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,IAAI,IAAI,OAAA,GAAU,QAAQ,CAAA,4CAAA,EAA+C,KAAK,MAAM,CAAA;AAAA,IAC5Q;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,CAAC,GAAG,CAAA,CAAE,cAAc,GAAG,CAAA,CAAE,WAAW,CAAA,EAAuC;AACzF,IAAA,MAAM,SAAA,GAAY,EAAE,IAAA,KAAS,YAAA;AAC7B,IAAA,MAAM,OAAA,GAAU,SAAA,GAAA,CAAa,oBAAA,CAAqB,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,IAAK,EAAC,EAAG,CAAC,CAAA,IAAK,SAAA,GAAY,EAAA;AACxF,IAAA,MAAM,aAAA,GAAgB,aAAa,CAAA,CAAE,QAAA,IAAY,EAAE,QAAA,CAAS,SAAA,GAAY,CAAA,CAAE,QAAA,CAAS,SAAA,GAAY,IAAA;AAC/F,IAAA,IAAI,aAAa,CAAA,CAAE,IAAA,KAAS,eAAe,CAAA,CAAE,WAAA,IAAe,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,IAAY,CAAA,CAAE,YAAY,MAAA,GAAS,CAAA,IAAK,EAAE,WAAA,CAAY,MAAA,GAAS,EAAE,SAAA,EAAW;AAC7J,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,cAAA;AAAA,QACN,KAAA,EAAO,aAAA,IAAiB,CAAA,EAAG,OAAO,CAAA,SAAA,CAAA;AAAA,QAClC,QAAQ,CAAA,CAAE,SAAA;AAAA,QACV,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,CAAA,MAAA,EAAS,OAAO,CAAA,EAAG,gBAAgB,CAAA,KAAA,EAAQ,aAAa,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,OAAA,EAAU,CAAA,CAAE,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,QAAA,CAAA;AAAA,QACzG,MAAA,EAAQ,GAAG,CAAA,CAAE,WAAA,CAAY,MAAM,CAAA,IAAA,EAAO,CAAA,CAAE,SAAS,CAAA,iBAAA,EAAoB,OAAO,CAAA,iCAAA;AAAA,OAC7E,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG;AAC5B,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,aAAA,IAAiB,CAAA,EAAG,OAAO,CAAA,SAAA,CAAA,EAAa,MAAA,EAAQ,CAAA,CAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,CAAA,YAAA,EAAe,OAAO,CAAA,eAAA,EAAkB,aAAA,GAAgB,CAAA,KAAA,EAAQ,aAAa,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,OAAO,CAAA,6DAAA,CAAA,EAAiE,CAAA;AAAA,IACzS,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,sBAAA,EAAwB;AAC5C,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,MAAA,IAAU,EAAC;AAC3B,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,CAAC,MAAM,qBAAA,CAAsB,IAAA,CAAK,CAAC,CAAC,CAAA;AAC7D,MAAA,MAAM,OAAA,GAAU,CAAC,KAAA,IAAS,KAAA,CAAM,KAAK,CAAC,CAAA,KAAM,oBAAA,CAAqB,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA,KAAM,UAAA,IAAc,MAAM,eAAe,CAAA;AACrH,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,eAAA,EAAiB,OAAO,CAAA,CAAE,SAAA,EAAW,MAAA,EAAQ,CAAA,CAAE,SAAA,EAAW,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAO,KAAA,GAAQ,CAAA,yBAAA,EAA4B,CAAA,CAAE,SAAS,CAAA,CAAA,CAAA,GAAM,OAAA,GAAU,CAAA,eAAA,EAAkB,CAAA,CAAE,SAAS,CAAA,CAAA,CAAA,GAAM,CAAA,uBAAA,EAA0B,CAAA,CAAE,SAAS,KAAK,MAAA,EAAQ,WAAA,CAAY,CAAA,CAAE,MAAM,GAAG,CAAA;AAAA,IAC7Q,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,CAAA,CAAE,SAAA,EAAW,MAAA,EAAQ,CAAA,CAAE,SAAA,EAAW,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAO,CAAA,wBAAA,EAA2B,CAAA,CAAE,IAAI,CAAA,KAAA,EAAQ,CAAA,CAAE,SAAS,CAAA,CAAA,CAAA,EAAK,MAAA,EAAQ,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,kEAAA,CAAA,EAAsE,CAAA;AAAA,IAC5O;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEO,IAAM,MAAA,GAAS,CAAC,CAAA,KAAmB,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,IAAQ,EAAE,MAAM,CAAA,CAAA;AAG7E,SAAS,UAAU,OAAA,EAAsC;AAC9D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAuB;AACzC,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,IAAI,CAAC,EAAE,SAAA,EAAW;AAClB,IAAA,KAAA,MAAW,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,EAAG;AAC3B,MAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,MAAA,IAAI,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AACvB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,GAAA,GAAM,EAAE,GAAG,CAAA,EAAG,GAAA,EAAK,OAAO,CAAA,EAAG,UAAA,EAAY,EAAC,EAAE;AAC5C,QAAA,KAAA,CAAM,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,MACpB;AACA,MAAA,GAAA,CAAI,KAAA,EAAA;AACJ,MAAA,GAAA,CAAI,UAAA,CAAW,EAAE,SAAS,CAAA,GAAA,CAAK,IAAI,UAAA,CAAW,CAAA,CAAE,SAAS,CAAA,IAAK,CAAA,IAAK,CAAA;AAAA,IACrE;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,QAAQ,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAA,IAAS,CAAA,CAAE,MAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC,CAAA;AAC/F;AAGO,SAAS,WAAA,CAAY,OAAA,EAAyB,KAAA,GAAQ,EAAA,EAAY;AACvE,EAAA,MAAM,MAAA,GAAS,UAAU,OAAO,CAAA;AAChC,EAAA,IAAI,CAAC,MAAA,CAAO,MAAA,EAAQ,OAAO,0BAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,EAAG,OAAO,CAAA,GAAI,CAAC,EAAE,QAAA,CAAS,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,WAAA,EAAc,CAAA,CAAE,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,UAAU,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,EAAE,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACjN,EAAA,IAAI,MAAA,CAAO,SAAS,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,WAAA,EAAS,MAAA,CAAO,MAAA,GAAS,KAAK,CAAA,KAAA,CAAO,CAAA;AAC3E,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;AC7EO,SAAS,gBAAA,CAAiB,OAAA,EAAyB,IAAA,GAA+E,EAAC,EAAmB;AAvC7J,EAAA,IAAA,EAAA;AAwCE,EAAA,MAAM,cAA6C,EAAC;AACpD,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,CAAA,GAAK,WAAA,CAAA,EAAA,GAAY,CAAA,CAAE,SAAA,CAAA,KAAd,WAAA,CAAA,EAAA,CAAA,GAA6B,EAAE,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE,CAAA;AAC5E,IAAA,CAAA,CAAE,KAAA,EAAA;AACF,IAAA,IAAI,EAAE,SAAA,EAAW;AACf,MAAA,CAAA,CAAE,SAAA,EAAA;AACF,MAAA,SAAA,EAAA;AACA,MAAA,IAAI,OAAO,CAAA,CAAE,YAAA,KAAiB,QAAA,EAAU;AACtC,QAAA,CAAA,CAAE,UAAU,CAAA,CAAE,YAAA;AACd,QAAA,MAAA,IAAU,CAAA,CAAE,YAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAK,EAAA,IAAM,CAAA,CAAA,EAAI,KAAK,GAAA,EAAI,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAAA,IAC1C,IAAA,EAAM,KAAK,IAAA,IAAQ,SAAA;AAAA,IACnB,WAAW,IAAA,CAAK,SAAA,KAAc,OAAA,CAAQ,CAAC,GAAG,IAAA,IAAQ,CAAA,CAAA;AAAA,IAClD,OAAA,EAAS,KAAK,OAAA,KAAY,OAAA,CAAQ,QAAQ,MAAA,GAAS,CAAC,GAAG,IAAA,IAAQ,IAAA,CAAA;AAAA,IAC/D,OAAO,OAAA,CAAQ,MAAA;AAAA,IACf,SAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAO,SAAA,CAAU,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,CAAE,KAAK,KAAA,EAAO,CAAA,CAAE,OAAO,KAAA,EAAO,CAAA,CAAE,OAAM,CAAE;AAAA,GACvF;AACF;;;ACzCO,SAAS,gBAAgB,OAAA,EAAiD;AAC/E,EAAA,MAAMN,UAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,IAAI,CAAA,CAAE,WAAWA,OAAAA,CAAO,CAAA,CAAE,SAAS,CAAA,GAAA,CAAKA,OAAAA,CAAO,CAAA,CAAE,SAAS,KAAK,CAAA,IAAK,CAAA;AAC7F,EAAA,OAAOA,OAAAA;AACT;AAEO,SAAS,WAAA,CAAY,SAAyB,MAAA,EAAuC;AAC1F,EAAA,MAAM,IAAY,OAAO,MAAA,KAAW,WAAW,EAAE,GAAA,EAAK,QAAO,GAAI,MAAA;AACjE,EAAA,MAAM,QAAA,GAAW,OAAO,CAAA,CAAE,GAAG,MAAM,QAAA,GAAW,CAAA,CAAE,GAAG,CAAA,GAAI,CAAA;AACvD,EAAA,MAAMA,OAAAA,GAAS,gBAAgB,OAAO,CAAA;AACtC,EAAA,MAAM,aAAgC,EAAC;AACvC,EAAA,MAAM,QAA+B,EAAC;AACtC,EAAA,MAAM,KAAA,uBAAY,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAKA,OAAM,CAAA,EAAG,GAAG,OAAO,IAAA,CAAK,CAAC,EAAE,MAAA,CAAO,CAAC,MAAM,CAAA,KAAM,GAAG,CAAC,CAAC,CAAA;AAC1F,EAAA,KAAA,MAAW,aAAa,KAAA,EAAO;AAC7B,IAAA,MAAM,OAAA,GAAU,OAAO,CAAA,CAAE,SAAS,MAAM,QAAA,GAAW,CAAA,CAAE,SAAS,CAAA,GAAK,QAAA;AACnE,IAAA,MAAM,SAAA,GAAYA,OAAAA,CAAO,SAAS,CAAA,IAAK,CAAA;AACvC,IAAA,IAAI,SAAA,GAAY,SAAS,UAAA,CAAW,IAAA,CAAK,EAAE,SAAA,EAAW,SAAA,EAAW,SAAS,CAAA;AAAA,SAAA,IACjE,SAAA,GAAY,SAAS,KAAA,CAAM,IAAA,CAAK,EAAE,SAAA,EAAW,SAAA,EAAW,SAAS,CAAA;AAAA,EAC5E;AACA,EAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,OAAA,CAAQ,CAAA;AAC7E,EAAA,OAAO,EAAE,IAAI,UAAA,CAAW,MAAA,KAAW,GAAG,UAAA,EAAY,KAAA,EAAO,QAAAA,OAAAA,EAAO;AAClE;AAQO,SAAS,kBAAA,CAAmB,SAAyB,MAAA,EAAuC;AACjG,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,OAAA,EAAS,MAAM,CAAA;AAC1C,EAAA,IAAI,MAAA,CAAO,IAAI,OAAO,MAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,OAAO,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,GAAA,EAAM,EAAE,SAAS,CAAA,GAAA,EAAM,EAAE,SAAS,CAAA,oBAAA,EAAuB,EAAE,SAAA,KAAc,CAAA,GAAI,KAAK,GAAG,CAAA,SAAA,EAAY,CAAA,CAAE,OAAO,CAAA,CAAA,CAAG,CAAA;AACxJ,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA;AAAA,EAA+B,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;;AAAA;AAAA,EAAkC,WAAA,CAAY,OAAO,CAAC,CAAA,CAAE,CAAA;AACzH;;;ACnCO,SAAS,eAAA,GAA6B;AAC3C,EAAA,MAAM,UAA0B,EAAC;AACjC,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,IAAI,SAAA,GAAY;AACd,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AAAA,IAC1C,CAAA;AAAA,IACA,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA;AAAA,IACA,OAAO,MAAM;AACX,MAAA,OAAA,CAAQ,MAAA,GAAS,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,iBAAA,GAAoB;AAClB,MAAA,MAAM,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AAC7C,MAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,MAAM,CAAA,CAAE,SAAS,CAAA,UAAA,EAAa,CAAA,CAAE,WAAW,CAAA;AAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC7H,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,MAAM,uBAAuB,GAAA,CAAI,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA;AAAA,EAAe,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;;AAAA;AAAA,EAAkC,WAAA,CAAY,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IACxK,CAAA;AAAA,IACA,KAAA,EAAO,MAAM,SAAA,CAAU,OAAO,CAAA;AAAA,IAC9B,OAAA,EAAS,CAAC,IAAA,KAAkB,gBAAA,CAAiB,OAAA,EAAS,OAAO,EAAE,IAAA,EAAK,GAAI,EAAE,CAAA;AAAA,IAC1E,kBAAA,EAAoB,CAAC,MAAA,KAAW,kBAAA,CAAmB,SAAS,MAAM;AAAA,GACpE;AACF;;;ACrBO,IAAM,OAAA,GAAU;AAyBhB,SAAS,kBAAkB,OAAA,GAAwB,EAAC,EAAG,KAAA,GAAoB,EAAC,EAAc;AAC/F,EAAA,kBAAA,EAAmB;AACnB,EAAA,MAAM,EAAE,QAAA,EAAU,GAAG,IAAA,EAAK,GAAI,OAAA;AAC9B,EAAA,MAAM,YAAY,eAAA,EAAgB;AAClC,EAAA,IAAA,CAAK,EAAE,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,GAAG,IAAA,EAAM,QAAA,EAAU,SAAA,CAAU,QAAA,EAAU,CAAA;AACpF,EAAA,MAAM,QAAQ,MAAY;AACxB,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAM;AACxC,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACrB,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAChC,IAAA,IAAI,MAAM,cAAA,CAAe,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,MAAM,KAAA,CAAM,QAAA,IAAW,IAAK,EAAA,EAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG,IAAI,IAAI,CAAA;AACpH,IAAA,SAAA,CAAU,KAAA,EAAM;AAChB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,YAAY,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AACnD,MAAA,IAAI,SAAA,CAAU,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,SAAA,CAAU,MAAM,CAAA,oBAAA,EAAuB,SAAA,CAAU,MAAA,KAAW,CAAA,GAAI,KAAK,GAAG,CAAA;AAAA,EAAkB,WAAA,CAAY,SAAA,EAAW,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,IAC/K;AAAA,EACF,CAAA;AACA,EAAA,KAAA,CAAM,WAAW,KAAK,CAAA;AACtB,EAAA,OAAO,EAAE,WAAW,KAAA,EAAM;AAC5B;AAGA,SAAS,KAAK,CAAA,EAA+B;AAC3C,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAyB,KAAA,CAAM,QAAQ,CAAC,CAAA,GAAI,EAAC,GAAI,OAAO,CAAA,KAAM,aAAa,CAAA,OAAA,EAAM,CAAA,CAAwB,QAAQ,EAAE,CAAA,CAAA,GAAK,KAAK,OAAO,CAAA,KAAM,QAAA,GAAW,EAAC,GAAI,CAAA;AACzK,EAAA,OAAO;AAAA,IACL,GAAG,CAAA;AAAA,IACH,aAAa,CAAA,CAAE,WAAA,CAAY,IAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,MAAM,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA,EAAG,IAAA,EAAM,MAAM,CAAA,CAAE,IAAI,GAAE,CAAE,CAAA;AAAA,IAC1F,cAAc,CAAA,CAAE,YAAA,CAAa,IAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,MAAM,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA,EAAG,IAAA,EAAM,MAAM,CAAA,CAAE,IAAI,GAAE,CAAE,CAAA;AAAA,IAC5F,aAAa,CAAA,CAAE,WAAA,CAAY,IAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,MAAM,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA,EAAG,IAAA,EAAM,MAAM,CAAA,CAAE,IAAI,GAAE,CAAE,CAAA;AAAA,IAC1F,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,IAAA,EAAM,EAAC,EAAE;AAAA,IAC5B,SAAA,EAAW,MAAA;AAAA,IACX,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AACF;AAcA,IAAqB,uBAArB,MAA0C;AAAA,EAIxC,WAAA,CAAY,OAAA,GAA2B,EAAC,EAAG;AAD3C,IAAA,IAAA,CAAQ,IAAA,GAAO,KAAA;AAEb,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,EAAO,EAAG,eAAe,CAAA;AAC1C,IAAA,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAClC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,GAAA,EAAK,CAAA,IAAA,EAAO,OAAA,CAAQ,GAAG,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,MAAA,CAAQ,CAAA;AAC9D,IAAA,aAAA,CAAc,IAAA,CAAK,MAAM,EAAE,CAAA;AAC3B,IAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,GAAI,IAAA,CAAK,IAAA;AAAA,EAC9B;AAAA,EACA,MAAA,GAAe;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,GAAI,IAAA,CAAK,IAAA;AAAA,EAC9B;AAAA,EACA,YAAA,GAAqB;AACnB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA;AAAA,EAEA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EACQ,MAAA,GAAe;AACrB,IAAA,IAAI,KAAK,IAAA,EAAM;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACjC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,KAAU,CAAC,IAAA,KAAuB,KAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,IAAA,GAAO,IAAI,CAAA,CAAA;AAChG,IAAA,MAAM,YAAY,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAA;AACrD,IAAA,GAAA,CAAI,EAAE,CAAA;AACN,IAAA,GAAA,CAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,MAAM,CAAA,OAAA,EAAU,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,EAAA,EAAK,SAAS,CAAA,yBAAA,CAA2B,CAAA;AACtH,IAAA,IAAI,SAAA,MAAe,WAAA,CAAY,OAAA,EAAS,KAAK,OAAA,CAAQ,KAAA,IAAS,EAAE,CAAC,CAAA;AACjE,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,aAAA,CAAc,IAAA,CAAK,QAAQ,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,EAAE,YAAA,EAAc,IAAA,EAAM,SAAS,CAAA,EAAG,UAAA,EAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,IAAe,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAC1K,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,MAAA,MAAM,MAAA,GAAS,KAAK,KAAA,CAAM,YAAA,CAAa,KAAK,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAC,CAAA;AACnE,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,OAAA,EAAS,MAAM,CAAA;AAC1C,MAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,QAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,UAAA,EAAY,GAAA,CAAI,CAAA,oBAAA,EAAuB,CAAA,CAAE,SAAS,CAAA,EAAA,EAAK,CAAA,CAAE,SAAS,CAAA,oBAAA,EAAuB,CAAA,CAAE,OAAO,CAAA,CAAA,CAAG,CAAA;AAC5H,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,MACrB,OAAO,GAAA,CAAI,CAAA,iBAAA,EAAoB,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IACvD;AACA,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,IACnC,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAI,OAAA,CAAQ,IAAI,OAAO,CAAA,KAAM,KAAK,IAAA,EAAM,OAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAAA,EACpE;AACF;AAGO,SAAS,QAAQ,IAAA,EAA8B;AACpD,EAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,SAAU,EAAC;AAC/B,EAAA,MAAM,MAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,QAAQ,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,EAAG;AACzD,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,MAAA,IAAI,KAAA,CAAM,QAAQ,MAAA,CAAO,OAAO,GAAG,GAAA,CAAI,IAAA,CAAK,GAAG,MAAA,CAAO,OAAO,CAAA;AAAA,IAC/D,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT","file":"vitest.js","sourcesContent":["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 * Bounds the work of one comparison scope (a commit, or one public `deepEqual` call): pairs already\n * compared are memoized, so a large value shared by many components is walked once per commit, and\n * a visit budget turns a huge structure into \"different\" instead of freezing the page.\n */\ninterface DiffScope {\n cache: WeakMap<object, WeakMap<object, boolean>>;\n remaining: number;\n exhausted: boolean;\n}\nlet scope: DiffScope | null = null;\n/** Object visits allowed for one public `deepEqual` call. */\nexport const DEFAULT_DIFF_BUDGET = 50_000;\n\n/** Start a scope (`onCommit` does this per commit); call the returned function to end it. */\nexport function beginDiffScope(budget = 200_000): () => void {\n const previous = scope;\n scope = { cache: new WeakMap(), remaining: budget, exhausted: false };\n return () => {\n scope = previous;\n };\n}\n\n/** True when the current scope gave up on a value because it was too large to walk. */\nexport function diffBudgetExhausted(): boolean {\n return scope?.exhausted === true;\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 if (!scope) {\n const end = beginDiffScope(DEFAULT_DIFF_BUDGET);\n try {\n return deepEqual(a, b, seen);\n } finally {\n end();\n }\n }\n const sc = scope;\n const objA = a as object;\n const objB = b as object;\n const hit = sc.cache.get(objA)?.get(objB);\n if (hit !== undefined) return hit;\n if (--sc.remaining < 0) {\n sc.exhausted = true;\n return false;\n }\n const result = deepEqualObjects(objA, objB, seen);\n let m = sc.cache.get(objA);\n if (!m) {\n m = new WeakMap();\n sc.cache.set(objA, m);\n }\n m.set(objB, result);\n return result;\n}\n\nfunction deepEqualObjects(a: object, b: object, seen: Seen): boolean {\n const objA = a;\n const objB = b;\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 if (a.size > 50) {\n // Members that are equal-but-not-identical would need O(n²) work; large sets compare by identity.\n for (const v of a) if (!b.has(v)) return false;\n return true;\n }\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 const rb = b as Record<string, unknown>;\n for (const k of ka) {\n if (!Object.prototype.hasOwnProperty.call(b, k)) return false;\n if (!deepEqual((a as Record<string, unknown>)[k], rb[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 // Once the budget is gone the nested walk would only burn more time; report the top-level key.\n changes.push({ path: diffBudgetExhausted() ? 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, CommitCause, CommitPriority, HookChange, HookSnapshot, 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 hookState?: HookSnapshot[];\n contexts?: { name: string; value: unknown }[];\n state?: Record<string, unknown>;\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 updaters?: string[];\n commitCause?: CommitCause;\n afterCommit?: number;\n key?: string | null;\n}\n\n/** `useCart › useState#0` when custom hook names are known, else `useState #0`. */\nexport const hookLabel = (c: { hook: string; index: number; custom?: string[] }): string =>\n c.custom && c.custom.length ? `${c.custom.join(' › ')} › ${c.hook}#${c.index}` : `${c.hook} #${c.index}`;\n\n/** Store-specific advice for a `useSyncExternalStore` snapshot that is a new reference with equal contents. */\nexport function storeAdvice(custom: string[] | undefined): string {\n const chain = custom ?? [];\n if (chain.some((n) => /^useSelector$/.test(n)))\n return 'the Redux selector returns a new object on every call: return a stored slice, pass shallowEqual as the equality function, or memoize it with createSelector';\n if (chain.some((n) => /^useAppSelector$/.test(n)))\n return 'the selector returns a new object on every call: return a stored slice, pass shallowEqual, or memoize it with createSelector';\n if (chain.some((n) => /^use[A-Z]\\w*Store$/.test(n) || n === 'useStore' || n === 'useBoundStore'))\n return 'the store selector returns a new object on every call: select a primitive, or wrap the selector with useShallow (Zustand) / an equality function';\n return 'getSnapshot returns a new reference with the same contents: cache the snapshot in the store and return the same object while the data is unchanged';\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(`${hookLabel(c)} changed.`);\n else if (isStateHook(c))\n reasons.push(`${hookLabel(c)} 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 if (c.hook === 'useSyncExternalStore') reasons.push(`${hookLabel(c)} returned a new reference that is deep-equal to the previous value: ${storeAdvice(c.custom)}.`);\n else reasons.push(`${hookLabel(c)} returned a new reference that is deep-equal to the previous value: memoize the context/store value where it is produced.`);\n }\n if (input.commitCause === 'effect-after-commit') {\n const who = input.updaters && input.updaters.length ? input.updaters.map((u) => `<${u}>`).join(', ') : 'a component that rendered in it';\n reasons.push(`this commit was scheduled right after commit #${input.afterCommit ?? '?'} by ${who}: an effect there set state (effect → setState loop). Derive the value during render or compute it before setting state.`);\n } else if (input.commitCause === 'suspense-resolved') {\n reasons.push('this commit shows content that was suspended (a Suspense boundary resolved).');\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 if (input.hookState) report.hookState = input.hookState;\n if (input.contexts) report.contexts = input.contexts;\n if (input.state) report.state = input.state;\n if (input.updaters && input.updaters.length) report.updaters = input.updaters;\n if (input.commitCause) report.commitCause = input.commitCause;\n if (input.afterCommit !== undefined) report.afterCommit = input.afterCommit;\n if (input.key !== undefined) report.key = input.key;\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 if (report.hookState && report.hookState.length) c.log('hooks', Object.fromEntries(report.hookState.map((h) => [h.path, h.value])));\n if (report.contexts && report.contexts.length) c.log('contexts', Object.fromEntries(report.contexts.map((x) => [x.name, x.value])));\n if (report.state) c.log('state', report.state);\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 /** Time spent inspecting commits (ms), to show the library's own cost. */\n overheadMs: number;\n maxCommitMs: number;\n /** Reports skipped by the per-commit cap / time budget (see `onCommit`). */\n truncated: 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, overheadMs: 0, maxCommitMs: 0, truncated: 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 warnOnce('notifier', `notifier threw: ${String(err)}`);\n }\n }\n}\n","/** 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 /** Custom hooks between the component and this primitive, innermost first (`resolveHookNames` option). */\n custom?: string[];\n}\n\n/** Current value of one state-bearing hook (`useState`, `useReducer`, `useSyncExternalStore`) after the render. */\nexport interface HookSnapshot {\n /** Same label as `HookChange.path`, e.g. `useState#0`. */\n path: string;\n hook: string;\n index: number;\n value: unknown;\n /** Custom hooks between the component and this primitive, innermost first (`resolveHookNames` option). */\n custom?: string[];\n}\n\n/** What made React commit, beyond the usual state/props story. */\nexport type CommitCause =\n /** State was set right after the previous commit by a component that rendered in it: an effect → setState loop. */\n | 'effect-after-commit'\n /** A Suspense boundary switched from its fallback to content. */\n | 'suspense-resolved';\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 /** Components that scheduled the update (`setState`, dispatch) for this commit, from React's updater tracking (dev builds). */\n updaters?: string[];\n commitCause?: CommitCause;\n /** For `effect-after-commit`: the commit whose effects set the state. */\n afterCommit?: number;\n /** The element's `key`, when it has one. */\n key?: string | null;\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 /** Function components: every state hook with its current value (changed or not). Omitted when `includeState` is off. */\n hookState?: HookSnapshot[];\n /** Every context the component reads, with its current value. Omitted when `includeState` is off. */\n contexts?: { name: string; value: unknown }[];\n /** Class components: `this.state` after the render. Omitted when `includeState` is off. */\n state?: Record<string, unknown>;\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 /** Put the current values of every state hook, context and class state on each report (`hookState`, `contexts`, `state`). Default true. */\n includeState?: boolean;\n /**\n * Resolve custom hook names (`useCart › useState#0`) by re-running each reported component type once\n * with a stand-in dispatcher, as React DevTools does. Off by default: the extra render is visible to\n * anything the component does during render (logging, counters). Dev builds only.\n */\n resolveHookNames?: 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 { 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","/**\n * Custom hook names, opt-in (`resolveHookNames`). React keeps no record of which custom hook\n * called a primitive, so, like React DevTools, we re-run the component once with a stand-in\n * dispatcher: every primitive records the call stack, and the frames between the primitive and the\n * component are the custom hooks. Values come from the fiber's real hook nodes so the component\n * takes the same code path. Results are cached per component type; a throwing render yields no names.\n */\nimport type { Fiber, HookNode } from './fiber';\n\n/** `currentDispatcherRef` as react-dom injects it: `{ current }` (React 16-18) or the shared internals `{ H }` (React 19). */\nexport type DispatcherRef = { current?: unknown; H?: unknown };\n\ntype Dispatcher = Record<string, (...args: unknown[]) => unknown>;\n\n/** Hook nodes each primitive appends to `memoizedState` (React 18/19 dev). Primitives not listed use none. */\nconst NODE_COUNT: Record<string, number> = {\n useState: 1,\n useReducer: 1,\n useRef: 1,\n useMemo: 1,\n useCallback: 1,\n useEffect: 1,\n useLayoutEffect: 1,\n useInsertionEffect: 1,\n useImperativeHandle: 1,\n useSyncExternalStore: 2,\n useTransition: 2,\n useDeferredValue: 1,\n useId: 1,\n useOptimistic: 1,\n useActionState: 3,\n useFormState: 3,\n useEffectEvent: 1,\n useCacheRefresh: 1,\n};\n\nconst noop = (): void => {};\n\n/** Function names in the frames between our dispatcher and the component (innermost first). */\nexport function customHooksFromStack(stack: string, componentName: string, marker: string): string[] {\n const names: string[] = [];\n let past = false;\n for (const line of stack.split('\\n')) {\n const m = /^\\s*at\\s+(?:async\\s+)?([^\\s(]+)|^([^@\\s]+)@/.exec(line);\n const name = m ? (m[1] || m[2] || '').replace(/^Object\\./, '').replace(/^Proxy\\./, '') : '';\n if (!name) continue;\n if (!past) {\n if (name.includes(marker)) past = true;\n continue;\n }\n if (name === componentName || name.endsWith('.' + componentName)) break;\n if (/^use[A-Z0-9_]/.test(name)) names.push(name);\n if (names.length > 8) break;\n }\n return names;\n}\n\ninterface Replay {\n /** node index -> custom hook chain */\n byNode: Map<number, string[]>;\n ok: boolean;\n}\n\nconst cache = new WeakMap<object, Replay>();\n\nfunction makeDispatcher(fiber: Fiber, componentName: string, out: Map<number, string[]>, marker: string): { dispatcher: Dispatcher; nodesConsumed: () => number } {\n let node: HookNode | null = fiber.memoizedState as HookNode | null;\n let index = 0;\n const take = (count: number): HookNode | null => {\n const first = node;\n for (let i = 0; i < count && node; i++) node = node.next;\n index += count;\n return first;\n };\n const record = (primitive: string, count: number): HookNode | null => {\n const stack = new Error().stack || '';\n const chain = customHooksFromStack(stack, componentName, marker);\n const start = index;\n const first = take(count);\n if (chain.length) for (let i = 0; i < count; i++) out.set(start + i, chain);\n return first;\n };\n const memoized = (n: HookNode | null): unknown => (n ? n.memoizedState : undefined);\n const dispatcher: Dispatcher = {};\n const define = (name: string, impl: (...a: unknown[]) => unknown): void => {\n // The function name carries the marker so the stack parser knows where the component's frames start.\n const fn = { [marker + name]: (...a: unknown[]) => impl(...a) }[marker + name]!;\n dispatcher[name] = fn;\n };\n define('useState', () => {\n const n = record('useState', 1);\n return [memoized(n), noop];\n });\n define('useReducer', () => {\n const n = record('useReducer', 1);\n return [memoized(n), noop];\n });\n define('useRef', (init) => {\n const n = record('useRef', 1);\n return n ? n.memoizedState : { current: init };\n });\n define('useMemo', (fn) => {\n const n = record('useMemo', 1);\n const s = memoized(n);\n return Array.isArray(s) ? s[0] : typeof fn === 'function' ? (fn as () => unknown)() : undefined;\n });\n define('useCallback', (fn) => {\n const n = record('useCallback', 1);\n const s = memoized(n);\n return Array.isArray(s) ? s[0] : fn;\n });\n for (const effect of ['useEffect', 'useLayoutEffect', 'useInsertionEffect', 'useImperativeHandle']) define(effect, () => void record(effect, 1));\n define('useContext', (ctx) => {\n record('useContext', 0);\n const c = ctx as { _currentValue?: unknown; _currentValue2?: unknown } | null;\n return c ? c._currentValue : undefined;\n });\n define('useDebugValue', () => void record('useDebugValue', 0));\n define('useSyncExternalStore', (_subscribe, getSnapshot) => {\n const n = record('useSyncExternalStore', 2);\n return n ? n.memoizedState : typeof getSnapshot === 'function' ? (getSnapshot as () => unknown)() : undefined;\n });\n define('useTransition', () => {\n record('useTransition', 2);\n return [false, noop];\n });\n define('useDeferredValue', (v) => {\n const n = record('useDeferredValue', 1);\n return n ? n.memoizedState : v;\n });\n define('useId', () => {\n const n = record('useId', 1);\n return n ? n.memoizedState : 'id';\n });\n define('useOptimistic', (v) => {\n const n = record('useOptimistic', 1);\n return [n ? n.memoizedState : v, noop];\n });\n for (const action of ['useActionState', 'useFormState']) {\n define(action, (_fn, init) => {\n const n = record(action, 3);\n return [n ? n.memoizedState : init, noop, false];\n });\n }\n define('useEffectEvent', (fn) => {\n record('useEffectEvent', 1);\n return fn;\n });\n define('useCacheRefresh', () => {\n record('useCacheRefresh', 1);\n return noop;\n });\n define('useHostTransitionStatus', () => ({ pending: false, data: null, method: null, action: null }));\n define('useMemoCache', (size) => new Array(Number(size) || 0).fill(Symbol.for('react.memo_cache_sentinel')));\n define('use', (usable) => {\n record('use', 0);\n const u = usable as { then?: unknown; status?: string; value?: unknown; _currentValue?: unknown } | null;\n if (u && typeof u.then === 'function') {\n if (u.status === 'fulfilled') return u.value;\n throw new Error('rerender-lens: cannot replay use() on a pending promise');\n }\n return u ? u._currentValue : undefined;\n });\n define('readContext', (ctx) => (ctx as { _currentValue?: unknown } | null)?._currentValue);\n return { dispatcher, nodesConsumed: () => index };\n}\n\n/** Unwrap memo/forwardRef to the function that actually calls hooks. */\nfunction renderFunctionOf(type: unknown): { fn: ((...a: unknown[]) => unknown) | null; name: string } {\n let t = type as { $$typeof?: symbol; type?: unknown; render?: unknown; displayName?: string; name?: string } | null;\n while (t && typeof t === 'object' && t.type) t = t.type as typeof t;\n if (t && typeof t === 'object' && typeof t.render === 'function') return { fn: t.render as (...a: unknown[]) => unknown, name: (t.render as { name?: string }).name || t.displayName || 'Component' };\n if (typeof t === 'function') return { fn: t as (...a: unknown[]) => unknown, name: (t as { name?: string }).name || 'Component' };\n return { fn: null, name: 'Component' };\n}\n\n/**\n * Custom hook chain per hook node index for a rendered function-component fiber. Empty map when the\n * replay fails, when the dispatcher ref is missing, or when the node count does not match.\n */\nexport function resolveHookNames(fiber: Fiber, ref: DispatcherRef | null | undefined): Map<number, string[]> {\n const type = fiber.type as object | null;\n if (!type || !ref) return new Map();\n const cached = cache.get(type);\n if (cached) return cached.byNode;\n const result: Replay = { byNode: new Map(), ok: false };\n cache.set(type, result);\n const { fn, name } = renderFunctionOf(type);\n if (!fn) return result.byNode;\n const useH = 'H' in ref;\n const marker = '__rl_';\n const previous = useH ? ref.H : ref.current;\n const { dispatcher, nodesConsumed } = makeDispatcher(fiber, name, result.byNode, marker);\n // The real dispatcher may be a dev proxy that throws on unknown members; ours only needs the hook methods.\n const proxy = new Proxy(dispatcher, {\n get(target, key) {\n if (key in target) return target[key as string];\n return () => undefined;\n },\n });\n let total = 0;\n for (let n = fiber.memoizedState as HookNode | null; n && typeof n === 'object' && 'next' in n; n = n.next) total++;\n try {\n if (useH) (ref as { H: unknown }).H = proxy;\n else (ref as { current: unknown }).current = proxy;\n const secondArg = fiber.tag === 11 ? ((fiber.stateNode as { ref?: unknown } | null)?.ref ?? null) : undefined;\n fn(fiber.memoizedProps ?? {}, secondArg);\n result.ok = nodesConsumed() === total;\n if (!result.ok) result.byNode.clear();\n } catch {\n result.byNode.clear();\n } finally {\n if (useH) (ref as { H: unknown }).H = previous;\n else (ref as { current: unknown }).current = previous;\n }\n return result.byNode;\n}\n\n/** Forget cached names (tests, Fast Refresh). */\nexport function clearHookNameCache(): void {\n // WeakMap has no clear(); types swapped by Fast Refresh are new keys anyway.\n}\n\nexport { NODE_COUNT as HOOK_NODE_COUNT };\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, CommitCause, CommitPriority, HookChange, HookSnapshot, ParentInfo, RenderTrigger, SourceLocation } from './types';\nimport { classify, diffRecords, beginDiffScope } from './diff';\nimport { buildReport } from './report';\nimport { dispatch, getState, warnOnce } from './state';\nimport { getDisplayName, shouldTrack } from './tracker';\nimport { resolveHookNames, type DispatcherRef } from './hookNames';\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 SuspenseComponent = 13;\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 /** Dev builds with a DevTools hook present: fibers that scheduled the update being committed. */\n memoizedUpdaters?: Set<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\nconst nowMs = (): number => (typeof performance !== 'undefined' && typeof performance.now === 'function' ? performance.now() : Date.now());\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 dispatcherRefs = new Map<number, DispatcherRef>();\nconst INJECT_WRAPPED = Symbol.for('rerender-lens.injectWrapped');\n/** Set on the hook while a copy of the library is attached, so a second copy (another bundle) does not report every commit twice. */\nconst ATTACHED = Symbol.for('rerender-lens.attached');\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 const key = typeof id === 'number' ? id : capturedRenderers.size + 1;\n capturedRenderers.set(key, pickRenderer(renderer));\n const ref = (renderer as { currentDispatcherRef?: DispatcherRef } | null)?.currentDispatcherRef;\n if (ref && typeof ref === 'object') dispatcherRefs.set(key, ref);\n return id;\n };\n h[INJECT_WRAPPED] = true;\n}\n\n/** The dispatcher ref react-dom injected (needed to replay hooks for custom hook names). */\nexport function getDispatcherRef(): DispatcherRef | null {\n for (const ref of dispatcherRefs.values()) return ref;\n const g = globalThis as unknown as Record<string, DevtoolsHook | undefined>;\n const hook = g[HOOK];\n let found: DispatcherRef | null = null;\n if (hook && hook.renderers && typeof hook.renderers.forEach === 'function') {\n hook.renderers.forEach((r) => {\n const ref = (r as { currentDispatcherRef?: DispatcherRef } | null)?.currentDispatcherRef;\n if (!found && ref && typeof ref === 'object') found = ref;\n });\n }\n return found;\n}\n\n/** Start observing commits. Returns a function that stops observing. */\nexport function attach(): () => void {\n const hook = ensureDevtoolsHook() as DevtoolsHook & { [ATTACHED]?: boolean };\n wrapInject(hook);\n if (hook[ATTACHED]) return () => {};\n hook[ATTACHED] = true;\n const previous = hook.onCommitFiberRoot;\n const patched: DevtoolsHook['onCommitFiberRoot'] = function (this: unknown, id, root, priority, didError) {\n const started = nowMs();\n try {\n onCommit(root, priorityLabel(priority));\n } catch (err) {\n warnOnce('commit', `failed to inspect a commit: ${String(err)}`);\n } finally {\n const spent = nowMs() - started;\n const s = getState();\n s.overheadMs += spent;\n if (spent > s.maxCommitMs) s.maxCommitMs = spent;\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 hook[ATTACHED] = false;\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\nlet pruneAt = 5000;\nfunction remember(id: number, fiber: Fiber): void {\n if (!hasWeakRef) return;\n if (fibersById.get(id)?.deref() === fiber) return;\n fibersById.set(id, new WeakRef(fiber));\n // Prune on growth only: scanning 5,000 live entries on every report was O(n) per report.\n if (fibersById.size > pruneAt) {\n for (const [k, ref] of fibersById) if (!ref.deref()) fibersById.delete(k);\n pruneAt = Math.max(5000, fibersById.size * 2);\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', 24)) {\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 if (st && typeof st === 'object') {\n // Reading `.stack` formats the trace (V8 does it lazily); do it once per element, not once per report.\n if (sourceCache.has(st)) return sourceCache.get(st);\n const text = typeof st.stack === 'string' ? st.stack : null;\n const out = text ? parseStackLocation(text) : undefined;\n sourceCache.set(st, out);\n return out;\n }\n return typeof st === 'string' ? parseStackLocation(st) : undefined;\n}\nconst sourceCache = new WeakMap<object, SourceLocation | undefined>();\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/** Dev hook-type labels, only when they map 1:1 onto the node list (otherwise nodes are labelled by inspection). */\nfunction hookLabelsFor(fiber: Fiber, first: HookNode | null): string[] | null {\n const types = fiber._debugHookTypes?.filter((t) => !NODELESS_HOOKS.has(t));\n let nodeCount = 0;\n for (let n: HookNode | null = first; n; n = n.next) nodeCount++;\n return types && types.length === nodeCount ? types : null;\n}\n\nconst isHookList = (v: unknown): v is HookNode => !!v && typeof v === 'object' && 'next' in (v as object);\n\n/** Current value of every state-bearing hook of a function component. */\nexport function snapshotHooks(fiber: Fiber): HookSnapshot[] {\n const out: HookSnapshot[] = [];\n if (fiber.tag === ClassComponent) return out;\n const first = fiber.memoizedState;\n if (!isHookList(first)) return out;\n const labels = hookLabelsFor(fiber, first);\n let i = 0;\n for (let n: HookNode | null = first; n; n = n.next, i++) {\n if (!isStateNode(n) && !isStoreNode(n)) continue;\n const hook = labels?.[i] ?? hookLabel(n);\n out.push({ path: `${hook}#${i}`, hook, index: i, value: n.memoizedState });\n }\n return out;\n}\n\n/** Every context the fiber reads, with its current value. */\nexport function snapshotContexts(fiber: Fiber): { name: string; value: unknown }[] {\n const out: { name: string; value: unknown }[] = [];\n for (let d = fiber.dependencies?.firstContext ?? null; d; d = d.next) out.push({ name: d.context.displayName ?? 'Context', value: d.memoizedValue });\n return out;\n}\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 const labels = hookLabelsFor(fiber, b);\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/** Names of the component fibers that scheduled this commit (React's updater tracking, dev builds). */\nfunction updatersOf(root: FiberRoot): string[] {\n const set = root.memoizedUpdaters;\n if (!set || typeof set.forEach !== 'function') return [];\n const names: string[] = [];\n set.forEach((f) => {\n const comp = nearestComponent(f);\n if (comp) {\n const name = fiberName(comp);\n if (!names.includes(name)) names.push(name);\n }\n });\n return names;\n}\n\n/** The previous commit, to spot effect → setState loops. */\nlet lastCommit: { id: number; at: number; rendered: Set<string> } | null = null;\nconst EFFECT_LOOP_WINDOW_MS = 50;\n/** Reports per commit and time per commit after which the rest of the commit is skipped (counted in `info().truncated`). */\nexport const MAX_REPORTS_PER_COMMIT = 200;\nexport const COMMIT_TIME_BUDGET_MS = 25;\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 const renderedNames = new Set<string>();\n let hot = false;\n let suspenseResolved = 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 renderedNames.add(fiberName(fiber));\n if (shouldTrack(fiberType(fiber), o)) rendered.push(fiber);\n }\n // A Suspense boundary whose memoizedState went from \"showing fallback\" (non-null) to content.\n if (fiber.tag === SuspenseComponent && alt && alt.memoizedState !== null && fiber.memoizedState === null) suspenseResolved = true;\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 const at = nowMs();\n const updaters = updatersOf(root);\n // Effect loop: the update was scheduled by something that rendered in the previous commit, right after it.\n let commitCause: CommitCause | undefined;\n let afterCommit: number | undefined;\n // Discrete input (typing, dragging) also produces back-to-back commits from the same components; only\n // normal/low priority work right after a commit looks like an effect loop.\n const inputDriven = commitPriority === 'immediate' || commitPriority === 'user-blocking';\n if (!inputDriven && lastCommit && at - lastCommit.at < EFFECT_LOOP_WINDOW_MS && updaters.some((u) => lastCommit!.rendered.has(u))) {\n commitCause = 'effect-after-commit';\n afterCommit = lastCommit.id;\n } else if (suspenseResolved) commitCause = 'suspense-resolved';\n if (rendered.length === 0) {\n lastCommit = { id: s.nextCommitId, at, rendered: renderedNames };\n return;\n }\n const commitId = s.nextCommitId++;\n lastCommit = { id: commitId, at, rendered: renderedNames };\n const dispatcherRef = o.resolveHookNames ? getDispatcherRef() : null;\n const parentCache = new Map<Fiber, ParentInfo | null>();\n // One equality scope per commit: a large value shared by many components is compared once.\n const endDiffScope = beginDiffScope();\n const deadline = at + COMMIT_TIME_BUDGET_MS;\n try {\n for (let i = 0; i < rendered.length; i++) {\n if (i >= MAX_REPORTS_PER_COMMIT || ((i & 15) === 15 && nowMs() > deadline)) {\n s.truncated += rendered.length - i;\n warnOnce('truncated', `a commit rendered ${rendered.length} tracked components; only ${i} were reported (see info().truncated). Narrow \\`include\\` or turn off includeState.`);\n break;\n }\n const fiber = rendered[i]!;\n const alt = fiber.alternate!;\n const a = analyze(fiber, alt, trackHooks);\n const durations = durationsOf(fiber);\n let hookState = o.includeState !== false && trackHooks ? snapshotHooks(fiber) : undefined;\n if (dispatcherRef && fiber.tag !== ClassComponent && (a.hookChanges.length || (hookState && hookState.length))) {\n const names = resolveHookNames(fiber, dispatcherRef);\n if (names.size) {\n for (const c of a.hookChanges) if (c.hook !== 'useContext' && names.has(c.index)) c.custom = names.get(c.index);\n if (hookState) hookState = hookState.map((h) => (names.has(h.index) ? { ...h, custom: names.get(h.index) } : h));\n }\n }\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 ...(o.includeState !== false\n ? {\n hookState,\n contexts: trackHooks ? snapshotContexts(fiber) : undefined,\n state: fiber.tag === ClassComponent && fiber.memoizedState && typeof fiber.memoizedState === 'object' ? (fiber.memoizedState as Record<string, unknown>) : undefined,\n }\n : {}),\n updaters,\n commitCause,\n afterCommit,\n key: fiber.key === null || fiber.key === undefined ? null : String(fiber.key),\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 } finally {\n endDiffScope();\n }\n}\n","/**\n * Concrete fixes derived from reports, ranked by how many avoidable re-renders each one removes.\n * The same logic drives the extension's Fixes view; here it is typed on `RenderReport` for tests,\n * CI budgets and the CLI. Pure.\n */\nimport type { Change, HookChange, RenderReport } from './types';\nimport { storeAdvice } from './report';\n\nexport type FixKind = 'memo' | 'useCallback' | 'useMemo' | 'useMemoElement' | 'children' | 'contextValue' | 'splitContext' | 'storeSnapshot' | 'bailout';\n\nexport interface Fix {\n kind: FixKind;\n /** Where the change goes (the component that must be edited, or `<Ctx>.Provider`). */\n owner: string;\n /** The component whose re-render this removes. */\n target: string;\n prop: string | null;\n label: string;\n detail: string;\n}\n\nexport interface RankedFix extends Fix {\n key: string;\n /** Avoidable re-renders this fix removes. */\n count: number;\n components: Record<string, number>;\n}\n\nconst AVOIDABLE = new Set<string>(['deep-equal', 'function', 'element']);\nconst rootOf = (path: string): string => path.split(/[.[]/)[0] || path;\n\nexport function fixesFor(r: RenderReport): Fix[] {\n const out: Fix[] = [];\n const owner = r.owner || (r.parent && r.parent.name) || '?';\n const changes: Change[] = [...r.propChanges, ...r.stateChanges, ...r.hookChanges];\n if (r.avoidable && (changes.length === 0 || r.memoized === false)) {\n out.push({\n kind: 'memo',\n owner: r.component,\n target: r.component,\n prop: null,\n label: `Wrap <${r.component}> in React.memo`,\n detail: changes.length === 0 ? `<${r.component}> re-rendered with identical props because <${(r.parent && r.parent.name) || 'its parent'}> re-rendered.` : `<${r.component}> is not memoized: fixing its props alone will not stop the re-render.`,\n });\n }\n for (const c of r.propChanges) {\n if (!AVOIDABLE.has(c.kind)) continue;\n const root = rootOf(c.path);\n if (root === 'children' && (c.kind === 'element' || c.kind === 'deep-equal')) {\n out.push({ kind: 'children', owner, target: r.component, prop: 'children', label: `memoize children of <${r.component}> in <${owner}>`, detail: `<${owner}> re-creates the children of <${r.component}> on every render.` });\n } else if (c.kind === 'function') {\n out.push({ kind: 'useCallback', owner, target: r.component, prop: root, label: `useCallback(${root}) in <${owner}>`, detail: `prop \"${c.path}\" of <${r.component}> is a new function on every render of <${owner}>.` });\n } else if (c.kind === 'element') {\n out.push({ kind: 'useMemoElement', owner, target: r.component, prop: root, label: `memoize element prop ${root} in <${owner}>`, detail: `prop \"${c.path}\" of <${r.component}> is a new element with the same type and props on every render of <${owner}>.` });\n } else {\n out.push({ kind: 'useMemo', owner, target: r.component, prop: root, label: `useMemo(${root}) in <${owner}>`, detail: `prop \"${c.path}\" of <${r.component}> is a new ${Array.isArray(c.next) ? 'array' : 'object'} with the same contents on every render of <${owner}>.` });\n }\n }\n for (const c of [...r.stateChanges, ...r.hookChanges] as (Change & Partial<HookChange>)[]) {\n const isContext = c.hook === 'useContext';\n const ctxName = isContext ? (/useContext\\((.*)\\)/.exec(c.path) || [])[1] || 'Context' : '';\n const providerOwner = isContext && c.provider && c.provider.component ? c.provider.component : null;\n if (isContext && c.kind === 'different' && c.changedKeys && typeof c.totalKeys === 'number' && c.changedKeys.length > 0 && c.changedKeys.length < c.totalKeys) {\n out.push({\n kind: 'splitContext',\n owner: providerOwner || `${ctxName}.Provider`,\n target: r.component,\n prop: ctxName,\n label: `split ${ctxName}${providerOwner ? ` in <${providerOwner}>` : ''}: only ${c.changedKeys.join(', ')} changed`,\n detail: `${c.changedKeys.length} of ${c.totalKeys} keys changed in ${ctxName}, yet every consumer re-rendered.`,\n });\n continue;\n }\n if (!AVOIDABLE.has(c.kind)) continue;\n if (isContext) {\n out.push({ kind: 'contextValue', owner: providerOwner || `${ctxName}.Provider`, target: r.component, prop: ctxName, label: `memoize the ${ctxName} provider value${providerOwner ? ` in <${providerOwner}>` : ''}`, detail: `${ctxName} produced a new value that is deep-equal to the previous one.` });\n } else if (c.hook === 'useSyncExternalStore') {\n const chain = c.custom || [];\n const redux = chain.some((n) => /^use(App)?Selector$/.test(n));\n const zustand = !redux && chain.some((n) => /^use[A-Z]\\w*Store$/.test(n) || n === 'useStore' || n === 'useBoundStore');\n 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) });\n } else {\n 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).` });\n }\n }\n return out;\n}\n\nexport const fixKey = (f: Fix): string => `${f.kind}|${f.owner}|${f.prop || f.target}`;\n\n/** Every fix across `reports`, most re-renders removed first. */\nexport function rankFixes(reports: RenderReport[]): RankedFix[] {\n const byKey = new Map<string, RankedFix>();\n for (const r of reports) {\n if (!r.avoidable) continue;\n for (const f of fixesFor(r)) {\n const key = fixKey(f);\n let agg = byKey.get(key);\n if (!agg) {\n agg = { ...f, key, count: 0, components: {} };\n byKey.set(key, agg);\n }\n agg.count++;\n agg.components[r.component] = (agg.components[r.component] || 0) + 1;\n }\n }\n return [...byKey.values()].sort((a, b) => b.count - a.count || a.label.localeCompare(b.label));\n}\n\n/** Multi-line text for a test failure or a CI log. */\nexport function formatFixes(reports: RenderReport[], limit = 10): string {\n const ranked = rankFixes(reports);\n if (!ranked.length) return 'No avoidable re-renders.';\n const lines = ranked.slice(0, limit).map((f, i) => `${String(i + 1).padStart(2)}. ${f.label} (removes ${f.count}: ${Object.entries(f.components).map(([c, n]) => `<${c}>${n > 1 ? ' x' + n : ''}`).join(', ')})`);\n if (ranked.length > limit) lines.push(` … ${ranked.length - limit} more`);\n return lines.join('\\n');\n}\n","/**\n * Session summaries and before/after comparison, the same shape the extension records and exports,\n * so a session file committed next to the code can be compared in CI or with the CLI. Pure.\n */\nimport type { RenderReport } from './types';\nimport { rankFixes } from './fixes';\n\nexport interface SessionSummary {\n id: string;\n name: string;\n startedAt: number;\n endedAt: number | null;\n total: number;\n avoidable: number;\n wasted: number;\n byComponent: Record<string, { total: number; avoidable: number; wasted: number }>;\n fixes: { key: string; label: string; count: number }[];\n}\n\nexport interface CompareRow {\n component: string;\n before: number;\n after: number;\n delta: number;\n}\n\nexport interface Comparison {\n before: SessionSummary;\n after: SessionSummary;\n rows: CompareRow[];\n total: { before: number; after: number; delta: number };\n avoidable: { before: number; after: number; delta: number };\n wasted: { before: number; after: number; delta: number };\n resolvedFixes: SessionSummary['fixes'];\n newFixes: SessionSummary['fixes'];\n /** Components whose avoidable re-renders went up. */\n regressions: CompareRow[];\n}\n\nexport function summarizeReports(reports: RenderReport[], meta: Partial<Pick<SessionSummary, 'id' | 'name' | 'startedAt' | 'endedAt'>> = {}): SessionSummary {\n const byComponent: SessionSummary['byComponent'] = {};\n let avoidable = 0;\n let wasted = 0;\n for (const r of reports) {\n const c = (byComponent[r.component] ||= { total: 0, avoidable: 0, wasted: 0 });\n c.total++;\n if (r.avoidable) {\n c.avoidable++;\n avoidable++;\n if (typeof r.selfDuration === 'number') {\n c.wasted += r.selfDuration;\n wasted += r.selfDuration;\n }\n }\n }\n return {\n id: meta.id ?? `s${Date.now().toString(36)}`,\n name: meta.name ?? 'session',\n startedAt: meta.startedAt ?? (reports[0]?.time ?? 0),\n endedAt: meta.endedAt ?? (reports[reports.length - 1]?.time ?? null),\n total: reports.length,\n avoidable,\n wasted,\n byComponent,\n fixes: rankFixes(reports).map((f) => ({ key: f.key, label: f.label, count: f.count })),\n };\n}\n\nexport function compareSummaries(before: SessionSummary, after: SessionSummary): Comparison {\n const names = new Set([...Object.keys(before.byComponent), ...Object.keys(after.byComponent)]);\n const rows: CompareRow[] = [];\n for (const component of names) {\n const b = before.byComponent[component]?.avoidable || 0;\n const a = after.byComponent[component]?.avoidable || 0;\n if (b || a) rows.push({ component, before: b, after: a, delta: a - b });\n }\n rows.sort((x, y) => x.delta - y.delta || y.before - x.before || x.component.localeCompare(y.component));\n const afterKeys = new Set(after.fixes.map((f) => f.key));\n const beforeKeys = new Set(before.fixes.map((f) => f.key));\n return {\n before,\n after,\n rows,\n total: { before: before.total, after: after.total, delta: after.total - before.total },\n avoidable: { before: before.avoidable, after: after.avoidable, delta: after.avoidable - before.avoidable },\n wasted: { before: before.wasted, after: after.wasted, delta: after.wasted - before.wasted },\n resolvedFixes: before.fixes.filter((f) => !afterKeys.has(f.key)),\n newFixes: after.fixes.filter((f) => !beforeKeys.has(f.key)),\n regressions: rows.filter((r) => r.delta > 0),\n };\n}\n\n/** Plain-text table of a comparison (CLI, CI logs). */\nexport function formatComparison(c: Comparison): string {\n const w = Math.max(14, ...c.rows.map((r) => r.component.length + 2));\n const line = (label: string, b: string | number, a: string | number, d: string): string => `${label.padEnd(w)} ${String(b).padStart(8)} ${String(a).padStart(8)} ${d.padStart(8)}`;\n const delta = (n: number, suffix = ''): string => (n === 0 ? '±0' : `${n > 0 ? '+' : ''}${Number.isInteger(n) ? n : n.toFixed(1)}${suffix}`);\n const out = [line('avoidable', c.before.name.slice(0, 8), c.after.name.slice(0, 8), 'Δ'), line('all components', c.avoidable.before, c.avoidable.after, delta(c.avoidable.delta))];\n if (c.wasted.before || c.wasted.after) out.push(line('wasted ms', c.wasted.before.toFixed(1), c.wasted.after.toFixed(1), delta(Number(c.wasted.delta.toFixed(1)))));\n for (const r of c.rows) out.push(line(`<${r.component}>`, r.before, r.after, delta(r.delta)));\n if (c.resolvedFixes.length) out.push('', 'no longer needed:', ...c.resolvedFixes.map((f) => ` - ${f.label}`));\n if (c.newFixes.length) out.push('', 'new:', ...c.newFixes.map((f) => ` - ${f.label}`));\n return out.join('\\n');\n}\n\n/** Reports from a panel export (`{ rerenderLens: true, reports }`), a bare array, or a session summary file. */\nexport function parseExport(data: unknown): { reports: RenderReport[]; sessions: SessionSummary[]; summary: SessionSummary | null } {\n if (Array.isArray(data)) return { reports: data as RenderReport[], sessions: [], summary: null };\n if (data && typeof data === 'object') {\n const d = data as { reports?: unknown; sessions?: unknown; byComponent?: unknown };\n if (Array.isArray(d.reports)) return { reports: d.reports as RenderReport[], sessions: Array.isArray(d.sessions) ? (d.sessions as SessionSummary[]) : [], summary: null };\n if (d.byComponent && typeof d.byComponent === 'object') return { reports: [], sessions: [], summary: data as SessionSummary };\n }\n throw new Error('not a rerender-lens export or session summary');\n}\n","/**\n * Re-render budgets for CI: a JSON baseline of allowed avoidable re-renders per component, checked\n * against a collector's reports (like a bundle-size budget). Pure; reading and writing the file is\n * up to the test runner (`fs`), so this works in Node and in the browser.\n */\nimport type { RenderReport } from './types';\nimport { formatFixes } from './fixes';\n\n/** `{ \"*\": 0, \"ProductRow\": 3 }`: max avoidable re-renders per component; `*` is the default. */\nexport type Budget = Record<string, number>;\n\nexport interface BudgetViolation {\n component: string;\n avoidable: number;\n allowed: number;\n}\n\nexport interface BudgetResult {\n ok: boolean;\n violations: BudgetViolation[];\n /** Components with headroom left, so budgets can be tightened. */\n slack: { component: string; avoidable: number; allowed: number }[];\n counts: Record<string, number>;\n}\n\nexport function avoidableCounts(reports: RenderReport[]): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const r of reports) if (r.avoidable) counts[r.component] = (counts[r.component] || 0) + 1;\n return counts;\n}\n\nexport function checkBudget(reports: RenderReport[], budget: Budget | number): BudgetResult {\n const b: Budget = typeof budget === 'number' ? { '*': budget } : budget;\n const fallback = typeof b['*'] === 'number' ? b['*'] : 0;\n const counts = avoidableCounts(reports);\n const violations: BudgetViolation[] = [];\n const slack: BudgetResult['slack'] = [];\n const names = new Set([...Object.keys(counts), ...Object.keys(b).filter((k) => k !== '*')]);\n for (const component of names) {\n const allowed = typeof b[component] === 'number' ? b[component]! : fallback;\n const avoidable = counts[component] || 0;\n if (avoidable > allowed) violations.push({ component, avoidable, allowed });\n else if (avoidable < allowed) slack.push({ component, avoidable, allowed });\n }\n violations.sort((x, y) => y.avoidable - y.allowed - (x.avoidable - x.allowed));\n return { ok: violations.length === 0, violations, slack, counts };\n}\n\n/** A budget that exactly matches the current counts (the baseline to commit). */\nexport function toBudget(reports: RenderReport[]): Budget {\n return { '*': 0, ...avoidableCounts(reports) };\n}\n\n/** Throws with the violations and the ranked fixes; use it from a test. */\nexport function assertWithinBudget(reports: RenderReport[], budget: Budget | number): BudgetResult {\n const result = checkBudget(reports, budget);\n if (result.ok) return result;\n const lines = result.violations.map((v) => ` <${v.component}>: ${v.avoidable} avoidable re-render${v.avoidable === 1 ? '' : 's'} (budget ${v.allowed})`);\n throw new Error(`Re-render budget exceeded:\\n${lines.join('\\n')}\\n\\nFixes, most impact first:\\n${formatFixes(reports)}`);\n}\n","import type { Notifier, RenderReport } from './types';\nimport { formatFixes, rankFixes, type RankedFix } from './fixes';\nimport { summarizeReports, type SessionSummary } from './sessions';\nimport { assertWithinBudget, type Budget, type BudgetResult } from './budget';\n\nexport interface Collector {\n /** Ranked fixes for everything collected so far (most re-renders removed first). */\n fixes(): RankedFix[];\n /** A session summary of everything collected, comparable with `compareSummaries` or the CLI. */\n summary(name?: string): SessionSummary;\n /** Throws when a component exceeds its allowed avoidable re-renders (`{ \"*\": 0, \"Row\": 2 }` or a number). */\n assertWithinBudget(budget: Budget | number): BudgetResult;\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\\nFixes, most impact first:\\n${formatFixes(reports)}`);\n },\n fixes: () => rankFixes(reports),\n summary: (name?: string) => summarizeReports(reports, name ? { name } : {}),\n assertWithinBudget: (budget) => assertWithinBudget(reports, budget),\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 * Vitest integration: one `setupFiles` line collects every avoidable re-render across the run,\n * and a reporter prints the ranked fixes (and enforces a budget file) when the run ends.\n *\n * // vitest.config.ts\n * test: {\n * setupFiles: ['rerender-lens/vitest/setup'],\n * reporters: ['default', ['rerender-lens/vitest', { budget: 'rerender-budget.json' }]],\n * }\n *\n * Custom options: write your own setup file and call `setupRerenderLens(options, { afterAll })`.\n *\n * Workers cannot talk to the reporter directly, so each test file appends its reports as one JSON\n * line to a file the reporter created (path shared through RERENDER_LENS_OUT); the reporter reads\n * it when the run ends.\n */\nimport { appendFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport type { Options, RenderReport } from './types';\nimport { ensureDevtoolsHook } from './fiber';\nimport { init } from './tracker';\nimport { createCollector, type Collector } from './notifiers';\nimport { formatFixes } from './fixes';\nimport { checkBudget, type Budget } from './budget';\n\nexport const OUT_ENV = 'RERENDER_LENS_OUT';\n\nexport interface SetupOptions extends Omit<Options, 'notifier'> {\n /** Also fail each test file that recorded avoidable re-renders (default false: the reporter decides). */\n failFast?: boolean;\n}\n\n/** How the setup ties into the test runner (`{ afterAll }` from 'vitest'; `rerender-lens/vitest/setup` does this). */\nexport interface SetupHooks {\n afterAll?: (fn: () => void) => void;\n /** Path of the current test file, for the reporter's output. */\n testPath?: () => string | undefined;\n}\n\nexport interface LensSetup {\n collector: Collector;\n /** Append this file's reports to the shared output and clear the collector; registered with `afterAll` when given. */\n flush(): void;\n}\n\n/**\n * Call from a `setupFiles` entry. Creates the DevTools hook before react-dom loads, starts the\n * library with a collector, and appends this file's reports to the shared output when it ends.\n * The collector is returned for per-test assertions (`assertNoAvoidable`, `assertWithinBudget`).\n */\nexport function setupRerenderLens(options: SetupOptions = {}, hooks: SetupHooks = {}): LensSetup {\n ensureDevtoolsHook();\n const { failFast, ...rest } = options;\n const collector = createCollector();\n init({ trackAllMemoized: true, silent: true, ...rest, notifier: collector.notifier });\n const flush = (): void => {\n const reports = collector.reports.slice();\n if (!reports.length) return;\n const file = process.env[OUT_ENV];\n if (file) appendFileSync(file, JSON.stringify({ file: hooks.testPath?.() ?? '', reports: reports.map(slim) }) + '\\n');\n collector.clear();\n if (failFast) {\n const avoidable = reports.filter((r) => r.avoidable);\n if (avoidable.length) throw new Error(`rerender-lens: ${avoidable.length} avoidable re-render${avoidable.length === 1 ? '' : 's'} in this file\\n${formatFixes(avoidable, 5)}`);\n }\n };\n hooks.afterAll?.(flush);\n return { collector, flush };\n}\n\n/** Keep what the reporter needs and drop prop/state values (they can be large and are not serializable). */\nfunction slim(r: RenderReport): RenderReport {\n const value = (v: unknown): unknown => (Array.isArray(v) ? [] : typeof v === 'function' ? `ƒ ${(v as { name?: string }).name || ''}` : v && typeof v === 'object' ? {} : v);\n return {\n ...r,\n propChanges: r.propChanges.map((c) => ({ ...c, prev: value(c.prev), next: value(c.next) })),\n stateChanges: r.stateChanges.map((c) => ({ ...c, prev: value(c.prev), next: value(c.next) })),\n hookChanges: r.hookChanges.map((c) => ({ ...c, prev: value(c.prev), next: value(c.next) })),\n props: { prev: {}, next: {} },\n hookState: undefined,\n contexts: undefined,\n state: undefined,\n };\n}\n\nexport interface ReporterOptions {\n /** Path to a budget JSON (`{ \"*\": 0, \"Row\": 2 }`). When set, the run fails on violations. */\n budget?: string;\n /** Print at most this many fixes. Default 10. */\n limit?: number;\n /** Also write the collected reports here as a panel-compatible export (`Sessions > Import`). */\n exportTo?: string;\n /** Where the lines go. Default `process.stdout`. */\n write?: (line: string) => void;\n}\n\n/** Vitest reporter (`reporters: [['rerender-lens/vitest', { budget }]]`). */\nexport default class RerenderLensReporter {\n private options: ReporterOptions;\n private file: string;\n private done = false;\n constructor(options: ReporterOptions = {}) {\n this.options = options;\n const dir = join(tmpdir(), 'rerender-lens');\n mkdirSync(dir, { recursive: true });\n this.file = join(dir, `run-${process.pid}-${Date.now()}.jsonl`);\n writeFileSync(this.file, '');\n process.env[OUT_ENV] = this.file; // workers inherit it\n }\n onInit(): void {\n process.env[OUT_ENV] = this.file;\n }\n onTestRunEnd(): void {\n this.finish();\n }\n /** Vitest < 3 name for the same event. */\n onFinished(): void {\n this.finish();\n }\n private finish(): void {\n if (this.done) return;\n this.done = true;\n const reports = readRun(this.file);\n const log = this.options.write ?? ((line: string): void => void process.stdout.write(line + '\\n'));\n const avoidable = reports.filter((r) => r.avoidable).length;\n log('');\n log(`rerender-lens: ${reports.length} report${reports.length === 1 ? '' : 's'}, ${avoidable} avoidable across the run`);\n if (avoidable) log(formatFixes(reports, this.options.limit ?? 10));\n if (this.options.exportTo) writeFileSync(this.options.exportTo, JSON.stringify({ rerenderLens: true, version: 2, exportedAt: new Date().toISOString(), reports }, null, 2));\n if (this.options.budget) {\n const budget = JSON.parse(readFileSync(this.options.budget, 'utf8')) as Budget;\n const result = checkBudget(reports, budget);\n if (!result.ok) {\n for (const v of result.violations) log(` budget exceeded: <${v.component}> ${v.avoidable} avoidable (allowed ${v.allowed})`);\n process.exitCode = 1;\n } else log(` within budget (${this.options.budget})`);\n }\n try {\n rmSync(this.file, { force: true });\n } catch {\n /* ignore */\n }\n if (process.env[OUT_ENV] === this.file) delete process.env[OUT_ENV];\n }\n}\n\n/** Reports from every worker of a run. */\nexport function readRun(file: string): RenderReport[] {\n if (!existsSync(file)) return [];\n const out: RenderReport[] = [];\n for (const line of readFileSync(file, 'utf8').split('\\n')) {\n if (!line.trim()) continue;\n try {\n const parsed = JSON.parse(line) as { reports?: RenderReport[] };\n if (Array.isArray(parsed.reports)) out.push(...parsed.reports);\n } catch {\n /* partial line */\n }\n }\n return out;\n}\n\nexport { formatFixes, checkBudget };\n"]}
1
+ {"version":3,"sources":["../src/diff.ts","../src/report.ts","../src/state.ts","../src/types.ts","../src/tracker.ts","../src/hookNames.ts","../src/fiber.ts","../src/causes.ts","../src/fixes.ts","../src/sessions.ts","../src/budget.ts","../src/notifiers.ts","../src/runner-report.ts","../src/vitest.ts"],"names":["counts","init","cache","remember","hookLabel","isPlainObject","isGenuine","isRefObject","ownerName"],"mappings":"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","file":"vitest.js","sourcesContent":["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 * Bounds the work of one comparison scope (a commit, or one public `deepEqual` call): pairs already\n * compared are memoized, so a large value shared by many components is walked once per commit, and\n * a visit budget turns a huge structure into \"different\" instead of freezing the page.\n */\ninterface DiffScope {\n cache: WeakMap<object, WeakMap<object, boolean>>;\n remaining: number;\n exhausted: boolean;\n}\nlet scope: DiffScope | null = null;\n/** Object visits allowed for one public `deepEqual` call. */\nexport const DEFAULT_DIFF_BUDGET = 50_000;\n\n/** Start a scope (`onCommit` does this per commit); call the returned function to end it. */\nexport function beginDiffScope(budget = 200_000): () => void {\n const previous = scope;\n scope = { cache: new WeakMap(), remaining: budget, exhausted: false };\n return () => {\n scope = previous;\n };\n}\n\n/** True when the current scope gave up on a value because it was too large to walk. */\nexport function diffBudgetExhausted(): boolean {\n return scope?.exhausted === true;\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 if (!scope) {\n const end = beginDiffScope(DEFAULT_DIFF_BUDGET);\n try {\n return deepEqual(a, b, seen);\n } finally {\n end();\n }\n }\n const sc = scope;\n const objA = a as object;\n const objB = b as object;\n const hit = sc.cache.get(objA)?.get(objB);\n if (hit !== undefined) return hit;\n if (--sc.remaining < 0) {\n sc.exhausted = true;\n return false;\n }\n const result = deepEqualObjects(objA, objB, seen);\n let m = sc.cache.get(objA);\n if (!m) {\n m = new WeakMap();\n sc.cache.set(objA, m);\n }\n m.set(objB, result);\n return result;\n}\n\nfunction deepEqualObjects(a: object, b: object, seen: Seen): boolean {\n const objA = a;\n const objB = b;\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 if (a.size > 50) {\n // Members that are equal-but-not-identical would need O(n²) work; large sets compare by identity.\n for (const v of a) if (!b.has(v)) return false;\n return true;\n }\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 const rb = b as Record<string, unknown>;\n for (const k of ka) {\n if (!Object.prototype.hasOwnProperty.call(b, k)) return false;\n if (!deepEqual((a as Record<string, unknown>)[k], rb[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/** Change kinds that mean \"new reference, same contents\": the ones a fix removes. */\nexport const AVOIDABLE_KINDS: ReadonlySet<string> = new Set<ChangeKind>(['deep-equal', 'function', 'element']);\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 // Once the budget is gone the nested walk would only burn more time; report the top-level key.\n changes.push({ path: diffBudgetExhausted() ? path : (firstDifferentPath(a, b, path) ?? 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/**\n * Walk plain objects/arrays to find the deepest path where the values first differ, e.g. `style.color`\n * or `items[2].id`; null when they are deep-equal. Two different values with no path to descend into\n * (primitives at the root) give `(value)`. Works on live values and on the panel's serialized ones.\n */\nexport function firstDifferentPath(a: unknown, b: unknown, path = '', depth = 0): string | null {\n if (depth > 8) return path || '(value)';\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return path ? `${path}.length` : '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 null;\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 null;\n }\n return deepEqual(a, b) ? null : path || '(value)';\n}\n\nexport interface Leaf {\n path: string;\n prev: unknown;\n next: unknown;\n}\n\n/** Every leaf at which two values differ, at most `limit` of them (the panel's diff view of `different` changes). */\nexport function diffLeaves(a: unknown, b: unknown, limit = 20, path = '', out: Leaf[] = []): Leaf[] {\n if (out.length >= limit || Object.is(a, b)) return out;\n if (Array.isArray(a) && Array.isArray(b)) {\n const n = Math.max(a.length, b.length);\n for (let i = 0; i < n && out.length < limit; i++) diffLeaves(a[i], b[i], limit, joinPath(path, i), out);\n return out;\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n for (const k of new Set([...Object.keys(a), ...Object.keys(b)])) {\n if (out.length >= limit) break;\n diffLeaves(a[k], b[k], limit, joinPath(path, k), out);\n }\n return out;\n }\n if (!deepEqual(a, b)) out.push({ path: path || '(value)', prev: a, next: b });\n return out;\n}\n","import type { Change, CommitCause, CommitPriority, HookChange, HookSnapshot, Options, ParentInfo, RenderReport, RenderTrigger, ReportLike, 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 hookState?: HookSnapshot[];\n contexts?: { name: string; value: unknown }[];\n state?: Record<string, unknown>;\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 /** The component was compiled by React Compiler (its output is memoized per input). */\n compiled?: boolean;\n /** A class component: the memoization advice names PureComponent / shouldComponentUpdate instead of React.memo. */\n classComponent?: boolean;\n /** The component sits under a Suspense boundary that switched from its fallback to content in this commit. */\n revealed?: boolean;\n selfDuration?: number;\n treeDuration?: number;\n commitId?: number;\n commitPriority?: CommitPriority;\n source?: SourceLocation;\n updaters?: string[];\n commitCause?: CommitCause;\n afterCommit?: number;\n key?: string | null;\n}\n\n/** `useCart › useState#0` when custom hook names are known, else `useState #0`. */\nexport const hookLabel = (c: { hook: string; index: number; custom?: string[] }): string =>\n c.custom && c.custom.length ? `${c.custom.join(' › ')} › ${c.hook}#${c.index}` : `${c.hook} #${c.index}`;\n\n/** Store-specific advice for a `useSyncExternalStore` snapshot that is a new reference with equal contents. */\nexport function storeAdvice(custom: string[] | undefined): string {\n const chain = custom ?? [];\n if (chain.some((n) => /^useSelector$/.test(n)))\n return 'the Redux selector returns a new object on every call: return a stored slice, pass shallowEqual as the equality function, or memoize it with createSelector';\n if (chain.some((n) => /^useAppSelector$/.test(n)))\n return 'the selector returns a new object on every call: return a stored slice, pass shallowEqual, or memoize it with createSelector';\n if (chain.some((n) => /^use[A-Z]\\w*Store$/.test(n) || n === 'useStore' || n === 'useBoundStore'))\n return 'the store selector returns a new object on every call: select a primitive, or wrap the selector with useShallow (Zustand) / an equality function';\n return 'getSnapshot returns a new reference with the same contents: cache the snapshot in the store and return the same object while the data is unchanged';\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/** A ref object (`{ current }`) created anew on every render of the parent (React 19 passes `ref` as a prop). */\nconst isRefObject = (change: Change): boolean => change.path === 'ref' && change.kind === 'deep-equal';\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 if (isRefObject(change)) return `create the ref once with useRef (or createRef outside the render) and pass the same object every time`;\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 if (isRefObject(change)) return `prop \"ref\" is a new ref object on every render (React re-attaches it each time)`;\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 nothingChanged = input.propChanges.length === 0 && stateChanges.length === 0 && hookChanges.length === 0;\n // A compiled component whose inputs are all identical hits its memo cache: React calls it, but it does no work.\n const cacheHit = input.compiled === true && trigger === 'parent' && input.propChanges.length === 0;\n const revealed = input.revealed === true && trigger === 'parent';\n const avoidable = trigger === 'parent' && !cacheHit && !revealed;\n const reasons: string[] = [];\n const memoFix = input.classComponent\n ? `Make \"${input.component}\" extend PureComponent (or implement shouldComponentUpdate)`\n : `Wrap \"${input.component}\" in React.memo (or extend PureComponent)`;\n\n if (cacheHit) {\n reasons.push(`compiled by React Compiler: its output is memoized and the inputs did not change, so this render is cheap; nothing to fix.`);\n } else if (revealed) {\n reasons.push(\n `re-rendered because the Suspense boundary above it switched from its fallback to content: React re-renders the content it kept hidden while the fallback was shown. A one-off; nothing to fix.`,\n );\n } else if (avoidable && nothingChanged) {\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}. ${memoFix}.`);\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.compiled && 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 ${input.classComponent ? 'extend PureComponent (or implement shouldComponentUpdate)' : '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 (c.hook === 'useDeferredValue' && isGenuine(c)) {\n reasons.push(`${hookLabel(c)} caught up with its latest value: this is the deferred second render React schedules after the urgent one; nothing to fix.`);\n } else if (isGenuine(c)) reasons.push(`${hookLabel(c)} changed.`);\n else if (isStateHook(c))\n reasons.push(`${hookLabel(c)} 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 if (c.hook === 'useSyncExternalStore') reasons.push(`${hookLabel(c)} returned a new reference that is deep-equal to the previous value: ${storeAdvice(c.custom)}.`);\n else reasons.push(`${hookLabel(c)} returned a new reference that is deep-equal to the previous value: memoize the context/store value where it is produced.`);\n }\n if (input.commitCause === 'effect-after-commit') {\n const who = input.updaters && input.updaters.length ? input.updaters.map((u) => `<${u}>`).join(', ') : 'a component that rendered in it';\n reasons.push(`this commit was scheduled right after commit #${input.afterCommit ?? '?'} by ${who}: an effect there set state (effect → setState loop). Derive the value during render or compute it before setting state.`);\n } else if (input.commitCause === 'suspense-resolved') {\n reasons.push('this commit shows content that was suspended (a Suspense boundary resolved).');\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.compiled) report.compiled = true;\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 if (input.hookState) report.hookState = input.hookState;\n if (input.contexts) report.contexts = input.contexts;\n if (input.state) report.state = input.state;\n if (input.updaters && input.updaters.length) report.updaters = input.updaters;\n if (input.commitCause) report.commitCause = input.commitCause;\n if (input.afterCommit !== undefined) report.afterCommit = input.afterCommit;\n if (input.key !== undefined) report.key = input.key;\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\n/** Short label per change kind, as printed by the console output and the panel. */\nexport const 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\n/** `1 equal by value, 2 new function`, or `no changes`. Shared with the panel (serialized reports). */\nexport function summarize(report: Pick<ReportLike, 'propChanges' | 'stateChanges' | 'hookChanges'>): 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']] || 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 if (report.hookState && report.hookState.length) c.log('hooks', Object.fromEntries(report.hookState.map((h) => [h.path, h.value])));\n if (report.contexts && report.contexts.length) c.log('contexts', Object.fromEntries(report.contexts.map((x) => [x.name, x.value])));\n if (report.state) c.log('state', report.state);\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 /** Time spent inspecting commits (ms), to show the library's own cost. */\n overheadMs: number;\n maxCommitMs: number;\n /** Reports skipped by the per-commit cap / time budget (see `onCommit`). */\n truncated: number;\n /** Distinct component names seen rendering since `init` (capped), and the subset of those that were tracked. */\n seen: Set<string>;\n seenTracked: Set<string>;\n /** True once a name was dropped because `seen` hit the cap: the counts are then a floor. */\n seenOverflow: boolean;\n}\n\n/** Distinct component names `noteRendered` remembers; enough to describe a page, bounded for a huge one. */\nexport const MAX_SEEN_COMPONENTS = 500;\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, overheadMs: 0, maxCommitMs: 0, truncated: 0, seen: new Set(), seenTracked: new Set(), seenOverflow: false };\n g[KEY] = s;\n }\n return s;\n}\n\n/**\n * Remember that a component with this display name rendered, and whether it was tracked. Two set\n * operations per rendered component per commit; the answer feeds `info().tracking`, which tells a\n * user whose panel is empty how much of their app the current options actually cover.\n */\nexport function noteRendered(s: LensState, name: string, tracked: boolean): void {\n if (!s.seen.has(name)) {\n if (s.seen.size >= MAX_SEEN_COMPONENTS) {\n s.seenOverflow = true;\n return;\n }\n s.seen.add(name);\n }\n if (tracked) s.seenTracked.add(name);\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 warnOnce('notifier', `notifier threw: ${String(err)}`);\n }\n }\n}\n","/** 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`, `useDeferredValue` (dev builds), 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 /** Custom hooks between the component and this primitive, innermost first (`resolveHookNames` option). */\n custom?: string[];\n}\n\n/** Current value of one state-bearing hook (`useState`, `useReducer`, `useSyncExternalStore`) after the render. */\nexport interface HookSnapshot {\n /** Same label as `HookChange.path`, e.g. `useState#0`. */\n path: string;\n hook: string;\n index: number;\n value: unknown;\n /** Custom hooks between the component and this primitive, innermost first (`resolveHookNames` option). */\n custom?: string[];\n}\n\n/** What made React commit, beyond the usual state/props story. */\nexport type CommitCause =\n /** State was set right after the previous commit by a component that rendered in it: an effect → setState loop. */\n | 'effect-after-commit'\n /** A Suspense boundary switched from its fallback to content. */\n | 'suspense-resolved';\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 /** Components that scheduled the update (`setState`, dispatch) for this commit, from React's updater tracking (dev builds). */\n updaters?: string[];\n commitCause?: CommitCause;\n /** For `effect-after-commit`: the commit whose effects set the state. */\n afterCommit?: number;\n /** The element's `key`, when it has one. */\n key?: string | null;\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 /** Function components: every state hook with its current value (changed or not). Omitted when `includeState` is off. */\n hookState?: HookSnapshot[];\n /** Every context the component reads, with its current value. Omitted when `includeState` is off. */\n contexts?: { name: string; value: unknown }[];\n /** Class components: `this.state` after the render. Omitted when `includeState` is off. */\n state?: Record<string, unknown>;\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 /**\n * True when React Compiler compiled the component (its fiber carries a `useMemoCache` cache). React still\n * calls it when the parent renders, but its output is memoized per input, so a `parent` render with\n * identical props is cheap and not reported as avoidable.\n */\n compiled?: 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\n/**\n * The fields the analysis helpers (`fixesFor`, `rankFixes`, `analyzeCommit`, `rankRootCauses`, `summarizeReports`, `summarize`) read,\n * as a structural type: both a live `RenderReport` and the DevTools panel's serialized report satisfy\n * it, so the panel and the library share one implementation without casts.\n */\nexport interface ChangeLike {\n path: string;\n kind: ChangeKind;\n prev?: unknown;\n next?: unknown;\n hook?: string;\n index?: number;\n provider?: { component: string | null; path: string[] };\n changedKeys?: string[];\n totalKeys?: number;\n custom?: string[];\n}\n\nexport interface ReportLike {\n component: string;\n avoidable: boolean;\n trigger: string;\n memoized?: boolean;\n compiled?: boolean;\n propChanges: ChangeLike[];\n stateChanges: ChangeLike[];\n hookChanges: ChangeLike[];\n parent: { name: string; trigger: string } | null;\n owner: string | null;\n path: string[];\n selfDuration?: number;\n time: number;\n /** Shared by every report of one React commit; the root-cause analysis groups by it. 0/absent = unknown. */\n commitId?: number;\n updaters?: string[];\n commitCause?: string;\n afterCommit?: number;\n contexts?: { name: string; value: unknown }[];\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 /** Put the current values of every state hook, context and class state on each report (`hookState`, `contexts`, `state`). Default true. */\n includeState?: boolean;\n /**\n * Resolve custom hook names (`useCart › useState#0`) by re-running each reported component type once\n * with a stand-in dispatcher, as React DevTools does. Off by default: the extra render is visible to\n * anything the component does during render (logging, counters). Dev builds only.\n */\n resolveHookNames?: 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/**\n * Why one component type is or is not tracked under the current options, in words a user can act on.\n * Produced by `explainTracking`; `tracked` always agrees with `shouldTrack`.\n */\nexport interface TrackingVerdict {\n tracked: boolean;\n /** One sentence: the rule that decided it. */\n reason: string;\n /** What to change to track it, when it is not tracked and something can be changed. */\n fix?: string;\n /** Display name, or `Anonymous` when the type has none. */\n name: string;\n /** `React.memo` component or `PureComponent` class. */\n memoized: boolean;\n}\n\n/** What the current options select, plus how much of the page they actually cover. In `info().tracking`. */\nexport interface TrackingSummary {\n /** `all` = every component, `memoized` = `React.memo`/`PureComponent` only, `marked` = only `track()` and `include`. */\n mode: 'all' | 'memoized' | 'marked';\n include: string[];\n exclude: string[];\n /** Distinct component names that rendered since `init`, and how many of those were tracked. */\n renderedCount: number;\n trackedCount: number;\n /** True when more distinct names rendered than the counter keeps (`MAX_SEEN_COMPONENTS`); the counts are a floor. */\n overflow: boolean;\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 { ComponentMatcher, Options, TrackableStatics, TrackingVerdict } 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\nconst ANONYMOUS = 'Anonymous';\n\n/**\n * The same decision as `shouldTrack`, with the rule that made it and what to change. Pure and\n * allocation-light, but one step slower than `shouldTrack` (it builds strings), so the commit path\n * keeps calling `shouldTrack`; `test/tracking.test.ts` proves the two never disagree.\n */\nexport function explainTracking(type: unknown, o: Options): TrackingVerdict {\n if (typeof type === 'string')\n return { tracked: false, name: type, memoized: false, reason: `<${type}> is a DOM element, not a React component; only components are tracked.` };\n if (!isComponentLike(type))\n return { tracked: false, name: ANONYMOUS, memoized: false, reason: 'This is not a React component type, so it is never tracked.' };\n const name = getDisplayName(type);\n const memo = isMemo(type);\n const memoized = memo || isPureClass(type);\n if (o.exclude?.some((m) => matches(m, name)))\n return { tracked: false, name, memoized, reason: `<${name}> matches \"exclude\", which wins over every other rule.`, fix: `Remove \"${name}\" from the exclude list.` };\n if (hasMarker(type)) return { tracked: true, name, memoized, reason: `<${name}> is marked with track() (the ${MARKER} static).` };\n if (o.include?.some((m) => matches(m, name))) return { tracked: true, name, memoized, reason: `<${name}> matches \"include\".` };\n if (o.trackAllComponents) return { tracked: true, name, memoized, reason: '\"Track every component\" is on, so every component is tracked.' };\n if (o.trackAllMemoized && memoized)\n return { tracked: true, name, memoized, reason: `<${name}> is ${memo ? 'a React.memo component' : 'a PureComponent'}, and \"Track every React.memo and PureComponent\" is on.` };\n if (name === ANONYMOUS)\n return {\n tracked: false,\n name,\n memoized,\n reason: 'This component has no display name, so \"include\" and \"exclude\" cannot address it.',\n fix: \"Give the function a name, set displayName, or mark it with track(fn, 'Name').\",\n };\n if (o.trackAllMemoized)\n return {\n tracked: false,\n name,\n memoized,\n reason: `\"Track every React.memo and PureComponent\" only covers React.memo components and PureComponent classes, and <${name}> is neither.`,\n fix: `Add \"${name}\" to include, wrap it in React.memo, or turn on \"Track every component\".`,\n };\n return {\n tracked: false,\n name,\n memoized,\n reason: `Nothing selects <${name}>: it is not marked with track(), no \"include\" pattern matches it, and neither \"track every\" option is on.`,\n fix: `Add \"${name}\" to include, or turn on \"Track every React.memo and PureComponent\" / \"Track every component\".`,\n };\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 // \"since init\": the tracking summary describes this run's options, not a previous one's.\n s.seen.clear();\n s.seenTracked.clear();\n s.seenOverflow = false;\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","/**\n * Custom hook names, opt-in (`resolveHookNames`). React keeps no record of which custom hook\n * called a primitive, so, like React DevTools, we re-run the component once with a stand-in\n * dispatcher: every primitive records the call stack, and the frames between the primitive and the\n * component are the custom hooks. Values come from the fiber's real hook nodes so the component\n * takes the same code path. Results are cached per component type; a throwing render yields no names.\n */\nimport type { Fiber, HookNode } from './fiber';\n\n/** `currentDispatcherRef` as react-dom injects it: `{ current }` (React 16-18) or the shared internals `{ H }` (React 19). */\nexport type DispatcherRef = { current?: unknown; H?: unknown };\n\ntype Dispatcher = Record<string, (...args: unknown[]) => unknown>;\n\n/** Hook nodes each primitive appends to `memoizedState` (React 18/19 dev). Primitives not listed use none. */\nconst NODE_COUNT: Record<string, number> = {\n useState: 1,\n useReducer: 1,\n useRef: 1,\n useMemo: 1,\n useCallback: 1,\n useEffect: 1,\n useLayoutEffect: 1,\n useInsertionEffect: 1,\n useImperativeHandle: 1,\n useSyncExternalStore: 2,\n useTransition: 2,\n useDeferredValue: 1,\n useId: 1,\n useOptimistic: 1,\n useActionState: 3,\n useFormState: 3,\n useEffectEvent: 1,\n useCacheRefresh: 1,\n};\n\n/** Every React primitive: frames with these names are React's own wrappers, never a custom hook. */\nconst BUILTIN_HOOKS = new Set([...Object.keys(NODE_COUNT), 'useContext', 'useDebugValue', 'use']);\n\nconst noop = (): void => {};\n\n/** Function names in the frames between our dispatcher and the component (innermost first). */\nexport function customHooksFromStack(stack: string, componentName: string, marker: string): string[] {\n const names: string[] = [];\n let past = false;\n for (const line of stack.split('\\n')) {\n const m = /^\\s*at\\s+(?:async\\s+)?([^\\s(]+)|^([^@\\s]+)@/.exec(line);\n const name = m ? (m[1] || m[2] || '').replace(/^Object\\./, '').replace(/^Proxy\\./, '') : '';\n if (!name) continue;\n if (!past) {\n if (name.includes(marker)) past = true;\n continue;\n }\n if (name === componentName || name.endsWith('.' + componentName)) break;\n // React 18's `react` entry wraps each primitive in a named function (`useState` -> dispatcher.useState),\n // which puts a frame with the primitive's own name between our dispatcher and the custom hook.\n if (/^use[A-Z0-9_]/.test(name) && !BUILTIN_HOOKS.has(name)) names.push(name);\n if (names.length > 8) break;\n }\n return names;\n}\n\ninterface Replay {\n /** node index -> custom hook chain */\n byNode: Map<number, string[]>;\n ok: boolean;\n}\n\nconst cache = new WeakMap<object, Replay>();\n\nfunction makeDispatcher(fiber: Fiber, componentName: string, out: Map<number, string[]>, marker: string): { dispatcher: Dispatcher; nodesConsumed: () => number } {\n let node: HookNode | null = fiber.memoizedState as HookNode | null;\n let index = 0;\n const take = (count: number): HookNode | null => {\n const first = node;\n for (let i = 0; i < count && node; i++) node = node.next;\n index += count;\n return first;\n };\n const record = (primitive: string, count: number): HookNode | null => {\n const stack = new Error().stack || '';\n const chain = customHooksFromStack(stack, componentName, marker);\n const start = index;\n const first = take(count);\n if (chain.length) for (let i = 0; i < count; i++) out.set(start + i, chain);\n return first;\n };\n const memoized = (n: HookNode | null): unknown => (n ? n.memoizedState : undefined);\n const dispatcher: Dispatcher = {};\n const define = (name: string, impl: (...a: unknown[]) => unknown): void => {\n // The function name carries the marker so the stack parser knows where the component's frames start.\n const fn = { [marker + name]: (...a: unknown[]) => impl(...a) }[marker + name]!;\n dispatcher[name] = fn;\n };\n define('useState', () => {\n const n = record('useState', 1);\n return [memoized(n), noop];\n });\n define('useReducer', () => {\n const n = record('useReducer', 1);\n return [memoized(n), noop];\n });\n define('useRef', (init) => {\n const n = record('useRef', 1);\n return n ? n.memoizedState : { current: init };\n });\n define('useMemo', (fn) => {\n const n = record('useMemo', 1);\n const s = memoized(n);\n return Array.isArray(s) ? s[0] : typeof fn === 'function' ? (fn as () => unknown)() : undefined;\n });\n define('useCallback', (fn) => {\n const n = record('useCallback', 1);\n const s = memoized(n);\n return Array.isArray(s) ? s[0] : fn;\n });\n for (const effect of ['useEffect', 'useLayoutEffect', 'useInsertionEffect', 'useImperativeHandle']) define(effect, () => void record(effect, 1));\n define('useContext', (ctx) => {\n record('useContext', 0);\n const c = ctx as { _currentValue?: unknown; _currentValue2?: unknown } | null;\n return c ? c._currentValue : undefined;\n });\n define('useDebugValue', () => void record('useDebugValue', 0));\n define('useSyncExternalStore', (_subscribe, getSnapshot) => {\n const n = record('useSyncExternalStore', 2);\n return n ? n.memoizedState : typeof getSnapshot === 'function' ? (getSnapshot as () => unknown)() : undefined;\n });\n define('useTransition', () => {\n record('useTransition', 2);\n return [false, noop];\n });\n define('useDeferredValue', (v) => {\n const n = record('useDeferredValue', 1);\n return n ? n.memoizedState : v;\n });\n define('useId', () => {\n const n = record('useId', 1);\n return n ? n.memoizedState : 'id';\n });\n define('useOptimistic', (v) => {\n const n = record('useOptimistic', 1);\n return [n ? n.memoizedState : v, noop];\n });\n for (const action of ['useActionState', 'useFormState']) {\n define(action, (_fn, init) => {\n const n = record(action, 3);\n return [n ? n.memoizedState : init, noop, false];\n });\n }\n define('useEffectEvent', (fn) => {\n record('useEffectEvent', 1);\n return fn;\n });\n define('useCacheRefresh', () => {\n record('useCacheRefresh', 1);\n return noop;\n });\n define('useHostTransitionStatus', () => ({ pending: false, data: null, method: null, action: null }));\n define('useMemoCache', (size) => new Array(Number(size) || 0).fill(Symbol.for('react.memo_cache_sentinel')));\n define('use', (usable) => {\n record('use', 0);\n const u = usable as { then?: unknown; status?: string; value?: unknown; _currentValue?: unknown } | null;\n if (u && typeof u.then === 'function') {\n if (u.status === 'fulfilled') return u.value;\n throw new Error('rerender-lens: cannot replay use() on a pending promise');\n }\n return u ? u._currentValue : undefined;\n });\n define('readContext', (ctx) => (ctx as { _currentValue?: unknown } | null)?._currentValue);\n return { dispatcher, nodesConsumed: () => index };\n}\n\n/** Unwrap memo/forwardRef to the function that actually calls hooks. */\nfunction renderFunctionOf(type: unknown): { fn: ((...a: unknown[]) => unknown) | null; name: string } {\n let t = type as { $$typeof?: symbol; type?: unknown; render?: unknown; displayName?: string; name?: string } | null;\n while (t && typeof t === 'object' && t.type) t = t.type as typeof t;\n if (t && typeof t === 'object' && typeof t.render === 'function') return { fn: t.render as (...a: unknown[]) => unknown, name: (t.render as { name?: string }).name || t.displayName || 'Component' };\n if (typeof t === 'function') return { fn: t as (...a: unknown[]) => unknown, name: (t as { name?: string }).name || 'Component' };\n return { fn: null, name: 'Component' };\n}\n\n/**\n * Custom hook chain per hook node index for a rendered function-component fiber. Empty map when the\n * replay fails, when the dispatcher ref is missing, or when the node count does not match.\n */\nexport function resolveHookNames(fiber: Fiber, ref: DispatcherRef | null | undefined): Map<number, string[]> {\n const type = fiber.type as object | null;\n if (!type || !ref) return new Map();\n const cached = cache.get(type);\n if (cached) return cached.byNode;\n const result: Replay = { byNode: new Map(), ok: false };\n cache.set(type, result);\n const { fn, name } = renderFunctionOf(type);\n if (!fn) return result.byNode;\n const useH = 'H' in ref;\n const marker = '__rl_';\n const previous = useH ? ref.H : ref.current;\n const { dispatcher, nodesConsumed } = makeDispatcher(fiber, name, result.byNode, marker);\n // The real dispatcher may be a dev proxy that throws on unknown members; ours only needs the hook methods.\n const proxy = new Proxy(dispatcher, {\n get(target, key) {\n if (key in target) return target[key as string];\n return () => undefined;\n },\n });\n let total = 0;\n for (let n = fiber.memoizedState as HookNode | null; n && typeof n === 'object' && 'next' in n; n = n.next) total++;\n try {\n if (useH) (ref as { H: unknown }).H = proxy;\n else (ref as { current: unknown }).current = proxy;\n const secondArg = fiber.tag === 11 ? ((fiber.stateNode as { ref?: unknown } | null)?.ref ?? null) : undefined;\n fn(fiber.memoizedProps ?? {}, secondArg);\n result.ok = nodesConsumed() === total;\n if (!result.ok) result.byNode.clear();\n } catch {\n result.byNode.clear();\n } finally {\n if (useH) (ref as { H: unknown }).H = previous;\n else (ref as { current: unknown }).current = previous;\n }\n return result.byNode;\n}\n\n/** Forget cached names (tests, Fast Refresh). */\nexport function clearHookNameCache(): void {\n // WeakMap has no clear(); types swapped by Fast Refresh are new keys anyway.\n}\n\nexport { NODE_COUNT as HOOK_NODE_COUNT };\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, CommitCause, CommitPriority, HookChange, HookSnapshot, ParentInfo, RenderTrigger, SourceLocation } from './types';\nimport { classify, diffRecords, beginDiffScope } from './diff';\nimport { buildReport } from './report';\nimport { dispatch, getState, noteRendered, warnOnce } from './state';\nimport { getDisplayName, shouldTrack } from './tracker';\nimport { resolveHookNames, type DispatcherRef } from './hookNames';\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 SuspenseComponent = 13;\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 /** Function components: effects, stores and (React 19, compiled components) the React Compiler memo cache. */\n updateQueue?: { memoCache?: { data?: unknown[] } | 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 /** Dev builds with a DevTools hook present: fibers that scheduled the update being committed. */\n memoizedUpdaters?: Set<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\nconst nowMs = (): number => (typeof performance !== 'undefined' && typeof performance.now === 'function' ? performance.now() : Date.now());\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 dispatcherRefs = new Map<number, DispatcherRef>();\nconst INJECT_WRAPPED = Symbol.for('rerender-lens.injectWrapped');\n/** Set on the hook while a copy of the library is attached, so a second copy (another bundle) does not report every commit twice. */\nconst ATTACHED = Symbol.for('rerender-lens.attached');\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 const key = typeof id === 'number' ? id : capturedRenderers.size + 1;\n capturedRenderers.set(key, pickRenderer(renderer));\n const ref = (renderer as { currentDispatcherRef?: DispatcherRef } | null)?.currentDispatcherRef;\n if (ref && typeof ref === 'object') dispatcherRefs.set(key, ref);\n return id;\n };\n h[INJECT_WRAPPED] = true;\n}\n\n/** The dispatcher ref react-dom injected (needed to replay hooks for custom hook names). */\nexport function getDispatcherRef(): DispatcherRef | null {\n for (const ref of dispatcherRefs.values()) return ref;\n const g = globalThis as unknown as Record<string, DevtoolsHook | undefined>;\n const hook = g[HOOK];\n let found: DispatcherRef | null = null;\n if (hook && hook.renderers && typeof hook.renderers.forEach === 'function') {\n hook.renderers.forEach((r) => {\n const ref = (r as { currentDispatcherRef?: DispatcherRef } | null)?.currentDispatcherRef;\n if (!found && ref && typeof ref === 'object') found = ref;\n });\n }\n return found;\n}\n\n/** Start observing commits. Returns a function that stops observing. */\nexport function attach(): () => void {\n const hook = ensureDevtoolsHook() as DevtoolsHook & { [ATTACHED]?: boolean };\n wrapInject(hook);\n if (hook[ATTACHED]) return () => {};\n hook[ATTACHED] = true;\n const previous = hook.onCommitFiberRoot;\n const patched: DevtoolsHook['onCommitFiberRoot'] = function (this: unknown, id, root, priority, didError) {\n const started = nowMs();\n try {\n onCommit(root, priorityLabel(priority));\n } catch (err) {\n warnOnce('commit', `failed to inspect a commit: ${String(err)}`);\n } finally {\n const spent = nowMs() - started;\n const s = getState();\n s.overheadMs += spent;\n if (spent > s.maxCommitMs) s.maxCommitMs = spent;\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 hook[ATTACHED] = false;\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 * True when React Compiler compiled the component: `useMemoCache` keeps its slots in\n * `fiber.updateQueue.memoCache` (React 19), not in the hook list, so it never shows up in hook diffs.\n */\nexport function isCompiledFiber(fiber: Fiber): boolean {\n if (fiber.tag === ClassComponent) return false;\n const cache = fiber.updateQueue?.memoCache;\n return !!cache && Array.isArray(cache.data);\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\nlet pruneAt = 5000;\nfunction remember(id: number, fiber: Fiber): void {\n if (!hasWeakRef) return;\n if (fibersById.get(id)?.deref() === fiber) return;\n fibersById.set(id, new WeakRef(fiber));\n // Prune on growth only: scanning 5,000 live entries on every report was O(n) per report.\n if (fibersById.size > pruneAt) {\n for (const [k, ref] of fibersById) if (!ref.deref()) fibersById.delete(k);\n pruneAt = Math.max(5000, fibersById.size * 2);\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', 24)) {\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 if (st && typeof st === 'object') {\n // Reading `.stack` formats the trace (V8 does it lazily); do it once per element, not once per report.\n if (sourceCache.has(st)) return sourceCache.get(st);\n const text = typeof st.stack === 'string' ? st.stack : null;\n const out = text ? parseStackLocation(text) : undefined;\n sourceCache.set(st, out);\n return out;\n }\n return typeof st === 'string' ? parseStackLocation(st) : undefined;\n}\nconst sourceCache = new WeakMap<object, SourceLocation | undefined>();\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/** Dev hook-type labels, only when they map 1:1 onto the node list (otherwise nodes are labelled by inspection). */\nfunction hookLabelsFor(fiber: Fiber, first: HookNode | null): string[] | null {\n const types = fiber._debugHookTypes?.filter((t) => !NODELESS_HOOKS.has(t));\n let nodeCount = 0;\n for (let n: HookNode | null = first; n; n = n.next) nodeCount++;\n return types && types.length === nodeCount ? types : null;\n}\n\nconst isHookList = (v: unknown): v is HookNode => !!v && typeof v === 'object' && 'next' in (v as object);\n\n/** Current value of every state-bearing hook of a function component. */\nexport function snapshotHooks(fiber: Fiber): HookSnapshot[] {\n const out: HookSnapshot[] = [];\n if (fiber.tag === ClassComponent) return out;\n const first = fiber.memoizedState;\n if (!isHookList(first)) return out;\n const labels = hookLabelsFor(fiber, first);\n let i = 0;\n for (let n: HookNode | null = first; n; n = n.next, i++) {\n if (!isStateNode(n) && !isStoreNode(n)) continue;\n const hook = labels?.[i] ?? hookLabel(n);\n out.push({ path: `${hook}#${i}`, hook, index: i, value: n.memoizedState });\n }\n return out;\n}\n\n/** Every context the fiber reads, with its current value. */\nexport function snapshotContexts(fiber: Fiber): { name: string; value: unknown }[] {\n const out: { name: string; value: unknown }[] = [];\n for (let d = fiber.dependencies?.firstContext ?? null; d; d = d.next) out.push({ name: d.context.displayName ?? 'Context', value: d.memoizedValue });\n return out;\n}\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 const labels = hookLabelsFor(fiber, b);\n\n let i = 0;\n while (a && b) {\n // `useDeferredValue` nodes carry the plain value and no queue: only the dev labels tell them apart from useRef/useMemo.\n const deferred = labels?.[i] === 'useDeferredValue';\n if ((deferred || 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 // React records the value a component read from a context on the dependency only from 18 on.\n // Before that there is nothing to compare with, and a context change looks like a parent render.\n if (b && !('memoizedValue' in b)) {\n warnOnce('contextValues', 'this React does not record context values on the fiber (React < 18): context changes are reported as plain parent re-renders.');\n return out;\n }\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\n/** A `{ current }` ref object (`createRef`/`useRef`): React mutates `current` in the commit, so its contents say nothing about the prop. */\nconst isRefObject = (v: unknown): v is { current: unknown } => {\n if (typeof v !== 'object' || v === null) return false;\n const keys = Object.keys(v);\n return keys.length === 1 && keys[0] === 'current';\n};\n\n/**\n * Shallow prop diff. `ref` (a prop in React 19, and in `memoizedProps` of forwardRef fibers) gets its own\n * rule: two distinct ref objects count as `deep-equal` on `ref` whatever their `current` holds, because\n * React re-attaches a new object on every render and the fix is a stable ref, not a memoized `.current`.\n */\nfunction diffProps(prev: Record<string, unknown>, next: Record<string, unknown>): Change[] {\n if (prev === next) return [];\n const pr = prev.ref;\n const nr = next.ref;\n if (pr !== nr && isRefObject(pr) && isRefObject(nr)) {\n const { ref: _p, ...restPrev } = prev;\n const { ref: _n, ...restNext } = next;\n void _p;\n void _n;\n return [{ path: 'ref', kind: 'deep-equal', prev: pr, next: nr }, ...diffRecords(restPrev, restNext)];\n }\n return diffRecords(prev, next);\n}\n\nfunction analyze(fiber: Fiber, alt: Fiber, trackHooks: boolean): Analysis {\n const prevProps = alt.memoizedProps ?? {};\n const nextProps = fiber.memoizedProps ?? {};\n const propChanges = diffProps(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' && h.hook !== 'useDeferredValue';\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/** Names of the component fibers that scheduled this commit (React's updater tracking, dev builds). */\nfunction updatersOf(root: FiberRoot): string[] {\n const set = root.memoizedUpdaters;\n if (!set || typeof set.forEach !== 'function') return [];\n const names: string[] = [];\n set.forEach((f) => {\n const comp = nearestComponent(f);\n if (comp) {\n const name = fiberName(comp);\n if (!names.includes(name)) names.push(name);\n }\n });\n return names;\n}\n\n/** The previous commit, to spot effect → setState loops. */\nlet lastCommit: { id: number; at: number; rendered: Set<string> } | null = null;\nconst EFFECT_LOOP_WINDOW_MS = 50;\n/** Reports per commit and time per commit after which the rest of the commit is skipped (counted in `info().truncated`). */\nexport const MAX_REPORTS_PER_COMMIT = 200;\nexport const COMMIT_TIME_BUDGET_MS = 25;\n\n/** A fiber whose `useDeferredValue` (dev labels) holds a different value than in its previous render: React's catch-up render. */\nfunction isDeferredCatchUp(fiber: Fiber): boolean {\n const types = fiber._debugHookTypes;\n if (!types || !types.includes('useDeferredValue') || !fiber.alternate) return false;\n const first = fiber.memoizedState;\n if (!isHookList(first)) return false;\n const labels = hookLabelsFor(fiber, first);\n if (!labels) return false;\n let a = fiber.alternate.memoizedState as HookNode | null;\n let b: HookNode | null = first;\n for (let i = 0; a && b; a = a.next, b = b.next, i++) {\n if (labels[i] === 'useDeferredValue' && !Object.is(a.memoizedState, b.memoizedState)) return true;\n }\n return false;\n}\n\n/** True when one of `boundaries` is an ancestor of `fiber`. */\nfunction isUnder(fiber: Fiber, boundaries: Fiber[]): boolean {\n for (let f = fiber.return; f && f.tag !== HostRoot; f = f.return) if (f.tag === SuspenseComponent && boundaries.includes(f)) return true;\n return false;\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 const renderedNames = new Set<string>();\n let hot = false;\n /** Suspense boundaries that switched from their fallback to content in this commit. */\n let resolvedBoundaries: Fiber[] | null = null;\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 const name = fiberName(fiber);\n renderedNames.add(name);\n const tracked = shouldTrack(fiberType(fiber), o);\n noteRendered(s, name, tracked);\n if (tracked) rendered.push(fiber);\n }\n // A Suspense boundary whose memoizedState went from \"showing fallback\" (non-null) to content.\n if (fiber.tag === SuspenseComponent && alt && alt.memoizedState !== null && fiber.memoizedState === null) (resolvedBoundaries ??= []).push(fiber);\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 const at = nowMs();\n const updaters = updatersOf(root);\n // Effect loop: the update was scheduled by something that rendered in the previous commit, right after it.\n let commitCause: CommitCause | undefined;\n let afterCommit: number | undefined;\n // Discrete input (typing, dragging) also produces back-to-back commits from the same components; only\n // normal/low priority work right after a commit looks like an effect loop.\n // The deferred second render of `useDeferredValue` also lands right after the urgent commit with the same updaters.\n const inputDriven = commitPriority === 'immediate' || commitPriority === 'user-blocking';\n if (!inputDriven && lastCommit && at - lastCommit.at < EFFECT_LOOP_WINDOW_MS && updaters.some((u) => lastCommit!.rendered.has(u)) && !rendered.some(isDeferredCatchUp)) {\n commitCause = 'effect-after-commit';\n afterCommit = lastCommit.id;\n } else if (resolvedBoundaries) commitCause = 'suspense-resolved';\n if (rendered.length === 0) {\n lastCommit = { id: s.nextCommitId, at, rendered: renderedNames };\n return;\n }\n const commitId = s.nextCommitId++;\n lastCommit = { id: commitId, at, rendered: renderedNames };\n const dispatcherRef = o.resolveHookNames ? getDispatcherRef() : null;\n const parentCache = new Map<Fiber, ParentInfo | null>();\n // One equality scope per commit: a large value shared by many components is compared once.\n const endDiffScope = beginDiffScope();\n const deadline = at + COMMIT_TIME_BUDGET_MS;\n try {\n for (let i = 0; i < rendered.length; i++) {\n if (i >= MAX_REPORTS_PER_COMMIT || ((i & 15) === 15 && nowMs() > deadline)) {\n s.truncated += rendered.length - i;\n warnOnce('truncated', `a commit rendered ${rendered.length} tracked components; only ${i} were reported (see info().truncated). Narrow \\`include\\` or turn off includeState.`);\n break;\n }\n const fiber = rendered[i]!;\n const alt = fiber.alternate!;\n const a = analyze(fiber, alt, trackHooks);\n const durations = durationsOf(fiber);\n let hookState = o.includeState !== false && trackHooks ? snapshotHooks(fiber) : undefined;\n if (dispatcherRef && fiber.tag !== ClassComponent && (a.hookChanges.length || (hookState && hookState.length))) {\n const names = resolveHookNames(fiber, dispatcherRef);\n if (names.size) {\n for (const c of a.hookChanges) if (c.hook !== 'useContext' && names.has(c.index)) c.custom = names.get(c.index);\n if (hookState) hookState = hookState.map((h) => (names.has(h.index) ? { ...h, custom: names.get(h.index) } : h));\n }\n }\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 ...(o.includeState !== false\n ? {\n hookState,\n contexts: trackHooks ? snapshotContexts(fiber) : undefined,\n state: fiber.tag === ClassComponent && fiber.memoizedState && typeof fiber.memoizedState === 'object' ? (fiber.memoizedState as Record<string, unknown>) : undefined,\n }\n : {}),\n updaters,\n commitCause,\n afterCommit,\n key: fiber.key === null || fiber.key === undefined ? null : String(fiber.key),\n parent: a.trigger === 'parent' ? nearestRenderedAncestor(fiber, parentCache, trackHooks) : null,\n owner: ownerName(fiber),\n path: componentPath(fiber),\n memoized: isMemoizedFiber(fiber),\n compiled: isCompiledFiber(fiber),\n classComponent: fiber.tag === ClassComponent,\n revealed: resolvedBoundaries !== null && a.trigger === 'parent' && isUnder(fiber, resolvedBoundaries),\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 } finally {\n endDiffScope();\n }\n}\n","/**\n * Commit and root-cause analysis: which component's own change started each render cascade, which\n * contexts fanned out to how many consumers, and a nested view of one commit. Reports carry a\n * `commitId` (every report from one React commit shares it) and `parent` links (the nearest ancestor\n * that rendered in the same commit); following those links inside a commit finds the root cause.\n * One implementation for the library (the CLI, the Vitest reporter, `formatFixes`) and the DevTools\n * panel, which adds its own per-commit memoization on top. Typed over `ReportLike`. Pure.\n */\nimport { AVOIDABLE_KINDS } from './diff';\nimport type { RenderReport, ReportLike } from './types';\n\nexport interface RootCause {\n name: string;\n trigger: string;\n /** Avoidable re-renders in the commit that trace back to this component. */\n count: number;\n components: Map<string, number>;\n}\n\nexport interface ContextStat {\n name: string;\n consumers: number;\n avoidable: number;\n components: Map<string, number>;\n commits: Set<number>;\n /** Components rendering the Provider (usually one). */\n providers: Map<string, number>;\n /** Keys that changed in object values, and the largest key count seen. */\n changedKeys: Set<string>;\n totalKeys: number;\n}\n\nexport interface CommitAnalysis<R extends ReportLike = RenderReport> {\n /** The commit id (`commitId` of its reports), 0 when the reports carry none. */\n id: number;\n total: number;\n avoidable: number;\n /** Sum of `selfDuration` over the avoidable reports, in ms. */\n wasted: number;\n roots: RootCause[];\n /** Root cause name of every avoidable report (what `roots` was aggregated from). */\n rootByReport: Map<R, string>;\n contexts: ContextStat[];\n reports: R[];\n}\n\nexport interface CascadeNode<R extends ReportLike = RenderReport> {\n name: string;\n children: Map<string, CascadeNode<R>>;\n report: R | null;\n count?: number;\n avoidable?: number;\n}\n\nexport interface RootSummary<R extends ReportLike = RenderReport, A extends CommitAnalysis<R> = CommitAnalysis<R>> {\n name: string;\n trigger: string;\n /** Newest first. */\n commits: { key: number; analysis: A; count: number; components: Map<string, number> }[];\n /** Avoidable re-renders across every commit. */\n total: number;\n components: Map<string, number>;\n /** The avoidable reports that trace back to this root cause. */\n affected: R[];\n}\n\n/** One root cause across a whole run: how many commits it started and what those cost. */\nexport interface RankedRootCause {\n name: string;\n trigger: string;\n commits: number;\n /** Avoidable re-renders it caused. */\n count: number;\n components: Map<string, number>;\n}\n\nconst isAncestorReport = (anc: ReportLike, r: ReportLike): boolean =>\n anc.path.length < r.path.length && r.path[anc.path.length] === anc.component && anc.path.every((p, i) => r.path[i] === p);\n\nconst bump = (m: Map<string, number>, key: string, n = 1): void => void m.set(key, (m.get(key) || 0) + n);\n\n/** One commit's reports grouped by component name, so a parent lookup is O(same-named reports) instead of O(commit). */\nexport function indexByComponent<R extends ReportLike>(reports: readonly R[]): Map<string, R[]> {\n const index = new Map<string, R[]>();\n for (const r of reports) {\n const list = index.get(r.component);\n if (list) list.push(r);\n else index.set(r.component, [r]);\n }\n return index;\n}\n\n/**\n * Walk `parent` links inside one commit up to the component whose own change started the cascade.\n * Null when `r` started it itself; `report` is null when the root is an ancestor that is not in the\n * commit (untracked), in which case `name`/`trigger` come from the last `parent` link.\n */\nexport function rootCauseOf<R extends ReportLike>(r: R, commitReports: readonly R[], index: Map<string, R[]> = indexByComponent(commitReports)): { name: string; trigger: string; report: R | null } | null {\n let cur = r;\n const seen = new Set<R>([r]);\n while (cur.trigger === 'parent' && cur.parent) {\n const parent = cur.parent;\n const candidates = index.get(parent.name);\n const p = candidates && candidates.find((x) => isAncestorReport(x, cur));\n if (!p || seen.has(p)) return { name: parent.name, trigger: parent.trigger, report: null };\n seen.add(p);\n cur = p;\n }\n return cur === r ? null : { name: cur.component, trigger: cur.trigger, report: cur };\n}\n\n/** Root causes of one commit's avoidable reports, most re-renders first. */\nfunction rootCausesOf<R extends ReportLike>(reports: readonly R[]): Pick<CommitAnalysis<R>, 'roots' | 'rootByReport' | 'avoidable' | 'wasted'> {\n const roots = new Map<string, RootCause>();\n const rootByReport = new Map<R, string>();\n const index = indexByComponent(reports);\n let avoidable = 0;\n let wasted = 0;\n for (const r of reports) {\n if (!r.avoidable) continue;\n avoidable++;\n if (typeof r.selfDuration === 'number') wasted += r.selfDuration;\n const root = rootCauseOf(r, reports, index);\n const name = root ? root.name : (r.parent && r.parent.name) || '(unknown)';\n const trigger = root ? root.trigger : (r.parent && r.parent.trigger) || 'parent';\n rootByReport.set(r, name);\n let agg = roots.get(name);\n if (!agg) {\n agg = { name, trigger, count: 0, components: new Map() };\n roots.set(name, agg);\n }\n agg.count++;\n bump(agg.components, r.component);\n }\n return { roots: [...roots.values()].sort((a, b) => b.count - a.count), rootByReport, avoidable, wasted };\n}\n\n/** Analyze the reports of one commit: what started the cascade, which contexts changed, what it cost. */\nexport function analyzeCommit<R extends ReportLike>(reports: R[]): CommitAnalysis<R> {\n const first = reports[0];\n return {\n id: first && typeof first.commitId === 'number' ? first.commitId : 0,\n total: reports.length,\n ...rootCausesOf(reports),\n contexts: contextAttribution(reports),\n reports,\n };\n}\n\n/** Which contexts changed and how many consumers re-rendered because of them. */\nexport function contextAttribution(reports: readonly ReportLike[]): ContextStat[] {\n const byCtx = new Map<string, ContextStat>();\n for (const r of reports) {\n for (const c of r.hookChanges || []) {\n if (c.hook !== 'useContext' && !/^useContext/.test(c.path)) continue;\n const m = /useContext\\((.*)\\)/.exec(c.path);\n const name = m && m[1] ? m[1] : c.path;\n let agg = byCtx.get(name);\n if (!agg) {\n agg = { name, consumers: 0, avoidable: 0, components: new Map(), commits: new Set(), providers: new Map(), changedKeys: new Set(), totalKeys: 0 };\n byCtx.set(name, agg);\n }\n agg.consumers++;\n if (AVOIDABLE_KINDS.has(c.kind)) agg.avoidable++;\n bump(agg.components, r.component);\n agg.commits.add(typeof r.commitId === 'number' ? r.commitId : 0);\n if (c.provider && c.provider.component) bump(agg.providers, c.provider.component);\n if (c.changedKeys) for (const k of c.changedKeys) agg.changedKeys.add(k);\n if (typeof c.totalKeys === 'number') agg.totalKeys = Math.max(agg.totalKeys, c.totalKeys);\n }\n }\n return [...byCtx.values()].sort((a, b) => b.consumers - a.consumers);\n}\n\n/** Nested cascade for one commit: every report placed under its ancestors (untracked ancestors appear as plain names). */\nexport function cascadeTree<R extends ReportLike>(reports: readonly R[]): CascadeNode<R> {\n const root: CascadeNode<R> = { name: '', children: new Map(), report: null };\n for (const r of reports) {\n let node = root;\n for (const seg of r.path.concat([r.component])) {\n let next = node.children.get(seg);\n if (!next) {\n next = { name: seg, children: new Map(), report: null };\n node.children.set(seg, next);\n }\n node = next;\n }\n if (!node.report || r.avoidable) node.report = r;\n node.count = (node.count || 0) + 1;\n if (r.avoidable) node.avoidable = (node.avoidable || 0) + 1;\n }\n return root;\n}\n\n/**\n * Every commit a component started (as the root cause), across the whole session.\n * `analyze` lets a caller (the panel) pass its per-commit memoized analysis.\n */\nexport function rootCauseSummary<R extends ReportLike>(name: string, commits: Iterable<[number, R[]]>): RootSummary<R>;\nexport function rootCauseSummary<R extends ReportLike, A extends CommitAnalysis<R>>(name: string, commits: Iterable<[number, R[]]>, analyze: (key: number, reports: R[]) => A): RootSummary<R, A>;\nexport function rootCauseSummary<R extends ReportLike, A extends CommitAnalysis<R>>(name: string, commits: Iterable<[number, R[]]>, analyze?: (key: number, reports: R[]) => A): RootSummary<R, A> {\n const analyzeFn = analyze || ((_: number, reports: R[]): A => analyzeCommit(reports) as A);\n const out: RootSummary<R, A> = { name, trigger: 'parent', commits: [], total: 0, components: new Map(), affected: [] };\n for (const [key, reports] of commits) {\n const analysis = analyzeFn(key, reports);\n const root = analysis.roots.find((x) => x.name === name);\n if (!root) continue;\n out.trigger = root.trigger;\n out.commits.push({ key, analysis, count: root.count, components: root.components });\n out.total += root.count;\n for (const [c, n] of root.components) bump(out.components, c, n);\n for (const r of reports) if (r.avoidable && analysis.rootByReport.get(r) === name) out.affected.push(r);\n }\n out.commits.reverse();\n return out;\n}\n\n/** Reports grouped by `commitId` in first-seen order. Reports without one (`useWhyRerender`, protocol 1) are left out. */\nexport function groupByCommit<R extends ReportLike>(reports: readonly R[]): Map<number, R[]> {\n const out = new Map<number, R[]>();\n for (const r of reports) {\n if (typeof r.commitId !== 'number' || r.commitId <= 0) continue;\n const list = out.get(r.commitId);\n if (list) list.push(r);\n else out.set(r.commitId, [r]);\n }\n return out;\n}\n\n/** Root causes across every commit in `reports`, most avoidable re-renders caused first. */\nexport function rankRootCauses(reports: readonly ReportLike[]): RankedRootCause[] {\n const byName = new Map<string, RankedRootCause>();\n for (const commit of groupByCommit(reports).values()) {\n for (const root of rootCausesOf(commit).roots) {\n let agg = byName.get(root.name);\n if (!agg) {\n agg = { name: root.name, trigger: root.trigger, commits: 0, count: 0, components: new Map() };\n byName.set(root.name, agg);\n }\n agg.commits++;\n agg.count += root.count;\n for (const [c, n] of root.components) bump(agg.components, c, n);\n }\n }\n return [...byName.values()].sort((a, b) => b.count - a.count || b.commits - a.commits || a.name.localeCompare(b.name));\n}\n\nconst plural = (n: number, word: string): string => `${n} ${word}${n === 1 ? '' : 's'}`;\n\n/**\n * Multi-line root-cause table for a test failure or a CI log, one line per root cause:\n * `<Page> (state) started 3 commits, 12 avoidable re-renders (<Row> x10, <Toolbar> x2)`.\n * Empty when nothing is avoidable or the reports carry no `commitId`.\n */\nexport function formatRootCauses(reports: readonly ReportLike[], limit = 5): string {\n const ranked = rankRootCauses(reports);\n const lines = ranked\n .slice(0, limit)\n .map((root, i) => `${String(i + 1).padStart(2)}. <${root.name}> (${root.trigger}) started ${plural(root.commits, 'commit')}, ${plural(root.count, 'avoidable re-render')} (${[...root.components].map(([c, n]) => `<${c}>${n > 1 ? ' x' + n : ''}`).join(', ')})`);\n if (ranked.length > limit) lines.push(` … ${ranked.length - limit} more`);\n return lines.join('\\n');\n}\n","/**\n * Concrete fixes derived from reports, ranked by how many avoidable re-renders each one removes.\n * One implementation for the library (tests, CI budgets, the CLI, typed on `RenderReport`) and the\n * DevTools panel (serialized reports): everything here reads only `ReportLike`. Pure.\n */\nimport type { ChangeLike, RenderReport, ReportLike } from './types';\nimport { AVOIDABLE_KINDS } from './diff';\nimport { formatRootCauses } from './causes';\n\nexport { AVOIDABLE_KINDS };\n\nexport type FixKind = 'memo' | 'useCallback' | 'useMemo' | 'useMemoElement' | 'children' | 'contextValue' | 'splitContext' | 'storeSnapshot' | 'bailout';\n\nexport interface Fix {\n kind: FixKind;\n /** Where the change goes (the component that must be edited, or `<Ctx>.Provider`). */\n owner: string;\n /** The component whose re-render this removes. */\n target: string;\n prop: string | null;\n label: string;\n detail: string;\n /** Code sketch of the fix, `// <owner>` on the first line. */\n snippet: string;\n}\n\nexport interface RankedFix<R extends ReportLike = RenderReport> extends Fix {\n key: string;\n /** Avoidable re-renders this fix removes. */\n count: number;\n components: Record<string, number>;\n /** The first (at most 50) reports the fix applies to. */\n reports: R[];\n}\n\nconst MAX_FIX_REPORTS = 50;\nconst rootOf = (path: string): string => path.split(/[.[]/)[0] || path;\nconst identifier = (name: string): string => (/^[A-Za-z_$][\\w$]*$/.test(name) ? name : 'value');\n\n/** `JSON.stringify` cut to `max` characters, for snippets and markdown; never throws. */\nexport function shortValue(v: unknown, max = 60): string {\n let s: string | undefined;\n try {\n s = JSON.stringify(v);\n } catch {\n s = String(v);\n }\n if (s === undefined) s = String(v);\n return s.length > max ? s.slice(0, max - 3) + '...' : s;\n}\n\n/** The concrete fixes one report suggests, each attributed to the component (file) that must change. */\nexport function fixesFor(r: ReportLike): Fix[] {\n const out: Fix[] = [];\n const ownerName = r.owner || (r.parent && r.parent.name) || null;\n const propChanges = r.propChanges || [];\n const changes: ChangeLike[] = [...propChanges, ...(r.stateChanges || []), ...(r.hookChanges || [])];\n // Not memoized: props alone will never stop the re-render, so React.memo comes first (in addition to\n // any prop fixes below). Reports from protocol-1 libraries have no `memoized`; assume memoized then.\n if (r.avoidable && (changes.length === 0 || r.memoized === false)) {\n const identical = changes.length === 0;\n out.push({\n kind: 'memo',\n owner: r.component,\n target: r.component,\n prop: null,\n label: `Wrap <${r.component}> in React.memo`,\n detail: identical\n ? `<${r.component}> re-rendered with identical props because <${(r.parent && r.parent.name) || 'its parent'}> re-rendered.`\n : `<${r.component}> is not memoized: fixing its props alone will not stop the re-render.`,\n snippet: `// ${r.component}\\nimport { memo } from 'react';\\n\\nexport const ${r.component} = memo(function ${r.component}(props) {\\n // ...\\n});\\n// class components: extend PureComponent instead`,\n });\n }\n for (const c of propChanges) {\n if (!AVOIDABLE_KINDS.has(c.kind)) continue;\n const owner = ownerName || '?';\n const root = rootOf(c.path);\n const id = identifier(root);\n if (root === 'children' && (c.kind === 'element' || c.kind === 'deep-equal')) {\n out.push({\n kind: 'children',\n owner,\n target: r.component,\n prop: 'children',\n label: `memoize children of <${r.component}> in <${owner}>`,\n detail: `<${owner}> re-creates the children of <${r.component}> on every render; they have the same types and props each time.`,\n snippet:\n `// ${owner}\\nimport { useMemo } from 'react';\\n\\nconst children = useMemo(() => (\\n <>{/* the same elements */}</>\\n), [/* deps */]);\\n\\n<${r.component}>{children}</${r.component}>\\n\\n` +\n `// static children: hoist them to module scope\\nconst STATIC = <em>hi</em>;`,\n });\n } else if (c.kind === 'function') {\n out.push({\n kind: 'useCallback',\n owner,\n target: r.component,\n prop: root,\n label: `useCallback(${root}) in <${owner}>`,\n detail: `prop \"${c.path}\" of <${r.component}> is a new function on every render of <${owner}>.`,\n snippet: `// ${owner}\\nimport { useCallback } from 'react';\\n\\nconst ${id} = useCallback((/* args */) => {\\n // ...\\n}, [/* deps */]);\\n\\n<${r.component} ${root}={${id}} />`,\n });\n } else if (c.kind === 'element') {\n out.push({\n kind: 'useMemoElement',\n owner,\n target: r.component,\n prop: root,\n label: `memoize element prop ${root} in <${owner}>`,\n detail: `prop \"${c.path}\" of <${r.component}> is a new element with the same type and props on every render of <${owner}>.`,\n snippet: `// ${owner}\\nimport { useMemo } from 'react';\\n\\nconst ${id} = useMemo(() => ${shortValue(c.next, 40)}, [/* deps */]);\\n// or pass it as children from a component that does not re-render`,\n });\n } else {\n const isArray = Array.isArray(c.next);\n out.push({\n kind: 'useMemo',\n owner,\n target: r.component,\n prop: root,\n label: `useMemo(${root}) in <${owner}>`,\n detail: `prop \"${c.path}\" of <${r.component}> is a new ${isArray ? 'array' : 'object'} with the same contents on every render of <${owner}>.`,\n snippet:\n `// ${owner}\\nimport { useMemo } from 'react';\\n\\nconst ${id} = useMemo(() => (${shortValue(c.next, 80)}), [/* deps */]);\\n\\n` +\n `// or, when it never changes, hoist it to module scope:\\nconst ${id.toUpperCase()} = ${shortValue(c.next, 80)};`,\n });\n }\n }\n for (const c of [...(r.stateChanges || []), ...(r.hookChanges || [])]) {\n const isContext = c.hook === 'useContext' || /^useContext/.test(c.path);\n const ctxName = isContext ? (/useContext\\((.*)\\)/.exec(c.path) || [])[1] || 'Context' : '';\n const providerOwner = isContext && c.provider && c.provider.component ? c.provider.component : null;\n // A genuine change of a few keys in an object context still re-renders every consumer.\n if (isContext && c.kind === 'different' && c.changedKeys && typeof c.totalKeys === 'number' && c.changedKeys.length > 0 && c.changedKeys.length < c.totalKeys) {\n out.push({\n kind: 'splitContext',\n owner: providerOwner || `${ctxName}.Provider`,\n target: r.component,\n prop: ctxName,\n label: `split ${ctxName}${providerOwner ? ` in <${providerOwner}>` : ''}: only ${c.changedKeys.join(', ')} changed`,\n detail: `${c.changedKeys.map((k) => `\"${k}\"`).join(', ')} of ${c.totalKeys} keys changed in ${ctxName}, yet every consumer (like <${r.component}>) re-rendered. Consumers that read the other keys re-render for nothing.`,\n snippet:\n `// ${providerOwner || 'Provider'}\\n// one context per independently-changing slice\\nconst ${identifier(ctxName)}Static = createContext(...);\\nconst ${identifier(ctxName)}${c.changedKeys.map((k) => k[0]!.toUpperCase() + k.slice(1)).join('')} = createContext(...);\\n\\n` +\n `// or keep one context and let consumers select a slice:\\nconst ${c.changedKeys[0]} = useContextSelector(${ctxName}, (v) => v.${c.changedKeys[0]});`,\n });\n continue;\n }\n if (!AVOIDABLE_KINDS.has(c.kind)) continue;\n if (isContext) {\n out.push({\n kind: 'contextValue',\n owner: providerOwner || `${ctxName}.Provider`,\n target: r.component,\n prop: ctxName,\n label: `memoize the ${ctxName} provider value${providerOwner ? ` in <${providerOwner}>` : ''}`,\n detail: `<${r.component}> re-rendered because ${ctxName} produced a new value that is deep-equal to the previous one${providerOwner ? ` (Provider rendered by <${providerOwner}>)` : ''}.`,\n snippet: `// ${providerOwner || `where <${ctxName}.Provider> is rendered`}\\nconst value = useMemo(() => ({ /* ... */ }), [/* deps */]);\\n<${ctxName}.Provider value={value}>`,\n });\n } else if (c.hook === 'useSyncExternalStore') {\n const chain = c.custom || [];\n const redux = chain.some((n) => /^use(App)?Selector$/.test(n));\n const zustand = !redux && chain.some((n) => /^use[A-Z]\\w*Store$/.test(n) || n === 'useStore' || n === 'useBoundStore');\n const via = chain.length ? ` via ${chain.join(' › ')}` : '';\n out.push({\n kind: 'storeSnapshot',\n owner: r.component,\n target: r.component,\n prop: c.path,\n label: redux ? `memoize the selector in <${r.component}>` : zustand ? `useShallow in <${r.component}>` : `stable getSnapshot in <${r.component}>`,\n detail: redux\n ? `the selector${via} returns a new object on every call, so the component re-renders on every store change.`\n : zustand\n ? `the store selector${via} returns a new object on every call, so the component re-renders on every store change.`\n : `${c.path}${via} returned a new reference with the same contents; getSnapshot must return a cached value.`,\n snippet: redux\n ? `// ${r.component}\\nimport { shallowEqual } from 'react-redux';\\nconst slice = useSelector(selectSlice, shallowEqual);\\n// or memoize: const selectSlice = createSelector([selectA, selectB], (a, b) => ({ a, b }));`\n : zustand\n ? `// ${r.component}\\nimport { useShallow } from 'zustand/react/shallow';\\nconst { a, b } = useStore(useShallow((s) => ({ a: s.a, b: s.b })));\\n// or select a primitive: const a = useStore((s) => s.a);`\n : `// ${r.component}\\n// getSnapshot must return the same reference while the data is unchanged\\nconst snapshot = useSyncExternalStore(subscribe, store.getSnapshot /* cached */);`,\n });\n } else {\n out.push({\n kind: 'bailout',\n owner: r.component,\n target: r.component,\n prop: c.path,\n label: `bail out before setting ${c.path} in <${r.component}>`,\n detail: `${c.path} was set to a value deep-equal to the current one (new reference).`,\n snippet: `// ${r.component}\\nsetState((prev) => (deepEqual(prev, next) ? prev : next));`,\n });\n }\n }\n return out;\n}\n\nexport const fixKey = (f: Fix): string => `${f.kind}|${f.owner}|${f.prop || f.target}`;\n\n/** Every fix across `reports`, most avoidable re-renders removed first. */\nexport function rankFixes<R extends ReportLike>(reports: readonly R[]): RankedFix<R>[] {\n const byKey = new Map<string, RankedFix<R>>();\n for (const r of reports) {\n if (!r.avoidable) continue;\n for (const f of fixesFor(r)) {\n const key = fixKey(f);\n let agg = byKey.get(key);\n if (!agg) {\n agg = { ...f, key, count: 0, components: {}, reports: [] };\n byKey.set(key, agg);\n }\n agg.count++;\n agg.components[r.component] = (agg.components[r.component] || 0) + 1;\n if (agg.reports.length < MAX_FIX_REPORTS) agg.reports.push(r);\n }\n }\n return [...byKey.values()].sort((a, b) => b.count - a.count || a.label.localeCompare(b.label));\n}\n\n/**\n * Multi-line text for a test failure or a CI log: the ranked fixes, then (when the reports carry\n * `commitId`) a \"Root causes\" section naming the components whose own changes started the cascades.\n */\nexport function formatFixes(reports: readonly ReportLike[], limit = 10): string {\n const ranked = rankFixes(reports);\n if (!ranked.length) return 'No avoidable re-renders.';\n const lines = ranked.slice(0, limit).map((f, i) => `${String(i + 1).padStart(2)}. ${f.label} (removes ${f.count}: ${Object.entries(f.components).map(([c, n]) => `<${c}>${n > 1 ? ' x' + n : ''}`).join(', ')})`);\n if (ranked.length > limit) lines.push(` … ${ranked.length - limit} more`);\n const roots = formatRootCauses(reports, 5);\n if (roots) lines.push('', 'Root causes:', roots);\n return lines.join('\\n');\n}\n","/**\n * Session summaries and before/after comparison, the same shape the extension records and exports,\n * so a session file committed next to the code can be compared in CI or with the CLI. Pure.\n */\nimport type { RenderReport, ReportLike } from './types';\nimport { rankFixes } from './fixes';\n\nexport interface SessionSummary {\n id: string;\n name: string;\n startedAt: number;\n endedAt: number | null;\n total: number;\n avoidable: number;\n wasted: number;\n byComponent: Record<string, { total: number; avoidable: number; wasted: number }>;\n fixes: { key: string; label: string; count: number }[];\n}\n\nexport interface CompareRow {\n component: string;\n before: number;\n after: number;\n delta: number;\n}\n\nexport interface Comparison {\n before: SessionSummary;\n after: SessionSummary;\n rows: CompareRow[];\n total: { before: number; after: number; delta: number };\n avoidable: { before: number; after: number; delta: number };\n wasted: { before: number; after: number; delta: number };\n resolvedFixes: SessionSummary['fixes'];\n newFixes: SessionSummary['fixes'];\n /** Components whose avoidable re-renders went up. */\n regressions: CompareRow[];\n}\n\nexport function summarizeReports(reports: readonly ReportLike[], meta: Partial<Pick<SessionSummary, 'id' | 'name' | 'startedAt' | 'endedAt'>> = {}): SessionSummary {\n const byComponent: SessionSummary['byComponent'] = {};\n let avoidable = 0;\n let wasted = 0;\n for (const r of reports) {\n const c = (byComponent[r.component] ||= { total: 0, avoidable: 0, wasted: 0 });\n c.total++;\n if (r.avoidable) {\n c.avoidable++;\n avoidable++;\n if (typeof r.selfDuration === 'number') {\n c.wasted += r.selfDuration;\n wasted += r.selfDuration;\n }\n }\n }\n return {\n id: meta.id ?? `s${Date.now().toString(36)}`,\n name: meta.name ?? 'session',\n startedAt: meta.startedAt ?? (reports[0]?.time ?? 0),\n endedAt: meta.endedAt ?? (reports[reports.length - 1]?.time ?? null),\n total: reports.length,\n avoidable,\n wasted,\n byComponent,\n fixes: rankFixes(reports).map((f) => ({ key: f.key, label: f.label, count: f.count })),\n };\n}\n\nexport function compareSummaries(before: SessionSummary, after: SessionSummary): Comparison {\n const names = new Set([...Object.keys(before.byComponent), ...Object.keys(after.byComponent)]);\n const rows: CompareRow[] = [];\n for (const component of names) {\n const b = before.byComponent[component]?.avoidable || 0;\n const a = after.byComponent[component]?.avoidable || 0;\n if (b || a) rows.push({ component, before: b, after: a, delta: a - b });\n }\n rows.sort((x, y) => x.delta - y.delta || y.before - x.before || x.component.localeCompare(y.component));\n const afterKeys = new Set(after.fixes.map((f) => f.key));\n const beforeKeys = new Set(before.fixes.map((f) => f.key));\n return {\n before,\n after,\n rows,\n total: { before: before.total, after: after.total, delta: after.total - before.total },\n avoidable: { before: before.avoidable, after: after.avoidable, delta: after.avoidable - before.avoidable },\n wasted: { before: before.wasted, after: after.wasted, delta: after.wasted - before.wasted },\n resolvedFixes: before.fixes.filter((f) => !afterKeys.has(f.key)),\n newFixes: after.fixes.filter((f) => !beforeKeys.has(f.key)),\n regressions: rows.filter((r) => r.delta > 0),\n };\n}\n\n/** The panel's spelling: summarize a recorded session (`id`/`name`/`startedAt`/`endedAt` come from the session). */\nexport const summarizeSession = (session: Pick<SessionSummary, 'id' | 'name' | 'startedAt' | 'endedAt'>, reports: readonly ReportLike[]): SessionSummary => summarizeReports(reports, session);\n\n/** Alias of `compareSummaries` (the panel's name). */\nexport const compareSessions = compareSummaries;\n\n/** Plain-text table of a comparison (CLI, CI logs). */\nexport function formatComparison(c: Comparison): string {\n const w = Math.max(14, ...c.rows.map((r) => r.component.length + 2));\n const line = (label: string, b: string | number, a: string | number, d: string): string => `${label.padEnd(w)} ${String(b).padStart(8)} ${String(a).padStart(8)} ${d.padStart(8)}`;\n const delta = (n: number, suffix = ''): string => (n === 0 ? '±0' : `${n > 0 ? '+' : ''}${Number.isInteger(n) ? n : n.toFixed(1)}${suffix}`);\n const out = [line('avoidable', c.before.name.slice(0, 8), c.after.name.slice(0, 8), 'Δ'), line('all components', c.avoidable.before, c.avoidable.after, delta(c.avoidable.delta))];\n if (c.wasted.before || c.wasted.after) out.push(line('wasted ms', c.wasted.before.toFixed(1), c.wasted.after.toFixed(1), delta(Number(c.wasted.delta.toFixed(1)))));\n for (const r of c.rows) out.push(line(`<${r.component}>`, r.before, r.after, delta(r.delta)));\n if (c.resolvedFixes.length) out.push('', 'no longer needed:', ...c.resolvedFixes.map((f) => ` - ${f.label}`));\n if (c.newFixes.length) out.push('', 'new:', ...c.newFixes.map((f) => ` - ${f.label}`));\n return out.join('\\n');\n}\n\n/** Reports from a panel export (`{ rerenderLens: true, reports }`), a bare array, or a session summary file. */\nexport function parseExport(data: unknown): { reports: RenderReport[]; sessions: SessionSummary[]; summary: SessionSummary | null } {\n if (Array.isArray(data)) return { reports: data as RenderReport[], sessions: [], summary: null };\n if (data && typeof data === 'object') {\n const d = data as { reports?: unknown; sessions?: unknown; byComponent?: unknown };\n if (Array.isArray(d.reports)) return { reports: d.reports as RenderReport[], sessions: Array.isArray(d.sessions) ? (d.sessions as SessionSummary[]) : [], summary: null };\n if (d.byComponent && typeof d.byComponent === 'object') return { reports: [], sessions: [], summary: data as SessionSummary };\n }\n throw new Error('not a rerender-lens export or session summary');\n}\n","/**\n * Re-render budgets for CI: a JSON baseline of allowed avoidable re-renders per component, checked\n * against a collector's reports (like a bundle-size budget). Pure; reading and writing the file is\n * up to the test runner (`fs`), so this works in Node and in the browser.\n */\nimport type { RenderReport } from './types';\nimport { formatFixes } from './fixes';\n\n/** `{ \"*\": 0, \"ProductRow\": 3 }`: max avoidable re-renders per component; `*` is the default. */\nexport type Budget = Record<string, number>;\n\nexport interface BudgetViolation {\n component: string;\n avoidable: number;\n allowed: number;\n}\n\nexport interface BudgetResult {\n ok: boolean;\n violations: BudgetViolation[];\n /** Components with headroom left, so budgets can be tightened. */\n slack: { component: string; avoidable: number; allowed: number }[];\n counts: Record<string, number>;\n}\n\nexport function avoidableCounts(reports: RenderReport[]): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const r of reports) if (r.avoidable) counts[r.component] = (counts[r.component] || 0) + 1;\n return counts;\n}\n\nexport function checkBudget(reports: RenderReport[], budget: Budget | number): BudgetResult {\n const b: Budget = typeof budget === 'number' ? { '*': budget } : budget;\n const fallback = typeof b['*'] === 'number' ? b['*'] : 0;\n const counts = avoidableCounts(reports);\n const violations: BudgetViolation[] = [];\n const slack: BudgetResult['slack'] = [];\n const names = new Set([...Object.keys(counts), ...Object.keys(b).filter((k) => k !== '*')]);\n for (const component of names) {\n const allowed = typeof b[component] === 'number' ? b[component]! : fallback;\n const avoidable = counts[component] || 0;\n if (avoidable > allowed) violations.push({ component, avoidable, allowed });\n else if (avoidable < allowed) slack.push({ component, avoidable, allowed });\n }\n violations.sort((x, y) => y.avoidable - y.allowed - (x.avoidable - x.allowed));\n return { ok: violations.length === 0, violations, slack, counts };\n}\n\n/** A budget that exactly matches the current counts (the baseline to commit). */\nexport function toBudget(reports: RenderReport[]): Budget {\n return { '*': 0, ...avoidableCounts(reports) };\n}\n\n/** Throws with the violations and the ranked fixes; use it from a test. */\nexport function assertWithinBudget(reports: RenderReport[], budget: Budget | number): BudgetResult {\n const result = checkBudget(reports, budget);\n if (result.ok) return result;\n const lines = result.violations.map((v) => ` <${v.component}>: ${v.avoidable} avoidable re-render${v.avoidable === 1 ? '' : 's'} (budget ${v.allowed})`);\n throw new Error(`Re-render budget exceeded:\\n${lines.join('\\n')}\\n\\nFixes, most impact first:\\n${formatFixes(reports)}`);\n}\n","import type { Notifier, RenderReport } from './types';\nimport { formatFixes, rankFixes, type RankedFix } from './fixes';\nimport { summarizeReports, type SessionSummary } from './sessions';\nimport { assertWithinBudget, type Budget, type BudgetResult } from './budget';\n\nexport interface Collector {\n /** Ranked fixes for everything collected so far (most re-renders removed first). */\n fixes(): RankedFix[];\n /** A session summary of everything collected, comparable with `compareSummaries` or the CLI. */\n summary(name?: string): SessionSummary;\n /** Throws when a component exceeds its allowed avoidable re-renders (`{ \"*\": 0, \"Row\": 2 }` or a number). */\n assertWithinBudget(budget: Budget | number): BudgetResult;\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\\nFixes, most impact first:\\n${formatFixes(reports)}`);\n },\n fixes: () => rankFixes(reports),\n summary: (name?: string) => summarizeReports(reports, name ? { name } : {}),\n assertWithinBudget: (budget) => assertWithinBudget(reports, budget),\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 * The parts of the test-runner integrations that do not depend on a runner: the per-file setup, the\n * JSONL hand-off between workers and the reporter, and the reporter's finish logic.\n *\n * `rerender-lens/vitest` (src/vitest.ts) and `rerender-lens/jest` (src/jest.ts) are thin wrappers\n * around this: they only differ in how the runner names its hooks and constructs a reporter.\n *\n * Workers cannot talk to the reporter directly, so each test file appends its reports as one JSON\n * line to a file the reporter created (path shared through RERENDER_LENS_OUT, which workers inherit\n * because reporters are constructed in the main process before any worker spawns); the reporter\n * reads it when the run ends.\n */\nimport { appendFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport type { Options, RenderReport } from './types';\nimport { ensureDevtoolsHook } from './fiber';\nimport { init } from './tracker';\nimport { createCollector, type Collector } from './notifiers';\nimport { formatFixes } from './fixes';\nimport { checkBudget, type Budget } from './budget';\n\n/** Environment variable carrying the path of the run's JSONL file from the reporter to the workers. */\nexport const OUT_ENV = 'RERENDER_LENS_OUT';\n\nexport interface SetupOptions extends Omit<Options, 'notifier'> {\n /** Also fail each test file that recorded avoidable re-renders (default false: the reporter decides). */\n failFast?: boolean;\n}\n\n/** How the setup ties into the test runner (`{ afterAll }` from the runner's globals). */\nexport interface SetupHooks {\n afterAll?: (fn: () => void) => void;\n /** Path of the current test file, for the reporter's output. */\n testPath?: () => string | undefined;\n}\n\nexport interface LensSetup {\n collector: Collector;\n /** Append this file's reports to the shared output and clear the collector; registered with `afterAll` when given. */\n flush(): void;\n}\n\n/**\n * Call from a setup file. Creates the DevTools hook before react-dom loads, starts the library with\n * a collector, and appends this file's reports to the shared output when it ends. The collector is\n * returned for per-test assertions (`assertNoAvoidable`, `assertWithinBudget`).\n */\nexport function setupRerenderLens(options: SetupOptions = {}, hooks: SetupHooks = {}): LensSetup {\n ensureDevtoolsHook();\n const { failFast, ...rest } = options;\n const collector = createCollector();\n init({ trackAllMemoized: true, silent: true, ...rest, notifier: collector.notifier });\n const flush = (): void => {\n const reports = collector.reports.slice();\n if (!reports.length) return;\n const file = process.env[OUT_ENV];\n if (file) appendFileSync(file, JSON.stringify({ file: hooks.testPath?.() ?? '', reports: reports.map(slim) }) + '\\n');\n collector.clear();\n if (failFast) {\n const avoidable = reports.filter((r) => r.avoidable);\n if (avoidable.length) throw new Error(`rerender-lens: ${avoidable.length} avoidable re-render${avoidable.length === 1 ? '' : 's'} in this file\\n${formatFixes(avoidable, 5)}`);\n }\n };\n hooks.afterAll?.(flush);\n return { collector, flush };\n}\n\n/** Keep what the reporter needs and drop prop/state values (they can be large and are not serializable). */\nfunction slim(r: RenderReport): RenderReport {\n const value = (v: unknown): unknown => (Array.isArray(v) ? [] : typeof v === 'function' ? `ƒ ${(v as { name?: string }).name || ''}` : v && typeof v === 'object' ? {} : v);\n return {\n ...r,\n propChanges: r.propChanges.map((c) => ({ ...c, prev: value(c.prev), next: value(c.next) })),\n stateChanges: r.stateChanges.map((c) => ({ ...c, prev: value(c.prev), next: value(c.next) })),\n hookChanges: r.hookChanges.map((c) => ({ ...c, prev: value(c.prev), next: value(c.next) })),\n props: { prev: {}, next: {} },\n hookState: undefined,\n contexts: undefined,\n state: undefined,\n };\n}\n\nexport interface ReporterOptions {\n /** Path to a budget JSON (`{ \"*\": 0, \"Row\": 2 }`). When set, the run fails on violations. */\n budget?: string;\n /** Print at most this many fixes. Default 10. */\n limit?: number;\n /** Also write the collected reports here as a panel-compatible export (`Sessions > Import`). */\n exportTo?: string;\n /** Where the lines go. Default `process.stdout`. */\n write?: (line: string) => void;\n}\n\nexport interface RunResult {\n /** Every report of the run, from every worker. */\n reports: RenderReport[];\n /** Set when a budget file was given and exceeded; the run must fail. */\n error: Error | null;\n}\n\n/** Create the run's JSONL file and publish its path so workers spawned after this inherit it. */\nexport function createRunFile(): string {\n const dir = join(tmpdir(), 'rerender-lens');\n mkdirSync(dir, { recursive: true });\n const file = join(dir, `run-${process.pid}-${Date.now()}.jsonl`);\n writeFileSync(file, '');\n process.env[OUT_ENV] = file; // workers inherit it\n return file;\n}\n\n/** Print the run's summary and fixes, write the export, check the budget, then remove the file. */\nexport function finishRun(file: string, options: ReporterOptions = {}): RunResult {\n const reports = readRun(file);\n const log = options.write ?? ((line: string): void => void process.stdout.write(line + '\\n'));\n const avoidable = reports.filter((r) => r.avoidable).length;\n let error: Error | null = null;\n log('');\n log(`rerender-lens: ${reports.length} report${reports.length === 1 ? '' : 's'}, ${avoidable} avoidable across the run`);\n if (avoidable) log(formatFixes(reports, options.limit ?? 10));\n if (options.exportTo) writeFileSync(options.exportTo, JSON.stringify({ rerenderLens: true, version: 2, exportedAt: new Date().toISOString(), reports }, null, 2));\n if (options.budget) {\n const budget = JSON.parse(readFileSync(options.budget, 'utf8')) as Budget;\n const result = checkBudget(reports, budget);\n if (!result.ok) {\n const lines = result.violations.map((v) => ` budget exceeded: <${v.component}> ${v.avoidable} avoidable (allowed ${v.allowed})`);\n for (const line of lines) log(line);\n error = new Error(`rerender-lens: re-render budget exceeded (${options.budget})\\n${lines.join('\\n')}`);\n } else log(` within budget (${options.budget})`);\n }\n try {\n rmSync(file, { force: true });\n } catch {\n /* ignore */\n }\n if (process.env[OUT_ENV] === file) delete process.env[OUT_ENV];\n return { reports, error };\n}\n\n/**\n * What a reporter class needs, whatever the runner: the run file, re-arming the environment variable\n * when the runner starts, and a finish that runs once.\n */\nexport class RunReporterCore {\n readonly file: string;\n readonly options: ReporterOptions;\n private done = false;\n constructor(options: ReporterOptions = {}) {\n this.options = options;\n this.file = createRunFile();\n }\n /** Publish the path again (the runner may have replaced `process.env` since the constructor ran). */\n arm(): void {\n process.env[OUT_ENV] = this.file;\n }\n /** The run's result, or null when the run was already finished (runners fire two \"done\" events). */\n finish(): RunResult | null {\n if (this.done) return null;\n this.done = true;\n return finishRun(this.file, this.options);\n }\n}\n\n/** Reports from every worker of a run. */\nexport function readRun(file: string): RenderReport[] {\n if (!existsSync(file)) return [];\n const out: RenderReport[] = [];\n for (const line of readFileSync(file, 'utf8').split('\\n')) {\n if (!line.trim()) continue;\n try {\n const parsed = JSON.parse(line) as { reports?: RenderReport[] };\n if (Array.isArray(parsed.reports)) out.push(...parsed.reports);\n } catch {\n /* partial line */\n }\n }\n return out;\n}\n","/**\n * Vitest integration: one `setupFiles` line collects every avoidable re-render across the run,\n * and a reporter prints the ranked fixes (and enforces a budget file) when the run ends.\n *\n * // vitest.config.ts\n * test: {\n * setupFiles: ['rerender-lens/vitest/setup'],\n * reporters: ['default', ['rerender-lens/vitest', { budget: 'rerender-budget.json' }]],\n * }\n *\n * Custom options: write your own setup file and call `setupRerenderLens(options, { afterAll })`.\n *\n * Everything that is not Vitest-specific lives in `src/runner-report.ts`, shared with\n * `rerender-lens/jest`.\n */\nimport { RunReporterCore, type ReporterOptions } from './runner-report';\nimport { formatFixes } from './fixes';\nimport { checkBudget } from './budget';\n\nexport { OUT_ENV, setupRerenderLens, readRun } from './runner-report';\nexport type { SetupOptions, SetupHooks, LensSetup, ReporterOptions, RunResult } from './runner-report';\n\n/** Vitest reporter (`reporters: [['rerender-lens/vitest', { budget }]]`). */\nexport default class RerenderLensReporter {\n private core: RunReporterCore;\n constructor(options: ReporterOptions = {}) {\n this.core = new RunReporterCore(options);\n }\n onInit(): void {\n this.core.arm();\n }\n onTestRunEnd(): void {\n this.finish();\n }\n /** Vitest < 3 name for the same event. */\n onFinished(): void {\n this.finish();\n }\n private finish(): void {\n const result = this.core.finish();\n if (result?.error) process.exitCode = 1;\n }\n}\n\nexport { formatFixes, checkBudget };\n"]}