@_tc/template-core 0.2.11 → 0.3.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 (403) hide show
  1. package/.skills/tc-component-usage-skills/SKILL.md +7 -9
  2. package/.skills/tc-component-usage-skills/reference/component-api.md +2 -2
  3. package/.skills/tc-component-usage-skills/reference/examples.md +9 -9
  4. package/.skills/tc-component-usage-skills/reference/patterns.md +5 -5
  5. package/.skills/tc-component-usage-skills/reference/template-core-frontend.md +1 -1
  6. package/.skills/tc-generator/SKILL.md +30 -14
  7. package/.skills/tc-generator/reference/example.md +4 -4
  8. package/.skills/tc-generator/reference/model-schema.md +9 -5
  9. package/.skills/tc-generator/reference/runtime-extensions.md +9 -7
  10. package/AGENT_README.md +52 -33
  11. package/CHANGE.md +91 -0
  12. package/README.md +147 -46
  13. package/cjs/app/controller/ssr.js +1 -0
  14. package/cjs/app/controller/view.js +1 -1
  15. package/cjs/app/html/shell.js +36 -0
  16. package/cjs/app/middleware.js +1 -1
  17. package/cjs/app/router/ssr.js +1 -0
  18. package/cjs/app/router/view.js +1 -1
  19. package/cjs/app/ssr/html.js +17 -0
  20. package/cjs/app/ssr/manifest.js +2 -0
  21. package/cjs/app/view/entry.tpl +2 -37
  22. package/cjs/bundler/buildBE.js +1 -1
  23. package/cjs/bundler/buildSSR.js +1 -0
  24. package/cjs/bundler/entryCollect.js +1 -0
  25. package/cjs/bundler/feSharedConfig.js +1 -0
  26. package/cjs/bundler/index.js +1 -1
  27. package/cjs/bundler/ssrClientManifest.js +1 -0
  28. package/cjs/bundler/ssrEntries.js +1 -0
  29. package/cjs/bundler/utils.js +3 -3
  30. package/cjs/packages/common/i18n/index.js +1 -1
  31. package/cjs/packages/common/index.js +1 -1
  32. package/cjs/packages/common/ssr/hydration.js +1 -0
  33. package/cjs/packages/common/ssr/index.js +1 -0
  34. package/cjs/packages/core/index.js +1 -1
  35. package/cjs/packages/core/loader/controller.js +1 -1
  36. package/cjs/packages/core/loader/extend.js +1 -1
  37. package/cjs/packages/core/loader/merge.js +1 -0
  38. package/cjs/packages/core/loader/middleware.js +1 -1
  39. package/cjs/packages/core/loader/model.js +1 -1
  40. package/cjs/packages/core/loader/router-schema.js +1 -1
  41. package/cjs/packages/core/loader/router.js +1 -1
  42. package/cjs/packages/core/loader/service.js +1 -1
  43. package/cjs/packages/core/paths.js +1 -1
  44. package/cjs/scripts/vite-build/build.js +3 -3
  45. package/cjs/scripts/vite-build/collect.js +1 -1
  46. package/cjs/scripts/vite-build/dts.js +1 -1
  47. package/cjs/scripts/vite-build/normalize.js +1 -1
  48. package/cjs/ssrSharedData/outputPaths.js +1 -0
  49. package/esm/app/controller/ssr.js +215 -0
  50. package/esm/app/controller/view.js +26 -25
  51. package/esm/app/html/shell.js +69 -0
  52. package/esm/app/middleware.js +18 -9
  53. package/esm/app/router/ssr.js +8 -0
  54. package/esm/app/router/view.js +5 -4
  55. package/esm/app/ssr/html.js +90 -0
  56. package/esm/app/ssr/manifest.js +47 -0
  57. package/esm/app/view/entry.tpl +2 -37
  58. package/esm/bundler/buildBE.js +1 -1
  59. package/esm/bundler/buildSSR.js +126 -0
  60. package/esm/bundler/entryCollect.js +45 -0
  61. package/esm/bundler/feSharedConfig.js +143 -0
  62. package/esm/bundler/index.js +4 -2
  63. package/esm/bundler/ssrClientManifest.js +14 -0
  64. package/esm/bundler/ssrEntries.js +13 -0
  65. package/esm/bundler/utils.js +248 -255
  66. package/esm/packages/common/i18n/index.js +5 -1
  67. package/esm/packages/common/index.js +4 -2
  68. package/esm/packages/common/ssr/hydration.js +55 -0
  69. package/esm/packages/common/ssr/index.js +20 -0
  70. package/esm/packages/core/index.js +42 -42
  71. package/esm/packages/core/loader/controller.js +11 -9
  72. package/esm/packages/core/loader/extend.js +20 -16
  73. package/esm/packages/core/loader/merge.js +7 -0
  74. package/esm/packages/core/loader/middleware.js +11 -12
  75. package/esm/packages/core/loader/model.js +2 -2
  76. package/esm/packages/core/loader/router-schema.js +22 -15
  77. package/esm/packages/core/loader/router.js +32 -26
  78. package/esm/packages/core/loader/service.js +11 -9
  79. package/esm/packages/core/paths.js +9 -1
  80. package/esm/scripts/vite-build/build.js +88 -83
  81. package/esm/scripts/vite-build/collect.js +31 -27
  82. package/esm/scripts/vite-build/dts.js +1 -1
  83. package/esm/scripts/vite-build/normalize.js +6 -3
  84. package/esm/ssrSharedData/outputPaths.js +33 -0
  85. package/fe/frontend/apps/dash/Dashboard.d.ts +5 -1
  86. package/fe/frontend/apps/dash/Dashboard.js +22 -13
  87. package/fe/frontend/apps/dash/types.d.ts +2 -0
  88. package/fe/frontend/src/api/baseInfo.d.ts +1 -1
  89. package/fe/frontend/src/common/CRUD/CRUD.js +1 -1
  90. package/fe/frontend/src/common/CRUD/index.js +1 -1
  91. package/fe/frontend/src/common/menu.d.ts +1 -1
  92. package/fe/frontend/src/common/menu.js +8 -7
  93. package/fe/frontend/src/common/request.js +1 -1
  94. package/fe/frontend/src/common/schemaForm.d.ts +1 -0
  95. package/fe/frontend/src/common/schemaForm.js +12 -0
  96. package/fe/frontend/src/components/AsyncSelect/AsyncSelect.d.ts +1 -1
  97. package/fe/frontend/src/components/Router/basename.d.ts +3 -0
  98. package/fe/frontend/src/components/Router/basename.js +11 -0
  99. package/fe/frontend/src/components/Router/index.d.ts +1 -1
  100. package/fe/frontend/src/components/Router/index.js +3 -1
  101. package/fe/frontend/src/defaultPages/SchemaPage/components/CallCom/builtIn.d.ts +1 -1
  102. package/fe/frontend/src/defaultPages/SchemaPage/components/SchemaTable/data.d.ts +1 -1
  103. package/fe/frontend/src/defaultPages/SchemaPage/schemaType.d.ts +2 -2
  104. package/fe/frontend/src/defaultPages/SchemaPage/utils/schemaConversion.d.ts +1 -1
  105. package/fe/frontend/src/defaultPages/SidebarSlotPage/SidebarSlotContainer.d.ts +2 -1
  106. package/fe/frontend/src/defaultPages/SidebarSlotPage/SidebarSlotContainer.js +8 -4
  107. package/fe/frontend/src/defaultPages/SidebarSlotPageTmp.js +2 -1
  108. package/fe/frontend/src/exportStore.js +2 -2
  109. package/fe/frontend/src/hooks/useCurrentMenuData.d.ts +1 -1
  110. package/fe/frontend/src/hooks/useCurrentMenuData.js +2 -2
  111. package/fe/frontend/src/hooks/useRouterParams.js +4 -3
  112. package/fe/frontend/src/index.d.ts +1 -0
  113. package/fe/frontend/src/index.js +4 -3
  114. package/fe/frontend/src/main.js +2 -0
  115. package/fe/frontend/src/stores/mode.d.ts +15 -2
  116. package/fe/frontend/src/stores/mode.js +19 -5
  117. package/fe/frontend/src/typing/window.d.ts +2 -0
  118. package/fe/packages/common/LRUCache.js +2 -0
  119. package/fe/packages/common/array/index.js +37 -0
  120. package/fe/packages/common/cache/index.js +2 -0
  121. package/fe/packages/common/guards/index.js +19 -1
  122. package/fe/packages/common/http/index.js +1 -1
  123. package/fe/packages/common/i18n/index.js +8 -4
  124. package/fe/packages/common/i18n/locales.js +1 -1
  125. package/fe/packages/common/i18n/types.d.ts +1 -0
  126. package/fe/packages/common/i18n/types.js +0 -0
  127. package/fe/packages/common/index.d.ts +1 -0
  128. package/fe/packages/common/index.js +17 -0
  129. package/fe/packages/common/log/index.js +146 -0
  130. package/fe/packages/common/number/index.js +11 -0
  131. package/fe/packages/common/object/filterEmpty.js +2 -1
  132. package/fe/packages/common/object/filtereEmpty.js +2 -0
  133. package/fe/packages/common/object/index.js +20 -0
  134. package/fe/packages/common/ssr/hydration.d.ts +23 -0
  135. package/fe/packages/common/ssr/hydration.js +88 -0
  136. package/fe/packages/common/ssr/index.d.ts +8 -0
  137. package/fe/packages/common/ssr/index.js +52 -0
  138. package/fe/packages/common/string/index.js +32 -0
  139. package/fe/packages/common/types/index.js +0 -0
  140. package/fe/packages/react/hooks/index.d.ts +2 -0
  141. package/fe/packages/react/hooks/index.js +3 -1
  142. package/fe/packages/react/hooks/useHydrationData.d.ts +2 -0
  143. package/fe/packages/react/hooks/useHydrationData.js +23 -0
  144. package/fe/packages/react/hooks/useSSR.d.ts +6 -0
  145. package/fe/packages/react/hooks/useSSR.js +46 -0
  146. package/fe/packages/react/ui/components/DataTable/index.js +16 -15
  147. package/fe/packages/react/ui/components/Form/SchemaForm/data.d.ts +3 -2
  148. package/fe/packages/react/ui/components/Form/SchemaForm/data.js +5 -6
  149. package/fe/packages/react/ui/components/Form/SchemaForm/index.d.ts +1 -0
  150. package/fe/packages/react/ui/components/Form/SchemaForm/index.js +2 -2
  151. package/fe/packages/react/ui/components/Form/index.js +2 -1
  152. package/fe/packages/react/ui/components/Input/Input.js +5 -1
  153. package/fe/packages/react/ui/components/Popup/Popup.js +6 -1
  154. package/fe/packages/react/ui/components/index.js +2 -1
  155. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo.js +241 -211
  156. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo2.js +1 -1
  157. package/fe/packages/react/ui/i18n/I18nProvider.js +4 -0
  158. package/fe/packages/react/ui/index.js +2 -1
  159. package/fe/ssr/apps/dash/dash.entry.d.ts +13 -0
  160. package/fe/ssr/apps/dash/dash.entry.js +162 -0
  161. package/fe/ssr/apps/demo/demo.entry.d.ts +13 -0
  162. package/fe/ssr/apps/demo/demo.entry.js +38 -0
  163. package/fe/ssr/apps/server-data/server-data.entry.d.ts +26 -0
  164. package/fe/ssr/apps/server-data/server-data.entry.js +275 -0
  165. package/fe/ssr/apps/ui-components/ui-components.entry.d.ts +5 -0
  166. package/fe/ssr/apps/ui-components/ui-components.entry.js +17 -0
  167. package/fe/ssr/components/StreamingRender/StreamingCache.d.ts +2 -0
  168. package/fe/ssr/components/StreamingRender/StreamingCache.js +31 -0
  169. package/fe/ssr/components/StreamingRender/StreamingRender.d.ts +3 -0
  170. package/fe/ssr/components/StreamingRender/StreamingRender.js +48 -0
  171. package/fe/ssr/components/StreamingRender/StreamingScript.d.ts +8 -0
  172. package/fe/ssr/components/StreamingRender/StreamingScript.js +58 -0
  173. package/fe/ssr/components/StreamingRender/index.d.ts +4 -0
  174. package/fe/ssr/components/StreamingRender/index.js +5 -0
  175. package/fe/ssr/components/StreamingRender/type.d.ts +9 -0
  176. package/fe/ssr/components/StreamingRender/type.js +0 -0
  177. package/fe/ssr/components/index.d.ts +2 -0
  178. package/fe/ssr/components/index.js +2 -0
  179. package/fe/ssr/createSSREntry.d.ts +6 -0
  180. package/fe/ssr/createSSREntry.js +42 -0
  181. package/fe/ssr/hooks/index.d.ts +1 -0
  182. package/fe/ssr/hooks/index.js +2 -0
  183. package/fe/ssr/hooks/useSuspensePromise.d.ts +1 -0
  184. package/fe/ssr/hooks/useSuspensePromise.js +31 -0
  185. package/fe/ssr/index.d.ts +4 -0
  186. package/fe/ssr/index.js +6 -0
  187. package/fe/ssr/types.d.ts +13 -0
  188. package/fe/ssr/types.js +0 -0
  189. package/{model → models}/frontend/src/typing/window.d.ts +2 -0
  190. package/{model → models}/packages/common/i18n/types.d.ts +1 -0
  191. package/{model → models}/packages/common/index.d.ts +1 -0
  192. package/models/packages/common/ssr/hydration.d.ts +23 -0
  193. package/models/packages/common/ssr/index.d.ts +8 -0
  194. package/{model → models}/packages/react/ui/components/Form/SchemaForm/data.d.ts +3 -2
  195. package/{model → models}/packages/react/ui/components/Form/SchemaForm/index.d.ts +1 -0
  196. package/package.json +43 -6
  197. package/types/app/controller/ssr.d.ts +14 -0
  198. package/types/app/html/shell.d.ts +101 -0
  199. package/types/app/router/ssr.d.ts +6 -0
  200. package/types/app/ssr/html.d.ts +53 -0
  201. package/types/app/ssr/manifest.d.ts +17 -0
  202. package/types/app/typings.d.ts +2 -0
  203. package/types/bundler/buildSSR.d.ts +56 -0
  204. package/types/bundler/entryCollect.d.ts +36 -0
  205. package/types/bundler/feSharedConfig.d.ts +35 -0
  206. package/types/bundler/index.d.ts +4 -0
  207. package/types/bundler/ssrClientManifest.d.ts +4 -0
  208. package/types/bundler/ssrEntries.d.ts +23 -0
  209. package/types/bundler/state.d.ts +2 -2
  210. package/types/bundler/utils.d.ts +35 -2
  211. package/types/config/config.default.d.ts +10 -0
  212. package/types/packages/common/i18n/types.d.ts +2 -0
  213. package/types/packages/common/index.d.ts +1 -0
  214. package/types/packages/common/ssr/hydration.d.ts +72 -0
  215. package/types/packages/common/ssr/index.d.ts +34 -0
  216. package/types/packages/core/loader/merge.d.ts +3 -0
  217. package/types/packages/core/loader/model.d.ts +2 -2
  218. package/types/packages/core/paths.d.ts +5 -0
  219. package/types/packages/core/types.d.ts +10 -1
  220. package/types/scripts/vite-build/build.d.ts +1 -0
  221. package/types/scripts/vite-build/types.d.ts +3 -0
  222. package/types/ssrSharedData/outputPaths.d.ts +59 -0
  223. package/fe/packages/react/hooks/useWatch.test.js +0 -24
  224. package/fe/packages/react/ui/assets/table/no-result.js +0 -4
  225. package/fe/packages/react/ui/components/DataTable/dataTableWidth.test.js +0 -39
  226. package/fe/packages/react/ui/components/InputNumber/inputNumberUtils.test.js +0 -59
  227. /package/.skills/tc-generator/reference/project-template/{model → models}/product/mode.js +0 -0
  228. /package/.skills/tc-generator/reference/project-template/{model → models}/product/project/default.js +0 -0
  229. /package/fe/{model → models}/types/data/button.d.ts +0 -0
  230. /package/fe/{model → models}/types/data/component.d.ts +0 -0
  231. /package/fe/{model → models}/types/data/fetchInfo.d.ts +0 -0
  232. /package/fe/{model → models}/types/data/schema.d.ts +0 -0
  233. /package/fe/{model → models}/types/data/search.d.ts +0 -0
  234. /package/fe/{model → models}/types/index.d.ts +0 -0
  235. /package/fe/{model → models}/types/menuType.d.ts +0 -0
  236. /package/fe/{model → models}/types/model.d.ts +0 -0
  237. /package/{model → models}/frontend/extended/SchemaForm/data.d.ts +0 -0
  238. /package/{model → models}/frontend/src/common/auth/index.d.ts +0 -0
  239. /package/{model → models}/frontend/src/common/fetchErrorShow.d.ts +0 -0
  240. /package/{model → models}/frontend/src/common/language.d.ts +0 -0
  241. /package/{model → models}/frontend/src/common/logFn/index.d.ts +0 -0
  242. /package/{model → models}/frontend/src/common/request.d.ts +0 -0
  243. /package/{model → models}/frontend/src/components/AsyncSelect/AsyncSelect.d.ts +0 -0
  244. /package/{model → models}/frontend/src/components/AsyncSelect/index.d.ts +0 -0
  245. /package/{model → models}/frontend/src/defaultPages/SchemaPage/components/CallCom/DetailPanel.d.ts +0 -0
  246. /package/{model → models}/frontend/src/defaultPages/SchemaPage/components/CallCom/PopFrom.d.ts +0 -0
  247. /package/{model → models}/frontend/src/defaultPages/SchemaPage/components/CallCom/builtIn.d.ts +0 -0
  248. /package/{model → models}/frontend/src/defaultPages/SchemaPage/data/eventInfo.d.ts +0 -0
  249. /package/{model → models}/frontend/src/defaultPages/SchemaPage/data/index.d.ts +0 -0
  250. /package/{model → models}/frontend/src/defaultPages/SchemaPage/hooks/useComConfig.d.ts +0 -0
  251. /package/{model → models}/frontend/src/defaultPages/SchemaPage/schemaType.d.ts +0 -0
  252. /package/{model → models}/frontend/src/defaultPages/SchemaPage/utils/permissions.d.ts +0 -0
  253. /package/{model → models}/frontend/src/defaultPages/SchemaPage/utils/validator.d.ts +0 -0
  254. /package/{model → models}/frontend/src/hooks/useText.d.ts +0 -0
  255. /package/{model → models}/frontend/src/language/en-US.d.ts +0 -0
  256. /package/{model → models}/frontend/src/language/index.d.ts +0 -0
  257. /package/{model → models}/frontend/src/language/resources.d.ts +0 -0
  258. /package/{model → models}/frontend/src/language/zh-CN.d.ts +0 -0
  259. /package/{model → models}/frontend/src/stores/apiFreezer.d.ts +0 -0
  260. /package/{model → models}/frontend/src/stores/schemaEventBus.d.ts +0 -0
  261. /package/{model → models}/frontend/src/stores/schemaStore.d.ts +0 -0
  262. /package/{model → models}/frontend/src/typing/scalability.d.ts +0 -0
  263. /package/{model/model → models/models}/index.d.ts +0 -0
  264. /package/{model/model → models/models}/test.d.ts +0 -0
  265. /package/{model/model → models/models}/types/data/button.d.ts +0 -0
  266. /package/{model/model → models/models}/types/data/component.d.ts +0 -0
  267. /package/{model/model → models/models}/types/data/fetchInfo.d.ts +0 -0
  268. /package/{model/model → models/models}/types/data/schema.d.ts +0 -0
  269. /package/{model/model → models/models}/types/data/search.d.ts +0 -0
  270. /package/{model/model → models/models}/types/index.d.ts +0 -0
  271. /package/{model/model → models/models}/types/menuType.d.ts +0 -0
  272. /package/{model/model → models/models}/types/model.d.ts +0 -0
  273. /package/{model → models}/packages/common/array/index.d.ts +0 -0
  274. /package/{model → models}/packages/common/cache/LRUCache.d.ts +0 -0
  275. /package/{model → models}/packages/common/cache/index.d.ts +0 -0
  276. /package/{model → models}/packages/common/guards/index.d.ts +0 -0
  277. /package/{model → models}/packages/common/http/index.d.ts +0 -0
  278. /package/{model → models}/packages/common/i18n/default.d.ts +0 -0
  279. /package/{model → models}/packages/common/i18n/en-US.d.ts +0 -0
  280. /package/{model → models}/packages/common/i18n/index.d.ts +0 -0
  281. /package/{model → models}/packages/common/i18n/locales.d.ts +0 -0
  282. /package/{model → models}/packages/common/log/index.d.ts +0 -0
  283. /package/{model → models}/packages/common/number/index.d.ts +0 -0
  284. /package/{model → models}/packages/common/object/filterEmpty.d.ts +0 -0
  285. /package/{model → models}/packages/common/object/index.d.ts +0 -0
  286. /package/{model → models}/packages/common/rafTimer.d.ts +0 -0
  287. /package/{model → models}/packages/common/string/index.d.ts +0 -0
  288. /package/{model → models}/packages/common/types/index.d.ts +0 -0
  289. /package/{model → models}/packages/react/hooks/useBreadcrumb.d.ts +0 -0
  290. /package/{model → models}/packages/react/hooks/useExecuteOnce.d.ts +0 -0
  291. /package/{model → models}/packages/react/hooks/useLanguage.d.ts +0 -0
  292. /package/{model → models}/packages/react/ui/components/Button/Button.d.ts +0 -0
  293. /package/{model → models}/packages/react/ui/components/Button/SubmitButton.d.ts +0 -0
  294. /package/{model → models}/packages/react/ui/components/Button/index.d.ts +0 -0
  295. /package/{model → models}/packages/react/ui/components/Card/Card.d.ts +0 -0
  296. /package/{model → models}/packages/react/ui/components/Card/index.d.ts +0 -0
  297. /package/{model → models}/packages/react/ui/components/Checkbox/Checkbox.d.ts +0 -0
  298. /package/{model → models}/packages/react/ui/components/Checkbox/index.d.ts +0 -0
  299. /package/{model → models}/packages/react/ui/components/ConfirmDialog/ConfirmDialog.d.ts +0 -0
  300. /package/{model → models}/packages/react/ui/components/ConfirmDialog/index.d.ts +0 -0
  301. /package/{model → models}/packages/react/ui/components/DataTable/ActionBtn.d.ts +0 -0
  302. /package/{model → models}/packages/react/ui/components/DataTable/dataTableWidth.d.ts +0 -0
  303. /package/{model → models}/packages/react/ui/components/DataTable/index.d.ts +0 -0
  304. /package/{model → models}/packages/react/ui/components/Date/Calendar.d.ts +0 -0
  305. /package/{model → models}/packages/react/ui/components/Date/Date.d.ts +0 -0
  306. /package/{model → models}/packages/react/ui/components/Date/LocaleContext.d.ts +0 -0
  307. /package/{model → models}/packages/react/ui/components/Date/LocaleProvider.d.ts +0 -0
  308. /package/{model → models}/packages/react/ui/components/Date/TimePicker.d.ts +0 -0
  309. /package/{model → models}/packages/react/ui/components/Date/data.d.ts +0 -0
  310. /package/{model → models}/packages/react/ui/components/Date/dateLocaleStore.d.ts +0 -0
  311. /package/{model → models}/packages/react/ui/components/Date/dropdownPositioning.d.ts +0 -0
  312. /package/{model → models}/packages/react/ui/components/Date/index.d.ts +0 -0
  313. /package/{model → models}/packages/react/ui/components/Date/locales.d.ts +0 -0
  314. /package/{model → models}/packages/react/ui/components/Drawer/Drawer.d.ts +0 -0
  315. /package/{model → models}/packages/react/ui/components/Drawer/index.d.ts +0 -0
  316. /package/{model → models}/packages/react/ui/components/Dropdown/Dropdown.d.ts +0 -0
  317. /package/{model → models}/packages/react/ui/components/Dropdown/index.d.ts +0 -0
  318. /package/{model → models}/packages/react/ui/components/Form/Form.d.ts +0 -0
  319. /package/{model → models}/packages/react/ui/components/Form/FormItem.d.ts +0 -0
  320. /package/{model → models}/packages/react/ui/components/Form/index.d.ts +0 -0
  321. /package/{model → models}/packages/react/ui/components/Form/useForm.d.ts +0 -0
  322. /package/{model → models}/packages/react/ui/components/ImagePreview/ImagePreview.d.ts +0 -0
  323. /package/{model → models}/packages/react/ui/components/ImagePreview/PreviewImage.d.ts +0 -0
  324. /package/{model → models}/packages/react/ui/components/ImagePreview/index.d.ts +0 -0
  325. /package/{model → models}/packages/react/ui/components/Input/Input.d.ts +0 -0
  326. /package/{model → models}/packages/react/ui/components/Input/index.d.ts +0 -0
  327. /package/{model → models}/packages/react/ui/components/InputNumber/InputNumber.d.ts +0 -0
  328. /package/{model → models}/packages/react/ui/components/InputNumber/index.d.ts +0 -0
  329. /package/{model → models}/packages/react/ui/components/InputNumber/inputNumberUtils.d.ts +0 -0
  330. /package/{model → models}/packages/react/ui/components/Label/Label.d.ts +0 -0
  331. /package/{model → models}/packages/react/ui/components/Label/index.d.ts +0 -0
  332. /package/{model → models}/packages/react/ui/components/Layout/Layout.d.ts +0 -0
  333. /package/{model → models}/packages/react/ui/components/Layout/index.d.ts +0 -0
  334. /package/{model → models}/packages/react/ui/components/Loading/Loading.d.ts +0 -0
  335. /package/{model → models}/packages/react/ui/components/Loading/index.d.ts +0 -0
  336. /package/{model → models}/packages/react/ui/components/Menu/Menu.d.ts +0 -0
  337. /package/{model → models}/packages/react/ui/components/Menu/MenuContext.d.ts +0 -0
  338. /package/{model → models}/packages/react/ui/components/Menu/MenuItem.d.ts +0 -0
  339. /package/{model → models}/packages/react/ui/components/Menu/SubMenu.d.ts +0 -0
  340. /package/{model → models}/packages/react/ui/components/Menu/index.d.ts +0 -0
  341. /package/{model → models}/packages/react/ui/components/Menu/menuTypes.d.ts +0 -0
  342. /package/{model → models}/packages/react/ui/components/Menu/utils.d.ts +0 -0
  343. /package/{model → models}/packages/react/ui/components/Message/Message.d.ts +0 -0
  344. /package/{model → models}/packages/react/ui/components/Message/MessageManager.d.ts +0 -0
  345. /package/{model → models}/packages/react/ui/components/Message/data.d.ts +0 -0
  346. /package/{model → models}/packages/react/ui/components/Message/index.d.ts +0 -0
  347. /package/{model → models}/packages/react/ui/components/Modal/Modal.d.ts +0 -0
  348. /package/{model → models}/packages/react/ui/components/Modal/ModalManager.d.ts +0 -0
  349. /package/{model → models}/packages/react/ui/components/Modal/index.d.ts +0 -0
  350. /package/{model → models}/packages/react/ui/components/Notification/Notification.d.ts +0 -0
  351. /package/{model → models}/packages/react/ui/components/Notification/index.d.ts +0 -0
  352. /package/{model → models}/packages/react/ui/components/Overlay/Overlay.d.ts +0 -0
  353. /package/{model → models}/packages/react/ui/components/Overlay/index.d.ts +0 -0
  354. /package/{model → models}/packages/react/ui/components/Pagination/Pagination.d.ts +0 -0
  355. /package/{model → models}/packages/react/ui/components/Pagination/index.d.ts +0 -0
  356. /package/{model → models}/packages/react/ui/components/Popup/Popup.d.ts +0 -0
  357. /package/{model → models}/packages/react/ui/components/Popup/index.d.ts +0 -0
  358. /package/{model → models}/packages/react/ui/components/Radio/Radio.d.ts +0 -0
  359. /package/{model → models}/packages/react/ui/components/Radio/RadioGroup.d.ts +0 -0
  360. /package/{model → models}/packages/react/ui/components/Radio/index.d.ts +0 -0
  361. /package/{model → models}/packages/react/ui/components/Search/Search.d.ts +0 -0
  362. /package/{model → models}/packages/react/ui/components/Search/index.d.ts +0 -0
  363. /package/{model → models}/packages/react/ui/components/Select/Select.d.ts +0 -0
  364. /package/{model → models}/packages/react/ui/components/Select/dropdownPositioning.d.ts +0 -0
  365. /package/{model → models}/packages/react/ui/components/Select/index.d.ts +0 -0
  366. /package/{model → models}/packages/react/ui/components/Skeleton/Skeleton.d.ts +0 -0
  367. /package/{model → models}/packages/react/ui/components/Skeleton/index.d.ts +0 -0
  368. /package/{model → models}/packages/react/ui/components/Switch/Switch.d.ts +0 -0
  369. /package/{model → models}/packages/react/ui/components/Switch/index.d.ts +0 -0
  370. /package/{model → models}/packages/react/ui/components/TableSearch/TableSearch.d.ts +0 -0
  371. /package/{model → models}/packages/react/ui/components/TableSearch/index.d.ts +0 -0
  372. /package/{model → models}/packages/react/ui/components/TableSearch/lang.d.ts +0 -0
  373. /package/{model → models}/packages/react/ui/components/TableSearch/tableSearchLocaleStore.d.ts +0 -0
  374. /package/{model → models}/packages/react/ui/components/Tabs/Tabs.d.ts +0 -0
  375. /package/{model → models}/packages/react/ui/components/Tabs/index.d.ts +0 -0
  376. /package/{model → models}/packages/react/ui/components/Textarea/Textarea.d.ts +0 -0
  377. /package/{model → models}/packages/react/ui/components/Textarea/index.d.ts +0 -0
  378. /package/{model → models}/packages/react/ui/components/Tooltip/Tooltip.d.ts +0 -0
  379. /package/{model → models}/packages/react/ui/components/Tooltip/index.d.ts +0 -0
  380. /package/{model → models}/packages/react/ui/components/TreeSelect/TreeSelect.d.ts +0 -0
  381. /package/{model → models}/packages/react/ui/components/TreeSelect/index.d.ts +0 -0
  382. /package/{model → models}/packages/react/ui/components/Upload/ImageUpload.d.ts +0 -0
  383. /package/{model → models}/packages/react/ui/components/Upload/Upload.d.ts +0 -0
  384. /package/{model → models}/packages/react/ui/components/Upload/index.d.ts +0 -0
  385. /package/{model → models}/packages/react/ui/components/breadcrumb/breadcrumb.d.ts +0 -0
  386. /package/{model → models}/packages/react/ui/components/breadcrumb/index.d.ts +0 -0
  387. /package/{model → models}/packages/react/ui/components/hooks/useDropdownPositioning.d.ts +0 -0
  388. /package/{model → models}/packages/react/ui/components/hooks/useInputController.d.ts +0 -0
  389. /package/{model → models}/packages/react/ui/components/index.d.ts +0 -0
  390. /package/{model → models}/packages/react/ui/components/table/index.d.ts +0 -0
  391. /package/{model → models}/packages/react/ui/components/table/table.d.ts +0 -0
  392. /package/{model → models}/packages/react/ui/components/types/baseType.d.ts +0 -0
  393. /package/{model → models}/packages/react/ui/i18n/I18nProvider.d.ts +0 -0
  394. /package/{model → models}/packages/react/ui/i18n/index.d.ts +0 -0
  395. /package/{model → models}/packages/react/ui/i18n/useI18n.d.ts +0 -0
  396. /package/{model → models}/packages/react/ui/index.d.ts +0 -0
  397. /package/{model → models}/packages/react/ui/lib/createStoreHook.d.ts +0 -0
  398. /package/{model → models}/packages/react/ui/lib/export.d.ts +0 -0
  399. /package/{model → models}/packages/react/ui/lib/utils.d.ts +0 -0
  400. /package/{model → models}/packages/react/ui/stores/breadcrumb.d.ts +0 -0
  401. /package/{model → models}/packages/react/ui/stores/language.d.ts +0 -0
  402. /package/{model → models}/packages/react/ui/types/index.d.ts +0 -0
  403. /package/{model → models}/typings/type.d.ts +0 -0
@@ -0,0 +1,58 @@
1
+ import { useEffect, useState } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region ssr/components/StreamingRender/StreamingScript.tsx
4
+ var STREAMING_RENDER_SCRIPT_KEY = "S_E_S_K";
5
+ var getStreamingRenderGetDataScriptId = (key) => STREAMING_RENDER_SCRIPT_KEY + key;
6
+ /**
7
+ *
8
+ * 注入脚本 dom
9
+ */
10
+ var StreamingRenderGetDataScript = (props) => {
11
+ const { keyName, data } = props;
12
+ const [hidden, setHidden] = useState(false);
13
+ useEffect(() => {
14
+ const timer = setTimeout(() => setHidden(true), 3e3);
15
+ return () => clearTimeout(timer);
16
+ }, []);
17
+ const json = JSON.stringify(data);
18
+ return !hidden && /* @__PURE__ */ jsx("script", {
19
+ type: "application/json",
20
+ id: getStreamingRenderGetDataScriptId(keyName),
21
+ dangerouslySetInnerHTML: { __html: (json ?? "null").replace(/</g, "\\u003c") }
22
+ });
23
+ };
24
+ var clientDataCache = /* @__PURE__ */ new Map();
25
+ /**
26
+ * client 获取 流式数据
27
+ */
28
+ var readClientStreamData = (key) => {
29
+ if (typeof window === "undefined") return {
30
+ found: false,
31
+ data: null
32
+ };
33
+ if (clientDataCache.has(key)) return {
34
+ found: true,
35
+ data: clientDataCache.get(key)
36
+ };
37
+ const sDom = document.getElementById(getStreamingRenderGetDataScriptId(key));
38
+ let scriptData;
39
+ let found = false;
40
+ try {
41
+ if (!sDom) return {
42
+ found: false,
43
+ data: null
44
+ };
45
+ const dataStr = sDom.textContent;
46
+ scriptData = JSON.parse(dataStr);
47
+ found = true;
48
+ clientDataCache.set(key, scriptData);
49
+ } catch (error) {
50
+ scriptData = null;
51
+ }
52
+ return {
53
+ found,
54
+ data: scriptData
55
+ };
56
+ };
57
+ //#endregion
58
+ export { StreamingRenderGetDataScript, readClientStreamData };
@@ -0,0 +1,4 @@
1
+ import StreamingRender from "./StreamingRender";
2
+ export { StreamingRender };
3
+ export type { RenderProp, StateParams, StreamingRenderProps } from "./type";
4
+ export default StreamingRender;
@@ -0,0 +1,5 @@
1
+ import StreamingRender from "./StreamingRender.js";
2
+ //#region ssr/components/StreamingRender/index.tsx
3
+ var StreamingRender_default = StreamingRender;
4
+ //#endregion
5
+ export { StreamingRender, StreamingRender_default as default };
@@ -0,0 +1,9 @@
1
+ import { ReactNode, SuspenseProps } from "react";
2
+ export type RenderProp<T> = (data: T) => ReactNode;
3
+ export type StateParams<T> = {
4
+ getData: () => Promise<T>;
5
+ keyName: string;
6
+ };
7
+ export interface StreamingRenderProps<T> extends Omit<SuspenseProps, "children">, StateParams<T> {
8
+ children: RenderProp<T>;
9
+ }
File without changes
@@ -0,0 +1,2 @@
1
+ export { default as StreamingRender } from "./StreamingRender";
2
+ export type { RenderProp, StateParams, StreamingRenderProps } from "./StreamingRender";
@@ -0,0 +1,2 @@
1
+ import StreamingRender_default from "./StreamingRender/index.js";
2
+ export { StreamingRender_default as StreamingRender };
@@ -0,0 +1,6 @@
1
+ import { type SSRHydrationData } from "../packages/common/index";
2
+ import { type ComponentType } from "react";
3
+ export declare function createSSREntry<Props extends Record<string, unknown>>(Component: ComponentType<Props>, options?: {
4
+ rootId?: string;
5
+ onHydrated?: (data: SSRHydrationData<Props> | null) => void;
6
+ }): void;
@@ -0,0 +1,42 @@
1
+ import { clearHydrationData, peekHydrationData } from "../packages/common/ssr/hydration.js";
2
+ import { useEffect } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { hydrateRoot } from "react-dom/client";
5
+ //#region ssr/createSSREntry.tsx
6
+ /**
7
+ * SSR 页面客户端入口工厂
8
+ *
9
+ * 用法:
10
+ * ```tsx
11
+ * // ssr/apps/demo/demo.entry.tsx
12
+ * import { createSSREntry } from '../../createSSREntry'
13
+ * import App from './App'
14
+ *
15
+ * export default App
16
+ * export const hydrate = createSSREntry(App)
17
+ * ```
18
+ *
19
+ * 服务端只使用 default export 做 React SSR 渲染。
20
+ * 客户端执行 hydrate 完成注水。
21
+ */
22
+ function createSSREntry(Component, options) {
23
+ if (typeof window === "undefined") return;
24
+ const { rootId = "root", onHydrated } = options ?? {};
25
+ const container = document.getElementById(rootId);
26
+ if (!container) {
27
+ console.error(`[SSR] Root element #${rootId} not found`);
28
+ return;
29
+ }
30
+ const data = peekHydrationData();
31
+ const props = data?.props ?? {};
32
+ const HydrationBoundary = () => {
33
+ useEffect(() => {
34
+ clearHydrationData();
35
+ onHydrated?.(data);
36
+ }, []);
37
+ return /* @__PURE__ */ jsx(Component, { ...props });
38
+ };
39
+ hydrateRoot(container, /* @__PURE__ */ jsx(HydrationBoundary, {}));
40
+ }
41
+ //#endregion
42
+ export { createSSREntry };
@@ -0,0 +1 @@
1
+ export { useSuspensePromise } from "./useSuspensePromise";
@@ -0,0 +1,2 @@
1
+ import { useSuspensePromise } from "./useSuspensePromise.js";
2
+ export { useSuspensePromise };
@@ -0,0 +1 @@
1
+ export declare function useSuspensePromise<T>(promise: Promise<T>): T;
@@ -0,0 +1,31 @@
1
+ import * as React$1 from "react";
2
+ //#region ssr/hooks/useSuspensePromise.ts
3
+ var promiseStateCache = /* @__PURE__ */ new WeakMap();
4
+ function readPromiseFallback(promise) {
5
+ let state = promiseStateCache.get(promise);
6
+ if (!state) {
7
+ state = { status: "pending" };
8
+ promiseStateCache.set(promise, state);
9
+ promise.then((value) => {
10
+ promiseStateCache.set(promise, {
11
+ status: "resolved",
12
+ value
13
+ });
14
+ }, (error) => {
15
+ promiseStateCache.set(promise, {
16
+ status: "rejected",
17
+ error
18
+ });
19
+ });
20
+ }
21
+ if (state.status === "pending") throw promise;
22
+ if (state.status === "rejected") throw state.error;
23
+ return state.value;
24
+ }
25
+ function useSuspensePromise(promise) {
26
+ const reactUse = React$1.use;
27
+ if (typeof reactUse === "function") return reactUse(promise);
28
+ return readPromiseFallback(promise);
29
+ }
30
+ //#endregion
31
+ export { useSuspensePromise };
@@ -0,0 +1,4 @@
1
+ export { createSSREntry } from "./createSSREntry";
2
+ export * from "./components";
3
+ export * from "./hooks";
4
+ export type { SSRPageMetaContext, SSRPageMetaResolver, SSRPageMetaValue, SSRPropsContext } from "./types";
@@ -0,0 +1,6 @@
1
+ import { createSSREntry } from "./createSSREntry.js";
2
+ import { useSuspensePromise } from "./hooks/useSuspensePromise.js";
3
+ import StreamingRender_default from "./components/StreamingRender/index.js";
4
+ import "./components/index.js";
5
+ import "./hooks/index.js";
6
+ export { StreamingRender_default as StreamingRender, createSSREntry, useSuspensePromise };
@@ -0,0 +1,13 @@
1
+ import type { Ctx, KoaApp } from "@_tc/template-core";
2
+ export interface SSRPropsContext {
3
+ params: Record<string, string>;
4
+ query: Record<string, unknown>;
5
+ path: string;
6
+ app: KoaApp;
7
+ ctx: Ctx;
8
+ }
9
+ export interface SSRPageMetaContext<Props = Record<string, unknown>> extends SSRPropsContext {
10
+ props: Props;
11
+ }
12
+ export type SSRPageMetaResolver<Props = Record<string, unknown>> = (context: SSRPageMetaContext<Props>) => string | null | undefined | Promise<string | null | undefined>;
13
+ export type SSRPageMetaValue<Props = Record<string, unknown>> = string | null | undefined | SSRPageMetaResolver<Props>;
File without changes
@@ -4,5 +4,7 @@ declare global {
4
4
  _basePath: string;
5
5
  _projKey: string;
6
6
  _signKey: string;
7
+ _renderMode: 'csr' | 'ssr';
8
+ _isSSR: boolean;
7
9
  }
8
10
  }
@@ -29,6 +29,7 @@ export interface I18nAddResourcesOptions {
29
29
  export type I18nTranslator = <T = string>(key: string, fillingData?: I18nInterpolationValues, options?: I18nTranslateOptions) => T | string;
30
30
  export interface I18nActions {
31
31
  setLanguage: (language: I18nLanguage) => void;
32
+ hydrateStoredLanguage: () => void;
32
33
  setFallbackLanguage: (language: I18nLanguage) => void;
33
34
  setResources: (resources: I18nResources, options?: I18nSetResourcesOptions) => void;
34
35
  addResources: (language: I18nLanguage, messages: I18nDictionary, options?: I18nAddResourcesOptions) => void;
@@ -7,5 +7,6 @@ export * from "./log";
7
7
  export * from "./number";
8
8
  export * from "./object";
9
9
  export * from "./rafTimer";
10
+ export * from "./ssr";
10
11
  export * from "./string";
11
12
  export * from "./types";
@@ -0,0 +1,23 @@
1
+ export interface SSRHydrationData<Props = Record<string, unknown>, State = Record<string, unknown>> {
2
+ props: Props;
3
+ state: State;
4
+ meta: SSRPageMeta;
5
+ }
6
+ export interface SSRPageMeta {
7
+ title?: string;
8
+ description?: string;
9
+ renderedAt: number;
10
+ pathname: string;
11
+ }
12
+ export declare const SSR_DATA_KEY = "__SSR_DATA__";
13
+ declare global {
14
+ interface Window {
15
+ [SSR_DATA_KEY]?: SSRHydrationData | string;
16
+ }
17
+ }
18
+ export declare function serializeHydrationDataScriptContent(data: SSRHydrationData): string;
19
+ export declare function serializeHydrationData(data: SSRHydrationData): string;
20
+ export declare function peekHydrationData<Props = Record<string, unknown>, State = Record<string, unknown>>(): SSRHydrationData<Props, State> | null;
21
+ export declare function clearHydrationData(): void;
22
+ export declare function readHydrationData<Props = Record<string, unknown>, State = Record<string, unknown>>(): SSRHydrationData<Props, State> | null;
23
+ export declare function createHydrationData<Props = Record<string, unknown>, State = Record<string, unknown>>(props: Props, meta: Omit<SSRPageMeta, 'renderedAt'>, state?: State): SSRHydrationData<Props, State>;
@@ -0,0 +1,8 @@
1
+ export declare const isBrowser: boolean;
2
+ export declare const isServer: boolean;
3
+ export declare function clientOnly<T>(fn: () => T, fallback: T): T;
4
+ export declare function safeWindow(): Window | undefined;
5
+ export declare function safeDocument(): Document | undefined;
6
+ export declare function safeLocalStorage(key: string, fallback?: string): string;
7
+ export declare function safeSetLocalStorage(key: string, value: string): void;
8
+ export * from "./hydration";
@@ -26,8 +26,9 @@ export type ExtendedFieldType = Extract<keyof SchemaFormNamespace.FieldTypes | k
26
26
  export type SchemaFormAllFieldType = SchemaFormFieldType | ExtendedFieldType;
27
27
  export type SchemaFormAllPropsMap = SchemaFormComponentPropsMap & SchemaFormNamespace.PropsMap;
28
28
  export type SchemaFormComponent = React.ComponentType<any> | React.LazyExoticComponent<React.ComponentType<any>>;
29
- export declare const componentsMap: Record<SchemaFormAllFieldType, SchemaFormComponent>;
30
- export type SchemaFormComponentsMap = Partial<Record<ExtendedFieldType, SchemaFormComponent>>;
29
+ export declare const componentsMap: Partial<Record<SchemaFormAllFieldType, SchemaFormComponent>>;
30
+ export type SchemaFormComponentsMap = Partial<Record<string, SchemaFormComponent>>;
31
+ export declare const registerSchemaFormComponents: (map: SchemaFormComponentsMap) => void;
31
32
  export type FieldProps = {
32
33
  [K in SchemaFormAllFieldType]: {
33
34
  type: K;
@@ -6,6 +6,7 @@ import { type FormProps } from "..";
6
6
  import { type ButtonElementProps } from "../../Button";
7
7
  import type { LabelLayout } from "../../Label";
8
8
  import { type FieldProps, type SchemaFormAllFieldType } from "./data";
9
+ export { registerSchemaFormComponents } from "./data";
9
10
  export type { FieldProps, SchemaFormAllFieldType, SchemaFormAllPropsMap, SchemaFormComponent, SchemaFormComponentsMap, SchemaFormComponentPropsMap, SchemaFormFieldType, SchemaFormNamespace, } from "./data";
10
11
  export type FormFieldType = SchemaFormAllFieldType;
11
12
  type BaseField<T> = {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@_tc/template-core",
3
- "version": "0.2.11",
4
- "description": "A full-stack TypeScript admin framework powered by Koa, React, and Vite - monorepo root",
3
+ "version": "0.3.0",
4
+ "description": "A full-stack TypeScript admin framework package powered by Koa, React, and Vite",
5
5
  "types": "./types/index.d.ts",
6
6
  "exports": {
7
7
  ".": {
@@ -29,6 +29,41 @@
29
29
  "require": "./fe/frontend/src/common/request.js",
30
30
  "types": "./fe/frontend/src/common/request.d.ts"
31
31
  },
32
+ "./ssr": {
33
+ "import": "./fe/ssr/index.js",
34
+ "require": "./fe/ssr/index.js",
35
+ "types": "./fe/ssr/index.d.ts"
36
+ },
37
+ "./ssr/createSSREntry": {
38
+ "import": "./fe/ssr/createSSREntry.js",
39
+ "require": "./fe/ssr/createSSREntry.js",
40
+ "types": "./fe/ssr/createSSREntry.d.ts"
41
+ },
42
+ "./ssr/types": {
43
+ "import": "./fe/ssr/types.js",
44
+ "require": "./fe/ssr/types.js",
45
+ "types": "./fe/ssr/types.d.ts"
46
+ },
47
+ "./ssr/components": {
48
+ "import": "./fe/ssr/components/index.js",
49
+ "require": "./fe/ssr/components/index.js",
50
+ "types": "./fe/ssr/components/index.d.ts"
51
+ },
52
+ "./ssr/components/StreamingRender": {
53
+ "import": "./fe/ssr/components/StreamingRender/index.js",
54
+ "require": "./fe/ssr/components/StreamingRender/index.js",
55
+ "types": "./fe/ssr/components/StreamingRender/index.d.ts"
56
+ },
57
+ "./ssr/hooks": {
58
+ "import": "./fe/ssr/hooks/index.js",
59
+ "require": "./fe/ssr/hooks/index.js",
60
+ "types": "./fe/ssr/hooks/index.d.ts"
61
+ },
62
+ "./ssr/hooks/useSuspensePromise": {
63
+ "import": "./fe/ssr/hooks/useSuspensePromise.js",
64
+ "require": "./fe/ssr/hooks/useSuspensePromise.js",
65
+ "types": "./fe/ssr/hooks/useSuspensePromise.d.ts"
66
+ },
32
67
  "./fe/rc": {
33
68
  "import": "./fe/packages/react/ui/index.js",
34
69
  "require": "./fe/packages/react/ui/index.js",
@@ -50,8 +85,8 @@
50
85
  "types": "./fe/frontend/src/*"
51
86
  },
52
87
  "./fe/tailwind_ui.css": "./fe/frontend/src/main.css",
53
- "./model": {
54
- "types": "./model/model/index.d.ts"
88
+ "./models": {
89
+ "types": "./models/models/index.d.ts"
55
90
  }
56
91
  },
57
92
  "dependencies": {
@@ -95,8 +130,10 @@
95
130
  "koa",
96
131
  "framework",
97
132
  "typescript",
98
- "template",
99
- "monorepo"
133
+ "admin",
134
+ "react",
135
+ "vite",
136
+ "schema"
100
137
  ],
101
138
  "author": "",
102
139
  "license": "ISC",
@@ -0,0 +1,14 @@
1
+ import type Koa from "koa";
2
+ import type { Ctx, KoaApp } from "../type";
3
+ /**
4
+ * 创建 SSR controller,负责把 SSR 页面请求渲染成完整 HTML。
5
+ */
6
+ declare const getSSRController: (app: KoaApp) => {
7
+ new (): {
8
+ /**
9
+ * 渲染单个 SSR 页面请求。
10
+ */
11
+ renderSSRPage(ctx: Ctx, _next: Koa.Next): Promise<void>;
12
+ };
13
+ };
14
+ export default getSSRController;
@@ -0,0 +1,101 @@
1
+ /**
2
+ * CSR entry.tpl 中由构建器展开的共享 shell 标记。
3
+ */
4
+ export declare const sharedCSRShellMarkers: {
5
+ readonly head: "<!-- TC_SHARED_HEAD -->";
6
+ readonly runtimeContext: "<!-- TC_RUNTIME_CONTEXT -->";
7
+ };
8
+ /**
9
+ * document head 公共片段渲染参数。
10
+ */
11
+ export interface DocumentHeadHtmlOptions {
12
+ /**
13
+ * 已转义或模板侧保证安全的 title 文本 HTML。
14
+ */
15
+ titleHtml: string;
16
+ /**
17
+ * 已转义的 description attribute 值;不传则不输出 description meta。
18
+ */
19
+ descriptionAttr?: string;
20
+ /**
21
+ * SSR manifest 生成的 preload/link HTML。
22
+ */
23
+ preloadLinks?: string;
24
+ }
25
+ /**
26
+ * runtime context script 中需要直接写入 JavaScript 的表达式。
27
+ */
28
+ export interface RuntimeContextScriptExpressionOptions {
29
+ /**
30
+ * window._basePath 的 JavaScript 表达式。
31
+ */
32
+ basePathExpression: string;
33
+ /**
34
+ * window._FEBasePage 的 JavaScript 表达式。
35
+ */
36
+ feBasePageExpression: string;
37
+ /**
38
+ * window._projKey 的 JavaScript 表达式。
39
+ */
40
+ projKeyExpression: string;
41
+ /**
42
+ * window._signKey 的 JavaScript 表达式。
43
+ */
44
+ signKeyExpression: string;
45
+ /**
46
+ * window._renderMode 的 JavaScript 表达式。
47
+ */
48
+ renderModeExpression: string;
49
+ /**
50
+ * app-options-data script 的安全 JSON 文本。
51
+ */
52
+ optionsJsonHtml: string;
53
+ }
54
+ /**
55
+ * 将任意值序列化成可安全放入 inline script 或 JSON script 的字符串。
56
+ */
57
+ export declare const serializeForHtmlScript: (value: unknown) => string;
58
+ /**
59
+ * 转义 HTML 文本节点内容。
60
+ */
61
+ export declare function escapeHtml(value: unknown): string;
62
+ /**
63
+ * 转义 HTML attribute 值。
64
+ */
65
+ export declare function escapeHtmlAttr(value: unknown): string;
66
+ /**
67
+ * 渲染与 CSR/SSR shell 共用的主题初始化脚本内容。
68
+ */
69
+ export declare function renderThemeScriptContent(): string;
70
+ /**
71
+ * 渲染与 CSR/SSR shell 共用的主题初始化 script 标签。
72
+ */
73
+ export declare function renderThemeScript(): string;
74
+ /**
75
+ * 渲染 CSR/SSR 共用的 document head 基础 HTML。
76
+ */
77
+ export declare function renderDocumentHeadHtml({ titleHtml, descriptionAttr, preloadLinks, }: DocumentHeadHtmlOptions): string;
78
+ /**
79
+ * 渲染 CSR entry.tpl 使用的共享 head 模板片段。
80
+ */
81
+ export declare function renderCSRDocumentHeadTemplate(): string;
82
+ /**
83
+ * 渲染注入前端运行时全局变量的 input script 内容。
84
+ */
85
+ export declare function renderRuntimeInputScriptContentFromExpressions({ basePathExpression, feBasePageExpression, projKeyExpression, signKeyExpression, renderModeExpression, }: RuntimeContextScriptExpressionOptions): string;
86
+ /**
87
+ * 渲染解析 app-options-data 的 script 内容。
88
+ */
89
+ export declare function renderAppOptionsScriptContent(): string;
90
+ /**
91
+ * 渲染 CSR/SSR 共用的运行时上下文 script 标签。
92
+ */
93
+ export declare function renderRuntimeContextScriptsFromExpressions(options: RuntimeContextScriptExpressionOptions): string;
94
+ /**
95
+ * 渲染 CSR entry.tpl 使用的运行时上下文模板片段。
96
+ */
97
+ export declare function renderCSRRuntimeContextScriptsTemplate(): string;
98
+ /**
99
+ * 将 app/view/entry.tpl 的共享 shell marker 展开为真实 CSR 模板片段。
100
+ */
101
+ export declare function applySharedCSRShellTemplate(templateHtml: string): string;
@@ -0,0 +1,6 @@
1
+ import type { KoaApp, KoaRouter } from "../type";
2
+ /**
3
+ * 注册 SSR 页面路由。
4
+ */
5
+ declare const _default: (app: KoaApp, router: KoaRouter) => void;
6
+ export default _default;
@@ -0,0 +1,53 @@
1
+ import type { Ctx, KoaApp } from "../type";
2
+ export { escapeHtml, escapeHtmlAttr, serializeForHtmlScript } from "../html/shell";
3
+ type ReactModule = typeof import('react');
4
+ type ReactElement = import('react').ReactElement;
5
+ type ReactNode = import('react').ReactNode;
6
+ export interface SSRHtmlShellOptions {
7
+ app: KoaApp;
8
+ ctx: Ctx;
9
+ page: string;
10
+ title: string;
11
+ description?: string;
12
+ appHtml: string;
13
+ preloadLinks?: string;
14
+ hydrationScript?: string;
15
+ clientScript?: string;
16
+ }
17
+ export type SSRHtmlShellPartsOptions = Omit<SSRHtmlShellOptions, 'appHtml'>;
18
+ export interface SSRHtmlShellParts {
19
+ beforeAppHtml: string;
20
+ afterAppHtml: string;
21
+ }
22
+ export interface SSRDocumentElementOptions extends SSRHtmlShellPartsOptions {
23
+ appNode: ReactNode;
24
+ hydrationScriptContent?: string;
25
+ }
26
+ export interface SSRErrorHtmlOptions {
27
+ app: KoaApp;
28
+ ctx: Ctx;
29
+ page: string;
30
+ status: number;
31
+ title: string;
32
+ message: string;
33
+ error?: unknown;
34
+ }
35
+ /**
36
+ * 渲染 SSR 页面 HTML shell 两侧片段,用于流式写入 React app HTML。
37
+ */
38
+ export declare function renderSSRHtmlShellParts(options: SSRHtmlShellPartsOptions): SSRHtmlShellParts;
39
+ /**
40
+ * 创建 React 可流式渲染的完整 SSR document。
41
+ *
42
+ * React 负责输出完整 document 时,bootstrap script 会位于 #root 之后、
43
+ * pending Suspense chunks 之前,从而允许客户端入口提前启动 selective hydration。
44
+ */
45
+ export declare function createSSRDocumentElement(React: ReactModule, options: SSRDocumentElementOptions): ReactElement;
46
+ /**
47
+ * 渲染 SSR 页面完整 HTML shell。
48
+ */
49
+ export declare function renderSSRHtmlShell(options: SSRHtmlShellOptions): string;
50
+ /**
51
+ * 渲染 SSR fallback 错误页。
52
+ */
53
+ export declare function renderSSRErrorHtml(options: SSRErrorHtmlOptions): string;
@@ -0,0 +1,17 @@
1
+ export type SSRManifestEntry = {
2
+ file?: string;
3
+ name?: string;
4
+ src?: string;
5
+ isEntry?: boolean;
6
+ css?: string[];
7
+ imports?: string[];
8
+ };
9
+ export type SSRManifest = Record<string, SSRManifestEntry>;
10
+ /**
11
+ * 从 client manifest 中找到指定 SSR page 的浏览器入口。
12
+ */
13
+ export declare function findSSRClientEntry(manifest: SSRManifest | null, page: string): SSRManifestEntry | null;
14
+ /**
15
+ * 为 SSR client 入口及其静态 imports 生成 preload/link 标签。
16
+ */
17
+ export declare function generateSSRPreloadLinks(manifest: SSRManifest | null, entry: SSRManifestEntry | null): string;
@@ -1,6 +1,7 @@
1
1
  import type { FrameworkAugment, KoaApp, KoaAppExtensions, KoaRouter } from "../packages/core/index";
2
2
  import type { DefaultAppConfig } from "../config/config.default";
3
3
  import type getProjectController from "./controller/project";
4
+ import type getSSRController from "./controller/ssr";
4
5
  import type getViewController from "./controller/view";
5
6
  import type getFetch from "./extends/$fetch";
6
7
  import type getCrypto from "./extends/crypto";
@@ -20,6 +21,7 @@ declare module '../packages/core/index' {
20
21
  }
21
22
  interface IControllerAugmented {
22
23
  project: GetInstance<typeof getProjectController>;
24
+ ssr: GetInstance<typeof getSSRController>;
23
25
  view: GetInstance<typeof getViewController>;
24
26
  }
25
27
  interface IExtendsAugmented {
@@ -0,0 +1,56 @@
1
+ import type { FSWatcher } from "chokidar";
2
+ import { type ResolveFEOutDirOptions } from "../ssrSharedData/outputPaths";
3
+ import type { SSREntriesConfig, SSREntriesMode } from "./entryCollect";
4
+ export interface BuildSSROptions extends ResolveFEOutDirOptions {
5
+ /**
6
+ * Additional or replacement SSR entry map.
7
+ *
8
+ * By default entries are merged with auto-discovered frame/business ssr/apps entries,
9
+ * and configured keys override scanned entries with the same name.
10
+ */
11
+ ssrEntries?: SSREntriesConfig;
12
+ /**
13
+ * - merge: auto-discovered entries + configured entries, configured wins.
14
+ * - replace: only configured entries are used.
15
+ */
16
+ ssrEntriesMode?: SSREntriesMode;
17
+ /**
18
+ * Additional packages that should be bundled into the SSR server output.
19
+ */
20
+ ssrNoExternal?: string[];
21
+ /**
22
+ * Compress CSR html when buildSSR has to rebuild the shared browser client.
23
+ * Defaults to the current buildFE setting when buildFE was called earlier in the same process.
24
+ */
25
+ minifyHtml?: boolean;
26
+ }
27
+ export interface WatchSSRFilesOptions extends BuildSSROptions {
28
+ debounceMs?: number;
29
+ }
30
+ /**
31
+ * 扫描业务和框架 ssr/apps/ 下的 .entry.* 文件。
32
+ * 默认同时合并框架和业务入口;重名时业务优先。
33
+ * 显式 ssrEntries 默认继续合并,并覆盖同名自动入口;ssrEntriesMode: 'replace' 时只使用显式入口。
34
+ */
35
+ export declare function ssrEntries(options?: BuildSSROptions): Record<string, string>;
36
+ /**
37
+ * SSR server bundle 输出目录
38
+ */
39
+ export declare function ssrServerOutDir(options?: BuildSSROptions): string;
40
+ /**
41
+ * SSR client bundle 输出目录
42
+ */
43
+ export declare function ssrClientOutDir(options?: BuildSSROptions): string;
44
+ /**
45
+ * SSR client manifest 私有输出目录
46
+ */
47
+ export declare function ssrManifestOutDir(options?: BuildSSROptions): string;
48
+ /**
49
+ * SSR 完整构建流程
50
+ */
51
+ export declare function buildSSR(options?: BuildSSROptions): Promise<void>;
52
+ /**
53
+ * 开发态监听 SSR 入口目录。
54
+ * Vite build 串行执行;构建期间的新变更会在当前构建结束后补跑一次。
55
+ */
56
+ export declare function watchSSRFiles(options?: WatchSSRFilesOptions): Promise<FSWatcher>;