@_tc/template-core 0.2.12 → 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 +48 -5
  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
package/AGENT_README.md CHANGED
@@ -8,8 +8,9 @@ TemplateCore 是一个 TypeScript + Koa + React 的后台框架包。它提供
8
8
 
9
9
  - Koa 服务启动和约定式后端加载。
10
10
  - 内置 Dashboard、Schema CRUD 页面和 React UI 组件库。
11
- - `model/` 配置驱动的菜单、项目和 CRUD 页面。
11
+ - `models/` 配置驱动的菜单、项目和 CRUD 页面。
12
12
  - 前端构建 `buildFE()` 输出服务端可渲染的 `.entry.tpl`,并写入 `FEBuildKey` 供 HTML ETag 缓存失效使用。
13
+ - SSR 页面构建 `buildSSR()` 输出 server/client 双产物,默认通过 `/fessr/:page` 服务端渲染。
13
14
  - 消费方 Node/backend 构建 `buildBE()`。
14
15
  - 类型扩展机制,用于扩展 SchemaForm 字段、SchemaTable 单元格渲染组件、CallCom 组件和 Koa app 类型。
15
16
 
@@ -18,16 +19,20 @@ TemplateCore 是一个 TypeScript + Koa + React 的后台框架包。它提供
18
19
  | 入口 | 用途 |
19
20
  | --- | --- |
20
21
  | `@_tc/template-core` | `serverStart`、`baseFn`、Koa/Controller/Service 类型。 |
21
- | `@_tc/template-core/bundler` | `buildFE()`、`buildBE()`。 |
22
- | `@_tc/template-core/fe` | 前端初始化、动态组件渲染辅助、请求方法、Dashboard/Schema 类型、token 工具、RAF 计时器、共享状态、业务前端组件。 |
22
+ | `@_tc/template-core/bundler` | `buildFE()`、`buildBE()`、`buildSSR()`、`watchSSRFiles()`。 |
23
+ | `@_tc/template-core/ssr` | `SSRPropsContext`、`SSRPageMetaResolver`、`StreamingRender`、`useSuspensePromise`。 |
24
+ | `@_tc/template-core/ssr/createSSREntry` | SSR 页面客户端 hydration 工厂。 |
25
+ | `@_tc/template-core/ssr/components` | SSR 组件汇总入口,导出 `StreamingRender`。 |
26
+ | `@_tc/template-core/ssr/hooks` | SSR hooks 汇总入口,导出 `useSuspensePromise`。 |
27
+ | `@_tc/template-core/fe` | 前端初始化、动态组件渲染辅助、请求方法、Dashboard/Schema 类型、token 工具、RAF 计时器、共享状态、项目侧前端组件。 |
23
28
  | `@_tc/template-core/fe/main` | 前端初始化入口。 |
24
29
  | `@_tc/template-core/fe/common/request` | 请求实例、请求方法和请求类型的显式子路径。 |
25
30
  | `@_tc/template-core/fe/rc` | React UI 组件和 SchemaForm 组件。 |
26
31
  | `@_tc/template-core/fe/rc/hooks` | React hooks 汇总入口。 |
27
32
  | `@_tc/template-core/fe/tailwind_ui.css` | 内置前端/UI 全局样式。 |
28
- | `@_tc/template-core/model` | `ModelDataType` 等 model 配置类型。 |
33
+ | `@_tc/template-core/models` | `ModelDataType` 等 models 配置类型。 |
29
34
 
30
- ## 2. 最小业务项目
35
+ ## 2. 最小使用方项目
31
36
 
32
37
  推荐结构:
33
38
 
@@ -40,11 +45,13 @@ my-admin/
40
45
  │ └── product.ts
41
46
  ├── config/
42
47
  │ └── config.default.ts
43
- ├── model/
48
+ ├── models/
44
49
  │ └── product/
45
50
  │ ├── mode.ts
46
51
  │ └── project/
47
52
  │ └── demo.ts
53
+ ├── ssr/
54
+ │ └── apps/ # SSR 页面入口,可选
48
55
  └── index.ts
49
56
  ```
50
57
 
@@ -86,7 +93,7 @@ export default {
86
93
  }
87
94
  ```
88
95
 
89
- `auth.ATKey` / `auth.RTKey` 是业务鉴权中间件读取短 token 和刷新 token header 的默认约定;默认分别是 `Authorization` / `RT`。
96
+ `auth.ATKey` / `auth.RTKey` 是项目鉴权中间件读取短 token 和刷新 token header 的默认约定;默认分别是 `Authorization` / `RT`。
90
97
 
91
98
  `resourceCacheTimeMs` 控制生产环境静态资源缓存时间,单位是 ms,默认 5 分钟。
92
99
 
@@ -96,24 +103,25 @@ export default {
96
103
  http://localhost:9000/dash?projk=demo
97
104
  ```
98
105
 
99
- `projk` 对应 `model/{modelKey}/project/{projectKey}.ts` 里的 `projectKey`,运行时按 project key 全局查找,建议保持全局唯一。
106
+ `projk` 对应 `models/{modelKey}/project/{projectKey}.ts` 里的 `projectKey`,运行时按 project key 全局查找,建议保持全局唯一。
100
107
 
101
108
  ## 3. 后端约定
102
109
 
103
- `serverStart({ baseDir })` 会按目录自动加载业务代码;`model/` 由内置 project service 通过 `modelLoader(app)` 读取,不会在 `serverStart` 阶段直接挂到 `app.model`:
110
+ `serverStart({ baseDir })` 会按目录自动加载项目代码;`models/` 由内置 project service 通过 `modelLoader(app)` 读取,不会在 `serverStart` 阶段直接挂到 `app.model`:
104
111
 
105
112
  ```text
106
113
  app/controller/**/*.(js|ts) -> app.controller
107
114
  app/service/**/*.(js|ts) -> app.service
108
115
  app/middlewares/**/*.(js|ts) -> app.middlewares
109
- app/middleware.(js|ts) -> 全局中间件编排,按 frame -> business 顺序执行
116
+ app/middleware.(js|ts) -> 全局中间件编排,按包内置 -> 使用方项目顺序执行
110
117
  app/router/**/*.(js|ts) -> Koa router
111
118
  app/router-guard.(js|ts) -> 兜底路由守卫
112
119
  app/router-schema/**/*.(js|ts) -> app.routerSchema
113
120
  app/extends/*.(js|ts) -> app.extends
114
121
  config/config.default.(js|ts) -> app.config
115
122
  config/config.{env}.(js|ts) -> app.config
116
- model/**/*.(js|ts) -> 内置 project service 读取的项目模型配置
123
+ models/**/*.(js|ts) -> 内置 project service 读取的项目模型配置
124
+ ssr/apps/**/*.entry.(js|jsx|ts|tsx) -> SSR 页面入口,可选
117
125
  ```
118
126
 
119
127
  常用后端类型:
@@ -185,7 +193,7 @@ export default ((app, router) => {
185
193
  - 每个 `app/router/*.ts` 文件都会获得独立的 `koa-router` 实例。
186
194
  - 可以通过 `router.level = number` 控制挂载顺序,数值越小越早挂载。
187
195
  - 默认 `level` 是 `0`,框架兜底 router 是 `99`。
188
- - 通配、兜底、重定向类路由建议设置较大的 `level`,避免抢先匹配业务 API。
196
+ - 通配、兜底、重定向类路由建议设置较大的 `level`,避免抢先匹配项目 API。
189
197
 
190
198
  ```ts
191
199
  import type { RouterFN } from '@_tc/template-core'
@@ -217,21 +225,21 @@ export default (_app: KoaApp) => {
217
225
 
218
226
  - `app.extends.$fetch`:Node 侧 axios 风格 fetch 实例。
219
227
  - `app.extends.crypto`:Node 侧加密辅助方法,支持 base64url 编解码、HMAC 签名、签名 payload 和常量时间比较。
220
- - `app.extends.db`:默认 SQLite 数据存储,可用业务 `app/extends/db.ts` 覆盖。
228
+ - `app.extends.db`:默认 SQLite 数据存储,可用项目侧 `app/extends/db.ts` 覆盖。
221
229
 
222
- ## 4. model 配置
230
+ ## 4. models 配置
223
231
 
224
- `model` 是内置 Dashboard 和 Schema CRUD 的数据源。
232
+ `models/` 是内置 Dashboard 和 Schema CRUD 的数据源。
225
233
 
226
234
  ```text
227
- model/{modelKey}/mode.ts -> 模型模板
228
- model/{modelKey}/project/{projectKey}.ts -> 项目覆盖
235
+ models/{modelKey}/mode.ts -> 模型基础配置
236
+ models/{modelKey}/project/{projectKey}.ts -> 项目覆盖
229
237
  ```
230
238
 
231
239
  `mode.ts` 示例:
232
240
 
233
241
  ```ts
234
- import type { ModelDataType } from '@_tc/template-core/model'
242
+ import type { ModelDataType } from '@_tc/template-core/models'
235
243
 
236
244
  const model: ModelDataType = {
237
245
  mode: 'MB',
@@ -349,7 +357,7 @@ export default {
349
357
  - `project` 会继承同目录上层 `mode`。
350
358
  - 对象递归合并,`project` 覆盖 `mode`。
351
359
  - 数组按 `key` 合并:同 key 覆盖,不同 key 新增。
352
- - `model/index.ts` 和 `model/index.js` 会被 loader 跳过。
360
+ - `models/index.ts` 和 `models/index.js` 会被 loader 跳过。
353
361
 
354
362
  常见菜单模块:
355
363
 
@@ -429,7 +437,7 @@ import { Button, DataTable, Form, Input, Modal, Select } from '@_tc/template-cor
429
437
  - 多语言:`addLanguageResources()` 追加或新增某语种文案,`setLanguage()` 切换语言。React render 中用 `useText()`,非 React 工具代码用 `getText()`;`$i18n::` 前缀会被去掉后查询资源,无前缀字符串会按原 key 查询,未命中时原样返回。配置文案推荐写 `$i18n::...`,也可写普通字符串。
430
438
  - 主题:`ThemeSwitch` 会同步根节点 `dark` class 和 `localStorage`。
431
439
  - `Input type="password"` 会自动显示密码显隐按钮;`allowClear` 不作用于密码输入。
432
- - RAF 风格计时器由 `@tc/common/rafTimer` 提供,浏览器优先使用 RAF,Node/SSR 自动降级到 `setTimeout`。
440
+ - RAF 风格计时器通过 `@_tc/template-core/fe` 对外提供,浏览器优先使用 RAF,Node/SSR 自动降级到 `setTimeout`。
433
441
 
434
442
  不要直接依赖 `frontend/src/...`、`packages/react/ui/...` 这类包内部路径。
435
443
 
@@ -490,7 +498,7 @@ frontend/report/index.html yes
490
498
  frontend/report/report.html yes
491
499
  ```
492
500
 
493
- 不要在插槽文件里写 `<!DOCTYPE html>`、`<html>`、`<body>` 或 `<div id="root"></div>`。页面外壳由 TemplateCore 的 `app/view/entry.tpl` 统一生成,`window._basePath`、`window._projKey`、`window._signKey`、`window.appOptions` 也由它注入。构建器会把合成后的临时 HTML 写入 `.tc-entry-html/`,这个目录不要提交,也不要在业务代码中引用。
501
+ 不要在插槽文件里写 `<!DOCTYPE html>`、`<html>`、`<body>` 或 `<div id="root"></div>`。页面外壳由 TemplateCore 的 `app/view/entry.tpl` 和 `app/html/shell.ts` 共同生成,`window._basePath`、`window._projKey`、`window._signKey`、`window._renderMode`、`window._isSSR`、`window.appOptions` 由共享 shell 片段注入。构建器会把合成后的临时 HTML 写入 `.tc-entry-html/`,这个目录不要提交,也不要在应用代码中引用。
494
502
 
495
503
  ## 6. 构建
496
504
 
@@ -504,9 +512,20 @@ await buildFE('prod', { output: 'run' })
504
512
  await buildFE('prod', { output: 'run', minifyHtml: true })
505
513
  ```
506
514
 
507
- `buildFE('dev')` 是构建一次并监听业务 `frontend/` 变化后重建,不是 Vite dev server/HMR。
515
+ `buildFE('dev')` 是构建一次并监听使用方 `frontend/` 变化后重建,不是 Vite dev server/HMR。
508
516
  `minifyHtml: true` 会压缩最终 `.tpl` 模板输出;构建完成后会写入 `FEBuildKey`,服务端渲染 HTML 时用它判断本地 HTML ETag 缓存是否需要清空。
509
517
 
518
+ SSR 页面构建:
519
+
520
+ ```ts
521
+ import { buildSSR, watchSSRFiles } from '@_tc/template-core/bundler'
522
+
523
+ await buildSSR({ baseDir, output: 'run' })
524
+ await watchSSRFiles({ baseDir, output: 'run' })
525
+ ```
526
+
527
+ SSR 入口约定为 `ssr/apps/{page}/{page}.entry.tsx`,客户端 hydration 工厂从 `@_tc/template-core/ssr/createSSREntry` 引入。页面可导出静态字符串或函数式 `pageTitle` / `pageDescription`,函数会在 `getServerProps()` 后执行,入参包含 `params`、`query`、`path`、`app`、`ctx` 和 `props`。组件级流式异步数据用 `@_tc/template-core/ssr/components` 的 `StreamingRender`;底层 Suspense Promise hook 从 `@_tc/template-core/ssr/hooks` 引入。`buildSSR()` 会输出私有 `{ssrPrivateRoot}/ssr-server/{page}.mjs`、私有 `{ssrPrivateRoot}/ssr-manifest/manifest.json`,SSR hydration 入口并入 FE browser build,页面默认通过 `/fessr/:page` 访问,浏览器静态资源走普通 `/dist/assets/*`;`/dist/ssr-server/*` 和 `/dist/.vite/*` 会被拦截为 404。成功 SSR 会用 React streaming bootstrap 动态 import 客户端入口,带 `Suspense` 边界的 shell 可以先启动 hydration,pending 内容继续 stream。入口文件会被 server/client 两次构建,顶层代码必须同时兼容 Node 和浏览器。`getServerProps()` 运行在 Node 侧,不要直接复用依赖 `window` / `localStorage` 的前端 API 层;服务端请求逻辑拆到 `*.server.ts` 并在 `getServerProps()` 内动态导入。`StreamingRender` 的 `getData()` 返回值会写入 HTML,不能包含 token、密钥等敏感信息;客户端找不到注入数据时也可能执行 `getData()`,需要兼容浏览器 fallback。
528
+
510
529
  Node/backend 构建:
511
530
 
512
531
  ```ts
@@ -517,7 +536,7 @@ await buildBE()
517
536
 
518
537
  `buildBE()` 默认:
519
538
 
520
- - 构建当前工作目录的 `index.ts`、`index.js`、`app`、`config`、`model`。
539
+ - 构建当前工作目录的 `index.ts`、`index.js`、`app`、`config`、`models`。
521
540
  - 输出到 `dist`。
522
541
  - 输出格式为 `cjs`。
523
542
  - 外部化 Node 内置模块和 npm 包。
@@ -528,13 +547,13 @@ await buildBE()
528
547
 
529
548
  ```ts
530
549
  await buildBE({
531
- input: ['app', 'config', 'model/index.ts'],
550
+ input: ['app', 'config', 'models/index.ts'],
532
551
  outDir: 'dist',
533
552
  format: ['es', 'cjs'],
534
553
  dts: true,
535
554
  alias: {
536
555
  '@app': './app',
537
- '@model': './model',
556
+ '@model': './models',
538
557
  },
539
558
  })
540
559
  ```
@@ -546,7 +565,7 @@ await buildBE({
546
565
  import { buildBE } from '@_tc/template-core/bundler'
547
566
 
548
567
  await buildBE({
549
- input: ['index.ts', 'index.js', 'app', 'config', 'model'],
568
+ input: ['index.ts', 'index.js', 'app', 'config', 'models'],
550
569
  outDir: 'dist',
551
570
  format: 'cjs',
552
571
  })
@@ -559,7 +578,7 @@ await buildBE({
559
578
  import chokidar from 'chokidar'
560
579
  import { buildBE } from '@_tc/template-core/bundler'
561
580
 
562
- const input = ['index.ts', 'index.js', 'app', 'config', 'model']
581
+ const input = ['index.ts', 'index.js', 'app', 'config', 'models']
563
582
 
564
583
  let building = false
565
584
  let pending = false
@@ -613,7 +632,7 @@ chokidar
613
632
 
614
633
  新增一个 Schema CRUD 页面:
615
634
 
616
- 1. 在 `model/{modelKey}/mode.ts` 或 `project/{projectKey}.ts` 添加菜单项。
635
+ 1. 在 `models/{modelKey}/mode.ts` 或 `project/{projectKey}.ts` 添加菜单项。
617
636
  2. 菜单项使用 `menuType: 'module'`、`moduleType: 'schema'`。
618
637
  3. `schemaConfig.api` 指向后端资源 API。
619
638
  4. 字段在 `schema.properties` 中配置 `tableOption`、`searchOption`、`createFormOption`、`editFormOption`、`detailPanelOption`。
@@ -621,7 +640,7 @@ chokidar
621
640
 
622
641
  新增自定义前端页面:
623
642
 
624
- 1. 在业务 `frontend/` 下添加入口 `*.entry.tsx`。
643
+ 1. 在项目 `frontend/` 下添加入口 `*.entry.tsx`。
625
644
  2. 需要样式时引入 `@_tc/template-core/fe/tailwind_ui.css`。
626
645
  3. 如需改 head 或 root 前后内容,只添加入口同目录 `.html` 插槽文件,不要写完整 HTML。
627
646
  4. 在 `model` 菜单中使用 `moduleType: 'custom'`,让 `customConfig.path` 指向页面路径。
@@ -630,11 +649,11 @@ chokidar
630
649
  扩展前端类型或组件:
631
650
 
632
651
  1. SchemaForm 字段类型、SchemaTable 单元格渲染组件、CallCom 组件、Koa app 类型都支持 TypeScript 声明合并。
633
- 2. 运行时组件通常放在业务 `frontend/extended/`。
652
+ 2. 运行时组件通常放在项目 `frontend/extended/`。
634
653
  3. 表格单元格渲染组件注册到 `frontend/extended/SchemaPage/SchemaTable/data.ts`,字段上用 `tableOption.renderComponent` 和 `renderComponentProps`。
635
654
  4. Dashboard 扩展点包括 `frontend/extended/dash/init.ts`、`frontend/extended/dash/customRoutes.tsx`、`frontend/extended/dash/components.tsx`、`frontend/extended/dash/routeGuard.ts`。
636
655
  5. `dash/init` 在 React 渲染前执行,适合注册 axios 拦截器等全局初始化逻辑;类型是 `DashInit`。
637
- 6. `dash/routeGuard` 用来判断登录。返回登录页 URL 字符串时,Dashboard 用 `window.location.href` 跳转;`DashRouteGuardResult` 是 `string | undefined`,`undefined`(包括已登录分支的隐式返回)会打断 Dashboard 内置重定向,业务方可自行跳转。
656
+ 6. `dash/routeGuard` 用来判断登录。入参包含 `renderMode: 'csr' | 'ssr'` 和 `isSSR`;返回登录页 URL 字符串时,Dashboard 用 `window.location.href` 跳转;`DashRouteGuardResult` 是 `string | undefined`,`undefined`(包括已登录分支的隐式返回)会打断 Dashboard 内置重定向,项目侧可自行跳转。
638
657
  7. 自定义入口的 `initApp` 支持 `beforeRender` / `afterRender`,分别在 React 渲染前和首次渲染提交后触发。
639
658
  8. 优先查看公开入口 `.d.ts` 和 npm 包根目录 `README.md`;如果当前环境是源码仓库,再继续读 `docs/type-extension.md` 和 `docs/schema-form.md`。
640
659
 
@@ -647,10 +666,10 @@ chokidar
647
666
  | 完整安装和使用说明 | npm 包根目录 `README.md` |
648
667
  | 生成项目、model、CRUD | npm 包:`.skills/tc-generator/SKILL.md`;源码仓库:`skills/tc-generator/SKILL.md` |
649
668
  | 组件选型和用法 | npm 包:`.skills/tc-component-usage-skills/SKILL.md`;源码仓库:`skills/tc-component-usage-skills/SKILL.md` |
650
- | model/schema 配置细节 | npm 包:`.skills/tc-generator/reference/model-schema.md`;源码仓库:`skills/tc-generator/reference/model-schema.md` |
669
+ | models/schema 配置细节 | npm 包:`.skills/tc-generator/reference/model-schema.md`;源码仓库:`skills/tc-generator/reference/model-schema.md` |
651
670
  | 完整 CRUD 示例 | npm 包:`.skills/tc-generator/reference/example.md`;源码仓库:`skills/tc-generator/reference/example.md` |
652
671
  | 可复制项目骨架 | npm 包:`.skills/tc-generator/reference/project-template/`;源码仓库:`skills/tc-generator/reference/project-template/` |
653
672
  | UI 组件现场预览 | 启动服务后访问 `/ui-components` |
654
673
  | 已安装包的类型细节 | 查看对应公开入口的 `.d.ts` 文件 |
655
674
 
656
- 如果当前环境是源码仓库而不是 npm 安装目录,还可以继续读 `docs/`、`frontend/README.md`、`model/README.md`、`bundler/README.md` 和 `BUILD.md`。
675
+ 如果当前环境是源码仓库而不是 npm 安装目录,还可以继续读 `docs/`、`frontend/README.md`、`models/README.md`、`bundler/README.md`、`ssr/README.md` 和 `BUILD.md`。
package/CHANGE.md CHANGED
@@ -1,3 +1,46 @@
1
+ # V0.3
2
+
3
+ TemplateCore v0.3 的首个版本,核心是正式引入 SSR V1。这个版本提供从页面约定、构建产物、运行时渲染到示例文档的一整套 SSR 基础能力。
4
+
5
+ ## SSR V1
6
+
7
+ - 新增根级 `ssr/apps/{page}/{page}.entry.tsx` 页面入口约定,SSR 页面与原有 CSR 页面目录分离。
8
+ - 新增 `buildSSR()` / `watchSSRFiles()`,从 `@_tc/template-core/bundler` 对外提供 SSR server/client 双产物构建与监听能力。
9
+ - 新增稳定入口 `@_tc/template-core/ssr/createSSREntry`,用于 SSR 页面客户端 hydration。
10
+ - 新增 `@_tc/template-core/ssr`、`@_tc/template-core/ssr/components`、`@_tc/template-core/ssr/hooks` 等稳定入口,导出 `SSRPropsContext`、`SSRPageMetaResolver`、`StreamingRender`、`useSuspensePromise` 等 SSR 类型与辅助能力。
11
+ - SSR 运行时新增默认 `/fessr/:page` 页面路由,并支持通过 `serverStart({ ssrPageBasePath })` 自定义 SSR 页面前缀。
12
+ - SSR controller 支持加载页面 server bundle、调用可选 `getServerProps()`、解析静态或函数式 `pageTitle` / `pageDescription`、注入 `window.__SSR_DATA__`、解析 manifest preload,并通过 React streaming bootstrap 动态 import hydration 入口。
13
+ - SSR / CSR HTML shell 会注入 `window._renderMode` 和 `window._isSSR`,Dash 共用路由守卫可按渲染模式分别处理跳转。
14
+ - 新增 SSR document shell 与错误 fallback,非法页面、bundle 缺失、render / getServerProps 异常都会返回统一 HTML 错误页。
15
+ - SSR 成功渲染支持 shell 到达后提前启动客户端入口;带 `Suspense` 边界的 pending 内容可继续流式补齐。
16
+
17
+ ## 构建与产物
18
+
19
+ - SSR 构建产物固定输出到私有 `{ssrPrivateRoot}/ssr-server`、私有 `{ssrPrivateRoot}/ssr-manifest`,SSR hydration 入口并入 FE browser build。
20
+ - SSR client 静态资源通过普通 `/dist/assets/*` 对外服务,并可与 CSR 入口共享 chunk。
21
+ - 发布构建采用独立临时目录生成 SSR 产物,并只同步 `ssr` 子目录,保持 FE/Common/UI 等既有发布产物独立。
22
+ - SSR 静态资源按普通 public `/dist/assets/*` 处理,server bundle/manifest 按对应私有 `{publicPath}/../.tc/ssr` 定位,支持 business/frame/additional public paths。
23
+ - CSR 入口扫描与 SSR 入口扫描边界独立,V1 统一使用 `ssr/apps` 入口约定。
24
+
25
+ ## 示例、文档与验证
26
+
27
+ - 新增内置 SSR 示例页面 `demo`、`server-data`、`ui-components`,覆盖基础 hydration、服务端数据和组件预览场景。
28
+ - 对外文档补充 SSR 使用方式:`ssr/apps` 目录、`buildSSR/watchSSRFiles`、`createSSREntry`、`/fessr` 访问路径和 SSR 双端边界。
29
+ - AI/Agent 文档补充 SSR 入口、构建链路、运行时文件和生成器约束。
30
+ - 补充 SSR 自动化测试,覆盖入口收集、输出路径、hydration、manifest、HTML shell、错误 fallback 和静态资源映射。
31
+
32
+ # V0.2.13-beta
33
+
34
+ ## 功能
35
+
36
+ - 文档调整
37
+ - skill 调整语义
38
+ - tc-generator skill 增加判断,遇到需要&不存在的 comType 直接跳过&输出
39
+
40
+ ## 修复
41
+
42
+ - 修复 DataTable loading 骨架屏覆盖时真实表格内容露出的问题
43
+
1
44
  # V0.2.x
2
45
 
3
46
  ## 功能
@@ -11,13 +54,13 @@
11
54
  - 补充 `ControllerFN`、`Ctx`、`MiddlewareFN`、`RouterFN`、`ServiceFN` 等后端公开类型说明
12
55
  - 同步更新 `README.agent.md`,补充 AI 助手侧后端类型和 `ctx.reqData` 使用说明
13
56
  - 新增通用 RAF 风格计时器工具 `rafSetTimeout`、`rafSetInterval`、`rafClearTimeout`、`rafClearInterval` 和 `clearRafTimer`,缺少 RAF 时自动降级到 `setTimeout`
14
- - `packages/react/hooks/useRefState` 新增可选 `delayTiming`,支持延迟提交 state 并复用 `@tc/common/rafTimer`
57
+ - `packages/react/hooks/useRefState` 新增可选 `delayTiming`,支持延迟提交 state 并复用包内 RAF 风格计时器
15
58
  - 页面渲染命中 HTML ETag 缓存时返回 `304 Not Modified`
16
59
  - 新增前端主题工具 `initThemeMode`、`applyThemeMode` 等,默认 Dashboard 渲染前会恢复已保存主题
17
60
  - 发布包新增 `@_tc/template-core/fe/rc/hooks` hooks 汇总入口
18
61
  - `@_tc/template-core/fe` 补充导出 `renderImportComponent` 和 `clearAuthToken`,并同步文档说明前端 token 工具
19
62
  - `@_tc/template-core/fe` 补充语言工具,支持新增语种、追加语种文案、切换当前语言、设置兜底语言和批量设置语言资源
20
- - 新增 SchemaTable 单元格渲染组件扩展,支持内置 `PreviewImage` 和业务侧 `frontend/extended/SchemaPage/SchemaTable/data.ts` 注册
63
+ - 新增 SchemaTable 单元格渲染组件扩展,支持内置 `PreviewImage` 和项目侧 `frontend/extended/SchemaPage/SchemaTable/data.ts` 注册
21
64
  - 完善前后端 i18n:新增请求语言解析、服务端错误翻译工具、前端 `useText`/`getText` 翻译入口和内置语言资源按需注册能力
22
65
  - Date 组件文案接入统一 i18n,并支持注册 `date-fns` 语言包
23
66
  - 重构 UI 组件预览 Demo,拆分 core、date、menu 示例并展示发布包导入路径
@@ -33,13 +76,13 @@
33
76
 
34
77
  # V0.1
35
78
 
36
- TemplateCore 首个可用版本,提供一套基于 TypeScript、Koa、React 和 Vite 的后台框架模板。
79
+ TemplateCore 首个可用版本,提供一套基于 TypeScript、Koa、React 和 Vite 的后台框架 npm 包。
37
80
 
38
81
  ## 功能
39
82
 
40
83
  - Koa 服务启动入口,支持按目录自动加载 `controller`、`service`、`router`、`middlewares`、`router-schema`、`extends` 和 `config`。
41
- - 支持框架内置 `app/` 与业务项目 `app/` 双层加载,方便项目侧扩展和覆盖。
42
- - 通过 `model/` 配置生成后台菜单、路由和 Schema CRUD 页面。
84
+ - 支持框架内置 `app/` 与使用方项目 `app/` 双层加载,方便项目侧扩展和覆盖。
85
+ - 通过 `models/` 配置生成后台菜单、路由和 Schema CRUD 页面。
43
86
  - 内置 React Dashboard、Schema 页面和基础 UI 组件库。
44
87
  - 前端支持多语言配置,可在 model / Schema 中使用 `$i18n::...`。
45
88
  - 提供 `buildFE` 前端构建能力,支持开发模式和生产构建。