@blac/core 2.0.13 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/README.md +85 -3
  2. package/dist/Cubit-9jal5zdZ.cjs +1 -1
  3. package/dist/Cubit-BAUPiUF7.cjs +359 -286
  4. package/dist/Cubit-BBKF3PIg.js +269 -230
  5. package/dist/Cubit-BC70gaiA.js +453 -0
  6. package/dist/Cubit-BC70gaiA.js.map +1 -0
  7. package/dist/Cubit-BOgUZva7.js +342 -266
  8. package/dist/Cubit-BOxMvpfc.js +273 -232
  9. package/dist/Cubit-BTznt8zg.js +1 -1
  10. package/dist/Cubit-BogJXkLm.js +260 -225
  11. package/dist/Cubit-C-8R_8db.cjs +475 -0
  12. package/dist/Cubit-C-8R_8db.cjs.map +1 -0
  13. package/dist/Cubit-C3Mw3EoO.cjs +401 -0
  14. package/dist/Cubit-C3Mw3EoO.cjs.map +1 -0
  15. package/dist/Cubit-CO8Fr72L.cjs +447 -0
  16. package/dist/Cubit-CO8Fr72L.cjs.map +1 -0
  17. package/dist/Cubit-COfHT1Bm.cjs +300 -259
  18. package/dist/Cubit-CROWjjs9.js +481 -0
  19. package/dist/Cubit-CROWjjs9.js.map +1 -0
  20. package/dist/Cubit-CWP8Ddzx.cjs +510 -0
  21. package/dist/Cubit-CWP8Ddzx.cjs.map +1 -0
  22. package/dist/Cubit-CXxh9iol.js +284 -242
  23. package/dist/Cubit-CYOWfzQt.cjs +297 -254
  24. package/dist/Cubit-CZaf_fp4.cjs +1 -1
  25. package/dist/Cubit-C_dUEUdd.cjs +359 -286
  26. package/dist/Cubit-C_rxRCTN.cjs +523 -0
  27. package/dist/Cubit-C_rxRCTN.cjs.map +1 -0
  28. package/dist/Cubit-CcKgMEBO.js +281 -239
  29. package/dist/Cubit-CfT6Y1jl.js +328 -280
  30. package/dist/Cubit-CynJruuO.js +369 -0
  31. package/dist/Cubit-CynJruuO.js.map +1 -0
  32. package/dist/Cubit-D2vQ6nMb.js +342 -266
  33. package/dist/Cubit-D7jOZCoZ.js +342 -266
  34. package/dist/Cubit-D9j3IGPc.cjs +523 -0
  35. package/dist/Cubit-D9j3IGPc.cjs.map +1 -0
  36. package/dist/Cubit-DKEY9WYq.cjs +276 -240
  37. package/dist/Cubit-DMV_0TCp.js +481 -0
  38. package/dist/Cubit-DMV_0TCp.js.map +1 -0
  39. package/dist/Cubit-DP5DXPUK.js +342 -266
  40. package/dist/Cubit-DRFkzD2h.js +426 -0
  41. package/dist/Cubit-DRFkzD2h.js.map +1 -0
  42. package/dist/Cubit-DbnhTUaZ.cjs +359 -286
  43. package/dist/Cubit-DrqG3SP3.cjs +349 -300
  44. package/dist/Cubit-DsDkCo42.cjs +292 -250
  45. package/dist/Cubit-DwRw1E9D.cjs +289 -247
  46. package/dist/Cubit-Dw_kFBgc.js +1 -1
  47. package/dist/Cubit-KiXZCubP.cjs +1 -1
  48. package/dist/Cubit-Ksj7G4uR.js +342 -266
  49. package/dist/Cubit-MkjbpcPf.cjs +359 -286
  50. package/dist/Cubit-NRhvdDQ6.js +279 -239
  51. package/dist/Cubit-PMTXxI_u.js +1 -1
  52. package/dist/Cubit-VJuu2tt9.js +481 -0
  53. package/dist/Cubit-VJuu2tt9.js.map +1 -0
  54. package/dist/Cubit-jz922NKf.cjs +300 -257
  55. package/dist/Cubit-kU5_4jgC.cjs +359 -286
  56. package/dist/StateContainerRegistry-B4yVMYbx.cjs +1057 -0
  57. package/dist/StateContainerRegistry-B4yVMYbx.cjs.map +1 -0
  58. package/dist/StateContainerRegistry-BAcxouCu.js +683 -615
  59. package/dist/StateContainerRegistry-BK57H92E.js +701 -630
  60. package/dist/StateContainerRegistry-BRBATSrx.cjs +1030 -0
  61. package/dist/StateContainerRegistry-BRBATSrx.cjs.map +1 -0
  62. package/dist/StateContainerRegistry-BgBIKcQF.js +956 -0
  63. package/dist/StateContainerRegistry-BgBIKcQF.js.map +1 -0
  64. package/dist/StateContainerRegistry-BglEhqdA.js +669 -606
  65. package/dist/StateContainerRegistry-BhcnG0DF.js +625 -562
  66. package/dist/StateContainerRegistry-BpO5t-0i.js +642 -580
  67. package/dist/StateContainerRegistry-BqS-wpb_.js +957 -0
  68. package/dist/StateContainerRegistry-BqS-wpb_.js.map +1 -0
  69. package/dist/StateContainerRegistry-BrEGYPZT.cjs +1029 -0
  70. package/dist/StateContainerRegistry-BrEGYPZT.cjs.map +1 -0
  71. package/dist/StateContainerRegistry-Bxfne4A7.cjs +908 -0
  72. package/dist/StateContainerRegistry-Bxfne4A7.cjs.map +1 -0
  73. package/dist/StateContainerRegistry-C0E7vsgy.js +758 -0
  74. package/dist/StateContainerRegistry-C0E7vsgy.js.map +1 -0
  75. package/dist/StateContainerRegistry-C0I77Ndz.cjs +920 -0
  76. package/dist/StateContainerRegistry-C0I77Ndz.cjs.map +1 -0
  77. package/dist/StateContainerRegistry-CDH9mnQS.cjs +668 -614
  78. package/dist/StateContainerRegistry-CTOXUf75.cjs +695 -640
  79. package/dist/StateContainerRegistry-CX2CBOmv.cjs +739 -679
  80. package/dist/StateContainerRegistry-CXnnf2-l.js +867 -0
  81. package/dist/StateContainerRegistry-CXnnf2-l.js.map +1 -0
  82. package/dist/StateContainerRegistry-CehuIpK_.cjs +811 -0
  83. package/dist/StateContainerRegistry-CehuIpK_.cjs.map +1 -0
  84. package/dist/StateContainerRegistry-Ci0ajc5g.js +680 -612
  85. package/dist/StateContainerRegistry-Ck2-XmT_.js +587 -527
  86. package/dist/StateContainerRegistry-D1lVJFGL.cjs +706 -646
  87. package/dist/StateContainerRegistry-DC4N73O6.js +632 -569
  88. package/dist/StateContainerRegistry-DOuGI-l5.js +645 -582
  89. package/dist/StateContainerRegistry-DT66lr3I.cjs +651 -596
  90. package/dist/StateContainerRegistry-DmmzYa7S.js +974 -0
  91. package/dist/StateContainerRegistry-DmmzYa7S.js.map +1 -0
  92. package/dist/StateContainerRegistry-Upsrlg9G.cjs +709 -649
  93. package/dist/StateContainerRegistry-WznfcA-Q.js +855 -0
  94. package/dist/StateContainerRegistry-WznfcA-Q.js.map +1 -0
  95. package/dist/StateContainerRegistry-Yph6UCA_.js +637 -569
  96. package/dist/StateContainerRegistry-mseeTqSA.cjs +671 -616
  97. package/dist/StateContainerRegistry-pRNxHNFD.cjs +658 -603
  98. package/dist/StateContainerRegistry-vXMWtG7J.cjs +613 -561
  99. package/dist/StateContainerRegistry-v_prqMcI.cjs +663 -603
  100. package/dist/branded-BSeA_mZO.cjs.map +1 -1
  101. package/dist/branded-DCqi3De1.cjs +11 -11
  102. package/dist/branded-DwtzSsg0.js.map +1 -1
  103. package/dist/branded-Max3xOTA.js +6 -6
  104. package/dist/config-0ZD9i3wy.js +16 -0
  105. package/dist/config-0ZD9i3wy.js.map +1 -0
  106. package/dist/config-B3NIwDQv.cjs +20 -20
  107. package/dist/config-BKGHop0V.js +5 -5
  108. package/dist/config-BKoaAlmb.js +5 -5
  109. package/dist/config-BPj08-8h.cjs +32 -0
  110. package/dist/config-BPj08-8h.cjs.map +1 -0
  111. package/dist/config-BR0Xy-Tn.cjs +20 -20
  112. package/dist/config-B_4xXpvK.cjs +32 -0
  113. package/dist/config-B_4xXpvK.cjs.map +1 -0
  114. package/dist/config-BflrQM4_.cjs +32 -0
  115. package/dist/config-BflrQM4_.cjs.map +1 -0
  116. package/dist/config-BzObBsk2.cjs +32 -0
  117. package/dist/config-BzObBsk2.cjs.map +1 -0
  118. package/dist/config-C0yumL1H.cjs +32 -0
  119. package/dist/config-C0yumL1H.cjs.map +1 -0
  120. package/dist/config-C8xqVHTf.js +16 -0
  121. package/dist/config-C8xqVHTf.js.map +1 -0
  122. package/dist/config-CCUhIYIF.js +5 -5
  123. package/dist/config-CGo__MAt.js +16 -0
  124. package/dist/config-CGo__MAt.js.map +1 -0
  125. package/dist/config-CQH9fTY-.cjs +20 -20
  126. package/dist/config-CR_Bz7RD.js +5 -5
  127. package/dist/config-CTOa-yPN.cjs +20 -20
  128. package/dist/config-Cd7Q-B4g.js +16 -0
  129. package/dist/config-Cd7Q-B4g.js.map +1 -0
  130. package/dist/config-CmDEX-1o.js +16 -0
  131. package/dist/config-CmDEX-1o.js.map +1 -0
  132. package/dist/config-CoNMTnMA.cjs +32 -0
  133. package/dist/config-CoNMTnMA.cjs.map +1 -0
  134. package/dist/config-Cwj8-C1J.js +5 -5
  135. package/dist/config-D3jisfdj.cjs +20 -20
  136. package/dist/config-D4GifZQ4.js +5 -5
  137. package/dist/config-DDrSQGpQ.cjs +20 -20
  138. package/dist/config-DEcslxan.cjs +20 -20
  139. package/dist/config-DMNZ2YLV.cjs +20 -20
  140. package/dist/config-De9oQ6Ki.js +5 -5
  141. package/dist/config-DoHx0Xsl.js +16 -0
  142. package/dist/config-DoHx0Xsl.js.map +1 -0
  143. package/dist/config-DokTzpr8.cjs +20 -20
  144. package/dist/config-DslYBm4Z.js +5 -5
  145. package/dist/config-H6FAqbW4.cjs +20 -20
  146. package/dist/config-Yp645dGK.js +5 -5
  147. package/dist/config-ispAzOZV.js +5 -5
  148. package/dist/config.d.cts +72 -0
  149. package/dist/config.d.ts +72 -0
  150. package/dist/constants.d.cts +13 -0
  151. package/dist/constants.d.ts +13 -0
  152. package/dist/core/Cubit.d.ts +14 -4
  153. package/dist/core/StateContainer.d.ts +111 -11
  154. package/dist/core/StateContainerRegistry.d.ts +55 -11
  155. package/dist/core/symbols.d.ts +26 -0
  156. package/dist/debug.cjs +3 -3
  157. package/dist/debug.js +3 -3
  158. package/dist/decorators/blac.d.ts +17 -0
  159. package/dist/ensure-9VEq5H0L.js +3 -3
  160. package/dist/ensure-BB6xHQAF.cjs +14 -0
  161. package/dist/ensure-BB6xHQAF.cjs.map +1 -0
  162. package/dist/ensure-BNDfTzqg.cjs +8 -8
  163. package/dist/ensure-BVCnjU7r.js +343 -267
  164. package/dist/ensure-BbzGXjep.cjs +8 -8
  165. package/dist/ensure-BlIaQai6.js +9 -0
  166. package/dist/ensure-BlIaQai6.js.map +1 -0
  167. package/dist/ensure-Bm3oHxga.js +9 -0
  168. package/dist/ensure-Bm3oHxga.js.map +1 -0
  169. package/dist/ensure-C3eIRs6e.cjs +8 -8
  170. package/dist/ensure-CJZL7bcA.cjs +365 -292
  171. package/dist/ensure-CN6unBOe.cjs +8 -8
  172. package/dist/ensure-CU-B1ywv.js +3 -3
  173. package/dist/ensure-CWKzeno7.js +3 -3
  174. package/dist/ensure-CkENsuQ9.js +9 -0
  175. package/dist/ensure-CkENsuQ9.js.map +1 -0
  176. package/dist/ensure-Cm-4_LSh.cjs +14 -0
  177. package/dist/ensure-Cm-4_LSh.cjs.map +1 -0
  178. package/dist/ensure-Cqex5r1P.cjs +14 -0
  179. package/dist/ensure-Cqex5r1P.cjs.map +1 -0
  180. package/dist/ensure-Cv5AbNGZ.js +9 -0
  181. package/dist/ensure-Cv5AbNGZ.js.map +1 -0
  182. package/dist/ensure-D63lEMUK.cjs +8 -8
  183. package/dist/ensure-DGEtPU9A.cjs +8 -8
  184. package/dist/ensure-DM3qb336.cjs +14 -0
  185. package/dist/ensure-DM3qb336.cjs.map +1 -0
  186. package/dist/ensure-DME-_T0j.cjs +8 -8
  187. package/dist/ensure-DWd0GCYB.js +3 -3
  188. package/dist/ensure-DamKOP6q.cjs +8 -8
  189. package/dist/ensure-Dcfptl-A.js +9 -0
  190. package/dist/ensure-Dcfptl-A.js.map +1 -0
  191. package/dist/ensure-Def-EBWG.js +3 -3
  192. package/dist/ensure-DnHL5QiQ.cjs +14 -0
  193. package/dist/ensure-DnHL5QiQ.cjs.map +1 -0
  194. package/dist/ensure-Dr7I78Ku.cjs +8 -8
  195. package/dist/ensure-SLVdGd5b.js +3 -3
  196. package/dist/ensure-Sb92MCXu.js +3 -3
  197. package/dist/ensure-gFlvevGm.cjs +14 -0
  198. package/dist/ensure-gFlvevGm.cjs.map +1 -0
  199. package/dist/ensure-l2-H7S5W.js +3 -3
  200. package/dist/ensure-mkL-3qh8.js +9 -0
  201. package/dist/ensure-mkL-3qh8.js.map +1 -0
  202. package/dist/ensure-n80crSlX.js +3 -3
  203. package/dist/ensure-nCxg7MCN.js +3 -3
  204. package/dist/ensure-vS71MV4q.cjs +8 -8
  205. package/dist/index.cjs +37 -14
  206. package/dist/index.cjs.map +1 -1
  207. package/dist/index.d.cts +14 -4
  208. package/dist/index.d.ts +14 -4
  209. package/dist/index.js +23 -10
  210. package/dist/index.js.map +1 -1
  211. package/dist/management-6oQbmf0z.js +41 -0
  212. package/dist/management-6oQbmf0z.js.map +1 -0
  213. package/dist/management-B46QwA9Y.js +20 -11
  214. package/dist/management-B9yrRpeg.js +41 -0
  215. package/dist/management-B9yrRpeg.js.map +1 -0
  216. package/dist/management-BCKTEZ8Q.js +20 -11
  217. package/dist/management-BbMzdXbT.js +41 -0
  218. package/dist/management-BbMzdXbT.js.map +1 -0
  219. package/dist/management-Bg652agq.js +20 -11
  220. package/dist/management-BnedF5ZD.cjs +50 -50
  221. package/dist/management-BoUa99eB.cjs +79 -0
  222. package/dist/management-BoUa99eB.cjs.map +1 -0
  223. package/dist/management-C4SHcrJm.cjs +79 -0
  224. package/dist/management-C4SHcrJm.cjs.map +1 -0
  225. package/dist/management-CK-GL3wY.js +20 -11
  226. package/dist/management-CPhgY8OE.js +41 -0
  227. package/dist/management-CPhgY8OE.js.map +1 -0
  228. package/dist/management-CU_V3LIP.js +20 -11
  229. package/dist/management-CUwXDSi9.cjs +79 -0
  230. package/dist/management-CUwXDSi9.cjs.map +1 -0
  231. package/dist/management-CaqiyNzB.js +20 -11
  232. package/dist/management-Cin-JvYe.js +20 -11
  233. package/dist/management-ClaXym0F.cjs +50 -50
  234. package/dist/management-DL0Uzsoz.js +20 -11
  235. package/dist/management-DLdAQfqk.cjs +79 -0
  236. package/dist/management-DLdAQfqk.cjs.map +1 -0
  237. package/dist/management-DMZ8qpwr.cjs +50 -50
  238. package/dist/management-DTzcC6aD.cjs +79 -0
  239. package/dist/management-DTzcC6aD.cjs.map +1 -0
  240. package/dist/management-DYLNyj9p.cjs +50 -50
  241. package/dist/management-Dag9u4t6.cjs +50 -50
  242. package/dist/management-DbMRdDBo.cjs +50 -50
  243. package/dist/management-DfnDAKmP.js +41 -0
  244. package/dist/management-DfnDAKmP.js.map +1 -0
  245. package/dist/management-DjBU1gtb.cjs +50 -50
  246. package/dist/management-DwCozsY8.js +20 -11
  247. package/dist/management-H4m3ciJO.js +32 -0
  248. package/dist/management-H4m3ciJO.js.map +1 -0
  249. package/dist/management-Xo3A6Za3.cjs +79 -0
  250. package/dist/management-Xo3A6Za3.cjs.map +1 -0
  251. package/dist/management-ZU2YzOkr.js +18 -10
  252. package/dist/management-baPDwA9n.cjs +50 -50
  253. package/dist/management-jQGCvZNN.cjs +44 -44
  254. package/dist/management-ry_KteFK.cjs +50 -50
  255. package/dist/plugin/BlacPlugin.d.ts +89 -15
  256. package/dist/plugin/PluginManager.d.ts +65 -5
  257. package/dist/plugins.cjs +1 -1
  258. package/dist/plugins.d.cts +2 -2
  259. package/dist/plugins.d.ts +2 -2
  260. package/dist/plugins.js +1 -1
  261. package/dist/registry/acquire.d.ts +9 -2
  262. package/dist/registry/ensure.d.ts +2 -2
  263. package/dist/registry/index.d.ts +1 -1
  264. package/dist/resolve-dependencies-B2QggQAi.js +641 -558
  265. package/dist/resolve-dependencies-B6JDXvpr.js +651 -566
  266. package/dist/resolve-dependencies-BAKAoD0U.js +878 -0
  267. package/dist/resolve-dependencies-BAKAoD0U.js.map +1 -0
  268. package/dist/resolve-dependencies-BFZQq60Y.cjs +724 -666
  269. package/dist/resolve-dependencies-BGafS3Ww.js +643 -561
  270. package/dist/resolve-dependencies-BHd34gS3.cjs +724 -666
  271. package/dist/resolve-dependencies-BNeayhbQ.cjs +732 -671
  272. package/dist/resolve-dependencies-BWEMpuDy.js +641 -558
  273. package/dist/resolve-dependencies-BiWkW2eS.js +643 -561
  274. package/dist/resolve-dependencies-BjxCztYD.js +739 -0
  275. package/dist/resolve-dependencies-BjxCztYD.js.map +1 -0
  276. package/dist/resolve-dependencies-BlyBV0hB.cjs +969 -0
  277. package/dist/resolve-dependencies-BlyBV0hB.cjs.map +1 -0
  278. package/dist/resolve-dependencies-By26rT_i.js +651 -566
  279. package/dist/resolve-dependencies-C9Kf7AzY.cjs +724 -666
  280. package/dist/resolve-dependencies-CTzV1txG.js +643 -561
  281. package/dist/resolve-dependencies-CWjuGHiF.cjs +969 -0
  282. package/dist/resolve-dependencies-CWjuGHiF.cjs.map +1 -0
  283. package/dist/resolve-dependencies-ClSsP0DJ.cjs +722 -663
  284. package/dist/resolve-dependencies-D0vTzZgs.js +643 -561
  285. package/dist/resolve-dependencies-D2WnZMF-.cjs +724 -666
  286. package/dist/resolve-dependencies-DCBLTeza.cjs +969 -0
  287. package/dist/resolve-dependencies-DCBLTeza.cjs.map +1 -0
  288. package/dist/resolve-dependencies-DMlqYJR2.js +643 -561
  289. package/dist/resolve-dependencies-DP6U1EYB.cjs +840 -0
  290. package/dist/resolve-dependencies-DP6U1EYB.cjs.map +1 -0
  291. package/dist/resolve-dependencies-DSQNXvnV.cjs +724 -666
  292. package/dist/resolve-dependencies-DV3HO_uH.js +878 -0
  293. package/dist/resolve-dependencies-DV3HO_uH.js.map +1 -0
  294. package/dist/resolve-dependencies-DXwMhP0Y.js +878 -0
  295. package/dist/resolve-dependencies-DXwMhP0Y.js.map +1 -0
  296. package/dist/resolve-dependencies-DbRWlt9u.js +878 -0
  297. package/dist/resolve-dependencies-DbRWlt9u.js.map +1 -0
  298. package/dist/resolve-dependencies-DcUUva2P.cjs +724 -666
  299. package/dist/resolve-dependencies-Dd8T6TLt.cjs +724 -666
  300. package/dist/resolve-dependencies-Dfdp_DZd.cjs +732 -671
  301. package/dist/resolve-dependencies-GJ8PNyNB.cjs +969 -0
  302. package/dist/resolve-dependencies-GJ8PNyNB.cjs.map +1 -0
  303. package/dist/resolve-dependencies-KSpTt4jy.cjs +722 -663
  304. package/dist/resolve-dependencies-Nvjp4CwS.js +643 -561
  305. package/dist/resolve-dependencies-f-QUqYiL.js +643 -561
  306. package/dist/testing.cjs +27 -20
  307. package/dist/testing.cjs.map +1 -1
  308. package/dist/testing.d.cts +22 -1
  309. package/dist/testing.d.ts +22 -1
  310. package/dist/testing.js +27 -21
  311. package/dist/testing.js.map +1 -1
  312. package/dist/tracked-B77j2g9M.js +171 -151
  313. package/dist/tracked-BDVi2LKM.cjs +196 -175
  314. package/dist/tracked-BFdJCzL0.cjs +242 -0
  315. package/dist/tracked-BFdJCzL0.cjs.map +1 -0
  316. package/dist/tracked-BH-gX4T1.cjs +196 -175
  317. package/dist/tracked-BTHok3Dl.cjs +196 -175
  318. package/dist/tracked-BTbFkFeM.js +186 -166
  319. package/dist/tracked-BU_OBWqM.cjs +242 -0
  320. package/dist/tracked-BU_OBWqM.cjs.map +1 -0
  321. package/dist/tracked-BfctH2es.cjs +242 -0
  322. package/dist/tracked-BfctH2es.cjs.map +1 -0
  323. package/dist/tracked-BhQtzUhZ.js +186 -166
  324. package/dist/tracked-BnqrYXiO.js +212 -0
  325. package/dist/tracked-BnqrYXiO.js.map +1 -0
  326. package/dist/tracked-BtgFOGup.js +212 -0
  327. package/dist/tracked-BtgFOGup.js.map +1 -0
  328. package/dist/tracked-C3nIS4J7.cjs +242 -0
  329. package/dist/tracked-C3nIS4J7.cjs.map +1 -0
  330. package/dist/tracked-C52awNV9.js +171 -151
  331. package/dist/tracked-CGzduF2m.js +186 -166
  332. package/dist/tracked-CK_-ixtX.cjs +196 -175
  333. package/dist/tracked-CLlvURln.js +186 -166
  334. package/dist/tracked-CgHWmuGC.cjs +211 -190
  335. package/dist/tracked-CoAlC8fs.js +171 -151
  336. package/dist/tracked-D3Xjm1H1.cjs +211 -190
  337. package/dist/tracked-DB6yMV5F.js +212 -0
  338. package/dist/tracked-DB6yMV5F.js.map +1 -0
  339. package/dist/tracked-DBn-bs_G.js +171 -151
  340. package/dist/tracked-DMBTDF0P.js +171 -151
  341. package/dist/tracked-DN3h3Rp1.js +171 -151
  342. package/dist/tracked-DOGh1Q5Z.cjs +242 -0
  343. package/dist/tracked-DOGh1Q5Z.cjs.map +1 -0
  344. package/dist/tracked-DUkp4zve.cjs +196 -175
  345. package/dist/tracked-D_ou7mYG.js +212 -0
  346. package/dist/tracked-D_ou7mYG.js.map +1 -0
  347. package/dist/tracked-Dcu6EATB.js +171 -151
  348. package/dist/tracked-GvAJQVAI.cjs +227 -196
  349. package/dist/tracked-O2lv-kJV.cjs +211 -190
  350. package/dist/tracked-WF6aXuAo.js +186 -162
  351. package/dist/tracked-d_sQWU3c.cjs +196 -175
  352. package/dist/tracked-n9TMK-30.cjs +196 -175
  353. package/dist/tracked-njU-_pVa.cjs +211 -190
  354. package/dist/tracked-zAgmKIlC.js +212 -0
  355. package/dist/tracked-zAgmKIlC.js.map +1 -0
  356. package/dist/tracking/dependency-manager.d.ts +33 -29
  357. package/dist/tracking/index.d.ts +16 -1
  358. package/dist/tracking/iteration-perf.bench.d.ts +1 -0
  359. package/dist/tracking/path-utils.d.ts +18 -1
  360. package/dist/tracking/resolve-dependencies.d.ts +3 -1
  361. package/dist/tracking/tracked.d.ts +37 -34
  362. package/dist/tracking/tracking-proxy.d.ts +94 -47
  363. package/dist/tracking.cjs +12 -9
  364. package/dist/tracking.js +32 -2
  365. package/dist/types/utilities.d.ts +15 -3
  366. package/dist/types.cjs +1 -1
  367. package/dist/types.js +1 -1
  368. package/dist/utils/static-props.d.ts +14 -0
  369. package/dist/utils/structural-key.d.ts +14 -0
  370. package/dist/watch/watch.d.ts +1 -1
  371. package/dist/watch-BpwaUL8r.cjs +68 -0
  372. package/dist/watch-BpwaUL8r.cjs.map +1 -0
  373. package/dist/watch-DWCqXllW.js +57 -0
  374. package/dist/watch-DWCqXllW.js.map +1 -0
  375. package/dist/watch-entry.cjs +3 -6
  376. package/dist/watch-entry.d.cts +1 -3
  377. package/dist/watch-entry.d.ts +1 -3
  378. package/dist/watch-entry.js +2 -2
  379. package/package.json +4 -14
package/dist/testing.cjs CHANGED
@@ -1,9 +1,11 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_Cubit = require("./Cubit-jz922NKf.cjs");
3
- const require_StateContainerRegistry = require("./StateContainerRegistry-CX2CBOmv.cjs");
4
- const require_config = require("./config-H6FAqbW4.cjs");
5
- const require_ensure = require("./ensure-Dr7I78Ku.cjs");
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");
6
6
  //#region src/testing.ts
7
+ /** Synthetic owner id used by test helpers for pre-wired deps. */
8
+ const TESTING_DEPS_OWNER = "testing-deps";
7
9
  function createTestRegistry() {
8
10
  return new require_StateContainerRegistry.StateContainerRegistry();
9
11
  }
@@ -38,19 +40,9 @@ function blacTestSetup() {
38
40
  });
39
41
  }
40
42
  const DEFAULT_KEY = "default";
41
- function registerOverride(BlocClass, instance, instanceKey = DEFAULT_KEY) {
42
- const registry = require_config.getRegistry();
43
- const existing = registry.acquire(BlocClass, instanceKey, {
44
- canCreate: true,
45
- countRef: false
46
- });
47
- if (existing !== instance && !existing.isDisposed) existing.dispose();
48
- const instancesMap = registry.getInstancesMap(BlocClass);
49
- const entry = {
50
- instance,
51
- refs: new Map([["testing-override", 1]])
52
- };
53
- instancesMap.set(instanceKey, entry);
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]]));
54
46
  }
55
47
  function overrideEnsure(BlocClass, instance, fn, instanceKey = DEFAULT_KEY) {
56
48
  return withTestRegistry(() => {
@@ -60,6 +52,7 @@ function overrideEnsure(BlocClass, instance, fn, instanceKey = DEFAULT_KEY) {
60
52
  }
61
53
  function createCubitStub(BlocClass, options) {
62
54
  const instance = new BlocClass();
55
+ if (options?.args != null) instance.initConfig({ args: options.args });
63
56
  if (options?.state != null) {
64
57
  if (instance instanceof require_Cubit.Cubit) {
65
58
  const currentState = instance.state;
@@ -70,6 +63,7 @@ function createCubitStub(BlocClass, options) {
70
63
  if (options?.methods) {
71
64
  for (const [key, impl] of Object.entries(options.methods)) if (typeof impl === "function") instance[key] = impl;
72
65
  }
66
+ if (options?.deps != null) instance[require_Cubit.APPLY_DEPS](TESTING_DEPS_OWNER, options.deps);
73
67
  return instance;
74
68
  }
75
69
  function withBlocState(BlocClass, state, instanceKey) {
@@ -86,15 +80,28 @@ function withBlocMethod(BlocClass, methodName, impl, instanceKey) {
86
80
  instance[methodName] = impl;
87
81
  return instance;
88
82
  }
83
+ /**
84
+ * Drain pending microtasks so any channel-flushed effects (subscribe()
85
+ * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run
86
+ * before the next assertion.
87
+ *
88
+ * The default `MicrotaskScheduler` coalesces emits within a tick; tests
89
+ * that emit and then assert on listener side-effects need `await flush()`
90
+ * (or its alias `flushBlocUpdates()`) between the two.
91
+ */
92
+ async function flush() {
93
+ await Promise.resolve();
94
+ await Promise.resolve();
95
+ }
96
+ /** @deprecated Alias for `flush()`. */
89
97
  async function flushBlocUpdates() {
90
- await new Promise((resolve) => {
91
- setTimeout(resolve, 0);
92
- });
98
+ await flush();
93
99
  }
94
100
  //#endregion
95
101
  exports.blacTestSetup = blacTestSetup;
96
102
  exports.createCubitStub = createCubitStub;
97
103
  exports.createTestRegistry = createTestRegistry;
104
+ exports.flush = flush;
98
105
  exports.flushBlocUpdates = flushBlocUpdates;
99
106
  exports.overrideEnsure = overrideEnsure;
100
107
  exports.registerOverride = registerOverride;
@@ -1 +1 @@
1
- {"version":3,"file":"testing.cjs","names":["StateContainerRegistry","getRegistry","Cubit","ensure"],"sources":["../src/testing.ts"],"sourcesContent":["import { Cubit } from './core/Cubit';\nimport {\n type InstanceEntry,\n StateContainerRegistry,\n} from './core/StateContainerRegistry';\nimport { ensure, getRegistry, setRegistry } from './registry';\nimport type {\n ExtractState,\n StateContainerConstructor,\n} from './types/utilities';\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 = DEFAULT_KEY,\n): void {\n const registry = getRegistry();\n const existing = registry.acquire(BlocClass, instanceKey, {\n canCreate: true,\n countRef: false,\n });\n if (existing !== instance && !existing.isDisposed) {\n existing.dispose();\n }\n const instancesMap = registry.getInstancesMap(BlocClass);\n const entry: InstanceEntry<InstanceType<T>> = {\n instance,\n refs: new Map([['testing-override', 1]]),\n };\n instancesMap.set(instanceKey, entry);\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\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 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 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\nexport async function flushBlocUpdates(): Promise<void> {\n await new Promise<void>((resolve) => {\n setTimeout(resolve, 0);\n });\n}\n"],"mappings":";;;;;;AAgBA,SAAgB,qBAA6C;AAC3D,QAAO,IAAIA,+BAAAA,wBAAwB;;AAGrC,SAAgB,iBACd,IACG;CACH,MAAM,WAAWC,eAAAA,aAAa;CAC9B,MAAM,eAAe,oBAAoB;AACzC,gBAAA,YAAY,aAAa;AACzB,KAAI;EACF,MAAM,SAAS,GAAG,aAAa;AAC/B,MAAI,kBAAkB,QACpB,QAAO,OAAO,MACX,UAAU;AACT,kBAAA,YAAY,SAAS;AACrB,UAAO;MAER,UAAU;AACT,kBAAA,YAAY,SAAS;AACrB,SAAM;IAET;AAEH,iBAAA,YAAY,SAAS;AACrB,SAAO;UACA,OAAO;AACd,iBAAA,YAAY,SAAS;AACrB,QAAM;;;AAMV,SAAgB,gBAAsB;CACpC,IAAI;AACJ,kBAAiB;AACf,kBAAgBA,eAAAA,aAAa;AAC7B,iBAAA,YAAY,IAAID,+BAAAA,wBAAwB,CAAC;GACzC;AACF,iBAAgB;AACd,iBAAA,YAAY,cAAc;GAC1B;;AAKJ,MAAM,cAAc;AAEpB,SAAgB,iBACd,WACA,UACA,cAAsB,aAChB;CACN,MAAM,WAAWC,eAAAA,aAAa;CAC9B,MAAM,WAAW,SAAS,QAAQ,WAAW,aAAa;EACxD,WAAW;EACX,UAAU;EACX,CAAC;AACF,KAAI,aAAa,YAAY,CAAC,SAAS,WACrC,UAAS,SAAS;CAEpB,MAAM,eAAe,SAAS,gBAAgB,UAAU;CACxD,MAAM,QAAwC;EAC5C;EACA,MAAM,IAAI,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC;EACzC;AACD,cAAa,IAAI,aAAa,MAAM;;AAGtC,SAAgB,eACd,WACA,UACA,IACA,cAAsB,aACnB;AACH,QAAO,uBAAuB;AAC5B,mBAAiB,WAAW,UAAU,YAAY;AAClD,SAAO,IAAI;GACX;;AAkBJ,SAAgB,gBACd,WACA,SACiB;CACjB,MAAM,WAAW,IAAI,WAAW;AAChC,KAAI,SAAS,SAAS;MAChB,oBAAoBC,cAAAA,OAAO;GAC7B,MAAM,eAAe,SAAS;AAC9B,OACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,QAAQ,UAAU,YACzB,QAAQ,UAAU,KAElB,UAAS,MAAM,QAAQ,MAAa;OAEpC,UAAS,KAAK,QAAQ,MAAa;;;AAIzC,KAAI,SAAS;OACN,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,QAAQ,QAAQ,CACvD,KAAI,OAAO,SAAS,WACjB,UAAiB,OAAO;;AAI/B,QAAO;;AAKT,SAAgB,cACd,WACA,OAGA,aACiB;CACjB,MAAM,WAAWC,eAAAA,OAAO,WAAW,YAAY;AAC/C,KAAI,oBAAoBD,cAAAA,OAAO;EAC7B,MAAM,eAAe,SAAS;AAC9B,MACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,UAAU,YACjB,UAAU,KAEV,UAAS,MAAM,MAAa;MAE5B,UAAS,KAAK,MAAa;;AAG/B,QAAO;;AAKT,SAAgB,eACd,WACA,YACA,MACA,aACiB;CACjB,MAAM,WAAWC,eAAAA,OAAO,WAAW,YAAY;AAC9C,UAAiB,cAAc;AAChC,QAAO;;AAKT,eAAsB,mBAAkC;AACtD,OAAM,IAAI,SAAe,YAAY;AACnC,aAAW,SAAS,EAAE;GACtB"}
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,5 +1,5 @@
1
1
  import { StateContainerRegistry } from './core/StateContainerRegistry';
2
- import type { ExtractState, StateContainerConstructor } from './types/utilities';
2
+ import type { ExtractArgs, ExtractDeps, ExtractState, StateContainerConstructor } from './types/utilities';
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;
@@ -11,9 +11,30 @@ type MethodKeys<T> = {
11
11
  export interface CubitStubOptions<T extends StateContainerConstructor> {
12
12
  state?: ExtractState<T> extends Record<string, any> ? Partial<ExtractState<T>> : ExtractState<T>;
13
13
  methods?: Partial<Record<MethodKeys<InstanceType<T>>, (...args: any[]) => any>>;
14
+ /**
15
+ * Args to pass to init(). If the bloc's Args type is not void, supplying
16
+ * args here causes initConfig({ args }) to be called so init() runs.
17
+ */
18
+ args?: ExtractArgs<T> extends void ? never : ExtractArgs<T>;
19
+ /**
20
+ * Deps slice to pre-wire via the core [APPLY_DEPS] path (synthetic owner
21
+ * "testing-deps"), so onDepsChanged fires during tests.
22
+ */
23
+ deps?: Partial<ExtractDeps<T>>;
14
24
  }
15
25
  export declare function createCubitStub<T extends StateContainerConstructor>(BlocClass: T, options?: CubitStubOptions<T>): InstanceType<T>;
16
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>;
17
27
  export declare function withBlocMethod<T extends StateContainerConstructor>(BlocClass: T, methodName: keyof InstanceType<T>, impl: (...args: any[]) => any, instanceKey?: string): InstanceType<T>;
28
+ /**
29
+ * Drain pending microtasks so any channel-flushed effects (subscribe()
30
+ * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run
31
+ * before the next assertion.
32
+ *
33
+ * The default `MicrotaskScheduler` coalesces emits within a tick; tests
34
+ * that emit and then assert on listener side-effects need `await flush()`
35
+ * (or its alias `flushBlocUpdates()`) between the two.
36
+ */
37
+ export declare function flush(): Promise<void>;
38
+ /** @deprecated Alias for `flush()`. */
18
39
  export declare function flushBlocUpdates(): Promise<void>;
19
40
  export {};
package/dist/testing.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { StateContainerRegistry } from './core/StateContainerRegistry';
2
- import type { ExtractState, StateContainerConstructor } from './types/utilities';
2
+ import type { ExtractArgs, ExtractDeps, ExtractState, StateContainerConstructor } from './types/utilities';
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;
@@ -11,9 +11,30 @@ type MethodKeys<T> = {
11
11
  export interface CubitStubOptions<T extends StateContainerConstructor> {
12
12
  state?: ExtractState<T> extends Record<string, any> ? Partial<ExtractState<T>> : ExtractState<T>;
13
13
  methods?: Partial<Record<MethodKeys<InstanceType<T>>, (...args: any[]) => any>>;
14
+ /**
15
+ * Args to pass to init(). If the bloc's Args type is not void, supplying
16
+ * args here causes initConfig({ args }) to be called so init() runs.
17
+ */
18
+ args?: ExtractArgs<T> extends void ? never : ExtractArgs<T>;
19
+ /**
20
+ * Deps slice to pre-wire via the core [APPLY_DEPS] path (synthetic owner
21
+ * "testing-deps"), so onDepsChanged fires during tests.
22
+ */
23
+ deps?: Partial<ExtractDeps<T>>;
14
24
  }
15
25
  export declare function createCubitStub<T extends StateContainerConstructor>(BlocClass: T, options?: CubitStubOptions<T>): InstanceType<T>;
16
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>;
17
27
  export declare function withBlocMethod<T extends StateContainerConstructor>(BlocClass: T, methodName: keyof InstanceType<T>, impl: (...args: any[]) => any, instanceKey?: string): InstanceType<T>;
28
+ /**
29
+ * Drain pending microtasks so any channel-flushed effects (subscribe()
30
+ * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run
31
+ * before the next assertion.
32
+ *
33
+ * The default `MicrotaskScheduler` coalesces emits within a tick; tests
34
+ * that emit and then assert on listener side-effects need `await flush()`
35
+ * (or its alias `flushBlocUpdates()`) between the two.
36
+ */
37
+ export declare function flush(): Promise<void>;
38
+ /** @deprecated Alias for `flush()`. */
18
39
  export declare function flushBlocUpdates(): Promise<void>;
19
40
  export {};
package/dist/testing.js CHANGED
@@ -1,8 +1,10 @@
1
- import { t as Cubit } from "./Cubit-CXxh9iol.js";
2
- import { t as StateContainerRegistry } from "./StateContainerRegistry-BK57H92E.js";
3
- import { r as setRegistry, t as getRegistry } from "./config-ispAzOZV.js";
4
- import { t as ensure } from "./ensure-CWKzeno7.js";
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";
5
5
  //#region src/testing.ts
6
+ /** Synthetic owner id used by test helpers for pre-wired deps. */
7
+ const TESTING_DEPS_OWNER = "testing-deps";
6
8
  function createTestRegistry() {
7
9
  return new StateContainerRegistry();
8
10
  }
@@ -37,19 +39,9 @@ function blacTestSetup() {
37
39
  });
38
40
  }
39
41
  const DEFAULT_KEY = "default";
40
- function registerOverride(BlocClass, instance, instanceKey = DEFAULT_KEY) {
41
- const registry = getRegistry();
42
- const existing = registry.acquire(BlocClass, instanceKey, {
43
- canCreate: true,
44
- countRef: false
45
- });
46
- if (existing !== instance && !existing.isDisposed) existing.dispose();
47
- const instancesMap = registry.getInstancesMap(BlocClass);
48
- const entry = {
49
- instance,
50
- refs: new Map([["testing-override", 1]])
51
- };
52
- instancesMap.set(instanceKey, entry);
42
+ function registerOverride(BlocClass, instance, instanceKey) {
43
+ const key = instanceKey ?? DEFAULT_KEY;
44
+ getRegistry().insertInstance(BlocClass, key, instance, new Map([["testing-override", 1]]));
53
45
  }
54
46
  function overrideEnsure(BlocClass, instance, fn, instanceKey = DEFAULT_KEY) {
55
47
  return withTestRegistry(() => {
@@ -59,6 +51,7 @@ function overrideEnsure(BlocClass, instance, fn, instanceKey = DEFAULT_KEY) {
59
51
  }
60
52
  function createCubitStub(BlocClass, options) {
61
53
  const instance = new BlocClass();
54
+ if (options?.args != null) instance.initConfig({ args: options.args });
62
55
  if (options?.state != null) {
63
56
  if (instance instanceof Cubit) {
64
57
  const currentState = instance.state;
@@ -69,6 +62,7 @@ function createCubitStub(BlocClass, options) {
69
62
  if (options?.methods) {
70
63
  for (const [key, impl] of Object.entries(options.methods)) if (typeof impl === "function") instance[key] = impl;
71
64
  }
65
+ if (options?.deps != null) instance[APPLY_DEPS](TESTING_DEPS_OWNER, options.deps);
72
66
  return instance;
73
67
  }
74
68
  function withBlocState(BlocClass, state, instanceKey) {
@@ -85,12 +79,24 @@ function withBlocMethod(BlocClass, methodName, impl, instanceKey) {
85
79
  instance[methodName] = impl;
86
80
  return instance;
87
81
  }
82
+ /**
83
+ * Drain pending microtasks so any channel-flushed effects (subscribe()
84
+ * listeners, `onSystemEvent('stateChanged')` handlers, plugin hooks) run
85
+ * before the next assertion.
86
+ *
87
+ * The default `MicrotaskScheduler` coalesces emits within a tick; tests
88
+ * that emit and then assert on listener side-effects need `await flush()`
89
+ * (or its alias `flushBlocUpdates()`) between the two.
90
+ */
91
+ async function flush() {
92
+ await Promise.resolve();
93
+ await Promise.resolve();
94
+ }
95
+ /** @deprecated Alias for `flush()`. */
88
96
  async function flushBlocUpdates() {
89
- await new Promise((resolve) => {
90
- setTimeout(resolve, 0);
91
- });
97
+ await flush();
92
98
  }
93
99
  //#endregion
94
- export { blacTestSetup, createCubitStub, createTestRegistry, flushBlocUpdates, overrideEnsure, registerOverride, withBlocMethod, withBlocState, withTestRegistry };
100
+ export { blacTestSetup, createCubitStub, createTestRegistry, flush, flushBlocUpdates, overrideEnsure, registerOverride, withBlocMethod, withBlocState, withTestRegistry };
95
101
 
96
102
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","names":[],"sources":["../src/testing.ts"],"sourcesContent":["import { Cubit } from './core/Cubit';\nimport {\n type InstanceEntry,\n StateContainerRegistry,\n} from './core/StateContainerRegistry';\nimport { ensure, getRegistry, setRegistry } from './registry';\nimport type {\n ExtractState,\n StateContainerConstructor,\n} from './types/utilities';\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 = DEFAULT_KEY,\n): void {\n const registry = getRegistry();\n const existing = registry.acquire(BlocClass, instanceKey, {\n canCreate: true,\n countRef: false,\n });\n if (existing !== instance && !existing.isDisposed) {\n existing.dispose();\n }\n const instancesMap = registry.getInstancesMap(BlocClass);\n const entry: InstanceEntry<InstanceType<T>> = {\n instance,\n refs: new Map([['testing-override', 1]]),\n };\n instancesMap.set(instanceKey, entry);\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\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 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 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\nexport async function flushBlocUpdates(): Promise<void> {\n await new Promise<void>((resolve) => {\n setTimeout(resolve, 0);\n });\n}\n"],"mappings":";;;;;AAgBA,SAAgB,qBAA6C;AAC3D,QAAO,IAAI,wBAAwB;;AAGrC,SAAgB,iBACd,IACG;CACH,MAAM,WAAW,aAAa;CAC9B,MAAM,eAAe,oBAAoB;AACzC,aAAY,aAAa;AACzB,KAAI;EACF,MAAM,SAAS,GAAG,aAAa;AAC/B,MAAI,kBAAkB,QACpB,QAAO,OAAO,MACX,UAAU;AACT,eAAY,SAAS;AACrB,UAAO;MAER,UAAU;AACT,eAAY,SAAS;AACrB,SAAM;IAET;AAEH,cAAY,SAAS;AACrB,SAAO;UACA,OAAO;AACd,cAAY,SAAS;AACrB,QAAM;;;AAMV,SAAgB,gBAAsB;CACpC,IAAI;AACJ,kBAAiB;AACf,kBAAgB,aAAa;AAC7B,cAAY,IAAI,wBAAwB,CAAC;GACzC;AACF,iBAAgB;AACd,cAAY,cAAc;GAC1B;;AAKJ,MAAM,cAAc;AAEpB,SAAgB,iBACd,WACA,UACA,cAAsB,aAChB;CACN,MAAM,WAAW,aAAa;CAC9B,MAAM,WAAW,SAAS,QAAQ,WAAW,aAAa;EACxD,WAAW;EACX,UAAU;EACX,CAAC;AACF,KAAI,aAAa,YAAY,CAAC,SAAS,WACrC,UAAS,SAAS;CAEpB,MAAM,eAAe,SAAS,gBAAgB,UAAU;CACxD,MAAM,QAAwC;EAC5C;EACA,MAAM,IAAI,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC;EACzC;AACD,cAAa,IAAI,aAAa,MAAM;;AAGtC,SAAgB,eACd,WACA,UACA,IACA,cAAsB,aACnB;AACH,QAAO,uBAAuB;AAC5B,mBAAiB,WAAW,UAAU,YAAY;AAClD,SAAO,IAAI;GACX;;AAkBJ,SAAgB,gBACd,WACA,SACiB;CACjB,MAAM,WAAW,IAAI,WAAW;AAChC,KAAI,SAAS,SAAS;MAChB,oBAAoB,OAAO;GAC7B,MAAM,eAAe,SAAS;AAC9B,OACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,QAAQ,UAAU,YACzB,QAAQ,UAAU,KAElB,UAAS,MAAM,QAAQ,MAAa;OAEpC,UAAS,KAAK,QAAQ,MAAa;;;AAIzC,KAAI,SAAS;OACN,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,QAAQ,QAAQ,CACvD,KAAI,OAAO,SAAS,WACjB,UAAiB,OAAO;;AAI/B,QAAO;;AAKT,SAAgB,cACd,WACA,OAGA,aACiB;CACjB,MAAM,WAAW,OAAO,WAAW,YAAY;AAC/C,KAAI,oBAAoB,OAAO;EAC7B,MAAM,eAAe,SAAS;AAC9B,MACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,OAAO,UAAU,YACjB,UAAU,KAEV,UAAS,MAAM,MAAa;MAE5B,UAAS,KAAK,MAAa;;AAG/B,QAAO;;AAKT,SAAgB,eACd,WACA,YACA,MACA,aACiB;CACjB,MAAM,WAAW,OAAO,WAAW,YAAY;AAC9C,UAAiB,cAAc;AAChC,QAAO;;AAKT,eAAsB,mBAAkC;AACtD,OAAM,IAAI,SAAe,YAAY;AACnC,aAAW,SAAS,EAAE;GACtB"}
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"}