@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,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { reconcileChildren } from './reconcileChildren.js';
|
|
2
|
+
import { InitModes } from "../contracts/common.js";
|
|
3
|
+
import { generateUUID } from "../helpers/utils.js";
|
|
4
|
+
import { mountChildrenBeforeAnchor } from "../helpers/view.js";
|
|
5
|
+
import markerRegistry from "../services/MarkerRegistry.js";
|
|
6
|
+
import { ForeachSlotCache } from "./ForeachSlotCache.js";
|
|
7
|
+
import { isLeaving } from "../helpers/transition.js";
|
|
4
8
|
/**
|
|
5
9
|
* Reactive — a region in the DOM bounded by comment markers that
|
|
6
10
|
* can re-render its content when reactive dependencies change.
|
|
@@ -17,29 +21,69 @@ import markerRegistry from "../services/MarkerRegistry";
|
|
|
17
21
|
*/
|
|
18
22
|
export class Reactive {
|
|
19
23
|
constructor({ type = 'reactive', id = null, ctx, parentElement = null, parentReactive = null, stateKeys = [], childrenFactory = () => [], initMode = InitModes.CREATE, }) {
|
|
20
|
-
this.
|
|
21
|
-
this.parent = null; // Alias for parentReactive to satisfy
|
|
24
|
+
this.saoType = 'Reactive';
|
|
25
|
+
this.parent = null; // Alias for parentReactive to satisfy SaoNodeInterface
|
|
22
26
|
this.children = [];
|
|
23
27
|
this.mounted = false;
|
|
24
28
|
this.unsubscribe = () => { };
|
|
25
29
|
this._isStarted = false;
|
|
30
|
+
/** Marker model (hydration) — gán bởi BlockManager/SSR khi cần; mặc định null. */
|
|
31
|
+
/** Key trả về bởi markerRegistry.register — destroy() dùng để gỡ lại */
|
|
32
|
+
this.markerKey = null;
|
|
26
33
|
this.domChildren = []; // For compatibility with HtmlInterface; Reactive itself doesn't have a single root element
|
|
27
34
|
this.initMode = InitModes.CREATE;
|
|
35
|
+
/**
|
|
36
|
+
* Slot cache cho @foreach reconciliation (Phase 5).
|
|
37
|
+
* Được tạo khi type === 'foreach', null cho tất cả các type khác.
|
|
38
|
+
* Cache maps item ref → Saola elements — cho phép reuse elements
|
|
39
|
+
* khi item object reference không thay đổi.
|
|
40
|
+
*/
|
|
41
|
+
this._foreachCache = null;
|
|
42
|
+
/** Registry guard — element đã destroy không được reuse */
|
|
43
|
+
this.__destroyed__ = false;
|
|
28
44
|
this.ctx = ctx;
|
|
29
45
|
this.parentElement = parentElement;
|
|
30
46
|
this.parentReactive = parentReactive;
|
|
31
|
-
this.id = `${ctx.viewId}-${
|
|
47
|
+
this.id = id ? id : `${ctx.viewId}-${generateUUID(5)}`;
|
|
32
48
|
this.type = type;
|
|
33
49
|
this.childrenFactory = childrenFactory;
|
|
34
50
|
this.stateKeys = stateKeys;
|
|
35
51
|
this.initMode = initMode;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
52
|
+
// foreach type: khởi tạo slot cache để hỗ trợ identity-keyed reconciliation
|
|
53
|
+
if (type === 'foreach') {
|
|
54
|
+
this._foreachCache = new ForeachSlotCache();
|
|
55
|
+
}
|
|
56
|
+
if (this.initMode === InitModes.CREATE) {
|
|
57
|
+
this.markerKey = markerRegistry.register('reactive', this.id, {
|
|
58
|
+
type: this.type,
|
|
59
|
+
stateKeys: this.stateKeys,
|
|
60
|
+
viewID: this.ctx.viewId,
|
|
61
|
+
});
|
|
62
|
+
this.openTag = markerRegistry.createMarkerStart('reactive', this.id);
|
|
63
|
+
this.closeTag = markerRegistry.createMarkerEnd('reactive', this.id);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// ── Hydrate: tìm markers SSR trong DOM ──────────────────────
|
|
67
|
+
// Scan parent element cho cặp comment <!--r:id--> ... <!--/r:id-->
|
|
68
|
+
// (MarkerRegistry format). Fallback tạo mới nếu không tìm thấy.
|
|
69
|
+
const claimed = this.claimSSRMarkers();
|
|
70
|
+
if (claimed) {
|
|
71
|
+
this.openTag = claimed.open;
|
|
72
|
+
this.closeTag = claimed.close;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.openTag = markerRegistry.createMarkerStart('reactive', this.id);
|
|
76
|
+
this.closeTag = markerRegistry.createMarkerEnd('reactive', this.id);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Tìm cặp comment markers từ server-rendered HTML.
|
|
82
|
+
* Format MarkerRegistry: open = `r:id`, close = `/r:id`
|
|
83
|
+
* (r = shortcut cho 'reactive').
|
|
84
|
+
*/
|
|
85
|
+
claimSSRMarkers() {
|
|
86
|
+
return markerRegistry.claim('reactive', this.id, this.parentElement?.element ?? null);
|
|
43
87
|
}
|
|
44
88
|
setParentElement(parent) {
|
|
45
89
|
this.parentElement = parent;
|
|
@@ -55,15 +99,56 @@ export class Reactive {
|
|
|
55
99
|
this.start();
|
|
56
100
|
}
|
|
57
101
|
}
|
|
58
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* Render — idempotent + position-aware (RUNTIME_CONTRACT.md §2):
|
|
104
|
+
* - Markers chưa trong DOM → đặt markers (trước closeTag của parentReactive
|
|
105
|
+
* nếu có, ngược lại append vào parentElement — đường mountElementList
|
|
106
|
+
* duyệt tuần tự nên vị trí đúng).
|
|
107
|
+
* - Markers đã trong DOM → chỉ thay nội dung GIỮA markers.
|
|
108
|
+
* Children loại marker-based (Output, nested Reactive, Fragment) được CALLER
|
|
109
|
+
* đặt markers vào đúng vị trí trước, rồi mới gọi child.render() — FIX(baseline#6).
|
|
110
|
+
* Children sinh ra khi đang active được start() ngay — FIX(baseline#7).
|
|
111
|
+
*/
|
|
59
112
|
render() {
|
|
60
|
-
|
|
61
|
-
|
|
113
|
+
try {
|
|
114
|
+
this._render();
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
// Lỗi ở vùng reactive thường xảy ra SAU khi trang đã sống (state đổi do
|
|
118
|
+
// user tương tác) — ngoài mọi try/catch của renderPageView. 'render' cho
|
|
119
|
+
// lần đầu, 'update' cho re-render.
|
|
120
|
+
const phase = this.mounted ? 'update' : 'render';
|
|
121
|
+
const result = this.ctx.handleError(err, { phase, path: this.ctx.path });
|
|
122
|
+
if (!result.handled)
|
|
123
|
+
throw err;
|
|
124
|
+
this.clearContent();
|
|
125
|
+
if (result.fallback !== null && result.fallback !== undefined) {
|
|
126
|
+
mountChildrenBeforeAnchor(this.closeTag, Array.isArray(result.fallback) ? result.fallback : [result.fallback], this.parentElement);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
_render() {
|
|
131
|
+
if (this.__destroyed__)
|
|
132
|
+
return;
|
|
133
|
+
// ── Hydrate mode: markers đã trong DOM từ SSR ────────────────
|
|
134
|
+
// Tiền đề: ViewManager.hydrateView() đã gọi commitData() TRƯỚC bước này,
|
|
135
|
+
// nên closure state (vd `show`) đã có giá trị = trạng thái server.
|
|
136
|
+
// → childrenFactory sinh đúng element tree khớp với SSR DOM.
|
|
137
|
+
// _hydrateChildren tạo JS objects (Html claim DOM, Output claim markers)
|
|
138
|
+
// mà KHÔNG insert node mới — giữ nguyên DOM server-rendered.
|
|
139
|
+
if (this.initMode === InitModes.HYDRATE && this.openTag.parentNode) {
|
|
140
|
+
this._hydrateChildren();
|
|
141
|
+
this.mounted = true;
|
|
142
|
+
// Chuyển sang CREATE: re-render sau này (do state đổi) dùng CSR flow.
|
|
143
|
+
this.initMode = InitModes.CREATE;
|
|
62
144
|
return;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
145
|
+
}
|
|
146
|
+
if (!this.openTag.parentNode) {
|
|
147
|
+
// ── Lần đầu mount: đặt markers vào DOM ───────────────────────────
|
|
148
|
+
const target = this.getInsertionTarget();
|
|
149
|
+
if (!target)
|
|
150
|
+
return;
|
|
151
|
+
if (this.parentReactive && this.parentReactive.closeTag.parentNode === target) {
|
|
67
152
|
target.insertBefore(this.openTag, this.parentReactive.closeTag);
|
|
68
153
|
target.insertBefore(this.closeTag, this.parentReactive.closeTag);
|
|
69
154
|
}
|
|
@@ -72,34 +157,215 @@ export class Reactive {
|
|
|
72
157
|
target.appendChild(this.closeTag);
|
|
73
158
|
}
|
|
74
159
|
this.mounted = true;
|
|
160
|
+
// Initial render — _renderChildren tự mở cửa sổ cache quanh factory call
|
|
161
|
+
this._renderChildren();
|
|
162
|
+
}
|
|
163
|
+
else if (this._foreachCache) {
|
|
164
|
+
// ── Re-render @foreach: dùng reconciler ──────────────────────────
|
|
165
|
+
this.renderForeach();
|
|
75
166
|
}
|
|
76
167
|
else {
|
|
77
|
-
// Re-render: clear
|
|
78
|
-
this.
|
|
168
|
+
// ── Re-render các type khác: clear + factory ──────────────────────
|
|
169
|
+
const output = this._runFactoryWithCache();
|
|
170
|
+
const next = output.filter(child => child != null).map(child => typeof child === 'string' || typeof child === 'number' ? document.createTextNode(String(child)) : child);
|
|
171
|
+
const parent = this.closeTag.parentNode;
|
|
172
|
+
if (parent)
|
|
173
|
+
reconcileChildren(parent, this.children, next, this.closeTag);
|
|
174
|
+
this.children = next;
|
|
175
|
+
this._cleanOrphanNodes(next);
|
|
176
|
+
if (this._isStarted)
|
|
177
|
+
for (const child of next)
|
|
178
|
+
child.start?.();
|
|
79
179
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
180
|
+
this.mounted = true;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Phần render nội bộ: chạy childrenFactory, insert children vào DOM.
|
|
184
|
+
* Dùng cho initial render (mọi type) và re-render non-foreach.
|
|
185
|
+
* Precondition: markers đã trong DOM.
|
|
186
|
+
*/
|
|
187
|
+
_renderChildren() {
|
|
188
|
+
// Cửa sổ cache chỉ mở quanh factory call — KHÔNG mở trong child.render()
|
|
189
|
+
// phía dưới, tránh nested @foreach (chạy lúc render con) ghi nhầm entry
|
|
190
|
+
// vào cache của loop ngoài rồi bị prunePass destroy oan ở pass sau.
|
|
191
|
+
const output = this._runFactoryWithCache();
|
|
192
|
+
const newChildren = [];
|
|
83
193
|
for (const child of output) {
|
|
194
|
+
if (child === null || child === undefined)
|
|
195
|
+
continue;
|
|
84
196
|
if (typeof child === 'string' || typeof child === 'number') {
|
|
85
197
|
const textNode = document.createTextNode(String(child));
|
|
86
198
|
this.insertBeforeClose(textNode);
|
|
87
199
|
this.children.push(textNode);
|
|
88
200
|
}
|
|
89
|
-
else if (child
|
|
90
|
-
|
|
91
|
-
|
|
201
|
+
else if (child instanceof Node) {
|
|
202
|
+
this.insertBeforeClose(child);
|
|
203
|
+
this.children.push(child);
|
|
204
|
+
}
|
|
205
|
+
else if (typeof child === 'object') {
|
|
206
|
+
if ('element' in child && child.element) {
|
|
207
|
+
// Html, TextElement — single root element
|
|
92
208
|
this.insertBeforeClose(child.element);
|
|
93
209
|
this.children.push(child);
|
|
210
|
+
newChildren.push(child);
|
|
94
211
|
child.render();
|
|
95
212
|
}
|
|
96
213
|
else if ('openTag' in child) {
|
|
97
|
-
//
|
|
214
|
+
// Marker-based: Output, nested Reactive, Fragment...
|
|
215
|
+
this.insertBeforeClose(child.openTag);
|
|
216
|
+
this.insertBeforeClose(child.closeTag);
|
|
98
217
|
this.children.push(child);
|
|
218
|
+
newChildren.push(child);
|
|
99
219
|
child.render();
|
|
100
220
|
}
|
|
101
221
|
}
|
|
102
222
|
}
|
|
223
|
+
// Vùng active: children mới cần start() ngay (có subscription/event)
|
|
224
|
+
if (this._isStarted) {
|
|
225
|
+
for (const child of newChildren) {
|
|
226
|
+
if (typeof child.start === 'function') {
|
|
227
|
+
child.start();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Chạy childrenFactory với cửa sổ cache foreach (nếu có) mở đúng quanh
|
|
234
|
+
* factory call. beginPass reset occurrence counters + touched set.
|
|
235
|
+
*/
|
|
236
|
+
_runFactoryWithCache() {
|
|
237
|
+
if (!this._foreachCache) {
|
|
238
|
+
return this.childrenFactory(this, this.parentElement);
|
|
239
|
+
}
|
|
240
|
+
this._foreachCache.beginPass();
|
|
241
|
+
this.ctx._currentForeachCache = this._foreachCache;
|
|
242
|
+
try {
|
|
243
|
+
return this.childrenFactory(this, this.parentElement);
|
|
244
|
+
}
|
|
245
|
+
finally {
|
|
246
|
+
this.ctx._currentForeachCache = null;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Hydrate children — tạo JS element objects từ factory nhưng KHÔNG insert DOM.
|
|
251
|
+
* Html children đã claim server DOM nodes trong constructor.
|
|
252
|
+
* Output/Reactive children gọi render() để claim markers.
|
|
253
|
+
* Sau hydrate, re-render tiếp theo dùng flow CSR bình thường.
|
|
254
|
+
*/
|
|
255
|
+
_hydrateChildren() {
|
|
256
|
+
const output = this._runFactoryWithCache();
|
|
257
|
+
for (const child of output) {
|
|
258
|
+
if (child === null || child === undefined)
|
|
259
|
+
continue;
|
|
260
|
+
if (typeof child === 'string' || typeof child === 'number')
|
|
261
|
+
continue;
|
|
262
|
+
if (child instanceof Node)
|
|
263
|
+
continue;
|
|
264
|
+
if (typeof child === 'object') {
|
|
265
|
+
if ('element' in child && child.element) {
|
|
266
|
+
this.children.push(child);
|
|
267
|
+
child.render();
|
|
268
|
+
}
|
|
269
|
+
else if ('openTag' in child) {
|
|
270
|
+
if (typeof child.setParentElement === 'function') {
|
|
271
|
+
child.setParentElement(this.parentElement);
|
|
272
|
+
}
|
|
273
|
+
this.children.push(child);
|
|
274
|
+
child.render();
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* renderForeach — identity-keyed reconciliation cho @foreach (Phase 5).
|
|
281
|
+
*
|
|
282
|
+
* # Thuật toán
|
|
283
|
+
* 1. Snapshot cache hiện tại (prevSlots) — biết item nào đang hiển thị
|
|
284
|
+
* 2. Chạy childrenFactory với cache active → __foreach trả về:
|
|
285
|
+
* - cached elements nếu item ref giống (no DOM create)
|
|
286
|
+
* - elements mới nếu item mới (và lưu vào cache)
|
|
287
|
+
* 3. Diff: items nào KHÔNG xuất hiện trong kết quả mới → destroy + xoá cache
|
|
288
|
+
* 4. Reorder DOM: insertBefore(closeTag) cho tất cả elements mới (move hoặc append)
|
|
289
|
+
* 5. Cleanup orphan DOM nodes (nodes còn sót từ destroyed items)
|
|
290
|
+
* 6. Start elements mới nếu vùng đang active
|
|
291
|
+
*
|
|
292
|
+
* # Complexity
|
|
293
|
+
* - O(n) forEach pass trong __foreach
|
|
294
|
+
* - O(n) destroy pass cho removed items
|
|
295
|
+
* - O(n) DOM move pass (insertBefore là O(1) mỗi node)
|
|
296
|
+
* → Tổng O(n) so với O(2n) của clear+recreate, nhưng tiết kiệm DOM create/destroy
|
|
297
|
+
* cho unchanged items.
|
|
298
|
+
*/
|
|
299
|
+
renderForeach() {
|
|
300
|
+
// ── Step 1: Ghi nhớ children đang hiển thị (phân biệt reuse/new) ─────
|
|
301
|
+
const cache = this._foreachCache;
|
|
302
|
+
const prevChildren = new Set(this.children); // old Saola elements
|
|
303
|
+
// ── Step 2: Chạy factory với cache active (beginPass + claim/store) ──
|
|
304
|
+
const output = this._runFactoryWithCache();
|
|
305
|
+
// Flatten output thành danh sách children mới
|
|
306
|
+
const newChildren = [];
|
|
307
|
+
for (const child of output) {
|
|
308
|
+
if (child === null || child === undefined)
|
|
309
|
+
continue;
|
|
310
|
+
if (typeof child === 'object') {
|
|
311
|
+
newChildren.push(child);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
// ── Step 3: Destroy slot không được claim/store trong pass ───────────
|
|
315
|
+
// = item đã rời list, hoặc bị thay bằng ref mới (key trùng nhưng ref đổi).
|
|
316
|
+
cache.prunePass((slot) => {
|
|
317
|
+
for (const el of slot.elements) {
|
|
318
|
+
if (el && typeof el.destroy === 'function') {
|
|
319
|
+
el.destroy();
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
const trulyNew = newChildren.filter(child => !prevChildren.has(child));
|
|
324
|
+
const parent = this.closeTag.parentNode;
|
|
325
|
+
if (parent)
|
|
326
|
+
reconcileChildren(parent, this.children, newChildren, this.closeTag, child => cache.refreshedElements.has(child));
|
|
327
|
+
this._cleanOrphanNodes(newChildren);
|
|
328
|
+
this.children = newChildren;
|
|
329
|
+
if (this._isStarted) {
|
|
330
|
+
for (const child of trulyNew)
|
|
331
|
+
child.start?.();
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Xoá các DOM nodes "mồ côi" giữa openTag và closeTag của Reactive.
|
|
336
|
+
* Orphan = nodes không thuộc bất kỳ child nào trong newChildren.
|
|
337
|
+
*
|
|
338
|
+
* Build tập hợp "expected nodes" từ newChildren, sau đó scan DOM
|
|
339
|
+
* và remove nodes không nằm trong tập đó.
|
|
340
|
+
*/
|
|
341
|
+
_cleanOrphanNodes(newChildren) {
|
|
342
|
+
// Thu thập tất cả DOM nodes hợp lệ (thuộc new children)
|
|
343
|
+
const validNodes = new Set();
|
|
344
|
+
for (const child of newChildren) {
|
|
345
|
+
if ('element' in child && child.element) {
|
|
346
|
+
validNodes.add(child.element);
|
|
347
|
+
}
|
|
348
|
+
else if ('openTag' in child) {
|
|
349
|
+
// Marker-based: collect tất cả nodes trong block
|
|
350
|
+
let node = child.openTag;
|
|
351
|
+
while (node && node !== child.closeTag) {
|
|
352
|
+
validNodes.add(node);
|
|
353
|
+
node = node.nextSibling;
|
|
354
|
+
}
|
|
355
|
+
if (node)
|
|
356
|
+
validNodes.add(node); // closeTag
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// Scan từ openTag → closeTag, remove nodes không hợp lệ.
|
|
360
|
+
// Node đang chạy leave PHẢI nằm lại tới khi animation xong — nó tự gỡ.
|
|
361
|
+
let current = this.openTag.nextSibling;
|
|
362
|
+
while (current && current !== this.closeTag) {
|
|
363
|
+
const next = current.nextSibling;
|
|
364
|
+
if (!validNodes.has(current) && !isLeaving(current)) {
|
|
365
|
+
current.remove();
|
|
366
|
+
}
|
|
367
|
+
current = next;
|
|
368
|
+
}
|
|
103
369
|
}
|
|
104
370
|
/** Schedule a re-render through the ViewController */
|
|
105
371
|
update() {
|
|
@@ -114,11 +380,13 @@ export class Reactive {
|
|
|
114
380
|
}
|
|
115
381
|
}
|
|
116
382
|
this.children = [];
|
|
117
|
-
// Remove DOM nodes between markers
|
|
383
|
+
// Remove DOM nodes between markers — trừ node đang leave (child.destroy()
|
|
384
|
+
// phía trên vừa khởi động animation cho chúng; tự gỡ khi xong).
|
|
118
385
|
let current = this.openTag.nextSibling;
|
|
119
386
|
while (current && current !== this.closeTag) {
|
|
120
387
|
const next = current.nextSibling;
|
|
121
|
-
current
|
|
388
|
+
if (!isLeaving(current))
|
|
389
|
+
current.remove();
|
|
122
390
|
current = next;
|
|
123
391
|
}
|
|
124
392
|
}
|
|
@@ -166,16 +434,22 @@ export class Reactive {
|
|
|
166
434
|
}
|
|
167
435
|
}
|
|
168
436
|
}
|
|
169
|
-
/** Remove content but keep markers (for hide/show scenarios) */
|
|
170
|
-
hide() {
|
|
171
|
-
this.clearContent();
|
|
172
|
-
}
|
|
173
|
-
/** Re-render content (for show after hide) */
|
|
174
|
-
show() {
|
|
175
|
-
this.render();
|
|
176
|
-
}
|
|
177
437
|
destroy() {
|
|
438
|
+
this.__destroyed__ = true;
|
|
439
|
+
this.ctx.releaseElement?.(this);
|
|
440
|
+
// MarkerRegistry là singleton TOÀN CỤC (sống qua navigate). Reactive trong
|
|
441
|
+
// loop có id kèm item (`{viewId}-{hash}-${item.id}`) → không gỡ thì mỗi
|
|
442
|
+
// trang/mỗi lần refresh để lại một record vĩnh viễn.
|
|
443
|
+
if (this.markerKey) {
|
|
444
|
+
markerRegistry.remove(this.markerKey);
|
|
445
|
+
this.markerKey = null;
|
|
446
|
+
}
|
|
447
|
+
this.stop();
|
|
178
448
|
this.clearContent();
|
|
449
|
+
// Giải phóng cache — clearContent() đã destroy các elements
|
|
450
|
+
if (this._foreachCache) {
|
|
451
|
+
this._foreachCache.clear();
|
|
452
|
+
}
|
|
179
453
|
this.openTag.remove();
|
|
180
454
|
this.closeTag.remove();
|
|
181
455
|
this.mounted = false;
|
|
@@ -188,10 +462,10 @@ export class Reactive {
|
|
|
188
462
|
set isOneReactive(value) {
|
|
189
463
|
// No-op setter to satisfy the Interface; this property is always true for Reactive elements
|
|
190
464
|
}
|
|
191
|
-
set
|
|
465
|
+
set isSaoElement(value) {
|
|
192
466
|
// No-op setter to satisfy the Interface; Reactive is a type of OneElement
|
|
193
467
|
}
|
|
194
|
-
get
|
|
468
|
+
get isSaoElement() {
|
|
195
469
|
return true;
|
|
196
470
|
}
|
|
197
471
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reactive.js","sourceRoot":"","sources":["../../../../src/core/elements/Reactive.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Reactive.js","sourceRoot":"","sources":["../../../../src/core/elements/Reactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { HtmlInterface, TextInterface } from "../contracts/ElementInterface";
|
|
2
|
-
import type { ViewControllerInterface } from "../contracts/ViewControllerInterface";
|
|
3
|
-
import {
|
|
1
|
+
import type { HtmlInterface, TextInterface } from "../contracts/ElementInterface.js";
|
|
2
|
+
import type { ViewControllerInterface } from "../contracts/ViewControllerInterface.js";
|
|
3
|
+
import { SaoObjectType } from "../types/utils.js";
|
|
4
4
|
/**
|
|
5
5
|
* TextElement — wraps a DOM Text node.
|
|
6
6
|
*
|
|
@@ -9,7 +9,7 @@ import { OneObjectType } from "../types/utils";
|
|
|
9
9
|
* no DOM removal/insertion needed.
|
|
10
10
|
*/
|
|
11
11
|
export declare class TextElement implements TextInterface {
|
|
12
|
-
|
|
12
|
+
saoType: SaoObjectType;
|
|
13
13
|
element: Text;
|
|
14
14
|
parent: HtmlInterface | null;
|
|
15
15
|
private ctx;
|
|
@@ -19,6 +19,7 @@ export declare class TextElement implements TextInterface {
|
|
|
19
19
|
_text: string;
|
|
20
20
|
shouldEscapeHTML: boolean;
|
|
21
21
|
isStarted: boolean;
|
|
22
|
+
readonly isStatic: boolean;
|
|
22
23
|
domChildren: Node[];
|
|
23
24
|
constructor({ ctx, parent, stateKeys, generateText, isEscapeHTML }: {
|
|
24
25
|
ctx: ViewControllerInterface;
|
|
@@ -33,13 +34,16 @@ export declare class TextElement implements TextInterface {
|
|
|
33
34
|
setParentElement(parent: HtmlInterface | null): void;
|
|
34
35
|
/** Update text content in-place */
|
|
35
36
|
update(newText: string): void;
|
|
36
|
-
render():
|
|
37
|
+
render(): HTMLElement | Text | Comment;
|
|
38
|
+
replaceStaticText(text: string): void;
|
|
37
39
|
remove(): void;
|
|
40
|
+
/** Registry guard — element đã destroy không được reuse */
|
|
41
|
+
__destroyed__: boolean;
|
|
38
42
|
destroy(): void;
|
|
39
43
|
get text(): string;
|
|
40
44
|
set text(newText: string);
|
|
41
|
-
get
|
|
42
|
-
set
|
|
45
|
+
get isSaoElement(): boolean;
|
|
46
|
+
set isSaoElement(value: boolean);
|
|
43
47
|
get isOneText(): boolean;
|
|
44
48
|
set isOneText(value: boolean);
|
|
45
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextElement.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/TextElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"TextElement.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/TextElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,aAAa;IAC7C,OAAO,EAAE,aAAa,CAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,WAAW,CAA6B;IAChD,SAAS,CAAC,YAAY,EAAE,MAAM,MAAM,CAAoB;IACjD,KAAK,EAAE,MAAM,CAAM;IACnB,gBAAgB,EAAE,OAAO,CAAQ;IAEjC,SAAS,EAAE,OAAO,CAAS;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAG3B,WAAW,EAAE,IAAI,EAAE,CAAM;gBACb,EAAE,GAAG,EAAE,MAAa,EAAE,SAAc,EAAE,YAAuB,EAAE,YAAmB,EAAE,EAAE;QAAE,GAAG,EAAE,uBAAuB,CAAC;QAAC,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE;IAa5O,kCAAkC;IAClC,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAQZ,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAIpD,mCAAmC;IACnC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO7B,MAAM,IAAI,WAAW,GAAG,IAAI,GAAG,OAAO;IAMtC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKrC,MAAM,IAAI,IAAI;IAId,2DAA2D;IACpD,aAAa,EAAE,OAAO,CAAS;IAEtC,OAAO,IAAI,IAAI;IAUf,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAEvB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;IACD,IAAI,SAAS,IAAI,OAAO,CAEvB;IACD,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAE3B;CACJ"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { escapeHTML } from "../hellpers/utils";
|
|
2
1
|
/**
|
|
3
2
|
* TextElement — wraps a DOM Text node.
|
|
4
3
|
*
|
|
@@ -8,7 +7,7 @@ import { escapeHTML } from "../hellpers/utils";
|
|
|
8
7
|
*/
|
|
9
8
|
export class TextElement {
|
|
10
9
|
constructor({ ctx, parent = null, stateKeys = [], generateText = () => '', isEscapeHTML = true }) {
|
|
11
|
-
this.
|
|
10
|
+
this.saoType = 'TextElement';
|
|
12
11
|
this.statekeys = [];
|
|
13
12
|
this.unsubscribe = null;
|
|
14
13
|
this.generateText = () => this._text;
|
|
@@ -16,15 +15,17 @@ export class TextElement {
|
|
|
16
15
|
this.shouldEscapeHTML = true; // Whether to escape HTML in text content
|
|
17
16
|
this.isStarted = false;
|
|
18
17
|
this.domChildren = []; // For compatibility with HtmlInterface; Text itself doesn't have a single root element
|
|
18
|
+
/** Registry guard — element đã destroy không được reuse */
|
|
19
|
+
this.__destroyed__ = false;
|
|
19
20
|
this.ctx = ctx;
|
|
20
21
|
this.generateText = generateText;
|
|
21
22
|
this.parent = parent;
|
|
22
23
|
this.statekeys = stateKeys;
|
|
24
|
+
this.isStatic = stateKeys.length === 0;
|
|
23
25
|
this.shouldEscapeHTML = isEscapeHTML;
|
|
26
|
+
// FIX(baseline#3): KHÔNG escapeHTML khi ghi vào Text node — text node tự an toàn,
|
|
27
|
+
// escape thủ công gây double-escape. shouldEscapeHTML chỉ dùng cho SSR string path.
|
|
24
28
|
this._text = this.generateText();
|
|
25
|
-
if (this.shouldEscapeHTML) {
|
|
26
|
-
this._text = escapeHTML(this._text);
|
|
27
|
-
}
|
|
28
29
|
this.element = document.createTextNode(this._text);
|
|
29
30
|
}
|
|
30
31
|
/** Start reactive text updates */
|
|
@@ -48,23 +49,29 @@ export class TextElement {
|
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
setParentElement(parent) {
|
|
52
|
+
this.parent = parent;
|
|
51
53
|
}
|
|
52
54
|
/** Update text content in-place */
|
|
53
55
|
update(newText) {
|
|
54
56
|
if (this._text !== newText) {
|
|
55
57
|
this._text = newText;
|
|
56
|
-
this.element.textContent =
|
|
58
|
+
this.element.textContent = newText;
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
render() {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
const text = this.generateText();
|
|
63
|
+
this.update(text);
|
|
64
|
+
return this.element;
|
|
65
|
+
}
|
|
66
|
+
replaceStaticText(text) {
|
|
67
|
+
this.generateText = () => text;
|
|
68
|
+
this.update(text);
|
|
63
69
|
}
|
|
64
70
|
remove() {
|
|
65
71
|
this.element.remove();
|
|
66
72
|
}
|
|
67
73
|
destroy() {
|
|
74
|
+
this.__destroyed__ = true;
|
|
68
75
|
if (this.unsubscribe) {
|
|
69
76
|
this.unsubscribe();
|
|
70
77
|
this.unsubscribe = null;
|
|
@@ -78,10 +85,10 @@ export class TextElement {
|
|
|
78
85
|
set text(newText) {
|
|
79
86
|
this.update(newText);
|
|
80
87
|
}
|
|
81
|
-
get
|
|
88
|
+
get isSaoElement() {
|
|
82
89
|
return true;
|
|
83
90
|
}
|
|
84
|
-
set
|
|
91
|
+
set isSaoElement(value) {
|
|
85
92
|
// No-op setter to satisfy the Interface; this property is always true for Text elements
|
|
86
93
|
}
|
|
87
94
|
get isOneText() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextElement.js","sourceRoot":"","sources":["../../../../src/core/elements/TextElement.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TextElement.js","sourceRoot":"","sources":["../../../../src/core/elements/TextElement.ts"],"names":[],"mappings":"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"}
|