@_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.
- package/.skills/tc-component-usage-skills/SKILL.md +7 -9
- package/.skills/tc-component-usage-skills/reference/component-api.md +2 -2
- package/.skills/tc-component-usage-skills/reference/examples.md +9 -9
- package/.skills/tc-component-usage-skills/reference/patterns.md +5 -5
- package/.skills/tc-component-usage-skills/reference/template-core-frontend.md +1 -1
- package/.skills/tc-generator/SKILL.md +30 -14
- package/.skills/tc-generator/reference/example.md +4 -4
- package/.skills/tc-generator/reference/model-schema.md +9 -5
- package/.skills/tc-generator/reference/runtime-extensions.md +9 -7
- package/AGENT_README.md +52 -33
- package/CHANGE.md +48 -5
- package/README.md +147 -46
- package/cjs/app/controller/ssr.js +1 -0
- package/cjs/app/controller/view.js +1 -1
- package/cjs/app/html/shell.js +36 -0
- package/cjs/app/middleware.js +1 -1
- package/cjs/app/router/ssr.js +1 -0
- package/cjs/app/router/view.js +1 -1
- package/cjs/app/ssr/html.js +17 -0
- package/cjs/app/ssr/manifest.js +2 -0
- package/cjs/app/view/entry.tpl +2 -37
- package/cjs/bundler/buildBE.js +1 -1
- package/cjs/bundler/buildSSR.js +1 -0
- package/cjs/bundler/entryCollect.js +1 -0
- package/cjs/bundler/feSharedConfig.js +1 -0
- package/cjs/bundler/index.js +1 -1
- package/cjs/bundler/ssrClientManifest.js +1 -0
- package/cjs/bundler/ssrEntries.js +1 -0
- package/cjs/bundler/utils.js +3 -3
- package/cjs/packages/common/i18n/index.js +1 -1
- package/cjs/packages/common/index.js +1 -1
- package/cjs/packages/common/ssr/hydration.js +1 -0
- package/cjs/packages/common/ssr/index.js +1 -0
- package/cjs/packages/core/index.js +1 -1
- package/cjs/packages/core/loader/controller.js +1 -1
- package/cjs/packages/core/loader/extend.js +1 -1
- package/cjs/packages/core/loader/merge.js +1 -0
- package/cjs/packages/core/loader/middleware.js +1 -1
- package/cjs/packages/core/loader/model.js +1 -1
- package/cjs/packages/core/loader/router-schema.js +1 -1
- package/cjs/packages/core/loader/router.js +1 -1
- package/cjs/packages/core/loader/service.js +1 -1
- package/cjs/packages/core/paths.js +1 -1
- package/cjs/scripts/vite-build/build.js +3 -3
- package/cjs/scripts/vite-build/collect.js +1 -1
- package/cjs/scripts/vite-build/dts.js +1 -1
- package/cjs/scripts/vite-build/normalize.js +1 -1
- package/cjs/ssrSharedData/outputPaths.js +1 -0
- package/esm/app/controller/ssr.js +215 -0
- package/esm/app/controller/view.js +26 -25
- package/esm/app/html/shell.js +69 -0
- package/esm/app/middleware.js +18 -9
- package/esm/app/router/ssr.js +8 -0
- package/esm/app/router/view.js +5 -4
- package/esm/app/ssr/html.js +90 -0
- package/esm/app/ssr/manifest.js +47 -0
- package/esm/app/view/entry.tpl +2 -37
- package/esm/bundler/buildBE.js +1 -1
- package/esm/bundler/buildSSR.js +126 -0
- package/esm/bundler/entryCollect.js +45 -0
- package/esm/bundler/feSharedConfig.js +143 -0
- package/esm/bundler/index.js +4 -2
- package/esm/bundler/ssrClientManifest.js +14 -0
- package/esm/bundler/ssrEntries.js +13 -0
- package/esm/bundler/utils.js +248 -255
- package/esm/packages/common/i18n/index.js +5 -1
- package/esm/packages/common/index.js +4 -2
- package/esm/packages/common/ssr/hydration.js +55 -0
- package/esm/packages/common/ssr/index.js +20 -0
- package/esm/packages/core/index.js +42 -42
- package/esm/packages/core/loader/controller.js +11 -9
- package/esm/packages/core/loader/extend.js +20 -16
- package/esm/packages/core/loader/merge.js +7 -0
- package/esm/packages/core/loader/middleware.js +11 -12
- package/esm/packages/core/loader/model.js +2 -2
- package/esm/packages/core/loader/router-schema.js +22 -15
- package/esm/packages/core/loader/router.js +32 -26
- package/esm/packages/core/loader/service.js +11 -9
- package/esm/packages/core/paths.js +9 -1
- package/esm/scripts/vite-build/build.js +88 -83
- package/esm/scripts/vite-build/collect.js +31 -27
- package/esm/scripts/vite-build/dts.js +1 -1
- package/esm/scripts/vite-build/normalize.js +6 -3
- package/esm/ssrSharedData/outputPaths.js +33 -0
- package/fe/frontend/apps/dash/Dashboard.d.ts +5 -1
- package/fe/frontend/apps/dash/Dashboard.js +22 -13
- package/fe/frontend/apps/dash/types.d.ts +2 -0
- package/fe/frontend/src/api/baseInfo.d.ts +1 -1
- package/fe/frontend/src/common/CRUD/CRUD.js +1 -1
- package/fe/frontend/src/common/CRUD/index.js +1 -1
- package/fe/frontend/src/common/menu.d.ts +1 -1
- package/fe/frontend/src/common/menu.js +8 -7
- package/fe/frontend/src/common/request.js +1 -1
- package/fe/frontend/src/common/schemaForm.d.ts +1 -0
- package/fe/frontend/src/common/schemaForm.js +12 -0
- package/fe/frontend/src/components/AsyncSelect/AsyncSelect.d.ts +1 -1
- package/fe/frontend/src/components/Router/basename.d.ts +3 -0
- package/fe/frontend/src/components/Router/basename.js +11 -0
- package/fe/frontend/src/components/Router/index.d.ts +1 -1
- package/fe/frontend/src/components/Router/index.js +3 -1
- package/fe/frontend/src/defaultPages/SchemaPage/components/CallCom/builtIn.d.ts +1 -1
- package/fe/frontend/src/defaultPages/SchemaPage/components/SchemaTable/data.d.ts +1 -1
- package/fe/frontend/src/defaultPages/SchemaPage/schemaType.d.ts +2 -2
- package/fe/frontend/src/defaultPages/SchemaPage/utils/schemaConversion.d.ts +1 -1
- package/fe/frontend/src/defaultPages/SidebarSlotPage/SidebarSlotContainer.d.ts +2 -1
- package/fe/frontend/src/defaultPages/SidebarSlotPage/SidebarSlotContainer.js +8 -4
- package/fe/frontend/src/defaultPages/SidebarSlotPageTmp.js +2 -1
- package/fe/frontend/src/exportStore.js +2 -2
- package/fe/frontend/src/hooks/useCurrentMenuData.d.ts +1 -1
- package/fe/frontend/src/hooks/useCurrentMenuData.js +2 -2
- package/fe/frontend/src/hooks/useRouterParams.js +4 -3
- package/fe/frontend/src/index.d.ts +1 -0
- package/fe/frontend/src/index.js +4 -3
- package/fe/frontend/src/main.js +2 -0
- package/fe/frontend/src/stores/mode.d.ts +15 -2
- package/fe/frontend/src/stores/mode.js +19 -5
- package/fe/frontend/src/typing/window.d.ts +2 -0
- package/fe/packages/common/LRUCache.js +2 -0
- package/fe/packages/common/array/index.js +37 -0
- package/fe/packages/common/cache/index.js +2 -0
- package/fe/packages/common/guards/index.js +19 -1
- package/fe/packages/common/http/index.js +1 -1
- package/fe/packages/common/i18n/index.js +8 -4
- package/fe/packages/common/i18n/locales.js +1 -1
- package/fe/packages/common/i18n/types.d.ts +1 -0
- package/fe/packages/common/i18n/types.js +0 -0
- package/fe/packages/common/index.d.ts +1 -0
- package/fe/packages/common/index.js +17 -0
- package/fe/packages/common/log/index.js +146 -0
- package/fe/packages/common/number/index.js +11 -0
- package/fe/packages/common/object/filterEmpty.js +2 -1
- package/fe/packages/common/object/filtereEmpty.js +2 -0
- package/fe/packages/common/object/index.js +20 -0
- package/fe/packages/common/ssr/hydration.d.ts +23 -0
- package/fe/packages/common/ssr/hydration.js +88 -0
- package/fe/packages/common/ssr/index.d.ts +8 -0
- package/fe/packages/common/ssr/index.js +52 -0
- package/fe/packages/common/string/index.js +32 -0
- package/fe/packages/common/types/index.js +0 -0
- package/fe/packages/react/hooks/index.d.ts +2 -0
- package/fe/packages/react/hooks/index.js +3 -1
- package/fe/packages/react/hooks/useHydrationData.d.ts +2 -0
- package/fe/packages/react/hooks/useHydrationData.js +23 -0
- package/fe/packages/react/hooks/useSSR.d.ts +6 -0
- package/fe/packages/react/hooks/useSSR.js +46 -0
- package/fe/packages/react/ui/components/DataTable/index.js +16 -15
- package/fe/packages/react/ui/components/Form/SchemaForm/data.d.ts +3 -2
- package/fe/packages/react/ui/components/Form/SchemaForm/data.js +5 -6
- package/fe/packages/react/ui/components/Form/SchemaForm/index.d.ts +1 -0
- package/fe/packages/react/ui/components/Form/SchemaForm/index.js +2 -2
- package/fe/packages/react/ui/components/Form/index.js +2 -1
- package/fe/packages/react/ui/components/Input/Input.js +5 -1
- package/fe/packages/react/ui/components/Popup/Popup.js +6 -1
- package/fe/packages/react/ui/components/index.js +2 -1
- package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo.js +241 -211
- package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo2.js +1 -1
- package/fe/packages/react/ui/i18n/I18nProvider.js +4 -0
- package/fe/packages/react/ui/index.js +2 -1
- package/fe/ssr/apps/dash/dash.entry.d.ts +13 -0
- package/fe/ssr/apps/dash/dash.entry.js +162 -0
- package/fe/ssr/apps/demo/demo.entry.d.ts +13 -0
- package/fe/ssr/apps/demo/demo.entry.js +38 -0
- package/fe/ssr/apps/server-data/server-data.entry.d.ts +26 -0
- package/fe/ssr/apps/server-data/server-data.entry.js +275 -0
- package/fe/ssr/apps/ui-components/ui-components.entry.d.ts +5 -0
- package/fe/ssr/apps/ui-components/ui-components.entry.js +17 -0
- package/fe/ssr/components/StreamingRender/StreamingCache.d.ts +2 -0
- package/fe/ssr/components/StreamingRender/StreamingCache.js +31 -0
- package/fe/ssr/components/StreamingRender/StreamingRender.d.ts +3 -0
- package/fe/ssr/components/StreamingRender/StreamingRender.js +48 -0
- package/fe/ssr/components/StreamingRender/StreamingScript.d.ts +8 -0
- package/fe/ssr/components/StreamingRender/StreamingScript.js +58 -0
- package/fe/ssr/components/StreamingRender/index.d.ts +4 -0
- package/fe/ssr/components/StreamingRender/index.js +5 -0
- package/fe/ssr/components/StreamingRender/type.d.ts +9 -0
- package/fe/ssr/components/StreamingRender/type.js +0 -0
- package/fe/ssr/components/index.d.ts +2 -0
- package/fe/ssr/components/index.js +2 -0
- package/fe/ssr/createSSREntry.d.ts +6 -0
- package/fe/ssr/createSSREntry.js +42 -0
- package/fe/ssr/hooks/index.d.ts +1 -0
- package/fe/ssr/hooks/index.js +2 -0
- package/fe/ssr/hooks/useSuspensePromise.d.ts +1 -0
- package/fe/ssr/hooks/useSuspensePromise.js +31 -0
- package/fe/ssr/index.d.ts +4 -0
- package/fe/ssr/index.js +6 -0
- package/fe/ssr/types.d.ts +13 -0
- package/fe/ssr/types.js +0 -0
- package/{model → models}/frontend/src/typing/window.d.ts +2 -0
- package/{model → models}/packages/common/i18n/types.d.ts +1 -0
- package/{model → models}/packages/common/index.d.ts +1 -0
- package/models/packages/common/ssr/hydration.d.ts +23 -0
- package/models/packages/common/ssr/index.d.ts +8 -0
- package/{model → models}/packages/react/ui/components/Form/SchemaForm/data.d.ts +3 -2
- package/{model → models}/packages/react/ui/components/Form/SchemaForm/index.d.ts +1 -0
- package/package.json +43 -6
- package/types/app/controller/ssr.d.ts +14 -0
- package/types/app/html/shell.d.ts +101 -0
- package/types/app/router/ssr.d.ts +6 -0
- package/types/app/ssr/html.d.ts +53 -0
- package/types/app/ssr/manifest.d.ts +17 -0
- package/types/app/typings.d.ts +2 -0
- package/types/bundler/buildSSR.d.ts +56 -0
- package/types/bundler/entryCollect.d.ts +36 -0
- package/types/bundler/feSharedConfig.d.ts +35 -0
- package/types/bundler/index.d.ts +4 -0
- package/types/bundler/ssrClientManifest.d.ts +4 -0
- package/types/bundler/ssrEntries.d.ts +23 -0
- package/types/bundler/state.d.ts +2 -2
- package/types/bundler/utils.d.ts +35 -2
- package/types/config/config.default.d.ts +10 -0
- package/types/packages/common/i18n/types.d.ts +2 -0
- package/types/packages/common/index.d.ts +1 -0
- package/types/packages/common/ssr/hydration.d.ts +72 -0
- package/types/packages/common/ssr/index.d.ts +34 -0
- package/types/packages/core/loader/merge.d.ts +3 -0
- package/types/packages/core/loader/model.d.ts +2 -2
- package/types/packages/core/paths.d.ts +5 -0
- package/types/packages/core/types.d.ts +10 -1
- package/types/scripts/vite-build/build.d.ts +1 -0
- package/types/scripts/vite-build/types.d.ts +3 -0
- package/types/ssrSharedData/outputPaths.d.ts +59 -0
- package/fe/packages/react/hooks/useWatch.test.js +0 -24
- package/fe/packages/react/ui/assets/table/no-result.js +0 -4
- package/fe/packages/react/ui/components/DataTable/dataTableWidth.test.js +0 -39
- package/fe/packages/react/ui/components/InputNumber/inputNumberUtils.test.js +0 -59
- /package/.skills/tc-generator/reference/project-template/{model → models}/product/mode.js +0 -0
- /package/.skills/tc-generator/reference/project-template/{model → models}/product/project/default.js +0 -0
- /package/fe/{model → models}/types/data/button.d.ts +0 -0
- /package/fe/{model → models}/types/data/component.d.ts +0 -0
- /package/fe/{model → models}/types/data/fetchInfo.d.ts +0 -0
- /package/fe/{model → models}/types/data/schema.d.ts +0 -0
- /package/fe/{model → models}/types/data/search.d.ts +0 -0
- /package/fe/{model → models}/types/index.d.ts +0 -0
- /package/fe/{model → models}/types/menuType.d.ts +0 -0
- /package/fe/{model → models}/types/model.d.ts +0 -0
- /package/{model → models}/frontend/extended/SchemaForm/data.d.ts +0 -0
- /package/{model → models}/frontend/src/common/auth/index.d.ts +0 -0
- /package/{model → models}/frontend/src/common/fetchErrorShow.d.ts +0 -0
- /package/{model → models}/frontend/src/common/language.d.ts +0 -0
- /package/{model → models}/frontend/src/common/logFn/index.d.ts +0 -0
- /package/{model → models}/frontend/src/common/request.d.ts +0 -0
- /package/{model → models}/frontend/src/components/AsyncSelect/AsyncSelect.d.ts +0 -0
- /package/{model → models}/frontend/src/components/AsyncSelect/index.d.ts +0 -0
- /package/{model → models}/frontend/src/defaultPages/SchemaPage/components/CallCom/DetailPanel.d.ts +0 -0
- /package/{model → models}/frontend/src/defaultPages/SchemaPage/components/CallCom/PopFrom.d.ts +0 -0
- /package/{model → models}/frontend/src/defaultPages/SchemaPage/components/CallCom/builtIn.d.ts +0 -0
- /package/{model → models}/frontend/src/defaultPages/SchemaPage/data/eventInfo.d.ts +0 -0
- /package/{model → models}/frontend/src/defaultPages/SchemaPage/data/index.d.ts +0 -0
- /package/{model → models}/frontend/src/defaultPages/SchemaPage/hooks/useComConfig.d.ts +0 -0
- /package/{model → models}/frontend/src/defaultPages/SchemaPage/schemaType.d.ts +0 -0
- /package/{model → models}/frontend/src/defaultPages/SchemaPage/utils/permissions.d.ts +0 -0
- /package/{model → models}/frontend/src/defaultPages/SchemaPage/utils/validator.d.ts +0 -0
- /package/{model → models}/frontend/src/hooks/useText.d.ts +0 -0
- /package/{model → models}/frontend/src/language/en-US.d.ts +0 -0
- /package/{model → models}/frontend/src/language/index.d.ts +0 -0
- /package/{model → models}/frontend/src/language/resources.d.ts +0 -0
- /package/{model → models}/frontend/src/language/zh-CN.d.ts +0 -0
- /package/{model → models}/frontend/src/stores/apiFreezer.d.ts +0 -0
- /package/{model → models}/frontend/src/stores/schemaEventBus.d.ts +0 -0
- /package/{model → models}/frontend/src/stores/schemaStore.d.ts +0 -0
- /package/{model → models}/frontend/src/typing/scalability.d.ts +0 -0
- /package/{model/model → models/models}/index.d.ts +0 -0
- /package/{model/model → models/models}/test.d.ts +0 -0
- /package/{model/model → models/models}/types/data/button.d.ts +0 -0
- /package/{model/model → models/models}/types/data/component.d.ts +0 -0
- /package/{model/model → models/models}/types/data/fetchInfo.d.ts +0 -0
- /package/{model/model → models/models}/types/data/schema.d.ts +0 -0
- /package/{model/model → models/models}/types/data/search.d.ts +0 -0
- /package/{model/model → models/models}/types/index.d.ts +0 -0
- /package/{model/model → models/models}/types/menuType.d.ts +0 -0
- /package/{model/model → models/models}/types/model.d.ts +0 -0
- /package/{model → models}/packages/common/array/index.d.ts +0 -0
- /package/{model → models}/packages/common/cache/LRUCache.d.ts +0 -0
- /package/{model → models}/packages/common/cache/index.d.ts +0 -0
- /package/{model → models}/packages/common/guards/index.d.ts +0 -0
- /package/{model → models}/packages/common/http/index.d.ts +0 -0
- /package/{model → models}/packages/common/i18n/default.d.ts +0 -0
- /package/{model → models}/packages/common/i18n/en-US.d.ts +0 -0
- /package/{model → models}/packages/common/i18n/index.d.ts +0 -0
- /package/{model → models}/packages/common/i18n/locales.d.ts +0 -0
- /package/{model → models}/packages/common/log/index.d.ts +0 -0
- /package/{model → models}/packages/common/number/index.d.ts +0 -0
- /package/{model → models}/packages/common/object/filterEmpty.d.ts +0 -0
- /package/{model → models}/packages/common/object/index.d.ts +0 -0
- /package/{model → models}/packages/common/rafTimer.d.ts +0 -0
- /package/{model → models}/packages/common/string/index.d.ts +0 -0
- /package/{model → models}/packages/common/types/index.d.ts +0 -0
- /package/{model → models}/packages/react/hooks/useBreadcrumb.d.ts +0 -0
- /package/{model → models}/packages/react/hooks/useExecuteOnce.d.ts +0 -0
- /package/{model → models}/packages/react/hooks/useLanguage.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Button/Button.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Button/SubmitButton.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Button/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Card/Card.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Card/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Checkbox/Checkbox.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Checkbox/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/ConfirmDialog/ConfirmDialog.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/ConfirmDialog/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/DataTable/ActionBtn.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/DataTable/dataTableWidth.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/DataTable/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/Calendar.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/Date.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/LocaleContext.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/LocaleProvider.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/TimePicker.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/data.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/dateLocaleStore.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/dropdownPositioning.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Date/locales.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Drawer/Drawer.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Drawer/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Dropdown/Dropdown.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Dropdown/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Form/Form.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Form/FormItem.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Form/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Form/useForm.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/ImagePreview/ImagePreview.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/ImagePreview/PreviewImage.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/ImagePreview/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Input/Input.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Input/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/InputNumber/InputNumber.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/InputNumber/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/InputNumber/inputNumberUtils.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Label/Label.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Label/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Layout/Layout.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Layout/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Loading/Loading.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Loading/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Menu/Menu.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Menu/MenuContext.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Menu/MenuItem.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Menu/SubMenu.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Menu/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Menu/menuTypes.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Menu/utils.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Message/Message.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Message/MessageManager.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Message/data.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Message/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Modal/Modal.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Modal/ModalManager.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Modal/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Notification/Notification.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Notification/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Overlay/Overlay.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Overlay/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Pagination/Pagination.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Pagination/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Popup/Popup.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Popup/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Radio/Radio.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Radio/RadioGroup.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Radio/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Search/Search.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Search/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Select/Select.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Select/dropdownPositioning.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Select/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Skeleton/Skeleton.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Skeleton/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Switch/Switch.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Switch/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/TableSearch/TableSearch.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/TableSearch/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/TableSearch/lang.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/TableSearch/tableSearchLocaleStore.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Tabs/Tabs.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Tabs/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Textarea/Textarea.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Textarea/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Tooltip/Tooltip.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Tooltip/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/TreeSelect/TreeSelect.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/TreeSelect/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Upload/ImageUpload.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Upload/Upload.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/Upload/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/breadcrumb/breadcrumb.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/breadcrumb/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/hooks/useDropdownPositioning.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/hooks/useInputController.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/table/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/table/table.d.ts +0 -0
- /package/{model → models}/packages/react/ui/components/types/baseType.d.ts +0 -0
- /package/{model → models}/packages/react/ui/i18n/I18nProvider.d.ts +0 -0
- /package/{model → models}/packages/react/ui/i18n/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/i18n/useI18n.d.ts +0 -0
- /package/{model → models}/packages/react/ui/index.d.ts +0 -0
- /package/{model → models}/packages/react/ui/lib/createStoreHook.d.ts +0 -0
- /package/{model → models}/packages/react/ui/lib/export.d.ts +0 -0
- /package/{model → models}/packages/react/ui/lib/utils.d.ts +0 -0
- /package/{model → models}/packages/react/ui/stores/breadcrumb.d.ts +0 -0
- /package/{model → models}/packages/react/ui/stores/language.d.ts +0 -0
- /package/{model → models}/packages/react/ui/types/index.d.ts +0 -0
- /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
|
-
- `
|
|
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/
|
|
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/
|
|
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
|
-
├──
|
|
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`
|
|
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` 对应 `
|
|
106
|
+
`projk` 对应 `models/{modelKey}/project/{projectKey}.ts` 里的 `projectKey`,运行时按 project key 全局查找,建议保持全局唯一。
|
|
100
107
|
|
|
101
108
|
## 3. 后端约定
|
|
102
109
|
|
|
103
|
-
`serverStart({ baseDir })`
|
|
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) ->
|
|
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
|
-
|
|
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
|
|
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
|
|
228
|
+
- `app.extends.db`:默认 SQLite 数据存储,可用项目侧 `app/extends/db.ts` 覆盖。
|
|
221
229
|
|
|
222
|
-
## 4.
|
|
230
|
+
## 4. models 配置
|
|
223
231
|
|
|
224
|
-
`
|
|
232
|
+
`models/` 是内置 Dashboard 和 Schema CRUD 的数据源。
|
|
225
233
|
|
|
226
234
|
```text
|
|
227
|
-
|
|
228
|
-
|
|
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/
|
|
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
|
-
- `
|
|
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
|
|
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`
|
|
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')`
|
|
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`、`
|
|
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', '
|
|
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': './
|
|
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', '
|
|
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', '
|
|
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. 在 `
|
|
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.
|
|
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.
|
|
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`
|
|
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
|
-
|
|
|
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`、`
|
|
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
|
|
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`
|
|
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/`
|
|
42
|
-
- 通过 `
|
|
84
|
+
- 支持框架内置 `app/` 与使用方项目 `app/` 双层加载,方便项目侧扩展和覆盖。
|
|
85
|
+
- 通过 `models/` 配置生成后台菜单、路由和 Schema CRUD 页面。
|
|
43
86
|
- 内置 React Dashboard、Schema 页面和基础 UI 组件库。
|
|
44
87
|
- 前端支持多语言配置,可在 model / Schema 中使用 `$i18n::...`。
|
|
45
88
|
- 提供 `buildFE` 前端构建能力,支持开发模式和生产构建。
|