@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
@@ -0,0 +1,667 @@
1
+ const require_StateContainerRegistry = require("./StateContainerRegistry-BvSRfhKv.cjs");
2
+ let _dirtytalk_structural = require("@dirtytalk/structural");
3
+ //#region src/utils/idGenerator.ts
4
+ /**
5
+ * Build an instance id: `${prefix}:${affix}` when an affix is given (the
6
+ * registry passes the instance key), otherwise `${prefix}:${timestamp}_${random}`.
7
+ *
8
+ * Ids are not unique: same-named classes share an id for the same affix, and
9
+ * the lazy `$blac.id` of an unregistered instance is always `${prefix}:main`.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * generateSimpleId('CounterBloc', 'default'); // "CounterBloc:default"
14
+ * generateSimpleId('CounterBloc'); // "CounterBloc:1698765432100_a3k9d7f2q"
15
+ * ```
16
+ */
17
+ function generateSimpleId(prefix, affix) {
18
+ if (affix) return `${prefix}:${affix}`;
19
+ return `${prefix}:${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
20
+ }
21
+ //#endregion
22
+ //#region src/registry/config.ts
23
+ let _registry = require_StateContainerRegistry.globalRegistry;
24
+ /**
25
+ * The registry every plain helper (`acquire`, `ensure`, `watch`, …) uses.
26
+ * `RegistryProvider` from `@blac/react` does not change it; components use
27
+ * `useRegistry()` for the provider's registry.
28
+ * @public
29
+ */
30
+ function getRegistry() {
31
+ return _registry;
32
+ }
33
+ /**
34
+ * @public
35
+ */
36
+ function setRegistry(registry) {
37
+ _registry = registry;
38
+ }
39
+ /**
40
+ * @public
41
+ */
42
+ function getStats() {
43
+ return _registry.getStats();
44
+ }
45
+ //#endregion
46
+ //#region src/core/meta.ts
47
+ /**
48
+ * `$blac` meta namespace for `StateContainer`.
49
+ *
50
+ * `BlacMeta` and `BlacHydration` are classes whose accessors live on the
51
+ * prototype and read the container through one `#private` back-reference, so
52
+ * a container allocates a single small object here instead of a literal with
53
+ * seven closures. Members are therefore not own-enumerable: `Object.keys` and
54
+ * `JSON.stringify` see an empty object. Read the fields by name.
55
+ */
56
+ /**
57
+ * Non-enumerable brand carried on every `$blac` object. Used by the clobber
58
+ * guard in `StateContainer` to detect a subclass class-field shadowing the
59
+ * base's own `$blac` property, and by the meta tests. Intentionally NOT
60
+ * re-exported from the package barrel.
61
+ */
62
+ const META_BRAND = Symbol("blac.meta");
63
+ const EMPTY_DEPS = /* @__PURE__ */ new Map();
64
+ /**
65
+ * Hydration sub-surface of {@link BlacMeta}. Exposes the container's
66
+ * hydration state machine — the `begin`/`apply`/`finish`/`fail`/`wait`
67
+ * methods and the `status`/`error`/`isHydrated`/`changedWhileHydrating`
68
+ * getters — namespaced under `$blac`.
69
+ */
70
+ var BlacHydration = class {
71
+ #c;
72
+ /** @internal */
73
+ constructor(container) {
74
+ this.#c = container;
75
+ Object.freeze(this);
76
+ }
77
+ get status() {
78
+ return this.#c._hydrationStatus;
79
+ }
80
+ get error() {
81
+ return this.#c._hydrationError;
82
+ }
83
+ get isHydrated() {
84
+ return this.#c._hydrationStatus === "hydrated";
85
+ }
86
+ get changedWhileHydrating() {
87
+ return this.#c._changedWhileHydrating;
88
+ }
89
+ begin() {
90
+ this.#c._beginHydration();
91
+ }
92
+ apply(next) {
93
+ return this.#c._applyHydratedState(next);
94
+ }
95
+ finish() {
96
+ this.#c._finishHydration();
97
+ }
98
+ fail(error) {
99
+ this.#c._failHydration(error);
100
+ }
101
+ wait() {
102
+ return this.#c._waitForHydration();
103
+ }
104
+ };
105
+ /**
106
+ * The reserved `$blac` instance member on every `StateContainer`. Gathers the
107
+ * container's identity/lifecycle/hydration surface (`name`, `id`, `debug`,
108
+ * `createdAt`, `disposed`, `dependencies`, and the hydration methods) under one
109
+ * namespace, keeping the generic names free for userland blocs.
110
+ *
111
+ * Allocated once per container and frozen. Every accessor reads the
112
+ * container's current `_`-private fields live — values are never snapshotted.
113
+ */
114
+ var BlacMeta = class {
115
+ #c;
116
+ #hydration;
117
+ /** @internal Called from the `StateContainer` field initializer. */
118
+ constructor(container) {
119
+ this.#c = container;
120
+ Object.freeze(this);
121
+ }
122
+ get name() {
123
+ return this.#c._name;
124
+ }
125
+ get id() {
126
+ const c = this.#c;
127
+ return c._instanceId ??= generateSimpleId(require_StateContainerRegistry.getBlacName(c.constructor), "main");
128
+ }
129
+ get debug() {
130
+ return this.#c._debug;
131
+ }
132
+ get createdAt() {
133
+ return this.#c._createdAt;
134
+ }
135
+ get disposed() {
136
+ return this.#c._disposed;
137
+ }
138
+ get dependencies() {
139
+ return this.#c._dependencies ?? EMPTY_DEPS;
140
+ }
141
+ /** Built on first access; identity-stable afterwards. */
142
+ get hydration() {
143
+ return this.#hydration ??= new BlacHydration(this.#c);
144
+ }
145
+ };
146
+ Object.defineProperty(BlacMeta.prototype, META_BRAND, {
147
+ value: true,
148
+ enumerable: false,
149
+ writable: false,
150
+ configurable: false
151
+ });
152
+ //#endregion
153
+ //#region src/core/StateContainer.ts
154
+ /**
155
+ * Brand symbol carried (non-enumerable) on every handle returned by
156
+ * `depend()`. Framework adapters (`@blac/react`) use this to detect handles
157
+ * inside a tracked-proxy and swap in a session-bound wrapper.
158
+ *
159
+ * @internal — exported from `@blac/core/internal` for `@blac/react`.
160
+ */
161
+ const DEP_BRAND = Symbol("blac.depHandle");
162
+ const EMPTY_RECORD = Object.freeze({});
163
+ let deactivatedReason;
164
+ let stateChangeCount = 0;
165
+ /** @internal */
166
+ function getStateChangeCount() {
167
+ return stateChangeCount;
168
+ }
169
+ /**
170
+ * Shallow per-key `Object.is` comparison of two plain records. Keys are
171
+ * considered: a key present in one but not the other (regardless of value)
172
+ * makes the records unequal. Used to detect real deps changes.
173
+ */
174
+ function shallowEqualRecord(a, b) {
175
+ if (a === b) return true;
176
+ const aKeys = Object.keys(a);
177
+ if (aKeys.length !== Object.keys(b).length) return false;
178
+ for (const key of aKeys) {
179
+ if (!(key in b)) return false;
180
+ if (!Object.is(a[key], b[key])) return false;
181
+ }
182
+ return true;
183
+ }
184
+ /**
185
+ * BlaC's lifecycle/identity/dependency layer on top of `StructuralContainer`
186
+ * (which provides `state`, `emit`/`patch`/`update`, and `channel`).
187
+ * StateContainer adds identity/lifecycle/hydration (`$blac: BlacMeta`),
188
+ * cross-bloc deps (`depend()`), per-consumer deps slices, and registry
189
+ * integration. Subscribe via `onSystemEvent(...)` for coarse lifecycle
190
+ * events or `this.channel.subscribe(...)` for path-scoped ones.
191
+ */
192
+ var StateContainer = class extends _dirtytalk_structural.StructuralContainer {
193
+ static {
194
+ this.__excludeFromDevTools = false;
195
+ }
196
+ get deps() {
197
+ return this._deps;
198
+ }
199
+ /**
200
+ * @internal Apply one owner's (consumer's) deps slice. Shallow-merges the
201
+ * slice, reconciles keys the owner dropped since its last apply (other
202
+ * owners' keys untouched), dev-warns on cross-owner key collisions, then
203
+ * recomputes the merged view and fires onDepsChanged if it changed.
204
+ *
205
+ * Idempotent: re-applying an identical slice for the same owner is a no-op.
206
+ */
207
+ [require_StateContainerRegistry.APPLY_DEPS](ownerId, slice) {
208
+ if (this._disposed) return;
209
+ const owners = this._depsByOwner ??= /* @__PURE__ */ new Map();
210
+ const prevSlice = owners.get(ownerId);
211
+ if (prevSlice && shallowEqualRecord(prevSlice, slice)) return;
212
+ if (require_StateContainerRegistry.IS_DEV) for (const key of Object.keys(slice)) for (const [otherOwner, otherSlice] of owners) {
213
+ if (otherOwner === ownerId) continue;
214
+ if (key in otherSlice && otherSlice[key] !== slice[key]) console.warn(`[${this._name}] multiple owners writing dep \`${String(key)}\`; last write wins`);
215
+ }
216
+ owners.set(ownerId, { ...slice });
217
+ this.reconcileDeps();
218
+ }
219
+ /**
220
+ * @internal Withdraw an owner's entire deps slice (consumer unmounted).
221
+ */
222
+ [require_StateContainerRegistry.REMOVE_DEPS_OWNER](ownerId) {
223
+ if (this._disposed) return;
224
+ if (!this._depsByOwner?.delete(ownerId)) return;
225
+ this.reconcileDeps();
226
+ }
227
+ /**
228
+ * @internal Subscribe to this instance's own disposal. Delegates to the
229
+ * per-instance `'dispose'` system event — used by `watch()` in place of
230
+ * filtering the global registry `'disposed'` event.
231
+ */
232
+ [require_StateContainerRegistry.ON_DISPOSE](handler) {
233
+ return this.onSystemEvent("dispose", handler);
234
+ }
235
+ /**
236
+ * @internal Drive the 0↔1 ownership transition. Idempotent: repeated calls
237
+ * with the same value are no-ops, so the registry can call it from every
238
+ * acquire/release without tracking edges itself.
239
+ *
240
+ * Returns which real transition (if any) just happened, so the registry can
241
+ * emit the matching `activated`/`deactivated` plugin event without exposing
242
+ * `_activation` itself — `'none'` for an idempotent no-op call.
243
+ */
244
+ [require_StateContainerRegistry.SET_ACTIVE](active) {
245
+ if (this._disposed) return "none";
246
+ if (active === (this._activation !== null)) return "none";
247
+ if (active) {
248
+ this._activation = new AbortController();
249
+ this.onActivate(this._activation.signal);
250
+ return {
251
+ kind: "activated",
252
+ signal: this._activation.signal
253
+ };
254
+ }
255
+ this._abortActivation();
256
+ this.onDeactivate();
257
+ return "deactivated";
258
+ }
259
+ _abortActivation() {
260
+ this._activation?.abort(deactivatedReason ??= new DOMException("The bloc was deactivated", "AbortError"));
261
+ this._activation = null;
262
+ }
263
+ reconcileDeps() {
264
+ const prev = this._deps;
265
+ const next = {};
266
+ if (this._depsByOwner) for (const slice of this._depsByOwner.values()) Object.assign(next, slice);
267
+ for (const key of Object.keys(prev)) if (!(key in next)) next[key] = void 0;
268
+ if (shallowEqualRecord(prev, next)) return;
269
+ this._deps = next;
270
+ this.onDepsChanged(next, prev);
271
+ this._registry.emit("depsChanged", this, prev, next);
272
+ }
273
+ onDepsChanged(_next, _prev) {}
274
+ get state() {
275
+ return this._stateOverride ?? super.state;
276
+ }
277
+ /**
278
+ * @internal Run `fn` (with `this` = this instance, so a prototype getter can
279
+ * be passed directly) while `state` reports `tracked` and dep handles read
280
+ * off `this` route through `onDepHandle`. Restored in `finally`, and
281
+ * nestable — getters reading other getters stay in tracked context.
282
+ *
283
+ * The dep hook lives here rather than in the adapter's proxy because getters
284
+ * now run with `this` = the real instance (so ES `#private` works), which
285
+ * means a `this.someDep` read never passes through the proxy's trap.
286
+ */
287
+ [require_StateContainerRegistry.WITH_TRACKED_STATE](tracked, fn, onDepHandle) {
288
+ const prevState = this._stateOverride;
289
+ const prevHook = this._depHandleHook;
290
+ this._stateOverride = tracked;
291
+ this._depHandleHook = onDepHandle;
292
+ try {
293
+ return fn.call(this);
294
+ } finally {
295
+ this._stateOverride = prevState;
296
+ this._depHandleHook = prevHook;
297
+ }
298
+ }
299
+ get args() {
300
+ return this._config.args;
301
+ }
302
+ /**
303
+ * Declare a cross-bloc dependency. Returns a branded handle with two
304
+ * accessors — the dep instance is resolved against the registry on each call,
305
+ * which keeps the surface immune to dep-instance churn:
306
+ *
307
+ * - `handle.track(options?)` — reactive read. Returns `[state, instance]`.
308
+ * Inside a getter reached through the React proxy this subscribes the
309
+ * reading component to the dep's changes (base impl: live, no subscription).
310
+ * - `handle.untracked(options?)` — returns the live instance with no tracking,
311
+ * for imperative method calls and one-off reads.
312
+ *
313
+ * `defaultArgs` resolves the dep instance when an accessor is called without
314
+ * its own `args`; per-call `options.args` overrides it and can derive from
315
+ * current state. This does NOT auto-resubscribe outside the React proxy;
316
+ * non-React consumers needing updates should subscribe explicitly.
317
+ */
318
+ depend(Type, defaultArgs) {
319
+ if (!this._dependencies) this._dependencies = /* @__PURE__ */ new Map();
320
+ this._dependencies.set(Type, this._registry.resolveKey(Type, void 0, defaultArgs));
321
+ const resolve = (args) => {
322
+ const effectiveArgs = args ?? defaultArgs;
323
+ const key = this._registry.resolveKey(Type, void 0, effectiveArgs);
324
+ if (this._disposed && require_StateContainerRegistry.IS_DEV) console.warn(`[blac] ${this._name}: dependency accessed after dispose. Guard with \`if (this.$blac.disposed) return\` after each \`await\`.`);
325
+ return this._registry.acquire(Type, key, {
326
+ canCreate: true,
327
+ countRef: false,
328
+ args: effectiveArgs,
329
+ dependent: this._disposed ? void 0 : this,
330
+ sweepIfUnowned: this._disposed
331
+ });
332
+ };
333
+ const handle = {
334
+ track: (options) => {
335
+ const wrapped = this._depHandleHook?.(handle);
336
+ if (wrapped !== void 0 && wrapped !== handle) return wrapped.track(options);
337
+ const instance = resolve(options?.args);
338
+ return [instance.state, instance];
339
+ },
340
+ untracked: (options) => resolve(options?.args)
341
+ };
342
+ Object.defineProperty(handle, DEP_BRAND, {
343
+ value: {
344
+ Type,
345
+ defaultArgs
346
+ },
347
+ enumerable: false,
348
+ writable: false,
349
+ configurable: false
350
+ });
351
+ return handle;
352
+ }
353
+ constructor(initialState, options) {
354
+ super(initialState, options);
355
+ this._depsByOwner = null;
356
+ this._deps = EMPTY_RECORD;
357
+ this._disposed = false;
358
+ this._hydrationStatus = "idle";
359
+ this._changedWhileHydrating = false;
360
+ this._hydrationPromise = null;
361
+ this._hydrationPromiseSettled = false;
362
+ this._config = EMPTY_RECORD;
363
+ this._initCalled = false;
364
+ this._activation = null;
365
+ this._emitWindowStart = 0;
366
+ this._emitCount = 0;
367
+ this._emitRateWarned = false;
368
+ this._systemEventHandlers = null;
369
+ this._dependencies = null;
370
+ this._pendingChange = null;
371
+ this._bridgeUnsub = null;
372
+ this._registry = getRegistry();
373
+ this._equalityFn = require_StateContainerRegistry.getClassEquality(this.constructor) ?? require_StateContainerRegistry.getBlacConfig().equality;
374
+ this._name = require_StateContainerRegistry.getBlacName(this.constructor);
375
+ this._debug = false;
376
+ this._createdAt = Date.now();
377
+ this.$blac = new BlacMeta(this);
378
+ }
379
+ /**
380
+ * Called once after construction with the args passed at acquire time, before the first
381
+ * state snapshot is read by any consumer. Override to seed args-derived state (via
382
+ * this.emit(...)) or kick off loads.
383
+ */
384
+ init(_args) {}
385
+ /**
386
+ * Called when this instance goes from unowned to owned (first ref or first
387
+ * `depend()` dependent). Override to start work that should only run while
388
+ * something is actually using the instance — fetches, timers, listeners.
389
+ *
390
+ * `signal` aborts on the matching {@link onDeactivate} and on dispose, so
391
+ * async work started here can be cancelled without extra bookkeeping.
392
+ *
393
+ * Runs before the first `useBlocDeps` slice is applied, so `this.deps` is
394
+ * empty on first activation — use `onDepsChanged` for deps-driven work.
395
+ */
396
+ onActivate(_signal) {}
397
+ /**
398
+ * Called when this instance goes from owned back to unowned while surviving
399
+ * in the registry (i.e. `keepAlive`). A disposed instance does NOT get this
400
+ * callback — `dispose()` is the teardown path for that case.
401
+ */
402
+ onDeactivate() {}
403
+ /**
404
+ * @internal Framework-only configuration entry point (registry + testing
405
+ * helpers). Writes the `_`-private identity fields directly, emits the
406
+ * registry `created` event, and runs `init()` once. See {@link INIT_CONFIG}.
407
+ */
408
+ [require_StateContainerRegistry.INIT_CONFIG](config) {
409
+ this._config = { ...config };
410
+ const className = require_StateContainerRegistry.getBlacName(this.constructor);
411
+ this._name = this._config.name || className;
412
+ this._debug = this._config.debug ?? false;
413
+ this._instanceId = generateSimpleId(className, this._config.instanceId);
414
+ this._registry = this._config.registry ?? this._registry;
415
+ if (!this._initCalled) {
416
+ this._initCalled = true;
417
+ this.init(this._config.args);
418
+ }
419
+ this._registry.emit("created", this);
420
+ if (require_StateContainerRegistry.IS_DEV) {
421
+ 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.`);
422
+ }
423
+ }
424
+ dispose() {
425
+ if (this._disposed) return;
426
+ if (this._debug) console.log(`[${this._name}] Disposing...`);
427
+ if (this._depsByOwner) {
428
+ this._depsByOwner.clear();
429
+ this.reconcileDeps();
430
+ }
431
+ this._disposed = true;
432
+ if (this._hydrationStatus === "hydrating") this._failHydration(/* @__PURE__ */ new Error(`Hydration cancelled because ${this._name} was disposed`));
433
+ this.emitSystemEvent("dispose", void 0);
434
+ this._bridgeUnsub?.();
435
+ this._bridgeUnsub = null;
436
+ this._abortActivation();
437
+ this._systemEventHandlers = null;
438
+ this._pendingChange = null;
439
+ this._registry.emit("disposed", this);
440
+ super.dispose();
441
+ if (this._debug) console.log(`[${this._name}] Disposed successfully`);
442
+ }
443
+ emit(next) {
444
+ this.applyState(next, "default");
445
+ }
446
+ /** @see emit for the StateContainer concerns layered onto `super.patch`. */
447
+ patch(partial) {
448
+ if (this._disposed) {
449
+ this._warnDisposedMutation("patch");
450
+ return;
451
+ }
452
+ const prev = super.state;
453
+ super.patch(partial);
454
+ const next = super.state;
455
+ if (Object.is(prev, next)) return;
456
+ this._recordChange(prev, next, "default");
457
+ }
458
+ applyState(next, source) {
459
+ if (this._disposed) {
460
+ this._warnDisposedMutation("emit");
461
+ return;
462
+ }
463
+ const prev = super.state;
464
+ if (prev === next) return;
465
+ if (this._equalityFn(prev, next)) return;
466
+ this._recordChange(prev, next, source);
467
+ super.emit(next);
468
+ }
469
+ /** Bookkeeping shared by every real state change (`emit`, `patch`, hydration). */
470
+ _recordChange(prev, next, source) {
471
+ stateChangeCount++;
472
+ if (require_StateContainerRegistry.IS_DEV && !this._emitRateWarned) this._checkEmitRate();
473
+ if (this._hydrationStatus === "hydrating" && source !== "hydration") this._changedWhileHydrating = true;
474
+ if (this._bridgeUnsub !== null) if (this._pendingChange) this._pendingChange.next = next;
475
+ else this._pendingChange = {
476
+ prev,
477
+ next
478
+ };
479
+ this._registry.notifyStateChanged(this, prev, next);
480
+ }
481
+ /**
482
+ * Called by the channel-bridge subscriber on each flush. Drains the
483
+ * pending change (if any) into the 'stateChanged' system event.
484
+ * No pending change == flush from a no-op patch == skip.
485
+ */
486
+ _drainPending() {
487
+ const pending = this._pendingChange;
488
+ if (!pending) return;
489
+ this._pendingChange = null;
490
+ this.emitSystemEvent("stateChanged", {
491
+ state: pending.next,
492
+ previousState: pending.prev
493
+ });
494
+ }
495
+ _beginHydration() {
496
+ if (this._disposed) throw new Error(`Cannot begin hydration for disposed container ${this._name}`);
497
+ this._changedWhileHydrating = false;
498
+ this._hydrationError = void 0;
499
+ this._hydrationPromise = null;
500
+ this._resolveHydrationPromise = void 0;
501
+ this._rejectHydrationPromise = void 0;
502
+ this._hydrationPromiseSettled = false;
503
+ this.ensureHydrationPromise();
504
+ this.setHydrationStatus("hydrating");
505
+ }
506
+ _warnDisposedMutation(op) {
507
+ 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', ...)\`.`);
508
+ }
509
+ _applyHydratedState(next) {
510
+ if (this._disposed) return false;
511
+ if (this._hydrationStatus !== "hydrating" || this._changedWhileHydrating) {
512
+ if (require_StateContainerRegistry.IS_DEV && this._changedWhileHydrating) console.warn(`[blac] ${this._name}: persisted state discarded because the container emitted while hydrating.`);
513
+ return false;
514
+ }
515
+ this.applyState(next, "hydration");
516
+ return true;
517
+ }
518
+ _finishHydration() {
519
+ if (this._hydrationStatus !== "hydrating") {
520
+ if (this._hydrationStatus === "hydrated") return;
521
+ if (this._hydrationStatus === "error") this.ensureHydrationPromise();
522
+ }
523
+ this.setHydrationStatus("hydrated");
524
+ this.resolveHydration();
525
+ }
526
+ _failHydration(error) {
527
+ const err = error instanceof Error ? error : /* @__PURE__ */ new Error(`Hydration failed: ${String(error)}`);
528
+ this._hydrationError = err;
529
+ this.setHydrationStatus("error", err);
530
+ this.rejectHydration(err);
531
+ }
532
+ _waitForHydration() {
533
+ if (this._hydrationStatus === "idle" || this._hydrationStatus === "hydrated") return Promise.resolve();
534
+ if (this._hydrationStatus === "error") return Promise.reject(this._hydrationError ?? /* @__PURE__ */ new Error(`Hydration failed for container ${this._name}`));
535
+ return this.ensureHydrationPromise();
536
+ }
537
+ setHydrationStatus(status, error) {
538
+ const previousStatus = this._hydrationStatus;
539
+ this._hydrationStatus = status;
540
+ this._hydrationError = error;
541
+ this.emitSystemEvent("hydrationChanged", {
542
+ status,
543
+ previousStatus,
544
+ error,
545
+ changedWhileHydrating: this._changedWhileHydrating
546
+ });
547
+ this._registry.emit("hydrationChanged", this, status, previousStatus);
548
+ }
549
+ ensureHydrationPromise() {
550
+ if (!this._hydrationPromise || this._hydrationPromiseSettled) {
551
+ this._hydrationPromiseSettled = false;
552
+ this._hydrationPromise = new Promise((resolve, reject) => {
553
+ this._resolveHydrationPromise = () => {
554
+ if (this._hydrationPromiseSettled) return;
555
+ this._hydrationPromiseSettled = true;
556
+ resolve();
557
+ };
558
+ this._rejectHydrationPromise = (error) => {
559
+ if (this._hydrationPromiseSettled) return;
560
+ this._hydrationPromiseSettled = true;
561
+ reject(error);
562
+ };
563
+ });
564
+ this._hydrationPromise.catch(() => {});
565
+ }
566
+ return this._hydrationPromise;
567
+ }
568
+ resolveHydration() {
569
+ this._resolveHydrationPromise?.();
570
+ }
571
+ rejectHydration(error) {
572
+ this.ensureHydrationPromise();
573
+ this._rejectHydrationPromise?.(error);
574
+ }
575
+ onSystemEvent(event, handler) {
576
+ if (this._disposed) return () => {};
577
+ const all = this._systemEventHandlers ??= /* @__PURE__ */ new Map();
578
+ let handlers = all.get(event);
579
+ if (!handlers) {
580
+ handlers = /* @__PURE__ */ new Set();
581
+ all.set(event, handlers);
582
+ }
583
+ handlers.add(handler);
584
+ if (event === "stateChanged" && this._bridgeUnsub === null) this._bridgeUnsub = this.channel.subscribe(() => _dirtytalk_structural.ALL_PATHS, () => this._drainPending());
585
+ return () => {
586
+ handlers?.delete(handler);
587
+ if (event === "stateChanged" && handlers?.size === 0) {
588
+ this._bridgeUnsub?.();
589
+ this._bridgeUnsub = null;
590
+ this._pendingChange = null;
591
+ }
592
+ };
593
+ }
594
+ emitSystemEvent(event, payload) {
595
+ const handlers = this._systemEventHandlers?.get(event);
596
+ if (!handlers) return;
597
+ let remaining = handlers.size;
598
+ for (const handler of handlers) {
599
+ if (remaining-- === 0) break;
600
+ try {
601
+ handler(payload);
602
+ } catch (error) {
603
+ console.error(`[${this._name}] Error in system event handler:`, error);
604
+ }
605
+ }
606
+ }
607
+ /**
608
+ * Dev-only soft circuit breaker. Counts real state changes in a rolling 1s
609
+ * window and warns once if the rate exceeds `maxEmitsPerSecond` — the
610
+ * signature of a runaway loop (RAF/animation or emit-on-every-commit) pushing
611
+ * high-frequency data through state, which freezes subscribers/plugins.
612
+ */
613
+ _checkEmitRate() {
614
+ const limit = require_StateContainerRegistry.getBlacConfig().maxEmitsPerSecond;
615
+ if (!(limit > 0) || !Number.isFinite(limit)) return;
616
+ const now = Date.now();
617
+ if (now - this._emitWindowStart >= 1e3) {
618
+ this._emitWindowStart = now;
619
+ this._emitCount = 1;
620
+ return;
621
+ }
622
+ this._emitCount++;
623
+ if (this._emitCount > limit) {
624
+ this._emitRateWarned = true;
625
+ console.warn(`[${this._name}] emitted more than ${limit} state changes in under a second. This is usually a runaway loop pushing high-frequency data through state (e.g. \`emit\`/\`patch\` inside a requestAnimationFrame loop, or an effect that emits on every render). It can freeze the app by saturating subscribers and plugins (logging/devtools). Keep high-frequency work imperative and emit only coarse/throttled state, or raise \`configureBlac({ maxEmitsPerSecond })\`. (This warning fires once.)`);
626
+ }
627
+ }
628
+ };
629
+ //#endregion
630
+ Object.defineProperty(exports, "DEP_BRAND", {
631
+ enumerable: true,
632
+ get: function() {
633
+ return DEP_BRAND;
634
+ }
635
+ });
636
+ Object.defineProperty(exports, "StateContainer", {
637
+ enumerable: true,
638
+ get: function() {
639
+ return StateContainer;
640
+ }
641
+ });
642
+ Object.defineProperty(exports, "getRegistry", {
643
+ enumerable: true,
644
+ get: function() {
645
+ return getRegistry;
646
+ }
647
+ });
648
+ Object.defineProperty(exports, "getStateChangeCount", {
649
+ enumerable: true,
650
+ get: function() {
651
+ return getStateChangeCount;
652
+ }
653
+ });
654
+ Object.defineProperty(exports, "getStats", {
655
+ enumerable: true,
656
+ get: function() {
657
+ return getStats;
658
+ }
659
+ });
660
+ Object.defineProperty(exports, "setRegistry", {
661
+ enumerable: true,
662
+ get: function() {
663
+ return setRegistry;
664
+ }
665
+ });
666
+
667
+ //# sourceMappingURL=StateContainer-ClzwKnQZ.cjs.map