@blac/core 2.1.0 → 2.1.2
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 +19 -29
- package/dist/StateContainer-BUyuxKb3.cjs +667 -0
- package/dist/StateContainer-BUyuxKb3.cjs.map +1 -0
- package/dist/StateContainer-B_7UHc3I.js +632 -0
- package/dist/StateContainer-B_7UHc3I.js.map +1 -0
- package/dist/StateContainer-Bh2ipNYj.js +632 -0
- package/dist/StateContainer-Bh2ipNYj.js.map +1 -0
- package/dist/StateContainer-ClzwKnQZ.cjs +667 -0
- package/dist/StateContainer-ClzwKnQZ.cjs.map +1 -0
- package/dist/StateContainer-CwByTd5L.js +656 -0
- package/dist/StateContainer-CwByTd5L.js.map +1 -0
- package/dist/StateContainer-D2b10eR4.cjs +691 -0
- package/dist/StateContainer-D2b10eR4.cjs.map +1 -0
- package/dist/StateContainer-DiQATvZh.js +632 -0
- package/dist/StateContainer-DiQATvZh.js.map +1 -0
- package/dist/StateContainer-j16zciex.cjs +667 -0
- package/dist/StateContainer-j16zciex.cjs.map +1 -0
- package/dist/{StateContainerRegistry-CSNm2Ws5.cjs → StateContainerRegistry-141uHhtF.cjs} +300 -397
- package/dist/StateContainerRegistry-141uHhtF.cjs.map +1 -0
- package/dist/StateContainerRegistry-B6O6cfJd.cjs +903 -0
- package/dist/StateContainerRegistry-B6O6cfJd.cjs.map +1 -0
- package/dist/{StateContainerRegistry-DVIBTxGZ.js → StateContainerRegistry-BH7aOMWV.js} +299 -406
- package/dist/StateContainerRegistry-BH7aOMWV.js.map +1 -0
- package/dist/StateContainerRegistry-BX-DlHXO.js +747 -0
- package/dist/StateContainerRegistry-BX-DlHXO.js.map +1 -0
- package/dist/StateContainerRegistry-Bf5VuVjm.js +747 -0
- package/dist/StateContainerRegistry-Bf5VuVjm.js.map +1 -0
- package/dist/{StateContainerRegistry-Dj77cok9.js → StateContainerRegistry-BsH_s0pJ.js} +303 -413
- package/dist/StateContainerRegistry-BsH_s0pJ.js.map +1 -0
- package/dist/StateContainerRegistry-BvSRfhKv.cjs +866 -0
- package/dist/StateContainerRegistry-BvSRfhKv.cjs.map +1 -0
- package/dist/StateContainerRegistry-C8jxrcqk.cjs +866 -0
- package/dist/StateContainerRegistry-C8jxrcqk.cjs.map +1 -0
- package/dist/{StateContainerRegistry-lIwo-0m3.cjs → StateContainerRegistry-CBLeHObO.cjs} +326 -418
- package/dist/StateContainerRegistry-CBLeHObO.cjs.map +1 -0
- package/dist/StateContainerRegistry-CrTtRX5V.js +772 -0
- package/dist/StateContainerRegistry-CrTtRX5V.js.map +1 -0
- package/dist/StateContainerRegistry-DjQQtlCW.cjs +870 -0
- package/dist/StateContainerRegistry-DjQQtlCW.cjs.map +1 -0
- package/dist/{StateContainerRegistry-D9BIRjwv.cjs → StateContainerRegistry-MkT0W4C2.cjs} +322 -411
- package/dist/StateContainerRegistry-MkT0W4C2.cjs.map +1 -0
- package/dist/StateContainerRegistry-gQbEutkN.js +751 -0
- package/dist/StateContainerRegistry-gQbEutkN.js.map +1 -0
- package/dist/{StateContainerRegistry-CvBOhAT2.js → StateContainerRegistry-vWgsD-RP.js} +277 -392
- package/dist/StateContainerRegistry-vWgsD-RP.js.map +1 -0
- package/dist/config.d.cts +8 -8
- package/dist/config.d.ts +8 -8
- package/dist/constants.d.cts +20 -28
- package/dist/constants.d.ts +20 -28
- package/dist/core/Cubit.d.ts +14 -10
- package/dist/core/StateContainer.d.ts +89 -62
- package/dist/core/StateContainerRegistry.d.ts +89 -166
- package/dist/core/meta.d.ts +37 -47
- package/dist/core/onActivated.d.ts +10 -0
- package/dist/core/symbols.d.ts +26 -1
- package/dist/decorators/blac.d.ts +38 -28
- package/dist/{acquire-B1LYXSGj.js → ensure-Bi_yXk6f.js} +16 -5
- package/dist/ensure-Bi_yXk6f.js.map +1 -0
- package/dist/{ensure-r1C_7K6_.cjs → ensure-BjhbDW8Z.cjs} +203 -160
- package/dist/ensure-BjhbDW8Z.cjs.map +1 -0
- package/dist/{ensure-BSJHkUNX.js → ensure-BnVyd6s4.js} +297 -122
- package/dist/ensure-BnVyd6s4.js.map +1 -0
- package/dist/{acquire-BZIs6tpN.cjs → ensure-Bx41d-il.cjs} +23 -6
- package/dist/ensure-Bx41d-il.cjs.map +1 -0
- package/dist/{acquire-BRIJVJaA.js → ensure-C7UQ_mKM.js} +16 -5
- package/dist/ensure-C7UQ_mKM.js.map +1 -0
- package/dist/{ensure-B59ri8oo.js → ensure-CneMkpbI.js} +298 -122
- package/dist/ensure-CneMkpbI.js.map +1 -0
- package/dist/{acquire-BdsVZBSe.js → ensure-CwtQVTam.js} +16 -5
- package/dist/ensure-CwtQVTam.js.map +1 -0
- package/dist/{ensure-B2DYCbbI.cjs → ensure-D15vGnk5.cjs} +328 -123
- package/dist/ensure-D15vGnk5.cjs.map +1 -0
- package/dist/{acquire-B1Wuqla6.cjs → ensure-D1D4WjYf.cjs} +23 -6
- package/dist/ensure-D1D4WjYf.cjs.map +1 -0
- package/dist/{ensure-BKdq5xsY.cjs → ensure-D3w6YGp9.cjs} +329 -123
- package/dist/ensure-D3w6YGp9.cjs.map +1 -0
- package/dist/{acquire-BJ3xUEmh.cjs → ensure-DBnuRJ0R.cjs} +23 -6
- package/dist/ensure-DBnuRJ0R.cjs.map +1 -0
- package/dist/{acquire-B_p1fNEh.cjs → ensure-DShrbIYY.cjs} +23 -6
- package/dist/ensure-DShrbIYY.cjs.map +1 -0
- package/dist/{acquire-BP-ZfUH2.js → ensure-NTB9nnnj.js} +16 -5
- package/dist/ensure-NTB9nnnj.js.map +1 -0
- package/dist/{ensure-D3WWWwMo.cjs → ensure-ORVw-WRE.cjs} +194 -155
- package/dist/ensure-ORVw-WRE.cjs.map +1 -0
- package/dist/{ensure-BEeY5Ab7.js → ensure-dsqWhIuO.js} +182 -147
- package/dist/ensure-dsqWhIuO.js.map +1 -0
- package/dist/{ensure-11-asM1e.js → ensure-k-6q7O25.js} +173 -150
- package/dist/ensure-k-6q7O25.js.map +1 -0
- package/dist/index.cjs +257 -86
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -13
- package/dist/index.d.ts +6 -13
- package/dist/index.js +232 -52
- package/dist/index.js.map +1 -1
- package/dist/internal.cjs +10 -0
- package/dist/internal.d.cts +8 -0
- package/dist/internal.d.ts +8 -0
- package/dist/internal.js +3 -0
- package/dist/plugin/BlacPlugin.d.ts +25 -25
- package/dist/plugin/PluginManager.d.ts +46 -59
- package/dist/plugins.cjs +383 -3
- package/dist/plugins.cjs.map +1 -0
- package/dist/plugins.d.cts +10 -5
- package/dist/plugins.d.ts +10 -5
- package/dist/plugins.js +381 -1
- package/dist/plugins.js.map +1 -0
- package/dist/registry/acquire.d.ts +2 -2
- package/dist/registry/config.d.ts +12 -0
- package/dist/registry/index.d.ts +2 -2
- package/dist/registry/management.d.ts +5 -0
- package/dist/registry/queries.d.ts +15 -0
- package/dist/registry/release.d.ts +4 -20
- package/dist/testing.cjs +63 -38
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +14 -12
- package/dist/testing.d.ts +14 -12
- package/dist/testing.js +53 -29
- package/dist/testing.js.map +1 -1
- package/dist/types/branded.d.ts +6 -13
- package/dist/types/utilities.d.ts +40 -31
- package/dist/utils/idGenerator.d.ts +6 -13
- package/dist/utils/static-props.d.ts +28 -29
- package/dist/utils/structural-key.d.ts +0 -22
- package/dist/watch/index.d.ts +1 -2
- package/dist/watch/watch.d.ts +23 -3
- package/package.json +28 -54
- package/dist/StateContainerRegistry-4Ljd9EJx.js +0 -1018
- package/dist/StateContainerRegistry-4Ljd9EJx.js.map +0 -1
- package/dist/StateContainerRegistry-8zNFMAf7.js +0 -1067
- package/dist/StateContainerRegistry-8zNFMAf7.js.map +0 -1
- package/dist/StateContainerRegistry-B1GYx9Xo.js +0 -975
- package/dist/StateContainerRegistry-B1GYx9Xo.js.map +0 -1
- package/dist/StateContainerRegistry-B_ViBLvJ.js +0 -975
- package/dist/StateContainerRegistry-B_ViBLvJ.js.map +0 -1
- package/dist/StateContainerRegistry-Bx2ly-ba.cjs +0 -1162
- package/dist/StateContainerRegistry-Bx2ly-ba.cjs.map +0 -1
- package/dist/StateContainerRegistry-C0dCNlTF.js +0 -1005
- package/dist/StateContainerRegistry-C0dCNlTF.js.map +0 -1
- package/dist/StateContainerRegistry-C75QpeaO.cjs +0 -1260
- package/dist/StateContainerRegistry-C75QpeaO.cjs.map +0 -1
- package/dist/StateContainerRegistry-CEWpc1bj.cjs +0 -1113
- package/dist/StateContainerRegistry-CEWpc1bj.cjs.map +0 -1
- package/dist/StateContainerRegistry-CS18y4au.cjs +0 -1163
- package/dist/StateContainerRegistry-CS18y4au.cjs.map +0 -1
- package/dist/StateContainerRegistry-CSNm2Ws5.cjs.map +0 -1
- package/dist/StateContainerRegistry-CchRjnjX.cjs +0 -1094
- package/dist/StateContainerRegistry-CchRjnjX.cjs.map +0 -1
- package/dist/StateContainerRegistry-CvBOhAT2.js.map +0 -1
- package/dist/StateContainerRegistry-D8nu7Z0T.js +0 -1068
- package/dist/StateContainerRegistry-D8nu7Z0T.js.map +0 -1
- package/dist/StateContainerRegistry-D9BIRjwv.cjs.map +0 -1
- package/dist/StateContainerRegistry-DJQqLrli.cjs +0 -1046
- package/dist/StateContainerRegistry-DJQqLrli.cjs.map +0 -1
- package/dist/StateContainerRegistry-DL5Ai7wh.js +0 -1153
- package/dist/StateContainerRegistry-DL5Ai7wh.js.map +0 -1
- package/dist/StateContainerRegistry-DVIBTxGZ.js.map +0 -1
- package/dist/StateContainerRegistry-DWOzx7Gd.js +0 -1154
- package/dist/StateContainerRegistry-DWOzx7Gd.js.map +0 -1
- package/dist/StateContainerRegistry-Dj77cok9.js.map +0 -1
- package/dist/StateContainerRegistry-FWKzPfS-.cjs +0 -1046
- package/dist/StateContainerRegistry-FWKzPfS-.cjs.map +0 -1
- package/dist/StateContainerRegistry-G81GcCRm.cjs +0 -1261
- package/dist/StateContainerRegistry-G81GcCRm.cjs.map +0 -1
- package/dist/StateContainerRegistry-lIwo-0m3.cjs.map +0 -1
- package/dist/acquire-B1LYXSGj.js.map +0 -1
- package/dist/acquire-B1Wuqla6.cjs.map +0 -1
- package/dist/acquire-BJ3xUEmh.cjs.map +0 -1
- package/dist/acquire-BP-ZfUH2.js.map +0 -1
- package/dist/acquire-BRIJVJaA.js.map +0 -1
- package/dist/acquire-BZIs6tpN.cjs.map +0 -1
- package/dist/acquire-B_p1fNEh.cjs.map +0 -1
- package/dist/acquire-BdsVZBSe.js.map +0 -1
- package/dist/acquire-C3nOb3XR.cjs +0 -46
- package/dist/acquire-C3nOb3XR.cjs.map +0 -1
- package/dist/acquire-C4WAS13G.cjs +0 -46
- package/dist/acquire-C4WAS13G.cjs.map +0 -1
- package/dist/acquire-C7beGI55.cjs +0 -46
- package/dist/acquire-C7beGI55.cjs.map +0 -1
- package/dist/acquire-CE0uq0Dx.cjs +0 -46
- package/dist/acquire-CE0uq0Dx.cjs.map +0 -1
- package/dist/acquire-CU0u8BMn.js +0 -35
- package/dist/acquire-CU0u8BMn.js.map +0 -1
- package/dist/acquire-CbMz7gWs.cjs +0 -46
- package/dist/acquire-CbMz7gWs.cjs.map +0 -1
- package/dist/acquire-CkgLJ8WL.cjs +0 -46
- package/dist/acquire-CkgLJ8WL.cjs.map +0 -1
- package/dist/acquire-CwB083au.js +0 -35
- package/dist/acquire-CwB083au.js.map +0 -1
- package/dist/acquire-DHEOEVcj.cjs +0 -46
- package/dist/acquire-DHEOEVcj.cjs.map +0 -1
- package/dist/acquire-DTvfYJ0y.js +0 -35
- package/dist/acquire-DTvfYJ0y.js.map +0 -1
- package/dist/acquire-DXEQDZGr.js +0 -35
- package/dist/acquire-DXEQDZGr.js.map +0 -1
- package/dist/acquire-Dg-uXwjF.js +0 -35
- package/dist/acquire-Dg-uXwjF.js.map +0 -1
- package/dist/acquire-Don7499S.js +0 -35
- package/dist/acquire-Don7499S.js.map +0 -1
- package/dist/acquire-G8aB3GAx.js +0 -35
- package/dist/acquire-G8aB3GAx.js.map +0 -1
- package/dist/branded-BybA0_xw.cjs +0 -18
- package/dist/branded-BybA0_xw.cjs.map +0 -1
- package/dist/branded-DkbUzncc.js +0 -13
- package/dist/branded-DkbUzncc.js.map +0 -1
- package/dist/config-8pyOC5gv.js +0 -16
- package/dist/config-8pyOC5gv.js.map +0 -1
- package/dist/config-B1l8ZGlU.cjs +0 -32
- package/dist/config-B1l8ZGlU.cjs.map +0 -1
- package/dist/config-C1T6Jw7n.cjs +0 -32
- package/dist/config-C1T6Jw7n.cjs.map +0 -1
- package/dist/config-C7Ktkjh2.cjs +0 -32
- package/dist/config-C7Ktkjh2.cjs.map +0 -1
- package/dist/config-COT4Xkbc.js +0 -16
- package/dist/config-COT4Xkbc.js.map +0 -1
- package/dist/config-CzcoAvBo.js +0 -16
- package/dist/config-CzcoAvBo.js.map +0 -1
- package/dist/config-D2A8ZYRM.js +0 -16
- package/dist/config-D2A8ZYRM.js.map +0 -1
- package/dist/config-D34BkraU.cjs +0 -32
- package/dist/config-D34BkraU.cjs.map +0 -1
- package/dist/config-D6BoWWPv.js +0 -16
- package/dist/config-D6BoWWPv.js.map +0 -1
- package/dist/config-DOO82lbZ.js +0 -16
- package/dist/config-DOO82lbZ.js.map +0 -1
- package/dist/config-DVM_ESQt.js +0 -16
- package/dist/config-DVM_ESQt.js.map +0 -1
- package/dist/config-DVMnlHLv.cjs +0 -32
- package/dist/config-DVMnlHLv.cjs.map +0 -1
- package/dist/config-DWUq7zEQ.cjs +0 -32
- package/dist/config-DWUq7zEQ.cjs.map +0 -1
- package/dist/config-DXI3kzmA.js +0 -16
- package/dist/config-DXI3kzmA.js.map +0 -1
- package/dist/config-Dk1FxfXj.js +0 -16
- package/dist/config-Dk1FxfXj.js.map +0 -1
- package/dist/config-ZVy_yFZ3.js +0 -16
- package/dist/config-ZVy_yFZ3.js.map +0 -1
- package/dist/config-b2z51Y_C.cjs +0 -32
- package/dist/config-b2z51Y_C.cjs.map +0 -1
- package/dist/config-buwpT7l3.js +0 -16
- package/dist/config-buwpT7l3.js.map +0 -1
- package/dist/config-cwaTn5oy.cjs +0 -32
- package/dist/config-cwaTn5oy.cjs.map +0 -1
- package/dist/config-d9_U58ef.cjs +0 -32
- package/dist/config-d9_U58ef.cjs.map +0 -1
- package/dist/config-hWTayX76.cjs +0 -32
- package/dist/config-hWTayX76.cjs.map +0 -1
- package/dist/config-sCPKPYxZ.cjs +0 -32
- package/dist/config-sCPKPYxZ.cjs.map +0 -1
- package/dist/debug.cjs +0 -14
- package/dist/debug.d.cts +0 -34
- package/dist/debug.d.ts +0 -34
- package/dist/debug.js +0 -4
- package/dist/ensure-11-asM1e.js.map +0 -1
- package/dist/ensure-B1dEDsZV.cjs +0 -559
- package/dist/ensure-B1dEDsZV.cjs.map +0 -1
- package/dist/ensure-B2DYCbbI.cjs.map +0 -1
- package/dist/ensure-B59ri8oo.js.map +0 -1
- package/dist/ensure-B9oOqpOB.cjs +0 -558
- package/dist/ensure-B9oOqpOB.cjs.map +0 -1
- package/dist/ensure-BEeY5Ab7.js.map +0 -1
- package/dist/ensure-BKdq5xsY.cjs.map +0 -1
- package/dist/ensure-BSJHkUNX.js.map +0 -1
- package/dist/ensure-BfYnvAsI.js +0 -709
- package/dist/ensure-BfYnvAsI.js.map +0 -1
- package/dist/ensure-Bm91o37h.js +0 -536
- package/dist/ensure-Bm91o37h.js.map +0 -1
- package/dist/ensure-C1a8IFWy.js +0 -535
- package/dist/ensure-C1a8IFWy.js.map +0 -1
- package/dist/ensure-CLQEx0Nn.cjs +0 -528
- package/dist/ensure-CLQEx0Nn.cjs.map +0 -1
- package/dist/ensure-CPMiGvov.js +0 -493
- package/dist/ensure-CPMiGvov.js.map +0 -1
- package/dist/ensure-CQimeD0I.cjs +0 -559
- package/dist/ensure-CQimeD0I.cjs.map +0 -1
- package/dist/ensure-D3WWWwMo.cjs.map +0 -1
- package/dist/ensure-DEXSmA-N.js +0 -526
- package/dist/ensure-DEXSmA-N.js.map +0 -1
- package/dist/ensure-DTTTd2h8.js +0 -536
- package/dist/ensure-DTTTd2h8.js.map +0 -1
- package/dist/ensure-Dx86f80B.cjs +0 -567
- package/dist/ensure-Dx86f80B.cjs.map +0 -1
- package/dist/ensure-DzqGej43.js +0 -526
- package/dist/ensure-DzqGej43.js.map +0 -1
- package/dist/ensure-VuiNPccZ.cjs +0 -559
- package/dist/ensure-VuiNPccZ.cjs.map +0 -1
- package/dist/ensure-_Oh8XPm4.cjs +0 -732
- package/dist/ensure-_Oh8XPm4.cjs.map +0 -1
- package/dist/ensure-fsQMjaQL.cjs +0 -567
- package/dist/ensure-fsQMjaQL.cjs.map +0 -1
- package/dist/ensure-r1C_7K6_.cjs.map +0 -1
- package/dist/ensure-vxAGa2v3.js +0 -536
- package/dist/ensure-vxAGa2v3.js.map +0 -1
- package/dist/events.d.cts +0 -42
- package/dist/events.d.ts +0 -42
- package/dist/management-14vsHr4t.cjs +0 -85
- package/dist/management-14vsHr4t.cjs.map +0 -1
- package/dist/management-444tdCBG.js +0 -38
- package/dist/management-444tdCBG.js.map +0 -1
- package/dist/management-7jLjVHJd.js +0 -38
- package/dist/management-7jLjVHJd.js.map +0 -1
- package/dist/management-8x1OVMi6.js +0 -38
- package/dist/management-8x1OVMi6.js.map +0 -1
- package/dist/management-AFuqQEwz.js +0 -38
- package/dist/management-AFuqQEwz.js.map +0 -1
- package/dist/management-BZgsi29F.js +0 -38
- package/dist/management-BZgsi29F.js.map +0 -1
- package/dist/management-BodVLAfJ.cjs +0 -85
- package/dist/management-BodVLAfJ.cjs.map +0 -1
- package/dist/management-BqGBdL01.js +0 -38
- package/dist/management-BqGBdL01.js.map +0 -1
- package/dist/management-BvUAjril.js +0 -38
- package/dist/management-BvUAjril.js.map +0 -1
- package/dist/management-C-WGcwPD.js +0 -38
- package/dist/management-C-WGcwPD.js.map +0 -1
- package/dist/management-C2wv4vGS.cjs +0 -85
- package/dist/management-C2wv4vGS.cjs.map +0 -1
- package/dist/management-D2pjr38g.js +0 -38
- package/dist/management-D2pjr38g.js.map +0 -1
- package/dist/management-D5WsZoTV.js +0 -38
- package/dist/management-D5WsZoTV.js.map +0 -1
- package/dist/management-DAV9sN-k.cjs +0 -85
- package/dist/management-DAV9sN-k.cjs.map +0 -1
- package/dist/management-Df7Y2sF1.cjs +0 -85
- package/dist/management-Df7Y2sF1.cjs.map +0 -1
- package/dist/management-Dg2SxUb6.cjs +0 -85
- package/dist/management-Dg2SxUb6.cjs.map +0 -1
- package/dist/management-DwO0nBzL.cjs +0 -85
- package/dist/management-DwO0nBzL.cjs.map +0 -1
- package/dist/management-GcnNJjnm.cjs +0 -85
- package/dist/management-GcnNJjnm.cjs.map +0 -1
- package/dist/management-P_Vi_cvw.js +0 -38
- package/dist/management-P_Vi_cvw.js.map +0 -1
- package/dist/management-QWLpbXlW.cjs +0 -85
- package/dist/management-QWLpbXlW.cjs.map +0 -1
- package/dist/management-hkY13log.cjs +0 -85
- package/dist/management-hkY13log.cjs.map +0 -1
- package/dist/management-iE4x6IQY.cjs +0 -85
- package/dist/management-iE4x6IQY.cjs.map +0 -1
- package/dist/types.cjs +0 -3
- package/dist/types.d.cts +0 -8
- package/dist/types.d.ts +0 -8
- package/dist/types.js +0 -2
- package/dist/watch/observe.d.ts +0 -13
- package/dist/watch-B0pUfh-v.cjs +0 -119
- package/dist/watch-B0pUfh-v.cjs.map +0 -1
- package/dist/watch-B91opmva.cjs +0 -70
- package/dist/watch-B91opmva.cjs.map +0 -1
- package/dist/watch-BDiwCPmb.js +0 -108
- package/dist/watch-BDiwCPmb.js.map +0 -1
- package/dist/watch-BHfCtbn1.cjs +0 -119
- package/dist/watch-BHfCtbn1.cjs.map +0 -1
- package/dist/watch-BW7gYiDf.js +0 -108
- package/dist/watch-BW7gYiDf.js.map +0 -1
- package/dist/watch-BmC-Tyqg.js +0 -59
- package/dist/watch-BmC-Tyqg.js.map +0 -1
- package/dist/watch-Bx0y-Kcc.js +0 -108
- package/dist/watch-Bx0y-Kcc.js.map +0 -1
- package/dist/watch-CKWt788i.cjs +0 -70
- package/dist/watch-CKWt788i.cjs.map +0 -1
- package/dist/watch-CfrSSrRY.js +0 -59
- package/dist/watch-CfrSSrRY.js.map +0 -1
- package/dist/watch-Cnh3PtQA.cjs +0 -70
- package/dist/watch-Cnh3PtQA.cjs.map +0 -1
- package/dist/watch-D01MdwKy.js +0 -108
- package/dist/watch-D01MdwKy.js.map +0 -1
- package/dist/watch-D8hwbFU1.js +0 -59
- package/dist/watch-D8hwbFU1.js.map +0 -1
- package/dist/watch-DPVUwPUY.js +0 -59
- package/dist/watch-DPVUwPUY.js.map +0 -1
- package/dist/watch-DVmvZBMD.cjs +0 -70
- package/dist/watch-DVmvZBMD.cjs.map +0 -1
- package/dist/watch-DkDGmGAx.cjs +0 -119
- package/dist/watch-DkDGmGAx.cjs.map +0 -1
- package/dist/watch-DttHqefn.js +0 -108
- package/dist/watch-DttHqefn.js.map +0 -1
- package/dist/watch-DxdIZjpt.cjs +0 -119
- package/dist/watch-DxdIZjpt.cjs.map +0 -1
- package/dist/watch-DztcJuUy.cjs +0 -119
- package/dist/watch-DztcJuUy.cjs.map +0 -1
- package/dist/watch-IrR8G28N.js +0 -108
- package/dist/watch-IrR8G28N.js.map +0 -1
- package/dist/watch-aoNLQAXp.cjs +0 -119
- package/dist/watch-aoNLQAXp.cjs.map +0 -1
- package/dist/watch-entry.cjs +0 -4
- package/dist/watch-entry.d.cts +0 -24
- package/dist/watch-entry.d.ts +0 -24
- package/dist/watch-entry.js +0 -2
- package/dist/watch-hx0r92Zc.js +0 -108
- package/dist/watch-hx0r92Zc.js.map +0 -1
- package/dist/watch-lEco5Tbl.cjs +0 -119
- package/dist/watch-lEco5Tbl.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateContainerRegistry-gQbEutkN.js","names":[],"sources":["../src/config.ts","../src/constants.ts","../src/utils/static-props.ts","../src/utils/structural-key.ts","../src/core/symbols.ts","../src/core/StateContainerRegistry.ts"],"sourcesContent":["export type EqualityFn = <S>(prev: S, next: S) => boolean;\n\nexport interface BlacConfig {\n /**\n * Equality check used by `StateContainer.applyState` to skip emits when\n * `prev` and `next` are structurally equal. Default: `shallowEqualState`.\n *\n * Return `true` to skip the emit (states considered equal).\n */\n equality: EqualityFn;\n\n /**\n * Circuit breaker: maximum number of live instances allowed under a single\n * bloc constructor before `acquire` throws. Guards against runaway instance\n * creation — typically an unstable/args-derived key churning out instances\n * that are never disposed (a memory leak that eventually freezes the app).\n *\n * Default: `100000`. Set to `Infinity` (or any non-positive value) to disable.\n */\n maxInstancesPerType: number;\n\n /**\n * Circuit breaker: maximum number of distinct live references (consumers)\n * allowed on a single instance before `acquire` throws. Guards against the\n * other leak shape — consumer cleanup (e.g. `useBloc` unmount `release`)\n * never firing, so refs accumulate without bound on one instance.\n *\n * Default: `100000`. Set to `Infinity` (or any non-positive value) to disable.\n */\n maxRefsPerInstance: number;\n\n /**\n * Dev-only soft circuit breaker: if a single instance emits more than this\n * many *real* state changes within a rolling one-second window, log a single\n * `console.warn`. This is the \"frozen app\" smell — almost always a tight loop\n * (RAF/animation, or an effect that emits on every commit) pushing\n * high-frequency data through bloc state, which then saturates subscribers,\n * plugins (logging/devtools), and the main thread.\n *\n * Heuristic by nature — warns, never throws, since high-frequency state can\n * occasionally be legitimate. No-op in production. Default: `1000`. Set to\n * `Infinity` (or any non-positive value) to disable.\n */\n maxEmitsPerSecond: number;\n\n /**\n * How long an instance created speculatively during a render stays alive\n * without an owner before it is disposed. Covers renders that never commit\n * (SSR, discarded or suspended renders) while giving a time-sliced render\n * time to commit. Default: `5000`.\n */\n unownedSweepDelayMs: number;\n}\n\n/**\n * Default equality: shallow per-key `Object.is` comparison.\n * Falls through to `false` for primitives/null so reference-only state still\n * behaves correctly.\n */\nexport const shallowEqualState: EqualityFn = (prev, next) => {\n if (Object.is(prev, next)) return true;\n if (typeof prev !== 'object' || prev === null) return false;\n if (typeof next !== 'object' || next === null) return false;\n\n // `for...in` visits enumerable keys without allocating key arrays; state\n // objects are plain, so own and enumerable coincide.\n const p = prev as Record<string, unknown>;\n const n = next as Record<string, unknown>;\n let prevCount = 0;\n for (const key in p) {\n prevCount++;\n if (!Object.is(p[key], n[key])) return false;\n }\n let nextCount = 0;\n for (const _ in n) nextCount++;\n return prevCount === nextCount;\n};\n\nconst defaultConfig: BlacConfig = {\n equality: shallowEqualState,\n maxInstancesPerType: 100000,\n maxRefsPerInstance: 100000,\n maxEmitsPerSecond: 1000,\n unownedSweepDelayMs: 5000,\n};\n\nlet globalConfig: BlacConfig = { ...defaultConfig };\n\n/**\n * Configure global defaults for `@blac/core`.\n *\n * @example\n * ```ts\n * import { configureBlac, shallowEqualState } from '@blac/core';\n *\n * // Swap in a deep-equality check for all blocs\n * configureBlac({ equality: myDeepEqual });\n * ```\n */\nexport function configureBlac(config: Partial<BlacConfig>): void {\n globalConfig = { ...globalConfig, ...config };\n}\n\n/**\n * Get the current global configuration.\n * @internal\n */\nexport function getBlacConfig(): BlacConfig {\n return globalConfig;\n}\n\n/**\n * Reset configuration to defaults (useful for testing).\n * @internal\n */\nexport function resetBlacConfig(): void {\n globalConfig = { ...defaultConfig };\n}\n","/** Static property names used for feature flags and configuration on bloc classes. */\nexport const BLAC_STATIC_PROPS = {\n /** Mark a bloc to never be auto-disposed (kept alive permanently). */\n KEEP_ALIVE: 'keepAlive',\n\n /** Exclude a bloc from DevTools reporting (prevents infinite loops). */\n EXCLUDE_FROM_DEVTOOLS: '__excludeFromDevTools',\n\n /**\n * Per-class equality function used to short-circuit `emit`/`patch` when the\n * new state is structurally equal to the previous state. Falls back to the\n * global `configureBlac({ equality })` value when unset.\n */\n EQUALITY: '__equality',\n\n /**\n * Per-class key function: `static key = (args) => string`.\n * When set, the registry calls `Type.key(args)` to derive the instance key\n * instead of using a structural hash of `args`. Allows blocs to ignore\n * non-identity fields (e.g., `readonly` flags) while still keying by id.\n */\n KEY: 'key',\n\n /**\n * Explicit, minification-safe identity for a bloc class: `static blacName = '...'`.\n * When unset, identity falls back to `constructor.name`.\n */\n BLAC_NAME: 'blacName',\n} as const;\n\nexport const BLAC_ERROR_PREFIX = '[BlaC]' as const;\n\nexport function readNodeEnv(): string | undefined {\n try {\n return process.env.NODE_ENV;\n } catch {\n return undefined;\n }\n}\n\nconst nodeEnv = readNodeEnv();\n\n/**\n * True only when `process.env.NODE_ENV` is defined and not `'production'`.\n *\n * Dev-only checks (emit-rate breaker, deps collision scan, args-mismatch key)\n * cost real work per emit/acquire, so an environment that says nothing about\n * its mode — plain ESM in the browser, Deno, a bundle without a `process`\n * shim — is treated as production. Bundlers that define `process.env.NODE_ENV`\n * still constant-fold the read.\n */\nexport const IS_DEV: boolean =\n nodeEnv !== undefined && nodeEnv !== 'production';\n","import { BLAC_STATIC_PROPS } from '../constants';\nimport type { EqualityFn } from '../config';\nimport { StateContainerConstructor } from '../types/utilities';\n\n/**\n * Get a static property from a class constructor, walking the prototype\n * chain so subclasses inherit the value unless they define their own.\n */\nexport function getStaticProp<\n V,\n T extends StateContainerConstructor = StateContainerConstructor,\n>(Type: T, propName: string): V | undefined {\n return (Type as any)[propName];\n}\n\n/**\n * Get a static property declared directly on `Type`, ignoring the prototype\n * chain, so subclasses never inherit a base class's value.\n */\nexport function getOwnStaticProp<\n V,\n T extends StateContainerConstructor = StateContainerConstructor,\n>(Type: T, propName: string): V | undefined {\n return Object.hasOwn(Type, propName) ? (Type as any)[propName] : undefined;\n}\n\n/**\n * Whether a class is marked `keepAlive` (never auto-disposed at ref count 0).\n * Inherited: a subclass keeps a base class's `keepAlive` unless overridden.\n */\nexport function isKeepAliveClass<T extends StateContainerConstructor>(\n Type: T,\n): boolean {\n return getStaticProp<boolean>(Type, BLAC_STATIC_PROPS.KEEP_ALIVE) === true;\n}\n\n/**\n * Whether a class is excluded from DevTools (avoids DevTools tracking itself\n * into an infinite loop). Inherited unless overridden by a subclass.\n */\nexport function isExcludedFromDevTools<T extends StateContainerConstructor>(\n Type: T,\n): boolean {\n return (\n getStaticProp<boolean>(Type, BLAC_STATIC_PROPS.EXCLUDE_FROM_DEVTOOLS) ===\n true\n );\n}\n\n/**\n * Get the per-class equality function set via `@blac({ equality })`, if any.\n * Inherited: a subclass keeps a base class's equality fn unless overridden.\n */\nexport function getClassEquality<T extends StateContainerConstructor>(\n Type: T,\n): EqualityFn | undefined {\n const fn = getStaticProp<EqualityFn>(Type, BLAC_STATIC_PROPS.EQUALITY);\n return typeof fn === 'function' ? fn : undefined;\n}\n\n/**\n * Get a class's minification-safe identity name (`static blacName`), falling\n * back to `Type.name`. Own only: a subclass never inherits a base class's\n * explicit `blacName`, since that would collapse two distinct blocs onto one\n * identity.\n */\nexport function getBlacName<T extends StateContainerConstructor>(\n Type: T,\n): string {\n return (\n getOwnStaticProp<string>(Type, BLAC_STATIC_PROPS.BLAC_NAME) ?? Type.name\n );\n}\n\n/**\n * Get the per-class key function set via `@blac({ key })` or `static key = …`.\n * Own only: a subclass never inherits a base class's `key`, since a\n * different `Args` shape would derive the wrong instance key.\n */\nexport function getClassKey(\n Type: unknown,\n): ((args: any) => string) | undefined {\n const fn = getOwnStaticProp<(args: any) => string>(\n Type as StateContainerConstructor,\n BLAC_STATIC_PROPS.KEY,\n );\n return typeof fn === 'function' ? fn : undefined;\n}\n","import { IS_DEV } from '../constants';\n\nexport const DEFAULT_STRUCTURAL_KEY = 'default';\n\n/**\n * Produce a stable string key for serializable args.\n * - `undefined` / `void` args → `'default'` sentinel (no-args blocs stay on the default key).\n * - Object keys are sorted for order-independence.\n * - Arrays keep their insertion order.\n * - Functions throw — they must be passed via `deps`, not `args`.\n * - JSON semantics otherwise: `{ a: undefined }` equals `{}`, and `NaN` and\n * `Infinity` serialize as `null`.\n * - Object args are memoized by identity; callers on hot paths (`resolveKey`,\n * `depend`) re-resolve the same args object on every call. Mutating an args\n * object after first use therefore keeps its old key.\n */\nconst keyCache = new WeakMap<object, string>();\n\nexport function structuralKey(args: unknown): string {\n if (args === undefined || args === null) {\n return DEFAULT_STRUCTURAL_KEY;\n }\n\n if (typeof args === 'object') {\n const cached = keyCache.get(args);\n if (cached !== undefined) return cached;\n const key = serialize(args);\n keyCache.set(args, key);\n return key;\n }\n\n return serialize(args);\n}\n\nfunction serialize(args: unknown): string {\n return JSON.stringify(args, function (_k, v) {\n if (typeof v === 'function') {\n throw new Error(\n `[blac] args must be serializable; put refs/callbacks in \\`deps\\` ` +\n `(found a function at key \"${_k || '(root)'}\")`,\n );\n }\n if (v && typeof v === 'object' && !Array.isArray(v)) {\n if (IS_DEV && !isPlainObject(v)) {\n throw new Error(\n `[blac] args must be plain data; put refs/instances in \\`deps\\` ` +\n `(found a ${v.constructor?.name ?? 'non-plain object'} at key \"${_k || '(root)'}\")`,\n );\n }\n return Object.keys(v)\n .sort()\n .reduce(\n (o, k) => {\n (o as any)[k] = (v as any)[k];\n return o;\n },\n {} as Record<string, unknown>,\n );\n }\n return v;\n });\n}\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n","/**\n * @internal Apply one owner's (consumer's) deps slice to an instance.\n * Called by framework adapters (e.g. `@blac/react` useBloc) — not public API.\n */\nexport const APPLY_DEPS = Symbol('blac.applyDeps');\n\n/**\n * @internal Withdraw one owner's entire deps slice (consumer unmounted).\n * Called by framework adapters — not public API.\n */\nexport const REMOVE_DEPS_OWNER = Symbol('blac.removeDepsOwner');\n\n/**\n * @internal Subscribe to this specific instance's own disposal, bypassing\n * the global registry `'disposed'` event. Called by `watch()` — not public\n * API.\n */\nexport const ON_DISPOSE = Symbol('blac.onDispose');\n\n/**\n * @internal Symbol-keyed configuration entry point on `StateContainer`.\n * Writes the instance's identity fields (`_name`/`_debug`/`_instanceId`),\n * resolves per-class equality, emits the registry `created` event, and runs\n * `init()` once.\n *\n * Framework-only — the registry (`StateContainerRegistry.ensure`) and testing\n * helpers are the sole callers, mirroring the `APPLY_DEPS` precedent.\n */\nexport const INIT_CONFIG = Symbol('blac.initConfig');\n\n/**\n * @internal Run `fn` with `state` temporarily reporting a render's tracking\n * proxy, so getters record the paths they read. Called by `@blac/react`'s\n * `buildTrackedProxy` — not public API. Getters run with `this` bound to the\n * real instance, so ES `#private` works in user blocs.\n */\nexport const WITH_TRACKED_STATE = Symbol('blac.withTrackedState');\n\n/**\n * @internal Drive the activation lifecycle from the registry's 0↔1 ownership\n * transition. Owns the per-instance AbortController so `onActivate`'s signal\n * aborts on the matching deactivation and on dispose.\n *\n * Framework-only — `StateContainerRegistry` is the sole caller.\n */\nexport const SET_ACTIVE = Symbol('blac.setActive');\n\n/**\n * @internal Insert an instance entry directly, bypassing acquire/release.\n * Called by the testing helpers — not public API.\n */\nexport const INSERT_INSTANCE = Symbol('blac.insertInstance');\n","import type {\n HydrationStatus,\n StateContainer,\n StateContainerConfig,\n} from './StateContainer';\nimport { BLAC_ERROR_PREFIX, IS_DEV } from '../constants';\nimport { getBlacConfig } from '../config';\nimport {\n isKeepAliveClass,\n getClassKey,\n getBlacName,\n} from '../utils/static-props';\nimport { structuralKey, DEFAULT_STRUCTURAL_KEY } from '../utils/structural-key';\nimport {\n InstanceReadonlyState,\n StateContainerConstructor,\n} from '../types/utilities';\nimport { INIT_CONFIG, INSERT_INSTANCE, SET_ACTIVE } from './symbols';\n\n/**\n * Entry in the instance registry.\n * @typeParam T - Instance type\n * @internal\n */\nexport interface InstanceEntry<T = any> {\n instance: T;\n key: string;\n /** refId to acquire count. */\n refs: Map<string, number>;\n /** Args from creation, for the dev arg-mismatch warning. */\n args?: unknown;\n argsKey?: string;\n /** `depend()`-owners holding this instance. */\n dependents?: Set<StateContainer<any, any, any>>;\n sweepTimer?: ReturnType<typeof setTimeout>;\n}\n\nconst EMPTY_INSTANCES_MAP: ReadonlyMap<string, InstanceEntry> = new Map();\n\n/**\n * Lifecycle events emitted by the registry\n * @public\n */\nexport type LifecycleEvent =\n | 'created'\n | 'stateChanged'\n | 'disposed'\n | 'refAcquired'\n | 'refReleased'\n | 'depsChanged'\n | 'hydrationChanged'\n | 'activated'\n | 'deactivated';\n\n/**\n * Listener function type for each lifecycle event\n * @typeParam E - The lifecycle event type\n * @public\n */\nexport type LifecycleListener<E extends LifecycleEvent> = E extends 'created'\n ? (container: StateContainer<any, any, any>) => void\n : E extends 'stateChanged'\n ? (\n container: StateContainer<any, any, any>,\n previousState: Readonly<Record<string, unknown>>,\n currentState: Readonly<Record<string, unknown>>,\n ) => void\n : E extends 'disposed'\n ? (container: StateContainer<any, any, any>) => void\n : E extends 'refAcquired'\n ? (container: StateContainer<any, any, any>, refId: string) => void\n : E extends 'refReleased'\n ? (container: StateContainer<any, any, any>, refId: string) => void\n : E extends 'depsChanged'\n ? (\n container: StateContainer<any, any, any>,\n previousDeps: Readonly<Record<string, unknown>>,\n currentDeps: Readonly<Record<string, unknown>>,\n ) => void\n : E extends 'hydrationChanged'\n ? (\n container: StateContainer<any, any, any>,\n status: HydrationStatus,\n previousStatus: HydrationStatus,\n ) => void\n : E extends 'activated'\n ? (\n container: StateContainer<any, any, any>,\n signal: AbortSignal,\n ) => void\n : E extends 'deactivated'\n ? (container: StateContainer<any, any, any>) => void\n : never;\n\n/**\n * Owns StateContainer instances: creation, ref tracking, disposal and\n * lifecycle events.\n *\n * @example\n * ```ts\n * const registry = new StateContainerRegistry();\n * const instance = registry.acquire(MyBloc); // ownership, must release\n * const other = registry.ensure(OtherBloc); // no ownership, bloc-to-bloc\n * registry.on('stateChanged', (container, prev, next) => {\n * console.log('State changed:', prev, '->', next);\n * });\n * ```\n *\n * `stateChanged` fires once per emit (microtask-deferred, not coalesced).\n * Plugins' `onStateChange` fires once per channel flush with coalesced\n * `prev`/`next` and a `PathSet`.\n */\nexport class StateContainerRegistry {\n private readonly instancesByConstructor = new WeakMap<\n StateContainerConstructor,\n Map<string, InstanceEntry>\n >();\n\n private readonly types = new Set<StateContainerConstructor>();\n\n /**\n * `depend()`-owner to the (Type, key) entries it resolved, per key because\n * one handle resolves a different key per `args`.\n */\n private readonly _dependentEdges = new WeakMap<\n StateContainer<any, any, any>,\n Map<StateContainerConstructor, Set<string>>\n >();\n\n private readonly _entryByInstance = new WeakMap<\n StateContainer<any, any, any>,\n InstanceEntry\n >();\n\n /**\n * Only for `PluginContext.getRefIds`: ids can collide across same-named\n * classes, so nothing else may rely on it.\n */\n private readonly _entryById = new Map<string, InstanceEntry>();\n\n private readonly listeners = new Map<\n LifecycleEvent,\n Set<(...args: any[]) => void>\n >();\n\n get hasStateChangedListeners(): boolean {\n return (this.listeners.get('stateChanged')?.size ?? 0) > 0;\n }\n private _pendingStateChanges: Array<\n [StateContainer<any, any, any>, any, any]\n > | null = null;\n\n private _autoRefIdCounter = 0;\n\n constructor() {\n // Also covers a direct `dispose()` that bypasses `release()`.\n this.on('disposed', (container) => this._handleDisposed(container));\n }\n\n /** Prune a tracked instance's entry and release its `depend()` edges. */\n private _handleDisposed(container: StateContainer<any, any, any>): void {\n const Type = container.constructor as StateContainerConstructor;\n const found = this._pruneEntry(Type, container);\n if (!found) return;\n const edges = this._dependentEdges.get(container);\n if (!edges) return;\n this._dependentEdges.delete(container);\n for (const [DepType, keys] of edges) {\n for (const depKey of keys) {\n this._releaseDependent(DepType, depKey, container);\n }\n }\n }\n\n /** The single dispose decision: no refs, no dependents, not keepAlive. */\n private _isUnowned(\n Type: StateContainerConstructor,\n entry: InstanceEntry,\n ): boolean {\n return this._hasNoOwners(entry) && !isKeepAliveClass(Type);\n }\n\n /** Ignores keepAlive: a keepAlive instance still deactivates. */\n private _hasNoOwners(entry: InstanceEntry): boolean {\n return (\n entry.refs.size === 0 &&\n (entry.dependents === undefined || entry.dependents.size === 0)\n );\n }\n\n /**\n * Idempotent, so every acquire/release path calls it. The events fire after\n * the instance's own `onActivate`/`onDeactivate`.\n */\n private _syncActivation(entry: InstanceEntry): void {\n const transition = entry.instance[SET_ACTIVE](!this._hasNoOwners(entry));\n if (transition === 'none') return;\n if (transition === 'deactivated') {\n this.emit('deactivated', entry.instance);\n } else {\n this.emit('activated', entry.instance, transition.signal);\n }\n }\n\n private _recordDependentEdge(\n dependent: StateContainer<any, any, any>,\n Type: StateContainerConstructor,\n key: string,\n ): void {\n let byType = this._dependentEdges.get(dependent);\n if (!byType) this._dependentEdges.set(dependent, (byType = new Map()));\n let keys = byType.get(Type);\n if (!keys) byType.set(Type, (keys = new Set()));\n keys.add(key);\n }\n\n /** @returns true if this registry tracked `container`. */\n private _pruneEntry(\n Type: StateContainerConstructor,\n container: StateContainer<any, any, any>,\n ): boolean {\n const entry = this._entryByInstance.get(container);\n if (entry === undefined) return false;\n this._entryByInstance.delete(container);\n const instances = this.instancesByConstructor.get(Type);\n if (instances?.get(entry.key) === entry) instances.delete(entry.key);\n const id = container.$blac.id;\n if (this._entryById.get(id) === entry) this._entryById.delete(id);\n return true;\n }\n\n private _indexEntry(entry: InstanceEntry): void {\n this._entryByInstance.set(entry.instance, entry);\n this._entryById.set(entry.instance.$blac.id, entry);\n }\n\n /** Disposing here recurses through `disposed`, unwinding dep chains. */\n private _releaseDependent(\n Type: StateContainerConstructor,\n key: string,\n dependent: StateContainer<any, any, any>,\n ): void {\n const instances = this.instancesByConstructor.get(Type);\n const entry = instances?.get(key);\n if (!entry) return;\n entry.dependents?.delete(dependent);\n if (this._isUnowned(Type, entry)) {\n if (!entry.instance.$blac.disposed) entry.instance.dispose();\n return;\n }\n this._syncActivation(entry);\n }\n\n /**\n * Register a StateContainer class with configuration\n * @param constructor - The StateContainer class constructor\n * @throws Error if type is already registered\n */\n register<T extends StateContainerConstructor>(constructor: T): void {\n if (this.types.has(constructor)) {\n throw new Error(\n `${BLAC_ERROR_PREFIX} Type \"${getBlacName(constructor)}\" is already registered`,\n );\n }\n this.types.add(constructor);\n }\n\n private ensureInstancesMap<T extends StateContainerConstructor>(\n Type: T,\n ): Map<string, InstanceEntry> {\n let instances = this.instancesByConstructor.get(Type);\n if (!instances) {\n instances = new Map<string, InstanceEntry>();\n this.instancesByConstructor.set(Type, instances);\n }\n return instances;\n }\n\n /**\n * Get the instances Map for a specific class (public API for stats/debugging)\n */\n getInstancesMap<T extends StateContainerConstructor>(\n Type: T,\n ): ReadonlyMap<string, InstanceEntry> {\n return this.instancesByConstructor.get(Type) || EMPTY_INSTANCES_MAP;\n }\n\n /**\n * Insert an entry, replacing the one at `instanceKey`. The instance is not\n * configured here.\n *\n * @internal Used by testing helpers only.\n */\n [INSERT_INSTANCE]<T extends StateContainerConstructor>(\n Type: T,\n instanceKey: string,\n instance: InstanceType<T>,\n refs: Map<string, number> = new Map(),\n ): void {\n const instances = this.ensureInstancesMap(Type);\n const existingEntry = instances.get(instanceKey);\n if (\n existingEntry &&\n existingEntry.instance !== instance &&\n !existingEntry.instance.$blac.disposed\n ) {\n existingEntry.instance.dispose();\n }\n const entry: InstanceEntry = { instance, key: instanceKey, refs };\n instances.set(instanceKey, entry);\n this._indexEntry(entry);\n this.types.add(Type);\n }\n\n /**\n * The single source of keying, so `acquire` and `release` agree: explicit\n * key \\> `static key(args)` \\> structural hash of args \\> default key.\n *\n * @param Type - The StateContainer class constructor\n * @param instanceKey - Explicit key, or undefined to derive from args\n * @param args - Construction args used for structural/`static key` derivation\n */\n resolveKey<T extends StateContainerConstructor = StateContainerConstructor>(\n Type: T,\n instanceKey: string | undefined,\n args: unknown,\n ): string {\n if (instanceKey !== undefined) {\n return instanceKey;\n }\n const keyFn = getClassKey(Type);\n if (keyFn) {\n return keyFn(args);\n }\n if (args !== undefined) {\n return structuralKey(args);\n }\n return DEFAULT_STRUCTURAL_KEY;\n }\n\n private assertInstanceLimit(\n Type: StateContainerConstructor,\n currentCount: number,\n ): void {\n const limit = getBlacConfig().maxInstancesPerType;\n if (limit > 0 && currentCount >= limit) {\n throw new Error(\n `${BLAC_ERROR_PREFIX} ${getBlacName(Type)} exceeded the maximum of ${limit} live instances. ` +\n `This usually means the instance key is unstable — e.g. \\`args\\` that ` +\n `change identity every render, or a missing \\`static key\\` — so a new ` +\n `instance is created and never disposed (memory leak). Stabilize the key, ` +\n `add a \\`static key(args)\\`, or raise \\`configureBlac({ maxInstancesPerType })\\`.`,\n );\n }\n }\n\n private assertRefLimit(\n Type: StateContainerConstructor,\n resolvedKey: string,\n refCount: number,\n ): void {\n const limit = getBlacConfig().maxRefsPerInstance;\n if (limit > 0 && refCount > limit) {\n throw new Error(\n `${BLAC_ERROR_PREFIX} ${getBlacName(Type)} instance \"${resolvedKey}\" exceeded the maximum of ${limit} live references. ` +\n `This usually means references are acquired without a matching release ` +\n `(e.g. a consumer that never unmounts/cleans up), leaking refs that keep ` +\n `the instance alive forever. Ensure every acquire is paired with a release, ` +\n `or raise \\`configureBlac({ maxRefsPerInstance })\\`.`,\n );\n }\n }\n\n /**\n * Get or create an instance and add a ref; `release()` it with the same\n * refId.\n *\n * @internal Internal key tier. Public callers use the args-based `acquire`\n * wrapper; `useBloc` and `watch` address a pre-resolved key here.\n * @param Type - The StateContainer class constructor\n * @param instanceKey - Pre-resolved instance key (defaults to 'default')\n * @param options - `canCreate` and `countRef` default to true; `refId` is\n * auto-generated when omitted; `dependent` is the `depend()`-owner, whose\n * edge is released on its disposal; `sweepIfUnowned` is for speculative\n * creates (see `_scheduleSweep`).\n */\n acquire<T extends StateContainerConstructor = StateContainerConstructor>(\n Type: T,\n instanceKey?: string,\n options: {\n canCreate?: boolean;\n countRef?: boolean;\n refId?: string;\n args?: unknown;\n dependent?: StateContainer<any, any, any>;\n sweepIfUnowned?: boolean;\n } = {},\n ): InstanceType<T> {\n const { canCreate = true, countRef = true } = options;\n const args = options.args;\n\n const resolvedKey = this.resolveKey(Type, instanceKey, args);\n\n const instances = this.ensureInstancesMap(Type);\n let entry = instances.get(resolvedKey);\n\n if (entry?.instance.$blac.disposed) {\n instances.delete(resolvedKey);\n entry = undefined;\n }\n\n if (entry) {\n if (IS_DEV && args !== undefined && entry.args !== undefined) {\n const incomingKey = structuralKey(args);\n const storedKey = (entry.argsKey ??= structuralKey(entry.args));\n if (incomingKey !== storedKey) {\n console.warn(\n `${BLAC_ERROR_PREFIX} ${getBlacName(Type)} instance key \"${resolvedKey}\" was acquired with different args. ` +\n `Existing args: ${storedKey}, new args: ${incomingKey}. ` +\n `The existing instance will be reused. If distinct args should produce distinct instances, ` +\n `either remove the explicit instanceKey or provide a \\`static key\\` function that reflects the difference.`,\n );\n }\n }\n\n if (countRef) {\n const refId = options.refId ?? `_auto_${this._autoRefIdCounter++}`;\n const count = entry.refs.get(refId) ?? 0;\n if (count === 0) {\n this.assertRefLimit(Type, resolvedKey, entry.refs.size + 1);\n }\n entry.refs.set(refId, count + 1);\n this.emit('refAcquired', entry.instance, refId);\n }\n\n if (options.dependent) {\n (entry.dependents ??= new Set()).add(options.dependent);\n this._recordDependentEdge(options.dependent, Type, resolvedKey);\n }\n\n this._syncActivation(entry);\n\n if (!options.sweepIfUnowned) {\n clearTimeout(entry.sweepTimer);\n entry.sweepTimer = undefined;\n } else if (entry.sweepTimer !== undefined) {\n this._scheduleSweep(Type, entry);\n }\n\n return entry.instance;\n }\n\n if (!canCreate) {\n throw new Error(\n `${BLAC_ERROR_PREFIX} ${getBlacName(Type)} instance \"${resolvedKey}\" not found and creation is disabled.`,\n );\n }\n\n this.assertInstanceLimit(Type, instances.size);\n\n const config: StateContainerConfig = {\n instanceId: resolvedKey,\n args,\n registry: this,\n };\n const instance = new Type() as InstanceType<T>;\n instance[INIT_CONFIG](config);\n const initialRefs = new Map<string, number>();\n let initialRefId: string | undefined;\n if (countRef) {\n initialRefId = options.refId ?? `_auto_${this._autoRefIdCounter++}`;\n initialRefs.set(initialRefId, 1);\n }\n const newEntry: InstanceEntry = {\n instance,\n key: resolvedKey,\n refs: initialRefs,\n args,\n };\n if (options.dependent) {\n (newEntry.dependents ??= new Set()).add(options.dependent);\n this._recordDependentEdge(options.dependent, Type, resolvedKey);\n }\n instances.set(resolvedKey, newEntry);\n this._indexEntry(newEntry);\n\n this.types.add(Type);\n\n if (initialRefId) {\n this.emit('refAcquired', instance, initialRefId);\n }\n\n this._syncActivation(newEntry);\n\n if (options.sweepIfUnowned && this._hasNoOwners(newEntry)) {\n this._scheduleSweep(Type, newEntry);\n }\n\n return instance;\n }\n\n /**\n * Dispose a speculative create (a render that never commits, SSR) that is\n * still unowned after `unownedSweepDelayMs`. The delay must outlast a\n * time-sliced render; a repeat speculative acquire restarts it. Opt-in, so a\n * bare `ensure()` stays usable across an `await`.\n */\n private _scheduleSweep(\n Type: StateContainerConstructor,\n entry: InstanceEntry,\n ): void {\n clearTimeout(entry.sweepTimer);\n entry.sweepTimer = setTimeout(() => {\n entry.sweepTimer = undefined;\n const instances = this.instancesByConstructor.get(Type);\n if (instances?.get(entry.key) !== entry) return;\n if (entry.instance.$blac.disposed) return;\n if (!this._isUnowned(Type, entry)) return;\n entry.instance.dispose();\n instances.delete(entry.key);\n }, getBlacConfig().unownedSweepDelayMs);\n (entry.sweepTimer as { unref?: () => void }).unref?.();\n }\n\n /**\n * Get an existing instance without adding a ref.\n *\n * @internal Internal key tier; public callers use the args-based `borrow`.\n * @param Type - The StateContainer class constructor\n * @param instanceKey - Pre-resolved instance key (defaults to 'default')\n * @returns The state container instance\n * @throws Error if instance doesn't exist\n */\n borrow<T extends StateContainerConstructor = StateContainerConstructor>(\n Type: T,\n instanceKey: string = DEFAULT_STRUCTURAL_KEY,\n ): InstanceType<T> {\n return this.acquire(Type, instanceKey, {\n canCreate: false,\n countRef: false,\n });\n }\n\n /**\n * Like `borrow`, but returns the error instead of throwing.\n *\n * @internal Internal key tier; public callers use the args-based `borrowSafe`.\n * @param Type - The StateContainer class constructor\n * @param instanceKey - Pre-resolved instance key (defaults to 'default')\n * @returns Discriminated union with either the instance or an error\n */\n borrowSafe<T extends StateContainerConstructor = StateContainerConstructor>(\n Type: T,\n instanceKey: string = DEFAULT_STRUCTURAL_KEY,\n ):\n | { error: Error; instance: null }\n | { error: null; instance: InstanceType<T> } {\n try {\n const instance = this.borrow(Type, instanceKey);\n return { error: null, instance };\n } catch (error: any) {\n return { error, instance: null };\n }\n }\n\n /**\n * Get or create an instance without adding a ref.\n *\n * @internal Internal key tier; public callers use the args-based `ensure`.\n * @param Type - The StateContainer class constructor\n * @param instanceKey - Pre-resolved instance key, or undefined to derive from `args`\n * (`static key(args)` / structural hash), matching `acquire`.\n * @param args - Construction args; used for keying when no explicit key is given\n * @returns The state container instance\n */\n ensure<T extends StateContainerConstructor = StateContainerConstructor>(\n Type: T,\n instanceKey?: string,\n args?: unknown,\n ): InstanceType<T> {\n return this.acquire(Type, instanceKey, {\n canCreate: true,\n countRef: false,\n args,\n });\n }\n\n /**\n * Remove a ref and dispose the instance once nothing owns it. Releasing a\n * ref that isn't held is a no-op.\n *\n * @internal Internal key tier; public callers use the args-based `release`.\n * @param Type - The StateContainer class constructor\n * @param instanceKey - Pre-resolved instance key (defaults to 'default')\n * @param forceDispose - Force immediate disposal regardless of refs\n * @param refId - The specific ref to remove; removes one arbitrary ref if omitted\n */\n release<T extends StateContainerConstructor>(\n Type: T,\n instanceKey: string = DEFAULT_STRUCTURAL_KEY,\n forceDispose = false,\n refId?: string,\n ): void {\n const instances = this.instancesByConstructor.get(Type);\n const entry = instances?.get(instanceKey);\n if (!instances || !entry) return;\n\n if (forceDispose) {\n if (!entry.instance.$blac.disposed) {\n entry.instance.dispose();\n }\n instances.delete(instanceKey);\n return;\n }\n\n const releasedRefId = refId ?? entry.refs.keys().next().value;\n if (releasedRefId === undefined) return;\n const count = entry.refs.get(releasedRefId) ?? 0;\n if (count === 0) return;\n if (count === 1) {\n entry.refs.delete(releasedRefId);\n } else {\n entry.refs.set(releasedRefId, count - 1);\n }\n this.emit('refReleased', entry.instance, releasedRefId);\n\n // Checked before activation so a disposing entry never also deactivates.\n if (this._isUnowned(Type, entry)) {\n if (!entry.instance.$blac.disposed) {\n entry.instance.dispose();\n }\n instances.delete(instanceKey);\n return;\n }\n\n this._syncActivation(entry);\n }\n\n /** Live instances of `Type`. */\n getAll<T extends StateContainerConstructor>(\n Type: T,\n ): InstanceReadonlyState<T>[] {\n const instances = this.getInstancesMap(Type);\n const result: InstanceReadonlyState<T>[] = [];\n for (const entry of instances.values()) {\n if (!entry.instance.$blac.disposed) {\n result.push(entry.instance);\n }\n }\n return result;\n }\n\n /** Iterate live instances of `Type`; callback errors are logged. */\n forEach<T extends StateContainerConstructor>(\n Type: T,\n callback: (instance: InstanceReadonlyState<T>) => void,\n ): void {\n const instances = this.getInstancesMap(Type);\n for (const entry of instances.values()) {\n const instance = entry.instance;\n if (!instance.$blac.disposed) {\n try {\n callback(instance);\n } catch (error) {\n console.error(\n `${BLAC_ERROR_PREFIX} forEach callback error for ${getBlacName(Type)}:`,\n error,\n );\n }\n }\n }\n }\n\n /** Dispose all instances of `Type`. */\n clear<T extends StateContainerConstructor>(Type: T): void {\n const instances = this.instancesByConstructor.get(Type);\n if (!instances) return;\n for (const entry of instances.values()) {\n if (!entry.instance.$blac.disposed) {\n entry.instance.dispose();\n }\n }\n instances.clear();\n }\n\n /**\n * Get reference count for an instance (number of active refs).\n *\n * @internal Internal key tier; public callers use the args-based `getRefCount`.\n * @param Type - The StateContainer class constructor\n * @param instanceKey - Pre-resolved instance key (defaults to 'default')\n * @returns Current ref count (0 if instance doesn't exist)\n */\n getRefCount<T extends StateContainerConstructor>(\n Type: T,\n instanceKey: string = DEFAULT_STRUCTURAL_KEY,\n ): number {\n return this.getInstancesMap(Type).get(instanceKey)?.refs.size ?? 0;\n }\n\n /**\n * Get all active reference IDs for an instance.\n *\n * @internal Internal key tier; public callers use the args-based `getRefIds`.\n * @param Type - The StateContainer class constructor\n * @param instanceKey - Pre-resolved instance key (defaults to 'default')\n * @returns Array of ref ID strings (empty if instance doesn't exist)\n */\n getRefIds<T extends StateContainerConstructor>(\n Type: T,\n instanceKey: string = DEFAULT_STRUCTURAL_KEY,\n ): string[] {\n const entry = this.getInstancesMap(Type).get(instanceKey);\n return entry ? Array.from(entry.refs.keys()) : [];\n }\n\n /** Ref ids by `$blac.id`, for `PluginContext.getRefIds`. */\n getRefIdsById(instanceId: string): string[] {\n const entry = this._entryById.get(instanceId);\n return entry ? Array.from(entry.refs.keys()) : [];\n }\n\n /**\n * Check if an instance exists.\n *\n * @internal Internal key tier; public callers use the args-based `hasInstance`.\n * @param Type - The StateContainer class constructor\n * @param instanceKey - Pre-resolved instance key (defaults to 'default')\n * @returns true if a live (not disposed) instance exists\n */\n hasInstance<T extends StateContainerConstructor>(\n Type: T,\n instanceKey: string = DEFAULT_STRUCTURAL_KEY,\n ): boolean {\n const entry = this.getInstancesMap(Type).get(instanceKey);\n return entry !== undefined && !entry.instance.$blac.disposed;\n }\n\n /** Dispose every instance and forget all types (for testing). */\n clearAll(): void {\n for (const Type of this.types) {\n this.clear(Type);\n }\n this.types.clear();\n }\n\n /** Instance counts, for debugging. */\n getStats(): {\n registeredTypes: number;\n totalInstances: number;\n typeBreakdown: Record<string, number>;\n } {\n const typeBreakdown: Record<string, number> = {};\n let totalInstances = 0;\n\n for (const Type of this.types) {\n const typeName = Type.name;\n const instances = this.getInstancesMap(Type);\n const count = instances.size;\n\n typeBreakdown[typeName] = count;\n totalInstances += count;\n }\n\n return {\n registeredTypes: this.types.size,\n totalInstances,\n typeBreakdown,\n };\n }\n\n /** All registered types (for plugins). */\n getTypes(): StateContainerConstructor[] {\n return Array.from(this.types);\n }\n\n /**\n * Subscribe to a lifecycle event.\n * @returns Unsubscribe function\n */\n on<E extends LifecycleEvent>(\n event: E,\n listener: LifecycleListener<E>,\n ): () => void {\n let instance = this.listeners.get(event);\n if (!instance) {\n instance = new Set();\n this.listeners.set(event, instance);\n }\n\n instance.add(listener as (...args: any[]) => void);\n\n return () => {\n this.listeners.get(event)?.delete(listener as (...args: any[]) => void);\n };\n }\n\n /**\n * Emit lifecycle event to all listeners\n * @internal - Called by StateContainer lifecycle methods\n */\n emit(event: 'created', container: StateContainer<any, any, any>): void;\n emit(event: 'disposed', container: StateContainer<any, any, any>): void;\n emit(\n event: 'stateChanged',\n container: StateContainer<any, any, any>,\n previousState: any,\n currentState: any,\n ): void;\n emit(\n event: 'refAcquired',\n container: StateContainer<any, any, any>,\n refId: string,\n ): void;\n emit(\n event: 'refReleased',\n container: StateContainer<any, any, any>,\n refId: string,\n ): void;\n emit(\n event: 'depsChanged',\n container: StateContainer<any, any, any>,\n previousDeps: Readonly<Record<string, unknown>>,\n currentDeps: Readonly<Record<string, unknown>>,\n ): void;\n emit(\n event: 'hydrationChanged',\n container: StateContainer<any, any, any>,\n status: HydrationStatus,\n previousStatus: HydrationStatus,\n ): void;\n emit(\n event: 'activated',\n container: StateContainer<any, any, any>,\n signal: AbortSignal,\n ): void;\n emit(event: 'deactivated', container: StateContainer<any, any, any>): void;\n emit(event: LifecycleEvent, ...args: any[]): void {\n const listeners = this.listeners.get(event);\n if (!listeners || listeners.size === 0) return;\n\n for (const listener of listeners) {\n try {\n listener(...args);\n } catch (error) {\n console.error(\n `${BLAC_ERROR_PREFIX} Listener error for '${event}':`,\n error,\n );\n }\n }\n }\n\n /**\n * Queue a microtask-deferred `stateChanged`.\n * @internal - Called by StateContainer.applyState\n */\n notifyStateChanged(\n container: StateContainer<any, any, any>,\n previousState: any,\n newState: any,\n ): void {\n if (!this.hasStateChangedListeners) return;\n\n if (!this._pendingStateChanges) {\n this._pendingStateChanges = [];\n queueMicrotask(() => this.flushStateChanged());\n }\n this._pendingStateChanges.push([container, previousState, newState]);\n }\n\n /**\n * One event per emit, deliberately not coalesced: devtools and time-travel\n * need every intermediate transition. Plugins get the coalesced lane.\n */\n private flushStateChanged(): void {\n const pending = this._pendingStateChanges;\n this._pendingStateChanges = null;\n if (!pending) return;\n\n for (const [container, prev, next] of pending) {\n this.emit('stateChanged', container, prev, next);\n }\n }\n}\n\n/**\n * The global default registry.\n * @public\n */\nexport const globalRegistry = new StateContainerRegistry();\n"],"mappings":"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"}
|