@akashjs/runtime 0.2.6 → 0.2.7
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/dist/a11y.cjs +2 -0
- package/dist/a11y.cjs.map +1 -0
- package/dist/a11y.d.cts +99 -0
- package/dist/a11y.d.ts +99 -0
- package/dist/a11y.js +2 -0
- package/dist/a11y.js.map +1 -0
- package/dist/async-component.cjs +2 -0
- package/dist/async-component.cjs.map +1 -0
- package/dist/async-component.d.cts +44 -0
- package/dist/async-component.d.ts +44 -0
- package/dist/async-component.js +2 -0
- package/dist/async-component.js.map +1 -0
- package/dist/await-block.cjs +2 -0
- package/dist/await-block.cjs.map +1 -0
- package/dist/await-block.d.cts +37 -0
- package/dist/await-block.d.ts +37 -0
- package/dist/await-block.js +2 -0
- package/dist/await-block.js.map +1 -0
- package/dist/browser.cjs +2 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +125 -0
- package/dist/browser.d.ts +125 -0
- package/dist/browser.js +2 -0
- package/dist/browser.js.map +1 -0
- package/dist/chunk-2HLDEWRT.cjs +2 -0
- package/dist/chunk-2HLDEWRT.cjs.map +1 -0
- package/dist/{chunk-2U643GJZ.cjs → chunk-2LKFIID7.cjs} +2 -2
- package/dist/{chunk-2U643GJZ.cjs.map → chunk-2LKFIID7.cjs.map} +1 -1
- package/dist/chunk-34PQECMN.cjs +2 -0
- package/dist/chunk-34PQECMN.cjs.map +1 -0
- package/dist/chunk-36VM3RJW.cjs +2 -0
- package/dist/chunk-36VM3RJW.cjs.map +1 -0
- package/dist/chunk-3PGU24B5.cjs +3 -0
- package/dist/chunk-3PGU24B5.cjs.map +1 -0
- package/dist/chunk-3XREYIJH.cjs +2 -0
- package/dist/chunk-3XREYIJH.cjs.map +1 -0
- package/dist/chunk-45DPEU7T.cjs +2 -0
- package/dist/chunk-45DPEU7T.cjs.map +1 -0
- package/dist/chunk-4J3QBQVW.js +4 -0
- package/dist/chunk-4J3QBQVW.js.map +1 -0
- package/dist/{chunk-2Q6SYE5O.cjs → chunk-4NQEIKH5.cjs} +2 -2
- package/dist/{chunk-2Q6SYE5O.cjs.map → chunk-4NQEIKH5.cjs.map} +1 -1
- package/dist/chunk-5QCWH6QA.cjs +4 -0
- package/dist/chunk-5QCWH6QA.cjs.map +1 -0
- package/dist/chunk-6O46EMQS.cjs +2 -0
- package/dist/chunk-6O46EMQS.cjs.map +1 -0
- package/dist/chunk-7IJUJUXE.cjs +2 -0
- package/dist/chunk-7IJUJUXE.cjs.map +1 -0
- package/dist/chunk-7UX5CSGZ.cjs +2 -0
- package/dist/chunk-7UX5CSGZ.cjs.map +1 -0
- package/dist/chunk-7VBH4F3P.js +2 -0
- package/dist/chunk-7VBH4F3P.js.map +1 -0
- package/dist/chunk-7ZPSYZHD.cjs +2 -0
- package/dist/chunk-7ZPSYZHD.cjs.map +1 -0
- package/dist/chunk-AOFLE33X.js +5 -0
- package/dist/chunk-AOFLE33X.js.map +1 -0
- package/dist/chunk-AQQQVDBQ.cjs +2 -0
- package/dist/chunk-AQQQVDBQ.cjs.map +1 -0
- package/dist/chunk-AXB5GHGO.js +2 -0
- package/dist/chunk-AXB5GHGO.js.map +1 -0
- package/dist/chunk-AZCELE44.cjs +2 -0
- package/dist/chunk-AZCELE44.cjs.map +1 -0
- package/dist/chunk-BB7P6HTR.js +2 -0
- package/dist/chunk-BB7P6HTR.js.map +1 -0
- package/dist/chunk-BGSF77LF.js +2 -0
- package/dist/chunk-BGSF77LF.js.map +1 -0
- package/dist/chunk-BHP3UTTQ.cjs +3 -0
- package/dist/chunk-BHP3UTTQ.cjs.map +1 -0
- package/dist/chunk-CP6SK2B4.js +2 -0
- package/dist/{chunk-5NHDEY2C.js.map → chunk-CP6SK2B4.js.map} +1 -1
- package/dist/chunk-DFYXFKCH.cjs +2 -0
- package/dist/chunk-DFYXFKCH.cjs.map +1 -0
- package/dist/chunk-DHFVVFZF.cjs +2 -0
- package/dist/chunk-DHFVVFZF.cjs.map +1 -0
- package/dist/chunk-DP7G45QM.cjs +13 -0
- package/dist/chunk-DP7G45QM.cjs.map +1 -0
- package/dist/chunk-E6RB7PRO.js +2 -0
- package/dist/chunk-E6RB7PRO.js.map +1 -0
- package/dist/chunk-F4FXIPR3.js +2 -0
- package/dist/chunk-F4FXIPR3.js.map +1 -0
- package/dist/chunk-F6VSSM2P.js +2 -0
- package/dist/chunk-F6VSSM2P.js.map +1 -0
- package/dist/chunk-FUVSCPU4.cjs +2 -0
- package/dist/chunk-FUVSCPU4.cjs.map +1 -0
- package/dist/chunk-FVF3T4JJ.js +2 -0
- package/dist/chunk-FVF3T4JJ.js.map +1 -0
- package/dist/chunk-FVWHMFX6.cjs +5 -0
- package/dist/chunk-FVWHMFX6.cjs.map +1 -0
- package/dist/chunk-IHEW6F2H.js +2 -0
- package/dist/chunk-IHEW6F2H.js.map +1 -0
- package/dist/chunk-IJS2EMSE.js +2 -0
- package/dist/chunk-IJS2EMSE.js.map +1 -0
- package/dist/chunk-IKVHLORY.cjs +11 -0
- package/dist/chunk-IKVHLORY.cjs.map +1 -0
- package/dist/chunk-IQGSDFBI.cjs +2 -0
- package/dist/chunk-IQGSDFBI.cjs.map +1 -0
- package/dist/chunk-J6KDUWX6.cjs +2 -0
- package/dist/chunk-J6KDUWX6.cjs.map +1 -0
- package/dist/chunk-JD3LDHUI.cjs +2 -0
- package/dist/chunk-JD3LDHUI.cjs.map +1 -0
- package/dist/chunk-JEYTB4AG.js +2 -0
- package/dist/chunk-JEYTB4AG.js.map +1 -0
- package/dist/chunk-JFLZJPVN.js +2 -0
- package/dist/chunk-JFLZJPVN.js.map +1 -0
- package/dist/chunk-JLPJ22CE.js +2 -0
- package/dist/chunk-JLPJ22CE.js.map +1 -0
- package/dist/chunk-JQCN42XX.js +2 -0
- package/dist/chunk-JQCN42XX.js.map +1 -0
- package/dist/chunk-K2HB5VFA.cjs +2 -0
- package/dist/chunk-K2HB5VFA.cjs.map +1 -0
- package/dist/chunk-K7TMUF3F.cjs +2 -0
- package/dist/chunk-K7TMUF3F.cjs.map +1 -0
- package/dist/chunk-KE7BJTCD.js +2 -0
- package/dist/chunk-KE7BJTCD.js.map +1 -0
- package/dist/chunk-KMEGUPH2.js +3 -0
- package/dist/chunk-KMEGUPH2.js.map +1 -0
- package/dist/chunk-KUPL3ZVD.js +2 -0
- package/dist/chunk-KUPL3ZVD.js.map +1 -0
- package/dist/chunk-L3ZZX36S.js +2 -0
- package/dist/chunk-L3ZZX36S.js.map +1 -0
- package/dist/chunk-LD4C62JY.cjs +2 -0
- package/dist/chunk-LD4C62JY.cjs.map +1 -0
- package/dist/chunk-LWQPLKL6.cjs +20 -0
- package/dist/chunk-LWQPLKL6.cjs.map +1 -0
- package/dist/chunk-M5IACTFC.cjs +17 -0
- package/dist/chunk-M5IACTFC.cjs.map +1 -0
- package/dist/chunk-MADMPRT2.js +20 -0
- package/dist/chunk-MADMPRT2.js.map +1 -0
- package/dist/chunk-MDHWM3C2.js +2 -0
- package/dist/chunk-MDHWM3C2.js.map +1 -0
- package/dist/chunk-N3ITIHHM.js +5 -0
- package/dist/chunk-N3ITIHHM.js.map +1 -0
- package/dist/chunk-N5APNCPB.js +2 -0
- package/dist/chunk-N5APNCPB.js.map +1 -0
- package/dist/{chunk-U53YRJNV.js → chunk-NBYFHJWB.js} +3 -3
- package/dist/{chunk-U53YRJNV.js.map → chunk-NBYFHJWB.js.map} +1 -1
- package/dist/chunk-NCXMNJUN.js +2 -0
- package/dist/chunk-NCXMNJUN.js.map +1 -0
- package/dist/chunk-NEQ5TENE.cjs +2 -0
- package/dist/chunk-NEQ5TENE.cjs.map +1 -0
- package/dist/chunk-NGU2W4PD.cjs +2 -0
- package/dist/chunk-NGU2W4PD.cjs.map +1 -0
- package/dist/{chunk-ZYVQQ5VR.cjs → chunk-NHDYQTC5.cjs} +3 -3
- package/dist/{chunk-ZYVQQ5VR.cjs.map → chunk-NHDYQTC5.cjs.map} +1 -1
- package/dist/chunk-NJXXC5JB.js +2 -0
- package/dist/chunk-NJXXC5JB.js.map +1 -0
- package/dist/chunk-NQEY7DR5.cjs +2 -0
- package/dist/chunk-NQEY7DR5.cjs.map +1 -0
- package/dist/chunk-OQV3NYDH.js +3 -0
- package/dist/chunk-OQV3NYDH.js.map +1 -0
- package/dist/chunk-OZ4GNBKA.js +2 -0
- package/dist/chunk-OZ4GNBKA.js.map +1 -0
- package/dist/chunk-PPNEAFKE.cjs +5 -0
- package/dist/chunk-PPNEAFKE.cjs.map +1 -0
- package/dist/chunk-PYASLKWF.js +2 -0
- package/dist/chunk-PYASLKWF.js.map +1 -0
- package/dist/chunk-Q6S7SUOM.js +2 -0
- package/dist/chunk-Q6S7SUOM.js.map +1 -0
- package/dist/chunk-QE2TJ6P5.cjs +2 -0
- package/dist/chunk-QE2TJ6P5.cjs.map +1 -0
- package/dist/chunk-QNVMBXVH.js +2 -0
- package/dist/chunk-QNVMBXVH.js.map +1 -0
- package/dist/chunk-QQ725EZL.js +2 -0
- package/dist/chunk-QQ725EZL.js.map +1 -0
- package/dist/chunk-QQTZQ6UX.cjs +2 -0
- package/dist/chunk-QQTZQ6UX.cjs.map +1 -0
- package/dist/{chunk-AVVJKYT3.cjs → chunk-QSPRVXFV.cjs} +2 -2
- package/dist/{chunk-AVVJKYT3.cjs.map → chunk-QSPRVXFV.cjs.map} +1 -1
- package/dist/chunk-QTQ6RUX4.cjs +5 -0
- package/dist/chunk-QTQ6RUX4.cjs.map +1 -0
- package/dist/chunk-R65RPMQX.cjs +2 -0
- package/dist/chunk-R65RPMQX.cjs.map +1 -0
- package/dist/chunk-R7NUVVHP.js +2 -0
- package/dist/{chunk-5A7KDBDU.js.map → chunk-R7NUVVHP.js.map} +1 -1
- package/dist/chunk-SXYPAP4B.js +2 -0
- package/dist/chunk-SXYPAP4B.js.map +1 -0
- package/dist/chunk-T2RVAQEU.js +2 -0
- package/dist/chunk-T2RVAQEU.js.map +1 -0
- package/dist/chunk-T7A5YOEG.cjs +2 -0
- package/dist/chunk-T7A5YOEG.cjs.map +1 -0
- package/dist/chunk-TDKDZ3QJ.cjs +2 -0
- package/dist/chunk-TDKDZ3QJ.cjs.map +1 -0
- package/dist/chunk-TFEHO7SF.cjs +2 -0
- package/dist/chunk-TFEHO7SF.cjs.map +1 -0
- package/dist/chunk-TSFY5HKB.js +17 -0
- package/dist/chunk-TSFY5HKB.js.map +1 -0
- package/dist/chunk-TYTEJYUQ.cjs +2 -0
- package/dist/chunk-TYTEJYUQ.cjs.map +1 -0
- package/dist/chunk-TZHEZW6R.js +11 -0
- package/dist/chunk-TZHEZW6R.js.map +1 -0
- package/dist/chunk-U65WRXZC.js +13 -0
- package/dist/chunk-U65WRXZC.js.map +1 -0
- package/dist/chunk-UT4MWGJ3.js +2 -0
- package/dist/chunk-UT4MWGJ3.js.map +1 -0
- package/dist/chunk-V2JDKH3W.cjs +2 -0
- package/dist/chunk-V2JDKH3W.cjs.map +1 -0
- package/dist/chunk-VNDSKBXQ.cjs +2 -0
- package/dist/chunk-VNDSKBXQ.cjs.map +1 -0
- package/dist/chunk-VO4FCKHM.js +2 -0
- package/dist/chunk-VO4FCKHM.js.map +1 -0
- package/dist/chunk-VUMMC2P5.js +2 -0
- package/dist/chunk-VUMMC2P5.js.map +1 -0
- package/dist/chunk-VUSNUBNI.js +2 -0
- package/dist/chunk-VUSNUBNI.js.map +1 -0
- package/dist/chunk-VWTULWXF.js +2 -0
- package/dist/{chunk-TKFJGLUO.js.map → chunk-VWTULWXF.js.map} +1 -1
- package/dist/chunk-VX7PSSOU.js +5 -0
- package/dist/chunk-VX7PSSOU.js.map +1 -0
- package/dist/chunk-WLSXJU2N.js +13 -0
- package/dist/chunk-WLSXJU2N.js.map +1 -0
- package/dist/chunk-WOZWFMOK.cjs +2 -0
- package/dist/chunk-WOZWFMOK.cjs.map +1 -0
- package/dist/chunk-WTDTVWCQ.cjs +2 -0
- package/dist/chunk-WTDTVWCQ.cjs.map +1 -0
- package/dist/chunk-WZ5ULION.js +2 -0
- package/dist/chunk-WZ5ULION.js.map +1 -0
- package/dist/chunk-XPLIEN2G.cjs +13 -0
- package/dist/chunk-XPLIEN2G.cjs.map +1 -0
- package/dist/chunk-XWVNLE2W.cjs +2 -0
- package/dist/chunk-XWVNLE2W.cjs.map +1 -0
- package/dist/chunk-XZR3J626.cjs +2 -0
- package/dist/chunk-XZR3J626.cjs.map +1 -0
- package/dist/chunk-YDO5KARN.js +2 -0
- package/dist/chunk-YDO5KARN.js.map +1 -0
- package/dist/chunk-YURIYBTN.cjs +2 -0
- package/dist/chunk-YURIYBTN.cjs.map +1 -0
- package/dist/chunk-YXKQTEPR.js +2 -0
- package/dist/chunk-YXKQTEPR.js.map +1 -0
- package/dist/chunk-Z6K4FYG6.js +2 -0
- package/dist/chunk-Z6K4FYG6.js.map +1 -0
- package/dist/chunk-ZJULEDLY.js +2 -0
- package/dist/chunk-ZJULEDLY.js.map +1 -0
- package/dist/{component-C1WnFcRp.d.ts → component-CPVtkASo.d.ts} +2 -3
- package/dist/{component-C1WnFcRp.d.cts → component-CxlupKuc.d.cts} +2 -3
- package/dist/composables.cjs +2 -0
- package/dist/composables.cjs.map +1 -0
- package/dist/composables.d.cts +103 -0
- package/dist/composables.d.ts +103 -0
- package/dist/composables.js +2 -0
- package/dist/composables.js.map +1 -0
- package/dist/{context-CB1mCq2h.d.cts → context-Cwt7QCpk.d.cts} +1 -9
- package/dist/{context-CB1mCq2h.d.ts → context-Cwt7QCpk.d.ts} +1 -9
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +5 -4
- package/dist/core.d.ts +5 -4
- package/dist/core.js +1 -1
- package/dist/css.cjs +2 -0
- package/dist/css.cjs.map +1 -0
- package/dist/css.d.cts +42 -0
- package/dist/css.d.ts +42 -0
- package/dist/css.js +2 -0
- package/dist/css.js.map +1 -0
- package/dist/data-table.cjs +2 -0
- package/dist/data-table.cjs.map +1 -0
- package/dist/data-table.d.cts +97 -0
- package/dist/data-table.d.ts +97 -0
- package/dist/data-table.js +2 -0
- package/dist/data-table.js.map +1 -0
- package/dist/deep-signal.cjs +2 -0
- package/dist/deep-signal.cjs.map +1 -0
- package/dist/deep-signal.d.cts +48 -0
- package/dist/deep-signal.d.ts +48 -0
- package/dist/deep-signal.js +2 -0
- package/dist/deep-signal.js.map +1 -0
- package/dist/defer.cjs +2 -0
- package/dist/defer.cjs.map +1 -0
- package/dist/defer.d.cts +55 -0
- package/dist/defer.d.ts +55 -0
- package/dist/defer.js +2 -0
- package/dist/defer.js.map +1 -0
- package/dist/deprecation.cjs +2 -0
- package/dist/deprecation.cjs.map +1 -0
- package/dist/deprecation.d.cts +119 -0
- package/dist/deprecation.d.ts +119 -0
- package/dist/deprecation.js +2 -0
- package/dist/deprecation.js.map +1 -0
- package/dist/{devtools-overlay-CJWKBTP4.js → devtools-overlay-3WRM6GKM.js} +3 -3
- package/dist/{devtools-overlay-CJWKBTP4.js.map → devtools-overlay-3WRM6GKM.js.map} +1 -1
- package/dist/{devtools-overlay-EQ3G755P.cjs → devtools-overlay-WJGSIB4N.cjs} +4 -4
- package/dist/{devtools-overlay-EQ3G755P.cjs.map → devtools-overlay-WJGSIB4N.cjs.map} +1 -1
- package/dist/devtools.cjs +2 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.cts +78 -0
- package/dist/devtools.d.ts +78 -0
- package/dist/devtools.js +2 -0
- package/dist/devtools.js.map +1 -0
- package/dist/di.cjs +2 -0
- package/dist/di.cjs.map +1 -0
- package/dist/di.d.cts +93 -0
- package/dist/di.d.ts +93 -0
- package/dist/di.js +2 -0
- package/dist/di.js.map +1 -0
- package/dist/directive.cjs +2 -0
- package/dist/directive.cjs.map +1 -0
- package/dist/directive.d.cts +102 -0
- package/dist/directive.d.ts +102 -0
- package/dist/directive.js +2 -0
- package/dist/directive.js.map +1 -0
- package/dist/error-boundary.cjs +2 -0
- package/dist/error-boundary.cjs.map +1 -0
- package/dist/error-boundary.d.cts +17 -0
- package/dist/error-boundary.d.ts +17 -0
- package/dist/error-boundary.js +2 -0
- package/dist/error-boundary.js.map +1 -0
- package/dist/error-hints.cjs +2 -0
- package/dist/error-hints.cjs.map +1 -0
- package/dist/error-hints.d.cts +17 -0
- package/dist/error-hints.d.ts +17 -0
- package/dist/error-hints.js +2 -0
- package/dist/error-hints.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +35 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -0
- package/dist/event-bus.cjs +2 -0
- package/dist/event-bus.cjs.map +1 -0
- package/dist/event-bus.d.cts +68 -0
- package/dist/event-bus.d.ts +68 -0
- package/dist/event-bus.js +2 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/event-modifiers.cjs +2 -0
- package/dist/event-modifiers.cjs.map +1 -0
- package/dist/event-modifiers.d.cts +130 -0
- package/dist/event-modifiers.d.ts +130 -0
- package/dist/event-modifiers.js +2 -0
- package/dist/event-modifiers.js.map +1 -0
- package/dist/flip.cjs +2 -0
- package/dist/flip.cjs.map +1 -0
- package/dist/flip.d.cts +66 -0
- package/dist/flip.d.ts +66 -0
- package/dist/flip.js +2 -0
- package/dist/flip.js.map +1 -0
- package/dist/head.cjs +2 -0
- package/dist/head.cjs.map +1 -0
- package/dist/head.d.cts +70 -0
- package/dist/head.d.ts +70 -0
- package/dist/head.js +2 -0
- package/dist/head.js.map +1 -0
- package/dist/hydration.cjs +2 -0
- package/dist/hydration.cjs.map +1 -0
- package/dist/hydration.d.cts +84 -0
- package/dist/hydration.d.ts +84 -0
- package/dist/hydration.js +2 -0
- package/dist/hydration.js.map +1 -0
- package/dist/image.cjs +2 -0
- package/dist/image.cjs.map +1 -0
- package/dist/image.d.cts +54 -0
- package/dist/image.d.ts +54 -0
- package/dist/image.js +2 -0
- package/dist/image.js.map +1 -0
- package/dist/index.cjs +1 -63
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -3155
- package/dist/index.d.ts +50 -3155
- package/dist/index.js +1 -63
- package/dist/index.js.map +1 -1
- package/dist/infinite-scroll.cjs +2 -0
- package/dist/infinite-scroll.cjs.map +1 -0
- package/dist/infinite-scroll.d.cts +49 -0
- package/dist/infinite-scroll.d.ts +49 -0
- package/dist/infinite-scroll.js +2 -0
- package/dist/infinite-scroll.js.map +1 -0
- package/dist/leak-detector.cjs +2 -0
- package/dist/leak-detector.cjs.map +1 -0
- package/dist/leak-detector.d.cts +71 -0
- package/dist/leak-detector.d.ts +71 -0
- package/dist/leak-detector.js +2 -0
- package/dist/leak-detector.js.map +1 -0
- package/dist/machine.cjs +1 -1
- package/dist/machine.d.cts +1 -1
- package/dist/machine.d.ts +1 -1
- package/dist/machine.js +1 -1
- package/dist/offline.cjs +1 -1
- package/dist/offline.d.cts +1 -1
- package/dist/offline.d.ts +1 -1
- package/dist/offline.js +1 -1
- package/dist/perf.cjs +2 -0
- package/dist/perf.cjs.map +1 -0
- package/dist/perf.d.cts +97 -0
- package/dist/perf.d.ts +97 -0
- package/dist/perf.js +2 -0
- package/dist/perf.js.map +1 -0
- package/dist/pipes.cjs +2 -0
- package/dist/pipes.cjs.map +1 -0
- package/dist/pipes.d.cts +130 -0
- package/dist/pipes.d.ts +130 -0
- package/dist/pipes.js +2 -0
- package/dist/pipes.js.map +1 -0
- package/dist/plugin.cjs +2 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.cts +70 -0
- package/dist/plugin.d.ts +70 -0
- package/dist/plugin.js +2 -0
- package/dist/plugin.js.map +1 -0
- package/dist/portal.cjs +2 -0
- package/dist/portal.cjs.map +1 -0
- package/dist/portal.d.cts +30 -0
- package/dist/portal.d.ts +30 -0
- package/dist/portal.js +2 -0
- package/dist/portal.js.map +1 -0
- package/dist/pwa.cjs +1 -1
- package/dist/pwa.d.cts +1 -1
- package/dist/pwa.d.ts +1 -1
- package/dist/pwa.js +1 -1
- package/dist/query-state.cjs +2 -0
- package/dist/query-state.cjs.map +1 -0
- package/dist/query-state.d.cts +82 -0
- package/dist/query-state.d.ts +82 -0
- package/dist/query-state.js +2 -0
- package/dist/query-state.js.map +1 -0
- package/dist/reconcile.cjs +2 -0
- package/dist/reconcile.cjs.map +1 -0
- package/dist/reconcile.d.cts +42 -0
- package/dist/reconcile.d.ts +42 -0
- package/dist/reconcile.js +2 -0
- package/dist/reconcile.js.map +1 -0
- package/dist/scheduler-CKi1esN-.d.cts +9 -0
- package/dist/scheduler-CKi1esN-.d.ts +9 -0
- package/dist/security.cjs +2 -0
- package/dist/security.cjs.map +1 -0
- package/dist/security.d.cts +193 -0
- package/dist/security.d.ts +193 -0
- package/dist/security.js +2 -0
- package/dist/security.js.map +1 -0
- package/dist/seo.cjs +2 -0
- package/dist/seo.cjs.map +1 -0
- package/dist/seo.d.cts +118 -0
- package/dist/seo.d.ts +118 -0
- package/dist/seo.js +2 -0
- package/dist/seo.js.map +1 -0
- package/dist/{signals-C7XfOHHR.d.cts → signals-DionyGGY.d.cts} +7 -0
- package/dist/{signals-C7XfOHHR.d.ts → signals-DionyGGY.d.ts} +7 -0
- package/dist/snippets.cjs +2 -0
- package/dist/snippets.cjs.map +1 -0
- package/dist/snippets.d.cts +109 -0
- package/dist/snippets.d.ts +109 -0
- package/dist/snippets.js +2 -0
- package/dist/snippets.js.map +1 -0
- package/dist/ssg.cjs +2 -0
- package/dist/ssg.cjs.map +1 -0
- package/dist/ssg.d.cts +82 -0
- package/dist/ssg.d.ts +82 -0
- package/dist/ssg.js +2 -0
- package/dist/ssg.js.map +1 -0
- package/dist/ssr.cjs +1 -1
- package/dist/ssr.d.cts +2 -1
- package/dist/ssr.d.ts +2 -1
- package/dist/ssr.js +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.d.cts +1 -1
- package/dist/store.d.ts +1 -1
- package/dist/store.js +1 -1
- package/dist/suspense.cjs +2 -0
- package/dist/suspense.cjs.map +1 -0
- package/dist/suspense.d.cts +36 -0
- package/dist/suspense.d.ts +36 -0
- package/dist/suspense.js +2 -0
- package/dist/suspense.js.map +1 -0
- package/dist/switch.cjs +2 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.d.cts +48 -0
- package/dist/switch.d.ts +48 -0
- package/dist/switch.js +2 -0
- package/dist/switch.js.map +1 -0
- package/dist/sync.cjs +1 -1
- package/dist/sync.d.cts +1 -1
- package/dist/sync.d.ts +1 -1
- package/dist/sync.js +1 -1
- package/dist/test.cjs +2 -2
- package/dist/test.cjs.map +1 -1
- package/dist/test.d.cts +5 -4
- package/dist/test.d.ts +5 -4
- package/dist/test.js +2 -2
- package/dist/test.js.map +1 -1
- package/dist/theme.cjs +2 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +56 -0
- package/dist/theme.d.ts +56 -0
- package/dist/theme.js +2 -0
- package/dist/theme.js.map +1 -0
- package/dist/toast.cjs +2 -0
- package/dist/toast.cjs.map +1 -0
- package/dist/toast.d.cts +66 -0
- package/dist/toast.d.ts +66 -0
- package/dist/toast.js +2 -0
- package/dist/toast.js.map +1 -0
- package/dist/transition.cjs +2 -0
- package/dist/transition.cjs.map +1 -0
- package/dist/transition.d.cts +90 -0
- package/dist/transition.d.ts +90 -0
- package/dist/transition.js +2 -0
- package/dist/transition.js.map +1 -0
- package/dist/tweened.cjs +2 -0
- package/dist/tweened.cjs.map +1 -0
- package/dist/tweened.d.cts +59 -0
- package/dist/tweened.d.ts +59 -0
- package/dist/tweened.js +2 -0
- package/dist/tweened.js.map +1 -0
- package/dist/types-DjZCk1xT.d.cts +4 -0
- package/dist/types-DjZCk1xT.d.ts +4 -0
- package/dist/view-transition.cjs +2 -0
- package/dist/view-transition.cjs.map +1 -0
- package/dist/view-transition.d.cts +80 -0
- package/dist/view-transition.d.ts +80 -0
- package/dist/view-transition.js +2 -0
- package/dist/view-transition.js.map +1 -0
- package/dist/virtual-list.cjs +2 -0
- package/dist/virtual-list.cjs.map +1 -0
- package/dist/virtual-list.d.cts +67 -0
- package/dist/virtual-list.d.ts +67 -0
- package/dist/virtual-list.js +2 -0
- package/dist/virtual-list.js.map +1 -0
- package/dist/watch.cjs +2 -0
- package/dist/watch.cjs.map +1 -0
- package/dist/watch.d.cts +70 -0
- package/dist/watch.d.ts +70 -0
- package/dist/watch.js +2 -0
- package/dist/watch.js.map +1 -0
- package/dist/web-component.cjs +2 -0
- package/dist/web-component.cjs.map +1 -0
- package/dist/web-component.d.cts +51 -0
- package/dist/web-component.d.ts +51 -0
- package/dist/web-component.js +2 -0
- package/dist/web-component.js.map +1 -0
- package/package.json +249 -11
- package/dist/chunk-35DJOBEO.cjs +0 -2
- package/dist/chunk-35DJOBEO.cjs.map +0 -1
- package/dist/chunk-3GRR4VW2.js +0 -13
- package/dist/chunk-3GRR4VW2.js.map +0 -1
- package/dist/chunk-5A7KDBDU.js +0 -2
- package/dist/chunk-5NHDEY2C.js +0 -2
- package/dist/chunk-6GGYM5SF.cjs +0 -5
- package/dist/chunk-6GGYM5SF.cjs.map +0 -1
- package/dist/chunk-EEILP4OL.cjs +0 -13
- package/dist/chunk-EEILP4OL.cjs.map +0 -1
- package/dist/chunk-FTTNKDZQ.js +0 -5
- package/dist/chunk-FTTNKDZQ.js.map +0 -1
- package/dist/chunk-H2HNKYN2.js +0 -2
- package/dist/chunk-H2HNKYN2.js.map +0 -1
- package/dist/chunk-TKFJGLUO.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/leak-detector.ts"],"names":["tracking","activeEffects","effectIdCounter","enableLeakDetection","disableLeakDetection","isLeakDetectionEnabled","trackEffect","componentName","id","captureStack","untrackEffect","record","getActiveEffects","checkForLeaks","thresholdMs","now","warnings","reportLeaks","leaks","leak","component","getLeakDetectionStats","stack"],"mappings":"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","file":"chunk-VX7PSSOU.js","sourcesContent":["/**\n * Effect disposal and leak detection (dev mode).\n *\n * In development, tracks all created effects and verifies they\n * get properly cleaned up when components unmount. Logs warnings\n * for leaked effects that were never disposed.\n */\n\nimport type { ScheduledEffect } from './scheduler.js';\n\n// --- Tracking state ---\n\nlet tracking = false;\nconst activeEffects = new Map<number, EffectRecord>();\nlet effectIdCounter = 0;\n\ninterface EffectRecord {\n id: number;\n createdAt: number;\n stackTrace: string | null;\n componentName: string | null;\n disposed: boolean;\n}\n\n// --- Public API ---\n\n/**\n * Enable leak detection. Call once at app startup in dev mode.\n *\n * ```ts\n * if (import.meta.env.DEV) {\n * enableLeakDetection();\n * }\n * ```\n */\nexport function enableLeakDetection(): void {\n tracking = true;\n}\n\n/**\n * Disable leak detection.\n */\nexport function disableLeakDetection(): void {\n tracking = false;\n activeEffects.clear();\n}\n\n/**\n * Check if leak detection is enabled.\n */\nexport function isLeakDetectionEnabled(): boolean {\n return tracking;\n}\n\n/**\n * Register an effect for tracking. Called internally by effect().\n * Returns an ID for later disposal tracking.\n */\nexport function trackEffect(componentName?: string): number {\n if (!tracking) return -1;\n\n const id = ++effectIdCounter;\n activeEffects.set(id, {\n id,\n createdAt: Date.now(),\n stackTrace: captureStack(),\n componentName: componentName ?? null,\n disposed: false,\n });\n\n return id;\n}\n\n/**\n * Mark an effect as disposed. Called internally by effect dispose function.\n */\nexport function untrackEffect(id: number): void {\n if (!tracking || id === -1) return;\n\n const record = activeEffects.get(id);\n if (record) {\n record.disposed = true;\n activeEffects.delete(id);\n }\n}\n\n/**\n * Get all currently active (undisposed) effects.\n */\nexport function getActiveEffects(): EffectRecord[] {\n return Array.from(activeEffects.values());\n}\n\n/**\n * Check for leaked effects and return warnings.\n * An effect is considered leaked if it's been active for longer\n * than the given threshold without being disposed.\n */\nexport function checkForLeaks(thresholdMs = 30000): LeakWarning[] {\n if (!tracking) return [];\n\n const now = Date.now();\n const warnings: LeakWarning[] = [];\n\n for (const record of activeEffects.values()) {\n if (!record.disposed && now - record.createdAt > thresholdMs) {\n warnings.push({\n effectId: record.id,\n age: now - record.createdAt,\n componentName: record.componentName,\n stackTrace: record.stackTrace,\n });\n }\n }\n\n return warnings;\n}\n\n/**\n * Log leak warnings to the console.\n */\nexport function reportLeaks(thresholdMs = 30000): void {\n const leaks = checkForLeaks(thresholdMs);\n if (leaks.length === 0) return;\n\n console.warn(\n `[AkashJS] ${leaks.length} potential effect leak(s) detected:`,\n );\n for (const leak of leaks) {\n const component = leak.componentName ? ` in ${leak.componentName}` : '';\n console.warn(\n ` Effect #${leak.effectId}${component} — active for ${(leak.age / 1000).toFixed(1)}s`,\n );\n if (leak.stackTrace) {\n console.warn(` Created at:\\n${leak.stackTrace}`);\n }\n }\n}\n\n/**\n * Get a summary of effect tracking state.\n */\nexport function getLeakDetectionStats(): {\n enabled: boolean;\n activeCount: number;\n totalTracked: number;\n} {\n return {\n enabled: tracking,\n activeCount: activeEffects.size,\n totalTracked: effectIdCounter,\n };\n}\n\n// --- Types ---\n\nexport interface LeakWarning {\n effectId: number;\n age: number;\n componentName: string | null;\n stackTrace: string | null;\n}\n\n// --- Internal ---\n\nfunction captureStack(): string | null {\n try {\n const err = new Error();\n const stack = err.stack;\n if (!stack) return null;\n // Remove first 3 lines (Error, captureStack, trackEffect)\n const lines = stack.split('\\n');\n return lines.slice(3, 8).join('\\n');\n } catch {\n return null;\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
function c(){return typeof document<"u"&&"startViewTransition"in document}function f(t,e={}){let{className:n,onBefore:o,onAfter:s,fallback:i="instant"}=e;if(o?.(),c()){n&&document.documentElement.classList.add(n);let a=document.startViewTransition(async()=>{await t();});return {finished:a.finished.then(()=>{n&&document.documentElement.classList.remove(n),s?.();}),updateCallbackDone:a.updateCallbackDone,ready:a.ready,skipTransition:()=>a.skipTransition()}}if(i==="fade")return m(t,e);let r=t(),d=r instanceof Promise?r:Promise.resolve();return s?.(),{finished:d,updateCallbackDone:d,ready:Promise.resolve(),skipTransition:()=>{}}}function u(t={}){let{duration:e="0.25s",easing:n="ease",oldAnimation:o,newAnimation:s}=t,i=`::view-transition-old(root),
|
|
2
|
+
::view-transition-new(root) {
|
|
3
|
+
`;return i+=` animation-duration: ${e};
|
|
4
|
+
`,i+=` animation-timing-function: ${n};
|
|
5
|
+
`,i+=`}
|
|
6
|
+
`,o&&(i+=`::view-transition-old(root) {
|
|
7
|
+
animation-name: ${o};
|
|
8
|
+
}
|
|
9
|
+
`),s&&(i+=`::view-transition-new(root) {
|
|
10
|
+
animation-name: ${s};
|
|
11
|
+
}
|
|
12
|
+
`),i}function w(t,e){t.style.viewTransitionName=e;}function m(t,e){let n=document.documentElement,o=new Promise(async s=>{n.style.transition="opacity 0.15s ease",n.style.opacity="0",await new Promise(i=>setTimeout(i,150)),await t(),n.style.opacity="1",await new Promise(i=>setTimeout(i,150)),n.style.transition="",n.style.opacity="",e.onAfter?.(),s();});return {finished:o,updateCallbackDone:o,ready:Promise.resolve(),skipTransition:()=>{n.style.transition="",n.style.opacity="";}}}export{c as a,f as b,u as c,w as d};//# sourceMappingURL=chunk-WLSXJU2N.js.map
|
|
13
|
+
//# sourceMappingURL=chunk-WLSXJU2N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/view-transition.ts"],"names":["supportsViewTransitions","startViewTransition","updateCallback","options","className","onBefore","onAfter","fallback","transition","fadeTransition","result","done","viewTransitionCSS","config","duration","easing","oldAnimation","newAnimation","css","assignTransitionName","el","name","finished","resolve","r"],"mappings":"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","file":"chunk-WLSXJU2N.js","sourcesContent":["/**\n * View Transitions API integration.\n *\n * Wraps the browser's native View Transitions API for smooth\n * page transitions. Falls back gracefully when not supported.\n *\n * ```ts\n * // With router\n * const router = createRouter(routes);\n * enableViewTransitions(router);\n *\n * // Manual\n * await startViewTransition(() => {\n * updateDOM();\n * });\n * ```\n */\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface ViewTransitionOptions {\n /** CSS class to add to the document during transition */\n className?: string;\n /** Callback before the transition starts */\n onBefore?: () => void;\n /** Callback after the transition completes */\n onAfter?: () => void;\n /** Fallback behavior when API is not supported (default: 'instant') */\n fallback?: 'instant' | 'fade' | 'none';\n}\n\nexport interface ViewTransition {\n /** Promise that resolves when transition animation is complete */\n finished: Promise<void>;\n /** Promise that resolves when the DOM update callback has run */\n updateCallbackDone: Promise<void>;\n /** Promise that resolves when the transition is ready to animate */\n ready: Promise<void>;\n /** Skip the transition animation */\n skipTransition(): void;\n}\n\n// =========================================================================\n// Feature detection\n// =========================================================================\n\n/**\n * Check if the View Transitions API is supported.\n */\nexport function supportsViewTransitions(): boolean {\n return typeof document !== 'undefined' && 'startViewTransition' in document;\n}\n\n// =========================================================================\n// startViewTransition\n// =========================================================================\n\n/**\n * Start a view transition with the native API, falling back\n * to instant DOM update when not supported.\n *\n * ```ts\n * await startViewTransition(() => {\n * container.innerHTML = newContent;\n * });\n * ```\n */\nexport function startViewTransition(\n updateCallback: () => void | Promise<void>,\n options: ViewTransitionOptions = {},\n): ViewTransition {\n const { className, onBefore, onAfter, fallback = 'instant' } = options;\n\n onBefore?.();\n\n // Native View Transitions API\n if (supportsViewTransitions()) {\n if (className) document.documentElement.classList.add(className);\n\n const transition = (document as any).startViewTransition(async () => {\n await updateCallback();\n });\n\n const finished = transition.finished.then(() => {\n if (className) document.documentElement.classList.remove(className);\n onAfter?.();\n });\n\n return {\n finished,\n updateCallbackDone: transition.updateCallbackDone,\n ready: transition.ready,\n skipTransition: () => transition.skipTransition(),\n };\n }\n\n // Fallback\n if (fallback === 'fade') {\n return fadeTransition(updateCallback, options);\n }\n\n // Instant fallback\n const result = updateCallback();\n const done = result instanceof Promise ? result : Promise.resolve();\n\n onAfter?.();\n\n return {\n finished: done,\n updateCallbackDone: done,\n ready: Promise.resolve(),\n skipTransition: () => {},\n };\n}\n\n// =========================================================================\n// CSS helpers for View Transitions\n// =========================================================================\n\n/**\n * Generate CSS for customizing view transitions.\n *\n * ```ts\n * const css = viewTransitionCSS({\n * duration: '0.3s',\n * oldAnimation: 'slide-out-left',\n * newAnimation: 'slide-in-right',\n * });\n * ```\n */\nexport function viewTransitionCSS(config: {\n duration?: string;\n easing?: string;\n oldAnimation?: string;\n newAnimation?: string;\n} = {}): string {\n const {\n duration = '0.25s',\n easing = 'ease',\n oldAnimation,\n newAnimation,\n } = config;\n\n let css = `::view-transition-old(root),\\n::view-transition-new(root) {\\n`;\n css += ` animation-duration: ${duration};\\n`;\n css += ` animation-timing-function: ${easing};\\n`;\n css += `}\\n`;\n\n if (oldAnimation) {\n css += `::view-transition-old(root) {\\n animation-name: ${oldAnimation};\\n}\\n`;\n }\n if (newAnimation) {\n css += `::view-transition-new(root) {\\n animation-name: ${newAnimation};\\n}\\n`;\n }\n\n return css;\n}\n\n/**\n * Assign a view-transition-name to an element for per-element transitions.\n *\n * ```ts\n * assignTransitionName(headerEl, 'page-header');\n * assignTransitionName(contentEl, 'page-content');\n * ```\n */\nexport function assignTransitionName(el: HTMLElement, name: string): void {\n el.style.viewTransitionName = name;\n}\n\n// =========================================================================\n// Fade fallback (for browsers without View Transitions)\n// =========================================================================\n\nfunction fadeTransition(\n updateCallback: () => void | Promise<void>,\n options: ViewTransitionOptions,\n): ViewTransition {\n const el = document.documentElement;\n\n const finished = new Promise<void>(async (resolve) => {\n // Fade out\n el.style.transition = 'opacity 0.15s ease';\n el.style.opacity = '0';\n\n await new Promise((r) => setTimeout(r, 150));\n\n // Update DOM\n await updateCallback();\n\n // Fade in\n el.style.opacity = '1';\n\n await new Promise((r) => setTimeout(r, 150));\n\n el.style.transition = '';\n el.style.opacity = '';\n\n options.onAfter?.();\n resolve();\n });\n\n return {\n finished,\n updateCallbackDone: finished,\n ready: Promise.resolve(),\n skipTransition: () => {\n el.style.transition = '';\n el.style.opacity = '';\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkXPLIEN2G_cjs=require('./chunk-XPLIEN2G.cjs');var c=new Set,a=new Set,b=false,f=0,y=false,x=3,A=100;function h(){if(b)return;b=true;let e=new Map,n=false,r=0;for(;(c.size>0||a.size>0)&&r<A;){if(r++,c.size>0){let s=[...c].sort(D);c.clear();for(let t of s){let i=(e.get(t)??0)+1;if(e.set(t,i),i>x){n=true;continue}t.run();}}if(a.size>0){let s=[...a].sort(D);a.clear();for(let t of s){let i=(e.get(t)??0)+1;if(e.set(t,i),i>x){n=true;continue}t.run();}}if(n&&c.size===0&&a.size===0)break}(n||r>=A)&&(c.clear(),a.clear(),console.error("[AkashJS] Circular dependency detected between effects. Two or more effects are writing to each other's dependencies. The cycle has been broken after "+r+" iterations.")),b=false,y&&(y=false,(c.size>0||a.size>0)&&h());}function q(e){e.isRender?c.add(e):a.add(e),f===0&&!b?h():b&&(y=true);}function V(e){f++;try{return e()}finally{f--,f===0&&h();}}function R(){f++;}function z(){f--,f===0&&h();}function D(e,n){return (e.depth??0)-(n.depth??0)}function H(){h();}var _=typeof process>"u"||process.env?.NODE_ENV!=="production";var u=null;function C(e,n){return e===null?n:Array.isArray(e)?(e.indexOf(n)===-1&&e.push(n),e):e===n?e:[e,n]}function N(e,n){if(e===null||e===n)return null;if(Array.isArray(e)){let r=e.indexOf(n);if(r!==-1){if(e.length===2)return e[1-r];e.splice(r,1);}return e}return e}function m(e,n){if(e!==null)if(Array.isArray(e)){let r=e.slice();for(let s=0;s<r.length;s++)n(r[s]);}else n(e);}var g=class{_value;_subscribers;_equals;_version;constructor(n,r){this._value=n,this._subscribers=null,this._equals=r??Object.is,this._version=0;}};function K(e){this.set(e(this._node._value));}function U(){return this._node._value}function Q(e,n){let r=new g(e,n?.equals),s=()=>(X(r),r._value);return s.set=t=>{_&&u&&u._tag==="computed"&&console.warn("[AkashJS] Writing to a signal inside computed() is not allowed. The write will be lost on the next evaluation."),!r._equals(r._value,t)&&(r._value=t,r._version++,_&&chunkXPLIEN2G_cjs.c()&&chunkXPLIEN2G_cjs.d("signal-update","signal.set",0),V(()=>{k(r);}));},s._node=r,s.update=K.bind(s),s.peek=U.bind(s),s}var p=class{_tag="computed";_fn;_value;_state;_subscribers;_sources;_equals;_version;_depVersions;constructor(n,r){this._fn=n,this._value=void 0,this._state=1,this._subscribers=null,this._sources=null,this._equals=r??Object.is,this._version=0,this._depVersions=null;}};function Y(e,n){let r=new p(e,n?.equals);return ()=>(u&&(r._subscribers=C(r._subscribers,u),"_sources"in u&&O(u,r)),r._state!==0&&(P(r)?E(r):r._state=0),r._value)}function P(e){if(e._depVersions===null||e._sources===null)return true;let n=e._sources,r=e._depVersions;if(n.length!==r.length)return true;for(let s=0;s<n.length;s++){let t=n[s];if(t instanceof p&&t._state===1&&E(t),t._version!==r[s])return true}return false}function j(e){if(e._sources===null||e._sources.length===0){e._depVersions=null;return}let n=e._sources,r=e._depVersions=new Array(n.length);for(let s=0;s<n.length;s++)r[s]=n[s]._version;}function O(e,n){e._sources===null?e._sources=[n]:e._sources.indexOf(n)===-1&&e._sources.push(n);}var T=new Set;function E(e,n=false){if(T.has(e))throw new Error("[AkashJS] Circular dependency detected between computed values.");if(T.add(e),R(),e._sources!==null){for(let t=0;t<e._sources.length;t++)e._sources[t]._subscribers=N(e._sources[t]._subscribers,e);e._sources=null;}let r=u;u=e;let s=_&&chunkXPLIEN2G_cjs.c()?performance.now():0;try{let t=e._fn(),i=e._value===void 0&&e._state===1,o=i||!e._equals(e._value,t);e._value=t,e._state=0,o&&e._version++,j(e),o&&!i&&(n?m(e._subscribers,l=>{l._tag==="computed"&&(l._state=1,m(l._subscribers,d=>{d._tag==="computed"&&(d._state=1);}));}):k(e));}finally{_&&s&&chunkXPLIEN2G_cjs.d("computed","computed",performance.now()-s),T.delete(e),u=r,z();}}var w=class{_tag="effect";_fn;_cleanup;_sources;_disposed;isRender;_lastSeen;constructor(n,r){this._fn=n,this._cleanup=null,this._sources=null,this._disposed=false,this.isRender=r,this._lastSeen=null;}run(){M(this);}};function Z(e,n){let r=new w(e,n?.render??false);return M(r),()=>{if(r._disposed=true,B(r),r._sources!==null){for(let s=0;s<r._sources.length;s++)r._sources[s]._subscribers=N(r._sources[s]._subscribers,r);r._sources=null;}}}function M(e){if(e._disposed)return;if(e._sources!==null&&e._sources.length>0){let t=false;for(let i=0;i<e._sources.length;i++){let o=e._sources[i];if(o instanceof p)if(o._state===1&&E(o,true),e._lastSeen!==null&&e._lastSeen.has(o)){let l=e._lastSeen.get(o);o._equals(l,o._value)||(t=true);}else t=true;else t=true;}if(!t)return}B(e);let n=e._sources!==null?e._sources.slice():null;if(e._sources!==null){for(let t=0;t<e._sources.length;t++)e._sources[t]._subscribers=N(e._sources[t]._subscribers,e);e._sources=null;}let r=u;u=e;let s=_&&chunkXPLIEN2G_cjs.c()?performance.now():0;try{let t=e._fn();typeof t=="function"&&(e._cleanup=t);}catch(t){if(n!==null){e._sources=n;for(let i=0;i<n.length;i++)n[i]._subscribers=C(n[i]._subscribers,e);}console.error("[AkashJS] Error in effect (will retry on next signal change):",t);}finally{if(_&&s&&chunkXPLIEN2G_cjs.d("effect","effect",performance.now()-s),u=r,e._sources!==null){let t=null;for(let i=0;i<e._sources.length;i++){let o=e._sources[i];o instanceof p&&(t===null&&(t=new Map),t.set(o,o._value));}e._lastSeen=t;}else e._lastSeen=null;}}function B(e){if(e._cleanup){try{e._cleanup();}catch(n){console.error("[AkashJS] Error in effect cleanup (ignored):",n);}e._cleanup=null;}}function I(e){let n=u;u=null;try{return e()}finally{u=n;}}function $(e,n,r){let s=Array.isArray(e),t=s?e:[e],i,o=true;return ()=>{let l=t.map(F=>F());if(o&&(o=false,i=l.slice(),r?.defer!==false))return;let d=i;return i=l.slice(),I(()=>n(s?l:l[0],d?s?d:d[0]:void 0))}}function X(e){u&&(e._subscribers=C(e._subscribers,u),"_sources"in u&&O(u,e));}function k(e){m(e._subscribers,n=>{n._tag==="computed"?(n._state=1,k(n)):n._tag==="effect"&&q(n);});}exports.a=V;exports.b=H;exports.c=Q;exports.d=Y;exports.e=Z;exports.f=I;exports.g=$;//# sourceMappingURL=chunk-WOZWFMOK.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-WOZWFMOK.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/scheduler.ts","../src/signals.ts"],"names":["pendingRender","pendingUser","flushing","batchDepth","reflushNeeded","MAX_EFFECT_RUNS","MAX_FLUSH_ITERATIONS","flush","runCounts","circularDetected","iterations","queue","byDepth","fx","count","scheduleEffect","batch","fn","enterBatch","exitBatch","a","b","flushSync","__DEV__","currentSubscriber","addSubscriber","slot","sub","removeSubscriber","idx","forEachSubscriber","copy","i","SignalNode","value","equals","signalUpdate","signalPeek","signal","initialValue","options","node","read","trackSubscriber","isProfiling","recordPerfEntry","notifySubscribers","ComputedNode","computed","addSource","isDirtyByVersion","recompute","deps","versions","dep","snapshotVersions","source","computingSet","skipEffectNotify","prevSubscriber","_t0","newValue","isFirst","changed","sub2","EffectNode","isRender","runEffect","effect","cleanupEffect","anyChanged","lastSeen","prevSources","result","err","untrack","prev","on","isArray","depArray","prevValues","values","d"],"mappings":"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","file":"chunk-WOZWFMOK.cjs","sourcesContent":["/**\n * Microtask-based effect scheduler with priority levels and deduplication.\n *\n * Render effects (DOM bindings) run before user effects to ensure\n * DOM is consistent before user-side effects execute.\n */\n\nexport interface ScheduledEffect {\n run(): void;\n isRender: boolean;\n /** Depth in the dependency graph (0 = root). Lower depth runs first. */\n depth?: number;\n}\n\nconst pendingRender = new Set<ScheduledEffect>();\nconst pendingUser = new Set<ScheduledEffect>();\nlet flushing = false;\nlet batchDepth = 0;\nlet flushScheduled = false;\nlet reflushNeeded = false;\n\nconst MAX_EFFECT_RUNS = 3;\nconst MAX_FLUSH_ITERATIONS = 100;\n\nfunction flush(): void {\n if (flushing) return;\n flushing = true;\n flushScheduled = false;\n\n // Fresh per-effect run counter for THIS flush — reset every time\n const runCounts = new Map<ScheduledEffect, number>();\n let circularDetected = false;\n\n // Process render effects first, then user effects.\n // Effects may enqueue more effects during flush, so loop until empty.\n let iterations = 0;\n while ((pendingRender.size > 0 || pendingUser.size > 0) && iterations < MAX_FLUSH_ITERATIONS) {\n iterations++;\n\n // Drain render effects (sorted by depth — parents before children)\n if (pendingRender.size > 0) {\n const queue = [...pendingRender].sort(byDepth);\n pendingRender.clear();\n for (const fx of queue) {\n const count = (runCounts.get(fx) ?? 0) + 1;\n runCounts.set(fx, count);\n if (count > MAX_EFFECT_RUNS) {\n circularDetected = true;\n continue; // skip this effect — it's in a cycle\n }\n fx.run();\n }\n }\n\n // Drain user effects (sorted by depth)\n if (pendingUser.size > 0) {\n const queue = [...pendingUser].sort(byDepth);\n pendingUser.clear();\n for (const fx of queue) {\n const count = (runCounts.get(fx) ?? 0) + 1;\n runCounts.set(fx, count);\n if (count > MAX_EFFECT_RUNS) {\n circularDetected = true;\n continue; // skip this effect — it's in a cycle\n }\n fx.run();\n }\n }\n\n // If all remaining effects were skipped due to cycle detection, break\n if (circularDetected && pendingRender.size === 0 && pendingUser.size === 0) {\n break;\n }\n }\n\n if (circularDetected || iterations >= MAX_FLUSH_ITERATIONS) {\n pendingRender.clear();\n pendingUser.clear();\n console.error(\n '[AkashJS] Circular dependency detected between effects. ' +\n 'Two or more effects are writing to each other\\'s dependencies. ' +\n 'The cycle has been broken after ' + iterations + ' iterations.'\n );\n }\n\n flushing = false;\n\n // If effects were scheduled during the tail end of this flush (after the\n // while loop's condition was last checked), re-flush them now.\n if (reflushNeeded) {\n reflushNeeded = false;\n if (pendingRender.size > 0 || pendingUser.size > 0) {\n flush();\n }\n }\n}\n\nexport function scheduleEffect(fx: ScheduledEffect): void {\n if (fx.isRender) {\n pendingRender.add(fx);\n } else {\n pendingUser.add(fx);\n }\n\n if (batchDepth === 0 && !flushing) {\n flush();\n } else if (flushing) {\n // Effects were added during a flush. The while loop may still pick them\n // up, but if it has already checked the queues and found them empty,\n // we need a re-flush after the current one completes.\n reflushNeeded = true;\n }\n}\n\n/**\n * Batch multiple signal writes — subscribers are notified only once\n * at the end of the batch.\n */\nexport function batch<T>(fn: () => T): T {\n batchDepth++;\n try {\n return fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) {\n flush();\n }\n }\n}\n\n/** Enter/exit batch depth — used by computed recompute to prevent mid-evaluation flush */\nexport function enterBatch(): void { batchDepth++; }\nexport function exitBatch(): void {\n batchDepth--;\n if (batchDepth === 0) flush();\n}\n\n/** Sort effects by depth (lower depth first = parents before children) */\nfunction byDepth(a: ScheduledEffect, b: ScheduledEffect): number {\n return (a.depth ?? 0) - (b.depth ?? 0);\n}\n\n/** Synchronously flush all pending effects. Useful for testing. */\nexport function flushSync(): void {\n flush();\n}\n","/**\n * Fine-grained reactivity system.\n *\n * Inspired by SolidJS/Preact Signals. Provides signal(), computed(),\n * effect(), and untrack() primitives with automatic dependency tracking\n * and glitch-free diamond dependency resolution.\n *\n * Optimized for minimal memory footprint:\n * - Class-based nodes for V8 hidden class sharing\n * - Lazy subscriber collections (null → single → array)\n * - Shared method functions (no per-instance closures for update/peek)\n * - Version-based dirty checking for computed\n * - Dev-only code stripped in production builds\n */\n\nimport { scheduleEffect, batch, enterBatch, exitBatch, type ScheduledEffect } from './scheduler.js';\n\nimport { recordPerfEntry, isProfiling } from './perf.js';\n\nconst __DEV__ = typeof process === 'undefined' || process.env?.NODE_ENV !== 'production';\n\n/** Depth counter to defer effect scheduling until all notifications complete (glitch-free) */\nlet notifyDepth = 0;\n\n// --- Tracking scope ---\n\ntype Subscriber = EffectNode | ComputedNode<any>;\ntype SubscriberSlot = Subscriber | Subscriber[] | null;\n\nlet currentSubscriber: Subscriber | null = null;\n\n// --- Subscriber collection helpers (lazy: null → single → array) ---\n\nfunction addSubscriber(slot: SubscriberSlot, sub: Subscriber): SubscriberSlot {\n if (slot === null) return sub;\n if (Array.isArray(slot)) {\n if (slot.indexOf(sub) === -1) slot.push(sub);\n return slot;\n }\n // slot is a single subscriber\n if (slot === sub) return slot;\n return [slot, sub];\n}\n\nfunction removeSubscriber(slot: SubscriberSlot, sub: Subscriber): SubscriberSlot {\n if (slot === null) return null;\n if (slot === sub) return null;\n if (Array.isArray(slot)) {\n const idx = slot.indexOf(sub);\n if (idx !== -1) {\n if (slot.length === 2) return slot[1 - idx];\n slot.splice(idx, 1);\n }\n return slot;\n }\n return slot;\n}\n\nfunction forEachSubscriber(slot: SubscriberSlot, fn: (sub: Subscriber) => void): void {\n if (slot === null) return;\n if (Array.isArray(slot)) {\n // Snapshot to avoid mutation during iteration\n const copy = slot.slice();\n for (let i = 0; i < copy.length; i++) fn(copy[i]);\n } else {\n fn(slot);\n }\n}\n\nfunction hasSubscribers(slot: SubscriberSlot): boolean {\n return slot !== null;\n}\n\n// --- Signal ---\n\nexport interface Signal<T> {\n /** Read the current value (tracks dependency if inside a reactive scope) */\n (): T;\n /** Set a new value */\n set(value: T): void;\n /** Update the value using the previous value */\n update(fn: (prev: T) => T): void;\n /** Read without tracking (no dependency registered) */\n peek(): T;\n}\n\nexport type ReadonlySignal<T> = () => T;\n\n// Strategy 1: Class-based node for V8 hidden class optimization\nclass SignalNode<T> {\n _value: T;\n _subscribers: SubscriberSlot;\n _equals: (a: T, b: T) => boolean;\n _version: number; // Strategy 5: cheap dirty checking\n\n constructor(value: T, equals?: (a: T, b: T) => boolean) {\n this._value = value;\n this._subscribers = null; // Strategy 2: lazy (not new Set())\n this._equals = equals ?? Object.is;\n this._version = 0;\n }\n}\n\n// Strategy 3: Shared method functions (not per-instance closures)\nfunction signalUpdate<T>(this: Signal<T> & { _node: SignalNode<T> }, fn: (prev: T) => T): void {\n this.set(fn(this._node._value));\n}\n\nfunction signalPeek<T>(this: { _node: SignalNode<T> }): T {\n return this._node._value;\n}\n\nexport function signal<T>(\n initialValue: T,\n options?: { equals?: (a: T, b: T) => boolean },\n): Signal<T> {\n const node = new SignalNode(initialValue, options?.equals);\n\n const read = (): T => {\n trackSubscriber(node);\n return node._value;\n };\n\n read.set = (value: T): void => {\n if (__DEV__ && currentSubscriber && (currentSubscriber as any)._tag === 'computed') {\n console.warn('[AkashJS] Writing to a signal inside computed() is not allowed. The write will be lost on the next evaluation.');\n }\n if (node._equals(node._value, value)) return;\n node._value = value;\n node._version++;\n if (__DEV__ && isProfiling()) recordPerfEntry('signal-update', 'signal.set', 0);\n batch(() => { notifySubscribers(node); });\n };\n\n // Strategy 3: bind shared functions instead of creating per-instance closures\n (read as any)._node = node;\n read.update = signalUpdate.bind(read as any);\n read.peek = signalPeek.bind(read as any);\n\n return read as Signal<T>;\n}\n\n// --- Computed ---\n\nconst enum ComputedState {\n Clean = 0,\n Dirty = 1,\n}\n\n// Strategy 1: Class-based computed node\nclass ComputedNode<T> {\n _tag: 'computed' = 'computed';\n _fn: () => T;\n _value: T | undefined;\n _state: ComputedState;\n _subscribers: SubscriberSlot;\n _sources: (SignalNode<any> | ComputedNode<any>)[] | null;\n _equals: (a: T, b: T) => boolean;\n _version: number; // Strategy 5\n\n // Strategy 5: version snapshots of dependencies at last evaluation\n _depVersions: number[] | null;\n\n constructor(fn: () => T, equals?: (a: T, b: T) => boolean) {\n this._fn = fn;\n this._value = undefined;\n this._state = ComputedState.Dirty;\n this._subscribers = null; // lazy\n this._sources = null; // lazy\n this._equals = equals ?? Object.is;\n this._version = 0;\n this._depVersions = null;\n }\n}\n\nexport function computed<T>(\n fn: () => T,\n options?: { equals?: (a: T, b: T) => boolean },\n): ReadonlySignal<T> {\n const node = new ComputedNode<T>(fn, options?.equals);\n\n const read = (): T => {\n // Track this computed as a dependency of the current subscriber\n if (currentSubscriber) {\n node._subscribers = addSubscriber(node._subscribers, currentSubscriber);\n if ('_sources' in currentSubscriber) {\n addSource(currentSubscriber, node);\n }\n }\n\n if (node._state !== ComputedState.Clean) {\n // Strategy 5: check if deps actually changed via version\n if (!isDirtyByVersion(node)) {\n node._state = ComputedState.Clean;\n } else {\n recompute(node);\n }\n }\n\n return node._value as T;\n };\n\n return read;\n}\n\n// Strategy 5: version-based dirty check\nfunction isDirtyByVersion(node: ComputedNode<any>): boolean {\n if (node._depVersions === null || node._sources === null) return true;\n const deps = node._sources;\n const versions = node._depVersions;\n if (deps.length !== versions.length) return true;\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n // If a dep is a dirty computed, recompute it first to get the real version\n if (dep instanceof ComputedNode && dep._state === ComputedState.Dirty) {\n recompute(dep);\n }\n if (dep._version !== versions[i]) return true;\n }\n return false;\n}\n\n// Snapshot dependency versions after evaluation\nfunction snapshotVersions(node: ComputedNode<any>): void {\n if (node._sources === null || node._sources.length === 0) {\n node._depVersions = null;\n return;\n }\n const deps = node._sources;\n const versions = node._depVersions = new Array(deps.length);\n for (let i = 0; i < deps.length; i++) {\n versions[i] = deps[i]._version;\n }\n}\n\n// Helper: add source to node's sources array\nfunction addSource(sub: { _sources: (SignalNode<any> | ComputedNode<any>)[] | null }, source: SignalNode<any> | ComputedNode<any>): void {\n if (sub._sources === null) {\n sub._sources = [source];\n } else if (sub._sources.indexOf(source) === -1) {\n sub._sources.push(source);\n }\n}\n\nconst computingSet = new Set<ComputedNode<unknown>>();\n\n/**\n * @param skipEffectNotify - When true, don't schedule effects in notifySubscribers.\n * Used when recompute is called from runEffect's dirty check — the effect is\n * already being processed, re-scheduling it would trigger the circular run limit.\n */\nfunction recompute<T>(node: ComputedNode<T>, skipEffectNotify = false): void {\n // Detect circular computed dependencies — only if THIS node is already being computed\n if (computingSet.has(node as ComputedNode<unknown>)) {\n throw new Error('[AkashJS] Circular dependency detected between computed values.');\n }\n computingSet.add(node as ComputedNode<unknown>);\n\n // Prevent effects from flushing while computed is evaluating.\n enterBatch();\n\n // Clean up old source subscriptions\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n\n const _t0 = __DEV__ && isProfiling() ? performance.now() : 0;\n try {\n const newValue = node._fn();\n const isFirst = node._value === undefined && node._state === ComputedState.Dirty;\n const changed = isFirst || !node._equals(node._value as T, newValue);\n node._value = newValue;\n node._state = ComputedState.Clean;\n if (changed) node._version++;\n\n // Snapshot dep versions for next dirty check\n snapshotVersions(node);\n\n // Only propagate if value actually changed (skip first computation —\n // the effect that triggered the read is already running).\n if (changed && !isFirst) {\n if (skipEffectNotify) {\n // Only mark downstream computeds as dirty — don't schedule effects.\n forEachSubscriber(node._subscribers, (sub) => {\n if (sub._tag === 'computed') {\n (sub as ComputedNode<any>)._state = ComputedState.Dirty;\n forEachSubscriber((sub as ComputedNode<any>)._subscribers, (sub2) => {\n if (sub2._tag === 'computed') (sub2 as ComputedNode<any>)._state = ComputedState.Dirty;\n });\n }\n });\n } else {\n notifySubscribers(node);\n }\n }\n } finally {\n if (__DEV__ && _t0) recordPerfEntry('computed', 'computed', performance.now() - _t0);\n computingSet.delete(node as ComputedNode<unknown>);\n currentSubscriber = prevSubscriber;\n exitBatch();\n }\n}\n\n// --- Effect ---\n\n// Strategy 1: Class-based effect node\nclass EffectNode implements ScheduledEffect {\n _tag: 'effect' = 'effect';\n _fn: () => void | (() => void);\n _cleanup: (() => void) | null;\n _sources: (SignalNode<any> | ComputedNode<any>)[] | null;\n _disposed: boolean;\n isRender: boolean;\n _lastSeen: Map<unknown, unknown> | null;\n\n constructor(fn: () => void | (() => void), isRender: boolean) {\n this._fn = fn;\n this._cleanup = null;\n this._sources = null; // lazy\n this._disposed = false;\n this.isRender = isRender;\n this._lastSeen = null;\n }\n\n run(): void {\n runEffect(this);\n }\n}\n\nexport function effect(\n fn: () => void | (() => void),\n options?: { render?: boolean },\n): () => void {\n const node = new EffectNode(fn, options?.render ?? false);\n\n // Run immediately to establish dependencies\n runEffect(node);\n\n // Return dispose function\n return () => {\n node._disposed = true;\n cleanupEffect(node);\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n };\n}\n\nfunction runEffect(node: EffectNode): void {\n if (node._disposed) return;\n\n // Before re-running, check if any dirty computed source actually changed.\n if (node._sources !== null && node._sources.length > 0) {\n let anyChanged = false;\n for (let i = 0; i < node._sources.length; i++) {\n const source = node._sources[i];\n if (source instanceof ComputedNode) {\n if (source._state === ComputedState.Dirty) {\n recompute(source, true);\n }\n if (node._lastSeen !== null && node._lastSeen.has(source)) {\n const lastSeen = node._lastSeen.get(source);\n if (!source._equals(lastSeen as never, source._value as never)) {\n anyChanged = true;\n }\n } else {\n anyChanged = true;\n }\n } else {\n anyChanged = true;\n }\n }\n if (!anyChanged) return;\n }\n\n // Clean up previous run\n cleanupEffect(node);\n\n // Save old sources in case the effect throws\n const prevSources = node._sources !== null ? node._sources.slice() : null;\n\n // Clean up old source subscriptions\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n const _t0 = __DEV__ && isProfiling() ? performance.now() : 0;\n\n try {\n const result = node._fn();\n if (typeof result === 'function') {\n node._cleanup = result;\n }\n } catch (err) {\n // Re-subscribe to previous sources so the effect can recover on next change\n if (prevSources !== null) {\n node._sources = prevSources;\n for (let i = 0; i < prevSources.length; i++) {\n prevSources[i]._subscribers = addSubscriber(prevSources[i]._subscribers, node);\n }\n }\n console.error('[AkashJS] Error in effect (will retry on next signal change):', err);\n } finally {\n if (__DEV__ && _t0) recordPerfEntry('effect', 'effect', performance.now() - _t0);\n currentSubscriber = prevSubscriber;\n\n // Cache computed values for next dirty check\n if (node._sources !== null) {\n let lastSeen: Map<unknown, unknown> | null = null;\n for (let i = 0; i < node._sources.length; i++) {\n const source = node._sources[i];\n if (source instanceof ComputedNode) {\n if (lastSeen === null) lastSeen = new Map();\n lastSeen.set(source, source._value);\n }\n }\n node._lastSeen = lastSeen;\n } else {\n node._lastSeen = null;\n }\n }\n}\n\nfunction cleanupEffect(node: EffectNode): void {\n if (node._cleanup) {\n try {\n node._cleanup();\n } catch (err) {\n console.error('[AkashJS] Error in effect cleanup (ignored):', err);\n }\n node._cleanup = null;\n }\n}\n\n// --- Untrack ---\n\n/** Execute a function without tracking any signal reads */\nexport function untrack<T>(fn: () => T): T {\n const prev = currentSubscriber;\n currentSubscriber = null;\n try {\n return fn();\n } finally {\n currentSubscriber = prev;\n }\n}\n\n// --- on() helper ---\n\n/**\n * Create an effect callback that only tracks specific signals.\n * All other signal reads inside the callback are untracked.\n *\n * ```ts\n * effect(on(url, (currentUrl, prevUrl) => {\n * fetch(currentUrl, options()); // options() not tracked\n * }));\n *\n * effect(on([url, page], ([u, p], prev) => {\n * fetch(`${u}?page=${p}`);\n * }));\n * ```\n */\nexport function on<T>(\n dep: () => T,\n fn: (value: T, prev: T | undefined) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void);\nexport function on<T extends readonly (() => unknown)[]>(\n deps: [...T],\n fn: (values: { [K in keyof T]: ReturnType<T[K]> }, prev: { [K in keyof T]: ReturnType<T[K]> } | undefined) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void);\nexport function on(\n deps: (() => any) | (() => any)[],\n fn: (values: any, prev: any) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void) {\n const isArray = Array.isArray(deps);\n const depArray = isArray ? deps : [deps];\n let prevValues: unknown[] | undefined;\n let isFirst = true;\n\n return () => {\n // Track only the specified deps\n const values = depArray.map(d => d());\n\n if (isFirst) {\n isFirst = false;\n prevValues = values.slice();\n if (options?.defer !== false) return;\n }\n\n const prev = prevValues;\n prevValues = values.slice();\n\n return untrack(() => fn(\n isArray ? values : values[0],\n prev ? (isArray ? prev : prev[0]) : undefined,\n ));\n };\n}\n\n// --- Internal helpers ---\n\nfunction trackSubscriber(\n node: SignalNode<any> | ComputedNode<any>,\n): void {\n if (currentSubscriber) {\n node._subscribers = addSubscriber(node._subscribers, currentSubscriber);\n\n if ('_sources' in currentSubscriber) {\n addSource(currentSubscriber as any, node);\n }\n }\n}\n\nfunction notifySubscribers(\n node: SignalNode<any> | ComputedNode<any>,\n): void {\n forEachSubscriber(node._subscribers, (sub) => {\n if (sub._tag === 'computed') {\n (sub as ComputedNode<any>)._state = ComputedState.Dirty;\n notifySubscribers(sub as ComputedNode<any>);\n } else if (sub._tag === 'effect') {\n scheduleEffect(sub as unknown as ScheduledEffect);\n }\n });\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkQSPRVXFV_cjs=require('./chunk-QSPRVXFV.cjs');var p=new Map,d=new Map,m=0,b=0;function y(e,n,t){p.set(e||`signal_${m++}`,{name:e,read:n,get subscriberCount(){return t()}});}function k(e,n){let t=e||`effect_${b++}`,o={name:t,runCount:0,isRender:n.isRender,sourceCount:0};return d.set(t,o),()=>{o.runCount++,o.sourceCount=n.getSourceCount();}}function c(e){let t=chunkQSPRVXFV_cjs.d()[e];if(!t)return null;let o=t.$snapshot(),s=t.$__meta,a={},l=[];if(s){for(let r of s.getterKeys)try{a[r]=t[r]();}catch{a[r]="<error>";}l.push(...s.actionKeys);}else for(let[r,f]of Object.entries(t))r.startsWith("$")||r in o||typeof f=="function"&&l.push(r);return {$id:e,state:o,getters:a,actions:l,subscriberCount:0}}var u=new Map,g=new Map;function S(){return {stores(){return Object.keys(chunkQSPRVXFV_cjs.d())},store(e){return c(e)},storeSnapshots(){let e={};for(let n of Object.keys(chunkQSPRVXFV_cjs.d())){let t=c(n);t&&(e[n]=t);}return e},signals(){return [...p.values()].map(e=>({name:e.name,value:e.read(),subscribers:e.subscriberCount}))},effects(){return [...d.values()].map(e=>({name:e.name,runs:e.runCount,isRender:e.isRender,sources:e.sourceCount}))},version(){return {runtime:"0.2.7"}},log(e){if(e){let n=c(e);n?(console.group(`\u{1F50D} Store: ${e}`),console.log("State:",n.state),console.log("Getters:",n.getters),console.log("Actions:",n.actions),console.groupEnd()):console.warn(`Store "${e}" not found. Available:`,Object.keys(chunkQSPRVXFV_cjs.d()));}else {let n=Object.keys(chunkQSPRVXFV_cjs.d());console.group("\u{1F50D} AkashJS Stores");for(let t of n){let o=c(t);o&&(console.group(t),console.log("State:",o.state),console.log("Getters:",o.getters),console.groupEnd());}console.groupEnd();}},startRecording(e){let n=chunkQSPRVXFV_cjs.d()[e];if(!n){console.warn(`Store "${e}" not found.`);return}let t=[];t.push({timestamp:Date.now(),state:n.$snapshot()});let o=n.$subscribe(s=>{t.push({timestamp:Date.now(),state:{...s}});});u.set(e,t),g.set(e,o),console.log(`\u23FA Recording store "${e}". Call __AKASH_DEVTOOLS__.stopRecording("${e}") to view history.`);},stopRecording(e){let n=g.get(e);n&&n(),g.delete(e);let t=u.get(e)??[];return u.delete(e),console.log(`\u23F9 Stopped recording "${e}". ${t.length} snapshots captured.`),console.table(t.map((o,s)=>({"#":s,time:new Date(o.timestamp).toISOString().slice(11,23),state:JSON.stringify(o.state)}))),t}}}function h(e){let n=S();typeof globalThis<"u"&&(globalThis.__AKASH_DEVTOOLS__=n,console.log("%c\u{1F527} AkashJS DevTools installed. Access via __AKASH_DEVTOOLS__ in console.","color: #7c3aed; font-weight: bold;"),console.log(" .stores() \u2014 list stores"),console.log(' .store("id") \u2014 inspect store'),console.log(" .log() \u2014 pretty-print all stores"),console.log(' .log("id") \u2014 pretty-print one store'),console.log(' .startRecording("id") \u2014 record state changes'),console.log(' .stopRecording("id") \u2014 view recorded history'),console.log(" .signals() \u2014 list tracked signals"),console.log(" .effects() \u2014 list tracked effects")),e?.overlay&&import('./devtools-overlay-WJGSIB4N.cjs').then(t=>t.mountDevtoolsOverlay());}exports.a=y;exports.b=k;exports.c=h;//# sourceMappingURL=chunk-WTDTVWCQ.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-WTDTVWCQ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/devtools.ts"],"names":["trackedSignals","trackedEffects","signalCounter","effectCounter","__trackSignal","name","read","getSubscriberCount","__trackEffect","meta","id","entry","inspectStore","store","__getStoreInstances","snapshot","getters","actions","key","value","recordings","recordingDisposers","createDevToolsAPI","result","snap","s","storeId","stores","history","unsubscribe","state","disposer","h","i","installDevtools","options","api","m"],"mappings":"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","file":"chunk-WTDTVWCQ.cjs","sourcesContent":["/**\n * AkashJS DevTools — Console-based debugging utilities.\n *\n * Call `installDevtools()` in development to expose `__AKASH_DEVTOOLS__`\n * on the global object. Access it from the browser console:\n *\n * ```js\n * __AKASH_DEVTOOLS__.stores() // list all stores\n * __AKASH_DEVTOOLS__.store('cart') // inspect a store\n * __AKASH_DEVTOOLS__.signals() // list tracked signals\n * __AKASH_DEVTOOLS__.effects() // list active effects\n * ```\n */\n\nimport { __getStoreInstances } from './store.js';\n\ndeclare const __RUNTIME_VERSION__: string;\nimport type { Store } from './store.js';\n\n// --- Signal/Effect tracking ---\n\ninterface TrackedSignal {\n name: string;\n read: () => unknown;\n subscriberCount: number;\n}\n\ninterface TrackedEffect {\n name: string;\n runCount: number;\n isRender: boolean;\n sourceCount: number;\n}\n\nconst trackedSignals = new Map<string, TrackedSignal>();\nconst trackedEffects = new Map<string, TrackedEffect>();\nlet signalCounter = 0;\nlet effectCounter = 0;\n\n/** Register a signal for devtools tracking (call in dev mode) */\nexport function __trackSignal(name: string, read: () => unknown, getSubscriberCount: () => number): void {\n trackedSignals.set(name || `signal_${signalCounter++}`, {\n name,\n read,\n get subscriberCount() { return getSubscriberCount(); },\n } as TrackedSignal);\n}\n\n/** Register an effect for devtools tracking */\nexport function __trackEffect(name: string, meta: { isRender: boolean; getSourceCount: () => number }): () => void {\n const id = name || `effect_${effectCounter++}`;\n const entry: TrackedEffect = {\n name: id,\n runCount: 0,\n isRender: meta.isRender,\n sourceCount: 0,\n };\n trackedEffects.set(id, entry);\n\n // Return a function to increment run count (called each time effect runs)\n return () => {\n entry.runCount++;\n entry.sourceCount = meta.getSourceCount();\n };\n}\n\n// --- Store inspection ---\n\ninterface StoreSnapshot {\n $id: string;\n state: Record<string, unknown>;\n getters: Record<string, unknown>;\n actions: string[];\n subscriberCount: number;\n}\n\nfunction inspectStore(id: string): StoreSnapshot | null {\n const instances = __getStoreInstances();\n const store = instances[id];\n if (!store) return null;\n\n const snapshot = store.$snapshot();\n const meta = (store as any).$__meta as { stateKeys: string[]; getterKeys: string[]; actionKeys: string[] } | undefined;\n const getters: Record<string, unknown> = {};\n const actions: string[] = [];\n\n if (meta) {\n // Use metadata from store creation — no function calling needed\n for (const key of meta.getterKeys) {\n try { getters[key] = (store as any)[key](); } catch { getters[key] = '<error>'; }\n }\n actions.push(...meta.actionKeys);\n } else {\n // Fallback for stores without metadata\n for (const [key, value] of Object.entries(store)) {\n if (key.startsWith('$') || key in snapshot) continue;\n if (typeof value === 'function') actions.push(key);\n }\n }\n\n return {\n $id: id,\n state: snapshot,\n getters,\n actions,\n subscriberCount: 0,\n };\n}\n\n// --- DevTools API ---\n\nexport interface DevToolsAPI {\n /** List all registered stores */\n stores(): string[];\n /** Inspect a specific store by ID */\n store(id: string): StoreSnapshot | null;\n /** Get all store snapshots */\n storeSnapshots(): Record<string, StoreSnapshot>;\n /** List tracked signals with current values */\n signals(): Array<{ name: string; value: unknown; subscribers: number }>;\n /** List tracked effects with run counts */\n effects(): Array<{ name: string; runs: number; isRender: boolean; sources: number }>;\n /** Get framework version info */\n version(): { runtime: string };\n /** Pretty-print store state to console */\n log(storeId?: string): void;\n /** Record store state history for time-travel */\n startRecording(storeId: string): void;\n /** Stop recording and return history */\n stopRecording(storeId: string): Array<{ timestamp: number; state: Record<string, unknown>; action?: string }>;\n}\n\nconst recordings = new Map<string, Array<{ timestamp: number; state: Record<string, unknown>; action?: string }>>();\nconst recordingDisposers = new Map<string, () => void>();\n\nfunction createDevToolsAPI(): DevToolsAPI {\n return {\n stores() {\n return Object.keys(__getStoreInstances());\n },\n\n store(id: string) {\n return inspectStore(id);\n },\n\n storeSnapshots() {\n const result: Record<string, StoreSnapshot> = {};\n for (const id of Object.keys(__getStoreInstances())) {\n const snap = inspectStore(id);\n if (snap) result[id] = snap;\n }\n return result;\n },\n\n signals() {\n return [...trackedSignals.values()].map(s => ({\n name: s.name,\n value: s.read(),\n subscribers: s.subscriberCount,\n }));\n },\n\n effects() {\n return [...trackedEffects.values()].map(e => ({\n name: e.name,\n runs: e.runCount,\n isRender: e.isRender,\n sources: e.sourceCount,\n }));\n },\n\n version() {\n return { runtime: __RUNTIME_VERSION__ };\n },\n\n log(storeId?: string) {\n if (storeId) {\n const snap = inspectStore(storeId);\n if (snap) {\n console.group(`🔍 Store: ${storeId}`);\n console.log('State:', snap.state);\n console.log('Getters:', snap.getters);\n console.log('Actions:', snap.actions);\n console.groupEnd();\n } else {\n console.warn(`Store \"${storeId}\" not found. Available:`, Object.keys(__getStoreInstances()));\n }\n } else {\n const stores = Object.keys(__getStoreInstances());\n console.group('🔍 AkashJS Stores');\n for (const id of stores) {\n const snap = inspectStore(id);\n if (snap) {\n console.group(id);\n console.log('State:', snap.state);\n console.log('Getters:', snap.getters);\n console.groupEnd();\n }\n }\n console.groupEnd();\n }\n },\n\n startRecording(storeId: string) {\n const store = __getStoreInstances()[storeId];\n if (!store) {\n console.warn(`Store \"${storeId}\" not found.`);\n return;\n }\n\n const history: Array<{ timestamp: number; state: Record<string, unknown>; action?: string }> = [];\n // Record initial state\n history.push({ timestamp: Date.now(), state: store.$snapshot() });\n\n const unsubscribe = store.$subscribe((state) => {\n history.push({ timestamp: Date.now(), state: { ...state } });\n });\n\n recordings.set(storeId, history);\n recordingDisposers.set(storeId, unsubscribe);\n console.log(`⏺ Recording store \"${storeId}\". Call __AKASH_DEVTOOLS__.stopRecording(\"${storeId}\") to view history.`);\n },\n\n stopRecording(storeId: string) {\n const disposer = recordingDisposers.get(storeId);\n if (disposer) disposer();\n recordingDisposers.delete(storeId);\n\n const history = recordings.get(storeId) ?? [];\n recordings.delete(storeId);\n\n console.log(`⏹ Stopped recording \"${storeId}\". ${history.length} snapshots captured.`);\n console.table(history.map((h, i) => ({\n '#': i,\n time: new Date(h.timestamp).toISOString().slice(11, 23),\n state: JSON.stringify(h.state),\n })));\n\n return history;\n },\n };\n}\n\n/**\n * Install AkashJS DevTools on the global object.\n * Call this in your app's entry point during development:\n *\n * ```ts\n * import { installDevtools } from '@akashjs/runtime';\n * if (import.meta.env.DEV) installDevtools();\n * ```\n */\nexport interface DevToolsOptions {\n /** Enable the visual overlay panel (toggle with Ctrl+Shift+D) */\n overlay?: boolean;\n}\n\nexport function installDevtools(options?: DevToolsOptions): void {\n const api = createDevToolsAPI();\n\n if (typeof globalThis !== 'undefined') {\n (globalThis as any).__AKASH_DEVTOOLS__ = api;\n console.log(\n '%c🔧 AkashJS DevTools installed. Access via __AKASH_DEVTOOLS__ in console.',\n 'color: #7c3aed; font-weight: bold;'\n );\n console.log(' .stores() — list stores');\n console.log(' .store(\"id\") — inspect store');\n console.log(' .log() — pretty-print all stores');\n console.log(' .log(\"id\") — pretty-print one store');\n console.log(' .startRecording(\"id\") — record state changes');\n console.log(' .stopRecording(\"id\") — view recorded history');\n console.log(' .signals() — list tracked signals');\n console.log(' .effects() — list tracked effects');\n }\n\n // Mount visual overlay if requested\n if (options?.overlay) {\n import('./devtools-overlay.js').then(m => m.mountDevtoolsOverlay());\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {s,p,l}from'./chunk-KE7BJTCD.js';var i=s(n=>{let t=null,o=null;function u(){let e=n.props.target;return e?typeof e=="string"?document.querySelector(e)??document.body:e:document.body}return p(()=>{o&&t&&t.removeChild(o);}),()=>{t=u();let e=n.children();return o=l(e),t.appendChild(o),document.createComment("portal")}});export{i as a};//# sourceMappingURL=chunk-WZ5ULION.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-WZ5ULION.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/portal.ts"],"names":["Portal","defineComponent","ctx","container","mountedNode","getTarget","target","onUnmount","content","nodeToDOM"],"mappings":"wCA8BO,IAAMA,CAAAA,CAASC,CAAAA,CAA8BC,CAAAA,EAAQ,CAC1D,IAAIC,CAAAA,CAAgC,IAAA,CAChCC,CAAAA,CAA2B,IAAA,CAE/B,SAASC,CAAAA,EAAyB,CAChC,IAAMC,EAASJ,CAAAA,CAAI,KAAA,CAAM,MAAA,CACzB,OAAKI,CAAAA,CACD,OAAOA,CAAAA,EAAW,QAAA,CACb,SAAS,aAAA,CAA2BA,CAAM,CAAA,EAAK,QAAA,CAAS,IAAA,CAE1DA,CAAAA,CAJa,QAAA,CAAS,IAK/B,CAEA,OAAAC,CAAAA,CAAU,IAAM,CACVH,CAAAA,EAAeD,CAAAA,EACjBA,CAAAA,CAAU,WAAA,CAAYC,CAAW,EAErC,CAAC,CAAA,CAEM,IAAM,CACXD,CAAAA,CAAYE,CAAAA,EAAU,CACtB,IAAMG,CAAAA,CAAUN,CAAAA,CAAI,QAAA,EAAS,CAC7B,OAAAE,CAAAA,CAAcK,CAAAA,CAAUD,CAAO,EAC/BL,CAAAA,CAAU,WAAA,CAAYC,CAAW,CAAA,CAG1B,QAAA,CAAS,aAAA,CAAc,QAAQ,CACxC,CACF,CAAC","file":"chunk-WZ5ULION.js","sourcesContent":["/**\n * <Portal> component.\n *\n * Renders children into a different DOM node, outside the\n * component tree. Essential for modals, tooltips, toasts,\n * dropdowns, and overlays.\n *\n * ```html\n * <Portal target=\"body\">\n * <div class=\"modal\">Modal content</div>\n * </Portal>\n *\n * <Portal target=\"#tooltip-container\">\n * <Tooltip />\n * </Portal>\n * ```\n */\n\nimport { defineComponent, onUnmount } from './component.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\nexport interface PortalProps {\n /** CSS selector or HTMLElement to render into (default: document.body) */\n target?: string | HTMLElement;\n}\n\n/**\n * <Portal> — render children into a different DOM location.\n */\nexport const Portal = defineComponent<PortalProps>((ctx) => {\n let container: HTMLElement | null = null;\n let mountedNode: Node | null = null;\n\n function getTarget(): HTMLElement {\n const target = ctx.props.target;\n if (!target) return document.body;\n if (typeof target === 'string') {\n return document.querySelector<HTMLElement>(target) ?? document.body;\n }\n return target;\n }\n\n onUnmount(() => {\n if (mountedNode && container) {\n container.removeChild(mountedNode);\n }\n });\n\n return () => {\n container = getTarget();\n const content = ctx.children();\n mountedNode = nodeToDOM(content);\n container.appendChild(mountedNode);\n\n // Return a placeholder comment in the original tree\n return document.createComment('portal');\n };\n});\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';var f=false,u=[],l=0;function g(){f=true,u=[],l=performance.now();}function P(){f=false;let r=performance.now();return {entries:[...u],totalDuration:r-l,startTime:l,endTime:r}}function E(){return f}function m(r,e,t){f&&u.push({type:r,name:e,duration:t,timestamp:performance.now()});}function p(r){let e=r.entries.filter(n=>n.type==="render"),t=r.entries.filter(n=>n.type==="effect"),s=r.entries.filter(n=>n.type==="signal-update"),o=r.entries.filter(n=>n.type==="computed"),c=n=>n.length>0?n.reduce((a,i)=>a+i.duration,0)/n.length:0,d=n=>n.length>0?n.reduce((a,i)=>i.duration>a.duration?i:a):null;return {totalRenders:e.length,totalEffects:t.length,totalSignalUpdates:s.length,totalComputedEvals:o.length,avgRenderTime:c(e),avgEffectTime:c(t),slowestRender:d(e),slowestEffect:d(t)}}function w(r,e){let t=performance.now(),s=e(),o=performance.now()-t;return m("render",r,o),{result:s,duration:o}}async function y(r,e){let t=performance.now(),s=await e(),o=performance.now()-t;return m("render",r,o),{result:s,duration:o}}function T(r){let e=0,t=0;return {start(){e=performance.now();},stop(){t=performance.now()-e,m("render",r,t);},get duration(){return t}}}function x(r){let e=p(r),t=`
|
|
2
|
+
Performance Profile
|
|
3
|
+
`;return t+=" "+"\u2500".repeat(50)+`
|
|
4
|
+
`,t+=` Duration: ${r.totalDuration.toFixed(1)} ms
|
|
5
|
+
`,t+=` Renders: ${e.totalRenders} (avg ${e.avgRenderTime.toFixed(2)} ms)
|
|
6
|
+
`,t+=` Effects: ${e.totalEffects} (avg ${e.avgEffectTime.toFixed(2)} ms)
|
|
7
|
+
`,t+=` Signal updates: ${e.totalSignalUpdates}
|
|
8
|
+
`,t+=` Computed evals: ${e.totalComputedEvals}
|
|
9
|
+
`,e.slowestRender&&(t+=` Slowest render: ${e.slowestRender.name} (${e.slowestRender.duration.toFixed(2)} ms)
|
|
10
|
+
`),e.slowestEffect&&(t+=` Slowest effect: ${e.slowestEffect.name} (${e.slowestEffect.duration.toFixed(2)} ms)
|
|
11
|
+
`),t+=" "+"\u2500".repeat(50)+`
|
|
12
|
+
`,t}exports.a=g;exports.b=P;exports.c=E;exports.d=m;exports.e=p;exports.f=w;exports.g=y;exports.h=T;exports.i=x;//# sourceMappingURL=chunk-XPLIEN2G.cjs.map
|
|
13
|
+
//# sourceMappingURL=chunk-XPLIEN2G.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/perf.ts"],"names":["profiling","entries","profileStart","startProfiling","stopProfiling","endTime","isProfiling","recordPerfEntry","type","name","duration","getProfileSummary","profile","renders","e","effects","signalUpdates","computeds","avg","arr","s","slowest","measureSync","fn","start","result","measureAsync","createTimer","startTime","dur","formatProfile","summary","out"],"mappings":"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","file":"chunk-XPLIEN2G.cjs","sourcesContent":["/**\n * Performance profiling utilities.\n *\n * Measure component render times, signal propagation, and\n * effect execution for performance debugging.\n *\n * ```ts\n * import { startProfiling, stopProfiling, getProfile } from '@akashjs/runtime';\n *\n * startProfiling();\n * // ... do stuff ...\n * stopProfiling();\n * console.table(getProfile().entries);\n * ```\n */\n\n// --- Types ---\n\nexport interface PerfEntry {\n type: 'render' | 'effect' | 'signal-update' | 'computed';\n name: string;\n duration: number;\n timestamp: number;\n}\n\nexport interface PerfProfile {\n entries: PerfEntry[];\n totalDuration: number;\n startTime: number;\n endTime: number;\n}\n\nexport interface PerfSummary {\n totalRenders: number;\n totalEffects: number;\n totalSignalUpdates: number;\n totalComputedEvals: number;\n avgRenderTime: number;\n avgEffectTime: number;\n slowestRender: PerfEntry | null;\n slowestEffect: PerfEntry | null;\n}\n\n// --- Profiling state ---\n\nlet profiling = false;\nlet entries: PerfEntry[] = [];\nlet profileStart = 0;\n\n// --- Public API ---\n\n/**\n * Start profiling. Clears previous data.\n */\nexport function startProfiling(): void {\n profiling = true;\n entries = [];\n profileStart = performance.now();\n}\n\n/**\n * Stop profiling.\n */\nexport function stopProfiling(): PerfProfile {\n profiling = false;\n const endTime = performance.now();\n\n return {\n entries: [...entries],\n totalDuration: endTime - profileStart,\n startTime: profileStart,\n endTime,\n };\n}\n\n/**\n * Check if profiling is active.\n */\nexport function isProfiling(): boolean {\n return profiling;\n}\n\n/**\n * Record a performance entry (called internally by the framework).\n */\nexport function recordPerfEntry(\n type: PerfEntry['type'],\n name: string,\n duration: number,\n): void {\n if (!profiling) return;\n entries.push({\n type,\n name,\n duration,\n timestamp: performance.now(),\n });\n}\n\n/**\n * Get a summary of the profiling data.\n */\nexport function getProfileSummary(profile: PerfProfile): PerfSummary {\n const renders = profile.entries.filter((e) => e.type === 'render');\n const effects = profile.entries.filter((e) => e.type === 'effect');\n const signalUpdates = profile.entries.filter((e) => e.type === 'signal-update');\n const computeds = profile.entries.filter((e) => e.type === 'computed');\n\n const avg = (arr: PerfEntry[]) =>\n arr.length > 0 ? arr.reduce((s, e) => s + e.duration, 0) / arr.length : 0;\n\n const slowest = (arr: PerfEntry[]) =>\n arr.length > 0 ? arr.reduce((s, e) => (e.duration > s.duration ? e : s)) : null;\n\n return {\n totalRenders: renders.length,\n totalEffects: effects.length,\n totalSignalUpdates: signalUpdates.length,\n totalComputedEvals: computeds.length,\n avgRenderTime: avg(renders),\n avgEffectTime: avg(effects),\n slowestRender: slowest(renders),\n slowestEffect: slowest(effects),\n };\n}\n\n// --- Measurement helpers ---\n\n/**\n * Measure the time to execute a function.\n *\n * ```ts\n * const { result, duration } = measureSync('my-operation', () => expensiveWork());\n * ```\n */\nexport function measureSync<T>(name: string, fn: () => T): { result: T; duration: number } {\n const start = performance.now();\n const result = fn();\n const duration = performance.now() - start;\n recordPerfEntry('render', name, duration);\n return { result, duration };\n}\n\n/**\n * Measure the time to execute an async function.\n */\nexport async function measureAsync<T>(\n name: string,\n fn: () => Promise<T>,\n): Promise<{ result: T; duration: number }> {\n const start = performance.now();\n const result = await fn();\n const duration = performance.now() - start;\n recordPerfEntry('render', name, duration);\n return { result, duration };\n}\n\n/**\n * Create a named timer for manual start/stop measurement.\n *\n * ```ts\n * const timer = createTimer('data-fetch');\n * timer.start();\n * await fetch(...);\n * timer.stop(); // records the entry\n * timer.duration; // ms\n * ```\n */\nexport function createTimer(name: string) {\n let startTime = 0;\n let dur = 0;\n\n return {\n start() { startTime = performance.now(); },\n stop() {\n dur = performance.now() - startTime;\n recordPerfEntry('render', name, dur);\n },\n get duration() { return dur; },\n };\n}\n\n/**\n * Format a profile for console output.\n */\nexport function formatProfile(profile: PerfProfile): string {\n const summary = getProfileSummary(profile);\n let out = '\\n Performance Profile\\n';\n out += ' ' + '─'.repeat(50) + '\\n';\n out += ` Duration: ${profile.totalDuration.toFixed(1)} ms\\n`;\n out += ` Renders: ${summary.totalRenders} (avg ${summary.avgRenderTime.toFixed(2)} ms)\\n`;\n out += ` Effects: ${summary.totalEffects} (avg ${summary.avgEffectTime.toFixed(2)} ms)\\n`;\n out += ` Signal updates: ${summary.totalSignalUpdates}\\n`;\n out += ` Computed evals: ${summary.totalComputedEvals}\\n`;\n\n if (summary.slowestRender) {\n out += ` Slowest render: ${summary.slowestRender.name} (${summary.slowestRender.duration.toFixed(2)} ms)\\n`;\n }\n if (summary.slowestEffect) {\n out += ` Slowest effect: ${summary.slowestEffect.name} (${summary.slowestEffect.duration.toFixed(2)} ms)\\n`;\n }\n\n out += ' ' + '─'.repeat(50) + '\\n';\n return out;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkIQGSDFBI_cjs=require('./chunk-IQGSDFBI.cjs'),chunkPPNEAFKE_cjs=require('./chunk-PPNEAFKE.cjs'),chunkWOZWFMOK_cjs=require('./chunk-WOZWFMOK.cjs');function D(e,n){let o=document.createElement(e);if(n)for(let[c,a]of Object.entries(n))L(o,c,a);return o}function R(e){return document.createTextNode(e)}function B(e){let n=document.createElement("template");return n.innerHTML=e,n.content.cloneNode(true)}function L(e,n,o){if(n==="class"||n==="className")e.className=o;else if(n==="style"&&typeof o=="object"&&o!==null)Object.assign(e.style,o);else if(n==="innerHTML")e.innerHTML=o;else if(n!=="ref")if(n.startsWith("on")){let c=n.slice(2).toLowerCase();e.addEventListener(c,o);}else n in e?e[n]=o:o===false||o==null?e.removeAttribute(n):e.setAttribute(n,o===true?"":String(o));}function _(e,n){return chunkWOZWFMOK_cjs.e(()=>{e.textContent=String(n());},{render:true})}function O(e,n,o){return chunkWOZWFMOK_cjs.e(()=>{L(e,n,o());},{render:true})}function j(e,n){return chunkWOZWFMOK_cjs.e(()=>{e.style.display=n()?"":"none";},{render:true})}function b(e=""){return document.createComment(e)}function S(e,n,o,c,a){let s=null,h=chunkIQGSDFBI_cjs.c(),k=chunkWOZWFMOK_cjs.e(()=>{let i=o();if(s){for(let l of s.nodes)try{l.parentNode?.removeChild(l);}catch{}s.dispose?.(),s=null;}let d=i?c:a,m=n.parentNode;if(!m&&s?.nodes[0]?.parentNode&&(m=s.nodes[0].parentNode),d&&m){let l=h?chunkIQGSDFBI_cjs.d(h,d):d(),t=l instanceof DocumentFragment?Array.from(l.childNodes):[l];for(let r of t)m.insertBefore(r,n);s={nodes:t,dispose:null};}},{render:true});return ()=>{if(k(),s){for(let i of s.nodes)try{i.parentNode?.removeChild(i);}catch{}s.dispose?.();}}}function H(e,n,o,c,a){let s=[],h=chunkIQGSDFBI_cjs.c(),k=chunkWOZWFMOK_cjs.e(()=>{let i=o(),d=[],m=new Map;for(let t of s)m.set(t.key,t);for(let t=0;t<i.length;t++){let r=i[t],u=c(r,t),f=m.get(u);if(f){m.delete(u);let T=f.nodes[0];if(T&&!T.parentNode){let x=h?chunkIQGSDFBI_cjs.d(h,()=>a(r,t)):a(r,t),P=x instanceof DocumentFragment?Array.from(x.childNodes):[x];d.push({key:u,value:r,nodes:P,dispose:null});}else f.value=r,d.push(f);}else {let T=h?chunkIQGSDFBI_cjs.d(h,()=>a(r,t)):a(r,t),x=T instanceof DocumentFragment?Array.from(T.childNodes):[T];d.push({key:u,value:r,nodes:x,dispose:null});}}for(let t of m.values()){for(let r of t.nodes)r.parentNode&&r.parentNode.removeChild(r);t.dispose?.();}let l=n.parentNode;if(l)for(let t of d)for(let r of t.nodes)l.insertBefore(r,n);else {let t=null;for(let r of s)if(r.nodes[0]?.parentNode){t=r.nodes[0].parentNode;break}if(t)for(let r of d)for(let u of r.nodes)t.appendChild(u);}s=d;},{render:true});return ()=>{k();for(let i of s){for(let d of i.nodes)d.parentNode&&d.parentNode.removeChild(d);i.dispose?.();}s=[];}}function I(e){let n=b("show"),o=document.createDocumentFragment();o.appendChild(n);let c=typeof e.when=="function"?e.when:()=>e.when,a;return S(o,n,()=>(a=c(),!!a),()=>N(e.children(a)),e.fallback?()=>N(e.fallback()):void 0),o}function K(e){let n=b("for"),o=document.createDocumentFragment();o.appendChild(n);let c=typeof e.each=="function"?e.each:()=>e.each;return H(o,n,c,e.key,(a,s)=>N(e.children(a,s))),o}function N(e){if(e==null||typeof e=="boolean")return document.createTextNode("");if(typeof e=="string"||typeof e=="number")return document.createTextNode(String(e));if(e instanceof Node)return e;if(Array.isArray(e)){let n=document.createDocumentFragment();for(let o of e)n.appendChild(N(o));return n}return document.createTextNode(String(e))}function V(e,n,o){let c=N(n);o?e.insertBefore(c,o):e.appendChild(c);}function J(e){return e.__reactive=true,e}var p=null;function Q(e){if(!p)throw chunkPPNEAFKE_cjs.b("AK0020");p.mount.push(e);}function X(e){if(!p)throw chunkPPNEAFKE_cjs.b("AK0021");p.unmount.push(e);}function Z(e){if(!p)throw chunkPPNEAFKE_cjs.b("AK0022");p.error.push(e);}function $(e){return {current:e}}function ee(e){let n=o=>{let{children:c,...a}=o??{},k={props:a,children:typeof c=="function"?c:()=>c??null},i={mount:[],unmount:[],error:[]},d=p;p=i;let m=chunkIQGSDFBI_cjs.c(),l=chunkIQGSDFBI_cjs.a(m),t,r;try{r=chunkWOZWFMOK_cjs.f(()=>{if(t=e(k),typeof t!="function")throw chunkPPNEAFKE_cjs.b("AK0040");let u=t();return N(u)});}catch(u){if(chunkIQGSDFBI_cjs.b(l),p=d,i.error.length>0){for(let f of i.error)f(u instanceof Error?u:new Error(String(u)));return document.createComment("error")}throw u}return chunkIQGSDFBI_cjs.b(l),p=d,i.mount.length>0&&queueMicrotask(()=>{for(let u of i.mount)try{let f=u();typeof f=="function"&&i.unmount.push(f);}catch(f){for(let T of i.error)T(f instanceof Error?f:new Error(String(f)));}}),r};return n._akash=true,n}exports.a=D;exports.b=R;exports.c=B;exports.d=L;exports.e=_;exports.f=O;exports.g=j;exports.h=S;exports.i=H;exports.j=I;exports.k=K;exports.l=N;exports.m=V;exports.n=J;exports.o=Q;exports.p=X;exports.q=Z;exports.r=$;exports.s=ee;//# sourceMappingURL=chunk-XWVNLE2W.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-XWVNLE2W.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dom.ts","../src/component.ts"],"names":["createElement","tag","attrs","el","key","value","setProperty","createText","cloneTemplate","html","template","event","bindText","node","fn","effect","bindProperty","bindVisible","createAnchor","label","renderConditional","parent","anchor","condition","trueBranch","falseBranch","current","scope","getCurrentScope","dispose","branch","liveParent","fragment","runInScope","nodes","renderList","items","keyFn","renderItem","currentItems","newData","newItems","oldMap","item","i","data","existing","firstNode","realParent","Show","props","container","getWhen","whenValue","nodeToDOM","For","getEach","index","child","insert","domNode","__getter","currentHooks","onMount","akashError","onUnmount","onError","ref","initialValue","defineComponent","setup","component","rawProps","childrenProp","restProps","ctx","hooks","prevHooks","parentScope","pushScope","renderFn","untrack","rendered","err","popScope","handler","mountFn","cleanup"],"mappings":"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","file":"chunk-XWVNLE2W.cjs","sourcesContent":["/**\n * Direct DOM rendering runtime.\n *\n * No virtual DOM. The compiler generates calls to these helpers.\n * Signal reads inside templates become fine-grained effects that\n * update only the specific DOM node that changed.\n */\n\nimport { effect } from './signals.js';\nimport { getCurrentScope, runInScope } from './context.js';\nimport type { AkashNode } from './types.js';\n\n// --- DOM creation helpers (used by compiler output) ---\n\n/** Create an element and optionally set static attributes */\nexport function createElement(\n tag: string,\n attrs?: Record<string, unknown>,\n): HTMLElement {\n const el = document.createElement(tag);\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n setProperty(el, key, value);\n }\n }\n return el;\n}\n\n/** Create a text node */\nexport function createText(value: string): Text {\n return document.createTextNode(value);\n}\n\n/** Clone a template element for static structure */\nexport function cloneTemplate(html: string): DocumentFragment {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template.content.cloneNode(true) as DocumentFragment;\n}\n\n// --- Property/attribute setting ---\n\nexport function setProperty(el: HTMLElement, key: string, value: unknown): void {\n if (key === 'class' || key === 'className') {\n el.className = value as string;\n } else if (key === 'style' && typeof value === 'object' && value !== null) {\n Object.assign(el.style, value);\n } else if (key === 'innerHTML') {\n el.innerHTML = value as string;\n } else if (key === 'ref') {\n // Handled separately by component system\n } else if (key.startsWith('on')) {\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value as EventListener);\n } else if (key in el) {\n (el as unknown as Record<string, unknown>)[key] = value;\n } else if (value === false || value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n}\n\n// --- Reactive binding (used by compiler for dynamic expressions) ---\n\n/** Bind a reactive expression to a text node's content */\nexport function bindText(node: Text, fn: () => unknown): () => void {\n return effect(\n () => {\n node.textContent = String(fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's attribute/property */\nexport function bindProperty(\n el: HTMLElement,\n key: string,\n fn: () => unknown,\n): () => void {\n return effect(\n () => {\n setProperty(el, key, fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's visibility (display) */\nexport function bindVisible(el: HTMLElement, fn: () => boolean): () => void {\n return effect(\n () => {\n el.style.display = fn() ? '' : 'none';\n },\n { render: true },\n );\n}\n\n// --- Conditional rendering ---\n\n/** Anchor node — comment for normal DOM, hidden element for table contexts */\ntype Anchor = Comment | HTMLElement;\n\n/** Table elements where comment nodes get relocated by the browser */\nconst TABLE_TAGS = new Set(['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR']);\n\nfunction createAnchor(label = ''): Anchor {\n return document.createComment(label);\n}\n\n/**\n * Create a table-safe anchor. Browsers relocate comment nodes inside\n * table elements, breaking anchor-based insertion. Use a hidden element instead.\n */\nfunction createTableSafeAnchor(parent: Node): Anchor {\n if (parent instanceof HTMLElement && TABLE_TAGS.has(parent.tagName)) {\n const tag = parent.tagName === 'TR' ? 'td' : 'tr';\n const el = document.createElement(tag);\n el.style.display = 'none';\n return el;\n }\n return document.createComment('');\n}\n\ninterface ConditionalBlock {\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a conditional block. Swaps DOM fragments based on a reactive\n * condition. Used by the compiler for :if directives and <Show>.\n */\nexport function renderConditional(\n parent: Node,\n anchor: Node,\n condition: () => boolean,\n trueBranch: () => Node,\n falseBranch?: () => Node,\n): () => void {\n let current: ConditionalBlock | null = null;\n\n // Capture scope so children created in branches inherit provide/inject context\n const scope = getCurrentScope();\n\n const dispose = effect(\n () => {\n const value = condition();\n\n // Remove old nodes\n if (current) {\n for (const node of current.nodes) {\n try { node.parentNode?.removeChild(node); } catch {}\n }\n current.dispose?.();\n current = null;\n }\n\n // Insert new nodes — use anchor.parentNode since the anchor may have\n // moved from the initial DocumentFragment into the real DOM.\n // In table contexts, the browser may relocate comment anchors.\n const branch = value ? trueBranch : falseBranch;\n let liveParent: Node | null = anchor.parentNode;\n if (!liveParent && (current as ConditionalBlock | null)?.nodes[0]?.parentNode) {\n liveParent = (current as ConditionalBlock | null)!.nodes[0].parentNode;\n }\n if (branch && liveParent) {\n const fragment = scope ? runInScope(scope, branch) : branch();\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n for (const node of nodes) {\n liveParent.insertBefore(node, anchor);\n }\n current = { nodes, dispose: null };\n }\n },\n { render: true },\n );\n\n return () => {\n dispose();\n if (current) {\n for (const node of current.nodes) {\n try { node.parentNode?.removeChild(node); } catch {}\n }\n current.dispose?.();\n }\n };\n}\n\n// --- List rendering ---\n\ninterface ListItem<T> {\n key: unknown;\n value: T;\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a reactive list with keyed reconciliation.\n * Used by the compiler for :for directives and <For>.\n */\nexport function renderList<T>(\n parent: Node,\n anchor: Node,\n items: () => T[],\n keyFn: (item: T, index: number) => unknown,\n renderItem: (item: T, index: number) => Node,\n): () => void {\n let currentItems: ListItem<T>[] = [];\n\n // Capture scope so children created in renderItem inherit provide/inject context\n const scope = getCurrentScope();\n\n const dispose = effect(\n () => {\n const newData = items();\n const newItems: ListItem<T>[] = [];\n const oldMap = new Map<unknown, ListItem<T>>();\n\n for (const item of currentItems) {\n oldMap.set(item.key, item);\n }\n\n // Build new list, reuse existing DOM nodes when keys match\n for (let i = 0; i < newData.length; i++) {\n const data = newData[i];\n const key = keyFn(data, i);\n const existing = oldMap.get(key);\n\n if (existing) {\n oldMap.delete(key);\n // If the reused item's nodes were detached (e.g., parent removed them),\n // treat as new to avoid stale DOM references\n const firstNode = existing.nodes[0];\n if (firstNode && !firstNode.parentNode) {\n // Nodes were detached — create fresh\n const fragment = scope ? runInScope(scope, () => renderItem(data, i)) : renderItem(data, i);\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n newItems.push({ key, value: data, nodes, dispose: null });\n } else {\n existing.value = data;\n newItems.push(existing);\n }\n } else {\n const fragment = scope ? runInScope(scope, () => renderItem(data, i)) : renderItem(data, i);\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n newItems.push({ key, value: data, nodes, dispose: null });\n }\n }\n\n // Remove items that are no longer in the list\n for (const item of oldMap.values()) {\n for (const node of item.nodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n item.dispose?.();\n }\n\n // Reconcile DOM order — insertBefore moves existing nodes, inserts new ones\n const liveParent = anchor.parentNode;\n if (liveParent) {\n // Normal path — anchor is in the DOM, insert before it\n for (const item of newItems) {\n for (const node of item.nodes) {\n liveParent.insertBefore(node, anchor);\n }\n }\n } else {\n // Table fallback — browser relocated the comment anchor.\n // Find the real parent from any node still in the DOM.\n let realParent: Node | null = null;\n for (const item of currentItems) {\n if (item.nodes[0]?.parentNode) { realParent = item.nodes[0].parentNode; break; }\n }\n if (realParent) {\n // Remove old nodes first (oldMap items already removed above)\n // Then append all new items\n for (const item of newItems) {\n for (const node of item.nodes) {\n realParent.appendChild(node);\n }\n }\n }\n }\n\n currentItems = newItems;\n },\n { render: true },\n );\n\n return () => {\n dispose();\n for (const item of currentItems) {\n for (const node of item.nodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n item.dispose?.();\n }\n currentItems = [];\n };\n}\n\n// --- Built-in control flow components ---\n\n/** Props for the <Show> component */\nexport interface ShowProps<T> {\n when: (() => T | null | undefined | false) | T | null | undefined | false;\n fallback?: () => AkashNode;\n children: (value: T) => AkashNode;\n}\n\n/**\n * <Show> component — conditionally renders children with type narrowing.\n * The children callback receives the non-null/undefined value.\n * `when` can be a reactive getter or a static value.\n */\nexport function Show<T>(props: ShowProps<T>): Node {\n const anchor = createAnchor('show');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n // Resolve when — if it's a function, always call it (supports both\n // compiler-generated __reactive getters and plain programmatic functions)\n const getWhen = typeof props.when === 'function'\n ? props.when as () => T | null | undefined | false\n : () => props.when as T | null | undefined | false;\n\n // Capture the when value once per evaluation so the condition check\n // and the children callback receive the same value (fixes nested For contexts)\n let whenValue: T | null | undefined | false;\n renderConditional(\n container,\n anchor,\n () => { whenValue = getWhen(); return !!whenValue; },\n () => nodeToDOM(props.children(whenValue as T)),\n props.fallback ? () => nodeToDOM(props.fallback!()) : undefined,\n );\n\n return container;\n}\n\n/** Props for the <For> component */\nexport interface ForProps<T> {\n each: (() => T[]) | T[];\n key: (item: T) => unknown;\n children: (item: T, index: number) => AkashNode;\n}\n\n/**\n * <For> component — renders a list with keyed reconciliation.\n * `each` can be a reactive getter or a static array.\n */\nexport function For<T>(props: ForProps<T>): Node {\n const anchor = createAnchor('for');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n // Resolve each — if it's a function, always call it (supports both\n // compiler-generated __reactive getters and plain programmatic functions)\n const getEach = typeof props.each === 'function'\n ? props.each as () => T[]\n : () => props.each as T[];\n\n renderList(\n container,\n anchor,\n getEach,\n props.key,\n (item, index) => nodeToDOM(props.children(item, index)),\n );\n\n return container;\n}\n\n// --- Helpers ---\n\n/** Convert an AkashNode to a DOM Node */\nexport function nodeToDOM(node: AkashNode): Node {\n if (node == null || typeof node === 'boolean') {\n return document.createTextNode('');\n }\n if (typeof node === 'string' || typeof node === 'number') {\n return document.createTextNode(String(node));\n }\n if (node instanceof Node) {\n return node;\n }\n if (Array.isArray(node)) {\n const fragment = document.createDocumentFragment();\n for (const child of node) {\n fragment.appendChild(nodeToDOM(child));\n }\n return fragment;\n }\n return document.createTextNode(String(node));\n}\n\n/** Insert a node into a parent before an anchor */\nexport function insert(parent: Node, node: AkashNode, anchor?: Node): void {\n const domNode = nodeToDOM(node);\n if (anchor) {\n parent.insertBefore(domNode, anchor);\n } else {\n parent.appendChild(domNode);\n }\n}\n","/**\n * Component system.\n *\n * Components are functions. defineComponent() wraps a setup function\n * that runs once, establishes signals and effects, and returns a\n * render function that produces DOM nodes.\n */\n\nimport { effect, untrack } from './signals.js';\nimport { pushScope, popScope, getCurrentScope } from './context.js';\nimport { nodeToDOM } from './dom.js';\nimport { akashError } from './errors.js';\nimport type { AkashNode } from './types.js';\n\n// --- Reactive getter marker (used by compiler) ---\n\n/** Mark a function as a compiler-generated reactive getter */\nexport function __getter<T>(fn: () => T): (() => T) & { __reactive: true } {\n (fn as any).__reactive = true;\n return fn as any;\n}\n\n// --- Types ---\n\nexport interface Ref<T = HTMLElement> {\n current: T | undefined;\n}\n\nexport interface ComponentContext<P extends Record<string, unknown> = Record<string, unknown>> {\n props: Readonly<P>;\n children: () => AkashNode;\n}\n\nexport type Component<P extends Record<string, unknown> = Record<string, unknown>> = {\n (props: P & { children?: AkashNode | (() => AkashNode) }): Node;\n _akash: true;\n};\n\n// --- Lifecycle hook storage ---\n\ninterface LifecycleHooks {\n mount: Array<() => void | (() => void)>;\n unmount: Array<() => void>;\n error: Array<(error: Error) => void>;\n}\n\nlet currentHooks: LifecycleHooks | null = null;\n\n// --- Public lifecycle hooks ---\n\n/**\n * Register a callback to run after the component is mounted to the DOM.\n * If the callback returns a function, it will be called on unmount (cleanup).\n */\nexport function onMount(fn: () => void | (() => void)): void {\n if (!currentHooks) {\n throw akashError('AK0020');\n }\n currentHooks.mount.push(fn);\n}\n\n/**\n * Register a callback to run before the component is unmounted.\n */\nexport function onUnmount(fn: () => void): void {\n if (!currentHooks) {\n throw akashError('AK0021');\n }\n currentHooks.unmount.push(fn);\n}\n\n/**\n * Register an error handler for this component and its descendants.\n */\nexport function onError(fn: (error: Error) => void): void {\n if (!currentHooks) {\n throw akashError('AK0022');\n }\n currentHooks.error.push(fn);\n}\n\n/**\n * Create a ref for accessing a DOM element or storing a mutable value.\n */\nexport function ref<T = HTMLElement>(initialValue?: T): Ref<T> {\n return { current: initialValue as T | undefined };\n}\n\n// --- defineComponent ---\n\n/**\n * Define a component. The setup function runs once per instance.\n * It receives a context with typed props and must return a render function.\n *\n * ```ts\n * const Counter = defineComponent<{ initial: number }>((ctx) => {\n * const count = signal(ctx.props.initial);\n * return () => <div>{count()}</div>;\n * });\n * ```\n */\nexport function defineComponent<P extends Record<string, any> = Record<string, any>>(\n setup: (ctx: ComponentContext<P>) => () => AkashNode,\n): Component<P> {\n const component = (rawProps: P & { children?: AkashNode | (() => AkashNode) }): Node => {\n // Separate children from props, unwrap getter functions for reactivity\n const { children: childrenProp, ...restProps } = rawProps ?? {};\n // Props are passed through as-is — no auto-unwrapping.\n // Components use readProp() to unwrap reactive getters/signals inside\n // effects, which preserves dependency tracking. Auto-unwrapping in the\n // Proxy broke reactivity because it called the getter once and returned\n // the plain value, so effects never subscribed to the underlying signal.\n const props = restProps as unknown as P;\n\n const childrenFn: () => AkashNode =\n typeof childrenProp === 'function'\n ? childrenProp\n : () => childrenProp ?? null;\n\n const ctx: ComponentContext<P> = {\n props,\n children: childrenFn,\n };\n\n // Set up lifecycle hooks collector\n const hooks: LifecycleHooks = { mount: [], unmount: [], error: [] };\n const prevHooks = currentHooks;\n currentHooks = hooks;\n\n // Push context scope for provide/inject\n const parentScope = getCurrentScope();\n const scope = pushScope(parentScope);\n\n let renderFn: () => AkashNode;\n let domNode: Node;\n\n try {\n // Untrack component creation so that signals created inside the component\n // don't register with a parent render effect. This prevents parent effects\n // from re-running (and re-creating the entire component) when internal\n // component state changes. The component's own effects still track their\n // dependencies because effect() sets its own subscriber during execution.\n domNode = untrack(() => {\n renderFn = setup(ctx);\n if (typeof renderFn !== 'function') { throw akashError('AK0040'); }\n const rendered = renderFn();\n return nodeToDOM(rendered);\n });\n } catch (err) {\n popScope(scope);\n currentHooks = prevHooks;\n if (hooks.error.length > 0) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n return document.createComment('error');\n }\n throw err;\n }\n\n // Restore parent state\n popScope(scope);\n currentHooks = prevHooks;\n\n // Run mount callbacks (microtask to ensure DOM is attached)\n if (hooks.mount.length > 0) {\n queueMicrotask(() => {\n for (const mountFn of hooks.mount) {\n try {\n const cleanup = mountFn();\n if (typeof cleanup === 'function') {\n hooks.unmount.push(cleanup);\n }\n } catch (err) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n }\n }\n });\n }\n\n return domNode;\n };\n\n component._akash = true as const;\n return component as Component<P>;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkWOZWFMOK_cjs=require('./chunk-WOZWFMOK.cjs');function T(s={}){let{themes:i={light:{},dark:{}},storageKey:t="akash-theme",attribute:f="data-theme",syncSystem:g=true}=s,o=Object.keys(i);function d(){return typeof window>"u"?s.defaultTheme??"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function h(){if(typeof window<"u"&&t){let e=localStorage.getItem(t);if(e&&o.includes(e))return e}return s.defaultTheme??d()}let n=chunkWOZWFMOK_cjs.c(h()),a=chunkWOZWFMOK_cjs.d(()=>n()==="dark");function y(e){if(typeof document>"u")return;document.documentElement.setAttribute(f,e);let r=i[e];if(r)for(let[m,p]of Object.entries(r))document.documentElement.style.setProperty(m,p);document.documentElement.classList.remove(...o),document.documentElement.classList.add(e);}return chunkWOZWFMOK_cjs.e(()=>{let e=n();y(e),typeof window<"u"&&t&&localStorage.setItem(t,e);}),g&&typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",r=>{localStorage.getItem(t)||n.set(r.matches?"dark":"light");}),{current:()=>n(),isDark:a,set(e){o.includes(e)&&n.set(e);},toggle(){n.set(a()?"light":"dark");},setSystem(){typeof window<"u"&&t&&localStorage.removeItem(t),n.set(d());},themes:o}}exports.a=T;//# sourceMappingURL=chunk-XZR3J626.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-XZR3J626.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme.ts"],"names":["useTheme","config","themes","storageKey","attribute","syncSystem","themeNames","getSystemTheme","getInitialTheme","stored","current","signal","isDark","computed","applyTheme","name","vars","key","value","effect","e","theme"],"mappings":"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","file":"chunk-XZR3J626.cjs","sourcesContent":["/**\n * Theme / dark mode system.\n *\n * Signal-based theme management with system preference detection,\n * CSS variable injection, and localStorage persistence.\n *\n * ```ts\n * const theme = useTheme({\n * themes: {\n * light: { '--bg': '#fff', '--text': '#111' },\n * dark: { '--bg': '#111', '--text': '#eee' },\n * },\n * });\n *\n * theme.current(); // 'light' or 'dark'\n * theme.toggle(); // switch between light/dark\n * theme.set('dark'); // set explicitly\n * theme.isDark(); // boolean\n * ```\n */\n\nimport { signal, computed, effect } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport type ThemeVariables = Record<string, string>;\n\nexport interface ThemeConfig {\n /** Theme definitions (name → CSS variables) */\n themes?: Record<string, ThemeVariables>;\n /** Default theme name (default: auto-detect from system) */\n defaultTheme?: string;\n /** localStorage key for persistence (default: 'akash-theme') */\n storageKey?: string;\n /** CSS attribute to set on <html> (default: 'data-theme') */\n attribute?: string;\n /** Whether to sync with system preference (default: true) */\n syncSystem?: boolean;\n}\n\nexport interface Theme {\n /** Current theme name (reactive) */\n current: ReadonlySignal<string>;\n /** Whether dark mode is active */\n isDark: ReadonlySignal<boolean>;\n /** Set a specific theme */\n set(theme: string): void;\n /** Toggle between light and dark */\n toggle(): void;\n /** Set the system preference strategy */\n setSystem(): void;\n /** Available theme names */\n themes: string[];\n}\n\n// --- Implementation ---\n\n/**\n * Create a theme manager with system preference detection and persistence.\n */\nexport function useTheme(config: ThemeConfig = {}): Theme {\n const {\n themes = {\n light: {},\n dark: {},\n },\n storageKey = 'akash-theme',\n attribute = 'data-theme',\n syncSystem = true,\n } = config;\n\n const themeNames = Object.keys(themes);\n\n // Detect system preference\n function getSystemTheme(): string {\n if (typeof window === 'undefined') return config.defaultTheme ?? 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n // Read persisted theme or use default\n function getInitialTheme(): string {\n if (typeof window !== 'undefined' && storageKey) {\n const stored = localStorage.getItem(storageKey);\n if (stored && themeNames.includes(stored)) return stored;\n }\n return config.defaultTheme ?? getSystemTheme();\n }\n\n const current = signal(getInitialTheme());\n const isDark = computed(() => current() === 'dark');\n\n // Apply theme\n function applyTheme(name: string): void {\n if (typeof document === 'undefined') return;\n\n // Set attribute on <html>\n document.documentElement.setAttribute(attribute, name);\n\n // Apply CSS variables\n const vars = themes[name];\n if (vars) {\n for (const [key, value] of Object.entries(vars)) {\n document.documentElement.style.setProperty(key, value);\n }\n }\n\n // Add/remove class for convenience\n document.documentElement.classList.remove(...themeNames);\n document.documentElement.classList.add(name);\n }\n\n // React to theme changes\n effect(() => {\n const name = current();\n applyTheme(name);\n\n // Persist\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.setItem(storageKey, name);\n }\n });\n\n // Sync with system preference changes\n if (syncSystem && typeof window !== 'undefined') {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n mql.addEventListener('change', (e) => {\n // Only auto-switch if user hasn't manually overridden\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n current.set(e.matches ? 'dark' : 'light');\n }\n });\n }\n\n return {\n current: () => current(),\n isDark,\n set(theme: string) {\n if (themeNames.includes(theme)) {\n current.set(theme);\n }\n },\n toggle() {\n current.set(isDark() ? 'light' : 'dark');\n },\n setSystem() {\n if (typeof window !== 'undefined' && storageKey) {\n localStorage.removeItem(storageKey);\n }\n current.set(getSystemTheme());\n },\n themes: themeNames,\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {s,l}from'./chunk-KE7BJTCD.js';import {c,d}from'./chunk-VUMMC2P5.js';import {e}from'./chunk-YXKQTEPR.js';function g(o,e$1,r,n){let c$1=[],d$1=c(),N=e(()=>{let s=String(r());for(let t of c$1)t.parentNode&&t.parentNode.removeChild(t);c$1=[];let i=n[s]??n._default,a=e$1.parentNode;if(i&&a){let t=d$1?d(d$1,i):i(),f=t instanceof DocumentFragment?Array.from(t.childNodes):[t];for(let k of f)a.insertBefore(k,e$1);c$1=f;}},{render:true});return ()=>{N();for(let s of c$1)s.parentNode&&s.parentNode.removeChild(s);}}var y=s(o=>()=>{let e=document.createElement("div");e.style.display="contents";let r=document.createComment("switch");e.appendChild(r);let n={...o.props.cases};return o.props.fallback&&(n._default=()=>l(o.props.fallback())),g(e,r,()=>o.props.on,Object.fromEntries(Object.entries(n).map(([c,d])=>[c,()=>l(d())]))),e});function C(o,e){let r=String(o),n=e[r]??e._;return n?n(o):void 0}export{g as a,y as b,C as c};//# sourceMappingURL=chunk-YDO5KARN.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-YDO5KARN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/switch.ts"],"names":["renderSwitch","parent","anchor","expression","cases","currentNodes","scope","getCurrentScope","dispose","effect","value","node","branch","liveParent","runInScope","nodes","n","Switch","defineComponent","ctx","container","casesMap","nodeToDOM","k","v","match","key"],"mappings":"gHAsCO,SAASA,CAAAA,CACdC,EACAC,GAAAA,CACAC,CAAAA,CACAC,EACY,CACZ,IAAIC,GAAAA,CAAuB,EAAC,CAGtBC,GAAAA,CAAQC,GAAgB,CAExBC,CAAAA,CAAUC,EACd,IAAM,CACJ,IAAMC,CAAAA,CAAQ,MAAA,CAAOP,CAAAA,EAAY,CAAA,CAGjC,IAAA,IAAWQ,KAAQN,GAAAA,CACbM,CAAAA,CAAK,YAAYA,CAAAA,CAAK,UAAA,CAAW,YAAYA,CAAI,CAAA,CAEvDN,GAAAA,CAAe,EAAC,CAGhB,IAAMO,EAASR,CAAAA,CAAMM,CAAK,GAAKN,CAAAA,CAAM,QAAA,CAC/BS,EAAaX,GAAAA,CAAO,UAAA,CAC1B,GAAIU,CAAAA,EAAUC,CAAAA,CAAY,CACxB,IAAMF,CAAAA,CAAOL,GAAAA,CAAQQ,EAAWR,GAAAA,CAAOM,CAAM,EAAIA,CAAAA,EAAO,CAClDG,CAAAA,CAAQJ,CAAAA,YAAgB,gBAAA,CAC1B,KAAA,CAAM,KAAKA,CAAAA,CAAK,UAAU,EAC1B,CAACA,CAAI,EACT,IAAA,IAAWK,CAAAA,IAAKD,CAAAA,CACdF,CAAAA,CAAW,YAAA,CAAaG,CAAAA,CAAGd,GAAM,CAAA,CAEnCG,GAAAA,CAAeU,EACjB,CACF,CAAA,CACA,CAAE,MAAA,CAAQ,IAAK,CACjB,CAAA,CAEA,OAAO,IAAM,CACXP,CAAAA,EAAQ,CACR,QAAWG,CAAAA,IAAQN,GAAAA,CACbM,EAAK,UAAA,EAAYA,CAAAA,CAAK,UAAA,CAAW,WAAA,CAAYA,CAAI,EAEzD,CACF,CA8BO,IAAMM,EAASC,CAAAA,CAA8BC,CAAAA,EAC3C,IAAM,CACX,IAAMC,CAAAA,CAAY,QAAA,CAAS,aAAA,CAAc,KAAK,EAC9CA,CAAAA,CAAU,KAAA,CAAM,QAAU,UAAA,CAC1B,IAAMlB,EAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CAC9CkB,CAAAA,CAAU,WAAA,CAAYlB,CAAM,CAAA,CAE5B,IAAMmB,EAAW,CAAE,GAAGF,EAAI,KAAA,CAAM,KAAM,CAAA,CACtC,OAAIA,CAAAA,CAAI,KAAA,CAAM,WACZE,CAAAA,CAAS,QAAA,CAAW,IAAMC,CAAAA,CAAUH,CAAAA,CAAI,MAAM,QAAA,EAAW,CAAA,CAAA,CAG3DnB,CAAAA,CACEoB,CAAAA,CACAlB,CAAAA,CACA,IAAMiB,CAAAA,CAAI,KAAA,CAAM,GAChB,MAAA,CAAO,WAAA,CACL,OAAO,OAAA,CAAQE,CAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAACE,EAAGC,CAAC,CAAA,GAAM,CACvCD,CAAAA,CACA,IAAMD,EAAUE,CAAAA,EAAG,CACrB,CAAC,CACH,CACF,EAEOJ,CACT,CACD,EAkBM,SAASK,CAAAA,CACdf,EACAN,CAAAA,CACe,CACf,IAAMsB,CAAAA,CAAM,MAAA,CAAOhB,CAAK,EAClBE,CAAAA,CAASR,CAAAA,CAAMsB,CAAG,CAAA,EAAKtB,CAAAA,CAAM,CAAA,CACnC,OAAOQ,CAAAA,CAASA,CAAAA,CAAOF,CAAK,CAAA,CAAI,MAClC","file":"chunk-YDO5KARN.js","sourcesContent":["/**\n * Switch/Case/Default control flow component.\n *\n * Renders one of multiple branches based on a reactive expression.\n *\n * ```html\n * <Switch on={status()}>\n * <Case value=\"loading\"><Spinner /></Case>\n * <Case value=\"error\"><ErrorMessage /></Case>\n * <Case value=\"success\"><Content /></Case>\n * <Default><Fallback /></Default>\n * </Switch>\n * ```\n *\n * Or programmatic:\n * ```ts\n * renderSwitch(container, anchor, () => status(), {\n * loading: () => Spinner({}),\n * error: () => ErrorView({}),\n * success: () => Content({}),\n * _default: () => Fallback({}),\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { getCurrentScope, runInScope } from './context.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// =========================================================================\n// Programmatic renderSwitch\n// =========================================================================\n\n/**\n * Render a switch block. Swaps DOM based on reactive expression value.\n */\nexport function renderSwitch(\n parent: Node,\n anchor: Node,\n expression: () => unknown,\n cases: Record<string, () => Node>,\n): () => void {\n let currentNodes: Node[] = [];\n\n // Capture scope so children inherit provide/inject context\n const scope = getCurrentScope();\n\n const dispose = effect(\n () => {\n const value = String(expression());\n\n // Remove current nodes\n for (const node of currentNodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n currentNodes = [];\n\n // Find matching case or default\n const branch = cases[value] ?? cases._default;\n const liveParent = anchor.parentNode;\n if (branch && liveParent) {\n const node = scope ? runInScope(scope, branch) : branch();\n const nodes = node instanceof DocumentFragment\n ? Array.from(node.childNodes)\n : [node];\n for (const n of nodes) {\n liveParent.insertBefore(n, anchor);\n }\n currentNodes = nodes;\n }\n },\n { render: true },\n );\n\n return () => {\n dispose();\n for (const node of currentNodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n };\n}\n\n// =========================================================================\n// <Switch> component\n// =========================================================================\n\nexport interface SwitchProps {\n /** The value to switch on */\n on: unknown;\n /** Cases map: value → render function */\n cases: Record<string, () => AkashNode>;\n /** Default case */\n fallback?: () => AkashNode;\n}\n\n/**\n * <Switch> component — declarative switch/case.\n *\n * ```ts\n * Switch({\n * on: status(),\n * cases: {\n * loading: () => Spinner({}),\n * error: () => ErrorView({}),\n * success: () => Content({}),\n * },\n * fallback: () => 'Unknown status',\n * });\n * ```\n */\nexport const Switch = defineComponent<SwitchProps>((ctx) => {\n return () => {\n const container = document.createElement('div');\n container.style.display = 'contents';\n const anchor = document.createComment('switch');\n container.appendChild(anchor);\n\n const casesMap = { ...ctx.props.cases };\n if (ctx.props.fallback) {\n casesMap._default = () => nodeToDOM(ctx.props.fallback!());\n }\n\n renderSwitch(\n container,\n anchor,\n () => ctx.props.on,\n Object.fromEntries(\n Object.entries(casesMap).map(([k, v]) => [\n k,\n () => nodeToDOM(v()),\n ]),\n ),\n );\n\n return container;\n };\n});\n\n// =========================================================================\n// match() — functional pattern matching for signals\n// =========================================================================\n\n/**\n * Pattern match on a signal value. Returns the result of the matching branch.\n *\n * ```ts\n * const message = match(status(), {\n * loading: () => 'Loading...',\n * error: () => 'Something went wrong',\n * success: () => 'Done!',\n * _: () => 'Unknown',\n * });\n * ```\n */\nexport function match<T, R>(\n value: T,\n cases: Record<string, (value: T) => R> & { _?: (value: T) => R },\n): R | undefined {\n const key = String(value);\n const branch = cases[key] ?? cases._;\n return branch ? branch(value) : undefined;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkXWVNLE2W_cjs=require('./chunk-XWVNLE2W.cjs'),chunkWOZWFMOK_cjs=require('./chunk-WOZWFMOK.cjs');var c=chunkXWVNLE2W_cjs.s(e=>{let s=chunkWOZWFMOK_cjs.c({status:"pending"}),r=e.props.promise;return e.props.promise.then(t=>{e.props.promise===r&&s.set({status:"resolved",value:t});}).catch(t=>{e.props.promise===r&&s.set({status:"rejected",error:t instanceof Error?t:new Error(String(t))});}),()=>{let t=s();switch(t.status){case "pending":return e.props.pending?chunkXWVNLE2W_cjs.l(e.props.pending()):document.createComment("await-pending");case "resolved":return chunkXWVNLE2W_cjs.l(e.props.then(t.value));case "rejected":return e.props.catch?chunkXWVNLE2W_cjs.l(e.props.catch(t.error)):document.createComment("await-error")}}});function m(e){let s=chunkWOZWFMOK_cjs.c({status:"pending"});return e.then(r=>s.set({status:"resolved",value:r})).catch(r=>s.set({status:"rejected",error:r instanceof Error?r:new Error(String(r))})),()=>s()}exports.a=c;exports.b=m;//# sourceMappingURL=chunk-YURIYBTN.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-YURIYBTN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/await-block.ts"],"names":["Await","defineComponent","ctx","state","signal","currentPromise","value","err","s","nodeToDOM","awaitSignal","promise","error"],"mappings":"qHAgDO,IAAMA,EAAQC,mBAAAA,CAAkCC,CAAAA,EAAQ,CAC7D,IAAMC,EAAQC,mBAAAA,CAA4B,CAAE,MAAA,CAAQ,SAAU,CAAC,CAAA,CAG3DC,CAAAA,CAAiBH,EAAI,KAAA,CAAM,OAAA,CAE/B,OAAAA,CAAAA,CAAI,KAAA,CAAM,OAAA,CACP,IAAA,CAAMI,GAAU,CACXJ,CAAAA,CAAI,MAAM,OAAA,GAAYG,CAAAA,EACxBF,EAAM,GAAA,CAAI,CAAE,MAAA,CAAQ,UAAA,CAAY,MAAAG,CAAM,CAAC,EAE3C,CAAC,CAAA,CACA,MAAOC,CAAAA,EAAQ,CACVL,CAAAA,CAAI,KAAA,CAAM,UAAYG,CAAAA,EACxBF,CAAAA,CAAM,IAAI,CACR,MAAA,CAAQ,WACR,KAAA,CAAOI,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAC3D,CAAC,EAEL,CAAC,CAAA,CAEI,IAAM,CACX,IAAMC,CAAAA,CAAIL,GAAM,CAEhB,OAAQK,EAAE,MAAA,EACR,KAAK,SAAA,CACH,OAAON,CAAAA,CAAI,KAAA,CAAM,QACbO,mBAAAA,CAAUP,CAAAA,CAAI,MAAM,OAAA,EAAS,CAAA,CAC7B,QAAA,CAAS,cAAc,eAAe,CAAA,CAE5C,KAAK,UAAA,CACH,OAAOO,oBAAUP,CAAAA,CAAI,KAAA,CAAM,IAAA,CAAKM,CAAAA,CAAE,KAAK,CAAC,CAAA,CAE1C,KAAK,UAAA,CACH,OAAON,EAAI,KAAA,CAAM,KAAA,CACbO,mBAAAA,CAAUP,CAAAA,CAAI,MAAM,KAAA,CAAMM,CAAAA,CAAE,KAAK,CAAC,CAAA,CAClC,SAAS,aAAA,CAAc,aAAa,CAC5C,CACF,CACF,CAAC,EAcM,SAASE,CAAAA,CAAeC,CAAAA,CAAqB,CAClD,IAAMR,CAAAA,CAAQC,mBAAAA,CAAsB,CAAE,OAAQ,SAAU,CAAC,EAEzD,OAAAO,CAAAA,CACG,KAAML,CAAAA,EAAUH,CAAAA,CAAM,GAAA,CAAI,CAAE,OAAQ,UAAA,CAAY,KAAA,CAAAG,CAAM,CAAC,CAAC,EACxD,KAAA,CAAOM,CAAAA,EAAUT,CAAAA,CAAM,GAAA,CAAI,CAC1B,MAAA,CAAQ,UAAA,CACR,MAAOS,CAAAA,YAAiB,KAAA,CAAQA,EAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CACjE,CAAC,CAAC,CAAA,CAEG,IAAMT,GACf","file":"chunk-YURIYBTN.cjs","sourcesContent":["/**\n * Await block — template-level async handling.\n *\n * Renders different content for pending/resolved/rejected states\n * of a promise, similar to Svelte's {#await} blocks.\n *\n * ```ts\n * Await({\n * promise: fetchUser(userId()),\n * pending: () => <Spinner />,\n * then: (user) => <UserCard user={user} />,\n * catch: (err) => <Error message={err.message} />,\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface AwaitProps<T> {\n /** The promise to await */\n promise: Promise<T>;\n /** Render while pending */\n pending?: () => AkashNode;\n /** Render when resolved */\n then: (value: T) => AkashNode;\n /** Render when rejected */\n catch?: (error: Error) => AkashNode;\n}\n\ntype AwaitState<T> =\n | { status: 'pending' }\n | { status: 'resolved'; value: T }\n | { status: 'rejected'; error: Error };\n\n// =========================================================================\n// Await component\n// =========================================================================\n\n/**\n * <Await> component — declarative promise handling.\n */\nexport const Await = defineComponent<AwaitProps<any>>((ctx) => {\n const state = signal<AwaitState<unknown>>({ status: 'pending' });\n\n // Track the promise to handle race conditions\n let currentPromise = ctx.props.promise;\n\n ctx.props.promise\n .then((value) => {\n if (ctx.props.promise === currentPromise) {\n state.set({ status: 'resolved', value });\n }\n })\n .catch((err) => {\n if (ctx.props.promise === currentPromise) {\n state.set({\n status: 'rejected',\n error: err instanceof Error ? err : new Error(String(err)),\n });\n }\n });\n\n return () => {\n const s = state();\n\n switch (s.status) {\n case 'pending':\n return ctx.props.pending\n ? nodeToDOM(ctx.props.pending())\n : document.createComment('await-pending');\n\n case 'resolved':\n return nodeToDOM(ctx.props.then(s.value));\n\n case 'rejected':\n return ctx.props.catch\n ? nodeToDOM(ctx.props.catch(s.error))\n : document.createComment('await-error');\n }\n };\n});\n\n// =========================================================================\n// Functional await helper\n// =========================================================================\n\n/**\n * Functional await block — returns a signal that updates as the promise resolves.\n *\n * ```ts\n * const result = awaitSignal(fetchData());\n * result().status; // 'pending' | 'resolved' | 'rejected'\n * ```\n */\nexport function awaitSignal<T>(promise: Promise<T>) {\n const state = signal<AwaitState<T>>({ status: 'pending' });\n\n promise\n .then((value) => state.set({ status: 'resolved', value }))\n .catch((error) => state.set({\n status: 'rejected',\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n\n return () => state();\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c as c$1,d}from'./chunk-U65WRXZC.js';var c=new Set,a=new Set,b=false,f=0,y=false,x=3,A=100;function h(){if(b)return;b=true;let e=new Map,n=false,r=0;for(;(c.size>0||a.size>0)&&r<A;){if(r++,c.size>0){let s=[...c].sort(D);c.clear();for(let t of s){let i=(e.get(t)??0)+1;if(e.set(t,i),i>x){n=true;continue}t.run();}}if(a.size>0){let s=[...a].sort(D);a.clear();for(let t of s){let i=(e.get(t)??0)+1;if(e.set(t,i),i>x){n=true;continue}t.run();}}if(n&&c.size===0&&a.size===0)break}(n||r>=A)&&(c.clear(),a.clear(),console.error("[AkashJS] Circular dependency detected between effects. Two or more effects are writing to each other's dependencies. The cycle has been broken after "+r+" iterations.")),b=false,y&&(y=false,(c.size>0||a.size>0)&&h());}function q(e){e.isRender?c.add(e):a.add(e),f===0&&!b?h():b&&(y=true);}function V(e){f++;try{return e()}finally{f--,f===0&&h();}}function R(){f++;}function z(){f--,f===0&&h();}function D(e,n){return (e.depth??0)-(n.depth??0)}function H(){h();}var _=typeof process>"u"||process.env?.NODE_ENV!=="production";var u=null;function C(e,n){return e===null?n:Array.isArray(e)?(e.indexOf(n)===-1&&e.push(n),e):e===n?e:[e,n]}function N(e,n){if(e===null||e===n)return null;if(Array.isArray(e)){let r=e.indexOf(n);if(r!==-1){if(e.length===2)return e[1-r];e.splice(r,1);}return e}return e}function m(e,n){if(e!==null)if(Array.isArray(e)){let r=e.slice();for(let s=0;s<r.length;s++)n(r[s]);}else n(e);}var g=class{_value;_subscribers;_equals;_version;constructor(n,r){this._value=n,this._subscribers=null,this._equals=r??Object.is,this._version=0;}};function K(e){this.set(e(this._node._value));}function U(){return this._node._value}function Q(e,n){let r=new g(e,n?.equals),s=()=>(X(r),r._value);return s.set=t=>{_&&u&&u._tag==="computed"&&console.warn("[AkashJS] Writing to a signal inside computed() is not allowed. The write will be lost on the next evaluation."),!r._equals(r._value,t)&&(r._value=t,r._version++,_&&c$1()&&d("signal-update","signal.set",0),V(()=>{k(r);}));},s._node=r,s.update=K.bind(s),s.peek=U.bind(s),s}var p=class{_tag="computed";_fn;_value;_state;_subscribers;_sources;_equals;_version;_depVersions;constructor(n,r){this._fn=n,this._value=void 0,this._state=1,this._subscribers=null,this._sources=null,this._equals=r??Object.is,this._version=0,this._depVersions=null;}};function Y(e,n){let r=new p(e,n?.equals);return ()=>(u&&(r._subscribers=C(r._subscribers,u),"_sources"in u&&O(u,r)),r._state!==0&&(P(r)?E(r):r._state=0),r._value)}function P(e){if(e._depVersions===null||e._sources===null)return true;let n=e._sources,r=e._depVersions;if(n.length!==r.length)return true;for(let s=0;s<n.length;s++){let t=n[s];if(t instanceof p&&t._state===1&&E(t),t._version!==r[s])return true}return false}function j(e){if(e._sources===null||e._sources.length===0){e._depVersions=null;return}let n=e._sources,r=e._depVersions=new Array(n.length);for(let s=0;s<n.length;s++)r[s]=n[s]._version;}function O(e,n){e._sources===null?e._sources=[n]:e._sources.indexOf(n)===-1&&e._sources.push(n);}var T=new Set;function E(e,n=false){if(T.has(e))throw new Error("[AkashJS] Circular dependency detected between computed values.");if(T.add(e),R(),e._sources!==null){for(let t=0;t<e._sources.length;t++)e._sources[t]._subscribers=N(e._sources[t]._subscribers,e);e._sources=null;}let r=u;u=e;let s=_&&c$1()?performance.now():0;try{let t=e._fn(),i=e._value===void 0&&e._state===1,o=i||!e._equals(e._value,t);e._value=t,e._state=0,o&&e._version++,j(e),o&&!i&&(n?m(e._subscribers,l=>{l._tag==="computed"&&(l._state=1,m(l._subscribers,d=>{d._tag==="computed"&&(d._state=1);}));}):k(e));}finally{_&&s&&d("computed","computed",performance.now()-s),T.delete(e),u=r,z();}}var w=class{_tag="effect";_fn;_cleanup;_sources;_disposed;isRender;_lastSeen;constructor(n,r){this._fn=n,this._cleanup=null,this._sources=null,this._disposed=false,this.isRender=r,this._lastSeen=null;}run(){M(this);}};function Z(e,n){let r=new w(e,n?.render??false);return M(r),()=>{if(r._disposed=true,B(r),r._sources!==null){for(let s=0;s<r._sources.length;s++)r._sources[s]._subscribers=N(r._sources[s]._subscribers,r);r._sources=null;}}}function M(e){if(e._disposed)return;if(e._sources!==null&&e._sources.length>0){let t=false;for(let i=0;i<e._sources.length;i++){let o=e._sources[i];if(o instanceof p)if(o._state===1&&E(o,true),e._lastSeen!==null&&e._lastSeen.has(o)){let l=e._lastSeen.get(o);o._equals(l,o._value)||(t=true);}else t=true;else t=true;}if(!t)return}B(e);let n=e._sources!==null?e._sources.slice():null;if(e._sources!==null){for(let t=0;t<e._sources.length;t++)e._sources[t]._subscribers=N(e._sources[t]._subscribers,e);e._sources=null;}let r=u;u=e;let s=_&&c$1()?performance.now():0;try{let t=e._fn();typeof t=="function"&&(e._cleanup=t);}catch(t){if(n!==null){e._sources=n;for(let i=0;i<n.length;i++)n[i]._subscribers=C(n[i]._subscribers,e);}console.error("[AkashJS] Error in effect (will retry on next signal change):",t);}finally{if(_&&s&&d("effect","effect",performance.now()-s),u=r,e._sources!==null){let t=null;for(let i=0;i<e._sources.length;i++){let o=e._sources[i];o instanceof p&&(t===null&&(t=new Map),t.set(o,o._value));}e._lastSeen=t;}else e._lastSeen=null;}}function B(e){if(e._cleanup){try{e._cleanup();}catch(n){console.error("[AkashJS] Error in effect cleanup (ignored):",n);}e._cleanup=null;}}function I(e){let n=u;u=null;try{return e()}finally{u=n;}}function $(e,n,r){let s=Array.isArray(e),t=s?e:[e],i,o=true;return ()=>{let l=t.map(F=>F());if(o&&(o=false,i=l.slice(),r?.defer!==false))return;let d=i;return i=l.slice(),I(()=>n(s?l:l[0],d?s?d:d[0]:void 0))}}function X(e){u&&(e._subscribers=C(e._subscribers,u),"_sources"in u&&O(u,e));}function k(e){m(e._subscribers,n=>{n._tag==="computed"?(n._state=1,k(n)):n._tag==="effect"&&q(n);});}export{V as a,H as b,Q as c,Y as d,Z as e,I as f,$ as g};//# sourceMappingURL=chunk-YXKQTEPR.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-YXKQTEPR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/scheduler.ts","../src/signals.ts"],"names":["pendingRender","pendingUser","flushing","batchDepth","reflushNeeded","MAX_EFFECT_RUNS","MAX_FLUSH_ITERATIONS","flush","runCounts","circularDetected","iterations","queue","byDepth","fx","count","scheduleEffect","batch","fn","enterBatch","exitBatch","a","b","flushSync","__DEV__","currentSubscriber","addSubscriber","slot","sub","removeSubscriber","idx","forEachSubscriber","copy","i","SignalNode","value","equals","signalUpdate","signalPeek","signal","initialValue","options","node","read","trackSubscriber","isProfiling","recordPerfEntry","notifySubscribers","ComputedNode","computed","addSource","isDirtyByVersion","recompute","deps","versions","dep","snapshotVersions","source","computingSet","skipEffectNotify","prevSubscriber","_t0","newValue","isFirst","changed","sub2","EffectNode","isRender","runEffect","effect","cleanupEffect","anyChanged","lastSeen","prevSources","result","err","untrack","prev","on","isArray","depArray","prevValues","values","d"],"mappings":"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","file":"chunk-YXKQTEPR.js","sourcesContent":["/**\n * Microtask-based effect scheduler with priority levels and deduplication.\n *\n * Render effects (DOM bindings) run before user effects to ensure\n * DOM is consistent before user-side effects execute.\n */\n\nexport interface ScheduledEffect {\n run(): void;\n isRender: boolean;\n /** Depth in the dependency graph (0 = root). Lower depth runs first. */\n depth?: number;\n}\n\nconst pendingRender = new Set<ScheduledEffect>();\nconst pendingUser = new Set<ScheduledEffect>();\nlet flushing = false;\nlet batchDepth = 0;\nlet flushScheduled = false;\nlet reflushNeeded = false;\n\nconst MAX_EFFECT_RUNS = 3;\nconst MAX_FLUSH_ITERATIONS = 100;\n\nfunction flush(): void {\n if (flushing) return;\n flushing = true;\n flushScheduled = false;\n\n // Fresh per-effect run counter for THIS flush — reset every time\n const runCounts = new Map<ScheduledEffect, number>();\n let circularDetected = false;\n\n // Process render effects first, then user effects.\n // Effects may enqueue more effects during flush, so loop until empty.\n let iterations = 0;\n while ((pendingRender.size > 0 || pendingUser.size > 0) && iterations < MAX_FLUSH_ITERATIONS) {\n iterations++;\n\n // Drain render effects (sorted by depth — parents before children)\n if (pendingRender.size > 0) {\n const queue = [...pendingRender].sort(byDepth);\n pendingRender.clear();\n for (const fx of queue) {\n const count = (runCounts.get(fx) ?? 0) + 1;\n runCounts.set(fx, count);\n if (count > MAX_EFFECT_RUNS) {\n circularDetected = true;\n continue; // skip this effect — it's in a cycle\n }\n fx.run();\n }\n }\n\n // Drain user effects (sorted by depth)\n if (pendingUser.size > 0) {\n const queue = [...pendingUser].sort(byDepth);\n pendingUser.clear();\n for (const fx of queue) {\n const count = (runCounts.get(fx) ?? 0) + 1;\n runCounts.set(fx, count);\n if (count > MAX_EFFECT_RUNS) {\n circularDetected = true;\n continue; // skip this effect — it's in a cycle\n }\n fx.run();\n }\n }\n\n // If all remaining effects were skipped due to cycle detection, break\n if (circularDetected && pendingRender.size === 0 && pendingUser.size === 0) {\n break;\n }\n }\n\n if (circularDetected || iterations >= MAX_FLUSH_ITERATIONS) {\n pendingRender.clear();\n pendingUser.clear();\n console.error(\n '[AkashJS] Circular dependency detected between effects. ' +\n 'Two or more effects are writing to each other\\'s dependencies. ' +\n 'The cycle has been broken after ' + iterations + ' iterations.'\n );\n }\n\n flushing = false;\n\n // If effects were scheduled during the tail end of this flush (after the\n // while loop's condition was last checked), re-flush them now.\n if (reflushNeeded) {\n reflushNeeded = false;\n if (pendingRender.size > 0 || pendingUser.size > 0) {\n flush();\n }\n }\n}\n\nexport function scheduleEffect(fx: ScheduledEffect): void {\n if (fx.isRender) {\n pendingRender.add(fx);\n } else {\n pendingUser.add(fx);\n }\n\n if (batchDepth === 0 && !flushing) {\n flush();\n } else if (flushing) {\n // Effects were added during a flush. The while loop may still pick them\n // up, but if it has already checked the queues and found them empty,\n // we need a re-flush after the current one completes.\n reflushNeeded = true;\n }\n}\n\n/**\n * Batch multiple signal writes — subscribers are notified only once\n * at the end of the batch.\n */\nexport function batch<T>(fn: () => T): T {\n batchDepth++;\n try {\n return fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) {\n flush();\n }\n }\n}\n\n/** Enter/exit batch depth — used by computed recompute to prevent mid-evaluation flush */\nexport function enterBatch(): void { batchDepth++; }\nexport function exitBatch(): void {\n batchDepth--;\n if (batchDepth === 0) flush();\n}\n\n/** Sort effects by depth (lower depth first = parents before children) */\nfunction byDepth(a: ScheduledEffect, b: ScheduledEffect): number {\n return (a.depth ?? 0) - (b.depth ?? 0);\n}\n\n/** Synchronously flush all pending effects. Useful for testing. */\nexport function flushSync(): void {\n flush();\n}\n","/**\n * Fine-grained reactivity system.\n *\n * Inspired by SolidJS/Preact Signals. Provides signal(), computed(),\n * effect(), and untrack() primitives with automatic dependency tracking\n * and glitch-free diamond dependency resolution.\n *\n * Optimized for minimal memory footprint:\n * - Class-based nodes for V8 hidden class sharing\n * - Lazy subscriber collections (null → single → array)\n * - Shared method functions (no per-instance closures for update/peek)\n * - Version-based dirty checking for computed\n * - Dev-only code stripped in production builds\n */\n\nimport { scheduleEffect, batch, enterBatch, exitBatch, type ScheduledEffect } from './scheduler.js';\n\nimport { recordPerfEntry, isProfiling } from './perf.js';\n\nconst __DEV__ = typeof process === 'undefined' || process.env?.NODE_ENV !== 'production';\n\n/** Depth counter to defer effect scheduling until all notifications complete (glitch-free) */\nlet notifyDepth = 0;\n\n// --- Tracking scope ---\n\ntype Subscriber = EffectNode | ComputedNode<any>;\ntype SubscriberSlot = Subscriber | Subscriber[] | null;\n\nlet currentSubscriber: Subscriber | null = null;\n\n// --- Subscriber collection helpers (lazy: null → single → array) ---\n\nfunction addSubscriber(slot: SubscriberSlot, sub: Subscriber): SubscriberSlot {\n if (slot === null) return sub;\n if (Array.isArray(slot)) {\n if (slot.indexOf(sub) === -1) slot.push(sub);\n return slot;\n }\n // slot is a single subscriber\n if (slot === sub) return slot;\n return [slot, sub];\n}\n\nfunction removeSubscriber(slot: SubscriberSlot, sub: Subscriber): SubscriberSlot {\n if (slot === null) return null;\n if (slot === sub) return null;\n if (Array.isArray(slot)) {\n const idx = slot.indexOf(sub);\n if (idx !== -1) {\n if (slot.length === 2) return slot[1 - idx];\n slot.splice(idx, 1);\n }\n return slot;\n }\n return slot;\n}\n\nfunction forEachSubscriber(slot: SubscriberSlot, fn: (sub: Subscriber) => void): void {\n if (slot === null) return;\n if (Array.isArray(slot)) {\n // Snapshot to avoid mutation during iteration\n const copy = slot.slice();\n for (let i = 0; i < copy.length; i++) fn(copy[i]);\n } else {\n fn(slot);\n }\n}\n\nfunction hasSubscribers(slot: SubscriberSlot): boolean {\n return slot !== null;\n}\n\n// --- Signal ---\n\nexport interface Signal<T> {\n /** Read the current value (tracks dependency if inside a reactive scope) */\n (): T;\n /** Set a new value */\n set(value: T): void;\n /** Update the value using the previous value */\n update(fn: (prev: T) => T): void;\n /** Read without tracking (no dependency registered) */\n peek(): T;\n}\n\nexport type ReadonlySignal<T> = () => T;\n\n// Strategy 1: Class-based node for V8 hidden class optimization\nclass SignalNode<T> {\n _value: T;\n _subscribers: SubscriberSlot;\n _equals: (a: T, b: T) => boolean;\n _version: number; // Strategy 5: cheap dirty checking\n\n constructor(value: T, equals?: (a: T, b: T) => boolean) {\n this._value = value;\n this._subscribers = null; // Strategy 2: lazy (not new Set())\n this._equals = equals ?? Object.is;\n this._version = 0;\n }\n}\n\n// Strategy 3: Shared method functions (not per-instance closures)\nfunction signalUpdate<T>(this: Signal<T> & { _node: SignalNode<T> }, fn: (prev: T) => T): void {\n this.set(fn(this._node._value));\n}\n\nfunction signalPeek<T>(this: { _node: SignalNode<T> }): T {\n return this._node._value;\n}\n\nexport function signal<T>(\n initialValue: T,\n options?: { equals?: (a: T, b: T) => boolean },\n): Signal<T> {\n const node = new SignalNode(initialValue, options?.equals);\n\n const read = (): T => {\n trackSubscriber(node);\n return node._value;\n };\n\n read.set = (value: T): void => {\n if (__DEV__ && currentSubscriber && (currentSubscriber as any)._tag === 'computed') {\n console.warn('[AkashJS] Writing to a signal inside computed() is not allowed. The write will be lost on the next evaluation.');\n }\n if (node._equals(node._value, value)) return;\n node._value = value;\n node._version++;\n if (__DEV__ && isProfiling()) recordPerfEntry('signal-update', 'signal.set', 0);\n batch(() => { notifySubscribers(node); });\n };\n\n // Strategy 3: bind shared functions instead of creating per-instance closures\n (read as any)._node = node;\n read.update = signalUpdate.bind(read as any);\n read.peek = signalPeek.bind(read as any);\n\n return read as Signal<T>;\n}\n\n// --- Computed ---\n\nconst enum ComputedState {\n Clean = 0,\n Dirty = 1,\n}\n\n// Strategy 1: Class-based computed node\nclass ComputedNode<T> {\n _tag: 'computed' = 'computed';\n _fn: () => T;\n _value: T | undefined;\n _state: ComputedState;\n _subscribers: SubscriberSlot;\n _sources: (SignalNode<any> | ComputedNode<any>)[] | null;\n _equals: (a: T, b: T) => boolean;\n _version: number; // Strategy 5\n\n // Strategy 5: version snapshots of dependencies at last evaluation\n _depVersions: number[] | null;\n\n constructor(fn: () => T, equals?: (a: T, b: T) => boolean) {\n this._fn = fn;\n this._value = undefined;\n this._state = ComputedState.Dirty;\n this._subscribers = null; // lazy\n this._sources = null; // lazy\n this._equals = equals ?? Object.is;\n this._version = 0;\n this._depVersions = null;\n }\n}\n\nexport function computed<T>(\n fn: () => T,\n options?: { equals?: (a: T, b: T) => boolean },\n): ReadonlySignal<T> {\n const node = new ComputedNode<T>(fn, options?.equals);\n\n const read = (): T => {\n // Track this computed as a dependency of the current subscriber\n if (currentSubscriber) {\n node._subscribers = addSubscriber(node._subscribers, currentSubscriber);\n if ('_sources' in currentSubscriber) {\n addSource(currentSubscriber, node);\n }\n }\n\n if (node._state !== ComputedState.Clean) {\n // Strategy 5: check if deps actually changed via version\n if (!isDirtyByVersion(node)) {\n node._state = ComputedState.Clean;\n } else {\n recompute(node);\n }\n }\n\n return node._value as T;\n };\n\n return read;\n}\n\n// Strategy 5: version-based dirty check\nfunction isDirtyByVersion(node: ComputedNode<any>): boolean {\n if (node._depVersions === null || node._sources === null) return true;\n const deps = node._sources;\n const versions = node._depVersions;\n if (deps.length !== versions.length) return true;\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n // If a dep is a dirty computed, recompute it first to get the real version\n if (dep instanceof ComputedNode && dep._state === ComputedState.Dirty) {\n recompute(dep);\n }\n if (dep._version !== versions[i]) return true;\n }\n return false;\n}\n\n// Snapshot dependency versions after evaluation\nfunction snapshotVersions(node: ComputedNode<any>): void {\n if (node._sources === null || node._sources.length === 0) {\n node._depVersions = null;\n return;\n }\n const deps = node._sources;\n const versions = node._depVersions = new Array(deps.length);\n for (let i = 0; i < deps.length; i++) {\n versions[i] = deps[i]._version;\n }\n}\n\n// Helper: add source to node's sources array\nfunction addSource(sub: { _sources: (SignalNode<any> | ComputedNode<any>)[] | null }, source: SignalNode<any> | ComputedNode<any>): void {\n if (sub._sources === null) {\n sub._sources = [source];\n } else if (sub._sources.indexOf(source) === -1) {\n sub._sources.push(source);\n }\n}\n\nconst computingSet = new Set<ComputedNode<unknown>>();\n\n/**\n * @param skipEffectNotify - When true, don't schedule effects in notifySubscribers.\n * Used when recompute is called from runEffect's dirty check — the effect is\n * already being processed, re-scheduling it would trigger the circular run limit.\n */\nfunction recompute<T>(node: ComputedNode<T>, skipEffectNotify = false): void {\n // Detect circular computed dependencies — only if THIS node is already being computed\n if (computingSet.has(node as ComputedNode<unknown>)) {\n throw new Error('[AkashJS] Circular dependency detected between computed values.');\n }\n computingSet.add(node as ComputedNode<unknown>);\n\n // Prevent effects from flushing while computed is evaluating.\n enterBatch();\n\n // Clean up old source subscriptions\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n\n const _t0 = __DEV__ && isProfiling() ? performance.now() : 0;\n try {\n const newValue = node._fn();\n const isFirst = node._value === undefined && node._state === ComputedState.Dirty;\n const changed = isFirst || !node._equals(node._value as T, newValue);\n node._value = newValue;\n node._state = ComputedState.Clean;\n if (changed) node._version++;\n\n // Snapshot dep versions for next dirty check\n snapshotVersions(node);\n\n // Only propagate if value actually changed (skip first computation —\n // the effect that triggered the read is already running).\n if (changed && !isFirst) {\n if (skipEffectNotify) {\n // Only mark downstream computeds as dirty — don't schedule effects.\n forEachSubscriber(node._subscribers, (sub) => {\n if (sub._tag === 'computed') {\n (sub as ComputedNode<any>)._state = ComputedState.Dirty;\n forEachSubscriber((sub as ComputedNode<any>)._subscribers, (sub2) => {\n if (sub2._tag === 'computed') (sub2 as ComputedNode<any>)._state = ComputedState.Dirty;\n });\n }\n });\n } else {\n notifySubscribers(node);\n }\n }\n } finally {\n if (__DEV__ && _t0) recordPerfEntry('computed', 'computed', performance.now() - _t0);\n computingSet.delete(node as ComputedNode<unknown>);\n currentSubscriber = prevSubscriber;\n exitBatch();\n }\n}\n\n// --- Effect ---\n\n// Strategy 1: Class-based effect node\nclass EffectNode implements ScheduledEffect {\n _tag: 'effect' = 'effect';\n _fn: () => void | (() => void);\n _cleanup: (() => void) | null;\n _sources: (SignalNode<any> | ComputedNode<any>)[] | null;\n _disposed: boolean;\n isRender: boolean;\n _lastSeen: Map<unknown, unknown> | null;\n\n constructor(fn: () => void | (() => void), isRender: boolean) {\n this._fn = fn;\n this._cleanup = null;\n this._sources = null; // lazy\n this._disposed = false;\n this.isRender = isRender;\n this._lastSeen = null;\n }\n\n run(): void {\n runEffect(this);\n }\n}\n\nexport function effect(\n fn: () => void | (() => void),\n options?: { render?: boolean },\n): () => void {\n const node = new EffectNode(fn, options?.render ?? false);\n\n // Run immediately to establish dependencies\n runEffect(node);\n\n // Return dispose function\n return () => {\n node._disposed = true;\n cleanupEffect(node);\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n };\n}\n\nfunction runEffect(node: EffectNode): void {\n if (node._disposed) return;\n\n // Before re-running, check if any dirty computed source actually changed.\n if (node._sources !== null && node._sources.length > 0) {\n let anyChanged = false;\n for (let i = 0; i < node._sources.length; i++) {\n const source = node._sources[i];\n if (source instanceof ComputedNode) {\n if (source._state === ComputedState.Dirty) {\n recompute(source, true);\n }\n if (node._lastSeen !== null && node._lastSeen.has(source)) {\n const lastSeen = node._lastSeen.get(source);\n if (!source._equals(lastSeen as never, source._value as never)) {\n anyChanged = true;\n }\n } else {\n anyChanged = true;\n }\n } else {\n anyChanged = true;\n }\n }\n if (!anyChanged) return;\n }\n\n // Clean up previous run\n cleanupEffect(node);\n\n // Save old sources in case the effect throws\n const prevSources = node._sources !== null ? node._sources.slice() : null;\n\n // Clean up old source subscriptions\n if (node._sources !== null) {\n for (let i = 0; i < node._sources.length; i++) {\n node._sources[i]._subscribers = removeSubscriber(node._sources[i]._subscribers, node);\n }\n node._sources = null;\n }\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n const _t0 = __DEV__ && isProfiling() ? performance.now() : 0;\n\n try {\n const result = node._fn();\n if (typeof result === 'function') {\n node._cleanup = result;\n }\n } catch (err) {\n // Re-subscribe to previous sources so the effect can recover on next change\n if (prevSources !== null) {\n node._sources = prevSources;\n for (let i = 0; i < prevSources.length; i++) {\n prevSources[i]._subscribers = addSubscriber(prevSources[i]._subscribers, node);\n }\n }\n console.error('[AkashJS] Error in effect (will retry on next signal change):', err);\n } finally {\n if (__DEV__ && _t0) recordPerfEntry('effect', 'effect', performance.now() - _t0);\n currentSubscriber = prevSubscriber;\n\n // Cache computed values for next dirty check\n if (node._sources !== null) {\n let lastSeen: Map<unknown, unknown> | null = null;\n for (let i = 0; i < node._sources.length; i++) {\n const source = node._sources[i];\n if (source instanceof ComputedNode) {\n if (lastSeen === null) lastSeen = new Map();\n lastSeen.set(source, source._value);\n }\n }\n node._lastSeen = lastSeen;\n } else {\n node._lastSeen = null;\n }\n }\n}\n\nfunction cleanupEffect(node: EffectNode): void {\n if (node._cleanup) {\n try {\n node._cleanup();\n } catch (err) {\n console.error('[AkashJS] Error in effect cleanup (ignored):', err);\n }\n node._cleanup = null;\n }\n}\n\n// --- Untrack ---\n\n/** Execute a function without tracking any signal reads */\nexport function untrack<T>(fn: () => T): T {\n const prev = currentSubscriber;\n currentSubscriber = null;\n try {\n return fn();\n } finally {\n currentSubscriber = prev;\n }\n}\n\n// --- on() helper ---\n\n/**\n * Create an effect callback that only tracks specific signals.\n * All other signal reads inside the callback are untracked.\n *\n * ```ts\n * effect(on(url, (currentUrl, prevUrl) => {\n * fetch(currentUrl, options()); // options() not tracked\n * }));\n *\n * effect(on([url, page], ([u, p], prev) => {\n * fetch(`${u}?page=${p}`);\n * }));\n * ```\n */\nexport function on<T>(\n dep: () => T,\n fn: (value: T, prev: T | undefined) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void);\nexport function on<T extends readonly (() => unknown)[]>(\n deps: [...T],\n fn: (values: { [K in keyof T]: ReturnType<T[K]> }, prev: { [K in keyof T]: ReturnType<T[K]> } | undefined) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void);\nexport function on(\n deps: (() => any) | (() => any)[],\n fn: (values: any, prev: any) => void | (() => void),\n options?: { defer?: boolean },\n): () => void | (() => void) {\n const isArray = Array.isArray(deps);\n const depArray = isArray ? deps : [deps];\n let prevValues: unknown[] | undefined;\n let isFirst = true;\n\n return () => {\n // Track only the specified deps\n const values = depArray.map(d => d());\n\n if (isFirst) {\n isFirst = false;\n prevValues = values.slice();\n if (options?.defer !== false) return;\n }\n\n const prev = prevValues;\n prevValues = values.slice();\n\n return untrack(() => fn(\n isArray ? values : values[0],\n prev ? (isArray ? prev : prev[0]) : undefined,\n ));\n };\n}\n\n// --- Internal helpers ---\n\nfunction trackSubscriber(\n node: SignalNode<any> | ComputedNode<any>,\n): void {\n if (currentSubscriber) {\n node._subscribers = addSubscriber(node._subscribers, currentSubscriber);\n\n if ('_sources' in currentSubscriber) {\n addSource(currentSubscriber as any, node);\n }\n }\n}\n\nfunction notifySubscribers(\n node: SignalNode<any> | ComputedNode<any>,\n): void {\n forEachSubscriber(node._subscribers, (sub) => {\n if (sub._tag === 'computed') {\n (sub as ComputedNode<any>)._state = ComputedState.Dirty;\n notifySubscribers(sub as ComputedNode<any>);\n } else if (sub._tag === 'effect') {\n scheduleEffect(sub as unknown as ScheduledEffect);\n }\n });\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c,e}from'./chunk-YXKQTEPR.js';function m(o,t){let e=c(0),n=c(t?.immediate!==false),u=null;function a(){l(),u=setInterval(()=>e.update(r=>r+1),o);}function l(){u&&(clearInterval(u),u=null);}return n()&&a(),{count:(()=>e()),isActive:(()=>n()),pause(){n.set(false),l();},resume(){n.set(true),a();},reset(){e.set(0);},dispose(){l();}}}function f(o){let t=c(false),e=null;function n(){u(),t.set(false),e=setTimeout(()=>t.set(true),o);}function u(){e&&(clearTimeout(e),e=null);}return n(),{ready:(()=>t()),restart(){n();},dispose(){u();}}}function d(o,t){let e$1=c(o()),n=null;return e(()=>{let u=o();return n&&clearTimeout(n),n=setTimeout(()=>e$1.set(u),t),()=>{n&&clearTimeout(n);}}),(()=>e$1())}function T(o,t){let e$1=c(o()),n=0,u=null;return e(()=>{let a=o(),l=Date.now(),r=l-n;return r>=t?(e$1.set(a),n=l):(u&&clearTimeout(u),u=setTimeout(()=>{e$1.set(a),n=Date.now();},t-r)),()=>{u&&clearTimeout(u);}}),(()=>e$1())}function p(o=0,t){let e=t?.min??-1/0,n=t?.max??1/0,u=l=>Math.min(n,Math.max(e,l)),a=c(u(o));return {count:(()=>a()),inc(l=1){a.update(r=>u(r+l));},dec(l=1){a.update(r=>u(r-l));},set(l){a.set(u(l));},reset(){a.set(u(o));}}}function y(o=false){let t=c(o);return {value:(()=>t()),toggle(){t.update(e=>!e);},setTrue(){t.set(true);},setFalse(){t.set(false);}}}function g(o){let t,e$1=c(void 0);return e(()=>{let n=o();e$1.set(t),t=n;}),(()=>e$1())}export{m as a,f as b,d as c,T as d,p as e,y as f,g};//# sourceMappingURL=chunk-Z6K4FYG6.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-Z6K4FYG6.js.map
|