cabloy 5.1.50 → 5.1.52
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/.claude/skills/cabloy-backend-scaffold/SKILL.md +207 -0
- package/.claude/skills/cabloy-backend-scaffold/evals/evals.json +29 -0
- package/.claude/skills/cabloy-backend-scaffold/references/backend-thread-map.md +52 -0
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +39 -0
- package/.claude/skills/cabloy-contract-loop/SKILL.md +201 -0
- package/.claude/skills/cabloy-contract-loop/evals/evals.json +29 -0
- package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +47 -0
- package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -0
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +230 -0
- package/.claude/skills/cabloy-frontend-scaffold/evals/evals.json +35 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +41 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/frontend-thread-map.md +54 -0
- package/.claude/skills/cabloy-workflow/SKILL.md +292 -0
- package/.claude/skills/cabloy-workflow/evals/evals.json +35 -0
- package/.claude/skills/cabloy-workflow/references/cli-strategy.md +39 -0
- package/.claude/skills/cabloy-workflow/references/edition-detection.md +30 -0
- package/.github/workflows/docs-pages.yml +56 -0
- package/.gitignore +1 -0
- package/CHANGELOG.md +54 -0
- package/CLAUDE.md +59 -0
- package/README.md +152 -0
- package/cabloy-docs/.vitepress/config.mjs +255 -0
- package/cabloy-docs/.vitepress/public/CNAME +1 -0
- package/cabloy-docs/.vitepress/theme/custom.css +64 -0
- package/cabloy-docs/.vitepress/theme/edition-badges.md +5 -0
- package/cabloy-docs/.vitepress/theme/index.js +5 -0
- package/cabloy-docs/ai/class-placement-rule.md +139 -0
- package/cabloy-docs/ai/cli-for-agents.md +56 -0
- package/cabloy-docs/ai/cli-to-skill-map.md +165 -0
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +168 -0
- package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
- package/cabloy-docs/ai/edition-detection.md +30 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +135 -0
- package/cabloy-docs/ai/global-bean-lookup.md +158 -0
- package/cabloy-docs/ai/introduction.md +62 -0
- package/cabloy-docs/ai/playbook-backend-module.md +111 -0
- package/cabloy-docs/ai/playbook-contract-regeneration.md +100 -0
- package/cabloy-docs/ai/playbook-frontend-page.md +99 -0
- package/cabloy-docs/ai/playbook-metadata-refresh.md +67 -0
- package/cabloy-docs/ai/repo-guidance.md +58 -0
- package/cabloy-docs/ai/rules-and-config.md +29 -0
- package/cabloy-docs/ai/skills.md +37 -0
- package/cabloy-docs/ai/verification.md +31 -0
- package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
- package/cabloy-docs/backend/aop-overview.md +128 -0
- package/cabloy-docs/backend/auth-guide.md +151 -0
- package/cabloy-docs/backend/backend-essentials.md +128 -0
- package/cabloy-docs/backend/broadcast-guide.md +138 -0
- package/cabloy-docs/backend/cache-guide.md +70 -0
- package/cabloy-docs/backend/captcha-guide.md +162 -0
- package/cabloy-docs/backend/cli.md +173 -0
- package/cabloy-docs/backend/config-guide.md +249 -0
- package/cabloy-docs/backend/controller-aop-guide.md +270 -0
- package/cabloy-docs/backend/controller-guide.md +347 -0
- package/cabloy-docs/backend/crud-workflow.md +118 -0
- package/cabloy-docs/backend/dto-guide.md +161 -0
- package/cabloy-docs/backend/dto-infer-generation.md +153 -0
- package/cabloy-docs/backend/dynamic-datasource-guide.md +70 -0
- package/cabloy-docs/backend/election-guide.md +141 -0
- package/cabloy-docs/backend/entity-guide.md +150 -0
- package/cabloy-docs/backend/error-guide.md +108 -0
- package/cabloy-docs/backend/event-guide.md +183 -0
- package/cabloy-docs/backend/external-aop-guide.md +149 -0
- package/cabloy-docs/backend/field-indexes.md +79 -0
- package/cabloy-docs/backend/foundation.md +281 -0
- package/cabloy-docs/backend/i18n-guide.md +211 -0
- package/cabloy-docs/backend/internal-aop-guide.md +181 -0
- package/cabloy-docs/backend/introduction.md +95 -0
- package/cabloy-docs/backend/jwt-guide.md +276 -0
- package/cabloy-docs/backend/logger-guide.md +223 -0
- package/cabloy-docs/backend/mail-guide.md +189 -0
- package/cabloy-docs/backend/menu-guide.md +80 -0
- package/cabloy-docs/backend/migration-and-changes.md +192 -0
- package/cabloy-docs/backend/model-guide.md +274 -0
- package/cabloy-docs/backend/multi-database-datasource.md +171 -0
- package/cabloy-docs/backend/multi-instance-and-instance-resolution.md +196 -0
- package/cabloy-docs/backend/openapi-guide.md +118 -0
- package/cabloy-docs/backend/orm-aggregate-group-guide.md +210 -0
- package/cabloy-docs/backend/orm-configuration-guide.md +165 -0
- package/cabloy-docs/backend/orm-guide.md +109 -0
- package/cabloy-docs/backend/orm-mutation-guide.md +195 -0
- package/cabloy-docs/backend/orm-select-guide.md +243 -0
- package/cabloy-docs/backend/queue-guide.md +271 -0
- package/cabloy-docs/backend/quickstart.md +141 -0
- package/cabloy-docs/backend/redis-guide.md +70 -0
- package/cabloy-docs/backend/redlock-guide.md +60 -0
- package/cabloy-docs/backend/relations-guide.md +250 -0
- package/cabloy-docs/backend/runtime-and-flavors.md +304 -0
- package/cabloy-docs/backend/schedule-guide.md +81 -0
- package/cabloy-docs/backend/scripts.md +116 -0
- package/cabloy-docs/backend/serialization-guide.md +192 -0
- package/cabloy-docs/backend/service-guide.md +166 -0
- package/cabloy-docs/backend/sharding-guide.md +49 -0
- package/cabloy-docs/backend/startup-guide.md +326 -0
- package/cabloy-docs/backend/transaction-guide.md +82 -0
- package/cabloy-docs/backend/unit-testing.md +209 -0
- package/cabloy-docs/backend/upload-guide.md +160 -0
- package/cabloy-docs/backend/user-access-guide.md +157 -0
- package/cabloy-docs/backend/validation-guide.md +80 -0
- package/cabloy-docs/backend/worker-guide.md +59 -0
- package/cabloy-docs/editions/cabloy-basic.md +26 -0
- package/cabloy-docs/editions/cabloy-start.md +55 -0
- package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
- package/cabloy-docs/editions/detection.md +31 -0
- package/cabloy-docs/editions/overview.md +107 -0
- package/cabloy-docs/frontend/api-guide.md +93 -0
- package/cabloy-docs/frontend/api-schema-guide.md +43 -0
- package/cabloy-docs/frontend/app-startup-guide.md +185 -0
- package/cabloy-docs/frontend/cli.md +78 -0
- package/cabloy-docs/frontend/component-guide.md +105 -0
- package/cabloy-docs/frontend/component-props-guide.md +97 -0
- package/cabloy-docs/frontend/component-v-model-guide.md +110 -0
- package/cabloy-docs/frontend/css-in-js-guide.md +151 -0
- package/cabloy-docs/frontend/design-principles.md +55 -0
- package/cabloy-docs/frontend/environment-config-guide.md +250 -0
- package/cabloy-docs/frontend/foundation.md +58 -0
- package/cabloy-docs/frontend/generic-component-guide.md +35 -0
- package/cabloy-docs/frontend/icon-engine-guide.md +88 -0
- package/cabloy-docs/frontend/introduction.md +33 -0
- package/cabloy-docs/frontend/ioc-and-beans.md +211 -0
- package/cabloy-docs/frontend/mock-guide.md +109 -0
- package/cabloy-docs/frontend/model-architecture.md +87 -0
- package/cabloy-docs/frontend/model-state-guide.md +70 -0
- package/cabloy-docs/frontend/module-scope.md +168 -0
- package/cabloy-docs/frontend/modules-and-suites.md +179 -0
- package/cabloy-docs/frontend/navigation-guards-guide.md +68 -0
- package/cabloy-docs/frontend/openapi-sdk-guide.md +102 -0
- package/cabloy-docs/frontend/page-guide.md +223 -0
- package/cabloy-docs/frontend/page-params-guide.md +87 -0
- package/cabloy-docs/frontend/page-query-guide.md +96 -0
- package/cabloy-docs/frontend/page-route-guide.md +147 -0
- package/cabloy-docs/frontend/quickstart.md +202 -0
- package/cabloy-docs/frontend/route-alias-guide.md +61 -0
- package/cabloy-docs/frontend/scripts.md +86 -0
- package/cabloy-docs/frontend/sdk-guide.md +45 -0
- package/cabloy-docs/frontend/server-data.md +74 -0
- package/cabloy-docs/frontend/ssr-client-only.md +40 -0
- package/cabloy-docs/frontend/ssr-env.md +51 -0
- package/cabloy-docs/frontend/ssr-init-data.md +46 -0
- package/cabloy-docs/frontend/ssr-overview.md +48 -0
- package/cabloy-docs/frontend/ssr-seo-meta.md +52 -0
- package/cabloy-docs/frontend/system-startup-guide.md +186 -0
- package/cabloy-docs/frontend/theme-guide.md +154 -0
- package/cabloy-docs/frontend/zod-guide.md +161 -0
- package/cabloy-docs/fullstack/cli.md +118 -0
- package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +117 -0
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +62 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
- package/cabloy-docs/fullstack/introduction.md +81 -0
- package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
- package/cabloy-docs/fullstack/quickstart.md +89 -0
- package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
- package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
- package/cabloy-docs/index.md +72 -0
- package/cabloy-docs/package.json +16 -0
- package/cabloy-docs/pnpm-lock.yaml +1607 -0
- package/cabloy-docs/reference/backend-directory-structure.md +88 -0
- package/cabloy-docs/reference/cli-reference.md +49 -0
- package/cabloy-docs/reference/glossary.md +38 -0
- package/cabloy-docs/reference/package-map.md +105 -0
- package/cabloy-docs/reference/repo-scripts.md +36 -0
- package/package.json +4 -1
- package/scripts/init.ts +12 -0
- package/scripts/upgrade.ts +31 -3
- package/vona/README.md +4 -4
- package/vona/README.zh-CN.md +4 -4
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/pnpm-lock.yaml +383 -38
- 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/bean/summerCache.datasourceWrite.ts +2 -2
- 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 +49 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/controller/memoryDiag.ts +97 -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/bean/cacheRedis.captcha.ts +2 -2
- package/vona/src/suite-vendor/a-captcha/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-bean/cli/bean/metadata/generate.ts +5 -6
- package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheMem/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheRedis/boilerplate/{{sceneName}}.{{beanName}}.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 +13 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/bean/bean.cache.ts +6 -7
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheMemBase.ts → service/cacheMemBase_.ts} +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheRedisBase.ts → service/cacheRedisBase_.ts} +3 -3
- 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/bean/cacheRedis.emailConfirm.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.passwordReset.ts +2 -2
- 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/bean/summerCache.json.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/cli/databaseDialect/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- 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/.metadata/index.ts +4 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.database.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/schedule.softDeletionPrune.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/utils.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_cache.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_meta.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.modelBase.ts +0 -5
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoAggregate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoCreate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGroup.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoSelectAndCount.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoUpdate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/index.ts +1 -0
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/modelCacheBase.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relations.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsDynamic.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsStatic.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheEntity_.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheQuery_.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/database.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean/bean.databaseDialectBase.ts → service/databaseDialectBase_.ts} +38 -41
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/db_.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/database.ts +0 -5
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoGet.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoSelectAndCount.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/model.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelAggr.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelCount.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGeneral.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGroup.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelIncrement.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relations.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsColumns.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDef.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefDynamic.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsTables.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.betterSqlite3.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.pg.ts +2 -2
- 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/bean/bean.permission.ts +109 -40
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +2 -2
- 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/bean/cacheRedis.startupDebounce.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- 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-summer/src/bean/bean.summer.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localMem_.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localRedis_.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/{bean/bean.summerCacheBase.ts → service/summerCacheBase_.ts} +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.rapidoc.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.swagger.ts +2 -2
- 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/bean/cacheRedis.authToken.ts +2 -2
- 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/bean/cacheRedis.workerAlive.ts +2 -2
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/zova/README.md +5 -5
- package/zova/README.zh-CN.md +4 -4
- package/zova/package.original.json +4 -4
- package/zova/packages-cli/cli/package.json +2 -2
- package/zova/packages-cli/cli-set-front/package.json +2 -2
- package/zova/packages-utils/zova-jsx/package.json +2 -2
- package/zova/packages-utils/zova-vite/package.json +2 -2
- package/zova/packages-utils/zova-vite/templates/app/controller.tsx_ +3 -3
- package/zova/packages-zova/zova/package.json +3 -3
- package/zova/packages-zova/zova-core/package.json +2 -2
- package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +3 -3
- package/zova/packages-zova/zova-core/src/bean/beanControllerPageBase.ts +1 -0
- package/zova/packages-zova/zova-core/src/core/component/module.ts +16 -16
- package/zova/packages-zova/zova-core/src/core/context/component.ts +35 -3
- package/zova/packages-zova/zova-core/src/core/context/util.ts +15 -11
- package/zova/pnpm-lock.yaml +1596 -1679
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +11 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/toolMinimal.ts +9 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolMinimal/controller.tsx +11 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +10 -0
- 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/service/storage.ts +4 -5
- 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/monkey.ts +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +36 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +7 -2
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +3 -0
- package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +70 -29
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/package.json +6 -6
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_inner.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_table.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_knex.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_utils.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_view.ts +0 -0
|
@@ -4,87 +4,156 @@ import type {
|
|
|
4
4
|
IOpenapiPermissions,
|
|
5
5
|
IResourceRecord,
|
|
6
6
|
} from 'vona-module-a-openapi';
|
|
7
|
-
import type {
|
|
8
|
-
|
|
9
|
-
ContextRouteBase,
|
|
10
|
-
ContextRouteMetadata,
|
|
11
|
-
IRecordResourceNameToRoutePathItem,
|
|
12
|
-
} from 'vona-module-a-web';
|
|
7
|
+
import type { IGuardOptionsPassport, IGuardOptionsRoleName } from 'vona-module-a-user';
|
|
8
|
+
import type { ContextRouteMetadata, IRecordResourceNameToRoutePathItem } from 'vona-module-a-web';
|
|
13
9
|
|
|
14
|
-
import { catchError } from '@cabloy/utils';
|
|
15
10
|
import { appMetadata, appResource, BeanBase, beanFullNameFromOnionName } from 'vona';
|
|
16
11
|
import { Bean } from 'vona-module-a-bean';
|
|
17
12
|
import { Caching } from 'vona-module-a-caching';
|
|
18
13
|
import { SymbolUseOnionOptionsRouteReal } from 'vona-module-a-onion';
|
|
19
|
-
import {
|
|
14
|
+
import { recordResourceNameToRoutePath } from 'vona-module-a-web';
|
|
15
|
+
|
|
16
|
+
const BeanFullNameGuardPassport = beanFullNameFromOnionName('a-user:passport', 'guard');
|
|
17
|
+
const BeanFullNameGuardRoleName = beanFullNameFromOnionName('a-user:roleName', 'guard');
|
|
18
|
+
const BeanFullNameGuardUserName = beanFullNameFromOnionName('a-user:userName', 'guard');
|
|
19
|
+
const BeanFullNamesGuardSupported = new Set<string>([
|
|
20
|
+
BeanFullNameGuardPassport,
|
|
21
|
+
BeanFullNameGuardRoleName,
|
|
22
|
+
BeanFullNameGuardUserName,
|
|
23
|
+
]);
|
|
24
|
+
const GuardOptionsPassportDefault: IGuardOptionsPassport = {
|
|
25
|
+
public: false,
|
|
26
|
+
activated: true,
|
|
27
|
+
checkAuthToken: true,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
type TGuardMeta = Record<string, unknown>;
|
|
20
31
|
|
|
21
32
|
@Bean()
|
|
22
33
|
export class BeanPermission extends BeanBase {
|
|
23
|
-
public async clearAllCaches() {
|
|
24
|
-
const
|
|
34
|
+
public async clearAllCaches(): Promise<void> {
|
|
35
|
+
const cachePermission = this.bean.summer.cache(
|
|
25
36
|
beanFullNameFromOnionName('a-permission:permission', 'summerCache'),
|
|
26
37
|
);
|
|
27
|
-
await
|
|
38
|
+
await cachePermission.clear();
|
|
28
39
|
}
|
|
29
40
|
|
|
30
|
-
protected retrievePermissionsCacheKey(info: ICachingActionKeyInfo) {
|
|
41
|
+
protected retrievePermissionsCacheKey(info: ICachingActionKeyInfo): string {
|
|
31
42
|
const resource = info.args[0];
|
|
32
43
|
const userId = this.ctx.passport.user?.id;
|
|
33
|
-
return
|
|
44
|
+
return `user:${resource}_${userId}`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
protected retrievePermissionsDefaultCacheKey(info: ICachingActionKeyInfo): string {
|
|
48
|
+
return `default:${this._buildPermissionProfileKey(info.args[0])}`;
|
|
34
49
|
}
|
|
35
50
|
|
|
36
51
|
@Caching.get({ cacheName: 'a-permission:permission', cacheKeyFn: 'retrievePermissionsCacheKey' })
|
|
37
52
|
async retrievePermissions(resource: keyof IResourceRecord): Promise<IOpenapiPermissions> {
|
|
38
53
|
return await this.scope.event.retrievePermissions.emit({ resource }, async () => {
|
|
39
|
-
return await this.
|
|
54
|
+
return await this.retrievePermissionsDefault(resource);
|
|
40
55
|
});
|
|
41
56
|
}
|
|
42
57
|
|
|
58
|
+
@Caching.get({
|
|
59
|
+
cacheName: 'a-permission:permission',
|
|
60
|
+
cacheKeyFn: 'retrievePermissionsDefaultCacheKey',
|
|
61
|
+
})
|
|
62
|
+
protected async retrievePermissionsDefault(
|
|
63
|
+
resource: keyof IResourceRecord,
|
|
64
|
+
): Promise<IOpenapiPermissions> {
|
|
65
|
+
return await this.getPermissionsDefault(resource);
|
|
66
|
+
}
|
|
67
|
+
|
|
43
68
|
async getPermissionsDefault(resource: keyof IResourceRecord): Promise<IOpenapiPermissions> {
|
|
44
69
|
const routePathInfo: IRecordResourceNameToRoutePathItem =
|
|
45
70
|
recordResourceNameToRoutePath[resource];
|
|
46
71
|
if (!routePathInfo) throw new Error(`not found routePath of resource: ${resource}`);
|
|
47
|
-
// controller options
|
|
48
72
|
const controller = routePathInfo.controller;
|
|
49
|
-
|
|
50
|
-
const beanOptions = appResource.getBean(controller);
|
|
51
|
-
if (!beanOptions) throw new Error('invalid controller');
|
|
52
|
-
const controllerBeanFullName = beanOptions.beanFullName;
|
|
53
|
-
// descs
|
|
73
|
+
if (!appResource.getBean(controller)) throw new Error('invalid controller');
|
|
54
74
|
const descs = Object.getOwnPropertyDescriptors(controller.prototype);
|
|
55
75
|
const actionsIgnore = this.scope.config.permission.actionsIgnore;
|
|
56
76
|
const actionKeys = Object.keys(descs).filter(
|
|
57
|
-
actionKey =>
|
|
77
|
+
actionKey => actionKey !== 'constructor' && !actionsIgnore.includes(actionKey),
|
|
58
78
|
);
|
|
59
|
-
// actions
|
|
60
79
|
const permissionsActions: IOpenapiPermissionModeActionActions = {};
|
|
61
80
|
for (const actionKey of actionKeys) {
|
|
62
81
|
const desc = descs[actionKey];
|
|
63
82
|
if (!desc.value || typeof desc.value !== 'function') continue;
|
|
64
|
-
const routeReal: ContextRouteMetadata = appMetadata.getMetadata(
|
|
83
|
+
const routeReal: ContextRouteMetadata | undefined = appMetadata.getMetadata(
|
|
65
84
|
SymbolUseOnionOptionsRouteReal,
|
|
66
85
|
controller.prototype,
|
|
67
86
|
actionKey,
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
controller,
|
|
71
|
-
controllerBeanFullName,
|
|
72
|
-
action: actionKey,
|
|
73
|
-
route: routeReal,
|
|
74
|
-
};
|
|
75
|
-
permissionsActions[actionKey] = await this._getPermissionOfAction(route);
|
|
87
|
+
);
|
|
88
|
+
permissionsActions[actionKey] = this._getPermissionOfActionByMetadata(routeReal);
|
|
76
89
|
}
|
|
77
90
|
return { actions: permissionsActions };
|
|
78
91
|
}
|
|
79
92
|
|
|
80
|
-
private
|
|
81
|
-
|
|
82
|
-
this.
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
private _buildPermissionProfileKey(resource: keyof IResourceRecord): string {
|
|
94
|
+
if (!this.bean.passport.isAuthenticated) return `${resource}__anon`;
|
|
95
|
+
const activated = this.bean.passport.isActivated ? 1 : 0;
|
|
96
|
+
const roleNames = this._extractCurrentRoleNames();
|
|
97
|
+
return `${resource}__auth__act:${activated}__roles:${roleNames.join(',')}`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private _extractCurrentRoleNames(): string[] {
|
|
101
|
+
const roleNames = this.bean.passport.currentRoles?.map(item => item.name) ?? [];
|
|
102
|
+
return Array.from(new Set(roleNames)).sort();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private _getPermissionOfActionByMetadata(routeReal: ContextRouteMetadata | undefined): boolean {
|
|
106
|
+
if (!routeReal?.meta) return false;
|
|
107
|
+
return this._evaluatePassportGuardsStatically(routeReal.meta);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private _evaluatePassportGuardsStatically(meta: TGuardMeta): boolean {
|
|
111
|
+
if (this._hasUnknownGuard(meta)) return false;
|
|
112
|
+
if (this._hasDynamicUserNameGuard(meta)) return false;
|
|
113
|
+
const passportOptions = this._getPassportOptions(meta);
|
|
114
|
+
if (!this._matchPassportOptions(passportOptions)) return false;
|
|
115
|
+
const roleNameOptions = meta[BeanFullNameGuardRoleName] as
|
|
116
|
+
| Partial<IGuardOptionsRoleName>
|
|
117
|
+
| undefined;
|
|
118
|
+
if (!this._matchRoleNameOptions(roleNameOptions)) return false;
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private _hasUnknownGuard(meta: TGuardMeta): boolean {
|
|
123
|
+
return Object.keys(meta).some(
|
|
124
|
+
key => key.includes('.guard.') && !BeanFullNamesGuardSupported.has(key),
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private _hasDynamicUserNameGuard(meta: TGuardMeta): boolean {
|
|
129
|
+
return BeanFullNameGuardUserName in meta;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private _getPassportOptions(meta: TGuardMeta): IGuardOptionsPassport {
|
|
133
|
+
return {
|
|
134
|
+
...GuardOptionsPassportDefault,
|
|
135
|
+
...(meta[BeanFullNameGuardPassport] as Partial<IGuardOptionsPassport> | undefined),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
private _matchPassportOptions(
|
|
140
|
+
options: Pick<IGuardOptionsPassport, 'public' | 'activated'>,
|
|
141
|
+
): boolean {
|
|
142
|
+
const isAuthenticated = this.bean.passport.isAuthenticated;
|
|
143
|
+
if (!options.public && !isAuthenticated) return false;
|
|
144
|
+
if (!isAuthenticated) return true;
|
|
145
|
+
if (options.activated === true && !this.bean.passport.isActivated) return false;
|
|
146
|
+
if (options.activated === false && this.bean.passport.isActivated) return false;
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
private _matchRoleNameOptions(options: Partial<IGuardOptionsRoleName> | undefined): boolean {
|
|
151
|
+
if (!options) return true;
|
|
152
|
+
if (!options.name) return false;
|
|
153
|
+
if (options.passWhenMatched === false) return false;
|
|
154
|
+
if (options.rejectWhenDismatched === false) return false;
|
|
155
|
+
const roleNamesCurrent = this._extractCurrentRoleNames();
|
|
156
|
+
const roleNamesRequired = Array.isArray(options.name) ? options.name : [options.name];
|
|
157
|
+
return roleNamesCurrent.some(roleName => roleNamesRequired.includes(roleName as any));
|
|
89
158
|
}
|
|
90
159
|
}
|
package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
|
|
4
4
|
|
|
5
5
|
export type TSummerCachePermissionKey = any;
|
|
6
6
|
export type TSummerCachePermissionData = any;
|
|
7
7
|
|
|
8
8
|
@SummerCache({ preset: 'mem' })
|
|
9
9
|
export class SummerCachePermission
|
|
10
|
-
extends
|
|
10
|
+
extends ServiceSummerCacheBase<TSummerCachePermissionKey, TSummerCachePermissionData>
|
|
11
11
|
implements ISummerCacheGet<TSummerCachePermissionKey, TSummerCachePermissionData>
|
|
12
12
|
{
|
|
13
13
|
async getNative(
|
package/vona/src/suite-vendor/a-vona/modules/a-startup/src/bean/cacheRedis.startupDebounce.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ServiceCacheRedisBase, CacheRedis } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
export type TCacheRedisStartupDebounceKey = `startupDebounce:${string}`;
|
|
4
4
|
export type TCacheRedisStartupDebounceData = boolean;
|
|
@@ -8,7 +8,7 @@ export type TCacheRedisStartupDebounceData = boolean;
|
|
|
8
8
|
disableTransactionCompensate: true,
|
|
9
9
|
client: 'worker',
|
|
10
10
|
})
|
|
11
|
-
export class CacheRedisStartupDebounce extends
|
|
11
|
+
export class CacheRedisStartupDebounce extends ServiceCacheRedisBase<
|
|
12
12
|
TCacheRedisStartupDebounceKey,
|
|
13
13
|
TCacheRedisStartupDebounceData
|
|
14
14
|
> {}
|
package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
|
-
import {
|
|
2
|
+
import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
|
|
3
3
|
|
|
4
4
|
export type TSummerCache<%=argv.beanNameCapitalize%>Key = any;
|
|
5
5
|
export type TSummerCache<%=argv.beanNameCapitalize%>Data = any;
|
|
6
6
|
|
|
7
7
|
@SummerCache()
|
|
8
8
|
export class SummerCache<%=argv.beanNameCapitalize%>
|
|
9
|
-
extends
|
|
9
|
+
extends ServiceSummerCacheBase<TSummerCache<%=argv.beanNameCapitalize%>Key, TSummerCache<%=argv.beanNameCapitalize%>Data>
|
|
10
10
|
implements ISummerCacheGet<TSummerCache<%=argv.beanNameCapitalize%>Key, TSummerCache<%=argv.beanNameCapitalize%>Data> {
|
|
11
11
|
async getNative(
|
|
12
12
|
_key?: TSummerCache<%=argv.beanNameCapitalize%>Key,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// eslint-disable
|
|
2
2
|
/** bean: begin */
|
|
3
3
|
export * from '../bean/bean.summer.ts';
|
|
4
|
-
export * from '../bean/bean.summerCacheBase.ts';
|
|
5
4
|
|
|
6
5
|
import 'vona';
|
|
7
6
|
declare module 'vona' {
|
|
@@ -29,6 +28,7 @@ declare module 'vona' {
|
|
|
29
28
|
export * from '../service/localFetch_.ts';
|
|
30
29
|
export * from '../service/localMem_.ts';
|
|
31
30
|
export * from '../service/localRedis_.ts';
|
|
31
|
+
export * from '../service/summerCacheBase_.ts';
|
|
32
32
|
|
|
33
33
|
import 'vona-module-a-bean';
|
|
34
34
|
declare module 'vona-module-a-bean' {
|
|
@@ -3,17 +3,17 @@ import { Bean } from 'vona-module-a-bean';
|
|
|
3
3
|
|
|
4
4
|
import type { IDecoratorSummerCacheOptions } from '../types/summerCache.ts';
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { ServiceSummerCacheBase } from '../service/summerCacheBase_.ts';
|
|
7
7
|
|
|
8
8
|
@Bean()
|
|
9
9
|
export class BeanSummer extends BeanBase {
|
|
10
10
|
cache<KEY, DATA>(
|
|
11
11
|
cacheName: string,
|
|
12
12
|
cacheOptions?: IDecoratorSummerCacheOptions,
|
|
13
|
-
):
|
|
13
|
+
): ServiceSummerCacheBase<KEY, DATA> {
|
|
14
14
|
if (cacheName.includes('.summerCache.')) {
|
|
15
15
|
return this.app.bean._getBeanSelector(cacheName as any, undefined, cacheOptions);
|
|
16
16
|
}
|
|
17
|
-
return this.app.bean._getBeanSelector(
|
|
17
|
+
return this.app.bean._getBeanSelector(ServiceSummerCacheBase, cacheName, cacheOptions);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ServiceCacheMemBase } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
import { Service } from 'vona-module-a-bean';
|
|
4
4
|
|
|
@@ -12,7 +12,7 @@ export class ServiceLocalMem<KEY = any, DATA = any>
|
|
|
12
12
|
extends CacheBase<KEY, DATA>
|
|
13
13
|
implements ICacheLayeredBase<KEY, DATA>
|
|
14
14
|
{
|
|
15
|
-
private _cacheMemInstance:
|
|
15
|
+
private _cacheMemInstance: ServiceCacheMemBase<KEY, DATA> | undefined;
|
|
16
16
|
|
|
17
17
|
protected async __dispose__() {
|
|
18
18
|
if (this._cacheMemInstance) {
|
|
@@ -21,7 +21,7 @@ export class ServiceLocalMem<KEY = any, DATA = any>
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
get cacheMem():
|
|
24
|
+
get cacheMem(): ServiceCacheMemBase<KEY, DATA> {
|
|
25
25
|
if (!this._cacheMemInstance) {
|
|
26
26
|
this._cacheMemInstance = this.app.bean.cache.mem(this._cacheName, this._cacheOptions.mem);
|
|
27
27
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ServiceCacheRedisBase } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
import { Service } from 'vona-module-a-bean';
|
|
4
4
|
|
|
@@ -12,7 +12,7 @@ export class ServiceLocalRedis<KEY = any, DATA = any>
|
|
|
12
12
|
extends CacheBase<KEY, DATA>
|
|
13
13
|
implements ICacheLayeredBase<KEY, DATA>
|
|
14
14
|
{
|
|
15
|
-
private _cacheRedisInstance:
|
|
15
|
+
private _cacheRedisInstance: ServiceCacheRedisBase<KEY, DATA> | undefined;
|
|
16
16
|
|
|
17
17
|
protected async __dispose__() {
|
|
18
18
|
if (this._cacheRedisInstance) {
|
|
@@ -21,7 +21,7 @@ export class ServiceLocalRedis<KEY = any, DATA = any>
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
get cacheRedis():
|
|
24
|
+
get cacheRedis(): ServiceCacheRedisBase<KEY, DATA> {
|
|
25
25
|
if (!this._cacheRedisInstance) {
|
|
26
26
|
this._cacheRedisInstance = this.app.bean.cache.redis(
|
|
27
27
|
this._cacheName,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { deepExtend, Virtual } from 'vona';
|
|
2
|
-
import {
|
|
2
|
+
import { Service } from 'vona-module-a-bean';
|
|
3
3
|
|
|
4
4
|
import type {
|
|
5
5
|
IDecoratorSummerCacheOptions,
|
|
@@ -8,9 +8,9 @@ import type {
|
|
|
8
8
|
|
|
9
9
|
import { CacheBase } from '../common/cacheBase.ts';
|
|
10
10
|
|
|
11
|
-
@
|
|
11
|
+
@Service()
|
|
12
12
|
@Virtual()
|
|
13
|
-
export class
|
|
13
|
+
export class ServiceSummerCacheBase<KEY = any, DATA = any> extends CacheBase<KEY, DATA> {
|
|
14
14
|
protected __init__(cacheName?: string, cacheOptions?: IDecoratorSummerCacheOptions) {
|
|
15
15
|
let _cacheName: string;
|
|
16
16
|
let _cacheOptions: IDecoratorSummerCacheOptions;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
|
|
4
4
|
|
|
5
5
|
export type TSummerCacheRapidocKey = any;
|
|
6
6
|
export type TSummerCacheRapidocData = any;
|
|
7
7
|
|
|
8
8
|
@SummerCache({ preset: 'mem' })
|
|
9
9
|
export class SummerCacheRapidoc
|
|
10
|
-
extends
|
|
10
|
+
extends ServiceSummerCacheBase<TSummerCacheRapidocKey, TSummerCacheRapidocData>
|
|
11
11
|
implements ISummerCacheGet<TSummerCacheRapidocKey, TSummerCacheRapidocData>
|
|
12
12
|
{
|
|
13
13
|
async getNative(
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
|
|
4
4
|
|
|
5
5
|
export type TSummerCacheSwaggerKey = any;
|
|
6
6
|
export type TSummerCacheSwaggerData = any;
|
|
7
7
|
|
|
8
8
|
@SummerCache({ preset: 'mem' })
|
|
9
9
|
export class SummerCacheSwagger
|
|
10
|
-
extends
|
|
10
|
+
extends ServiceSummerCacheBase<TSummerCacheSwaggerKey, TSummerCacheSwaggerData>
|
|
11
11
|
implements ISummerCacheGet<TSummerCacheSwaggerKey, TSummerCacheSwaggerData>
|
|
12
12
|
{
|
|
13
13
|
async getNative(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ServiceCacheRedisBase, CacheRedis } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
export type TCacheRedisAuthTokenKey = string;
|
|
4
4
|
export type TCacheRedisAuthTokenData = string;
|
|
@@ -7,7 +7,7 @@ export type TCacheRedisAuthTokenData = string;
|
|
|
7
7
|
ttl: 30 * 24 * 60 * 60 * 1000,
|
|
8
8
|
disableTransactionCompensate: true,
|
|
9
9
|
})
|
|
10
|
-
export class CacheRedisAuthToken extends
|
|
10
|
+
export class CacheRedisAuthToken extends ServiceCacheRedisBase<
|
|
11
11
|
TCacheRedisAuthTokenKey,
|
|
12
12
|
TCacheRedisAuthTokenData
|
|
13
13
|
> {}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ServiceCacheRedisBase, CacheRedis } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
export type TCacheRedisWorkerAliveKey = string;
|
|
4
4
|
export type TCacheRedisWorkerAliveData = boolean;
|
|
@@ -8,7 +8,7 @@ export type TCacheRedisWorkerAliveData = boolean;
|
|
|
8
8
|
disableTransactionCompensate: true,
|
|
9
9
|
client: 'worker',
|
|
10
10
|
})
|
|
11
|
-
export class CacheRedisWorkerAlive extends
|
|
11
|
+
export class CacheRedisWorkerAlive extends ServiceCacheRedisBase<
|
|
12
12
|
TCacheRedisWorkerAliveKey,
|
|
13
13
|
TCacheRedisWorkerAliveData
|
|
14
14
|
> {}
|
package/zova/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
English | [
|
|
1
|
+
English | [Simplified Chinese](./README.zh-CN.md)
|
|
2
2
|
|
|
3
3
|
# Zova
|
|
4
4
|
|
|
5
5
|
Zova: The Intuitive Frontend Framework = Vue3 Reactive + React TSX + Angular IOC
|
|
6
6
|
|
|
7
|
-
- Built-in out-of-the-box SSR solution, building `SSR/SPA/
|
|
7
|
+
- Built-in out-of-the-box SSR solution, building `SSR/SPA/Web/Admin` in one codebase
|
|
8
8
|
- Supports dual-layer tabs navigation, enabling efficient page switching while maintaining page state
|
|
9
9
|
- Dynamically render CRUD list pages, entry pages, and search forms, while demonstrating best practices for Tanstack Table, Tanstack Form, and Tanstack Query
|
|
10
10
|
|
|
@@ -39,10 +39,10 @@ Zova can be used with any UI library and comes with built-in project templates f
|
|
|
39
39
|
|
|
40
40
|
## Demo Online 2
|
|
41
41
|
|
|
42
|
-
The
|
|
42
|
+
The Web and Admin of Cabloy Store are built by one codebase
|
|
43
43
|
|
|
44
|
-
-
|
|
45
|
-
- Admin
|
|
44
|
+
- Web: [https://cabloy.com](https://cabloy.com)
|
|
45
|
+
- Admin: [https://cabloy.com/admin](https://cabloy.com/admin)
|
|
46
46
|
|
|
47
47
|
## GIF Demo
|
|
48
48
|
|
package/zova/README.zh-CN.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Zova: 直观的前端框架 = Vue3 响应式 + React TSX + Angular IOC
|
|
6
6
|
|
|
7
|
-
- 内置开箱即用的 SSR 解决方案,可在同一个代码库中实现`SSR/SPA/Web
|
|
7
|
+
- 内置开箱即用的 SSR 解决方案,可在同一个代码库中实现`SSR/SPA/Web/Admin`
|
|
8
8
|
- 支持双层页签导航,实现高效页面切换,并保持页面状态
|
|
9
9
|
- 可动态渲染 CRUD 的列表页、条目页、搜索表单,并且提供了`Tanstack Table/Tanstack Form/Tanstack Query`的最佳实践
|
|
10
10
|
- 提供强大的 IOC + AOP 能力,让系统具有无与伦比的可扩展性和可维护性
|
|
@@ -40,10 +40,10 @@ Zova 可以搭配任何 UI 库使用,并且内置了几款 UI 库的项目模
|
|
|
40
40
|
|
|
41
41
|
## 在线演示2
|
|
42
42
|
|
|
43
|
-
使用同一套代码实现 Cabloy Store 的`Web
|
|
43
|
+
使用同一套代码实现 Cabloy Store 的`Web`和`Admin`
|
|
44
44
|
|
|
45
|
-
- Web
|
|
46
|
-
- Admin
|
|
45
|
+
- Web:[https://cabloy.com](https://cabloy.com)
|
|
46
|
+
- Admin:[https://cabloy.com/admin](https://cabloy.com/admin)
|
|
47
47
|
|
|
48
48
|
## 动图演示
|
|
49
49
|
|
|
@@ -67,11 +67,11 @@
|
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@cabloy/lint": "^5.1.27",
|
|
69
69
|
"@cabloy/openapi-typescript": "^7.9.2",
|
|
70
|
-
"@quasar/app-vite": "npm:@cabloy/quasar-app-vite@^2.5.
|
|
70
|
+
"@quasar/app-vite": "npm:@cabloy/quasar-app-vite@^2.5.10",
|
|
71
71
|
"@types/node": "^22.19.17",
|
|
72
72
|
"@vitejs/plugin-vue": "^6.0.7",
|
|
73
73
|
"concurrently": "^8.2.2",
|
|
74
|
-
"quasar-app-extension-zova": "^1.3.
|
|
74
|
+
"quasar-app-extension-zova": "^1.3.1",
|
|
75
75
|
"sass": "^1.99.0",
|
|
76
76
|
"typescript": "^5.9.3",
|
|
77
77
|
"vite": "^8.0.14",
|
|
@@ -91,10 +91,10 @@
|
|
|
91
91
|
},
|
|
92
92
|
"pnpm": {
|
|
93
93
|
"overrides": {
|
|
94
|
-
"@quasar/app-vite": "npm:@cabloy/quasar-app-vite@^2.5.
|
|
94
|
+
"@quasar/app-vite": "npm:@cabloy/quasar-app-vite@^2.5.10",
|
|
95
95
|
"@vue/babel-plugin-jsx": "npm:@cabloy/vue-babel-plugin-jsx@^2.0.1",
|
|
96
96
|
"@vue/compiler-sfc": "npm:@cabloy/vue-compiler-sfc@^3.5.14",
|
|
97
|
-
"@vue/runtime-core": "npm:@cabloy/vue-runtime-core@^3.5.
|
|
97
|
+
"@vue/runtime-core": "npm:@cabloy/vue-runtime-core@^3.5.56",
|
|
98
98
|
"@vue/runtime-dom": "npm:@cabloy/vue-runtime-dom@^3.5.13",
|
|
99
99
|
"@vue/reactivity": "npm:@cabloy/vue-reactivity@^3.5.16",
|
|
100
100
|
"@vue/server-renderer": "npm:@cabloy/vue-server-renderer@^3.5.18",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.74",
|
|
4
4
|
"gitHead": "6f675a8cc46d596142c591c28a40cc4d82fcc6cc",
|
|
5
5
|
"description": "zova cli",
|
|
6
6
|
"keywords": [
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@cabloy/process-helper": "^3.0.0",
|
|
45
45
|
"fs-extra": "^11.3.5",
|
|
46
46
|
"semver": "^7.6.2",
|
|
47
|
-
"zova-cli-set-front": "^1.2.
|
|
47
|
+
"zova-cli-set-front": "^1.2.72"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"clean-package": "^2.2.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-cli-set-front",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.72",
|
|
4
4
|
"gitHead": "6f675a8cc46d596142c591c28a40cc4d82fcc6cc",
|
|
5
5
|
"description": "zova cli-set-front",
|
|
6
6
|
"keywords": [
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"vite": "^8.0.14",
|
|
71
71
|
"yaml": "^2.8.3",
|
|
72
72
|
"zova-openapi": "^1.1.14",
|
|
73
|
-
"zova-vite": "^1.1.
|
|
73
|
+
"zova-vite": "^1.1.34"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"clean-package": "^2.2.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-jsx",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.55",
|
|
4
4
|
"gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
|
|
5
5
|
"description": "Zova JSX",
|
|
6
6
|
"keywords": [
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@cabloy/word-utils": "^2.1.14",
|
|
51
51
|
"typestyle": "^2.4.0",
|
|
52
52
|
"vue": "^3.5.32",
|
|
53
|
-
"zova-core": "^5.1.
|
|
53
|
+
"zova-core": "^5.1.49"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"clean-package": "^2.2.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-vite",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.34",
|
|
4
4
|
"gitHead": "09d901d17140a80ee0764211b441cda72fd94663",
|
|
5
5
|
"description": "zova vite",
|
|
6
6
|
"keywords": [
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@cabloy/vue-compiler-sfc": "^3.5.14",
|
|
50
50
|
"@cabloy/vue-reactivity": "^3.5.16",
|
|
51
51
|
"@cabloy/vue-router": "^4.4.16",
|
|
52
|
-
"@cabloy/vue-runtime-core": "^3.5.
|
|
52
|
+
"@cabloy/vue-runtime-core": "^3.5.56",
|
|
53
53
|
"@cabloy/vue-runtime-dom": "^3.5.13",
|
|
54
54
|
"@cabloy/vue-server-renderer": "^3.5.18",
|
|
55
55
|
"@faker-js/faker": "^8.4.1",
|
|
@@ -7,11 +7,11 @@ export class ControllerPageApp extends BeanControllerPageBase {
|
|
|
7
7
|
// app
|
|
8
8
|
const instance = getCurrentInstance();
|
|
9
9
|
const app = instance!.appContext.app!;
|
|
10
|
-
if (
|
|
11
|
-
await this.initApp(app);
|
|
12
|
-
} else {
|
|
10
|
+
if (app.zova) {
|
|
13
11
|
await this.updateApp(app.zova);
|
|
12
|
+
return;
|
|
14
13
|
}
|
|
14
|
+
await this.initApp(app);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
protected render() {
|