@qlover/create-app 0.7.15 → 0.8.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 (340) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/configs/_common/.gitignore.template +6 -0
  3. package/dist/configs/_common/.prettierignore +17 -5
  4. package/dist/configs/_common/.vscode/settings.json +6 -1
  5. package/dist/index.cjs +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/templates/next-app/.env.template +1 -1
  8. package/dist/templates/next-app/README.en.md +0 -1
  9. package/dist/templates/next-app/README.md +0 -1
  10. package/dist/templates/next-app/config/Identifier/api.ts +5 -5
  11. package/dist/templates/next-app/config/Identifier/common/admint.table.ts +69 -0
  12. package/dist/templates/next-app/config/Identifier/common/common.ts +76 -0
  13. package/dist/templates/next-app/config/Identifier/common/index.ts +3 -0
  14. package/dist/templates/next-app/config/Identifier/{validator.ts → common/validators.ts} +5 -5
  15. package/dist/templates/next-app/config/Identifier/index.ts +2 -12
  16. package/dist/templates/next-app/config/Identifier/pages/index.ts +6 -0
  17. package/dist/templates/next-app/config/Identifier/pages/page.admin.home.ts +27 -0
  18. package/dist/templates/next-app/config/Identifier/pages/page.admin.locales.ts +266 -0
  19. package/dist/templates/next-app/config/Identifier/pages/page.admin.user.ts +293 -0
  20. package/dist/templates/{react-app/config/Identifier → next-app/config/Identifier/pages}/page.home.ts +15 -22
  21. package/dist/templates/next-app/config/Identifier/{page.login.ts → pages/page.login.ts} +28 -34
  22. package/dist/templates/next-app/config/Identifier/{page.register.ts → pages/page.register.ts} +30 -29
  23. package/dist/templates/next-app/config/adminNavs.ts +19 -0
  24. package/dist/templates/next-app/config/common.ts +22 -13
  25. package/dist/templates/next-app/config/i18n/HomeI18n.ts +5 -5
  26. package/dist/templates/next-app/config/i18n/admin18n.ts +61 -19
  27. package/dist/templates/next-app/config/i18n/i18nConfig.ts +2 -0
  28. package/dist/templates/next-app/config/i18n/i18nKeyScheam.ts +36 -0
  29. package/dist/templates/next-app/config/i18n/loginI18n.ts +22 -22
  30. package/dist/templates/next-app/config/i18n/register18n.ts +23 -24
  31. package/dist/templates/next-app/docs/en/index.md +0 -1
  32. package/dist/templates/next-app/docs/en/project-structure.md +0 -1
  33. package/dist/templates/next-app/docs/zh/index.md +0 -1
  34. package/dist/templates/next-app/docs/zh/project-structure.md +0 -1
  35. package/dist/templates/next-app/make/generateLocales.ts +19 -12
  36. package/dist/templates/next-app/migrations/schema/LocalesSchema.ts +15 -0
  37. package/dist/templates/next-app/migrations/sql/1694244000000.sql +11 -0
  38. package/dist/templates/next-app/package.json +7 -3
  39. package/dist/templates/next-app/public/locales/en.json +172 -207
  40. package/dist/templates/next-app/public/locales/zh.json +172 -207
  41. package/dist/templates/next-app/src/app/[locale]/admin/locales/page.tsx +153 -0
  42. package/dist/templates/next-app/src/app/[locale]/admin/users/page.tsx +48 -50
  43. package/dist/templates/next-app/src/app/[locale]/login/LoginForm.tsx +2 -2
  44. package/dist/templates/next-app/src/app/api/admin/locales/create/route.ts +34 -0
  45. package/dist/templates/next-app/src/app/api/admin/locales/import/route.ts +40 -0
  46. package/dist/templates/next-app/src/app/api/admin/locales/route.ts +42 -0
  47. package/dist/templates/next-app/src/app/api/admin/locales/update/route.ts +32 -0
  48. package/dist/templates/next-app/src/app/api/locales/json/route.ts +44 -0
  49. package/dist/templates/next-app/src/base/cases/AdminPageManager.ts +1 -13
  50. package/dist/templates/next-app/src/base/cases/Datetime.ts +18 -0
  51. package/dist/templates/next-app/src/base/cases/DialogErrorPlugin.ts +12 -6
  52. package/dist/templates/next-app/src/base/cases/ResourceState.ts +17 -0
  53. package/dist/templates/next-app/src/base/cases/TranslateI18nInterface.ts +25 -0
  54. package/dist/templates/next-app/src/base/cases/ZodColumnBuilder.ts +200 -0
  55. package/dist/templates/next-app/src/base/port/ZodBuilderInterface.ts +8 -0
  56. package/dist/templates/next-app/src/base/services/AdminLocalesService.ts +20 -0
  57. package/dist/templates/next-app/src/base/services/AdminPageEvent.ts +26 -0
  58. package/dist/templates/next-app/src/base/services/AdminPageScheduler.ts +42 -0
  59. package/dist/templates/next-app/src/base/services/ResourceService.ts +122 -0
  60. package/dist/templates/next-app/src/base/services/adminApi/AdminLocalesApi.ts +104 -0
  61. package/dist/templates/next-app/src/base/services/adminApi/AdminUserApi.ts +38 -5
  62. package/dist/templates/next-app/src/base/services/appApi/AppApiPlugin.ts +1 -1
  63. package/dist/templates/next-app/src/i18n/request.ts +30 -1
  64. package/dist/templates/next-app/src/server/PageParams.ts +2 -10
  65. package/dist/templates/next-app/src/server/port/DBBridgeInterface.ts +5 -0
  66. package/dist/templates/next-app/src/server/port/DBTableInterface.ts +2 -0
  67. package/dist/templates/next-app/src/server/port/LocalesRepositoryInterface.ts +43 -0
  68. package/dist/templates/next-app/src/server/repositorys/LocalesRepository.ts +197 -0
  69. package/dist/templates/next-app/src/server/services/ApiLocaleService.ts +122 -0
  70. package/dist/templates/next-app/src/server/sqlBridges/SupabaseBridge.ts +60 -11
  71. package/dist/templates/next-app/src/server/validators/ExtendedExecutorError.ts +6 -0
  72. package/dist/templates/next-app/src/server/validators/LocalesValidator.ts +131 -0
  73. package/dist/templates/next-app/src/server/validators/LoginValidator.ts +2 -5
  74. package/dist/templates/next-app/src/server/validators/PaginationValidator.ts +32 -16
  75. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/_default.css +2 -1
  76. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/dark.css +28 -29
  77. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/pink.css +2 -1
  78. package/dist/templates/next-app/src/uikit/components/AdminLayout.tsx +17 -3
  79. package/dist/templates/next-app/src/uikit/components/BaseHeader.tsx +5 -4
  80. package/dist/templates/next-app/src/uikit/components/BaseLayout.tsx +5 -4
  81. package/dist/templates/next-app/src/uikit/components/BootstrapsProvider.tsx +3 -2
  82. package/dist/templates/next-app/src/uikit/components/ComboProvider.tsx +1 -1
  83. package/dist/templates/next-app/src/uikit/components/EditableCell.tsx +118 -0
  84. package/dist/templates/next-app/src/uikit/components/LogoutButton.tsx +5 -6
  85. package/dist/templates/next-app/src/uikit/components/ThemeSwitcher.tsx +1 -1
  86. package/dist/templates/next-app/src/uikit/components/With.tsx +2 -2
  87. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportButton.tsx +62 -0
  88. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportEvent.ts +28 -0
  89. package/dist/templates/next-app/src/uikit/components/localesImportButton/import.module.css +6 -0
  90. package/dist/templates/next-app/src/uikit/hook/useI18nInterface.ts +8 -14
  91. package/dist/templates/next-app/src/uikit/hook/useWarnTranslations.ts +25 -0
  92. package/dist/templates/react-app/.prettierignore +17 -0
  93. package/dist/templates/react-app/README.en.md +71 -54
  94. package/dist/templates/react-app/README.md +35 -18
  95. package/dist/templates/react-app/__tests__/__mocks__/BootstrapTest.ts +14 -0
  96. package/dist/templates/react-app/__tests__/__mocks__/MockAppConfit.ts +1 -1
  97. package/dist/templates/react-app/__tests__/__mocks__/MockDialogHandler.ts +2 -2
  98. package/dist/templates/react-app/__tests__/__mocks__/MockLogger.ts +1 -1
  99. package/dist/templates/react-app/__tests__/__mocks__/components/TestApp.tsx +45 -0
  100. package/dist/templates/react-app/__tests__/__mocks__/components/TestBootstrapsProvider.tsx +34 -0
  101. package/dist/templates/react-app/__tests__/__mocks__/components/TestRouter.tsx +46 -0
  102. package/dist/templates/react-app/__tests__/__mocks__/components/index.ts +12 -0
  103. package/dist/templates/react-app/__tests__/__mocks__/createMockGlobals.ts +1 -2
  104. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOC.ts +51 -0
  105. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOCRegister.ts +69 -0
  106. package/dist/templates/react-app/__tests__/setup/index.ts +1 -51
  107. package/dist/templates/react-app/__tests__/setup/setupGlobal.ts +51 -0
  108. package/dist/templates/react-app/__tests__/src/App.structure.test.tsx +115 -0
  109. package/dist/templates/react-app/__tests__/src/base/cases/AppConfig.test.ts +2 -2
  110. package/dist/templates/react-app/__tests__/src/base/cases/AppError.test.ts +1 -1
  111. package/dist/templates/react-app/__tests__/src/base/cases/DialogHandler.test.ts +3 -5
  112. package/dist/templates/react-app/__tests__/src/base/cases/I18nKeyErrorPlugin.test.ts +13 -2
  113. package/dist/templates/react-app/__tests__/src/base/cases/InversifyContainer.test.ts +1 -1
  114. package/dist/templates/react-app/__tests__/src/base/cases/PublicAssetsPath.test.ts +1 -1
  115. package/dist/templates/react-app/__tests__/src/base/cases/RequestLogger.test.ts +5 -5
  116. package/dist/templates/react-app/__tests__/src/base/cases/RequestStatusCatcher.test.ts +1 -2
  117. package/dist/templates/react-app/__tests__/src/base/cases/RouterLoader.test.ts +25 -15
  118. package/dist/templates/react-app/__tests__/src/base/services/I18nService.test.ts +29 -15
  119. package/dist/templates/react-app/__tests__/src/core/IOC.test.ts +19 -9
  120. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapClient.test.ts +153 -0
  121. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapsApp.test.ts +9 -7
  122. package/dist/templates/react-app/__tests__/src/main.integration.test.tsx +4 -5
  123. package/dist/templates/react-app/__tests__/src/main.test.tsx +4 -4
  124. package/dist/templates/react-app/__tests__/src/uikit/components/BaseHeader.test.tsx +68 -59
  125. package/dist/templates/react-app/config/IOCIdentifier.ts +8 -8
  126. package/dist/templates/react-app/config/Identifier/{common.error.ts → common/common.error.ts} +5 -5
  127. package/dist/templates/react-app/config/Identifier/{common.ts → common/common.ts} +9 -9
  128. package/dist/templates/react-app/config/Identifier/common/index.ts +2 -0
  129. package/dist/templates/react-app/config/Identifier/index.ts +1 -9
  130. package/dist/templates/react-app/config/Identifier/pages/index.ts +8 -0
  131. package/dist/templates/react-app/config/Identifier/{page.about.ts → pages/page.about.ts} +34 -26
  132. package/dist/templates/react-app/config/Identifier/{page.executor.ts → pages/page.executor.ts} +47 -39
  133. package/dist/templates/{next-app/config/Identifier → react-app/config/Identifier/pages}/page.home.ts +24 -23
  134. package/dist/templates/react-app/config/Identifier/pages/page.identifiter.ts +102 -0
  135. package/dist/templates/react-app/config/Identifier/{page.jsonStorage.ts → pages/page.jsonStorage.ts} +18 -11
  136. package/dist/templates/react-app/config/Identifier/{page.login.ts → pages/page.login.ts} +37 -27
  137. package/dist/templates/react-app/config/Identifier/{page.register.ts → pages/page.register.ts} +37 -25
  138. package/dist/templates/react-app/config/Identifier/{page.request.ts → pages/page.request.ts} +34 -44
  139. package/dist/templates/react-app/config/app.router.ts +66 -69
  140. package/dist/templates/react-app/config/i18n/PageI18nInterface.ts +51 -0
  141. package/dist/templates/react-app/config/i18n/aboutI18n.ts +42 -0
  142. package/dist/templates/react-app/config/i18n/executorI18n.ts +51 -0
  143. package/dist/templates/react-app/config/i18n/homeI18n.ts +24 -0
  144. package/dist/templates/react-app/config/i18n/i18nConfig.ts +30 -0
  145. package/dist/templates/react-app/config/i18n/identifiter18n.ts +30 -0
  146. package/dist/templates/react-app/config/i18n/jsonStorage18n.ts +27 -0
  147. package/dist/templates/react-app/config/i18n/login18n.ts +42 -0
  148. package/dist/templates/react-app/config/i18n/notFoundI18n.ts +34 -0
  149. package/dist/templates/react-app/config/i18n/register18n.ts +40 -0
  150. package/dist/templates/react-app/config/i18n/request18n.ts +41 -0
  151. package/dist/templates/react-app/config/theme.ts +14 -4
  152. package/dist/templates/react-app/docs/en/bootstrap.md +1670 -341
  153. package/dist/templates/react-app/docs/en/development-guide.md +1021 -345
  154. package/dist/templates/react-app/docs/en/env.md +1132 -278
  155. package/dist/templates/react-app/docs/en/i18n.md +858 -147
  156. package/dist/templates/react-app/docs/en/index.md +733 -104
  157. package/dist/templates/react-app/docs/en/ioc.md +1228 -287
  158. package/dist/templates/react-app/docs/en/playwright/e2e-tests.md +321 -0
  159. package/dist/templates/react-app/docs/en/playwright/index.md +19 -0
  160. package/dist/templates/react-app/docs/en/playwright/installation-summary.md +332 -0
  161. package/dist/templates/react-app/docs/en/playwright/overview.md +222 -0
  162. package/dist/templates/react-app/docs/en/playwright/quickstart.md +325 -0
  163. package/dist/templates/react-app/docs/en/playwright/reorganization-notes.md +340 -0
  164. package/dist/templates/react-app/docs/en/playwright/setup-complete.md +290 -0
  165. package/dist/templates/react-app/docs/en/playwright/testing-guide.md +565 -0
  166. package/dist/templates/react-app/docs/en/store.md +1194 -184
  167. package/dist/templates/react-app/docs/en/why-no-globals.md +797 -0
  168. package/dist/templates/react-app/docs/zh/bootstrap.md +1670 -341
  169. package/dist/templates/react-app/docs/zh/development-guide.md +1021 -345
  170. package/dist/templates/react-app/docs/zh/env.md +1132 -275
  171. package/dist/templates/react-app/docs/zh/i18n.md +858 -147
  172. package/dist/templates/react-app/docs/zh/index.md +717 -104
  173. package/dist/templates/react-app/docs/zh/ioc.md +1229 -287
  174. package/dist/templates/react-app/docs/zh/playwright/e2e-tests.md +321 -0
  175. package/dist/templates/react-app/docs/zh/playwright/index.md +19 -0
  176. package/dist/templates/react-app/docs/zh/playwright/installation-summary.md +332 -0
  177. package/dist/templates/react-app/docs/zh/playwright/overview.md +222 -0
  178. package/dist/templates/react-app/docs/zh/playwright/quickstart.md +325 -0
  179. package/dist/templates/react-app/docs/zh/playwright/reorganization-notes.md +340 -0
  180. package/dist/templates/react-app/docs/zh/playwright/setup-complete.md +290 -0
  181. package/dist/templates/react-app/docs/zh/playwright/testing-guide.md +565 -0
  182. package/dist/templates/react-app/docs/zh/store.md +1192 -184
  183. package/dist/templates/react-app/docs/zh/why-no-globals.md +797 -0
  184. package/dist/templates/react-app/e2e/App.spec.ts +319 -0
  185. package/dist/templates/react-app/e2e/fixtures/base.fixture.ts +40 -0
  186. package/dist/templates/react-app/e2e/main.spec.ts +20 -0
  187. package/dist/templates/react-app/e2e/utils/test-helpers.ts +19 -0
  188. package/dist/templates/react-app/eslint.config.mjs +247 -0
  189. package/dist/templates/react-app/makes/eslint-utils.mjs +195 -0
  190. package/dist/templates/react-app/makes/generateTs2LocalesOptions.ts +26 -0
  191. package/dist/templates/react-app/package.json +31 -3
  192. package/dist/templates/react-app/playwright.config.ts +79 -0
  193. package/dist/templates/react-app/public/locales/en/common.json +190 -179
  194. package/dist/templates/react-app/public/locales/zh/common.json +190 -179
  195. package/dist/templates/react-app/src/App.tsx +15 -42
  196. package/dist/templates/react-app/src/base/apis/AiApi.ts +5 -5
  197. package/dist/templates/react-app/src/base/apis/feApi/FeApi.ts +1 -1
  198. package/dist/templates/react-app/src/base/apis/feApi/FeApiAdapter.ts +1 -1
  199. package/dist/templates/react-app/src/base/apis/feApi/FeApiBootstarp.ts +8 -8
  200. package/dist/templates/react-app/src/base/apis/feApi/FeApiType.ts +1 -1
  201. package/dist/templates/react-app/src/base/apis/userApi/UserApi.ts +6 -6
  202. package/dist/templates/react-app/src/base/apis/userApi/UserApiAdapter.ts +1 -1
  203. package/dist/templates/react-app/src/base/apis/userApi/UserApiBootstarp.ts +12 -14
  204. package/dist/templates/react-app/src/base/apis/userApi/UserApiType.ts +1 -1
  205. package/dist/templates/react-app/src/base/cases/DialogHandler.ts +5 -2
  206. package/dist/templates/react-app/src/base/cases/I18nKeyErrorPlugin.ts +3 -3
  207. package/dist/templates/react-app/src/base/cases/InversifyContainer.ts +3 -3
  208. package/dist/templates/react-app/src/base/cases/RequestLanguages.ts +2 -2
  209. package/dist/templates/react-app/src/base/cases/RequestLogger.ts +4 -4
  210. package/dist/templates/react-app/src/base/cases/RequestStatusCatcher.ts +1 -1
  211. package/dist/templates/react-app/src/base/cases/ResourceState.ts +23 -0
  212. package/dist/templates/react-app/src/base/cases/RouterLoader.ts +4 -4
  213. package/dist/templates/react-app/src/base/cases/TranslateI18nInterface.ts +26 -0
  214. package/dist/templates/react-app/src/base/port/ExecutorPageBridgeInterface.ts +2 -3
  215. package/dist/templates/react-app/src/base/port/I18nServiceInterface.ts +1 -1
  216. package/dist/templates/react-app/src/base/port/IOCInterface.ts +36 -0
  217. package/dist/templates/react-app/src/base/port/JSONStoragePageBridgeInterface.ts +2 -1
  218. package/dist/templates/react-app/src/base/port/ProcesserExecutorInterface.ts +1 -1
  219. package/dist/templates/react-app/src/base/port/RequestPageBridgeInterface.ts +2 -2
  220. package/dist/templates/react-app/src/base/port/RouteServiceInterface.ts +9 -5
  221. package/dist/templates/react-app/src/base/port/UserServiceInterface.ts +1 -1
  222. package/dist/templates/react-app/src/base/services/I18nService.ts +29 -29
  223. package/dist/templates/react-app/src/base/services/IdentifierService.ts +143 -0
  224. package/dist/templates/react-app/src/base/services/ProcesserExecutor.ts +3 -3
  225. package/dist/templates/react-app/src/base/services/RouteService.ts +27 -8
  226. package/dist/templates/react-app/src/base/services/UserService.ts +8 -8
  227. package/dist/templates/react-app/src/base/types/Page.ts +14 -2
  228. package/dist/templates/react-app/src/base/types/global.d.ts +1 -1
  229. package/dist/templates/react-app/src/core/IOC.ts +5 -46
  230. package/dist/templates/react-app/src/core/bootstraps/{BootstrapApp.ts → BootstrapClient.ts} +44 -17
  231. package/dist/templates/react-app/src/core/bootstraps/BootstrapsRegistry.ts +14 -7
  232. package/dist/templates/react-app/src/core/bootstraps/IocIdentifierTest.ts +1 -1
  233. package/dist/templates/react-app/src/core/bootstraps/PrintBootstrap.ts +1 -1
  234. package/dist/templates/react-app/src/core/clientIoc/ClientIOC.ts +40 -0
  235. package/dist/templates/react-app/src/core/{IocRegisterImpl.ts → clientIoc/ClientIOCRegister.ts} +35 -24
  236. package/dist/templates/react-app/src/core/globals.ts +9 -9
  237. package/dist/templates/react-app/src/main.tsx +4 -4
  238. package/dist/templates/react-app/src/pages/404.tsx +6 -3
  239. package/dist/templates/react-app/src/pages/500.tsx +5 -2
  240. package/dist/templates/react-app/src/pages/NoRouteFound.tsx +5 -0
  241. package/dist/templates/react-app/src/pages/auth/Layout.tsx +9 -6
  242. package/dist/templates/react-app/src/pages/auth/LoginPage.tsx +46 -56
  243. package/dist/templates/react-app/src/pages/auth/RegisterPage.tsx +46 -58
  244. package/dist/templates/react-app/src/pages/base/AboutPage.tsx +35 -40
  245. package/dist/templates/react-app/src/pages/base/ExecutorPage.tsx +51 -51
  246. package/dist/templates/react-app/src/pages/base/HomePage.tsx +14 -15
  247. package/dist/templates/react-app/src/pages/base/IdentifierPage.tsx +70 -11
  248. package/dist/templates/react-app/src/pages/base/JSONStoragePage.tsx +24 -25
  249. package/dist/templates/react-app/src/pages/base/Layout.tsx +2 -2
  250. package/dist/templates/react-app/src/pages/base/RedirectPathname.tsx +3 -2
  251. package/dist/templates/react-app/src/pages/base/RequestPage.tsx +41 -59
  252. package/dist/templates/react-app/src/styles/css/antd-themes/{_default.css → _common/_default.css} +85 -0
  253. package/dist/templates/react-app/src/styles/css/antd-themes/{dark.css → _common/dark.css} +99 -0
  254. package/dist/templates/react-app/src/styles/css/antd-themes/_common/index.css +3 -0
  255. package/dist/templates/react-app/src/styles/css/antd-themes/{pink.css → _common/pink.css} +86 -0
  256. package/dist/templates/react-app/src/styles/css/antd-themes/index.css +4 -3
  257. package/dist/templates/react-app/src/styles/css/antd-themes/menu/_default.css +108 -0
  258. package/dist/templates/react-app/src/styles/css/antd-themes/menu/dark.css +67 -0
  259. package/dist/templates/react-app/src/styles/css/antd-themes/menu/index.css +3 -0
  260. package/dist/templates/react-app/src/styles/css/antd-themes/menu/pink.css +67 -0
  261. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/_default.css +34 -0
  262. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/dark.css +31 -0
  263. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/index.css +3 -0
  264. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/pink.css +36 -0
  265. package/dist/templates/react-app/src/styles/css/antd-themes/table/_default.css +44 -0
  266. package/dist/templates/react-app/src/styles/css/antd-themes/table/dark.css +43 -0
  267. package/dist/templates/react-app/src/styles/css/antd-themes/table/index.css +3 -0
  268. package/dist/templates/react-app/src/styles/css/antd-themes/table/pink.css +43 -0
  269. package/dist/templates/react-app/src/styles/css/page.css +4 -3
  270. package/dist/templates/react-app/src/styles/css/themes/_default.css +1 -0
  271. package/dist/templates/react-app/src/styles/css/themes/dark.css +1 -0
  272. package/dist/templates/react-app/src/styles/css/themes/pink.css +1 -0
  273. package/dist/templates/react-app/src/styles/css/zIndex.css +1 -1
  274. package/dist/templates/react-app/src/uikit/bridges/ExecutorPageBridge.ts +3 -3
  275. package/dist/templates/react-app/src/uikit/bridges/JSONStoragePageBridge.ts +2 -2
  276. package/dist/templates/react-app/src/uikit/bridges/NavigateBridge.ts +1 -1
  277. package/dist/templates/react-app/src/uikit/bridges/RequestPageBridge.ts +3 -3
  278. package/dist/templates/react-app/src/uikit/components/AppRouterProvider.tsx +35 -0
  279. package/dist/templates/react-app/src/uikit/components/BaseHeader.tsx +15 -11
  280. package/dist/templates/react-app/src/uikit/components/BaseRouteProvider.tsx +14 -11
  281. package/dist/templates/react-app/src/uikit/components/BaseRouteSeo.tsx +18 -0
  282. package/dist/templates/react-app/src/uikit/components/BootstrapsProvider.tsx +13 -0
  283. package/dist/templates/react-app/src/uikit/components/ClientSeo.tsx +62 -0
  284. package/dist/templates/react-app/src/uikit/components/ComboProvider.tsx +38 -0
  285. package/dist/templates/react-app/src/uikit/components/LanguageSwitcher.tsx +48 -27
  286. package/dist/templates/react-app/src/uikit/components/Loading.tsx +4 -2
  287. package/dist/templates/react-app/src/uikit/components/LocaleLink.tsx +4 -5
  288. package/dist/templates/react-app/src/uikit/components/LogoutButton.tsx +34 -11
  289. package/dist/templates/react-app/src/uikit/components/ProcessExecutorProvider.tsx +9 -5
  290. package/dist/templates/react-app/src/uikit/components/RouterRenderComponent.tsx +6 -3
  291. package/dist/templates/react-app/src/uikit/components/ThemeSwitcher.tsx +97 -40
  292. package/dist/templates/react-app/src/uikit/components/UserAuthProvider.tsx +5 -5
  293. package/dist/templates/react-app/src/uikit/components/With.tsx +17 -0
  294. package/dist/templates/react-app/src/uikit/contexts/BaseRouteContext.ts +17 -11
  295. package/dist/templates/react-app/src/uikit/contexts/IOCContext.ts +13 -0
  296. package/dist/templates/react-app/src/uikit/hooks/useAppTranslation.ts +26 -0
  297. package/dist/templates/react-app/src/uikit/hooks/useI18nGuard.ts +8 -11
  298. package/dist/templates/react-app/src/uikit/hooks/useI18nInterface.ts +25 -0
  299. package/dist/templates/react-app/src/uikit/hooks/useIOC.ts +35 -0
  300. package/dist/templates/react-app/src/uikit/hooks/useNavigateBridge.ts +3 -3
  301. package/dist/templates/react-app/src/uikit/hooks/useStrictEffect.ts +0 -1
  302. package/dist/templates/react-app/tsconfig.e2e.json +21 -0
  303. package/dist/templates/react-app/tsconfig.json +8 -1
  304. package/dist/templates/react-app/tsconfig.node.json +1 -1
  305. package/dist/templates/react-app/tsconfig.test.json +3 -1
  306. package/dist/templates/react-app/vite.config.ts +50 -34
  307. package/package.json +2 -1
  308. package/dist/configs/react-app/eslint.config.js +0 -94
  309. package/dist/templates/next-app/config/Identifier/common.error.ts +0 -41
  310. package/dist/templates/next-app/config/Identifier/common.ts +0 -69
  311. package/dist/templates/next-app/config/Identifier/page.about.ts +0 -181
  312. package/dist/templates/next-app/config/Identifier/page.admin.ts +0 -48
  313. package/dist/templates/next-app/config/Identifier/page.executor.ts +0 -272
  314. package/dist/templates/next-app/config/Identifier/page.identifiter.ts +0 -39
  315. package/dist/templates/next-app/config/Identifier/page.jsonStorage.ts +0 -72
  316. package/dist/templates/next-app/config/Identifier/page.request.ts +0 -182
  317. package/dist/templates/next-app/src/base/cases/ChatAction.ts +0 -21
  318. package/dist/templates/next-app/src/base/cases/FocusBarAction.ts +0 -36
  319. package/dist/templates/next-app/src/base/cases/RequestState.ts +0 -20
  320. package/dist/templates/next-app/src/base/port/AdminPageInterface.ts +0 -85
  321. package/dist/templates/next-app/src/base/port/AsyncStateInterface.ts +0 -7
  322. package/dist/templates/next-app/src/base/services/AdminUserService.ts +0 -45
  323. package/dist/templates/next-app/src/uikit/components/ChatRoot.tsx +0 -17
  324. package/dist/templates/next-app/src/uikit/components/chat/ChatActionInterface.ts +0 -30
  325. package/dist/templates/next-app/src/uikit/components/chat/ChatFocusBar.tsx +0 -65
  326. package/dist/templates/next-app/src/uikit/components/chat/ChatMessages.tsx +0 -59
  327. package/dist/templates/next-app/src/uikit/components/chat/ChatWrap.tsx +0 -28
  328. package/dist/templates/next-app/src/uikit/components/chat/FocusBarActionInterface.ts +0 -19
  329. package/dist/templates/next-app/src/uikit/hook/useMountedClient.ts +0 -17
  330. package/dist/templates/next-app/src/uikit/hook/useStore.ts +0 -15
  331. package/dist/templates/react-app/__tests__/__mocks__/I18nService.ts +0 -13
  332. package/dist/templates/react-app/__tests__/src/App.test.tsx +0 -139
  333. package/dist/templates/react-app/config/Identifier/page.identifiter.ts +0 -39
  334. package/dist/templates/react-app/config/i18n.ts +0 -15
  335. package/dist/templates/react-app/docs/en/project-structure.md +0 -434
  336. package/dist/templates/react-app/docs/zh/project-structure.md +0 -434
  337. package/dist/templates/react-app/src/base/cases/RequestState.ts +0 -20
  338. package/dist/templates/react-app/src/base/port/AsyncStateInterface.ts +0 -7
  339. package/dist/templates/react-app/src/uikit/hooks/useDocumentTitle.ts +0 -15
  340. package/dist/templates/react-app/src/uikit/hooks/useStore.ts +0 -15
@@ -3,177 +3,167 @@
3
3
  * @localZh 请求示例
4
4
  * @localEn Request Examples
5
5
  */
6
- export const PAGE_REQUEST_TITLE = 'page.request.title';
6
+ export const PAGE_REQUEST_TITLE = 'page_request:title';
7
7
 
8
8
  /**
9
9
  * @description Request page description
10
10
  * @localZh 展示各种请求示例和用法
11
11
  * @localEn Demonstrate various request examples and usage
12
12
  */
13
- export const PAGE_REQUEST_DESCRIPTION = 'page.request.description';
13
+ export const PAGE_REQUEST_DESCRIPTION = 'page_request:description';
14
+
15
+ /**
16
+ * @description Request page keywords
17
+ * @localZh 请求示例, 请求用法
18
+ * @localEn Request Examples, Request Usage
19
+ */
20
+ export const PAGE_REQUEST_KEYWORDS = 'page_request:keywords';
14
21
 
15
22
  /**
16
23
  * @description Request timeout message
17
24
  * @localZh 请求超时
18
25
  * @localEn Request Timeout
19
26
  */
20
- export const REQUEST_TIMEOUT = 'request.requestTimeout';
27
+ export const PAGE_REQUEST_TIMEOUT = 'page_request:requestTimeout';
21
28
  /**
22
29
  * @description Hello result message
23
30
  * @localZh Hello 结果是
24
31
  * @localEn Hello result is
25
32
  */
26
- export const REQUEST_HELLO_RESULT = 'request.helloResult';
33
+ export const PAGE_REQUEST_HELLO_RESULT = 'page_request:helloResult';
27
34
  /**
28
35
  * @description Hello error message
29
36
  * @localZh Hello 错误是
30
37
  * @localEn Hello error is
31
38
  */
32
- export const REQUEST_HELLO_ERROR = 'request.helloError';
39
+ export const PAGE_REQUEST_HELLO_ERROR = 'page_request:helloError';
33
40
  /**
34
41
  * @description IpInfo result message
35
42
  * @localZh IpInfo 结果是
36
43
  * @localEn IpInfo result is
37
44
  */
38
- export const REQUEST_IP_INFO_RESULT = 'request.ipInfoResult';
45
+ export const PAGE_REQUEST_IP_INFO_RESULT = 'page_request:ipInfoResult';
39
46
  /**
40
47
  * @description IpInfo title
41
48
  * @localZh IpInfo
42
49
  * @localEn IpInfo
43
50
  */
44
- export const REQUEST_IP_INFO = 'request.ipInfo';
51
+ export const PAGE_REQUEST_IP_INFO = 'page_request:ipInfo';
45
52
  /**
46
53
  * @description Random user title
47
54
  * @localZh 随机用户
48
55
  * @localEn RandomUser
49
56
  */
50
- export const REQUEST_RANDOM_USER = 'request.randomUser';
57
+ export const PAGE_REQUEST_RANDOM_USER = 'page_request:randomUser';
51
58
  /**
52
59
  * @description Loading message
53
60
  * @localZh 加载中...
54
61
  * @localEn Loading...
55
62
  */
56
- export const REQUEST_LOADING = 'request.loading';
63
+ export const PAGE_REQUEST_LOADING = 'page_request:loading';
57
64
  /**
58
65
  * @description Random user result message
59
66
  * @localZh 随机用户 结果是
60
67
  * @localEn RandomUser result is
61
68
  */
62
- export const REQUEST_RANDOM_USER_RESULT = 'request.randomUserResult';
69
+ export const PAGE_REQUEST_RANDOM_USER_RESULT = 'page_request:randomUserResult';
63
70
  /**
64
71
  * @description Random user error message
65
72
  * @localZh 随机用户 错误是
66
73
  * @localEn RandomUser error is
67
74
  */
68
- export const REQUEST_RANDOM_USER_ERROR = 'request.randomUserError';
69
- /**
70
- * @description Trigger abort request button text
71
- * @localZh 触发中止请求
72
- * @localEn Trigger Abort Request
73
- */
74
- export const REQUEST_TRIGGER_ABORT = 'request.triggerAbortRequest';
75
- /**
76
- * @description Stop abort request button text
77
- * @localZh 停止中止请求
78
- * @localEn Stop Abort Request
79
- */
80
- export const REQUEST_STOP_ABORT = 'request.stopAbortRequest';
75
+ export const PAGE_REQUEST_RANDOM_USER_ERROR = 'page_request:randomUserError';
76
+
81
77
  /**
82
78
  * @description Abort request result message
83
79
  * @localZh 中止请求 结果是
84
80
  * @localEn Abort Request Result
85
81
  */
86
- export const REQUEST_ABORT_RESULT = 'request.abortRequestResult';
82
+ export const PAGE_REQUEST_ABORT_RESULT = 'page_request:abortRequestResult';
87
83
  /**
88
84
  * @description Abort request error message
89
85
  * @localZh 中止请求 错误是
90
86
  * @localEn Abort Request Error
91
87
  */
92
- export const REQUEST_ABORT_ERROR = 'request.abortRequestError';
88
+ export const PAGE_REQUEST_ABORT_ERROR = 'page_request:abortRequestError';
93
89
 
94
- /**
95
- * @description Request page timeout title
96
- * @localZh 请求超时时间
97
- * @localEn Request Timeout
98
- */
99
- export const PAGE_REQUEST_TIMEOUT = 'page.request.timeout';
100
90
  /**
101
91
  * @description Request page hello api title
102
92
  * @localZh AI API: Hello
103
93
  * @localEn AI API: Hello
104
94
  */
105
- export const PAGE_REQUEST_HELLO_TITLE = 'page.request.hello.title';
95
+ export const PAGE_REQUEST_HELLO_TITLE = 'page_request:hello.title';
106
96
  /**
107
97
  * @description Request page hello api description
108
98
  * @localZh 函数式 api, 使用了 FetchURLPlugin, RequestCommonPlugin, ApiMockPlugin, RequestLogger 插件
109
99
  * @localEn Functional API using FetchURLPlugin, RequestCommonPlugin, ApiMockPlugin, RequestLogger plugins
110
100
  */
111
- export const PAGE_REQUEST_HELLO_DESCRIPTION = 'page.request.hello.description';
101
+ export const PAGE_REQUEST_HELLO_DESCRIPTION = 'page_request:hello.description';
112
102
  /**
113
103
  * @description Request page hello button text
114
104
  * @localZh Hello
115
105
  * @localEn Hello
116
106
  */
117
- export const PAGE_REQUEST_HELLO_BUTTON = 'page.request.hello.button';
107
+ export const PAGE_REQUEST_HELLO_BUTTON = 'page_request:hello.button';
118
108
  /**
119
109
  * @description Request page ip info title
120
110
  * @localZh FeApi: IP Information
121
111
  * @localEn FeApi: IP Information
122
112
  */
123
- export const PAGE_REQUEST_IP_INFO_TITLE = 'page.request.ip_info.title';
113
+ export const PAGE_REQUEST_IP_INFO_TITLE = 'page_request:ip_info.title';
124
114
  /**
125
115
  * @description Request page ip info description
126
116
  * @localZh RequestScheduler 类式 api, 使用了 FetchURLPlugin, RequestCommonPlugin, RequestLogger, ApiPickDataPlugin 插件, 其中 ApiPickDataPlugin 插件可以将返回类型统一扁平到 data 字段
127
117
  * @localEn RequestScheduler class API using FetchURLPlugin, RequestCommonPlugin, RequestLogger, ApiPickDataPlugin plugins, where ApiPickDataPlugin can flatten return types to data field
128
118
  */
129
119
  export const PAGE_REQUEST_IP_INFO_DESCRIPTION =
130
- 'page.request.ip_info.description';
120
+ 'page_request:ip_info.description';
131
121
  /**
132
122
  * @description Request page random user title
133
123
  * @localZh UserApi: Random User
134
124
  * @localEn UserApi: Random User
135
125
  */
136
- export const PAGE_REQUEST_RANDOM_USER_TITLE = 'page.request.random_user.title';
126
+ export const PAGE_REQUEST_RANDOM_USER_TITLE = 'page_request:random_user.title';
137
127
  /**
138
128
  * @description Request page random user description
139
129
  * @localZh RequestTransaction 类式 api, 使用了 FetchURLPlugin, RequestCommonPlugin, ApiMockPlugin, FetchAbortPlugin, RequestLogger, ApiCatchPlugin 插件, 其中 FetchAbortPlugin 可以中止请求, ApiCatchPlugin 可以将捕获的错误统一到 apiCatchResult 字段
140
130
  * @localEn RequestTransaction class API using FetchURLPlugin, RequestCommonPlugin, ApiMockPlugin, FetchAbortPlugin, RequestLogger, ApiCatchPlugin plugins, where FetchAbortPlugin can abort requests, ApiCatchPlugin can unify caught errors to apiCatchResult field
141
131
  */
142
132
  export const PAGE_REQUEST_RANDOM_USER_DESCRIPTION =
143
- 'page.request.random_user.description';
133
+ 'page_request:random_user.description';
144
134
  /**
145
135
  * @description Request page api catch result title
146
136
  * @localZh UserApi: Api Catch Result
147
137
  * @localEn UserApi: Api Catch Result
148
138
  */
149
- export const PAGE_REQUEST_API_CATCH_TITLE = 'page.request.api_catch.title';
139
+ export const PAGE_REQUEST_API_CATCH_TITLE = 'page_request:api_catch.title';
150
140
  /**
151
141
  * @description Request page abort request title
152
142
  * @localZh UserApi: Abort Request
153
143
  * @localEn UserApi: Abort Request
154
144
  */
155
- export const PAGE_REQUEST_ABORT_TITLE = 'page.request.abort.title';
145
+ export const PAGE_REQUEST_ABORT_TITLE = 'page_request:abort.title';
156
146
  /**
157
147
  * @description Request page trigger abort request button
158
148
  * @localZh 触发中止请求
159
149
  * @localEn Trigger Abort Request
160
150
  */
161
- export const PAGE_REQUEST_TRIGGER_ABORT = 'page.request.trigger_abort';
151
+ export const PAGE_REQUEST_TRIGGER_ABORT = 'page_request:trigger_abort';
162
152
  /**
163
153
  * @description Request page stop abort request button
164
154
  * @localZh 停止中止请求
165
155
  * @localEn Stop Abort Request
166
156
  */
167
- export const PAGE_REQUEST_STOP_ABORT = 'page.request.stop_abort';
157
+ export const PAGE_REQUEST_STOP_ABORT = 'page_request:stop_abort';
168
158
  /**
169
159
  * @description Request page trigger api catch result button
170
160
  * @localZh 触发 API 捕获结果
171
161
  * @localEn Trigger API Catch Result
172
162
  */
173
- export const PAGE_REQUEST_TRIGGER_API_CATCH = 'page.request.trigger_api_catch';
163
+ export const PAGE_REQUEST_TRIGGER_API_CATCH = 'page_request:trigger_api_catch';
174
164
  /**
175
165
  * @description Request page stop api catch result button
176
166
  * @localZh 停止 API 捕获结果
177
167
  * @localEn Stop API Catch Result
178
168
  */
179
- export const PAGE_REQUEST_STOP_API_CATCH = 'page.request.stop_api_catch';
169
+ export const PAGE_REQUEST_STOP_API_CATCH = 'page_request:stop_api_catch';
@@ -1,4 +1,13 @@
1
1
  import type { RouteConfigValue } from '@/base/cases/RouterLoader';
2
+ import { aboutI18n } from './i18n/aboutI18n';
3
+ import { executorI18n } from './i18n/executorI18n';
4
+ import { homeI18n } from './i18n/homeI18n';
5
+ import { identifiter18n } from './i18n/identifiter18n';
6
+ import { jsonStorage18n } from './i18n/jsonStorage18n';
7
+ import { login18n } from './i18n/login18n';
8
+ import { notFound18n, serverError18n } from './i18n/notFoundI18n';
9
+ import { register18n } from './i18n/register18n';
10
+ import { request18n } from './i18n/request18n';
2
11
  import * as identifier from './Identifier';
3
12
 
4
13
  export const baseRoutes: RouteConfigValue[] = [
@@ -20,7 +29,8 @@ export const baseRoutes: RouteConfigValue[] = [
20
29
  title: identifier.PAGE_HOME_TITLE,
21
30
  description: identifier.PAGE_HOME_DESCRIPTION,
22
31
  icon: 'home',
23
- localNamespace: 'common'
32
+ localNamespace: 'common',
33
+ i18nInterface: homeI18n
24
34
  }
25
35
  },
26
36
  {
@@ -30,7 +40,8 @@ export const baseRoutes: RouteConfigValue[] = [
30
40
  title: identifier.PAGE_ABOUT_TITLE,
31
41
  description: identifier.PAGE_ABOUT_DESCRIPTION,
32
42
  icon: 'info',
33
- localNamespace: 'common'
43
+ localNamespace: 'common',
44
+ i18nInterface: aboutI18n
34
45
  }
35
46
  },
36
47
  {
@@ -40,7 +51,8 @@ export const baseRoutes: RouteConfigValue[] = [
40
51
  title: identifier.PAGE_JSONSTORAGE_TITLE,
41
52
  description: identifier.PAGE_JSONSTORAGE_DESCRIPTION,
42
53
  icon: 'info',
43
- localNamespace: 'common'
54
+ localNamespace: 'common',
55
+ i18nInterface: jsonStorage18n
44
56
  }
45
57
  },
46
58
  {
@@ -50,7 +62,8 @@ export const baseRoutes: RouteConfigValue[] = [
50
62
  title: identifier.PAGE_REQUEST_TITLE,
51
63
  description: identifier.PAGE_REQUEST_DESCRIPTION,
52
64
  icon: 'info',
53
- localNamespace: 'common'
65
+ localNamespace: 'common',
66
+ i18nInterface: request18n
54
67
  }
55
68
  },
56
69
  {
@@ -60,7 +73,8 @@ export const baseRoutes: RouteConfigValue[] = [
60
73
  title: identifier.PAGE_EXECUTOR_TITLE,
61
74
  description: identifier.PAGE_EXECUTOR_DESCRIPTION,
62
75
  icon: 'info',
63
- localNamespace: 'common'
76
+ localNamespace: 'common',
77
+ i18nInterface: executorI18n
64
78
  }
65
79
  },
66
80
  {
@@ -70,27 +84,17 @@ export const baseRoutes: RouteConfigValue[] = [
70
84
  title: identifier.PAGE_ERROR_IDENTIFIER_TITLE,
71
85
  description: identifier.PAGE_ERROR_IDENTIFIER_DESCRIPTION,
72
86
  icon: 'info',
73
- localNamespace: 'common'
74
- }
75
- },
76
- {
77
- path: '404',
78
- element: '404',
79
- meta: {
80
- category: 'common',
81
- title: identifier.PAGE_404_TITLE,
82
- description: identifier.PAGE_404_DESCRIPTION,
83
- localNamespace: 'common'
87
+ localNamespace: 'common',
88
+ i18nInterface: identifiter18n
84
89
  }
85
90
  },
86
91
  {
87
- path: '500',
88
- element: '500',
92
+ path: '*',
93
+ element: 'NoRouteFound',
89
94
  meta: {
90
95
  category: 'common',
91
- title: identifier.PAGE_500_TITLE,
92
- description: identifier.PAGE_500_DESCRIPTION,
93
- localNamespace: 'common'
96
+ localNamespace: 'common',
97
+ i18nInterface: notFound18n
94
98
  }
95
99
  }
96
100
  ]
@@ -114,7 +118,8 @@ export const baseRoutes: RouteConfigValue[] = [
114
118
  title: identifier.PAGE_LOGIN_TITLE,
115
119
  description: identifier.PAGE_LOGIN_DESCRIPTION,
116
120
  icon: 'info',
117
- localNamespace: 'common'
121
+ localNamespace: 'common',
122
+ i18nInterface: login18n
118
123
  }
119
124
  },
120
125
  {
@@ -124,7 +129,17 @@ export const baseRoutes: RouteConfigValue[] = [
124
129
  title: identifier.PAGE_REGISTER_TITLE,
125
130
  description: identifier.PAGE_REGISTER_DESCRIPTION,
126
131
  icon: 'info',
127
- localNamespace: 'common'
132
+ localNamespace: 'common',
133
+ i18nInterface: register18n
134
+ }
135
+ },
136
+ {
137
+ path: '*',
138
+ element: 'NoRouteFound',
139
+ meta: {
140
+ category: 'common',
141
+ localNamespace: 'common',
142
+ i18nInterface: notFound18n
128
143
  }
129
144
  }
130
145
  ]
@@ -135,9 +150,8 @@ export const baseRoutes: RouteConfigValue[] = [
135
150
  element: '404',
136
151
  meta: {
137
152
  category: 'common',
138
- title: identifier.PAGE_404_TITLE,
139
- description: identifier.PAGE_404_DESCRIPTION,
140
- localNamespace: 'common'
153
+ localNamespace: 'common',
154
+ i18nInterface: notFound18n
141
155
  }
142
156
  },
143
157
  {
@@ -145,19 +159,19 @@ export const baseRoutes: RouteConfigValue[] = [
145
159
  element: '500',
146
160
  meta: {
147
161
  category: 'common',
148
- title: identifier.PAGE_500_TITLE,
149
- description: identifier.PAGE_500_DESCRIPTION,
150
- localNamespace: 'common'
162
+ localNamespace: 'common',
163
+ i18nInterface: serverError18n
151
164
  }
152
165
  },
153
166
  {
154
167
  path: '*',
155
- element: '404',
168
+ element: 'NoRouteFound',
156
169
  meta: {
157
170
  category: 'common',
158
171
  title: identifier.PAGE_404_TITLE,
159
172
  description: identifier.PAGE_404_DESCRIPTION,
160
- localNamespace: 'common'
173
+ localNamespace: 'common',
174
+ i18nInterface: notFound18n
161
175
  }
162
176
  }
163
177
  ];
@@ -177,7 +191,8 @@ export const baseNoLocaleRoutes: RouteConfigValue[] = [
177
191
  title: identifier.PAGE_HOME_TITLE,
178
192
  description: identifier.PAGE_HOME_DESCRIPTION,
179
193
  icon: 'home',
180
- localNamespace: 'common'
194
+ localNamespace: 'common',
195
+ i18nInterface: homeI18n
181
196
  }
182
197
  },
183
198
  {
@@ -187,7 +202,8 @@ export const baseNoLocaleRoutes: RouteConfigValue[] = [
187
202
  title: identifier.PAGE_ABOUT_TITLE,
188
203
  description: identifier.PAGE_ABOUT_DESCRIPTION,
189
204
  icon: 'info',
190
- localNamespace: 'common'
205
+ localNamespace: 'common',
206
+ i18nInterface: aboutI18n
191
207
  }
192
208
  },
193
209
  {
@@ -197,7 +213,8 @@ export const baseNoLocaleRoutes: RouteConfigValue[] = [
197
213
  title: identifier.PAGE_JSONSTORAGE_TITLE,
198
214
  description: identifier.PAGE_JSONSTORAGE_DESCRIPTION,
199
215
  icon: 'info',
200
- localNamespace: 'common'
216
+ localNamespace: 'common',
217
+ i18nInterface: jsonStorage18n
201
218
  }
202
219
  },
203
220
  {
@@ -207,7 +224,8 @@ export const baseNoLocaleRoutes: RouteConfigValue[] = [
207
224
  title: identifier.PAGE_REQUEST_TITLE,
208
225
  description: identifier.PAGE_REQUEST_DESCRIPTION,
209
226
  icon: 'info',
210
- localNamespace: 'common'
227
+ localNamespace: 'common',
228
+ i18nInterface: request18n
211
229
  }
212
230
  },
213
231
  {
@@ -217,37 +235,19 @@ export const baseNoLocaleRoutes: RouteConfigValue[] = [
217
235
  title: identifier.PAGE_EXECUTOR_TITLE,
218
236
  description: identifier.PAGE_EXECUTOR_DESCRIPTION,
219
237
  icon: 'info',
220
- localNamespace: 'common'
238
+ localNamespace: 'common',
239
+ i18nInterface: executorI18n
221
240
  }
222
241
  },
223
242
  {
224
- path: 'errorIdentifier',
225
- element: 'base/ErrorIdentifierPage',
243
+ path: 'identifier',
244
+ element: 'base/IdentifierPage',
226
245
  meta: {
227
246
  title: identifier.PAGE_ERROR_IDENTIFIER_TITLE,
228
247
  description: identifier.PAGE_ERROR_IDENTIFIER_DESCRIPTION,
229
248
  icon: 'info',
230
- localNamespace: 'common'
231
- }
232
- },
233
- {
234
- path: '404',
235
- element: '404',
236
- meta: {
237
- category: 'common',
238
- title: identifier.PAGE_404_TITLE,
239
- description: identifier.PAGE_404_DESCRIPTION,
240
- localNamespace: 'common'
241
- }
242
- },
243
- {
244
- path: '500',
245
- element: '500',
246
- meta: {
247
- category: 'common',
248
- title: identifier.PAGE_500_TITLE,
249
- description: identifier.PAGE_500_DESCRIPTION,
250
- localNamespace: 'common'
249
+ localNamespace: 'common',
250
+ i18nInterface: identifiter18n
251
251
  }
252
252
  }
253
253
  ]
@@ -290,9 +290,8 @@ export const baseNoLocaleRoutes: RouteConfigValue[] = [
290
290
  element: '404',
291
291
  meta: {
292
292
  category: 'common',
293
- title: identifier.PAGE_404_TITLE,
294
- description: identifier.PAGE_404_DESCRIPTION,
295
- localNamespace: 'common'
293
+ localNamespace: 'common',
294
+ i18nInterface: notFound18n
296
295
  }
297
296
  },
298
297
  {
@@ -300,19 +299,17 @@ export const baseNoLocaleRoutes: RouteConfigValue[] = [
300
299
  element: '500',
301
300
  meta: {
302
301
  category: 'common',
303
- title: identifier.PAGE_500_TITLE,
304
- description: identifier.PAGE_500_DESCRIPTION,
305
- localNamespace: 'common'
302
+ localNamespace: 'common',
303
+ i18nInterface: serverError18n
306
304
  }
307
305
  },
308
306
  {
309
307
  path: '*',
310
- element: '404',
308
+ element: 'NoRouteFound',
311
309
  meta: {
312
310
  category: 'common',
313
- title: identifier.PAGE_404_TITLE,
314
- description: identifier.PAGE_404_DESCRIPTION,
315
- localNamespace: 'common'
311
+ localNamespace: 'common',
312
+ i18nInterface: notFound18n
316
313
  }
317
314
  }
318
315
  ];
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Page I18n Interface for SEO meta properties
3
+ *
4
+ * value may be undefined, which means the page does not have this meta property
5
+ *
6
+ * - if value is i18n key, it will be translated to the current language
7
+ * - if value is a string, it will be used as is
8
+ */
9
+ export interface PageI18nInterface {
10
+ // Basic meta properties
11
+ title: string;
12
+ description: string;
13
+ content: string;
14
+ keywords: string;
15
+
16
+ // Canonical URL
17
+ canonical?: string;
18
+
19
+ // Robots meta
20
+ robots?: {
21
+ index?: boolean;
22
+ follow?: boolean;
23
+ noarchive?: boolean;
24
+ };
25
+
26
+ // Open Graph meta properties
27
+ og?: {
28
+ title?: string;
29
+ description?: string;
30
+ type?: string;
31
+ image?: string;
32
+ url?: string;
33
+ siteName?: string;
34
+ locale?: string;
35
+ };
36
+
37
+ // Twitter Card meta properties
38
+ twitter?: {
39
+ card?: 'summary' | 'summary_large_image' | 'app' | 'player';
40
+ site?: string;
41
+ creator?: string;
42
+ title?: string;
43
+ description?: string;
44
+ image?: string;
45
+ };
46
+
47
+ // Additional meta properties
48
+ author?: string;
49
+ publishedTime?: string;
50
+ modifiedTime?: string;
51
+ }
@@ -0,0 +1,42 @@
1
+ import * as i18nKeys from '../Identifier/pages/page.about';
2
+
3
+ /**
4
+ * Home page i18n interface
5
+ *
6
+ * @description
7
+ * - welcome: welcome message
8
+ */
9
+ export type AboutI18nInterface = typeof aboutI18n;
10
+
11
+ export const aboutI18n = Object.freeze({
12
+ // basic meta properties
13
+ title: i18nKeys.PAGE_ABOUT_TITLE,
14
+ description: i18nKeys.PAGE_ABOUT_DESCRIPTION,
15
+ content: i18nKeys.PAGE_ABOUT_DESCRIPTION,
16
+ keywords: i18nKeys.PAGE_ABOUT_KEYWORDS,
17
+
18
+ messageTest: i18nKeys.PAGE_ABOUT_MESSAGE_TEST,
19
+ notificationTitle: i18nKeys.PAGE_ABOUT_NOTIFICATION_TITLE,
20
+ notificationDescription: i18nKeys.PAGE_ABOUT_NOTIFICATION_DESC,
21
+ btnMessage: i18nKeys.PAGE_ABOUT_BTN_MESSAGE,
22
+ btnMessage2: i18nKeys.PAGE_ABOUT_BTN_MESSAGE2,
23
+ btnNotification: i18nKeys.PAGE_ABOUT_BTN_NOTIFICATION,
24
+ btnNotification2: i18nKeys.PAGE_ABOUT_BTN_NOTIFICATION2,
25
+ tooltipText: i18nKeys.PAGE_ABOUT_TOOLTIP_TEXT,
26
+ btnTooltip: i18nKeys.PAGE_ABOUT_BTN_TOOLTIP,
27
+ modalTitle: i18nKeys.PAGE_ABOUT_MODAL_TITLE,
28
+ modalContent: i18nKeys.PAGE_ABOUT_MODAL_CONTENT,
29
+ btnModal: i18nKeys.PAGE_ABOUT_BTN_MODAL,
30
+ drawerTitle: i18nKeys.PAGE_ABOUT_DRAWER_TITLE,
31
+ drawerContent: i18nKeys.PAGE_ABOUT_DRAWER_CONTENT,
32
+ btnDrawer: i18nKeys.PAGE_ABOUT_BTN_DRAWER,
33
+ popoverContent: i18nKeys.PAGE_ABOUT_POPOVER_CONTENT,
34
+ popoverTitle: i18nKeys.PAGE_ABOUT_POPOVER_TITLE,
35
+ btnPopover: i18nKeys.PAGE_ABOUT_BTN_POPOVER,
36
+ popconfirmTitle: i18nKeys.PAGE_ABOUT_POPCONFIRM_TITLE,
37
+ popconfirmDesc: i18nKeys.PAGE_ABOUT_POPCONFIRM_DESC,
38
+ btnPopconfirm: i18nKeys.PAGE_ABOUT_BTN_POPCONFIRM,
39
+ alertMessage: i18nKeys.PAGE_ABOUT_ALERT_MESSAGE,
40
+ okText: i18nKeys.PAGE_ABOUT_OK_TEXT,
41
+ cancelText: i18nKeys.PAGE_ABOUT_CANCEL_TEXT
42
+ });
@@ -0,0 +1,51 @@
1
+ import * as i18nKeys from '../Identifier/pages/page.executor';
2
+
3
+ /**
4
+ * Home page i18n interface
5
+ *
6
+ * @description
7
+ * - welcome: welcome message
8
+ */
9
+ export type ExecutorI18nInterface = typeof executorI18n;
10
+
11
+ export const executorI18n = Object.freeze({
12
+ // basic meta properties
13
+ title: i18nKeys.PAGE_EXECUTOR_TITLE,
14
+ description: i18nKeys.PAGE_EXECUTOR_DESCRIPTION,
15
+ content: i18nKeys.PAGE_EXECUTOR_DESCRIPTION,
16
+ keywords: i18nKeys.PAGE_EXECUTOR_KEYWORDS,
17
+
18
+ mainTitle: i18nKeys.PAGE_EXECUTOR_MAIN_TITLE,
19
+ testPluginTitle: i18nKeys.PAGE_EXECUTOR_TEST_PLUGIN_TITLE,
20
+ taskStatusPending: i18nKeys.PAGE_EXECUTOR_TASK_STATUS_PENDING,
21
+ taskStatusRunning: i18nKeys.PAGE_EXECUTOR_TASK_STATUS_RUNNING,
22
+ taskStatusCompleted: i18nKeys.PAGE_EXECUTOR_TASK_STATUS_COMPLETED,
23
+ taskStatusFailed: i18nKeys.PAGE_EXECUTOR_TASK_STATUS_FAILED,
24
+ taskTypeDataSync: i18nKeys.PAGE_EXECUTOR_TASK_TYPE_DATA_SYNC,
25
+ taskTypeReport: i18nKeys.PAGE_EXECUTOR_TASK_TYPE_REPORT,
26
+ taskTypeMaintenance: i18nKeys.PAGE_EXECUTOR_TASK_TYPE_MAINTENANCE,
27
+ taskTypeBackup: i18nKeys.PAGE_EXECUTOR_TASK_TYPE_BACKUP,
28
+ taskDurationUnit: i18nKeys.PAGE_EXECUTOR_TASK_DURATION_UNIT,
29
+ taskStart: i18nKeys.PAGE_EXECUTOR_TASK_START,
30
+ taskStop: i18nKeys.PAGE_EXECUTOR_TASK_STOP,
31
+ taskSuccess: i18nKeys.PAGE_EXECUTOR_TASK_SUCCESS,
32
+ taskFailure: i18nKeys.PAGE_EXECUTOR_TASK_FAILURE,
33
+ pluginTestSuccess: i18nKeys.PAGE_EXECUTOR_PLUGIN_TEST_SUCCESS,
34
+ pluginTestFailure: i18nKeys.PAGE_EXECUTOR_PLUGIN_TEST_FAILURE,
35
+ customTaskUrlRequired: i18nKeys.PAGE_EXECUTOR_CUSTOM_TASK_URL_REQUIRED,
36
+ customTaskName: i18nKeys.PAGE_EXECUTOR_CUSTOM_TASK_NAME,
37
+ createTaskTitle: i18nKeys.PAGE_EXECUTOR_CREATE_TASK_TITLE,
38
+ createButton: i18nKeys.PAGE_EXECUTOR_CREATE_BUTTON,
39
+ enterUrl: i18nKeys.PAGE_EXECUTOR_ENTER_URL,
40
+ taskListTitle: i18nKeys.PAGE_EXECUTOR_TASK_LIST_TITLE,
41
+ taskStatsTotal: i18nKeys.PAGE_EXECUTOR_TASK_STATS_TOTAL,
42
+ taskStatsRunning: i18nKeys.PAGE_EXECUTOR_TASK_STATS_RUNNING,
43
+ taskStatsCompleted: i18nKeys.PAGE_EXECUTOR_TASK_STATS_COMPLETED,
44
+ taskStatsFailed: i18nKeys.PAGE_EXECUTOR_TASK_STATS_FAILED,
45
+ taskHistoryTitle: i18nKeys.PAGE_EXECUTOR_TASK_HISTORY_TITLE,
46
+ helpTitle: i18nKeys.PAGE_EXECUTOR_HELP_TITLE,
47
+ helpDescription: i18nKeys.PAGE_EXECUTOR_HELP_DESCRIPTION,
48
+ viewGuide: i18nKeys.PAGE_EXECUTOR_VIEW_GUIDE,
49
+ contactSupport: i18nKeys.PAGE_EXECUTOR_CONTACT_SUPPORT,
50
+ requestTimeout: i18nKeys.PAGE_EXECUTOR_REQUEST_TIMEOUT
51
+ });
@@ -0,0 +1,24 @@
1
+ import * as i18nKeys from '../Identifier/pages/page.home';
2
+
3
+ /**
4
+ * Home page i18n interface
5
+ *
6
+ * @description
7
+ * - welcome: welcome message
8
+ */
9
+ export type HomeI18nInterface = typeof homeI18n;
10
+
11
+ export const homeI18n = Object.freeze({
12
+ // basic meta properties
13
+ title: i18nKeys.PAGE_HOME_TITLE,
14
+ description: i18nKeys.PAGE_HOME_DESCRIPTION,
15
+ content: i18nKeys.PAGE_HOME_DESCRIPTION,
16
+ keywords: i18nKeys.PAGE_HOME_KEYWORDS,
17
+
18
+ welcome: i18nKeys.PAGE_HOME_WELCOME,
19
+ description2: i18nKeys.PAGE_HOME_DESCRIPTION2,
20
+ explore: i18nKeys.PAGE_HOME_EXPLORE,
21
+ getStartedTitle: i18nKeys.PAGE_HOME_GET_STARTED,
22
+ getStartedDescription: i18nKeys.PAGE_HOME_GET_STARTED_DESCRIPTION,
23
+ getStartedButton: i18nKeys.PAGE_HOME_GET_STARTED_BUTTON
24
+ });