@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.
Files changed (383) hide show
  1. package/README.md +52 -195
  2. package/dist/index.d.ts +20 -5
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +14 -3
  5. package/dist/index.js.map +1 -1
  6. package/dist/plugins.d.ts +2 -2
  7. package/dist/plugins.js +2 -2
  8. package/dist/src/core/app/Application.d.ts +25 -15
  9. package/dist/src/core/app/Application.d.ts.map +1 -1
  10. package/dist/src/core/app/Application.js +55 -18
  11. package/dist/src/core/app/Application.js.map +1 -1
  12. package/dist/src/core/bootstrap/app.d.ts +1 -1
  13. package/dist/src/core/bootstrap/app.d.ts.map +1 -1
  14. package/dist/src/core/bootstrap/app.js +77 -4
  15. package/dist/src/core/bootstrap/app.js.map +1 -1
  16. package/dist/src/core/bootstrap/bundle.d.ts +41 -0
  17. package/dist/src/core/bootstrap/bundle.d.ts.map +1 -0
  18. package/dist/src/core/bootstrap/bundle.js +98 -0
  19. package/dist/src/core/bootstrap/bundle.js.map +1 -0
  20. package/dist/src/core/bootstrap/providers/ApiServiceProvider.d.ts +1 -1
  21. package/dist/src/core/bootstrap/providers/ApiServiceProvider.d.ts.map +1 -1
  22. package/dist/src/core/bootstrap/providers/ApiServiceProvider.js +3 -3
  23. package/dist/src/core/bootstrap/providers/ApiServiceProvider.js.map +1 -1
  24. package/dist/src/core/bootstrap/providers/CoreServiceProvider.d.ts +1 -1
  25. package/dist/src/core/bootstrap/providers/CoreServiceProvider.d.ts.map +1 -1
  26. package/dist/src/core/bootstrap/providers/CoreServiceProvider.js +11 -8
  27. package/dist/src/core/bootstrap/providers/CoreServiceProvider.js.map +1 -1
  28. package/dist/src/core/bootstrap/providers/HelperServiceProvider.d.ts +3 -1
  29. package/dist/src/core/bootstrap/providers/HelperServiceProvider.d.ts.map +1 -1
  30. package/dist/src/core/bootstrap/providers/HelperServiceProvider.js +8 -3
  31. package/dist/src/core/bootstrap/providers/HelperServiceProvider.js.map +1 -1
  32. package/dist/src/core/bootstrap/providers/RouteServiceProvider.d.ts +2 -1
  33. package/dist/src/core/bootstrap/providers/RouteServiceProvider.d.ts.map +1 -1
  34. package/dist/src/core/bootstrap/providers/RouteServiceProvider.js +14 -4
  35. package/dist/src/core/bootstrap/providers/RouteServiceProvider.js.map +1 -1
  36. package/dist/src/core/bootstrap/providers/ServiceProvider.d.ts +4 -4
  37. package/dist/src/core/bootstrap/providers/ServiceProvider.d.ts.map +1 -1
  38. package/dist/src/core/bootstrap/providers/ServiceProvider.js +5 -5
  39. package/dist/src/core/bootstrap/providers/ServiceProvider.js.map +1 -1
  40. package/dist/src/core/bootstrap/providers/ViewServiceProvider.d.ts +1 -1
  41. package/dist/src/core/bootstrap/providers/ViewServiceProvider.d.ts.map +1 -1
  42. package/dist/src/core/bootstrap/providers/ViewServiceProvider.js +3 -3
  43. package/dist/src/core/bootstrap/providers/ViewServiceProvider.js.map +1 -1
  44. package/dist/src/core/bootstrap/providers/default-providers.d.ts +1 -1
  45. package/dist/src/core/bootstrap/providers/default-providers.d.ts.map +1 -1
  46. package/dist/src/core/bootstrap/providers/default-providers.js +44 -11
  47. package/dist/src/core/bootstrap/providers/default-providers.js.map +1 -1
  48. package/dist/src/core/bootstrap/providers/index.d.ts +9 -9
  49. package/dist/src/core/bootstrap/providers/index.d.ts.map +1 -1
  50. package/dist/src/core/bootstrap/providers/index.js +8 -8
  51. package/dist/src/core/bootstrap/providers/index.js.map +1 -1
  52. package/dist/src/core/bootstrap/providers/provider-order.d.ts +1 -1
  53. package/dist/src/core/bootstrap/providers/provider-order.d.ts.map +1 -1
  54. package/dist/src/core/bootstrap/ssr.d.ts +47 -0
  55. package/dist/src/core/bootstrap/ssr.d.ts.map +1 -0
  56. package/dist/src/core/bootstrap/ssr.js +129 -0
  57. package/dist/src/core/bootstrap/ssr.js.map +1 -0
  58. package/dist/src/core/cache/ViewCache.d.ts +1 -1
  59. package/dist/src/core/cache/ViewCache.d.ts.map +1 -1
  60. package/dist/src/core/cache/index.d.ts +1 -1
  61. package/dist/src/core/cache/index.d.ts.map +1 -1
  62. package/dist/src/core/cache/index.js +1 -1
  63. package/dist/src/core/cache/index.js.map +1 -1
  64. package/dist/src/core/contracts/ApplicationInterface.d.ts +15 -11
  65. package/dist/src/core/contracts/ApplicationInterface.d.ts.map +1 -1
  66. package/dist/src/core/contracts/BlockInterface.d.ts +10 -10
  67. package/dist/src/core/contracts/BlockInterface.d.ts.map +1 -1
  68. package/dist/src/core/contracts/BundleInterface.d.ts +38 -0
  69. package/dist/src/core/contracts/BundleInterface.d.ts.map +1 -0
  70. package/dist/src/core/contracts/BundleInterface.js +2 -0
  71. package/dist/src/core/contracts/BundleInterface.js.map +1 -0
  72. package/dist/src/core/contracts/ComponentInterface.d.ts +7 -6
  73. package/dist/src/core/contracts/ComponentInterface.d.ts.map +1 -1
  74. package/dist/src/core/contracts/ElementInterface.d.ts +91 -27
  75. package/dist/src/core/contracts/ElementInterface.d.ts.map +1 -1
  76. package/dist/src/core/contracts/HeadServiceInterface.d.ts +37 -0
  77. package/dist/src/core/contracts/HeadServiceInterface.d.ts.map +1 -0
  78. package/dist/src/core/contracts/HeadServiceInterface.js +3 -0
  79. package/dist/src/core/contracts/HeadServiceInterface.js.map +1 -0
  80. package/dist/src/core/contracts/HelperInterface.d.ts +9 -1
  81. package/dist/src/core/contracts/HelperInterface.d.ts.map +1 -1
  82. package/dist/src/core/contracts/HttpServiceInterface.d.ts +3 -0
  83. package/dist/src/core/contracts/HttpServiceInterface.d.ts.map +1 -1
  84. package/dist/src/core/contracts/MarkerInterface.d.ts +29 -44
  85. package/dist/src/core/contracts/MarkerInterface.d.ts.map +1 -1
  86. package/dist/src/core/contracts/ReactiveInterface.d.ts +9 -9
  87. package/dist/src/core/contracts/ReactiveInterface.d.ts.map +1 -1
  88. package/dist/src/core/contracts/RouterInterface.d.ts +5 -2
  89. package/dist/src/core/contracts/RouterInterface.d.ts.map +1 -1
  90. package/dist/src/core/contracts/SectionInterface.d.ts +48 -0
  91. package/dist/src/core/contracts/SectionInterface.d.ts.map +1 -0
  92. package/dist/src/core/contracts/SectionInterface.js +2 -0
  93. package/dist/src/core/contracts/SectionInterface.js.map +1 -0
  94. package/dist/src/core/contracts/ServiceProviderInterface.d.ts +3 -3
  95. package/dist/src/core/contracts/ServiceProviderInterface.d.ts.map +1 -1
  96. package/dist/src/core/contracts/ViewControllerInterface.d.ts +116 -15
  97. package/dist/src/core/contracts/ViewControllerInterface.d.ts.map +1 -1
  98. package/dist/src/core/contracts/ViewInterface.d.ts +31 -5
  99. package/dist/src/core/contracts/ViewInterface.d.ts.map +1 -1
  100. package/dist/src/core/contracts/ViewManagerInterface.d.ts +47 -5
  101. package/dist/src/core/contracts/ViewManagerInterface.d.ts.map +1 -1
  102. package/dist/src/core/contracts/ViewStateInterface.d.ts +39 -2
  103. package/dist/src/core/contracts/ViewStateInterface.d.ts.map +1 -1
  104. package/dist/src/core/contracts/common.d.ts +3 -3
  105. package/dist/src/core/contracts/common.js +3 -3
  106. package/dist/src/core/contracts/utils.d.ts +19 -19
  107. package/dist/src/core/contracts/utils.d.ts.map +1 -1
  108. package/dist/src/core/contracts/views.d.ts +1 -22
  109. package/dist/src/core/contracts/views.d.ts.map +1 -1
  110. package/dist/src/core/devtools/hook.d.ts +66 -0
  111. package/dist/src/core/devtools/hook.d.ts.map +1 -0
  112. package/dist/src/core/devtools/hook.js +114 -0
  113. package/dist/src/core/devtools/hook.js.map +1 -0
  114. package/dist/src/core/devtools/index.d.ts +34 -0
  115. package/dist/src/core/devtools/index.d.ts.map +1 -0
  116. package/dist/src/core/devtools/index.js +33 -0
  117. package/dist/src/core/devtools/index.js.map +1 -0
  118. package/dist/src/core/devtools/inspector.d.ts +31 -0
  119. package/dist/src/core/devtools/inspector.d.ts.map +1 -0
  120. package/dist/src/core/devtools/inspector.js +249 -0
  121. package/dist/src/core/devtools/inspector.js.map +1 -0
  122. package/dist/src/core/elements/Block.d.ts +9 -7
  123. package/dist/src/core/elements/Block.d.ts.map +1 -1
  124. package/dist/src/core/elements/Block.js +33 -9
  125. package/dist/src/core/elements/Block.js.map +1 -1
  126. package/dist/src/core/elements/BlockOutlet.d.ts +19 -8
  127. package/dist/src/core/elements/BlockOutlet.d.ts.map +1 -1
  128. package/dist/src/core/elements/BlockOutlet.js +57 -13
  129. package/dist/src/core/elements/BlockOutlet.js.map +1 -1
  130. package/dist/src/core/elements/Component.d.ts +83 -11
  131. package/dist/src/core/elements/Component.d.ts.map +1 -1
  132. package/dist/src/core/elements/Component.js +334 -13
  133. package/dist/src/core/elements/Component.js.map +1 -1
  134. package/dist/src/core/elements/ForeachSlotCache.d.ts +95 -0
  135. package/dist/src/core/elements/ForeachSlotCache.d.ts.map +1 -0
  136. package/dist/src/core/elements/ForeachSlotCache.js +149 -0
  137. package/dist/src/core/elements/ForeachSlotCache.js.map +1 -0
  138. package/dist/src/core/elements/Fragment.d.ts +19 -13
  139. package/dist/src/core/elements/Fragment.d.ts.map +1 -1
  140. package/dist/src/core/elements/Fragment.js +43 -20
  141. package/dist/src/core/elements/Fragment.js.map +1 -1
  142. package/dist/src/core/elements/Html.d.ts +89 -12
  143. package/dist/src/core/elements/Html.d.ts.map +1 -1
  144. package/dist/src/core/elements/Html.js +707 -106
  145. package/dist/src/core/elements/Html.js.map +1 -1
  146. package/dist/src/core/elements/Output.d.ts +34 -10
  147. package/dist/src/core/elements/Output.d.ts.map +1 -1
  148. package/dist/src/core/elements/Output.js +141 -26
  149. package/dist/src/core/elements/Output.js.map +1 -1
  150. package/dist/src/core/elements/Reactive.d.ts +85 -14
  151. package/dist/src/core/elements/Reactive.d.ts.map +1 -1
  152. package/dist/src/core/elements/Reactive.js +315 -41
  153. package/dist/src/core/elements/Reactive.js.map +1 -1
  154. package/dist/src/core/elements/TextElement.d.ts +11 -7
  155. package/dist/src/core/elements/TextElement.d.ts.map +1 -1
  156. package/dist/src/core/elements/TextElement.js +18 -11
  157. package/dist/src/core/elements/TextElement.js.map +1 -1
  158. package/dist/src/core/elements/Wrapper.d.ts +24 -13
  159. package/dist/src/core/elements/Wrapper.d.ts.map +1 -1
  160. package/dist/src/core/elements/Wrapper.js +65 -8
  161. package/dist/src/core/elements/Wrapper.js.map +1 -1
  162. package/dist/src/core/elements/Yield.d.ts +10 -9
  163. package/dist/src/core/elements/Yield.d.ts.map +1 -1
  164. package/dist/src/core/elements/Yield.js +31 -19
  165. package/dist/src/core/elements/Yield.js.map +1 -1
  166. package/dist/src/core/elements/helpers.d.ts +7 -7
  167. package/dist/src/core/elements/helpers.d.ts.map +1 -1
  168. package/dist/src/core/elements/helpers.js +4 -4
  169. package/dist/src/core/elements/index.d.ts +12 -11
  170. package/dist/src/core/elements/index.d.ts.map +1 -1
  171. package/dist/src/core/elements/index.js +12 -11
  172. package/dist/src/core/elements/index.js.map +1 -1
  173. package/dist/src/core/elements/reconcileChildren.d.ts +7 -0
  174. package/dist/src/core/elements/reconcileChildren.d.ts.map +1 -0
  175. package/dist/src/core/elements/reconcileChildren.js +74 -0
  176. package/dist/src/core/elements/reconcileChildren.js.map +1 -0
  177. package/dist/src/core/helpers/ApiClient.d.ts.map +1 -0
  178. package/dist/src/core/{hellpers → helpers}/ApiClient.js +10 -1
  179. package/dist/src/core/helpers/ApiClient.js.map +1 -0
  180. package/dist/src/core/helpers/app.d.ts +3 -0
  181. package/dist/src/core/helpers/app.d.ts.map +1 -0
  182. package/dist/src/core/{hellpers → helpers}/app.js +11 -1
  183. package/dist/src/core/helpers/app.js.map +1 -0
  184. package/dist/src/core/helpers/transition.d.ts +34 -0
  185. package/dist/src/core/helpers/transition.d.ts.map +1 -0
  186. package/dist/src/core/helpers/transition.js +118 -0
  187. package/dist/src/core/helpers/transition.js.map +1 -0
  188. package/dist/src/core/{hellpers → helpers}/utils.d.ts +2 -2
  189. package/dist/src/core/helpers/utils.d.ts.map +1 -0
  190. package/dist/src/core/{hellpers → helpers}/utils.js +4 -4
  191. package/dist/src/core/helpers/utils.js.map +1 -0
  192. package/dist/src/core/helpers/view.d.ts +39 -0
  193. package/dist/src/core/helpers/view.d.ts.map +1 -0
  194. package/dist/src/core/helpers/view.js +286 -0
  195. package/dist/src/core/helpers/view.js.map +1 -0
  196. package/dist/src/core/routers/Router.d.ts +108 -7
  197. package/dist/src/core/routers/Router.d.ts.map +1 -1
  198. package/dist/src/core/routers/Router.js +444 -68
  199. package/dist/src/core/routers/Router.js.map +1 -1
  200. package/dist/src/core/routers/index.d.ts +2 -2
  201. package/dist/src/core/routers/index.d.ts.map +1 -1
  202. package/dist/src/core/routers/index.js +1 -1
  203. package/dist/src/core/routers/index.js.map +1 -1
  204. package/dist/src/core/services/AssetManager.d.ts +112 -0
  205. package/dist/src/core/services/AssetManager.d.ts.map +1 -0
  206. package/dist/src/core/services/AssetManager.js +361 -0
  207. package/dist/src/core/services/AssetManager.js.map +1 -0
  208. package/dist/src/core/services/BlockManager.d.ts +73 -2
  209. package/dist/src/core/services/BlockManager.d.ts.map +1 -1
  210. package/dist/src/core/services/BlockManager.js +270 -48
  211. package/dist/src/core/services/BlockManager.js.map +1 -1
  212. package/dist/src/core/services/DomService.js +3 -3
  213. package/dist/src/core/services/DomService.js.map +1 -1
  214. package/dist/src/core/services/HeadService.d.ts +24 -0
  215. package/dist/src/core/services/HeadService.d.ts.map +1 -0
  216. package/dist/src/core/services/HeadService.js +120 -0
  217. package/dist/src/core/services/HeadService.js.map +1 -0
  218. package/dist/src/core/services/HelperService.d.ts +14 -3
  219. package/dist/src/core/services/HelperService.d.ts.map +1 -1
  220. package/dist/src/core/services/HelperService.js +32 -2
  221. package/dist/src/core/services/HelperService.js.map +1 -1
  222. package/dist/src/core/services/HttpService.d.ts +8 -0
  223. package/dist/src/core/services/HttpService.d.ts.map +1 -1
  224. package/dist/src/core/services/HttpService.js +121 -47
  225. package/dist/src/core/services/HttpService.js.map +1 -1
  226. package/dist/src/core/services/MarkerRegistry.d.ts +51 -8
  227. package/dist/src/core/services/MarkerRegistry.d.ts.map +1 -1
  228. package/dist/src/core/services/MarkerRegistry.js +135 -14
  229. package/dist/src/core/services/MarkerRegistry.js.map +1 -1
  230. package/dist/src/core/services/PageCache.d.ts +101 -0
  231. package/dist/src/core/services/PageCache.d.ts.map +1 -0
  232. package/dist/src/core/services/PageCache.js +184 -0
  233. package/dist/src/core/services/PageCache.js.map +1 -0
  234. package/dist/src/core/services/SectionManager.d.ts +100 -0
  235. package/dist/src/core/services/SectionManager.d.ts.map +1 -0
  236. package/dist/src/core/services/SectionManager.js +408 -0
  237. package/dist/src/core/services/SectionManager.js.map +1 -0
  238. package/dist/src/core/services/StorageService.js +1 -1
  239. package/dist/src/core/services/TranslationService.d.ts +21 -0
  240. package/dist/src/core/services/TranslationService.d.ts.map +1 -0
  241. package/dist/src/core/services/TranslationService.js +95 -0
  242. package/dist/src/core/services/TranslationService.js.map +1 -0
  243. package/dist/src/core/services/index.d.ts +11 -8
  244. package/dist/src/core/services/index.d.ts.map +1 -1
  245. package/dist/src/core/services/index.js +11 -8
  246. package/dist/src/core/services/index.js.map +1 -1
  247. package/dist/src/core/types/utils.d.ts +8 -8
  248. package/dist/src/core/types/utils.d.ts.map +1 -1
  249. package/dist/src/core/view/LoopContext.d.ts +21 -1
  250. package/dist/src/core/view/LoopContext.d.ts.map +1 -1
  251. package/dist/src/core/view/LoopContext.js +36 -0
  252. package/dist/src/core/view/LoopContext.js.map +1 -1
  253. package/dist/src/core/view/ResourceScope.d.ts +38 -0
  254. package/dist/src/core/view/ResourceScope.d.ts.map +1 -0
  255. package/dist/src/core/view/ResourceScope.js +167 -0
  256. package/dist/src/core/view/ResourceScope.js.map +1 -0
  257. package/dist/src/core/view/Section.d.ts +17 -32
  258. package/dist/src/core/view/Section.d.ts.map +1 -1
  259. package/dist/src/core/view/Section.js +14 -55
  260. package/dist/src/core/view/Section.js.map +1 -1
  261. package/dist/src/core/view/View.d.ts +43 -7
  262. package/dist/src/core/view/View.d.ts.map +1 -1
  263. package/dist/src/core/view/View.js +22 -4
  264. package/dist/src/core/view/View.js.map +1 -1
  265. package/dist/src/core/view/ViewController.d.ts +313 -40
  266. package/dist/src/core/view/ViewController.d.ts.map +1 -1
  267. package/dist/src/core/view/ViewController.js +1002 -147
  268. package/dist/src/core/view/ViewController.js.map +1 -1
  269. package/dist/src/core/view/ViewManager.d.ts +318 -27
  270. package/dist/src/core/view/ViewManager.d.ts.map +1 -1
  271. package/dist/src/core/view/ViewManager.js +1199 -258
  272. package/dist/src/core/view/ViewManager.js.map +1 -1
  273. package/dist/src/core/view/ViewState.d.ts +185 -6
  274. package/dist/src/core/view/ViewState.d.ts.map +1 -1
  275. package/dist/src/core/view/ViewState.js +851 -123
  276. package/dist/src/core/view/ViewState.js.map +1 -1
  277. package/dist/src/core/view/index.d.ts +5 -5
  278. package/dist/src/core/view/index.d.ts.map +1 -1
  279. package/dist/src/core/view/index.js +5 -5
  280. package/dist/src/core/view/index.js.map +1 -1
  281. package/dist/src/testing/index.d.ts +69 -0
  282. package/dist/src/testing/index.d.ts.map +1 -0
  283. package/dist/src/testing/index.js +140 -0
  284. package/dist/src/testing/index.js.map +1 -0
  285. package/index.ts +29 -5
  286. package/package.json +30 -21
  287. package/plugins.ts +2 -2
  288. package/src/core/app/Application.ts +72 -31
  289. package/src/core/bootstrap/app.ts +84 -6
  290. package/src/core/bootstrap/bundle.ts +101 -0
  291. package/src/core/bootstrap/providers/ApiServiceProvider.ts +4 -4
  292. package/src/core/bootstrap/providers/CoreServiceProvider.ts +14 -8
  293. package/src/core/bootstrap/providers/HelperServiceProvider.ts +8 -3
  294. package/src/core/bootstrap/providers/RouteServiceProvider.ts +15 -4
  295. package/src/core/bootstrap/providers/ServiceProvider.ts +8 -8
  296. package/src/core/bootstrap/providers/ViewServiceProvider.ts +3 -3
  297. package/src/core/bootstrap/providers/default-providers.ts +51 -16
  298. package/src/core/bootstrap/providers/index.ts +9 -9
  299. package/src/core/bootstrap/providers/provider-order.test.ts +16 -27
  300. package/src/core/bootstrap/providers/provider-order.ts +1 -1
  301. package/src/core/bootstrap/ssr.ts +141 -0
  302. package/src/core/cache/ViewCache.ts +1 -1
  303. package/src/core/cache/index.ts +1 -1
  304. package/src/core/contracts/ApplicationInterface.ts +15 -11
  305. package/src/core/contracts/BlockInterface.ts +18 -18
  306. package/src/core/contracts/BundleInterface.ts +40 -0
  307. package/src/core/contracts/ComponentInterface.ts +7 -6
  308. package/src/core/contracts/ElementInterface.ts +95 -27
  309. package/src/core/contracts/HeadServiceInterface.ts +41 -0
  310. package/src/core/contracts/HelperInterface.ts +9 -1
  311. package/src/core/contracts/HttpServiceInterface.ts +3 -0
  312. package/src/core/contracts/MarkerInterface.ts +22 -49
  313. package/src/core/contracts/ReactiveInterface.ts +9 -9
  314. package/src/core/contracts/RouterInterface.ts +5 -2
  315. package/src/core/contracts/SectionInterface.ts +49 -0
  316. package/src/core/contracts/ServiceProviderInterface.ts +3 -3
  317. package/src/core/contracts/ViewControllerInterface.ts +124 -16
  318. package/src/core/contracts/ViewInterface.ts +34 -5
  319. package/src/core/contracts/ViewManagerInterface.ts +40 -5
  320. package/src/core/contracts/ViewStateInterface.ts +39 -2
  321. package/src/core/contracts/common.ts +3 -3
  322. package/src/core/contracts/utils.ts +19 -19
  323. package/src/core/contracts/views.ts +2 -22
  324. package/src/core/devtools/hook.ts +142 -0
  325. package/src/core/devtools/index.ts +38 -0
  326. package/src/core/devtools/inspector.ts +270 -0
  327. package/src/core/elements/Block.ts +43 -21
  328. package/src/core/elements/BlockOutlet.ts +61 -21
  329. package/src/core/elements/Component.ts +352 -18
  330. package/src/core/elements/ElementManager.ts +9 -9
  331. package/src/core/elements/ForeachSlotCache.ts +170 -0
  332. package/src/core/elements/Fragment.ts +50 -32
  333. package/src/core/elements/Html.ts +696 -117
  334. package/src/core/elements/Output.ts +147 -30
  335. package/src/core/elements/Reactive.ts +329 -52
  336. package/src/core/elements/TextElement.ts +25 -16
  337. package/src/core/elements/Wrapper.ts +84 -18
  338. package/src/core/elements/Yield.ts +35 -24
  339. package/src/core/elements/helpers.ts +12 -12
  340. package/src/core/elements/index.ts +25 -24
  341. package/src/core/elements/reconcileChildren.ts +70 -0
  342. package/src/core/{hellpers → helpers}/ApiClient.ts +8 -1
  343. package/src/core/{hellpers → helpers}/app.ts +13 -2
  344. package/src/core/helpers/transition.ts +127 -0
  345. package/src/core/{hellpers → helpers}/utils.ts +4 -4
  346. package/src/core/helpers/view.ts +283 -0
  347. package/src/core/routers/Router.ts +458 -64
  348. package/src/core/routers/index.ts +2 -2
  349. package/src/core/services/AssetManager.ts +387 -0
  350. package/src/core/services/BlockManager.ts +272 -50
  351. package/src/core/services/DomService.ts +3 -3
  352. package/src/core/services/HeadService.ts +124 -0
  353. package/src/core/services/HelperService.ts +34 -4
  354. package/src/core/services/HttpService.ts +116 -55
  355. package/src/core/services/MarkerRegistry.ts +142 -16
  356. package/src/core/services/PageCache.ts +239 -0
  357. package/src/core/services/SectionManager.ts +387 -0
  358. package/src/core/services/StorageService.ts +1 -1
  359. package/src/core/services/TranslationService.ts +91 -0
  360. package/src/core/services/index.ts +11 -8
  361. package/src/core/types/utils.ts +8 -8
  362. package/src/core/view/LoopContext.ts +38 -1
  363. package/src/core/view/ResourceScope.ts +174 -0
  364. package/src/core/view/Section.ts +21 -68
  365. package/src/core/view/View.ts +57 -8
  366. package/src/core/view/ViewController.ts +1070 -186
  367. package/src/core/view/ViewManager.ts +1346 -272
  368. package/src/core/view/ViewState.ts +834 -116
  369. package/src/core/view/index.ts +5 -5
  370. package/src/testing/index.ts +184 -0
  371. package/dist/src/core/hellpers/ApiClient.d.ts.map +0 -1
  372. package/dist/src/core/hellpers/ApiClient.js.map +0 -1
  373. package/dist/src/core/hellpers/app.d.ts +0 -3
  374. package/dist/src/core/hellpers/app.d.ts.map +0 -1
  375. package/dist/src/core/hellpers/app.js.map +0 -1
  376. package/dist/src/core/hellpers/utils.d.ts.map +0 -1
  377. package/dist/src/core/hellpers/utils.js.map +0 -1
  378. package/dist/src/core/services/MarkerService.d.ts +0 -299
  379. package/dist/src/core/services/MarkerService.d.ts.map +0 -1
  380. package/dist/src/core/services/MarkerService.js +0 -723
  381. package/dist/src/core/services/MarkerService.js.map +0 -1
  382. package/src/core/services/MarkerService.ts +0 -923
  383. /package/dist/src/core/{hellpers → helpers}/ApiClient.d.ts +0 -0
@@ -1,7 +1,7 @@
1
- import { InitMode } from "../contracts/common";
2
- import type { HtmlInterface, OneChildrenFactory, OneElementChildren, WrapperInterface } from "../contracts/ElementInterface";
3
- import type { ViewControllerInterface } from "../contracts/ViewControllerInterface";
4
- import type { OneObjectType } from "../types/utils";
1
+ import { InitMode } from "../contracts/common.js";
2
+ import type { HtmlInterface, SaoChildrenFactory, SaoElementChildren, WrapperInterface } from "../contracts/ElementInterface.js";
3
+ import type { ViewControllerInterface } from "../contracts/ViewControllerInterface.js";
4
+ import type { SaoObjectType } from "../types/utils.js";
5
5
  /**
6
6
  * Wrapper — renders multiple root nodes into a parent without a wrapping tag.
7
7
  *
@@ -12,11 +12,11 @@ import type { OneObjectType } from "../types/utils";
12
12
  * similar to Reactive but without the reactivity overhead.
13
13
  */
14
14
  export declare class Wrapper implements WrapperInterface {
15
- oneType: OneObjectType;
15
+ saoType: SaoObjectType;
16
16
  parent: HtmlInterface | null;
17
17
  nodes: Node[];
18
18
  /** Tracked child element wrappers (Html, Output, Reactive, TextElement, etc.) */
19
- children: OneElementChildren;
19
+ children: SaoElementChildren;
20
20
  private ctx;
21
21
  private childrenFactory;
22
22
  openTag: Comment;
@@ -28,11 +28,20 @@ export declare class Wrapper implements WrapperInterface {
28
28
  ctx: ViewControllerInterface;
29
29
  initMode?: InitMode;
30
30
  parentElement?: HtmlInterface | null;
31
- childrenFactory: OneChildrenFactory;
31
+ childrenFactory: SaoChildrenFactory;
32
32
  });
33
+ /**
34
+ * Tìm cặp view markers từ server-rendered HTML.
35
+ * Format MarkerRegistry: open = `v:id`, close = `/v:id`.
36
+ * Quét comment nodes trong parent element (fallback document.body).
37
+ */
38
+ private claimSSRMarkers;
39
+ init(): void;
33
40
  setParentElement(parent: HtmlInterface | null): void;
34
- render(): void;
35
- setChildrenFactory(factory: OneChildrenFactory): void;
41
+ render(): SaoElementChildren;
42
+ appendTo(parent: HtmlInterface): void;
43
+ mountTo(parent: HtmlInterface): void;
44
+ setChildrenFactory(factory: SaoChildrenFactory): void;
36
45
  /** Hydrate lifecycle — reattach event listeners or perform other setup */
37
46
  hydrate(): void;
38
47
  /** Start lifecycle — recursively activate children's reactive subscriptions */
@@ -41,10 +50,12 @@ export declare class Wrapper implements WrapperInterface {
41
50
  stop(): void;
42
51
  /** Remove all nodes between markers from the DOM */
43
52
  clear(): void;
53
+ /** Registry guard — wrapper đã destroy không được reuse (ViewController.wrapper) */
54
+ __destroyed__: boolean;
44
55
  destroy(): void;
45
- get isOneElement(): boolean;
46
- set isOneElement(value: boolean);
47
- get isOneFragment(): boolean;
48
- set isOneFragment(value: boolean);
56
+ get isSaoElement(): boolean;
57
+ set isSaoElement(value: boolean);
58
+ get isSaoFragment(): boolean;
59
+ set isSaoFragment(value: boolean);
49
60
  }
50
61
  //# sourceMappingURL=Wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Wrapper.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/Wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAqB,aAAa,EAAE,kBAAkB,EAA4B,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC1K,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;;;;;GAQG;AACH,qBAAa,OAAQ,YAAW,gBAAgB;IAC5C,OAAO,EAAE,aAAa,CAAa;IAC5B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,IAAI,EAAE,CAAM;IAC1B,iFAAiF;IAC1E,QAAQ,EAAE,kBAAkB,CAAM;IACzC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,eAAe,CAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAoB;IAE7C,WAAW,EAAE,IAAI,EAAE,CAAM;gBAEb,EACR,GAAG,EACH,QAA2B,EAC3B,aAAoB,EACpB,eAAe,EAClB,EAAE;QACC,GAAG,EAAE,uBAAuB,CAAC;QAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACrC,eAAe,EAAE,kBAAkB,CAAA;KACtC;IAWD,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAGpD,MAAM,IAAI,IAAI;IAId,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIrD,0EAA0E;IAE1E,OAAO,IAAI,IAAI;IAQf,+EAA+E;IAC/E,KAAK,IAAI,IAAI;IAQb,gFAAgF;IAChF,IAAI,IAAI,IAAI;IAQZ,oDAAoD;IACpD,KAAK,IAAI,IAAI;IAmBb,OAAO,IAAI,IAAI;IAOf,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IACD,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,EAE/B;CACJ"}
1
+ {"version":3,"file":"Wrapper.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/Wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAiC,aAAa,EAAE,kBAAkB,EAAwC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACrM,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAKvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD;;;;;;;;GAQG;AACH,qBAAa,OAAQ,YAAW,gBAAgB;IAC5C,OAAO,EAAE,aAAa,CAAa;IAC5B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,IAAI,EAAE,CAAM;IAC1B,iFAAiF;IAC1E,QAAQ,EAAE,kBAAkB,CAAM;IACzC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,eAAe,CAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAoB;IAE7C,WAAW,EAAE,IAAI,EAAE,CAAM;gBAEb,EACR,GAAG,EACH,QAA2B,EAC3B,aAAoB,EACpB,eAAe,EAClB,EAAE;QACC,GAAG,EAAE,uBAAuB,CAAC;QAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACrC,eAAe,EAAE,kBAAkB,CAAA;KACtC;IA+BD;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAMvB,IAAI;IAKJ,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAGpD,MAAM,IAAI,kBAAkB;IAa5B,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAOrC,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAKpC,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIrD,0EAA0E;IAE1E,OAAO,IAAI,IAAI;IAQf,+EAA+E;IAC/E,KAAK,IAAI,IAAI;IAQb,gFAAgF;IAChF,IAAI,IAAI,IAAI;IAQZ,oDAAoD;IACpD,KAAK,IAAI,IAAI;IAmBb,oFAAoF;IAC7E,aAAa,EAAE,OAAO,CAAS;IAEtC,OAAO,IAAI,IAAI;IAQf,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAE9B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IACD,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,EAE/B;CACJ"}
@@ -1,4 +1,7 @@
1
- import { InitModes } from "../contracts/common";
1
+ import { InitModes } from "../contracts/common.js";
2
+ import { app } from "../helpers/app.js";
3
+ import { mountElementList } from "../helpers/view.js";
4
+ import { TextElement } from "./TextElement.js";
2
5
  /**
3
6
  * Wrapper — renders multiple root nodes into a parent without a wrapping tag.
4
7
  *
@@ -10,24 +13,77 @@ import { InitModes } from "../contracts/common";
10
13
  */
11
14
  export class Wrapper {
12
15
  constructor({ ctx, initMode = InitModes.CREATE, parentElement = null, childrenFactory }) {
13
- this.oneType = 'Wrapper';
16
+ this.saoType = 'Wrapper';
14
17
  this.nodes = [];
15
18
  /** Tracked child element wrappers (Html, Output, Reactive, TextElement, etc.) */
16
19
  this.children = [];
17
20
  this.initMode = InitModes.CREATE;
18
21
  this.domChildren = []; // For compatibility with HtmlInterface; Wrapper itself doesn't have a single root element
22
+ /** Registry guard — wrapper đã destroy không được reuse (ViewController.wrapper) */
23
+ this.__destroyed__ = false;
19
24
  this.ctx = ctx;
20
25
  this.parent = parentElement;
21
26
  this.childrenFactory = childrenFactory;
22
27
  this.id = ctx.viewId;
23
28
  this.initMode = initMode;
24
- this.openTag = document.createComment('wrapper-start');
25
- this.closeTag = document.createComment('wrapper-end');
29
+ this.init();
30
+ const registry = app("Registry");
31
+ if (this.initMode === InitModes.HYDRATE) {
32
+ // ── Hydrate: tìm view markers SSR trong DOM ─────────────────
33
+ // Format MarkerRegistry: open = `v:id`, close = `/v:id`
34
+ // (v = shortcut cho 'view'). Nếu không có (vd partial hydration
35
+ // khi root element CHÍNH là boundary của view) → tạo markers mới,
36
+ // không cảnh báo vì đây là trường hợp hợp lệ.
37
+ const claimed = this.claimSSRMarkers(registry);
38
+ if (claimed) {
39
+ this.openTag = claimed.open;
40
+ this.closeTag = claimed.close;
41
+ }
42
+ else {
43
+ this.openTag = registry.createMarkerStart('view', this.id);
44
+ this.closeTag = registry.createMarkerEnd('view', this.id);
45
+ }
46
+ }
47
+ else {
48
+ this.openTag = registry.createMarkerStart('view', this.id);
49
+ this.closeTag = registry.createMarkerEnd('view', this.id);
50
+ }
51
+ }
52
+ /**
53
+ * Tìm cặp view markers từ server-rendered HTML.
54
+ * Format MarkerRegistry: open = `v:id`, close = `/v:id`.
55
+ * Quét comment nodes trong parent element (fallback document.body).
56
+ */
57
+ claimSSRMarkers(registry) {
58
+ return registry.claim('view', this.id, this.parent?.element ?? null);
59
+ }
60
+ init() {
26
61
  }
27
62
  setParentElement(parent) {
28
63
  this.parent = parent;
29
64
  }
30
65
  render() {
66
+ this.children = [];
67
+ const children = this.childrenFactory(this.parent);
68
+ this.children = children
69
+ .filter((child) => child !== null && child !== undefined)
70
+ .map((child) => {
71
+ if (typeof child === 'string' || typeof child === 'number') {
72
+ return new TextElement({ ctx: this.ctx, parent: this.parent, stateKeys: [], generateText: () => String(child) });
73
+ }
74
+ return child;
75
+ });
76
+ return this.children;
77
+ }
78
+ appendTo(parent) {
79
+ this.parent = parent;
80
+ this.parent.appendElement(this.openTag);
81
+ mountElementList(this.parent, this.render());
82
+ this.parent.appendElement(this.closeTag);
83
+ }
84
+ mountTo(parent) {
85
+ parent.clearHTML();
86
+ this.appendTo(parent);
31
87
  }
32
88
  setChildrenFactory(factory) {
33
89
  this.childrenFactory = factory;
@@ -75,21 +131,22 @@ export class Wrapper {
75
131
  this.nodes = [];
76
132
  }
77
133
  destroy() {
134
+ this.__destroyed__ = true;
78
135
  this.clear();
79
136
  this.openTag.remove();
80
137
  this.closeTag.remove();
81
138
  this.parent = null;
82
139
  }
83
- get isOneElement() {
140
+ get isSaoElement() {
84
141
  return true;
85
142
  }
86
- set isOneElement(value) {
143
+ set isSaoElement(value) {
87
144
  // No-op setter to satisfy the Interface; this property is always true for Fragment elements
88
145
  }
89
- get isOneFragment() {
146
+ get isSaoFragment() {
90
147
  return true;
91
148
  }
92
- set isOneFragment(value) {
149
+ set isSaoFragment(value) {
93
150
  // No-op setter to satisfy the Interface; this property is always true for Fragment elements
94
151
  }
95
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Wrapper.js","sourceRoot":"","sources":["../../../../src/core/elements/Wrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Wrapper.js","sourceRoot":"","sources":["../../../../src/core/elements/Wrapper.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,20 @@
1
- import { InitMode } from "../contracts/common";
2
- import { HtmlInterface, OneChildrenFactoryOutput, YieldInterface } from "../contracts/ElementInterface";
3
- import { ViewControllerInterface } from "../contracts/ViewControllerInterface";
4
- import { OneObjectType } from "../types/utils";
1
+ import { InitMode } from "../contracts/common.js";
2
+ import { HtmlInterface, YieldInterface } from "../contracts/ElementInterface.js";
3
+ import { ViewControllerInterface } from "../contracts/ViewControllerInterface.js";
4
+ import { SaoObjectType } from "../types/utils.js";
5
5
  export declare class YieldElement implements YieldInterface {
6
- oneType: OneObjectType;
6
+ saoType: SaoObjectType;
7
7
  ctx: ViewControllerInterface;
8
8
  name: string;
9
9
  id: string;
10
- contentFactory: () => OneChildrenFactoryOutput;
11
10
  openTag: Comment;
12
11
  closeTag: Comment;
13
12
  initMode: InitMode;
14
13
  domChildren: Node[];
15
14
  parent: HtmlInterface | null;
16
15
  defaultValue: string;
16
+ /** Registry guard — thiếu field này thì aliveFromRegistry tái dùng Yield đã destroy */
17
+ __destroyed__: boolean;
17
18
  constructor({ ctx, name, initMode, id, defaultValue }: {
18
19
  ctx: ViewControllerInterface;
19
20
  name: string;
@@ -23,11 +24,11 @@ export declare class YieldElement implements YieldInterface {
23
24
  });
24
25
  private createMarkers;
25
26
  setParentElement(parent: HtmlInterface | null): void;
26
- setContentFactory(factory: () => OneChildrenFactoryOutput): void;
27
+ /** Idempotent: markers already in DOM (hydrate claim, or same-layout reuse) → keep as-is. */
27
28
  render(): void;
28
29
  destroy(): void;
29
- get isOneElement(): boolean;
30
- set isOneElement(_: boolean);
30
+ get isSaoElement(): boolean;
31
+ set isSaoElement(_: boolean);
31
32
  get isOneYield(): boolean;
32
33
  set isOneYield(_: boolean);
33
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Yield.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/Yield.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACxG,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAG/E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBAAa,YAAa,YAAW,cAAc;IAC/C,OAAO,EAAE,aAAa,CAAW;IACjC,GAAG,EAAE,uBAAuB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,wBAAwB,CAAY;IAC1D,OAAO,EAAG,OAAO,CAAC;IAClB,QAAQ,EAAG,OAAO,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAmB;IACrC,WAAW,EAAE,IAAI,EAAE,CAAM;IACzB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,YAAY,EAAE,MAAM,CAAM;gBACd,EAAC,GAAG,EAAE,IAAS,EAAE,QAA2B,EAAE,EAAS,EAAE,YAAiB,EAAC,EAAG;QAAC,GAAG,EAAE,uBAAuB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAC;IAiBtM,OAAO,CAAC,aAAa;IAMrB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAIpD,iBAAiB,CAAC,OAAO,EAAE,MAAM,wBAAwB,GAAG,IAAI;IAIhE,MAAM,IAAI,IAAI;IAQd,OAAO,IAAI,IAAI;IAOf,IAAI,YAAY,IAAI,OAAO,CAAiB;IAC5C,IAAI,YAAY,CAAC,CAAC,EAAE,OAAO,EAAI;IAC/B,IAAI,UAAU,IAAI,OAAO,CAAiB;IAC1C,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EAAI;CAChC"}
1
+ {"version":3,"file":"Yield.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/Yield.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGlF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,qBAAa,YAAa,YAAW,cAAc;IAC/C,OAAO,EAAE,aAAa,CAAW;IACjC,GAAG,EAAE,uBAAuB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAG,OAAO,CAAC;IAClB,QAAQ,EAAG,OAAO,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAmB;IACrC,WAAW,EAAE,IAAI,EAAE,CAAM;IACzB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,YAAY,EAAE,MAAM,CAAM;IAC1B,uFAAuF;IAChF,aAAa,EAAE,OAAO,CAAS;gBAC1B,EAAC,GAAG,EAAE,IAAS,EAAE,QAA2B,EAAE,EAAS,EAAE,YAAiB,EAAC,EAAG;QAAC,GAAG,EAAE,uBAAuB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAC;IA2BtM,OAAO,CAAC,aAAa;IAMrB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAIpD,6FAA6F;IAC7F,MAAM,IAAI,IAAI;IASd,OAAO,IAAI,IAAI;IASf,IAAI,YAAY,IAAI,OAAO,CAAiB;IAC5C,IAAI,YAAY,CAAC,CAAC,EAAE,OAAO,EAAI;IAC/B,IAAI,UAAU,IAAI,OAAO,CAAiB;IAC1C,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EAAI;CAChC"}
@@ -1,41 +1,51 @@
1
- import { InitModes } from "../contracts/common";
2
- import { generateUUID } from "../hellpers/utils";
3
- import { OneMarker } from "../services/MarkerService";
1
+ import { InitModes } from "../contracts/common.js";
2
+ import { generateUUID } from "../helpers/utils.js";
3
+ import markerRegistry from "../services/MarkerRegistry.js";
4
4
  export class YieldElement {
5
5
  constructor({ ctx, name = '', initMode = InitModes.CREATE, id = null, defaultValue = '' }) {
6
- this.oneType = "Yield";
7
- this.contentFactory = () => [];
6
+ this.saoType = "Yield";
8
7
  this.initMode = InitModes.CREATE;
9
8
  this.domChildren = [];
10
9
  this.parent = null;
11
10
  this.defaultValue = '';
11
+ /** Registry guard — thiếu field này thì aliveFromRegistry tái dùng Yield đã destroy */
12
+ this.__destroyed__ = false;
12
13
  this.ctx = ctx;
13
14
  this.name = name;
14
15
  this.initMode = initMode;
15
- this.id = id && id.length > 0 ? id : generateUUID();
16
+ // Marker id đầy đủ = {viewId}-{hash} — khớp quy ước server (HYDRATION.md §5.1),
17
+ // giống Component.ts. Trước đây thiếu prefix viewId → hydrate không tìm đúng marker.
18
+ const rawId = id && id.length > 0 ? id : generateUUID();
19
+ this.id = `${ctx.viewId}-${rawId}`;
16
20
  this.defaultValue = defaultValue;
17
- const yeildMarker = (this.initMode === InitModes.HYDRATE) ? OneMarker.first('yield', this.id) : null;
18
- if (yeildMarker) {
19
- this.openTag = yeildMarker.openTag;
20
- this.closeTag = yeildMarker.closeTag;
21
- this.domChildren = yeildMarker.nodes.map((el) => el);
21
+ // Claim marker server qua index O(1) của MarkerRegistry — giống Reactive/
22
+ // Output/Component. Bản cũ duyệt TOÀN BỘ comment của tài liệu cho mỗi @yield.
23
+ const claimed = (this.initMode === InitModes.HYDRATE)
24
+ ? markerRegistry.claim('yield', this.id)
25
+ : null;
26
+ if (claimed) {
27
+ this.openTag = claimed.open;
28
+ this.closeTag = claimed.close;
29
+ for (let node = claimed.open.nextSibling; node && node !== claimed.close; node = node.nextSibling) {
30
+ this.domChildren.push(node);
31
+ }
22
32
  }
23
33
  else {
24
34
  this.createMarkers();
25
35
  }
26
36
  }
27
37
  createMarkers() {
28
- const key = OneMarker.addRegistry('yield', this.id, { name: this.name });
29
- this.openTag = OneMarker.createOpenMarker('yield', this.id);
30
- this.closeTag = OneMarker.createCloseMarker('yield', this.id);
38
+ markerRegistry.register('yield', this.id, { name: this.name });
39
+ this.openTag = markerRegistry.createMarkerStart('yield', this.id);
40
+ this.closeTag = markerRegistry.createMarkerEnd('yield', this.id);
31
41
  }
32
42
  setParentElement(parent) {
33
43
  this.parent = parent;
34
44
  }
35
- setContentFactory(factory) {
36
- this.contentFactory = factory;
37
- }
45
+ /** Idempotent: markers already in DOM (hydrate claim, or same-layout reuse) → keep as-is. */
38
46
  render() {
47
+ if (this.openTag.parentNode)
48
+ return;
39
49
  if (!this.parent?.element)
40
50
  return;
41
51
  const parentEl = this.parent.element;
@@ -43,13 +53,15 @@ export class YieldElement {
43
53
  parentEl.appendChild(this.closeTag);
44
54
  }
45
55
  destroy() {
56
+ this.__destroyed__ = true;
57
+ this.ctx.releaseElement?.(this);
46
58
  this.openTag?.remove();
47
59
  this.closeTag?.remove();
48
60
  this.domChildren = [];
49
61
  this.parent = null;
50
62
  }
51
- get isOneElement() { return true; }
52
- set isOneElement(_) { }
63
+ get isSaoElement() { return true; }
64
+ set isSaoElement(_) { }
53
65
  get isOneYield() { return true; }
54
66
  set isOneYield(_) { }
55
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Yield.js","sourceRoot":"","sources":["../../../../src/core/elements/Yield.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Yield.js","sourceRoot":"","sources":["../../../../src/core/elements/Yield.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { BlockOutletInterface } from "../contracts/BlockInterface";
2
- import { FragmentInterface, HtmlInterface, OutputInterface, OneChildrenFactoryOutput, OneElementChildren } from "../contracts/ElementInterface";
3
- import { ReactiveInterface } from "../contracts/ReactiveInterface";
4
- import { ViewControllerInterface } from "../contracts/ViewControllerInterface";
5
- import { OneObjectType } from "../types/utils";
6
- export declare function getOneObjectType(instance: any): OneObjectType | null;
7
- export declare function parseElementChildren(oneElement: HtmlInterface | ReactiveInterface | BlockOutletInterface | OutputInterface | FragmentInterface | ViewControllerInterface, parentElement: HTMLElement, children: OneChildrenFactoryOutput): OneElementChildren;
1
+ import { BlockOutletInterface } from "../contracts/BlockInterface.js";
2
+ import { FragmentInterface, HtmlInterface, OutputInterface, SaoChildrenFactoryOutput, SaoElementChildren } from "../contracts/ElementInterface.js";
3
+ import { ReactiveInterface } from "../contracts/ReactiveInterface.js";
4
+ import { ViewControllerInterface } from "../contracts/ViewControllerInterface.js";
5
+ import { SaoObjectType } from "../types/utils.js";
6
+ export declare function getSaoObjectType(instance: any): SaoObjectType | null;
7
+ export declare function parseElementChildren(oneElement: HtmlInterface | ReactiveInterface | BlockOutletInterface | OutputInterface | FragmentInterface | ViewControllerInterface, parentElement: HTMLElement, children: SaoChildrenFactoryOutput): SaoElementChildren;
8
8
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAChJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,aAAa,GAAG,IAAI,CAKpE;AAED,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,aAAa,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,eAAe,GAAG,iBAAiB,GAAG,uBAAuB,EACpI,aAAa,EAAE,WAAW,EAC1B,QAAQ,EAAE,wBAAwB,GACnC,kBAAkB,CAsCpB"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACnJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,aAAa,GAAG,IAAI,CAKpE;AAED,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,aAAa,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,eAAe,GAAG,iBAAiB,GAAG,uBAAuB,EACpI,aAAa,EAAE,WAAW,EAC1B,QAAQ,EAAE,wBAAwB,GACnC,kBAAkB,CAsCpB"}
@@ -1,6 +1,6 @@
1
- export function getOneObjectType(instance) {
2
- if (instance && typeof instance === 'object' && 'oneType' in instance) {
3
- return instance.oneType;
1
+ export function getSaoObjectType(instance) {
2
+ if (instance && typeof instance === 'object' && 'saoType' in instance) {
3
+ return instance.saoType;
4
4
  }
5
5
  return null;
6
6
  }
@@ -26,7 +26,7 @@ export function parseElementChildren(oneElement, parentElement, children) {
26
26
  console.warn('Skipping invalid child:', child);
27
27
  return;
28
28
  }
29
- let childType = getOneObjectType(child);
29
+ let childType = getSaoObjectType(child);
30
30
  if (!childType) {
31
31
  return;
32
32
  }
@@ -1,12 +1,13 @@
1
- export * from "./Block";
2
- export * from "./BlockOutlet";
3
- export * from './Component';
4
- export * from "./ElementManager";
5
- export * from "./Fragment";
6
- export * from "./helpers";
7
- export * from "./Html";
8
- export * from "./Output";
9
- export * from './Reactive';
10
- export * from "./TextElement";
11
- export * from "./Yield";
1
+ export * from "./Block.js";
2
+ export * from "./BlockOutlet.js";
3
+ export * from './Component.js';
4
+ export * from "./ElementManager.js";
5
+ export * from "./Fragment.js";
6
+ export * from "./helpers.js";
7
+ export * from "./Html.js";
8
+ export * from "./Output.js";
9
+ export * from './Reactive.js';
10
+ export * from './ForeachSlotCache.js';
11
+ export * from "./TextElement.js";
12
+ export * from "./Yield.js";
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/index.ts"],"names":[],"mappings":"AAeA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/index.ts"],"names":[],"mappings":"AAeA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
@@ -1,12 +1,13 @@
1
- export * from "./Block";
2
- export * from "./BlockOutlet";
3
- export * from './Component';
4
- export * from "./ElementManager";
5
- export * from "./Fragment";
6
- export * from "./helpers";
7
- export * from "./Html";
8
- export * from "./Output";
9
- export * from './Reactive';
10
- export * from "./TextElement";
11
- export * from "./Yield";
1
+ export * from "./Block.js";
2
+ export * from "./BlockOutlet.js";
3
+ export * from './Component.js';
4
+ export * from "./ElementManager.js";
5
+ export * from "./Fragment.js";
6
+ export * from "./helpers.js";
7
+ export * from "./Html.js";
8
+ export * from "./Output.js";
9
+ export * from './Reactive.js';
10
+ export * from './ForeachSlotCache.js';
11
+ export * from "./TextElement.js";
12
+ export * from "./Yield.js";
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/elements/index.ts"],"names":[],"mappings":"AAeA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/elements/index.ts"],"names":[],"mappings":"AAeA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Static compiler text has no lifecycle state; retain its existing Text node. */
2
+ export declare function reuseStaticText(previous: readonly any[], next: any[]): any[];
3
+ /** Place an element or marker range without touching nodes already in order. */
4
+ export declare function placeChild(parent: Node, child: any, before: Node | null): Node | null;
5
+ /** Reconcile Saola children by wrapper identity; factories refresh their config. */
6
+ export declare function reconcileChildren(parent: Node, previous: readonly any[], next: readonly any[], anchor?: Node | null, refresh?: (child: any) => boolean): void;
7
+ //# sourceMappingURL=reconcileChildren.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcileChildren.d.ts","sourceRoot":"","sources":["../../../../src/core/elements/reconcileChildren.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAW5E;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAsBrF;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAC5D,MAAM,GAAE,IAAI,GAAG,IAAW,EAAE,OAAO,GAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAoB,GAC1E,IAAI,CAwBN"}
@@ -0,0 +1,74 @@
1
+ import { TextElement } from './TextElement.js';
2
+ /** Static compiler text has no lifecycle state; retain its existing Text node. */
3
+ export function reuseStaticText(previous, next) {
4
+ return next.map((child, index) => {
5
+ const old = previous[index];
6
+ if (old instanceof TextElement && child instanceof TextElement && old !== child
7
+ && old.isStatic && child.isStatic && !old.__destroyed__) {
8
+ old.replaceStaticText(child.text);
9
+ child.destroy();
10
+ return old;
11
+ }
12
+ return child;
13
+ });
14
+ }
15
+ /** Place an element or marker range without touching nodes already in order. */
16
+ export function placeChild(parent, child, before) {
17
+ const first = child instanceof Node ? child : child.element ?? child.openTag;
18
+ const last = child instanceof Node ? child : child.element ?? child.closeTag;
19
+ if (!first || !last)
20
+ return before;
21
+ if (first.parentNode === parent && last.parentNode === parent && last.nextSibling === before)
22
+ return first;
23
+ const nodes = [first];
24
+ if (first !== last) {
25
+ let current = first.nextSibling;
26
+ while (current && current !== last) {
27
+ nodes.push(current);
28
+ current = current.nextSibling;
29
+ }
30
+ nodes.push(last);
31
+ }
32
+ for (const node of nodes) {
33
+ // State-preserving native moves where available; detached/new nodes use
34
+ // normal insertion. Older browsers use the focus restoration below.
35
+ const moveBefore = parent.moveBefore;
36
+ if (typeof moveBefore === 'function' && node.isConnected && parent.isConnected)
37
+ moveBefore.call(parent, node, before);
38
+ else
39
+ parent.insertBefore(node, before);
40
+ }
41
+ return first;
42
+ }
43
+ /** Reconcile Saola children by wrapper identity; factories refresh their config. */
44
+ export function reconcileChildren(parent, previous, next, anchor = null, refresh = () => true) {
45
+ const focused = parent.ownerDocument?.activeElement;
46
+ const containsFocus = focused && parent.contains(focused);
47
+ const selection = containsFocus && 'selectionStart' in focused
48
+ ? { start: focused.selectionStart, end: focused.selectionEnd,
49
+ direction: focused.selectionDirection } : null;
50
+ const nextSet = new Set(next);
51
+ const oldSet = new Set(previous);
52
+ for (const child of previous) {
53
+ if (nextSet.has(child))
54
+ continue;
55
+ if (typeof child.destroy === 'function')
56
+ child.destroy();
57
+ else if (child instanceof Node)
58
+ child.parentNode?.removeChild(child);
59
+ }
60
+ let before = anchor;
61
+ for (let i = next.length - 1; i >= 0; i--)
62
+ before = placeChild(parent, next[i], before);
63
+ for (const child of next) {
64
+ if (!oldSet.has(child) || refresh(child))
65
+ child.render?.();
66
+ }
67
+ if (containsFocus && focused.isConnected && parent.ownerDocument?.activeElement !== focused) {
68
+ focused.focus({ preventScroll: true });
69
+ if (selection?.start != null && selection.end != null) {
70
+ focused.setSelectionRange(selection.start, selection.end, selection.direction ?? undefined);
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=reconcileChildren.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcileChildren.js","sourceRoot":"","sources":["../../../../src/core/elements/reconcileChildren.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../../../src/core/helpers/ApiClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,qBAAa,SAAU,YAAW,kBAAkB;IAChD,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,SAAS,CAAe;;IAQhC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAkB3B,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAWvC;;;OAGG;IACH,OAAO,CAAC,aAAa;IAOrB;;;OAGG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAU5C;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;IAerC;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAenC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAShC;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAO7C;;OAEG;IACH,cAAc,IAAI,WAAW;CAGhC"}
@@ -30,7 +30,16 @@ export class ApiClient {
30
30
  }
31
31
  }
32
32
  init(config) {
33
- // Placeholder for any future initialization logic
33
+ if (typeof config.baseUrl === 'string')
34
+ this.http.setBaseUrl(config.baseUrl);
35
+ if (typeof config.timeout === 'number')
36
+ this.http.setTimeout(config.timeout);
37
+ for (const [name, value] of Object.entries(config.headers || {})) {
38
+ this.http.setHeader(name, String(value));
39
+ }
40
+ if (config.endpoints && typeof config.endpoints === 'object') {
41
+ this.endpoints = { ...this.endpoints, ...config.endpoints };
42
+ }
34
43
  }
35
44
  /**
36
45
  * Load API endpoints from config
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiClient.js","sourceRoot":"","sources":["../../../../src/core/helpers/ApiClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AppFactory } from "../contracts/ApplicationInterface.js";
2
+ export declare const app: AppFactory;
3
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../../src/core/helpers/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAc,MAAM,sCAAsC,CAAC;AAkE9E,eAAO,MAAM,GAAG,EAAiB,UAAU,CAAC"}