@saolabs/client 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -195
- package/dist/index.d.ts +20 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/plugins.d.ts +2 -2
- package/dist/plugins.js +2 -2
- package/dist/src/core/app/Application.d.ts +17 -15
- package/dist/src/core/app/Application.d.ts.map +1 -1
- package/dist/src/core/app/Application.js +41 -18
- package/dist/src/core/app/Application.js.map +1 -1
- package/dist/src/core/bootstrap/app.d.ts +1 -1
- package/dist/src/core/bootstrap/app.d.ts.map +1 -1
- package/dist/src/core/bootstrap/app.js +74 -4
- package/dist/src/core/bootstrap/app.js.map +1 -1
- package/dist/src/core/bootstrap/bundle.d.ts +41 -0
- package/dist/src/core/bootstrap/bundle.d.ts.map +1 -0
- package/dist/src/core/bootstrap/bundle.js +98 -0
- package/dist/src/core/bootstrap/bundle.js.map +1 -0
- package/dist/src/core/bootstrap/providers/ApiServiceProvider.d.ts +1 -1
- package/dist/src/core/bootstrap/providers/ApiServiceProvider.d.ts.map +1 -1
- package/dist/src/core/bootstrap/providers/ApiServiceProvider.js +3 -3
- package/dist/src/core/bootstrap/providers/ApiServiceProvider.js.map +1 -1
- package/dist/src/core/bootstrap/providers/CoreServiceProvider.d.ts +1 -1
- package/dist/src/core/bootstrap/providers/CoreServiceProvider.d.ts.map +1 -1
- package/dist/src/core/bootstrap/providers/CoreServiceProvider.js +11 -8
- package/dist/src/core/bootstrap/providers/CoreServiceProvider.js.map +1 -1
- package/dist/src/core/bootstrap/providers/HelperServiceProvider.d.ts +3 -1
- package/dist/src/core/bootstrap/providers/HelperServiceProvider.d.ts.map +1 -1
- package/dist/src/core/bootstrap/providers/HelperServiceProvider.js +8 -3
- package/dist/src/core/bootstrap/providers/HelperServiceProvider.js.map +1 -1
- package/dist/src/core/bootstrap/providers/RouteServiceProvider.d.ts +2 -1
- package/dist/src/core/bootstrap/providers/RouteServiceProvider.d.ts.map +1 -1
- package/dist/src/core/bootstrap/providers/RouteServiceProvider.js +14 -4
- package/dist/src/core/bootstrap/providers/RouteServiceProvider.js.map +1 -1
- package/dist/src/core/bootstrap/providers/ServiceProvider.d.ts +4 -4
- package/dist/src/core/bootstrap/providers/ServiceProvider.d.ts.map +1 -1
- package/dist/src/core/bootstrap/providers/ServiceProvider.js +5 -5
- package/dist/src/core/bootstrap/providers/ServiceProvider.js.map +1 -1
- package/dist/src/core/bootstrap/providers/ViewServiceProvider.d.ts +1 -1
- package/dist/src/core/bootstrap/providers/ViewServiceProvider.d.ts.map +1 -1
- package/dist/src/core/bootstrap/providers/ViewServiceProvider.js +3 -3
- package/dist/src/core/bootstrap/providers/ViewServiceProvider.js.map +1 -1
- package/dist/src/core/bootstrap/providers/default-providers.d.ts +1 -1
- package/dist/src/core/bootstrap/providers/default-providers.d.ts.map +1 -1
- package/dist/src/core/bootstrap/providers/default-providers.js +44 -11
- package/dist/src/core/bootstrap/providers/default-providers.js.map +1 -1
- package/dist/src/core/bootstrap/providers/index.d.ts +9 -9
- package/dist/src/core/bootstrap/providers/index.d.ts.map +1 -1
- package/dist/src/core/bootstrap/providers/index.js +8 -8
- package/dist/src/core/bootstrap/providers/index.js.map +1 -1
- package/dist/src/core/bootstrap/providers/provider-order.d.ts +1 -1
- package/dist/src/core/bootstrap/providers/provider-order.d.ts.map +1 -1
- package/dist/src/core/bootstrap/ssr.d.ts +47 -0
- package/dist/src/core/bootstrap/ssr.d.ts.map +1 -0
- package/dist/src/core/bootstrap/ssr.js +125 -0
- package/dist/src/core/bootstrap/ssr.js.map +1 -0
- package/dist/src/core/cache/ViewCache.d.ts +1 -1
- package/dist/src/core/cache/ViewCache.d.ts.map +1 -1
- package/dist/src/core/cache/index.d.ts +1 -1
- package/dist/src/core/cache/index.d.ts.map +1 -1
- package/dist/src/core/cache/index.js +1 -1
- package/dist/src/core/cache/index.js.map +1 -1
- package/dist/src/core/contracts/ApplicationInterface.d.ts +13 -11
- package/dist/src/core/contracts/ApplicationInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/BlockInterface.d.ts +10 -10
- package/dist/src/core/contracts/BlockInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/BundleInterface.d.ts +38 -0
- package/dist/src/core/contracts/BundleInterface.d.ts.map +1 -0
- package/dist/src/core/contracts/BundleInterface.js +2 -0
- package/dist/src/core/contracts/BundleInterface.js.map +1 -0
- package/dist/src/core/contracts/ComponentInterface.d.ts +7 -6
- package/dist/src/core/contracts/ComponentInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/ElementInterface.d.ts +91 -27
- package/dist/src/core/contracts/ElementInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/HeadServiceInterface.d.ts +37 -0
- package/dist/src/core/contracts/HeadServiceInterface.d.ts.map +1 -0
- package/dist/src/core/contracts/HeadServiceInterface.js +3 -0
- package/dist/src/core/contracts/HeadServiceInterface.js.map +1 -0
- package/dist/src/core/contracts/HelperInterface.d.ts +9 -1
- package/dist/src/core/contracts/HelperInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/HttpServiceInterface.d.ts +3 -0
- package/dist/src/core/contracts/HttpServiceInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/MarkerInterface.d.ts +29 -44
- package/dist/src/core/contracts/MarkerInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/ReactiveInterface.d.ts +9 -9
- package/dist/src/core/contracts/ReactiveInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/RouterInterface.d.ts +5 -2
- package/dist/src/core/contracts/RouterInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/SectionInterface.d.ts +48 -0
- package/dist/src/core/contracts/SectionInterface.d.ts.map +1 -0
- package/dist/src/core/contracts/SectionInterface.js +2 -0
- package/dist/src/core/contracts/SectionInterface.js.map +1 -0
- package/dist/src/core/contracts/ServiceProviderInterface.d.ts +3 -3
- package/dist/src/core/contracts/ServiceProviderInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/ViewControllerInterface.d.ts +116 -15
- package/dist/src/core/contracts/ViewControllerInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/ViewInterface.d.ts +31 -5
- package/dist/src/core/contracts/ViewInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/ViewManagerInterface.d.ts +47 -5
- package/dist/src/core/contracts/ViewManagerInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/ViewStateInterface.d.ts +39 -2
- package/dist/src/core/contracts/ViewStateInterface.d.ts.map +1 -1
- package/dist/src/core/contracts/common.d.ts +3 -3
- package/dist/src/core/contracts/common.js +3 -3
- package/dist/src/core/contracts/utils.d.ts +19 -19
- package/dist/src/core/contracts/utils.d.ts.map +1 -1
- package/dist/src/core/contracts/views.d.ts +1 -22
- package/dist/src/core/contracts/views.d.ts.map +1 -1
- package/dist/src/core/devtools/hook.d.ts +66 -0
- package/dist/src/core/devtools/hook.d.ts.map +1 -0
- package/dist/src/core/devtools/hook.js +114 -0
- package/dist/src/core/devtools/hook.js.map +1 -0
- package/dist/src/core/devtools/index.d.ts +34 -0
- package/dist/src/core/devtools/index.d.ts.map +1 -0
- package/dist/src/core/devtools/index.js +33 -0
- package/dist/src/core/devtools/index.js.map +1 -0
- package/dist/src/core/devtools/inspector.d.ts +31 -0
- package/dist/src/core/devtools/inspector.d.ts.map +1 -0
- package/dist/src/core/devtools/inspector.js +249 -0
- package/dist/src/core/devtools/inspector.js.map +1 -0
- package/dist/src/core/elements/Block.d.ts +9 -7
- package/dist/src/core/elements/Block.d.ts.map +1 -1
- package/dist/src/core/elements/Block.js +33 -9
- package/dist/src/core/elements/Block.js.map +1 -1
- package/dist/src/core/elements/BlockOutlet.d.ts +19 -8
- package/dist/src/core/elements/BlockOutlet.d.ts.map +1 -1
- package/dist/src/core/elements/BlockOutlet.js +57 -13
- package/dist/src/core/elements/BlockOutlet.js.map +1 -1
- package/dist/src/core/elements/Component.d.ts +83 -11
- package/dist/src/core/elements/Component.d.ts.map +1 -1
- package/dist/src/core/elements/Component.js +334 -13
- package/dist/src/core/elements/Component.js.map +1 -1
- package/dist/src/core/elements/ForeachSlotCache.d.ts +95 -0
- package/dist/src/core/elements/ForeachSlotCache.d.ts.map +1 -0
- package/dist/src/core/elements/ForeachSlotCache.js +149 -0
- package/dist/src/core/elements/ForeachSlotCache.js.map +1 -0
- package/dist/src/core/elements/Fragment.d.ts +19 -13
- package/dist/src/core/elements/Fragment.d.ts.map +1 -1
- package/dist/src/core/elements/Fragment.js +43 -20
- package/dist/src/core/elements/Fragment.js.map +1 -1
- package/dist/src/core/elements/Html.d.ts +89 -12
- package/dist/src/core/elements/Html.d.ts.map +1 -1
- package/dist/src/core/elements/Html.js +707 -106
- package/dist/src/core/elements/Html.js.map +1 -1
- package/dist/src/core/elements/Output.d.ts +34 -10
- package/dist/src/core/elements/Output.d.ts.map +1 -1
- package/dist/src/core/elements/Output.js +141 -26
- package/dist/src/core/elements/Output.js.map +1 -1
- package/dist/src/core/elements/Reactive.d.ts +85 -14
- package/dist/src/core/elements/Reactive.d.ts.map +1 -1
- package/dist/src/core/elements/Reactive.js +315 -41
- package/dist/src/core/elements/Reactive.js.map +1 -1
- package/dist/src/core/elements/TextElement.d.ts +11 -7
- package/dist/src/core/elements/TextElement.d.ts.map +1 -1
- package/dist/src/core/elements/TextElement.js +18 -11
- package/dist/src/core/elements/TextElement.js.map +1 -1
- package/dist/src/core/elements/Wrapper.d.ts +24 -13
- package/dist/src/core/elements/Wrapper.d.ts.map +1 -1
- package/dist/src/core/elements/Wrapper.js +65 -8
- package/dist/src/core/elements/Wrapper.js.map +1 -1
- package/dist/src/core/elements/Yield.d.ts +10 -9
- package/dist/src/core/elements/Yield.d.ts.map +1 -1
- package/dist/src/core/elements/Yield.js +31 -19
- package/dist/src/core/elements/Yield.js.map +1 -1
- package/dist/src/core/elements/helpers.d.ts +7 -7
- package/dist/src/core/elements/helpers.d.ts.map +1 -1
- package/dist/src/core/elements/helpers.js +4 -4
- package/dist/src/core/elements/index.d.ts +12 -11
- package/dist/src/core/elements/index.d.ts.map +1 -1
- package/dist/src/core/elements/index.js +12 -11
- package/dist/src/core/elements/index.js.map +1 -1
- package/dist/src/core/elements/reconcileChildren.d.ts +7 -0
- package/dist/src/core/elements/reconcileChildren.d.ts.map +1 -0
- package/dist/src/core/elements/reconcileChildren.js +74 -0
- package/dist/src/core/elements/reconcileChildren.js.map +1 -0
- package/dist/src/core/hellpers/utils.d.ts +2 -2
- package/dist/src/core/hellpers/utils.js +4 -4
- package/dist/src/core/helpers/ApiClient.d.ts +58 -0
- package/dist/src/core/helpers/ApiClient.d.ts.map +1 -0
- package/dist/src/core/helpers/ApiClient.js +131 -0
- package/dist/src/core/helpers/ApiClient.js.map +1 -0
- package/dist/src/core/helpers/app.d.ts +3 -0
- package/dist/src/core/helpers/app.d.ts.map +1 -0
- package/dist/src/core/helpers/app.js +63 -0
- package/dist/src/core/helpers/app.js.map +1 -0
- package/dist/src/core/helpers/transition.d.ts +34 -0
- package/dist/src/core/helpers/transition.d.ts.map +1 -0
- package/dist/src/core/helpers/transition.js +118 -0
- package/dist/src/core/helpers/transition.js.map +1 -0
- package/dist/src/core/helpers/utils.d.ts +26 -0
- package/dist/src/core/helpers/utils.d.ts.map +1 -0
- package/dist/src/core/helpers/utils.js +96 -0
- package/dist/src/core/helpers/utils.js.map +1 -0
- package/dist/src/core/helpers/view.d.ts +39 -0
- package/dist/src/core/helpers/view.d.ts.map +1 -0
- package/dist/src/core/helpers/view.js +286 -0
- package/dist/src/core/helpers/view.js.map +1 -0
- package/dist/src/core/routers/Router.d.ts +108 -7
- package/dist/src/core/routers/Router.d.ts.map +1 -1
- package/dist/src/core/routers/Router.js +444 -68
- package/dist/src/core/routers/Router.js.map +1 -1
- package/dist/src/core/routers/index.d.ts +2 -2
- package/dist/src/core/routers/index.d.ts.map +1 -1
- package/dist/src/core/routers/index.js +1 -1
- package/dist/src/core/routers/index.js.map +1 -1
- package/dist/src/core/services/AssetManager.d.ts +112 -0
- package/dist/src/core/services/AssetManager.d.ts.map +1 -0
- package/dist/src/core/services/AssetManager.js +361 -0
- package/dist/src/core/services/AssetManager.js.map +1 -0
- package/dist/src/core/services/BlockManager.d.ts +73 -2
- package/dist/src/core/services/BlockManager.d.ts.map +1 -1
- package/dist/src/core/services/BlockManager.js +270 -48
- package/dist/src/core/services/BlockManager.js.map +1 -1
- package/dist/src/core/services/DomService.js +3 -3
- package/dist/src/core/services/DomService.js.map +1 -1
- package/dist/src/core/services/HeadService.d.ts +24 -0
- package/dist/src/core/services/HeadService.d.ts.map +1 -0
- package/dist/src/core/services/HeadService.js +120 -0
- package/dist/src/core/services/HeadService.js.map +1 -0
- package/dist/src/core/services/HelperService.d.ts +14 -3
- package/dist/src/core/services/HelperService.d.ts.map +1 -1
- package/dist/src/core/services/HelperService.js +32 -2
- package/dist/src/core/services/HelperService.js.map +1 -1
- package/dist/src/core/services/HttpService.d.ts +8 -0
- package/dist/src/core/services/HttpService.d.ts.map +1 -1
- package/dist/src/core/services/HttpService.js +121 -47
- package/dist/src/core/services/HttpService.js.map +1 -1
- package/dist/src/core/services/MarkerRegistry.d.ts +51 -8
- package/dist/src/core/services/MarkerRegistry.d.ts.map +1 -1
- package/dist/src/core/services/MarkerRegistry.js +135 -14
- package/dist/src/core/services/MarkerRegistry.js.map +1 -1
- package/dist/src/core/services/PageCache.d.ts +101 -0
- package/dist/src/core/services/PageCache.d.ts.map +1 -0
- package/dist/src/core/services/PageCache.js +184 -0
- package/dist/src/core/services/PageCache.js.map +1 -0
- package/dist/src/core/services/SectionManager.d.ts +100 -0
- package/dist/src/core/services/SectionManager.d.ts.map +1 -0
- package/dist/src/core/services/SectionManager.js +408 -0
- package/dist/src/core/services/SectionManager.js.map +1 -0
- package/dist/src/core/services/StorageService.js +1 -1
- package/dist/src/core/services/TranslationService.d.ts +21 -0
- package/dist/src/core/services/TranslationService.d.ts.map +1 -0
- package/dist/src/core/services/TranslationService.js +95 -0
- package/dist/src/core/services/TranslationService.js.map +1 -0
- package/dist/src/core/services/index.d.ts +11 -8
- package/dist/src/core/services/index.d.ts.map +1 -1
- package/dist/src/core/services/index.js +11 -8
- package/dist/src/core/services/index.js.map +1 -1
- package/dist/src/core/types/utils.d.ts +8 -8
- package/dist/src/core/types/utils.d.ts.map +1 -1
- package/dist/src/core/view/LoopContext.d.ts +21 -1
- package/dist/src/core/view/LoopContext.d.ts.map +1 -1
- package/dist/src/core/view/LoopContext.js +36 -0
- package/dist/src/core/view/LoopContext.js.map +1 -1
- package/dist/src/core/view/ResourceScope.d.ts +38 -0
- package/dist/src/core/view/ResourceScope.d.ts.map +1 -0
- package/dist/src/core/view/ResourceScope.js +167 -0
- package/dist/src/core/view/ResourceScope.js.map +1 -0
- package/dist/src/core/view/Section.d.ts +17 -32
- package/dist/src/core/view/Section.d.ts.map +1 -1
- package/dist/src/core/view/Section.js +14 -55
- package/dist/src/core/view/Section.js.map +1 -1
- package/dist/src/core/view/View.d.ts +43 -7
- package/dist/src/core/view/View.d.ts.map +1 -1
- package/dist/src/core/view/View.js +22 -4
- package/dist/src/core/view/View.js.map +1 -1
- package/dist/src/core/view/ViewController.d.ts +313 -40
- package/dist/src/core/view/ViewController.d.ts.map +1 -1
- package/dist/src/core/view/ViewController.js +1002 -147
- package/dist/src/core/view/ViewController.js.map +1 -1
- package/dist/src/core/view/ViewManager.d.ts +318 -27
- package/dist/src/core/view/ViewManager.d.ts.map +1 -1
- package/dist/src/core/view/ViewManager.js +1199 -258
- package/dist/src/core/view/ViewManager.js.map +1 -1
- package/dist/src/core/view/ViewState.d.ts +185 -6
- package/dist/src/core/view/ViewState.d.ts.map +1 -1
- package/dist/src/core/view/ViewState.js +851 -123
- package/dist/src/core/view/ViewState.js.map +1 -1
- package/dist/src/core/view/index.d.ts +5 -5
- package/dist/src/core/view/index.d.ts.map +1 -1
- package/dist/src/core/view/index.js +5 -5
- package/dist/src/core/view/index.js.map +1 -1
- package/dist/src/testing/index.d.ts +69 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +140 -0
- package/dist/src/testing/index.js.map +1 -0
- package/index.ts +29 -5
- package/package.json +30 -21
- package/plugins.ts +2 -2
- package/src/core/app/Application.ts +58 -31
- package/src/core/bootstrap/app.ts +80 -6
- package/src/core/bootstrap/bundle.ts +101 -0
- package/src/core/bootstrap/providers/ApiServiceProvider.ts +4 -4
- package/src/core/bootstrap/providers/CoreServiceProvider.ts +14 -8
- package/src/core/bootstrap/providers/HelperServiceProvider.ts +8 -3
- package/src/core/bootstrap/providers/RouteServiceProvider.ts +15 -4
- package/src/core/bootstrap/providers/ServiceProvider.ts +8 -8
- package/src/core/bootstrap/providers/ViewServiceProvider.ts +3 -3
- package/src/core/bootstrap/providers/default-providers.ts +51 -16
- package/src/core/bootstrap/providers/index.ts +9 -9
- package/src/core/bootstrap/providers/provider-order.test.ts +16 -27
- package/src/core/bootstrap/providers/provider-order.ts +1 -1
- package/src/core/bootstrap/ssr.ts +136 -0
- package/src/core/cache/ViewCache.ts +1 -1
- package/src/core/cache/index.ts +1 -1
- package/src/core/contracts/ApplicationInterface.ts +13 -11
- package/src/core/contracts/BlockInterface.ts +18 -18
- package/src/core/contracts/BundleInterface.ts +40 -0
- package/src/core/contracts/ComponentInterface.ts +7 -6
- package/src/core/contracts/ElementInterface.ts +95 -27
- package/src/core/contracts/HeadServiceInterface.ts +41 -0
- package/src/core/contracts/HelperInterface.ts +9 -1
- package/src/core/contracts/HttpServiceInterface.ts +3 -0
- package/src/core/contracts/MarkerInterface.ts +22 -49
- package/src/core/contracts/ReactiveInterface.ts +9 -9
- package/src/core/contracts/RouterInterface.ts +5 -2
- package/src/core/contracts/SectionInterface.ts +49 -0
- package/src/core/contracts/ServiceProviderInterface.ts +3 -3
- package/src/core/contracts/ViewControllerInterface.ts +124 -16
- package/src/core/contracts/ViewInterface.ts +34 -5
- package/src/core/contracts/ViewManagerInterface.ts +40 -5
- package/src/core/contracts/ViewStateInterface.ts +39 -2
- package/src/core/contracts/common.ts +3 -3
- package/src/core/contracts/utils.ts +19 -19
- package/src/core/contracts/views.ts +2 -22
- package/src/core/devtools/hook.ts +142 -0
- package/src/core/devtools/index.ts +38 -0
- package/src/core/devtools/inspector.ts +270 -0
- package/src/core/elements/Block.ts +43 -21
- package/src/core/elements/BlockOutlet.ts +61 -21
- package/src/core/elements/Component.ts +352 -18
- package/src/core/elements/ElementManager.ts +9 -9
- package/src/core/elements/ForeachSlotCache.ts +170 -0
- package/src/core/elements/Fragment.ts +50 -32
- package/src/core/elements/Html.ts +696 -117
- package/src/core/elements/Output.ts +147 -30
- package/src/core/elements/Reactive.ts +329 -52
- package/src/core/elements/TextElement.ts +25 -16
- package/src/core/elements/Wrapper.ts +84 -18
- package/src/core/elements/Yield.ts +35 -24
- package/src/core/elements/helpers.ts +12 -12
- package/src/core/elements/index.ts +25 -24
- package/src/core/elements/reconcileChildren.ts +70 -0
- package/src/core/{hellpers → helpers}/ApiClient.ts +8 -1
- package/src/core/{hellpers → helpers}/app.ts +13 -2
- package/src/core/helpers/transition.ts +127 -0
- package/src/core/{hellpers → helpers}/utils.ts +4 -4
- package/src/core/helpers/view.ts +283 -0
- package/src/core/routers/Router.ts +458 -64
- package/src/core/routers/index.ts +2 -2
- package/src/core/services/AssetManager.ts +387 -0
- package/src/core/services/BlockManager.ts +272 -50
- package/src/core/services/DomService.ts +3 -3
- package/src/core/services/HeadService.ts +124 -0
- package/src/core/services/HelperService.ts +34 -4
- package/src/core/services/HttpService.ts +116 -55
- package/src/core/services/MarkerRegistry.ts +142 -16
- package/src/core/services/PageCache.ts +239 -0
- package/src/core/services/SectionManager.ts +387 -0
- package/src/core/services/StorageService.ts +1 -1
- package/src/core/services/TranslationService.ts +91 -0
- package/src/core/services/index.ts +11 -8
- package/src/core/types/utils.ts +8 -8
- package/src/core/view/LoopContext.ts +38 -1
- package/src/core/view/ResourceScope.ts +174 -0
- package/src/core/view/Section.ts +21 -68
- package/src/core/view/View.ts +57 -8
- package/src/core/view/ViewController.ts +1070 -186
- package/src/core/view/ViewManager.ts +1346 -272
- package/src/core/view/ViewState.ts +834 -116
- package/src/core/view/index.ts +5 -5
- package/src/testing/index.ts +184 -0
- package/dist/src/core/services/MarkerService.d.ts +0 -299
- package/dist/src/core/services/MarkerService.d.ts.map +0 -1
- package/dist/src/core/services/MarkerService.js +0 -723
- package/dist/src/core/services/MarkerService.js.map +0 -1
- package/src/core/services/MarkerService.ts +0 -923
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpService.js","sourceRoot":"","sources":["../../../../src/core/services/HttpService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"HttpService.js","sourceRoot":"","sources":["../../../../src/core/services/HttpService.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,10 +17,14 @@
|
|
|
17
17
|
* - Compiler — to know tag shortcut mappings for generated code
|
|
18
18
|
* - DevTools (future) — to inspect/debug the element tree via markers
|
|
19
19
|
*/
|
|
20
|
-
import { MarkerRegistryRecord } from "../contracts/MarkerInterface";
|
|
21
|
-
export declare class MarkerRegistryService {
|
|
20
|
+
import { MarkerRegistryInterface, MarkerRegistryRecord } from "../contracts/MarkerInterface.js";
|
|
21
|
+
export declare class MarkerRegistryService implements MarkerRegistryInterface {
|
|
22
22
|
static class: string;
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Tag name → short abbreviation (for compact DOM comments).
|
|
25
|
+
* PHẢI khớp 1-1 với server core/ViewStorageManager::$markerTagShortcut —
|
|
26
|
+
* lệch shortcut nào thì marker loại đó không claim được khi hydrate.
|
|
27
|
+
*/
|
|
24
28
|
private shortcuts;
|
|
25
29
|
/** Reverse lookup: shortcut → full tag name */
|
|
26
30
|
private reverseShortcuts;
|
|
@@ -28,6 +32,16 @@ export declare class MarkerRegistryService {
|
|
|
28
32
|
private records;
|
|
29
33
|
/** Delimiter between tag shortcut and ID in keys */
|
|
30
34
|
private delimiter;
|
|
35
|
+
/**
|
|
36
|
+
* Saola marker prefix — format chuẩn (RUNTIME_CONTRACT.md §5.1):
|
|
37
|
+
* open: <!--s:{type}:{id}-s-->
|
|
38
|
+
* close: <!--s:{type}:{id}-e-->
|
|
39
|
+
* Phải khớp server (core ViewStorageManager) để hydration claim đúng.
|
|
40
|
+
*/
|
|
41
|
+
private prefix;
|
|
42
|
+
/** Hậu tố đánh dấu open/close marker */
|
|
43
|
+
private openSuffix;
|
|
44
|
+
private closeSuffix;
|
|
31
45
|
/** Auto-increment counter for generating unique IDs */
|
|
32
46
|
private counter;
|
|
33
47
|
constructor();
|
|
@@ -65,20 +79,49 @@ export declare class MarkerRegistryService {
|
|
|
65
79
|
clear(): void;
|
|
66
80
|
/** Total number of registered markers */
|
|
67
81
|
get size(): number;
|
|
82
|
+
/**
|
|
83
|
+
* Index text-comment → Comment node, dựng 1 lần cho mỗi lượt hydrate.
|
|
84
|
+
*
|
|
85
|
+
* Trước đây mỗi element (Reactive/Output/Component/Wrapper/BlockOutlet/Block)
|
|
86
|
+
* tự tạo TreeWalker quét toàn bộ comment trong parent để tìm đúng 2 chuỗi →
|
|
87
|
+
* O(số element × số comment). Với 400 row × 5 cột (~4000 marker) đo được
|
|
88
|
+
* ~210ms chỉ để claim. Index 1 lượt rồi Map.get đưa về O(N) tổng, ~1.5ms.
|
|
89
|
+
*
|
|
90
|
+
* null = chưa dựng (lazy — CSR không bao giờ chạm tới).
|
|
91
|
+
*/
|
|
92
|
+
private index;
|
|
93
|
+
/** Đã dựng lại index vì miss trong lượt microtask hiện tại chưa? */
|
|
94
|
+
private rebuiltOnMiss;
|
|
95
|
+
/** Bỏ index — gọi khi có HTML server MỚI vào DOM (đầu mỗi lượt hydrate). */
|
|
96
|
+
invalidateIndex(): void;
|
|
97
|
+
private buildIndex;
|
|
98
|
+
/**
|
|
99
|
+
* Claim cặp marker SSR `<!--s:{tag}:{id}-s-->` … `<!--s:{tag}:{id}-e-->`.
|
|
100
|
+
*
|
|
101
|
+
* @param scope Nếu truyền, cặp tìm được PHẢI nằm trong scope — không thì
|
|
102
|
+
* rơi về scan tuyến tính trong scope (giữ nguyên ngữ nghĩa cũ).
|
|
103
|
+
* @returns null khi server không render vùng này (partial hydration).
|
|
104
|
+
*/
|
|
105
|
+
claim(tag: string, id: string, scope?: Element | null): {
|
|
106
|
+
open: Comment;
|
|
107
|
+
close: Comment;
|
|
108
|
+
} | null;
|
|
109
|
+
/** Fallback hiếm: quét tuyến tính trong scope (ngữ nghĩa scan cũ). */
|
|
110
|
+
private scanForPair;
|
|
68
111
|
/**
|
|
69
112
|
* Create a comment string for a marker (open).
|
|
70
|
-
*
|
|
113
|
+
* Format chuẩn: 's:r:abc123-s' cho <!--s:r:abc123-s-->
|
|
71
114
|
*/
|
|
72
115
|
openComment(tag: string, id?: string): string;
|
|
73
116
|
/**
|
|
74
117
|
* Create a comment string for a closing marker.
|
|
75
|
-
*
|
|
118
|
+
* Format chuẩn: 's:r:abc123-e' cho <!--s:r:abc123-e-->
|
|
76
119
|
*/
|
|
77
120
|
closeComment(tag: string, id?: string): string;
|
|
78
121
|
/**
|
|
79
|
-
* Parse a comment node's text to extract tag and id.
|
|
80
|
-
* '
|
|
81
|
-
* '
|
|
122
|
+
* Parse a comment node's text to extract tag and id (format chuẩn §5.1).
|
|
123
|
+
* 's:r:abc123-s' → { tag: 'reactive', id: 'abc123', isClose: false }
|
|
124
|
+
* 's:r:abc123-e' → { tag: 'reactive', id: 'abc123', isClose: true }
|
|
82
125
|
*/
|
|
83
126
|
parseComment(text: string): {
|
|
84
127
|
tag: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkerRegistry.d.ts","sourceRoot":"","sources":["../../../../src/core/services/MarkerRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"MarkerRegistry.d.ts","sourceRoot":"","sources":["../../../../src/core/services/MarkerRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,11 @@
|
|
|
19
19
|
*/
|
|
20
20
|
export class MarkerRegistryService {
|
|
21
21
|
constructor() {
|
|
22
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Tag name → short abbreviation (for compact DOM comments).
|
|
24
|
+
* PHẢI khớp 1-1 với server core/ViewStorageManager::$markerTagShortcut —
|
|
25
|
+
* lệch shortcut nào thì marker loại đó không claim được khi hydrate.
|
|
26
|
+
*/
|
|
23
27
|
this.shortcuts = {
|
|
24
28
|
view: 'v',
|
|
25
29
|
component: 'c',
|
|
@@ -30,9 +34,12 @@ export class MarkerRegistryService {
|
|
|
30
34
|
section: 's',
|
|
31
35
|
fragment: 'frg',
|
|
32
36
|
blockoutlet: 'bo',
|
|
37
|
+
output: 'o',
|
|
33
38
|
for: 'fo',
|
|
34
39
|
forin: 'fi',
|
|
35
40
|
foreach: 'fe',
|
|
41
|
+
forelse: 'fls',
|
|
42
|
+
each: 'ea',
|
|
36
43
|
while: 'wh',
|
|
37
44
|
if: 'if',
|
|
38
45
|
switch: 'sw',
|
|
@@ -52,8 +59,32 @@ export class MarkerRegistryService {
|
|
|
52
59
|
this.records = new Map();
|
|
53
60
|
/** Delimiter between tag shortcut and ID in keys */
|
|
54
61
|
this.delimiter = ':';
|
|
62
|
+
/**
|
|
63
|
+
* Saola marker prefix — format chuẩn (RUNTIME_CONTRACT.md §5.1):
|
|
64
|
+
* open: <!--s:{type}:{id}-s-->
|
|
65
|
+
* close: <!--s:{type}:{id}-e-->
|
|
66
|
+
* Phải khớp server (core ViewStorageManager) để hydration claim đúng.
|
|
67
|
+
*/
|
|
68
|
+
this.prefix = 's';
|
|
69
|
+
/** Hậu tố đánh dấu open/close marker */
|
|
70
|
+
this.openSuffix = '-s';
|
|
71
|
+
this.closeSuffix = '-e';
|
|
55
72
|
/** Auto-increment counter for generating unique IDs */
|
|
56
73
|
this.counter = 0;
|
|
74
|
+
// ─── Marker Index (O(1) claim khi hydrate) ──────────────────
|
|
75
|
+
/**
|
|
76
|
+
* Index text-comment → Comment node, dựng 1 lần cho mỗi lượt hydrate.
|
|
77
|
+
*
|
|
78
|
+
* Trước đây mỗi element (Reactive/Output/Component/Wrapper/BlockOutlet/Block)
|
|
79
|
+
* tự tạo TreeWalker quét toàn bộ comment trong parent để tìm đúng 2 chuỗi →
|
|
80
|
+
* O(số element × số comment). Với 400 row × 5 cột (~4000 marker) đo được
|
|
81
|
+
* ~210ms chỉ để claim. Index 1 lượt rồi Map.get đưa về O(N) tổng, ~1.5ms.
|
|
82
|
+
*
|
|
83
|
+
* null = chưa dựng (lazy — CSR không bao giờ chạm tới).
|
|
84
|
+
*/
|
|
85
|
+
this.index = null;
|
|
86
|
+
/** Đã dựng lại index vì miss trong lượt microtask hiện tại chưa? */
|
|
87
|
+
this.rebuiltOnMiss = false;
|
|
57
88
|
this.buildReverseShortcuts();
|
|
58
89
|
}
|
|
59
90
|
// ─── Tag Shortcuts ──────────────────────────────────────────
|
|
@@ -136,42 +167,132 @@ export class MarkerRegistryService {
|
|
|
136
167
|
clear() {
|
|
137
168
|
this.records.clear();
|
|
138
169
|
this.counter = 0;
|
|
170
|
+
this.index = null;
|
|
139
171
|
}
|
|
140
172
|
/** Total number of registered markers */
|
|
141
173
|
get size() {
|
|
142
174
|
return this.records.size;
|
|
143
175
|
}
|
|
176
|
+
/** Bỏ index — gọi khi có HTML server MỚI vào DOM (đầu mỗi lượt hydrate). */
|
|
177
|
+
invalidateIndex() {
|
|
178
|
+
this.index = null;
|
|
179
|
+
}
|
|
180
|
+
buildIndex() {
|
|
181
|
+
const idx = new Map();
|
|
182
|
+
const root = document.body ?? document.documentElement;
|
|
183
|
+
if (root) {
|
|
184
|
+
const head = this.prefix + this.delimiter; // "s:"
|
|
185
|
+
const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);
|
|
186
|
+
let node;
|
|
187
|
+
while ((node = walker.nextNode())) {
|
|
188
|
+
const value = (node.nodeValue ?? '').trim();
|
|
189
|
+
// Giữ node ĐẦU TIÊN theo document order — đúng thứ tự mà
|
|
190
|
+
// TreeWalker scan cũ trả về.
|
|
191
|
+
if (value.startsWith(head) && !idx.has(value))
|
|
192
|
+
idx.set(value, node);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
this.index = idx;
|
|
196
|
+
return idx;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Claim cặp marker SSR `<!--s:{tag}:{id}-s-->` … `<!--s:{tag}:{id}-e-->`.
|
|
200
|
+
*
|
|
201
|
+
* @param scope Nếu truyền, cặp tìm được PHẢI nằm trong scope — không thì
|
|
202
|
+
* rơi về scan tuyến tính trong scope (giữ nguyên ngữ nghĩa cũ).
|
|
203
|
+
* @returns null khi server không render vùng này (partial hydration).
|
|
204
|
+
*/
|
|
205
|
+
claim(tag, id, scope) {
|
|
206
|
+
const openText = this.openComment(tag, id);
|
|
207
|
+
const closeText = this.closeComment(tag, id);
|
|
208
|
+
let idx = this.index ?? this.buildIndex();
|
|
209
|
+
let open = idx.get(openText);
|
|
210
|
+
let close = idx.get(closeText);
|
|
211
|
+
// Miss có HAI nguyên nhân: (a) server không render vùng này — partial
|
|
212
|
+
// hydration, hợp lệ; (b) index cũ vì HTML server mới vào DOM sau lần
|
|
213
|
+
// dựng. Không phân biệt được trong O(1), nên dựng lại TỐI ĐA MỘT LẦN
|
|
214
|
+
// mỗi lượt microtask: burst hydrate đồng bộ chỉ tốn thêm 1 lượt quét,
|
|
215
|
+
// còn 499 miss thật sau đó vẫn O(1) (không quay lại O(N²)).
|
|
216
|
+
// Node rời DOM cũng là dấu hiệu index cũ → xử lý cùng nhánh.
|
|
217
|
+
const stale = (open && !open.isConnected) || (close && !close.isConnected);
|
|
218
|
+
if (stale || ((!open || !close) && !this.rebuiltOnMiss)) {
|
|
219
|
+
this.rebuiltOnMiss = true;
|
|
220
|
+
queueMicrotask(() => { this.rebuiltOnMiss = false; });
|
|
221
|
+
idx = this.buildIndex();
|
|
222
|
+
open = idx.get(openText);
|
|
223
|
+
close = idx.get(closeText);
|
|
224
|
+
}
|
|
225
|
+
if (!open || !close || !open.isConnected || !close.isConnected)
|
|
226
|
+
return null;
|
|
227
|
+
if (scope && !(scope.contains(open) && scope.contains(close))) {
|
|
228
|
+
return this.scanForPair(scope, openText, closeText);
|
|
229
|
+
}
|
|
230
|
+
return { open, close };
|
|
231
|
+
}
|
|
232
|
+
/** Fallback hiếm: quét tuyến tính trong scope (ngữ nghĩa scan cũ). */
|
|
233
|
+
scanForPair(scope, openText, closeText) {
|
|
234
|
+
const walker = document.createTreeWalker(scope, NodeFilter.SHOW_COMMENT);
|
|
235
|
+
let openNode = null;
|
|
236
|
+
let node;
|
|
237
|
+
while ((node = walker.nextNode())) {
|
|
238
|
+
const value = (node.nodeValue ?? '').trim();
|
|
239
|
+
if (!openNode && value === openText) {
|
|
240
|
+
openNode = node;
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
if (openNode && value === closeText)
|
|
244
|
+
return { open: openNode, close: node };
|
|
245
|
+
}
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
144
248
|
// ─── Comment Node Helpers ───────────────────────────────────
|
|
145
249
|
/**
|
|
146
250
|
* Create a comment string for a marker (open).
|
|
147
|
-
*
|
|
251
|
+
* Format chuẩn: 's:r:abc123-s' cho <!--s:r:abc123-s-->
|
|
148
252
|
*/
|
|
149
253
|
openComment(tag, id) {
|
|
150
|
-
|
|
254
|
+
const body = id ? `${this.shortcut(tag)}${this.delimiter}${id}` : this.shortcut(tag);
|
|
255
|
+
return `${this.prefix}${this.delimiter}${body}${this.openSuffix}`;
|
|
151
256
|
}
|
|
152
257
|
/**
|
|
153
258
|
* Create a comment string for a closing marker.
|
|
154
|
-
*
|
|
259
|
+
* Format chuẩn: 's:r:abc123-e' cho <!--s:r:abc123-e-->
|
|
155
260
|
*/
|
|
156
261
|
closeComment(tag, id) {
|
|
157
|
-
|
|
262
|
+
const body = id ? `${this.shortcut(tag)}${this.delimiter}${id}` : this.shortcut(tag);
|
|
263
|
+
return `${this.prefix}${this.delimiter}${body}${this.closeSuffix}`;
|
|
158
264
|
}
|
|
159
265
|
/**
|
|
160
|
-
* Parse a comment node's text to extract tag and id.
|
|
161
|
-
* '
|
|
162
|
-
* '
|
|
266
|
+
* Parse a comment node's text to extract tag and id (format chuẩn §5.1).
|
|
267
|
+
* 's:r:abc123-s' → { tag: 'reactive', id: 'abc123', isClose: false }
|
|
268
|
+
* 's:r:abc123-e' → { tag: 'reactive', id: 'abc123', isClose: true }
|
|
163
269
|
*/
|
|
164
270
|
parseComment(text) {
|
|
165
271
|
const trimmed = text.trim();
|
|
166
272
|
if (!trimmed)
|
|
167
273
|
return null;
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
const delimIdx = content.indexOf(this.delimiter);
|
|
171
|
-
if (delimIdx === -1)
|
|
274
|
+
const head = this.prefix + this.delimiter; // "s:"
|
|
275
|
+
if (!trimmed.startsWith(head))
|
|
172
276
|
return null;
|
|
173
|
-
|
|
174
|
-
|
|
277
|
+
let body = trimmed.slice(head.length); // "r:abc123-s"
|
|
278
|
+
let isClose;
|
|
279
|
+
if (body.endsWith(this.openSuffix)) {
|
|
280
|
+
isClose = false;
|
|
281
|
+
body = body.slice(0, -this.openSuffix.length);
|
|
282
|
+
}
|
|
283
|
+
else if (body.endsWith(this.closeSuffix)) {
|
|
284
|
+
isClose = true;
|
|
285
|
+
body = body.slice(0, -this.closeSuffix.length);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
const delimIdx = body.indexOf(this.delimiter);
|
|
291
|
+
if (delimIdx === -1) {
|
|
292
|
+
return { tag: this.fullTag(body), id: '', isClose };
|
|
293
|
+
}
|
|
294
|
+
const shortTag = body.slice(0, delimIdx);
|
|
295
|
+
const id = body.slice(delimIdx + 1);
|
|
175
296
|
return {
|
|
176
297
|
tag: this.fullTag(shortTag),
|
|
177
298
|
id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkerRegistry.js","sourceRoot":"","sources":["../../../../src/core/services/MarkerRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"MarkerRegistry.js","sourceRoot":"","sources":["../../../../src/core/services/MarkerRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PageCache — bfcache-style cache cho trang đã ghé (ROUTE_RENDER_FLOW.md §8).
|
|
3
|
+
*
|
|
4
|
+
* Key = `${viewName}::${requestUri}` — requestUri gồm path + query, KHÔNG gồm
|
|
5
|
+
* hash (ViewManager.cacheKey). Value = view chain (instance còn sống, state
|
|
6
|
+
* nguyên vẹn) + DOM đã detach + scroll position.
|
|
7
|
+
*
|
|
8
|
+
* Chính sách:
|
|
9
|
+
* - LRU max `maxEntries` (mặc định 10)
|
|
10
|
+
* - TTL mặc định 10 phút — entry quá hạn bị destroy thật + xoá khỏi cache
|
|
11
|
+
* - Hết hạn kiểm tra 3 tầng: lazy khi take(), sweep() khi navigate,
|
|
12
|
+
* sweep() khi tab visible lại (đăng ký ở bootstrap)
|
|
13
|
+
* - Trang đang active KHÔNG nằm trong cache (take() chuyển ownership ra ngoài)
|
|
14
|
+
* - Page thuộc layout: DOM được detach THEO TỪNG OUTLET (outletContents);
|
|
15
|
+
* chỉ restore được khi layout đang mount trùng `layoutPath`.
|
|
16
|
+
*/
|
|
17
|
+
import type { ViewInterface } from "../contracts/ViewInterface.js";
|
|
18
|
+
/** Nội dung một outlet đã detach (page thuộc layout) */
|
|
19
|
+
export interface OutletContent {
|
|
20
|
+
fragment: DocumentFragment;
|
|
21
|
+
/** Saola elements (block content) — để re-track lifecycle khi restore */
|
|
22
|
+
children: any[];
|
|
23
|
+
}
|
|
24
|
+
export interface PageCacheEntry {
|
|
25
|
+
urlPath: string;
|
|
26
|
+
/** View chain (page + layouts không reuse), instance sống — state giữ nguyên */
|
|
27
|
+
views: ViewInterface[];
|
|
28
|
+
/** DOM đã detach (toàn bộ vùng wrapper, gồm cả comment markers) — standalone page */
|
|
29
|
+
fragment: DocumentFragment;
|
|
30
|
+
/** Page thuộc layout: path của layout lúc cache — restore đòi hỏi layout trùng */
|
|
31
|
+
layoutPath: string | null;
|
|
32
|
+
/** Page thuộc layout: DOM + children đã detach theo tên outlet */
|
|
33
|
+
outletContents: Map<string, OutletContent> | null;
|
|
34
|
+
scroll: {
|
|
35
|
+
x: number;
|
|
36
|
+
y: number;
|
|
37
|
+
};
|
|
38
|
+
savedAt: number;
|
|
39
|
+
ttl: number;
|
|
40
|
+
}
|
|
41
|
+
export interface PageCacheSetOptions {
|
|
42
|
+
views: ViewInterface[];
|
|
43
|
+
fragment?: DocumentFragment;
|
|
44
|
+
layoutPath?: string | null;
|
|
45
|
+
outletContents?: Map<string, OutletContent> | null;
|
|
46
|
+
scroll?: {
|
|
47
|
+
x: number;
|
|
48
|
+
y: number;
|
|
49
|
+
};
|
|
50
|
+
/** Override TTL cho entry này (ms). 0 = không cache. */
|
|
51
|
+
ttl?: number;
|
|
52
|
+
}
|
|
53
|
+
export declare class PageCacheService {
|
|
54
|
+
/** Map giữ insertion order → dùng làm LRU */
|
|
55
|
+
private entries;
|
|
56
|
+
maxEntries: number;
|
|
57
|
+
/** 10 phút — trong khoảng thiết kế 5–15 phút; override per-view qua cache:{ttl} */
|
|
58
|
+
defaultTTL: number;
|
|
59
|
+
/** Hook khi entry bị destroy (evict/expire/invalidate) — ViewManager dọn store tại đây */
|
|
60
|
+
onEvict: ((entry: PageCacheEntry) => void) | null;
|
|
61
|
+
/** Injectable cho test */
|
|
62
|
+
now: () => number;
|
|
63
|
+
set(urlPath: string, options: PageCacheSetOptions): void;
|
|
64
|
+
/**
|
|
65
|
+
* Trả một entry ĐÃ take() về lại cache — dùng khi restore thất bại nhưng
|
|
66
|
+
* entry còn giá trị (vd layout của page chưa mount lại; lần điều hướng sau
|
|
67
|
+
* có thể restore được). GIỮ savedAt gốc — TTL KHÔNG được reset.
|
|
68
|
+
*/
|
|
69
|
+
putBack(entry: PageCacheEntry): void;
|
|
70
|
+
/**
|
|
71
|
+
* Lấy entry RA KHỎI cache (chuyển ownership cho caller để restore).
|
|
72
|
+
* Entry quá hạn → destroy, trả null.
|
|
73
|
+
*/
|
|
74
|
+
take(urlPath: string): PageCacheEntry | null;
|
|
75
|
+
has(urlPath: string): boolean;
|
|
76
|
+
/** Xoá + destroy entry (vd: push navigation cần data tươi, hoặc sau mutation) */
|
|
77
|
+
invalidate(urlPath: string): boolean;
|
|
78
|
+
/** Quét destroy mọi entry quá hạn. Gọi sau mỗi navigation + khi tab visible lại. */
|
|
79
|
+
sweep(): number;
|
|
80
|
+
clear(): void;
|
|
81
|
+
get size(): number;
|
|
82
|
+
private isExpired;
|
|
83
|
+
private destroyEntry;
|
|
84
|
+
/**
|
|
85
|
+
* Destroy một entry ĐÃ take() ra khỏi cache nhưng không restore được
|
|
86
|
+
* (vd layout hiện tại không khớp layoutPath). Public cho ViewManager.
|
|
87
|
+
*/
|
|
88
|
+
destroyTakenEntry(entry: PageCacheEntry): void;
|
|
89
|
+
private destroyViews;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Detach toàn bộ vùng DOM của một wrapper (từ openTag đến closeTag, inclusive)
|
|
93
|
+
* vào DocumentFragment — node KHÔNG bị destroy, chỉ rời khỏi document.
|
|
94
|
+
*/
|
|
95
|
+
export declare function detachWrapperDOM(wrapper: {
|
|
96
|
+
openTag: Comment;
|
|
97
|
+
closeTag: Comment;
|
|
98
|
+
}): DocumentFragment;
|
|
99
|
+
export declare const PageCache: PageCacheService;
|
|
100
|
+
export default PageCache;
|
|
101
|
+
//# sourceMappingURL=PageCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageCache.d.ts","sourceRoot":"","sources":["../../../../src/core/services/PageCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,EAAE,GAAG,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,qFAAqF;IACrF,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,kFAAkF;IAClF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kEAAkE;IAClE,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC;IAClD,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC;IACnD,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAgB;IACzB,6CAA6C;IAC7C,OAAO,CAAC,OAAO,CAAqC;IAE7C,UAAU,SAAM;IACvB,mFAAmF;IAC5E,UAAU,SAAkB;IAEnC,0FAA0F;IACnF,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAEhE,0BAA0B;IACnB,GAAG,EAAE,MAAM,MAAM,CAAoB;IAE5C,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAmCxD;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAoBpC;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAa5C,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAK7B,iFAAiF;IACjF,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQpC,oFAAoF;IACpF,KAAK,IAAI,MAAM;IAYf,KAAK,IAAI,IAAI;IAOb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAID,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAKpB;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAc9C,OAAO,CAAC,YAAY;CAMvB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,gBAAgB,CAenG;AAED,eAAO,MAAM,SAAS,kBAAyB,CAAC;AAChD,eAAe,SAAS,CAAC"}
|