@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
package/README.md CHANGED
@@ -1,221 +1,78 @@
1
- # Saola Client
1
+ # @saolabs/client
2
2
 
3
- > Modern TypeScript Framework for Laravel - Reactive SPAs with TypeScript-first approach
3
+ Runtime TypeScript phía trình duyệt của Saola: hydration HTML do Laravel render,
4
+ state, component, điều hướng SPA và vòng đời tài nguyên.
4
5
 
5
- [![npm version](https://badge.fury.io/js/saola-client.svg)](https://badge.fury.io/js/saola-client)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
-
8
- Saola Client is the TypeScript runtime library for building reactive single-page applications that integrate seamlessly with Laravel backends.
9
-
10
- ## Features
11
-
12
- - ⚡ **TypeScript First**: Full TypeScript support with excellent type safety
13
- - 🎨 **Reactive Views**: Built-in reactive view system with automatic state management
14
- - 📦 **Modular Architecture**: Component-based architecture for scalable applications
15
- - 🔄 **Hot Module Replacement**: Development watch mode with automatic compilation
16
- - 🚀 **Laravel Integration**: Seamless integration with Laravel backends
17
- - 📱 **SSR Support**: Server-side rendering capabilities
18
- - 🎯 **Lightweight**: Minimal bundle size with tree-shaking support
19
- - 🔧 **Developer Friendly**: Excellent DX with CLI tools and build utilities
20
-
21
- ## Installation
6
+ ## Bắt đầu
22
7
 
23
8
  ```bash
24
- npm install saola-client
25
- # or
26
- yarn add saola-client
27
- # or
28
- pnpm add saola-client
29
- ```
30
-
31
- ## Quick Start
32
-
33
- ### Basic Setup
34
-
35
- ```typescript
36
- import { Application, app, appContainer } from 'saola-client';
37
- import { ViewController } from 'saola-client';
38
-
39
- // Initialize your app
40
- const app = new Application({
41
- el: '#app',
42
- debug: true
43
- });
44
-
45
- await app.init();
46
- ```
47
-
48
- ### Creating a View
49
-
50
- ```typescript
51
- import { ViewBase, ViewController } from 'saola-client';
52
-
53
- export class HomeView extends ViewBase {
54
- constructor() {
55
- super('home', 'home-template');
56
- }
57
-
58
- onMount() {
59
- // Initialize view logic
60
- }
61
- }
62
-
63
- export class HomeController extends ViewController {
64
- view = HomeView;
65
-
66
- onLoad() {
67
- // Handle view data loading
68
- }
69
- }
70
- ```
71
-
72
- ### Routing
73
-
74
- ```typescript
75
- import { Router } from 'saola-client';
76
-
77
- const router = new Router();
78
-
79
- router.register('home', HomeController);
80
- router.register('about', AboutController);
81
-
82
- router.navigate('home');
83
- ```
84
-
85
- ### State Management
86
-
87
- ```typescript
88
- import { ViewState, StateManager } from 'saola-client';
89
-
90
- const state = new ViewState({
91
- count: 0,
92
- user: null
93
- });
94
-
95
- state.count = 5; // Trigger reactive updates
96
- state.subscribe(newState => {
97
- console.log('State updated:', newState);
98
- });
9
+ npm install @saolabs/client
10
+ npm install --save-dev @saolabs/builder typescript
11
+ composer require saola/core saola/compiler
99
12
  ```
100
13
 
101
- ## API Reference
14
+ Viết giao diện bằng `.sao`, để compiler sinh class View và registry. Bắt đầu với
15
+ [hướng dẫn component](../saola/docs/SAO_FILE.md) trong workspace hệ sinh thái.
16
+ Compiler PHP sinh Blade SSR; client nhận DOM và xử lý tương tác trong browser.
102
17
 
103
- ### Core Classes
18
+ ## Module và tương thích
104
19
 
105
- #### Application
20
+ Package phát hành **ESM**. Các entry công khai:
106
21
 
107
- The main application class that manages the lifecycle of your Saola app.
22
+ - `@saolabs/client`: runtime, services và kiểu dữ liệu.
23
+ - `@saolabs/client/plugins`: `createPlugin`, `pluginManager`.
24
+ - `@saolabs/client/testing`: `mount`, `mountView`, `nextFrame` và `Harness`.
108
25
 
109
- ```typescript
110
- import { Application } from 'saola-client';
26
+ ```ts
27
+ import { HttpService } from '@saolabs/client';
28
+ import { createPlugin, pluginManager } from '@saolabs/client/plugins';
111
29
 
112
- const app = new Application({
113
- el: '#app', // Mount element
114
- debug: true, // Enable debug mode
115
- baseUrl: '/app' // Base URL for routing
116
- });
30
+ const http = new HttpService();
31
+ pluginManager.register(createPlugin('example', () => {
32
+ http.setTimeout(5000);
33
+ })).install('example');
117
34
  ```
118
35
 
119
- #### View System
36
+ Các công cụ CommonJS dùng `await import('@saolabs/client')`; package không cam kết
37
+ `require()` đồng bộ. Runtime cần DOM (browser hoặc jsdom trong test), không phải
38
+ renderer SSR chạy trong Node. Dùng PHP compiler cho SSR Laravel.
39
+ Các import tương đối có đuôi `.js`; build và declaration được kiểm với NodeNext.
120
40
 
121
- ```typescript
122
- import { View, ViewController, ViewManager } from 'saola-client';
41
+ ## Test component đã compile
123
42
 
124
- // Create a view
125
- class MyView extends View {
126
- template = '<div>Hello World</div>';
43
+ ```ts
44
+ import { mount, nextFrame } from '@saolabs/client/testing';
45
+ import Counter from './compiled/counter.js';
127
46
 
128
- onMount() {
129
- console.log('View mounted');
130
- }
131
- }
132
-
133
- // Create a controller
134
- class MyController extends ViewController {
135
- view = MyView;
136
-
137
- onLoad() {
138
- // Load data
139
- }
140
- }
141
- ```
142
-
143
- #### Router
144
-
145
- ```typescript
146
- import { Router } from 'saola-client';
147
-
148
- const router = new Router();
149
-
150
- // Register routes
151
- router.register('home', HomeController);
152
- router.register('user/:id', UserController);
153
-
154
- // Navigate
155
- router.navigate('home');
156
- router.navigate('user/123');
157
- ```
158
-
159
- ## Plugins
160
-
161
- Extend Saola Client with plugins:
162
-
163
- ```typescript
164
- import { PluginManager } from 'saola-client/plugins';
165
-
166
- const pluginManager = new PluginManager();
167
-
168
- // Register and install plugins
169
- pluginManager
170
- .register(myPlugin)
171
- .install('myPlugin', { option: 'value' });
47
+ const counter = mount(Counter, {initial: 3});
48
+ counter.container.querySelector('button')?.click();
49
+ await nextFrame();
50
+ console.log(counter.text());
51
+ counter.destroy();
172
52
  ```
173
53
 
174
- ## Development
54
+ Chạy trong môi trường DOM. Với theme nạp rời, externalize `@saolabs/client` để
55
+ app và theme dùng cùng một runtime; xem [bootstrap](docs/BOOTSTRAP_PROVIDER_GUIDE.md).
175
56
 
176
- ### Building
57
+ ## Phát triển và kiểm chứng
177
58
 
178
59
  ```bash
179
- npm run build # Build for production
180
- npm run dev # Watch mode for development
181
- npm run clean # Clean build artifacts
60
+ npm run build # ESM JS và declarations
61
+ npm run typecheck # Kiểm source, không emit
62
+ npm test # Runtime + compile-to-mount contract tests
63
+ npm run check-exports # Pack thật; kiểm 3 entry và types trong consumer tạm
182
64
  ```
183
65
 
184
- ### Testing
185
-
186
- ```bash
187
- npm test
188
- ```
189
-
190
- ## Integration with Saola Compiler
191
-
192
- Saola Client works seamlessly with [Saola Compiler](https://github.com/saolabs/saola-compiler) to compile `.one` files into Blade templates and JavaScript.
193
-
194
- ```bash
195
- # Install both packages
196
- npm install saola-client saola-compiler
197
-
198
- # Use in your Laravel project
199
- # The compiler will generate files that use saola-client
200
- ```
201
-
202
- ## Contributing
203
-
204
- 1. Fork the repository
205
- 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
206
- 3. Commit your changes (`git commit -m 'Add some amazing feature'`)
207
- 4. Push to the branch (`git push origin feature/amazing-feature`)
208
- 5. Open a Pull Request
209
-
210
- ## License
211
-
212
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
213
-
214
- ## Related Projects
66
+ `check-exports` không publish. Nó kiểm native ESM, dynamic import từ CommonJS,
67
+ mount view qua package đã đóng và TypeScript NodeNext, không dùng alias source.
68
+ Bộ test compile fixture cần sibling `builder/`, `compiler/`, `saola/` trong
69
+ workspace hệ sinh thái. Thiếu builder là lỗi kiểm tra, không tự bỏ qua test.
215
70
 
216
- - [Saola Compiler](https://github.com/saolabs/saola-compiler) - Template compiler for .one files
217
- - [Saola Language Support](https://github.com/saolabs/saola-language-support) - VS Code extension for .one files
71
+ ## Tài liệu
218
72
 
219
- ---
73
+ - [Runtime API](docs/RUNTIME_API_SPEC.md)
74
+ - [Compiler contract](docs/COMPILER_CONTRACT.md)
75
+ - [Testing](docs/TESTING.md)
76
+ - [Devtools](docs/DEVTOOLS.md)
220
77
 
221
- **Built with ❤️ by Saola Labs**
78
+ MIT.
package/dist/index.d.ts CHANGED
@@ -3,9 +3,14 @@
3
3
  * TypeScript Core with Optimizations
4
4
  */
5
5
  export { Application } from './src/core/app/Application.js';
6
- export { app } from './src/core/hellpers/app.js';
6
+ export { app } from './src/core/helpers/app.js';
7
7
  export { default as App } from './src/core/bootstrap/app.js';
8
- export { MarkerService } from './src/core/services/MarkerService.js';
8
+ export { defineBundle, loadBundles, mergeBundles, bootBundles } from './src/core/bootstrap/bundle.js';
9
+ export type { SaolaBundle, MergedBundles, ViewFactory } from './src/core/contracts/BundleInterface.js';
10
+ export { ServiceProvider } from './src/core/bootstrap/providers/ServiceProvider.js';
11
+ export { PROVIDER_NAMES, resolveProviderOrder } from './src/core/bootstrap/providers/provider-order.js';
12
+ export type { NamedServiceProvider, ProviderName } from './src/core/bootstrap/providers/provider-order.js';
13
+ export type { ServiceProviderInterface } from './src/core/contracts/ServiceProviderInterface.js';
9
14
  export { EventService } from './src/core/services/EventService.js';
10
15
  export { HttpService } from './src/core/services/HttpService.js';
11
16
  export { StoreService } from './src/core/services/StoreService.js';
@@ -14,7 +19,16 @@ export { LoggerService } from './src/core/services/LoggerService.js';
14
19
  export { HelperService, CollectionProxy } from './src/core/services/HelperService.js';
15
20
  export { BlockManagerService, BlockManager } from './src/core/services/BlockManager.js';
16
21
  export { MarkerRegistry, MarkerRegistryService } from './src/core/services/MarkerRegistry.js';
22
+ export { PageCache, PageCacheService, detachWrapperDOM } from './src/core/services/PageCache.js';
23
+ export type { PageCacheEntry, PageCacheSetOptions } from './src/core/services/PageCache.js';
24
+ export { SectionManager, SectionManagerService } from './src/core/services/SectionManager.js';
25
+ export { HeadService } from './src/core/services/HeadService.js';
26
+ export { Devtools, devtools, inspector } from './src/core/devtools/index.js';
27
+ export type { DevtoolsEvent, DevtoolsEventType, DevtoolsViewNode } from './src/core/devtools/index.js';
17
28
  export { View, ViewController, ViewManager, ViewState, StateManager, LoopContext } from './src/core/view/index.js';
29
+ export type { ViewUserConfig } from './src/core/view/View.js';
30
+ export { ResourceScope } from './src/core/view/ResourceScope.js';
31
+ export type { WatchCallback, WatchContext, WatchOptions, Cleanup } from './src/core/view/ResourceScope.js';
18
32
  export { Router, ActiveRoute, useRoute, useParams, useQuery } from './src/core/routers/Router.js';
19
33
  export { Reactive } from './src/core/elements/Reactive.js';
20
34
  export { Block } from './src/core/elements/Block.js';
@@ -27,7 +41,7 @@ export { Output } from './src/core/elements/Output.js';
27
41
  export { Wrapper } from './src/core/elements/Wrapper.js';
28
42
  export { ElementManager } from './src/core/elements/ElementManager.js';
29
43
  export { Dom, DomService } from './src/core/services/DomService.js';
30
- export { ApiClient } from './src/core/hellpers/ApiClient.js';
44
+ export { ApiClient } from './src/core/helpers/ApiClient.js';
31
45
  export type { ApplicationInterface } from './src/core/contracts/ApplicationInterface.js';
32
46
  export type { HelperInterface, CollectionProxyInterface } from './src/core/contracts/HelperInterface.js';
33
47
  export type { EventServiceInterface } from './src/core/contracts/EventServiceInterface.js';
@@ -37,10 +51,11 @@ export type { StorageServiceInterface } from './src/core/contracts/StorageServic
37
51
  export type { LoggerServiceInterface, LoggerConfig, LogLevel } from './src/core/contracts/LoggerServiceInterface.js';
38
52
  export type { ViewInterface } from './src/core/contracts/ViewInterface.js';
39
53
  export type { ViewControllerInterface } from './src/core/contracts/ViewControllerInterface.js';
54
+ export type { ViewConfigThis, ViewRuntimeConfig } from './src/core/contracts/ViewControllerInterface.js';
40
55
  export type { ViewManagerInterface } from './src/core/contracts/ViewManagerInterface.js';
41
56
  export type { ReactiveInterface } from './src/core/contracts/ReactiveInterface.js';
42
57
  export type { RouterInterface } from './src/core/contracts/RouterInterface.js';
43
58
  export type { RouteDefinition, Route, RouteMatch, RouterConfig } from './src/core/routers/Router.js';
44
- export type { MarkerRecord, MarkerTagName } from './src/core/contracts/MarkerInterface.js';
45
- export type { APIEndpoints } from './src/core/hellpers/ApiClient.js';
59
+ export type { MarkerTagName } from './src/core/contracts/MarkerInterface.js';
60
+ export type { APIEndpoints } from './src/core/helpers/ApiClient.js';
46
61
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4,10 +4,15 @@
4
4
  */
5
5
  // App
6
6
  export { Application } from './src/core/app/Application.js';
7
- export { app } from './src/core/hellpers/app.js';
7
+ export { app } from './src/core/helpers/app.js';
8
8
  export { default as App } from './src/core/bootstrap/app.js';
9
+ // Bundle nạp rời (theme / gói mở rộng)
10
+ export { defineBundle, loadBundles, mergeBundles, bootBundles } from './src/core/bootstrap/bundle.js';
11
+ // Service Provider — lớp base + hằng tên, để app và theme viết provider của mình.
12
+ // KHÔNG export thì cả tính năng "người dùng thêm provider" chỉ dùng được nội bộ.
13
+ export { ServiceProvider } from './src/core/bootstrap/providers/ServiceProvider.js';
14
+ export { PROVIDER_NAMES, resolveProviderOrder } from './src/core/bootstrap/providers/provider-order.js';
9
15
  // Services
10
- export { MarkerService } from './src/core/services/MarkerService.js';
11
16
  export { EventService } from './src/core/services/EventService.js';
12
17
  export { HttpService } from './src/core/services/HttpService.js';
13
18
  export { StoreService } from './src/core/services/StoreService.js';
@@ -16,8 +21,14 @@ export { LoggerService } from './src/core/services/LoggerService.js';
16
21
  export { HelperService, CollectionProxy } from './src/core/services/HelperService.js';
17
22
  export { BlockManagerService, BlockManager } from './src/core/services/BlockManager.js';
18
23
  export { MarkerRegistry, MarkerRegistryService } from './src/core/services/MarkerRegistry.js';
24
+ export { PageCache, PageCacheService, detachWrapperDOM } from './src/core/services/PageCache.js';
25
+ export { SectionManager, SectionManagerService } from './src/core/services/SectionManager.js';
26
+ export { HeadService } from './src/core/services/HeadService.js';
27
+ // DevTools — tắt mặc định, xem docs/DEVTOOLS.md
28
+ export { Devtools, devtools, inspector } from './src/core/devtools/index.js';
19
29
  // View System
20
30
  export { View, ViewController, ViewManager, ViewState, StateManager, LoopContext } from './src/core/view/index.js';
31
+ export { ResourceScope } from './src/core/view/ResourceScope.js';
21
32
  // Router
22
33
  export { Router, ActiveRoute, useRoute, useParams, useQuery } from './src/core/routers/Router.js';
23
34
  // Elements
@@ -34,5 +45,5 @@ export { ElementManager } from './src/core/elements/ElementManager.js';
34
45
  // DOM
35
46
  export { Dom, DomService } from './src/core/services/DomService.js';
36
47
  // Helpers
37
- export { ApiClient } from './src/core/hellpers/ApiClient.js';
48
+ export { ApiClient } from './src/core/helpers/ApiClient.js';
38
49
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM;AACN,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAE7D,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9F,cAAc;AACd,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEnH,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAElG,WAAW;AACX,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAGvE,MAAM;AACN,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAEpE,UAAU;AACV,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM;AACN,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAE7D,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAGtG,kFAAkF;AAClF,iFAAiF;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AAIxG,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEjG,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG7E,cAAc;AACd,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEnH,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGjE,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAElG,WAAW;AACX,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAGvE,MAAM;AACN,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAEpE,UAAU;AACV,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/plugins.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
- * OneView Plugins
3
- * Extension system for OneView framework
2
+ * SaoView Plugins
3
+ * Extension system for SaoView framework
4
4
  */
5
5
  export interface PluginOptions {
6
6
  [key: string]: unknown;
package/dist/plugins.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
- * OneView Plugins
3
- * Extension system for OneView framework
2
+ * SaoView Plugins
3
+ * Extension system for SaoView framework
4
4
  */
5
5
  class PluginManager {
6
6
  constructor() {
@@ -26,19 +26,20 @@
26
26
  * app.boot();
27
27
  * const router = app.make('router');
28
28
  */
29
- import type { ApplicationInterface, ServiceKey, ServiceFactory, ServiceBinding } from '../contracts/ApplicationInterface';
30
- import type { ServiceProviderInterface } from '../contracts/ServiceProviderInterface';
31
- import type { ViewManagerInterface, RouterInterface } from '../contracts/utils';
32
- import type { HelperInterface } from '../contracts/HelperInterface';
33
- import type { EventServiceInterface } from '../contracts/EventServiceInterface';
34
- import type { HttpServiceInterface } from '../contracts/HttpServiceInterface';
35
- import type { StoreServiceInterface } from '../contracts/StoreServiceInterface';
36
- import type { StorageServiceInterface } from '../contracts/StorageServiceInterface';
37
- import type { LoggerServiceInterface } from '../contracts/LoggerServiceInterface';
38
- import { APIClientInterface } from '../contracts/ApiInterface';
39
- import { OneObjectType } from '../types/utils';
29
+ import type { ApplicationInterface, ServiceKey, ServiceFactory, ServiceBinding } from '../contracts/ApplicationInterface.js';
30
+ import type { ServiceProviderInterface } from '../contracts/ServiceProviderInterface.js';
31
+ import type { ViewManagerInterface, RouterInterface } from '../contracts/utils.js';
32
+ import type { HelperInterface } from '../contracts/HelperInterface.js';
33
+ import type { EventServiceInterface } from '../contracts/EventServiceInterface.js';
34
+ import type { HttpServiceInterface } from '../contracts/HttpServiceInterface.js';
35
+ import type { StoreServiceInterface } from '../contracts/StoreServiceInterface.js';
36
+ import type { StorageServiceInterface } from '../contracts/StorageServiceInterface.js';
37
+ import type { LoggerServiceInterface } from '../contracts/LoggerServiceInterface.js';
38
+ import type { HeadServiceInterface } from '../contracts/HeadServiceInterface.js';
39
+ import { APIClientInterface } from '../contracts/ApiInterface.js';
40
+ import { SaoObjectType } from '../types/utils.js';
40
41
  export declare class Application implements ApplicationInterface {
41
- readonly oneType: OneObjectType;
42
+ readonly saoType: SaoObjectType;
42
43
  isInitialized: boolean;
43
44
  isStarted: boolean;
44
45
  View: ViewManagerInterface;
@@ -50,6 +51,7 @@ export declare class Application implements ApplicationInterface {
50
51
  Store: StoreServiceInterface;
51
52
  Storage: StorageServiceInterface;
52
53
  Logger: LoggerServiceInterface;
54
+ Head: HeadServiceInterface;
53
55
  /** Factory bindings — mỗi lần make() gọi factory tạo instance mới */
54
56
  private bindings;
55
57
  /** Singleton instances — tạo một lần, reuse */
@@ -61,7 +63,7 @@ export declare class Application implements ApplicationInterface {
61
63
  /** Đã boot chưa */
62
64
  private booted;
63
65
  private ownProperties;
64
- __store: Map<string, {
66
+ __store: Map<any, {
65
67
  isOverridable: boolean;
66
68
  value: any;
67
69
  }>;
@@ -152,8 +154,16 @@ export declare class Application implements ApplicationInterface {
152
154
  destroy(): void;
153
155
  getBindings(): Map<ServiceKey, ServiceFactory<any>>;
154
156
  getSingletons(): Map<ServiceKey, any>;
155
- set<T = any>(name: string, value: T, isOne?: boolean): void;
156
- get<T = any>(name: string): T;
157
+ set<T = any>(name: any, value: T, isOne?: boolean): void;
158
+ get<T = any>(name: any): T;
159
+ /**
160
+ * Dữ liệu package PHP chia sẻ cho client theo từng request (`Saola::share()`
161
+ * → `APP_CONFIGS.shared` → `App.init({ shared })`). Helper JS của package đọc
162
+ * ở đây thay vì tự đọc `window`, để test truyền được qua config.
163
+ *
164
+ * @example App.shared('permission', { routes: [] }).routes
165
+ */
166
+ shared<T = any>(key?: string, fallback?: T): T;
157
167
  setMethod(name: string, method: Function, isOne?: boolean): void;
158
168
  }
159
169
  //# sourceMappingURL=Application.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../../src/core/app/Application.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../../src/core/app/Application.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC7H,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAI3D,qBAAa,WAAY,YAAW,oBAAoB;IACpD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAuB;IAE9C,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE,kBAAkB,CAAC;IACxB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,uBAAuB,CAAC;IACjC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAEnC,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAA8C;IAE9D,+CAA+C;IAC/C,OAAO,CAAC,UAAU,CAA8B;IAEhD,uCAAuC;IACvC,OAAO,CAAC,OAAO,CAA0C;IAEzD,mCAAmC;IACnC,OAAO,CAAC,SAAS,CAAkC;IAEnD,mBAAmB;IACnB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,aAAa,CAyBnB;IAEF,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAa;IAEtE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;;IAMnB;;;;;;;OAOG;IACH,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAUhE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAM3D;;;;;;;;OAQG;IACH,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAgCrE;;;;;;OAMG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAmB/C;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAOpD;;;;;OAKG;IACH,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;IAIhD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;IAuCnD,uCAAuC;IACvC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAM7B,sBAAsB;IACtB,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAM/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAkBlD;;;;OAIG;IACH,IAAI,IAAI,IAAI;IAYZ,mBAAmB;IACnB,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAID,2EAA2E;IAC3E,KAAK,IAAI,IAAI;IASb,oCAAoC;IACpC,OAAO,IAAI,IAAI;IAMf,WAAW,IAAI,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAInD,aAAa,IAAI,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;IAKrC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAE,OAAe,GAAG,IAAI;IA0B/D,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IAgB1B;;;;;;OAMG;IACH,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;IAM9C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAE,OAAe,GAAG,IAAI;CA2B1E"}
@@ -26,11 +26,11 @@
26
26
  * app.boot();
27
27
  * const router = app.make('router');
28
28
  */
29
- import { OOTEnum } from '../types/utils';
29
+ import { OOTEnum } from '../types/utils.js';
30
30
  // ─── Application ────────────────────────────────────────────────
31
31
  export class Application {
32
32
  constructor() {
33
- this.oneType = OOTEnum.APPLICATION;
33
+ this.saoType = OOTEnum.APPLICATION;
34
34
  /** Factory bindings — mỗi lần make() gọi factory tạo instance mới */
35
35
  this.bindings = new Map();
36
36
  /** Singleton instances — tạo một lần, reuse */
@@ -64,6 +64,7 @@ export class Application {
64
64
  'destroy',
65
65
  'getBindings',
66
66
  'getSingletons',
67
+ 'shared',
67
68
  '__store',
68
69
  ]; // Để track dynamic properties nếu cần
69
70
  this.__store = new Map(); // Store cho dynamic properties nếu cần
@@ -136,6 +137,18 @@ export class Application {
136
137
  */
137
138
  instance(key, value) {
138
139
  this.singletons.set(key, value);
140
+ if (typeof key === 'string' && !this.ownProperties.includes(key)) {
141
+ this.__store.set(key, { value, isOverridable: true });
142
+ Object.defineProperty(this, key, {
143
+ get: () => this.__store.get(key)?.value,
144
+ set: (newValue) => {
145
+ this.__store.set(key, { value: newValue, isOverridable: true });
146
+ this.singletons.set(key, newValue);
147
+ },
148
+ configurable: true,
149
+ enumerable: false,
150
+ });
151
+ }
139
152
  return this;
140
153
  }
141
154
  // ─── Alias ──────────────────────────────────────────────────
@@ -231,6 +244,13 @@ export class Application {
231
244
  provider.initApplication();
232
245
  }
233
246
  provider.register();
247
+ // Đăng ký SAU khi app đã boot — plugin nạp muộn qua App.push(), hoặc
248
+ // provider của theme cắm vào giữa phiên. boot() vòng lặp chính đã chạy
249
+ // xong và có cờ chặn, nên nếu không gọi ở đây thì provider chỉ chạy nửa
250
+ // vòng đời: register() có, boot() không, và KHÔNG có lỗi nào phát ra.
251
+ if (this.booted && typeof provider.boot === 'function') {
252
+ provider.boot();
253
+ }
234
254
  return this;
235
255
  }
236
256
  /**
@@ -274,29 +294,33 @@ export class Application {
274
294
  return this.singletons;
275
295
  }
276
296
  set(name, value, isOne = false) {
277
- if (this.ownProperties.includes(name)) {
278
- return; // Không cho ghi đè lên thuộc tính có sẵn
279
- }
280
297
  if (this.__store.has(name) && this.__store.get(name)?.isOverridable === false) {
281
298
  return; // Không cho ghi đè lên thuộc tính không thể override
282
299
  }
300
+ const isString = typeof name === 'string';
301
+ if (isString && this.ownProperties.includes(name)) {
302
+ return; // Không cho ghi đè lên thuộc tính có sẵn
303
+ }
283
304
  this.__store.set(name, { value, isOverridable: !isOne });
284
305
  this.singletons.set(name, value); // Sync → DI container
285
- Object.defineProperty(this, name, {
286
- get: () => this.__store.get(name)?.value,
287
- set: (newValue) => {
288
- if (this.__store.has(name) && this.__store.get(name)?.isOverridable === false) {
289
- return; // Không cho ghi đè nếu isOverridable là false
290
- }
291
- this.__store.set(name, { value: newValue, isOverridable: !isOne });
292
- this.singletons.set(name, newValue); // Sync → DI container
293
- },
294
- configurable: isOne ? false : true,
295
- enumerable: false,
296
- });
306
+ if (isString) {
307
+ Object.defineProperty(this, name, {
308
+ get: () => this.__store.get(name)?.value,
309
+ set: (newValue) => {
310
+ if (this.__store.has(name) && this.__store.get(name)?.isOverridable === false) {
311
+ return; // Không cho ghi đè nếu isOverridable là false
312
+ }
313
+ this.__store.set(name, { value: newValue, isOverridable: !isOne });
314
+ this.singletons.set(name, newValue); // Sync → DI container
315
+ },
316
+ configurable: isOne ? false : true,
317
+ enumerable: false,
318
+ });
319
+ }
297
320
  }
298
321
  get(name) {
299
- if (this.ownProperties.includes(name)) {
322
+ const isString = typeof name === 'string';
323
+ if (isString && this.ownProperties.includes(name)) {
300
324
  return this[name]; // Trả về thuộc tính có sẵn
301
325
  }
302
326
  // Check __store first (registered via set())
@@ -309,6 +333,19 @@ export class Application {
309
333
  }
310
334
  return undefined;
311
335
  }
336
+ /**
337
+ * Dữ liệu package PHP chia sẻ cho client theo từng request (`Saola::share()`
338
+ * → `APP_CONFIGS.shared` → `App.init({ shared })`). Helper JS của package đọc
339
+ * ở đây thay vì tự đọc `window`, để test truyền được qua config.
340
+ *
341
+ * @example App.shared('permission', { routes: [] }).routes
342
+ */
343
+ shared(key, fallback) {
344
+ const all = (this.__store.get('SharedData')?.value ?? {});
345
+ if (key === undefined)
346
+ return all;
347
+ return (Object.prototype.hasOwnProperty.call(all, key) ? all[key] : fallback);
348
+ }
312
349
  setMethod(name, method, isOne = false) {
313
350
  if (this.ownProperties.includes(name)) {
314
351
  return; // Không cho ghi đè lên thuộc tính có sẵn