@qlover/create-app 0.7.14 → 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 (361) hide show
  1. package/CHANGELOG.md +27 -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 +130 -0
  9. package/dist/templates/next-app/README.md +114 -20
  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/api.md +387 -0
  32. package/dist/templates/next-app/docs/en/component.md +544 -0
  33. package/dist/templates/next-app/docs/en/database.md +496 -0
  34. package/dist/templates/next-app/docs/en/development-guide.md +727 -0
  35. package/dist/templates/next-app/docs/en/env.md +563 -0
  36. package/dist/templates/next-app/docs/en/i18n.md +287 -0
  37. package/dist/templates/next-app/docs/en/index.md +165 -0
  38. package/dist/templates/next-app/docs/en/page.md +457 -0
  39. package/dist/templates/next-app/docs/en/project-structure.md +176 -0
  40. package/dist/templates/next-app/docs/en/router.md +427 -0
  41. package/dist/templates/next-app/docs/en/theme.md +532 -0
  42. package/dist/templates/next-app/docs/en/validator.md +478 -0
  43. package/dist/templates/next-app/docs/zh/api.md +387 -0
  44. package/dist/templates/next-app/docs/zh/component.md +544 -0
  45. package/dist/templates/next-app/docs/zh/database.md +496 -0
  46. package/dist/templates/next-app/docs/zh/development-guide.md +727 -0
  47. package/dist/templates/next-app/docs/zh/env.md +563 -0
  48. package/dist/templates/next-app/docs/zh/i18n.md +287 -0
  49. package/dist/templates/next-app/docs/zh/index.md +165 -0
  50. package/dist/templates/next-app/docs/zh/page.md +457 -0
  51. package/dist/templates/next-app/docs/zh/project-structure.md +176 -0
  52. package/dist/templates/next-app/docs/zh/router.md +427 -0
  53. package/dist/templates/next-app/docs/zh/theme.md +532 -0
  54. package/dist/templates/next-app/docs/zh/validator.md +476 -0
  55. package/dist/templates/next-app/make/generateLocales.ts +19 -12
  56. package/dist/templates/next-app/migrations/schema/LocalesSchema.ts +15 -0
  57. package/dist/templates/next-app/migrations/sql/1694244000000.sql +11 -0
  58. package/dist/templates/next-app/package.json +7 -3
  59. package/dist/templates/next-app/public/locales/en.json +172 -207
  60. package/dist/templates/next-app/public/locales/zh.json +172 -207
  61. package/dist/templates/next-app/src/app/[locale]/admin/locales/page.tsx +153 -0
  62. package/dist/templates/next-app/src/app/[locale]/admin/users/page.tsx +48 -50
  63. package/dist/templates/next-app/src/app/[locale]/login/LoginForm.tsx +2 -2
  64. package/dist/templates/next-app/src/app/api/admin/locales/create/route.ts +34 -0
  65. package/dist/templates/next-app/src/app/api/admin/locales/import/route.ts +40 -0
  66. package/dist/templates/next-app/src/app/api/admin/locales/route.ts +42 -0
  67. package/dist/templates/next-app/src/app/api/admin/locales/update/route.ts +32 -0
  68. package/dist/templates/next-app/src/app/api/locales/json/route.ts +44 -0
  69. package/dist/templates/next-app/src/base/cases/AdminPageManager.ts +1 -13
  70. package/dist/templates/next-app/src/base/cases/Datetime.ts +18 -0
  71. package/dist/templates/next-app/src/base/cases/DialogErrorPlugin.ts +12 -6
  72. package/dist/templates/next-app/src/base/cases/ResourceState.ts +17 -0
  73. package/dist/templates/next-app/src/base/cases/TranslateI18nInterface.ts +25 -0
  74. package/dist/templates/next-app/src/base/cases/ZodColumnBuilder.ts +200 -0
  75. package/dist/templates/next-app/src/base/port/ZodBuilderInterface.ts +8 -0
  76. package/dist/templates/next-app/src/base/services/AdminLocalesService.ts +20 -0
  77. package/dist/templates/next-app/src/base/services/AdminPageEvent.ts +26 -0
  78. package/dist/templates/next-app/src/base/services/AdminPageScheduler.ts +42 -0
  79. package/dist/templates/next-app/src/base/services/ResourceService.ts +122 -0
  80. package/dist/templates/next-app/src/base/services/adminApi/AdminLocalesApi.ts +104 -0
  81. package/dist/templates/next-app/src/base/services/adminApi/AdminUserApi.ts +38 -5
  82. package/dist/templates/next-app/src/base/services/appApi/AppApiPlugin.ts +1 -1
  83. package/dist/templates/next-app/src/i18n/request.ts +30 -1
  84. package/dist/templates/next-app/src/server/PageParams.ts +2 -10
  85. package/dist/templates/next-app/src/server/port/DBBridgeInterface.ts +5 -0
  86. package/dist/templates/next-app/src/server/port/DBTableInterface.ts +2 -0
  87. package/dist/templates/next-app/src/server/port/LocalesRepositoryInterface.ts +43 -0
  88. package/dist/templates/next-app/src/server/repositorys/LocalesRepository.ts +197 -0
  89. package/dist/templates/next-app/src/server/services/ApiLocaleService.ts +122 -0
  90. package/dist/templates/next-app/src/server/sqlBridges/SupabaseBridge.ts +60 -11
  91. package/dist/templates/next-app/src/server/validators/ExtendedExecutorError.ts +6 -0
  92. package/dist/templates/next-app/src/server/validators/LocalesValidator.ts +131 -0
  93. package/dist/templates/next-app/src/server/validators/LoginValidator.ts +2 -5
  94. package/dist/templates/next-app/src/server/validators/PaginationValidator.ts +32 -16
  95. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/_default.css +2 -1
  96. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/dark.css +28 -29
  97. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/pink.css +2 -1
  98. package/dist/templates/next-app/src/uikit/components/AdminLayout.tsx +17 -3
  99. package/dist/templates/next-app/src/uikit/components/BaseHeader.tsx +5 -4
  100. package/dist/templates/next-app/src/uikit/components/BaseLayout.tsx +5 -4
  101. package/dist/templates/next-app/src/uikit/components/BootstrapsProvider.tsx +3 -2
  102. package/dist/templates/next-app/src/uikit/components/ComboProvider.tsx +1 -1
  103. package/dist/templates/next-app/src/uikit/components/EditableCell.tsx +118 -0
  104. package/dist/templates/next-app/src/uikit/components/LogoutButton.tsx +5 -6
  105. package/dist/templates/next-app/src/uikit/components/ThemeSwitcher.tsx +1 -1
  106. package/dist/templates/next-app/src/uikit/components/With.tsx +2 -2
  107. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportButton.tsx +62 -0
  108. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportEvent.ts +28 -0
  109. package/dist/templates/next-app/src/uikit/components/localesImportButton/import.module.css +6 -0
  110. package/dist/templates/next-app/src/uikit/hook/useI18nInterface.ts +8 -14
  111. package/dist/templates/next-app/src/uikit/hook/useWarnTranslations.ts +25 -0
  112. package/dist/templates/react-app/.prettierignore +17 -0
  113. package/dist/templates/react-app/README.en.md +71 -54
  114. package/dist/templates/react-app/README.md +35 -18
  115. package/dist/templates/react-app/__tests__/__mocks__/BootstrapTest.ts +14 -0
  116. package/dist/templates/react-app/__tests__/__mocks__/MockAppConfit.ts +1 -1
  117. package/dist/templates/react-app/__tests__/__mocks__/MockDialogHandler.ts +2 -2
  118. package/dist/templates/react-app/__tests__/__mocks__/MockLogger.ts +1 -1
  119. package/dist/templates/react-app/__tests__/__mocks__/components/TestApp.tsx +45 -0
  120. package/dist/templates/react-app/__tests__/__mocks__/components/TestBootstrapsProvider.tsx +34 -0
  121. package/dist/templates/react-app/__tests__/__mocks__/components/TestRouter.tsx +46 -0
  122. package/dist/templates/react-app/__tests__/__mocks__/components/index.ts +12 -0
  123. package/dist/templates/react-app/__tests__/__mocks__/createMockGlobals.ts +1 -2
  124. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOC.ts +51 -0
  125. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOCRegister.ts +69 -0
  126. package/dist/templates/react-app/__tests__/setup/index.ts +1 -51
  127. package/dist/templates/react-app/__tests__/setup/setupGlobal.ts +51 -0
  128. package/dist/templates/react-app/__tests__/src/App.structure.test.tsx +115 -0
  129. package/dist/templates/react-app/__tests__/src/base/cases/AppConfig.test.ts +2 -2
  130. package/dist/templates/react-app/__tests__/src/base/cases/AppError.test.ts +1 -1
  131. package/dist/templates/react-app/__tests__/src/base/cases/DialogHandler.test.ts +3 -5
  132. package/dist/templates/react-app/__tests__/src/base/cases/I18nKeyErrorPlugin.test.ts +13 -2
  133. package/dist/templates/react-app/__tests__/src/base/cases/InversifyContainer.test.ts +1 -1
  134. package/dist/templates/react-app/__tests__/src/base/cases/PublicAssetsPath.test.ts +1 -1
  135. package/dist/templates/react-app/__tests__/src/base/cases/RequestLogger.test.ts +5 -5
  136. package/dist/templates/react-app/__tests__/src/base/cases/RequestStatusCatcher.test.ts +1 -2
  137. package/dist/templates/react-app/__tests__/src/base/cases/RouterLoader.test.ts +25 -15
  138. package/dist/templates/react-app/__tests__/src/base/services/I18nService.test.ts +29 -15
  139. package/dist/templates/react-app/__tests__/src/core/IOC.test.ts +19 -9
  140. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapClient.test.ts +153 -0
  141. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapsApp.test.ts +9 -7
  142. package/dist/templates/react-app/__tests__/src/main.integration.test.tsx +4 -5
  143. package/dist/templates/react-app/__tests__/src/main.test.tsx +4 -4
  144. package/dist/templates/react-app/__tests__/src/uikit/components/BaseHeader.test.tsx +68 -59
  145. package/dist/templates/react-app/config/IOCIdentifier.ts +8 -8
  146. package/dist/templates/react-app/config/Identifier/{common.error.ts → common/common.error.ts} +5 -5
  147. package/dist/templates/react-app/config/Identifier/{common.ts → common/common.ts} +9 -9
  148. package/dist/templates/react-app/config/Identifier/common/index.ts +2 -0
  149. package/dist/templates/react-app/config/Identifier/index.ts +1 -9
  150. package/dist/templates/react-app/config/Identifier/pages/index.ts +8 -0
  151. package/dist/templates/react-app/config/Identifier/{page.about.ts → pages/page.about.ts} +34 -26
  152. package/dist/templates/react-app/config/Identifier/{page.executor.ts → pages/page.executor.ts} +47 -39
  153. package/dist/templates/{next-app/config/Identifier → react-app/config/Identifier/pages}/page.home.ts +24 -23
  154. package/dist/templates/react-app/config/Identifier/pages/page.identifiter.ts +102 -0
  155. package/dist/templates/react-app/config/Identifier/{page.jsonStorage.ts → pages/page.jsonStorage.ts} +18 -11
  156. package/dist/templates/react-app/config/Identifier/{page.login.ts → pages/page.login.ts} +37 -27
  157. package/dist/templates/react-app/config/Identifier/{page.register.ts → pages/page.register.ts} +37 -25
  158. package/dist/templates/react-app/config/Identifier/{page.request.ts → pages/page.request.ts} +34 -44
  159. package/dist/templates/react-app/config/app.router.ts +66 -69
  160. package/dist/templates/react-app/config/i18n/PageI18nInterface.ts +51 -0
  161. package/dist/templates/react-app/config/i18n/aboutI18n.ts +42 -0
  162. package/dist/templates/react-app/config/i18n/executorI18n.ts +51 -0
  163. package/dist/templates/react-app/config/i18n/homeI18n.ts +24 -0
  164. package/dist/templates/react-app/config/i18n/i18nConfig.ts +30 -0
  165. package/dist/templates/react-app/config/i18n/identifiter18n.ts +30 -0
  166. package/dist/templates/react-app/config/i18n/jsonStorage18n.ts +27 -0
  167. package/dist/templates/react-app/config/i18n/login18n.ts +42 -0
  168. package/dist/templates/react-app/config/i18n/notFoundI18n.ts +34 -0
  169. package/dist/templates/react-app/config/i18n/register18n.ts +40 -0
  170. package/dist/templates/react-app/config/i18n/request18n.ts +41 -0
  171. package/dist/templates/react-app/config/theme.ts +14 -4
  172. package/dist/templates/react-app/docs/en/bootstrap.md +1670 -341
  173. package/dist/templates/react-app/docs/en/development-guide.md +1021 -345
  174. package/dist/templates/react-app/docs/en/env.md +1132 -278
  175. package/dist/templates/react-app/docs/en/i18n.md +858 -147
  176. package/dist/templates/react-app/docs/en/index.md +733 -104
  177. package/dist/templates/react-app/docs/en/ioc.md +1228 -287
  178. package/dist/templates/react-app/docs/en/playwright/e2e-tests.md +321 -0
  179. package/dist/templates/react-app/docs/en/playwright/index.md +19 -0
  180. package/dist/templates/react-app/docs/en/playwright/installation-summary.md +332 -0
  181. package/dist/templates/react-app/docs/en/playwright/overview.md +222 -0
  182. package/dist/templates/react-app/docs/en/playwright/quickstart.md +325 -0
  183. package/dist/templates/react-app/docs/en/playwright/reorganization-notes.md +340 -0
  184. package/dist/templates/react-app/docs/en/playwright/setup-complete.md +290 -0
  185. package/dist/templates/react-app/docs/en/playwright/testing-guide.md +565 -0
  186. package/dist/templates/react-app/docs/en/store.md +1194 -184
  187. package/dist/templates/react-app/docs/en/why-no-globals.md +797 -0
  188. package/dist/templates/react-app/docs/zh/bootstrap.md +1670 -341
  189. package/dist/templates/react-app/docs/zh/development-guide.md +1021 -345
  190. package/dist/templates/react-app/docs/zh/env.md +1132 -275
  191. package/dist/templates/react-app/docs/zh/i18n.md +858 -147
  192. package/dist/templates/react-app/docs/zh/index.md +717 -104
  193. package/dist/templates/react-app/docs/zh/ioc.md +1229 -287
  194. package/dist/templates/react-app/docs/zh/playwright/e2e-tests.md +321 -0
  195. package/dist/templates/react-app/docs/zh/playwright/index.md +19 -0
  196. package/dist/templates/react-app/docs/zh/playwright/installation-summary.md +332 -0
  197. package/dist/templates/react-app/docs/zh/playwright/overview.md +222 -0
  198. package/dist/templates/react-app/docs/zh/playwright/quickstart.md +325 -0
  199. package/dist/templates/react-app/docs/zh/playwright/reorganization-notes.md +340 -0
  200. package/dist/templates/react-app/docs/zh/playwright/setup-complete.md +290 -0
  201. package/dist/templates/react-app/docs/zh/playwright/testing-guide.md +565 -0
  202. package/dist/templates/react-app/docs/zh/store.md +1192 -184
  203. package/dist/templates/react-app/docs/zh/why-no-globals.md +797 -0
  204. package/dist/templates/react-app/e2e/App.spec.ts +319 -0
  205. package/dist/templates/react-app/e2e/fixtures/base.fixture.ts +40 -0
  206. package/dist/templates/react-app/e2e/main.spec.ts +20 -0
  207. package/dist/templates/react-app/e2e/utils/test-helpers.ts +19 -0
  208. package/dist/templates/react-app/eslint.config.mjs +247 -0
  209. package/dist/templates/react-app/makes/eslint-utils.mjs +195 -0
  210. package/dist/templates/react-app/makes/generateTs2LocalesOptions.ts +26 -0
  211. package/dist/templates/react-app/package.json +31 -3
  212. package/dist/templates/react-app/playwright.config.ts +79 -0
  213. package/dist/templates/react-app/public/locales/en/common.json +190 -179
  214. package/dist/templates/react-app/public/locales/zh/common.json +190 -179
  215. package/dist/templates/react-app/src/App.tsx +15 -42
  216. package/dist/templates/react-app/src/base/apis/AiApi.ts +5 -5
  217. package/dist/templates/react-app/src/base/apis/feApi/FeApi.ts +1 -1
  218. package/dist/templates/react-app/src/base/apis/feApi/FeApiAdapter.ts +1 -1
  219. package/dist/templates/react-app/src/base/apis/feApi/FeApiBootstarp.ts +8 -8
  220. package/dist/templates/react-app/src/base/apis/feApi/FeApiType.ts +1 -1
  221. package/dist/templates/react-app/src/base/apis/userApi/UserApi.ts +6 -6
  222. package/dist/templates/react-app/src/base/apis/userApi/UserApiAdapter.ts +1 -1
  223. package/dist/templates/react-app/src/base/apis/userApi/UserApiBootstarp.ts +12 -14
  224. package/dist/templates/react-app/src/base/apis/userApi/UserApiType.ts +1 -1
  225. package/dist/templates/react-app/src/base/cases/DialogHandler.ts +5 -2
  226. package/dist/templates/react-app/src/base/cases/I18nKeyErrorPlugin.ts +3 -3
  227. package/dist/templates/react-app/src/base/cases/InversifyContainer.ts +3 -3
  228. package/dist/templates/react-app/src/base/cases/RequestLanguages.ts +2 -2
  229. package/dist/templates/react-app/src/base/cases/RequestLogger.ts +4 -4
  230. package/dist/templates/react-app/src/base/cases/RequestStatusCatcher.ts +1 -1
  231. package/dist/templates/react-app/src/base/cases/ResourceState.ts +23 -0
  232. package/dist/templates/react-app/src/base/cases/RouterLoader.ts +4 -4
  233. package/dist/templates/react-app/src/base/cases/TranslateI18nInterface.ts +26 -0
  234. package/dist/templates/react-app/src/base/port/ExecutorPageBridgeInterface.ts +2 -3
  235. package/dist/templates/react-app/src/base/port/I18nServiceInterface.ts +1 -1
  236. package/dist/templates/react-app/src/base/port/IOCInterface.ts +36 -0
  237. package/dist/templates/react-app/src/base/port/JSONStoragePageBridgeInterface.ts +2 -1
  238. package/dist/templates/react-app/src/base/port/ProcesserExecutorInterface.ts +1 -1
  239. package/dist/templates/react-app/src/base/port/RequestPageBridgeInterface.ts +2 -2
  240. package/dist/templates/react-app/src/base/port/RouteServiceInterface.ts +9 -5
  241. package/dist/templates/react-app/src/base/port/UserServiceInterface.ts +1 -1
  242. package/dist/templates/react-app/src/base/services/I18nService.ts +29 -29
  243. package/dist/templates/react-app/src/base/services/IdentifierService.ts +143 -0
  244. package/dist/templates/react-app/src/base/services/ProcesserExecutor.ts +3 -3
  245. package/dist/templates/react-app/src/base/services/RouteService.ts +27 -8
  246. package/dist/templates/react-app/src/base/services/UserService.ts +8 -8
  247. package/dist/templates/react-app/src/base/types/Page.ts +14 -2
  248. package/dist/templates/react-app/src/base/types/global.d.ts +1 -1
  249. package/dist/templates/react-app/src/core/IOC.ts +5 -46
  250. package/dist/templates/react-app/src/core/bootstraps/{BootstrapApp.ts → BootstrapClient.ts} +44 -17
  251. package/dist/templates/react-app/src/core/bootstraps/BootstrapsRegistry.ts +14 -7
  252. package/dist/templates/react-app/src/core/bootstraps/IocIdentifierTest.ts +1 -1
  253. package/dist/templates/react-app/src/core/bootstraps/PrintBootstrap.ts +1 -1
  254. package/dist/templates/react-app/src/core/clientIoc/ClientIOC.ts +40 -0
  255. package/dist/templates/react-app/src/core/{IocRegisterImpl.ts → clientIoc/ClientIOCRegister.ts} +35 -24
  256. package/dist/templates/react-app/src/core/globals.ts +9 -9
  257. package/dist/templates/react-app/src/main.tsx +4 -4
  258. package/dist/templates/react-app/src/pages/404.tsx +6 -3
  259. package/dist/templates/react-app/src/pages/500.tsx +5 -2
  260. package/dist/templates/react-app/src/pages/NoRouteFound.tsx +5 -0
  261. package/dist/templates/react-app/src/pages/auth/Layout.tsx +9 -6
  262. package/dist/templates/react-app/src/pages/auth/LoginPage.tsx +46 -56
  263. package/dist/templates/react-app/src/pages/auth/RegisterPage.tsx +46 -58
  264. package/dist/templates/react-app/src/pages/base/AboutPage.tsx +35 -40
  265. package/dist/templates/react-app/src/pages/base/ExecutorPage.tsx +51 -51
  266. package/dist/templates/react-app/src/pages/base/HomePage.tsx +14 -15
  267. package/dist/templates/react-app/src/pages/base/IdentifierPage.tsx +70 -11
  268. package/dist/templates/react-app/src/pages/base/JSONStoragePage.tsx +24 -25
  269. package/dist/templates/react-app/src/pages/base/Layout.tsx +2 -2
  270. package/dist/templates/react-app/src/pages/base/RedirectPathname.tsx +3 -2
  271. package/dist/templates/react-app/src/pages/base/RequestPage.tsx +41 -59
  272. package/dist/templates/react-app/src/styles/css/antd-themes/{_default.css → _common/_default.css} +85 -0
  273. package/dist/templates/react-app/src/styles/css/antd-themes/{dark.css → _common/dark.css} +99 -0
  274. package/dist/templates/react-app/src/styles/css/antd-themes/_common/index.css +3 -0
  275. package/dist/templates/react-app/src/styles/css/antd-themes/{pink.css → _common/pink.css} +86 -0
  276. package/dist/templates/react-app/src/styles/css/antd-themes/index.css +4 -3
  277. package/dist/templates/react-app/src/styles/css/antd-themes/menu/_default.css +108 -0
  278. package/dist/templates/react-app/src/styles/css/antd-themes/menu/dark.css +67 -0
  279. package/dist/templates/react-app/src/styles/css/antd-themes/menu/index.css +3 -0
  280. package/dist/templates/react-app/src/styles/css/antd-themes/menu/pink.css +67 -0
  281. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/_default.css +34 -0
  282. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/dark.css +31 -0
  283. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/index.css +3 -0
  284. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/pink.css +36 -0
  285. package/dist/templates/react-app/src/styles/css/antd-themes/table/_default.css +44 -0
  286. package/dist/templates/react-app/src/styles/css/antd-themes/table/dark.css +43 -0
  287. package/dist/templates/react-app/src/styles/css/antd-themes/table/index.css +3 -0
  288. package/dist/templates/react-app/src/styles/css/antd-themes/table/pink.css +43 -0
  289. package/dist/templates/react-app/src/styles/css/page.css +4 -3
  290. package/dist/templates/react-app/src/styles/css/themes/_default.css +1 -0
  291. package/dist/templates/react-app/src/styles/css/themes/dark.css +1 -0
  292. package/dist/templates/react-app/src/styles/css/themes/pink.css +1 -0
  293. package/dist/templates/react-app/src/styles/css/zIndex.css +1 -1
  294. package/dist/templates/react-app/src/uikit/bridges/ExecutorPageBridge.ts +3 -3
  295. package/dist/templates/react-app/src/uikit/bridges/JSONStoragePageBridge.ts +2 -2
  296. package/dist/templates/react-app/src/uikit/bridges/NavigateBridge.ts +1 -1
  297. package/dist/templates/react-app/src/uikit/bridges/RequestPageBridge.ts +3 -3
  298. package/dist/templates/react-app/src/uikit/components/AppRouterProvider.tsx +35 -0
  299. package/dist/templates/react-app/src/uikit/components/BaseHeader.tsx +15 -11
  300. package/dist/templates/react-app/src/uikit/components/BaseRouteProvider.tsx +14 -11
  301. package/dist/templates/react-app/src/uikit/components/BaseRouteSeo.tsx +18 -0
  302. package/dist/templates/react-app/src/uikit/components/BootstrapsProvider.tsx +13 -0
  303. package/dist/templates/react-app/src/uikit/components/ClientSeo.tsx +62 -0
  304. package/dist/templates/react-app/src/uikit/components/ComboProvider.tsx +38 -0
  305. package/dist/templates/react-app/src/uikit/components/LanguageSwitcher.tsx +48 -27
  306. package/dist/templates/react-app/src/uikit/components/Loading.tsx +4 -2
  307. package/dist/templates/react-app/src/uikit/components/LocaleLink.tsx +4 -5
  308. package/dist/templates/react-app/src/uikit/components/LogoutButton.tsx +34 -11
  309. package/dist/templates/react-app/src/uikit/components/ProcessExecutorProvider.tsx +9 -5
  310. package/dist/templates/react-app/src/uikit/components/RouterRenderComponent.tsx +6 -3
  311. package/dist/templates/react-app/src/uikit/components/ThemeSwitcher.tsx +97 -40
  312. package/dist/templates/react-app/src/uikit/components/UserAuthProvider.tsx +5 -5
  313. package/dist/templates/react-app/src/uikit/components/With.tsx +17 -0
  314. package/dist/templates/react-app/src/uikit/contexts/BaseRouteContext.ts +17 -11
  315. package/dist/templates/react-app/src/uikit/contexts/IOCContext.ts +13 -0
  316. package/dist/templates/react-app/src/uikit/hooks/useAppTranslation.ts +26 -0
  317. package/dist/templates/react-app/src/uikit/hooks/useI18nGuard.ts +8 -11
  318. package/dist/templates/react-app/src/uikit/hooks/useI18nInterface.ts +25 -0
  319. package/dist/templates/react-app/src/uikit/hooks/useIOC.ts +35 -0
  320. package/dist/templates/react-app/src/uikit/hooks/useNavigateBridge.ts +3 -3
  321. package/dist/templates/react-app/src/uikit/hooks/useStrictEffect.ts +0 -1
  322. package/dist/templates/react-app/tsconfig.e2e.json +21 -0
  323. package/dist/templates/react-app/tsconfig.json +8 -1
  324. package/dist/templates/react-app/tsconfig.node.json +1 -1
  325. package/dist/templates/react-app/tsconfig.test.json +3 -1
  326. package/dist/templates/react-app/vite.config.ts +50 -34
  327. package/package.json +2 -1
  328. package/dist/configs/react-app/eslint.config.js +0 -94
  329. package/dist/templates/next-app/config/Identifier/common.error.ts +0 -41
  330. package/dist/templates/next-app/config/Identifier/common.ts +0 -69
  331. package/dist/templates/next-app/config/Identifier/page.about.ts +0 -181
  332. package/dist/templates/next-app/config/Identifier/page.admin.ts +0 -48
  333. package/dist/templates/next-app/config/Identifier/page.executor.ts +0 -272
  334. package/dist/templates/next-app/config/Identifier/page.identifiter.ts +0 -39
  335. package/dist/templates/next-app/config/Identifier/page.jsonStorage.ts +0 -72
  336. package/dist/templates/next-app/config/Identifier/page.request.ts +0 -182
  337. package/dist/templates/next-app/docs/env.md +0 -94
  338. package/dist/templates/next-app/src/base/cases/ChatAction.ts +0 -21
  339. package/dist/templates/next-app/src/base/cases/FocusBarAction.ts +0 -36
  340. package/dist/templates/next-app/src/base/cases/RequestState.ts +0 -20
  341. package/dist/templates/next-app/src/base/port/AdminPageInterface.ts +0 -85
  342. package/dist/templates/next-app/src/base/port/AsyncStateInterface.ts +0 -7
  343. package/dist/templates/next-app/src/base/services/AdminUserService.ts +0 -45
  344. package/dist/templates/next-app/src/uikit/components/ChatRoot.tsx +0 -17
  345. package/dist/templates/next-app/src/uikit/components/chat/ChatActionInterface.ts +0 -30
  346. package/dist/templates/next-app/src/uikit/components/chat/ChatFocusBar.tsx +0 -65
  347. package/dist/templates/next-app/src/uikit/components/chat/ChatMessages.tsx +0 -59
  348. package/dist/templates/next-app/src/uikit/components/chat/ChatWrap.tsx +0 -28
  349. package/dist/templates/next-app/src/uikit/components/chat/FocusBarActionInterface.ts +0 -19
  350. package/dist/templates/next-app/src/uikit/hook/useMountedClient.ts +0 -17
  351. package/dist/templates/next-app/src/uikit/hook/useStore.ts +0 -15
  352. package/dist/templates/react-app/__tests__/__mocks__/I18nService.ts +0 -13
  353. package/dist/templates/react-app/__tests__/src/App.test.tsx +0 -139
  354. package/dist/templates/react-app/config/Identifier/page.identifiter.ts +0 -39
  355. package/dist/templates/react-app/config/i18n.ts +0 -15
  356. package/dist/templates/react-app/docs/en/project-structure.md +0 -434
  357. package/dist/templates/react-app/docs/zh/project-structure.md +0 -434
  358. package/dist/templates/react-app/src/base/cases/RequestState.ts +0 -20
  359. package/dist/templates/react-app/src/base/port/AsyncStateInterface.ts +0 -7
  360. package/dist/templates/react-app/src/uikit/hooks/useDocumentTitle.ts +0 -15
  361. package/dist/templates/react-app/src/uikit/hooks/useStore.ts +0 -15
@@ -0,0 +1,287 @@
1
+ # Internationalization (i18n) Guide
2
+
3
+ This document details the implementation of internationalization in the project, including API error messages, page content, and all text content requiring multi-language support.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Basic Configuration](#basic-configuration)
8
+ - [API Error Message Handling](#api-error-message-handling)
9
+ - [Page Content Internationalization](#page-content-internationalization)
10
+ - [Usage Guidelines](#usage-guidelines)
11
+
12
+ ## Basic Configuration
13
+
14
+ The project uses next-intl for internationalization management, with configuration located in `config/i18n/i18nConfig.ts`:
15
+
16
+ ```typescript
17
+ export const i18nConfig = {
18
+ localeNames: {
19
+ en: 'English',
20
+ zh: '中文'
21
+ },
22
+ fallbackLng: 'en',
23
+ supportedLngs: ['en', 'zh'],
24
+ localeDetection: true
25
+ };
26
+ ```
27
+
28
+ All supported languages are defined in `supportedLngs`, with the default language specified by `fallbackLng`.
29
+
30
+ ## API Error Message Handling
31
+
32
+ The internationalization process for API error messages is as follows:
33
+
34
+ 1. API Response Format:
35
+
36
+ ```typescript
37
+ interface AppApiErrorInterface {
38
+ success: false;
39
+ id: string; // i18n key
40
+ message?: string; // Optional direct display message
41
+ }
42
+ ```
43
+
44
+ 2. Error Handling Process:
45
+ - API requests are processed through `AppApiPlugin`
46
+ - If the response indicates an error, it's converted to `ExecutorError`
47
+ - `DialogErrorPlugin` handles displaying error messages
48
+ - If the error message is in i18n key format (e.g., "namespace_key"), it's translated through the i18n service before display
49
+ - If not in i18n key format, the original message is displayed directly
50
+
51
+ Example:
52
+
53
+ ```typescript
54
+ // API returns error
55
+ {
56
+ success: false,
57
+ id: "error_invalid_password"
58
+ }
59
+
60
+ // DialogErrorPlugin will automatically translate and display the error message in the appropriate language
61
+ ```
62
+
63
+ ## Page Content Internationalization
64
+
65
+ ### PageI18nInterface
66
+
67
+ `PageI18nInterface` is a core interface defining internationalization content and SEO metadata for pages. This interface provides a complete page metadata structure, including basic SEO information, Open Graph, Twitter Card, etc.
68
+
69
+ ```typescript
70
+ interface PageI18nInterface {
71
+ // Basic metadata properties
72
+ title: string; // Page title
73
+ description: string; // Page description
74
+ content: string; // Page content
75
+ keywords: string; // Page keywords
76
+
77
+ // Canonical link
78
+ canonical?: string; // Optional canonical link
79
+
80
+ // Crawler control
81
+ robots?: {
82
+ index?: boolean; // Allow indexing
83
+ follow?: boolean; // Follow links
84
+ noarchive?: boolean; // Allow archiving
85
+ };
86
+
87
+ // Open Graph metadata
88
+ og?: {
89
+ title?: string; // OG title
90
+ description?: string; // OG description
91
+ type?: string; // Content type
92
+ image?: string; // Image URL
93
+ url?: string; // Page URL
94
+ siteName?: string; // Site name
95
+ locale?: string; // Language locale
96
+ };
97
+
98
+ // Twitter Card metadata
99
+ twitter?: {
100
+ card?: 'summary' | 'summary_large_image' | 'app' | 'player'; // Card type
101
+ site?: string; // Twitter site
102
+ creator?: string; // Creator
103
+ title?: string; // Twitter title
104
+ description?: string; // Twitter description
105
+ image?: string; // Twitter image
106
+ };
107
+
108
+ // Additional metadata
109
+ author?: string; // Author
110
+ publishedTime?: string; // Publication time
111
+ modifiedTime?: string; // Modification time
112
+ }
113
+ ```
114
+
115
+ Usage Notes:
116
+
117
+ 1. All string type values can be:
118
+ - i18n key: Will be translated to the current language
119
+ - Direct string: Will be used directly, without translation
120
+ 2. Optional fields (with `?`) indicate metadata that pages may not include
121
+ 3. This interface is typically used for:
122
+ - Defining page SEO information
123
+ - Generating meta tags
124
+ - Providing social media sharing information
125
+ - Controlling search engine crawler behavior
126
+
127
+ ### Using PageI18nInterface in Pages
128
+
129
+ Here's a complete page example showing how to use PageI18nInterface:
130
+
131
+ ```typescript
132
+ // 1. First define the page's i18n interface
133
+ export const homeI18n = Object.freeze({
134
+ title: i18nKeys.PAGE_HOME_TITLE,
135
+ description: i18nKeys.PAGE_HOME_DESCRIPTION,
136
+ content: i18nKeys.PAGE_HOME_DESCRIPTION,
137
+ keywords: i18nKeys.PAGE_HOME_KEYWORDS,
138
+
139
+ welcome: i18nKeys.HOME_WELCOME,
140
+ getStartedTitle: i18nKeys.HOME_GET_STARTED_TITLE,
141
+ getStartedDescription: i18nKeys.HOME_GET_STARTED_DESCRIPTION,
142
+ getStartedButton: i18nKeys.HOME_GET_STARTED_BUTTON
143
+ });
144
+
145
+ // 2. Use in page
146
+ export async function generateMetadata({ params }: { params: PageParamsType }): Promise<Metadata> {
147
+ const pageParams = new PageParams(await params);
148
+ // Get page SEO metadata
149
+ return await pageParams.getI18nInterface(homeI18n);
150
+ }
151
+
152
+ export default async function HomePage({ params }: PageParamsProps) {
153
+ const pageParams = new PageParams(await params!);
154
+ // Get page translation content
155
+ const tt = await pageParams.getI18nInterface(homeI18n);
156
+
157
+ return (
158
+ <BaseLayout>
159
+ <section>
160
+ <h1>{tt.welcome}</h1>
161
+ <p>{tt.description}</p>
162
+ <div>
163
+ <h2>{tt.getStartedTitle}</h2>
164
+ <p>{tt.getStartedDescription}</p>
165
+ <Button>{tt.getStartedButton}</Button>
166
+ </div>
167
+ </section>
168
+ </BaseLayout>
169
+ );
170
+ }
171
+ ```
172
+
173
+ This example demonstrates:
174
+
175
+ 1. How to define page-specific i18n interfaces
176
+ 2. How to use `getI18nInterface` to get translated content
177
+ 3. How to use i18n in page metadata
178
+ 4. How to use translated content in page components
179
+
180
+ ### Implementing Page Internationalization
181
+
182
+ Page content internationalization is primarily implemented through:
183
+
184
+ 1. Page i18n Interface Definition:
185
+
186
+ ```typescript
187
+ // config/i18n/HomeI18n.ts
188
+ export const homeI18n = Object.freeze({
189
+ title: i18nKeys.PAGE_HOME_TITLE,
190
+ description: i18nKeys.PAGE_HOME_DESCRIPTION,
191
+ welcome: i18nKeys.HOME_WELCOME
192
+ // ...
193
+ });
194
+ ```
195
+
196
+ 2. Getting Translated Content:
197
+
198
+ ```typescript
199
+ // In page component
200
+ const messages = await getMessages({ locale });
201
+ // Or using PageParams
202
+ const i18nContent = await pageParams.getI18nInterface(homeI18n);
203
+ ```
204
+
205
+ 3. Language Handling in Dynamic Routes:
206
+
207
+ ```typescript
208
+ // src/app/[locale]/layout.tsx
209
+ export default async function RootLayout({ children, params }) {
210
+ const pageParams = new PageParams(params);
211
+ const locale = pageParams.getI18nWithNotFound();
212
+ // ...
213
+ }
214
+ ```
215
+
216
+ ## Usage Guidelines
217
+
218
+ 1. **All Text Content Must Use i18n Keys**:
219
+ - Don't write fixed text directly in code
220
+ - All text should be defined in i18n configuration files
221
+ - Use meaningful key names, e.g., `PAGE_HOME_TITLE`, `ERROR_INVALID_INPUT`
222
+
223
+ 2. **i18n Key Naming Conventions**:
224
+ - Use uppercase letters and underscores
225
+ - Use meaningful prefixes to indicate categories, such as:
226
+ - `PAGE_` prefix for page-related content
227
+ - `ERROR_` prefix for error messages
228
+ - `COMMON_` prefix for common text
229
+
230
+ 3. **Translation File Organization**:
231
+ - Translation files located in `public/locales/` directory
232
+ - Categorized by language code: `en.json`, `zh.json`
233
+ - Maintain consistent keys across all language files
234
+
235
+ 4. **Type Safety**:
236
+ - Use TypeScript interfaces to define i18n content
237
+ - All i18n keys should be defined in the `config/Identifier/` directory
238
+ - Use `Object.freeze` to ensure i18n objects aren't modified
239
+
240
+ 5. **Best Practices**:
241
+ - Use `PageParams` class for page language-related logic
242
+ - Use `useTranslations` hook in components to get translations
243
+ - Prioritize i18n keys for API error messages over hardcoded messages
244
+ - Ensure all user-visible text supports multiple languages
245
+
246
+ ## Examples
247
+
248
+ 1. Using i18n in Page Components:
249
+
250
+ ```typescript
251
+ export function LoginForm(props: { tt: LoginI18nInterface }) {
252
+ const { tt } = props;
253
+
254
+ return (
255
+ <form>
256
+ <h1>{tt.title}</h1>
257
+ <p>{tt.description}</p>
258
+ {/* ... */}
259
+ </form>
260
+ );
261
+ }
262
+ ```
263
+
264
+ 2. API Error Handling:
265
+
266
+ ```typescript
267
+ // Backend returns error
268
+ throw new AppErrorApi({
269
+ id: 'ERROR_INVALID_CREDENTIALS',
270
+ success: false
271
+ });
272
+
273
+ // Frontend automatically handles and displays translated error message
274
+ ```
275
+
276
+ 3. Dynamic Content:
277
+
278
+ ```typescript
279
+ const t = await getTranslations({
280
+ locale: pageParams.getLocale(),
281
+ namespace: 'common'
282
+ });
283
+
284
+ const message = t('welcome', {
285
+ name: userName
286
+ });
287
+ ```
@@ -0,0 +1,165 @@
1
+ # Next.js Full-Stack Application Documentation
2
+
3
+ ## Introduction
4
+
5
+ This is a full-stack application template based on Next.js, implementing a clear layered architecture using an interface-driven design pattern. This template provides a complete full-stack development solution, including server-side API, client-side state management, authentication and authorization, internationalization, and other core features.
6
+
7
+ ### Key Features
8
+
9
+ - 🏗️ **Full-Stack Architecture**: Based on Next.js app router and API routes
10
+ - 🔌 **Interface-Driven**: Complete interface-oriented programming practice
11
+ - 🎨 **Theme Customization**: Theme system based on Tailwind CSS
12
+ - 🌍 **Internationalization**: Multi-language support based on next-intl
13
+ - 🔄 **Dependency Injection**: TypeScript-based IOC container
14
+ - 🛡️ **Authentication**: Complete authentication and authorization solution
15
+ - 📡 **Layered Design**: Clear front-end and back-end layered architecture
16
+ - 🎮 **State Management**: Controller pattern-based state management
17
+ - 🔗 **Data Access**: Flexible database access layer
18
+
19
+ ## Quick Start
20
+
21
+ ```bash
22
+ # Install dependencies
23
+ pnpm install
24
+
25
+ # Development environment startup
26
+ pnpm dev
27
+ # cross-env APP_ENV=localhost next dev --turbopack --port 3100
28
+ # Automatically loads .env.localhost -> .env
29
+
30
+ # Staging environment startup
31
+ pnpm dev:staging
32
+ # cross-env APP_ENV=staging next dev --turbopack --port 3100
33
+ # Automatically loads .env.staging -> .env
34
+
35
+ # Build production version
36
+ pnpm build
37
+ ```
38
+
39
+ ## Architecture Overview
40
+
41
+ ### 1. Client-Side Architecture
42
+
43
+ #### Interface Definitions (src/base/port)
44
+
45
+ - AppUserApiInterface: User API interface
46
+ - AsyncStateInterface: Asynchronous state interface
47
+ - RouterInterface: Router management interface
48
+
49
+ #### Core Implementation
50
+
51
+ - Controller Layer: State and business logic management
52
+ - Service Layer: API calls and data processing
53
+ - UI Components: Reusable presentation components
54
+
55
+ ### 2. Server-Side Architecture
56
+
57
+ #### Interface Definitions (src/server/port)
58
+
59
+ - ServerAuthInterface: Authentication interface
60
+ - DBBridgeInterface: Database operation interface
61
+ - UserRepositoryInterface: User repository interface
62
+ - ValidatorInterface: Data validation interface
63
+
64
+ #### Core Implementation
65
+
66
+ - API Route Layer: Request handling and response
67
+ - Service Layer: Business logic implementation
68
+ - Data Access Layer: Repository and database interaction
69
+
70
+ ## Development Guide
71
+
72
+ ### 1. API Development Process
73
+
74
+ 1. Define interface (src/server/port)
75
+ 2. Implement validator (src/server/validators)
76
+ 3. Implement service layer (src/server/services)
77
+ 4. Implement data access (src/server/repositorys)
78
+ 5. Create API route (src/app/api)
79
+
80
+ ### 2. Page Development Process
81
+
82
+ 1. Create page component (src/app/[locale])
83
+ 2. Implement page controller
84
+ 3. Add API service
85
+ 4. Register IOC container
86
+
87
+ ### 3. Best Practices
88
+
89
+ #### Interface-First Development
90
+
91
+ - Define interfaces before implementing concrete classes
92
+ - Maintain single responsibility for interfaces
93
+ - Use dependency injection to manage dependencies
94
+
95
+ #### Layering Principles
96
+
97
+ - Maintain clear boundaries between layers
98
+ - Communicate between layers through interfaces
99
+ - Avoid direct cross-layer calls
100
+
101
+ #### State Management
102
+
103
+ - Use controllers to manage complex state
104
+ - Maintain state immutability
105
+ - Unified state update process
106
+
107
+ ## Core Feature Documentation
108
+
109
+ ### Basic Architecture
110
+
111
+ - [Project Structure](./project-structure.md)
112
+ - [Development Guidelines](./development-guide.md)
113
+ - [Environment Configuration](./env.md)
114
+
115
+ ### Server-Side Development
116
+
117
+ - [API Development Guide](./api.md)
118
+ - [Authentication & Authorization](./auth.md)
119
+ - [Data Access Layer](./database.md)
120
+ - [Validator Development](./validator.md)
121
+
122
+ ### Client-Side Development
123
+
124
+ - [Page Development Guide](./page.md)
125
+ - [Component Development](./component.md)
126
+
127
+ ### Feature Modules
128
+
129
+ - [Internationalization Development](./i18n.md)
130
+ - [Theme System](./theme.md)
131
+ - [Router Management](./router.md)
132
+
133
+ ## FAQ
134
+
135
+ ### 1. Development Environment Setup
136
+
137
+ - Node.js >= 16
138
+ - pnpm >= 8.0
139
+ - VSCode + recommended extensions recommended
140
+
141
+ ### 2. Development Related
142
+
143
+ - Interface design specifications
144
+ - Dependency injection usage
145
+ - Controller development guidelines
146
+
147
+ ### 3. Deployment Related
148
+
149
+ - Environment variable configuration
150
+ - Build optimization
151
+ - Deployment process
152
+
153
+ ## Changelog
154
+
155
+ View [CHANGELOG.md](../../CHANGELOG.md) for detailed update history.
156
+
157
+ ## Support and Help
158
+
159
+ - Submit Issues
160
+ - View Wiki
161
+ - Join Discussions
162
+
163
+ ## License
164
+
165
+ This project is open-sourced under the [ISC License](../../LICENSE).