@blac/core 2.0.12 → 2.0.14

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 (457) 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 +287 -0
  5. package/dist/Cubit-BBKF3PIg.js.map +1 -0
  6. package/dist/Cubit-BC70gaiA.js +453 -0
  7. package/dist/Cubit-BC70gaiA.js.map +1 -0
  8. package/dist/Cubit-BOgUZva7.js +342 -266
  9. package/dist/Cubit-BOxMvpfc.js +291 -0
  10. package/dist/Cubit-BOxMvpfc.js.map +1 -0
  11. package/dist/Cubit-BTznt8zg.js +1 -1
  12. package/dist/Cubit-BogJXkLm.js +278 -0
  13. package/dist/Cubit-BogJXkLm.js.map +1 -0
  14. package/dist/Cubit-C-8R_8db.cjs +475 -0
  15. package/dist/Cubit-C-8R_8db.cjs.map +1 -0
  16. package/dist/Cubit-C3Mw3EoO.cjs +401 -0
  17. package/dist/Cubit-C3Mw3EoO.cjs.map +1 -0
  18. package/dist/Cubit-CO8Fr72L.cjs +447 -0
  19. package/dist/Cubit-CO8Fr72L.cjs.map +1 -0
  20. package/dist/Cubit-COfHT1Bm.cjs +321 -0
  21. package/dist/Cubit-COfHT1Bm.cjs.map +1 -0
  22. package/dist/Cubit-CROWjjs9.js +481 -0
  23. package/dist/Cubit-CROWjjs9.js.map +1 -0
  24. package/dist/Cubit-CWP8Ddzx.cjs +510 -0
  25. package/dist/Cubit-CWP8Ddzx.cjs.map +1 -0
  26. package/dist/Cubit-CXxh9iol.js +302 -0
  27. package/dist/Cubit-CXxh9iol.js.map +1 -0
  28. package/dist/Cubit-CYOWfzQt.cjs +317 -0
  29. package/dist/Cubit-CYOWfzQt.cjs.map +1 -0
  30. package/dist/Cubit-CZaf_fp4.cjs +1 -1
  31. package/dist/Cubit-C_dUEUdd.cjs +359 -286
  32. package/dist/Cubit-C_rxRCTN.cjs +523 -0
  33. package/dist/Cubit-C_rxRCTN.cjs.map +1 -0
  34. package/dist/Cubit-CcKgMEBO.js +299 -0
  35. package/dist/Cubit-CcKgMEBO.js.map +1 -0
  36. package/dist/Cubit-CfT6Y1jl.js +346 -0
  37. package/dist/Cubit-CfT6Y1jl.js.map +1 -0
  38. package/dist/Cubit-CynJruuO.js +369 -0
  39. package/dist/Cubit-CynJruuO.js.map +1 -0
  40. package/dist/Cubit-D2vQ6nMb.js +342 -266
  41. package/dist/Cubit-D7jOZCoZ.js +342 -266
  42. package/dist/Cubit-D9j3IGPc.cjs +523 -0
  43. package/dist/Cubit-D9j3IGPc.cjs.map +1 -0
  44. package/dist/Cubit-DKEY9WYq.cjs +296 -0
  45. package/dist/Cubit-DKEY9WYq.cjs.map +1 -0
  46. package/dist/Cubit-DMV_0TCp.js +481 -0
  47. package/dist/Cubit-DMV_0TCp.js.map +1 -0
  48. package/dist/Cubit-DP5DXPUK.js +342 -266
  49. package/dist/Cubit-DRFkzD2h.js +426 -0
  50. package/dist/Cubit-DRFkzD2h.js.map +1 -0
  51. package/dist/Cubit-DbnhTUaZ.cjs +359 -286
  52. package/dist/Cubit-DrqG3SP3.cjs +370 -0
  53. package/dist/Cubit-DrqG3SP3.cjs.map +1 -0
  54. package/dist/Cubit-DsDkCo42.cjs +313 -0
  55. package/dist/Cubit-DsDkCo42.cjs.map +1 -0
  56. package/dist/Cubit-DwRw1E9D.cjs +309 -0
  57. package/dist/Cubit-DwRw1E9D.cjs.map +1 -0
  58. package/dist/Cubit-Dw_kFBgc.js +1 -1
  59. package/dist/Cubit-KiXZCubP.cjs +1 -1
  60. package/dist/Cubit-Ksj7G4uR.js +342 -266
  61. package/dist/Cubit-MkjbpcPf.cjs +359 -286
  62. package/dist/Cubit-NRhvdDQ6.js +297 -0
  63. package/dist/Cubit-NRhvdDQ6.js.map +1 -0
  64. package/dist/Cubit-PMTXxI_u.js +1 -1
  65. package/dist/Cubit-VJuu2tt9.js +481 -0
  66. package/dist/Cubit-VJuu2tt9.js.map +1 -0
  67. package/dist/Cubit-jz922NKf.cjs +320 -0
  68. package/dist/Cubit-jz922NKf.cjs.map +1 -0
  69. package/dist/Cubit-kU5_4jgC.cjs +359 -286
  70. package/dist/StateContainerRegistry-B4yVMYbx.cjs +1057 -0
  71. package/dist/StateContainerRegistry-B4yVMYbx.cjs.map +1 -0
  72. package/dist/StateContainerRegistry-BAcxouCu.js +723 -0
  73. package/dist/StateContainerRegistry-BAcxouCu.js.map +1 -0
  74. package/dist/StateContainerRegistry-BK57H92E.js +747 -0
  75. package/dist/StateContainerRegistry-BK57H92E.js.map +1 -0
  76. package/dist/StateContainerRegistry-BRBATSrx.cjs +1030 -0
  77. package/dist/StateContainerRegistry-BRBATSrx.cjs.map +1 -0
  78. package/dist/StateContainerRegistry-BgBIKcQF.js +956 -0
  79. package/dist/StateContainerRegistry-BgBIKcQF.js.map +1 -0
  80. package/dist/StateContainerRegistry-BglEhqdA.js +709 -0
  81. package/dist/StateContainerRegistry-BglEhqdA.js.map +1 -0
  82. package/dist/StateContainerRegistry-BhcnG0DF.js +625 -562
  83. package/dist/StateContainerRegistry-BpO5t-0i.js +682 -0
  84. package/dist/StateContainerRegistry-BpO5t-0i.js.map +1 -0
  85. package/dist/StateContainerRegistry-BqS-wpb_.js +957 -0
  86. package/dist/StateContainerRegistry-BqS-wpb_.js.map +1 -0
  87. package/dist/StateContainerRegistry-BrEGYPZT.cjs +1029 -0
  88. package/dist/StateContainerRegistry-BrEGYPZT.cjs.map +1 -0
  89. package/dist/StateContainerRegistry-Bxfne4A7.cjs +908 -0
  90. package/dist/StateContainerRegistry-Bxfne4A7.cjs.map +1 -0
  91. package/dist/StateContainerRegistry-C0E7vsgy.js +758 -0
  92. package/dist/StateContainerRegistry-C0E7vsgy.js.map +1 -0
  93. package/dist/StateContainerRegistry-C0I77Ndz.cjs +920 -0
  94. package/dist/StateContainerRegistry-C0I77Ndz.cjs.map +1 -0
  95. package/dist/StateContainerRegistry-CDH9mnQS.cjs +715 -0
  96. package/dist/StateContainerRegistry-CDH9mnQS.cjs.map +1 -0
  97. package/dist/StateContainerRegistry-CTOXUf75.cjs +742 -0
  98. package/dist/StateContainerRegistry-CTOXUf75.cjs.map +1 -0
  99. package/dist/StateContainerRegistry-CX2CBOmv.cjs +795 -0
  100. package/dist/StateContainerRegistry-CX2CBOmv.cjs.map +1 -0
  101. package/dist/StateContainerRegistry-CXnnf2-l.js +867 -0
  102. package/dist/StateContainerRegistry-CXnnf2-l.js.map +1 -0
  103. package/dist/StateContainerRegistry-CehuIpK_.cjs +811 -0
  104. package/dist/StateContainerRegistry-CehuIpK_.cjs.map +1 -0
  105. package/dist/StateContainerRegistry-Ci0ajc5g.js +720 -0
  106. package/dist/StateContainerRegistry-Ci0ajc5g.js.map +1 -0
  107. package/dist/StateContainerRegistry-Ck2-XmT_.js +587 -527
  108. package/dist/StateContainerRegistry-D1lVJFGL.cjs +753 -0
  109. package/dist/StateContainerRegistry-D1lVJFGL.cjs.map +1 -0
  110. package/dist/StateContainerRegistry-DC4N73O6.js +632 -569
  111. package/dist/StateContainerRegistry-DOuGI-l5.js +645 -582
  112. package/dist/StateContainerRegistry-DT66lr3I.cjs +651 -596
  113. package/dist/StateContainerRegistry-DmmzYa7S.js +974 -0
  114. package/dist/StateContainerRegistry-DmmzYa7S.js.map +1 -0
  115. package/dist/StateContainerRegistry-Upsrlg9G.cjs +756 -0
  116. package/dist/StateContainerRegistry-Upsrlg9G.cjs.map +1 -0
  117. package/dist/StateContainerRegistry-WznfcA-Q.js +855 -0
  118. package/dist/StateContainerRegistry-WznfcA-Q.js.map +1 -0
  119. package/dist/StateContainerRegistry-Yph6UCA_.js +637 -569
  120. package/dist/StateContainerRegistry-mseeTqSA.cjs +671 -616
  121. package/dist/StateContainerRegistry-pRNxHNFD.cjs +658 -603
  122. package/dist/StateContainerRegistry-vXMWtG7J.cjs +613 -561
  123. package/dist/StateContainerRegistry-v_prqMcI.cjs +663 -603
  124. package/dist/branded-BSeA_mZO.cjs.map +1 -1
  125. package/dist/branded-DCqi3De1.cjs +11 -11
  126. package/dist/branded-DwtzSsg0.js.map +1 -1
  127. package/dist/branded-Max3xOTA.js +6 -6
  128. package/dist/config-0ZD9i3wy.js +16 -0
  129. package/dist/config-0ZD9i3wy.js.map +1 -0
  130. package/dist/config-B3NIwDQv.cjs +32 -0
  131. package/dist/config-B3NIwDQv.cjs.map +1 -0
  132. package/dist/config-BKGHop0V.js +16 -0
  133. package/dist/config-BKGHop0V.js.map +1 -0
  134. package/dist/config-BKoaAlmb.js +5 -5
  135. package/dist/config-BPj08-8h.cjs +32 -0
  136. package/dist/config-BPj08-8h.cjs.map +1 -0
  137. package/dist/config-BR0Xy-Tn.cjs +32 -0
  138. package/dist/config-BR0Xy-Tn.cjs.map +1 -0
  139. package/dist/config-B_4xXpvK.cjs +32 -0
  140. package/dist/config-B_4xXpvK.cjs.map +1 -0
  141. package/dist/config-BflrQM4_.cjs +32 -0
  142. package/dist/config-BflrQM4_.cjs.map +1 -0
  143. package/dist/config-BzObBsk2.cjs +32 -0
  144. package/dist/config-BzObBsk2.cjs.map +1 -0
  145. package/dist/config-C0yumL1H.cjs +32 -0
  146. package/dist/config-C0yumL1H.cjs.map +1 -0
  147. package/dist/config-C8xqVHTf.js +16 -0
  148. package/dist/config-C8xqVHTf.js.map +1 -0
  149. package/dist/config-CCUhIYIF.js +5 -5
  150. package/dist/config-CGo__MAt.js +16 -0
  151. package/dist/config-CGo__MAt.js.map +1 -0
  152. package/dist/config-CQH9fTY-.cjs +32 -0
  153. package/dist/config-CQH9fTY-.cjs.map +1 -0
  154. package/dist/config-CR_Bz7RD.js +5 -5
  155. package/dist/config-CTOa-yPN.cjs +20 -20
  156. package/dist/config-Cd7Q-B4g.js +16 -0
  157. package/dist/config-Cd7Q-B4g.js.map +1 -0
  158. package/dist/config-CmDEX-1o.js +16 -0
  159. package/dist/config-CmDEX-1o.js.map +1 -0
  160. package/dist/config-CoNMTnMA.cjs +32 -0
  161. package/dist/config-CoNMTnMA.cjs.map +1 -0
  162. package/dist/config-Cwj8-C1J.js +16 -0
  163. package/dist/config-Cwj8-C1J.js.map +1 -0
  164. package/dist/config-D3jisfdj.cjs +20 -20
  165. package/dist/config-D4GifZQ4.js +5 -5
  166. package/dist/config-DDrSQGpQ.cjs +20 -20
  167. package/dist/config-DEcslxan.cjs +32 -0
  168. package/dist/config-DEcslxan.cjs.map +1 -0
  169. package/dist/config-DMNZ2YLV.cjs +20 -20
  170. package/dist/config-De9oQ6Ki.js +16 -0
  171. package/dist/config-De9oQ6Ki.js.map +1 -0
  172. package/dist/config-DoHx0Xsl.js +16 -0
  173. package/dist/config-DoHx0Xsl.js.map +1 -0
  174. package/dist/config-DokTzpr8.cjs +20 -20
  175. package/dist/config-DslYBm4Z.js +5 -5
  176. package/dist/config-H6FAqbW4.cjs +32 -0
  177. package/dist/config-H6FAqbW4.cjs.map +1 -0
  178. package/dist/config-Yp645dGK.js +16 -0
  179. package/dist/config-Yp645dGK.js.map +1 -0
  180. package/dist/config-ispAzOZV.js +16 -0
  181. package/dist/config-ispAzOZV.js.map +1 -0
  182. package/dist/config.d.cts +72 -0
  183. package/dist/config.d.ts +72 -0
  184. package/dist/constants.d.cts +18 -28
  185. package/dist/constants.d.ts +18 -28
  186. package/dist/core/Cubit.d.ts +14 -5
  187. package/dist/core/StateContainer.d.ts +112 -15
  188. package/dist/core/StateContainerRegistry.d.ts +66 -7
  189. package/dist/core/symbols.d.ts +26 -1
  190. package/dist/debug.cjs +3 -3
  191. package/dist/debug.js +3 -3
  192. package/dist/decorators/blac.d.ts +17 -0
  193. package/dist/ensure-9VEq5H0L.js +3 -3
  194. package/dist/ensure-BB6xHQAF.cjs +14 -0
  195. package/dist/ensure-BB6xHQAF.cjs.map +1 -0
  196. package/dist/ensure-BNDfTzqg.cjs +8 -8
  197. package/dist/ensure-BVCnjU7r.js +343 -267
  198. package/dist/ensure-BbzGXjep.cjs +8 -8
  199. package/dist/ensure-BlIaQai6.js +9 -0
  200. package/dist/ensure-BlIaQai6.js.map +1 -0
  201. package/dist/ensure-Bm3oHxga.js +9 -0
  202. package/dist/ensure-Bm3oHxga.js.map +1 -0
  203. package/dist/ensure-C3eIRs6e.cjs +14 -0
  204. package/dist/ensure-C3eIRs6e.cjs.map +1 -0
  205. package/dist/ensure-CJZL7bcA.cjs +365 -292
  206. package/dist/ensure-CN6unBOe.cjs +14 -0
  207. package/dist/ensure-CN6unBOe.cjs.map +1 -0
  208. package/dist/ensure-CU-B1ywv.js +3 -3
  209. package/dist/ensure-CWKzeno7.js +9 -0
  210. package/dist/ensure-CWKzeno7.js.map +1 -0
  211. package/dist/ensure-CkENsuQ9.js +9 -0
  212. package/dist/ensure-CkENsuQ9.js.map +1 -0
  213. package/dist/ensure-Cm-4_LSh.cjs +14 -0
  214. package/dist/ensure-Cm-4_LSh.cjs.map +1 -0
  215. package/dist/ensure-Cqex5r1P.cjs +14 -0
  216. package/dist/ensure-Cqex5r1P.cjs.map +1 -0
  217. package/dist/ensure-Cv5AbNGZ.js +9 -0
  218. package/dist/ensure-Cv5AbNGZ.js.map +1 -0
  219. package/dist/ensure-D63lEMUK.cjs +8 -8
  220. package/dist/ensure-DGEtPU9A.cjs +14 -0
  221. package/dist/ensure-DGEtPU9A.cjs.map +1 -0
  222. package/dist/ensure-DM3qb336.cjs +14 -0
  223. package/dist/ensure-DM3qb336.cjs.map +1 -0
  224. package/dist/ensure-DME-_T0j.cjs +14 -0
  225. package/dist/ensure-DME-_T0j.cjs.map +1 -0
  226. package/dist/ensure-DWd0GCYB.js +9 -0
  227. package/dist/ensure-DWd0GCYB.js.map +1 -0
  228. package/dist/ensure-DamKOP6q.cjs +8 -8
  229. package/dist/ensure-Dcfptl-A.js +9 -0
  230. package/dist/ensure-Dcfptl-A.js.map +1 -0
  231. package/dist/ensure-Def-EBWG.js +3 -3
  232. package/dist/ensure-DnHL5QiQ.cjs +14 -0
  233. package/dist/ensure-DnHL5QiQ.cjs.map +1 -0
  234. package/dist/ensure-Dr7I78Ku.cjs +14 -0
  235. package/dist/ensure-Dr7I78Ku.cjs.map +1 -0
  236. package/dist/ensure-SLVdGd5b.js +9 -0
  237. package/dist/ensure-SLVdGd5b.js.map +1 -0
  238. package/dist/ensure-Sb92MCXu.js +3 -3
  239. package/dist/ensure-gFlvevGm.cjs +14 -0
  240. package/dist/ensure-gFlvevGm.cjs.map +1 -0
  241. package/dist/ensure-l2-H7S5W.js +9 -0
  242. package/dist/ensure-l2-H7S5W.js.map +1 -0
  243. package/dist/ensure-mkL-3qh8.js +9 -0
  244. package/dist/ensure-mkL-3qh8.js.map +1 -0
  245. package/dist/ensure-n80crSlX.js +3 -3
  246. package/dist/ensure-nCxg7MCN.js +9 -0
  247. package/dist/ensure-nCxg7MCN.js.map +1 -0
  248. package/dist/ensure-vS71MV4q.cjs +8 -8
  249. package/dist/index.cjs +40 -15
  250. package/dist/index.cjs.map +1 -1
  251. package/dist/index.d.cts +15 -4
  252. package/dist/index.d.ts +15 -4
  253. package/dist/index.js +23 -10
  254. package/dist/index.js.map +1 -1
  255. package/dist/management-6oQbmf0z.js +41 -0
  256. package/dist/management-6oQbmf0z.js.map +1 -0
  257. package/dist/management-B46QwA9Y.js +41 -0
  258. package/dist/management-B46QwA9Y.js.map +1 -0
  259. package/dist/management-B9yrRpeg.js +41 -0
  260. package/dist/management-B9yrRpeg.js.map +1 -0
  261. package/dist/management-BCKTEZ8Q.js +41 -0
  262. package/dist/management-BCKTEZ8Q.js.map +1 -0
  263. package/dist/management-BbMzdXbT.js +41 -0
  264. package/dist/management-BbMzdXbT.js.map +1 -0
  265. package/dist/management-Bg652agq.js +20 -11
  266. package/dist/management-BnedF5ZD.cjs +79 -0
  267. package/dist/management-BnedF5ZD.cjs.map +1 -0
  268. package/dist/management-BoUa99eB.cjs +79 -0
  269. package/dist/management-BoUa99eB.cjs.map +1 -0
  270. package/dist/management-C4SHcrJm.cjs +79 -0
  271. package/dist/management-C4SHcrJm.cjs.map +1 -0
  272. package/dist/management-CK-GL3wY.js +41 -0
  273. package/dist/management-CK-GL3wY.js.map +1 -0
  274. package/dist/management-CPhgY8OE.js +41 -0
  275. package/dist/management-CPhgY8OE.js.map +1 -0
  276. package/dist/management-CU_V3LIP.js +20 -11
  277. package/dist/management-CUwXDSi9.cjs +79 -0
  278. package/dist/management-CUwXDSi9.cjs.map +1 -0
  279. package/dist/management-CaqiyNzB.js +20 -11
  280. package/dist/management-Cin-JvYe.js +20 -11
  281. package/dist/management-ClaXym0F.cjs +50 -50
  282. package/dist/management-DL0Uzsoz.js +41 -0
  283. package/dist/management-DL0Uzsoz.js.map +1 -0
  284. package/dist/management-DLdAQfqk.cjs +79 -0
  285. package/dist/management-DLdAQfqk.cjs.map +1 -0
  286. package/dist/management-DMZ8qpwr.cjs +79 -0
  287. package/dist/management-DMZ8qpwr.cjs.map +1 -0
  288. package/dist/management-DTzcC6aD.cjs +79 -0
  289. package/dist/management-DTzcC6aD.cjs.map +1 -0
  290. package/dist/management-DYLNyj9p.cjs +79 -0
  291. package/dist/management-DYLNyj9p.cjs.map +1 -0
  292. package/dist/management-Dag9u4t6.cjs +50 -50
  293. package/dist/management-DbMRdDBo.cjs +50 -50
  294. package/dist/management-DfnDAKmP.js +41 -0
  295. package/dist/management-DfnDAKmP.js.map +1 -0
  296. package/dist/management-DjBU1gtb.cjs +79 -0
  297. package/dist/management-DjBU1gtb.cjs.map +1 -0
  298. package/dist/management-DwCozsY8.js +41 -0
  299. package/dist/management-DwCozsY8.js.map +1 -0
  300. package/dist/management-H4m3ciJO.js +32 -0
  301. package/dist/management-H4m3ciJO.js.map +1 -0
  302. package/dist/management-Xo3A6Za3.cjs +79 -0
  303. package/dist/management-Xo3A6Za3.cjs.map +1 -0
  304. package/dist/management-ZU2YzOkr.js +18 -10
  305. package/dist/management-baPDwA9n.cjs +50 -50
  306. package/dist/management-jQGCvZNN.cjs +44 -44
  307. package/dist/management-ry_KteFK.cjs +79 -0
  308. package/dist/management-ry_KteFK.cjs.map +1 -0
  309. package/dist/plugin/BlacPlugin.d.ts +70 -100
  310. package/dist/plugin/PluginManager.d.ts +67 -5
  311. package/dist/plugins.cjs +1 -1
  312. package/dist/plugins.d.cts +2 -2
  313. package/dist/plugins.d.ts +2 -2
  314. package/dist/plugins.js +1 -1
  315. package/dist/registry/acquire.d.ts +9 -2
  316. package/dist/registry/ensure.d.ts +2 -2
  317. package/dist/registry/index.d.ts +1 -1
  318. package/dist/resolve-dependencies-B2QggQAi.js +729 -0
  319. package/dist/resolve-dependencies-B2QggQAi.js.map +1 -0
  320. package/dist/resolve-dependencies-B6JDXvpr.js +739 -0
  321. package/dist/resolve-dependencies-B6JDXvpr.js.map +1 -0
  322. package/dist/resolve-dependencies-BAKAoD0U.js +878 -0
  323. package/dist/resolve-dependencies-BAKAoD0U.js.map +1 -0
  324. package/dist/resolve-dependencies-BFZQq60Y.cjs +724 -666
  325. package/dist/resolve-dependencies-BGafS3Ww.js +643 -561
  326. package/dist/resolve-dependencies-BHd34gS3.cjs +724 -666
  327. package/dist/resolve-dependencies-BNeayhbQ.cjs +840 -0
  328. package/dist/resolve-dependencies-BNeayhbQ.cjs.map +1 -0
  329. package/dist/resolve-dependencies-BWEMpuDy.js +729 -0
  330. package/dist/resolve-dependencies-BWEMpuDy.js.map +1 -0
  331. package/dist/resolve-dependencies-BiWkW2eS.js +643 -561
  332. package/dist/resolve-dependencies-BjxCztYD.js +739 -0
  333. package/dist/resolve-dependencies-BjxCztYD.js.map +1 -0
  334. package/dist/resolve-dependencies-BlyBV0hB.cjs +969 -0
  335. package/dist/resolve-dependencies-BlyBV0hB.cjs.map +1 -0
  336. package/dist/resolve-dependencies-By26rT_i.js +739 -0
  337. package/dist/resolve-dependencies-By26rT_i.js.map +1 -0
  338. package/dist/resolve-dependencies-C9Kf7AzY.cjs +832 -0
  339. package/dist/resolve-dependencies-C9Kf7AzY.cjs.map +1 -0
  340. package/dist/resolve-dependencies-CTzV1txG.js +643 -561
  341. package/dist/resolve-dependencies-CWjuGHiF.cjs +969 -0
  342. package/dist/resolve-dependencies-CWjuGHiF.cjs.map +1 -0
  343. package/dist/resolve-dependencies-ClSsP0DJ.cjs +830 -0
  344. package/dist/resolve-dependencies-ClSsP0DJ.cjs.map +1 -0
  345. package/dist/resolve-dependencies-D0vTzZgs.js +643 -561
  346. package/dist/resolve-dependencies-D2WnZMF-.cjs +724 -666
  347. package/dist/resolve-dependencies-DCBLTeza.cjs +969 -0
  348. package/dist/resolve-dependencies-DCBLTeza.cjs.map +1 -0
  349. package/dist/resolve-dependencies-DMlqYJR2.js +731 -0
  350. package/dist/resolve-dependencies-DMlqYJR2.js.map +1 -0
  351. package/dist/resolve-dependencies-DP6U1EYB.cjs +840 -0
  352. package/dist/resolve-dependencies-DP6U1EYB.cjs.map +1 -0
  353. package/dist/resolve-dependencies-DSQNXvnV.cjs +724 -666
  354. package/dist/resolve-dependencies-DV3HO_uH.js +878 -0
  355. package/dist/resolve-dependencies-DV3HO_uH.js.map +1 -0
  356. package/dist/resolve-dependencies-DXwMhP0Y.js +878 -0
  357. package/dist/resolve-dependencies-DXwMhP0Y.js.map +1 -0
  358. package/dist/resolve-dependencies-DbRWlt9u.js +878 -0
  359. package/dist/resolve-dependencies-DbRWlt9u.js.map +1 -0
  360. package/dist/resolve-dependencies-DcUUva2P.cjs +724 -666
  361. package/dist/resolve-dependencies-Dd8T6TLt.cjs +832 -0
  362. package/dist/resolve-dependencies-Dd8T6TLt.cjs.map +1 -0
  363. package/dist/resolve-dependencies-Dfdp_DZd.cjs +840 -0
  364. package/dist/resolve-dependencies-Dfdp_DZd.cjs.map +1 -0
  365. package/dist/resolve-dependencies-GJ8PNyNB.cjs +969 -0
  366. package/dist/resolve-dependencies-GJ8PNyNB.cjs.map +1 -0
  367. package/dist/resolve-dependencies-KSpTt4jy.cjs +830 -0
  368. package/dist/resolve-dependencies-KSpTt4jy.cjs.map +1 -0
  369. package/dist/resolve-dependencies-Nvjp4CwS.js +731 -0
  370. package/dist/resolve-dependencies-Nvjp4CwS.js.map +1 -0
  371. package/dist/resolve-dependencies-f-QUqYiL.js +643 -561
  372. package/dist/testing.cjs +27 -20
  373. package/dist/testing.cjs.map +1 -1
  374. package/dist/testing.d.cts +22 -1
  375. package/dist/testing.d.ts +22 -1
  376. package/dist/testing.js +27 -21
  377. package/dist/testing.js.map +1 -1
  378. package/dist/tracked-B77j2g9M.js +171 -151
  379. package/dist/tracked-BDVi2LKM.cjs +196 -175
  380. package/dist/tracked-BFdJCzL0.cjs +242 -0
  381. package/dist/tracked-BFdJCzL0.cjs.map +1 -0
  382. package/dist/tracked-BH-gX4T1.cjs +196 -175
  383. package/dist/tracked-BTHok3Dl.cjs +196 -175
  384. package/dist/tracked-BTbFkFeM.js +212 -0
  385. package/dist/tracked-BTbFkFeM.js.map +1 -0
  386. package/dist/tracked-BU_OBWqM.cjs +242 -0
  387. package/dist/tracked-BU_OBWqM.cjs.map +1 -0
  388. package/dist/tracked-BfctH2es.cjs +242 -0
  389. package/dist/tracked-BfctH2es.cjs.map +1 -0
  390. package/dist/tracked-BhQtzUhZ.js +212 -0
  391. package/dist/tracked-BhQtzUhZ.js.map +1 -0
  392. package/dist/tracked-BnqrYXiO.js +212 -0
  393. package/dist/tracked-BnqrYXiO.js.map +1 -0
  394. package/dist/tracked-BtgFOGup.js +212 -0
  395. package/dist/tracked-BtgFOGup.js.map +1 -0
  396. package/dist/tracked-C3nIS4J7.cjs +242 -0
  397. package/dist/tracked-C3nIS4J7.cjs.map +1 -0
  398. package/dist/tracked-C52awNV9.js +197 -0
  399. package/dist/tracked-C52awNV9.js.map +1 -0
  400. package/dist/tracked-CGzduF2m.js +212 -0
  401. package/dist/tracked-CGzduF2m.js.map +1 -0
  402. package/dist/tracked-CK_-ixtX.cjs +227 -0
  403. package/dist/tracked-CK_-ixtX.cjs.map +1 -0
  404. package/dist/tracked-CLlvURln.js +212 -0
  405. package/dist/tracked-CLlvURln.js.map +1 -0
  406. package/dist/tracked-CgHWmuGC.cjs +242 -0
  407. package/dist/tracked-CgHWmuGC.cjs.map +1 -0
  408. package/dist/tracked-CoAlC8fs.js +171 -151
  409. package/dist/tracked-D3Xjm1H1.cjs +242 -0
  410. package/dist/tracked-D3Xjm1H1.cjs.map +1 -0
  411. package/dist/tracked-DB6yMV5F.js +212 -0
  412. package/dist/tracked-DB6yMV5F.js.map +1 -0
  413. package/dist/tracked-DBn-bs_G.js +171 -151
  414. package/dist/tracked-DMBTDF0P.js +171 -151
  415. package/dist/tracked-DN3h3Rp1.js +197 -0
  416. package/dist/tracked-DN3h3Rp1.js.map +1 -0
  417. package/dist/tracked-DOGh1Q5Z.cjs +242 -0
  418. package/dist/tracked-DOGh1Q5Z.cjs.map +1 -0
  419. package/dist/tracked-DUkp4zve.cjs +227 -0
  420. package/dist/tracked-DUkp4zve.cjs.map +1 -0
  421. package/dist/tracked-D_ou7mYG.js +212 -0
  422. package/dist/tracked-D_ou7mYG.js.map +1 -0
  423. package/dist/tracked-Dcu6EATB.js +171 -151
  424. package/dist/tracked-GvAJQVAI.cjs +227 -196
  425. package/dist/tracked-O2lv-kJV.cjs +242 -0
  426. package/dist/tracked-O2lv-kJV.cjs.map +1 -0
  427. package/dist/tracked-WF6aXuAo.js +186 -162
  428. package/dist/tracked-d_sQWU3c.cjs +196 -175
  429. package/dist/tracked-n9TMK-30.cjs +196 -175
  430. package/dist/tracked-njU-_pVa.cjs +242 -0
  431. package/dist/tracked-njU-_pVa.cjs.map +1 -0
  432. package/dist/tracked-zAgmKIlC.js +212 -0
  433. package/dist/tracked-zAgmKIlC.js.map +1 -0
  434. package/dist/tracking/dependency-manager.d.ts +33 -29
  435. package/dist/tracking/index.d.ts +16 -1
  436. package/dist/tracking/iteration-perf.bench.d.ts +1 -0
  437. package/dist/tracking/path-utils.d.ts +18 -1
  438. package/dist/tracking/resolve-dependencies.d.ts +3 -1
  439. package/dist/tracking/tracked.d.ts +37 -34
  440. package/dist/tracking/tracking-proxy.d.ts +94 -47
  441. package/dist/tracking.cjs +12 -9
  442. package/dist/tracking.js +32 -2
  443. package/dist/types/utilities.d.ts +15 -3
  444. package/dist/types.cjs +1 -1
  445. package/dist/types.js +1 -1
  446. package/dist/utils/static-props.d.ts +23 -0
  447. package/dist/utils/structural-key.d.ts +14 -0
  448. package/dist/watch/watch.d.ts +1 -1
  449. package/dist/watch-BpwaUL8r.cjs +68 -0
  450. package/dist/watch-BpwaUL8r.cjs.map +1 -0
  451. package/dist/watch-DWCqXllW.js +57 -0
  452. package/dist/watch-DWCqXllW.js.map +1 -0
  453. package/dist/watch-entry.cjs +3 -6
  454. package/dist/watch-entry.d.cts +1 -3
  455. package/dist/watch-entry.d.ts +1 -3
  456. package/dist/watch-entry.js +2 -2
  457. 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-BAUPiUF7.cjs");
3
- const require_StateContainerRegistry = require("./StateContainerRegistry-mseeTqSA.cjs");
4
- const require_config = require("./config-DMNZ2YLV.cjs");
5
- const require_ensure = require("./ensure-vS71MV4q.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-BOgUZva7.js";
2
- import { t as StateContainerRegistry } from "./StateContainerRegistry-DOuGI-l5.js";
3
- import { r as setRegistry, t as getRegistry } from "./config-CCUhIYIF.js";
4
- import { t as ensure } from "./ensure-CU-B1ywv.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"}