cabloy 5.1.95 → 5.1.96

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 (206) hide show
  1. package/.cabloy-version +1 -0
  2. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +4 -1
  3. package/.claude/skills/cabloy-resource-field-update/SKILL.md +6 -3
  4. package/.github/workflows/vona-test-crud.yml +2 -0
  5. package/.github/workflows/vona-test-mysql.yml +2 -0
  6. package/.github/workflows/vona-test-pg.yml +2 -0
  7. package/.github/workflows/vona-test-sqlite3.yml +2 -0
  8. package/CHANGELOG.md +31 -0
  9. package/CLAUDE.md +1 -0
  10. package/cabloy-docs/ai/playbook-backend-module.md +6 -3
  11. package/cabloy-docs/fullstack/framework-performance.md +3 -3
  12. package/cabloy-docs/fullstack/quickstart.md +1 -1
  13. package/package.json +1 -1
  14. package/scripts/release.ts +27 -1
  15. package/vona/docker-compose-original/docker-compose-dockerfile-app +4 -0
  16. package/vona/docker-compose-original/docker-compose.original.yml +0 -1
  17. package/vona/env/.env +0 -1
  18. package/vona/env/.env.prod +0 -1
  19. package/vona/env/.env.prod.docker +0 -7
  20. package/vona/package.original.json +3 -3
  21. package/vona/packages-cli/cabloy-cli/package.json +2 -2
  22. package/vona/packages-cli/cli/package.json +1 -1
  23. package/vona/packages-cli/cli-set-api/package.json +2 -2
  24. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.bin.build.ts +70 -2
  25. package/vona/packages-utils/babel-plugin-vona-bean-module/package.json +2 -2
  26. package/vona/packages-utils/module-glob/package.json +2 -2
  27. package/vona/packages-utils/module-info-pro/package.json +2 -2
  28. package/vona/packages-utils/utils/package.json +2 -2
  29. package/vona/packages-vona/vona/package.json +1 -1
  30. package/vona/packages-vona/vona-core/package.json +2 -2
  31. package/vona/packages-vona/vona-core/src/lib/addon/addon.ts +77 -0
  32. package/vona/packages-vona/vona-core/src/lib/addon/index.ts +3 -0
  33. package/vona/packages-vona/vona-core/src/lib/addon/sharp.ts +46 -0
  34. package/vona/packages-vona/vona-core/src/lib/addon/sqlite3.ts +23 -0
  35. package/vona/packages-vona/vona-core/src/lib/index.ts +1 -0
  36. package/vona/packages-vona/vona-core/src/lib/utils/index.ts +0 -1
  37. package/vona/packages-vona/vona-core/src/lib/utils/util.ts +5 -0
  38. package/vona/packages-vona/vona-mock/package.json +2 -2
  39. package/vona/pnpm-lock.yaml +414 -64
  40. package/vona/src/backend/cli.ts +2 -5
  41. package/vona/src/backend/config/config/config.ts +0 -4
  42. package/vona/src/suite/a-demo/modules/demo-basic/src/bean/ssrMenu.admin.ts +1 -1
  43. package/vona/src/suite/a-training/modules/training-record/src/.metadata/index.ts +26 -0
  44. package/vona/src/suite/a-training/modules/training-record/src/bean/imageScene.sceneImage.ts +11 -0
  45. package/vona/src/suite/a-training/modules/training-record/src/bean/meta.version.ts +1 -0
  46. package/vona/src/suite/a-training/modules/training-record/src/config/locale/en-us.ts +1 -0
  47. package/vona/src/suite/a-training/modules/training-record/src/config/locale/zh-cn.ts +1 -0
  48. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectResItem.tsx +12 -0
  49. package/vona/src/suite/a-training/modules/training-record/src/dto/recordView.tsx +12 -0
  50. package/vona/src/suite/a-training/modules/training-record/src/entity/record.tsx +26 -1
  51. package/vona/src/suite/a-training/modules/training-record/src/index.ts +1 -0
  52. package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +27 -1
  53. package/vona/src/suite/a-training/modules/training-student/src/bean/imageScene.studentImage.ts +10 -0
  54. package/vona/src/suite/a-training/modules/training-student/src/bean/meta.version.ts +1 -0
  55. package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +1 -0
  56. package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +1 -0
  57. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordBase.tsx +16 -2
  58. package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +1 -1
  59. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx +12 -0
  60. package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +1 -1
  61. package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +13 -1
  62. package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +26 -1
  63. package/vona/src/suite/a-training/modules/training-student/src/index.ts +1 -0
  64. package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +1 -0
  65. package/vona/src/suite-vendor/a-auth/modules/a-auth/package.json +1 -1
  66. package/vona/src/suite-vendor/a-auth/modules/a-auth/src/bean/bean.authProvider.ts +2 -5
  67. package/vona/src/suite-vendor/a-auth/package.json +1 -1
  68. package/vona/src/suite-vendor/a-image/modules/a-image/cli/imageProvider/boilerplate/{{sceneName}}.{{beanName}}.ts_ +23 -0
  69. package/vona/src/suite-vendor/a-image/modules/a-image/cli/imageScene/boilerplate/{{sceneName}}.{{beanName}}.ts_ +5 -0
  70. package/vona/src/suite-vendor/a-image/modules/a-image/package.json +68 -0
  71. package/vona/src/suite-vendor/a-image/modules/a-image/src/.metadata/index.ts +482 -0
  72. package/vona/src/suite-vendor/a-image/modules/a-image/src/.metadata/locales.ts +18 -0
  73. package/vona/src/suite-vendor/a-image/modules/a-image/src/.metadata/this.ts +2 -0
  74. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.image.ts +443 -0
  75. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.imageProvider.ts +55 -0
  76. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.imageUploadPolicy.ts +174 -0
  77. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.redlock.ts +11 -0
  78. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.version.ts +40 -0
  79. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/serializerTransform.resolveView.ts +44 -0
  80. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/serializerTransform.resolveViews.ts +44 -0
  81. package/vona/src/suite-vendor/a-image/modules/a-image/src/config/config.ts +17 -0
  82. package/vona/src/suite-vendor/a-image/modules/a-image/src/config/locale/en-us.ts +1 -0
  83. package/vona/src/suite-vendor/a-image/modules/a-image/src/config/locale/zh-cn.ts +1 -0
  84. package/vona/src/suite-vendor/a-image/modules/a-image/src/controller/image.ts +165 -0
  85. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDeliveryRequest.ts +20 -0
  86. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadRequest.ts +36 -0
  87. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadResponse.ts +38 -0
  88. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageTransformOptions.tsx +42 -0
  89. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadResponse.ts +62 -0
  90. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadTokenRequest.ts +24 -0
  91. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadTokenResponse.ts +16 -0
  92. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadUrlRequest.ts +33 -0
  93. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageView.ts +46 -0
  94. package/vona/src/suite-vendor/a-image/modules/a-image/src/entity/image.ts +58 -0
  95. package/vona/src/suite-vendor/a-image/modules/a-image/src/entity/imageProvider.ts +24 -0
  96. package/vona/src/suite-vendor/a-image/modules/a-image/src/index.ts +4 -0
  97. package/vona/src/suite-vendor/a-image/modules/a-image/src/lib/imageProvider.ts +9 -0
  98. package/vona/src/suite-vendor/a-image/modules/a-image/src/lib/imageScene.ts +7 -0
  99. package/vona/src/suite-vendor/a-image/modules/a-image/src/lib/imageVariant.ts +46 -0
  100. package/vona/src/suite-vendor/a-image/modules/a-image/src/lib/index.ts +3 -0
  101. package/vona/src/suite-vendor/a-image/modules/a-image/src/model/image.ts +10 -0
  102. package/vona/src/suite-vendor/a-image/modules/a-image/src/model/imageProvider.ts +10 -0
  103. package/vona/src/suite-vendor/a-image/modules/a-image/src/types/image.ts +208 -0
  104. package/vona/src/suite-vendor/a-image/modules/a-image/src/types/imageProvider.ts +110 -0
  105. package/vona/src/suite-vendor/a-image/modules/a-image/src/types/imageScene.ts +52 -0
  106. package/vona/src/suite-vendor/a-image/modules/a-image/src/types/index.ts +3 -0
  107. package/vona/src/suite-vendor/a-image/modules/a-image/tsconfig.build.json +11 -0
  108. package/vona/src/suite-vendor/a-image/modules/a-image/tsconfig.json +7 -0
  109. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/package.json +49 -0
  110. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/.metadata/index.ts +89 -0
  111. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/.metadata/this.ts +2 -0
  112. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/bean/imageProvider.cloudflare.ts +155 -0
  113. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/index.ts +1 -0
  114. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/lib/cloudflareImageUrl.ts +112 -0
  115. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/service/imageCloudflare.ts +273 -0
  116. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/tsconfig.build.json +11 -0
  117. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/tsconfig.json +7 -0
  118. package/vona/src/suite-vendor/a-image/modules/image-native/package.json +63 -0
  119. package/vona/src/suite-vendor/a-image/modules/image-native/src/.metadata/index.ts +114 -0
  120. package/vona/src/suite-vendor/a-image/modules/image-native/src/.metadata/this.ts +2 -0
  121. package/vona/src/suite-vendor/a-image/modules/image-native/src/bean/imageProvider.native.ts +131 -0
  122. package/vona/src/suite-vendor/a-image/modules/image-native/src/config/config.ts +11 -0
  123. package/vona/src/suite-vendor/a-image/modules/image-native/src/index.ts +1 -0
  124. package/vona/src/suite-vendor/a-image/modules/image-native/src/monkey.ts +33 -0
  125. package/vona/src/suite-vendor/a-image/modules/image-native/src/service/imageNative.ts +291 -0
  126. package/vona/src/suite-vendor/a-image/modules/image-native/tsconfig.build.json +11 -0
  127. package/vona/src/suite-vendor/a-image/modules/image-native/tsconfig.json +7 -0
  128. package/vona/src/suite-vendor/a-image/package.json +14 -0
  129. package/vona/src/suite-vendor/a-image/tsconfig.base.json +4 -0
  130. package/vona/src/suite-vendor/a-image/tsconfig.json +16 -0
  131. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +2 -2
  132. package/vona/src/suite-vendor/a-vona/modules/a-jwt/package.json +1 -1
  133. package/vona/src/suite-vendor/a-vona/modules/a-jwt/src/service/jwtClient.ts +5 -0
  134. package/vona/src/suite-vendor/a-vona/modules/a-jwt/src/types/jwt.ts +1 -0
  135. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/package.json +1 -1
  136. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/schema/makeSchemaLikes.ts +6 -3
  137. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/utils.ts +13 -7
  138. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  139. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/database.ts +0 -1
  140. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +9 -1
  141. package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +1 -1
  142. package/vona/src/suite-vendor/a-vona/modules/a-upload/src/bean/interceptor.upload.ts +39 -7
  143. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  144. package/zova/packages-cli/cli/package.json +3 -3
  145. package/zova/packages-cli/cli-set-front/package.json +9 -9
  146. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +20 -10
  147. package/zova/packages-utils/babel-plugin-zova-bean-module/package.json +2 -2
  148. package/zova/packages-utils/babel-plugin-zova-bean-use/package.json +2 -2
  149. package/zova/packages-utils/babel-plugin-zova-behavior/package.json +2 -2
  150. package/zova/packages-utils/babel-plugin-zova-component/package.json +2 -2
  151. package/zova/packages-utils/zova-jsx/package.json +3 -3
  152. package/zova/packages-utils/zova-vite/package.json +7 -7
  153. package/zova/packages-zova/zova/package.json +3 -3
  154. package/zova/packages-zova/zova-core/package.json +3 -3
  155. package/zova/pnpm-lock.yaml +77 -25
  156. package/zova/src/suite/a-home/modules/home-api/src/api/captcha.ts +3 -1
  157. package/zova/src/suite/a-home/modules/home-api/src/api/home.ts +3 -1
  158. package/zova/src/suite/a-home/modules/home-api/src/api/homeBaseMenu.ts +3 -1
  159. package/zova/src/suite/a-home/modules/home-api/src/api/homeBasePermission.ts +3 -1
  160. package/zova/src/suite/a-home/modules/home-api/src/api/homeUserPassport.ts +22 -20
  161. package/zova/src/suite/a-home/modules/home-api/src/api/openapi/schemas.ts +163 -53
  162. package/zova/src/suite/a-home/modules/home-api/src/api/openapi/types.ts +2060 -675
  163. package/zova/src/suite/a-home/modules/home-api/src/api/testSsrToolOne.ts +3 -1
  164. package/zova/src/suite/a-home/modules/home-api/src/apiSchema/captcha.ts +3 -1
  165. package/zova/src/suite/a-home/modules/home-api/src/apiSchema/home.ts +3 -1
  166. package/zova/src/suite/a-home/modules/home-api/src/apiSchema/homeBaseMenu.ts +3 -1
  167. package/zova/src/suite/a-home/modules/home-api/src/apiSchema/homeBasePermission.ts +3 -1
  168. package/zova/src/suite/a-home/modules/home-api/src/apiSchema/homeUserPassport.ts +13 -11
  169. package/zova/src/suite/a-home/modules/home-api/src/apiSchema/testSsrToolOne.ts +3 -1
  170. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +54 -16
  171. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +468 -8
  172. package/zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts +3 -1
  173. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionUpdate.tsx +1 -1
  174. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/actionCreate/controller.tsx +1 -1
  175. package/zova/src/suite/cabloy-basic/modules/basic-details/src/service/detail.tsx +53 -1
  176. package/zova/src/suite/cabloy-basic/modules/basic-image/cli/openapi.config.ts +9 -0
  177. package/zova/src/suite/cabloy-basic/modules/basic-image/package.json +60 -0
  178. package/zova/src/suite/cabloy-basic/modules/basic-image/src/.metadata/component/formFieldImage.ts +31 -0
  179. package/zova/src/suite/cabloy-basic/modules/basic-image/src/.metadata/index.ts +191 -0
  180. package/zova/src/suite/cabloy-basic/modules/basic-image/src/.metadata/locales.ts +7 -0
  181. package/zova/src/suite/cabloy-basic/modules/basic-image/src/.metadata/this.ts +2 -0
  182. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/image.ts +104 -0
  183. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/baseURL.ts +5 -0
  184. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/index.ts +3 -0
  185. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/schemas.ts +262 -0
  186. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/types.ts +5159 -0
  187. package/zova/src/suite/cabloy-basic/modules/basic-image/src/apiSchema/image.ts +35 -0
  188. package/zova/src/suite/cabloy-basic/modules/basic-image/src/bean/tableCell.image.tsx +200 -0
  189. package/zova/src/suite/cabloy-basic/modules/basic-image/src/component/formFieldImage/controller.tsx +781 -0
  190. package/zova/src/suite/cabloy-basic/modules/basic-image/src/config/locale/en-us.ts +18 -0
  191. package/zova/src/suite/cabloy-basic/modules/basic-image/src/config/locale/zh-cn.ts +18 -0
  192. package/zova/src/suite/cabloy-basic/modules/basic-image/src/index.ts +4 -0
  193. package/zova/src/suite/cabloy-basic/modules/basic-image/src/lib/index.ts +2 -0
  194. package/zova/src/suite/cabloy-basic/modules/basic-image/src/lib/preview.ts +105 -0
  195. package/zova/src/suite/cabloy-basic/modules/basic-image/src/lib/previewDialog.tsx +190 -0
  196. package/zova/src/suite/cabloy-basic/modules/basic-image/src/types/image.ts +5 -0
  197. package/zova/src/suite/cabloy-basic/modules/basic-image/src/types/index.ts +1 -0
  198. package/zova/src/suite/cabloy-basic/modules/basic-image/tsconfig.build.json +13 -0
  199. package/zova/src/suite/cabloy-basic/modules/basic-image/tsconfig.json +5 -0
  200. package/zova/src/suite/cabloy-basic/package.json +1 -0
  201. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  202. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/image.ts +1 -0
  203. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/index.ts +1 -0
  204. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +5 -5
  205. package/zova/src/suite-vendor/a-zova/package.json +3 -3
  206. package/vona/packages-vona/vona-core/src/lib/utils/sqlite3.ts +0 -50
@@ -1,8 +1,5 @@
1
1
  import type { ICliBuildCustomOptions } from '@cabloy/cli';
2
2
 
3
- import { copySqlite3NativeBinding } from 'vona';
4
-
5
- export async function afterBuild(options: ICliBuildCustomOptions) {
6
- const { projectPath, outDir, env } = options;
7
- await copySqlite3NativeBinding(projectPath, outDir, env);
3
+ export async function afterBuild(_options: ICliBuildCustomOptions) {
4
+ // const { projectPath, outDir, env } = options;
8
5
  }
@@ -8,7 +8,6 @@ import {
8
8
  getLoggerPathPhysicalRoot,
9
9
  getPublicPathPhysicalRoot,
10
10
  getSqlite3DatabaseNameDefault,
11
- getSqlite3NativeBinding,
12
11
  } from 'vona';
13
12
 
14
13
  declare module 'vona' {
@@ -149,9 +148,6 @@ export default async function (app: VonaApplication) {
149
148
  client: 'better-sqlite3',
150
149
  connection: {
151
150
  filename: env.DATABASE_CLIENT_SQLITE3_FILENAME || getSqlite3DatabaseNameDefault(app),
152
- options: {
153
- nativeBinding: getSqlite3NativeBinding(app, env.DATABASE_CLIENT_SQLITE3_NATIVEBINDING),
154
- },
155
151
  },
156
152
  },
157
153
  pg: {
@@ -12,7 +12,7 @@ export interface ISsrMenuOptionsAdmin extends IDecoratorSsrMenuOptions<ISsrSiteO
12
12
  title: 'Admin',
13
13
  order: $order(1),
14
14
  icon: undefined,
15
- link: 'http://localhost:7102/admin' as any,
15
+ link: '/admin' as any,
16
16
  external: true,
17
17
  target: '_self',
18
18
  },
@@ -388,6 +388,32 @@ declare module 'vona-module-training-record' {
388
388
  }
389
389
  }
390
390
  /** ssrMenu: end */
391
+ /** imageScene: begin */
392
+ export * from '../bean/imageScene.sceneImage.ts';
393
+
394
+ import { type IDecoratorImageSceneOptions } from 'vona-module-a-image';
395
+ declare module 'vona-module-a-image' {
396
+
397
+ export interface IImageSceneRecord {
398
+ 'training-record:sceneImage': IDecoratorImageSceneOptions;
399
+ }
400
+
401
+
402
+ }
403
+ declare module 'vona-module-training-record' {
404
+
405
+ export interface ImageSceneSceneImage {
406
+ /** @internal */
407
+ get scope(): ScopeModuleTrainingRecord;
408
+ }
409
+
410
+ export interface ImageSceneSceneImage {
411
+ get $beanFullName(): 'training-record.imageScene.sceneImage';
412
+ get $onionName(): 'training-record:sceneImage';
413
+ get $onionOptions(): IDecoratorImageSceneOptions;
414
+ }
415
+ }
416
+ /** imageScene: end */
391
417
  /** locale: begin */
392
418
  import { locales } from './locales.ts';
393
419
  /** locale: end */
@@ -0,0 +1,11 @@
1
+ import { BeanBase } from 'vona';
2
+ import { ImageScene } from 'vona-module-a-image';
3
+
4
+ @ImageScene({
5
+ upload: {
6
+ maxSize: 2 * 1024 * 1024,
7
+ mimeTypes: ['image/png', 'image/jpeg', 'image/webp'],
8
+ multiple: true,
9
+ },
10
+ })
11
+ export class ImageSceneSceneImage extends BeanBase {}
@@ -17,6 +17,7 @@ export class MetaVersion extends BeanBase implements IMetaVersionUpdate {
17
17
  table.integer(entityRecord.totalScore).comment(entityRecord.$comment.totalScore);
18
18
  table.decimal(entityRecord.averageScore, 8, 2).comment(entityRecord.$comment.averageScore);
19
19
  table.dateTime(entityRecord.trainingTime).comment(entityRecord.$comment.trainingTime);
20
+ table.json(entityRecord.sceneImageIds).comment(entityRecord.$comment.sceneImageIds);
20
21
  table.string(entityRecord.description, 255).comment(entityRecord.$comment.description);
21
22
  });
22
23
  }
@@ -8,6 +8,7 @@ export default {
8
8
  TrainingRecord: 'Student Training Record',
9
9
  TrainingRecordName: 'Training Record Name',
10
10
  TrainingTime: 'Training Time',
11
+ ScenePhotos: 'Scene Photos',
11
12
  AddTrainingRecord: 'Add Student Training Record',
12
13
  EditTrainingRecord: 'Edit Student Training Record',
13
14
  ViewTrainingRecord: 'View Student Training Record',
@@ -8,6 +8,7 @@ export default {
8
8
  TrainingRecord: '学生培训记录',
9
9
  TrainingRecordName: '培训记录名称',
10
10
  TrainingTime: '培训时间',
11
+ ScenePhotos: '现场照片',
11
12
  AddTrainingRecord: '添加学生培训记录',
12
13
  EditTrainingRecord: '编辑学生培训记录',
13
14
  ViewTrainingRecord: '查看学生培训记录',
@@ -1,5 +1,6 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
+ import { DtoImageView } from 'vona-module-a-image';
3
4
  import { Api, v } from 'vona-module-a-openapiutils';
4
5
  import { $Dto } from 'vona-module-a-orm';
5
6
  import { Dto } from 'vona-module-a-web';
@@ -25,6 +26,17 @@ export interface IDtoOptionsRecordSelectResItem extends IDecoratorDtoOptions {}
25
26
  ],
26
27
  })
27
28
  export class DtoRecordSelectResItem extends $Dto.get(() => ModelRecord) {
29
+ @Api.field(
30
+ ZovaRender.visible(false),
31
+ v.optional(),
32
+ v.serializerTransform('a-image:resolveViews', {
33
+ fieldName: 'sceneImageIds',
34
+ imageScene: 'training-record:sceneImage',
35
+ }),
36
+ v.array(DtoImageView),
37
+ )
38
+ sceneImages?: DtoImageView[];
39
+
28
40
  @Api.field(
29
41
  v.title($locale('Operations')),
30
42
  ZovaRender.order(1, 'max'),
@@ -1,5 +1,6 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
+ import { DtoImageView } from 'vona-module-a-image';
3
4
  import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
4
5
  import { $Dto } from 'vona-module-a-orm';
5
6
  import { Dto } from 'vona-module-a-web';
@@ -37,6 +38,17 @@ export interface IDtoOptionsRecordView extends IDecoratorDtoOptions {}
37
38
  export class DtoRecordView extends $Dto.get(() => ModelRecord, {
38
39
  include: { trainingRecordSubjects: { dtoClass: DtoDetailRecordSubjectView } },
39
40
  }) {
41
+ @Api.field(
42
+ ZovaRender.visible(false),
43
+ v.optional(),
44
+ v.serializerTransform('a-image:resolveViews', {
45
+ fieldName: 'sceneImageIds',
46
+ imageScene: 'training-record:sceneImage',
47
+ }),
48
+ v.array(DtoImageView),
49
+ )
50
+ sceneImages?: DtoImageView[];
51
+
40
52
  @Api.field(ZovaRender.visible(false), v.optional(), v.array(DtoDetailRecordSubjectResItem))
41
53
  _trainingRecordSubjects?: DtoDetailRecordSubjectResItem[];
42
54
  }
@@ -83,6 +83,31 @@ export class EntityRecord extends EntityBase {
83
83
  )
84
84
  trainingTime?: Date;
85
85
 
86
- @Api.field(v.title($locale('Description')), v.optional(), ZovaRender.order(7))
86
+ @Api.field(
87
+ v.title($locale('ScenePhotos')),
88
+ v.optional(),
89
+ ZovaRender.order(7),
90
+ ZovaRender.field('basic-image:formFieldImage', {
91
+ imageScene: 'training-record:sceneImage',
92
+ multiple: true,
93
+ maxCount: 9,
94
+ relationName: 'sceneImages',
95
+ accept: ['image/png', 'image/jpeg', 'image/webp'],
96
+ maxSize: 2 * 1024 * 1024,
97
+ enableCrop: false,
98
+ resize: {
99
+ width: 1280,
100
+ height: 1280,
101
+ fit: 'contain',
102
+ format: 'jpeg',
103
+ quality: 90,
104
+ },
105
+ }),
106
+ ZovaRender.cell('basic-image:image', { relationName: 'sceneImages' }),
107
+ v.array(v.tableIdentity()),
108
+ )
109
+ sceneImageIds?: TableIdentity[];
110
+
111
+ @Api.field(v.title($locale('Description')), v.optional(), ZovaRender.order(8))
87
112
  description?: string;
88
113
  }
@@ -1,3 +1,4 @@
1
+ export * from './bean/imageScene.sceneImage.ts';
1
2
  export * from './lib/index.ts';
2
3
  export * from './.metadata/locales.ts';
3
4
  export * from './.metadata/index.ts';
@@ -86,7 +86,7 @@ import { SymbolKeyEntity, SymbolKeyEntityMeta, SymbolKeyModelOptions } from 'von
86
86
  declare module 'vona-module-training-student' {
87
87
  export interface IModelOptionsStudent {
88
88
  relations: {
89
- trainingRecords: IModelRelationHasMany<'training-record:record', 'studentId', false, 'id'|'name'|'subjectCount'|'totalScore'|'averageScore'|'trainingTime'|'description', undefined, undefined, undefined>;
89
+ trainingRecords: IModelRelationHasMany<'training-record:record', 'studentId', false, 'id'|'name'|'subjectCount'|'totalScore'|'averageScore'|'trainingTime'|'sceneImageIds'|'description', undefined, undefined, undefined>;
90
90
  };
91
91
  }
92
92
  export interface ModelStudent {
@@ -397,6 +397,32 @@ declare module 'vona-module-training-student' {
397
397
  }
398
398
  }
399
399
  /** ssrMenu: end */
400
+ /** imageScene: begin */
401
+ export * from '../bean/imageScene.studentImage.ts';
402
+
403
+ import { type IDecoratorImageSceneOptions } from 'vona-module-a-image';
404
+ declare module 'vona-module-a-image' {
405
+
406
+ export interface IImageSceneRecord {
407
+ 'training-student:studentImage': IDecoratorImageSceneOptions;
408
+ }
409
+
410
+
411
+ }
412
+ declare module 'vona-module-training-student' {
413
+
414
+ export interface ImageSceneStudentImage {
415
+ /** @internal */
416
+ get scope(): ScopeModuleTrainingStudent;
417
+ }
418
+
419
+ export interface ImageSceneStudentImage {
420
+ get $beanFullName(): 'training-student.imageScene.studentImage';
421
+ get $onionName(): 'training-student:studentImage';
422
+ get $onionOptions(): IDecoratorImageSceneOptions;
423
+ }
424
+ }
425
+ /** imageScene: end */
400
426
  /** locale: begin */
401
427
  import { locales } from './locales.ts';
402
428
  /** locale: end */
@@ -0,0 +1,10 @@
1
+ import { BeanBase } from 'vona';
2
+ import { ImageScene } from 'vona-module-a-image';
3
+
4
+ @ImageScene({
5
+ upload: {
6
+ maxSize: 2 * 1024 * 1024,
7
+ mimeTypes: ['image/png', 'image/jpeg', 'image/webp'],
8
+ },
9
+ })
10
+ export class ImageSceneStudentImage extends BeanBase {}
@@ -14,6 +14,7 @@ export class MetaVersion extends BeanBase implements IMetaVersionUpdate {
14
14
  table.string(entityStudent.name, 50).comment(entityStudent.$comment.name);
15
15
  table.string(entityStudent.description, 255).comment(entityStudent.$comment.description);
16
16
  table.string(entityStudent.mobile, 50).comment(entityStudent.$comment.mobile);
17
+ table.tableIdentity(entityStudent.imageId).comment(entityStudent.$comment.imageId);
17
18
  table.integer(entityStudent.level).comment(entityStudent.$comment.level);
18
19
  });
19
20
  }
@@ -8,6 +8,7 @@ export default {
8
8
  Operations: 'Operations',
9
9
  Student: 'Student',
10
10
  StudentName: 'Student Name',
11
+ StudentImage: 'Student Image',
11
12
  Summary: 'Summary',
12
13
  LevelTitle: 'Level Title',
13
14
  DescriptionLength: 'Description Length',
@@ -8,6 +8,7 @@ export default {
8
8
  Operations: '操作',
9
9
  Student: '学生',
10
10
  StudentName: '学生姓名',
11
+ StudentImage: '学生图片',
11
12
  Summary: '摘要',
12
13
  LevelTitle: '阶段名称',
13
14
  DescriptionLength: '描述长度',
@@ -1,6 +1,8 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
- import { $makeMetadata, v } from 'vona-module-a-openapiutils';
3
+ import { $Class } from 'vona';
4
+ import { DtoImageView } from 'vona-module-a-image';
5
+ import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
4
6
  import { $Dto } from 'vona-module-a-orm';
5
7
  import { Dto } from 'vona-module-a-web';
6
8
  import { ModelRecord, onEffectForTrainingRecordSubjects } from 'vona-module-training-record';
@@ -31,7 +33,19 @@ export class DtoDetailRecordBase extends $Dto.get(() => ModelRecord, {
31
33
  'totalScore',
32
34
  'averageScore',
33
35
  'trainingTime',
36
+ 'sceneImageIds',
34
37
  'description',
35
38
  ],
36
39
  include: { trainingRecordSubjects: true },
37
- }) {}
40
+ }) {
41
+ @Api.field(
42
+ ZovaRender.visible(false),
43
+ v.optional(),
44
+ v.serializerTransform('a-image:resolveViews', {
45
+ fieldName: 'sceneImageIds',
46
+ imageScene: 'training-record:sceneImage',
47
+ }),
48
+ v.array($Class.partial(DtoImageView)),
49
+ )
50
+ sceneImages?: Partial<DtoImageView>[];
51
+ }
@@ -31,7 +31,7 @@ export interface IDtoOptionsStudentCreate extends IDecoratorDtoOptions {}
31
31
  fields: {
32
32
  trainingRecords: $makeMetadata(
33
33
  v.title($locale('TrainingRecords')),
34
- ZovaRender.order(5),
34
+ ZovaRender.order(6),
35
35
  ZovaRender.field('basic-details:formFieldDetails'),
36
36
  v.optional(),
37
37
  ),
@@ -1,5 +1,6 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
+ import { DtoImageView } from 'vona-module-a-image';
3
4
  import { Api, v } from 'vona-module-a-openapiutils';
4
5
  import { $Dto } from 'vona-module-a-orm';
5
6
  import { Dto } from 'vona-module-a-web';
@@ -25,6 +26,17 @@ export interface IDtoOptionsStudentSelectResItem extends IDecoratorDtoOptions {}
25
26
  ],
26
27
  })
27
28
  export class DtoStudentSelectResItem extends $Dto.get(() => ModelStudent) {
29
+ @Api.field(
30
+ ZovaRender.visible(false),
31
+ v.optional(),
32
+ v.serializerTransform('a-image:resolveView', {
33
+ fieldName: 'imageId',
34
+ imageScene: 'training-student:studentImage',
35
+ }),
36
+ v.object(DtoImageView),
37
+ )
38
+ image?: DtoImageView;
39
+
28
40
  @Api.field(
29
41
  v.title($locale('Operations')),
30
42
  ZovaRender.order(1, 'max'),
@@ -31,7 +31,7 @@ export interface IDtoOptionsStudentUpdate extends IDecoratorDtoOptions {}
31
31
  fields: {
32
32
  trainingRecords: $makeMetadata(
33
33
  v.title($locale('TrainingRecords')),
34
- ZovaRender.order(5),
34
+ ZovaRender.order(6),
35
35
  ZovaRender.field('basic-details:formFieldDetails'),
36
36
  ),
37
37
  },
@@ -1,5 +1,6 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
+ import { DtoImageView } from 'vona-module-a-image';
3
4
  import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
4
5
  import { $Dto } from 'vona-module-a-orm';
5
6
  import { Dto } from 'vona-module-a-web';
@@ -28,7 +29,7 @@ export interface IDtoOptionsStudentView extends IDecoratorDtoOptions {}
28
29
  fields: {
29
30
  trainingRecords: $makeMetadata(
30
31
  v.title($locale('TrainingRecords')),
31
- ZovaRender.order(5),
32
+ ZovaRender.order(6),
32
33
  ZovaRender.field('basic-details:formFieldDetails'),
33
34
  ),
34
35
  },
@@ -36,6 +37,17 @@ export interface IDtoOptionsStudentView extends IDecoratorDtoOptions {}
36
37
  export class DtoStudentView extends $Dto.get(() => ModelStudent, {
37
38
  include: { trainingRecords: { dtoClass: DtoDetailRecordView } },
38
39
  }) {
40
+ @Api.field(
41
+ ZovaRender.visible(false),
42
+ v.optional(),
43
+ v.serializerTransform('a-image:resolveView', {
44
+ fieldName: 'imageId',
45
+ imageScene: 'training-student:studentImage',
46
+ }),
47
+ v.object(DtoImageView),
48
+ )
49
+ image?: DtoImageView;
50
+
39
51
  @Api.field(ZovaRender.visible(false), v.optional(), v.array(DtoDetailRecordResItem))
40
52
  _trainingRecords?: DtoDetailRecordResItem[];
41
53
  }
@@ -1,3 +1,4 @@
1
+ import type { TableIdentity } from 'table-identity';
1
2
  import type { IDecoratorEntityOptions } from 'vona-module-a-orm';
2
3
 
3
4
  import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
@@ -58,10 +59,34 @@ export class EntityStudent extends EntityBase {
58
59
  )
59
60
  mobile: string;
60
61
 
62
+ @Api.field(
63
+ v.title($locale('StudentImage')),
64
+ v.optional(),
65
+ ZovaRender.order(4),
66
+ ZovaRender.field('basic-image:formFieldImage', {
67
+ imageScene: 'training-student:studentImage',
68
+ accept: ['image/png', 'image/jpeg', 'image/webp'],
69
+ maxSize: 2 * 1024 * 1024,
70
+ enableCrop: true,
71
+ cropAspectRatio: 1,
72
+ relationName: 'image',
73
+ resize: {
74
+ width: 512,
75
+ height: 512,
76
+ fit: 'cover',
77
+ format: 'jpeg',
78
+ quality: 90,
79
+ },
80
+ }),
81
+ ZovaRender.cell('basic-image:image', { relationName: 'image' }),
82
+ v.tableIdentity(),
83
+ )
84
+ imageId?: TableIdentity;
85
+
61
86
  @Api.field(
62
87
  v.title($locale('Level')),
63
88
  v.required(),
64
- ZovaRender.order(4),
89
+ ZovaRender.order(5),
65
90
  // Tutorial 3 built-in form renderer example. Keep it commented here for side-by-side comparison.
66
91
  // ZovaRender.field('basic-select:formFieldSelect', {
67
92
  // items: studentLevelItems,
@@ -1,2 +1,3 @@
1
+ export * from './bean/imageScene.studentImage.ts';
1
2
  export * from './.metadata/locales.ts';
2
3
  export * from './.metadata/index.ts';
@@ -17,6 +17,7 @@ export interface IModelOptionsStudent extends IDecoratorModelOptions<EntityStude
17
17
  'totalScore',
18
18
  'averageScore',
19
19
  'trainingTime',
20
+ 'sceneImageIds',
20
21
  'description',
21
22
  ],
22
23
  }),
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-auth",
3
- "version": "5.1.18",
3
+ "version": "5.1.19",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "keywords": [
@@ -45,10 +45,7 @@ export class BeanAuthProvider extends BeanBase {
45
45
  // clientName
46
46
  const clientName = entityAuthProvider.clientName ?? 'default';
47
47
  // onionSlice
48
- const onionSlice = this.bean.onion.authProvider.getOnionSliceEnabled(
49
- true,
50
- authProviderName as any,
51
- );
48
+ const onionSlice = this.bean.onion.authProvider.getOnionSliceEnabled(true, authProviderName);
52
49
  if (!onionSlice) throw new Error(`Auth provider not found: ${authProviderName}`);
53
50
  const beanFullName = onionSlice.beanOptions.beanFullName;
54
51
  const onionOptions = onionSlice.beanOptions.options ?? {};
@@ -56,7 +53,7 @@ export class BeanAuthProvider extends BeanBase {
56
53
  const clientOptions: IAuthProviderClientOptions = deepExtend(
57
54
  clientOptionsDefault ?? {},
58
55
  onionOptions?.base,
59
- onionOptions?.clients?.[clientName as any],
56
+ onionOptions?.clients?.[clientName],
60
57
  entityAuthProvider.clientOptions,
61
58
  clientOptionsCustom,
62
59
  );
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-suite-a-auth",
3
- "version": "5.1.20",
3
+ "version": "5.1.21",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "author": "",
@@ -0,0 +1,23 @@
1
+ import type {
2
+ IDecoratorImageProviderOptions,
3
+ IImageProviderClientOptions,
4
+ IImageProviderClientRecord,
5
+ IImageProviderExecute,
6
+ } from 'vona-module-a-image';
7
+
8
+ import { BeanBase } from 'vona';
9
+ import { ImageProvider } from 'vona-module-a-image';
10
+
11
+ export interface IImageProvider<%=argv.beanNameCapitalize%>ClientRecord extends IImageProviderClientRecord {}
12
+
13
+ export interface IImageProvider<%=argv.beanNameCapitalize%>ClientOptions extends IImageProviderClientOptions {}
14
+
15
+ export interface IImageProviderOptions<%=argv.beanNameCapitalize%> extends IDecoratorImageProviderOptions<
16
+ IImageProvider<%=argv.beanNameCapitalize%>ClientRecord,
17
+ IImageProvider<%=argv.beanNameCapitalize%>ClientOptions
18
+ > {}
19
+
20
+ @ImageProvider<IImageProviderOptionsNative>({
21
+ base: {},
22
+ })
23
+ export class ImageProvider<%=argv.beanNameCapitalize%> extends BeanBase implements IImageProviderExecute {}
@@ -0,0 +1,5 @@
1
+ import { BeanBase } from 'vona';
2
+ import { ImageScene } from 'vona-module-a-image';
3
+
4
+ @ImageScene()
5
+ export class ImageScene<%=argv.beanNameCapitalize%> extends BeanBase {}
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "vona-module-a-image",
3
+ "version": "5.0.1",
4
+ "description": "",
5
+ "keywords": [
6
+ "Vona Module"
7
+ ],
8
+ "author": "",
9
+ "files": [
10
+ "assets",
11
+ "cli",
12
+ "dist",
13
+ "src"
14
+ ],
15
+ "type": "module",
16
+ "exports": {
17
+ ".": {
18
+ "types": [
19
+ "./src/index.ts",
20
+ "./dist/index.d.ts"
21
+ ],
22
+ "import": "./src/index.ts",
23
+ "default": "./dist/index.js"
24
+ },
25
+ "./package.json": "./package.json"
26
+ },
27
+ "scripts": {
28
+ "clean": "rimraf dist tsconfig.build.tsbuildinfo",
29
+ "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/vona.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
30
+ "prepublishOnly": "npm run tsc:publish",
31
+ "prepack": "clean-package",
32
+ "postpack": "clean-package restore"
33
+ },
34
+ "devDependencies": {
35
+ "clean-package": "^2.2.0",
36
+ "rimraf": "^6.1.3"
37
+ },
38
+ "clean-package": {
39
+ "indent": 2,
40
+ "remove": [
41
+ "clean-package",
42
+ "exports.\\..import"
43
+ ]
44
+ },
45
+ "title": "a-image",
46
+ "vonaModule": {
47
+ "fileVersion": 1,
48
+ "dependencies": {
49
+ "a-orm": "5.0.0",
50
+ "a-upload": "5.0.0",
51
+ "a-user": "5.0.0",
52
+ "a-web": "5.0.0"
53
+ },
54
+ "onions": {
55
+ "imageProvider": {
56
+ "optionsGlobalInterfaceName": "IDecoratorImageProviderOptions",
57
+ "optionsGlobalInterfaceFrom": "vona-module-a-image",
58
+ "scopeResource": true,
59
+ "boilerplate": "imageProvider/boilerplate"
60
+ },
61
+ "imageScene": {
62
+ "optionsGlobalInterfaceName": "IDecoratorImageSceneOptions",
63
+ "optionsGlobalInterfaceFrom": "vona-module-a-image",
64
+ "boilerplate": "imageScene/boilerplate"
65
+ }
66
+ }
67
+ }
68
+ }