@blac/core 2.1.0 → 2.1.2

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 (391) hide show
  1. package/README.md +19 -29
  2. package/dist/StateContainer-BUyuxKb3.cjs +667 -0
  3. package/dist/StateContainer-BUyuxKb3.cjs.map +1 -0
  4. package/dist/StateContainer-B_7UHc3I.js +632 -0
  5. package/dist/StateContainer-B_7UHc3I.js.map +1 -0
  6. package/dist/StateContainer-Bh2ipNYj.js +632 -0
  7. package/dist/StateContainer-Bh2ipNYj.js.map +1 -0
  8. package/dist/StateContainer-ClzwKnQZ.cjs +667 -0
  9. package/dist/StateContainer-ClzwKnQZ.cjs.map +1 -0
  10. package/dist/StateContainer-CwByTd5L.js +656 -0
  11. package/dist/StateContainer-CwByTd5L.js.map +1 -0
  12. package/dist/StateContainer-D2b10eR4.cjs +691 -0
  13. package/dist/StateContainer-D2b10eR4.cjs.map +1 -0
  14. package/dist/StateContainer-DiQATvZh.js +632 -0
  15. package/dist/StateContainer-DiQATvZh.js.map +1 -0
  16. package/dist/StateContainer-j16zciex.cjs +667 -0
  17. package/dist/StateContainer-j16zciex.cjs.map +1 -0
  18. package/dist/{StateContainerRegistry-CSNm2Ws5.cjs → StateContainerRegistry-141uHhtF.cjs} +300 -397
  19. package/dist/StateContainerRegistry-141uHhtF.cjs.map +1 -0
  20. package/dist/StateContainerRegistry-B6O6cfJd.cjs +903 -0
  21. package/dist/StateContainerRegistry-B6O6cfJd.cjs.map +1 -0
  22. package/dist/{StateContainerRegistry-DVIBTxGZ.js → StateContainerRegistry-BH7aOMWV.js} +299 -406
  23. package/dist/StateContainerRegistry-BH7aOMWV.js.map +1 -0
  24. package/dist/StateContainerRegistry-BX-DlHXO.js +747 -0
  25. package/dist/StateContainerRegistry-BX-DlHXO.js.map +1 -0
  26. package/dist/StateContainerRegistry-Bf5VuVjm.js +747 -0
  27. package/dist/StateContainerRegistry-Bf5VuVjm.js.map +1 -0
  28. package/dist/{StateContainerRegistry-Dj77cok9.js → StateContainerRegistry-BsH_s0pJ.js} +303 -413
  29. package/dist/StateContainerRegistry-BsH_s0pJ.js.map +1 -0
  30. package/dist/StateContainerRegistry-BvSRfhKv.cjs +866 -0
  31. package/dist/StateContainerRegistry-BvSRfhKv.cjs.map +1 -0
  32. package/dist/StateContainerRegistry-C8jxrcqk.cjs +866 -0
  33. package/dist/StateContainerRegistry-C8jxrcqk.cjs.map +1 -0
  34. package/dist/{StateContainerRegistry-lIwo-0m3.cjs → StateContainerRegistry-CBLeHObO.cjs} +326 -418
  35. package/dist/StateContainerRegistry-CBLeHObO.cjs.map +1 -0
  36. package/dist/StateContainerRegistry-CrTtRX5V.js +772 -0
  37. package/dist/StateContainerRegistry-CrTtRX5V.js.map +1 -0
  38. package/dist/StateContainerRegistry-DjQQtlCW.cjs +870 -0
  39. package/dist/StateContainerRegistry-DjQQtlCW.cjs.map +1 -0
  40. package/dist/{StateContainerRegistry-D9BIRjwv.cjs → StateContainerRegistry-MkT0W4C2.cjs} +322 -411
  41. package/dist/StateContainerRegistry-MkT0W4C2.cjs.map +1 -0
  42. package/dist/StateContainerRegistry-gQbEutkN.js +751 -0
  43. package/dist/StateContainerRegistry-gQbEutkN.js.map +1 -0
  44. package/dist/{StateContainerRegistry-CvBOhAT2.js → StateContainerRegistry-vWgsD-RP.js} +277 -392
  45. package/dist/StateContainerRegistry-vWgsD-RP.js.map +1 -0
  46. package/dist/config.d.cts +8 -8
  47. package/dist/config.d.ts +8 -8
  48. package/dist/constants.d.cts +20 -28
  49. package/dist/constants.d.ts +20 -28
  50. package/dist/core/Cubit.d.ts +14 -10
  51. package/dist/core/StateContainer.d.ts +89 -62
  52. package/dist/core/StateContainerRegistry.d.ts +89 -166
  53. package/dist/core/meta.d.ts +37 -47
  54. package/dist/core/onActivated.d.ts +10 -0
  55. package/dist/core/symbols.d.ts +26 -1
  56. package/dist/decorators/blac.d.ts +38 -28
  57. package/dist/{acquire-B1LYXSGj.js → ensure-Bi_yXk6f.js} +16 -5
  58. package/dist/ensure-Bi_yXk6f.js.map +1 -0
  59. package/dist/{ensure-r1C_7K6_.cjs → ensure-BjhbDW8Z.cjs} +203 -160
  60. package/dist/ensure-BjhbDW8Z.cjs.map +1 -0
  61. package/dist/{ensure-BSJHkUNX.js → ensure-BnVyd6s4.js} +297 -122
  62. package/dist/ensure-BnVyd6s4.js.map +1 -0
  63. package/dist/{acquire-BZIs6tpN.cjs → ensure-Bx41d-il.cjs} +23 -6
  64. package/dist/ensure-Bx41d-il.cjs.map +1 -0
  65. package/dist/{acquire-BRIJVJaA.js → ensure-C7UQ_mKM.js} +16 -5
  66. package/dist/ensure-C7UQ_mKM.js.map +1 -0
  67. package/dist/{ensure-B59ri8oo.js → ensure-CneMkpbI.js} +298 -122
  68. package/dist/ensure-CneMkpbI.js.map +1 -0
  69. package/dist/{acquire-BdsVZBSe.js → ensure-CwtQVTam.js} +16 -5
  70. package/dist/ensure-CwtQVTam.js.map +1 -0
  71. package/dist/{ensure-B2DYCbbI.cjs → ensure-D15vGnk5.cjs} +328 -123
  72. package/dist/ensure-D15vGnk5.cjs.map +1 -0
  73. package/dist/{acquire-B1Wuqla6.cjs → ensure-D1D4WjYf.cjs} +23 -6
  74. package/dist/ensure-D1D4WjYf.cjs.map +1 -0
  75. package/dist/{ensure-BKdq5xsY.cjs → ensure-D3w6YGp9.cjs} +329 -123
  76. package/dist/ensure-D3w6YGp9.cjs.map +1 -0
  77. package/dist/{acquire-BJ3xUEmh.cjs → ensure-DBnuRJ0R.cjs} +23 -6
  78. package/dist/ensure-DBnuRJ0R.cjs.map +1 -0
  79. package/dist/{acquire-B_p1fNEh.cjs → ensure-DShrbIYY.cjs} +23 -6
  80. package/dist/ensure-DShrbIYY.cjs.map +1 -0
  81. package/dist/{acquire-BP-ZfUH2.js → ensure-NTB9nnnj.js} +16 -5
  82. package/dist/ensure-NTB9nnnj.js.map +1 -0
  83. package/dist/{ensure-D3WWWwMo.cjs → ensure-ORVw-WRE.cjs} +194 -155
  84. package/dist/ensure-ORVw-WRE.cjs.map +1 -0
  85. package/dist/{ensure-BEeY5Ab7.js → ensure-dsqWhIuO.js} +182 -147
  86. package/dist/ensure-dsqWhIuO.js.map +1 -0
  87. package/dist/{ensure-11-asM1e.js → ensure-k-6q7O25.js} +173 -150
  88. package/dist/ensure-k-6q7O25.js.map +1 -0
  89. package/dist/index.cjs +257 -86
  90. package/dist/index.cjs.map +1 -1
  91. package/dist/index.d.cts +6 -13
  92. package/dist/index.d.ts +6 -13
  93. package/dist/index.js +232 -52
  94. package/dist/index.js.map +1 -1
  95. package/dist/internal.cjs +10 -0
  96. package/dist/internal.d.cts +8 -0
  97. package/dist/internal.d.ts +8 -0
  98. package/dist/internal.js +3 -0
  99. package/dist/plugin/BlacPlugin.d.ts +25 -25
  100. package/dist/plugin/PluginManager.d.ts +46 -59
  101. package/dist/plugins.cjs +383 -3
  102. package/dist/plugins.cjs.map +1 -0
  103. package/dist/plugins.d.cts +10 -5
  104. package/dist/plugins.d.ts +10 -5
  105. package/dist/plugins.js +381 -1
  106. package/dist/plugins.js.map +1 -0
  107. package/dist/registry/acquire.d.ts +2 -2
  108. package/dist/registry/config.d.ts +12 -0
  109. package/dist/registry/index.d.ts +2 -2
  110. package/dist/registry/management.d.ts +5 -0
  111. package/dist/registry/queries.d.ts +15 -0
  112. package/dist/registry/release.d.ts +4 -20
  113. package/dist/testing.cjs +63 -38
  114. package/dist/testing.cjs.map +1 -1
  115. package/dist/testing.d.cts +14 -12
  116. package/dist/testing.d.ts +14 -12
  117. package/dist/testing.js +53 -29
  118. package/dist/testing.js.map +1 -1
  119. package/dist/types/branded.d.ts +6 -13
  120. package/dist/types/utilities.d.ts +40 -31
  121. package/dist/utils/idGenerator.d.ts +6 -13
  122. package/dist/utils/static-props.d.ts +28 -29
  123. package/dist/utils/structural-key.d.ts +0 -22
  124. package/dist/watch/index.d.ts +1 -2
  125. package/dist/watch/watch.d.ts +23 -3
  126. package/package.json +28 -54
  127. package/dist/StateContainerRegistry-4Ljd9EJx.js +0 -1018
  128. package/dist/StateContainerRegistry-4Ljd9EJx.js.map +0 -1
  129. package/dist/StateContainerRegistry-8zNFMAf7.js +0 -1067
  130. package/dist/StateContainerRegistry-8zNFMAf7.js.map +0 -1
  131. package/dist/StateContainerRegistry-B1GYx9Xo.js +0 -975
  132. package/dist/StateContainerRegistry-B1GYx9Xo.js.map +0 -1
  133. package/dist/StateContainerRegistry-B_ViBLvJ.js +0 -975
  134. package/dist/StateContainerRegistry-B_ViBLvJ.js.map +0 -1
  135. package/dist/StateContainerRegistry-Bx2ly-ba.cjs +0 -1162
  136. package/dist/StateContainerRegistry-Bx2ly-ba.cjs.map +0 -1
  137. package/dist/StateContainerRegistry-C0dCNlTF.js +0 -1005
  138. package/dist/StateContainerRegistry-C0dCNlTF.js.map +0 -1
  139. package/dist/StateContainerRegistry-C75QpeaO.cjs +0 -1260
  140. package/dist/StateContainerRegistry-C75QpeaO.cjs.map +0 -1
  141. package/dist/StateContainerRegistry-CEWpc1bj.cjs +0 -1113
  142. package/dist/StateContainerRegistry-CEWpc1bj.cjs.map +0 -1
  143. package/dist/StateContainerRegistry-CS18y4au.cjs +0 -1163
  144. package/dist/StateContainerRegistry-CS18y4au.cjs.map +0 -1
  145. package/dist/StateContainerRegistry-CSNm2Ws5.cjs.map +0 -1
  146. package/dist/StateContainerRegistry-CchRjnjX.cjs +0 -1094
  147. package/dist/StateContainerRegistry-CchRjnjX.cjs.map +0 -1
  148. package/dist/StateContainerRegistry-CvBOhAT2.js.map +0 -1
  149. package/dist/StateContainerRegistry-D8nu7Z0T.js +0 -1068
  150. package/dist/StateContainerRegistry-D8nu7Z0T.js.map +0 -1
  151. package/dist/StateContainerRegistry-D9BIRjwv.cjs.map +0 -1
  152. package/dist/StateContainerRegistry-DJQqLrli.cjs +0 -1046
  153. package/dist/StateContainerRegistry-DJQqLrli.cjs.map +0 -1
  154. package/dist/StateContainerRegistry-DL5Ai7wh.js +0 -1153
  155. package/dist/StateContainerRegistry-DL5Ai7wh.js.map +0 -1
  156. package/dist/StateContainerRegistry-DVIBTxGZ.js.map +0 -1
  157. package/dist/StateContainerRegistry-DWOzx7Gd.js +0 -1154
  158. package/dist/StateContainerRegistry-DWOzx7Gd.js.map +0 -1
  159. package/dist/StateContainerRegistry-Dj77cok9.js.map +0 -1
  160. package/dist/StateContainerRegistry-FWKzPfS-.cjs +0 -1046
  161. package/dist/StateContainerRegistry-FWKzPfS-.cjs.map +0 -1
  162. package/dist/StateContainerRegistry-G81GcCRm.cjs +0 -1261
  163. package/dist/StateContainerRegistry-G81GcCRm.cjs.map +0 -1
  164. package/dist/StateContainerRegistry-lIwo-0m3.cjs.map +0 -1
  165. package/dist/acquire-B1LYXSGj.js.map +0 -1
  166. package/dist/acquire-B1Wuqla6.cjs.map +0 -1
  167. package/dist/acquire-BJ3xUEmh.cjs.map +0 -1
  168. package/dist/acquire-BP-ZfUH2.js.map +0 -1
  169. package/dist/acquire-BRIJVJaA.js.map +0 -1
  170. package/dist/acquire-BZIs6tpN.cjs.map +0 -1
  171. package/dist/acquire-B_p1fNEh.cjs.map +0 -1
  172. package/dist/acquire-BdsVZBSe.js.map +0 -1
  173. package/dist/acquire-C3nOb3XR.cjs +0 -46
  174. package/dist/acquire-C3nOb3XR.cjs.map +0 -1
  175. package/dist/acquire-C4WAS13G.cjs +0 -46
  176. package/dist/acquire-C4WAS13G.cjs.map +0 -1
  177. package/dist/acquire-C7beGI55.cjs +0 -46
  178. package/dist/acquire-C7beGI55.cjs.map +0 -1
  179. package/dist/acquire-CE0uq0Dx.cjs +0 -46
  180. package/dist/acquire-CE0uq0Dx.cjs.map +0 -1
  181. package/dist/acquire-CU0u8BMn.js +0 -35
  182. package/dist/acquire-CU0u8BMn.js.map +0 -1
  183. package/dist/acquire-CbMz7gWs.cjs +0 -46
  184. package/dist/acquire-CbMz7gWs.cjs.map +0 -1
  185. package/dist/acquire-CkgLJ8WL.cjs +0 -46
  186. package/dist/acquire-CkgLJ8WL.cjs.map +0 -1
  187. package/dist/acquire-CwB083au.js +0 -35
  188. package/dist/acquire-CwB083au.js.map +0 -1
  189. package/dist/acquire-DHEOEVcj.cjs +0 -46
  190. package/dist/acquire-DHEOEVcj.cjs.map +0 -1
  191. package/dist/acquire-DTvfYJ0y.js +0 -35
  192. package/dist/acquire-DTvfYJ0y.js.map +0 -1
  193. package/dist/acquire-DXEQDZGr.js +0 -35
  194. package/dist/acquire-DXEQDZGr.js.map +0 -1
  195. package/dist/acquire-Dg-uXwjF.js +0 -35
  196. package/dist/acquire-Dg-uXwjF.js.map +0 -1
  197. package/dist/acquire-Don7499S.js +0 -35
  198. package/dist/acquire-Don7499S.js.map +0 -1
  199. package/dist/acquire-G8aB3GAx.js +0 -35
  200. package/dist/acquire-G8aB3GAx.js.map +0 -1
  201. package/dist/branded-BybA0_xw.cjs +0 -18
  202. package/dist/branded-BybA0_xw.cjs.map +0 -1
  203. package/dist/branded-DkbUzncc.js +0 -13
  204. package/dist/branded-DkbUzncc.js.map +0 -1
  205. package/dist/config-8pyOC5gv.js +0 -16
  206. package/dist/config-8pyOC5gv.js.map +0 -1
  207. package/dist/config-B1l8ZGlU.cjs +0 -32
  208. package/dist/config-B1l8ZGlU.cjs.map +0 -1
  209. package/dist/config-C1T6Jw7n.cjs +0 -32
  210. package/dist/config-C1T6Jw7n.cjs.map +0 -1
  211. package/dist/config-C7Ktkjh2.cjs +0 -32
  212. package/dist/config-C7Ktkjh2.cjs.map +0 -1
  213. package/dist/config-COT4Xkbc.js +0 -16
  214. package/dist/config-COT4Xkbc.js.map +0 -1
  215. package/dist/config-CzcoAvBo.js +0 -16
  216. package/dist/config-CzcoAvBo.js.map +0 -1
  217. package/dist/config-D2A8ZYRM.js +0 -16
  218. package/dist/config-D2A8ZYRM.js.map +0 -1
  219. package/dist/config-D34BkraU.cjs +0 -32
  220. package/dist/config-D34BkraU.cjs.map +0 -1
  221. package/dist/config-D6BoWWPv.js +0 -16
  222. package/dist/config-D6BoWWPv.js.map +0 -1
  223. package/dist/config-DOO82lbZ.js +0 -16
  224. package/dist/config-DOO82lbZ.js.map +0 -1
  225. package/dist/config-DVM_ESQt.js +0 -16
  226. package/dist/config-DVM_ESQt.js.map +0 -1
  227. package/dist/config-DVMnlHLv.cjs +0 -32
  228. package/dist/config-DVMnlHLv.cjs.map +0 -1
  229. package/dist/config-DWUq7zEQ.cjs +0 -32
  230. package/dist/config-DWUq7zEQ.cjs.map +0 -1
  231. package/dist/config-DXI3kzmA.js +0 -16
  232. package/dist/config-DXI3kzmA.js.map +0 -1
  233. package/dist/config-Dk1FxfXj.js +0 -16
  234. package/dist/config-Dk1FxfXj.js.map +0 -1
  235. package/dist/config-ZVy_yFZ3.js +0 -16
  236. package/dist/config-ZVy_yFZ3.js.map +0 -1
  237. package/dist/config-b2z51Y_C.cjs +0 -32
  238. package/dist/config-b2z51Y_C.cjs.map +0 -1
  239. package/dist/config-buwpT7l3.js +0 -16
  240. package/dist/config-buwpT7l3.js.map +0 -1
  241. package/dist/config-cwaTn5oy.cjs +0 -32
  242. package/dist/config-cwaTn5oy.cjs.map +0 -1
  243. package/dist/config-d9_U58ef.cjs +0 -32
  244. package/dist/config-d9_U58ef.cjs.map +0 -1
  245. package/dist/config-hWTayX76.cjs +0 -32
  246. package/dist/config-hWTayX76.cjs.map +0 -1
  247. package/dist/config-sCPKPYxZ.cjs +0 -32
  248. package/dist/config-sCPKPYxZ.cjs.map +0 -1
  249. package/dist/debug.cjs +0 -14
  250. package/dist/debug.d.cts +0 -34
  251. package/dist/debug.d.ts +0 -34
  252. package/dist/debug.js +0 -4
  253. package/dist/ensure-11-asM1e.js.map +0 -1
  254. package/dist/ensure-B1dEDsZV.cjs +0 -559
  255. package/dist/ensure-B1dEDsZV.cjs.map +0 -1
  256. package/dist/ensure-B2DYCbbI.cjs.map +0 -1
  257. package/dist/ensure-B59ri8oo.js.map +0 -1
  258. package/dist/ensure-B9oOqpOB.cjs +0 -558
  259. package/dist/ensure-B9oOqpOB.cjs.map +0 -1
  260. package/dist/ensure-BEeY5Ab7.js.map +0 -1
  261. package/dist/ensure-BKdq5xsY.cjs.map +0 -1
  262. package/dist/ensure-BSJHkUNX.js.map +0 -1
  263. package/dist/ensure-BfYnvAsI.js +0 -709
  264. package/dist/ensure-BfYnvAsI.js.map +0 -1
  265. package/dist/ensure-Bm91o37h.js +0 -536
  266. package/dist/ensure-Bm91o37h.js.map +0 -1
  267. package/dist/ensure-C1a8IFWy.js +0 -535
  268. package/dist/ensure-C1a8IFWy.js.map +0 -1
  269. package/dist/ensure-CLQEx0Nn.cjs +0 -528
  270. package/dist/ensure-CLQEx0Nn.cjs.map +0 -1
  271. package/dist/ensure-CPMiGvov.js +0 -493
  272. package/dist/ensure-CPMiGvov.js.map +0 -1
  273. package/dist/ensure-CQimeD0I.cjs +0 -559
  274. package/dist/ensure-CQimeD0I.cjs.map +0 -1
  275. package/dist/ensure-D3WWWwMo.cjs.map +0 -1
  276. package/dist/ensure-DEXSmA-N.js +0 -526
  277. package/dist/ensure-DEXSmA-N.js.map +0 -1
  278. package/dist/ensure-DTTTd2h8.js +0 -536
  279. package/dist/ensure-DTTTd2h8.js.map +0 -1
  280. package/dist/ensure-Dx86f80B.cjs +0 -567
  281. package/dist/ensure-Dx86f80B.cjs.map +0 -1
  282. package/dist/ensure-DzqGej43.js +0 -526
  283. package/dist/ensure-DzqGej43.js.map +0 -1
  284. package/dist/ensure-VuiNPccZ.cjs +0 -559
  285. package/dist/ensure-VuiNPccZ.cjs.map +0 -1
  286. package/dist/ensure-_Oh8XPm4.cjs +0 -732
  287. package/dist/ensure-_Oh8XPm4.cjs.map +0 -1
  288. package/dist/ensure-fsQMjaQL.cjs +0 -567
  289. package/dist/ensure-fsQMjaQL.cjs.map +0 -1
  290. package/dist/ensure-r1C_7K6_.cjs.map +0 -1
  291. package/dist/ensure-vxAGa2v3.js +0 -536
  292. package/dist/ensure-vxAGa2v3.js.map +0 -1
  293. package/dist/events.d.cts +0 -42
  294. package/dist/events.d.ts +0 -42
  295. package/dist/management-14vsHr4t.cjs +0 -85
  296. package/dist/management-14vsHr4t.cjs.map +0 -1
  297. package/dist/management-444tdCBG.js +0 -38
  298. package/dist/management-444tdCBG.js.map +0 -1
  299. package/dist/management-7jLjVHJd.js +0 -38
  300. package/dist/management-7jLjVHJd.js.map +0 -1
  301. package/dist/management-8x1OVMi6.js +0 -38
  302. package/dist/management-8x1OVMi6.js.map +0 -1
  303. package/dist/management-AFuqQEwz.js +0 -38
  304. package/dist/management-AFuqQEwz.js.map +0 -1
  305. package/dist/management-BZgsi29F.js +0 -38
  306. package/dist/management-BZgsi29F.js.map +0 -1
  307. package/dist/management-BodVLAfJ.cjs +0 -85
  308. package/dist/management-BodVLAfJ.cjs.map +0 -1
  309. package/dist/management-BqGBdL01.js +0 -38
  310. package/dist/management-BqGBdL01.js.map +0 -1
  311. package/dist/management-BvUAjril.js +0 -38
  312. package/dist/management-BvUAjril.js.map +0 -1
  313. package/dist/management-C-WGcwPD.js +0 -38
  314. package/dist/management-C-WGcwPD.js.map +0 -1
  315. package/dist/management-C2wv4vGS.cjs +0 -85
  316. package/dist/management-C2wv4vGS.cjs.map +0 -1
  317. package/dist/management-D2pjr38g.js +0 -38
  318. package/dist/management-D2pjr38g.js.map +0 -1
  319. package/dist/management-D5WsZoTV.js +0 -38
  320. package/dist/management-D5WsZoTV.js.map +0 -1
  321. package/dist/management-DAV9sN-k.cjs +0 -85
  322. package/dist/management-DAV9sN-k.cjs.map +0 -1
  323. package/dist/management-Df7Y2sF1.cjs +0 -85
  324. package/dist/management-Df7Y2sF1.cjs.map +0 -1
  325. package/dist/management-Dg2SxUb6.cjs +0 -85
  326. package/dist/management-Dg2SxUb6.cjs.map +0 -1
  327. package/dist/management-DwO0nBzL.cjs +0 -85
  328. package/dist/management-DwO0nBzL.cjs.map +0 -1
  329. package/dist/management-GcnNJjnm.cjs +0 -85
  330. package/dist/management-GcnNJjnm.cjs.map +0 -1
  331. package/dist/management-P_Vi_cvw.js +0 -38
  332. package/dist/management-P_Vi_cvw.js.map +0 -1
  333. package/dist/management-QWLpbXlW.cjs +0 -85
  334. package/dist/management-QWLpbXlW.cjs.map +0 -1
  335. package/dist/management-hkY13log.cjs +0 -85
  336. package/dist/management-hkY13log.cjs.map +0 -1
  337. package/dist/management-iE4x6IQY.cjs +0 -85
  338. package/dist/management-iE4x6IQY.cjs.map +0 -1
  339. package/dist/types.cjs +0 -3
  340. package/dist/types.d.cts +0 -8
  341. package/dist/types.d.ts +0 -8
  342. package/dist/types.js +0 -2
  343. package/dist/watch/observe.d.ts +0 -13
  344. package/dist/watch-B0pUfh-v.cjs +0 -119
  345. package/dist/watch-B0pUfh-v.cjs.map +0 -1
  346. package/dist/watch-B91opmva.cjs +0 -70
  347. package/dist/watch-B91opmva.cjs.map +0 -1
  348. package/dist/watch-BDiwCPmb.js +0 -108
  349. package/dist/watch-BDiwCPmb.js.map +0 -1
  350. package/dist/watch-BHfCtbn1.cjs +0 -119
  351. package/dist/watch-BHfCtbn1.cjs.map +0 -1
  352. package/dist/watch-BW7gYiDf.js +0 -108
  353. package/dist/watch-BW7gYiDf.js.map +0 -1
  354. package/dist/watch-BmC-Tyqg.js +0 -59
  355. package/dist/watch-BmC-Tyqg.js.map +0 -1
  356. package/dist/watch-Bx0y-Kcc.js +0 -108
  357. package/dist/watch-Bx0y-Kcc.js.map +0 -1
  358. package/dist/watch-CKWt788i.cjs +0 -70
  359. package/dist/watch-CKWt788i.cjs.map +0 -1
  360. package/dist/watch-CfrSSrRY.js +0 -59
  361. package/dist/watch-CfrSSrRY.js.map +0 -1
  362. package/dist/watch-Cnh3PtQA.cjs +0 -70
  363. package/dist/watch-Cnh3PtQA.cjs.map +0 -1
  364. package/dist/watch-D01MdwKy.js +0 -108
  365. package/dist/watch-D01MdwKy.js.map +0 -1
  366. package/dist/watch-D8hwbFU1.js +0 -59
  367. package/dist/watch-D8hwbFU1.js.map +0 -1
  368. package/dist/watch-DPVUwPUY.js +0 -59
  369. package/dist/watch-DPVUwPUY.js.map +0 -1
  370. package/dist/watch-DVmvZBMD.cjs +0 -70
  371. package/dist/watch-DVmvZBMD.cjs.map +0 -1
  372. package/dist/watch-DkDGmGAx.cjs +0 -119
  373. package/dist/watch-DkDGmGAx.cjs.map +0 -1
  374. package/dist/watch-DttHqefn.js +0 -108
  375. package/dist/watch-DttHqefn.js.map +0 -1
  376. package/dist/watch-DxdIZjpt.cjs +0 -119
  377. package/dist/watch-DxdIZjpt.cjs.map +0 -1
  378. package/dist/watch-DztcJuUy.cjs +0 -119
  379. package/dist/watch-DztcJuUy.cjs.map +0 -1
  380. package/dist/watch-IrR8G28N.js +0 -108
  381. package/dist/watch-IrR8G28N.js.map +0 -1
  382. package/dist/watch-aoNLQAXp.cjs +0 -119
  383. package/dist/watch-aoNLQAXp.cjs.map +0 -1
  384. package/dist/watch-entry.cjs +0 -4
  385. package/dist/watch-entry.d.cts +0 -24
  386. package/dist/watch-entry.d.ts +0 -24
  387. package/dist/watch-entry.js +0 -2
  388. package/dist/watch-hx0r92Zc.js +0 -108
  389. package/dist/watch-hx0r92Zc.js.map +0 -1
  390. package/dist/watch-lEco5Tbl.cjs +0 -119
  391. package/dist/watch-lEco5Tbl.cjs.map +0 -1
@@ -1,5 +1,4 @@
1
- import { a as INIT_CONFIG, c as getClassEquality, i as APPLY_DEPS, m as getBlacConfig, o as ON_DISPOSE, s as REMOVE_DEPS_OWNER } from "./StateContainerRegistry-D8nu7Z0T.js";
2
- import { t as getRegistry } from "./config-DXI3kzmA.js";
1
+ import { a as ON_DISPOSE, c as WITH_TRACKED_STATE, g as getBlacConfig, i as INIT_CONFIG, l as getBlacName, m as IS_DEV, n as globalRegistry, o as REMOVE_DEPS_OWNER, r as APPLY_DEPS, s as SET_ACTIVE, u as getClassEquality } from "./StateContainerRegistry-BH7aOMWV.js";
3
2
  import { ALL_PATHS, StructuralContainer } from "@dirtytalk/structural";
4
3
  //#region src/utils/idGenerator.ts
5
4
  /**
@@ -27,86 +26,133 @@ function generateSimpleId(prefix, affix) {
27
26
  return `${prefix}:${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
28
27
  }
29
28
  //#endregion
29
+ //#region src/registry/config.ts
30
+ let _registry = globalRegistry;
31
+ /**
32
+ * @public
33
+ */
34
+ function getRegistry() {
35
+ return _registry;
36
+ }
37
+ /**
38
+ * @public
39
+ */
40
+ function setRegistry(registry) {
41
+ _registry = registry;
42
+ }
43
+ /**
44
+ * @public
45
+ */
46
+ function getStats() {
47
+ return _registry.getStats();
48
+ }
49
+ //#endregion
30
50
  //#region src/core/meta.ts
31
51
  /**
32
- * Non-enumerable brand carried on every `$blac` object produced by
33
- * {@link createMeta}. Used by the clobber guard in `StateContainer` to detect
34
- * a subclass class-field shadowing the base's own `$blac` property, and by the
35
- * meta tests. Intentionally NOT re-exported from the package barrel.
52
+ * `$blac` meta namespace for `StateContainer`.
53
+ *
54
+ * `BlacMeta` and `BlacHydration` are classes whose accessors live on the
55
+ * prototype and read the container through one `#private` back-reference, so
56
+ * a container allocates a single small object here instead of a literal with
57
+ * seven closures. Members are therefore not own-enumerable: `Object.keys` and
58
+ * `JSON.stringify` see an empty object. Read the fields by name.
59
+ */
60
+ /**
61
+ * Non-enumerable brand carried on every `$blac` object. Used by the clobber
62
+ * guard in `StateContainer` to detect a subclass class-field shadowing the
63
+ * base's own `$blac` property, and by the meta tests. Intentionally NOT
64
+ * re-exported from the package barrel.
36
65
  */
37
66
  const META_BRAND = Symbol("blac.meta");
38
67
  const EMPTY_DEPS = /* @__PURE__ */ new Map();
39
68
  /**
40
- * Build the frozen, branded `$blac` meta object for a container.
41
- *
42
- * Called from a `StateContainer` field initializer (`$blac = createMeta(this)`).
43
- * Only the back-reference is captured at this point; every getter/method reads
44
- * the container's `_`-private fields lazily on access, so field-initializer
45
- * ordering relative to those private fields is irrelevant.
69
+ * Hydration sub-surface of {@link BlacMeta}. Exposes the container's
70
+ * hydration state machine — the `begin`/`apply`/`finish`/`fail`/`wait`
71
+ * methods and the `status`/`error`/`isHydrated`/`changedWhileHydrating`
72
+ * getters — namespaced under `$blac`.
73
+ */
74
+ var BlacHydration = class {
75
+ #c;
76
+ /** @internal */
77
+ constructor(container) {
78
+ this.#c = container;
79
+ Object.freeze(this);
80
+ }
81
+ get status() {
82
+ return this.#c._hydrationStatus;
83
+ }
84
+ get error() {
85
+ return this.#c._hydrationError;
86
+ }
87
+ get isHydrated() {
88
+ return this.#c._hydrationStatus === "hydrated";
89
+ }
90
+ get changedWhileHydrating() {
91
+ return this.#c._changedWhileHydrating;
92
+ }
93
+ begin() {
94
+ this.#c._beginHydration();
95
+ }
96
+ apply(next) {
97
+ return this.#c._applyHydratedState(next);
98
+ }
99
+ finish() {
100
+ this.#c._finishHydration();
101
+ }
102
+ fail(error) {
103
+ this.#c._failHydration(error);
104
+ }
105
+ wait() {
106
+ return this.#c._waitForHydration();
107
+ }
108
+ };
109
+ /**
110
+ * The reserved `$blac` instance member on every `StateContainer`. Gathers the
111
+ * container's identity/lifecycle/hydration surface (`name`, `id`, `debug`,
112
+ * `createdAt`, `disposed`, `dependencies`, and the hydration methods) under one
113
+ * namespace, keeping the generic names free for userland blocs.
46
114
  *
47
- * The getters close over `container` (the real instance), never over a
48
- * `this`-receiver — this is what keeps `$blac` reads safe through
49
- * `buildTrackedProxy`.
115
+ * Allocated once per container and frozen. Every accessor reads the
116
+ * container's current `_`-private fields live — values are never snapshotted.
50
117
  */
51
- function createMeta(container) {
52
- const c = container;
53
- const meta = {
54
- get name() {
55
- return c._name;
56
- },
57
- get id() {
58
- return c._instanceId;
59
- },
60
- get debug() {
61
- return c._debug;
62
- },
63
- get createdAt() {
64
- return c._createdAt;
65
- },
66
- get disposed() {
67
- return c._disposed;
68
- },
69
- get dependencies() {
70
- return c._dependencies ?? EMPTY_DEPS;
71
- },
72
- hydration: Object.freeze({
73
- get status() {
74
- return c._hydrationStatus;
75
- },
76
- get error() {
77
- return c._hydrationError;
78
- },
79
- get isHydrated() {
80
- return c._hydrationStatus === "hydrated";
81
- },
82
- get changedWhileHydrating() {
83
- return c._changedWhileHydrating;
84
- },
85
- begin() {
86
- c._beginHydration();
87
- },
88
- apply(next) {
89
- return c._applyHydratedState(next);
90
- },
91
- finish() {
92
- c._finishHydration();
93
- },
94
- fail(error) {
95
- c._failHydration(error);
96
- },
97
- wait() {
98
- return c._waitForHydration();
99
- }
100
- })
101
- };
102
- Object.defineProperty(meta, META_BRAND, {
103
- value: true,
104
- enumerable: false,
105
- writable: false,
106
- configurable: false
107
- });
108
- return Object.freeze(meta);
109
- }
118
+ var BlacMeta = class {
119
+ #c;
120
+ #hydration;
121
+ /** @internal Called from the `StateContainer` field initializer. */
122
+ constructor(container) {
123
+ this.#c = container;
124
+ Object.freeze(this);
125
+ }
126
+ get name() {
127
+ return this.#c._name;
128
+ }
129
+ get id() {
130
+ const c = this.#c;
131
+ return c._instanceId ??= generateSimpleId(getBlacName(c.constructor), "main");
132
+ }
133
+ get debug() {
134
+ return this.#c._debug;
135
+ }
136
+ get createdAt() {
137
+ return this.#c._createdAt;
138
+ }
139
+ get disposed() {
140
+ return this.#c._disposed;
141
+ }
142
+ get dependencies() {
143
+ return this.#c._dependencies ?? EMPTY_DEPS;
144
+ }
145
+ /** Built on first access; identity-stable afterwards. */
146
+ get hydration() {
147
+ return this.#hydration ??= new BlacHydration(this.#c);
148
+ }
149
+ };
150
+ Object.defineProperty(BlacMeta.prototype, META_BRAND, {
151
+ value: true,
152
+ enumerable: false,
153
+ writable: false,
154
+ configurable: false
155
+ });
110
156
  //#endregion
111
157
  //#region src/core/StateContainer.ts
112
158
  /**
@@ -117,6 +163,8 @@ function createMeta(container) {
117
163
  * @internal — exported for `@blac/react`; not part of the public API.
118
164
  */
119
165
  const DEP_BRAND = Symbol("blac.depHandle");
166
+ const EMPTY_RECORD = Object.freeze({});
167
+ let deactivatedReason;
120
168
  /**
121
169
  * Shallow per-key `Object.is` comparison of two plain records. Keys are
122
170
  * considered: a key present in one but not the other (regardless of value)
@@ -173,7 +221,7 @@ var StateContainer = class extends StructuralContainer {
173
221
  const owners = this._depsByOwner ??= /* @__PURE__ */ new Map();
174
222
  const prevSlice = owners.get(ownerId);
175
223
  if (prevSlice && shallowEqualRecord(prevSlice, slice)) return;
176
- if (process.env.NODE_ENV !== "production") for (const key of Object.keys(slice)) for (const [otherOwner, otherSlice] of owners) {
224
+ if (IS_DEV) for (const key of Object.keys(slice)) for (const [otherOwner, otherSlice] of owners) {
177
225
  if (otherOwner === ownerId) continue;
178
226
  if (key in otherSlice && otherSlice[key] !== slice[key]) console.warn(`[${this._name}] multiple owners writing dep \`${String(key)}\`; last write wins`);
179
227
  }
@@ -196,6 +244,34 @@ var StateContainer = class extends StructuralContainer {
196
244
  [ON_DISPOSE](handler) {
197
245
  return this.onSystemEvent("dispose", handler);
198
246
  }
247
+ /**
248
+ * @internal Drive the 0↔1 ownership transition. Idempotent: repeated calls
249
+ * with the same value are no-ops, so the registry can call it from every
250
+ * acquire/release without tracking edges itself.
251
+ *
252
+ * Returns which real transition (if any) just happened, so the registry can
253
+ * emit the matching `activated`/`deactivated` plugin event without exposing
254
+ * `_activation` itself — `'none'` for an idempotent no-op call.
255
+ */
256
+ [SET_ACTIVE](active) {
257
+ if (this._disposed) return "none";
258
+ if (active === (this._activation !== null)) return "none";
259
+ if (active) {
260
+ this._activation = new AbortController();
261
+ this.onActivate(this._activation.signal);
262
+ return {
263
+ kind: "activated",
264
+ signal: this._activation.signal
265
+ };
266
+ }
267
+ this._abortActivation();
268
+ this.onDeactivate();
269
+ return "deactivated";
270
+ }
271
+ _abortActivation() {
272
+ this._activation?.abort(deactivatedReason ??= new DOMException("The bloc was deactivated", "AbortError"));
273
+ this._activation = null;
274
+ }
199
275
  reconcileDeps() {
200
276
  const prev = this._deps;
201
277
  const next = {};
@@ -207,6 +283,31 @@ var StateContainer = class extends StructuralContainer {
207
283
  this._registry.emit("depsChanged", this, prev, next);
208
284
  }
209
285
  onDepsChanged(_next, _prev) {}
286
+ get state() {
287
+ return this._stateOverride ?? super.state;
288
+ }
289
+ /**
290
+ * @internal Run `fn` (with `this` = this instance, so a prototype getter can
291
+ * be passed directly) while `state` reports `tracked` and dep handles read
292
+ * off `this` route through `onDepHandle`. Restored in `finally`, and
293
+ * nestable — getters reading other getters stay in tracked context.
294
+ *
295
+ * The dep hook lives here rather than in the adapter's proxy because getters
296
+ * now run with `this` = the real instance (so ES `#private` works), which
297
+ * means a `this.someDep` read never passes through the proxy's trap.
298
+ */
299
+ [WITH_TRACKED_STATE](tracked, fn, onDepHandle) {
300
+ const prevState = this._stateOverride;
301
+ const prevHook = this._depHandleHook;
302
+ this._stateOverride = tracked;
303
+ this._depHandleHook = onDepHandle;
304
+ try {
305
+ return fn.call(this);
306
+ } finally {
307
+ this._stateOverride = prevState;
308
+ this._depHandleHook = prevHook;
309
+ }
310
+ }
210
311
  get args() {
211
312
  return this._config.args;
212
313
  }
@@ -241,6 +342,8 @@ var StateContainer = class extends StructuralContainer {
241
342
  };
242
343
  const handle = {
243
344
  track: (options) => {
345
+ const wrapped = this._depHandleHook?.(handle);
346
+ if (wrapped !== void 0 && wrapped !== handle) return wrapped.track(options);
244
347
  const instance = resolve(options?.args);
245
348
  return [instance.state, instance];
246
349
  },
@@ -260,40 +363,46 @@ var StateContainer = class extends StructuralContainer {
260
363
  constructor(initialState, options) {
261
364
  super(initialState, options);
262
365
  this._depsByOwner = null;
263
- this._deps = {};
366
+ this._deps = EMPTY_RECORD;
264
367
  this._disposed = false;
265
368
  this._hydrationStatus = "idle";
266
369
  this._changedWhileHydrating = false;
267
370
  this._hydrationPromise = null;
268
371
  this._hydrationPromiseSettled = false;
269
- this._config = {};
372
+ this._config = EMPTY_RECORD;
270
373
  this._initCalled = false;
374
+ this._activation = null;
271
375
  this._emitWindowStart = 0;
272
376
  this._emitCount = 0;
273
377
  this._emitRateWarned = false;
274
- this._systemEventHandlers = /* @__PURE__ */ new Map();
378
+ this._systemEventHandlers = null;
275
379
  this._dependencies = null;
276
380
  this._pendingChange = null;
277
381
  this._bridgeUnsub = null;
278
382
  this._registry = getRegistry();
279
383
  this._equalityFn = getBlacConfig().equality;
280
- this._name = this.constructor.name;
384
+ this._name = getBlacName(this.constructor);
281
385
  this._debug = false;
282
- this._instanceId = generateSimpleId(this.constructor.name, "main");
283
386
  this._createdAt = Date.now();
284
- this.$blac = createMeta(this);
387
+ this.$blac = new BlacMeta(this);
285
388
  this.onSystemEvent = (event, handler) => {
286
- let handlers = this._systemEventHandlers.get(event);
389
+ const all = this._systemEventHandlers ??= /* @__PURE__ */ new Map();
390
+ let handlers = all.get(event);
287
391
  if (!handlers) {
288
392
  handlers = /* @__PURE__ */ new Set();
289
- this._systemEventHandlers.set(event, handlers);
393
+ all.set(event, handlers);
290
394
  }
291
395
  handlers.add(handler);
396
+ if (event === "stateChanged" && this._bridgeUnsub === null) this._bridgeUnsub = this.channel.subscribe(() => ALL_PATHS, () => this._drainPending());
292
397
  return () => {
293
398
  handlers?.delete(handler);
399
+ if (event === "stateChanged" && handlers?.size === 0) {
400
+ this._bridgeUnsub?.();
401
+ this._bridgeUnsub = null;
402
+ this._pendingChange = null;
403
+ }
294
404
  };
295
405
  };
296
- this._bridgeUnsub = this.channel.subscribe(() => ALL_PATHS, () => this._drainPending());
297
406
  }
298
407
  /**
299
408
  * Called once after construction with the args passed at acquire time, before the first
@@ -302,6 +411,24 @@ var StateContainer = class extends StructuralContainer {
302
411
  */
303
412
  init(_args) {}
304
413
  /**
414
+ * Called when this instance goes from unowned to owned (first ref or first
415
+ * `depend()` dependent). Override to start work that should only run while
416
+ * something is actually using the instance — fetches, timers, listeners.
417
+ *
418
+ * `signal` aborts on the matching {@link onDeactivate} and on dispose, so
419
+ * async work started here can be cancelled without extra bookkeeping.
420
+ *
421
+ * Runs before the first `useBlocDeps` slice is applied, so `this.deps` is
422
+ * empty on first activation — use `onDepsChanged` for deps-driven work.
423
+ */
424
+ onActivate(_signal) {}
425
+ /**
426
+ * Called when this instance goes from owned back to unowned while surviving
427
+ * in the registry (i.e. `keepAlive`). A disposed instance does NOT get this
428
+ * callback — `dispose()` is the teardown path for that case.
429
+ */
430
+ onDeactivate() {}
431
+ /**
305
432
  * @internal Framework-only configuration entry point (registry + testing
306
433
  * helpers). Writes the `_`-private identity fields directly, resolves
307
434
  * per-class equality, emits the registry `created` event, and runs `init()`
@@ -309,17 +436,18 @@ var StateContainer = class extends StructuralContainer {
309
436
  */
310
437
  [INIT_CONFIG](config) {
311
438
  this._config = { ...config };
312
- this._name = this._config.name || this.constructor.name;
439
+ const className = getBlacName(this.constructor);
440
+ this._name = this._config.name || className;
313
441
  this._debug = this._config.debug ?? false;
314
- this._instanceId = generateSimpleId(this.constructor.name, this._config.instanceId);
442
+ this._instanceId = generateSimpleId(className, this._config.instanceId);
315
443
  const perClass = getClassEquality(this.constructor);
316
444
  this._equalityFn = perClass ?? getBlacConfig().equality;
317
- this._registry.emit("created", this);
318
445
  if (!this._initCalled) {
319
446
  this._initCalled = true;
320
447
  this.init(this._config.args);
321
448
  }
322
- if (process.env.NODE_ENV !== "production") {
449
+ this._registry.emit("created", this);
450
+ if (IS_DEV) {
323
451
  if (!this.$blac?.[META_BRAND]) console.warn(`[blac] ${this.constructor.name} appears to declare its own \`$blac\` member, which shadows the reserved meta namespace. \`$blac\` is reserved by StateContainer — remove the subclass field.`);
324
452
  }
325
453
  }
@@ -335,9 +463,11 @@ var StateContainer = class extends StructuralContainer {
335
463
  this.emitSystemEvent("dispose", void 0);
336
464
  this._bridgeUnsub?.();
337
465
  this._bridgeUnsub = null;
338
- this._systemEventHandlers.clear();
466
+ this._abortActivation();
467
+ this._systemEventHandlers = null;
339
468
  this._pendingChange = null;
340
469
  this._registry.emit("disposed", this);
470
+ super.dispose();
341
471
  if (this._debug) console.log(`[${this._name}] Disposed successfully`);
342
472
  }
343
473
  emit(next) {
@@ -353,22 +483,17 @@ var StateContainer = class extends StructuralContainer {
353
483
  * preserved.
354
484
  */
355
485
  patch(partial) {
356
- if (this._disposed) throw new Error(`Cannot emit state from disposed container ${this._name}`);
357
- const partialKeys = Object.keys(partial);
358
- if (partialKeys.length === 0) return;
359
- const prev = this.state;
360
- let allEqual = true;
361
- for (const key of partialKeys) if (!Object.is(prev[key], partial[key])) {
362
- allEqual = false;
363
- break;
486
+ if (this._disposed) {
487
+ this._warnDisposedMutation("patch");
488
+ return;
364
489
  }
365
- if (allEqual) return;
366
- if (process.env.NODE_ENV !== "production") this._checkEmitRate();
490
+ const prev = super.state;
367
491
  super.patch(partial);
368
- const next = this.state;
492
+ const next = super.state;
369
493
  if (Object.is(prev, next)) return;
494
+ if (IS_DEV && !this._emitRateWarned) this._checkEmitRate();
370
495
  if (this._hydrationStatus === "hydrating") this._changedWhileHydrating = true;
371
- if (this._pendingChange) this._pendingChange.next = next;
496
+ if (this._bridgeUnsub !== null) if (this._pendingChange) this._pendingChange.next = next;
372
497
  else this._pendingChange = {
373
498
  prev,
374
499
  next
@@ -376,13 +501,16 @@ var StateContainer = class extends StructuralContainer {
376
501
  if (this._registry.hasStateChangedListeners) this._registry.notifyStateChanged(this, prev, next);
377
502
  }
378
503
  applyState(next, source) {
379
- if (this._disposed) throw new Error(`Cannot emit state from disposed container ${this._name}`);
380
- const prev = this.state;
504
+ if (this._disposed) {
505
+ this._warnDisposedMutation("emit");
506
+ return;
507
+ }
508
+ const prev = super.state;
381
509
  if (prev === next) return;
382
510
  if (this._equalityFn(prev, next)) return;
383
- if (process.env.NODE_ENV !== "production") this._checkEmitRate();
511
+ if (IS_DEV && !this._emitRateWarned) this._checkEmitRate();
384
512
  if (this._hydrationStatus === "hydrating" && source !== "hydration") this._changedWhileHydrating = true;
385
- if (this._pendingChange) this._pendingChange.next = next;
513
+ if (this._bridgeUnsub !== null) if (this._pendingChange) this._pendingChange.next = next;
386
514
  else this._pendingChange = {
387
515
  prev,
388
516
  next
@@ -399,7 +527,7 @@ var StateContainer = class extends StructuralContainer {
399
527
  const pending = this._pendingChange;
400
528
  if (!pending) return;
401
529
  this._pendingChange = null;
402
- const handlers = this._systemEventHandlers.get("stateChanged");
530
+ const handlers = this._systemEventHandlers?.get("stateChanged");
403
531
  if (handlers && handlers.size > 0) {
404
532
  const payload = {
405
533
  state: pending.next,
@@ -428,9 +556,15 @@ var StateContainer = class extends StructuralContainer {
428
556
  this.ensureHydrationPromise();
429
557
  this.setHydrationStatus("hydrating");
430
558
  }
559
+ _warnDisposedMutation(op) {
560
+ if (IS_DEV) console.warn(`[blac] ${this._name}: ${op}() after dispose ignored. This usually means an async method resolved after the last consumer unmounted. Guard with \`if (this.$blac.disposed) return\` after each \`await\`, or abort the work from \`onSystemEvent('dispose', ...)\`.`);
561
+ }
431
562
  _applyHydratedState(next) {
432
563
  if (this._disposed) return false;
433
- if (this._hydrationStatus !== "hydrating" || this._changedWhileHydrating) return false;
564
+ if (this._hydrationStatus !== "hydrating" || this._changedWhileHydrating) {
565
+ if (IS_DEV && this._changedWhileHydrating) console.warn(`[blac] ${this._name}: persisted state discarded because the container emitted while hydrating.`);
566
+ return false;
567
+ }
434
568
  this.applyState(next, "hydration");
435
569
  return true;
436
570
  }
@@ -492,7 +626,7 @@ var StateContainer = class extends StructuralContainer {
492
626
  this._rejectHydrationPromise?.(error);
493
627
  }
494
628
  emitSystemEvent(event, payload) {
495
- const handlers = this._systemEventHandlers.get(event);
629
+ const handlers = this._systemEventHandlers?.get(event);
496
630
  if (!handlers) return;
497
631
  for (const handler of handlers) try {
498
632
  handler(payload);
@@ -508,7 +642,7 @@ var StateContainer = class extends StructuralContainer {
508
642
  */
509
643
  _checkEmitRate() {
510
644
  const limit = getBlacConfig().maxEmitsPerSecond;
511
- if (!(limit > 0) || !Number.isFinite(limit) || this._emitRateWarned) return;
645
+ if (!(limit > 0) || !Number.isFinite(limit)) return;
512
646
  const now = Date.now();
513
647
  if (now - this._emitWindowStart >= 1e3) {
514
648
  this._emitWindowStart = now;
@@ -525,19 +659,60 @@ var StateContainer = class extends StructuralContainer {
525
659
  //#endregion
526
660
  //#region src/core/Cubit.ts
527
661
  /**
528
- * `Cubit<S>` is a `StateContainer<S>` with `emit` / `patch` exposed as
529
- * public mutation surface. Today it adds nothing structurally beyond
530
- * `StateContainer` — both are inherited from the underlying
531
- * `StructuralContainer<S>`. Kept as a real class (not a type alias) because
532
- * downstream code does `instance instanceof Cubit` checks.
662
+ * `Cubit<S>` is a `StateContainer<S>` that exposes mutation publicly.
533
663
  *
534
- * The class body is intentionally empty: a no-op `emit` override would
535
- * still go through `applyState`, and `patch` is inherited from
536
- * `StructuralContainer` (path-diffed, microtask-flushed). A caller that
537
- * wants "skip if no real change" patch semantics can wrap `patch`
538
- * themselves or call `emit` after a manual equality check.
664
+ * That is the whole difference, and it is a real one: on `StateContainer`
665
+ * `emit` / `patch` / `update` are `protected`, so a container mutates itself
666
+ * from its own methods and callers go through the API it chooses to publish.
667
+ * `Cubit` re-declares the three as `public` for the cases where a caller
668
+ * legitimately drives state from outside — test helpers, devtools
669
+ * time-travel, benchmarks.
670
+ *
671
+ * Reach for `StateContainer` when business logic should live in the class,
672
+ * and `Cubit` when the caller owns the transitions.
539
673
  */
540
- var Cubit = class extends StateContainer {};
674
+ var Cubit = class extends StateContainer {
675
+ emit(next) {
676
+ super.emit(next);
677
+ }
678
+ patch(partial) {
679
+ super.patch(partial);
680
+ }
681
+ update(fn) {
682
+ super.update(fn);
683
+ }
684
+ };
685
+ //#endregion
686
+ //#region src/registry/acquire.ts
687
+ /**
688
+ * Acquire an instance with ref tracking (ownership semantics). Instance
689
+ * identity is derived purely from `args` (via the class's `static key(args)`,
690
+ * a structural hash of `args`, or the default sentinel when there are none).
691
+ *
692
+ * @param BlocClass - The StateContainer class constructor
693
+ * @param opts - `args` derives the instance key; `refId` names the reference
694
+ * for debugging and is auto-generated when omitted.
695
+ */
696
+ function acquire(BlocClass, opts) {
697
+ const registry = getRegistry();
698
+ const key = registry.resolveKey(BlocClass, void 0, opts?.args);
699
+ return registry.acquire(BlocClass, key, {
700
+ canCreate: true,
701
+ countRef: true,
702
+ refId: opts?.refId,
703
+ args: opts?.args
704
+ });
705
+ }
706
+ /**
707
+ * Resolve the storage key an instance would be acquired under, given its
708
+ * construction `args`. This is the canonical key-computation path. Callers that
709
+ * both acquire and release against the `@internal` registry tier (e.g.
710
+ * `@blac/react` `useBloc`) must use this once and pass the same resolved key to
711
+ * both, so the ref is dropped under the key it was taken.
712
+ */
713
+ function resolveInstanceKey(BlocClass, args) {
714
+ return getRegistry().resolveKey(BlocClass, void 0, args);
715
+ }
541
716
  //#endregion
542
717
  //#region src/registry/ensure.ts
543
718
  /**
@@ -550,6 +725,6 @@ function ensure(BlocClass, opts) {
550
725
  return registry.ensure(BlocClass, key, opts?.args);
551
726
  }
552
727
  //#endregion
553
- export { StateContainer as i, Cubit as n, DEP_BRAND as r, ensure as t };
728
+ export { DEP_BRAND as a, getStats as c, Cubit as i, setRegistry as l, acquire as n, StateContainer as o, resolveInstanceKey as r, getRegistry as s, ensure as t };
554
729
 
555
- //# sourceMappingURL=ensure-BSJHkUNX.js.map
730
+ //# sourceMappingURL=ensure-BnVyd6s4.js.map