@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.
- package/README.md +85 -3
- package/dist/Cubit-9jal5zdZ.cjs +1 -1
- package/dist/Cubit-BAUPiUF7.cjs +359 -286
- package/dist/Cubit-BBKF3PIg.js +287 -0
- package/dist/Cubit-BBKF3PIg.js.map +1 -0
- package/dist/Cubit-BC70gaiA.js +453 -0
- package/dist/Cubit-BC70gaiA.js.map +1 -0
- package/dist/Cubit-BOgUZva7.js +342 -266
- package/dist/Cubit-BOxMvpfc.js +291 -0
- package/dist/Cubit-BOxMvpfc.js.map +1 -0
- package/dist/Cubit-BTznt8zg.js +1 -1
- package/dist/Cubit-BogJXkLm.js +278 -0
- package/dist/Cubit-BogJXkLm.js.map +1 -0
- package/dist/Cubit-C-8R_8db.cjs +475 -0
- package/dist/Cubit-C-8R_8db.cjs.map +1 -0
- package/dist/Cubit-C3Mw3EoO.cjs +401 -0
- package/dist/Cubit-C3Mw3EoO.cjs.map +1 -0
- package/dist/Cubit-CO8Fr72L.cjs +447 -0
- package/dist/Cubit-CO8Fr72L.cjs.map +1 -0
- package/dist/Cubit-COfHT1Bm.cjs +321 -0
- package/dist/Cubit-COfHT1Bm.cjs.map +1 -0
- package/dist/Cubit-CROWjjs9.js +481 -0
- package/dist/Cubit-CROWjjs9.js.map +1 -0
- package/dist/Cubit-CWP8Ddzx.cjs +510 -0
- package/dist/Cubit-CWP8Ddzx.cjs.map +1 -0
- package/dist/Cubit-CXxh9iol.js +302 -0
- package/dist/Cubit-CXxh9iol.js.map +1 -0
- package/dist/Cubit-CYOWfzQt.cjs +317 -0
- package/dist/Cubit-CYOWfzQt.cjs.map +1 -0
- package/dist/Cubit-CZaf_fp4.cjs +1 -1
- package/dist/Cubit-C_dUEUdd.cjs +359 -286
- package/dist/Cubit-C_rxRCTN.cjs +523 -0
- package/dist/Cubit-C_rxRCTN.cjs.map +1 -0
- package/dist/Cubit-CcKgMEBO.js +299 -0
- package/dist/Cubit-CcKgMEBO.js.map +1 -0
- package/dist/Cubit-CfT6Y1jl.js +346 -0
- package/dist/Cubit-CfT6Y1jl.js.map +1 -0
- package/dist/Cubit-CynJruuO.js +369 -0
- package/dist/Cubit-CynJruuO.js.map +1 -0
- package/dist/Cubit-D2vQ6nMb.js +342 -266
- package/dist/Cubit-D7jOZCoZ.js +342 -266
- package/dist/Cubit-D9j3IGPc.cjs +523 -0
- package/dist/Cubit-D9j3IGPc.cjs.map +1 -0
- package/dist/Cubit-DKEY9WYq.cjs +296 -0
- package/dist/Cubit-DKEY9WYq.cjs.map +1 -0
- package/dist/Cubit-DMV_0TCp.js +481 -0
- package/dist/Cubit-DMV_0TCp.js.map +1 -0
- package/dist/Cubit-DP5DXPUK.js +342 -266
- package/dist/Cubit-DRFkzD2h.js +426 -0
- package/dist/Cubit-DRFkzD2h.js.map +1 -0
- package/dist/Cubit-DbnhTUaZ.cjs +359 -286
- package/dist/Cubit-DrqG3SP3.cjs +370 -0
- package/dist/Cubit-DrqG3SP3.cjs.map +1 -0
- package/dist/Cubit-DsDkCo42.cjs +313 -0
- package/dist/Cubit-DsDkCo42.cjs.map +1 -0
- package/dist/Cubit-DwRw1E9D.cjs +309 -0
- package/dist/Cubit-DwRw1E9D.cjs.map +1 -0
- package/dist/Cubit-Dw_kFBgc.js +1 -1
- package/dist/Cubit-KiXZCubP.cjs +1 -1
- package/dist/Cubit-Ksj7G4uR.js +342 -266
- package/dist/Cubit-MkjbpcPf.cjs +359 -286
- package/dist/Cubit-NRhvdDQ6.js +297 -0
- package/dist/Cubit-NRhvdDQ6.js.map +1 -0
- package/dist/Cubit-PMTXxI_u.js +1 -1
- package/dist/Cubit-VJuu2tt9.js +481 -0
- package/dist/Cubit-VJuu2tt9.js.map +1 -0
- package/dist/Cubit-jz922NKf.cjs +320 -0
- package/dist/Cubit-jz922NKf.cjs.map +1 -0
- package/dist/Cubit-kU5_4jgC.cjs +359 -286
- package/dist/StateContainerRegistry-B4yVMYbx.cjs +1057 -0
- package/dist/StateContainerRegistry-B4yVMYbx.cjs.map +1 -0
- package/dist/StateContainerRegistry-BAcxouCu.js +723 -0
- package/dist/StateContainerRegistry-BAcxouCu.js.map +1 -0
- package/dist/StateContainerRegistry-BK57H92E.js +747 -0
- package/dist/StateContainerRegistry-BK57H92E.js.map +1 -0
- package/dist/StateContainerRegistry-BRBATSrx.cjs +1030 -0
- package/dist/StateContainerRegistry-BRBATSrx.cjs.map +1 -0
- package/dist/StateContainerRegistry-BgBIKcQF.js +956 -0
- package/dist/StateContainerRegistry-BgBIKcQF.js.map +1 -0
- package/dist/StateContainerRegistry-BglEhqdA.js +709 -0
- package/dist/StateContainerRegistry-BglEhqdA.js.map +1 -0
- package/dist/StateContainerRegistry-BhcnG0DF.js +625 -562
- package/dist/StateContainerRegistry-BpO5t-0i.js +682 -0
- package/dist/StateContainerRegistry-BpO5t-0i.js.map +1 -0
- package/dist/StateContainerRegistry-BqS-wpb_.js +957 -0
- package/dist/StateContainerRegistry-BqS-wpb_.js.map +1 -0
- package/dist/StateContainerRegistry-BrEGYPZT.cjs +1029 -0
- package/dist/StateContainerRegistry-BrEGYPZT.cjs.map +1 -0
- package/dist/StateContainerRegistry-Bxfne4A7.cjs +908 -0
- package/dist/StateContainerRegistry-Bxfne4A7.cjs.map +1 -0
- package/dist/StateContainerRegistry-C0E7vsgy.js +758 -0
- package/dist/StateContainerRegistry-C0E7vsgy.js.map +1 -0
- package/dist/StateContainerRegistry-C0I77Ndz.cjs +920 -0
- package/dist/StateContainerRegistry-C0I77Ndz.cjs.map +1 -0
- package/dist/StateContainerRegistry-CDH9mnQS.cjs +715 -0
- package/dist/StateContainerRegistry-CDH9mnQS.cjs.map +1 -0
- package/dist/StateContainerRegistry-CTOXUf75.cjs +742 -0
- package/dist/StateContainerRegistry-CTOXUf75.cjs.map +1 -0
- package/dist/StateContainerRegistry-CX2CBOmv.cjs +795 -0
- package/dist/StateContainerRegistry-CX2CBOmv.cjs.map +1 -0
- package/dist/StateContainerRegistry-CXnnf2-l.js +867 -0
- package/dist/StateContainerRegistry-CXnnf2-l.js.map +1 -0
- package/dist/StateContainerRegistry-CehuIpK_.cjs +811 -0
- package/dist/StateContainerRegistry-CehuIpK_.cjs.map +1 -0
- package/dist/StateContainerRegistry-Ci0ajc5g.js +720 -0
- package/dist/StateContainerRegistry-Ci0ajc5g.js.map +1 -0
- package/dist/StateContainerRegistry-Ck2-XmT_.js +587 -527
- package/dist/StateContainerRegistry-D1lVJFGL.cjs +753 -0
- package/dist/StateContainerRegistry-D1lVJFGL.cjs.map +1 -0
- package/dist/StateContainerRegistry-DC4N73O6.js +632 -569
- package/dist/StateContainerRegistry-DOuGI-l5.js +645 -582
- package/dist/StateContainerRegistry-DT66lr3I.cjs +651 -596
- package/dist/StateContainerRegistry-DmmzYa7S.js +974 -0
- package/dist/StateContainerRegistry-DmmzYa7S.js.map +1 -0
- package/dist/StateContainerRegistry-Upsrlg9G.cjs +756 -0
- package/dist/StateContainerRegistry-Upsrlg9G.cjs.map +1 -0
- package/dist/StateContainerRegistry-WznfcA-Q.js +855 -0
- package/dist/StateContainerRegistry-WznfcA-Q.js.map +1 -0
- package/dist/StateContainerRegistry-Yph6UCA_.js +637 -569
- package/dist/StateContainerRegistry-mseeTqSA.cjs +671 -616
- package/dist/StateContainerRegistry-pRNxHNFD.cjs +658 -603
- package/dist/StateContainerRegistry-vXMWtG7J.cjs +613 -561
- package/dist/StateContainerRegistry-v_prqMcI.cjs +663 -603
- package/dist/branded-BSeA_mZO.cjs.map +1 -1
- package/dist/branded-DCqi3De1.cjs +11 -11
- package/dist/branded-DwtzSsg0.js.map +1 -1
- package/dist/branded-Max3xOTA.js +6 -6
- package/dist/config-0ZD9i3wy.js +16 -0
- package/dist/config-0ZD9i3wy.js.map +1 -0
- package/dist/config-B3NIwDQv.cjs +32 -0
- package/dist/config-B3NIwDQv.cjs.map +1 -0
- package/dist/config-BKGHop0V.js +16 -0
- package/dist/config-BKGHop0V.js.map +1 -0
- package/dist/config-BKoaAlmb.js +5 -5
- package/dist/config-BPj08-8h.cjs +32 -0
- package/dist/config-BPj08-8h.cjs.map +1 -0
- package/dist/config-BR0Xy-Tn.cjs +32 -0
- package/dist/config-BR0Xy-Tn.cjs.map +1 -0
- package/dist/config-B_4xXpvK.cjs +32 -0
- package/dist/config-B_4xXpvK.cjs.map +1 -0
- package/dist/config-BflrQM4_.cjs +32 -0
- package/dist/config-BflrQM4_.cjs.map +1 -0
- package/dist/config-BzObBsk2.cjs +32 -0
- package/dist/config-BzObBsk2.cjs.map +1 -0
- package/dist/config-C0yumL1H.cjs +32 -0
- package/dist/config-C0yumL1H.cjs.map +1 -0
- package/dist/config-C8xqVHTf.js +16 -0
- package/dist/config-C8xqVHTf.js.map +1 -0
- package/dist/config-CCUhIYIF.js +5 -5
- package/dist/config-CGo__MAt.js +16 -0
- package/dist/config-CGo__MAt.js.map +1 -0
- package/dist/config-CQH9fTY-.cjs +32 -0
- package/dist/config-CQH9fTY-.cjs.map +1 -0
- package/dist/config-CR_Bz7RD.js +5 -5
- package/dist/config-CTOa-yPN.cjs +20 -20
- package/dist/config-Cd7Q-B4g.js +16 -0
- package/dist/config-Cd7Q-B4g.js.map +1 -0
- package/dist/config-CmDEX-1o.js +16 -0
- package/dist/config-CmDEX-1o.js.map +1 -0
- package/dist/config-CoNMTnMA.cjs +32 -0
- package/dist/config-CoNMTnMA.cjs.map +1 -0
- package/dist/config-Cwj8-C1J.js +16 -0
- package/dist/config-Cwj8-C1J.js.map +1 -0
- package/dist/config-D3jisfdj.cjs +20 -20
- package/dist/config-D4GifZQ4.js +5 -5
- package/dist/config-DDrSQGpQ.cjs +20 -20
- package/dist/config-DEcslxan.cjs +32 -0
- package/dist/config-DEcslxan.cjs.map +1 -0
- package/dist/config-DMNZ2YLV.cjs +20 -20
- package/dist/config-De9oQ6Ki.js +16 -0
- package/dist/config-De9oQ6Ki.js.map +1 -0
- package/dist/config-DoHx0Xsl.js +16 -0
- package/dist/config-DoHx0Xsl.js.map +1 -0
- package/dist/config-DokTzpr8.cjs +20 -20
- package/dist/config-DslYBm4Z.js +5 -5
- package/dist/config-H6FAqbW4.cjs +32 -0
- package/dist/config-H6FAqbW4.cjs.map +1 -0
- package/dist/config-Yp645dGK.js +16 -0
- package/dist/config-Yp645dGK.js.map +1 -0
- package/dist/config-ispAzOZV.js +16 -0
- package/dist/config-ispAzOZV.js.map +1 -0
- package/dist/config.d.cts +72 -0
- package/dist/config.d.ts +72 -0
- package/dist/constants.d.cts +18 -28
- package/dist/constants.d.ts +18 -28
- package/dist/core/Cubit.d.ts +14 -5
- package/dist/core/StateContainer.d.ts +112 -15
- package/dist/core/StateContainerRegistry.d.ts +66 -7
- package/dist/core/symbols.d.ts +26 -1
- package/dist/debug.cjs +3 -3
- package/dist/debug.js +3 -3
- package/dist/decorators/blac.d.ts +17 -0
- package/dist/ensure-9VEq5H0L.js +3 -3
- package/dist/ensure-BB6xHQAF.cjs +14 -0
- package/dist/ensure-BB6xHQAF.cjs.map +1 -0
- package/dist/ensure-BNDfTzqg.cjs +8 -8
- package/dist/ensure-BVCnjU7r.js +343 -267
- package/dist/ensure-BbzGXjep.cjs +8 -8
- package/dist/ensure-BlIaQai6.js +9 -0
- package/dist/ensure-BlIaQai6.js.map +1 -0
- package/dist/ensure-Bm3oHxga.js +9 -0
- package/dist/ensure-Bm3oHxga.js.map +1 -0
- package/dist/ensure-C3eIRs6e.cjs +14 -0
- package/dist/ensure-C3eIRs6e.cjs.map +1 -0
- package/dist/ensure-CJZL7bcA.cjs +365 -292
- package/dist/ensure-CN6unBOe.cjs +14 -0
- package/dist/ensure-CN6unBOe.cjs.map +1 -0
- package/dist/ensure-CU-B1ywv.js +3 -3
- package/dist/ensure-CWKzeno7.js +9 -0
- package/dist/ensure-CWKzeno7.js.map +1 -0
- package/dist/ensure-CkENsuQ9.js +9 -0
- package/dist/ensure-CkENsuQ9.js.map +1 -0
- package/dist/ensure-Cm-4_LSh.cjs +14 -0
- package/dist/ensure-Cm-4_LSh.cjs.map +1 -0
- package/dist/ensure-Cqex5r1P.cjs +14 -0
- package/dist/ensure-Cqex5r1P.cjs.map +1 -0
- package/dist/ensure-Cv5AbNGZ.js +9 -0
- package/dist/ensure-Cv5AbNGZ.js.map +1 -0
- package/dist/ensure-D63lEMUK.cjs +8 -8
- package/dist/ensure-DGEtPU9A.cjs +14 -0
- package/dist/ensure-DGEtPU9A.cjs.map +1 -0
- package/dist/ensure-DM3qb336.cjs +14 -0
- package/dist/ensure-DM3qb336.cjs.map +1 -0
- package/dist/ensure-DME-_T0j.cjs +14 -0
- package/dist/ensure-DME-_T0j.cjs.map +1 -0
- package/dist/ensure-DWd0GCYB.js +9 -0
- package/dist/ensure-DWd0GCYB.js.map +1 -0
- package/dist/ensure-DamKOP6q.cjs +8 -8
- package/dist/ensure-Dcfptl-A.js +9 -0
- package/dist/ensure-Dcfptl-A.js.map +1 -0
- package/dist/ensure-Def-EBWG.js +3 -3
- package/dist/ensure-DnHL5QiQ.cjs +14 -0
- package/dist/ensure-DnHL5QiQ.cjs.map +1 -0
- package/dist/ensure-Dr7I78Ku.cjs +14 -0
- package/dist/ensure-Dr7I78Ku.cjs.map +1 -0
- package/dist/ensure-SLVdGd5b.js +9 -0
- package/dist/ensure-SLVdGd5b.js.map +1 -0
- package/dist/ensure-Sb92MCXu.js +3 -3
- package/dist/ensure-gFlvevGm.cjs +14 -0
- package/dist/ensure-gFlvevGm.cjs.map +1 -0
- package/dist/ensure-l2-H7S5W.js +9 -0
- package/dist/ensure-l2-H7S5W.js.map +1 -0
- package/dist/ensure-mkL-3qh8.js +9 -0
- package/dist/ensure-mkL-3qh8.js.map +1 -0
- package/dist/ensure-n80crSlX.js +3 -3
- package/dist/ensure-nCxg7MCN.js +9 -0
- package/dist/ensure-nCxg7MCN.js.map +1 -0
- package/dist/ensure-vS71MV4q.cjs +8 -8
- package/dist/index.cjs +40 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -4
- package/dist/index.d.ts +15 -4
- package/dist/index.js +23 -10
- package/dist/index.js.map +1 -1
- package/dist/management-6oQbmf0z.js +41 -0
- package/dist/management-6oQbmf0z.js.map +1 -0
- package/dist/management-B46QwA9Y.js +41 -0
- package/dist/management-B46QwA9Y.js.map +1 -0
- package/dist/management-B9yrRpeg.js +41 -0
- package/dist/management-B9yrRpeg.js.map +1 -0
- package/dist/management-BCKTEZ8Q.js +41 -0
- package/dist/management-BCKTEZ8Q.js.map +1 -0
- package/dist/management-BbMzdXbT.js +41 -0
- package/dist/management-BbMzdXbT.js.map +1 -0
- package/dist/management-Bg652agq.js +20 -11
- package/dist/management-BnedF5ZD.cjs +79 -0
- package/dist/management-BnedF5ZD.cjs.map +1 -0
- package/dist/management-BoUa99eB.cjs +79 -0
- package/dist/management-BoUa99eB.cjs.map +1 -0
- package/dist/management-C4SHcrJm.cjs +79 -0
- package/dist/management-C4SHcrJm.cjs.map +1 -0
- package/dist/management-CK-GL3wY.js +41 -0
- package/dist/management-CK-GL3wY.js.map +1 -0
- package/dist/management-CPhgY8OE.js +41 -0
- package/dist/management-CPhgY8OE.js.map +1 -0
- package/dist/management-CU_V3LIP.js +20 -11
- package/dist/management-CUwXDSi9.cjs +79 -0
- package/dist/management-CUwXDSi9.cjs.map +1 -0
- package/dist/management-CaqiyNzB.js +20 -11
- package/dist/management-Cin-JvYe.js +20 -11
- package/dist/management-ClaXym0F.cjs +50 -50
- package/dist/management-DL0Uzsoz.js +41 -0
- package/dist/management-DL0Uzsoz.js.map +1 -0
- package/dist/management-DLdAQfqk.cjs +79 -0
- package/dist/management-DLdAQfqk.cjs.map +1 -0
- package/dist/management-DMZ8qpwr.cjs +79 -0
- package/dist/management-DMZ8qpwr.cjs.map +1 -0
- package/dist/management-DTzcC6aD.cjs +79 -0
- package/dist/management-DTzcC6aD.cjs.map +1 -0
- package/dist/management-DYLNyj9p.cjs +79 -0
- package/dist/management-DYLNyj9p.cjs.map +1 -0
- package/dist/management-Dag9u4t6.cjs +50 -50
- package/dist/management-DbMRdDBo.cjs +50 -50
- package/dist/management-DfnDAKmP.js +41 -0
- package/dist/management-DfnDAKmP.js.map +1 -0
- package/dist/management-DjBU1gtb.cjs +79 -0
- package/dist/management-DjBU1gtb.cjs.map +1 -0
- package/dist/management-DwCozsY8.js +41 -0
- package/dist/management-DwCozsY8.js.map +1 -0
- package/dist/management-H4m3ciJO.js +32 -0
- package/dist/management-H4m3ciJO.js.map +1 -0
- package/dist/management-Xo3A6Za3.cjs +79 -0
- package/dist/management-Xo3A6Za3.cjs.map +1 -0
- package/dist/management-ZU2YzOkr.js +18 -10
- package/dist/management-baPDwA9n.cjs +50 -50
- package/dist/management-jQGCvZNN.cjs +44 -44
- package/dist/management-ry_KteFK.cjs +79 -0
- package/dist/management-ry_KteFK.cjs.map +1 -0
- package/dist/plugin/BlacPlugin.d.ts +70 -100
- package/dist/plugin/PluginManager.d.ts +67 -5
- package/dist/plugins.cjs +1 -1
- package/dist/plugins.d.cts +2 -2
- package/dist/plugins.d.ts +2 -2
- package/dist/plugins.js +1 -1
- package/dist/registry/acquire.d.ts +9 -2
- package/dist/registry/ensure.d.ts +2 -2
- package/dist/registry/index.d.ts +1 -1
- package/dist/resolve-dependencies-B2QggQAi.js +729 -0
- package/dist/resolve-dependencies-B2QggQAi.js.map +1 -0
- package/dist/resolve-dependencies-B6JDXvpr.js +739 -0
- package/dist/resolve-dependencies-B6JDXvpr.js.map +1 -0
- package/dist/resolve-dependencies-BAKAoD0U.js +878 -0
- package/dist/resolve-dependencies-BAKAoD0U.js.map +1 -0
- package/dist/resolve-dependencies-BFZQq60Y.cjs +724 -666
- package/dist/resolve-dependencies-BGafS3Ww.js +643 -561
- package/dist/resolve-dependencies-BHd34gS3.cjs +724 -666
- package/dist/resolve-dependencies-BNeayhbQ.cjs +840 -0
- package/dist/resolve-dependencies-BNeayhbQ.cjs.map +1 -0
- package/dist/resolve-dependencies-BWEMpuDy.js +729 -0
- package/dist/resolve-dependencies-BWEMpuDy.js.map +1 -0
- package/dist/resolve-dependencies-BiWkW2eS.js +643 -561
- package/dist/resolve-dependencies-BjxCztYD.js +739 -0
- package/dist/resolve-dependencies-BjxCztYD.js.map +1 -0
- package/dist/resolve-dependencies-BlyBV0hB.cjs +969 -0
- package/dist/resolve-dependencies-BlyBV0hB.cjs.map +1 -0
- package/dist/resolve-dependencies-By26rT_i.js +739 -0
- package/dist/resolve-dependencies-By26rT_i.js.map +1 -0
- package/dist/resolve-dependencies-C9Kf7AzY.cjs +832 -0
- package/dist/resolve-dependencies-C9Kf7AzY.cjs.map +1 -0
- package/dist/resolve-dependencies-CTzV1txG.js +643 -561
- package/dist/resolve-dependencies-CWjuGHiF.cjs +969 -0
- package/dist/resolve-dependencies-CWjuGHiF.cjs.map +1 -0
- package/dist/resolve-dependencies-ClSsP0DJ.cjs +830 -0
- package/dist/resolve-dependencies-ClSsP0DJ.cjs.map +1 -0
- package/dist/resolve-dependencies-D0vTzZgs.js +643 -561
- package/dist/resolve-dependencies-D2WnZMF-.cjs +724 -666
- package/dist/resolve-dependencies-DCBLTeza.cjs +969 -0
- package/dist/resolve-dependencies-DCBLTeza.cjs.map +1 -0
- package/dist/resolve-dependencies-DMlqYJR2.js +731 -0
- package/dist/resolve-dependencies-DMlqYJR2.js.map +1 -0
- package/dist/resolve-dependencies-DP6U1EYB.cjs +840 -0
- package/dist/resolve-dependencies-DP6U1EYB.cjs.map +1 -0
- package/dist/resolve-dependencies-DSQNXvnV.cjs +724 -666
- package/dist/resolve-dependencies-DV3HO_uH.js +878 -0
- package/dist/resolve-dependencies-DV3HO_uH.js.map +1 -0
- package/dist/resolve-dependencies-DXwMhP0Y.js +878 -0
- package/dist/resolve-dependencies-DXwMhP0Y.js.map +1 -0
- package/dist/resolve-dependencies-DbRWlt9u.js +878 -0
- package/dist/resolve-dependencies-DbRWlt9u.js.map +1 -0
- package/dist/resolve-dependencies-DcUUva2P.cjs +724 -666
- package/dist/resolve-dependencies-Dd8T6TLt.cjs +832 -0
- package/dist/resolve-dependencies-Dd8T6TLt.cjs.map +1 -0
- package/dist/resolve-dependencies-Dfdp_DZd.cjs +840 -0
- package/dist/resolve-dependencies-Dfdp_DZd.cjs.map +1 -0
- package/dist/resolve-dependencies-GJ8PNyNB.cjs +969 -0
- package/dist/resolve-dependencies-GJ8PNyNB.cjs.map +1 -0
- package/dist/resolve-dependencies-KSpTt4jy.cjs +830 -0
- package/dist/resolve-dependencies-KSpTt4jy.cjs.map +1 -0
- package/dist/resolve-dependencies-Nvjp4CwS.js +731 -0
- package/dist/resolve-dependencies-Nvjp4CwS.js.map +1 -0
- package/dist/resolve-dependencies-f-QUqYiL.js +643 -561
- package/dist/testing.cjs +27 -20
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +22 -1
- package/dist/testing.d.ts +22 -1
- package/dist/testing.js +27 -21
- package/dist/testing.js.map +1 -1
- package/dist/tracked-B77j2g9M.js +171 -151
- package/dist/tracked-BDVi2LKM.cjs +196 -175
- package/dist/tracked-BFdJCzL0.cjs +242 -0
- package/dist/tracked-BFdJCzL0.cjs.map +1 -0
- package/dist/tracked-BH-gX4T1.cjs +196 -175
- package/dist/tracked-BTHok3Dl.cjs +196 -175
- package/dist/tracked-BTbFkFeM.js +212 -0
- package/dist/tracked-BTbFkFeM.js.map +1 -0
- package/dist/tracked-BU_OBWqM.cjs +242 -0
- package/dist/tracked-BU_OBWqM.cjs.map +1 -0
- package/dist/tracked-BfctH2es.cjs +242 -0
- package/dist/tracked-BfctH2es.cjs.map +1 -0
- package/dist/tracked-BhQtzUhZ.js +212 -0
- package/dist/tracked-BhQtzUhZ.js.map +1 -0
- package/dist/tracked-BnqrYXiO.js +212 -0
- package/dist/tracked-BnqrYXiO.js.map +1 -0
- package/dist/tracked-BtgFOGup.js +212 -0
- package/dist/tracked-BtgFOGup.js.map +1 -0
- package/dist/tracked-C3nIS4J7.cjs +242 -0
- package/dist/tracked-C3nIS4J7.cjs.map +1 -0
- package/dist/tracked-C52awNV9.js +197 -0
- package/dist/tracked-C52awNV9.js.map +1 -0
- package/dist/tracked-CGzduF2m.js +212 -0
- package/dist/tracked-CGzduF2m.js.map +1 -0
- package/dist/tracked-CK_-ixtX.cjs +227 -0
- package/dist/tracked-CK_-ixtX.cjs.map +1 -0
- package/dist/tracked-CLlvURln.js +212 -0
- package/dist/tracked-CLlvURln.js.map +1 -0
- package/dist/tracked-CgHWmuGC.cjs +242 -0
- package/dist/tracked-CgHWmuGC.cjs.map +1 -0
- package/dist/tracked-CoAlC8fs.js +171 -151
- package/dist/tracked-D3Xjm1H1.cjs +242 -0
- package/dist/tracked-D3Xjm1H1.cjs.map +1 -0
- package/dist/tracked-DB6yMV5F.js +212 -0
- package/dist/tracked-DB6yMV5F.js.map +1 -0
- package/dist/tracked-DBn-bs_G.js +171 -151
- package/dist/tracked-DMBTDF0P.js +171 -151
- package/dist/tracked-DN3h3Rp1.js +197 -0
- package/dist/tracked-DN3h3Rp1.js.map +1 -0
- package/dist/tracked-DOGh1Q5Z.cjs +242 -0
- package/dist/tracked-DOGh1Q5Z.cjs.map +1 -0
- package/dist/tracked-DUkp4zve.cjs +227 -0
- package/dist/tracked-DUkp4zve.cjs.map +1 -0
- package/dist/tracked-D_ou7mYG.js +212 -0
- package/dist/tracked-D_ou7mYG.js.map +1 -0
- package/dist/tracked-Dcu6EATB.js +171 -151
- package/dist/tracked-GvAJQVAI.cjs +227 -196
- package/dist/tracked-O2lv-kJV.cjs +242 -0
- package/dist/tracked-O2lv-kJV.cjs.map +1 -0
- package/dist/tracked-WF6aXuAo.js +186 -162
- package/dist/tracked-d_sQWU3c.cjs +196 -175
- package/dist/tracked-n9TMK-30.cjs +196 -175
- package/dist/tracked-njU-_pVa.cjs +242 -0
- package/dist/tracked-njU-_pVa.cjs.map +1 -0
- package/dist/tracked-zAgmKIlC.js +212 -0
- package/dist/tracked-zAgmKIlC.js.map +1 -0
- package/dist/tracking/dependency-manager.d.ts +33 -29
- package/dist/tracking/index.d.ts +16 -1
- package/dist/tracking/iteration-perf.bench.d.ts +1 -0
- package/dist/tracking/path-utils.d.ts +18 -1
- package/dist/tracking/resolve-dependencies.d.ts +3 -1
- package/dist/tracking/tracked.d.ts +37 -34
- package/dist/tracking/tracking-proxy.d.ts +94 -47
- package/dist/tracking.cjs +12 -9
- package/dist/tracking.js +32 -2
- package/dist/types/utilities.d.ts +15 -3
- package/dist/types.cjs +1 -1
- package/dist/types.js +1 -1
- package/dist/utils/static-props.d.ts +23 -0
- package/dist/utils/structural-key.d.ts +14 -0
- package/dist/watch/watch.d.ts +1 -1
- package/dist/watch-BpwaUL8r.cjs +68 -0
- package/dist/watch-BpwaUL8r.cjs.map +1 -0
- package/dist/watch-DWCqXllW.js +57 -0
- package/dist/watch-DWCqXllW.js.map +1 -0
- package/dist/watch-entry.cjs +3 -6
- package/dist/watch-entry.d.cts +1 -3
- package/dist/watch-entry.d.ts +1 -3
- package/dist/watch-entry.js +2 -2
- package/package.json +4 -14
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { a as BLAC_DEFAULTS } from './StateContainerRegistry-BAcxouCu.js';
|
|
2
|
+
import { t as getRegistry } from './config-Yp645dGK.js';
|
|
3
|
+
//#region src/utils/idGenerator.ts
|
|
4
|
+
/**
|
|
5
|
+
* Generate simple ID with timestamp and random (no counter tracking)
|
|
6
|
+
*
|
|
7
|
+
* Format: `${prefix}:${timestamp}_${random}`
|
|
8
|
+
*
|
|
9
|
+
* @param prefix - Prefix for the ID
|
|
10
|
+
* @returns Branded ID string
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const id = generateSimpleId('CounterBloc');
|
|
15
|
+
* // Returns: "CounterBloc:1698765432100_a3k9d7f2q"
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
function generateSimpleId(prefix, affix) {
|
|
19
|
+
if (affix) return `${prefix}:${affix}`;
|
|
20
|
+
return `${prefix}:${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/core/symbols.ts
|
|
24
|
+
const EMIT = Symbol('blac.emit');
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/core/StateContainer.ts
|
|
27
|
+
const EMPTY_DEPS = /* @__PURE__ */ new Map();
|
|
28
|
+
var StateContainer = class {
|
|
29
|
+
static {
|
|
30
|
+
this.__excludeFromDevTools = false;
|
|
31
|
+
}
|
|
32
|
+
get dependencies() {
|
|
33
|
+
return this._dependencies ?? EMPTY_DEPS;
|
|
34
|
+
}
|
|
35
|
+
depend(Type, instanceKey) {
|
|
36
|
+
if (!this._dependencies) this._dependencies = /* @__PURE__ */ new Map();
|
|
37
|
+
this._dependencies.set(
|
|
38
|
+
Type,
|
|
39
|
+
instanceKey ?? BLAC_DEFAULTS.DEFAULT_INSTANCE_KEY,
|
|
40
|
+
);
|
|
41
|
+
return () => this._registry.ensure(Type, instanceKey);
|
|
42
|
+
}
|
|
43
|
+
constructor(initialState) {
|
|
44
|
+
this._listeners = /* @__PURE__ */ new Set();
|
|
45
|
+
this._disposed = false;
|
|
46
|
+
this._hydrationStatus = 'idle';
|
|
47
|
+
this._changedWhileHydrating = false;
|
|
48
|
+
this._hydrationPromise = null;
|
|
49
|
+
this._hydrationPromiseSettled = false;
|
|
50
|
+
this._config = {};
|
|
51
|
+
this._systemEventHandlers = /* @__PURE__ */ new Map();
|
|
52
|
+
this._dependencies = null;
|
|
53
|
+
this._hasStateChangeHandlers = false;
|
|
54
|
+
this._registry = getRegistry();
|
|
55
|
+
this.name = this.constructor.name;
|
|
56
|
+
this.debug = false;
|
|
57
|
+
this.instanceId = generateSimpleId(this.constructor.name, 'main');
|
|
58
|
+
this.createdAt = Date.now();
|
|
59
|
+
this.onSystemEvent = (event, handler) => {
|
|
60
|
+
let handlers = this._systemEventHandlers.get(event);
|
|
61
|
+
if (!handlers) {
|
|
62
|
+
handlers = /* @__PURE__ */ new Set();
|
|
63
|
+
this._systemEventHandlers.set(event, handlers);
|
|
64
|
+
}
|
|
65
|
+
handlers.add(handler);
|
|
66
|
+
if (event === 'stateChanged') this._hasStateChangeHandlers = true;
|
|
67
|
+
return () => {
|
|
68
|
+
handlers?.delete(handler);
|
|
69
|
+
if (event === 'stateChanged' && handlers?.size === 0)
|
|
70
|
+
this._hasStateChangeHandlers = false;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
this._state = initialState;
|
|
74
|
+
}
|
|
75
|
+
initConfig(config) {
|
|
76
|
+
this._config = { ...config };
|
|
77
|
+
this.name = this._config.name || this.constructor.name;
|
|
78
|
+
this.debug = this._config.debug ?? false;
|
|
79
|
+
this.instanceId = generateSimpleId(
|
|
80
|
+
this.constructor.name,
|
|
81
|
+
this._config.instanceId,
|
|
82
|
+
);
|
|
83
|
+
this._registry.emit('created', this);
|
|
84
|
+
}
|
|
85
|
+
get state() {
|
|
86
|
+
return this._state;
|
|
87
|
+
}
|
|
88
|
+
get isDisposed() {
|
|
89
|
+
return this._disposed;
|
|
90
|
+
}
|
|
91
|
+
get hydrationStatus() {
|
|
92
|
+
return this._hydrationStatus;
|
|
93
|
+
}
|
|
94
|
+
get hydrationError() {
|
|
95
|
+
return this._hydrationError;
|
|
96
|
+
}
|
|
97
|
+
get isHydrated() {
|
|
98
|
+
return this._hydrationStatus === 'hydrated';
|
|
99
|
+
}
|
|
100
|
+
get changedWhileHydrating() {
|
|
101
|
+
return this._changedWhileHydrating;
|
|
102
|
+
}
|
|
103
|
+
subscribe(listener) {
|
|
104
|
+
if (this._disposed)
|
|
105
|
+
throw new Error(`Cannot subscribe to disposed container ${this.name}`);
|
|
106
|
+
this._listeners.add(listener);
|
|
107
|
+
return () => this._listeners.delete(listener);
|
|
108
|
+
}
|
|
109
|
+
dispose() {
|
|
110
|
+
if (this._disposed) return;
|
|
111
|
+
if (this.debug) console.log(`[${this.name}] Disposing...`);
|
|
112
|
+
this._disposed = true;
|
|
113
|
+
if (this._hydrationStatus === 'hydrating')
|
|
114
|
+
this.failHydration(
|
|
115
|
+
/* @__PURE__ */ new Error(
|
|
116
|
+
`Hydration cancelled because ${this.name} was disposed`,
|
|
117
|
+
),
|
|
118
|
+
);
|
|
119
|
+
this.emitSystemEvent('dispose', void 0);
|
|
120
|
+
this._listeners.clear();
|
|
121
|
+
this._systemEventHandlers.clear();
|
|
122
|
+
this._registry.emit('disposed', this);
|
|
123
|
+
if (this.debug) console.log(`[${this.name}] Disposed successfully`);
|
|
124
|
+
}
|
|
125
|
+
[EMIT](newState) {
|
|
126
|
+
this.applyState(newState, 'default');
|
|
127
|
+
}
|
|
128
|
+
beginHydration() {
|
|
129
|
+
if (this._disposed)
|
|
130
|
+
throw new Error(
|
|
131
|
+
`Cannot begin hydration for disposed container ${this.name}`,
|
|
132
|
+
);
|
|
133
|
+
this._changedWhileHydrating = false;
|
|
134
|
+
this._hydrationError = void 0;
|
|
135
|
+
this._hydrationPromise = null;
|
|
136
|
+
this._resolveHydrationPromise = void 0;
|
|
137
|
+
this._rejectHydrationPromise = void 0;
|
|
138
|
+
this._hydrationPromiseSettled = false;
|
|
139
|
+
this.ensureHydrationPromise();
|
|
140
|
+
this.setHydrationStatus('hydrating');
|
|
141
|
+
}
|
|
142
|
+
applyHydratedState(newState) {
|
|
143
|
+
if (this._disposed) return false;
|
|
144
|
+
if (this._hydrationStatus !== 'hydrating' || this._changedWhileHydrating)
|
|
145
|
+
return false;
|
|
146
|
+
this.applyState(newState, 'hydration');
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
finishHydration() {
|
|
150
|
+
if (this._hydrationStatus !== 'hydrating') {
|
|
151
|
+
if (this._hydrationStatus === 'hydrated') return;
|
|
152
|
+
if (this._hydrationStatus === 'error') this.ensureHydrationPromise();
|
|
153
|
+
}
|
|
154
|
+
this.setHydrationStatus('hydrated');
|
|
155
|
+
this.resolveHydration();
|
|
156
|
+
}
|
|
157
|
+
failHydration(error) {
|
|
158
|
+
const err =
|
|
159
|
+
error instanceof Error
|
|
160
|
+
? error
|
|
161
|
+
: /* @__PURE__ */ new Error(`Hydration failed: ${String(error)}`);
|
|
162
|
+
this._hydrationError = err;
|
|
163
|
+
this.setHydrationStatus('error', err);
|
|
164
|
+
this.rejectHydration(err);
|
|
165
|
+
}
|
|
166
|
+
waitForHydration() {
|
|
167
|
+
if (
|
|
168
|
+
this._hydrationStatus === 'idle' ||
|
|
169
|
+
this._hydrationStatus === 'hydrated'
|
|
170
|
+
)
|
|
171
|
+
return Promise.resolve();
|
|
172
|
+
if (this._hydrationStatus === 'error')
|
|
173
|
+
return Promise.reject(
|
|
174
|
+
this._hydrationError ??
|
|
175
|
+
/* @__PURE__ */ new Error(
|
|
176
|
+
`Hydration failed for container ${this.name}`,
|
|
177
|
+
),
|
|
178
|
+
);
|
|
179
|
+
return this.ensureHydrationPromise();
|
|
180
|
+
}
|
|
181
|
+
applyState(newState, source) {
|
|
182
|
+
if (this._disposed)
|
|
183
|
+
throw new Error(`Cannot emit state from disposed container ${this.name}`);
|
|
184
|
+
if (this._state === newState) return;
|
|
185
|
+
const previousState = this._state;
|
|
186
|
+
this._state = newState;
|
|
187
|
+
if (
|
|
188
|
+
this._listeners.size === 0 &&
|
|
189
|
+
!this._hasStateChangeHandlers &&
|
|
190
|
+
this._hydrationStatus !== 'hydrating'
|
|
191
|
+
) {
|
|
192
|
+
if (this._registry.hasStateChangedListeners)
|
|
193
|
+
this._registry.notifyStateChanged(this, previousState, newState);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (this._hydrationStatus === 'hydrating' && source !== 'hydration')
|
|
197
|
+
this._changedWhileHydrating = true;
|
|
198
|
+
if (this._hasStateChangeHandlers) {
|
|
199
|
+
const handlers = this._systemEventHandlers.get('stateChanged');
|
|
200
|
+
const payload = {
|
|
201
|
+
state: newState,
|
|
202
|
+
previousState,
|
|
203
|
+
};
|
|
204
|
+
for (const handler of handlers)
|
|
205
|
+
try {
|
|
206
|
+
handler(payload);
|
|
207
|
+
} catch (error) {
|
|
208
|
+
console.error(`[${this.name}] Error in system event handler:`, error);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (this._listeners.size > 0) {
|
|
212
|
+
let count = 0;
|
|
213
|
+
const size = this._listeners.size;
|
|
214
|
+
for (const listener of this._listeners) {
|
|
215
|
+
if (++count > size) break;
|
|
216
|
+
try {
|
|
217
|
+
listener(newState);
|
|
218
|
+
} catch (error) {
|
|
219
|
+
console.error(`[${this.name}] Error in listener:`, error);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (this._registry.hasStateChangedListeners)
|
|
224
|
+
this._registry.notifyStateChanged(this, previousState, newState);
|
|
225
|
+
}
|
|
226
|
+
setHydrationStatus(status, error) {
|
|
227
|
+
const previousStatus = this._hydrationStatus;
|
|
228
|
+
this._hydrationStatus = status;
|
|
229
|
+
this._hydrationError = error;
|
|
230
|
+
this.emitSystemEvent('hydrationChanged', {
|
|
231
|
+
status,
|
|
232
|
+
previousStatus,
|
|
233
|
+
error,
|
|
234
|
+
changedWhileHydrating: this._changedWhileHydrating,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
ensureHydrationPromise() {
|
|
238
|
+
if (!this._hydrationPromise || this._hydrationPromiseSettled) {
|
|
239
|
+
this._hydrationPromiseSettled = false;
|
|
240
|
+
this._hydrationPromise = new Promise((resolve, reject) => {
|
|
241
|
+
this._resolveHydrationPromise = () => {
|
|
242
|
+
if (this._hydrationPromiseSettled) return;
|
|
243
|
+
this._hydrationPromiseSettled = true;
|
|
244
|
+
resolve();
|
|
245
|
+
};
|
|
246
|
+
this._rejectHydrationPromise = (error) => {
|
|
247
|
+
if (this._hydrationPromiseSettled) return;
|
|
248
|
+
this._hydrationPromiseSettled = true;
|
|
249
|
+
reject(error);
|
|
250
|
+
};
|
|
251
|
+
});
|
|
252
|
+
this._hydrationPromise.catch(() => {});
|
|
253
|
+
}
|
|
254
|
+
return this._hydrationPromise;
|
|
255
|
+
}
|
|
256
|
+
resolveHydration() {
|
|
257
|
+
this._resolveHydrationPromise?.();
|
|
258
|
+
}
|
|
259
|
+
rejectHydration(error) {
|
|
260
|
+
this.ensureHydrationPromise();
|
|
261
|
+
this._rejectHydrationPromise?.(error);
|
|
262
|
+
}
|
|
263
|
+
emitSystemEvent(event, payload) {
|
|
264
|
+
const handlers = this._systemEventHandlers.get(event);
|
|
265
|
+
if (!handlers) return;
|
|
266
|
+
for (const handler of handlers)
|
|
267
|
+
try {
|
|
268
|
+
handler(payload);
|
|
269
|
+
} catch (error) {
|
|
270
|
+
console.error(`[${this.name}] Error in system event handler:`, error);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
//#endregion
|
|
275
|
+
//#region src/core/Cubit.ts
|
|
276
|
+
var Cubit = class extends StateContainer {
|
|
277
|
+
constructor(initialState) {
|
|
278
|
+
super(initialState);
|
|
279
|
+
this.patch = (partial) => {
|
|
280
|
+
if (typeof this.state !== 'object' || this.state === null)
|
|
281
|
+
throw new Error('patch() is only available for object state types');
|
|
282
|
+
for (const key of Object.keys(partial))
|
|
283
|
+
if (!Object.is(this.state[key], partial[key])) {
|
|
284
|
+
this[EMIT]({
|
|
285
|
+
...this.state,
|
|
286
|
+
...partial,
|
|
287
|
+
});
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
emit(newState) {
|
|
293
|
+
this[EMIT](newState);
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
//#endregion
|
|
297
|
+
export { StateContainer as n, EMIT as r, Cubit as t };
|
|
298
|
+
|
|
299
|
+
//# sourceMappingURL=Cubit-CcKgMEBO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cubit-CcKgMEBO.js","names":[],"sources":["../src/utils/idGenerator.ts","../src/core/symbols.ts","../src/core/StateContainer.ts","../src/core/Cubit.ts"],"sourcesContent":["/**\n * Centralized ID Generation\n *\n * Provides consistent, collision-resistant ID generation for all BlaC subsystems.\n * Uses timestamp + counter + random suffix for uniqueness.\n */\n\n// Global counter map for ID generation\nconst globalCounters = new Map<string, number>();\n\n/**\n * Creates an ID generator with isolated counter state\n *\n * @param prefix - Prefix for generated IDs\n * @returns Object with next(), nextSimple(), and reset() methods\n *\n * @example\n * ```ts\n * const generator = createIdGenerator('sub');\n * const id1 = generator.next(); // \"sub:1698765432100_1_a3k9d7f2q\"\n * const id2 = generator.next(); // \"sub:1698765432101_2_b4n8e9g3r\"\n * ```\n */\nexport function createIdGenerator(prefix: string) {\n let counter = 0;\n return {\n next: () =>\n `${prefix}:${Date.now()}_${++counter}_${Math.random().toString(36).substring(2, 11)}`,\n nextSimple: () => `${prefix}:${++counter}`,\n reset: () => {\n counter = 0;\n },\n };\n}\n\n/**\n * Generate ID with timestamp, counter, and random suffix (tree-shakeable)\n *\n * Format: `${prefix}:${timestamp}_${counter}_${random}`\n *\n * @param prefix - Prefix for the ID (e.g., 'sub', 'consumer', 'stage')\n * @returns Branded ID string\n *\n * @example\n * const id = generateId('sub');\n * // Returns: \"sub:1698765432100_1_a3k9d7f2q\"\n */\nexport function generateId(prefix: string): string {\n const counter = (globalCounters.get(prefix) ?? 0) + 1;\n globalCounters.set(prefix, counter);\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 11);\n return `${prefix}:${timestamp}_${counter}_${random}`;\n}\n\n/**\n * Generate simple ID with timestamp and random (no counter tracking)\n *\n * Format: `${prefix}:${timestamp}_${random}`\n *\n * @param prefix - Prefix for the ID\n * @returns Branded ID string\n *\n * @example\n * ```ts\n * const id = generateSimpleId('CounterBloc');\n * // Returns: \"CounterBloc:1698765432100_a3k9d7f2q\"\n * ```\n */\nexport function generateSimpleId(prefix: string, affix?: string): string {\n if (affix) {\n return `${prefix}:${affix}`;\n }\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 11);\n return `${prefix}:${timestamp}_${random}`;\n}\n\n/**\n * Reset all counters for testing purposes\n * @internal\n */\nexport function __resetIdCounters(): void {\n globalCounters.clear();\n}\n","export const EMIT = Symbol('blac.emit');\n","import { generateSimpleId } from '../utils/idGenerator';\nimport { BLAC_DEFAULTS } from '../constants';\nimport { getRegistry } from '../registry/config';\nimport type { StateContainerConstructor } from '../types/utilities';\nimport { EMIT } from './symbols';\n\nexport interface StateContainerConfig {\n name?: string;\n debug?: boolean;\n instanceId?: string;\n}\n\nexport type HydrationStatus = 'idle' | 'hydrating' | 'hydrated' | 'error';\n\ntype StateListener<S> = (state: S) => void;\n\nexport type SystemEvent = 'stateChanged' | 'dispose' | 'hydrationChanged';\n\nexport interface SystemEventPayloads<S> {\n stateChanged: { state: S; previousState: S };\n dispose: void;\n hydrationChanged: {\n status: HydrationStatus;\n previousStatus: HydrationStatus;\n error?: Error;\n changedWhileHydrating: boolean;\n };\n}\n\ntype SystemEventHandler<S, E extends SystemEvent> = (\n payload: SystemEventPayloads<S>[E],\n) => void;\n\nconst EMPTY_DEPS: ReadonlyMap<any, any> = new Map();\n\nexport abstract class StateContainer<S extends object = any> {\n static __excludeFromDevTools = false;\n\n private _state: S;\n private readonly _listeners = new Set<StateListener<S>>();\n private _disposed = false;\n private _hydrationStatus: HydrationStatus = 'idle';\n private _hydrationError?: Error;\n private _changedWhileHydrating = false;\n private _hydrationPromise: Promise<void> | null = null;\n private _resolveHydrationPromise?: () => void;\n private _rejectHydrationPromise?: (error: Error) => void;\n private _hydrationPromiseSettled = false;\n private _config: StateContainerConfig = {};\n private readonly _systemEventHandlers = new Map<\n SystemEvent,\n Set<SystemEventHandler<S, any>>\n >();\n private _dependencies: Map<StateContainerConstructor, string> | null = null;\n private _hasStateChangeHandlers = false;\n private _registry = getRegistry();\n\n name: string = this.constructor.name;\n debug: boolean = false;\n instanceId: string = generateSimpleId(this.constructor.name, 'main');\n createdAt: number = Date.now();\n\n get dependencies(): ReadonlyMap<StateContainerConstructor, string> {\n return this._dependencies ?? EMPTY_DEPS;\n }\n\n protected depend<T extends StateContainerConstructor>(\n Type: T,\n instanceKey?: string,\n ): () => InstanceType<T> {\n if (!this._dependencies) {\n this._dependencies = new Map();\n }\n this._dependencies.set(\n Type,\n instanceKey ?? BLAC_DEFAULTS.DEFAULT_INSTANCE_KEY,\n );\n return () => this._registry.ensure(Type, instanceKey);\n }\n\n constructor(initialState: S) {\n this._state = initialState;\n }\n\n initConfig(config: StateContainerConfig): void {\n this._config = { ...config };\n this.name = this._config.name || this.constructor.name;\n this.debug = this._config.debug ?? false;\n this.instanceId = generateSimpleId(\n this.constructor.name,\n this._config.instanceId,\n );\n this._registry.emit('created', this);\n }\n\n get state(): Readonly<S> {\n return this._state;\n }\n\n get isDisposed(): boolean {\n return this._disposed;\n }\n\n get hydrationStatus(): HydrationStatus {\n return this._hydrationStatus;\n }\n\n get hydrationError(): Error | undefined {\n return this._hydrationError;\n }\n\n get isHydrated(): boolean {\n return this._hydrationStatus === 'hydrated';\n }\n\n get changedWhileHydrating(): boolean {\n return this._changedWhileHydrating;\n }\n\n subscribe(listener: StateListener<S>): () => void {\n if (this._disposed) {\n throw new Error(`Cannot subscribe to disposed container ${this.name}`);\n }\n this._listeners.add(listener);\n return () => this._listeners.delete(listener);\n }\n\n dispose(): void {\n if (this._disposed) return;\n\n if (this.debug) {\n console.log(`[${this.name}] Disposing...`);\n }\n\n this._disposed = true;\n\n if (this._hydrationStatus === 'hydrating') {\n this.failHydration(\n new Error(`Hydration cancelled because ${this.name} was disposed`),\n );\n }\n\n this.emitSystemEvent('dispose', undefined as void);\n\n this._listeners.clear();\n this._systemEventHandlers.clear();\n\n this._registry.emit('disposed', this);\n\n if (this.debug) {\n console.log(`[${this.name}] Disposed successfully`);\n }\n }\n\n protected [EMIT](newState: S): void {\n this.applyState(newState, 'default');\n }\n\n beginHydration(): void {\n if (this._disposed) {\n throw new Error(\n `Cannot begin hydration for disposed container ${this.name}`,\n );\n }\n\n this._changedWhileHydrating = false;\n this._hydrationError = undefined;\n this._hydrationPromise = null;\n this._resolveHydrationPromise = undefined;\n this._rejectHydrationPromise = undefined;\n this._hydrationPromiseSettled = false;\n void this.ensureHydrationPromise();\n this.setHydrationStatus('hydrating');\n }\n\n applyHydratedState(newState: S): boolean {\n if (this._disposed) {\n return false;\n }\n\n if (this._hydrationStatus !== 'hydrating' || this._changedWhileHydrating) {\n return false;\n }\n\n this.applyState(newState, 'hydration');\n return true;\n }\n\n finishHydration(): void {\n if (this._hydrationStatus !== 'hydrating') {\n if (this._hydrationStatus === 'hydrated') {\n return;\n }\n if (this._hydrationStatus === 'error') {\n void this.ensureHydrationPromise();\n }\n }\n\n this.setHydrationStatus('hydrated');\n this.resolveHydration();\n }\n\n failHydration(error: Error): void {\n const err =\n error instanceof Error\n ? error\n : new Error(`Hydration failed: ${String(error)}`);\n\n this._hydrationError = err;\n this.setHydrationStatus('error', err);\n this.rejectHydration(err);\n }\n\n waitForHydration(): Promise<void> {\n if (\n this._hydrationStatus === 'idle' ||\n this._hydrationStatus === 'hydrated'\n ) {\n return Promise.resolve();\n }\n\n if (this._hydrationStatus === 'error') {\n return Promise.reject(\n this._hydrationError ??\n new Error(`Hydration failed for container ${this.name}`),\n );\n }\n\n return this.ensureHydrationPromise();\n }\n\n private applyState(newState: S, source: 'default' | 'hydration'): void {\n if (this._disposed) {\n throw new Error(`Cannot emit state from disposed container ${this.name}`);\n }\n\n if (this._state === newState) return;\n\n const previousState = this._state;\n this._state = newState;\n\n if (\n this._listeners.size === 0 &&\n !this._hasStateChangeHandlers &&\n this._hydrationStatus !== 'hydrating'\n ) {\n if (this._registry.hasStateChangedListeners) {\n this._registry.notifyStateChanged(this, previousState, newState);\n }\n return;\n }\n\n if (this._hydrationStatus === 'hydrating' && source !== 'hydration') {\n this._changedWhileHydrating = true;\n }\n\n if (this._hasStateChangeHandlers) {\n const handlers = this._systemEventHandlers.get('stateChanged')!;\n const payload = { state: newState, previousState };\n for (const handler of handlers) {\n try {\n handler(payload);\n } catch (error) {\n console.error(`[${this.name}] Error in system event handler:`, error);\n }\n }\n }\n\n if (this._listeners.size > 0) {\n let count = 0;\n const size = this._listeners.size;\n for (const listener of this._listeners) {\n if (++count > size) break;\n try {\n listener(newState);\n } catch (error) {\n console.error(`[${this.name}] Error in listener:`, error);\n }\n }\n }\n\n if (this._registry.hasStateChangedListeners) {\n this._registry.notifyStateChanged(this, previousState, newState);\n }\n }\n\n private setHydrationStatus(status: HydrationStatus, error?: Error): void {\n const previousStatus = this._hydrationStatus;\n this._hydrationStatus = status;\n this._hydrationError = error;\n\n this.emitSystemEvent('hydrationChanged', {\n status,\n previousStatus,\n error,\n changedWhileHydrating: this._changedWhileHydrating,\n });\n }\n\n private ensureHydrationPromise(): Promise<void> {\n if (!this._hydrationPromise || this._hydrationPromiseSettled) {\n this._hydrationPromiseSettled = false;\n this._hydrationPromise = new Promise<void>((resolve, reject) => {\n this._resolveHydrationPromise = () => {\n if (this._hydrationPromiseSettled) return;\n this._hydrationPromiseSettled = true;\n resolve();\n };\n this._rejectHydrationPromise = (error: Error) => {\n if (this._hydrationPromiseSettled) return;\n this._hydrationPromiseSettled = true;\n reject(error);\n };\n });\n this._hydrationPromise.catch(() => {});\n }\n\n return this._hydrationPromise;\n }\n\n private resolveHydration(): void {\n this._resolveHydrationPromise?.();\n }\n\n private rejectHydration(error: Error): void {\n void this.ensureHydrationPromise();\n this._rejectHydrationPromise?.(error);\n }\n\n protected onSystemEvent = <E extends SystemEvent>(\n event: E,\n handler: SystemEventHandler<S, E>,\n ): (() => void) => {\n let handlers = this._systemEventHandlers.get(event);\n if (!handlers) {\n handlers = new Set();\n this._systemEventHandlers.set(event, handlers);\n }\n handlers.add(handler as SystemEventHandler<S, any>);\n\n if (event === 'stateChanged') {\n this._hasStateChangeHandlers = true;\n }\n\n return () => {\n handlers?.delete(handler as SystemEventHandler<S, any>);\n if (event === 'stateChanged' && handlers?.size === 0) {\n this._hasStateChangeHandlers = false;\n }\n };\n };\n\n private emitSystemEvent<E extends SystemEvent>(\n event: E,\n payload: SystemEventPayloads<S>[E],\n ): void {\n const handlers = this._systemEventHandlers.get(event);\n if (!handlers) return;\n\n for (const handler of handlers) {\n try {\n handler(payload);\n } catch (error) {\n console.error(`[${this.name}] Error in system event handler:`, error);\n }\n }\n }\n}\n","import { StateContainer } from './StateContainer';\nimport { EMIT } from './symbols';\n\nexport abstract class Cubit<S extends object = any> extends StateContainer<S> {\n constructor(initialState: S) {\n super(initialState);\n }\n\n public emit(newState: S): void {\n this[EMIT](newState);\n }\n\n public patch = ((partial: S extends object ? Partial<S> : never): void => {\n if (typeof this.state !== 'object' || this.state === null) {\n throw new Error('patch() is only available for object state types');\n }\n for (const key of Object.keys(partial as object)) {\n if (!Object.is((this.state as any)[key], (partial as any)[key])) {\n this[EMIT]({ ...this.state, ...partial } as S);\n return;\n }\n }\n }) as S extends object ? (partial: Partial<S>) => void : never;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import { a as BLAC_DEFAULTS } from './StateContainerRegistry-BglEhqdA.js';
|
|
2
|
+
import { t as getRegistry } from './config-BKGHop0V.js';
|
|
3
|
+
//#region src/utils/idGenerator.ts
|
|
4
|
+
/**
|
|
5
|
+
* Generate simple ID with timestamp and random (no counter tracking)
|
|
6
|
+
*
|
|
7
|
+
* Format: `${prefix}:${timestamp}_${random}`
|
|
8
|
+
*
|
|
9
|
+
* @param prefix - Prefix for the ID
|
|
10
|
+
* @returns Branded ID string
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const id = generateSimpleId('CounterBloc');
|
|
15
|
+
* // Returns: "CounterBloc:1698765432100_a3k9d7f2q"
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
function generateSimpleId(prefix, affix) {
|
|
19
|
+
if (affix) return `${prefix}:${affix}`;
|
|
20
|
+
return `${prefix}:${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/core/symbols.ts
|
|
24
|
+
const EMIT = Symbol('blac.emit');
|
|
25
|
+
const UPDATE = Symbol('blac.update');
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/core/StateContainer.ts
|
|
28
|
+
const EMPTY_DEPS = /* @__PURE__ */ new Map();
|
|
29
|
+
var StateContainer = class {
|
|
30
|
+
static {
|
|
31
|
+
this.__excludeFromDevTools = false;
|
|
32
|
+
}
|
|
33
|
+
get dependencies() {
|
|
34
|
+
return this._dependencies ?? EMPTY_DEPS;
|
|
35
|
+
}
|
|
36
|
+
depend(Type, instanceKey) {
|
|
37
|
+
if (!this._dependencies) this._dependencies = /* @__PURE__ */ new Map();
|
|
38
|
+
this._dependencies.set(
|
|
39
|
+
Type,
|
|
40
|
+
instanceKey ?? BLAC_DEFAULTS.DEFAULT_INSTANCE_KEY,
|
|
41
|
+
);
|
|
42
|
+
return () => this._registry.ensure(Type, instanceKey);
|
|
43
|
+
}
|
|
44
|
+
constructor(initialState) {
|
|
45
|
+
this._listeners = /* @__PURE__ */ new Set();
|
|
46
|
+
this._disposed = false;
|
|
47
|
+
this._hydrationStatus = 'idle';
|
|
48
|
+
this._changedWhileHydrating = false;
|
|
49
|
+
this._hydrationPromise = null;
|
|
50
|
+
this._hydrationPromiseSettled = false;
|
|
51
|
+
this._config = {};
|
|
52
|
+
this._dependencies = null;
|
|
53
|
+
this._registry = getRegistry();
|
|
54
|
+
this._stateChangedHandlers = null;
|
|
55
|
+
this._disposeHandlers = null;
|
|
56
|
+
this._hydrationChangedHandlers = null;
|
|
57
|
+
this._pendingSystemStateChanges = null;
|
|
58
|
+
this.name = this.constructor.name;
|
|
59
|
+
this.debug = false;
|
|
60
|
+
this.instanceId = generateSimpleId(this.constructor.name, 'main');
|
|
61
|
+
this.createdAt = Date.now();
|
|
62
|
+
this.onSystemEvent = (event, handler) => {
|
|
63
|
+
if (event === 'stateChanged') {
|
|
64
|
+
if (!this._stateChangedHandlers)
|
|
65
|
+
this._stateChangedHandlers = /* @__PURE__ */ new Set();
|
|
66
|
+
this._stateChangedHandlers.add(handler);
|
|
67
|
+
return () => {
|
|
68
|
+
this._stateChangedHandlers?.delete(handler);
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (event === 'dispose') {
|
|
72
|
+
if (!this._disposeHandlers)
|
|
73
|
+
this._disposeHandlers = /* @__PURE__ */ new Set();
|
|
74
|
+
this._disposeHandlers.add(handler);
|
|
75
|
+
return () => {
|
|
76
|
+
this._disposeHandlers?.delete(handler);
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (!this._hydrationChangedHandlers)
|
|
80
|
+
this._hydrationChangedHandlers = /* @__PURE__ */ new Set();
|
|
81
|
+
this._hydrationChangedHandlers.add(handler);
|
|
82
|
+
return () => {
|
|
83
|
+
this._hydrationChangedHandlers?.delete(handler);
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
this._state = initialState;
|
|
87
|
+
}
|
|
88
|
+
initConfig(config) {
|
|
89
|
+
this._config = { ...config };
|
|
90
|
+
this.name = this._config.name || this.constructor.name;
|
|
91
|
+
this.debug = this._config.debug ?? false;
|
|
92
|
+
this.instanceId = generateSimpleId(
|
|
93
|
+
this.constructor.name,
|
|
94
|
+
this._config.instanceId,
|
|
95
|
+
);
|
|
96
|
+
this._registry.emit('created', this);
|
|
97
|
+
}
|
|
98
|
+
get state() {
|
|
99
|
+
return this._state;
|
|
100
|
+
}
|
|
101
|
+
get isDisposed() {
|
|
102
|
+
return this._disposed;
|
|
103
|
+
}
|
|
104
|
+
get hydrationStatus() {
|
|
105
|
+
return this._hydrationStatus;
|
|
106
|
+
}
|
|
107
|
+
get hydrationError() {
|
|
108
|
+
return this._hydrationError;
|
|
109
|
+
}
|
|
110
|
+
get isHydrated() {
|
|
111
|
+
return this._hydrationStatus === 'hydrated';
|
|
112
|
+
}
|
|
113
|
+
get changedWhileHydrating() {
|
|
114
|
+
return this._changedWhileHydrating;
|
|
115
|
+
}
|
|
116
|
+
subscribe(listener) {
|
|
117
|
+
if (this._disposed)
|
|
118
|
+
throw new Error(`Cannot subscribe to disposed container ${this.name}`);
|
|
119
|
+
this._listeners.add(listener);
|
|
120
|
+
return () => this._listeners.delete(listener);
|
|
121
|
+
}
|
|
122
|
+
dispose() {
|
|
123
|
+
if (this._disposed) return;
|
|
124
|
+
if (this.debug) console.log(`[${this.name}] Disposing...`);
|
|
125
|
+
this._disposed = true;
|
|
126
|
+
if (this._hydrationStatus === 'hydrating')
|
|
127
|
+
this.failHydration(
|
|
128
|
+
/* @__PURE__ */ new Error(
|
|
129
|
+
`Hydration cancelled because ${this.name} was disposed`,
|
|
130
|
+
),
|
|
131
|
+
);
|
|
132
|
+
this.emitSystemEvent('dispose', void 0);
|
|
133
|
+
this._listeners.clear();
|
|
134
|
+
this._stateChangedHandlers = null;
|
|
135
|
+
this._disposeHandlers = null;
|
|
136
|
+
this._hydrationChangedHandlers = null;
|
|
137
|
+
this._registry.emit('disposed', this);
|
|
138
|
+
if (this.debug) console.log(`[${this.name}] Disposed successfully`);
|
|
139
|
+
}
|
|
140
|
+
[EMIT](newState) {
|
|
141
|
+
this.applyState(newState, 'default');
|
|
142
|
+
}
|
|
143
|
+
[UPDATE](updater) {
|
|
144
|
+
if (this._disposed)
|
|
145
|
+
throw new Error(
|
|
146
|
+
`Cannot update state from disposed container ${this.name}`,
|
|
147
|
+
);
|
|
148
|
+
this[EMIT](updater(this._state));
|
|
149
|
+
}
|
|
150
|
+
beginHydration() {
|
|
151
|
+
if (this._disposed)
|
|
152
|
+
throw new Error(
|
|
153
|
+
`Cannot begin hydration for disposed container ${this.name}`,
|
|
154
|
+
);
|
|
155
|
+
this._changedWhileHydrating = false;
|
|
156
|
+
this._hydrationError = void 0;
|
|
157
|
+
this._hydrationPromise = null;
|
|
158
|
+
this._resolveHydrationPromise = void 0;
|
|
159
|
+
this._rejectHydrationPromise = void 0;
|
|
160
|
+
this._hydrationPromiseSettled = false;
|
|
161
|
+
this.ensureHydrationPromise();
|
|
162
|
+
this.setHydrationStatus('hydrating');
|
|
163
|
+
}
|
|
164
|
+
applyHydratedState(newState) {
|
|
165
|
+
if (this._disposed) return false;
|
|
166
|
+
if (this._hydrationStatus !== 'hydrating' || this._changedWhileHydrating)
|
|
167
|
+
return false;
|
|
168
|
+
this.applyState(newState, 'hydration');
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
finishHydration() {
|
|
172
|
+
if (this._hydrationStatus !== 'hydrating') {
|
|
173
|
+
if (this._hydrationStatus === 'hydrated') return;
|
|
174
|
+
if (this._hydrationStatus === 'error') this.ensureHydrationPromise();
|
|
175
|
+
}
|
|
176
|
+
this.setHydrationStatus('hydrated');
|
|
177
|
+
this.resolveHydration();
|
|
178
|
+
}
|
|
179
|
+
failHydration(error) {
|
|
180
|
+
const err =
|
|
181
|
+
error instanceof Error
|
|
182
|
+
? error
|
|
183
|
+
: /* @__PURE__ */ new Error(`Hydration failed: ${String(error)}`);
|
|
184
|
+
this._hydrationError = err;
|
|
185
|
+
this.setHydrationStatus('error', err);
|
|
186
|
+
this.rejectHydration(err);
|
|
187
|
+
}
|
|
188
|
+
waitForHydration() {
|
|
189
|
+
if (
|
|
190
|
+
this._hydrationStatus === 'idle' ||
|
|
191
|
+
this._hydrationStatus === 'hydrated'
|
|
192
|
+
)
|
|
193
|
+
return Promise.resolve();
|
|
194
|
+
if (this._hydrationStatus === 'error')
|
|
195
|
+
return Promise.reject(
|
|
196
|
+
this._hydrationError ??
|
|
197
|
+
/* @__PURE__ */ new Error(
|
|
198
|
+
`Hydration failed for container ${this.name}`,
|
|
199
|
+
),
|
|
200
|
+
);
|
|
201
|
+
return this.ensureHydrationPromise();
|
|
202
|
+
}
|
|
203
|
+
applyState(newState, source) {
|
|
204
|
+
if (this._disposed)
|
|
205
|
+
throw new Error(`Cannot emit state from disposed container ${this.name}`);
|
|
206
|
+
if (this._state === newState) return;
|
|
207
|
+
if (this._hydrationStatus === 'hydrating' && source !== 'hydration')
|
|
208
|
+
this._changedWhileHydrating = true;
|
|
209
|
+
const previousState = this._state;
|
|
210
|
+
this._state = newState;
|
|
211
|
+
this.notifyAfterStateChange(previousState, newState);
|
|
212
|
+
}
|
|
213
|
+
applyStateUnchecked(newState) {
|
|
214
|
+
if (this._hydrationStatus === 'hydrating')
|
|
215
|
+
this._changedWhileHydrating = true;
|
|
216
|
+
const previousState = this._state;
|
|
217
|
+
this._state = newState;
|
|
218
|
+
this.notifyAfterStateChange(previousState, newState);
|
|
219
|
+
}
|
|
220
|
+
notifyAfterStateChange(previousState, newState) {
|
|
221
|
+
const handlers = this._stateChangedHandlers;
|
|
222
|
+
if (handlers && handlers.size > 0) {
|
|
223
|
+
const payload = {
|
|
224
|
+
state: newState,
|
|
225
|
+
previousState,
|
|
226
|
+
};
|
|
227
|
+
if (!this._pendingSystemStateChanges) {
|
|
228
|
+
this._pendingSystemStateChanges = [];
|
|
229
|
+
queueMicrotask(() => this.flushSystemStateChanges());
|
|
230
|
+
}
|
|
231
|
+
this._pendingSystemStateChanges.push(payload);
|
|
232
|
+
}
|
|
233
|
+
if (this._listeners.size > 0) {
|
|
234
|
+
const listeners = Array.from(this._listeners);
|
|
235
|
+
for (const listener of listeners)
|
|
236
|
+
try {
|
|
237
|
+
listener(newState);
|
|
238
|
+
} catch (error) {
|
|
239
|
+
console.error(`[${this.name}] Error in listener:`, error);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
this._registry.notifyStateChanged(this, previousState, newState);
|
|
243
|
+
}
|
|
244
|
+
flushSystemStateChanges() {
|
|
245
|
+
const pending = this._pendingSystemStateChanges;
|
|
246
|
+
this._pendingSystemStateChanges = null;
|
|
247
|
+
if (!pending) return;
|
|
248
|
+
const handlers = this._stateChangedHandlers;
|
|
249
|
+
if (!handlers || handlers.size === 0) return;
|
|
250
|
+
for (const payload of pending)
|
|
251
|
+
for (const handler of handlers)
|
|
252
|
+
try {
|
|
253
|
+
handler(payload);
|
|
254
|
+
} catch (error) {
|
|
255
|
+
console.error(`[${this.name}] Error in system event handler:`, error);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
setHydrationStatus(status, error) {
|
|
259
|
+
const previousStatus = this._hydrationStatus;
|
|
260
|
+
this._hydrationStatus = status;
|
|
261
|
+
this._hydrationError = error;
|
|
262
|
+
this.emitSystemEvent('hydrationChanged', {
|
|
263
|
+
status,
|
|
264
|
+
previousStatus,
|
|
265
|
+
error,
|
|
266
|
+
changedWhileHydrating: this._changedWhileHydrating,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
ensureHydrationPromise() {
|
|
270
|
+
if (!this._hydrationPromise || this._hydrationPromiseSettled) {
|
|
271
|
+
this._hydrationPromiseSettled = false;
|
|
272
|
+
this._hydrationPromise = new Promise((resolve, reject) => {
|
|
273
|
+
this._resolveHydrationPromise = () => {
|
|
274
|
+
if (this._hydrationPromiseSettled) return;
|
|
275
|
+
this._hydrationPromiseSettled = true;
|
|
276
|
+
resolve();
|
|
277
|
+
};
|
|
278
|
+
this._rejectHydrationPromise = (error) => {
|
|
279
|
+
if (this._hydrationPromiseSettled) return;
|
|
280
|
+
this._hydrationPromiseSettled = true;
|
|
281
|
+
reject(error);
|
|
282
|
+
};
|
|
283
|
+
});
|
|
284
|
+
this._hydrationPromise.catch(() => {});
|
|
285
|
+
}
|
|
286
|
+
return this._hydrationPromise;
|
|
287
|
+
}
|
|
288
|
+
resolveHydration() {
|
|
289
|
+
this._resolveHydrationPromise?.();
|
|
290
|
+
}
|
|
291
|
+
rejectHydration(error) {
|
|
292
|
+
this.ensureHydrationPromise();
|
|
293
|
+
this._rejectHydrationPromise?.(error);
|
|
294
|
+
}
|
|
295
|
+
emitSystemEvent(event, payload) {
|
|
296
|
+
let handlers = null;
|
|
297
|
+
if (event === 'dispose') handlers = this._disposeHandlers;
|
|
298
|
+
else if (event === 'hydrationChanged')
|
|
299
|
+
handlers = this._hydrationChangedHandlers;
|
|
300
|
+
if (!handlers || handlers.size === 0) return;
|
|
301
|
+
for (const handler of handlers)
|
|
302
|
+
try {
|
|
303
|
+
handler(payload);
|
|
304
|
+
} catch (error) {
|
|
305
|
+
console.error(`[${this.name}] Error in system event handler:`, error);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
//#endregion
|
|
310
|
+
//#region src/core/Cubit.ts
|
|
311
|
+
var Cubit = class extends StateContainer {
|
|
312
|
+
constructor(initialState) {
|
|
313
|
+
super(initialState);
|
|
314
|
+
this.patch = (partial) => {
|
|
315
|
+
if (this.isDisposed)
|
|
316
|
+
throw new Error(
|
|
317
|
+
`Cannot emit state from disposed container ${this.name}`,
|
|
318
|
+
);
|
|
319
|
+
if (typeof this.state !== 'object' || this.state === null)
|
|
320
|
+
throw new Error('patch() is only available for object state types');
|
|
321
|
+
const current = this.state;
|
|
322
|
+
let hasChanges = false;
|
|
323
|
+
for (const key in partial)
|
|
324
|
+
if (!Object.is(current[key], partial[key])) {
|
|
325
|
+
hasChanges = true;
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
if (!hasChanges) return;
|
|
329
|
+
const newState = {
|
|
330
|
+
...current,
|
|
331
|
+
...partial,
|
|
332
|
+
};
|
|
333
|
+
this.applyStateUnchecked(newState);
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
emit(newState) {
|
|
337
|
+
this[EMIT](newState);
|
|
338
|
+
}
|
|
339
|
+
update(updater) {
|
|
340
|
+
this[UPDATE](updater);
|
|
341
|
+
}
|
|
342
|
+
};
|
|
343
|
+
//#endregion
|
|
344
|
+
export { UPDATE as i, StateContainer as n, EMIT as r, Cubit as t };
|
|
345
|
+
|
|
346
|
+
//# sourceMappingURL=Cubit-CfT6Y1jl.js.map
|