@gadmin2n/schematics 0.0.70 → 0.0.71

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 (474) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/web/.npmrc +1 -0
  2. package/package.json +1 -1
  3. package/src/lib/application/application.schema.d.ts +59 -0
  4. package/src/lib/application/files/gadmin2-game-angle-demo/.dockerignore +33 -0
  5. package/src/lib/application/files/gadmin2-game-angle-demo/.gitignore +46 -0
  6. package/src/lib/application/files/gadmin2-game-angle-demo/.husky/_/.gitignore +1 -0
  7. package/src/lib/application/files/gadmin2-game-angle-demo/.husky/_/husky.sh +36 -0
  8. package/src/lib/application/files/gadmin2-game-angle-demo/.husky/pre-commit +10 -0
  9. package/src/lib/application/files/gadmin2-game-angle-demo/Dockerfile +63 -0
  10. package/src/lib/application/files/gadmin2-game-angle-demo/Jenkinsfile +70 -0
  11. package/src/lib/application/files/gadmin2-game-angle-demo/config/.types.d.ts +143 -0
  12. package/src/lib/application/files/gadmin2-game-angle-demo/config/prisma/canvas.prisma +45 -0
  13. package/src/lib/application/files/gadmin2-game-angle-demo/config/prisma/example.prisma +34 -0
  14. package/src/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +173 -0
  15. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/Audit.ts +70 -0
  16. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/Event.ts +70 -0
  17. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/Game.ts +58 -0
  18. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/ITActivityDay.ts +70 -0
  19. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/Log.ts +56 -0
  20. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/Page.ts +70 -0
  21. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/PageResource.ts +70 -0
  22. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/Resource.ts +70 -0
  23. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/Role.ts +58 -0
  24. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/RolePages.ts +70 -0
  25. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/RoleResource.ts +70 -0
  26. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/SavedQuery.ts +70 -0
  27. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/User.ts +70 -0
  28. package/src/lib/application/files/gadmin2-game-angle-demo/config/ui/_common.ts +16 -0
  29. package/src/lib/application/files/gadmin2-game-angle-demo/readme.md +142 -0
  30. package/src/lib/application/files/gadmin2-game-angle-demo/server/.env +31 -0
  31. package/src/lib/application/files/gadmin2-game-angle-demo/server/.env.local +1 -0
  32. package/src/lib/application/files/gadmin2-game-angle-demo/server/.eslintrc.js +28 -0
  33. package/src/lib/application/files/gadmin2-game-angle-demo/server/.prettierignore +7 -0
  34. package/src/lib/application/files/gadmin2-game-angle-demo/server/.prettierrc +4 -0
  35. package/src/lib/application/files/gadmin2-game-angle-demo/server/README.md +55 -0
  36. package/src/lib/application/files/gadmin2-game-angle-demo/server/config/ac.config.ts +24 -0
  37. package/src/lib/application/files/gadmin2-game-angle-demo/server/config/index.ts +58 -0
  38. package/src/lib/application/files/gadmin2-game-angle-demo/server/gadmin-cli.json +25 -0
  39. package/src/lib/application/files/gadmin2-game-angle-demo/server/migrate-between-pg-schemas.js +1232 -0
  40. package/src/lib/application/files/gadmin2-game-angle-demo/server/package.json +143 -0
  41. package/src/lib/application/files/gadmin2-game-angle-demo/server/prisma/.generator.prisma +34 -0
  42. package/src/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +16 -0
  43. package/src/lib/application/files/gadmin2-game-angle-demo/server/scripts/lib/page-helpers.ts +157 -0
  44. package/src/lib/application/files/gadmin2-game-angle-demo/server/scripts/page-manage.ts +290 -0
  45. package/src/lib/application/files/gadmin2-game-angle-demo/server/scripts/permission-manage.ts +184 -0
  46. package/src/lib/application/files/gadmin2-game-angle-demo/server/scripts/prismaModels.ts +143 -0
  47. package/src/lib/application/files/gadmin2-game-angle-demo/server/scripts/sync-resources.ts +100 -0
  48. package/src/lib/application/files/gadmin2-game-angle-demo/server/scripts/syncDataMngtPages.ts +119 -0
  49. package/src/lib/application/files/gadmin2-game-angle-demo/server/seed/games.ts +1 -0
  50. package/src/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +21 -0
  51. package/src/lib/application/files/gadmin2-game-angle-demo/server/seed/permissions.ts +244 -0
  52. package/src/lib/application/files/gadmin2-game-angle-demo/server/seed/users.ts +7 -0
  53. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/alias.config.ts +7 -0
  54. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/app.controller.spec.ts +22 -0
  55. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/app.controller.ts +192 -0
  56. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/app.module.ts +91 -0
  57. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/app.service.ts +189 -0
  58. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/auth.guard.ts +154 -0
  59. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/http-cache.interceptor.ts +21 -0
  60. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/logger.ts +19 -0
  61. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/roles.guard.ts +47 -0
  62. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/safe-log.util.ts +176 -0
  63. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/taihu.ts +175 -0
  64. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/tracing.ts +174 -0
  65. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/trim.pipe.ts +51 -0
  66. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/utils.ts +145 -0
  67. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/lib/woaAuth.ts +95 -0
  68. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +132 -0
  69. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.controller.spec.ts +20 -0
  70. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.controller.ts +190 -0
  71. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.module.ts +10 -0
  72. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.service.spec.ts +338 -0
  73. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.service.ts +83 -0
  74. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.controller.spec.ts +20 -0
  75. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.controller.ts +81 -0
  76. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.dto.ts +49 -0
  77. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.module.ts +11 -0
  78. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.service.spec.ts +334 -0
  79. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.service.ts +249 -0
  80. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.controller.spec.ts +20 -0
  81. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.controller.ts +188 -0
  82. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.module.ts +10 -0
  83. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.service.spec.ts +18 -0
  84. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.service.ts +83 -0
  85. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +4 -0
  86. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.controller.spec.ts +20 -0
  87. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.controller.ts +250 -0
  88. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.module.ts +10 -0
  89. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.service.spec.ts +18 -0
  90. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.service.ts +1051 -0
  91. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.controller.spec.ts +20 -0
  92. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.controller.ts +196 -0
  93. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.module.ts +13 -0
  94. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.service.spec.ts +18 -0
  95. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.service.ts +219 -0
  96. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.controller.spec.ts +20 -0
  97. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.controller.ts +196 -0
  98. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.module.ts +10 -0
  99. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.service.spec.ts +18 -0
  100. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.service.ts +199 -0
  101. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.controller.spec.ts +20 -0
  102. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.controller.ts +210 -0
  103. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.module.ts +12 -0
  104. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.service.spec.ts +18 -0
  105. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.service.ts +862 -0
  106. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/roles-refresher.service.ts +133 -0
  107. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.controller.spec.ts +20 -0
  108. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.controller.ts +196 -0
  109. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.module.ts +10 -0
  110. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.service.spec.ts +18 -0
  111. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.service.ts +201 -0
  112. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.controller.spec.ts +20 -0
  113. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.controller.ts +196 -0
  114. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.module.ts +10 -0
  115. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.service.spec.ts +18 -0
  116. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.service.ts +216 -0
  117. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.controller.spec.ts +20 -0
  118. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.controller.ts +198 -0
  119. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.module.ts +10 -0
  120. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.service.spec.ts +18 -0
  121. package/src/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.service.ts +104 -0
  122. package/src/lib/application/files/gadmin2-game-angle-demo/server/start-prod.sh +130 -0
  123. package/src/lib/application/files/gadmin2-game-angle-demo/server/test/app.e2e-spec.ts +24 -0
  124. package/src/lib/application/files/gadmin2-game-angle-demo/server/test/jest-e2e.json +9 -0
  125. package/src/lib/application/files/gadmin2-game-angle-demo/server/tsconfig.build.json +4 -0
  126. package/src/lib/application/files/gadmin2-game-angle-demo/server/tsconfig.json +36 -0
  127. package/src/lib/application/files/gadmin2-game-angle-demo/server/yarn.lock +7737 -0
  128. package/src/lib/application/files/gadmin2-game-angle-demo/web/.env +2 -0
  129. package/src/lib/application/files/gadmin2-game-angle-demo/web/.eslintrc.json +38 -0
  130. package/src/lib/application/files/gadmin2-game-angle-demo/web/.npmrc +1 -0
  131. package/src/lib/application/files/gadmin2-game-angle-demo/web/.prettierignore +2 -0
  132. package/src/lib/application/files/gadmin2-game-angle-demo/web/.prettierrc +4 -0
  133. package/src/lib/application/files/gadmin2-game-angle-demo/web/README.MD +48 -0
  134. package/src/lib/application/files/gadmin2-game-angle-demo/web/dev-shell-entry.html +49 -0
  135. package/src/lib/application/files/gadmin2-game-angle-demo/web/index.html +19 -0
  136. package/src/lib/application/files/gadmin2-game-angle-demo/web/package.json +92 -0
  137. package/src/lib/application/files/gadmin2-game-angle-demo/web/postcss.config.cjs +6 -0
  138. package/src/lib/application/files/gadmin2-game-angle-demo/web/public/favicon.ico +0 -0
  139. package/src/lib/application/files/gadmin2-game-angle-demo/web/public/images/flags/en.svg +1 -0
  140. package/src/lib/application/files/gadmin2-game-angle-demo/web/public/images/flags/zh_CN.svg +11 -0
  141. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +137 -0
  142. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/auditLogProvider.ts +89 -0
  143. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +144 -0
  144. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +287 -0
  145. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/ListPageHeader.tsx +56 -0
  146. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/RowActions.tsx +318 -0
  147. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +323 -0
  148. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/SqlModal.tsx +495 -0
  149. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/VanillaJSONEditor/index.css +10 -0
  150. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/VanillaJSONEditor/index.jsx +53 -0
  151. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentContext.tsx +375 -0
  152. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/ElementInspector.tsx +1133 -0
  153. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/agentAttributes.ts +70 -0
  154. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/index.ts +8 -0
  155. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/inspectorActions.ts +1034 -0
  156. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/pagePathUtils.ts +66 -0
  157. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/promptGenerator.ts +135 -0
  158. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/propPatcher.ts +84 -0
  159. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +58 -0
  160. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/index.ts +4 -0
  161. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +96 -0
  162. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +72 -0
  163. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +104 -0
  164. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/index.tsx +2 -0
  165. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/BarChart/index.tsx +896 -0
  166. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartSwitcher/index.tsx +219 -0
  167. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartViewer/index.tsx +159 -0
  168. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Filter/index.tsx +192 -0
  169. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/LineChart/index.tsx +1034 -0
  170. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/NumCard.module.css +8 -0
  171. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/index.tsx +509 -0
  172. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumLineCard/index.tsx +66 -0
  173. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/PieChart/index.tsx +552 -0
  174. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/RadarChart/index.tsx +263 -0
  175. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Section/index.tsx +35 -0
  176. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Table/index.tsx +207 -0
  177. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/TreemapChart/index.tsx +382 -0
  178. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/WorldMap/index.tsx +135 -0
  179. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/chart-constants.ts +53 -0
  180. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/InfoIcon.tsx +8 -0
  181. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/index.ts +1 -0
  182. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/config.ts +31 -0
  183. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/nameMap.json +9 -0
  184. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/world.geo.json +39349 -0
  185. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/metric-info-tooltip/index.tsx +19 -0
  186. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/business/index.tsx +65 -0
  187. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +54 -0
  188. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/custom-avatar.tsx +42 -0
  189. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/index.ts +8 -0
  190. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +106 -0
  191. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/index.ts +4 -0
  192. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +32 -0
  193. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/logo.tsx +19 -0
  194. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +431 -0
  195. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/title.tsx +61 -0
  196. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/offLayoutArea/index.tsx +5 -0
  197. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/pagination-total.tsx +21 -0
  198. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/index.ts +1 -0
  199. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/role-tag.tsx +44 -0
  200. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/components/text.tsx +78 -0
  201. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/config/http.ts +49 -0
  202. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +428 -0
  203. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +16 -0
  204. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +199 -0
  205. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +335 -0
  206. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DeleteDataConfirm.tsx +56 -0
  207. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +401 -0
  208. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/EditDataModal.tsx +129 -0
  209. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/SkillMenu.tsx +202 -0
  210. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/UndoConfirm.tsx +36 -0
  211. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/index.tsx +8 -0
  212. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +835 -0
  213. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/enums/audit-log.enum.ts +13 -0
  214. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/enums/index.ts +1 -0
  215. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +471 -0
  216. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/get-name-initials.ts +8 -0
  217. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/get-random-color.ts +27 -0
  218. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/http.ts +84 -0
  219. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/index.tsx +8 -0
  220. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +491 -0
  221. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +82 -0
  222. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/page-tree.ts +74 -0
  223. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +226 -0
  224. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/utils.tsx +9 -0
  225. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/index.ts +7 -0
  226. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/types.ts +138 -0
  227. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchDelete.ts +191 -0
  228. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperations.ts +153 -0
  229. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperationsCore.ts +193 -0
  230. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchUpdate.ts +182 -0
  231. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +220 -0
  232. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useECharts.tsx +144 -0
  233. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useFetchData.ts +33 -0
  234. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +303 -0
  235. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRoles.ts +34 -0
  236. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRowSelection.ts +38 -0
  237. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useUserPageAccess.ts +353 -0
  238. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +23 -0
  239. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/index.tsx +27 -0
  240. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +321 -0
  241. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +324 -0
  242. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/meta.json +4 -0
  243. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +81 -0
  244. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +3 -0
  245. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.tsx +134 -0
  246. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/create.tsx +105 -0
  247. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +121 -0
  248. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.ts +8 -0
  249. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.tsx +4 -0
  250. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/list.tsx +220 -0
  251. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +74 -0
  252. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +87 -0
  253. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasEditPage.tsx +192 -0
  254. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +409 -0
  255. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +1372 -0
  256. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +384 -0
  257. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +476 -0
  258. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/ComponentThumbnail.tsx +137 -0
  259. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/IsolatedLivePreview.tsx +101 -0
  260. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/LivePreview.tsx +236 -0
  261. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +200 -0
  262. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasApi.ts +92 -0
  263. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasConfigRegistry.tsx +25 -0
  264. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +875 -0
  265. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +126 -0
  266. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasI18n.ts +11 -0
  267. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +115 -0
  268. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ChartViewerConfigModal.tsx +217 -0
  269. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +153 -0
  270. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +211 -0
  271. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +90 -0
  272. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +87 -0
  273. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +204 -0
  274. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/demos.ts +1153 -0
  275. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/index.tsx +2 -0
  276. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +45 -0
  277. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +45 -0
  278. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +108 -0
  279. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/create.tsx +105 -0
  280. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +121 -0
  281. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/index.tsx +4 -0
  282. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +237 -0
  283. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +74 -0
  284. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +177 -0
  285. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/CreatePageModal.tsx +42 -0
  286. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/EditPageModal.tsx +46 -0
  287. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageDetailDrawer.tsx +136 -0
  288. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageFormModal.tsx +815 -0
  289. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/hooks/usePageManagement.ts +40 -0
  290. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.ts +1 -0
  291. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +1370 -0
  292. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/queries.ts +17 -0
  293. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/types.ts +45 -0
  294. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +1090 -0
  295. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/CreateModal.tsx +25 -0
  296. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/EditModal.tsx +28 -0
  297. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/ResourceDetailDrawer.tsx +177 -0
  298. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +230 -0
  299. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.ts +2 -0
  300. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +250 -0
  301. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/queries.ts +10 -0
  302. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/types.ts +9 -0
  303. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/CreateModal.tsx +30 -0
  304. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/EditModal.tsx +47 -0
  305. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/RoleDetailDrawer.tsx +66 -0
  306. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +300 -0
  307. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/hooks/useRolePage.ts +35 -0
  308. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.ts +1 -0
  309. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +405 -0
  310. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/queries.ts +8 -0
  311. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/types.ts +8 -0
  312. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/create-modal.tsx +17 -0
  313. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/edit-modal.tsx +19 -0
  314. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/form-modal.tsx +194 -0
  315. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/index.ts +5 -0
  316. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/role-tag.tsx +48 -0
  317. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +145 -0
  318. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.ts +1 -0
  319. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +377 -0
  320. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/queries.ts +14 -0
  321. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/setupTests.ts +5 -0
  322. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +132 -0
  323. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +58 -0
  324. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +128 -0
  325. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +18 -0
  326. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +21 -0
  327. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/types/audit-log.ts +1 -0
  328. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/types/index.ts +3 -0
  329. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/types/role.ts +7 -0
  330. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/types/user.ts +1 -0
  331. package/src/lib/application/files/gadmin2-game-angle-demo/web/src/vite-env.d.ts +13 -0
  332. package/src/lib/application/files/gadmin2-game-angle-demo/web/tsconfig.json +28 -0
  333. package/src/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +48 -0
  334. package/src/lib/application/files/gadmin2-game-angle-demo/web/yarn.lock +9482 -0
  335. package/src/lib/class/class.schema.d.ts +32 -0
  336. package/src/lib/class/files/js/__name__.js +1 -0
  337. package/src/lib/class/files/js/__name__.spec.js +7 -0
  338. package/src/lib/class/files/ts/__name__.spec.ts +7 -0
  339. package/src/lib/class/files/ts/__name__.ts +1 -0
  340. package/src/lib/client-app/angular/angular.schema.d.ts +32 -0
  341. package/src/lib/client-app/angular/files/angular.constants.ts +4 -0
  342. package/src/lib/client-app/angular/files/angular.module.ts +41 -0
  343. package/src/lib/client-app/angular/files/angular.providers.ts +27 -0
  344. package/src/lib/client-app/angular/files/angular.utils.ts +19 -0
  345. package/src/lib/client-app/angular/files/interfaces/angular-options.interface.ts +87 -0
  346. package/src/lib/client-app/angular/files/loaders/abstract.loader.ts +16 -0
  347. package/src/lib/client-app/angular/files/loaders/express.loader.ts +25 -0
  348. package/src/lib/client-app/angular/files/loaders/fastify.loader.ts +34 -0
  349. package/src/lib/client-app/angular/files/loaders/noop.loader.ts +12 -0
  350. package/src/lib/configuration/configuration.schema.d.ts +18 -0
  351. package/src/lib/configuration/files/js/nest-cli.json +6 -0
  352. package/src/lib/configuration/files/ts/nest-cli.json +5 -0
  353. package/src/lib/controller/controller.schema.d.ts +45 -0
  354. package/src/lib/controller/files/js/__name__.controller.js +4 -0
  355. package/src/lib/controller/files/js/__name__.controller.spec.js +18 -0
  356. package/src/lib/controller/files/ts/__name__.controller.spec.ts +18 -0
  357. package/src/lib/controller/files/ts/__name__.controller.ts +137 -0
  358. package/src/lib/decorator/decorator.schema.d.ts +24 -0
  359. package/src/lib/decorator/files/js/__name__.decorator.js +3 -0
  360. package/src/lib/decorator/files/ts/__name__.decorator.ts +3 -0
  361. package/src/lib/filter/files/js/__name__.filter.js +6 -0
  362. package/src/lib/filter/files/js/__name__.filter.spec.js +7 -0
  363. package/src/lib/filter/files/ts/__name__.filter.spec.ts +7 -0
  364. package/src/lib/filter/files/ts/__name__.filter.ts +6 -0
  365. package/src/lib/filter/filter.schema.d.ts +28 -0
  366. package/src/lib/gateway/files/js/__name__.gateway.js +9 -0
  367. package/src/lib/gateway/files/js/__name__.gateway.spec.js +18 -0
  368. package/src/lib/gateway/files/ts/__name__.gateway.spec.ts +18 -0
  369. package/src/lib/gateway/files/ts/__name__.gateway.ts +9 -0
  370. package/src/lib/gateway/gateway.schema.d.ts +36 -0
  371. package/src/lib/guard/files/js/__name__.guard.js +8 -0
  372. package/src/lib/guard/files/js/__name__.guard.spec.js +7 -0
  373. package/src/lib/guard/files/ts/__name__.guard.spec.ts +7 -0
  374. package/src/lib/guard/files/ts/__name__.guard.ts +11 -0
  375. package/src/lib/guard/guard.schema.d.ts +28 -0
  376. package/src/lib/interceptor/files/js/__name__.interceptor.js +8 -0
  377. package/src/lib/interceptor/files/js/__name__.interceptor.spec.js +7 -0
  378. package/src/lib/interceptor/files/ts/default/__name__.interceptor.spec.ts +7 -0
  379. package/src/lib/interceptor/files/ts/default/__name__.interceptor.ts +9 -0
  380. package/src/lib/interceptor/files/ts/generated/__name__.interceptor.spec.ts +7 -0
  381. package/src/lib/interceptor/files/ts/generated/__name__.interceptor.ts +13 -0
  382. package/src/lib/interceptor/interceptor.schema.d.ts +35 -0
  383. package/src/lib/interface/files/__name__.interface.ts +1 -0
  384. package/src/lib/interface/interface.schema.d.ts +20 -0
  385. package/src/lib/library/files/js/.babelrc +4 -0
  386. package/src/lib/library/files/js/jsconfig.json +9 -0
  387. package/src/lib/library/files/js/src/__name__.module.js +8 -0
  388. package/src/lib/library/files/js/src/__name__.service.js +4 -0
  389. package/src/lib/library/files/js/src/__name__.service.spec.js +18 -0
  390. package/src/lib/library/files/js/src/index.js +2 -0
  391. package/src/lib/library/files/ts/src/__name__.module.ts +8 -0
  392. package/src/lib/library/files/ts/src/__name__.service.spec.ts +18 -0
  393. package/src/lib/library/files/ts/src/__name__.service.ts +4 -0
  394. package/src/lib/library/files/ts/src/index.ts +2 -0
  395. package/src/lib/library/files/ts/tsconfig.lib.json +9 -0
  396. package/src/lib/library/library.schema.d.ts +24 -0
  397. package/src/lib/middleware/files/js/__name__.middleware.js +8 -0
  398. package/src/lib/middleware/files/js/__name__.middleware.spec.js +7 -0
  399. package/src/lib/middleware/files/ts/__name__.middleware.spec.ts +7 -0
  400. package/src/lib/middleware/files/ts/__name__.middleware.ts +8 -0
  401. package/src/lib/middleware/middleware.schema.d.ts +28 -0
  402. package/src/lib/module/files/js/__name__.module.js +4 -0
  403. package/src/lib/module/files/ts/__name__.module.ts +4 -0
  404. package/src/lib/module/module.schema.d.ts +40 -0
  405. package/src/lib/pipe/files/js/__name__.pipe.js +8 -0
  406. package/src/lib/pipe/files/js/__name__.pipe.spec.js +7 -0
  407. package/src/lib/pipe/files/ts/__name__.pipe.spec.ts +7 -0
  408. package/src/lib/pipe/files/ts/__name__.pipe.ts +8 -0
  409. package/src/lib/pipe/pipe.schema.d.ts +28 -0
  410. package/src/lib/prisma-resource/files/ts/__name__.controller.spec.ts +20 -0
  411. package/src/lib/prisma-resource/files/ts/__name__.controller.ts +63 -0
  412. package/src/lib/prisma-resource/files/ts/__name__.module.ts +9 -0
  413. package/src/lib/prisma-resource/files/ts/__name__.service.spec.ts +18 -0
  414. package/src/lib/prisma-resource/files/ts/__name__.service.ts +28 -0
  415. package/src/lib/prisma-resource/files/ts/dto/create-__name@singular__.dto.ts +1 -0
  416. package/src/lib/prisma-resource/files/ts/dto/create-__name@singular__.input.ts +7 -0
  417. package/src/lib/prisma-resource/files/ts/dto/update-__name@singular__.dto.ts +6 -0
  418. package/src/lib/prisma-resource/files/ts/dto/update-__name@singular__.input.ts +13 -0
  419. package/src/lib/prisma-resource/files/ts/entities/__name@singular@ent__.ts +7 -0
  420. package/src/lib/prisma-resource/prisma-resource.schema.d.ts +57 -0
  421. package/src/lib/provider/files/js/__name__.js +4 -0
  422. package/src/lib/provider/files/js/__name__.spec.js +18 -0
  423. package/src/lib/provider/files/ts/__name__.spec.ts +18 -0
  424. package/src/lib/provider/files/ts/__name__.ts +4 -0
  425. package/src/lib/provider/provider.schema.d.ts +48 -0
  426. package/src/lib/resolver/files/js/__name__.resolver.js +4 -0
  427. package/src/lib/resolver/files/js/__name__.resolver.spec.js +18 -0
  428. package/src/lib/resolver/files/ts/__name__.resolver.spec.ts +18 -0
  429. package/src/lib/resolver/files/ts/__name__.resolver.ts +4 -0
  430. package/src/lib/resolver/resolver.schema.d.ts +36 -0
  431. package/src/lib/resource/files/ts/__name__.controller.spec.ts +20 -0
  432. package/src/lib/resource/files/ts/__name__.controller.ts +63 -0
  433. package/src/lib/resource/files/ts/__name__.gateway.spec.ts +19 -0
  434. package/src/lib/resource/files/ts/__name__.gateway.ts +34 -0
  435. package/src/lib/resource/files/ts/__name__.graphql +24 -0
  436. package/src/lib/resource/files/ts/__name__.module.ts +9 -0
  437. package/src/lib/resource/files/ts/__name__.resolver.spec.ts +19 -0
  438. package/src/lib/resource/files/ts/__name__.resolver.ts +60 -0
  439. package/src/lib/resource/files/ts/__name__.service.spec.ts +18 -0
  440. package/src/lib/resource/files/ts/__name__.service.ts +28 -0
  441. package/src/lib/resource/files/ts/dto/create-__name@singular__.dto.ts +1 -0
  442. package/src/lib/resource/files/ts/dto/create-__name@singular__.input.ts +7 -0
  443. package/src/lib/resource/files/ts/dto/update-__name@singular__.dto.ts +6 -0
  444. package/src/lib/resource/files/ts/dto/update-__name@singular__.input.ts +13 -0
  445. package/src/lib/resource/files/ts/entities/__name@singular@ent__.ts +7 -0
  446. package/src/lib/resource/resource.schema.d.ts +57 -0
  447. package/src/lib/service/files/js/__name__.service.js +4 -0
  448. package/src/lib/service/files/js/__name__.service.spec.js +18 -0
  449. package/src/lib/service/files/ts/__name__.service.spec.ts +18 -0
  450. package/src/lib/service/files/ts/__name__.service.ts +4 -0
  451. package/src/lib/service/service.schema.d.ts +44 -0
  452. package/src/lib/sub-app/files/js/.babelrc +4 -0
  453. package/src/lib/sub-app/files/js/index.js +2 -0
  454. package/src/lib/sub-app/files/js/jsconfig.json +10 -0
  455. package/src/lib/sub-app/files/js/src/app.controller.js +15 -0
  456. package/src/lib/sub-app/files/js/src/app.controller.spec.js +22 -0
  457. package/src/lib/sub-app/files/js/src/app.module.js +10 -0
  458. package/src/lib/sub-app/files/js/src/app.service.js +8 -0
  459. package/src/lib/sub-app/files/js/src/main.js +8 -0
  460. package/src/lib/sub-app/files/js/test/app.e2e-spec.js +23 -0
  461. package/src/lib/sub-app/files/js/test/jest-e2e.json +5 -0
  462. package/src/lib/sub-app/files/ts/src/__name__.controller.spec.ts +22 -0
  463. package/src/lib/sub-app/files/ts/src/__name__.controller.ts +12 -0
  464. package/src/lib/sub-app/files/ts/src/__name__.module.ts +10 -0
  465. package/src/lib/sub-app/files/ts/src/__name__.service.ts +8 -0
  466. package/src/lib/sub-app/files/ts/src/main.ts +8 -0
  467. package/src/lib/sub-app/files/ts/test/app.e2e-spec.ts +24 -0
  468. package/src/lib/sub-app/files/ts/test/jest-e2e.json +9 -0
  469. package/src/lib/sub-app/files/ts/tsconfig.app.json +9 -0
  470. package/src/lib/sub-app/sub-app.schema.d.ts +21 -0
  471. package/src/lib/sub-app/workspace/js/.babelrc +4 -0
  472. package/src/lib/sub-app/workspace/js/index.js +2 -0
  473. package/src/lib/sub-app/workspace/js/jsconfig.json +10 -0
  474. package/src/lib/sub-app/workspace/ts/tsconfig.app.json +9 -0
@@ -0,0 +1,143 @@
1
+ {
2
+ "name": "erp-backend",
3
+ "version": "0.0.1",
4
+ "description": "",
5
+ "author": "",
6
+ "private": true,
7
+ "license": "UNLICENSED",
8
+ "scripts": {
9
+ "prebuild": "rimraf dist",
10
+ "build": "gadmin2 build",
11
+ "format": "prettier --write \"../config/*.ts\" \"src/**/*.ts\" \"test/**/*.ts\"",
12
+ "prepare": "cd .. && husky install",
13
+ "start": "dotenv -e .env.local -e .env -- gadmin2 start",
14
+ "start:dev": "dotenv -e .env.local -e .env -- gadmin2 start --watch",
15
+ "start:debug": "dotenv -e .env.local -e .env -- gadmin2 start --debug --watch",
16
+ "start:prod": "/bin/sh start-prod.sh",
17
+ "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
18
+ "test": "jest",
19
+ "test:watch": "jest --watch",
20
+ "test:cov": "jest --coverage",
21
+ "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
22
+ "test:e2e": "jest --config ./test/jest-e2e.json",
23
+ "migrate:dev": "npm run push:db && dotenv -e .env.local -e .env -- prisma migrate",
24
+ "migrate:dev:create": "dotenv -e .env.local -e .env -- prisma migrate dev --create-only",
25
+ "migrate:deploy": "dotenv -e .env.local -e .env -- prisma migrate deploy",
26
+ "migrate:status": "dotenv -e .env.local -e .env -- prisma migrate status",
27
+ "generate": "dotenv -e .env.local -e .env -- npx prisma generate",
28
+ "generate:dev": "npm run migrate:dev && dotenv -e .env.local -e .env -- npx prisma generate",
29
+ "postgenerate:dev": "dotenv -e .env.local -e .env -- ts-node scripts/syncDataMngtPages.ts && dotenv -e .env.local -e .env -- ts-node scripts/sync-resources.ts",
30
+ "generate:web": "dotenv -e .env.local -e .env -- npx prisma generate --generator react",
31
+ "generate:server": "dotenv -e .env.local -e .env -- npx prisma generate --generator client --generator nestjs",
32
+ "push:db": "dotenv -e .env.local -e .env -- prisma db push --skip-generate",
33
+ "seed": "dotenv -e .env.local -e .env -- ts-node seed/index.ts",
34
+ "prisma:studio": "dotenv -e .env.local -e .env -- prisma studio"
35
+ },
36
+ "dependencies": {
37
+ "@azure/identity": "^4.13.0",
38
+ "@gadmin2n/nest-common": "^0.0.41",
39
+ "@nestjs/cache-manager": "^3.0.1",
40
+ "@nestjs/common": "^10.4.15",
41
+ "@nestjs/config": "^3.2.0",
42
+ "@nestjs/core": "^10.4.15",
43
+ "@nestjs/mapped-types": "^2.0.0",
44
+ "@nestjs/platform-express": "^10.4.15",
45
+ "@nestjs/schedule": "^4.0.1",
46
+ "@nestjs/serve-static": "^4.0.1",
47
+ "@nestjs/swagger": "^7.3.0",
48
+ "@opentelemetry/api": "^1.9.0",
49
+ "@opentelemetry/exporter-trace-otlp-grpc": "^0.211.0",
50
+ "@opentelemetry/instrumentation-express": "^0.47.0",
51
+ "@opentelemetry/instrumentation-http": "^0.211.0",
52
+ "@opentelemetry/instrumentation-nestjs-core": "^0.44.0",
53
+ "@opentelemetry/instrumentation-pg": "^0.51.0",
54
+ "@opentelemetry/resources": "^2.0.0",
55
+ "@opentelemetry/sdk-node": "^0.211.0",
56
+ "@opentelemetry/semantic-conventions": "^1.39.0",
57
+ "@prisma/client": "^6.19.0",
58
+ "@prisma/instrumentation": "6.19.0",
59
+ "axios": "^1.13.2",
60
+ "cache-manager": "^6.4.3",
61
+ "class-transformer": "^0.5.1",
62
+ "class-validator": "^0.13.2",
63
+ "cookie-parser": "^1.4.6",
64
+ "crypto-js": "^4.2.0",
65
+ "csvtojson": "^2.0.10",
66
+ "dayjs": "^1.10.7",
67
+ "dotenv": "^16.1.3",
68
+ "dotenv-cli": "^7.4.4",
69
+ "jose": "^4.14.4",
70
+ "js-md5": "^0.7.3",
71
+ "jsonwebtoken": "^9.0.2",
72
+ "module-alias": "^2.2.3",
73
+ "nest-access-control": "^2.2.0",
74
+ "nest-winston": "^1.9.7",
75
+ "nestjs-prisma": "^0.25.0",
76
+ "pg": "^8.16.3",
77
+ "prisma": "^6.19.0",
78
+ "reflect-metadata": "^0.1.13",
79
+ "request": "^2.88.2",
80
+ "rimraf": "^3.0.2",
81
+ "rxjs": "^7.2.0",
82
+ "swagger-ui-express": "^4.3.0",
83
+ "winston": "^3.7.2",
84
+ "xlsx": "^0.18.5"
85
+ },
86
+ "devDependencies": {
87
+ "@faker-js/faker": "^10.4.0",
88
+ "@gadmin2n/prisma-nest-generator": "0.0.35",
89
+ "@gadmin2n/prisma-react-generator": "0.0.51",
90
+ "@nestjs/testing": "^10.4.15",
91
+ "@types/cookie-parser": "^1.4.3",
92
+ "@types/express": "^4.17.21",
93
+ "@types/jest": "^29.0.0",
94
+ "@types/jsonwebtoken": "^9.0.10",
95
+ "@types/multer": "^1.4.7",
96
+ "@types/node": "^16.0.0",
97
+ "@types/supertest": "^2.0.11",
98
+ "@typescript-eslint/eslint-plugin": "^5.0.0",
99
+ "@typescript-eslint/parser": "^5.0.0",
100
+ "eslint": "^8.0.1",
101
+ "eslint-config-prettier": "^8.3.0",
102
+ "eslint-plugin-prettier": "^4.0.0",
103
+ "husky": "^8.0.0",
104
+ "jest": "^29.0.0",
105
+ "lint-staged": "^13.0.0",
106
+ "prettier": "^2.3.2",
107
+ "prettier-plugin-organize-imports": "^3.0.3",
108
+ "prisma-dbml-generator": "^0.9.1",
109
+ "source-map-support": "^0.5.20",
110
+ "supertest": "^6.1.3",
111
+ "ts-jest": "^29.0.0",
112
+ "ts-loader": "^9.2.3",
113
+ "ts-node": "^10.0.0",
114
+ "tsconfig-paths": "^3.10.1",
115
+ "typescript": "^5.3.3"
116
+ },
117
+ "jest": {
118
+ "moduleFileExtensions": [
119
+ "js",
120
+ "json",
121
+ "ts"
122
+ ],
123
+ "rootDir": "src",
124
+ "testRegex": ".*\\.spec\\.ts$",
125
+ "transform": {
126
+ "^.+\\.(t|j)s$": "ts-jest"
127
+ },
128
+ "collectCoverageFrom": [
129
+ "**/*.(t|j)s"
130
+ ],
131
+ "coverageDirectory": "../coverage",
132
+ "testEnvironment": "node"
133
+ },
134
+ "_moduleAliases": {
135
+ "@": "src"
136
+ },
137
+ "prisma": {
138
+ "seed": "echo 'npm run seed'"
139
+ },
140
+ "lint-staged": {
141
+ "**/*.{ts,tsx}": "prettier --write"
142
+ }
143
+ }
@@ -0,0 +1,34 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+ datasource db {
4
+ provider = "postgresql"
5
+ url = env("DATABASE_URL")
6
+ }
7
+
8
+ generator client {
9
+ provider = "prisma-client-js"
10
+ previewFeatures = ["tracing"]
11
+ }
12
+
13
+ generator nestjs {
14
+ provider = "prisma-nest-generator"
15
+ output = "../src/generated"
16
+ outputToNestJsResourceStructure = "true"
17
+ exportRelationModifierClasses = "true"
18
+ reExport = "false"
19
+ createDtoPrefix = "Create"
20
+ updateDtoPrefix = "Update"
21
+ dtoSuffix = "Dto"
22
+ entityPrefix = ""
23
+ entitySuffix = "Entity"
24
+ fileNamingStyle = "camel"
25
+ }
26
+
27
+ generator react {
28
+ provider = "prisma-react-generator"
29
+ pagesDir = "../../web/src/routes"
30
+ }
31
+
32
+ generator dbml {
33
+ provider = "prisma-dbml-generator"
34
+ }
@@ -0,0 +1,16 @@
1
+ import 'dotenv/config';
2
+ import { defineConfig } from 'prisma/config';
3
+
4
+ export default defineConfig({
5
+ experimental: {
6
+ externalTables: true,
7
+ },
8
+ // 将要被 Prisma 标记为“外部管理”的表名列表
9
+ // 可以使用 "schema.table" 或仅 "table"(依你 DB/项目设置)
10
+ tables: {
11
+ external: [
12
+ 'public.users', // public.users
13
+ ],
14
+ },
15
+ // 其余配置项...
16
+ });
@@ -0,0 +1,157 @@
1
+ /**
2
+ * page-helpers.ts — 页面与权限管理的共享 DB 操作原语
3
+ *
4
+ * 接受 PrismaClient 作为参数,可被 CLI 脚本(page-manage.ts / permission-manage.ts)
5
+ * 和 seed 函数(syncDataMngtPages.ts / seed/permissions.ts)共同调用。
6
+ */
7
+
8
+ import { PrismaClient } from '@prisma/client';
9
+
10
+ export const FULL_ACTIONS = ['createAny', 'readAny', 'updateAny', 'deleteAny'];
11
+
12
+ // ─── Resource ─────────────────────────────────────────────────────────────────
13
+
14
+ /**
15
+ * Upsert a Resource row.
16
+ * update: {} preserves any manual edits on re-run.
17
+ */
18
+ export async function upsertResource(
19
+ prisma: PrismaClient,
20
+ code: string,
21
+ description = `${code} resource`,
22
+ ) {
23
+ return prisma.resource.upsert({
24
+ where: { code },
25
+ update: {},
26
+ create: { code, name: code, description, isCommonResource: false },
27
+ });
28
+ }
29
+
30
+ // ─── Page ─────────────────────────────────────────────────────────────────────
31
+
32
+ export interface PageDef {
33
+ code: string;
34
+ name: string;
35
+ zhName?: string;
36
+ enName?: string;
37
+ sortOrder?: number;
38
+ parentId?: number;
39
+ isVirtual?: boolean;
40
+ /** Only applied on create — update: {} preserves user edits */
41
+ path?: string;
42
+ }
43
+
44
+ /**
45
+ * Upsert a Page row.
46
+ * update: {} on the default call so manual DB edits are preserved.
47
+ * Pass updateData to selectively sync specific fields (e.g. path).
48
+ */
49
+ export async function upsertPage(
50
+ prisma: PrismaClient,
51
+ def: PageDef,
52
+ updateData: Record<string, unknown> = {},
53
+ ) {
54
+ return prisma.page.upsert({
55
+ where: { code: def.code },
56
+ update: updateData,
57
+ create: {
58
+ code: def.code,
59
+ name: def.name,
60
+ zhName: def.zhName ?? def.name,
61
+ enName: def.enName ?? def.name,
62
+ isVirtual: def.isVirtual ?? false,
63
+ sortOrder: def.sortOrder ?? 9999,
64
+ ...(def.parentId !== undefined && { parentId: def.parentId }),
65
+ ...(def.path !== undefined && { path: def.path }),
66
+ },
67
+ });
68
+ }
69
+
70
+ // ─── PageResource ─────────────────────────────────────────────────────────────
71
+
72
+ /**
73
+ * Upsert a Resource then link it to a page via PageResource.
74
+ * Idempotent — safe to re-run.
75
+ */
76
+ export async function bindResourceToPage(
77
+ prisma: PrismaClient,
78
+ pageId: number,
79
+ code: string,
80
+ description?: string,
81
+ ) {
82
+ const resource = await upsertResource(
83
+ prisma,
84
+ code,
85
+ description ?? `${code} resource`,
86
+ );
87
+ await prisma.pageResource.upsert({
88
+ where: { pageId_resourceId: { pageId, resourceId: resource.id } },
89
+ update: { actions: FULL_ACTIONS },
90
+ create: { pageId, resourceId: resource.id, actions: FULL_ACTIONS },
91
+ });
92
+ return resource;
93
+ }
94
+
95
+ // ─── Role access ──────────────────────────────────────────────────────────────
96
+
97
+ /**
98
+ * Grant a role access to a page + its linked resources.
99
+ * Upserts RolePages and one RoleResource per resource.
100
+ */
101
+ export async function grantRoleAccess(
102
+ prisma: PrismaClient,
103
+ roleId: number,
104
+ pageId: number,
105
+ resourceIds: number[],
106
+ ) {
107
+ await prisma.rolePages.upsert({
108
+ where: { roleId_pageId: { roleId, pageId } },
109
+ update: {},
110
+ create: { roleId, pageId },
111
+ });
112
+
113
+ for (const resourceId of resourceIds) {
114
+ await prisma.roleResource.upsert({
115
+ where: { roleId_resourceId: { roleId, resourceId } },
116
+ update: { actions: FULL_ACTIONS },
117
+ create: { roleId, resourceId, actions: FULL_ACTIONS },
118
+ });
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Revoke a role's access to a page + its linked resources.
124
+ * Deletes RolePages and RoleResource rows.
125
+ */
126
+ export async function revokeRoleAccess(
127
+ prisma: PrismaClient,
128
+ roleId: number,
129
+ pageId: number,
130
+ resourceIds: number[],
131
+ ) {
132
+ await prisma.rolePages.deleteMany({ where: { roleId, pageId } });
133
+
134
+ for (const resourceId of resourceIds) {
135
+ await prisma.roleResource.deleteMany({ where: { roleId, resourceId } });
136
+ }
137
+ }
138
+
139
+ // ─── Convenience: get resource IDs linked to a page ──────────────────────────
140
+
141
+ export async function getPageResourceIds(
142
+ prisma: PrismaClient,
143
+ pageId: number,
144
+ ): Promise<number[]> {
145
+ const rows = await prisma.pageResource.findMany({
146
+ where: { pageId },
147
+ select: { resourceId: true },
148
+ });
149
+ return rows.map((r) => r.resourceId);
150
+ }
151
+
152
+ export async function getPageResources(prisma: PrismaClient, pageId: number) {
153
+ return prisma.pageResource.findMany({
154
+ where: { pageId },
155
+ include: { resource: { select: { id: true, code: true } } },
156
+ });
157
+ }
@@ -0,0 +1,290 @@
1
+ /**
2
+ * page-manage.ts — 页面与资源绑定管理
3
+ *
4
+ * Usage:
5
+ *
6
+ * ── 创建页面 ──────────────────────────────────────────────────────────────────
7
+ * ts-node scripts/page-manage.ts create \
8
+ * --pageCode myModule (required)
9
+ * --pageName myModule (optional, defaults to pageCode)
10
+ * --zhName "我的模块" (optional)
11
+ * --enName "My Module" (optional)
12
+ * --parentPageCode admin (optional)
13
+ * --sortOrder 1080 (optional, defaults to 9999)
14
+ * --resources myModule,other (optional, comma-separated — binds resources)
15
+ *
16
+ * ── 更新页面 ──────────────────────────────────────────────────────────────────
17
+ * ts-node scripts/page-manage.ts update \
18
+ * --pageCode myModule (required)
19
+ * --pageName newName (optional)
20
+ * --zhName "新名称" (optional)
21
+ * --enName "New Name" (optional)
22
+ * --sortOrder 1090 (optional)
23
+ * --parentPageCode game (optional)
24
+ *
25
+ * ── 删除页面 ──────────────────────────────────────────────────────────────────
26
+ * ts-node scripts/page-manage.ts delete \
27
+ * --pageCode myModule (required)
28
+ *
29
+ * ── 绑定资源 ──────────────────────────────────────────────────────────────────
30
+ * ts-node scripts/page-manage.ts bind \
31
+ * --pageCode myModule (required)
32
+ * --resources res1,res2 (required)
33
+ *
34
+ * ── 解绑资源 ──────────────────────────────────────────────────────────────────
35
+ * ts-node scripts/page-manage.ts unbind \
36
+ * --pageCode myModule (required)
37
+ * --resources res1,res2 (required)
38
+ */
39
+
40
+ import { PrismaClient } from '@prisma/client';
41
+ import { bindResourceToPage, upsertPage } from './lib/page-helpers';
42
+
43
+ const prisma = new PrismaClient();
44
+
45
+ // ─── Arg parser ───────────────────────────────────────────────────────────────
46
+
47
+ function parseArgs(): { action: string; flags: Record<string, string> } {
48
+ const argv = process.argv.slice(2);
49
+ const action = argv[0] && !argv[0].startsWith('--') ? argv[0] : '';
50
+ const flags: Record<string, string> = {};
51
+ for (let i = action ? 1 : 0; i < argv.length; i++) {
52
+ if (argv[i].startsWith('--')) {
53
+ const key = argv[i].slice(2);
54
+ const next = argv[i + 1];
55
+ flags[key] = next && !next.startsWith('--') ? argv[++i] : 'true';
56
+ }
57
+ }
58
+ return { action, flags };
59
+ }
60
+
61
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
62
+
63
+ async function resolveParent(parentPageCode: string): Promise<number> {
64
+ const parent = await prisma.page.findUnique({
65
+ where: { code: parentPageCode },
66
+ });
67
+ if (!parent) {
68
+ console.error(
69
+ `[page-manage] Parent page "${parentPageCode}" not found in DB.`,
70
+ );
71
+ process.exit(1);
72
+ }
73
+ return parent.id;
74
+ }
75
+
76
+ async function requirePage(pageCode: string) {
77
+ const page = await prisma.page.findUnique({ where: { code: pageCode } });
78
+ if (!page) {
79
+ console.error(`[page-manage] Page "${pageCode}" not found in DB.`);
80
+ process.exit(1);
81
+ }
82
+ return page;
83
+ }
84
+
85
+ // ─── Actions ──────────────────────────────────────────────────────────────────
86
+
87
+ async function actionCreate(flags: Record<string, string>) {
88
+ const {
89
+ pageCode,
90
+ pageName,
91
+ zhName,
92
+ enName,
93
+ parentPageCode,
94
+ resources,
95
+ sortOrder,
96
+ } = flags;
97
+ if (!pageCode) {
98
+ console.error('[page-manage] --pageCode is required.');
99
+ process.exit(1);
100
+ }
101
+
102
+ const parentId = parentPageCode
103
+ ? await resolveParent(parentPageCode)
104
+ : undefined;
105
+
106
+ const page = await upsertPage(prisma, {
107
+ code: pageCode,
108
+ name: pageName || pageCode,
109
+ zhName: zhName || pageCode,
110
+ enName: enName || pageCode,
111
+ sortOrder: sortOrder ? parseInt(sortOrder, 10) : 9999,
112
+ parentId,
113
+ });
114
+
115
+ const wasCreated =
116
+ Math.abs(page.createdAt.getTime() - page.updatedAt.getTime()) < 1000;
117
+ if (wasCreated) {
118
+ console.log(`[page-manage] ✚ Created page: ${pageCode} (id=${page.id})`);
119
+ } else {
120
+ console.log(
121
+ `[page-manage] · Page already exists: ${pageCode} (id=${page.id}) — skipped`,
122
+ );
123
+ }
124
+
125
+ if (resources) {
126
+ const codes = resources
127
+ .split(',')
128
+ .map((s) => s.trim())
129
+ .filter(Boolean);
130
+ for (const code of codes) {
131
+ await bindResourceToPage(
132
+ prisma,
133
+ page.id,
134
+ code,
135
+ `${code} resource (bound to page ${pageCode})`,
136
+ );
137
+ console.log(
138
+ `[page-manage] PageResource: page(${pageCode}) ↔ resource(${code})`,
139
+ );
140
+ }
141
+ }
142
+ }
143
+
144
+ async function actionUpdate(flags: Record<string, string>) {
145
+ const { pageCode, pageName, zhName, enName, parentPageCode, sortOrder } =
146
+ flags;
147
+ if (!pageCode) {
148
+ console.error('[page-manage] --pageCode is required.');
149
+ process.exit(1);
150
+ }
151
+
152
+ const page = await requirePage(pageCode);
153
+
154
+ const data: Record<string, unknown> = {};
155
+ if (pageName !== undefined) data.name = pageName;
156
+ if (zhName !== undefined) data.zhName = zhName;
157
+ if (enName !== undefined) data.enName = enName;
158
+ if (sortOrder !== undefined) data.sortOrder = parseInt(sortOrder, 10);
159
+ if (parentPageCode !== undefined)
160
+ data.parentId = await resolveParent(parentPageCode);
161
+
162
+ if (Object.keys(data).length === 0) {
163
+ console.log(
164
+ '[page-manage] No fields to update. Pass at least one of: --pageName --zhName --enName --sortOrder --parentPageCode',
165
+ );
166
+ process.exit(0);
167
+ }
168
+
169
+ await prisma.page.update({ where: { id: page.id }, data });
170
+ console.log(
171
+ `[page-manage] ✎ Updated page: ${pageCode} (id=${page.id})`,
172
+ data,
173
+ );
174
+ }
175
+
176
+ async function actionDelete(flags: Record<string, string>) {
177
+ const { pageCode } = flags;
178
+ if (!pageCode) {
179
+ console.error('[page-manage] --pageCode is required.');
180
+ process.exit(1);
181
+ }
182
+
183
+ const page = await requirePage(pageCode);
184
+
185
+ await prisma.pageResource.deleteMany({ where: { pageId: page.id } });
186
+ await prisma.rolePages.deleteMany({ where: { pageId: page.id } });
187
+ await prisma.page.delete({ where: { id: page.id } });
188
+
189
+ console.log(
190
+ `[page-manage] ✖ Deleted page: ${pageCode} (id=${page.id}) + its PageResource + RolePages rows`,
191
+ );
192
+ }
193
+
194
+ async function actionBind(flags: Record<string, string>) {
195
+ const { pageCode, resources } = flags;
196
+ if (!pageCode) {
197
+ console.error('[page-manage] --pageCode is required.');
198
+ process.exit(1);
199
+ }
200
+ if (!resources) {
201
+ console.error('[page-manage] --resources is required.');
202
+ process.exit(1);
203
+ }
204
+
205
+ const page = await requirePage(pageCode);
206
+ const codes = resources
207
+ .split(',')
208
+ .map((s) => s.trim())
209
+ .filter(Boolean);
210
+
211
+ for (const code of codes) {
212
+ await bindResourceToPage(
213
+ prisma,
214
+ page.id,
215
+ code,
216
+ `${code} resource (bound to page ${pageCode})`,
217
+ );
218
+ console.log(
219
+ `[page-manage] PageResource: page(${pageCode}) ↔ resource(${code})`,
220
+ );
221
+ }
222
+ console.log(
223
+ `[page-manage] ✅ Bound ${codes.length} resource(s) to page: ${pageCode}`,
224
+ );
225
+ }
226
+
227
+ async function actionUnbind(flags: Record<string, string>) {
228
+ const { pageCode, resources } = flags;
229
+ if (!pageCode) {
230
+ console.error('[page-manage] --pageCode is required.');
231
+ process.exit(1);
232
+ }
233
+ if (!resources) {
234
+ console.error('[page-manage] --resources is required.');
235
+ process.exit(1);
236
+ }
237
+
238
+ const page = await requirePage(pageCode);
239
+ const codes = resources
240
+ .split(',')
241
+ .map((s) => s.trim())
242
+ .filter(Boolean);
243
+
244
+ for (const code of codes) {
245
+ const resource = await prisma.resource.findUnique({ where: { code } });
246
+ if (!resource) {
247
+ console.warn(`[page-manage] ⚠ Resource "${code}" not found — skipped`);
248
+ continue;
249
+ }
250
+ await prisma.pageResource.deleteMany({
251
+ where: { pageId: page.id, resourceId: resource.id },
252
+ });
253
+ console.log(
254
+ `[page-manage] Unbound: page(${pageCode}) ↔ resource(${code})`,
255
+ );
256
+ }
257
+ console.log(`[page-manage] ✅ Done.`);
258
+ }
259
+
260
+ // ─── Entry point ──────────────────────────────────────────────────────────────
261
+
262
+ const ACTIONS: Record<string, (f: Record<string, string>) => Promise<void>> = {
263
+ create: actionCreate,
264
+ update: actionUpdate,
265
+ delete: actionDelete,
266
+ bind: actionBind,
267
+ unbind: actionUnbind,
268
+ };
269
+
270
+ async function main() {
271
+ const { action, flags } = parseArgs();
272
+ const handler = ACTIONS[action];
273
+ if (!handler) {
274
+ console.error(
275
+ `[page-manage] Unknown action: "${action}". Valid actions: ${Object.keys(
276
+ ACTIONS,
277
+ ).join(', ')}`,
278
+ );
279
+ process.exit(1);
280
+ }
281
+ await handler(flags);
282
+ console.log('[page-manage] ✅ Done.');
283
+ }
284
+
285
+ main()
286
+ .catch((e) => {
287
+ console.error('[page-manage] Fatal error:', e);
288
+ process.exit(1);
289
+ })
290
+ .finally(() => prisma.$disconnect());