@blac/core 2.0.13 → 2.0.15

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 (379) hide show
  1. package/README.md +85 -3
  2. package/dist/Cubit-9jal5zdZ.cjs +1 -1
  3. package/dist/Cubit-BAUPiUF7.cjs +359 -286
  4. package/dist/Cubit-BBKF3PIg.js +269 -230
  5. package/dist/Cubit-BC70gaiA.js +453 -0
  6. package/dist/Cubit-BC70gaiA.js.map +1 -0
  7. package/dist/Cubit-BOgUZva7.js +342 -266
  8. package/dist/Cubit-BOxMvpfc.js +273 -232
  9. package/dist/Cubit-BTznt8zg.js +1 -1
  10. package/dist/Cubit-BogJXkLm.js +260 -225
  11. package/dist/Cubit-C-8R_8db.cjs +475 -0
  12. package/dist/Cubit-C-8R_8db.cjs.map +1 -0
  13. package/dist/Cubit-C3Mw3EoO.cjs +401 -0
  14. package/dist/Cubit-C3Mw3EoO.cjs.map +1 -0
  15. package/dist/Cubit-CO8Fr72L.cjs +447 -0
  16. package/dist/Cubit-CO8Fr72L.cjs.map +1 -0
  17. package/dist/Cubit-COfHT1Bm.cjs +300 -259
  18. package/dist/Cubit-CROWjjs9.js +481 -0
  19. package/dist/Cubit-CROWjjs9.js.map +1 -0
  20. package/dist/Cubit-CWP8Ddzx.cjs +510 -0
  21. package/dist/Cubit-CWP8Ddzx.cjs.map +1 -0
  22. package/dist/Cubit-CXxh9iol.js +284 -242
  23. package/dist/Cubit-CYOWfzQt.cjs +297 -254
  24. package/dist/Cubit-CZaf_fp4.cjs +1 -1
  25. package/dist/Cubit-C_dUEUdd.cjs +359 -286
  26. package/dist/Cubit-C_rxRCTN.cjs +523 -0
  27. package/dist/Cubit-C_rxRCTN.cjs.map +1 -0
  28. package/dist/Cubit-CcKgMEBO.js +281 -239
  29. package/dist/Cubit-CfT6Y1jl.js +328 -280
  30. package/dist/Cubit-CynJruuO.js +369 -0
  31. package/dist/Cubit-CynJruuO.js.map +1 -0
  32. package/dist/Cubit-D2vQ6nMb.js +342 -266
  33. package/dist/Cubit-D7jOZCoZ.js +342 -266
  34. package/dist/Cubit-D9j3IGPc.cjs +523 -0
  35. package/dist/Cubit-D9j3IGPc.cjs.map +1 -0
  36. package/dist/Cubit-DKEY9WYq.cjs +276 -240
  37. package/dist/Cubit-DMV_0TCp.js +481 -0
  38. package/dist/Cubit-DMV_0TCp.js.map +1 -0
  39. package/dist/Cubit-DP5DXPUK.js +342 -266
  40. package/dist/Cubit-DRFkzD2h.js +426 -0
  41. package/dist/Cubit-DRFkzD2h.js.map +1 -0
  42. package/dist/Cubit-DbnhTUaZ.cjs +359 -286
  43. package/dist/Cubit-DrqG3SP3.cjs +349 -300
  44. package/dist/Cubit-DsDkCo42.cjs +292 -250
  45. package/dist/Cubit-DwRw1E9D.cjs +289 -247
  46. package/dist/Cubit-Dw_kFBgc.js +1 -1
  47. package/dist/Cubit-KiXZCubP.cjs +1 -1
  48. package/dist/Cubit-Ksj7G4uR.js +342 -266
  49. package/dist/Cubit-MkjbpcPf.cjs +359 -286
  50. package/dist/Cubit-NRhvdDQ6.js +279 -239
  51. package/dist/Cubit-PMTXxI_u.js +1 -1
  52. package/dist/Cubit-VJuu2tt9.js +481 -0
  53. package/dist/Cubit-VJuu2tt9.js.map +1 -0
  54. package/dist/Cubit-jz922NKf.cjs +300 -257
  55. package/dist/Cubit-kU5_4jgC.cjs +359 -286
  56. package/dist/StateContainerRegistry-B4yVMYbx.cjs +1057 -0
  57. package/dist/StateContainerRegistry-B4yVMYbx.cjs.map +1 -0
  58. package/dist/StateContainerRegistry-BAcxouCu.js +683 -615
  59. package/dist/StateContainerRegistry-BK57H92E.js +701 -630
  60. package/dist/StateContainerRegistry-BRBATSrx.cjs +1030 -0
  61. package/dist/StateContainerRegistry-BRBATSrx.cjs.map +1 -0
  62. package/dist/StateContainerRegistry-BgBIKcQF.js +956 -0
  63. package/dist/StateContainerRegistry-BgBIKcQF.js.map +1 -0
  64. package/dist/StateContainerRegistry-BglEhqdA.js +669 -606
  65. package/dist/StateContainerRegistry-BhcnG0DF.js +625 -562
  66. package/dist/StateContainerRegistry-BpO5t-0i.js +642 -580
  67. package/dist/StateContainerRegistry-BqS-wpb_.js +957 -0
  68. package/dist/StateContainerRegistry-BqS-wpb_.js.map +1 -0
  69. package/dist/StateContainerRegistry-BrEGYPZT.cjs +1029 -0
  70. package/dist/StateContainerRegistry-BrEGYPZT.cjs.map +1 -0
  71. package/dist/StateContainerRegistry-Bxfne4A7.cjs +908 -0
  72. package/dist/StateContainerRegistry-Bxfne4A7.cjs.map +1 -0
  73. package/dist/StateContainerRegistry-C0E7vsgy.js +758 -0
  74. package/dist/StateContainerRegistry-C0E7vsgy.js.map +1 -0
  75. package/dist/StateContainerRegistry-C0I77Ndz.cjs +920 -0
  76. package/dist/StateContainerRegistry-C0I77Ndz.cjs.map +1 -0
  77. package/dist/StateContainerRegistry-CDH9mnQS.cjs +668 -614
  78. package/dist/StateContainerRegistry-CTOXUf75.cjs +695 -640
  79. package/dist/StateContainerRegistry-CX2CBOmv.cjs +739 -679
  80. package/dist/StateContainerRegistry-CXnnf2-l.js +867 -0
  81. package/dist/StateContainerRegistry-CXnnf2-l.js.map +1 -0
  82. package/dist/StateContainerRegistry-CehuIpK_.cjs +811 -0
  83. package/dist/StateContainerRegistry-CehuIpK_.cjs.map +1 -0
  84. package/dist/StateContainerRegistry-Ci0ajc5g.js +680 -612
  85. package/dist/StateContainerRegistry-Ck2-XmT_.js +587 -527
  86. package/dist/StateContainerRegistry-D1lVJFGL.cjs +706 -646
  87. package/dist/StateContainerRegistry-DC4N73O6.js +632 -569
  88. package/dist/StateContainerRegistry-DOuGI-l5.js +645 -582
  89. package/dist/StateContainerRegistry-DT66lr3I.cjs +651 -596
  90. package/dist/StateContainerRegistry-DmmzYa7S.js +974 -0
  91. package/dist/StateContainerRegistry-DmmzYa7S.js.map +1 -0
  92. package/dist/StateContainerRegistry-Upsrlg9G.cjs +709 -649
  93. package/dist/StateContainerRegistry-WznfcA-Q.js +855 -0
  94. package/dist/StateContainerRegistry-WznfcA-Q.js.map +1 -0
  95. package/dist/StateContainerRegistry-Yph6UCA_.js +637 -569
  96. package/dist/StateContainerRegistry-mseeTqSA.cjs +671 -616
  97. package/dist/StateContainerRegistry-pRNxHNFD.cjs +658 -603
  98. package/dist/StateContainerRegistry-vXMWtG7J.cjs +613 -561
  99. package/dist/StateContainerRegistry-v_prqMcI.cjs +663 -603
  100. package/dist/branded-BSeA_mZO.cjs.map +1 -1
  101. package/dist/branded-DCqi3De1.cjs +11 -11
  102. package/dist/branded-DwtzSsg0.js.map +1 -1
  103. package/dist/branded-Max3xOTA.js +6 -6
  104. package/dist/config-0ZD9i3wy.js +16 -0
  105. package/dist/config-0ZD9i3wy.js.map +1 -0
  106. package/dist/config-B3NIwDQv.cjs +20 -20
  107. package/dist/config-BKGHop0V.js +5 -5
  108. package/dist/config-BKoaAlmb.js +5 -5
  109. package/dist/config-BPj08-8h.cjs +32 -0
  110. package/dist/config-BPj08-8h.cjs.map +1 -0
  111. package/dist/config-BR0Xy-Tn.cjs +20 -20
  112. package/dist/config-B_4xXpvK.cjs +32 -0
  113. package/dist/config-B_4xXpvK.cjs.map +1 -0
  114. package/dist/config-BflrQM4_.cjs +32 -0
  115. package/dist/config-BflrQM4_.cjs.map +1 -0
  116. package/dist/config-BzObBsk2.cjs +32 -0
  117. package/dist/config-BzObBsk2.cjs.map +1 -0
  118. package/dist/config-C0yumL1H.cjs +32 -0
  119. package/dist/config-C0yumL1H.cjs.map +1 -0
  120. package/dist/config-C8xqVHTf.js +16 -0
  121. package/dist/config-C8xqVHTf.js.map +1 -0
  122. package/dist/config-CCUhIYIF.js +5 -5
  123. package/dist/config-CGo__MAt.js +16 -0
  124. package/dist/config-CGo__MAt.js.map +1 -0
  125. package/dist/config-CQH9fTY-.cjs +20 -20
  126. package/dist/config-CR_Bz7RD.js +5 -5
  127. package/dist/config-CTOa-yPN.cjs +20 -20
  128. package/dist/config-Cd7Q-B4g.js +16 -0
  129. package/dist/config-Cd7Q-B4g.js.map +1 -0
  130. package/dist/config-CmDEX-1o.js +16 -0
  131. package/dist/config-CmDEX-1o.js.map +1 -0
  132. package/dist/config-CoNMTnMA.cjs +32 -0
  133. package/dist/config-CoNMTnMA.cjs.map +1 -0
  134. package/dist/config-Cwj8-C1J.js +5 -5
  135. package/dist/config-D3jisfdj.cjs +20 -20
  136. package/dist/config-D4GifZQ4.js +5 -5
  137. package/dist/config-DDrSQGpQ.cjs +20 -20
  138. package/dist/config-DEcslxan.cjs +20 -20
  139. package/dist/config-DMNZ2YLV.cjs +20 -20
  140. package/dist/config-De9oQ6Ki.js +5 -5
  141. package/dist/config-DoHx0Xsl.js +16 -0
  142. package/dist/config-DoHx0Xsl.js.map +1 -0
  143. package/dist/config-DokTzpr8.cjs +20 -20
  144. package/dist/config-DslYBm4Z.js +5 -5
  145. package/dist/config-H6FAqbW4.cjs +20 -20
  146. package/dist/config-Yp645dGK.js +5 -5
  147. package/dist/config-ispAzOZV.js +5 -5
  148. package/dist/config.d.cts +72 -0
  149. package/dist/config.d.ts +72 -0
  150. package/dist/constants.d.cts +13 -0
  151. package/dist/constants.d.ts +13 -0
  152. package/dist/core/Cubit.d.ts +14 -4
  153. package/dist/core/StateContainer.d.ts +111 -11
  154. package/dist/core/StateContainerRegistry.d.ts +55 -11
  155. package/dist/core/symbols.d.ts +26 -0
  156. package/dist/debug.cjs +3 -3
  157. package/dist/debug.js +3 -3
  158. package/dist/decorators/blac.d.ts +17 -0
  159. package/dist/ensure-9VEq5H0L.js +3 -3
  160. package/dist/ensure-BB6xHQAF.cjs +14 -0
  161. package/dist/ensure-BB6xHQAF.cjs.map +1 -0
  162. package/dist/ensure-BNDfTzqg.cjs +8 -8
  163. package/dist/ensure-BVCnjU7r.js +343 -267
  164. package/dist/ensure-BbzGXjep.cjs +8 -8
  165. package/dist/ensure-BlIaQai6.js +9 -0
  166. package/dist/ensure-BlIaQai6.js.map +1 -0
  167. package/dist/ensure-Bm3oHxga.js +9 -0
  168. package/dist/ensure-Bm3oHxga.js.map +1 -0
  169. package/dist/ensure-C3eIRs6e.cjs +8 -8
  170. package/dist/ensure-CJZL7bcA.cjs +365 -292
  171. package/dist/ensure-CN6unBOe.cjs +8 -8
  172. package/dist/ensure-CU-B1ywv.js +3 -3
  173. package/dist/ensure-CWKzeno7.js +3 -3
  174. package/dist/ensure-CkENsuQ9.js +9 -0
  175. package/dist/ensure-CkENsuQ9.js.map +1 -0
  176. package/dist/ensure-Cm-4_LSh.cjs +14 -0
  177. package/dist/ensure-Cm-4_LSh.cjs.map +1 -0
  178. package/dist/ensure-Cqex5r1P.cjs +14 -0
  179. package/dist/ensure-Cqex5r1P.cjs.map +1 -0
  180. package/dist/ensure-Cv5AbNGZ.js +9 -0
  181. package/dist/ensure-Cv5AbNGZ.js.map +1 -0
  182. package/dist/ensure-D63lEMUK.cjs +8 -8
  183. package/dist/ensure-DGEtPU9A.cjs +8 -8
  184. package/dist/ensure-DM3qb336.cjs +14 -0
  185. package/dist/ensure-DM3qb336.cjs.map +1 -0
  186. package/dist/ensure-DME-_T0j.cjs +8 -8
  187. package/dist/ensure-DWd0GCYB.js +3 -3
  188. package/dist/ensure-DamKOP6q.cjs +8 -8
  189. package/dist/ensure-Dcfptl-A.js +9 -0
  190. package/dist/ensure-Dcfptl-A.js.map +1 -0
  191. package/dist/ensure-Def-EBWG.js +3 -3
  192. package/dist/ensure-DnHL5QiQ.cjs +14 -0
  193. package/dist/ensure-DnHL5QiQ.cjs.map +1 -0
  194. package/dist/ensure-Dr7I78Ku.cjs +8 -8
  195. package/dist/ensure-SLVdGd5b.js +3 -3
  196. package/dist/ensure-Sb92MCXu.js +3 -3
  197. package/dist/ensure-gFlvevGm.cjs +14 -0
  198. package/dist/ensure-gFlvevGm.cjs.map +1 -0
  199. package/dist/ensure-l2-H7S5W.js +3 -3
  200. package/dist/ensure-mkL-3qh8.js +9 -0
  201. package/dist/ensure-mkL-3qh8.js.map +1 -0
  202. package/dist/ensure-n80crSlX.js +3 -3
  203. package/dist/ensure-nCxg7MCN.js +3 -3
  204. package/dist/ensure-vS71MV4q.cjs +8 -8
  205. package/dist/index.cjs +37 -14
  206. package/dist/index.cjs.map +1 -1
  207. package/dist/index.d.cts +14 -4
  208. package/dist/index.d.ts +14 -4
  209. package/dist/index.js +23 -10
  210. package/dist/index.js.map +1 -1
  211. package/dist/management-6oQbmf0z.js +41 -0
  212. package/dist/management-6oQbmf0z.js.map +1 -0
  213. package/dist/management-B46QwA9Y.js +20 -11
  214. package/dist/management-B9yrRpeg.js +41 -0
  215. package/dist/management-B9yrRpeg.js.map +1 -0
  216. package/dist/management-BCKTEZ8Q.js +20 -11
  217. package/dist/management-BbMzdXbT.js +41 -0
  218. package/dist/management-BbMzdXbT.js.map +1 -0
  219. package/dist/management-Bg652agq.js +20 -11
  220. package/dist/management-BnedF5ZD.cjs +50 -50
  221. package/dist/management-BoUa99eB.cjs +79 -0
  222. package/dist/management-BoUa99eB.cjs.map +1 -0
  223. package/dist/management-C4SHcrJm.cjs +79 -0
  224. package/dist/management-C4SHcrJm.cjs.map +1 -0
  225. package/dist/management-CK-GL3wY.js +20 -11
  226. package/dist/management-CPhgY8OE.js +41 -0
  227. package/dist/management-CPhgY8OE.js.map +1 -0
  228. package/dist/management-CU_V3LIP.js +20 -11
  229. package/dist/management-CUwXDSi9.cjs +79 -0
  230. package/dist/management-CUwXDSi9.cjs.map +1 -0
  231. package/dist/management-CaqiyNzB.js +20 -11
  232. package/dist/management-Cin-JvYe.js +20 -11
  233. package/dist/management-ClaXym0F.cjs +50 -50
  234. package/dist/management-DL0Uzsoz.js +20 -11
  235. package/dist/management-DLdAQfqk.cjs +79 -0
  236. package/dist/management-DLdAQfqk.cjs.map +1 -0
  237. package/dist/management-DMZ8qpwr.cjs +50 -50
  238. package/dist/management-DTzcC6aD.cjs +79 -0
  239. package/dist/management-DTzcC6aD.cjs.map +1 -0
  240. package/dist/management-DYLNyj9p.cjs +50 -50
  241. package/dist/management-Dag9u4t6.cjs +50 -50
  242. package/dist/management-DbMRdDBo.cjs +50 -50
  243. package/dist/management-DfnDAKmP.js +41 -0
  244. package/dist/management-DfnDAKmP.js.map +1 -0
  245. package/dist/management-DjBU1gtb.cjs +50 -50
  246. package/dist/management-DwCozsY8.js +20 -11
  247. package/dist/management-H4m3ciJO.js +32 -0
  248. package/dist/management-H4m3ciJO.js.map +1 -0
  249. package/dist/management-Xo3A6Za3.cjs +79 -0
  250. package/dist/management-Xo3A6Za3.cjs.map +1 -0
  251. package/dist/management-ZU2YzOkr.js +18 -10
  252. package/dist/management-baPDwA9n.cjs +50 -50
  253. package/dist/management-jQGCvZNN.cjs +44 -44
  254. package/dist/management-ry_KteFK.cjs +50 -50
  255. package/dist/plugin/BlacPlugin.d.ts +89 -15
  256. package/dist/plugin/PluginManager.d.ts +65 -5
  257. package/dist/plugins.cjs +1 -1
  258. package/dist/plugins.d.cts +2 -2
  259. package/dist/plugins.d.ts +2 -2
  260. package/dist/plugins.js +1 -1
  261. package/dist/registry/acquire.d.ts +9 -2
  262. package/dist/registry/ensure.d.ts +2 -2
  263. package/dist/registry/index.d.ts +1 -1
  264. package/dist/resolve-dependencies-B2QggQAi.js +641 -558
  265. package/dist/resolve-dependencies-B6JDXvpr.js +651 -566
  266. package/dist/resolve-dependencies-BAKAoD0U.js +878 -0
  267. package/dist/resolve-dependencies-BAKAoD0U.js.map +1 -0
  268. package/dist/resolve-dependencies-BFZQq60Y.cjs +724 -666
  269. package/dist/resolve-dependencies-BGafS3Ww.js +643 -561
  270. package/dist/resolve-dependencies-BHd34gS3.cjs +724 -666
  271. package/dist/resolve-dependencies-BNeayhbQ.cjs +732 -671
  272. package/dist/resolve-dependencies-BWEMpuDy.js +641 -558
  273. package/dist/resolve-dependencies-BiWkW2eS.js +643 -561
  274. package/dist/resolve-dependencies-BjxCztYD.js +739 -0
  275. package/dist/resolve-dependencies-BjxCztYD.js.map +1 -0
  276. package/dist/resolve-dependencies-BlyBV0hB.cjs +969 -0
  277. package/dist/resolve-dependencies-BlyBV0hB.cjs.map +1 -0
  278. package/dist/resolve-dependencies-By26rT_i.js +651 -566
  279. package/dist/resolve-dependencies-C9Kf7AzY.cjs +724 -666
  280. package/dist/resolve-dependencies-CTzV1txG.js +643 -561
  281. package/dist/resolve-dependencies-CWjuGHiF.cjs +969 -0
  282. package/dist/resolve-dependencies-CWjuGHiF.cjs.map +1 -0
  283. package/dist/resolve-dependencies-ClSsP0DJ.cjs +722 -663
  284. package/dist/resolve-dependencies-D0vTzZgs.js +643 -561
  285. package/dist/resolve-dependencies-D2WnZMF-.cjs +724 -666
  286. package/dist/resolve-dependencies-DCBLTeza.cjs +969 -0
  287. package/dist/resolve-dependencies-DCBLTeza.cjs.map +1 -0
  288. package/dist/resolve-dependencies-DMlqYJR2.js +643 -561
  289. package/dist/resolve-dependencies-DP6U1EYB.cjs +840 -0
  290. package/dist/resolve-dependencies-DP6U1EYB.cjs.map +1 -0
  291. package/dist/resolve-dependencies-DSQNXvnV.cjs +724 -666
  292. package/dist/resolve-dependencies-DV3HO_uH.js +878 -0
  293. package/dist/resolve-dependencies-DV3HO_uH.js.map +1 -0
  294. package/dist/resolve-dependencies-DXwMhP0Y.js +878 -0
  295. package/dist/resolve-dependencies-DXwMhP0Y.js.map +1 -0
  296. package/dist/resolve-dependencies-DbRWlt9u.js +878 -0
  297. package/dist/resolve-dependencies-DbRWlt9u.js.map +1 -0
  298. package/dist/resolve-dependencies-DcUUva2P.cjs +724 -666
  299. package/dist/resolve-dependencies-Dd8T6TLt.cjs +724 -666
  300. package/dist/resolve-dependencies-Dfdp_DZd.cjs +732 -671
  301. package/dist/resolve-dependencies-GJ8PNyNB.cjs +969 -0
  302. package/dist/resolve-dependencies-GJ8PNyNB.cjs.map +1 -0
  303. package/dist/resolve-dependencies-KSpTt4jy.cjs +722 -663
  304. package/dist/resolve-dependencies-Nvjp4CwS.js +643 -561
  305. package/dist/resolve-dependencies-f-QUqYiL.js +643 -561
  306. package/dist/testing.cjs +27 -20
  307. package/dist/testing.cjs.map +1 -1
  308. package/dist/testing.d.cts +22 -1
  309. package/dist/testing.d.ts +22 -1
  310. package/dist/testing.js +27 -21
  311. package/dist/testing.js.map +1 -1
  312. package/dist/tracked-B77j2g9M.js +171 -151
  313. package/dist/tracked-BDVi2LKM.cjs +196 -175
  314. package/dist/tracked-BFdJCzL0.cjs +242 -0
  315. package/dist/tracked-BFdJCzL0.cjs.map +1 -0
  316. package/dist/tracked-BH-gX4T1.cjs +196 -175
  317. package/dist/tracked-BTHok3Dl.cjs +196 -175
  318. package/dist/tracked-BTbFkFeM.js +186 -166
  319. package/dist/tracked-BU_OBWqM.cjs +242 -0
  320. package/dist/tracked-BU_OBWqM.cjs.map +1 -0
  321. package/dist/tracked-BfctH2es.cjs +242 -0
  322. package/dist/tracked-BfctH2es.cjs.map +1 -0
  323. package/dist/tracked-BhQtzUhZ.js +186 -166
  324. package/dist/tracked-BnqrYXiO.js +212 -0
  325. package/dist/tracked-BnqrYXiO.js.map +1 -0
  326. package/dist/tracked-BtgFOGup.js +212 -0
  327. package/dist/tracked-BtgFOGup.js.map +1 -0
  328. package/dist/tracked-C3nIS4J7.cjs +242 -0
  329. package/dist/tracked-C3nIS4J7.cjs.map +1 -0
  330. package/dist/tracked-C52awNV9.js +171 -151
  331. package/dist/tracked-CGzduF2m.js +186 -166
  332. package/dist/tracked-CK_-ixtX.cjs +196 -175
  333. package/dist/tracked-CLlvURln.js +186 -166
  334. package/dist/tracked-CgHWmuGC.cjs +211 -190
  335. package/dist/tracked-CoAlC8fs.js +171 -151
  336. package/dist/tracked-D3Xjm1H1.cjs +211 -190
  337. package/dist/tracked-DB6yMV5F.js +212 -0
  338. package/dist/tracked-DB6yMV5F.js.map +1 -0
  339. package/dist/tracked-DBn-bs_G.js +171 -151
  340. package/dist/tracked-DMBTDF0P.js +171 -151
  341. package/dist/tracked-DN3h3Rp1.js +171 -151
  342. package/dist/tracked-DOGh1Q5Z.cjs +242 -0
  343. package/dist/tracked-DOGh1Q5Z.cjs.map +1 -0
  344. package/dist/tracked-DUkp4zve.cjs +196 -175
  345. package/dist/tracked-D_ou7mYG.js +212 -0
  346. package/dist/tracked-D_ou7mYG.js.map +1 -0
  347. package/dist/tracked-Dcu6EATB.js +171 -151
  348. package/dist/tracked-GvAJQVAI.cjs +227 -196
  349. package/dist/tracked-O2lv-kJV.cjs +211 -190
  350. package/dist/tracked-WF6aXuAo.js +186 -162
  351. package/dist/tracked-d_sQWU3c.cjs +196 -175
  352. package/dist/tracked-n9TMK-30.cjs +196 -175
  353. package/dist/tracked-njU-_pVa.cjs +211 -190
  354. package/dist/tracked-zAgmKIlC.js +212 -0
  355. package/dist/tracked-zAgmKIlC.js.map +1 -0
  356. package/dist/tracking/dependency-manager.d.ts +33 -29
  357. package/dist/tracking/index.d.ts +16 -1
  358. package/dist/tracking/iteration-perf.bench.d.ts +1 -0
  359. package/dist/tracking/path-utils.d.ts +18 -1
  360. package/dist/tracking/resolve-dependencies.d.ts +3 -1
  361. package/dist/tracking/tracked.d.ts +37 -34
  362. package/dist/tracking/tracking-proxy.d.ts +94 -47
  363. package/dist/tracking.cjs +12 -9
  364. package/dist/tracking.js +32 -2
  365. package/dist/types/utilities.d.ts +15 -3
  366. package/dist/types.cjs +1 -1
  367. package/dist/types.js +1 -1
  368. package/dist/utils/static-props.d.ts +14 -0
  369. package/dist/utils/structural-key.d.ts +14 -0
  370. package/dist/watch/watch.d.ts +1 -1
  371. package/dist/watch-BpwaUL8r.cjs +68 -0
  372. package/dist/watch-BpwaUL8r.cjs.map +1 -0
  373. package/dist/watch-DWCqXllW.js +57 -0
  374. package/dist/watch-DWCqXllW.js.map +1 -0
  375. package/dist/watch-entry.cjs +3 -6
  376. package/dist/watch-entry.d.cts +1 -3
  377. package/dist/watch-entry.d.ts +1 -3
  378. package/dist/watch-entry.js +2 -2
  379. package/package.json +4 -14
@@ -0,0 +1,878 @@
1
+ import {
2
+ l as BLAC_DEFAULTS,
3
+ u as BLAC_ERROR_PREFIX,
4
+ } from './StateContainerRegistry-BqS-wpb_.js';
5
+ import { t as getRegistry } from './config-Cd7Q-B4g.js';
6
+ //#region src/tracking/path-utils.ts
7
+ /**
8
+ * Path utilities for dependency tracking
9
+ *
10
+ * Provides utilities for parsing property paths and extracting values
11
+ * from nested objects using path strings.
12
+ *
13
+ * @internal
14
+ */
15
+ /**
16
+ * Parse a property path string into an array of segments
17
+ *
18
+ * @internal
19
+ *
20
+ * Handles both dot notation (a.b.c) and bracket notation (a[0].b)
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * parsePath('user.name') // ['user', 'name']
25
+ * parsePath('items[0].name') // ['items', '0', 'name']
26
+ * parsePath('data.users[2].address.city') // ['data', 'users', '2', 'address', 'city']
27
+ * ```
28
+ */
29
+ function parsePath(path) {
30
+ const segments = [];
31
+ let current = '';
32
+ let i = 0;
33
+ while (i < path.length) {
34
+ const char = path[i];
35
+ if (char === '.') {
36
+ if (current) segments.push(current);
37
+ current = '';
38
+ } else if (char === '[') {
39
+ if (current) segments.push(current);
40
+ current = '';
41
+ i++;
42
+ while (i < path.length && path[i] !== ']') current += path[i++];
43
+ if (current) segments.push(current);
44
+ current = '';
45
+ } else current += char;
46
+ i++;
47
+ }
48
+ if (current) segments.push(current);
49
+ return segments;
50
+ }
51
+ /**
52
+ * Sentinel value returned by `getValueAtPath` when the path cannot be fully
53
+ * walked because an intermediate segment is null or undefined. This is
54
+ * distinct from `undefined`, which is a legitimate leaf value.
55
+ *
56
+ * @internal
57
+ */
58
+ const MISSING = Symbol('missing');
59
+ /**
60
+ * Get a value from an object using a path of segments
61
+ *
62
+ * Returns `PATH_MISSING` (not `undefined`) when the path cannot be walked
63
+ * because an intermediate parent is null or undefined. This lets callers
64
+ * distinguish "the leaf is explicitly `undefined`" from "the path is broken".
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * const obj = { user: { name: 'Alice', age: 30 } }
69
+ * getValueAtPath(obj, ['user', 'name']) // 'Alice'
70
+ * getValueAtPath(obj, ['user', 'age']) // 30
71
+ * getValueAtPath(obj, ['user', 'missing']) // undefined
72
+ * getValueAtPath({ a: null }, ['a', 'b']) // PATH_MISSING
73
+ * ```
74
+ *
75
+ * @internal
76
+ */
77
+ function getValueAtPath(obj, segments) {
78
+ let current = obj;
79
+ for (let i = 0; i < segments.length; i++) {
80
+ if (current === null || current === void 0) return MISSING;
81
+ current = current[segments[i]];
82
+ }
83
+ return current;
84
+ }
85
+ /**
86
+ * Shallow equality comparison for arrays
87
+ *
88
+ * Compares two arrays element-by-element using Object.is
89
+ *
90
+ * @example
91
+ * ```ts
92
+ * shallowEqual([1, 2, 3], [1, 2, 3]) // true
93
+ * shallowEqual([1, 2, 3], [1, 2, 4]) // false
94
+ * shallowEqual([1, 2], [1, 2, 3]) // false
95
+ * ```
96
+ *
97
+ * @internal
98
+ */
99
+ function shallowEqual(arr1, arr2) {
100
+ if (arr1.length !== arr2.length) return false;
101
+ for (let i = 0; i < arr1.length; i++)
102
+ if (!Object.is(arr1[i], arr2[i])) return false;
103
+ return true;
104
+ }
105
+ //#endregion
106
+ //#region src/tracking/tracking-proxy.ts
107
+ /**
108
+ * Consolidated Tracking System
109
+ *
110
+ * This module provides all dependency and getter tracking functionality:
111
+ * - Proxy creation for automatic property access tracking
112
+ * - Dependency path tracking and change detection
113
+ * - Getter execution tracking for computed properties
114
+ * - Combined tracking proxy for watch/waitUntil use cases
115
+ */
116
+ /**
117
+ * Check if a value can be proxied
118
+ * Returns true for plain objects and arrays only.
119
+ * @internal
120
+ */
121
+ function isProxyable(value) {
122
+ if (typeof value !== 'object' || value === null) return false;
123
+ const proto = Object.getPrototypeOf(value);
124
+ return proto === Object.prototype || proto === Array.prototype;
125
+ }
126
+ /**
127
+ * Create a new proxy tracker state
128
+ * @internal
129
+ */
130
+ function createProxyState() {
131
+ return {
132
+ trackedPaths: /* @__PURE__ */ new Set(),
133
+ isTracking: false,
134
+ proxyCache: /* @__PURE__ */ new WeakMap(),
135
+ boundFunctionsCache: null,
136
+ lastProxiedState: null,
137
+ lastProxy: null,
138
+ maxDepth: 10,
139
+ };
140
+ }
141
+ /**
142
+ * Start tracking property accesses
143
+ * @internal
144
+ */
145
+ function startProxy(state) {
146
+ state.isTracking = true;
147
+ state.trackedPaths.clear();
148
+ }
149
+ /**
150
+ * Stop tracking and return the tracked paths
151
+ * @internal
152
+ */
153
+ function stopProxy(state) {
154
+ state.isTracking = false;
155
+ const paths = state.trackedPaths;
156
+ state.trackedPaths = /* @__PURE__ */ new Set();
157
+ return paths;
158
+ }
159
+ /**
160
+ * Cache (or create + cache) a function keyed by (target, fn). The cached
161
+ * value is whatever `factory()` returns the first time the pair is seen.
162
+ *
163
+ * Used for both:
164
+ * - plain bound copies (see `getBoundFunction`)
165
+ * - custom wrappers (e.g. iterating-array-method wrappers in
166
+ * `createArrayProxy`) that need stable identity across renders
167
+ * @internal
168
+ */
169
+ function getOrCacheBound(state, target, fn, factory) {
170
+ if (!state.boundFunctionsCache)
171
+ state.boundFunctionsCache = /* @__PURE__ */ new WeakMap();
172
+ let perTarget = state.boundFunctionsCache.get(target);
173
+ if (!perTarget) {
174
+ perTarget = /* @__PURE__ */ new WeakMap();
175
+ state.boundFunctionsCache.set(target, perTarget);
176
+ }
177
+ const cached = perTarget.get(fn);
178
+ if (cached) return cached;
179
+ const made = factory();
180
+ perTarget.set(fn, made);
181
+ return made;
182
+ }
183
+ /**
184
+ * Return a bound copy of `fn` keyed by (target, fn) so that the same
185
+ * prototype method (e.g. Array.prototype.map) bound to different targets
186
+ * produces different cached values.
187
+ * @internal
188
+ */
189
+ function getBoundFunction(state, target, fn) {
190
+ return getOrCacheBound(state, target, fn, () => fn.bind(target));
191
+ }
192
+ /**
193
+ * Array methods whose callback we wrap so each item is proxied at its
194
+ * own per-index path. Excludes mutators, derived-array returners, and
195
+ * the iterator-returning helpers (handled elsewhere).
196
+ * @internal
197
+ */
198
+ const ITERATING_METHODS = new Set([
199
+ 'forEach',
200
+ 'map',
201
+ 'filter',
202
+ 'find',
203
+ 'findIndex',
204
+ 'findLast',
205
+ 'findLastIndex',
206
+ 'some',
207
+ 'every',
208
+ 'flatMap',
209
+ ]);
210
+ /**
211
+ * Array folding methods whose callback has the reduce signature
212
+ * (acc, item, index, arr) => acc. Items are proxied; accumulator passes raw.
213
+ * @internal
214
+ */
215
+ const REDUCING_METHODS = new Set(['reduce', 'reduceRight']);
216
+ /**
217
+ * Create a proxy for an array with property access tracking
218
+ * @internal
219
+ */
220
+ function createArrayProxy(state, target, path, depth = 0) {
221
+ let proxyRef;
222
+ function makeIteratingWrapper(methodName) {
223
+ const realMethod = Array.prototype[methodName];
224
+ return function (callback, thisArg) {
225
+ return realMethod.call(target, (item, index) => {
226
+ const indexPath = path ? `${path}[${index}]` : `[${index}]`;
227
+ if (state.isTracking) state.trackedPaths.add(indexPath);
228
+ const proxiedItem = isProxyable(item)
229
+ ? createInternal(state, item, indexPath, depth + 1)
230
+ : item;
231
+ return callback.call(thisArg, proxiedItem, index, proxyRef);
232
+ });
233
+ };
234
+ }
235
+ /**
236
+ * Iterator-returning array methods whose yielded items need to be proxied.
237
+ * `keys()` is excluded — it yields numeric indices (primitives, no proxying needed).
238
+ */
239
+ const ITERATOR_METHODS = new Set(['values', 'entries']);
240
+ function makeIteratorMethod(methodName) {
241
+ return function () {
242
+ return (function* () {
243
+ const len = target.length;
244
+ if (state.isTracking && path) state.trackedPaths.add(`${path}.length`);
245
+ for (let i = 0; i < len; i++) {
246
+ const indexPath = path ? `${path}[${i}]` : `[${i}]`;
247
+ if (state.isTracking) state.trackedPaths.add(indexPath);
248
+ const item = target[i];
249
+ const proxied = isProxyable(item)
250
+ ? createInternal(state, item, indexPath, depth + 1)
251
+ : item;
252
+ if (methodName === 'entries') yield [i, proxied];
253
+ else yield proxied;
254
+ }
255
+ })();
256
+ };
257
+ }
258
+ function makeReducingWrapper(methodName) {
259
+ const realMethod = Array.prototype[methodName];
260
+ return function (callback, ...rest) {
261
+ const wrapped = (acc, item, index) => {
262
+ const indexPath = path ? `${path}[${index}]` : `[${index}]`;
263
+ if (state.isTracking) state.trackedPaths.add(indexPath);
264
+ return callback(
265
+ acc,
266
+ isProxyable(item)
267
+ ? createInternal(state, item, indexPath, depth + 1)
268
+ : item,
269
+ index,
270
+ proxyRef,
271
+ );
272
+ };
273
+ return rest.length > 0
274
+ ? realMethod.call(target, wrapped, rest[0])
275
+ : realMethod.call(target, wrapped);
276
+ };
277
+ }
278
+ const proxy = new Proxy(target, {
279
+ get: (arr, prop) => {
280
+ if (prop === Symbol.iterator)
281
+ return function* () {
282
+ const len = arr.length;
283
+ if (state.isTracking && path)
284
+ state.trackedPaths.add(`${path}.length`);
285
+ for (let i = 0; i < len; i++) {
286
+ const indexPath = path ? `${path}[${i}]` : `[${i}]`;
287
+ if (state.isTracking) state.trackedPaths.add(indexPath);
288
+ const item = arr[i];
289
+ yield isProxyable(item)
290
+ ? createInternal(state, item, indexPath, depth + 1)
291
+ : item;
292
+ }
293
+ };
294
+ if (typeof prop === 'symbol') return Reflect.get(arr, prop);
295
+ const value = Reflect.get(arr, prop);
296
+ if (typeof value === 'function') {
297
+ if (typeof prop === 'string' && ITERATING_METHODS.has(prop))
298
+ return getOrCacheBound(state, arr, value, () =>
299
+ makeIteratingWrapper(prop),
300
+ );
301
+ if (typeof prop === 'string' && REDUCING_METHODS.has(prop))
302
+ return getOrCacheBound(state, arr, value, () =>
303
+ makeReducingWrapper(prop),
304
+ );
305
+ if (typeof prop === 'string' && ITERATOR_METHODS.has(prop))
306
+ return getOrCacheBound(state, arr, value, () =>
307
+ makeIteratorMethod(prop),
308
+ );
309
+ return getBoundFunction(state, arr, value);
310
+ }
311
+ if (prop === 'length') {
312
+ if (state.isTracking) {
313
+ const fullPath = path ? `${path}.length` : 'length';
314
+ state.trackedPaths.add(fullPath);
315
+ }
316
+ return value;
317
+ }
318
+ let fullPath;
319
+ if (typeof prop === 'string') {
320
+ const index = Number(prop);
321
+ if (!isNaN(index) && index >= 0)
322
+ fullPath = path ? `${path}[${index}]` : `[${index}]`;
323
+ else fullPath = path ? `${path}.${prop}` : prop;
324
+ } else return value;
325
+ if (state.isTracking) state.trackedPaths.add(fullPath);
326
+ if (isProxyable(value))
327
+ return createInternal(state, value, fullPath, depth + 1);
328
+ return value;
329
+ },
330
+ });
331
+ proxyRef = proxy;
332
+ state.proxyCache.set(target, proxy);
333
+ return proxy;
334
+ }
335
+ /**
336
+ * Create a proxy for an object with property access tracking
337
+ * @internal
338
+ */
339
+ function createInternal(state, target, path = '', depth = 0) {
340
+ if (!state.isTracking || !isProxyable(target)) return target;
341
+ if (depth >= state.maxDepth) {
342
+ console.warn(
343
+ `${BLAC_ERROR_PREFIX} Proxy depth limit (${state.maxDepth}) reached at path "${path}". Deeper property accesses won't be tracked for re-renders.`,
344
+ );
345
+ return target;
346
+ }
347
+ if (state.proxyCache.has(target)) return state.proxyCache.get(target);
348
+ if (Array.isArray(target))
349
+ return createArrayProxy(state, target, path, depth);
350
+ const proxy = new Proxy(target, {
351
+ get: (obj, prop) => {
352
+ if (typeof prop === 'symbol') return Reflect.get(obj, prop);
353
+ const value = Reflect.get(obj, prop);
354
+ if (typeof value === 'function')
355
+ return getBoundFunction(state, obj, value);
356
+ const fullPath = path ? `${path}.${String(prop)}` : String(prop);
357
+ if (typeof prop === 'string' && state.isTracking) {
358
+ if (!prop.startsWith('_') && !prop.startsWith('$$'))
359
+ state.trackedPaths.add(fullPath);
360
+ }
361
+ if (isProxyable(value))
362
+ return createInternal(state, value, fullPath, depth + 1);
363
+ return value;
364
+ },
365
+ has: (obj, prop) => {
366
+ if (typeof prop === 'string' && state.isTracking) {
367
+ const fullPath = path ? `${path}.${prop}` : prop;
368
+ state.trackedPaths.add(fullPath);
369
+ }
370
+ return Reflect.has(obj, prop);
371
+ },
372
+ ownKeys: (obj) => {
373
+ if (state.isTracking && path) state.trackedPaths.add(path);
374
+ return Reflect.ownKeys(obj);
375
+ },
376
+ });
377
+ state.proxyCache.set(target, proxy);
378
+ return proxy;
379
+ }
380
+ /**
381
+ * Create a proxy for a target with caching
382
+ * @internal
383
+ */
384
+ function createForTarget(state, target) {
385
+ if (state.lastProxiedState === target && state.lastProxy)
386
+ return state.lastProxy;
387
+ state.proxyCache = /* @__PURE__ */ new WeakMap();
388
+ state.boundFunctionsCache = null;
389
+ const proxy = createInternal(state, target, '', 0);
390
+ state.lastProxiedState = target;
391
+ state.lastProxy = proxy;
392
+ return proxy;
393
+ }
394
+ function isChildPath(child, parent) {
395
+ if (child === parent) return false;
396
+ return child.startsWith(parent + '.') || child.startsWith(parent + '[');
397
+ }
398
+ /**
399
+ * @internal
400
+ */
401
+ function optimizeTrackedPaths(paths) {
402
+ if (paths.size <= 1) return paths;
403
+ let allFlat = true;
404
+ for (const path of paths)
405
+ if (path.charCodeAt(path.length - 1) === 93 || path.includes('.')) {
406
+ allFlat = false;
407
+ break;
408
+ }
409
+ if (allFlat) return paths;
410
+ const sortedPaths = Array.from(paths).sort((a, b) =>
411
+ a > b ? -1 : a < b ? 1 : 0,
412
+ );
413
+ const optimized = /* @__PURE__ */ new Set();
414
+ let lastKept;
415
+ for (const path of sortedPaths) {
416
+ if (lastKept !== void 0 && isChildPath(lastKept, path)) continue;
417
+ optimized.add(path);
418
+ lastKept = path;
419
+ }
420
+ return optimized;
421
+ }
422
+ /**
423
+ * @internal
424
+ */
425
+ function createDependencyState() {
426
+ return {
427
+ proxyState: createProxyState(),
428
+ previousRenderPaths: /* @__PURE__ */ new Set(),
429
+ currentRenderPaths: /* @__PURE__ */ new Set(),
430
+ pathCache: /* @__PURE__ */ new Map(),
431
+ lastCheckedState: null,
432
+ lastCheckedValues: /* @__PURE__ */ new Map(),
433
+ };
434
+ }
435
+ /**
436
+ * @internal
437
+ */
438
+ function startDependency(tracker) {
439
+ startProxy(tracker.proxyState);
440
+ }
441
+ /**
442
+ * @internal
443
+ */
444
+ function createDependencyProxy(tracker, state) {
445
+ return createForTarget(tracker.proxyState, state);
446
+ }
447
+ /**
448
+ * @internal
449
+ */
450
+ function capturePaths(tracker, state) {
451
+ tracker.previousRenderPaths = tracker.currentRenderPaths;
452
+ tracker.currentRenderPaths = optimizeTrackedPaths(
453
+ stopProxy(tracker.proxyState),
454
+ );
455
+ if (
456
+ tracker.previousRenderPaths.size === 0 &&
457
+ tracker.currentRenderPaths.size === 0
458
+ ) {
459
+ tracker.pathCache.clear();
460
+ tracker.lastCheckedValues.clear();
461
+ return;
462
+ }
463
+ const trackedPathsUnion = new Set(tracker.previousRenderPaths);
464
+ for (const path of tracker.currentRenderPaths) trackedPathsUnion.add(path);
465
+ if (tracker.pathCache.size > trackedPathsUnion.size) {
466
+ for (const path of tracker.pathCache.keys())
467
+ if (!trackedPathsUnion.has(path)) tracker.pathCache.delete(path);
468
+ }
469
+ const canReuseCache = tracker.lastCheckedState === state;
470
+ for (const path of trackedPathsUnion)
471
+ if (!tracker.pathCache.has(path)) {
472
+ const segments = parsePath(path);
473
+ const value =
474
+ canReuseCache && tracker.lastCheckedValues.has(path)
475
+ ? tracker.lastCheckedValues.get(path)
476
+ : getValueAtPath(state, segments);
477
+ tracker.pathCache.set(path, {
478
+ segments,
479
+ value,
480
+ });
481
+ } else {
482
+ const info = tracker.pathCache.get(path);
483
+ if (!info) continue;
484
+ info.value =
485
+ canReuseCache && tracker.lastCheckedValues.has(path)
486
+ ? tracker.lastCheckedValues.get(path)
487
+ : getValueAtPath(state, info.segments);
488
+ }
489
+ tracker.lastCheckedValues.clear();
490
+ }
491
+ /**
492
+ * @internal
493
+ */
494
+ function hasDependencyChanges(tracker, state) {
495
+ if (tracker.pathCache.size === 0) return true;
496
+ tracker.lastCheckedValues.clear();
497
+ for (const [path, info] of tracker.pathCache.entries()) {
498
+ const currentValue = getValueAtPath(state, info.segments);
499
+ tracker.lastCheckedValues.set(path, currentValue);
500
+ if (!Object.is(currentValue, info.value)) {
501
+ tracker.lastCheckedState = state;
502
+ return true;
503
+ }
504
+ }
505
+ tracker.lastCheckedState = state;
506
+ return false;
507
+ }
508
+ /**
509
+ * @internal
510
+ */
511
+ function hasTrackedData(tracker) {
512
+ return (
513
+ tracker.proxyState.trackedPaths.size > 0 ||
514
+ tracker.pathCache.size > 0 ||
515
+ tracker.previousRenderPaths.size > 0
516
+ );
517
+ }
518
+ const descriptorCache = /* @__PURE__ */ new WeakMap();
519
+ const MAX_GETTER_DEPTH = BLAC_DEFAULTS.MAX_GETTER_DEPTH;
520
+ /**
521
+ * @internal
522
+ */
523
+ function getDescriptor(obj, prop) {
524
+ const constructor = obj.constructor;
525
+ let constructorCache = descriptorCache.get(constructor);
526
+ if (constructorCache?.has(prop)) return constructorCache.get(prop);
527
+ let current = obj;
528
+ let descriptor;
529
+ while (current && current !== Object.prototype) {
530
+ descriptor = Object.getOwnPropertyDescriptor(current, prop);
531
+ if (descriptor) break;
532
+ current = Object.getPrototypeOf(current);
533
+ }
534
+ if (!constructorCache) {
535
+ constructorCache = /* @__PURE__ */ new Map();
536
+ descriptorCache.set(constructor, constructorCache);
537
+ }
538
+ constructorCache.set(prop, descriptor);
539
+ return descriptor;
540
+ }
541
+ /**
542
+ * @internal
543
+ */
544
+ function isGetter(obj, prop) {
545
+ return getDescriptor(obj, prop)?.get !== void 0;
546
+ }
547
+ /**
548
+ * @internal
549
+ */
550
+ function createGetterState() {
551
+ return {
552
+ trackedValues: /* @__PURE__ */ new Map(),
553
+ currentlyAccessing: /* @__PURE__ */ new Set(),
554
+ trackedGetters: /* @__PURE__ */ new Set(),
555
+ isTracking: false,
556
+ renderCache: /* @__PURE__ */ new Map(),
557
+ cacheValid: false,
558
+ depth: 0,
559
+ visitedBlocs: /* @__PURE__ */ new Set(),
560
+ };
561
+ }
562
+ /**
563
+ * @internal
564
+ */
565
+ /**
566
+ * Commit getters accessed during the active tracking window into the
567
+ * authoritative `trackedGetters` set used by change-detection.
568
+ *
569
+ * When `currentlyAccessing` is empty (e.g. React StrictMode firing
570
+ * `useEffect` setup → cleanup → setup for one logical render, where the
571
+ * second setup runs with no intervening render and therefore no accesses)
572
+ * we deliberately preserve the previous commit's `trackedGetters`. This
573
+ * keeps consumer subscriptions stable across StrictMode double-invocation.
574
+ *
575
+ * The next legitimate render that records accesses replaces the set in full;
576
+ * components that conditionally drop a getter incur at most one extra
577
+ * re-render before `trackedGetters` self-corrects on the subsequent commit.
578
+ *
579
+ * @internal
580
+ */
581
+ function commitTrackedGetters(tracker) {
582
+ if (tracker.currentlyAccessing.size === 0) return;
583
+ tracker.trackedGetters = new Set(tracker.currentlyAccessing);
584
+ tracker.currentlyAccessing.clear();
585
+ }
586
+ /**
587
+ * Execute a tracked getter with depth/circular dependency checks and context management.
588
+ * @internal
589
+ */
590
+ function executeTrackedGetter(target, prop, tracker) {
591
+ tracker.currentlyAccessing.add(prop);
592
+ if (tracker.cacheValid && tracker.renderCache.has(prop)) {
593
+ const cachedValue = tracker.renderCache.get(prop);
594
+ tracker.trackedValues.set(prop, cachedValue);
595
+ return cachedValue;
596
+ }
597
+ if (tracker.depth >= MAX_GETTER_DEPTH)
598
+ throw new Error(
599
+ `${BLAC_ERROR_PREFIX} Maximum getter depth (${MAX_GETTER_DEPTH}) exceeded. Possible circular dependency in getter "${String(prop)}" on ${target.constructor.name}.`,
600
+ );
601
+ if (tracker.visitedBlocs.has(target))
602
+ throw new Error(
603
+ `${BLAC_ERROR_PREFIX} Circular dependency detected: getter "${String(prop)}" on ${target.constructor.name}.`,
604
+ );
605
+ const prevDepth = tracker.depth;
606
+ const prevVisited = new Set(tracker.visitedBlocs);
607
+ tracker.depth++;
608
+ tracker.visitedBlocs.add(target);
609
+ try {
610
+ const descriptor = getDescriptor(target, prop);
611
+ if (!descriptor?.get) return target[prop];
612
+ const value = descriptor.get.call(target);
613
+ tracker.trackedValues.set(prop, value);
614
+ return value;
615
+ } catch (error) {
616
+ tracker.currentlyAccessing.delete(prop);
617
+ throw error;
618
+ } finally {
619
+ tracker.depth = prevDepth;
620
+ tracker.visitedBlocs = prevVisited;
621
+ }
622
+ }
623
+ /**
624
+ * Create a per-consumer bloc proxy that closes over its own getter tracker.
625
+ *
626
+ * Each useBloc consumer owns its own proxy and tracker, eliminating the
627
+ * cross-component contamination that a shared module-level tracker map
628
+ * caused under interleaved/concurrent rendering.
629
+ *
630
+ * @internal
631
+ */
632
+ function createBlocProxy(bloc, tracker) {
633
+ return new Proxy(bloc, {
634
+ get(target, prop, receiver) {
635
+ if (tracker.isTracking && isGetter(target, prop))
636
+ return executeTrackedGetter(target, prop, tracker);
637
+ return Reflect.get(target, prop, receiver);
638
+ },
639
+ });
640
+ }
641
+ /**
642
+ * @internal
643
+ */
644
+ function hasGetterChanges(bloc, tracker) {
645
+ if (!tracker || tracker.trackedGetters.size === 0) return false;
646
+ tracker.renderCache.clear();
647
+ let hasAnyChange = false;
648
+ for (const prop of tracker.trackedGetters)
649
+ try {
650
+ const descriptor = getDescriptor(bloc, prop);
651
+ if (!descriptor?.get) continue;
652
+ const newValue = descriptor.get.call(bloc);
653
+ const oldValue = tracker.trackedValues.get(prop);
654
+ tracker.renderCache.set(prop, newValue);
655
+ tracker.trackedValues.set(prop, newValue);
656
+ if (!Object.is(newValue, oldValue)) hasAnyChange = true;
657
+ } catch (error) {
658
+ console.warn(
659
+ `${BLAC_ERROR_PREFIX} Getter "${String(prop)}" threw error during change detection. Stopping tracking for this getter.`,
660
+ error,
661
+ );
662
+ tracker.trackedGetters.delete(prop);
663
+ tracker.trackedValues.delete(prop);
664
+ tracker.cacheValid = false;
665
+ return true;
666
+ }
667
+ tracker.cacheValid = true;
668
+ return hasAnyChange;
669
+ }
670
+ /**
671
+ * @internal
672
+ */
673
+ function invalidateRenderCache(tracker) {
674
+ tracker.cacheValid = false;
675
+ }
676
+ /**
677
+ * Create a new tracking proxy state.
678
+ */
679
+ function createState() {
680
+ return {
681
+ dependencyState: createDependencyState(),
682
+ getterState: createGetterState(),
683
+ dependencies: /* @__PURE__ */ new Set(),
684
+ isTracking: false,
685
+ };
686
+ }
687
+ /**
688
+ * Start tracking on a tracking proxy.
689
+ */
690
+ function startTracking(tracker) {
691
+ tracker.isTracking = true;
692
+ tracker.dependencies.clear();
693
+ tracker.getterState.isTracking = true;
694
+ startDependency(tracker.dependencyState);
695
+ }
696
+ /**
697
+ * Stop tracking and collect all dependencies.
698
+ */
699
+ function stopTracking(tracker, bloc) {
700
+ tracker.isTracking = false;
701
+ tracker.getterState.isTracking = false;
702
+ capturePaths(tracker.dependencyState, bloc.state);
703
+ commitTrackedGetters(tracker.getterState);
704
+ return new Set(tracker.dependencies);
705
+ }
706
+ /**
707
+ * Check if tracked state or getters have changed.
708
+ */
709
+ function hasChanges(tracker, bloc) {
710
+ invalidateRenderCache(tracker.getterState);
711
+ const stateChanged = hasDependencyChanges(
712
+ tracker.dependencyState,
713
+ bloc.state,
714
+ );
715
+ const getterChanged = hasGetterChanges(bloc, tracker.getterState);
716
+ return stateChanged || getterChanged;
717
+ }
718
+ /**
719
+ * Create a tracking proxy for a bloc instance.
720
+ * Tracks both state property access and getter access.
721
+ */
722
+ function createTrackingProxy(bloc, tracker) {
723
+ tracker.dependencies.add(bloc);
724
+ const stateProxyCache = /* @__PURE__ */ new WeakMap();
725
+ return new Proxy(bloc, {
726
+ get(target, prop, receiver) {
727
+ if (prop === 'state') {
728
+ if (!tracker.isTracking) return target.state;
729
+ const rawState = target.state;
730
+ if (rawState === null || typeof rawState !== 'object') return rawState;
731
+ if (stateProxyCache.has(rawState)) return stateProxyCache.get(rawState);
732
+ const stateProxy = createDependencyProxy(
733
+ tracker.dependencyState,
734
+ rawState,
735
+ );
736
+ stateProxyCache.set(rawState, stateProxy);
737
+ return stateProxy;
738
+ }
739
+ if (typeof prop === 'symbol') return Reflect.get(target, prop, receiver);
740
+ const value = Reflect.get(target, prop, receiver);
741
+ if (typeof value === 'function') return value.bind(target);
742
+ if (tracker.isTracking && isGetter(target, prop))
743
+ return executeTrackedGetter(target, prop, tracker.getterState);
744
+ return value;
745
+ },
746
+ });
747
+ }
748
+ //#endregion
749
+ //#region src/tracking/dependency-manager.ts
750
+ /**
751
+ * Manages subscriptions to state container dependencies.
752
+ * Provides efficient sync mechanism to add/remove subscriptions
753
+ * as dependencies change between callback invocations.
754
+ */
755
+ var DependencyManager = class {
756
+ constructor() {
757
+ this.subscriptions = /* @__PURE__ */ new Map();
758
+ this.currentDeps = /* @__PURE__ */ new Set();
759
+ }
760
+ /**
761
+ * Sync subscriptions with a new set of dependencies.
762
+ * Adds subscriptions for new deps, removes subscriptions for stale deps.
763
+ *
764
+ * @param newDeps - The new set of dependencies to subscribe to
765
+ * @param onChange - Callback to invoke when any dependency changes
766
+ * @param exclude - Optional instance to exclude from subscriptions (e.g., primary bloc)
767
+ * @returns true if the dependency set changed, false if unchanged
768
+ */
769
+ sync(newDeps, onChange, exclude) {
770
+ const filteredNewDeps = /* @__PURE__ */ new Set();
771
+ for (const dep of newDeps)
772
+ if (dep !== exclude && !dep.isDisposed) filteredNewDeps.add(dep);
773
+ if (this.areSetsEqual(this.currentDeps, filteredNewDeps)) return false;
774
+ for (const dep of this.currentDeps)
775
+ if (!filteredNewDeps.has(dep)) {
776
+ const unsub = this.subscriptions.get(dep);
777
+ if (unsub) {
778
+ unsub();
779
+ this.subscriptions.delete(dep);
780
+ }
781
+ }
782
+ for (const dep of filteredNewDeps)
783
+ if (!this.currentDeps.has(dep) && !this.subscriptions.has(dep)) {
784
+ const unsub = dep.subscribe(onChange);
785
+ this.subscriptions.set(dep, unsub);
786
+ }
787
+ this.currentDeps = filteredNewDeps;
788
+ return true;
789
+ }
790
+ /**
791
+ * Add a single dependency subscription.
792
+ */
793
+ add(dep, onChange) {
794
+ if (this.subscriptions.has(dep) || dep.isDisposed) return;
795
+ const unsub = dep.subscribe(onChange);
796
+ this.subscriptions.set(dep, unsub);
797
+ this.currentDeps.add(dep);
798
+ }
799
+ /**
800
+ * Check if a dependency is currently subscribed.
801
+ */
802
+ has(dep) {
803
+ return this.currentDeps.has(dep);
804
+ }
805
+ /**
806
+ * Get the current set of dependencies.
807
+ */
808
+ getDependencies() {
809
+ return new Set(this.currentDeps);
810
+ }
811
+ /**
812
+ * Clean up all active subscriptions.
813
+ */
814
+ cleanup() {
815
+ for (const unsub of this.subscriptions.values()) unsub();
816
+ this.subscriptions.clear();
817
+ this.currentDeps.clear();
818
+ }
819
+ areSetsEqual(a, b) {
820
+ if (a.size !== b.size) return false;
821
+ for (const item of a) if (!b.has(item)) return false;
822
+ return true;
823
+ }
824
+ };
825
+ //#endregion
826
+ //#region src/tracking/resolve-dependencies.ts
827
+ /**
828
+ * Resolve all transitive dependencies of a bloc via BFS over `dependencies` maps.
829
+ * Uses cycle detection to avoid infinite loops.
830
+ * @internal
831
+ */
832
+ function resolveDependencies(bloc) {
833
+ const result = /* @__PURE__ */ new Set();
834
+ const visited = /* @__PURE__ */ new Map();
835
+ const queue = [bloc];
836
+ let head = 0;
837
+ while (head < queue.length) {
838
+ const current = queue[head++];
839
+ for (const [Type, key] of current.dependencies) {
840
+ let keys = visited.get(Type);
841
+ if (!keys) {
842
+ keys = /* @__PURE__ */ new Set();
843
+ visited.set(Type, keys);
844
+ }
845
+ if (keys.has(key)) continue;
846
+ keys.add(key);
847
+ const dep = getRegistry().ensure(Type, key);
848
+ result.add(dep);
849
+ if (dep.dependencies.size > 0) queue.push(dep);
850
+ }
851
+ }
852
+ result.delete(bloc);
853
+ return result;
854
+ }
855
+ //#endregion
856
+ export {
857
+ startTracking as _,
858
+ createBlocProxy as a,
859
+ createGetterState as c,
860
+ hasChanges as d,
861
+ hasDependencyChanges as f,
862
+ startDependency as g,
863
+ invalidateRenderCache as h,
864
+ commitTrackedGetters as i,
865
+ createState as l,
866
+ hasTrackedData as m,
867
+ DependencyManager as n,
868
+ createDependencyProxy as o,
869
+ hasGetterChanges as p,
870
+ capturePaths as r,
871
+ createDependencyState as s,
872
+ resolveDependencies as t,
873
+ createTrackingProxy as u,
874
+ stopTracking as v,
875
+ shallowEqual as y,
876
+ };
877
+
878
+ //# sourceMappingURL=resolve-dependencies-DV3HO_uH.js.map