cabloy 5.1.97 → 5.1.99
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.
- package/.cabloy-version +1 -1
- package/.claude/hooks/contract-loop-gate.ts +151 -44
- package/CHANGELOG.md +48 -0
- package/CLAUDE.md +2 -0
- package/cabloy-docs/.vitepress/config.mjs +11 -0
- package/cabloy-docs/backend/controller-aop-guide.md +0 -1
- package/cabloy-docs/backend/image-guide.md +544 -0
- package/cabloy-docs/frontend/a-openapi-under-the-hood.md +1 -1
- package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +1 -1
- package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +1 -1
- package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +1 -1
- package/cabloy-docs/frontend/image-guide.md +512 -0
- package/cabloy-docs/frontend/introduction.md +2 -0
- package/cabloy-docs/frontend/ioc-and-beans.md +34 -3
- package/cabloy-docs/frontend/model-architecture.md +2 -0
- package/cabloy-docs/frontend/model-resource-owner-pattern.md +3 -1
- package/cabloy-docs/frontend/model-state-guide.md +5 -1
- package/cabloy-docs/frontend/reading-zova-for-vue-developers.md +10 -8
- package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +2 -2
- package/cabloy-docs/frontend/resource-list-page-deep-dive.md +1 -1
- package/cabloy-docs/frontend/rest-resource-source-reading-map.md +2 -2
- package/cabloy-docs/frontend/rest-resource-under-the-hood.md +4 -4
- package/cabloy-docs/frontend/server-data.md +2 -0
- package/cabloy-docs/frontend/state-architecture-for-vue-developers.md +218 -0
- package/cabloy-docs/frontend/system-startup-guide.md +2 -0
- package/cabloy-docs/frontend/use-state-data-best-practices.md +384 -0
- package/cabloy-docs/frontend/zova-vs-vue3-comparison.md +11 -10
- package/cabloy-docs/fullstack/image-workflow.md +403 -0
- package/cabloy-docs/fullstack/introduction.md +1 -0
- package/package.json +1 -1
- package/scripts/upgrade.ts +2 -0
- package/vona/package.original.json +0 -1
- package/vona/packages-cli/cli/package.json +1 -1
- package/vona/packages-cli/cli-set-api/package.json +1 -1
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/packages-vona/vona-core/package.json +1 -1
- package/vona/packages-vona/vona-core/src/lib/bean/beanBase.ts +9 -9
- package/vona/packages-vona/vona-mock/package.json +1 -1
- package/vona/pnpm-lock.yaml +424 -47
- package/vona/src/suite/a-training/modules/training-record/src/bean/fileScene.dossierFile.ts +22 -0
- package/vona/src/suite/a-training/modules/training-record/src/bean/meta.version.ts +1 -0
- package/vona/src/suite/a-training/modules/training-record/src/config/locale/en-us.ts +1 -0
- package/vona/src/suite/a-training/modules/training-record/src/config/locale/zh-cn.ts +1 -0
- package/vona/src/suite/a-training/modules/training-record/src/dto/recordDossierFileView.ts +47 -0
- package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectResItem.tsx +13 -0
- package/vona/src/suite/a-training/modules/training-record/src/dto/recordView.tsx +13 -0
- package/vona/src/suite/a-training/modules/training-record/src/entity/record.tsx +16 -5
- package/vona/src/suite/a-training/modules/training-record/src/index.ts +2 -0
- package/vona/src/suite/a-training/modules/training-record/src/lib/index.ts +1 -0
- package/vona/src/suite/a-training/modules/training-record/src/lib/resolveDossierFiles.ts +34 -0
- package/vona/src/suite/a-training/modules/training-record/test/record.test.ts +209 -123
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +1 -0
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +1 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordBase.tsx +18 -1
- package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +0 -2
- package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +1 -0
- package/vona/src/suite/cabloy-basic/modules/basic-siteadmin/src/bean/ssrSite.admin.ts +4 -0
- package/vona/src/suite/cabloy-basic/modules/basic-siteweb/src/bean/ssrSite.web.ts +4 -0
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/cli/ssrSite/boilerplate/{{sceneName}}.{{beanName}}.ts_ +3 -0
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/service/ssrHandler.ts +11 -2
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/types/ssrSite.ts +6 -0
- package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
- package/vona/src/suite-vendor/a-file/modules/a-file/cli/fileProvider/boilerplate/{{sceneName}}.{{beanName}}.ts_ +23 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/cli/fileScene/boilerplate/{{sceneName}}.{{beanName}}.ts_ +5 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/package.json +68 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/.metadata/index.ts +425 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/.metadata/locales.ts +18 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/.metadata/this.ts +2 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.file.ts +322 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.fileProvider.ts +62 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.fileUploadPolicy.ts +224 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.redlock.ts +11 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.version.ts +38 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/config/config.ts +16 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/config/locale/en-us.ts +1 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/config/locale/zh-cn.ts +1 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/controller/file.ts +175 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadRequest.ts +33 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadResponse.ts +41 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDownloadRequest.ts +12 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadPolicyRequest.ts +15 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadPolicyResponse.ts +30 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadResponse.ts +59 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadTokenRequest.ts +24 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadTokenResponse.ts +16 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadUrlRequest.ts +33 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/entity/file.ts +55 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/entity/fileProvider.ts +24 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/index.ts +4 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/fileProvider.ts +7 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/fileScene.ts +7 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/fileUploadValidation.ts +15 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/index.ts +3 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/model/file.ts +10 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/model/fileProvider.ts +10 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/file.ts +144 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/fileProvider.ts +111 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/fileScene.ts +53 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/index.ts +3 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/tsconfig.build.json +11 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/tsconfig.json +7 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/package.json +53 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/.metadata/index.ts +104 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/.metadata/this.ts +2 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/bean/fileProvider.cloudflare.ts +123 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/index.ts +1 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/service/fileCloudflare.ts +245 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/tsconfig.build.json +11 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/tsconfig.json +7 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/package.json +50 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/.metadata/index.ts +111 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/.metadata/this.ts +2 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/bean/fileProvider.native.ts +125 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/config/config.ts +7 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/index.ts +1 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/service/fileNative.ts +125 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/tsconfig.build.json +11 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/tsconfig.json +7 -0
- package/vona/src/suite-vendor/a-file/package.json +14 -0
- package/vona/src/suite-vendor/a-file/tsconfig.base.json +4 -0
- package/vona/src/suite-vendor/a-file/tsconfig.json +16 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/package.json +4 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/.metadata/index.ts +61 -3
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.image.ts +336 -152
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.imageProvider.ts +21 -14
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.imageUploadPolicy.ts +86 -11
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.index.ts +12 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.redlock.ts +1 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.version.ts +3 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/schedule.imageDraftPrune.ts +29 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/config/config.ts +3 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/controller/image.ts +32 -54
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadFinalizeRequest.ts +13 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadFinalizeResponse.ts +10 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadResponse.ts +10 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadPolicyRequest.ts +15 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadPolicyResponse.ts +27 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadResponse.ts +10 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageView.ts +10 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/entity/image.ts +10 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/lib/imageUploadValidation.ts +15 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/lib/index.ts +1 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/types/image.ts +18 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/types/imageProvider.ts +28 -2
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/package.json +1 -1
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/bean/imageProvider.cloudflare.ts +13 -1
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/service/imageCloudflare.ts +26 -0
- package/vona/src/suite-vendor/a-image/modules/image-native/package.json +6 -2
- package/vona/src/suite-vendor/a-image/modules/image-native/src/.metadata/index.ts +37 -0
- package/vona/src/suite-vendor/a-image/modules/image-native/src/bean/imageProvider.native.ts +21 -1
- package/vona/src/suite-vendor/a-image/modules/image-native/src/controller/image.ts +57 -0
- package/vona/src/suite-vendor/a-image/modules/image-native/src/service/imageNative.ts +142 -34
- package/vona/src/suite-vendor/a-image/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/entity.ts +2 -4
- package/vona/src/suite-vendor/a-vona/modules/a-ormutils/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-ormutils/src/lib/columns.ts +7 -3
- package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/.metadata/index.ts +24 -9
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +87 -73
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permissionActionByRoles.ts +27 -0
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permissionUser.ts +20 -0
- package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-startup/src/service/startup.ts +4 -3
- package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-upload/src/bean/interceptor.upload.ts +5 -1
- package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-user/src/.metadata/index.ts +0 -13
- package/vona/src/suite-vendor/a-vona/modules/a-user/src/lib/passport.ts +0 -7
- package/vona/src/suite-vendor/a-vona/modules/a-version/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-version/src/bean/meta.version.ts +2 -24
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/zova/packages-utils/zova-jsx/package.json +2 -2
- package/zova/packages-zova/zova/package.json +3 -3
- package/zova/packages-zova/zova-core/package.json +1 -1
- package/zova/packages-zova/zova-core/src/bean/beanBase.ts +9 -13
- package/zova/pnpm-lock.yaml +418 -411
- package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolOne/controller.tsx +2 -2
- package/zova/src/suite/a-demo/modules/demo-todo/src/page/todo/controller.tsx +2 -2
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/controller.tsx +2 -2
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +2 -2
- package/zova/src/suite/a-home/modules/home-login/src/page/login/controller.tsx +2 -2
- package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockDetails/controller.tsx +5 -1
- package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockTable/controller.tsx +20 -15
- package/zova/src/suite/cabloy-basic/modules/basic-details/src/service/detail.tsx +6 -1
- package/zova/src/suite/cabloy-basic/modules/basic-file/cli/openapi.config.ts +9 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/package.json +58 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/component/formFieldFile.ts +31 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/index.ts +222 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/this.ts +2 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/file.ts +121 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/baseURL.ts +5 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/index.ts +3 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/schemas.ts +306 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/types.ts +5718 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/apiSchema/file.ts +40 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/bean/tableCell.file.tsx +187 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/component/formFieldFile/controller.tsx +534 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/config/locale/en-us.ts +15 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/config/locale/zh-cn.ts +15 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/index.ts +4 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/lib/file.ts +74 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/lib/index.ts +1 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/model/file.ts +23 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/types/file.ts +12 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/types/index.ts +1 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/tsconfig.build.json +13 -0
- package/zova/src/suite/cabloy-basic/modules/basic-file/tsconfig.json +5 -0
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/.metadata/index.ts +61 -0
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/image.ts +38 -1
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/imageNativeImage.ts +31 -0
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/schemas.ts +52 -0
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/types.ts +614 -1
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/apiSchema/image.ts +10 -0
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/apiSchema/imageNativeImage.ts +13 -0
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/component/formFieldImage/controller.tsx +126 -62
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/model/image.ts +23 -0
- package/zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx +44 -4
- package/zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx +17 -12
- package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx +2 -2
- package/zova/src/suite/cabloy-basic/modules/basic-resource/src/component/formFieldResourcePicker/controller.tsx +2 -2
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/table/controller.tsx +7 -2
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/table/render.tsx +34 -33
- package/zova/src/suite/cabloy-basic/package.json +1 -0
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +5 -3
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx +2 -2
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx +2 -2
- package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/lib/utils.ts +17 -17
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/model/sdk.ts +8 -3
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/package.json +4 -4
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +0 -17
- package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/guard.userName.ts +0 -35
|
@@ -12,6 +12,7 @@ The goal is to explain two things clearly:
|
|
|
12
12
|
Use this page together with:
|
|
13
13
|
|
|
14
14
|
- [Reading Zova for Vue Developers](/frontend/reading-zova-for-vue-developers)
|
|
15
|
+
- [State Architecture for Vue Developers](/frontend/state-architecture-for-vue-developers)
|
|
15
16
|
- [Zova Reactivity Under the Hood](/frontend/zova-reactivity-under-the-hood)
|
|
16
17
|
- [Zova Source Reading Map](/frontend/zova-source-reading-map)
|
|
17
18
|
|
|
@@ -40,16 +41,16 @@ The big difference is the **business-facing programming model**.
|
|
|
40
41
|
|
|
41
42
|
## Side-by-side comparison table
|
|
42
43
|
|
|
43
|
-
| Dimension
|
|
44
|
-
|
|
|
45
|
-
| Reactive host
|
|
46
|
-
| Derived state
|
|
47
|
-
| Main wiring surface
|
|
48
|
-
| Route state access
|
|
49
|
-
| Sharing model
|
|
50
|
-
| Render organization
|
|
51
|
-
| Growth path
|
|
52
|
-
| Architectural emphasis | explicit object roles, scope ownership, and runtime-managed surfaces
|
|
44
|
+
| Dimension | Zova | Vue 3 default mental model |
|
|
45
|
+
| ---------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
|
46
|
+
| Reactive host | controller or bean instance | local `ref` / `reactive` values inside `setup()` |
|
|
47
|
+
| Derived state | `$computed()` often assigned to instance fields | `computed()` usually assigned to local variables |
|
|
48
|
+
| Main wiring surface | `__init__` and bean lifecycle | `setup()` and composition hooks |
|
|
49
|
+
| Route state access | page-controller surface such as `$route`, `$params`, `$query` | composables such as `useRoute()` |
|
|
50
|
+
| Sharing model | IoC containers and bean scopes unify more sharing patterns | composables, props/emits, `provide/inject`, and store layers often coexist |
|
|
51
|
+
| Render organization | controller-oriented; render can stay in controller or move to render beans | component-oriented; template/render/setup stay the obvious center |
|
|
52
|
+
| Growth path | split into controller, render, style, service, model, or other beans | split into composables, child components, and store or helper layers |
|
|
53
|
+
| Architectural emphasis | explicit object roles, scope ownership, and runtime-managed surfaces | flexible local composition with more developer-managed assembly |
|
|
53
54
|
|
|
54
55
|
## 1. Reactive host
|
|
55
56
|
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
# Fullstack Image Workflow
|
|
2
|
+
|
|
3
|
+
This page explains the fullstack image workflow in Cabloy Basic with a practical, contract-chain path.
|
|
4
|
+
|
|
5
|
+
In this page, **resolved relation field** means the DTO-side field such as `image` or `sceneImages` that carries `DtoImageView` data for frontend preview and display.
|
|
6
|
+
|
|
7
|
+
It fills the gap between the layer-specific image guides:
|
|
8
|
+
|
|
9
|
+
- [Backend Image Guide](/backend/image-guide)
|
|
10
|
+
- [Frontend Image Guide](/frontend/image-guide)
|
|
11
|
+
|
|
12
|
+
Use this page when the real question is not only backend image policy and not only frontend image rendering, but the bridge between the two.
|
|
13
|
+
|
|
14
|
+
Use this page together with:
|
|
15
|
+
|
|
16
|
+
- [Contract Loop Playbook](/fullstack/contract-loop-playbook)
|
|
17
|
+
- [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
18
|
+
- [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
|
|
19
|
+
- [Backend Image Guide](/backend/image-guide)
|
|
20
|
+
- [Frontend Image Guide](/frontend/image-guide)
|
|
21
|
+
- [Upload Guide](/backend/upload-guide)
|
|
22
|
+
- [Serialization Guide](/backend/serialization-guide)
|
|
23
|
+
- [Form Guide](/frontend/form-guide)
|
|
24
|
+
- [Table Guide](/frontend/table-guide)
|
|
25
|
+
|
|
26
|
+
> [!TIP]
|
|
27
|
+
> **Image workflow docs path**
|
|
28
|
+
>
|
|
29
|
+
> - **[Fullstack Image Workflow](/fullstack/image-workflow)** — learn the cross-stack chain from backend image field contract and scene policy to frontend `basic-image` consumption
|
|
30
|
+
> - **[Backend Image Guide](/backend/image-guide)** — learn image scenes, providers, serializer transforms, delivery policy, and backend lifecycle behavior
|
|
31
|
+
> - **[Frontend Image Guide](/frontend/image-guide)** — learn `basic-image:formFieldImage`, `basic-image:image`, relation previews, and client-side image-field behavior
|
|
32
|
+
>
|
|
33
|
+
> Use this page when the question is about how one image field travels across the full stack rather than only one layer.
|
|
34
|
+
|
|
35
|
+
## Why this page exists
|
|
36
|
+
|
|
37
|
+
The repository now has a backend image guide and a frontend image guide.
|
|
38
|
+
|
|
39
|
+
What contributors and AI workflows often still need is one continuous answer to this narrower question:
|
|
40
|
+
|
|
41
|
+
> how does one image field travel from backend entity and DTO metadata to frontend form and table rendering?
|
|
42
|
+
|
|
43
|
+
This page answers that question by treating image handling as one contract chain rather than as disconnected snippets.
|
|
44
|
+
|
|
45
|
+
## The shortest correct mental model
|
|
46
|
+
|
|
47
|
+
If you only remember one idea, remember this one:
|
|
48
|
+
|
|
49
|
+
> backend code owns the image field contract, image scene policy, and DTO-side image view resolution, while frontend `basic-image` resources consume that resolved contract for upload, preview, and display.
|
|
50
|
+
|
|
51
|
+
That means an image field usually has two connected surfaces:
|
|
52
|
+
|
|
53
|
+
- a stored identity field such as `imageId` or `sceneImageIds`
|
|
54
|
+
- a resolved relation field such as `image` or `sceneImages`
|
|
55
|
+
|
|
56
|
+
The fullstack workflow works best when both surfaces are authored deliberately and kept aligned.
|
|
57
|
+
|
|
58
|
+
## The fullstack chain in one view
|
|
59
|
+
|
|
60
|
+
A practical image workflow usually looks like this:
|
|
61
|
+
|
|
62
|
+
1. the backend entity stores image identity data such as `imageId` or `sceneImageIds`
|
|
63
|
+
2. backend field metadata points to the frontend image resources with `ZovaRender.field(...)` and `ZovaRender.cell(...)`
|
|
64
|
+
3. the backend image scene defines upload policy such as MIME type, size, and multiple-image rules
|
|
65
|
+
4. the backend DTO resolves image IDs into `DtoImageView` or `DtoImageView[]` through `a-image:resolveView` or `a-image:resolveViews`
|
|
66
|
+
5. the shared contract exposes both the stored ID field and the resolved relation field to frontend consumers
|
|
67
|
+
6. frontend `basic-image:formFieldImage` binds the stored ID field while reusing the resolved relation field for preview cards and dialogs
|
|
68
|
+
7. frontend `basic-image:image` uses the same resolved relation field to render thumbnails in list pages
|
|
69
|
+
|
|
70
|
+
This is not only a forward chain and not only a reverse chain.
|
|
71
|
+
|
|
72
|
+
Instead, it is one concrete business thread where backend contract truth, shared metadata, and frontend resource consumption cooperate.
|
|
73
|
+
|
|
74
|
+
For the broader decision model, read [Contract Loop Playbook](/fullstack/contract-loop-playbook).
|
|
75
|
+
|
|
76
|
+
## Specimen A: single image on Student
|
|
77
|
+
|
|
78
|
+
The Student resource is the best single-image specimen because it shows the complete chain with the smallest number of moving parts.
|
|
79
|
+
|
|
80
|
+
### Backend entity field
|
|
81
|
+
|
|
82
|
+
The Student entity stores one image identity field and points to the built-in image resources:
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
@Api.field(
|
|
86
|
+
v.title($locale('StudentImage')),
|
|
87
|
+
v.optional(),
|
|
88
|
+
ZovaRender.field('basic-image:formFieldImage', {
|
|
89
|
+
imageScene: 'training-student:studentImage',
|
|
90
|
+
relationName: 'image',
|
|
91
|
+
accept: ['image/png', 'image/jpeg', 'image/webp'],
|
|
92
|
+
maxSize: 2 * 1024 * 1024,
|
|
93
|
+
enableCrop: true,
|
|
94
|
+
cropAspectRatio: 1,
|
|
95
|
+
resize: {
|
|
96
|
+
width: 512,
|
|
97
|
+
height: 512,
|
|
98
|
+
fit: 'cover',
|
|
99
|
+
format: 'jpeg',
|
|
100
|
+
quality: 90,
|
|
101
|
+
},
|
|
102
|
+
}),
|
|
103
|
+
ZovaRender.cell('basic-image:image', { relationName: 'image' }),
|
|
104
|
+
v.tableIdentity(),
|
|
105
|
+
)
|
|
106
|
+
imageId?: TableIdentity;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
This already defines two important truths:
|
|
110
|
+
|
|
111
|
+
- the stored field is `imageId`
|
|
112
|
+
- the frontend resource identities are `basic-image:formFieldImage` and `basic-image:image`
|
|
113
|
+
|
|
114
|
+
### Backend image scene
|
|
115
|
+
|
|
116
|
+
The Student image scene defines the upload policy:
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
@ImageScene({
|
|
120
|
+
upload: {
|
|
121
|
+
maxSize: 2 * 1024 * 1024,
|
|
122
|
+
mimeTypes: ['image/png', 'image/jpeg', 'image/webp'],
|
|
123
|
+
},
|
|
124
|
+
})
|
|
125
|
+
export class ImageSceneStudentImage extends BeanBase {}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
This means the backend owns the true upload policy even when the frontend also performs convenience validation.
|
|
129
|
+
|
|
130
|
+
### DTO-side image resolution
|
|
131
|
+
|
|
132
|
+
The Student DTO resolves the stored ID into a resolved relation field:
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
@Api.field(
|
|
136
|
+
ZovaRender.visible(false),
|
|
137
|
+
v.optional(),
|
|
138
|
+
v.serializerTransform('a-image:resolveView', {
|
|
139
|
+
fieldName: 'imageId',
|
|
140
|
+
imageScene: 'training-student:studentImage',
|
|
141
|
+
}),
|
|
142
|
+
v.object(DtoImageView),
|
|
143
|
+
)
|
|
144
|
+
image?: DtoImageView;
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
This is the bridge that turns:
|
|
148
|
+
|
|
149
|
+
- stored value: `imageId`
|
|
150
|
+
- resolved preview data: `image?: DtoImageView`
|
|
151
|
+
|
|
152
|
+
The same list-page branch is also visible in `DtoStudentSelectResItem`, where the row DTO resolves `image` for table usage.
|
|
153
|
+
|
|
154
|
+
### Frontend consumption
|
|
155
|
+
|
|
156
|
+
On the frontend side, the built-in resources consume that contract shape:
|
|
157
|
+
|
|
158
|
+
- `basic-image:formFieldImage` binds the ID field and reuses the `image` resolved relation field for preview cards
|
|
159
|
+
- `basic-image:image` uses the same resolved relation field to render thumbnails in tables
|
|
160
|
+
|
|
161
|
+
This is the cleanest single-image chain in the repo.
|
|
162
|
+
|
|
163
|
+
## Specimen B: multiple images on Record
|
|
164
|
+
|
|
165
|
+
The Record resource shows the plural branch.
|
|
166
|
+
|
|
167
|
+
### Backend entity field
|
|
168
|
+
|
|
169
|
+
The Record entity stores an array of image IDs and points to the same built-in resources:
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
@Api.field(
|
|
173
|
+
v.title($locale('ScenePhotos')),
|
|
174
|
+
v.optional(),
|
|
175
|
+
ZovaRender.field('basic-image:formFieldImage', {
|
|
176
|
+
imageScene: 'training-record:sceneImage',
|
|
177
|
+
multiple: true,
|
|
178
|
+
maxCount: 9,
|
|
179
|
+
relationName: 'sceneImages',
|
|
180
|
+
accept: ['image/png', 'image/jpeg', 'image/webp'],
|
|
181
|
+
maxSize: 2 * 1024 * 1024,
|
|
182
|
+
enableCrop: false,
|
|
183
|
+
resize: {
|
|
184
|
+
width: 1280,
|
|
185
|
+
height: 1280,
|
|
186
|
+
fit: 'contain',
|
|
187
|
+
format: 'jpeg',
|
|
188
|
+
quality: 90,
|
|
189
|
+
},
|
|
190
|
+
}),
|
|
191
|
+
ZovaRender.cell('basic-image:image', { relationName: 'sceneImages' }),
|
|
192
|
+
v.array(v.tableIdentity()),
|
|
193
|
+
)
|
|
194
|
+
sceneImageIds?: TableIdentity[];
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Backend image scene
|
|
198
|
+
|
|
199
|
+
The matching scene enables multi-image upload policy:
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
@ImageScene({
|
|
203
|
+
upload: {
|
|
204
|
+
maxSize: 2 * 1024 * 1024,
|
|
205
|
+
mimeTypes: ['image/png', 'image/jpeg', 'image/webp'],
|
|
206
|
+
multiple: true,
|
|
207
|
+
},
|
|
208
|
+
})
|
|
209
|
+
export class ImageSceneSceneImage extends BeanBase {}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### DTO-side image resolution
|
|
213
|
+
|
|
214
|
+
The DTO resolves many IDs into many preview objects:
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
@Api.field(
|
|
218
|
+
ZovaRender.visible(false),
|
|
219
|
+
v.optional(),
|
|
220
|
+
v.serializerTransform('a-image:resolveViews', {
|
|
221
|
+
fieldName: 'sceneImageIds',
|
|
222
|
+
imageScene: 'training-record:sceneImage',
|
|
223
|
+
}),
|
|
224
|
+
v.array(DtoImageView),
|
|
225
|
+
)
|
|
226
|
+
sceneImages?: DtoImageView[];
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
The same pattern also appears in `DtoRecordSelectResItem`, which makes the relation data available for list-page thumbnails.
|
|
230
|
+
|
|
231
|
+
### Why this branch matters
|
|
232
|
+
|
|
233
|
+
This branch proves that the same workflow scales from:
|
|
234
|
+
|
|
235
|
+
- one ID -> one relation object
|
|
236
|
+
- many IDs -> many relation objects
|
|
237
|
+
|
|
238
|
+
without changing the overall contract-chain model.
|
|
239
|
+
|
|
240
|
+
## Backend authoring responsibilities
|
|
241
|
+
|
|
242
|
+
The backend owns the contract truth.
|
|
243
|
+
|
|
244
|
+
For image workflows, that usually means:
|
|
245
|
+
|
|
246
|
+
- the entity field defines the stored data shape
|
|
247
|
+
- `ZovaRender.field(...)` chooses the form-side frontend resource identity
|
|
248
|
+
- `ZovaRender.cell(...)` chooses the table-side frontend resource identity
|
|
249
|
+
- the image scene bean defines upload policy
|
|
250
|
+
- the DTO serializer transform resolves stored IDs into preview-ready image view objects
|
|
251
|
+
|
|
252
|
+
A practical rule is:
|
|
253
|
+
|
|
254
|
+
- when the business meaning of the image field changes, start by changing backend truth first
|
|
255
|
+
|
|
256
|
+
For the backend-authoring details, read [Backend Image Guide](/backend/image-guide).
|
|
257
|
+
|
|
258
|
+
## What crosses the contract boundary
|
|
259
|
+
|
|
260
|
+
The most important thing that crosses the fullstack boundary is not only the raw image ID.
|
|
261
|
+
|
|
262
|
+
What really crosses the boundary is the pairing of:
|
|
263
|
+
|
|
264
|
+
- stored identity field
|
|
265
|
+
- resolved preview field
|
|
266
|
+
|
|
267
|
+
In the single-image branch, that pair is usually:
|
|
268
|
+
|
|
269
|
+
- `imageId`
|
|
270
|
+
- `image?: DtoImageView`
|
|
271
|
+
|
|
272
|
+
In the multi-image branch, that pair is usually:
|
|
273
|
+
|
|
274
|
+
- `sceneImageIds`
|
|
275
|
+
- `sceneImages?: DtoImageView[]`
|
|
276
|
+
|
|
277
|
+
This is why the DTO serializer step matters so much.
|
|
278
|
+
|
|
279
|
+
It turns backend-owned identity data into frontend-friendly preview data without changing the persistence model.
|
|
280
|
+
|
|
281
|
+
## Frontend consumption responsibilities
|
|
282
|
+
|
|
283
|
+
The frontend does not redefine the image field contract.
|
|
284
|
+
|
|
285
|
+
Instead, it consumes the contract through the built-in image resources.
|
|
286
|
+
|
|
287
|
+
### `basic-image:formFieldImage`
|
|
288
|
+
|
|
289
|
+
The form-side resource is responsible for:
|
|
290
|
+
|
|
291
|
+
- selecting files
|
|
292
|
+
- performing frontend validation
|
|
293
|
+
- optionally cropping and resizing in the browser
|
|
294
|
+
- requesting an upload token
|
|
295
|
+
- uploading multipart data
|
|
296
|
+
- binding the stored image ID field
|
|
297
|
+
- synchronizing the resolved relation field for immediate UI refresh
|
|
298
|
+
|
|
299
|
+
### `basic-image:image`
|
|
300
|
+
|
|
301
|
+
The table-side resource is responsible for:
|
|
302
|
+
|
|
303
|
+
- resolving relation-backed preview data first
|
|
304
|
+
- falling back to URL-style values when needed
|
|
305
|
+
- rendering thumbnails
|
|
306
|
+
- opening the shared preview dialog
|
|
307
|
+
|
|
308
|
+
### Why `relationName` matters
|
|
309
|
+
|
|
310
|
+
The built-in frontend image resources work best when the resolved relation field is named predictably.
|
|
311
|
+
|
|
312
|
+
Common pairings are:
|
|
313
|
+
|
|
314
|
+
- `imageId` -> `image`
|
|
315
|
+
- `sceneImageIds` -> `sceneImages`
|
|
316
|
+
|
|
317
|
+
When your field names are nonstandard, set `relationName` explicitly so backend DTO resolution and frontend preview lookup stay aligned.
|
|
318
|
+
|
|
319
|
+
For the frontend runtime details, read [Frontend Image Guide](/frontend/image-guide).
|
|
320
|
+
|
|
321
|
+
## Single-image vs multi-image differences
|
|
322
|
+
|
|
323
|
+
The contract chain stays the same, but three details change.
|
|
324
|
+
|
|
325
|
+
### 1. Stored value shape
|
|
326
|
+
|
|
327
|
+
- single image: scalar ID such as `imageId`
|
|
328
|
+
- multiple images: ID array such as `sceneImageIds`
|
|
329
|
+
|
|
330
|
+
### 2. DTO serializer transform
|
|
331
|
+
|
|
332
|
+
- single image: `a-image:resolveView`
|
|
333
|
+
- multiple images: `a-image:resolveViews`
|
|
334
|
+
|
|
335
|
+
### 3. Relation preview shape
|
|
336
|
+
|
|
337
|
+
- single image: one `DtoImageView`
|
|
338
|
+
- multiple images: `DtoImageView[]`
|
|
339
|
+
|
|
340
|
+
That is the main branching point the fullstack doc should make explicit.
|
|
341
|
+
|
|
342
|
+
## Where this page sits in the contract loop
|
|
343
|
+
|
|
344
|
+
This workflow is easiest to understand when you keep the contract-loop vocabulary precise.
|
|
345
|
+
|
|
346
|
+
- backend field metadata and DTO/image-scene changes belong to backend contract truth
|
|
347
|
+
- image DTO resolution is part of the backend-authored handoff
|
|
348
|
+
- frontend `basic-image` resources are consumers of that truth
|
|
349
|
+
- frontend-specific render behavior is not a reason to duplicate the backend contract
|
|
350
|
+
|
|
351
|
+
That is why this page sits between:
|
|
352
|
+
|
|
353
|
+
- [Contract Loop Playbook](/fullstack/contract-loop-playbook)
|
|
354
|
+
- [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
355
|
+
- [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
|
|
356
|
+
|
|
357
|
+
It is a bridge page for one concrete business thread rather than a general direction guide.
|
|
358
|
+
|
|
359
|
+
## Verification workflow
|
|
360
|
+
|
|
361
|
+
When writing or changing image workflow docs, verify in this order.
|
|
362
|
+
|
|
363
|
+
1. confirm the entity field still points to:
|
|
364
|
+
- `basic-image:formFieldImage`
|
|
365
|
+
- `basic-image:image`
|
|
366
|
+
2. confirm the image scene still matches the specimen field
|
|
367
|
+
3. confirm the DTO still uses:
|
|
368
|
+
- `a-image:resolveView` for single-image fields
|
|
369
|
+
- `a-image:resolveViews` for multi-image fields
|
|
370
|
+
4. confirm the list-row DTOs still expose the same resolved relation fields for table usage
|
|
371
|
+
5. confirm the frontend image resources still consume the same relation-name pattern
|
|
372
|
+
6. confirm the page stays bridge-focused rather than duplicating the backend or frontend guides
|
|
373
|
+
7. run the docs build and confirm the page appears under `Fullstack / Architecture & Integration`
|
|
374
|
+
|
|
375
|
+
## Read together with
|
|
376
|
+
|
|
377
|
+
Use the surrounding docs based on which layer now needs deeper attention.
|
|
378
|
+
|
|
379
|
+
### Backend policy and authoring details
|
|
380
|
+
|
|
381
|
+
- [Backend Image Guide](/backend/image-guide)
|
|
382
|
+
- [Upload Guide](/backend/upload-guide)
|
|
383
|
+
- [Serialization Guide](/backend/serialization-guide)
|
|
384
|
+
- [Controller Guide](/backend/controller-guide)
|
|
385
|
+
|
|
386
|
+
### Frontend runtime and rendering details
|
|
387
|
+
|
|
388
|
+
- [Frontend Image Guide](/frontend/image-guide)
|
|
389
|
+
- [Form Guide](/frontend/form-guide)
|
|
390
|
+
- [Table Guide](/frontend/table-guide)
|
|
391
|
+
- [TableCell Authoring Cookbook](/frontend/table-cell-cookbook)
|
|
392
|
+
|
|
393
|
+
### Broader fullstack bridge and contract-loop decisions
|
|
394
|
+
|
|
395
|
+
- [Contract Loop Playbook](/fullstack/contract-loop-playbook)
|
|
396
|
+
- [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
397
|
+
- [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
|
|
398
|
+
|
|
399
|
+
A good final question is:
|
|
400
|
+
|
|
401
|
+
- am I debugging one layer, or am I debugging the handoff between layers?
|
|
402
|
+
|
|
403
|
+
If the answer is the handoff, this page is the right place to start.
|
|
@@ -46,6 +46,7 @@ Use this path when the task is about how backend and frontend stay aligned insid
|
|
|
46
46
|
- [Vona + Zova Integration](/fullstack/vona-zova-integration)
|
|
47
47
|
- [Contract Loop Playbook](/fullstack/contract-loop-playbook)
|
|
48
48
|
- [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
|
|
49
|
+
- [Fullstack Image Workflow](/fullstack/image-workflow)
|
|
49
50
|
- [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
50
51
|
- [Frontend Metadata Back to Backend](/fullstack/frontend-metadata-to-backend)
|
|
51
52
|
|
package/package.json
CHANGED
package/scripts/upgrade.ts
CHANGED
|
@@ -50,6 +50,7 @@ const OVERWRITE_DIRS: string[] = [
|
|
|
50
50
|
const MERGE_DIRS: string[] = [
|
|
51
51
|
// Claude project assets
|
|
52
52
|
'.claude/commands',
|
|
53
|
+
'.claude/hooks',
|
|
53
54
|
'.claude/skills',
|
|
54
55
|
// Vona Claude project assets
|
|
55
56
|
'vona/.claude/commands',
|
|
@@ -67,6 +68,7 @@ const BLACKLIST_DIRS: string[] = [
|
|
|
67
68
|
const WHITELIST_FILES: string[] = [
|
|
68
69
|
// root
|
|
69
70
|
'CLAUDE.md',
|
|
71
|
+
'.claude/settings.json',
|
|
70
72
|
'tsconfig.json',
|
|
71
73
|
'tsconfig.base.json',
|
|
72
74
|
'tsconfig.base.esm.json',
|
|
@@ -30,7 +30,6 @@
|
|
|
30
30
|
"build:docker": "npm run prerun && npm run vona :bin:build -- --flavor=docker",
|
|
31
31
|
"start": "pnpm -C ./dist/normal install && node ./dist/normal/bootstrap.js",
|
|
32
32
|
"start:one": "pnpm -C ./dist/normal install && cross-env SERVER_WORKERS=1 node ./dist/normal/bootstrap.js",
|
|
33
|
-
"start:docker": "pnpm -C ./dist/docker install && cross-env SERVER_WORKERS=1 node ./dist/docker/bootstrap.js",
|
|
34
33
|
"prerun": "npm run vona :tools:deps",
|
|
35
34
|
"format": "oxfmt --check",
|
|
36
35
|
"format:fix": "oxfmt --write",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vona",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.72",
|
|
4
4
|
"gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
|
|
5
5
|
"description": "Vona is an intuitive, elegant and powerful Node.js framework for rapidly developing enterprise applications of any size",
|
|
6
6
|
"keywords": [
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
import type winston from 'winston';
|
|
2
2
|
|
|
3
3
|
import type { ILoggerChildRecord, ILoggerClientRecord } from '../../types/interface/logger.ts';
|
|
4
|
-
import type { IModuleLocaleText } from './resource/locale/type.ts';
|
|
4
|
+
// import type { IModuleLocaleText } from './resource/locale/type.ts';
|
|
5
5
|
import type { IBeanScopeContainer } from './scope/beanScopeContainer.ts';
|
|
6
6
|
|
|
7
7
|
import { BeanBaseSimple, SymbolBeanInstanceKey, SymbolModuleBelong } from './beanBaseSimple.ts';
|
|
8
8
|
|
|
9
|
-
const SymbolText = Symbol('SymbolText');
|
|
9
|
+
// const SymbolText = Symbol('SymbolText');
|
|
10
10
|
const SymbolLogger = Symbol('SymbolLogger');
|
|
11
11
|
const SymbolLoggerChildren = Symbol('SymbolLoggerChildren');
|
|
12
12
|
|
|
13
13
|
export class BeanBase extends BeanBaseSimple {
|
|
14
|
-
private [SymbolText]: IModuleLocaleText;
|
|
14
|
+
// private [SymbolText]: IModuleLocaleText;
|
|
15
15
|
private [SymbolLogger]: Record<keyof ILoggerClientRecord, winston.Logger> = {} as any;
|
|
16
16
|
private [SymbolLoggerChildren]: Record<
|
|
17
17
|
keyof ILoggerClientRecord,
|
|
18
18
|
Record<string, winston.Logger>
|
|
19
19
|
> = {} as any;
|
|
20
20
|
|
|
21
|
-
protected get $text(): IModuleLocaleText {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
21
|
+
// protected get $text(): IModuleLocaleText {
|
|
22
|
+
// if (!this[SymbolText]) {
|
|
23
|
+
// this[SymbolText] = this.app.meta.locale.createLocaleText(this[SymbolModuleBelong]);
|
|
24
|
+
// }
|
|
25
|
+
// return this[SymbolText];
|
|
26
|
+
// }
|
|
27
27
|
|
|
28
28
|
protected get $logger() {
|
|
29
29
|
return this.$loggerClient('default');
|