@blac/core 2.0.14 → 2.0.16

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 (570) hide show
  1. package/dist/{StateContainerRegistry-DmmzYa7S.js → StateContainerRegistry-B_ViBLvJ.js} +78 -77
  2. package/dist/StateContainerRegistry-B_ViBLvJ.js.map +1 -0
  3. package/dist/{StateContainerRegistry-B4yVMYbx.cjs → StateContainerRegistry-FWKzPfS-.cjs} +77 -88
  4. package/dist/StateContainerRegistry-FWKzPfS-.cjs.map +1 -0
  5. package/dist/acquire-DHEOEVcj.cjs +46 -0
  6. package/dist/acquire-DHEOEVcj.cjs.map +1 -0
  7. package/dist/acquire-Don7499S.js +35 -0
  8. package/dist/acquire-Don7499S.js.map +1 -0
  9. package/dist/{branded-BSeA_mZO.cjs → branded-BybA0_xw.cjs} +1 -1
  10. package/dist/{branded-BSeA_mZO.cjs.map → branded-BybA0_xw.cjs.map} +1 -1
  11. package/dist/{branded-DwtzSsg0.js → branded-DkbUzncc.js} +1 -1
  12. package/dist/{branded-DwtzSsg0.js.map → branded-DkbUzncc.js.map} +1 -1
  13. package/dist/{config-DoHx0Xsl.js → config-8pyOC5gv.js} +2 -2
  14. package/dist/{config-0ZD9i3wy.js.map → config-8pyOC5gv.js.map} +1 -1
  15. package/dist/{config-B_4xXpvK.cjs → config-DVMnlHLv.cjs} +2 -2
  16. package/dist/{config-B3NIwDQv.cjs.map → config-DVMnlHLv.cjs.map} +1 -1
  17. package/dist/constants.d.cts +0 -5
  18. package/dist/constants.d.ts +0 -5
  19. package/dist/core/StateContainer.d.ts +2 -2
  20. package/dist/core/StateContainerRegistry.d.ts +25 -8
  21. package/dist/debug.cjs +3 -3
  22. package/dist/debug.js +3 -3
  23. package/dist/{Cubit-CWP8Ddzx.cjs → ensure-CLQEx0Nn.cjs} +24 -6
  24. package/dist/ensure-CLQEx0Nn.cjs.map +1 -0
  25. package/dist/{Cubit-VJuu2tt9.js → ensure-CPMiGvov.js} +19 -7
  26. package/dist/ensure-CPMiGvov.js.map +1 -0
  27. package/dist/index.cjs +33 -40
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +2 -1
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.js +27 -33
  32. package/dist/index.js.map +1 -1
  33. package/dist/management-7jLjVHJd.js +38 -0
  34. package/dist/management-7jLjVHJd.js.map +1 -0
  35. package/dist/{management-DTzcC6aD.cjs → management-GcnNJjnm.cjs} +14 -8
  36. package/dist/management-GcnNJjnm.cjs.map +1 -0
  37. package/dist/plugins.cjs +1 -1
  38. package/dist/plugins.js +1 -1
  39. package/dist/registry/acquire.d.ts +19 -6
  40. package/dist/registry/borrow.d.ts +14 -3
  41. package/dist/registry/ensure.d.ts +7 -1
  42. package/dist/registry/index.d.ts +1 -0
  43. package/dist/registry/queries.d.ts +10 -4
  44. package/dist/registry/release.d.ts +14 -2
  45. package/dist/testing.cjs +17 -17
  46. package/dist/testing.cjs.map +1 -1
  47. package/dist/testing.d.cts +4 -4
  48. package/dist/testing.d.ts +4 -4
  49. package/dist/testing.js +14 -14
  50. package/dist/testing.js.map +1 -1
  51. package/dist/types/utilities.d.ts +1 -12
  52. package/dist/types.cjs +1 -1
  53. package/dist/types.js +1 -1
  54. package/dist/utils/static-props.d.ts +0 -9
  55. package/dist/watch/watch.d.ts +8 -5
  56. package/dist/{watch-DWCqXllW.js → watch-BmC-Tyqg.js} +11 -9
  57. package/dist/watch-BmC-Tyqg.js.map +1 -0
  58. package/dist/{watch-BpwaUL8r.cjs → watch-CKWt788i.cjs} +11 -9
  59. package/dist/watch-CKWt788i.cjs.map +1 -0
  60. package/dist/watch-entry.cjs +1 -1
  61. package/dist/watch-entry.js +1 -1
  62. package/package.json +22 -11
  63. package/dist/Cubit-9jal5zdZ.cjs +0 -390
  64. package/dist/Cubit-9jal5zdZ.cjs.map +0 -1
  65. package/dist/Cubit-BAUPiUF7.cjs +0 -380
  66. package/dist/Cubit-BAUPiUF7.cjs.map +0 -1
  67. package/dist/Cubit-BBKF3PIg.js +0 -287
  68. package/dist/Cubit-BBKF3PIg.js.map +0 -1
  69. package/dist/Cubit-BC70gaiA.js +0 -453
  70. package/dist/Cubit-BC70gaiA.js.map +0 -1
  71. package/dist/Cubit-BOgUZva7.js +0 -360
  72. package/dist/Cubit-BOgUZva7.js.map +0 -1
  73. package/dist/Cubit-BOxMvpfc.js +0 -291
  74. package/dist/Cubit-BOxMvpfc.js.map +0 -1
  75. package/dist/Cubit-BTznt8zg.js +0 -370
  76. package/dist/Cubit-BTznt8zg.js.map +0 -1
  77. package/dist/Cubit-BogJXkLm.js +0 -278
  78. package/dist/Cubit-BogJXkLm.js.map +0 -1
  79. package/dist/Cubit-C-8R_8db.cjs +0 -475
  80. package/dist/Cubit-C-8R_8db.cjs.map +0 -1
  81. package/dist/Cubit-C3Mw3EoO.cjs +0 -401
  82. package/dist/Cubit-C3Mw3EoO.cjs.map +0 -1
  83. package/dist/Cubit-CO8Fr72L.cjs +0 -447
  84. package/dist/Cubit-CO8Fr72L.cjs.map +0 -1
  85. package/dist/Cubit-COfHT1Bm.cjs +0 -321
  86. package/dist/Cubit-COfHT1Bm.cjs.map +0 -1
  87. package/dist/Cubit-CROWjjs9.js +0 -481
  88. package/dist/Cubit-CROWjjs9.js.map +0 -1
  89. package/dist/Cubit-CWP8Ddzx.cjs.map +0 -1
  90. package/dist/Cubit-CXxh9iol.js +0 -302
  91. package/dist/Cubit-CXxh9iol.js.map +0 -1
  92. package/dist/Cubit-CYOWfzQt.cjs +0 -317
  93. package/dist/Cubit-CYOWfzQt.cjs.map +0 -1
  94. package/dist/Cubit-CZaf_fp4.cjs +0 -388
  95. package/dist/Cubit-CZaf_fp4.cjs.map +0 -1
  96. package/dist/Cubit-C_dUEUdd.cjs +0 -380
  97. package/dist/Cubit-C_dUEUdd.cjs.map +0 -1
  98. package/dist/Cubit-C_rxRCTN.cjs +0 -523
  99. package/dist/Cubit-C_rxRCTN.cjs.map +0 -1
  100. package/dist/Cubit-CcKgMEBO.js +0 -299
  101. package/dist/Cubit-CcKgMEBO.js.map +0 -1
  102. package/dist/Cubit-CfT6Y1jl.js +0 -346
  103. package/dist/Cubit-CfT6Y1jl.js.map +0 -1
  104. package/dist/Cubit-CynJruuO.js +0 -369
  105. package/dist/Cubit-CynJruuO.js.map +0 -1
  106. package/dist/Cubit-D2vQ6nMb.js +0 -360
  107. package/dist/Cubit-D2vQ6nMb.js.map +0 -1
  108. package/dist/Cubit-D7jOZCoZ.js +0 -360
  109. package/dist/Cubit-D7jOZCoZ.js.map +0 -1
  110. package/dist/Cubit-D9j3IGPc.cjs +0 -523
  111. package/dist/Cubit-D9j3IGPc.cjs.map +0 -1
  112. package/dist/Cubit-DKEY9WYq.cjs +0 -296
  113. package/dist/Cubit-DKEY9WYq.cjs.map +0 -1
  114. package/dist/Cubit-DMV_0TCp.js +0 -481
  115. package/dist/Cubit-DMV_0TCp.js.map +0 -1
  116. package/dist/Cubit-DP5DXPUK.js +0 -360
  117. package/dist/Cubit-DP5DXPUK.js.map +0 -1
  118. package/dist/Cubit-DRFkzD2h.js +0 -426
  119. package/dist/Cubit-DRFkzD2h.js.map +0 -1
  120. package/dist/Cubit-DbnhTUaZ.cjs +0 -380
  121. package/dist/Cubit-DbnhTUaZ.cjs.map +0 -1
  122. package/dist/Cubit-DrqG3SP3.cjs +0 -370
  123. package/dist/Cubit-DrqG3SP3.cjs.map +0 -1
  124. package/dist/Cubit-DsDkCo42.cjs +0 -313
  125. package/dist/Cubit-DsDkCo42.cjs.map +0 -1
  126. package/dist/Cubit-DwRw1E9D.cjs +0 -309
  127. package/dist/Cubit-DwRw1E9D.cjs.map +0 -1
  128. package/dist/Cubit-Dw_kFBgc.js +0 -372
  129. package/dist/Cubit-Dw_kFBgc.js.map +0 -1
  130. package/dist/Cubit-KiXZCubP.cjs +0 -392
  131. package/dist/Cubit-KiXZCubP.cjs.map +0 -1
  132. package/dist/Cubit-Ksj7G4uR.js +0 -360
  133. package/dist/Cubit-Ksj7G4uR.js.map +0 -1
  134. package/dist/Cubit-MkjbpcPf.cjs +0 -380
  135. package/dist/Cubit-MkjbpcPf.cjs.map +0 -1
  136. package/dist/Cubit-NRhvdDQ6.js +0 -297
  137. package/dist/Cubit-NRhvdDQ6.js.map +0 -1
  138. package/dist/Cubit-PMTXxI_u.js +0 -368
  139. package/dist/Cubit-PMTXxI_u.js.map +0 -1
  140. package/dist/Cubit-VJuu2tt9.js.map +0 -1
  141. package/dist/Cubit-jz922NKf.cjs +0 -320
  142. package/dist/Cubit-jz922NKf.cjs.map +0 -1
  143. package/dist/Cubit-kU5_4jgC.cjs +0 -380
  144. package/dist/Cubit-kU5_4jgC.cjs.map +0 -1
  145. package/dist/StateContainerRegistry-B4yVMYbx.cjs.map +0 -1
  146. package/dist/StateContainerRegistry-BAcxouCu.js +0 -723
  147. package/dist/StateContainerRegistry-BAcxouCu.js.map +0 -1
  148. package/dist/StateContainerRegistry-BK57H92E.js +0 -747
  149. package/dist/StateContainerRegistry-BK57H92E.js.map +0 -1
  150. package/dist/StateContainerRegistry-BRBATSrx.cjs +0 -1030
  151. package/dist/StateContainerRegistry-BRBATSrx.cjs.map +0 -1
  152. package/dist/StateContainerRegistry-BgBIKcQF.js +0 -956
  153. package/dist/StateContainerRegistry-BgBIKcQF.js.map +0 -1
  154. package/dist/StateContainerRegistry-BglEhqdA.js +0 -709
  155. package/dist/StateContainerRegistry-BglEhqdA.js.map +0 -1
  156. package/dist/StateContainerRegistry-BhcnG0DF.js +0 -665
  157. package/dist/StateContainerRegistry-BhcnG0DF.js.map +0 -1
  158. package/dist/StateContainerRegistry-BpO5t-0i.js +0 -682
  159. package/dist/StateContainerRegistry-BpO5t-0i.js.map +0 -1
  160. package/dist/StateContainerRegistry-BqS-wpb_.js +0 -957
  161. package/dist/StateContainerRegistry-BqS-wpb_.js.map +0 -1
  162. package/dist/StateContainerRegistry-BrEGYPZT.cjs +0 -1029
  163. package/dist/StateContainerRegistry-BrEGYPZT.cjs.map +0 -1
  164. package/dist/StateContainerRegistry-BsMIpllP.cjs +0 -659
  165. package/dist/StateContainerRegistry-BsMIpllP.cjs.map +0 -1
  166. package/dist/StateContainerRegistry-Bxfne4A7.cjs +0 -908
  167. package/dist/StateContainerRegistry-Bxfne4A7.cjs.map +0 -1
  168. package/dist/StateContainerRegistry-C0E7vsgy.js +0 -758
  169. package/dist/StateContainerRegistry-C0E7vsgy.js.map +0 -1
  170. package/dist/StateContainerRegistry-C0I77Ndz.cjs +0 -920
  171. package/dist/StateContainerRegistry-C0I77Ndz.cjs.map +0 -1
  172. package/dist/StateContainerRegistry-CDH9mnQS.cjs +0 -715
  173. package/dist/StateContainerRegistry-CDH9mnQS.cjs.map +0 -1
  174. package/dist/StateContainerRegistry-CTOXUf75.cjs +0 -742
  175. package/dist/StateContainerRegistry-CTOXUf75.cjs.map +0 -1
  176. package/dist/StateContainerRegistry-CX2CBOmv.cjs +0 -795
  177. package/dist/StateContainerRegistry-CX2CBOmv.cjs.map +0 -1
  178. package/dist/StateContainerRegistry-CXnnf2-l.js +0 -867
  179. package/dist/StateContainerRegistry-CXnnf2-l.js.map +0 -1
  180. package/dist/StateContainerRegistry-CehuIpK_.cjs +0 -811
  181. package/dist/StateContainerRegistry-CehuIpK_.cjs.map +0 -1
  182. package/dist/StateContainerRegistry-Ci0ajc5g.js +0 -720
  183. package/dist/StateContainerRegistry-Ci0ajc5g.js.map +0 -1
  184. package/dist/StateContainerRegistry-Ck2-XmT_.js +0 -627
  185. package/dist/StateContainerRegistry-Ck2-XmT_.js.map +0 -1
  186. package/dist/StateContainerRegistry-D1lVJFGL.cjs +0 -753
  187. package/dist/StateContainerRegistry-D1lVJFGL.cjs.map +0 -1
  188. package/dist/StateContainerRegistry-DC4N73O6.js +0 -672
  189. package/dist/StateContainerRegistry-DC4N73O6.js.map +0 -1
  190. package/dist/StateContainerRegistry-DOkDGng-.js +0 -626
  191. package/dist/StateContainerRegistry-DOkDGng-.js.map +0 -1
  192. package/dist/StateContainerRegistry-DOuGI-l5.js +0 -685
  193. package/dist/StateContainerRegistry-DOuGI-l5.js.map +0 -1
  194. package/dist/StateContainerRegistry-DT66lr3I.cjs +0 -698
  195. package/dist/StateContainerRegistry-DT66lr3I.cjs.map +0 -1
  196. package/dist/StateContainerRegistry-DmmzYa7S.js.map +0 -1
  197. package/dist/StateContainerRegistry-Upsrlg9G.cjs +0 -756
  198. package/dist/StateContainerRegistry-Upsrlg9G.cjs.map +0 -1
  199. package/dist/StateContainerRegistry-WznfcA-Q.js +0 -855
  200. package/dist/StateContainerRegistry-WznfcA-Q.js.map +0 -1
  201. package/dist/StateContainerRegistry-Yph6UCA_.js +0 -678
  202. package/dist/StateContainerRegistry-Yph6UCA_.js.map +0 -1
  203. package/dist/StateContainerRegistry-mseeTqSA.cjs +0 -718
  204. package/dist/StateContainerRegistry-mseeTqSA.cjs.map +0 -1
  205. package/dist/StateContainerRegistry-pRNxHNFD.cjs +0 -705
  206. package/dist/StateContainerRegistry-pRNxHNFD.cjs.map +0 -1
  207. package/dist/StateContainerRegistry-vXMWtG7J.cjs +0 -660
  208. package/dist/StateContainerRegistry-vXMWtG7J.cjs.map +0 -1
  209. package/dist/StateContainerRegistry-v_prqMcI.cjs +0 -711
  210. package/dist/StateContainerRegistry-v_prqMcI.cjs.map +0 -1
  211. package/dist/branded-DCqi3De1.cjs +0 -18
  212. package/dist/branded-DCqi3De1.cjs.map +0 -1
  213. package/dist/branded-Max3xOTA.js +0 -13
  214. package/dist/branded-Max3xOTA.js.map +0 -1
  215. package/dist/config-0ZD9i3wy.js +0 -16
  216. package/dist/config-B3NIwDQv.cjs +0 -32
  217. package/dist/config-BKGHop0V.js +0 -16
  218. package/dist/config-BKGHop0V.js.map +0 -1
  219. package/dist/config-BKoaAlmb.js +0 -16
  220. package/dist/config-BKoaAlmb.js.map +0 -1
  221. package/dist/config-BPj08-8h.cjs +0 -32
  222. package/dist/config-BPj08-8h.cjs.map +0 -1
  223. package/dist/config-BR0Xy-Tn.cjs +0 -32
  224. package/dist/config-BR0Xy-Tn.cjs.map +0 -1
  225. package/dist/config-B_4xXpvK.cjs.map +0 -1
  226. package/dist/config-BflrQM4_.cjs +0 -32
  227. package/dist/config-BflrQM4_.cjs.map +0 -1
  228. package/dist/config-BzObBsk2.cjs +0 -32
  229. package/dist/config-BzObBsk2.cjs.map +0 -1
  230. package/dist/config-C0yumL1H.cjs +0 -32
  231. package/dist/config-C0yumL1H.cjs.map +0 -1
  232. package/dist/config-C8xqVHTf.js +0 -16
  233. package/dist/config-C8xqVHTf.js.map +0 -1
  234. package/dist/config-CCUhIYIF.js +0 -16
  235. package/dist/config-CCUhIYIF.js.map +0 -1
  236. package/dist/config-CGo__MAt.js +0 -16
  237. package/dist/config-CGo__MAt.js.map +0 -1
  238. package/dist/config-CQH9fTY-.cjs +0 -32
  239. package/dist/config-CQH9fTY-.cjs.map +0 -1
  240. package/dist/config-CR_Bz7RD.js +0 -16
  241. package/dist/config-CR_Bz7RD.js.map +0 -1
  242. package/dist/config-CTOa-yPN.cjs +0 -32
  243. package/dist/config-CTOa-yPN.cjs.map +0 -1
  244. package/dist/config-Cd7Q-B4g.js +0 -16
  245. package/dist/config-Cd7Q-B4g.js.map +0 -1
  246. package/dist/config-CmDEX-1o.js +0 -16
  247. package/dist/config-CmDEX-1o.js.map +0 -1
  248. package/dist/config-CoNMTnMA.cjs +0 -32
  249. package/dist/config-CoNMTnMA.cjs.map +0 -1
  250. package/dist/config-Cwj8-C1J.js +0 -16
  251. package/dist/config-Cwj8-C1J.js.map +0 -1
  252. package/dist/config-D3jisfdj.cjs +0 -32
  253. package/dist/config-D3jisfdj.cjs.map +0 -1
  254. package/dist/config-D4GifZQ4.js +0 -16
  255. package/dist/config-D4GifZQ4.js.map +0 -1
  256. package/dist/config-DDrSQGpQ.cjs +0 -32
  257. package/dist/config-DDrSQGpQ.cjs.map +0 -1
  258. package/dist/config-DEcslxan.cjs +0 -32
  259. package/dist/config-DEcslxan.cjs.map +0 -1
  260. package/dist/config-DLzmy2rZ.cjs +0 -32
  261. package/dist/config-DLzmy2rZ.cjs.map +0 -1
  262. package/dist/config-DMNZ2YLV.cjs +0 -32
  263. package/dist/config-DMNZ2YLV.cjs.map +0 -1
  264. package/dist/config-De9oQ6Ki.js +0 -16
  265. package/dist/config-De9oQ6Ki.js.map +0 -1
  266. package/dist/config-DoHx0Xsl.js.map +0 -1
  267. package/dist/config-DokTzpr8.cjs +0 -32
  268. package/dist/config-DokTzpr8.cjs.map +0 -1
  269. package/dist/config-DslYBm4Z.js +0 -16
  270. package/dist/config-DslYBm4Z.js.map +0 -1
  271. package/dist/config-H6FAqbW4.cjs +0 -32
  272. package/dist/config-H6FAqbW4.cjs.map +0 -1
  273. package/dist/config-XQua95Xz.js +0 -16
  274. package/dist/config-XQua95Xz.js.map +0 -1
  275. package/dist/config-Yp645dGK.js +0 -16
  276. package/dist/config-Yp645dGK.js.map +0 -1
  277. package/dist/config-ispAzOZV.js +0 -16
  278. package/dist/config-ispAzOZV.js.map +0 -1
  279. package/dist/ensure-9VEq5H0L.js +0 -9
  280. package/dist/ensure-9VEq5H0L.js.map +0 -1
  281. package/dist/ensure-BB6xHQAF.cjs +0 -14
  282. package/dist/ensure-BB6xHQAF.cjs.map +0 -1
  283. package/dist/ensure-BNDfTzqg.cjs +0 -14
  284. package/dist/ensure-BNDfTzqg.cjs.map +0 -1
  285. package/dist/ensure-BVCnjU7r.js +0 -365
  286. package/dist/ensure-BVCnjU7r.js.map +0 -1
  287. package/dist/ensure-BbzGXjep.cjs +0 -14
  288. package/dist/ensure-BbzGXjep.cjs.map +0 -1
  289. package/dist/ensure-BlIaQai6.js +0 -9
  290. package/dist/ensure-BlIaQai6.js.map +0 -1
  291. package/dist/ensure-Bm3oHxga.js +0 -9
  292. package/dist/ensure-Bm3oHxga.js.map +0 -1
  293. package/dist/ensure-C3eIRs6e.cjs +0 -14
  294. package/dist/ensure-C3eIRs6e.cjs.map +0 -1
  295. package/dist/ensure-C5I1xp2C.js +0 -9
  296. package/dist/ensure-C5I1xp2C.js.map +0 -1
  297. package/dist/ensure-CJZL7bcA.cjs +0 -391
  298. package/dist/ensure-CJZL7bcA.cjs.map +0 -1
  299. package/dist/ensure-CN6unBOe.cjs +0 -14
  300. package/dist/ensure-CN6unBOe.cjs.map +0 -1
  301. package/dist/ensure-CSHYjIeH.cjs +0 -14
  302. package/dist/ensure-CSHYjIeH.cjs.map +0 -1
  303. package/dist/ensure-CU-B1ywv.js +0 -9
  304. package/dist/ensure-CU-B1ywv.js.map +0 -1
  305. package/dist/ensure-CWKzeno7.js +0 -9
  306. package/dist/ensure-CWKzeno7.js.map +0 -1
  307. package/dist/ensure-CkENsuQ9.js +0 -9
  308. package/dist/ensure-CkENsuQ9.js.map +0 -1
  309. package/dist/ensure-Cm-4_LSh.cjs +0 -14
  310. package/dist/ensure-Cm-4_LSh.cjs.map +0 -1
  311. package/dist/ensure-Cqex5r1P.cjs +0 -14
  312. package/dist/ensure-Cqex5r1P.cjs.map +0 -1
  313. package/dist/ensure-Cv5AbNGZ.js +0 -9
  314. package/dist/ensure-Cv5AbNGZ.js.map +0 -1
  315. package/dist/ensure-D63lEMUK.cjs +0 -14
  316. package/dist/ensure-D63lEMUK.cjs.map +0 -1
  317. package/dist/ensure-DGEtPU9A.cjs +0 -14
  318. package/dist/ensure-DGEtPU9A.cjs.map +0 -1
  319. package/dist/ensure-DM3qb336.cjs +0 -14
  320. package/dist/ensure-DM3qb336.cjs.map +0 -1
  321. package/dist/ensure-DME-_T0j.cjs +0 -14
  322. package/dist/ensure-DME-_T0j.cjs.map +0 -1
  323. package/dist/ensure-DWd0GCYB.js +0 -9
  324. package/dist/ensure-DWd0GCYB.js.map +0 -1
  325. package/dist/ensure-DamKOP6q.cjs +0 -14
  326. package/dist/ensure-DamKOP6q.cjs.map +0 -1
  327. package/dist/ensure-Dcfptl-A.js +0 -9
  328. package/dist/ensure-Dcfptl-A.js.map +0 -1
  329. package/dist/ensure-Def-EBWG.js +0 -9
  330. package/dist/ensure-Def-EBWG.js.map +0 -1
  331. package/dist/ensure-DnHL5QiQ.cjs +0 -14
  332. package/dist/ensure-DnHL5QiQ.cjs.map +0 -1
  333. package/dist/ensure-Dr7I78Ku.cjs +0 -14
  334. package/dist/ensure-Dr7I78Ku.cjs.map +0 -1
  335. package/dist/ensure-SLVdGd5b.js +0 -9
  336. package/dist/ensure-SLVdGd5b.js.map +0 -1
  337. package/dist/ensure-Sb92MCXu.js +0 -9
  338. package/dist/ensure-Sb92MCXu.js.map +0 -1
  339. package/dist/ensure-gFlvevGm.cjs +0 -14
  340. package/dist/ensure-gFlvevGm.cjs.map +0 -1
  341. package/dist/ensure-l2-H7S5W.js +0 -9
  342. package/dist/ensure-l2-H7S5W.js.map +0 -1
  343. package/dist/ensure-mkL-3qh8.js +0 -9
  344. package/dist/ensure-mkL-3qh8.js.map +0 -1
  345. package/dist/ensure-n80crSlX.js +0 -9
  346. package/dist/ensure-n80crSlX.js.map +0 -1
  347. package/dist/ensure-nCxg7MCN.js +0 -9
  348. package/dist/ensure-nCxg7MCN.js.map +0 -1
  349. package/dist/ensure-vS71MV4q.cjs +0 -14
  350. package/dist/ensure-vS71MV4q.cjs.map +0 -1
  351. package/dist/management-6oQbmf0z.js +0 -41
  352. package/dist/management-6oQbmf0z.js.map +0 -1
  353. package/dist/management-B46QwA9Y.js +0 -41
  354. package/dist/management-B46QwA9Y.js.map +0 -1
  355. package/dist/management-B9yrRpeg.js +0 -41
  356. package/dist/management-B9yrRpeg.js.map +0 -1
  357. package/dist/management-BCKTEZ8Q.js +0 -41
  358. package/dist/management-BCKTEZ8Q.js.map +0 -1
  359. package/dist/management-BbMzdXbT.js +0 -41
  360. package/dist/management-BbMzdXbT.js.map +0 -1
  361. package/dist/management-Bg652agq.js +0 -41
  362. package/dist/management-Bg652agq.js.map +0 -1
  363. package/dist/management-BnedF5ZD.cjs +0 -79
  364. package/dist/management-BnedF5ZD.cjs.map +0 -1
  365. package/dist/management-BoUa99eB.cjs +0 -79
  366. package/dist/management-BoUa99eB.cjs.map +0 -1
  367. package/dist/management-C-wBdpho.js +0 -37
  368. package/dist/management-C-wBdpho.js.map +0 -1
  369. package/dist/management-C4SHcrJm.cjs +0 -79
  370. package/dist/management-C4SHcrJm.cjs.map +0 -1
  371. package/dist/management-CK-GL3wY.js +0 -41
  372. package/dist/management-CK-GL3wY.js.map +0 -1
  373. package/dist/management-CPhgY8OE.js +0 -41
  374. package/dist/management-CPhgY8OE.js.map +0 -1
  375. package/dist/management-CU_V3LIP.js +0 -41
  376. package/dist/management-CU_V3LIP.js.map +0 -1
  377. package/dist/management-CUwXDSi9.cjs +0 -79
  378. package/dist/management-CUwXDSi9.cjs.map +0 -1
  379. package/dist/management-CaqiyNzB.js +0 -41
  380. package/dist/management-CaqiyNzB.js.map +0 -1
  381. package/dist/management-Cin-JvYe.js +0 -41
  382. package/dist/management-Cin-JvYe.js.map +0 -1
  383. package/dist/management-ClaXym0F.cjs +0 -79
  384. package/dist/management-ClaXym0F.cjs.map +0 -1
  385. package/dist/management-DL0Uzsoz.js +0 -41
  386. package/dist/management-DL0Uzsoz.js.map +0 -1
  387. package/dist/management-DLdAQfqk.cjs +0 -79
  388. package/dist/management-DLdAQfqk.cjs.map +0 -1
  389. package/dist/management-DMZ8qpwr.cjs +0 -79
  390. package/dist/management-DMZ8qpwr.cjs.map +0 -1
  391. package/dist/management-DTzcC6aD.cjs.map +0 -1
  392. package/dist/management-DYLNyj9p.cjs +0 -79
  393. package/dist/management-DYLNyj9p.cjs.map +0 -1
  394. package/dist/management-Dag9u4t6.cjs +0 -79
  395. package/dist/management-Dag9u4t6.cjs.map +0 -1
  396. package/dist/management-DbMRdDBo.cjs +0 -79
  397. package/dist/management-DbMRdDBo.cjs.map +0 -1
  398. package/dist/management-DfnDAKmP.js +0 -41
  399. package/dist/management-DfnDAKmP.js.map +0 -1
  400. package/dist/management-DjBU1gtb.cjs +0 -79
  401. package/dist/management-DjBU1gtb.cjs.map +0 -1
  402. package/dist/management-DwCozsY8.js +0 -41
  403. package/dist/management-DwCozsY8.js.map +0 -1
  404. package/dist/management-H4m3ciJO.js +0 -32
  405. package/dist/management-H4m3ciJO.js.map +0 -1
  406. package/dist/management-Xo3A6Za3.cjs +0 -79
  407. package/dist/management-Xo3A6Za3.cjs.map +0 -1
  408. package/dist/management-ZU2YzOkr.js +0 -37
  409. package/dist/management-ZU2YzOkr.js.map +0 -1
  410. package/dist/management-baPDwA9n.cjs +0 -79
  411. package/dist/management-baPDwA9n.cjs.map +0 -1
  412. package/dist/management-jQGCvZNN.cjs +0 -70
  413. package/dist/management-jQGCvZNN.cjs.map +0 -1
  414. package/dist/management-ry_KteFK.cjs +0 -79
  415. package/dist/management-ry_KteFK.cjs.map +0 -1
  416. package/dist/management-xoZ7w3bI.cjs +0 -70
  417. package/dist/management-xoZ7w3bI.cjs.map +0 -1
  418. package/dist/resolve-dependencies-B2QggQAi.js +0 -729
  419. package/dist/resolve-dependencies-B2QggQAi.js.map +0 -1
  420. package/dist/resolve-dependencies-B6JDXvpr.js +0 -739
  421. package/dist/resolve-dependencies-B6JDXvpr.js.map +0 -1
  422. package/dist/resolve-dependencies-BA3u06uC.js +0 -731
  423. package/dist/resolve-dependencies-BA3u06uC.js.map +0 -1
  424. package/dist/resolve-dependencies-BAKAoD0U.js +0 -878
  425. package/dist/resolve-dependencies-BAKAoD0U.js.map +0 -1
  426. package/dist/resolve-dependencies-BFZQq60Y.cjs +0 -832
  427. package/dist/resolve-dependencies-BFZQq60Y.cjs.map +0 -1
  428. package/dist/resolve-dependencies-BGafS3Ww.js +0 -731
  429. package/dist/resolve-dependencies-BGafS3Ww.js.map +0 -1
  430. package/dist/resolve-dependencies-BHd34gS3.cjs +0 -832
  431. package/dist/resolve-dependencies-BHd34gS3.cjs.map +0 -1
  432. package/dist/resolve-dependencies-BNeayhbQ.cjs +0 -840
  433. package/dist/resolve-dependencies-BNeayhbQ.cjs.map +0 -1
  434. package/dist/resolve-dependencies-BT6TU2HF.cjs +0 -832
  435. package/dist/resolve-dependencies-BT6TU2HF.cjs.map +0 -1
  436. package/dist/resolve-dependencies-BWEMpuDy.js +0 -729
  437. package/dist/resolve-dependencies-BWEMpuDy.js.map +0 -1
  438. package/dist/resolve-dependencies-BiWkW2eS.js +0 -731
  439. package/dist/resolve-dependencies-BiWkW2eS.js.map +0 -1
  440. package/dist/resolve-dependencies-BjxCztYD.js +0 -739
  441. package/dist/resolve-dependencies-BjxCztYD.js.map +0 -1
  442. package/dist/resolve-dependencies-BlyBV0hB.cjs +0 -969
  443. package/dist/resolve-dependencies-BlyBV0hB.cjs.map +0 -1
  444. package/dist/resolve-dependencies-By26rT_i.js +0 -739
  445. package/dist/resolve-dependencies-By26rT_i.js.map +0 -1
  446. package/dist/resolve-dependencies-C9Kf7AzY.cjs +0 -832
  447. package/dist/resolve-dependencies-C9Kf7AzY.cjs.map +0 -1
  448. package/dist/resolve-dependencies-CTzV1txG.js +0 -731
  449. package/dist/resolve-dependencies-CTzV1txG.js.map +0 -1
  450. package/dist/resolve-dependencies-CWjuGHiF.cjs +0 -969
  451. package/dist/resolve-dependencies-CWjuGHiF.cjs.map +0 -1
  452. package/dist/resolve-dependencies-ClSsP0DJ.cjs +0 -830
  453. package/dist/resolve-dependencies-ClSsP0DJ.cjs.map +0 -1
  454. package/dist/resolve-dependencies-D0vTzZgs.js +0 -731
  455. package/dist/resolve-dependencies-D0vTzZgs.js.map +0 -1
  456. package/dist/resolve-dependencies-D2WnZMF-.cjs +0 -832
  457. package/dist/resolve-dependencies-D2WnZMF-.cjs.map +0 -1
  458. package/dist/resolve-dependencies-DCBLTeza.cjs +0 -969
  459. package/dist/resolve-dependencies-DCBLTeza.cjs.map +0 -1
  460. package/dist/resolve-dependencies-DMlqYJR2.js +0 -731
  461. package/dist/resolve-dependencies-DMlqYJR2.js.map +0 -1
  462. package/dist/resolve-dependencies-DP6U1EYB.cjs +0 -840
  463. package/dist/resolve-dependencies-DP6U1EYB.cjs.map +0 -1
  464. package/dist/resolve-dependencies-DSQNXvnV.cjs +0 -832
  465. package/dist/resolve-dependencies-DSQNXvnV.cjs.map +0 -1
  466. package/dist/resolve-dependencies-DV3HO_uH.js +0 -878
  467. package/dist/resolve-dependencies-DV3HO_uH.js.map +0 -1
  468. package/dist/resolve-dependencies-DXwMhP0Y.js +0 -878
  469. package/dist/resolve-dependencies-DXwMhP0Y.js.map +0 -1
  470. package/dist/resolve-dependencies-DbRWlt9u.js +0 -878
  471. package/dist/resolve-dependencies-DbRWlt9u.js.map +0 -1
  472. package/dist/resolve-dependencies-DcUUva2P.cjs +0 -832
  473. package/dist/resolve-dependencies-DcUUva2P.cjs.map +0 -1
  474. package/dist/resolve-dependencies-Dd8T6TLt.cjs +0 -832
  475. package/dist/resolve-dependencies-Dd8T6TLt.cjs.map +0 -1
  476. package/dist/resolve-dependencies-Dfdp_DZd.cjs +0 -840
  477. package/dist/resolve-dependencies-Dfdp_DZd.cjs.map +0 -1
  478. package/dist/resolve-dependencies-GJ8PNyNB.cjs +0 -969
  479. package/dist/resolve-dependencies-GJ8PNyNB.cjs.map +0 -1
  480. package/dist/resolve-dependencies-KSpTt4jy.cjs +0 -830
  481. package/dist/resolve-dependencies-KSpTt4jy.cjs.map +0 -1
  482. package/dist/resolve-dependencies-Nvjp4CwS.js +0 -731
  483. package/dist/resolve-dependencies-Nvjp4CwS.js.map +0 -1
  484. package/dist/resolve-dependencies-f-QUqYiL.js +0 -731
  485. package/dist/resolve-dependencies-f-QUqYiL.js.map +0 -1
  486. package/dist/tracked-B77j2g9M.js +0 -197
  487. package/dist/tracked-B77j2g9M.js.map +0 -1
  488. package/dist/tracked-BDVi2LKM.cjs +0 -227
  489. package/dist/tracked-BDVi2LKM.cjs.map +0 -1
  490. package/dist/tracked-BFdJCzL0.cjs +0 -242
  491. package/dist/tracked-BFdJCzL0.cjs.map +0 -1
  492. package/dist/tracked-BH-gX4T1.cjs +0 -227
  493. package/dist/tracked-BH-gX4T1.cjs.map +0 -1
  494. package/dist/tracked-BTHok3Dl.cjs +0 -227
  495. package/dist/tracked-BTHok3Dl.cjs.map +0 -1
  496. package/dist/tracked-BTbFkFeM.js +0 -212
  497. package/dist/tracked-BTbFkFeM.js.map +0 -1
  498. package/dist/tracked-BU_OBWqM.cjs +0 -242
  499. package/dist/tracked-BU_OBWqM.cjs.map +0 -1
  500. package/dist/tracked-BfctH2es.cjs +0 -242
  501. package/dist/tracked-BfctH2es.cjs.map +0 -1
  502. package/dist/tracked-BhQtzUhZ.js +0 -212
  503. package/dist/tracked-BhQtzUhZ.js.map +0 -1
  504. package/dist/tracked-BnqrYXiO.js +0 -212
  505. package/dist/tracked-BnqrYXiO.js.map +0 -1
  506. package/dist/tracked-BtgFOGup.js +0 -212
  507. package/dist/tracked-BtgFOGup.js.map +0 -1
  508. package/dist/tracked-C3nIS4J7.cjs +0 -242
  509. package/dist/tracked-C3nIS4J7.cjs.map +0 -1
  510. package/dist/tracked-C52awNV9.js +0 -197
  511. package/dist/tracked-C52awNV9.js.map +0 -1
  512. package/dist/tracked-CGzduF2m.js +0 -212
  513. package/dist/tracked-CGzduF2m.js.map +0 -1
  514. package/dist/tracked-CK_-ixtX.cjs +0 -227
  515. package/dist/tracked-CK_-ixtX.cjs.map +0 -1
  516. package/dist/tracked-CLlvURln.js +0 -212
  517. package/dist/tracked-CLlvURln.js.map +0 -1
  518. package/dist/tracked-CgHWmuGC.cjs +0 -242
  519. package/dist/tracked-CgHWmuGC.cjs.map +0 -1
  520. package/dist/tracked-CoAlC8fs.js +0 -197
  521. package/dist/tracked-CoAlC8fs.js.map +0 -1
  522. package/dist/tracked-D3Xjm1H1.cjs +0 -242
  523. package/dist/tracked-D3Xjm1H1.cjs.map +0 -1
  524. package/dist/tracked-DB6yMV5F.js +0 -212
  525. package/dist/tracked-DB6yMV5F.js.map +0 -1
  526. package/dist/tracked-DBn-bs_G.js +0 -197
  527. package/dist/tracked-DBn-bs_G.js.map +0 -1
  528. package/dist/tracked-DCfBaYjL.cjs +0 -227
  529. package/dist/tracked-DCfBaYjL.cjs.map +0 -1
  530. package/dist/tracked-DKduNLgI.js +0 -197
  531. package/dist/tracked-DKduNLgI.js.map +0 -1
  532. package/dist/tracked-DMBTDF0P.js +0 -197
  533. package/dist/tracked-DMBTDF0P.js.map +0 -1
  534. package/dist/tracked-DN3h3Rp1.js +0 -197
  535. package/dist/tracked-DN3h3Rp1.js.map +0 -1
  536. package/dist/tracked-DOGh1Q5Z.cjs +0 -242
  537. package/dist/tracked-DOGh1Q5Z.cjs.map +0 -1
  538. package/dist/tracked-DUkp4zve.cjs +0 -227
  539. package/dist/tracked-DUkp4zve.cjs.map +0 -1
  540. package/dist/tracked-D_ou7mYG.js +0 -212
  541. package/dist/tracked-D_ou7mYG.js.map +0 -1
  542. package/dist/tracked-Dcu6EATB.js +0 -197
  543. package/dist/tracked-Dcu6EATB.js.map +0 -1
  544. package/dist/tracked-GvAJQVAI.cjs +0 -271
  545. package/dist/tracked-GvAJQVAI.cjs.map +0 -1
  546. package/dist/tracked-O2lv-kJV.cjs +0 -242
  547. package/dist/tracked-O2lv-kJV.cjs.map +0 -1
  548. package/dist/tracked-WF6aXuAo.js +0 -223
  549. package/dist/tracked-WF6aXuAo.js.map +0 -1
  550. package/dist/tracked-d_sQWU3c.cjs +0 -227
  551. package/dist/tracked-d_sQWU3c.cjs.map +0 -1
  552. package/dist/tracked-n9TMK-30.cjs +0 -227
  553. package/dist/tracked-n9TMK-30.cjs.map +0 -1
  554. package/dist/tracked-njU-_pVa.cjs +0 -242
  555. package/dist/tracked-njU-_pVa.cjs.map +0 -1
  556. package/dist/tracked-zAgmKIlC.js +0 -212
  557. package/dist/tracked-zAgmKIlC.js.map +0 -1
  558. package/dist/tracking/dependency-manager.d.ts +0 -41
  559. package/dist/tracking/index.d.ts +0 -28
  560. package/dist/tracking/iteration-perf.bench.d.ts +0 -1
  561. package/dist/tracking/path-utils.d.ts +0 -69
  562. package/dist/tracking/resolve-dependencies.d.ts +0 -9
  563. package/dist/tracking/tracked.d.ts +0 -73
  564. package/dist/tracking/tracking-proxy.d.ts +0 -230
  565. package/dist/tracking.cjs +0 -21
  566. package/dist/tracking.d.cts +0 -9
  567. package/dist/tracking.d.ts +0 -9
  568. package/dist/tracking.js +0 -32
  569. package/dist/watch-BpwaUL8r.cjs.map +0 -1
  570. package/dist/watch-DWCqXllW.js.map +0 -1
package/dist/plugins.cjs CHANGED
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_StateContainerRegistry = require("./StateContainerRegistry-B4yVMYbx.cjs");
2
+ const require_StateContainerRegistry = require("./StateContainerRegistry-FWKzPfS-.cjs");
3
3
  exports.PluginManager = require_StateContainerRegistry.PluginManager;
4
4
  exports.getPluginManager = require_StateContainerRegistry.getPluginManager;
package/dist/plugins.js CHANGED
@@ -1,2 +1,2 @@
1
- import { c as PluginManager, n as getPluginManager } from "./StateContainerRegistry-DmmzYa7S.js";
1
+ import { c as PluginManager, n as getPluginManager } from "./StateContainerRegistry-B_ViBLvJ.js";
2
2
  export { PluginManager, getPluginManager };
@@ -1,9 +1,22 @@
1
1
  import type { ExtractArgs, StateContainerConstructor } from '../types/utilities';
2
- export declare function acquire<T extends StateContainerConstructor>(BlocClass: T, instanceKey?: string, refId?: string, args?: ExtractArgs<T>): InstanceType<T>;
3
2
  /**
4
- * Resolve the storage key an instance would be acquired under, given an
5
- * (optional) explicit key and construction args. Callers that both acquire and
6
- * release (e.g. `@blac/react` `useBloc`) must use this once and pass the same
7
- * resolved key to both, so the ref is dropped under the key it was taken.
3
+ * Acquire an instance with ref tracking (ownership semantics). Instance
4
+ * identity is derived purely from `args` (via the class's `static key(args)`,
5
+ * a structural hash of `args`, or the default sentinel when there are none).
6
+ *
7
+ * @param BlocClass - The StateContainer class constructor
8
+ * @param opts.args - Construction/identity args; derives the instance key
9
+ * @param opts.refId - Named reference ID for debugging; auto-generated if omitted
8
10
  */
9
- export declare function resolveInstanceKey<T extends StateContainerConstructor>(BlocClass: T, instanceKey: string | undefined, args?: ExtractArgs<T>): string;
11
+ export declare function acquire<T extends StateContainerConstructor>(BlocClass: T, opts?: {
12
+ args?: ExtractArgs<T>;
13
+ refId?: string;
14
+ }): InstanceType<T>;
15
+ /**
16
+ * Resolve the storage key an instance would be acquired under, given its
17
+ * construction `args`. This is the canonical key-computation path. Callers that
18
+ * both acquire and release against the `@internal` registry tier (e.g.
19
+ * `@blac/react` `useBloc`) must use this once and pass the same resolved key to
20
+ * both, so the ref is dropped under the key it was taken.
21
+ */
22
+ export declare function resolveInstanceKey<T extends StateContainerConstructor>(BlocClass: T, args?: ExtractArgs<T>): string;
@@ -1,6 +1,17 @@
1
- import type { StateContainerConstructor } from '../types/utilities';
2
- export declare function borrow<T extends StateContainerConstructor>(BlocClass: T, instanceKey?: string): InstanceType<T>;
3
- export declare function borrowSafe<T extends StateContainerConstructor>(BlocClass: T, instanceKey?: string): {
1
+ import type { ExtractArgs, StateContainerConstructor } from '../types/utilities';
2
+ /**
3
+ * How to identify the instance to borrow: the same `args` shape `useBloc`
4
+ * accepts, resolved through the class's `static key(args)` so call sites use
5
+ * the *same* shape they pass to `useBloc` instead of hand-deriving the key.
6
+ *
7
+ * `borrowSafe(ChannelBloc, { args: { channelId } })` and
8
+ * `useBloc(ChannelBloc, { args: { channelId } })` therefore always agree.
9
+ */
10
+ export type BorrowTarget<T extends StateContainerConstructor> = {
11
+ args?: ExtractArgs<T>;
12
+ };
13
+ export declare function borrow<T extends StateContainerConstructor>(BlocClass: T, target?: BorrowTarget<T>): InstanceType<T>;
14
+ export declare function borrowSafe<T extends StateContainerConstructor>(BlocClass: T, target?: BorrowTarget<T>): {
4
15
  error: Error;
5
16
  instance: null;
6
17
  } | {
@@ -1,2 +1,8 @@
1
1
  import type { ExtractArgs, StateContainerConstructor } from '../types/utilities';
2
- export declare function ensure<T extends StateContainerConstructor>(BlocClass: T, instanceKey?: string, args?: ExtractArgs<T>): InstanceType<T>;
2
+ /**
3
+ * Ensure an instance exists without taking ownership (no ref added). Instance
4
+ * identity is derived purely from `args`, matching `acquire`.
5
+ */
6
+ export declare function ensure<T extends StateContainerConstructor>(BlocClass: T, opts?: {
7
+ args?: ExtractArgs<T>;
8
+ }): InstanceType<T>;
@@ -1,5 +1,6 @@
1
1
  export { acquire, resolveInstanceKey } from './acquire';
2
2
  export { borrow, borrowSafe } from './borrow';
3
+ export type { BorrowTarget } from './borrow';
3
4
  export { ensure } from './ensure';
4
5
  export { release } from './release';
5
6
  export { hasInstance, getRefCount, getRefIds, getAll, forEach, } from './queries';
@@ -1,6 +1,12 @@
1
- import type { StateContainerConstructor, InstanceReadonlyState } from '../types/utilities';
2
- export declare function hasInstance<T extends StateContainerConstructor>(BlocClass: T, instanceKey?: string): boolean;
3
- export declare function getRefCount<T extends StateContainerConstructor>(BlocClass: T, instanceKey?: string): number;
4
- export declare function getRefIds<T extends StateContainerConstructor>(BlocClass: T, instanceKey?: string): string[];
1
+ import type { ExtractArgs, StateContainerConstructor, InstanceReadonlyState } from '../types/utilities';
2
+ export declare function hasInstance<T extends StateContainerConstructor>(BlocClass: T, opts?: {
3
+ args?: ExtractArgs<T>;
4
+ }): boolean;
5
+ export declare function getRefCount<T extends StateContainerConstructor>(BlocClass: T, opts?: {
6
+ args?: ExtractArgs<T>;
7
+ }): number;
8
+ export declare function getRefIds<T extends StateContainerConstructor>(BlocClass: T, opts?: {
9
+ args?: ExtractArgs<T>;
10
+ }): string[];
5
11
  export declare function getAll<T extends StateContainerConstructor>(BlocClass: T): InstanceReadonlyState<T>[];
6
12
  export declare function forEach<T extends StateContainerConstructor>(BlocClass: T, callback: (instance: InstanceReadonlyState<T>) => void): void;
@@ -1,2 +1,14 @@
1
- import type { StateContainerConstructor } from '../types/utilities';
2
- export declare function release<T extends StateContainerConstructor>(BlocClass: T, instanceKey?: string, forceDispose?: boolean, refId?: string): void;
1
+ import type { ExtractArgs, StateContainerConstructor } from '../types/utilities';
2
+ /**
3
+ * Release a reference to an instance. Instance identity is derived purely from
4
+ * `args` (must match the `args` it was acquired with).
5
+ *
6
+ * @param opts.args - Construction/identity args; derives the instance key
7
+ * @param opts.refId - The specific ref to drop; drops one arbitrary ref if omitted
8
+ * @param opts.forceDispose - Force immediate disposal regardless of refs
9
+ */
10
+ export declare function release<T extends StateContainerConstructor>(BlocClass: T, opts?: {
11
+ args?: ExtractArgs<T>;
12
+ refId?: string;
13
+ forceDispose?: boolean;
14
+ }): void;
package/dist/testing.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_StateContainerRegistry = require("./StateContainerRegistry-B4yVMYbx.cjs");
3
- const require_Cubit = require("./Cubit-CWP8Ddzx.cjs");
4
- const require_config = require("./config-B_4xXpvK.cjs");
5
- const require_ensure = require("./ensure-BB6xHQAF.cjs");
2
+ const require_StateContainerRegistry = require("./StateContainerRegistry-FWKzPfS-.cjs");
3
+ const require_ensure = require("./ensure-CLQEx0Nn.cjs");
4
+ const require_config = require("./config-DVMnlHLv.cjs");
5
+ const require_acquire = require("./acquire-DHEOEVcj.cjs");
6
6
  //#region src/testing.ts
7
7
  /** Synthetic owner id used by test helpers for pre-wired deps. */
8
8
  const TESTING_DEPS_OWNER = "testing-deps";
@@ -39,14 +39,14 @@ function blacTestSetup() {
39
39
  require_config.setRegistry(savedRegistry);
40
40
  });
41
41
  }
42
- const DEFAULT_KEY = "default";
43
- function registerOverride(BlocClass, instance, instanceKey) {
44
- const key = instanceKey ?? DEFAULT_KEY;
45
- require_config.getRegistry().insertInstance(BlocClass, key, instance, new Map([["testing-override", 1]]));
42
+ function registerOverride(BlocClass, instance, args) {
43
+ const registry = require_config.getRegistry();
44
+ const key = require_acquire.resolveInstanceKey(BlocClass, args);
45
+ registry.insertInstance(BlocClass, key, instance, new Map([["testing-override", 1]]));
46
46
  }
47
- function overrideEnsure(BlocClass, instance, fn, instanceKey = DEFAULT_KEY) {
47
+ function overrideEnsure(BlocClass, instance, fn, args) {
48
48
  return withTestRegistry(() => {
49
- registerOverride(BlocClass, instance, instanceKey);
49
+ registerOverride(BlocClass, instance, args);
50
50
  return fn();
51
51
  });
52
52
  }
@@ -54,7 +54,7 @@ function createCubitStub(BlocClass, options) {
54
54
  const instance = new BlocClass();
55
55
  if (options?.args != null) instance.initConfig({ args: options.args });
56
56
  if (options?.state != null) {
57
- if (instance instanceof require_Cubit.Cubit) {
57
+ if (instance instanceof require_ensure.Cubit) {
58
58
  const currentState = instance.state;
59
59
  if (typeof currentState === "object" && currentState !== null && typeof options.state === "object" && options.state !== null) instance.patch(options.state);
60
60
  else instance.emit(options.state);
@@ -63,20 +63,20 @@ function createCubitStub(BlocClass, options) {
63
63
  if (options?.methods) {
64
64
  for (const [key, impl] of Object.entries(options.methods)) if (typeof impl === "function") instance[key] = impl;
65
65
  }
66
- if (options?.deps != null) instance[require_Cubit.APPLY_DEPS](TESTING_DEPS_OWNER, options.deps);
66
+ if (options?.deps != null) instance[require_ensure.APPLY_DEPS](TESTING_DEPS_OWNER, options.deps);
67
67
  return instance;
68
68
  }
69
- function withBlocState(BlocClass, state, instanceKey) {
70
- const instance = require_ensure.ensure(BlocClass, instanceKey);
71
- if (instance instanceof require_Cubit.Cubit) {
69
+ function withBlocState(BlocClass, state, args) {
70
+ const instance = require_ensure.ensure(BlocClass, { args });
71
+ if (instance instanceof require_ensure.Cubit) {
72
72
  const currentState = instance.state;
73
73
  if (typeof currentState === "object" && currentState !== null && typeof state === "object" && state !== null) instance.patch(state);
74
74
  else instance.emit(state);
75
75
  }
76
76
  return instance;
77
77
  }
78
- function withBlocMethod(BlocClass, methodName, impl, instanceKey) {
79
- const instance = require_ensure.ensure(BlocClass, instanceKey);
78
+ function withBlocMethod(BlocClass, methodName, impl, args) {
79
+ const instance = require_ensure.ensure(BlocClass, { args });
80
80
  instance[methodName] = impl;
81
81
  return instance;
82
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testing.cjs","names":["StateContainerRegistry","getRegistry","Cubit","APPLY_DEPS","ensure"],"sources":["../src/testing.ts"],"sourcesContent":["import { Cubit } from './core/Cubit';\nimport { StateContainerRegistry } from './core/StateContainerRegistry';\nimport { APPLY_DEPS } from './core/symbols';\nimport { ensure, getRegistry, setRegistry } from './registry';\nimport type {\n ExtractArgs,\n ExtractDeps,\n ExtractState,\n StateContainerConstructor,\n} from './types/utilities';\n\n/** Synthetic owner id used by test helpers for pre-wired deps. */\nconst TESTING_DEPS_OWNER = 'testing-deps';\n\ndeclare const beforeEach: (fn: () => void) => void;\ndeclare const afterEach: (fn: () => void) => void;\n\n// --- createTestRegistry + withTestRegistry ---\n\nexport function createTestRegistry(): StateContainerRegistry {\n return new StateContainerRegistry();\n}\n\nexport function withTestRegistry<T>(\n fn: (registry: StateContainerRegistry) => T,\n): T {\n const previous = getRegistry();\n const testRegistry = createTestRegistry();\n setRegistry(testRegistry);\n try {\n const result = fn(testRegistry);\n if (result instanceof Promise) {\n return result.then(\n (value) => {\n setRegistry(previous);\n return value;\n },\n (error) => {\n setRegistry(previous);\n throw error;\n },\n ) as T;\n }\n setRegistry(previous);\n return result;\n } catch (error) {\n setRegistry(previous);\n throw error;\n }\n}\n\n// --- blacTestSetup ---\n\nexport function blacTestSetup(): void {\n let savedRegistry: StateContainerRegistry;\n beforeEach(() => {\n savedRegistry = getRegistry();\n setRegistry(new StateContainerRegistry());\n });\n afterEach(() => {\n setRegistry(savedRegistry);\n });\n}\n\n// --- registerOverride + overrideEnsure ---\n\nconst DEFAULT_KEY = 'default';\n\nexport function registerOverride<T extends StateContainerConstructor>(\n BlocClass: T,\n instance: InstanceType<T>,\n instanceKey?: string,\n): void {\n const key = instanceKey ?? DEFAULT_KEY;\n const registry = getRegistry();\n registry.insertInstance(\n BlocClass,\n key,\n instance,\n new Map([['testing-override', 1]]),\n );\n}\n\nexport function overrideEnsure<T extends StateContainerConstructor, R>(\n BlocClass: T,\n instance: InstanceType<T>,\n fn: () => R,\n instanceKey: string = DEFAULT_KEY,\n): R {\n return withTestRegistry(() => {\n registerOverride(BlocClass, instance, instanceKey);\n return fn();\n });\n}\n\n// --- createCubitStub ---\n\ntype MethodKeys<T> = {\n [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;\n}[keyof T];\n\nexport interface CubitStubOptions<T extends StateContainerConstructor> {\n state?: ExtractState<T> extends Record<string, any>\n ? Partial<ExtractState<T>>\n : ExtractState<T>;\n methods?: Partial<\n Record<MethodKeys<InstanceType<T>>, (...args: any[]) => any>\n >;\n /**\n * Args to pass to init(). If the bloc's Args type is not void, supplying\n * args here causes initConfig({ args }) to be called so init() runs.\n */\n args?: ExtractArgs<T> extends void ? never : ExtractArgs<T>;\n /**\n * Deps slice to pre-wire via the core [APPLY_DEPS] path (synthetic owner\n * \"testing-deps\"), so onDepsChanged fires during tests.\n */\n deps?: Partial<ExtractDeps<T>>;\n}\n\nexport function createCubitStub<T extends StateContainerConstructor>(\n BlocClass: T,\n options?: CubitStubOptions<T>,\n): InstanceType<T> {\n const instance = new BlocClass() as InstanceType<T>;\n\n // Run init() if args are supplied — goes through the same initConfig path\n // that the registry uses, so lifecycle hooks fire correctly.\n if (options?.args != null) {\n instance.initConfig({ args: options.args });\n }\n\n if (options?.state != null) {\n if (instance instanceof Cubit) {\n const currentState = instance.state;\n if (\n typeof currentState === 'object' &&\n currentState !== null &&\n typeof options.state === 'object' &&\n options.state !== null\n ) {\n instance.patch(options.state as any);\n } else {\n instance.emit(options.state as any);\n }\n }\n }\n if (options?.methods) {\n for (const [key, impl] of Object.entries(options.methods)) {\n if (typeof impl === 'function') {\n (instance as any)[key] = impl;\n }\n }\n }\n\n // Pre-wire deps via the core merge path so onDepsChanged fires in tests.\n if (options?.deps != null) {\n (instance as any)[APPLY_DEPS](TESTING_DEPS_OWNER, options.deps);\n }\n\n return instance;\n}\n\n// --- withBlocState ---\n\nexport function withBlocState<T extends StateContainerConstructor>(\n BlocClass: T,\n state: ExtractState<T> extends Record<string, any>\n ? Partial<ExtractState<T>>\n : ExtractState<T>,\n instanceKey?: string,\n): InstanceType<T> {\n const instance = ensure(BlocClass, instanceKey);\n if (instance instanceof Cubit) {\n const currentState = instance.state;\n if (\n typeof currentState === 'object' &&\n currentState !== null &&\n typeof state === 'object' &&\n state !== null\n ) {\n instance.patch(state as any);\n } else {\n instance.emit(state as any);\n }\n }\n return instance;\n}\n\n// --- withBlocMethod ---\n\nexport function withBlocMethod<T extends StateContainerConstructor>(\n BlocClass: T,\n methodName: keyof InstanceType<T>,\n impl: (...args: any[]) => any,\n instanceKey?: string,\n): InstanceType<T> {\n const instance = ensure(BlocClass, instanceKey);\n (instance as any)[methodName] = impl;\n return instance;\n}\n\n// --- flushBlocUpdates ---\n\n/**\n * Drain pending microtasks so any channel-flushed effects (subscribe()\n * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run\n * before the next assertion.\n *\n * The default `MicrotaskScheduler` coalesces emits within a tick; tests\n * that emit and then assert on listener side-effects need `await flush()`\n * (or its alias `flushBlocUpdates()`) between the two.\n */\nexport async function flush(): Promise<void> {\n // queueMicrotask wins the race against the channel's own queued flush —\n // we resolve after the channel has drained its current pending flush.\n await Promise.resolve();\n await Promise.resolve();\n}\n\n/** @deprecated Alias for `flush()`. */\nexport async function flushBlocUpdates(): Promise<void> {\n await flush();\n}\n"],"mappings":";;;;;;;AAYA,MAAM,qBAAqB;AAO3B,SAAgB,qBAA6C;CAC3D,OAAO,IAAIA,+BAAAA,wBAAwB;;AAGrC,SAAgB,iBACd,IACG;CACH,MAAM,WAAWC,eAAAA,aAAa;CAC9B,MAAM,eAAe,oBAAoB;CACzC,eAAA,YAAY,aAAa;CACzB,IAAI;EACF,MAAM,SAAS,GAAG,aAAa;EAC/B,IAAI,kBAAkB,SACpB,OAAO,OAAO,MACX,UAAU;GACT,eAAA,YAAY,SAAS;GACrB,OAAO;MAER,UAAU;GACT,eAAA,YAAY,SAAS;GACrB,MAAM;IAET;EAEH,eAAA,YAAY,SAAS;EACrB,OAAO;UACA,OAAO;EACd,eAAA,YAAY,SAAS;EACrB,MAAM;;;AAMV,SAAgB,gBAAsB;CACpC,IAAI;CACJ,iBAAiB;EACf,gBAAgBA,eAAAA,aAAa;EAC7B,eAAA,YAAY,IAAID,+BAAAA,wBAAwB,CAAC;GACzC;CACF,gBAAgB;EACd,eAAA,YAAY,cAAc;GAC1B;;AAKJ,MAAM,cAAc;AAEpB,SAAgB,iBACd,WACA,UACA,aACM;CACN,MAAM,MAAM,eAAe;CAE3B,eADiBC,aACT,CAAC,eACP,WACA,KACA,UACA,IAAI,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CACnC;;AAGH,SAAgB,eACd,WACA,UACA,IACA,cAAsB,aACnB;CACH,OAAO,uBAAuB;EAC5B,iBAAiB,WAAW,UAAU,YAAY;EAClD,OAAO,IAAI;GACX;;AA4BJ,SAAgB,gBACd,WACA,SACiB;CACjB,MAAM,WAAW,IAAI,WAAW;CAIhC,IAAI,SAAS,QAAQ,MACnB,SAAS,WAAW,EAAE,MAAM,QAAQ,MAAM,CAAC;CAG7C,IAAI,SAAS,SAAS;MAChB,oBAAoBC,cAAAA,OAAO;GAC7B,MAAM,eAAe,SAAS;GAC9B,IACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,QAAQ,UAAU,YACzB,QAAQ,UAAU,MAElB,SAAS,MAAM,QAAQ,MAAa;QAEpC,SAAS,KAAK,QAAQ,MAAa;;;CAIzC,IAAI,SAAS;OACN,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,QAAQ,QAAQ,EACvD,IAAI,OAAO,SAAS,YAClB,SAAkB,OAAO;;CAM/B,IAAI,SAAS,QAAQ,MACnB,SAAkBC,cAAAA,YAAY,oBAAoB,QAAQ,KAAK;CAGjE,OAAO;;AAKT,SAAgB,cACd,WACA,OAGA,aACiB;CACjB,MAAM,WAAWC,eAAAA,OAAO,WAAW,YAAY;CAC/C,IAAI,oBAAoBF,cAAAA,OAAO;EAC7B,MAAM,eAAe,SAAS;EAC9B,IACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,UAAU,YACjB,UAAU,MAEV,SAAS,MAAM,MAAa;OAE5B,SAAS,KAAK,MAAa;;CAG/B,OAAO;;AAKT,SAAgB,eACd,WACA,YACA,MACA,aACiB;CACjB,MAAM,WAAWE,eAAAA,OAAO,WAAW,YAAY;CAC/C,SAAkB,cAAc;CAChC,OAAO;;;;;;;;;;;AAcT,eAAsB,QAAuB;CAG3C,MAAM,QAAQ,SAAS;CACvB,MAAM,QAAQ,SAAS;;;AAIzB,eAAsB,mBAAkC;CACtD,MAAM,OAAO"}
1
+ {"version":3,"file":"testing.cjs","names":["StateContainerRegistry","getRegistry","resolveInstanceKey","Cubit","APPLY_DEPS","ensure"],"sources":["../src/testing.ts"],"sourcesContent":["import { Cubit } from './core/Cubit';\nimport { StateContainerRegistry } from './core/StateContainerRegistry';\nimport { APPLY_DEPS } from './core/symbols';\nimport { ensure, getRegistry, setRegistry } from './registry';\nimport { resolveInstanceKey } from './registry/acquire';\nimport type {\n ExtractArgs,\n ExtractDeps,\n ExtractState,\n StateContainerConstructor,\n} from './types/utilities';\n\n/** Synthetic owner id used by test helpers for pre-wired deps. */\nconst TESTING_DEPS_OWNER = 'testing-deps';\n\ndeclare const beforeEach: (fn: () => void) => void;\ndeclare const afterEach: (fn: () => void) => void;\n\n// --- createTestRegistry + withTestRegistry ---\n\nexport function createTestRegistry(): StateContainerRegistry {\n return new StateContainerRegistry();\n}\n\nexport function withTestRegistry<T>(\n fn: (registry: StateContainerRegistry) => T,\n): T {\n const previous = getRegistry();\n const testRegistry = createTestRegistry();\n setRegistry(testRegistry);\n try {\n const result = fn(testRegistry);\n if (result instanceof Promise) {\n return result.then(\n (value) => {\n setRegistry(previous);\n return value;\n },\n (error) => {\n setRegistry(previous);\n throw error;\n },\n ) as T;\n }\n setRegistry(previous);\n return result;\n } catch (error) {\n setRegistry(previous);\n throw error;\n }\n}\n\n// --- blacTestSetup ---\n\nexport function blacTestSetup(): void {\n let savedRegistry: StateContainerRegistry;\n beforeEach(() => {\n savedRegistry = getRegistry();\n setRegistry(new StateContainerRegistry());\n });\n afterEach(() => {\n setRegistry(savedRegistry);\n });\n}\n\n// --- registerOverride + overrideEnsure ---\n\nexport function registerOverride<T extends StateContainerConstructor>(\n BlocClass: T,\n instance: InstanceType<T>,\n args?: ExtractArgs<T>,\n): void {\n const registry = getRegistry();\n const key = resolveInstanceKey(BlocClass, args);\n registry.insertInstance(\n BlocClass,\n key,\n instance,\n new Map([['testing-override', 1]]),\n );\n}\n\nexport function overrideEnsure<T extends StateContainerConstructor, R>(\n BlocClass: T,\n instance: InstanceType<T>,\n fn: () => R,\n args?: ExtractArgs<T>,\n): R {\n return withTestRegistry(() => {\n registerOverride(BlocClass, instance, args);\n return fn();\n });\n}\n\n// --- createCubitStub ---\n\ntype MethodKeys<T> = {\n [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;\n}[keyof T];\n\nexport interface CubitStubOptions<T extends StateContainerConstructor> {\n state?: ExtractState<T> extends Record<string, any>\n ? Partial<ExtractState<T>>\n : ExtractState<T>;\n methods?: Partial<\n Record<MethodKeys<InstanceType<T>>, (...args: any[]) => any>\n >;\n /**\n * Args to pass to init(). If the bloc's Args type is not void, supplying\n * args here causes initConfig({ args }) to be called so init() runs.\n */\n args?: ExtractArgs<T> extends void ? never : ExtractArgs<T>;\n /**\n * Deps slice to pre-wire via the core [APPLY_DEPS] path (synthetic owner\n * \"testing-deps\"), so onDepsChanged fires during tests.\n */\n deps?: Partial<ExtractDeps<T>>;\n}\n\nexport function createCubitStub<T extends StateContainerConstructor>(\n BlocClass: T,\n options?: CubitStubOptions<T>,\n): InstanceType<T> {\n const instance = new BlocClass() as InstanceType<T>;\n\n // Run init() if args are supplied — goes through the same initConfig path\n // that the registry uses, so lifecycle hooks fire correctly.\n if (options?.args != null) {\n instance.initConfig({ args: options.args });\n }\n\n if (options?.state != null) {\n if (instance instanceof Cubit) {\n const currentState = instance.state;\n if (\n typeof currentState === 'object' &&\n currentState !== null &&\n typeof options.state === 'object' &&\n options.state !== null\n ) {\n instance.patch(options.state as any);\n } else {\n instance.emit(options.state as any);\n }\n }\n }\n if (options?.methods) {\n for (const [key, impl] of Object.entries(options.methods)) {\n if (typeof impl === 'function') {\n (instance as any)[key] = impl;\n }\n }\n }\n\n // Pre-wire deps via the core merge path so onDepsChanged fires in tests.\n if (options?.deps != null) {\n (instance as any)[APPLY_DEPS](TESTING_DEPS_OWNER, options.deps);\n }\n\n return instance;\n}\n\n// --- withBlocState ---\n\nexport function withBlocState<T extends StateContainerConstructor>(\n BlocClass: T,\n state: ExtractState<T> extends Record<string, any>\n ? Partial<ExtractState<T>>\n : ExtractState<T>,\n args?: ExtractArgs<T>,\n): InstanceType<T> {\n const instance = ensure(BlocClass, { args });\n if (instance instanceof Cubit) {\n const currentState = instance.state;\n if (\n typeof currentState === 'object' &&\n currentState !== null &&\n typeof state === 'object' &&\n state !== null\n ) {\n instance.patch(state as any);\n } else {\n instance.emit(state as any);\n }\n }\n return instance;\n}\n\n// --- withBlocMethod ---\n\nexport function withBlocMethod<T extends StateContainerConstructor>(\n BlocClass: T,\n methodName: keyof InstanceType<T>,\n impl: (...args: any[]) => any,\n args?: ExtractArgs<T>,\n): InstanceType<T> {\n const instance = ensure(BlocClass, { args });\n (instance as any)[methodName] = impl;\n return instance;\n}\n\n// --- flushBlocUpdates ---\n\n/**\n * Drain pending microtasks so any channel-flushed effects (subscribe()\n * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run\n * before the next assertion.\n *\n * The default `MicrotaskScheduler` coalesces emits within a tick; tests\n * that emit and then assert on listener side-effects need `await flush()`\n * (or its alias `flushBlocUpdates()`) between the two.\n */\nexport async function flush(): Promise<void> {\n // queueMicrotask wins the race against the channel's own queued flush —\n // we resolve after the channel has drained its current pending flush.\n await Promise.resolve();\n await Promise.resolve();\n}\n\n/** @deprecated Alias for `flush()`. */\nexport async function flushBlocUpdates(): Promise<void> {\n await flush();\n}\n"],"mappings":";;;;;;;AAaA,MAAM,qBAAqB;AAO3B,SAAgB,qBAA6C;CAC3D,OAAO,IAAIA,+BAAAA,uBAAuB;AACpC;AAEA,SAAgB,iBACd,IACG;CACH,MAAM,WAAWC,eAAAA,YAAY;CAC7B,MAAM,eAAe,mBAAmB;CACxC,eAAA,YAAY,YAAY;CACxB,IAAI;EACF,MAAM,SAAS,GAAG,YAAY;EAC9B,IAAI,kBAAkB,SACpB,OAAO,OAAO,MACX,UAAU;GACT,eAAA,YAAY,QAAQ;GACpB,OAAO;EACT,IACC,UAAU;GACT,eAAA,YAAY,QAAQ;GACpB,MAAM;EACR,CACF;EAEF,eAAA,YAAY,QAAQ;EACpB,OAAO;CACT,SAAS,OAAO;EACd,eAAA,YAAY,QAAQ;EACpB,MAAM;CACR;AACF;AAIA,SAAgB,gBAAsB;CACpC,IAAI;CACJ,iBAAiB;EACf,gBAAgBA,eAAAA,YAAY;EAC5B,eAAA,YAAY,IAAID,+BAAAA,uBAAuB,CAAC;CAC1C,CAAC;CACD,gBAAgB;EACd,eAAA,YAAY,aAAa;CAC3B,CAAC;AACH;AAIA,SAAgB,iBACd,WACA,UACA,MACM;CACN,MAAM,WAAWC,eAAAA,YAAY;CAC7B,MAAM,MAAMC,gBAAAA,mBAAmB,WAAW,IAAI;CAC9C,SAAS,eACP,WACA,KACA,UACA,IAAI,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CACnC;AACF;AAEA,SAAgB,eACd,WACA,UACA,IACA,MACG;CACH,OAAO,uBAAuB;EAC5B,iBAAiB,WAAW,UAAU,IAAI;EAC1C,OAAO,GAAG;CACZ,CAAC;AACH;AA2BA,SAAgB,gBACd,WACA,SACiB;CACjB,MAAM,WAAW,IAAI,UAAU;CAI/B,IAAI,SAAS,QAAQ,MACnB,SAAS,WAAW,EAAE,MAAM,QAAQ,KAAK,CAAC;CAG5C,IAAI,SAAS,SAAS;MAChB,oBAAoBC,eAAAA,OAAO;GAC7B,MAAM,eAAe,SAAS;GAC9B,IACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,QAAQ,UAAU,YACzB,QAAQ,UAAU,MAElB,SAAS,MAAM,QAAQ,KAAY;QAEnC,SAAS,KAAK,QAAQ,KAAY;EAEtC;;CAEF,IAAI,SAAS;OACN,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,QAAQ,OAAO,GACtD,IAAI,OAAO,SAAS,YAClB,SAAkB,OAAO;CAAA;CAM/B,IAAI,SAAS,QAAQ,MACnB,SAAkBC,eAAAA,YAAY,oBAAoB,QAAQ,IAAI;CAGhE,OAAO;AACT;AAIA,SAAgB,cACd,WACA,OAGA,MACiB;CACjB,MAAM,WAAWC,eAAAA,OAAO,WAAW,EAAE,KAAK,CAAC;CAC3C,IAAI,oBAAoBF,eAAAA,OAAO;EAC7B,MAAM,eAAe,SAAS;EAC9B,IACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,UAAU,YACjB,UAAU,MAEV,SAAS,MAAM,KAAY;OAE3B,SAAS,KAAK,KAAY;CAE9B;CACA,OAAO;AACT;AAIA,SAAgB,eACd,WACA,YACA,MACA,MACiB;CACjB,MAAM,WAAWE,eAAAA,OAAO,WAAW,EAAE,KAAK,CAAC;CAC3C,SAAkB,cAAc;CAChC,OAAO;AACT;;;;;;;;;;AAaA,eAAsB,QAAuB;CAG3C,MAAM,QAAQ,QAAQ;CACtB,MAAM,QAAQ,QAAQ;AACxB;;AAGA,eAAsB,mBAAkC;CACtD,MAAM,MAAM;AACd"}
@@ -3,8 +3,8 @@ import type { ExtractArgs, ExtractDeps, ExtractState, StateContainerConstructor
3
3
  export declare function createTestRegistry(): StateContainerRegistry;
4
4
  export declare function withTestRegistry<T>(fn: (registry: StateContainerRegistry) => T): T;
5
5
  export declare function blacTestSetup(): void;
6
- export declare function registerOverride<T extends StateContainerConstructor>(BlocClass: T, instance: InstanceType<T>, instanceKey?: string): void;
7
- export declare function overrideEnsure<T extends StateContainerConstructor, R>(BlocClass: T, instance: InstanceType<T>, fn: () => R, instanceKey?: string): R;
6
+ export declare function registerOverride<T extends StateContainerConstructor>(BlocClass: T, instance: InstanceType<T>, args?: ExtractArgs<T>): void;
7
+ export declare function overrideEnsure<T extends StateContainerConstructor, R>(BlocClass: T, instance: InstanceType<T>, fn: () => R, args?: ExtractArgs<T>): R;
8
8
  type MethodKeys<T> = {
9
9
  [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
10
10
  }[keyof T];
@@ -23,8 +23,8 @@ export interface CubitStubOptions<T extends StateContainerConstructor> {
23
23
  deps?: Partial<ExtractDeps<T>>;
24
24
  }
25
25
  export declare function createCubitStub<T extends StateContainerConstructor>(BlocClass: T, options?: CubitStubOptions<T>): InstanceType<T>;
26
- export declare function withBlocState<T extends StateContainerConstructor>(BlocClass: T, state: ExtractState<T> extends Record<string, any> ? Partial<ExtractState<T>> : ExtractState<T>, instanceKey?: string): InstanceType<T>;
27
- export declare function withBlocMethod<T extends StateContainerConstructor>(BlocClass: T, methodName: keyof InstanceType<T>, impl: (...args: any[]) => any, instanceKey?: string): InstanceType<T>;
26
+ export declare function withBlocState<T extends StateContainerConstructor>(BlocClass: T, state: ExtractState<T> extends Record<string, any> ? Partial<ExtractState<T>> : ExtractState<T>, args?: ExtractArgs<T>): InstanceType<T>;
27
+ export declare function withBlocMethod<T extends StateContainerConstructor>(BlocClass: T, methodName: keyof InstanceType<T>, impl: (...args: any[]) => any, args?: ExtractArgs<T>): InstanceType<T>;
28
28
  /**
29
29
  * Drain pending microtasks so any channel-flushed effects (subscribe()
30
30
  * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run
package/dist/testing.d.ts CHANGED
@@ -3,8 +3,8 @@ import type { ExtractArgs, ExtractDeps, ExtractState, StateContainerConstructor
3
3
  export declare function createTestRegistry(): StateContainerRegistry;
4
4
  export declare function withTestRegistry<T>(fn: (registry: StateContainerRegistry) => T): T;
5
5
  export declare function blacTestSetup(): void;
6
- export declare function registerOverride<T extends StateContainerConstructor>(BlocClass: T, instance: InstanceType<T>, instanceKey?: string): void;
7
- export declare function overrideEnsure<T extends StateContainerConstructor, R>(BlocClass: T, instance: InstanceType<T>, fn: () => R, instanceKey?: string): R;
6
+ export declare function registerOverride<T extends StateContainerConstructor>(BlocClass: T, instance: InstanceType<T>, args?: ExtractArgs<T>): void;
7
+ export declare function overrideEnsure<T extends StateContainerConstructor, R>(BlocClass: T, instance: InstanceType<T>, fn: () => R, args?: ExtractArgs<T>): R;
8
8
  type MethodKeys<T> = {
9
9
  [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
10
10
  }[keyof T];
@@ -23,8 +23,8 @@ export interface CubitStubOptions<T extends StateContainerConstructor> {
23
23
  deps?: Partial<ExtractDeps<T>>;
24
24
  }
25
25
  export declare function createCubitStub<T extends StateContainerConstructor>(BlocClass: T, options?: CubitStubOptions<T>): InstanceType<T>;
26
- export declare function withBlocState<T extends StateContainerConstructor>(BlocClass: T, state: ExtractState<T> extends Record<string, any> ? Partial<ExtractState<T>> : ExtractState<T>, instanceKey?: string): InstanceType<T>;
27
- export declare function withBlocMethod<T extends StateContainerConstructor>(BlocClass: T, methodName: keyof InstanceType<T>, impl: (...args: any[]) => any, instanceKey?: string): InstanceType<T>;
26
+ export declare function withBlocState<T extends StateContainerConstructor>(BlocClass: T, state: ExtractState<T> extends Record<string, any> ? Partial<ExtractState<T>> : ExtractState<T>, args?: ExtractArgs<T>): InstanceType<T>;
27
+ export declare function withBlocMethod<T extends StateContainerConstructor>(BlocClass: T, methodName: keyof InstanceType<T>, impl: (...args: any[]) => any, args?: ExtractArgs<T>): InstanceType<T>;
28
28
  /**
29
29
  * Drain pending microtasks so any channel-flushed effects (subscribe()
30
30
  * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run
package/dist/testing.js CHANGED
@@ -1,7 +1,7 @@
1
- import { t as StateContainerRegistry } from "./StateContainerRegistry-DmmzYa7S.js";
2
- import { r as APPLY_DEPS, t as Cubit } from "./Cubit-VJuu2tt9.js";
3
- import { r as setRegistry, t as getRegistry } from "./config-DoHx0Xsl.js";
4
- import { t as ensure } from "./ensure-mkL-3qh8.js";
1
+ import { t as StateContainerRegistry } from "./StateContainerRegistry-B_ViBLvJ.js";
2
+ import { i as APPLY_DEPS, n as Cubit, t as ensure } from "./ensure-CPMiGvov.js";
3
+ import { r as setRegistry, t as getRegistry } from "./config-8pyOC5gv.js";
4
+ import { n as resolveInstanceKey } from "./acquire-Don7499S.js";
5
5
  //#region src/testing.ts
6
6
  /** Synthetic owner id used by test helpers for pre-wired deps. */
7
7
  const TESTING_DEPS_OWNER = "testing-deps";
@@ -38,14 +38,14 @@ function blacTestSetup() {
38
38
  setRegistry(savedRegistry);
39
39
  });
40
40
  }
41
- const DEFAULT_KEY = "default";
42
- function registerOverride(BlocClass, instance, instanceKey) {
43
- const key = instanceKey ?? DEFAULT_KEY;
44
- getRegistry().insertInstance(BlocClass, key, instance, new Map([["testing-override", 1]]));
41
+ function registerOverride(BlocClass, instance, args) {
42
+ const registry = getRegistry();
43
+ const key = resolveInstanceKey(BlocClass, args);
44
+ registry.insertInstance(BlocClass, key, instance, new Map([["testing-override", 1]]));
45
45
  }
46
- function overrideEnsure(BlocClass, instance, fn, instanceKey = DEFAULT_KEY) {
46
+ function overrideEnsure(BlocClass, instance, fn, args) {
47
47
  return withTestRegistry(() => {
48
- registerOverride(BlocClass, instance, instanceKey);
48
+ registerOverride(BlocClass, instance, args);
49
49
  return fn();
50
50
  });
51
51
  }
@@ -65,8 +65,8 @@ function createCubitStub(BlocClass, options) {
65
65
  if (options?.deps != null) instance[APPLY_DEPS](TESTING_DEPS_OWNER, options.deps);
66
66
  return instance;
67
67
  }
68
- function withBlocState(BlocClass, state, instanceKey) {
69
- const instance = ensure(BlocClass, instanceKey);
68
+ function withBlocState(BlocClass, state, args) {
69
+ const instance = ensure(BlocClass, { args });
70
70
  if (instance instanceof Cubit) {
71
71
  const currentState = instance.state;
72
72
  if (typeof currentState === "object" && currentState !== null && typeof state === "object" && state !== null) instance.patch(state);
@@ -74,8 +74,8 @@ function withBlocState(BlocClass, state, instanceKey) {
74
74
  }
75
75
  return instance;
76
76
  }
77
- function withBlocMethod(BlocClass, methodName, impl, instanceKey) {
78
- const instance = ensure(BlocClass, instanceKey);
77
+ function withBlocMethod(BlocClass, methodName, impl, args) {
78
+ const instance = ensure(BlocClass, { args });
79
79
  instance[methodName] = impl;
80
80
  return instance;
81
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","names":[],"sources":["../src/testing.ts"],"sourcesContent":["import { Cubit } from './core/Cubit';\nimport { StateContainerRegistry } from './core/StateContainerRegistry';\nimport { APPLY_DEPS } from './core/symbols';\nimport { ensure, getRegistry, setRegistry } from './registry';\nimport type {\n ExtractArgs,\n ExtractDeps,\n ExtractState,\n StateContainerConstructor,\n} from './types/utilities';\n\n/** Synthetic owner id used by test helpers for pre-wired deps. */\nconst TESTING_DEPS_OWNER = 'testing-deps';\n\ndeclare const beforeEach: (fn: () => void) => void;\ndeclare const afterEach: (fn: () => void) => void;\n\n// --- createTestRegistry + withTestRegistry ---\n\nexport function createTestRegistry(): StateContainerRegistry {\n return new StateContainerRegistry();\n}\n\nexport function withTestRegistry<T>(\n fn: (registry: StateContainerRegistry) => T,\n): T {\n const previous = getRegistry();\n const testRegistry = createTestRegistry();\n setRegistry(testRegistry);\n try {\n const result = fn(testRegistry);\n if (result instanceof Promise) {\n return result.then(\n (value) => {\n setRegistry(previous);\n return value;\n },\n (error) => {\n setRegistry(previous);\n throw error;\n },\n ) as T;\n }\n setRegistry(previous);\n return result;\n } catch (error) {\n setRegistry(previous);\n throw error;\n }\n}\n\n// --- blacTestSetup ---\n\nexport function blacTestSetup(): void {\n let savedRegistry: StateContainerRegistry;\n beforeEach(() => {\n savedRegistry = getRegistry();\n setRegistry(new StateContainerRegistry());\n });\n afterEach(() => {\n setRegistry(savedRegistry);\n });\n}\n\n// --- registerOverride + overrideEnsure ---\n\nconst DEFAULT_KEY = 'default';\n\nexport function registerOverride<T extends StateContainerConstructor>(\n BlocClass: T,\n instance: InstanceType<T>,\n instanceKey?: string,\n): void {\n const key = instanceKey ?? DEFAULT_KEY;\n const registry = getRegistry();\n registry.insertInstance(\n BlocClass,\n key,\n instance,\n new Map([['testing-override', 1]]),\n );\n}\n\nexport function overrideEnsure<T extends StateContainerConstructor, R>(\n BlocClass: T,\n instance: InstanceType<T>,\n fn: () => R,\n instanceKey: string = DEFAULT_KEY,\n): R {\n return withTestRegistry(() => {\n registerOverride(BlocClass, instance, instanceKey);\n return fn();\n });\n}\n\n// --- createCubitStub ---\n\ntype MethodKeys<T> = {\n [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;\n}[keyof T];\n\nexport interface CubitStubOptions<T extends StateContainerConstructor> {\n state?: ExtractState<T> extends Record<string, any>\n ? Partial<ExtractState<T>>\n : ExtractState<T>;\n methods?: Partial<\n Record<MethodKeys<InstanceType<T>>, (...args: any[]) => any>\n >;\n /**\n * Args to pass to init(). If the bloc's Args type is not void, supplying\n * args here causes initConfig({ args }) to be called so init() runs.\n */\n args?: ExtractArgs<T> extends void ? never : ExtractArgs<T>;\n /**\n * Deps slice to pre-wire via the core [APPLY_DEPS] path (synthetic owner\n * \"testing-deps\"), so onDepsChanged fires during tests.\n */\n deps?: Partial<ExtractDeps<T>>;\n}\n\nexport function createCubitStub<T extends StateContainerConstructor>(\n BlocClass: T,\n options?: CubitStubOptions<T>,\n): InstanceType<T> {\n const instance = new BlocClass() as InstanceType<T>;\n\n // Run init() if args are supplied — goes through the same initConfig path\n // that the registry uses, so lifecycle hooks fire correctly.\n if (options?.args != null) {\n instance.initConfig({ args: options.args });\n }\n\n if (options?.state != null) {\n if (instance instanceof Cubit) {\n const currentState = instance.state;\n if (\n typeof currentState === 'object' &&\n currentState !== null &&\n typeof options.state === 'object' &&\n options.state !== null\n ) {\n instance.patch(options.state as any);\n } else {\n instance.emit(options.state as any);\n }\n }\n }\n if (options?.methods) {\n for (const [key, impl] of Object.entries(options.methods)) {\n if (typeof impl === 'function') {\n (instance as any)[key] = impl;\n }\n }\n }\n\n // Pre-wire deps via the core merge path so onDepsChanged fires in tests.\n if (options?.deps != null) {\n (instance as any)[APPLY_DEPS](TESTING_DEPS_OWNER, options.deps);\n }\n\n return instance;\n}\n\n// --- withBlocState ---\n\nexport function withBlocState<T extends StateContainerConstructor>(\n BlocClass: T,\n state: ExtractState<T> extends Record<string, any>\n ? Partial<ExtractState<T>>\n : ExtractState<T>,\n instanceKey?: string,\n): InstanceType<T> {\n const instance = ensure(BlocClass, instanceKey);\n if (instance instanceof Cubit) {\n const currentState = instance.state;\n if (\n typeof currentState === 'object' &&\n currentState !== null &&\n typeof state === 'object' &&\n state !== null\n ) {\n instance.patch(state as any);\n } else {\n instance.emit(state as any);\n }\n }\n return instance;\n}\n\n// --- withBlocMethod ---\n\nexport function withBlocMethod<T extends StateContainerConstructor>(\n BlocClass: T,\n methodName: keyof InstanceType<T>,\n impl: (...args: any[]) => any,\n instanceKey?: string,\n): InstanceType<T> {\n const instance = ensure(BlocClass, instanceKey);\n (instance as any)[methodName] = impl;\n return instance;\n}\n\n// --- flushBlocUpdates ---\n\n/**\n * Drain pending microtasks so any channel-flushed effects (subscribe()\n * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run\n * before the next assertion.\n *\n * The default `MicrotaskScheduler` coalesces emits within a tick; tests\n * that emit and then assert on listener side-effects need `await flush()`\n * (or its alias `flushBlocUpdates()`) between the two.\n */\nexport async function flush(): Promise<void> {\n // queueMicrotask wins the race against the channel's own queued flush —\n // we resolve after the channel has drained its current pending flush.\n await Promise.resolve();\n await Promise.resolve();\n}\n\n/** @deprecated Alias for `flush()`. */\nexport async function flushBlocUpdates(): Promise<void> {\n await flush();\n}\n"],"mappings":";;;;;;AAYA,MAAM,qBAAqB;AAO3B,SAAgB,qBAA6C;CAC3D,OAAO,IAAI,wBAAwB;;AAGrC,SAAgB,iBACd,IACG;CACH,MAAM,WAAW,aAAa;CAC9B,MAAM,eAAe,oBAAoB;CACzC,YAAY,aAAa;CACzB,IAAI;EACF,MAAM,SAAS,GAAG,aAAa;EAC/B,IAAI,kBAAkB,SACpB,OAAO,OAAO,MACX,UAAU;GACT,YAAY,SAAS;GACrB,OAAO;MAER,UAAU;GACT,YAAY,SAAS;GACrB,MAAM;IAET;EAEH,YAAY,SAAS;EACrB,OAAO;UACA,OAAO;EACd,YAAY,SAAS;EACrB,MAAM;;;AAMV,SAAgB,gBAAsB;CACpC,IAAI;CACJ,iBAAiB;EACf,gBAAgB,aAAa;EAC7B,YAAY,IAAI,wBAAwB,CAAC;GACzC;CACF,gBAAgB;EACd,YAAY,cAAc;GAC1B;;AAKJ,MAAM,cAAc;AAEpB,SAAgB,iBACd,WACA,UACA,aACM;CACN,MAAM,MAAM,eAAe;CAE3B,aAAQ,CAAC,eACP,WACA,KACA,UACA,IAAI,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CACnC;;AAGH,SAAgB,eACd,WACA,UACA,IACA,cAAsB,aACnB;CACH,OAAO,uBAAuB;EAC5B,iBAAiB,WAAW,UAAU,YAAY;EAClD,OAAO,IAAI;GACX;;AA4BJ,SAAgB,gBACd,WACA,SACiB;CACjB,MAAM,WAAW,IAAI,WAAW;CAIhC,IAAI,SAAS,QAAQ,MACnB,SAAS,WAAW,EAAE,MAAM,QAAQ,MAAM,CAAC;CAG7C,IAAI,SAAS,SAAS;MAChB,oBAAoB,OAAO;GAC7B,MAAM,eAAe,SAAS;GAC9B,IACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,QAAQ,UAAU,YACzB,QAAQ,UAAU,MAElB,SAAS,MAAM,QAAQ,MAAa;QAEpC,SAAS,KAAK,QAAQ,MAAa;;;CAIzC,IAAI,SAAS;OACN,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,QAAQ,QAAQ,EACvD,IAAI,OAAO,SAAS,YAClB,SAAkB,OAAO;;CAM/B,IAAI,SAAS,QAAQ,MACnB,SAAkB,YAAY,oBAAoB,QAAQ,KAAK;CAGjE,OAAO;;AAKT,SAAgB,cACd,WACA,OAGA,aACiB;CACjB,MAAM,WAAW,OAAO,WAAW,YAAY;CAC/C,IAAI,oBAAoB,OAAO;EAC7B,MAAM,eAAe,SAAS;EAC9B,IACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,UAAU,YACjB,UAAU,MAEV,SAAS,MAAM,MAAa;OAE5B,SAAS,KAAK,MAAa;;CAG/B,OAAO;;AAKT,SAAgB,eACd,WACA,YACA,MACA,aACiB;CACjB,MAAM,WAAW,OAAO,WAAW,YAAY;CAC/C,SAAkB,cAAc;CAChC,OAAO;;;;;;;;;;;AAcT,eAAsB,QAAuB;CAG3C,MAAM,QAAQ,SAAS;CACvB,MAAM,QAAQ,SAAS;;;AAIzB,eAAsB,mBAAkC;CACtD,MAAM,OAAO"}
1
+ {"version":3,"file":"testing.js","names":[],"sources":["../src/testing.ts"],"sourcesContent":["import { Cubit } from './core/Cubit';\nimport { StateContainerRegistry } from './core/StateContainerRegistry';\nimport { APPLY_DEPS } from './core/symbols';\nimport { ensure, getRegistry, setRegistry } from './registry';\nimport { resolveInstanceKey } from './registry/acquire';\nimport type {\n ExtractArgs,\n ExtractDeps,\n ExtractState,\n StateContainerConstructor,\n} from './types/utilities';\n\n/** Synthetic owner id used by test helpers for pre-wired deps. */\nconst TESTING_DEPS_OWNER = 'testing-deps';\n\ndeclare const beforeEach: (fn: () => void) => void;\ndeclare const afterEach: (fn: () => void) => void;\n\n// --- createTestRegistry + withTestRegistry ---\n\nexport function createTestRegistry(): StateContainerRegistry {\n return new StateContainerRegistry();\n}\n\nexport function withTestRegistry<T>(\n fn: (registry: StateContainerRegistry) => T,\n): T {\n const previous = getRegistry();\n const testRegistry = createTestRegistry();\n setRegistry(testRegistry);\n try {\n const result = fn(testRegistry);\n if (result instanceof Promise) {\n return result.then(\n (value) => {\n setRegistry(previous);\n return value;\n },\n (error) => {\n setRegistry(previous);\n throw error;\n },\n ) as T;\n }\n setRegistry(previous);\n return result;\n } catch (error) {\n setRegistry(previous);\n throw error;\n }\n}\n\n// --- blacTestSetup ---\n\nexport function blacTestSetup(): void {\n let savedRegistry: StateContainerRegistry;\n beforeEach(() => {\n savedRegistry = getRegistry();\n setRegistry(new StateContainerRegistry());\n });\n afterEach(() => {\n setRegistry(savedRegistry);\n });\n}\n\n// --- registerOverride + overrideEnsure ---\n\nexport function registerOverride<T extends StateContainerConstructor>(\n BlocClass: T,\n instance: InstanceType<T>,\n args?: ExtractArgs<T>,\n): void {\n const registry = getRegistry();\n const key = resolveInstanceKey(BlocClass, args);\n registry.insertInstance(\n BlocClass,\n key,\n instance,\n new Map([['testing-override', 1]]),\n );\n}\n\nexport function overrideEnsure<T extends StateContainerConstructor, R>(\n BlocClass: T,\n instance: InstanceType<T>,\n fn: () => R,\n args?: ExtractArgs<T>,\n): R {\n return withTestRegistry(() => {\n registerOverride(BlocClass, instance, args);\n return fn();\n });\n}\n\n// --- createCubitStub ---\n\ntype MethodKeys<T> = {\n [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;\n}[keyof T];\n\nexport interface CubitStubOptions<T extends StateContainerConstructor> {\n state?: ExtractState<T> extends Record<string, any>\n ? Partial<ExtractState<T>>\n : ExtractState<T>;\n methods?: Partial<\n Record<MethodKeys<InstanceType<T>>, (...args: any[]) => any>\n >;\n /**\n * Args to pass to init(). If the bloc's Args type is not void, supplying\n * args here causes initConfig({ args }) to be called so init() runs.\n */\n args?: ExtractArgs<T> extends void ? never : ExtractArgs<T>;\n /**\n * Deps slice to pre-wire via the core [APPLY_DEPS] path (synthetic owner\n * \"testing-deps\"), so onDepsChanged fires during tests.\n */\n deps?: Partial<ExtractDeps<T>>;\n}\n\nexport function createCubitStub<T extends StateContainerConstructor>(\n BlocClass: T,\n options?: CubitStubOptions<T>,\n): InstanceType<T> {\n const instance = new BlocClass() as InstanceType<T>;\n\n // Run init() if args are supplied — goes through the same initConfig path\n // that the registry uses, so lifecycle hooks fire correctly.\n if (options?.args != null) {\n instance.initConfig({ args: options.args });\n }\n\n if (options?.state != null) {\n if (instance instanceof Cubit) {\n const currentState = instance.state;\n if (\n typeof currentState === 'object' &&\n currentState !== null &&\n typeof options.state === 'object' &&\n options.state !== null\n ) {\n instance.patch(options.state as any);\n } else {\n instance.emit(options.state as any);\n }\n }\n }\n if (options?.methods) {\n for (const [key, impl] of Object.entries(options.methods)) {\n if (typeof impl === 'function') {\n (instance as any)[key] = impl;\n }\n }\n }\n\n // Pre-wire deps via the core merge path so onDepsChanged fires in tests.\n if (options?.deps != null) {\n (instance as any)[APPLY_DEPS](TESTING_DEPS_OWNER, options.deps);\n }\n\n return instance;\n}\n\n// --- withBlocState ---\n\nexport function withBlocState<T extends StateContainerConstructor>(\n BlocClass: T,\n state: ExtractState<T> extends Record<string, any>\n ? Partial<ExtractState<T>>\n : ExtractState<T>,\n args?: ExtractArgs<T>,\n): InstanceType<T> {\n const instance = ensure(BlocClass, { args });\n if (instance instanceof Cubit) {\n const currentState = instance.state;\n if (\n typeof currentState === 'object' &&\n currentState !== null &&\n typeof state === 'object' &&\n state !== null\n ) {\n instance.patch(state as any);\n } else {\n instance.emit(state as any);\n }\n }\n return instance;\n}\n\n// --- withBlocMethod ---\n\nexport function withBlocMethod<T extends StateContainerConstructor>(\n BlocClass: T,\n methodName: keyof InstanceType<T>,\n impl: (...args: any[]) => any,\n args?: ExtractArgs<T>,\n): InstanceType<T> {\n const instance = ensure(BlocClass, { args });\n (instance as any)[methodName] = impl;\n return instance;\n}\n\n// --- flushBlocUpdates ---\n\n/**\n * Drain pending microtasks so any channel-flushed effects (subscribe()\n * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run\n * before the next assertion.\n *\n * The default `MicrotaskScheduler` coalesces emits within a tick; tests\n * that emit and then assert on listener side-effects need `await flush()`\n * (or its alias `flushBlocUpdates()`) between the two.\n */\nexport async function flush(): Promise<void> {\n // queueMicrotask wins the race against the channel's own queued flush —\n // we resolve after the channel has drained its current pending flush.\n await Promise.resolve();\n await Promise.resolve();\n}\n\n/** @deprecated Alias for `flush()`. */\nexport async function flushBlocUpdates(): Promise<void> {\n await flush();\n}\n"],"mappings":";;;;;;AAaA,MAAM,qBAAqB;AAO3B,SAAgB,qBAA6C;CAC3D,OAAO,IAAI,uBAAuB;AACpC;AAEA,SAAgB,iBACd,IACG;CACH,MAAM,WAAW,YAAY;CAC7B,MAAM,eAAe,mBAAmB;CACxC,YAAY,YAAY;CACxB,IAAI;EACF,MAAM,SAAS,GAAG,YAAY;EAC9B,IAAI,kBAAkB,SACpB,OAAO,OAAO,MACX,UAAU;GACT,YAAY,QAAQ;GACpB,OAAO;EACT,IACC,UAAU;GACT,YAAY,QAAQ;GACpB,MAAM;EACR,CACF;EAEF,YAAY,QAAQ;EACpB,OAAO;CACT,SAAS,OAAO;EACd,YAAY,QAAQ;EACpB,MAAM;CACR;AACF;AAIA,SAAgB,gBAAsB;CACpC,IAAI;CACJ,iBAAiB;EACf,gBAAgB,YAAY;EAC5B,YAAY,IAAI,uBAAuB,CAAC;CAC1C,CAAC;CACD,gBAAgB;EACd,YAAY,aAAa;CAC3B,CAAC;AACH;AAIA,SAAgB,iBACd,WACA,UACA,MACM;CACN,MAAM,WAAW,YAAY;CAC7B,MAAM,MAAM,mBAAmB,WAAW,IAAI;CAC9C,SAAS,eACP,WACA,KACA,UACA,IAAI,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CACnC;AACF;AAEA,SAAgB,eACd,WACA,UACA,IACA,MACG;CACH,OAAO,uBAAuB;EAC5B,iBAAiB,WAAW,UAAU,IAAI;EAC1C,OAAO,GAAG;CACZ,CAAC;AACH;AA2BA,SAAgB,gBACd,WACA,SACiB;CACjB,MAAM,WAAW,IAAI,UAAU;CAI/B,IAAI,SAAS,QAAQ,MACnB,SAAS,WAAW,EAAE,MAAM,QAAQ,KAAK,CAAC;CAG5C,IAAI,SAAS,SAAS;MAChB,oBAAoB,OAAO;GAC7B,MAAM,eAAe,SAAS;GAC9B,IACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,QAAQ,UAAU,YACzB,QAAQ,UAAU,MAElB,SAAS,MAAM,QAAQ,KAAY;QAEnC,SAAS,KAAK,QAAQ,KAAY;EAEtC;;CAEF,IAAI,SAAS;OACN,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,QAAQ,OAAO,GACtD,IAAI,OAAO,SAAS,YAClB,SAAkB,OAAO;CAAA;CAM/B,IAAI,SAAS,QAAQ,MACnB,SAAkB,YAAY,oBAAoB,QAAQ,IAAI;CAGhE,OAAO;AACT;AAIA,SAAgB,cACd,WACA,OAGA,MACiB;CACjB,MAAM,WAAW,OAAO,WAAW,EAAE,KAAK,CAAC;CAC3C,IAAI,oBAAoB,OAAO;EAC7B,MAAM,eAAe,SAAS;EAC9B,IACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,UAAU,YACjB,UAAU,MAEV,SAAS,MAAM,KAAY;OAE3B,SAAS,KAAK,KAAY;CAE9B;CACA,OAAO;AACT;AAIA,SAAgB,eACd,WACA,YACA,MACA,MACiB;CACjB,MAAM,WAAW,OAAO,WAAW,EAAE,KAAK,CAAC;CAC3C,SAAkB,cAAc;CAChC,OAAO;AACT;;;;;;;;;;AAaA,eAAsB,QAAuB;CAG3C,MAAM,QAAQ,QAAQ;CACtB,MAAM,QAAQ,QAAQ;AACxB;;AAGA,eAAsB,mBAAkC;CACtD,MAAM,MAAM;AACd"}
@@ -42,21 +42,10 @@ export type ExtractConstructorArgs<T> = T extends new (...args: infer P) => any
42
42
  */
43
43
  export type BlocInstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (...args: any) => infer R ? R : any;
44
44
  /**
45
- * Constructor type for StateContainer classes with static registry methods.
45
+ * Constructor type for StateContainer classes.
46
46
  * Used for type-safe hook parameters.
47
47
  * @template TBloc - The StateContainer instance type
48
48
  */
49
49
  export type BlocConstructor<S extends object = any, T extends new (...args: any[]) => StateContainer<S, any, any> = new (...args: any[]) => StateContainer<S, any, any>> = (new (...args: any[]) => InstanceType<T>) & {
50
- acquire(instanceKey?: string, ...args: any[]): InstanceType<T>;
51
- borrow(instanceKey?: string, ...args: any[]): InstanceType<T> | null;
52
- borrowSafe(instanceKey?: string, ...args: any[]): {
53
- error: Error;
54
- instance: null;
55
- } | {
56
- error: null;
57
- instance: InstanceType<T>;
58
- };
59
- ensure(instanceKey?: string): InstanceType<T>;
60
- release(instanceKey?: string): void;
61
50
  keepAlive?: boolean;
62
51
  };
package/dist/types.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_branded = require("./branded-BSeA_mZO.cjs");
2
+ const require_branded = require("./branded-BybA0_xw.cjs");
3
3
  exports.instanceId = require_branded.instanceId;
package/dist/types.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as instanceId } from "./branded-DwtzSsg0.js";
1
+ import { t as instanceId } from "./branded-DkbUzncc.js";
2
2
  export { instanceId };
@@ -27,15 +27,6 @@ export declare function isKeepAliveClass<T extends StateContainerConstructor>(Ty
27
27
  * @returns true if the class has `static __excludeFromDevTools = true`
28
28
  */
29
29
  export declare function isExcludedFromDevTools<T extends StateContainerConstructor>(Type: T): boolean;
30
- /**
31
- * Check if a class is marked as isolated.
32
- * Isolated classes get a fresh, per-mount instance from `useBloc`
33
- * (auto-keyed via React's `useId()`), instead of sharing the default
34
- * instance with sibling call sites.
35
- * @param Type - The class constructor to check
36
- * @returns true if the class has `static isolated = true`
37
- */
38
- export declare function isIsolatedClass<T extends StateContainerConstructor>(Type: T): boolean;
39
30
  /**
40
31
  * Get the per-class equality function set via `@blac({ equality })`, if any.
41
32
  * @param Type - The class constructor to check
@@ -1,26 +1,29 @@
1
- import type { StateContainerConstructor } from '../types/utilities';
1
+ import type { ExtractArgs, StateContainerConstructor } from '../types/utilities';
2
2
  declare const STOP: unique symbol;
3
3
  type StopSymbol = typeof STOP;
4
4
  declare const BLOC_REF_MARKER: unique symbol;
5
5
  /**
6
- * Reference to a specific bloc instance by class and instance ID.
6
+ * Reference to a specific bloc instance, identified by class + the resolved
7
+ * key derived from its `args`.
7
8
  */
8
9
  export interface BlocRef<T extends StateContainerConstructor> {
9
10
  [BLOC_REF_MARKER]: true;
10
11
  blocClass: T;
12
+ /** @internal The resolved instance key (derived from `args`). */
11
13
  instanceId: string;
12
14
  }
13
15
  /**
14
- * Create a reference to a specific bloc instance.
16
+ * Create a reference to a specific bloc instance, identified by its `args`.
17
+ * The key is derived the same way `useBloc`/`acquire` derive it.
15
18
  *
16
19
  * @example
17
20
  * ```ts
18
- * watch(instance(UserBloc, 'user-123'), (userBloc) => {
21
+ * watch(instance(UserBloc, { userId: 'user-123' }), (userBloc) => {
19
22
  * console.log(userBloc.state.name);
20
23
  * });
21
24
  * ```
22
25
  */
23
- export declare function instance<T extends StateContainerConstructor>(BlocClass: T, instanceId: string): BlocRef<T>;
26
+ export declare function instance<T extends StateContainerConstructor>(BlocClass: T, args?: ExtractArgs<T>): BlocRef<T>;
24
27
  type BlocInput = StateContainerConstructor | BlocRef<StateContainerConstructor>;
25
28
  type ExtractInstance<T> = T extends BlocRef<infer C> ? InstanceType<C> : T extends StateContainerConstructor ? InstanceType<T> : never;
26
29
  type ExtractInstances<T extends readonly BlocInput[]> = {
@@ -1,32 +1,34 @@
1
- import { l as BLAC_DEFAULTS } from "./StateContainerRegistry-DmmzYa7S.js";
2
- import { t as ensure } from "./ensure-mkL-3qh8.js";
1
+ import { t as getRegistry } from "./config-8pyOC5gv.js";
2
+ import { n as resolveInstanceKey } from "./acquire-Don7499S.js";
3
3
  import { ALL_PATHS } from "@dirtytalk/structural";
4
4
  //#region src/watch/watch.ts
5
5
  const STOP = Symbol("watch.STOP");
6
6
  const BLOC_REF_MARKER = Symbol("BlocRef");
7
7
  /**
8
- * Create a reference to a specific bloc instance.
8
+ * Create a reference to a specific bloc instance, identified by its `args`.
9
+ * The key is derived the same way `useBloc`/`acquire` derive it.
9
10
  *
10
11
  * @example
11
12
  * ```ts
12
- * watch(instance(UserBloc, 'user-123'), (userBloc) => {
13
+ * watch(instance(UserBloc, { userId: 'user-123' }), (userBloc) => {
13
14
  * console.log(userBloc.state.name);
14
15
  * });
15
16
  * ```
16
17
  */
17
- function instance(BlocClass, instanceId) {
18
+ function instance(BlocClass, args) {
18
19
  return {
19
20
  [BLOC_REF_MARKER]: true,
20
21
  blocClass: BlocClass,
21
- instanceId
22
+ instanceId: resolveInstanceKey(BlocClass, args)
22
23
  };
23
24
  }
24
25
  function isBlocRef(input) {
25
26
  return typeof input === "object" && input !== null && BLOC_REF_MARKER in input;
26
27
  }
27
28
  function resolveBloc(input) {
28
- if (isBlocRef(input)) return ensure(input.blocClass, input.instanceId);
29
- return ensure(input, BLAC_DEFAULTS.DEFAULT_INSTANCE_KEY);
29
+ const registry = getRegistry();
30
+ if (isBlocRef(input)) return registry.ensure(input.blocClass, input.instanceId);
31
+ return registry.ensure(input, registry.resolveKey(input, void 0, void 0));
30
32
  }
31
33
  function isArray(input) {
32
34
  return Array.isArray(input);
@@ -54,4 +56,4 @@ const watch = Object.assign(watchImpl, { STOP });
54
56
  //#endregion
55
57
  export { watch as n, instance as t };
56
58
 
57
- //# sourceMappingURL=watch-DWCqXllW.js.map
59
+ //# sourceMappingURL=watch-BmC-Tyqg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-BmC-Tyqg.js","names":[],"sources":["../src/watch/watch.ts"],"sourcesContent":["import { ALL_PATHS } from '@dirtytalk/structural';\nimport { getRegistry } from '../registry';\nimport { resolveInstanceKey } from '../registry/acquire';\nimport type {\n ExtractArgs,\n StateContainerConstructor,\n StateContainerInstance,\n} from '../types/utilities';\n\nconst STOP: unique symbol = Symbol('watch.STOP');\ntype StopSymbol = typeof STOP;\n\nconst BLOC_REF_MARKER = Symbol('BlocRef');\n\n/**\n * Reference to a specific bloc instance, identified by class + the resolved\n * key derived from its `args`.\n */\nexport interface BlocRef<T extends StateContainerConstructor> {\n [BLOC_REF_MARKER]: true;\n blocClass: T;\n /** @internal The resolved instance key (derived from `args`). */\n instanceId: string;\n}\n\n/**\n * Create a reference to a specific bloc instance, identified by its `args`.\n * The key is derived the same way `useBloc`/`acquire` derive it.\n *\n * @example\n * ```ts\n * watch(instance(UserBloc, { userId: 'user-123' }), (userBloc) => {\n * console.log(userBloc.state.name);\n * });\n * ```\n */\nexport function instance<T extends StateContainerConstructor>(\n BlocClass: T,\n args?: ExtractArgs<T>,\n): BlocRef<T> {\n return {\n [BLOC_REF_MARKER]: true,\n blocClass: BlocClass,\n instanceId: resolveInstanceKey(BlocClass, args),\n };\n}\n\nfunction isBlocRef(\n input: unknown,\n): input is BlocRef<StateContainerConstructor> {\n return (\n typeof input === 'object' && input !== null && BLOC_REF_MARKER in input\n );\n}\n\ntype BlocInput = StateContainerConstructor | BlocRef<StateContainerConstructor>;\n\ntype ExtractInstance<T> =\n T extends BlocRef<infer C>\n ? InstanceType<C>\n : T extends StateContainerConstructor\n ? InstanceType<T>\n : never;\n\ntype ExtractInstances<T extends readonly BlocInput[]> = {\n [K in keyof T]: ExtractInstance<T[K]>;\n};\n\n/**\n * Watch function signature for single bloc.\n */\nexport interface WatchSingleFn {\n <T extends StateContainerConstructor>(\n bloc: T | BlocRef<T>,\n callback: (bloc: InstanceType<T>) => void | StopSymbol,\n ): () => void;\n\n STOP: StopSymbol;\n}\n\n/**\n * Watch function signature for multiple blocs.\n */\nexport interface WatchMultipleFn {\n <T extends readonly BlocInput[]>(\n blocs: T,\n callback: (blocs: ExtractInstances<T>) => void | StopSymbol,\n ): () => void;\n\n STOP: StopSymbol;\n}\n\n/**\n * Combined watch function type.\n */\nexport interface WatchFn extends WatchSingleFn {\n <T extends readonly BlocInput[]>(\n blocs: T,\n callback: (blocs: ExtractInstances<T>) => void | StopSymbol,\n ): () => void;\n}\n\nfunction resolveBloc(input: BlocInput): StateContainerInstance {\n const registry = getRegistry();\n if (isBlocRef(input)) {\n return registry.ensure(input.blocClass, input.instanceId);\n }\n return registry.ensure(\n input,\n registry.resolveKey(input, undefined, undefined),\n );\n}\n\nfunction isArray(input: unknown): input is readonly BlocInput[] {\n return Array.isArray(input);\n}\n\n/**\n * Watch one or more blocs for state changes.\n *\n * Thin wrapper around `container.channel.subscribe(ALL_PATHS, ...)`. The\n * callback fires once immediately, then on every state change of any of the\n * passed blocs. Returning `watch.STOP` from the callback tears down all\n * subscriptions.\n *\n * Note: subscriptions are microtask-deferred (per the DirtyChannel default\n * scheduler), so callbacks land asynchronously after `emit()`.\n *\n * @example Single bloc\n * ```ts\n * const unwatch = watch(UserBloc, (userBloc) => {\n * console.log(userBloc.state.name);\n * });\n * ```\n *\n * @example Multiple blocs\n * ```ts\n * const unwatch = watch(\n * [UserBloc, SettingsBloc] as const,\n * ([userBloc, settingsBloc]) => {\n * console.log(userBloc.state.name, settingsBloc.state.theme);\n * }\n * );\n * ```\n *\n * @example With specific instance\n * ```ts\n * const unwatch = watch(\n * instance(UserBloc, { userId: 'user-123' }),\n * (userBloc) => {\n * console.log(userBloc.state.name);\n * }\n * );\n * ```\n *\n * @example Stop watching from callback\n * ```ts\n * const unwatch = watch(UserBloc, (userBloc) => {\n * if (userBloc.state.done) {\n * return watch.STOP;\n * }\n * });\n * ```\n */\nfunction watchImpl<T extends StateContainerConstructor>(\n bloc: T | BlocRef<T>,\n callback: (bloc: InstanceType<T>) => void | StopSymbol,\n): () => void;\n\nfunction watchImpl<T extends readonly BlocInput[]>(\n blocs: T,\n callback: (blocs: ExtractInstances<T>) => void | StopSymbol,\n): () => void;\n\nfunction watchImpl(\n blocsOrBloc: BlocInput | readonly BlocInput[],\n callback: (blocsOrBloc: any) => void | StopSymbol,\n): () => void {\n const isSingle = !isArray(blocsOrBloc);\n const inputs = isSingle ? [blocsOrBloc] : blocsOrBloc;\n\n const instances = inputs.map(resolveBloc);\n\n let disposed = false;\n const subscriptions: (() => void)[] = [];\n\n const cleanup = () => {\n if (disposed) return;\n disposed = true;\n for (const unsub of subscriptions) unsub();\n subscriptions.length = 0;\n };\n\n const runCallback = () => {\n if (disposed) return;\n const arg = isSingle ? instances[0] : instances;\n const result = callback(arg);\n if (result === STOP) cleanup();\n };\n\n for (const inst of instances) {\n subscriptions.push(inst.channel.subscribe(() => ALL_PATHS, runCallback));\n }\n\n // Fire once immediately so the consumer sees the current state.\n runCallback();\n\n return cleanup;\n}\n\nexport const watch: WatchFn = Object.assign(watchImpl, { STOP }) as WatchFn;\n"],"mappings":";;;;AASA,MAAM,OAAsB,OAAO,YAAY;AAG/C,MAAM,kBAAkB,OAAO,SAAS;;;;;;;;;;;;AAwBxC,SAAgB,SACd,WACA,MACY;CACZ,OAAO;GACJ,kBAAkB;EACnB,WAAW;EACX,YAAY,mBAAmB,WAAW,IAAI;CAChD;AACF;AAEA,SAAS,UACP,OAC6C;CAC7C,OACE,OAAO,UAAU,YAAY,UAAU,QAAQ,mBAAmB;AAEtE;AAiDA,SAAS,YAAY,OAA0C;CAC7D,MAAM,WAAW,YAAY;CAC7B,IAAI,UAAU,KAAK,GACjB,OAAO,SAAS,OAAO,MAAM,WAAW,MAAM,UAAU;CAE1D,OAAO,SAAS,OACd,OACA,SAAS,WAAW,OAAO,KAAA,GAAW,KAAA,CAAS,CACjD;AACF;AAEA,SAAS,QAAQ,OAA+C;CAC9D,OAAO,MAAM,QAAQ,KAAK;AAC5B;AA2DA,SAAS,UACP,aACA,UACY;CACZ,MAAM,WAAW,CAAC,QAAQ,WAAW;CAGrC,MAAM,aAFS,WAAW,CAAC,WAAW,IAAI,aAEjB,IAAI,WAAW;CAExC,IAAI,WAAW;CACf,MAAM,gBAAgC,CAAC;CAEvC,MAAM,gBAAgB;EACpB,IAAI,UAAU;EACd,WAAW;EACX,KAAK,MAAM,SAAS,eAAe,MAAM;EACzC,cAAc,SAAS;CACzB;CAEA,MAAM,oBAAoB;EACxB,IAAI,UAAU;EAGd,IADe,SADH,WAAW,UAAU,KAAK,SAE7B,MAAM,MAAM,QAAQ;CAC/B;CAEA,KAAK,MAAM,QAAQ,WACjB,cAAc,KAAK,KAAK,QAAQ,gBAAgB,WAAW,WAAW,CAAC;CAIzE,YAAY;CAEZ,OAAO;AACT;AAEA,MAAa,QAAiB,OAAO,OAAO,WAAW,EAAE,KAAK,CAAC"}
@@ -1,32 +1,34 @@
1
- const require_StateContainerRegistry = require("./StateContainerRegistry-B4yVMYbx.cjs");
2
- const require_ensure = require("./ensure-BB6xHQAF.cjs");
1
+ const require_config = require("./config-DVMnlHLv.cjs");
2
+ const require_acquire = require("./acquire-DHEOEVcj.cjs");
3
3
  let _dirtytalk_structural = require("@dirtytalk/structural");
4
4
  //#region src/watch/watch.ts
5
5
  const STOP = Symbol("watch.STOP");
6
6
  const BLOC_REF_MARKER = Symbol("BlocRef");
7
7
  /**
8
- * Create a reference to a specific bloc instance.
8
+ * Create a reference to a specific bloc instance, identified by its `args`.
9
+ * The key is derived the same way `useBloc`/`acquire` derive it.
9
10
  *
10
11
  * @example
11
12
  * ```ts
12
- * watch(instance(UserBloc, 'user-123'), (userBloc) => {
13
+ * watch(instance(UserBloc, { userId: 'user-123' }), (userBloc) => {
13
14
  * console.log(userBloc.state.name);
14
15
  * });
15
16
  * ```
16
17
  */
17
- function instance(BlocClass, instanceId) {
18
+ function instance(BlocClass, args) {
18
19
  return {
19
20
  [BLOC_REF_MARKER]: true,
20
21
  blocClass: BlocClass,
21
- instanceId
22
+ instanceId: require_acquire.resolveInstanceKey(BlocClass, args)
22
23
  };
23
24
  }
24
25
  function isBlocRef(input) {
25
26
  return typeof input === "object" && input !== null && BLOC_REF_MARKER in input;
26
27
  }
27
28
  function resolveBloc(input) {
28
- if (isBlocRef(input)) return require_ensure.ensure(input.blocClass, input.instanceId);
29
- return require_ensure.ensure(input, require_StateContainerRegistry.BLAC_DEFAULTS.DEFAULT_INSTANCE_KEY);
29
+ const registry = require_config.getRegistry();
30
+ if (isBlocRef(input)) return registry.ensure(input.blocClass, input.instanceId);
31
+ return registry.ensure(input, registry.resolveKey(input, void 0, void 0));
30
32
  }
31
33
  function isArray(input) {
32
34
  return Array.isArray(input);
@@ -65,4 +67,4 @@ Object.defineProperty(exports, "watch", {
65
67
  }
66
68
  });
67
69
 
68
- //# sourceMappingURL=watch-BpwaUL8r.cjs.map
70
+ //# sourceMappingURL=watch-CKWt788i.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-CKWt788i.cjs","names":["resolveInstanceKey","getRegistry","ALL_PATHS"],"sources":["../src/watch/watch.ts"],"sourcesContent":["import { ALL_PATHS } from '@dirtytalk/structural';\nimport { getRegistry } from '../registry';\nimport { resolveInstanceKey } from '../registry/acquire';\nimport type {\n ExtractArgs,\n StateContainerConstructor,\n StateContainerInstance,\n} from '../types/utilities';\n\nconst STOP: unique symbol = Symbol('watch.STOP');\ntype StopSymbol = typeof STOP;\n\nconst BLOC_REF_MARKER = Symbol('BlocRef');\n\n/**\n * Reference to a specific bloc instance, identified by class + the resolved\n * key derived from its `args`.\n */\nexport interface BlocRef<T extends StateContainerConstructor> {\n [BLOC_REF_MARKER]: true;\n blocClass: T;\n /** @internal The resolved instance key (derived from `args`). */\n instanceId: string;\n}\n\n/**\n * Create a reference to a specific bloc instance, identified by its `args`.\n * The key is derived the same way `useBloc`/`acquire` derive it.\n *\n * @example\n * ```ts\n * watch(instance(UserBloc, { userId: 'user-123' }), (userBloc) => {\n * console.log(userBloc.state.name);\n * });\n * ```\n */\nexport function instance<T extends StateContainerConstructor>(\n BlocClass: T,\n args?: ExtractArgs<T>,\n): BlocRef<T> {\n return {\n [BLOC_REF_MARKER]: true,\n blocClass: BlocClass,\n instanceId: resolveInstanceKey(BlocClass, args),\n };\n}\n\nfunction isBlocRef(\n input: unknown,\n): input is BlocRef<StateContainerConstructor> {\n return (\n typeof input === 'object' && input !== null && BLOC_REF_MARKER in input\n );\n}\n\ntype BlocInput = StateContainerConstructor | BlocRef<StateContainerConstructor>;\n\ntype ExtractInstance<T> =\n T extends BlocRef<infer C>\n ? InstanceType<C>\n : T extends StateContainerConstructor\n ? InstanceType<T>\n : never;\n\ntype ExtractInstances<T extends readonly BlocInput[]> = {\n [K in keyof T]: ExtractInstance<T[K]>;\n};\n\n/**\n * Watch function signature for single bloc.\n */\nexport interface WatchSingleFn {\n <T extends StateContainerConstructor>(\n bloc: T | BlocRef<T>,\n callback: (bloc: InstanceType<T>) => void | StopSymbol,\n ): () => void;\n\n STOP: StopSymbol;\n}\n\n/**\n * Watch function signature for multiple blocs.\n */\nexport interface WatchMultipleFn {\n <T extends readonly BlocInput[]>(\n blocs: T,\n callback: (blocs: ExtractInstances<T>) => void | StopSymbol,\n ): () => void;\n\n STOP: StopSymbol;\n}\n\n/**\n * Combined watch function type.\n */\nexport interface WatchFn extends WatchSingleFn {\n <T extends readonly BlocInput[]>(\n blocs: T,\n callback: (blocs: ExtractInstances<T>) => void | StopSymbol,\n ): () => void;\n}\n\nfunction resolveBloc(input: BlocInput): StateContainerInstance {\n const registry = getRegistry();\n if (isBlocRef(input)) {\n return registry.ensure(input.blocClass, input.instanceId);\n }\n return registry.ensure(\n input,\n registry.resolveKey(input, undefined, undefined),\n );\n}\n\nfunction isArray(input: unknown): input is readonly BlocInput[] {\n return Array.isArray(input);\n}\n\n/**\n * Watch one or more blocs for state changes.\n *\n * Thin wrapper around `container.channel.subscribe(ALL_PATHS, ...)`. The\n * callback fires once immediately, then on every state change of any of the\n * passed blocs. Returning `watch.STOP` from the callback tears down all\n * subscriptions.\n *\n * Note: subscriptions are microtask-deferred (per the DirtyChannel default\n * scheduler), so callbacks land asynchronously after `emit()`.\n *\n * @example Single bloc\n * ```ts\n * const unwatch = watch(UserBloc, (userBloc) => {\n * console.log(userBloc.state.name);\n * });\n * ```\n *\n * @example Multiple blocs\n * ```ts\n * const unwatch = watch(\n * [UserBloc, SettingsBloc] as const,\n * ([userBloc, settingsBloc]) => {\n * console.log(userBloc.state.name, settingsBloc.state.theme);\n * }\n * );\n * ```\n *\n * @example With specific instance\n * ```ts\n * const unwatch = watch(\n * instance(UserBloc, { userId: 'user-123' }),\n * (userBloc) => {\n * console.log(userBloc.state.name);\n * }\n * );\n * ```\n *\n * @example Stop watching from callback\n * ```ts\n * const unwatch = watch(UserBloc, (userBloc) => {\n * if (userBloc.state.done) {\n * return watch.STOP;\n * }\n * });\n * ```\n */\nfunction watchImpl<T extends StateContainerConstructor>(\n bloc: T | BlocRef<T>,\n callback: (bloc: InstanceType<T>) => void | StopSymbol,\n): () => void;\n\nfunction watchImpl<T extends readonly BlocInput[]>(\n blocs: T,\n callback: (blocs: ExtractInstances<T>) => void | StopSymbol,\n): () => void;\n\nfunction watchImpl(\n blocsOrBloc: BlocInput | readonly BlocInput[],\n callback: (blocsOrBloc: any) => void | StopSymbol,\n): () => void {\n const isSingle = !isArray(blocsOrBloc);\n const inputs = isSingle ? [blocsOrBloc] : blocsOrBloc;\n\n const instances = inputs.map(resolveBloc);\n\n let disposed = false;\n const subscriptions: (() => void)[] = [];\n\n const cleanup = () => {\n if (disposed) return;\n disposed = true;\n for (const unsub of subscriptions) unsub();\n subscriptions.length = 0;\n };\n\n const runCallback = () => {\n if (disposed) return;\n const arg = isSingle ? instances[0] : instances;\n const result = callback(arg);\n if (result === STOP) cleanup();\n };\n\n for (const inst of instances) {\n subscriptions.push(inst.channel.subscribe(() => ALL_PATHS, runCallback));\n }\n\n // Fire once immediately so the consumer sees the current state.\n runCallback();\n\n return cleanup;\n}\n\nexport const watch: WatchFn = Object.assign(watchImpl, { STOP }) as WatchFn;\n"],"mappings":";;;;AASA,MAAM,OAAsB,OAAO,YAAY;AAG/C,MAAM,kBAAkB,OAAO,SAAS;;;;;;;;;;;;AAwBxC,SAAgB,SACd,WACA,MACY;CACZ,OAAO;GACJ,kBAAkB;EACnB,WAAW;EACX,YAAYA,gBAAAA,mBAAmB,WAAW,IAAI;CAChD;AACF;AAEA,SAAS,UACP,OAC6C;CAC7C,OACE,OAAO,UAAU,YAAY,UAAU,QAAQ,mBAAmB;AAEtE;AAiDA,SAAS,YAAY,OAA0C;CAC7D,MAAM,WAAWC,eAAAA,YAAY;CAC7B,IAAI,UAAU,KAAK,GACjB,OAAO,SAAS,OAAO,MAAM,WAAW,MAAM,UAAU;CAE1D,OAAO,SAAS,OACd,OACA,SAAS,WAAW,OAAO,KAAA,GAAW,KAAA,CAAS,CACjD;AACF;AAEA,SAAS,QAAQ,OAA+C;CAC9D,OAAO,MAAM,QAAQ,KAAK;AAC5B;AA2DA,SAAS,UACP,aACA,UACY;CACZ,MAAM,WAAW,CAAC,QAAQ,WAAW;CAGrC,MAAM,aAFS,WAAW,CAAC,WAAW,IAAI,aAEjB,IAAI,WAAW;CAExC,IAAI,WAAW;CACf,MAAM,gBAAgC,CAAC;CAEvC,MAAM,gBAAgB;EACpB,IAAI,UAAU;EACd,WAAW;EACX,KAAK,MAAM,SAAS,eAAe,MAAM;EACzC,cAAc,SAAS;CACzB;CAEA,MAAM,oBAAoB;EACxB,IAAI,UAAU;EAGd,IADe,SADH,WAAW,UAAU,KAAK,SAE7B,MAAM,MAAM,QAAQ;CAC/B;CAEA,KAAK,MAAM,QAAQ,WACjB,cAAc,KAAK,KAAK,QAAQ,gBAAgBC,sBAAAA,WAAW,WAAW,CAAC;CAIzE,YAAY;CAEZ,OAAO;AACT;AAEA,MAAa,QAAiB,OAAO,OAAO,WAAW,EAAE,KAAK,CAAC"}