cabloy 5.1.111 → 5.1.112
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/skills/cabloy-backend-scaffold/SKILL.md +29 -1
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +12 -0
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +3 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +4 -0
- package/.claude/skills/cabloy-master-detail/SKILL.md +13 -2
- package/.github/workflows/playwright-e2e.yml +45 -0
- package/.gitignore +1 -0
- package/CHANGELOG.md +17 -0
- package/CLAUDE.md +4 -1
- package/README.md +8 -8
- package/cabloy-docs/backend/crud-workflow.md +10 -0
- package/cabloy-docs/backend/foundation.md +29 -4
- package/cabloy-docs/backend/introduction.md +1 -1
- package/cabloy-docs/backend/model-guide.md +9 -11
- package/cabloy-docs/backend/multi-instance-and-instance-resolution.md +18 -0
- package/cabloy-docs/backend/service-guide.md +1 -1
- package/cabloy-docs/frontend/a-router-guide.md +1 -1
- package/cabloy-docs/frontend/introduction.md +1 -1
- package/cabloy-docs/frontend/navigation-guards-guide.md +20 -11
- package/cabloy-docs/frontend/route-alias-guide.md +24 -0
- package/cabloy-docs/frontend/scripts.md +71 -24
- package/cabloy-docs/frontend/ssr-init-data.md +25 -0
- package/cabloy-docs/frontend/ssr-review-checklist.md +17 -7
- package/cabloy-docs/frontend/use-state-data-best-practices.md +4 -0
- package/cabloy-docs/frontend/zova-router-under-the-hood.md +4 -1
- package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +19 -13
- package/cabloy-docs/fullstack/introduction.md +10 -10
- package/cabloy-docs/fullstack/quickstart.md +23 -1
- package/cabloy-docs/index.md +14 -14
- package/cabloy-docs/reference/package-map.md +11 -7
- package/cabloy-docs/reference/repo-scripts.md +108 -23
- package/e2e/scripts/e2e.ts +1 -1
- package/e2e/specs/a-commerce/commerce.spec.ts +124 -1
- package/package.json +2 -1
- package/scripts/init.ts +6 -12
- package/scripts/upgrade.ts +3 -1
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/pnpm-lock.yaml +39 -108
- package/vona/src/backend/config/config/config.ts +11 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/package.json +4 -2
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/index.ts +732 -2
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/locales.ts +18 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/meta.index.ts +14 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/meta.version.ts +52 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/ssrMenu.category.ts +30 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/ssrMenu.product.ts +30 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/ssrMenu.sku.ts +30 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/en-us.ts +19 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/zh-cn.ts +19 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/controller/category.ts +65 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/controller/product.ts +86 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/controller/sku.ts +65 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/categoryCreate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/categorySelectReq.tsx +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/categorySelectRes.tsx +11 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/categorySelectResItem.tsx +39 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/categoryUpdate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/categoryView.tsx +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productCreate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productPublic.tsx +38 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productPublicSelectReq.tsx +23 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productPublicSelectRes.tsx +11 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productPublicSku.tsx +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productSelectReq.tsx +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productSelectRes.tsx +11 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productSelectResItem.tsx +39 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productUpdate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productView.tsx +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuCreate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuSelectReq.tsx +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuSelectRes.tsx +11 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuSelectResItem.tsx +39 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuUpdate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuView.tsx +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/entity/category.tsx +53 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/entity/product.tsx +48 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/entity/sku.tsx +66 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/index.ts +1 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/model/category.ts +15 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/model/product.ts +46 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/model/sku.ts +18 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/service/category.ts +47 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/service/product.ts +162 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/service/sku.ts +76 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/test/catalog.test.ts +358 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/test/category.test.ts +91 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/test/product.test.ts +154 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/test/sku.test.ts +190 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/package.json +2 -1
- package/vona/src/suite/a-commerce/modules/commerce-member/src/.metadata/index.ts +342 -5
- package/vona/src/suite/a-commerce/modules/commerce-member/src/.metadata/locales.ts +18 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/bean/meta.index.ts +12 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/bean/meta.version.ts +31 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/config/locale/en-us.ts +12 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/config/locale/zh-cn.ts +12 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/controller/address.ts +59 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressCreate.tsx +39 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressSelectReq.tsx +30 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressSelectRes.tsx +11 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressSelectResItem.tsx +53 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressUpdate.tsx +39 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressView.tsx +39 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/entity/address.tsx +76 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/index.ts +1 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/model/address.ts +10 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/src/service/address.ts +84 -0
- package/vona/src/suite/a-commerce/modules/commerce-member/test/addressOwnership.test.ts +203 -0
- package/vona/src/suite/a-commerce/modules/commerce-seed/package.json +52 -0
- package/vona/src/suite/a-commerce/modules/commerce-seed/src/.metadata/index.ts +55 -0
- package/vona/src/suite/a-commerce/modules/commerce-seed/src/.metadata/this.ts +2 -0
- package/vona/src/suite/a-commerce/modules/commerce-seed/src/bean/meta.version.ts +80 -0
- package/vona/src/suite/a-commerce/modules/commerce-seed/src/index.ts +1 -0
- package/vona/src/suite/a-commerce/modules/commerce-seed/tsconfig.build.json +11 -0
- package/vona/src/suite/a-commerce/modules/commerce-seed/tsconfig.json +7 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/package.json +4 -2
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/.metadata/index.ts +192 -2
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/.metadata/locales.ts +18 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/bean/meta.version.ts +32 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/bean/ssrMenu.home.ts +3 -1
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/bean/ssrMenuGroup.catalog.ts +21 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/bean/ssrMenuGroup.inventory.ts +21 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/config/locale/en-us.ts +5 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/config/locale/zh-cn.ts +5 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/controller/operator.ts +21 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/dto/operatorContext.ts +21 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/index.ts +1 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/src/service/operator.ts +18 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/test/meta.version.test.ts +44 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/test/operatorAccess.test.ts +55 -0
- package/vona/src/suite/a-commerce/modules/commerce-siteadmin/test/ssrMenu.test.ts +77 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/package.json +2 -1
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +773 -2
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/locales.ts +18 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.index.ts +23 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.version.ts +79 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/ssrMenu.stockAudit.ts +30 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/ssrMenu.stockBalance.ts +30 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/cart.ts +48 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/stockAudit.ts +38 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/stockBalance.ts +49 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/cartAddItem.tsx +19 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/cartItem.tsx +34 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/cartUpdateItem.tsx +15 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/cartView.tsx +18 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAdjust.tsx +32 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAuditCreate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAuditSelectReq.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAuditSelectRes.tsx +11 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAuditSelectResItem.tsx +33 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAuditUpdate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAuditView.tsx +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockBalanceCreate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockBalanceSelectReq.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockBalanceSelectRes.tsx +11 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockBalanceSelectResItem.tsx +33 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockBalanceUpdate.tsx +28 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockBalanceView.tsx +25 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/cart.tsx +24 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/cartItem.tsx +30 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/stockAudit.tsx +86 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/stockBalance.tsx +53 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/stockReservation.tsx +63 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/index.ts +1 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/cart.ts +17 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/cartItem.ts +10 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/stockAudit.ts +10 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/stockBalance.ts +15 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/stockReservation.ts +10 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/cart.ts +152 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/stockAudit.ts +20 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/stockBalance.ts +305 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/cartOwnership.test.ts +174 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockAudit.test.ts +37 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockBalance.test.ts +186 -0
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockReservation.test.ts +262 -0
- package/vona/src/suite/a-commerce/package.json +1 -0
- package/vona/src/suite/a-commerce/tsconfig.json +3 -0
- package/vona/src/suite/a-home/modules/home-user/src/.metadata/index.ts +7 -1
- package/vona/src/suite/a-home/modules/home-user/test/role.test.ts +14 -23
- package/vona/src/suite/a-training/modules/training-record/src/.metadata/index.ts +10 -8
- package/vona/src/suite/a-training/modules/training-recordsubject/src/.metadata/index.ts +2 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +3 -1
- package/vona/src/suite-vendor/a-auth/modules/a-auth/package.json +1 -1
- package/vona/src/suite-vendor/a-auth/modules/a-auth/src/.metadata/index.ts +7 -3
- package/vona/src/suite-vendor/a-auth/modules/auth-simple/package.json +1 -1
- package/vona/src/suite-vendor/a-auth/modules/auth-simple/src/.metadata/index.ts +2 -0
- package/vona/src/suite-vendor/a-auth/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasource/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasource/src/.metadata/index.ts +3 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-socket/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-socket/src/.metadata/index.ts +1 -1
- 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/.metadata/index.ts +47 -47
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssrhmr/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssrhmr/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-status/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-status/src/.metadata/index.ts +2 -0
- package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
- package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +1 -1
- package/vona/src/suite-vendor/a-captcha/modules/a-captcha/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-captcha/package.json +1 -1
- package/vona/src/suite-vendor/a-file/modules/a-file/package.json +1 -1
- package/vona/src/suite-vendor/a-file/modules/a-file/src/.metadata/index.ts +42 -38
- package/vona/src/suite-vendor/a-file/package.json +2 -2
- package/vona/src/suite-vendor/a-image/modules/a-image/package.json +1 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/.metadata/index.ts +42 -38
- 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/.metadata/index.ts +42 -27
- package/vona/src/suite-vendor/a-image/package.json +1 -1
- package/vona/src/suite-vendor/a-paypal/modules/a-paypal/package.json +1 -1
- package/vona/src/suite-vendor/a-paypal/modules/a-paypal/src/.metadata/index.ts +3 -1
- package/vona/src/suite-vendor/a-paypal/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-beanmutate/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-beanmutate/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-body/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-body/src/.metadata/index.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/.metadata/index.ts +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-core/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-error/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-error/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-event/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-event/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-executor/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-hmr/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-hmr/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-instance/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-instance/src/.metadata/index.ts +3 -1
- package/vona/src/suite-vendor/a-vona/modules/a-jwt/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-jwt/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-logger/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-logger/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-mail/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-mail/src/.metadata/index.ts +3 -1
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-onion/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-onion/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/cli/model/metadata/generate.ts +5 -11
- 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/lib/bean.model/bean.model_cache.ts +52 -0
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +4 -10
- package/vona/src/suite-vendor/a-vona/modules/a-redis/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-redis/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-security/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-security/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-serialization/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-serialization/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/.metadata/index.ts +1 -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 +4 -5
- package/vona/src/suite-vendor/a-vona/modules/a-validation/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-validation/src/.metadata/index.ts +1 -1
- 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/.metadata/index.ts +6 -0
- package/vona/src/suite-vendor/a-vona/modules/a-web/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-web/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-worker/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/zova/packages-cli/cli/package.json +2 -2
- package/zova/packages-cli/cli-set-front/package.json +1 -1
- package/zova/packages-cli/cli-set-front/src/lib/bean/toolsMetadata/generateScope.ts +1 -1
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +9 -9
- package/zova/src/front/config/config/config.cabloyCommerce.ts +5 -1
- package/zova/src/front/config/config/config.cabloyCommerceAdmin.ts +2 -1
- package/zova/src/suite/a-commerce/modules/commerce-catalog/cli/openapi.config.ts +9 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/package.json +2 -1
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/index.ts +202 -3
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/page/catalogue.ts +23 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/page/product.ts +19 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/api/commerceCatalogProduct.ts +52 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/api/openapi/baseURL.ts +5 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/api/openapi/index.ts +3 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/api/openapi/schemas.ts +412 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/api/openapi/types.ts +7159 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/apiSchema/commerceCatalogProduct.ts +20 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/en-us.ts +8 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/zh-cn.ts +8 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/index.ts +1 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/model/catalogue.ts +38 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/page/catalogue/controller.tsx +71 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/page/product/controller.tsx +108 -0
- package/zova/src/suite/a-commerce/modules/commerce-catalog/src/routes.ts +19 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/cli/openapi.config.ts +9 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/package.json +2 -1
- package/zova/src/suite/a-commerce/modules/commerce-member/src/.metadata/index.ts +182 -3
- package/zova/src/suite/a-commerce/modules/commerce-member/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/.metadata/page/address.ts +19 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/api/commerceMemberAddress.ts +111 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/api/openapi/baseURL.ts +5 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/api/openapi/index.ts +3 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/api/openapi/schemas.ts +432 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/api/openapi/types.ts +7445 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/apiSchema/commerceMemberAddress.ts +35 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/config/locale/en-us.ts +17 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/config/locale/zh-cn.ts +17 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/index.ts +1 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/model/address.ts +38 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/page/address/controller.tsx +194 -0
- package/zova/src/suite/a-commerce/modules/commerce-member/src/routes.ts +12 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/cli/openapi.config.ts +9 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/package.json +2 -1
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/.metadata/index.ts +175 -3
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/.metadata/page/dashboard.ts +9 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/api/commerceSiteadminOperator.ts +25 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/api/openapi/baseURL.ts +5 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/api/openapi/index.ts +3 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/api/openapi/schemas.ts +304 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/api/openapi/types.ts +5710 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/apiSchema/commerceSiteadminOperator.ts +13 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/config/locale/en-us.ts +5 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/config/locale/zh-cn.ts +5 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/index.ts +1 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/model/operator.ts +17 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/page/dashboard/controller.tsx +34 -0
- package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/routes.ts +5 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +15 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/package.json +2 -1
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +182 -3
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/page/cart.ts +19 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradeCart.ts +99 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/baseURL.ts +5 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/index.ts +3 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +446 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +7651 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradeCart.ts +35 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +8 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +8 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/index.ts +1 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/cart.ts +77 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/cart/controller.tsx +108 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/routes.ts +12 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +5 -5
- package/zova/src/suite/a-demo/modules/demo-todo/src/.metadata/index.ts +2 -2
- package/zova/src/suite/a-home/modules/home-base/src/service/routerGuards.ts +18 -10
- package/zova/src/suite/a-home/modules/home-indexweb/src/.metadata/index.ts +2 -2
- 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/.metadata/index.ts +4 -4
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +1 -0
- package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-bean/cli/controller/metadata/generateMetaPage.ts +3 -1
- package/zova/src/suite-vendor/a-zova/modules/a-bean/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-fetch/package.json +2 -2
- 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 +3 -1
- package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-router/src/bean/sys.router.ts +35 -8
- package/zova/src/suite-vendor/a-zova/modules/a-router/src/monkeySys.ts +28 -12
- package/zova/src/suite-vendor/a-zova/modules/a-router/src/service/routerGuards.ts +6 -8
- package/zova/src/suite-vendor/a-zova/modules/a-router/src/types/router.ts +14 -2
- package/zova/src/suite-vendor/a-zova/modules/a-router/src/types/utils.ts +4 -1
- package/zova/src/suite-vendor/a-zova/package.json +5 -5
- package/CLAUDE.local.md +0 -4
- /package/e2e/specs/{a-basic → cabloy-basic}/basic.spec.ts +0 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# Repo Scripts
|
|
2
2
|
|
|
3
|
-
Use this page
|
|
3
|
+
Use this page as the compact lookup surface for root scripts in Cabloy Basic and Cabloy Start.
|
|
4
4
|
|
|
5
5
|
For the broader Reference landing page, see [Reference Introduction](/reference/introduction).
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Always start with the active repository's root `package.json`. Cabloy Basic is the public generated-project baseline; Cabloy Start is the licensed private repository and has its own root command surface.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Cabloy Basic entrypoints
|
|
10
|
+
|
|
11
|
+
Cabloy Basic exposes these shared root scripts:
|
|
10
12
|
|
|
11
13
|
- `npm run init`
|
|
12
14
|
- `npm run upgrade`
|
|
@@ -14,17 +16,23 @@ The root `package.json` is the first reference point for shared monorepo workflo
|
|
|
14
16
|
- `npm run vona`
|
|
15
17
|
- `npm run zova`
|
|
16
18
|
- `npm run dev`
|
|
19
|
+
- `npm run dev:one`
|
|
17
20
|
- `npm run dev:zova:admin`
|
|
18
21
|
- `npm run dev:zova:web`
|
|
19
22
|
- `npm run dev:zova:commerce:web`
|
|
20
23
|
- `npm run dev:zova:commerce:admin`
|
|
21
24
|
- `npm run build`
|
|
22
25
|
- `npm run build:zova`
|
|
26
|
+
- `npm run build:zova:all`
|
|
27
|
+
- `npm run build:zova:admin`
|
|
28
|
+
- `npm run build:zova:web`
|
|
23
29
|
- `npm run build:zova:commerce`
|
|
24
30
|
- `npm run build:zova:commerce:web`
|
|
25
31
|
- `npm run build:zova:commerce:admin`
|
|
26
32
|
- `npm run start`
|
|
33
|
+
- `npm run start:one`
|
|
27
34
|
- `npm run test`
|
|
35
|
+
- `npm run db:reset`
|
|
28
36
|
- `npm run test:e2e:basic`
|
|
29
37
|
- `npm run test:e2e:basic:web`
|
|
30
38
|
- `npm run test:e2e:basic:admin`
|
|
@@ -38,21 +46,87 @@ The root `package.json` is the first reference point for shared monorepo workflo
|
|
|
38
46
|
- `npm run docs:build`
|
|
39
47
|
- `npm run docs:preview`
|
|
40
48
|
|
|
49
|
+
`npm run init` prepares all Cabloy Basic SSR and REST artifacts with `npm run build:zova:all`, which sequentially builds the Basic and Commerce flavor batches before Vona initialization. Use `build:zova` or `build:zova:commerce` for focused artifact refreshes; use `build:zova:all` only when every shipped Basic flavor must be prepared.
|
|
50
|
+
|
|
51
|
+
## Cabloy Start entrypoints
|
|
52
|
+
|
|
53
|
+
Cabloy Start exposes the equivalent Start repository surface:
|
|
54
|
+
|
|
55
|
+
- `npm run init`
|
|
56
|
+
- `npm run upgrade`
|
|
57
|
+
- `npm run upgrade:dry-run`
|
|
58
|
+
- `npm run vona`
|
|
59
|
+
- `npm run zova`
|
|
60
|
+
- `npm run dev`
|
|
61
|
+
- `npm run dev:one`
|
|
62
|
+
- `npm run dev:zova:admin`
|
|
63
|
+
- `npm run dev:zova:web`
|
|
64
|
+
- `npm run build`
|
|
65
|
+
- `npm run build:zova`
|
|
66
|
+
- `npm run build:zova:admin`
|
|
67
|
+
- `npm run build:zova:web`
|
|
68
|
+
- `npm run start`
|
|
69
|
+
- `npm run start:one`
|
|
70
|
+
- `npm run test`
|
|
71
|
+
- `npm run db:reset`
|
|
72
|
+
- `npm run test:e2e:start`
|
|
73
|
+
- `npm run test:e2e:start:web`
|
|
74
|
+
- `npm run test:e2e:start:admin`
|
|
75
|
+
- `npm run test:e2e:start:clean`
|
|
76
|
+
- `npm run tsc`
|
|
77
|
+
|
|
78
|
+
Cabloy Start does not expose Basic Commerce or root documentation wrappers.
|
|
79
|
+
|
|
41
80
|
## Upgrade
|
|
42
81
|
|
|
43
|
-
Run `npm run upgrade:dry-run` before `npm run upgrade` to inspect
|
|
82
|
+
Run `npm run upgrade:dry-run` before `npm run upgrade` to inspect framework files and root manifest entries that an upgrade would synchronize.
|
|
83
|
+
|
|
84
|
+
### Cabloy Basic public projects
|
|
85
|
+
|
|
86
|
+
Basic upgrade owns these browser baseline paths:
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
e2e/config/
|
|
90
|
+
e2e/scripts/
|
|
91
|
+
e2e/specs/cabloy-basic/
|
|
92
|
+
e2e/specs/a-commerce/
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
It also reconciles the framework Basic and Commerce `test:e2e:*` scripts and `@playwright/test` development dependency. Keep project browser tests outside those reserved paths. The upgrader merges framework baseline directories without deleting project-owned paths and can repair an incomplete Basic E2E baseline even when the framework version marker is already current.
|
|
96
|
+
|
|
97
|
+
### Cabloy Start private repository
|
|
98
|
+
|
|
99
|
+
The Start E2E baseline is maintained in the private repository:
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
e2e/config/
|
|
103
|
+
e2e/scripts/
|
|
104
|
+
e2e/specs/cabloy-start/
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The public-package upgrade flow does not source or reconcile the Start baseline, its `test:e2e:start*` scripts, or `@playwright/test`. Keep project browser tests outside the baseline paths, for example under `e2e/specs/my-project/`.
|
|
44
108
|
|
|
45
109
|
## SSR browser checks
|
|
46
110
|
|
|
47
|
-
|
|
111
|
+
The suites use this command family:
|
|
48
112
|
|
|
49
113
|
- `test:e2e:<suite>` runs every browser scenario in the suite.
|
|
50
|
-
- `test:e2e:<suite>:web` and `test:e2e:<suite>:admin`
|
|
51
|
-
- `test:e2e:<suite>:clean` resets managed local
|
|
114
|
+
- `test:e2e:<suite>:web` and `test:e2e:<suite>:admin` select `@web` and `@admin` scenarios.
|
|
115
|
+
- `test:e2e:<suite>:clean` resets managed local state, starts one development Vona worker, then runs the suite or a Playwright-filtered subset.
|
|
116
|
+
|
|
117
|
+
The managed `:clean` runner requires port `7102` to be available. It owns the suite config and local lifecycle: it resets the database, and Playwright starts and stops `npm run dev:one`. It accepts normal Playwright selection and reporting options, but rejects external base URLs, `--config`, and positional spec paths. Use `--grep` or `--grep-invert` to narrow the run.
|
|
118
|
+
|
|
119
|
+
Pass Playwright options after npm's `--` delimiter. `@web` and `@admin` are stable surface tags. Purpose tags depend on the suite: current scenarios use `@smoke`, while the Basic suite also uses `@flow`. ATP IDs remain in titles for exact evidence and failure reruns.
|
|
52
120
|
|
|
53
|
-
|
|
121
|
+
### Cabloy Basic and Commerce
|
|
54
122
|
|
|
55
|
-
|
|
123
|
+
The Basic suite exercises Web at `/` and Admin at `/admin` through Vona's SSR dispatcher. Prepare fresh SSR and REST artifacts explicitly when frontend output has changed:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npm run build:zova
|
|
127
|
+
npm run deps:vona
|
|
128
|
+
npm run test:e2e:basic:clean
|
|
129
|
+
```
|
|
56
130
|
|
|
57
131
|
```bash
|
|
58
132
|
# Exact acceptance scenario
|
|
@@ -66,16 +140,6 @@ npm run test:e2e:basic:clean -- --grep @admin
|
|
|
66
140
|
npm run test:e2e:basic:clean -- --grep '(?=.*@admin)(?=.*@flow)'
|
|
67
141
|
```
|
|
68
142
|
|
|
69
|
-
The managed `:clean` runner owns its suite config and local lifecycle. It accepts normal Playwright selection and reporting options, but does not accept `--config` or positional spec paths. Use `--grep` or `--grep-invert` to narrow the run. It rejects an external base URL rather than resetting or starting an externally managed target.
|
|
70
|
-
|
|
71
|
-
The Basic suite exercises Web at `/` and Admin at `/admin` through Vona's SSR dispatcher. Prepare fresh Basic SSR artifacts explicitly when frontend SSR output has changed:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
npm run build:zova
|
|
75
|
-
npm run deps:vona
|
|
76
|
-
npm run test:e2e:basic:clean
|
|
77
|
-
```
|
|
78
|
-
|
|
79
143
|
For an externally managed Basic target, set `BASIC_E2E_BASE_URL` and use aggregate, surface, or forwarded-tag commands. These commands do not reset, start, stop, or rebuild the target:
|
|
80
144
|
|
|
81
145
|
```bash
|
|
@@ -100,13 +164,34 @@ COMMERCE_E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:commerce:web
|
|
|
100
164
|
COMMERCE_E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:commerce -- --grep @smoke
|
|
101
165
|
```
|
|
102
166
|
|
|
103
|
-
|
|
167
|
+
### Cabloy Start
|
|
104
168
|
|
|
105
|
-
|
|
169
|
+
The Start suite exercises Web at `/` and Admin at `/admin` through Vona's SSR dispatcher. Prepare current Start artifacts before a managed local run:
|
|
106
170
|
|
|
107
|
-
|
|
171
|
+
```bash
|
|
172
|
+
npm run build:zova
|
|
173
|
+
npm run deps:vona
|
|
174
|
+
npm run test:e2e:start:clean
|
|
175
|
+
```
|
|
108
176
|
|
|
109
|
-
|
|
177
|
+
```bash
|
|
178
|
+
# Exact acceptance scenario
|
|
179
|
+
npm run test:e2e:start -- --grep ATP-START-FLOW-01
|
|
180
|
+
|
|
181
|
+
# Category or surface selection
|
|
182
|
+
npm run test:e2e:start:clean -- --grep @smoke
|
|
183
|
+
npm run test:e2e:start:clean -- --grep @admin
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
For an externally managed Start target, set `START_E2E_BASE_URL` and use matching aggregate, surface, or forwarded-tag commands. The target owner is responsible for data, cache, and artifact freshness:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
START_E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:start
|
|
190
|
+
START_E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:start:admin
|
|
191
|
+
START_E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:start -- --grep @web
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Browser commands consume existing SSR and REST artifacts; they never rebuild them. Install Chromium once when needed with `npx playwright install chromium`.
|
|
110
195
|
|
|
111
196
|
## Read together with
|
|
112
197
|
|
package/e2e/scripts/e2e.ts
CHANGED
|
@@ -12,7 +12,7 @@ const e2eSuites = {
|
|
|
12
12
|
basic: {
|
|
13
13
|
externalBaseUrlEnv: 'BASIC_E2E_BASE_URL',
|
|
14
14
|
configFile: resolve(E2E_CONFIG_DIR, 'playwright.basic.config.ts'),
|
|
15
|
-
testDir: resolve(E2E_SPECS_DIR, '
|
|
15
|
+
testDir: resolve(E2E_SPECS_DIR, 'cabloy-basic'),
|
|
16
16
|
readinessPath: '/',
|
|
17
17
|
},
|
|
18
18
|
commerce: {
|
|
@@ -29,7 +29,7 @@ test(
|
|
|
29
29
|
expect(documentResponse?.ok()).toBeTruthy();
|
|
30
30
|
await expect(page).toHaveURL(/\/commerce(?:\/|$)/);
|
|
31
31
|
await expect(page.locator('html')).toHaveAttribute('data-zova-hydrated', 'commerce');
|
|
32
|
-
await expect(page.
|
|
32
|
+
await expect(page.getByRole('heading', { name: 'Commerce catalogue' })).toBeVisible();
|
|
33
33
|
await expect(page.getByText('Dashboard')).toHaveCount(0);
|
|
34
34
|
await expect(page.locator('body')).toBeVisible();
|
|
35
35
|
await expect(page).not.toHaveTitle(/error/i);
|
|
@@ -37,6 +37,129 @@ test(
|
|
|
37
37
|
},
|
|
38
38
|
);
|
|
39
39
|
|
|
40
|
+
test(
|
|
41
|
+
'Commerce catalogue: public sellable inventory renders after hydration',
|
|
42
|
+
{ tag: ['@web', '@flow'] },
|
|
43
|
+
async ({ page }) => {
|
|
44
|
+
const pageErrors = collectPageErrors(page);
|
|
45
|
+
const response = await page.goto('/commerce', { waitUntil: 'load' });
|
|
46
|
+
expect(response?.ok()).toBeTruthy();
|
|
47
|
+
await expect(page.locator('html')).toHaveAttribute('data-zova-hydrated', 'commerce');
|
|
48
|
+
await expect(page.getByRole('heading', { name: 'Commerce catalogue' })).toBeVisible();
|
|
49
|
+
await expect(page.getByRole('link', { name: 'Wireless Headphones' })).toBeVisible();
|
|
50
|
+
await expect(page.getByText('24 available')).toBeVisible();
|
|
51
|
+
await page.getByRole('link', { name: 'Wireless Headphones' }).click();
|
|
52
|
+
await expect(page).toHaveURL(/\/commerce\/product\/\d+(?:\/|$)/);
|
|
53
|
+
await expect(page.getByRole('heading', { name: 'Wireless Headphones' })).toBeVisible();
|
|
54
|
+
await expect(page.getByText('HPH-BLK')).toBeVisible();
|
|
55
|
+
expect(pageErrors).toEqual([]);
|
|
56
|
+
},
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
test(
|
|
60
|
+
'Commerce catalogue: localized Product navigation preserves locale',
|
|
61
|
+
{ tag: ['@web', '@flow'] },
|
|
62
|
+
async ({ page, request }) => {
|
|
63
|
+
const localizedPath = '/commerce/zh-cn';
|
|
64
|
+
const response = await request.get(localizedPath);
|
|
65
|
+
expect(response.ok()).toBeTruthy();
|
|
66
|
+
const html = await response.text();
|
|
67
|
+
expect(html.toLowerCase()).not.toContain('data-zova-hydrated');
|
|
68
|
+
expect(html).toContain('商品目录');
|
|
69
|
+
expect(html).toContain('当前价格和库存以结算时确认为准。');
|
|
70
|
+
|
|
71
|
+
const pageErrors = collectPageErrors(page);
|
|
72
|
+
const documentResponse = await page.goto(localizedPath, { waitUntil: 'load' });
|
|
73
|
+
expect(documentResponse?.ok()).toBeTruthy();
|
|
74
|
+
await expect(page).toHaveURL(/\/commerce\/zh-cn(?:\/|$)/);
|
|
75
|
+
await expect(page.locator('html')).toHaveAttribute('data-zova-hydrated', 'commerce');
|
|
76
|
+
await expect(page.getByRole('heading', { name: '商品目录' })).toBeVisible();
|
|
77
|
+
await expect(page.getByText('当前价格和库存以结算时确认为准。')).toBeVisible();
|
|
78
|
+
await expect(page.getByText('库存 24 件')).toBeVisible();
|
|
79
|
+
|
|
80
|
+
const productLink = page.getByRole('link', { name: 'Wireless Headphones' });
|
|
81
|
+
await expect(productLink).toHaveAttribute('href', /\/commerce\/zh-cn\/product\/\d+$/);
|
|
82
|
+
const productPath = await productLink.getAttribute('href');
|
|
83
|
+
const productResponse = await request.get(productPath!);
|
|
84
|
+
expect(productResponse.ok()).toBeTruthy();
|
|
85
|
+
expect((await productResponse.text()).toLowerCase()).not.toContain('data-zova-hydrated');
|
|
86
|
+
await productLink.click();
|
|
87
|
+
await expect(page).toHaveURL(/\/commerce\/zh-cn\/product\/\d+(?:\/|$)/);
|
|
88
|
+
await expect(page.getByRole('heading', { name: 'Wireless Headphones' })).toBeVisible();
|
|
89
|
+
await expect(page.getByText('HPH-BLK')).toBeVisible();
|
|
90
|
+
await expect(page.getByText('库存 24 件')).toBeVisible();
|
|
91
|
+
await expect(page.getByRole('link', { name: '购物车' })).toHaveAttribute(
|
|
92
|
+
'href',
|
|
93
|
+
'/commerce/zh-cn/cart',
|
|
94
|
+
);
|
|
95
|
+
expect(pageErrors).toEqual([]);
|
|
96
|
+
},
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
test(
|
|
100
|
+
'Commerce Product: Cart badge keeps SSR initial render neutral',
|
|
101
|
+
{ tag: ['@web', '@cart'] },
|
|
102
|
+
async ({ page, request }) => {
|
|
103
|
+
const productPath = '/commerce/product/1';
|
|
104
|
+
const productResponse = await request.get(productPath);
|
|
105
|
+
expect(productResponse.ok()).toBeTruthy();
|
|
106
|
+
const productHtml = await productResponse.text();
|
|
107
|
+
expect(productHtml.toLowerCase()).not.toContain('data-zova-hydrated');
|
|
108
|
+
expect(productHtml).toContain('>Cart<!----></a>');
|
|
109
|
+
|
|
110
|
+
const pageErrors = collectPageErrors(page);
|
|
111
|
+
const documentResponse = await page.goto(productPath, { waitUntil: 'load' });
|
|
112
|
+
expect(documentResponse?.ok()).toBeTruthy();
|
|
113
|
+
await expect(page.locator('html')).toHaveAttribute('data-zova-hydrated', 'commerce');
|
|
114
|
+
await expect(page.getByRole('heading', { name: 'Wireless Headphones' })).toBeVisible();
|
|
115
|
+
|
|
116
|
+
const cartLink = page.locator('a[href="/commerce/cart"]');
|
|
117
|
+
await expect(cartLink).toHaveCount(1);
|
|
118
|
+
await expect(cartLink.locator('.badge')).toHaveCount(0);
|
|
119
|
+
expect(pageErrors).toEqual([]);
|
|
120
|
+
},
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
test(
|
|
124
|
+
'Commerce Address: cookie-disabled SSR renders a neutral protected entry',
|
|
125
|
+
{ tag: ['@web', '@cart'] },
|
|
126
|
+
async ({ page, request }) => {
|
|
127
|
+
const path = '/commerce/address';
|
|
128
|
+
const routePath = '/address';
|
|
129
|
+
const response = await request.get(path, { maxRedirects: 0 });
|
|
130
|
+
expect(response.status()).toBe(200);
|
|
131
|
+
expect(response.headers().location).toBeUndefined();
|
|
132
|
+
expect((await response.text()).toLowerCase()).not.toContain('data-zova-hydrated');
|
|
133
|
+
|
|
134
|
+
const pageErrors = collectPageErrors(page);
|
|
135
|
+
const documentResponse = await page.goto(path, { waitUntil: 'load' });
|
|
136
|
+
expect(documentResponse?.ok()).toBeTruthy();
|
|
137
|
+
await expect(page).toHaveURL(/\/commerce\/login\?(?:.*&)?returnTo=/);
|
|
138
|
+
const loginUrl = new URL(page.url());
|
|
139
|
+
expect(loginUrl.searchParams.getAll('returnTo')).toEqual([routePath]);
|
|
140
|
+
await expect(page.getByRole('heading', { name: 'Login' })).toBeVisible();
|
|
141
|
+
await expect(page.getByRole('heading', { name: 'Addresses' })).toHaveCount(0);
|
|
142
|
+
expect(pageErrors).toEqual([]);
|
|
143
|
+
},
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
test(
|
|
147
|
+
'Commerce Cart: anonymous browser is redirected to login',
|
|
148
|
+
{ tag: ['@web', '@cart'] },
|
|
149
|
+
async ({ page, request }) => {
|
|
150
|
+
const path = '/commerce/cart';
|
|
151
|
+
const response = await request.get(path);
|
|
152
|
+
expect(response.ok()).toBeTruthy();
|
|
153
|
+
expect((await response.text()).toLowerCase()).not.toContain('data-zova-hydrated');
|
|
154
|
+
|
|
155
|
+
const pageErrors = collectPageErrors(page);
|
|
156
|
+
const documentResponse = await page.goto(path, { waitUntil: 'load' });
|
|
157
|
+
expect(documentResponse?.ok()).toBeTruthy();
|
|
158
|
+
await expect(page).toHaveURL(/\/commerce\/login\?(?:.*&)?returnTo=/);
|
|
159
|
+
expect(pageErrors).toEqual([]);
|
|
160
|
+
},
|
|
161
|
+
);
|
|
162
|
+
|
|
40
163
|
test(
|
|
41
164
|
'ATP-SSR-02: Commerce Admin is an independent SSR site',
|
|
42
165
|
{ tag: ['@admin', '@smoke'] },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cabloy",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.112",
|
|
4
4
|
"gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
|
|
5
5
|
"description": "A Node.js fullstack framework",
|
|
6
6
|
"keywords": [
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"dev:zova:commerce:admin": "cd zova && npm run dev:ssr:cabloyCommerceAdmin",
|
|
36
36
|
"build": "npm run build:zova && pnpm --dir vona run build",
|
|
37
37
|
"build:docker": "npm run build:zova && pnpm --dir vona run build:docker",
|
|
38
|
+
"build:zova:all": "npm run build:zova && npm run build:zova:commerce",
|
|
38
39
|
"build:zova": "pnpm --dir zova run build:ssr:cabloyBasicBatch",
|
|
39
40
|
"build:zova:admin": "pnpm --dir zova run build:ssr:cabloyBasicAdmin && pnpm --dir zova run build:rest:cabloyBasicAdmin",
|
|
40
41
|
"build:zova:web": "pnpm --dir zova run build:ssr:cabloyBasicWeb && pnpm --dir zova run build:rest:cabloyBasicWeb",
|
package/scripts/init.ts
CHANGED
|
@@ -260,18 +260,12 @@ function initZova(): void {
|
|
|
260
260
|
exec('npm run zova :tools:deps');
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
-
// --- Step E:
|
|
263
|
+
// --- Step E: buildSsrZovaAll ---
|
|
264
264
|
|
|
265
|
-
function
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
exec('pnpm run build:ssr:cabloyBasicBatch', ZOVA_DIR);
|
|
270
|
-
} else if (existsSync(resolve(ROOT_DIR, '__CABLOY_START__'))) {
|
|
271
|
-
// eslint-disable-next-line
|
|
272
|
-
console.log('[init] Building zova SSR cabloyStartBatch...');
|
|
273
|
-
exec('pnpm run build:ssr:cabloyStartBatch', ZOVA_DIR);
|
|
274
|
-
}
|
|
265
|
+
function buildSsrZovaAll(): void {
|
|
266
|
+
// eslint-disable-next-line
|
|
267
|
+
console.log('[init] Building all zova SSR flavors...');
|
|
268
|
+
exec('npm run build:zova:all');
|
|
275
269
|
}
|
|
276
270
|
|
|
277
271
|
// --- Step F: cleanupWorkspaceYaml ---
|
|
@@ -314,7 +308,7 @@ generateEnvProdLocal();
|
|
|
314
308
|
generateEnvProdDockerLocal();
|
|
315
309
|
cleanupWorkspaceYaml();
|
|
316
310
|
initZova();
|
|
317
|
-
|
|
311
|
+
buildSsrZovaAll();
|
|
318
312
|
initVona();
|
|
319
313
|
initCabloyDocs();
|
|
320
314
|
writeVersionMarker();
|
package/scripts/upgrade.ts
CHANGED
|
@@ -51,15 +51,17 @@ const OVERWRITE_DIRS: string[] = [
|
|
|
51
51
|
const OVERWRITE_DIRS_CABLOY_BASIC: string[] = [
|
|
52
52
|
'vona/src/suite/cabloy-basic',
|
|
53
53
|
'vona/src/suite/a-training',
|
|
54
|
+
'vona/src/suite/a-commerce',
|
|
54
55
|
'zova/src/suite/cabloy-basic',
|
|
55
56
|
'zova/src/suite/a-training',
|
|
57
|
+
'zova/src/suite/a-commerce',
|
|
56
58
|
'zova/src/suite/a-devui',
|
|
57
59
|
];
|
|
58
60
|
|
|
59
61
|
const FRAMEWORK_E2E_DIRS_CABLOY_BASIC: string[] = [
|
|
60
62
|
'e2e/config',
|
|
61
63
|
'e2e/scripts',
|
|
62
|
-
'e2e/specs/
|
|
64
|
+
'e2e/specs/cabloy-basic',
|
|
63
65
|
'e2e/specs/a-commerce',
|
|
64
66
|
];
|
|
65
67
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vona",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.77",
|
|
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": [
|