@saolabs/client 1.0.0 → 1.1.0
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 +25 -15
- package/dist/src/core/app/Application.d.ts.map +1 -1
- package/dist/src/core/app/Application.js +55 -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 +77 -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 +129 -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 +15 -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/helpers/ApiClient.d.ts.map +1 -0
- package/dist/src/core/{hellpers → helpers}/ApiClient.js +10 -1
- 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/{hellpers → helpers}/app.js +11 -1
- 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/{hellpers → helpers}/utils.d.ts +2 -2
- package/dist/src/core/helpers/utils.d.ts.map +1 -0
- package/dist/src/core/{hellpers → helpers}/utils.js +4 -4
- 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 +72 -31
- package/src/core/bootstrap/app.ts +84 -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 +141 -0
- package/src/core/cache/ViewCache.ts +1 -1
- package/src/core/cache/index.ts +1 -1
- package/src/core/contracts/ApplicationInterface.ts +15 -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/hellpers/ApiClient.d.ts.map +0 -1
- package/dist/src/core/hellpers/ApiClient.js.map +0 -1
- package/dist/src/core/hellpers/app.d.ts +0 -3
- package/dist/src/core/hellpers/app.d.ts.map +0 -1
- package/dist/src/core/hellpers/app.js.map +0 -1
- package/dist/src/core/hellpers/utils.d.ts.map +0 -1
- package/dist/src/core/hellpers/utils.js.map +0 -1
- 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
- /package/dist/src/core/{hellpers → helpers}/ApiClient.d.ts +0 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
export class PageCacheService {
|
|
2
|
+
constructor() {
|
|
3
|
+
/** Map giữ insertion order → dùng làm LRU */
|
|
4
|
+
this.entries = new Map();
|
|
5
|
+
this.maxEntries = 10;
|
|
6
|
+
/** 10 phút — trong khoảng thiết kế 5–15 phút; override per-view qua cache:{ttl} */
|
|
7
|
+
this.defaultTTL = 10 * 60 * 1000;
|
|
8
|
+
/** Hook khi entry bị destroy (evict/expire/invalidate) — ViewManager dọn store tại đây */
|
|
9
|
+
this.onEvict = null;
|
|
10
|
+
/** Injectable cho test */
|
|
11
|
+
this.now = () => Date.now();
|
|
12
|
+
}
|
|
13
|
+
set(urlPath, options) {
|
|
14
|
+
const ttl = options.ttl ?? this.defaultTTL;
|
|
15
|
+
if (ttl <= 0) {
|
|
16
|
+
// Không cache — destroy luôn
|
|
17
|
+
this.destroyViews(options.views);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// Đã có entry cùng path → destroy bản cũ trước
|
|
21
|
+
const existing = this.entries.get(urlPath);
|
|
22
|
+
if (existing) {
|
|
23
|
+
this.entries.delete(urlPath);
|
|
24
|
+
this.destroyEntry(existing);
|
|
25
|
+
}
|
|
26
|
+
this.entries.set(urlPath, {
|
|
27
|
+
urlPath,
|
|
28
|
+
views: options.views,
|
|
29
|
+
fragment: options.fragment ?? document.createDocumentFragment(),
|
|
30
|
+
layoutPath: options.layoutPath ?? null,
|
|
31
|
+
outletContents: options.outletContents ?? null,
|
|
32
|
+
scroll: options.scroll ?? { x: 0, y: 0 },
|
|
33
|
+
savedAt: this.now(),
|
|
34
|
+
ttl,
|
|
35
|
+
});
|
|
36
|
+
// LRU evict
|
|
37
|
+
while (this.entries.size > this.maxEntries) {
|
|
38
|
+
const oldestKey = this.entries.keys().next().value;
|
|
39
|
+
const oldest = this.entries.get(oldestKey);
|
|
40
|
+
this.entries.delete(oldestKey);
|
|
41
|
+
this.destroyEntry(oldest);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Trả một entry ĐÃ take() về lại cache — dùng khi restore thất bại nhưng
|
|
46
|
+
* entry còn giá trị (vd layout của page chưa mount lại; lần điều hướng sau
|
|
47
|
+
* có thể restore được). GIỮ savedAt gốc — TTL KHÔNG được reset.
|
|
48
|
+
*/
|
|
49
|
+
putBack(entry) {
|
|
50
|
+
if (this.isExpired(entry)) {
|
|
51
|
+
this.destroyEntry(entry);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const existing = this.entries.get(entry.urlPath);
|
|
55
|
+
if (existing && existing !== entry) {
|
|
56
|
+
this.entries.delete(entry.urlPath);
|
|
57
|
+
this.destroyEntry(existing);
|
|
58
|
+
}
|
|
59
|
+
this.entries.set(entry.urlPath, entry);
|
|
60
|
+
while (this.entries.size > this.maxEntries) {
|
|
61
|
+
const oldestKey = this.entries.keys().next().value;
|
|
62
|
+
const oldest = this.entries.get(oldestKey);
|
|
63
|
+
this.entries.delete(oldestKey);
|
|
64
|
+
this.destroyEntry(oldest);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Lấy entry RA KHỎI cache (chuyển ownership cho caller để restore).
|
|
69
|
+
* Entry quá hạn → destroy, trả null.
|
|
70
|
+
*/
|
|
71
|
+
take(urlPath) {
|
|
72
|
+
const entry = this.entries.get(urlPath);
|
|
73
|
+
if (!entry)
|
|
74
|
+
return null;
|
|
75
|
+
this.entries.delete(urlPath);
|
|
76
|
+
if (this.isExpired(entry)) {
|
|
77
|
+
this.destroyEntry(entry);
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return entry;
|
|
81
|
+
}
|
|
82
|
+
has(urlPath) {
|
|
83
|
+
const entry = this.entries.get(urlPath);
|
|
84
|
+
return !!entry && !this.isExpired(entry);
|
|
85
|
+
}
|
|
86
|
+
/** Xoá + destroy entry (vd: push navigation cần data tươi, hoặc sau mutation) */
|
|
87
|
+
invalidate(urlPath) {
|
|
88
|
+
const entry = this.entries.get(urlPath);
|
|
89
|
+
if (!entry)
|
|
90
|
+
return false;
|
|
91
|
+
this.entries.delete(urlPath);
|
|
92
|
+
this.destroyEntry(entry);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
/** Quét destroy mọi entry quá hạn. Gọi sau mỗi navigation + khi tab visible lại. */
|
|
96
|
+
sweep() {
|
|
97
|
+
let removed = 0;
|
|
98
|
+
for (const [key, entry] of this.entries) {
|
|
99
|
+
if (this.isExpired(entry)) {
|
|
100
|
+
this.entries.delete(key);
|
|
101
|
+
this.destroyEntry(entry);
|
|
102
|
+
removed++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return removed;
|
|
106
|
+
}
|
|
107
|
+
clear() {
|
|
108
|
+
for (const entry of this.entries.values()) {
|
|
109
|
+
this.destroyEntry(entry);
|
|
110
|
+
}
|
|
111
|
+
this.entries.clear();
|
|
112
|
+
}
|
|
113
|
+
get size() {
|
|
114
|
+
return this.entries.size;
|
|
115
|
+
}
|
|
116
|
+
// ─── Private ────────────────────────────────────────────────
|
|
117
|
+
isExpired(entry) {
|
|
118
|
+
return this.now() - entry.savedAt > entry.ttl;
|
|
119
|
+
}
|
|
120
|
+
destroyEntry(entry) {
|
|
121
|
+
this.destroyTakenEntry(entry);
|
|
122
|
+
try {
|
|
123
|
+
this.onEvict?.(entry);
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
console.error('[PageCache] onEvict error:', e);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Destroy một entry ĐÃ take() ra khỏi cache nhưng không restore được
|
|
131
|
+
* (vd layout hiện tại không khớp layoutPath). Public cho ViewManager.
|
|
132
|
+
*/
|
|
133
|
+
destroyTakenEntry(entry) {
|
|
134
|
+
// Block content đã detach — ViewController.destroy() không đi qua chúng
|
|
135
|
+
// (không nằm trong _rootTree) nên phải destroy tường minh trước.
|
|
136
|
+
if (entry.outletContents) {
|
|
137
|
+
for (const [, content] of entry.outletContents) {
|
|
138
|
+
for (const child of content.children) {
|
|
139
|
+
try {
|
|
140
|
+
child?.destroy?.();
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
console.error('[PageCache] destroy block child error:', e);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
this.destroyViews(entry.views);
|
|
149
|
+
}
|
|
150
|
+
destroyViews(views) {
|
|
151
|
+
for (const view of views) {
|
|
152
|
+
try {
|
|
153
|
+
view.__ctrl__?.destroy();
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
console.error('[PageCache] destroy view error:', e);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Detach toàn bộ vùng DOM của một wrapper (từ openTag đến closeTag, inclusive)
|
|
163
|
+
* vào DocumentFragment — node KHÔNG bị destroy, chỉ rời khỏi document.
|
|
164
|
+
*/
|
|
165
|
+
export function detachWrapperDOM(wrapper) {
|
|
166
|
+
const fragment = document.createDocumentFragment();
|
|
167
|
+
const start = wrapper.openTag;
|
|
168
|
+
const end = wrapper.closeTag;
|
|
169
|
+
if (!start.parentNode)
|
|
170
|
+
return fragment;
|
|
171
|
+
let current = start;
|
|
172
|
+
while (current) {
|
|
173
|
+
const isEnd = current === end;
|
|
174
|
+
const next = current.nextSibling;
|
|
175
|
+
fragment.appendChild(current); // appendChild tự remove khỏi vị trí cũ
|
|
176
|
+
if (isEnd)
|
|
177
|
+
break;
|
|
178
|
+
current = next;
|
|
179
|
+
}
|
|
180
|
+
return fragment;
|
|
181
|
+
}
|
|
182
|
+
export const PageCache = new PageCacheService();
|
|
183
|
+
export default PageCache;
|
|
184
|
+
//# sourceMappingURL=PageCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageCache.js","sourceRoot":"","sources":["../../../../src/core/services/PageCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { SectionInterface, SectionManagerInterface } from "../contracts/SectionInterface.js";
|
|
2
|
+
import type { YieldInterface } from "../contracts/ElementInterface.js";
|
|
3
|
+
/**
|
|
4
|
+
* SectionManager — connects `@section(name, ...)` declarations to `@yield(name, ...)`
|
|
5
|
+
* markers, cross-controller (a page declares a section, a layout — or nothing —
|
|
6
|
+
* yields it), mirroring how BlockManager connects Block ↔ BlockOutlet.
|
|
7
|
+
*
|
|
8
|
+
* Two content shapes (RUNTIME_CONTRACT):
|
|
9
|
+
* - contentType 'text' (short `@section(name, value)`) — resolves to a plain
|
|
10
|
+
* string. Used as: (a) a single text node between the yield's markers,
|
|
11
|
+
* (b) the `.value` of a `<textarea>` when the yield's immediate DOM parent
|
|
12
|
+
* is a textarea (mutating child text nodes of a live textarea does not
|
|
13
|
+
* reliably update what's displayed once the dirty-value flag is set — every
|
|
14
|
+
* framework sets `.value` directly instead), (c) resolved synchronously via
|
|
15
|
+
* `resolve()` for `this.yieldContent()` used inside an attribute/prop factory.
|
|
16
|
+
* - contentType 'html' (long `@section(name) ... @endsection`) — a children
|
|
17
|
+
* array, mounted between the yield's markers the same way BlockManager
|
|
18
|
+
* mounts block content into an outlet.
|
|
19
|
+
*
|
|
20
|
+
* Head metadata (`meta:title`, `meta:description`, ...): the app shell's
|
|
21
|
+
* `<head>` is plain Laravel Blade (native `@yield`), entirely outside the
|
|
22
|
+
* client's mounted tree — SSR already gets it right for free. SPA navigation
|
|
23
|
+
* bypasses Blade though, so `syncHeadSections()` pushes any `meta:*` section
|
|
24
|
+
* straight to `document.title` / `<meta>` on every mount and on every reactive
|
|
25
|
+
* update, keeping the tab title and metadata "live" across client-side routes.
|
|
26
|
+
*/
|
|
27
|
+
export declare class SectionManagerService implements SectionManagerInterface {
|
|
28
|
+
sections: Map<string, SectionInterface>;
|
|
29
|
+
activeSections: Map<string, SectionInterface>;
|
|
30
|
+
yields: Map<string, YieldInterface>;
|
|
31
|
+
subscribers: Map<string, ((section: SectionInterface) => void)[]>;
|
|
32
|
+
/** name+viewId -> unsubscribe fn (only for reactive sections, active while started) */
|
|
33
|
+
private unsubscribers;
|
|
34
|
+
/** yield id -> tracked nodes/elements mounted between its markers (for clear/start/stop) */
|
|
35
|
+
private mounted;
|
|
36
|
+
/** Owners in the current route chain; cached pages retain their sections. */
|
|
37
|
+
private headViewIds;
|
|
38
|
+
add(section: SectionInterface): void;
|
|
39
|
+
active(name: string, viewId: string): void;
|
|
40
|
+
subscribe(name: string, callback: (section: SectionInterface) => void): () => void;
|
|
41
|
+
unsubscribe(name: string, callback?: (section: SectionInterface) => void): void;
|
|
42
|
+
addYield(id: string, yieldEl: YieldInterface): void;
|
|
43
|
+
/** XOÁ THẬT yields của một view bị destroy — destroy rồi mới rời Map. */
|
|
44
|
+
removeYieldsOfView(viewId: string): void;
|
|
45
|
+
/** Resolve the current value of a named section — for `this.yieldContent()` in attrs/props. */
|
|
46
|
+
resolve(name: string, defaultValue?: any): any;
|
|
47
|
+
/**
|
|
48
|
+
* Mount every yield owned by one controller (page or layout — matches the
|
|
49
|
+
* controller Router/ViewManager is currently activating).
|
|
50
|
+
*
|
|
51
|
+
* Render happens for the whole chain before any mounting does (page
|
|
52
|
+
* registers its sections while building its tree, THEN returns
|
|
53
|
+
* `extendView(layout)`, whose own render builds the yields) — so by mount
|
|
54
|
+
* time `activeSections` already holds every section in the chain
|
|
55
|
+
* regardless of call order. Only the yield side needs to be scoped to
|
|
56
|
+
* `viewId`, so each controller's own markers get touched exactly once,
|
|
57
|
+
* mirroring BlockManagerService.mountViewBlocks()'s per-owner pass.
|
|
58
|
+
*/
|
|
59
|
+
mountViewSections(viewId: string): void;
|
|
60
|
+
/** Hydrate counterpart: trust server-rendered content, only let nested elements self-claim. */
|
|
61
|
+
hydrateViewSections(viewId: string): void;
|
|
62
|
+
private findYieldsByName;
|
|
63
|
+
/** Re-apply every yield bound to `name` — used after a reactive section change. */
|
|
64
|
+
private applyByName;
|
|
65
|
+
private mountSectionIntoYield;
|
|
66
|
+
private applyText;
|
|
67
|
+
/** Same insertion pattern as BlockManagerService.mountBlockIntoOutlet(). */
|
|
68
|
+
private mountHtml;
|
|
69
|
+
/** Hydrate: claim only — DOM already there from SSR, never insert/clear. */
|
|
70
|
+
private hydrateApplyToYield;
|
|
71
|
+
private clearYield;
|
|
72
|
+
/** Activate reactive sections (subscribe) + start any mounted html-content children. Call after mount/hydrate. */
|
|
73
|
+
startAll(): void;
|
|
74
|
+
/** Deactivate — unsubscribe + stop mounted children. */
|
|
75
|
+
stopAll(): void;
|
|
76
|
+
private subscribeIfReactive;
|
|
77
|
+
/** Notify `subscribe(name, cb)` listeners — both when a different section becomes active
|
|
78
|
+
* (see `active()`) and when the currently active section's own value changes. Consumers:
|
|
79
|
+
* `Html.ts` attribute/prop bindings built from `@yield(...)` (no stateKeys of their own —
|
|
80
|
+
* the section they depend on is only known at runtime), subscribed via `yieldName`. */
|
|
81
|
+
private notify;
|
|
82
|
+
unmountView(viewId: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* Push `meta:*` sections to HeadService — SPA navigation never runs Blade,
|
|
85
|
+
* so nothing else keeps `<title>`/`<meta>` (outside the client's mounted
|
|
86
|
+
* tree entirely) in sync with the active page after the first load. This
|
|
87
|
+
* is the declarative convenience layer over HeadService: a page can
|
|
88
|
+
* either call `@section('meta:title', ...)` in its template, or reach
|
|
89
|
+
* `app('Head')` directly (e.g. from an async data callback) — both end up
|
|
90
|
+
* writing through the same service, so they never fight each other.
|
|
91
|
+
*/
|
|
92
|
+
private activateHeadSections;
|
|
93
|
+
private syncHeadSections;
|
|
94
|
+
/** Revert every page-scoped head tag before mounting a new page's chain. Call once per navigation. */
|
|
95
|
+
resetPageHead(): void;
|
|
96
|
+
destroy(): void;
|
|
97
|
+
}
|
|
98
|
+
export declare const SectionManager: SectionManagerService;
|
|
99
|
+
export default SectionManager;
|
|
100
|
+
//# sourceMappingURL=SectionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionManager.d.ts","sourceRoot":"","sources":["../../../../src/core/services/SectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAKvE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,qBAAsB,YAAW,uBAAuB;IACjE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAa;IACpD,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAa;IAC1D,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IAChD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC,EAAE,CAAC,CAAa;IAE9E,uFAAuF;IACvF,OAAO,CAAC,aAAa,CAAsC;IAC3D,4FAA4F;IAC5F,OAAO,CAAC,OAAO,CAAiC;IAChD,6EAA6E;IAC7E,OAAO,CAAC,WAAW,CAAqB;IAExC,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAQpC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ1C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI;IAMlF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAW/E,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAInD,yEAAyE;IACzE,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUxC,+FAA+F;IAC/F,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,GAAE,GAAU,GAAG,GAAG;IAOpD;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASvC,+FAA+F;IAC/F,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUzC,OAAO,CAAC,gBAAgB;IAMxB,mFAAmF;IACnF,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,SAAS;IAcjB,4EAA4E;IAC5E,OAAO,CAAC,SAAS;IA8BjB,4EAA4E;IAC5E,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,UAAU;IAiBlB,kHAAkH;IAClH,QAAQ,IAAI,IAAI;IAWhB,wDAAwD;IACxD,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,mBAAmB;IAc3B;;;4FAGwF;IACxF,OAAO,CAAC,MAAM;IAKd,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAajC;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,gBAAgB;IAsCxB,sGAAsG;IACtG,aAAa,IAAI,IAAI;IAKrB,OAAO,IAAI,IAAI;CAWlB;AAED,eAAO,MAAM,cAAc,uBAA8B,CAAC;AAC1D,eAAe,cAAc,CAAC"}
|