@blac/core 2.0.13 → 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 +269 -230
- 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 +273 -232
- package/dist/Cubit-BTznt8zg.js +1 -1
- package/dist/Cubit-BogJXkLm.js +260 -225
- 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 +300 -259
- 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 +284 -242
- package/dist/Cubit-CYOWfzQt.cjs +297 -254
- 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 +281 -239
- package/dist/Cubit-CfT6Y1jl.js +328 -280
- 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 +276 -240
- 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 +349 -300
- package/dist/Cubit-DsDkCo42.cjs +292 -250
- package/dist/Cubit-DwRw1E9D.cjs +289 -247
- 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 +279 -239
- 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 +300 -257
- 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 +683 -615
- package/dist/StateContainerRegistry-BK57H92E.js +701 -630
- 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 +669 -606
- package/dist/StateContainerRegistry-BhcnG0DF.js +625 -562
- package/dist/StateContainerRegistry-BpO5t-0i.js +642 -580
- 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 +668 -614
- package/dist/StateContainerRegistry-CTOXUf75.cjs +695 -640
- package/dist/StateContainerRegistry-CX2CBOmv.cjs +739 -679
- 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 +680 -612
- package/dist/StateContainerRegistry-Ck2-XmT_.js +587 -527
- package/dist/StateContainerRegistry-D1lVJFGL.cjs +706 -646
- 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 +709 -649
- 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 +20 -20
- package/dist/config-BKGHop0V.js +5 -5
- 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 +20 -20
- 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 +20 -20
- 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 +5 -5
- 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 +20 -20
- package/dist/config-DMNZ2YLV.cjs +20 -20
- package/dist/config-De9oQ6Ki.js +5 -5
- 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 +20 -20
- package/dist/config-Yp645dGK.js +5 -5
- package/dist/config-ispAzOZV.js +5 -5
- package/dist/config.d.cts +72 -0
- package/dist/config.d.ts +72 -0
- package/dist/constants.d.cts +13 -0
- package/dist/constants.d.ts +13 -0
- package/dist/core/Cubit.d.ts +14 -4
- package/dist/core/StateContainer.d.ts +111 -11
- package/dist/core/StateContainerRegistry.d.ts +55 -11
- package/dist/core/symbols.d.ts +26 -0
- 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 +8 -8
- package/dist/ensure-CJZL7bcA.cjs +365 -292
- package/dist/ensure-CN6unBOe.cjs +8 -8
- package/dist/ensure-CU-B1ywv.js +3 -3
- package/dist/ensure-CWKzeno7.js +3 -3
- 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 +8 -8
- package/dist/ensure-DM3qb336.cjs +14 -0
- package/dist/ensure-DM3qb336.cjs.map +1 -0
- package/dist/ensure-DME-_T0j.cjs +8 -8
- package/dist/ensure-DWd0GCYB.js +3 -3
- 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 +8 -8
- package/dist/ensure-SLVdGd5b.js +3 -3
- 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 +3 -3
- 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 +3 -3
- package/dist/ensure-vS71MV4q.cjs +8 -8
- package/dist/index.cjs +37 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -4
- package/dist/index.d.ts +14 -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 +20 -11
- package/dist/management-B9yrRpeg.js +41 -0
- package/dist/management-B9yrRpeg.js.map +1 -0
- package/dist/management-BCKTEZ8Q.js +20 -11
- 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 +50 -50
- 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 +20 -11
- 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 +20 -11
- package/dist/management-DLdAQfqk.cjs +79 -0
- package/dist/management-DLdAQfqk.cjs.map +1 -0
- package/dist/management-DMZ8qpwr.cjs +50 -50
- package/dist/management-DTzcC6aD.cjs +79 -0
- package/dist/management-DTzcC6aD.cjs.map +1 -0
- package/dist/management-DYLNyj9p.cjs +50 -50
- 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 +50 -50
- package/dist/management-DwCozsY8.js +20 -11
- 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 +50 -50
- package/dist/plugin/BlacPlugin.d.ts +89 -15
- package/dist/plugin/PluginManager.d.ts +65 -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 +641 -558
- package/dist/resolve-dependencies-B6JDXvpr.js +651 -566
- 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 +732 -671
- package/dist/resolve-dependencies-BWEMpuDy.js +641 -558
- 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 +651 -566
- package/dist/resolve-dependencies-C9Kf7AzY.cjs +724 -666
- 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 +722 -663
- 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 +643 -561
- 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 +724 -666
- package/dist/resolve-dependencies-Dfdp_DZd.cjs +732 -671
- package/dist/resolve-dependencies-GJ8PNyNB.cjs +969 -0
- package/dist/resolve-dependencies-GJ8PNyNB.cjs.map +1 -0
- package/dist/resolve-dependencies-KSpTt4jy.cjs +722 -663
- package/dist/resolve-dependencies-Nvjp4CwS.js +643 -561
- 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 +186 -166
- 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 +186 -166
- 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 +171 -151
- package/dist/tracked-CGzduF2m.js +186 -166
- package/dist/tracked-CK_-ixtX.cjs +196 -175
- package/dist/tracked-CLlvURln.js +186 -166
- package/dist/tracked-CgHWmuGC.cjs +211 -190
- package/dist/tracked-CoAlC8fs.js +171 -151
- package/dist/tracked-D3Xjm1H1.cjs +211 -190
- 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 +171 -151
- package/dist/tracked-DOGh1Q5Z.cjs +242 -0
- package/dist/tracked-DOGh1Q5Z.cjs.map +1 -0
- package/dist/tracked-DUkp4zve.cjs +196 -175
- 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 +211 -190
- 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 +211 -190
- 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 +14 -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
|
@@ -1,774 +1,832 @@
|
|
|
1
|
-
const require_StateContainerRegistry = require(
|
|
2
|
-
const require_config = require(
|
|
1
|
+
const require_StateContainerRegistry = require('./StateContainerRegistry-CDH9mnQS.cjs');
|
|
2
|
+
const require_config = require('./config-DEcslxan.cjs');
|
|
3
3
|
//#region src/tracking/path-utils.ts
|
|
4
4
|
/**
|
|
5
|
-
* Path utilities for dependency tracking
|
|
6
|
-
*
|
|
7
|
-
* Provides utilities for parsing property paths and extracting values
|
|
8
|
-
* from nested objects using path strings.
|
|
9
|
-
*
|
|
10
|
-
* @internal
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Parse a property path string into an array of segments
|
|
14
|
-
*
|
|
15
|
-
* @internal
|
|
16
|
-
*
|
|
17
|
-
* Handles both dot notation (a.b.c) and bracket notation (a[0].b)
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```ts
|
|
21
|
-
* parsePath('user.name') // ['user', 'name']
|
|
22
|
-
* parsePath('items[0].name') // ['items', '0', 'name']
|
|
23
|
-
* parsePath('data.users[2].address.city') // ['data', 'users', '2', 'address', 'city']
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
5
|
+
* Path utilities for dependency tracking
|
|
6
|
+
*
|
|
7
|
+
* Provides utilities for parsing property paths and extracting values
|
|
8
|
+
* from nested objects using path strings.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Parse a property path string into an array of segments
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*
|
|
17
|
+
* Handles both dot notation (a.b.c) and bracket notation (a[0].b)
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* parsePath('user.name') // ['user', 'name']
|
|
22
|
+
* parsePath('items[0].name') // ['items', '0', 'name']
|
|
23
|
+
* parsePath('data.users[2].address.city') // ['data', 'users', '2', 'address', 'city']
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
26
|
function parsePath(path) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Get a value from an object using a path of segments
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```ts
|
|
53
|
-
* const obj = { user: { name: 'Alice', age: 30 } }
|
|
54
|
-
* getValueAtPath(obj, ['user', 'name']) // 'Alice'
|
|
55
|
-
* getValueAtPath(obj, ['user', 'age']) // 30
|
|
56
|
-
* getValueAtPath(obj, ['user', 'missing']) // undefined
|
|
57
|
-
* ```
|
|
58
|
-
*
|
|
59
|
-
* @internal
|
|
60
|
-
*/
|
|
27
|
+
const segments = [];
|
|
28
|
+
let current = '';
|
|
29
|
+
let i = 0;
|
|
30
|
+
while (i < path.length) {
|
|
31
|
+
const char = path[i];
|
|
32
|
+
if (char === '.') {
|
|
33
|
+
if (current) segments.push(current);
|
|
34
|
+
current = '';
|
|
35
|
+
} else if (char === '[') {
|
|
36
|
+
if (current) segments.push(current);
|
|
37
|
+
current = '';
|
|
38
|
+
i++;
|
|
39
|
+
while (i < path.length && path[i] !== ']') current += path[i++];
|
|
40
|
+
if (current) segments.push(current);
|
|
41
|
+
current = '';
|
|
42
|
+
} else current += char;
|
|
43
|
+
i++;
|
|
44
|
+
}
|
|
45
|
+
if (current) segments.push(current);
|
|
46
|
+
return segments;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get a value from an object using a path of segments
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* const obj = { user: { name: 'Alice', age: 30 } }
|
|
54
|
+
* getValueAtPath(obj, ['user', 'name']) // 'Alice'
|
|
55
|
+
* getValueAtPath(obj, ['user', 'age']) // 30
|
|
56
|
+
* getValueAtPath(obj, ['user', 'missing']) // undefined
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
61
|
function getValueAtPath(obj, segments) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Shallow equality comparison for arrays
|
|
72
|
-
*
|
|
73
|
-
* Compares two arrays element-by-element using Object.is
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* ```ts
|
|
77
|
-
* shallowEqual([1, 2, 3], [1, 2, 3]) // true
|
|
78
|
-
* shallowEqual([1, 2, 3], [1, 2, 4]) // false
|
|
79
|
-
* shallowEqual([1, 2], [1, 2, 3]) // false
|
|
80
|
-
* ```
|
|
81
|
-
*
|
|
82
|
-
* @internal
|
|
83
|
-
*/
|
|
62
|
+
if (obj == null) return void 0;
|
|
63
|
+
let current = obj;
|
|
64
|
+
for (let i = 0; i < segments.length; i++) {
|
|
65
|
+
current = current[segments[i]];
|
|
66
|
+
if (current == null) return void 0;
|
|
67
|
+
}
|
|
68
|
+
return current;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Shallow equality comparison for arrays
|
|
72
|
+
*
|
|
73
|
+
* Compares two arrays element-by-element using Object.is
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```ts
|
|
77
|
+
* shallowEqual([1, 2, 3], [1, 2, 3]) // true
|
|
78
|
+
* shallowEqual([1, 2, 3], [1, 2, 4]) // false
|
|
79
|
+
* shallowEqual([1, 2], [1, 2, 3]) // false
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @internal
|
|
83
|
+
*/
|
|
84
84
|
function shallowEqual(arr1, arr2) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
if (arr1.length !== arr2.length) return false;
|
|
86
|
+
for (let i = 0; i < arr1.length; i++)
|
|
87
|
+
if (!Object.is(arr1[i], arr2[i])) return false;
|
|
88
|
+
return true;
|
|
88
89
|
}
|
|
89
90
|
//#endregion
|
|
90
91
|
//#region src/tracking/tracking-proxy.ts
|
|
91
92
|
/**
|
|
92
|
-
* Consolidated Tracking System
|
|
93
|
-
*
|
|
94
|
-
* This module provides all dependency and getter tracking functionality:
|
|
95
|
-
* - Proxy creation for automatic property access tracking
|
|
96
|
-
* - Dependency path tracking and change detection
|
|
97
|
-
* - Getter execution tracking for computed properties
|
|
98
|
-
* - Combined tracking proxy for watch/waitUntil use cases
|
|
99
|
-
*/
|
|
100
|
-
/**
|
|
101
|
-
* Check if a value can be proxied
|
|
102
|
-
* Returns true for plain objects and arrays only.
|
|
103
|
-
* @internal
|
|
104
|
-
*/
|
|
93
|
+
* Consolidated Tracking System
|
|
94
|
+
*
|
|
95
|
+
* This module provides all dependency and getter tracking functionality:
|
|
96
|
+
* - Proxy creation for automatic property access tracking
|
|
97
|
+
* - Dependency path tracking and change detection
|
|
98
|
+
* - Getter execution tracking for computed properties
|
|
99
|
+
* - Combined tracking proxy for watch/waitUntil use cases
|
|
100
|
+
*/
|
|
101
|
+
/**
|
|
102
|
+
* Check if a value can be proxied
|
|
103
|
+
* Returns true for plain objects and arrays only.
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
105
106
|
function isProxyable(value) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
if (typeof value !== 'object' || value === null) return false;
|
|
108
|
+
const proto = Object.getPrototypeOf(value);
|
|
109
|
+
return proto === Object.prototype || proto === Array.prototype;
|
|
109
110
|
}
|
|
110
111
|
/**
|
|
111
|
-
* Create a new proxy tracker state
|
|
112
|
-
* @internal
|
|
113
|
-
*/
|
|
112
|
+
* Create a new proxy tracker state
|
|
113
|
+
* @internal
|
|
114
|
+
*/
|
|
114
115
|
function createProxyState() {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Start tracking property accesses
|
|
127
|
-
* @internal
|
|
128
|
-
*/
|
|
116
|
+
return {
|
|
117
|
+
trackedPaths: /* @__PURE__ */ new Set(),
|
|
118
|
+
isTracking: false,
|
|
119
|
+
proxyCache: /* @__PURE__ */ new WeakMap(),
|
|
120
|
+
boundFunctionsCache: null,
|
|
121
|
+
lastProxiedState: null,
|
|
122
|
+
lastProxy: null,
|
|
123
|
+
maxDepth: 10,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Start tracking property accesses
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
129
130
|
function startProxy(state) {
|
|
130
|
-
|
|
131
|
-
|
|
131
|
+
state.isTracking = true;
|
|
132
|
+
state.trackedPaths.clear();
|
|
132
133
|
}
|
|
133
134
|
/**
|
|
134
|
-
* Stop tracking and return the tracked paths
|
|
135
|
-
* @internal
|
|
136
|
-
*/
|
|
135
|
+
* Stop tracking and return the tracked paths
|
|
136
|
+
* @internal
|
|
137
|
+
*/
|
|
137
138
|
function stopProxy(state) {
|
|
138
|
-
|
|
139
|
-
|
|
139
|
+
state.isTracking = false;
|
|
140
|
+
return new Set(state.trackedPaths);
|
|
140
141
|
}
|
|
141
142
|
/**
|
|
142
|
-
* Create a proxy for an array with property access tracking
|
|
143
|
-
* @internal
|
|
144
|
-
*/
|
|
143
|
+
* Create a proxy for an array with property access tracking
|
|
144
|
+
* @internal
|
|
145
|
+
*/
|
|
145
146
|
function createArrayProxy(state, target, path, depth = 0) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
147
|
+
const proxy = new Proxy(target, {
|
|
148
|
+
get: (arr, prop) => {
|
|
149
|
+
if (typeof prop === 'symbol') return Reflect.get(arr, prop);
|
|
150
|
+
const value = Reflect.get(arr, prop);
|
|
151
|
+
if (typeof value === 'function') {
|
|
152
|
+
if (!state.boundFunctionsCache)
|
|
153
|
+
state.boundFunctionsCache = /* @__PURE__ */ new WeakMap();
|
|
154
|
+
const cached = state.boundFunctionsCache.get(value);
|
|
155
|
+
if (cached) return cached;
|
|
156
|
+
const bound = value.bind(arr);
|
|
157
|
+
state.boundFunctionsCache.set(value, bound);
|
|
158
|
+
return bound;
|
|
159
|
+
}
|
|
160
|
+
if (prop === 'length') {
|
|
161
|
+
if (state.isTracking) {
|
|
162
|
+
const fullPath = path ? `${path}.length` : 'length';
|
|
163
|
+
state.trackedPaths.add(fullPath);
|
|
164
|
+
}
|
|
165
|
+
return value;
|
|
166
|
+
}
|
|
167
|
+
let fullPath;
|
|
168
|
+
if (typeof prop === 'string') {
|
|
169
|
+
const index = Number(prop);
|
|
170
|
+
if (!isNaN(index) && index >= 0)
|
|
171
|
+
fullPath = path ? `${path}[${index}]` : `[${index}]`;
|
|
172
|
+
else fullPath = path ? `${path}.${prop}` : prop;
|
|
173
|
+
} else return value;
|
|
174
|
+
if (isProxyable(value))
|
|
175
|
+
return createInternal(state, value, fullPath, depth + 1);
|
|
176
|
+
if (state.isTracking) state.trackedPaths.add(fullPath);
|
|
177
|
+
return value;
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
state.proxyCache.set(target, proxy);
|
|
181
|
+
return proxy;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Create a proxy for an object with property access tracking
|
|
185
|
+
* @internal
|
|
186
|
+
*/
|
|
187
|
+
function createInternal(state, target, path = '', depth = 0) {
|
|
188
|
+
if (!state.isTracking || !isProxyable(target)) return target;
|
|
189
|
+
if (depth >= state.maxDepth) {
|
|
190
|
+
console.warn(
|
|
191
|
+
`${require_StateContainerRegistry.BLAC_ERROR_PREFIX} Proxy depth limit (${state.maxDepth}) reached at path "${path}". Deeper property accesses won't be tracked for re-renders.`,
|
|
192
|
+
);
|
|
193
|
+
return target;
|
|
194
|
+
}
|
|
195
|
+
if (state.proxyCache.has(target)) return state.proxyCache.get(target);
|
|
196
|
+
if (Array.isArray(target))
|
|
197
|
+
return createArrayProxy(state, target, path, depth);
|
|
198
|
+
const proxy = new Proxy(target, {
|
|
199
|
+
get: (obj, prop) => {
|
|
200
|
+
if (typeof prop === 'symbol') return Reflect.get(obj, prop);
|
|
201
|
+
const value = Reflect.get(obj, prop);
|
|
202
|
+
if (typeof value === 'function') {
|
|
203
|
+
if (!state.boundFunctionsCache)
|
|
204
|
+
state.boundFunctionsCache = /* @__PURE__ */ new WeakMap();
|
|
205
|
+
const cached = state.boundFunctionsCache.get(value);
|
|
206
|
+
if (cached) return cached;
|
|
207
|
+
const bound = value.bind(obj);
|
|
208
|
+
state.boundFunctionsCache.set(value, bound);
|
|
209
|
+
return bound;
|
|
210
|
+
}
|
|
211
|
+
const fullPath = path ? `${path}.${String(prop)}` : String(prop);
|
|
212
|
+
if (typeof prop === 'string' && state.isTracking) {
|
|
213
|
+
if (!prop.startsWith('_') && !prop.startsWith('$$'))
|
|
214
|
+
state.trackedPaths.add(fullPath);
|
|
215
|
+
}
|
|
216
|
+
if (isProxyable(value))
|
|
217
|
+
return createInternal(state, value, fullPath, depth + 1);
|
|
218
|
+
return value;
|
|
219
|
+
},
|
|
220
|
+
has: (obj, prop) => {
|
|
221
|
+
if (typeof prop === 'string' && state.isTracking) {
|
|
222
|
+
const fullPath = path ? `${path}.${prop}` : prop;
|
|
223
|
+
state.trackedPaths.add(fullPath);
|
|
224
|
+
}
|
|
225
|
+
return Reflect.has(obj, prop);
|
|
226
|
+
},
|
|
227
|
+
ownKeys: (obj) => {
|
|
228
|
+
if (state.isTracking && path) state.trackedPaths.add(path);
|
|
229
|
+
return Reflect.ownKeys(obj);
|
|
230
|
+
},
|
|
231
|
+
});
|
|
232
|
+
state.proxyCache.set(target, proxy);
|
|
233
|
+
return proxy;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Create a proxy for a target with caching
|
|
237
|
+
* @internal
|
|
238
|
+
*/
|
|
227
239
|
function createForTarget(state, target) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
240
|
+
if (state.lastProxiedState === target && state.lastProxy)
|
|
241
|
+
return state.lastProxy;
|
|
242
|
+
state.proxyCache = /* @__PURE__ */ new WeakMap();
|
|
243
|
+
state.boundFunctionsCache = null;
|
|
244
|
+
const proxy = createInternal(state, target, '', 0);
|
|
245
|
+
state.lastProxiedState = target;
|
|
246
|
+
state.lastProxy = proxy;
|
|
247
|
+
return proxy;
|
|
235
248
|
}
|
|
236
249
|
function isChildPath(child, parent) {
|
|
237
|
-
|
|
238
|
-
|
|
250
|
+
if (child === parent) return false;
|
|
251
|
+
return child.startsWith(parent + '.') || child.startsWith(parent + '[');
|
|
239
252
|
}
|
|
240
253
|
function getArrayParentPath(path) {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
254
|
+
if (path.endsWith('.length')) return path.slice(0, -7);
|
|
255
|
+
const arrayIndexMatch = path.match(/^(.+?)\[\d+\]/);
|
|
256
|
+
if (arrayIndexMatch) return arrayIndexMatch[1];
|
|
257
|
+
return null;
|
|
245
258
|
}
|
|
246
259
|
/**
|
|
247
|
-
* @internal
|
|
248
|
-
*/
|
|
260
|
+
* @internal
|
|
261
|
+
*/
|
|
249
262
|
function optimizeTrackedPaths(paths) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
263
|
+
if (paths.size === 0) return /* @__PURE__ */ new Set();
|
|
264
|
+
if (paths.size === 1) return new Set(paths);
|
|
265
|
+
const sortedPaths = Array.from(paths).sort((a, b) => b.length - a.length);
|
|
266
|
+
const optimized = /* @__PURE__ */ new Set();
|
|
267
|
+
for (const path of sortedPaths) {
|
|
268
|
+
let hasMoreSpecificChild = false;
|
|
269
|
+
for (const optimizedPath of optimized)
|
|
270
|
+
if (isChildPath(optimizedPath, path)) {
|
|
271
|
+
hasMoreSpecificChild = true;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
if (!hasMoreSpecificChild) optimized.add(path);
|
|
275
|
+
}
|
|
276
|
+
const arrayParents = /* @__PURE__ */ new Set();
|
|
277
|
+
for (const path of optimized) {
|
|
278
|
+
const arrayParent = getArrayParentPath(path);
|
|
279
|
+
if (arrayParent) arrayParents.add(arrayParent);
|
|
280
|
+
}
|
|
281
|
+
for (const arrayParent of arrayParents) optimized.add(arrayParent);
|
|
282
|
+
return optimized;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* @internal
|
|
286
|
+
*/
|
|
273
287
|
function createDependencyState() {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* @internal
|
|
285
|
-
*/
|
|
288
|
+
return {
|
|
289
|
+
proxyState: createProxyState(),
|
|
290
|
+
previousRenderPaths: /* @__PURE__ */ new Set(),
|
|
291
|
+
currentRenderPaths: /* @__PURE__ */ new Set(),
|
|
292
|
+
pathCache: /* @__PURE__ */ new Map(),
|
|
293
|
+
lastCheckedState: null,
|
|
294
|
+
lastCheckedValues: /* @__PURE__ */ new Map(),
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* @internal
|
|
299
|
+
*/
|
|
286
300
|
function startDependency(tracker) {
|
|
287
|
-
|
|
301
|
+
startProxy(tracker.proxyState);
|
|
288
302
|
}
|
|
289
303
|
/**
|
|
290
|
-
* @internal
|
|
291
|
-
*/
|
|
304
|
+
* @internal
|
|
305
|
+
*/
|
|
292
306
|
function createDependencyProxy(tracker, state) {
|
|
293
|
-
|
|
307
|
+
return createForTarget(tracker.proxyState, state);
|
|
294
308
|
}
|
|
295
309
|
/**
|
|
296
|
-
* @internal
|
|
297
|
-
*/
|
|
310
|
+
* @internal
|
|
311
|
+
*/
|
|
298
312
|
function capturePaths(tracker, state) {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
313
|
+
tracker.previousRenderPaths = tracker.currentRenderPaths;
|
|
314
|
+
tracker.currentRenderPaths = optimizeTrackedPaths(
|
|
315
|
+
stopProxy(tracker.proxyState),
|
|
316
|
+
);
|
|
317
|
+
if (
|
|
318
|
+
tracker.previousRenderPaths.size === 0 &&
|
|
319
|
+
tracker.currentRenderPaths.size === 0
|
|
320
|
+
)
|
|
321
|
+
return;
|
|
322
|
+
const trackedPathsUnion = new Set(tracker.previousRenderPaths);
|
|
323
|
+
for (const path of tracker.currentRenderPaths) trackedPathsUnion.add(path);
|
|
324
|
+
const canReuseCache = tracker.lastCheckedState === state;
|
|
325
|
+
for (const path of trackedPathsUnion)
|
|
326
|
+
if (!tracker.pathCache.has(path)) {
|
|
327
|
+
const segments = parsePath(path);
|
|
328
|
+
const value =
|
|
329
|
+
canReuseCache && tracker.lastCheckedValues.has(path)
|
|
330
|
+
? tracker.lastCheckedValues.get(path)
|
|
331
|
+
: getValueAtPath(state, segments);
|
|
332
|
+
tracker.pathCache.set(path, {
|
|
333
|
+
segments,
|
|
334
|
+
value,
|
|
335
|
+
});
|
|
336
|
+
} else {
|
|
337
|
+
const info = tracker.pathCache.get(path);
|
|
338
|
+
if (!info) continue;
|
|
339
|
+
info.value =
|
|
340
|
+
canReuseCache && tracker.lastCheckedValues.has(path)
|
|
341
|
+
? tracker.lastCheckedValues.get(path)
|
|
342
|
+
: getValueAtPath(state, info.segments);
|
|
343
|
+
}
|
|
344
|
+
tracker.lastCheckedValues.clear();
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* @internal
|
|
348
|
+
*/
|
|
322
349
|
function hasDependencyChanges(tracker, state) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* @internal
|
|
338
|
-
*/
|
|
350
|
+
if (tracker.pathCache.size === 0) return true;
|
|
351
|
+
tracker.lastCheckedValues.clear();
|
|
352
|
+
for (const [path, info] of tracker.pathCache.entries()) {
|
|
353
|
+
const currentValue = getValueAtPath(state, info.segments);
|
|
354
|
+
tracker.lastCheckedValues.set(path, currentValue);
|
|
355
|
+
if (!Object.is(currentValue, info.value)) {
|
|
356
|
+
tracker.lastCheckedState = state;
|
|
357
|
+
return true;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
tracker.lastCheckedState = state;
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* @internal
|
|
365
|
+
*/
|
|
339
366
|
function hasTrackedData(tracker) {
|
|
340
|
-
|
|
367
|
+
return (
|
|
368
|
+
tracker.proxyState.trackedPaths.size > 0 ||
|
|
369
|
+
tracker.pathCache.size > 0 ||
|
|
370
|
+
tracker.previousRenderPaths.size > 0
|
|
371
|
+
);
|
|
341
372
|
}
|
|
342
373
|
const descriptorCache = /* @__PURE__ */ new WeakMap();
|
|
343
374
|
const blocProxyCache = /* @__PURE__ */ new WeakMap();
|
|
344
375
|
const activeTrackerMap = /* @__PURE__ */ new WeakMap();
|
|
345
|
-
const MAX_GETTER_DEPTH =
|
|
376
|
+
const MAX_GETTER_DEPTH =
|
|
377
|
+
require_StateContainerRegistry.BLAC_DEFAULTS.MAX_GETTER_DEPTH;
|
|
346
378
|
/**
|
|
347
|
-
* @internal
|
|
348
|
-
*/
|
|
379
|
+
* @internal
|
|
380
|
+
*/
|
|
349
381
|
function getDescriptor(obj, prop) {
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* @internal
|
|
369
|
-
*/
|
|
382
|
+
const constructor = obj.constructor;
|
|
383
|
+
let constructorCache = descriptorCache.get(constructor);
|
|
384
|
+
if (constructorCache?.has(prop)) return constructorCache.get(prop);
|
|
385
|
+
let current = obj;
|
|
386
|
+
let descriptor;
|
|
387
|
+
while (current && current !== Object.prototype) {
|
|
388
|
+
descriptor = Object.getOwnPropertyDescriptor(current, prop);
|
|
389
|
+
if (descriptor) break;
|
|
390
|
+
current = Object.getPrototypeOf(current);
|
|
391
|
+
}
|
|
392
|
+
if (!constructorCache) {
|
|
393
|
+
constructorCache = /* @__PURE__ */ new Map();
|
|
394
|
+
descriptorCache.set(constructor, constructorCache);
|
|
395
|
+
}
|
|
396
|
+
constructorCache.set(prop, descriptor);
|
|
397
|
+
return descriptor;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* @internal
|
|
401
|
+
*/
|
|
370
402
|
function isGetter(obj, prop) {
|
|
371
|
-
|
|
403
|
+
return getDescriptor(obj, prop)?.get !== void 0;
|
|
372
404
|
}
|
|
373
405
|
/**
|
|
374
|
-
* @internal
|
|
375
|
-
*/
|
|
406
|
+
* @internal
|
|
407
|
+
*/
|
|
376
408
|
function createGetterState() {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
}
|
|
388
|
-
/**
|
|
389
|
-
* @internal
|
|
390
|
-
*/
|
|
409
|
+
return {
|
|
410
|
+
trackedValues: /* @__PURE__ */ new Map(),
|
|
411
|
+
currentlyAccessing: /* @__PURE__ */ new Set(),
|
|
412
|
+
trackedGetters: /* @__PURE__ */ new Set(),
|
|
413
|
+
isTracking: false,
|
|
414
|
+
renderCache: /* @__PURE__ */ new Map(),
|
|
415
|
+
cacheValid: false,
|
|
416
|
+
depth: 0,
|
|
417
|
+
visitedBlocs: /* @__PURE__ */ new Set(),
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* @internal
|
|
422
|
+
*/
|
|
391
423
|
function setActiveTracker(bloc, tracker) {
|
|
392
|
-
|
|
424
|
+
activeTrackerMap.set(bloc, tracker);
|
|
393
425
|
}
|
|
394
426
|
/**
|
|
395
|
-
* @internal
|
|
396
|
-
*/
|
|
427
|
+
* @internal
|
|
428
|
+
*/
|
|
397
429
|
function clearActiveTracker(bloc) {
|
|
398
|
-
|
|
430
|
+
activeTrackerMap.delete(bloc);
|
|
399
431
|
}
|
|
400
432
|
/**
|
|
401
|
-
* @internal
|
|
402
|
-
*/
|
|
433
|
+
* @internal
|
|
434
|
+
*/
|
|
403
435
|
function commitTrackedGetters(tracker) {
|
|
404
|
-
|
|
405
|
-
|
|
436
|
+
if (tracker.currentlyAccessing.size > 0)
|
|
437
|
+
tracker.trackedGetters = new Set(tracker.currentlyAccessing);
|
|
438
|
+
tracker.currentlyAccessing.clear();
|
|
406
439
|
}
|
|
407
440
|
/**
|
|
408
|
-
* Execute a tracked getter with depth/circular dependency checks and context management.
|
|
409
|
-
* @internal
|
|
410
|
-
*/
|
|
441
|
+
* Execute a tracked getter with depth/circular dependency checks and context management.
|
|
442
|
+
* @internal
|
|
443
|
+
*/
|
|
411
444
|
function executeTrackedGetter(target, prop, tracker) {
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
445
|
+
tracker.currentlyAccessing.add(prop);
|
|
446
|
+
if (tracker.cacheValid && tracker.renderCache.has(prop)) {
|
|
447
|
+
const cachedValue = tracker.renderCache.get(prop);
|
|
448
|
+
tracker.trackedValues.set(prop, cachedValue);
|
|
449
|
+
return cachedValue;
|
|
450
|
+
}
|
|
451
|
+
if (tracker.depth >= MAX_GETTER_DEPTH)
|
|
452
|
+
throw new Error(
|
|
453
|
+
`${require_StateContainerRegistry.BLAC_ERROR_PREFIX} Maximum getter depth (${MAX_GETTER_DEPTH}) exceeded. Possible circular dependency in getter "${String(prop)}" on ${target.constructor.name}.`,
|
|
454
|
+
);
|
|
455
|
+
if (tracker.visitedBlocs.has(target))
|
|
456
|
+
throw new Error(
|
|
457
|
+
`${require_StateContainerRegistry.BLAC_ERROR_PREFIX} Circular dependency detected: getter "${String(prop)}" on ${target.constructor.name}.`,
|
|
458
|
+
);
|
|
459
|
+
const prevDepth = tracker.depth;
|
|
460
|
+
const prevVisited = new Set(tracker.visitedBlocs);
|
|
461
|
+
tracker.depth++;
|
|
462
|
+
tracker.visitedBlocs.add(target);
|
|
463
|
+
try {
|
|
464
|
+
const descriptor = getDescriptor(target, prop);
|
|
465
|
+
if (!descriptor?.get) return target[prop];
|
|
466
|
+
const value = descriptor.get.call(target);
|
|
467
|
+
tracker.trackedValues.set(prop, value);
|
|
468
|
+
return value;
|
|
469
|
+
} catch (error) {
|
|
470
|
+
tracker.currentlyAccessing.delete(prop);
|
|
471
|
+
throw error;
|
|
472
|
+
} finally {
|
|
473
|
+
tracker.depth = prevDepth;
|
|
474
|
+
tracker.visitedBlocs = prevVisited;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* @internal
|
|
479
|
+
*/
|
|
441
480
|
function createBlocProxy(bloc) {
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
481
|
+
const cached = blocProxyCache.get(bloc);
|
|
482
|
+
if (cached) return cached;
|
|
483
|
+
const proxy = new Proxy(bloc, {
|
|
484
|
+
get(target, prop, receiver) {
|
|
485
|
+
const tracker = activeTrackerMap.get(target);
|
|
486
|
+
if (tracker?.isTracking && isGetter(target, prop))
|
|
487
|
+
return executeTrackedGetter(target, prop, tracker);
|
|
488
|
+
return Reflect.get(target, prop, receiver);
|
|
489
|
+
},
|
|
490
|
+
});
|
|
491
|
+
blocProxyCache.set(bloc, proxy);
|
|
492
|
+
return proxy;
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* @internal
|
|
496
|
+
*/
|
|
455
497
|
function hasGetterChanges(bloc, tracker) {
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
498
|
+
if (!tracker || tracker.trackedGetters.size === 0) return false;
|
|
499
|
+
tracker.renderCache.clear();
|
|
500
|
+
let hasAnyChange = false;
|
|
501
|
+
for (const prop of tracker.trackedGetters)
|
|
502
|
+
try {
|
|
503
|
+
const descriptor = getDescriptor(bloc, prop);
|
|
504
|
+
if (!descriptor?.get) continue;
|
|
505
|
+
const newValue = descriptor.get.call(bloc);
|
|
506
|
+
const oldValue = tracker.trackedValues.get(prop);
|
|
507
|
+
tracker.renderCache.set(prop, newValue);
|
|
508
|
+
tracker.trackedValues.set(prop, newValue);
|
|
509
|
+
if (!Object.is(newValue, oldValue)) hasAnyChange = true;
|
|
510
|
+
} catch (error) {
|
|
511
|
+
console.warn(
|
|
512
|
+
`${require_StateContainerRegistry.BLAC_ERROR_PREFIX} Getter "${String(prop)}" threw error during change detection. Stopping tracking for this getter.`,
|
|
513
|
+
error,
|
|
514
|
+
);
|
|
515
|
+
tracker.trackedGetters.delete(prop);
|
|
516
|
+
tracker.trackedValues.delete(prop);
|
|
517
|
+
tracker.cacheValid = false;
|
|
518
|
+
return true;
|
|
519
|
+
}
|
|
520
|
+
tracker.cacheValid = true;
|
|
521
|
+
return hasAnyChange;
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* @internal
|
|
525
|
+
*/
|
|
480
526
|
function invalidateRenderCache(tracker) {
|
|
481
|
-
|
|
527
|
+
tracker.cacheValid = false;
|
|
482
528
|
}
|
|
483
529
|
/**
|
|
484
|
-
* Create a new tracking proxy state.
|
|
485
|
-
*/
|
|
530
|
+
* Create a new tracking proxy state.
|
|
531
|
+
*/
|
|
486
532
|
function createState() {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
533
|
+
return {
|
|
534
|
+
dependencyState: createDependencyState(),
|
|
535
|
+
getterState: createGetterState(),
|
|
536
|
+
dependencies: /* @__PURE__ */ new Set(),
|
|
537
|
+
isTracking: false,
|
|
538
|
+
};
|
|
493
539
|
}
|
|
494
540
|
/**
|
|
495
|
-
* Start tracking on a tracking proxy.
|
|
496
|
-
*/
|
|
541
|
+
* Start tracking on a tracking proxy.
|
|
542
|
+
*/
|
|
497
543
|
function startTracking(tracker) {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
544
|
+
tracker.isTracking = true;
|
|
545
|
+
tracker.dependencies.clear();
|
|
546
|
+
tracker.getterState.isTracking = true;
|
|
547
|
+
startDependency(tracker.dependencyState);
|
|
502
548
|
}
|
|
503
549
|
/**
|
|
504
|
-
* Stop tracking and collect all dependencies.
|
|
505
|
-
*/
|
|
550
|
+
* Stop tracking and collect all dependencies.
|
|
551
|
+
*/
|
|
506
552
|
function stopTracking(tracker, bloc) {
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
553
|
+
tracker.isTracking = false;
|
|
554
|
+
tracker.getterState.isTracking = false;
|
|
555
|
+
capturePaths(tracker.dependencyState, bloc.state);
|
|
556
|
+
commitTrackedGetters(tracker.getterState);
|
|
557
|
+
return new Set(tracker.dependencies);
|
|
512
558
|
}
|
|
513
559
|
/**
|
|
514
|
-
* Check if tracked state or getters have changed.
|
|
515
|
-
*/
|
|
560
|
+
* Check if tracked state or getters have changed.
|
|
561
|
+
*/
|
|
516
562
|
function hasChanges(tracker, bloc) {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
563
|
+
invalidateRenderCache(tracker.getterState);
|
|
564
|
+
const stateChanged = hasDependencyChanges(
|
|
565
|
+
tracker.dependencyState,
|
|
566
|
+
bloc.state,
|
|
567
|
+
);
|
|
568
|
+
const getterChanged = hasGetterChanges(bloc, tracker.getterState);
|
|
569
|
+
return stateChanged || getterChanged;
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Create a tracking proxy for a bloc instance.
|
|
573
|
+
* Tracks both state property access and getter access.
|
|
574
|
+
*/
|
|
526
575
|
function createTrackingProxy(bloc, tracker) {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
576
|
+
tracker.dependencies.add(bloc);
|
|
577
|
+
const stateProxyCache = /* @__PURE__ */ new WeakMap();
|
|
578
|
+
return new Proxy(bloc, {
|
|
579
|
+
get(target, prop, receiver) {
|
|
580
|
+
if (prop === 'state') {
|
|
581
|
+
if (!tracker.isTracking) return target.state;
|
|
582
|
+
const rawState = target.state;
|
|
583
|
+
if (rawState === null || typeof rawState !== 'object') return rawState;
|
|
584
|
+
if (stateProxyCache.has(rawState)) return stateProxyCache.get(rawState);
|
|
585
|
+
const stateProxy = createDependencyProxy(
|
|
586
|
+
tracker.dependencyState,
|
|
587
|
+
rawState,
|
|
588
|
+
);
|
|
589
|
+
stateProxyCache.set(rawState, stateProxy);
|
|
590
|
+
return stateProxy;
|
|
591
|
+
}
|
|
592
|
+
if (typeof prop === 'symbol') return Reflect.get(target, prop, receiver);
|
|
593
|
+
const value = Reflect.get(target, prop, receiver);
|
|
594
|
+
if (typeof value === 'function') return value.bind(target);
|
|
595
|
+
if (tracker.isTracking && isGetter(target, prop))
|
|
596
|
+
return executeTrackedGetter(target, prop, tracker.getterState);
|
|
597
|
+
return value;
|
|
598
|
+
},
|
|
599
|
+
});
|
|
545
600
|
}
|
|
546
601
|
//#endregion
|
|
547
602
|
//#region src/tracking/dependency-manager.ts
|
|
548
603
|
/**
|
|
549
|
-
* Manages subscriptions to state container dependencies.
|
|
550
|
-
* Provides efficient sync mechanism to add/remove subscriptions
|
|
551
|
-
* as dependencies change between callback invocations.
|
|
552
|
-
*/
|
|
604
|
+
* Manages subscriptions to state container dependencies.
|
|
605
|
+
* Provides efficient sync mechanism to add/remove subscriptions
|
|
606
|
+
* as dependencies change between callback invocations.
|
|
607
|
+
*/
|
|
553
608
|
var DependencyManager = class {
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
609
|
+
constructor() {
|
|
610
|
+
this.subscriptions = /* @__PURE__ */ new Map();
|
|
611
|
+
this.currentDeps = /* @__PURE__ */ new Set();
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Sync subscriptions with a new set of dependencies.
|
|
615
|
+
* Adds subscriptions for new deps, removes subscriptions for stale deps.
|
|
616
|
+
*
|
|
617
|
+
* @param newDeps - The new set of dependencies to subscribe to
|
|
618
|
+
* @param onChange - Callback to invoke when any dependency changes
|
|
619
|
+
* @param exclude - Optional instance to exclude from subscriptions (e.g., primary bloc)
|
|
620
|
+
* @returns true if the dependency set changed, false if unchanged
|
|
621
|
+
*/
|
|
622
|
+
sync(newDeps, onChange, exclude) {
|
|
623
|
+
const filteredNewDeps = /* @__PURE__ */ new Set();
|
|
624
|
+
for (const dep of newDeps)
|
|
625
|
+
if (dep !== exclude && !dep.isDisposed) filteredNewDeps.add(dep);
|
|
626
|
+
if (this.areSetsEqual(this.currentDeps, filteredNewDeps)) return false;
|
|
627
|
+
for (const dep of this.currentDeps)
|
|
628
|
+
if (!filteredNewDeps.has(dep)) {
|
|
629
|
+
const unsub = this.subscriptions.get(dep);
|
|
630
|
+
if (unsub) {
|
|
631
|
+
unsub();
|
|
632
|
+
this.subscriptions.delete(dep);
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
for (const dep of filteredNewDeps)
|
|
636
|
+
if (!this.currentDeps.has(dep) && !this.subscriptions.has(dep)) {
|
|
637
|
+
const unsub = dep.subscribe(onChange);
|
|
638
|
+
this.subscriptions.set(dep, unsub);
|
|
639
|
+
}
|
|
640
|
+
this.currentDeps = filteredNewDeps;
|
|
641
|
+
return true;
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Add a single dependency subscription.
|
|
645
|
+
*/
|
|
646
|
+
add(dep, onChange) {
|
|
647
|
+
if (this.subscriptions.has(dep) || dep.isDisposed) return;
|
|
648
|
+
const unsub = dep.subscribe(onChange);
|
|
649
|
+
this.subscriptions.set(dep, unsub);
|
|
650
|
+
this.currentDeps.add(dep);
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* Check if a dependency is currently subscribed.
|
|
654
|
+
*/
|
|
655
|
+
has(dep) {
|
|
656
|
+
return this.currentDeps.has(dep);
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* Get the current set of dependencies.
|
|
660
|
+
*/
|
|
661
|
+
getDependencies() {
|
|
662
|
+
return new Set(this.currentDeps);
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* Clean up all active subscriptions.
|
|
666
|
+
*/
|
|
667
|
+
cleanup() {
|
|
668
|
+
for (const unsub of this.subscriptions.values()) unsub();
|
|
669
|
+
this.subscriptions.clear();
|
|
670
|
+
this.currentDeps.clear();
|
|
671
|
+
}
|
|
672
|
+
areSetsEqual(a, b) {
|
|
673
|
+
if (a.size !== b.size) return false;
|
|
674
|
+
for (const item of a) if (!b.has(item)) return false;
|
|
675
|
+
return true;
|
|
676
|
+
}
|
|
619
677
|
};
|
|
620
678
|
//#endregion
|
|
621
679
|
//#region src/tracking/resolve-dependencies.ts
|
|
622
680
|
/**
|
|
623
|
-
* Resolve all transitive dependencies of a bloc via BFS over `dependencies` maps.
|
|
624
|
-
* Uses cycle detection to avoid infinite loops.
|
|
625
|
-
* @internal
|
|
626
|
-
*/
|
|
681
|
+
* Resolve all transitive dependencies of a bloc via BFS over `dependencies` maps.
|
|
682
|
+
* Uses cycle detection to avoid infinite loops.
|
|
683
|
+
* @internal
|
|
684
|
+
*/
|
|
627
685
|
function resolveDependencies(bloc) {
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
686
|
+
const result = /* @__PURE__ */ new Set();
|
|
687
|
+
const visited = /* @__PURE__ */ new Set();
|
|
688
|
+
const queue = [bloc];
|
|
689
|
+
while (queue.length > 0) {
|
|
690
|
+
const current = queue.shift();
|
|
691
|
+
if (!current) break;
|
|
692
|
+
for (const [Type, key] of current.dependencies) {
|
|
693
|
+
const visitKey = `${Type.name}::${key}`;
|
|
694
|
+
if (visited.has(visitKey)) continue;
|
|
695
|
+
visited.add(visitKey);
|
|
696
|
+
const dep = require_config.getRegistry().ensure(Type, key);
|
|
697
|
+
result.add(dep);
|
|
698
|
+
if (dep.dependencies.size > 0) queue.push(dep);
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
result.delete(bloc);
|
|
702
|
+
return result;
|
|
645
703
|
}
|
|
646
704
|
//#endregion
|
|
647
|
-
Object.defineProperty(exports,
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
705
|
+
Object.defineProperty(exports, 'DependencyManager', {
|
|
706
|
+
enumerable: true,
|
|
707
|
+
get: function () {
|
|
708
|
+
return DependencyManager;
|
|
709
|
+
},
|
|
652
710
|
});
|
|
653
|
-
Object.defineProperty(exports,
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
711
|
+
Object.defineProperty(exports, 'capturePaths', {
|
|
712
|
+
enumerable: true,
|
|
713
|
+
get: function () {
|
|
714
|
+
return capturePaths;
|
|
715
|
+
},
|
|
658
716
|
});
|
|
659
|
-
Object.defineProperty(exports,
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
717
|
+
Object.defineProperty(exports, 'clearActiveTracker', {
|
|
718
|
+
enumerable: true,
|
|
719
|
+
get: function () {
|
|
720
|
+
return clearActiveTracker;
|
|
721
|
+
},
|
|
664
722
|
});
|
|
665
|
-
Object.defineProperty(exports,
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
723
|
+
Object.defineProperty(exports, 'commitTrackedGetters', {
|
|
724
|
+
enumerable: true,
|
|
725
|
+
get: function () {
|
|
726
|
+
return commitTrackedGetters;
|
|
727
|
+
},
|
|
670
728
|
});
|
|
671
|
-
Object.defineProperty(exports,
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
729
|
+
Object.defineProperty(exports, 'createBlocProxy', {
|
|
730
|
+
enumerable: true,
|
|
731
|
+
get: function () {
|
|
732
|
+
return createBlocProxy;
|
|
733
|
+
},
|
|
676
734
|
});
|
|
677
|
-
Object.defineProperty(exports,
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
735
|
+
Object.defineProperty(exports, 'createDependencyProxy', {
|
|
736
|
+
enumerable: true,
|
|
737
|
+
get: function () {
|
|
738
|
+
return createDependencyProxy;
|
|
739
|
+
},
|
|
682
740
|
});
|
|
683
|
-
Object.defineProperty(exports,
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
741
|
+
Object.defineProperty(exports, 'createDependencyState', {
|
|
742
|
+
enumerable: true,
|
|
743
|
+
get: function () {
|
|
744
|
+
return createDependencyState;
|
|
745
|
+
},
|
|
688
746
|
});
|
|
689
|
-
Object.defineProperty(exports,
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
747
|
+
Object.defineProperty(exports, 'createGetterState', {
|
|
748
|
+
enumerable: true,
|
|
749
|
+
get: function () {
|
|
750
|
+
return createGetterState;
|
|
751
|
+
},
|
|
694
752
|
});
|
|
695
|
-
Object.defineProperty(exports,
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
753
|
+
Object.defineProperty(exports, 'createState', {
|
|
754
|
+
enumerable: true,
|
|
755
|
+
get: function () {
|
|
756
|
+
return createState;
|
|
757
|
+
},
|
|
700
758
|
});
|
|
701
|
-
Object.defineProperty(exports,
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
759
|
+
Object.defineProperty(exports, 'createTrackingProxy', {
|
|
760
|
+
enumerable: true,
|
|
761
|
+
get: function () {
|
|
762
|
+
return createTrackingProxy;
|
|
763
|
+
},
|
|
706
764
|
});
|
|
707
|
-
Object.defineProperty(exports,
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
765
|
+
Object.defineProperty(exports, 'hasChanges', {
|
|
766
|
+
enumerable: true,
|
|
767
|
+
get: function () {
|
|
768
|
+
return hasChanges;
|
|
769
|
+
},
|
|
712
770
|
});
|
|
713
|
-
Object.defineProperty(exports,
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
771
|
+
Object.defineProperty(exports, 'hasDependencyChanges', {
|
|
772
|
+
enumerable: true,
|
|
773
|
+
get: function () {
|
|
774
|
+
return hasDependencyChanges;
|
|
775
|
+
},
|
|
718
776
|
});
|
|
719
|
-
Object.defineProperty(exports,
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
777
|
+
Object.defineProperty(exports, 'hasGetterChanges', {
|
|
778
|
+
enumerable: true,
|
|
779
|
+
get: function () {
|
|
780
|
+
return hasGetterChanges;
|
|
781
|
+
},
|
|
724
782
|
});
|
|
725
|
-
Object.defineProperty(exports,
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
783
|
+
Object.defineProperty(exports, 'hasTrackedData', {
|
|
784
|
+
enumerable: true,
|
|
785
|
+
get: function () {
|
|
786
|
+
return hasTrackedData;
|
|
787
|
+
},
|
|
730
788
|
});
|
|
731
|
-
Object.defineProperty(exports,
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
789
|
+
Object.defineProperty(exports, 'invalidateRenderCache', {
|
|
790
|
+
enumerable: true,
|
|
791
|
+
get: function () {
|
|
792
|
+
return invalidateRenderCache;
|
|
793
|
+
},
|
|
736
794
|
});
|
|
737
|
-
Object.defineProperty(exports,
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
795
|
+
Object.defineProperty(exports, 'resolveDependencies', {
|
|
796
|
+
enumerable: true,
|
|
797
|
+
get: function () {
|
|
798
|
+
return resolveDependencies;
|
|
799
|
+
},
|
|
742
800
|
});
|
|
743
|
-
Object.defineProperty(exports,
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
801
|
+
Object.defineProperty(exports, 'setActiveTracker', {
|
|
802
|
+
enumerable: true,
|
|
803
|
+
get: function () {
|
|
804
|
+
return setActiveTracker;
|
|
805
|
+
},
|
|
748
806
|
});
|
|
749
|
-
Object.defineProperty(exports,
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
807
|
+
Object.defineProperty(exports, 'shallowEqual', {
|
|
808
|
+
enumerable: true,
|
|
809
|
+
get: function () {
|
|
810
|
+
return shallowEqual;
|
|
811
|
+
},
|
|
754
812
|
});
|
|
755
|
-
Object.defineProperty(exports,
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
813
|
+
Object.defineProperty(exports, 'startDependency', {
|
|
814
|
+
enumerable: true,
|
|
815
|
+
get: function () {
|
|
816
|
+
return startDependency;
|
|
817
|
+
},
|
|
760
818
|
});
|
|
761
|
-
Object.defineProperty(exports,
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
819
|
+
Object.defineProperty(exports, 'startTracking', {
|
|
820
|
+
enumerable: true,
|
|
821
|
+
get: function () {
|
|
822
|
+
return startTracking;
|
|
823
|
+
},
|
|
766
824
|
});
|
|
767
|
-
Object.defineProperty(exports,
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
825
|
+
Object.defineProperty(exports, 'stopTracking', {
|
|
826
|
+
enumerable: true,
|
|
827
|
+
get: function () {
|
|
828
|
+
return stopTracking;
|
|
829
|
+
},
|
|
772
830
|
});
|
|
773
831
|
|
|
774
|
-
//# sourceMappingURL=resolve-dependencies-Dd8T6TLt.cjs.map
|
|
832
|
+
//# sourceMappingURL=resolve-dependencies-Dd8T6TLt.cjs.map
|