@blac/core 2.1.0 → 2.1.1

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 (380) 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-DiQATvZh.js +632 -0
  11. package/dist/StateContainer-DiQATvZh.js.map +1 -0
  12. package/dist/StateContainer-j16zciex.cjs +667 -0
  13. package/dist/StateContainer-j16zciex.cjs.map +1 -0
  14. package/dist/{StateContainerRegistry-CSNm2Ws5.cjs → StateContainerRegistry-141uHhtF.cjs} +300 -397
  15. package/dist/StateContainerRegistry-141uHhtF.cjs.map +1 -0
  16. package/dist/{StateContainerRegistry-DVIBTxGZ.js → StateContainerRegistry-BH7aOMWV.js} +299 -406
  17. package/dist/StateContainerRegistry-BH7aOMWV.js.map +1 -0
  18. package/dist/StateContainerRegistry-BX-DlHXO.js +747 -0
  19. package/dist/StateContainerRegistry-BX-DlHXO.js.map +1 -0
  20. package/dist/StateContainerRegistry-Bf5VuVjm.js +747 -0
  21. package/dist/StateContainerRegistry-Bf5VuVjm.js.map +1 -0
  22. package/dist/{StateContainerRegistry-Dj77cok9.js → StateContainerRegistry-BsH_s0pJ.js} +303 -413
  23. package/dist/StateContainerRegistry-BsH_s0pJ.js.map +1 -0
  24. package/dist/StateContainerRegistry-BvSRfhKv.cjs +866 -0
  25. package/dist/StateContainerRegistry-BvSRfhKv.cjs.map +1 -0
  26. package/dist/StateContainerRegistry-C8jxrcqk.cjs +866 -0
  27. package/dist/StateContainerRegistry-C8jxrcqk.cjs.map +1 -0
  28. package/dist/{StateContainerRegistry-lIwo-0m3.cjs → StateContainerRegistry-CBLeHObO.cjs} +326 -418
  29. package/dist/StateContainerRegistry-CBLeHObO.cjs.map +1 -0
  30. package/dist/StateContainerRegistry-DjQQtlCW.cjs +870 -0
  31. package/dist/StateContainerRegistry-DjQQtlCW.cjs.map +1 -0
  32. package/dist/{StateContainerRegistry-D9BIRjwv.cjs → StateContainerRegistry-MkT0W4C2.cjs} +322 -411
  33. package/dist/StateContainerRegistry-MkT0W4C2.cjs.map +1 -0
  34. package/dist/StateContainerRegistry-gQbEutkN.js +751 -0
  35. package/dist/StateContainerRegistry-gQbEutkN.js.map +1 -0
  36. package/dist/{StateContainerRegistry-CvBOhAT2.js → StateContainerRegistry-vWgsD-RP.js} +277 -392
  37. package/dist/StateContainerRegistry-vWgsD-RP.js.map +1 -0
  38. package/dist/config.d.cts +8 -8
  39. package/dist/config.d.ts +8 -8
  40. package/dist/constants.d.cts +18 -28
  41. package/dist/constants.d.ts +18 -28
  42. package/dist/core/Cubit.d.ts +14 -10
  43. package/dist/core/StateContainer.d.ts +83 -62
  44. package/dist/core/StateContainerRegistry.d.ts +87 -166
  45. package/dist/core/meta.d.ts +34 -47
  46. package/dist/core/symbols.d.ts +21 -1
  47. package/dist/decorators/blac.d.ts +31 -28
  48. package/dist/{acquire-B1LYXSGj.js → ensure-Bi_yXk6f.js} +16 -5
  49. package/dist/ensure-Bi_yXk6f.js.map +1 -0
  50. package/dist/{ensure-r1C_7K6_.cjs → ensure-BjhbDW8Z.cjs} +203 -160
  51. package/dist/ensure-BjhbDW8Z.cjs.map +1 -0
  52. package/dist/{ensure-BSJHkUNX.js → ensure-BnVyd6s4.js} +297 -122
  53. package/dist/ensure-BnVyd6s4.js.map +1 -0
  54. package/dist/{acquire-BZIs6tpN.cjs → ensure-Bx41d-il.cjs} +23 -6
  55. package/dist/ensure-Bx41d-il.cjs.map +1 -0
  56. package/dist/{acquire-BRIJVJaA.js → ensure-C7UQ_mKM.js} +16 -5
  57. package/dist/ensure-C7UQ_mKM.js.map +1 -0
  58. package/dist/{ensure-B59ri8oo.js → ensure-CneMkpbI.js} +298 -122
  59. package/dist/ensure-CneMkpbI.js.map +1 -0
  60. package/dist/{ensure-B2DYCbbI.cjs → ensure-D15vGnk5.cjs} +328 -123
  61. package/dist/ensure-D15vGnk5.cjs.map +1 -0
  62. package/dist/{acquire-B1Wuqla6.cjs → ensure-D1D4WjYf.cjs} +23 -6
  63. package/dist/ensure-D1D4WjYf.cjs.map +1 -0
  64. package/dist/{ensure-BKdq5xsY.cjs → ensure-D3w6YGp9.cjs} +329 -123
  65. package/dist/ensure-D3w6YGp9.cjs.map +1 -0
  66. package/dist/{acquire-BJ3xUEmh.cjs → ensure-DBnuRJ0R.cjs} +23 -6
  67. package/dist/ensure-DBnuRJ0R.cjs.map +1 -0
  68. package/dist/{acquire-BdsVZBSe.js → ensure-NTB9nnnj.js} +16 -5
  69. package/dist/ensure-NTB9nnnj.js.map +1 -0
  70. package/dist/{ensure-D3WWWwMo.cjs → ensure-ORVw-WRE.cjs} +194 -155
  71. package/dist/ensure-ORVw-WRE.cjs.map +1 -0
  72. package/dist/{ensure-BEeY5Ab7.js → ensure-dsqWhIuO.js} +182 -147
  73. package/dist/ensure-dsqWhIuO.js.map +1 -0
  74. package/dist/{ensure-11-asM1e.js → ensure-k-6q7O25.js} +173 -150
  75. package/dist/ensure-k-6q7O25.js.map +1 -0
  76. package/dist/index.cjs +234 -87
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.d.cts +5 -13
  79. package/dist/index.d.ts +5 -13
  80. package/dist/index.js +211 -52
  81. package/dist/index.js.map +1 -1
  82. package/dist/internal.cjs +10 -0
  83. package/dist/internal.d.cts +8 -0
  84. package/dist/internal.d.ts +8 -0
  85. package/dist/internal.js +3 -0
  86. package/dist/plugin/BlacPlugin.d.ts +22 -24
  87. package/dist/plugin/PluginManager.d.ts +47 -60
  88. package/dist/plugins.cjs +383 -3
  89. package/dist/plugins.cjs.map +1 -0
  90. package/dist/plugins.d.cts +10 -5
  91. package/dist/plugins.d.ts +10 -5
  92. package/dist/plugins.js +381 -1
  93. package/dist/plugins.js.map +1 -0
  94. package/dist/registry/acquire.d.ts +2 -2
  95. package/dist/registry/config.d.ts +12 -0
  96. package/dist/registry/index.d.ts +1 -1
  97. package/dist/registry/management.d.ts +3 -0
  98. package/dist/registry/queries.d.ts +15 -0
  99. package/dist/registry/release.d.ts +4 -20
  100. package/dist/testing.cjs +38 -38
  101. package/dist/testing.cjs.map +1 -1
  102. package/dist/testing.d.cts +5 -11
  103. package/dist/testing.d.ts +5 -11
  104. package/dist/testing.js +28 -28
  105. package/dist/testing.js.map +1 -1
  106. package/dist/types/branded.d.ts +6 -13
  107. package/dist/types/utilities.d.ts +40 -31
  108. package/dist/utils/idGenerator.d.ts +6 -13
  109. package/dist/utils/static-props.d.ts +22 -29
  110. package/dist/utils/structural-key.d.ts +0 -22
  111. package/dist/watch/index.d.ts +1 -2
  112. package/dist/watch/watch.d.ts +17 -3
  113. package/package.json +28 -54
  114. package/dist/StateContainerRegistry-4Ljd9EJx.js +0 -1018
  115. package/dist/StateContainerRegistry-4Ljd9EJx.js.map +0 -1
  116. package/dist/StateContainerRegistry-8zNFMAf7.js +0 -1067
  117. package/dist/StateContainerRegistry-8zNFMAf7.js.map +0 -1
  118. package/dist/StateContainerRegistry-B1GYx9Xo.js +0 -975
  119. package/dist/StateContainerRegistry-B1GYx9Xo.js.map +0 -1
  120. package/dist/StateContainerRegistry-B_ViBLvJ.js +0 -975
  121. package/dist/StateContainerRegistry-B_ViBLvJ.js.map +0 -1
  122. package/dist/StateContainerRegistry-Bx2ly-ba.cjs +0 -1162
  123. package/dist/StateContainerRegistry-Bx2ly-ba.cjs.map +0 -1
  124. package/dist/StateContainerRegistry-C0dCNlTF.js +0 -1005
  125. package/dist/StateContainerRegistry-C0dCNlTF.js.map +0 -1
  126. package/dist/StateContainerRegistry-C75QpeaO.cjs +0 -1260
  127. package/dist/StateContainerRegistry-C75QpeaO.cjs.map +0 -1
  128. package/dist/StateContainerRegistry-CEWpc1bj.cjs +0 -1113
  129. package/dist/StateContainerRegistry-CEWpc1bj.cjs.map +0 -1
  130. package/dist/StateContainerRegistry-CS18y4au.cjs +0 -1163
  131. package/dist/StateContainerRegistry-CS18y4au.cjs.map +0 -1
  132. package/dist/StateContainerRegistry-CSNm2Ws5.cjs.map +0 -1
  133. package/dist/StateContainerRegistry-CchRjnjX.cjs +0 -1094
  134. package/dist/StateContainerRegistry-CchRjnjX.cjs.map +0 -1
  135. package/dist/StateContainerRegistry-CvBOhAT2.js.map +0 -1
  136. package/dist/StateContainerRegistry-D8nu7Z0T.js +0 -1068
  137. package/dist/StateContainerRegistry-D8nu7Z0T.js.map +0 -1
  138. package/dist/StateContainerRegistry-D9BIRjwv.cjs.map +0 -1
  139. package/dist/StateContainerRegistry-DJQqLrli.cjs +0 -1046
  140. package/dist/StateContainerRegistry-DJQqLrli.cjs.map +0 -1
  141. package/dist/StateContainerRegistry-DL5Ai7wh.js +0 -1153
  142. package/dist/StateContainerRegistry-DL5Ai7wh.js.map +0 -1
  143. package/dist/StateContainerRegistry-DVIBTxGZ.js.map +0 -1
  144. package/dist/StateContainerRegistry-DWOzx7Gd.js +0 -1154
  145. package/dist/StateContainerRegistry-DWOzx7Gd.js.map +0 -1
  146. package/dist/StateContainerRegistry-Dj77cok9.js.map +0 -1
  147. package/dist/StateContainerRegistry-FWKzPfS-.cjs +0 -1046
  148. package/dist/StateContainerRegistry-FWKzPfS-.cjs.map +0 -1
  149. package/dist/StateContainerRegistry-G81GcCRm.cjs +0 -1261
  150. package/dist/StateContainerRegistry-G81GcCRm.cjs.map +0 -1
  151. package/dist/StateContainerRegistry-lIwo-0m3.cjs.map +0 -1
  152. package/dist/acquire-B1LYXSGj.js.map +0 -1
  153. package/dist/acquire-B1Wuqla6.cjs.map +0 -1
  154. package/dist/acquire-BJ3xUEmh.cjs.map +0 -1
  155. package/dist/acquire-BP-ZfUH2.js +0 -35
  156. package/dist/acquire-BP-ZfUH2.js.map +0 -1
  157. package/dist/acquire-BRIJVJaA.js.map +0 -1
  158. package/dist/acquire-BZIs6tpN.cjs.map +0 -1
  159. package/dist/acquire-B_p1fNEh.cjs +0 -46
  160. package/dist/acquire-B_p1fNEh.cjs.map +0 -1
  161. package/dist/acquire-BdsVZBSe.js.map +0 -1
  162. package/dist/acquire-C3nOb3XR.cjs +0 -46
  163. package/dist/acquire-C3nOb3XR.cjs.map +0 -1
  164. package/dist/acquire-C4WAS13G.cjs +0 -46
  165. package/dist/acquire-C4WAS13G.cjs.map +0 -1
  166. package/dist/acquire-C7beGI55.cjs +0 -46
  167. package/dist/acquire-C7beGI55.cjs.map +0 -1
  168. package/dist/acquire-CE0uq0Dx.cjs +0 -46
  169. package/dist/acquire-CE0uq0Dx.cjs.map +0 -1
  170. package/dist/acquire-CU0u8BMn.js +0 -35
  171. package/dist/acquire-CU0u8BMn.js.map +0 -1
  172. package/dist/acquire-CbMz7gWs.cjs +0 -46
  173. package/dist/acquire-CbMz7gWs.cjs.map +0 -1
  174. package/dist/acquire-CkgLJ8WL.cjs +0 -46
  175. package/dist/acquire-CkgLJ8WL.cjs.map +0 -1
  176. package/dist/acquire-CwB083au.js +0 -35
  177. package/dist/acquire-CwB083au.js.map +0 -1
  178. package/dist/acquire-DHEOEVcj.cjs +0 -46
  179. package/dist/acquire-DHEOEVcj.cjs.map +0 -1
  180. package/dist/acquire-DTvfYJ0y.js +0 -35
  181. package/dist/acquire-DTvfYJ0y.js.map +0 -1
  182. package/dist/acquire-DXEQDZGr.js +0 -35
  183. package/dist/acquire-DXEQDZGr.js.map +0 -1
  184. package/dist/acquire-Dg-uXwjF.js +0 -35
  185. package/dist/acquire-Dg-uXwjF.js.map +0 -1
  186. package/dist/acquire-Don7499S.js +0 -35
  187. package/dist/acquire-Don7499S.js.map +0 -1
  188. package/dist/acquire-G8aB3GAx.js +0 -35
  189. package/dist/acquire-G8aB3GAx.js.map +0 -1
  190. package/dist/branded-BybA0_xw.cjs +0 -18
  191. package/dist/branded-BybA0_xw.cjs.map +0 -1
  192. package/dist/branded-DkbUzncc.js +0 -13
  193. package/dist/branded-DkbUzncc.js.map +0 -1
  194. package/dist/config-8pyOC5gv.js +0 -16
  195. package/dist/config-8pyOC5gv.js.map +0 -1
  196. package/dist/config-B1l8ZGlU.cjs +0 -32
  197. package/dist/config-B1l8ZGlU.cjs.map +0 -1
  198. package/dist/config-C1T6Jw7n.cjs +0 -32
  199. package/dist/config-C1T6Jw7n.cjs.map +0 -1
  200. package/dist/config-C7Ktkjh2.cjs +0 -32
  201. package/dist/config-C7Ktkjh2.cjs.map +0 -1
  202. package/dist/config-COT4Xkbc.js +0 -16
  203. package/dist/config-COT4Xkbc.js.map +0 -1
  204. package/dist/config-CzcoAvBo.js +0 -16
  205. package/dist/config-CzcoAvBo.js.map +0 -1
  206. package/dist/config-D2A8ZYRM.js +0 -16
  207. package/dist/config-D2A8ZYRM.js.map +0 -1
  208. package/dist/config-D34BkraU.cjs +0 -32
  209. package/dist/config-D34BkraU.cjs.map +0 -1
  210. package/dist/config-D6BoWWPv.js +0 -16
  211. package/dist/config-D6BoWWPv.js.map +0 -1
  212. package/dist/config-DOO82lbZ.js +0 -16
  213. package/dist/config-DOO82lbZ.js.map +0 -1
  214. package/dist/config-DVM_ESQt.js +0 -16
  215. package/dist/config-DVM_ESQt.js.map +0 -1
  216. package/dist/config-DVMnlHLv.cjs +0 -32
  217. package/dist/config-DVMnlHLv.cjs.map +0 -1
  218. package/dist/config-DWUq7zEQ.cjs +0 -32
  219. package/dist/config-DWUq7zEQ.cjs.map +0 -1
  220. package/dist/config-DXI3kzmA.js +0 -16
  221. package/dist/config-DXI3kzmA.js.map +0 -1
  222. package/dist/config-Dk1FxfXj.js +0 -16
  223. package/dist/config-Dk1FxfXj.js.map +0 -1
  224. package/dist/config-ZVy_yFZ3.js +0 -16
  225. package/dist/config-ZVy_yFZ3.js.map +0 -1
  226. package/dist/config-b2z51Y_C.cjs +0 -32
  227. package/dist/config-b2z51Y_C.cjs.map +0 -1
  228. package/dist/config-buwpT7l3.js +0 -16
  229. package/dist/config-buwpT7l3.js.map +0 -1
  230. package/dist/config-cwaTn5oy.cjs +0 -32
  231. package/dist/config-cwaTn5oy.cjs.map +0 -1
  232. package/dist/config-d9_U58ef.cjs +0 -32
  233. package/dist/config-d9_U58ef.cjs.map +0 -1
  234. package/dist/config-hWTayX76.cjs +0 -32
  235. package/dist/config-hWTayX76.cjs.map +0 -1
  236. package/dist/config-sCPKPYxZ.cjs +0 -32
  237. package/dist/config-sCPKPYxZ.cjs.map +0 -1
  238. package/dist/debug.cjs +0 -14
  239. package/dist/debug.d.cts +0 -34
  240. package/dist/debug.d.ts +0 -34
  241. package/dist/debug.js +0 -4
  242. package/dist/ensure-11-asM1e.js.map +0 -1
  243. package/dist/ensure-B1dEDsZV.cjs +0 -559
  244. package/dist/ensure-B1dEDsZV.cjs.map +0 -1
  245. package/dist/ensure-B2DYCbbI.cjs.map +0 -1
  246. package/dist/ensure-B59ri8oo.js.map +0 -1
  247. package/dist/ensure-B9oOqpOB.cjs +0 -558
  248. package/dist/ensure-B9oOqpOB.cjs.map +0 -1
  249. package/dist/ensure-BEeY5Ab7.js.map +0 -1
  250. package/dist/ensure-BKdq5xsY.cjs.map +0 -1
  251. package/dist/ensure-BSJHkUNX.js.map +0 -1
  252. package/dist/ensure-BfYnvAsI.js +0 -709
  253. package/dist/ensure-BfYnvAsI.js.map +0 -1
  254. package/dist/ensure-Bm91o37h.js +0 -536
  255. package/dist/ensure-Bm91o37h.js.map +0 -1
  256. package/dist/ensure-C1a8IFWy.js +0 -535
  257. package/dist/ensure-C1a8IFWy.js.map +0 -1
  258. package/dist/ensure-CLQEx0Nn.cjs +0 -528
  259. package/dist/ensure-CLQEx0Nn.cjs.map +0 -1
  260. package/dist/ensure-CPMiGvov.js +0 -493
  261. package/dist/ensure-CPMiGvov.js.map +0 -1
  262. package/dist/ensure-CQimeD0I.cjs +0 -559
  263. package/dist/ensure-CQimeD0I.cjs.map +0 -1
  264. package/dist/ensure-D3WWWwMo.cjs.map +0 -1
  265. package/dist/ensure-DEXSmA-N.js +0 -526
  266. package/dist/ensure-DEXSmA-N.js.map +0 -1
  267. package/dist/ensure-DTTTd2h8.js +0 -536
  268. package/dist/ensure-DTTTd2h8.js.map +0 -1
  269. package/dist/ensure-Dx86f80B.cjs +0 -567
  270. package/dist/ensure-Dx86f80B.cjs.map +0 -1
  271. package/dist/ensure-DzqGej43.js +0 -526
  272. package/dist/ensure-DzqGej43.js.map +0 -1
  273. package/dist/ensure-VuiNPccZ.cjs +0 -559
  274. package/dist/ensure-VuiNPccZ.cjs.map +0 -1
  275. package/dist/ensure-_Oh8XPm4.cjs +0 -732
  276. package/dist/ensure-_Oh8XPm4.cjs.map +0 -1
  277. package/dist/ensure-fsQMjaQL.cjs +0 -567
  278. package/dist/ensure-fsQMjaQL.cjs.map +0 -1
  279. package/dist/ensure-r1C_7K6_.cjs.map +0 -1
  280. package/dist/ensure-vxAGa2v3.js +0 -536
  281. package/dist/ensure-vxAGa2v3.js.map +0 -1
  282. package/dist/events.d.cts +0 -42
  283. package/dist/events.d.ts +0 -42
  284. package/dist/management-14vsHr4t.cjs +0 -85
  285. package/dist/management-14vsHr4t.cjs.map +0 -1
  286. package/dist/management-444tdCBG.js +0 -38
  287. package/dist/management-444tdCBG.js.map +0 -1
  288. package/dist/management-7jLjVHJd.js +0 -38
  289. package/dist/management-7jLjVHJd.js.map +0 -1
  290. package/dist/management-8x1OVMi6.js +0 -38
  291. package/dist/management-8x1OVMi6.js.map +0 -1
  292. package/dist/management-AFuqQEwz.js +0 -38
  293. package/dist/management-AFuqQEwz.js.map +0 -1
  294. package/dist/management-BZgsi29F.js +0 -38
  295. package/dist/management-BZgsi29F.js.map +0 -1
  296. package/dist/management-BodVLAfJ.cjs +0 -85
  297. package/dist/management-BodVLAfJ.cjs.map +0 -1
  298. package/dist/management-BqGBdL01.js +0 -38
  299. package/dist/management-BqGBdL01.js.map +0 -1
  300. package/dist/management-BvUAjril.js +0 -38
  301. package/dist/management-BvUAjril.js.map +0 -1
  302. package/dist/management-C-WGcwPD.js +0 -38
  303. package/dist/management-C-WGcwPD.js.map +0 -1
  304. package/dist/management-C2wv4vGS.cjs +0 -85
  305. package/dist/management-C2wv4vGS.cjs.map +0 -1
  306. package/dist/management-D2pjr38g.js +0 -38
  307. package/dist/management-D2pjr38g.js.map +0 -1
  308. package/dist/management-D5WsZoTV.js +0 -38
  309. package/dist/management-D5WsZoTV.js.map +0 -1
  310. package/dist/management-DAV9sN-k.cjs +0 -85
  311. package/dist/management-DAV9sN-k.cjs.map +0 -1
  312. package/dist/management-Df7Y2sF1.cjs +0 -85
  313. package/dist/management-Df7Y2sF1.cjs.map +0 -1
  314. package/dist/management-Dg2SxUb6.cjs +0 -85
  315. package/dist/management-Dg2SxUb6.cjs.map +0 -1
  316. package/dist/management-DwO0nBzL.cjs +0 -85
  317. package/dist/management-DwO0nBzL.cjs.map +0 -1
  318. package/dist/management-GcnNJjnm.cjs +0 -85
  319. package/dist/management-GcnNJjnm.cjs.map +0 -1
  320. package/dist/management-P_Vi_cvw.js +0 -38
  321. package/dist/management-P_Vi_cvw.js.map +0 -1
  322. package/dist/management-QWLpbXlW.cjs +0 -85
  323. package/dist/management-QWLpbXlW.cjs.map +0 -1
  324. package/dist/management-hkY13log.cjs +0 -85
  325. package/dist/management-hkY13log.cjs.map +0 -1
  326. package/dist/management-iE4x6IQY.cjs +0 -85
  327. package/dist/management-iE4x6IQY.cjs.map +0 -1
  328. package/dist/types.cjs +0 -3
  329. package/dist/types.d.cts +0 -8
  330. package/dist/types.d.ts +0 -8
  331. package/dist/types.js +0 -2
  332. package/dist/watch/observe.d.ts +0 -13
  333. package/dist/watch-B0pUfh-v.cjs +0 -119
  334. package/dist/watch-B0pUfh-v.cjs.map +0 -1
  335. package/dist/watch-B91opmva.cjs +0 -70
  336. package/dist/watch-B91opmva.cjs.map +0 -1
  337. package/dist/watch-BDiwCPmb.js +0 -108
  338. package/dist/watch-BDiwCPmb.js.map +0 -1
  339. package/dist/watch-BHfCtbn1.cjs +0 -119
  340. package/dist/watch-BHfCtbn1.cjs.map +0 -1
  341. package/dist/watch-BW7gYiDf.js +0 -108
  342. package/dist/watch-BW7gYiDf.js.map +0 -1
  343. package/dist/watch-BmC-Tyqg.js +0 -59
  344. package/dist/watch-BmC-Tyqg.js.map +0 -1
  345. package/dist/watch-Bx0y-Kcc.js +0 -108
  346. package/dist/watch-Bx0y-Kcc.js.map +0 -1
  347. package/dist/watch-CKWt788i.cjs +0 -70
  348. package/dist/watch-CKWt788i.cjs.map +0 -1
  349. package/dist/watch-CfrSSrRY.js +0 -59
  350. package/dist/watch-CfrSSrRY.js.map +0 -1
  351. package/dist/watch-Cnh3PtQA.cjs +0 -70
  352. package/dist/watch-Cnh3PtQA.cjs.map +0 -1
  353. package/dist/watch-D01MdwKy.js +0 -108
  354. package/dist/watch-D01MdwKy.js.map +0 -1
  355. package/dist/watch-D8hwbFU1.js +0 -59
  356. package/dist/watch-D8hwbFU1.js.map +0 -1
  357. package/dist/watch-DPVUwPUY.js +0 -59
  358. package/dist/watch-DPVUwPUY.js.map +0 -1
  359. package/dist/watch-DVmvZBMD.cjs +0 -70
  360. package/dist/watch-DVmvZBMD.cjs.map +0 -1
  361. package/dist/watch-DkDGmGAx.cjs +0 -119
  362. package/dist/watch-DkDGmGAx.cjs.map +0 -1
  363. package/dist/watch-DttHqefn.js +0 -108
  364. package/dist/watch-DttHqefn.js.map +0 -1
  365. package/dist/watch-DxdIZjpt.cjs +0 -119
  366. package/dist/watch-DxdIZjpt.cjs.map +0 -1
  367. package/dist/watch-DztcJuUy.cjs +0 -119
  368. package/dist/watch-DztcJuUy.cjs.map +0 -1
  369. package/dist/watch-IrR8G28N.js +0 -108
  370. package/dist/watch-IrR8G28N.js.map +0 -1
  371. package/dist/watch-aoNLQAXp.cjs +0 -119
  372. package/dist/watch-aoNLQAXp.cjs.map +0 -1
  373. package/dist/watch-entry.cjs +0 -4
  374. package/dist/watch-entry.d.cts +0 -24
  375. package/dist/watch-entry.d.ts +0 -24
  376. package/dist/watch-entry.js +0 -2
  377. package/dist/watch-hx0r92Zc.js +0 -108
  378. package/dist/watch-hx0r92Zc.js.map +0 -1
  379. package/dist/watch-lEco5Tbl.cjs +0 -119
  380. package/dist/watch-lEco5Tbl.cjs.map +0 -1
@@ -1,5 +1,4 @@
1
- const require_StateContainerRegistry = require("./StateContainerRegistry-Bx2ly-ba.cjs");
2
- const require_config = require("./config-cwaTn5oy.cjs");
1
+ const require_StateContainerRegistry = require("./StateContainerRegistry-CBLeHObO.cjs");
3
2
  let _dirtytalk_structural = require("@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 = require_StateContainerRegistry.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(require_StateContainerRegistry.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 _dirtytalk_structural.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 (require_StateContainerRegistry.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 _dirtytalk_structural.StructuralContainer {
196
244
  [require_StateContainerRegistry.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
+ [require_StateContainerRegistry.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 _dirtytalk_structural.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
+ [require_StateContainerRegistry.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 _dirtytalk_structural.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 _dirtytalk_structural.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
- this._registry = require_config.getRegistry();
382
+ this._registry = getRegistry();
279
383
  this._equalityFn = require_StateContainerRegistry.getBlacConfig().equality;
280
- this._name = this.constructor.name;
384
+ this._name = require_StateContainerRegistry.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(() => _dirtytalk_structural.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(() => _dirtytalk_structural.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 _dirtytalk_structural.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,19 @@ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
309
436
  */
310
437
  [require_StateContainerRegistry.INIT_CONFIG](config) {
311
438
  this._config = { ...config };
312
- this._name = this._config.name || this.constructor.name;
439
+ const className = require_StateContainerRegistry.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);
443
+ this._registry = this._config.registry ?? this._registry;
315
444
  const perClass = require_StateContainerRegistry.getClassEquality(this.constructor);
316
445
  this._equalityFn = perClass ?? require_StateContainerRegistry.getBlacConfig().equality;
317
- this._registry.emit("created", this);
318
446
  if (!this._initCalled) {
319
447
  this._initCalled = true;
320
448
  this.init(this._config.args);
321
449
  }
322
- if (process.env.NODE_ENV !== "production") {
450
+ this._registry.emit("created", this);
451
+ if (require_StateContainerRegistry.IS_DEV) {
323
452
  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
453
  }
325
454
  }
@@ -335,9 +464,11 @@ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
335
464
  this.emitSystemEvent("dispose", void 0);
336
465
  this._bridgeUnsub?.();
337
466
  this._bridgeUnsub = null;
338
- this._systemEventHandlers.clear();
467
+ this._abortActivation();
468
+ this._systemEventHandlers = null;
339
469
  this._pendingChange = null;
340
470
  this._registry.emit("disposed", this);
471
+ super.dispose();
341
472
  if (this._debug) console.log(`[${this._name}] Disposed successfully`);
342
473
  }
343
474
  emit(next) {
@@ -353,22 +484,17 @@ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
353
484
  * preserved.
354
485
  */
355
486
  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;
487
+ if (this._disposed) {
488
+ this._warnDisposedMutation("patch");
489
+ return;
364
490
  }
365
- if (allEqual) return;
366
- if (process.env.NODE_ENV !== "production") this._checkEmitRate();
491
+ const prev = super.state;
367
492
  super.patch(partial);
368
- const next = this.state;
493
+ const next = super.state;
369
494
  if (Object.is(prev, next)) return;
495
+ if (require_StateContainerRegistry.IS_DEV && !this._emitRateWarned) this._checkEmitRate();
370
496
  if (this._hydrationStatus === "hydrating") this._changedWhileHydrating = true;
371
- if (this._pendingChange) this._pendingChange.next = next;
497
+ if (this._bridgeUnsub !== null) if (this._pendingChange) this._pendingChange.next = next;
372
498
  else this._pendingChange = {
373
499
  prev,
374
500
  next
@@ -376,13 +502,16 @@ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
376
502
  if (this._registry.hasStateChangedListeners) this._registry.notifyStateChanged(this, prev, next);
377
503
  }
378
504
  applyState(next, source) {
379
- if (this._disposed) throw new Error(`Cannot emit state from disposed container ${this._name}`);
380
- const prev = this.state;
505
+ if (this._disposed) {
506
+ this._warnDisposedMutation("emit");
507
+ return;
508
+ }
509
+ const prev = super.state;
381
510
  if (prev === next) return;
382
511
  if (this._equalityFn(prev, next)) return;
383
- if (process.env.NODE_ENV !== "production") this._checkEmitRate();
512
+ if (require_StateContainerRegistry.IS_DEV && !this._emitRateWarned) this._checkEmitRate();
384
513
  if (this._hydrationStatus === "hydrating" && source !== "hydration") this._changedWhileHydrating = true;
385
- if (this._pendingChange) this._pendingChange.next = next;
514
+ if (this._bridgeUnsub !== null) if (this._pendingChange) this._pendingChange.next = next;
386
515
  else this._pendingChange = {
387
516
  prev,
388
517
  next
@@ -399,7 +528,7 @@ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
399
528
  const pending = this._pendingChange;
400
529
  if (!pending) return;
401
530
  this._pendingChange = null;
402
- const handlers = this._systemEventHandlers.get("stateChanged");
531
+ const handlers = this._systemEventHandlers?.get("stateChanged");
403
532
  if (handlers && handlers.size > 0) {
404
533
  const payload = {
405
534
  state: pending.next,
@@ -428,9 +557,15 @@ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
428
557
  this.ensureHydrationPromise();
429
558
  this.setHydrationStatus("hydrating");
430
559
  }
560
+ _warnDisposedMutation(op) {
561
+ if (require_StateContainerRegistry.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', ...)\`.`);
562
+ }
431
563
  _applyHydratedState(next) {
432
564
  if (this._disposed) return false;
433
- if (this._hydrationStatus !== "hydrating" || this._changedWhileHydrating) return false;
565
+ if (this._hydrationStatus !== "hydrating" || this._changedWhileHydrating) {
566
+ if (require_StateContainerRegistry.IS_DEV && this._changedWhileHydrating) console.warn(`[blac] ${this._name}: persisted state discarded because the container emitted while hydrating.`);
567
+ return false;
568
+ }
434
569
  this.applyState(next, "hydration");
435
570
  return true;
436
571
  }
@@ -492,7 +627,7 @@ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
492
627
  this._rejectHydrationPromise?.(error);
493
628
  }
494
629
  emitSystemEvent(event, payload) {
495
- const handlers = this._systemEventHandlers.get(event);
630
+ const handlers = this._systemEventHandlers?.get(event);
496
631
  if (!handlers) return;
497
632
  for (const handler of handlers) try {
498
633
  handler(payload);
@@ -508,7 +643,7 @@ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
508
643
  */
509
644
  _checkEmitRate() {
510
645
  const limit = require_StateContainerRegistry.getBlacConfig().maxEmitsPerSecond;
511
- if (!(limit > 0) || !Number.isFinite(limit) || this._emitRateWarned) return;
646
+ if (!(limit > 0) || !Number.isFinite(limit)) return;
512
647
  const now = Date.now();
513
648
  if (now - this._emitWindowStart >= 1e3) {
514
649
  this._emitWindowStart = now;
@@ -525,19 +660,60 @@ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
525
660
  //#endregion
526
661
  //#region src/core/Cubit.ts
527
662
  /**
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.
663
+ * `Cubit<S>` is a `StateContainer<S>` that exposes mutation publicly.
664
+ *
665
+ * That is the whole difference, and it is a real one: on `StateContainer`
666
+ * `emit` / `patch` / `update` are `protected`, so a container mutates itself
667
+ * from its own methods and callers go through the API it chooses to publish.
668
+ * `Cubit` re-declares the three as `public` for the cases where a caller
669
+ * legitimately drives state from outside — test helpers, devtools
670
+ * time-travel, benchmarks.
533
671
  *
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.
672
+ * Reach for `StateContainer` when business logic should live in the class,
673
+ * and `Cubit` when the caller owns the transitions.
539
674
  */
540
- var Cubit = class extends StateContainer {};
675
+ var Cubit = class extends StateContainer {
676
+ emit(next) {
677
+ super.emit(next);
678
+ }
679
+ patch(partial) {
680
+ super.patch(partial);
681
+ }
682
+ update(fn) {
683
+ super.update(fn);
684
+ }
685
+ };
686
+ //#endregion
687
+ //#region src/registry/acquire.ts
688
+ /**
689
+ * Acquire an instance with ref tracking (ownership semantics). Instance
690
+ * identity is derived purely from `args` (via the class's `static key(args)`,
691
+ * a structural hash of `args`, or the default sentinel when there are none).
692
+ *
693
+ * @param BlocClass - The StateContainer class constructor
694
+ * @param opts - `args` derives the instance key; `refId` names the reference
695
+ * for debugging and is auto-generated when omitted.
696
+ */
697
+ function acquire(BlocClass, opts) {
698
+ const registry = getRegistry();
699
+ const key = registry.resolveKey(BlocClass, void 0, opts?.args);
700
+ return registry.acquire(BlocClass, key, {
701
+ canCreate: true,
702
+ countRef: true,
703
+ refId: opts?.refId,
704
+ args: opts?.args
705
+ });
706
+ }
707
+ /**
708
+ * Resolve the storage key an instance would be acquired under, given its
709
+ * construction `args`. This is the canonical key-computation path. Callers that
710
+ * both acquire and release against the `@internal` registry tier (e.g.
711
+ * `@blac/react` `useBloc`) must use this once and pass the same resolved key to
712
+ * both, so the ref is dropped under the key it was taken.
713
+ */
714
+ function resolveInstanceKey(BlocClass, args) {
715
+ return getRegistry().resolveKey(BlocClass, void 0, args);
716
+ }
541
717
  //#endregion
542
718
  //#region src/registry/ensure.ts
543
719
  /**
@@ -545,7 +721,7 @@ var Cubit = class extends StateContainer {};
545
721
  * identity is derived purely from `args`, matching `acquire`.
546
722
  */
547
723
  function ensure(BlocClass, opts) {
548
- const registry = require_config.getRegistry();
724
+ const registry = getRegistry();
549
725
  const key = registry.resolveKey(BlocClass, void 0, opts?.args);
550
726
  return registry.ensure(BlocClass, key, opts?.args);
551
727
  }
@@ -568,11 +744,41 @@ Object.defineProperty(exports, "StateContainer", {
568
744
  return StateContainer;
569
745
  }
570
746
  });
747
+ Object.defineProperty(exports, "acquire", {
748
+ enumerable: true,
749
+ get: function() {
750
+ return acquire;
751
+ }
752
+ });
571
753
  Object.defineProperty(exports, "ensure", {
572
754
  enumerable: true,
573
755
  get: function() {
574
756
  return ensure;
575
757
  }
576
758
  });
759
+ Object.defineProperty(exports, "getRegistry", {
760
+ enumerable: true,
761
+ get: function() {
762
+ return getRegistry;
763
+ }
764
+ });
765
+ Object.defineProperty(exports, "getStats", {
766
+ enumerable: true,
767
+ get: function() {
768
+ return getStats;
769
+ }
770
+ });
771
+ Object.defineProperty(exports, "resolveInstanceKey", {
772
+ enumerable: true,
773
+ get: function() {
774
+ return resolveInstanceKey;
775
+ }
776
+ });
777
+ Object.defineProperty(exports, "setRegistry", {
778
+ enumerable: true,
779
+ get: function() {
780
+ return setRegistry;
781
+ }
782
+ });
577
783
 
578
- //# sourceMappingURL=ensure-BKdq5xsY.cjs.map
784
+ //# sourceMappingURL=ensure-D3w6YGp9.cjs.map