@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
@@ -0,0 +1,222 @@
1
+ # Playwright E2E Testing Guide
2
+
3
+ ## Overview
4
+
5
+ This project includes comprehensive end-to-end (E2E) testing using [Playwright](https://playwright.dev/), a modern testing framework that enables reliable testing across all modern browsers.
6
+
7
+ ## Features
8
+
9
+ - ✅ Multi-browser testing (Chromium, Firefox, WebKit)
10
+ - ✅ Mobile browser simulation
11
+ - ✅ Page Object Model (POM) architecture
12
+ - ✅ Comprehensive test coverage
13
+ - ✅ Automatic screenshots and videos on failure
14
+ - ✅ CI/CD integration with GitHub Actions
15
+ - ✅ Accessibility testing
16
+ - ✅ Performance testing
17
+ - ✅ i18n testing
18
+
19
+ ## Quick Start
20
+
21
+ ### Installation
22
+
23
+ ```bash
24
+ # Fix npm permissions if needed
25
+ sudo chown -R $(id -u):$(id -g) "$HOME/.npm"
26
+
27
+ # Install Playwright
28
+ npm install -D @playwright/test playwright
29
+
30
+ # Install browsers
31
+ npx playwright install
32
+ ```
33
+
34
+ ### Run Tests
35
+
36
+ ```bash
37
+ # Run all tests
38
+ npm run test:e2e
39
+
40
+ # Interactive UI mode (recommended)
41
+ npm run test:e2e:ui
42
+
43
+ # Debug mode
44
+ npm run test:e2e:debug
45
+
46
+ # View report
47
+ npm run test:e2e:report
48
+ ```
49
+
50
+ ## Test Structure
51
+
52
+ ```
53
+ e2e/
54
+ ├── fixtures/ # Custom test fixtures
55
+ ├── pages/ # Page Object Models
56
+ ├── tests/ # Test specifications
57
+ │ ├── home.spec.ts
58
+ │ ├── navigation.spec.ts
59
+ │ ├── auth.spec.ts
60
+ │ ├── i18n.spec.ts
61
+ │ ├── accessibility.spec.ts
62
+ │ └── performance.spec.ts
63
+ └── utils/ # Test helpers
64
+ ```
65
+
66
+ ## Test Categories
67
+
68
+ ### Functional Tests
69
+
70
+ - **Home Page Tests**: Page rendering, navigation menu, responsive design
71
+ - **Navigation Tests**: Routing, 404 handling, browser navigation
72
+ - **Authentication Tests**: Login/register forms, validation
73
+
74
+ ### Quality Tests
75
+
76
+ - **i18n Tests**: Locale switching, translation coverage
77
+ - **Accessibility Tests**: ARIA roles, keyboard navigation, screen reader support
78
+ - **Performance Tests**: Load times, bundle size, memory leaks
79
+
80
+ ## Writing Tests
81
+
82
+ ### Basic Test Example
83
+
84
+ ```typescript
85
+ import { test, expect } from '@playwright/test';
86
+
87
+ test('example test', async ({ page }) => {
88
+ await page.goto('/');
89
+ await expect(page.locator('h1')).toBeVisible();
90
+ });
91
+ ```
92
+
93
+ ### Using Page Objects
94
+
95
+ ```typescript
96
+ import { HomePage } from '../pages/HomePage';
97
+
98
+ test('home page test', async ({ page }) => {
99
+ const homePage = new HomePage(page);
100
+ await homePage.navigate('zh');
101
+ await expect(homePage.mainContent).toBeVisible();
102
+ });
103
+ ```
104
+
105
+ ## Configuration
106
+
107
+ Configuration file: `playwright.config.ts`
108
+
109
+ Key settings:
110
+
111
+ - Base URL: `http://localhost:3200`
112
+ - Browsers: Chromium, Firefox, WebKit, Mobile
113
+ - Auto-start dev server
114
+ - Screenshot/video on failure
115
+ - Trace on retry
116
+
117
+ ## CI/CD Integration
118
+
119
+ GitHub Actions workflow: `.github/workflows/playwright.yml`
120
+
121
+ Features:
122
+
123
+ - Runs on push/PR
124
+ - Tests across multiple browsers
125
+ - Uploads test reports as artifacts
126
+ - Parallel execution
127
+
128
+ ## Best Practices
129
+
130
+ 1. Use semantic selectors (`getByRole`, `getByLabel`)
131
+ 2. Leverage auto-waiting instead of fixed delays
132
+ 3. Keep tests independent and isolated
133
+ 4. Use Page Object Models for reusability
134
+ 5. Test user journeys, not implementation
135
+ 6. Include accessibility in every test
136
+ 7. Monitor performance metrics
137
+
138
+ ## Debugging
139
+
140
+ ### UI Mode (Recommended)
141
+
142
+ ```bash
143
+ npm run test:e2e:ui
144
+ ```
145
+
146
+ Features:
147
+
148
+ - Time travel debugging
149
+ - DOM snapshots
150
+ - Network logs
151
+ - Trace viewer
152
+
153
+ ### Debug Mode
154
+
155
+ ```bash
156
+ npm run test:e2e:debug
157
+ ```
158
+
159
+ Use Playwright Inspector to:
160
+
161
+ - Step through tests
162
+ - Inspect selectors
163
+ - Edit locators
164
+
165
+ ### Trace Viewer
166
+
167
+ ```bash
168
+ npx playwright show-trace test-results/path/to/trace.zip
169
+ ```
170
+
171
+ ## VS Code Integration
172
+
173
+ Install the [Playwright Test for VS Code](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) extension for:
174
+
175
+ - Running tests from editor
176
+ - Setting breakpoints
177
+ - Viewing results inline
178
+ - Recording tests
179
+
180
+ ## Troubleshooting
181
+
182
+ ### Tests Timeout
183
+
184
+ - Increase timeout in config
185
+ - Check dev server is running
186
+ - Verify network connectivity
187
+
188
+ ### Element Not Found
189
+
190
+ - Use Playwright Inspector to debug selectors
191
+ - Check if element is in frame/shadow DOM
192
+ - Verify element exists in DOM
193
+
194
+ ### Flaky Tests
195
+
196
+ - Use auto-waiting instead of fixed delays
197
+ - Ensure proper cleanup between tests
198
+ - Check for race conditions
199
+
200
+ ## Resources
201
+
202
+ ### Project Documentation
203
+
204
+ - [Playwright Documentation Hub](./playwright/README.md) - Central hub for all Playwright docs
205
+ - [Quick Start Guide](./playwright/quickstart.md) - Get started quickly
206
+ - [Detailed Testing Guide](./playwright/testing-guide.md) - Complete reference
207
+ - [Setup Complete Guide](./playwright/setup-complete.md) - Configuration and troubleshooting
208
+ - [Installation Summary](./playwright/installation-summary.md) - Installation details
209
+ - [E2E Tests Documentation](./playwright/e2e-tests.md) - E2E test code documentation
210
+
211
+ ### External Resources
212
+
213
+ - [Playwright Official Docs](https://playwright.dev/)
214
+ - [API Reference](https://playwright.dev/docs/api/class-playwright)
215
+
216
+ ## Next Steps
217
+
218
+ 1. Review `e2e/example.spec.ts`
219
+ 2. Run tests with `npm run test:e2e:ui`
220
+ 3. Write custom tests for your features
221
+ 4. Integrate into CI/CD pipeline
222
+ 5. Monitor test results and coverage
@@ -0,0 +1,325 @@
1
+ # Playwright E2E Testing - Quick Start Guide
2
+
3
+ ## 🎯 快速开始
4
+
5
+ ### 1. 安装依赖
6
+
7
+ 首先,修复 npm 权限问题(如果存在):
8
+
9
+ ```bash
10
+ sudo chown -R $(id -u):$(id -g) "$HOME/.npm"
11
+ ```
12
+
13
+ 然后安装 Playwright:
14
+
15
+ ```bash
16
+ npm install -D @playwright/test playwright
17
+ ```
18
+
19
+ 安装浏览器驱动:
20
+
21
+ ```bash
22
+ npx playwright install
23
+ ```
24
+
25
+ ### 2. 运行第一个测试
26
+
27
+ ```bash
28
+ # 运行示例测试
29
+ npm run test:e2e -- e2e/example.spec.ts
30
+
31
+ # 或者使用 UI 模式(推荐用于开发)
32
+ npm run test:e2e:ui
33
+ ```
34
+
35
+ ### 3. 查看测试报告
36
+
37
+ ```bash
38
+ npm run test:e2e:report
39
+ ```
40
+
41
+ ## 📋 可用的测试脚本
42
+
43
+ | 命令 | 说明 |
44
+ | --------------------------- | ------------------------------ |
45
+ | `npm run test:e2e` | 运行所有 E2E 测试 |
46
+ | `npm run test:e2e:ui` | 在 UI 模式下运行(交互式) |
47
+ | `npm run test:e2e:headed` | 在有头模式下运行(可见浏览器) |
48
+ | `npm run test:e2e:debug` | 在调试模式下运行 |
49
+ | `npm run test:e2e:chromium` | 仅在 Chrome 上运行 |
50
+ | `npm run test:e2e:firefox` | 仅在 Firefox 上运行 |
51
+ | `npm run test:e2e:webkit` | 仅在 Safari/WebKit 上运行 |
52
+ | `npm run test:e2e:report` | 查看测试报告 |
53
+
54
+ ## 📚 测试文件说明
55
+
56
+ ### 已创建的测试套件
57
+
58
+ 1. **`example.spec.ts`** - 验证 Playwright 设置的示例测试
59
+ 2. **`home.spec.ts`** - 首页功能测试
60
+ 3. **`navigation.spec.ts`** - 导航和路由测试
61
+ 4. **`auth.spec.ts`** - 认证流程测试
62
+ 5. **`i18n.spec.ts`** - 国际化测试
63
+ 6. **`accessibility.spec.ts`** - 可访问性测试
64
+ 7. **`performance.spec.ts`** - 性能测试
65
+
66
+ ### Page Object Models
67
+
68
+ 已创建的页面对象模型(位于 `e2e/pages/`):
69
+
70
+ - `BasePage.ts` - 基础页面类
71
+ - `HomePage.ts` - 首页
72
+ - `LoginPage.ts` - 登录页面
73
+
74
+ ## 🔧 常用操作
75
+
76
+ ### 运行特定测试文件
77
+
78
+ ```bash
79
+ npx playwright test e2e/tests/home.spec.ts
80
+ ```
81
+
82
+ ### 运行特定测试用例
83
+
84
+ ```bash
85
+ npx playwright test -g "should load and display home page"
86
+ ```
87
+
88
+ ### 仅运行失败的测试
89
+
90
+ ```bash
91
+ npx playwright test --last-failed
92
+ ```
93
+
94
+ ### 更新快照
95
+
96
+ ```bash
97
+ npx playwright test --update-snapshots
98
+ ```
99
+
100
+ ### 生成代码
101
+
102
+ ```bash
103
+ npx playwright codegen http://localhost:3200
104
+ ```
105
+
106
+ 这将打开浏览器并记录你的操作,自动生成测试代码!
107
+
108
+ ## 🐛 调试技巧
109
+
110
+ ### 1. 使用 UI 模式(推荐)
111
+
112
+ ```bash
113
+ npm run test:e2e:ui
114
+ ```
115
+
116
+ UI 模式提供:
117
+
118
+ - 可视化测试执行
119
+ - 时间旅行调试
120
+ - DOM 快照
121
+ - 网络日志
122
+
123
+ ### 2. 使用调试模式
124
+
125
+ ```bash
126
+ npm run test:e2e:debug
127
+ ```
128
+
129
+ 这会打开 Playwright Inspector,允许你:
130
+
131
+ - 单步执行测试
132
+ - 查看选择器
133
+ - 编辑定位器
134
+
135
+ ### 3. 在测试中添加断点
136
+
137
+ ```typescript
138
+ test('debug example', async ({ page }) => {
139
+ await page.goto('/');
140
+ await page.pause(); // 添加这一行来暂停执行
141
+ // ... 其他测试代码
142
+ });
143
+ ```
144
+
145
+ ### 4. 查看 Trace
146
+
147
+ 如果测试失败,会自动生成 trace 文件:
148
+
149
+ ```bash
150
+ npx playwright show-trace test-results/.../trace.zip
151
+ ```
152
+
153
+ ## 💡 编写测试的最佳实践
154
+
155
+ ### 1. 使用 Page Object Model
156
+
157
+ ```typescript
158
+ import { HomePage } from '../pages/HomePage';
159
+
160
+ test('example', async ({ page }) => {
161
+ const homePage = new HomePage(page);
162
+ await homePage.navigate('zh');
163
+ await expect(homePage.mainContent).toBeVisible();
164
+ });
165
+ ```
166
+
167
+ ### 2. 使用语义化选择器
168
+
169
+ ```typescript
170
+ // ✅ 好的做法
171
+ await page.getByRole('button', { name: '登录' });
172
+ await page.getByLabel('用户名');
173
+ await page.getByTestId('submit-button');
174
+
175
+ // ❌ 避免
176
+ await page.locator('.btn-primary');
177
+ await page.locator('#username');
178
+ ```
179
+
180
+ ### 3. 等待元素而不是固定延迟
181
+
182
+ ```typescript
183
+ // ✅ 好的做法
184
+ await page.waitForSelector('[data-testid="content"]');
185
+ await expect(page.locator('.result')).toBeVisible();
186
+
187
+ // ❌ 避免
188
+ await page.waitForTimeout(3000);
189
+ ```
190
+
191
+ ### 4. 保持测试独立
192
+
193
+ ```typescript
194
+ test.describe('Feature Tests', () => {
195
+ test.beforeEach(async ({ page }) => {
196
+ // 每个测试前重置状态
197
+ await page.goto('/');
198
+ });
199
+
200
+ test('test 1', async ({ page }) => {
201
+ // 这个测试不依赖其他测试
202
+ });
203
+
204
+ test('test 2', async ({ page }) => {
205
+ // 这个测试也不依赖其他测试
206
+ });
207
+ });
208
+ ```
209
+
210
+ ## 🎨 自定义配置
211
+
212
+ ### 修改基础 URL
213
+
214
+ 在 `playwright.config.ts` 中:
215
+
216
+ ```typescript
217
+ use: {
218
+ baseURL: 'http://localhost:3000', // 修改为你的端口
219
+ }
220
+ ```
221
+
222
+ 或使用环境变量:
223
+
224
+ ```bash
225
+ PLAYWRIGHT_BASE_URL=http://localhost:3000 npm run test:e2e
226
+ ```
227
+
228
+ ### 添加新的浏览器配置
229
+
230
+ 在 `playwright.config.ts` 的 `projects` 数组中添加:
231
+
232
+ ```typescript
233
+ {
234
+ name: 'Mobile Safari',
235
+ use: { ...devices['iPhone 12'] }
236
+ }
237
+ ```
238
+
239
+ ### 配置超时时间
240
+
241
+ ```typescript
242
+ // 全局超时
243
+ test.setTimeout(60000); // 60 秒
244
+
245
+ // 单个测试
246
+ test('slow test', async ({ page }) => {
247
+ test.setTimeout(120000); // 120 秒
248
+ // ... 测试代码
249
+ });
250
+ ```
251
+
252
+ ## 📊 CI/CD 集成
253
+
254
+ 项目已包含 GitHub Actions 配置文件(`.github/workflows/playwright.yml`)。
255
+
256
+ 推送代码到 GitHub 后,测试会自动运行。
257
+
258
+ ## 🆘 常见问题
259
+
260
+ ### Q: 测试超时
261
+
262
+ **A:** 增加 `playwright.config.ts` 中的 `timeout` 设置,或检查开发服务器是否正常运行。
263
+
264
+ ### Q: 找不到元素
265
+
266
+ **A:** 使用 Playwright Inspector 检查选择器:
267
+
268
+ ```bash
269
+ npm run test:e2e:debug
270
+ ```
271
+
272
+ ### Q: 测试不稳定(flaky)
273
+
274
+ **A:**
275
+
276
+ - 使用自动等待而非固定延迟
277
+ - 使用 `waitForLoadState('networkidle')`
278
+ - 检查是否有竞态条件
279
+
280
+ ### Q: 浏览器安装失败
281
+
282
+ **A:**
283
+
284
+ ```bash
285
+ # 强制重新安装
286
+ npx playwright install --force
287
+
288
+ # Linux 上安装依赖
289
+ npx playwright install-deps
290
+ ```
291
+
292
+ ## 📖 更多资源
293
+
294
+ - [详细测试指南](./testing-guide.md)
295
+ - [设置完成文档](./setup-complete.md)
296
+ - [安装摘要](./installation-summary.md)
297
+ - [Playwright 官方文档](https://playwright.dev/)
298
+ - [Playwright 最佳实践](https://playwright.dev/docs/best-practices)
299
+ - [Playwright API 参考](https://playwright.dev/docs/api/class-playwright)
300
+
301
+ ## ✅ 验证安装
302
+
303
+ 运行以下命令验证一切正常:
304
+
305
+ ```bash
306
+ # 1. 运行示例测试
307
+ npm run test:e2e -- e2e/example.spec.ts
308
+
309
+ # 2. 如果成功,尝试运行所有测试
310
+ npm run test:e2e
311
+
312
+ # 3. 查看报告
313
+ npm run test:e2e:report
314
+ ```
315
+
316
+ 如果所有测试都通过了,恭喜!你已经成功设置了 Playwright E2E 测试!🎉
317
+
318
+ ## 🚀 下一步
319
+
320
+ 1. 查看 `e2e/example.spec.ts` 了解基本测试结构
321
+ 2. 阅读 [详细测试指南](./testing-guide.md) 了解更多信息
322
+ 3. 使用 `npm run test:e2e:ui` 以交互方式探索测试
323
+ 4. 根据你的应用需求编写自定义测试
324
+
325
+ 祝测试愉快!