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
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Comparison with Other Frameworks
|
|
2
|
+
|
|
3
|
+
This page shows how **Cabloy** differs from several common framework choices, so readers can quickly see where Cabloy stands out as a Node.js fullstack framework system and which strengths come from the fullstack system as a whole versus the backend layer provided by **Vona**.
|
|
4
|
+
|
|
5
|
+
## What is being compared
|
|
6
|
+
|
|
7
|
+
Cabloy is a **Node.js fullstack framework system**.
|
|
8
|
+
|
|
9
|
+
That means the comparison is not only about a backend runtime or only about a frontend stack. It is about how **Vona** on the backend and **Zova** on the frontend stay aligned through shared conventions, shared scripts, SSR-aware delivery modes, and cross-stack generation workflows.
|
|
10
|
+
|
|
11
|
+
For the broader Cabloy model, start with these pages:
|
|
12
|
+
|
|
13
|
+
- [Fullstack Introduction](/fullstack/introduction)
|
|
14
|
+
- [Vona + Zova Integration](/fullstack/vona-zova-integration)
|
|
15
|
+
- [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
16
|
+
- [Frontend Metadata Back to Backend](/fullstack/frontend-metadata-to-backend)
|
|
17
|
+
|
|
18
|
+
## Comparison lens
|
|
19
|
+
|
|
20
|
+
The sections below use the same comparison lens each time:
|
|
21
|
+
|
|
22
|
+
- **System center** — what the framework treats as the main architectural center
|
|
23
|
+
- **Backend model** — how much backend structure and infrastructure the framework provides by default
|
|
24
|
+
- **Frontend and admin model** — how the UI side is expected to evolve
|
|
25
|
+
- **Cross-stack workflow** — how backend/frontend contracts and generation workflows stay aligned
|
|
26
|
+
- **Best fit** — the kind of team or project the framework fits most naturally
|
|
27
|
+
|
|
28
|
+
## Cabloy vs Next.js
|
|
29
|
+
|
|
30
|
+
| Perspective | Cabloy | Next.js |
|
|
31
|
+
| ------------------------ | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
|
32
|
+
| System center | One framework system with Vona on the backend and Zova on the frontend | Frontend-centric fullstack framework |
|
|
33
|
+
| Backend model | Dedicated backend framework with its own runtime, contracts, infrastructure, and CLI workflows | Backend capabilities are typically centered around the web app runtime |
|
|
34
|
+
| Frontend and admin model | Shared conventions across SSR, SPA, Web, and Admin applications | Strong fit for React-based web application delivery |
|
|
35
|
+
| Cross-stack workflow | Explicit backend OpenAPI output, frontend SDK generation, and frontend metadata feedback loops | Usually chosen per project or ecosystem tooling |
|
|
36
|
+
| Best fit | Teams that want a coordinated fullstack system with a stronger dedicated backend layer | Teams that want a React-centered fullstack web application path |
|
|
37
|
+
|
|
38
|
+
Cabloy and Next.js both target fullstack application development, but they organize the stack differently.
|
|
39
|
+
|
|
40
|
+
Cabloy keeps the backend and frontend as **separate but coordinated framework layers**. That makes it a strong fit when a team wants one framework system with a dedicated backend layer and a dedicated frontend layer, without stitching together unrelated tools by hand.
|
|
41
|
+
|
|
42
|
+
Representative Cabloy strengths in this comparison include:
|
|
43
|
+
|
|
44
|
+
- a clear backend/frontend collaboration model rather than a single frontend-centered runtime
|
|
45
|
+
- explicit contract workflows from backend OpenAPI output to frontend SDK generation
|
|
46
|
+
- frontend-generated metadata that can flow back into backend-side tooling
|
|
47
|
+
- shared delivery conventions for SSR, SPA, Web, and Admin applications
|
|
48
|
+
|
|
49
|
+
If your main goal is a React-centered fullstack web app, Next.js may feel more direct. If your main goal is a **coordinated fullstack framework system** with a stronger backend layer and explicit cross-stack workflows, Cabloy is the better fit.
|
|
50
|
+
|
|
51
|
+
## Cabloy vs NestJS
|
|
52
|
+
|
|
53
|
+
| Perspective | Cabloy | NestJS |
|
|
54
|
+
| ------------------------ | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
|
55
|
+
| System center | Fullstack system | Backend framework |
|
|
56
|
+
| Backend model | Vona provides backend runtime, contracts, infrastructure, and CLI workflows | NestJS focuses on backend application structure |
|
|
57
|
+
| Frontend and admin model | Frontend collaboration is built into the broader Cabloy system through Zova and shared docs/workflows | Usually paired with a separate frontend choice |
|
|
58
|
+
| Cross-stack workflow | Backend contracts can feed frontend SDK generation inside the same framework system | Typically assembled from separate backend and frontend tooling choices |
|
|
59
|
+
| Best fit | Teams that want backend strength inside a shared fullstack system | Teams that want a backend-first framework and will choose the frontend stack separately |
|
|
60
|
+
|
|
61
|
+
The most important difference here is **scope**.
|
|
62
|
+
|
|
63
|
+
NestJS is primarily a backend framework. Cabloy is a **fullstack framework system**. So this comparison is not only “backend versus backend.” It is also “backend-first framework” versus “backend + frontend framework system with a shared collaboration model.”
|
|
64
|
+
|
|
65
|
+
Within Cabloy, the backend-specific capabilities come from **Vona**. That is where backend-oriented strengths such as these belong:
|
|
66
|
+
|
|
67
|
+
- unified validation and OpenAPI-oriented schema workflows
|
|
68
|
+
- DTO inference and generation workflows
|
|
69
|
+
- built-in multi-tenant, multi-database, and multi-datasource capabilities
|
|
70
|
+
- broader infrastructure features such as queues, broadcast, schedule, and redlock
|
|
71
|
+
- AOP-oriented backend programming capabilities
|
|
72
|
+
|
|
73
|
+
If a team only needs a backend framework and wants to choose the frontend stack separately, NestJS remains a natural option. If a team wants those backend capabilities to live inside a **shared fullstack system** with Zova, SSR-aware delivery modes, and contract-loop workflows, Cabloy is the better fit.
|
|
74
|
+
|
|
75
|
+
## Cabloy vs Django Admin
|
|
76
|
+
|
|
77
|
+
| Perspective | Cabloy | Django Admin |
|
|
78
|
+
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
|
|
79
|
+
| System center | Typed Node.js fullstack framework system | Python server-centered admin framework experience |
|
|
80
|
+
| Backend model | Dedicated backend runtime and infrastructure through Vona | Django backend conventions centered on the admin stack |
|
|
81
|
+
| Frontend and admin model | Modern frontend layer through Zova with SSR, SPA, Web, and Admin delivery modes | Admin experience is centered on server-rendered templates and built-in admin conventions |
|
|
82
|
+
| Cross-stack workflow | Backend and frontend stay aligned through generated contracts, metadata, and shared workflows | The default model is more tightly centered on the server-side admin stack |
|
|
83
|
+
| Best fit | Teams that want rapid admin development in Node.js without giving up typed frontend flexibility and richer UI interaction | Teams that want a fast server-centered admin path in the Python ecosystem |
|
|
84
|
+
|
|
85
|
+
This comparison is worth keeping even though the language ecosystems are different.
|
|
86
|
+
|
|
87
|
+
In the Python ecosystem, **Django Admin** has long been one of the strongest choices for rapidly building CRUD-oriented admin systems. In the Node.js ecosystem, there has historically been no equally established framework that combines rapid admin development, full backend infrastructure, and a modern fullstack architecture in the same way.
|
|
88
|
+
|
|
89
|
+
Cabloy is designed to fill that gap in the Node.js ecosystem.
|
|
90
|
+
|
|
91
|
+
That is why this comparison matters: it is not only comparing features, but also explaining Cabloy’s **ecosystem role**. For teams that want Django-Admin-like development speed for admin systems but want to stay in Node.js, Cabloy aims to provide that missing fullstack option.
|
|
92
|
+
|
|
93
|
+
At the same time, Cabloy does not stop at reproducing the server-centered admin model. With Vona on the backend and Zova on the frontend, Cabloy gives teams:
|
|
94
|
+
|
|
95
|
+
- a typed modern frontend layer instead of relying only on server-rendered templates
|
|
96
|
+
- richer interaction patterns for Admin and Web applications
|
|
97
|
+
- a smoother path for deeper customization as business systems become more complex
|
|
98
|
+
- a development experience that stays closer to modern Node.js fullstack workflows
|
|
99
|
+
|
|
100
|
+
So although Django Admin remains a benchmark for rapid admin development, Cabloy aims to offer a stronger long-term fit for teams that want both **rapid CRUD-oriented admin delivery** and a more modern fullstack development and interaction model inside Node.js.
|
|
101
|
+
|
|
102
|
+
For Cabloy’s frontend/runtime side of this comparison, see:
|
|
103
|
+
|
|
104
|
+
- [Frontend SSR Overview](/frontend/ssr-overview)
|
|
105
|
+
- [Editions Overview](/editions/overview)
|
|
106
|
+
|
|
107
|
+
## How to read these comparisons
|
|
108
|
+
|
|
109
|
+
These comparisons are most useful when your decision depends on questions like:
|
|
110
|
+
|
|
111
|
+
- do you want one coordinated framework system instead of stitching backend and frontend frameworks together?
|
|
112
|
+
- do you need a stronger dedicated backend layer inside a fullstack architecture?
|
|
113
|
+
- do you want explicit contract-loop workflows between backend and frontend?
|
|
114
|
+
- do you need shared conventions across SSR, SPA, Web, and Admin delivery modes?
|
|
115
|
+
- do you want Django-Admin-like rapid admin development inside the Node.js ecosystem, but with a more modern frontend and interaction model?
|
|
116
|
+
|
|
117
|
+
If those questions matter, Cabloy’s value is not just one isolated feature. It is the way **Vona**, **Zova**, shared scripts, and cross-stack workflows stay aligned as one framework system.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Edition Differences in Fullstack Collaboration
|
|
2
|
+
|
|
3
|
+
This page makes the Basic/Start differences in the collaboration loop explicit.
|
|
4
|
+
|
|
5
|
+
## Why this page matters
|
|
6
|
+
|
|
7
|
+
Most Cabloy architecture can be explained once.
|
|
8
|
+
|
|
9
|
+
But the fullstack collaboration path becomes confusing if docs or AI systems silently reuse Cabloy Basic assumptions inside Cabloy Start workflows.
|
|
10
|
+
|
|
11
|
+
This page exists to keep those differences visible.
|
|
12
|
+
|
|
13
|
+
## Shared collaboration model
|
|
14
|
+
|
|
15
|
+
Both editions share the same broad collaboration loop:
|
|
16
|
+
|
|
17
|
+
- Vona provides backend runtime and OpenAPI-facing contract output
|
|
18
|
+
- Zova provides frontend application structure and generated metadata
|
|
19
|
+
- root scripts and CLI commands coordinate build, generation, and verification
|
|
20
|
+
|
|
21
|
+
## Where the editions diverge
|
|
22
|
+
|
|
23
|
+
The most important differences show up in:
|
|
24
|
+
|
|
25
|
+
- frontend UI layer assumptions
|
|
26
|
+
- frontend flavor names
|
|
27
|
+
- frontend module composition
|
|
28
|
+
- admin/web SSR site baselines
|
|
29
|
+
- private value-add content and project assets in Cabloy Start
|
|
30
|
+
- potentially different generated output paths or integration details
|
|
31
|
+
|
|
32
|
+
## Cabloy Basic
|
|
33
|
+
|
|
34
|
+
In the current public monorepo, Basic examples commonly align with:
|
|
35
|
+
|
|
36
|
+
- DaisyUI + TailwindCSS oriented frontend assumptions
|
|
37
|
+
- Basic-specific Zova flavors such as `cabloyBasicAdmin` and `cabloyBasicWeb`
|
|
38
|
+
|
|
39
|
+
## Cabloy Start
|
|
40
|
+
|
|
41
|
+
In the sibling private repo, Start examples commonly align with:
|
|
42
|
+
|
|
43
|
+
- Vuetify-oriented frontend assumptions
|
|
44
|
+
- Start-specific Zova flavors such as `cabloyStartAdmin` and `cabloyStartWeb`
|
|
45
|
+
|
|
46
|
+
## Safe documentation and AI rule
|
|
47
|
+
|
|
48
|
+
When documenting or automating a fullstack collaboration flow:
|
|
49
|
+
|
|
50
|
+
1. explain the shared model once
|
|
51
|
+
2. detect the active edition
|
|
52
|
+
3. branch only where the workflow actually diverges
|
|
53
|
+
4. verify flavor names and generated output paths in the active repo
|
|
54
|
+
|
|
55
|
+
## Practical implications for edition-aware workflow decisions
|
|
56
|
+
|
|
57
|
+
This rule prevents a common failure mode:
|
|
58
|
+
|
|
59
|
+
- the model understands the shared architecture correctly
|
|
60
|
+
- but gives the wrong operational example because it assumes the wrong edition
|
|
61
|
+
|
|
62
|
+
That is exactly the kind of mistake good fullstack docs should prevent.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Frontend Metadata Back to Backend
|
|
2
|
+
|
|
3
|
+
This page documents the reverse direction of Cabloy’s fullstack collaboration loop: frontend-generated metadata that improves backend-side development and tooling.
|
|
4
|
+
|
|
5
|
+
## Why this path matters
|
|
6
|
+
|
|
7
|
+
The fullstack collaboration loop in Cabloy is not one-way.
|
|
8
|
+
|
|
9
|
+
For the forward contract-bridge direction from backend OpenAPI to frontend consumption, also see [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk).
|
|
10
|
+
|
|
11
|
+
The backend does not only feed the frontend through OpenAPI. The frontend also generates information that can improve backend-side type hints and integration confidence.
|
|
12
|
+
|
|
13
|
+
This is one of the unusual strengths of the Cabloy monorepo model.
|
|
14
|
+
|
|
15
|
+
## What the frontend can generate
|
|
16
|
+
|
|
17
|
+
The current script surface shows that Zova can generate metadata and type information for areas such as:
|
|
18
|
+
|
|
19
|
+
- routes
|
|
20
|
+
- components
|
|
21
|
+
- icons
|
|
22
|
+
- REST-related generated output
|
|
23
|
+
|
|
24
|
+
That generated information can then be consumed by backend-side fullstack workflows and developer tooling.
|
|
25
|
+
|
|
26
|
+
## Why this is valuable
|
|
27
|
+
|
|
28
|
+
In a separated-repo world, this information is often harder to share, easier to stale, and more annoying for AI to rediscover.
|
|
29
|
+
|
|
30
|
+
In the monorepo, the frontend-generated metadata can stay close to:
|
|
31
|
+
|
|
32
|
+
- the frontend source that produced it
|
|
33
|
+
- the backend workflows that consume or rely on it
|
|
34
|
+
- the docs and skills that explain the collaboration path
|
|
35
|
+
|
|
36
|
+
## Typical collaboration pattern
|
|
37
|
+
|
|
38
|
+
A practical collaboration loop often looks like this:
|
|
39
|
+
|
|
40
|
+
1. define or update frontend routes/components/icons
|
|
41
|
+
2. regenerate the relevant frontend metadata or REST/type output
|
|
42
|
+
3. let backend-side workflows, docs, or fullstack integration logic consume the generated information
|
|
43
|
+
4. verify the collaboration path still matches the active edition
|
|
44
|
+
|
|
45
|
+
## Edition awareness
|
|
46
|
+
|
|
47
|
+
This path is especially sensitive to edition differences because Basic and Start do not expose the same frontend module and UI shape.
|
|
48
|
+
|
|
49
|
+
So when AI reasons about frontend-generated metadata, it should verify:
|
|
50
|
+
|
|
51
|
+
- which repo is active
|
|
52
|
+
- which flavor is active
|
|
53
|
+
- which generated output belongs to that edition
|
|
54
|
+
|
|
55
|
+
## Implementation checks for frontend-metadata changes
|
|
56
|
+
|
|
57
|
+
When changing frontend structural resources such as routes or components, ask:
|
|
58
|
+
|
|
59
|
+
1. does metadata need regeneration?
|
|
60
|
+
2. does backend-side tooling or fullstack integration rely on that metadata?
|
|
61
|
+
3. is this a Basic-specific or Start-specific workflow?
|
|
62
|
+
4. should the next action be generation and verification rather than only source edits?
|
|
63
|
+
|
|
64
|
+
That keeps the reverse contract loop visible instead of accidental.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Fullstack Introduction
|
|
2
|
+
|
|
3
|
+
Cabloy is a Node.js fullstack framework for AI vibe coding.
|
|
4
|
+
|
|
5
|
+
Use one fullstack framework instead of stitching together separate backend and frontend stacks.
|
|
6
|
+
|
|
7
|
+
With Vona, Zova, suite-based modules, and CLI-first workflows, Cabloy turns common scaffolding, metadata, refactors, and verification into explicit commands for faster, more accurate AI vibe coding.
|
|
8
|
+
|
|
9
|
+
## What Cabloy emphasizes
|
|
10
|
+
|
|
11
|
+
- **One framework system** — build backend and frontend in one fullstack architecture
|
|
12
|
+
- **Vona + Zova** — use aligned backend and frontend frameworks for code sharing, workflow reuse, and cross-stack consistency
|
|
13
|
+
- **Suite-based modular system** — organize capabilities as suites and modules so services, features, metadata, and tooling evolve in composable units
|
|
14
|
+
- **Multiple delivery modes** — deliver SSR, SPA, Web, and Admin applications with shared conventions across the stack
|
|
15
|
+
- **CLI-first workflows for AI vibe coding** — turn common scaffolding, metadata, refactors, and verification into explicit commands for faster, more accurate AI vibe coding
|
|
16
|
+
- **Monorepo-native development** — keep framework source, docs, and tooling aligned in one monorepo workflow
|
|
17
|
+
|
|
18
|
+
## Shared architecture
|
|
19
|
+
|
|
20
|
+
- **Vona** provides the backend framework capabilities.
|
|
21
|
+
- **Zova** provides the frontend framework capabilities.
|
|
22
|
+
- The root repository coordinates the two through shared scripts, shared terminology, and a shared release story.
|
|
23
|
+
|
|
24
|
+
This combination keeps backend and frontend development close enough for code sharing, workflow reuse, and AI vibe coding workflows.
|
|
25
|
+
|
|
26
|
+
## How the fullstack system stays connected
|
|
27
|
+
|
|
28
|
+
At the repository level, shared scripts, shared terminology, and CLI-first workflows keep Vona and Zova aligned as one framework system.
|
|
29
|
+
|
|
30
|
+
For the shared terminal-first workflow model, see [Fullstack CLI](/fullstack/cli).
|
|
31
|
+
|
|
32
|
+
## Why the monorepo matters
|
|
33
|
+
|
|
34
|
+
The monorepo makes it possible to keep backend and frontend concepts, tooling, and generated outputs aligned from source rather than memory, for example:
|
|
35
|
+
|
|
36
|
+
- how frontend routes and components are reflected back into backend type hints
|
|
37
|
+
- how backend OpenAPI and DTO output feeds frontend SDK generation
|
|
38
|
+
- how common concepts can be documented once before edition-specific notes branch out
|
|
39
|
+
- how Vona and Zova CLI capabilities can be reused instead of rebuilding scaffolding by hand
|
|
40
|
+
|
|
41
|
+
## Technology Stack
|
|
42
|
+
|
|
43
|
+
### General
|
|
44
|
+
|
|
45
|
+
| Package | Version |
|
|
46
|
+
| ---------- | -------- |
|
|
47
|
+
| TypeScript | `^5.9.3` |
|
|
48
|
+
| Zod | `^4.3.6` |
|
|
49
|
+
|
|
50
|
+
### Backend (Vona)
|
|
51
|
+
|
|
52
|
+
| Package | Version |
|
|
53
|
+
| -------------------------------- | --------- |
|
|
54
|
+
| Koa | `^3.2.0` |
|
|
55
|
+
| Knex | `^3.2.9` |
|
|
56
|
+
| Redis Client (`ioredis`) | `^5.10.1` |
|
|
57
|
+
| SQLite Driver (`better-sqlite3`) | `^12.9.0` |
|
|
58
|
+
|
|
59
|
+
### Frontend (Zova)
|
|
60
|
+
|
|
61
|
+
| Package | Version |
|
|
62
|
+
| -------------- | ----------- |
|
|
63
|
+
| Vue | `^3.5.32` |
|
|
64
|
+
| Vite | `^8.0.14` |
|
|
65
|
+
| Quasar | `^2.19.3` |
|
|
66
|
+
| TanStack Query | `^5.100.10` |
|
|
67
|
+
| TanStack Form | `^1.32.0` |
|
|
68
|
+
| TanStack Table | `^8.21.3` |
|
|
69
|
+
|
|
70
|
+
### Edition-specific UI Stack
|
|
71
|
+
|
|
72
|
+
- **Cabloy Basic**: DaisyUI + Tailwind CSS
|
|
73
|
+
- **Cabloy Start**: Vuetify
|
|
74
|
+
|
|
75
|
+
## Common-first, edition-aware
|
|
76
|
+
|
|
77
|
+
Most framework concepts are shared across Cabloy Basic and Cabloy Start because both editions follow the same Cabloy fullstack core. The documentation prefers a common-first explanation, then adds edition-specific notes only where the editions intentionally diverge.
|
|
78
|
+
|
|
79
|
+
Across editions, the frontend engineering layer stays mostly shared through Zova, Vue, Vite, Quasar tooling, and related libraries. The edition-specific UI layer then diverges between DaisyUI + Tailwind CSS for Cabloy Basic and Vuetify for Cabloy Start.
|
|
80
|
+
|
|
81
|
+
Use the [Editions Overview](/editions/overview) page whenever a task depends on UI library assumptions, flavor names, module composition, SSR site baselines, distribution boundaries, or AI workflow guidance.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Backend OpenAPI to Frontend SDK
|
|
2
|
+
|
|
3
|
+
This page turns one of Cabloy’s most important fullstack collaboration paths into an explicit guide.
|
|
4
|
+
|
|
5
|
+
## Why this path matters
|
|
6
|
+
|
|
7
|
+
Cabloy’s fullstack productivity depends heavily on a contract loop:
|
|
8
|
+
|
|
9
|
+
1. Vona emits backend API metadata through Swagger/OpenAPI
|
|
10
|
+
2. Zova consumes that metadata to generate frontend SDKs and schema-aware helpers
|
|
11
|
+
3. frontend pages, models, and services build on those generated contracts instead of re-declaring everything manually
|
|
12
|
+
|
|
13
|
+
This is one of the strongest AI-leverage paths in the repo because it reduces duplicated type work and keeps backend/frontend coordination closer to source truth.
|
|
14
|
+
|
|
15
|
+
## The contract loop in practical terms
|
|
16
|
+
|
|
17
|
+
A useful split is:
|
|
18
|
+
|
|
19
|
+
- backend docs define the authoring side of the contract
|
|
20
|
+
- fullstack docs define the bridge from emitted contract to generated SDK
|
|
21
|
+
- frontend docs define the consumption side of the generated contract
|
|
22
|
+
|
|
23
|
+
That means this page is the fullstack contract-bridge page, not the backend authoring page and not the frontend usage page.
|
|
24
|
+
|
|
25
|
+
## Backend side: Vona emits the contract
|
|
26
|
+
|
|
27
|
+
On the backend side, OpenAPI metadata is driven by:
|
|
28
|
+
|
|
29
|
+
- controller argument and return contracts
|
|
30
|
+
- DTO and entity field definitions
|
|
31
|
+
- validation rules and `v` helpers
|
|
32
|
+
- `a-openapi` configuration
|
|
33
|
+
|
|
34
|
+
For the deeper backend perspective, see:
|
|
35
|
+
|
|
36
|
+
- [Controller Guide](/backend/controller-guide)
|
|
37
|
+
- [OpenAPI Guide](/backend/openapi-guide)
|
|
38
|
+
- [Validation Guide](/backend/validation-guide)
|
|
39
|
+
- [DTO Infer and Generation](/backend/dto-infer-generation)
|
|
40
|
+
|
|
41
|
+
## Frontend side: Zova consumes the contract
|
|
42
|
+
|
|
43
|
+
On the frontend side, the generated-contract path typically includes:
|
|
44
|
+
|
|
45
|
+
- OpenAPI configuration
|
|
46
|
+
- SDK generation
|
|
47
|
+
- API services or schema-driven helpers based on the generated output
|
|
48
|
+
|
|
49
|
+
For the deeper frontend perspective, see:
|
|
50
|
+
|
|
51
|
+
- [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
|
|
52
|
+
- [Server Data](/frontend/server-data)
|
|
53
|
+
- [API Guide](/frontend/api-guide)
|
|
54
|
+
- [API Schema Guide](/frontend/api-schema-guide)
|
|
55
|
+
- [SDK Guide](/frontend/sdk-guide)
|
|
56
|
+
|
|
57
|
+
## Cabloy Basic workflow
|
|
58
|
+
|
|
59
|
+
In the current public monorepo, Basic-specific Zova flavors include:
|
|
60
|
+
|
|
61
|
+
- `cabloyBasicAdmin`
|
|
62
|
+
- `cabloyBasicWeb`
|
|
63
|
+
|
|
64
|
+
Representative frontend-side contract-generation commands include:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm run zova :openapi:config demo-student
|
|
68
|
+
npm run zova :openapi:generate demo-student
|
|
69
|
+
cd zova && npm run build:rest:cabloyBasicAdmin
|
|
70
|
+
cd zova && npm run build:rest:cabloyBasicWeb
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
A practical contract-loop sequence is:
|
|
74
|
+
|
|
75
|
+
1. author or change the backend contract
|
|
76
|
+
2. emit or inspect backend OpenAPI output
|
|
77
|
+
3. configure frontend module ownership if needed
|
|
78
|
+
4. generate module-level OpenAPI SDK output
|
|
79
|
+
5. run the rest build for the active Basic flavor when needed
|
|
80
|
+
6. consume the generated contract from frontend code instead of re-declaring it manually
|
|
81
|
+
|
|
82
|
+
A practical responsibility split is:
|
|
83
|
+
|
|
84
|
+
- project-level OpenAPI config decides where the backend Swagger/OpenAPI source comes from
|
|
85
|
+
- module-level OpenAPI config decides which generated contract slice belongs to which frontend module
|
|
86
|
+
|
|
87
|
+
A practical regeneration rule is:
|
|
88
|
+
|
|
89
|
+
- if the backend contract changed, prefer regenerating the SDK/rest layer before hand-editing frontend request code
|
|
90
|
+
|
|
91
|
+
## Cabloy Start workflow
|
|
92
|
+
|
|
93
|
+
In the sibling private Start repo, the same collaboration idea applies, but the frontend flavor names differ.
|
|
94
|
+
|
|
95
|
+
Representative Start-specific flavors include:
|
|
96
|
+
|
|
97
|
+
- `cabloyStartAdmin`
|
|
98
|
+
- `cabloyStartWeb`
|
|
99
|
+
|
|
100
|
+
Before documenting or automating this path for Start, confirm:
|
|
101
|
+
|
|
102
|
+
1. the `__CABLOY_START__` marker
|
|
103
|
+
2. the Start repo’s `package.json`
|
|
104
|
+
3. the exact frontend flavor names and generated output paths
|
|
105
|
+
|
|
106
|
+
## Implementation checks for backend-to-frontend contract changes
|
|
107
|
+
|
|
108
|
+
When changing a backend API contract, ask:
|
|
109
|
+
|
|
110
|
+
1. does OpenAPI output change?
|
|
111
|
+
2. does the frontend SDK or schema layer need regeneration?
|
|
112
|
+
3. is the active edition Basic or Start?
|
|
113
|
+
4. is the right next step to regenerate contracts instead of hand-editing frontend request code?
|
|
114
|
+
5. is the current task on the backend authoring side, the bridge step, or the frontend consumption side?
|
|
115
|
+
|
|
116
|
+
That keeps the backend/frontend contract loop coherent.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Fullstack Quickstart
|
|
2
|
+
|
|
3
|
+
This guide explains the fastest way to start a Cabloy fullstack project.
|
|
4
|
+
|
|
5
|
+
## 1. Prerequisites
|
|
6
|
+
|
|
7
|
+
Before creating a new Cabloy project, make sure your environment has:
|
|
8
|
+
|
|
9
|
+
| Name | Version |
|
|
10
|
+
| ------------ | ----------- |
|
|
11
|
+
| `pnpm` | `>=10.19.0` |
|
|
12
|
+
| `Node.js` | `>=24.4.0` |
|
|
13
|
+
| `Redis` | `>=7.2.6` |
|
|
14
|
+
| `SQLite3` | `Built-in` |
|
|
15
|
+
| `MySQL` | `>=8` |
|
|
16
|
+
| `PostgreSQL` | `>=16` |
|
|
17
|
+
|
|
18
|
+
- `Redis`: powers queue, schedule, startup, broadcast, caching, two-layer cache, and redlock
|
|
19
|
+
- `SQLite3`: if you use `better-sqlite3`, set up `node-gyp` before installing dependencies
|
|
20
|
+
|
|
21
|
+
## 2. Create a new project
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm create cabloy
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The generated project already includes `CLAUDE.md` and the `.claude/` workspace assets. This path creates a Cabloy Basic project baseline. Open this project in Claude Code and start coding immediately with project-specific guidance.
|
|
28
|
+
|
|
29
|
+
## 3. Start the backend
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm run dev
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- Web: http://localhost:7102/
|
|
36
|
+
- Admin: http://localhost:7102/admin/
|
|
37
|
+
|
|
38
|
+
## 4. Start the frontend for your edition
|
|
39
|
+
|
|
40
|
+
### Cabloy Basic
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm run dev:zova:admin # http://localhost:9000/admin/
|
|
44
|
+
npm run dev:zova:web # http://localhost:9000/
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Cabloy Start
|
|
48
|
+
|
|
49
|
+
Cabloy Start is the private commercial edition. Instead of `npm create cabloy`, purchase access to the licensed private repository, clone that source directly, and run `npm run init`. Then use the frontend commands provided by that edition. Do not assume the Cabloy Basic flavor names apply to Cabloy Start.
|
|
50
|
+
|
|
51
|
+
For the full Start onboarding details, including the access and initialization flow, read [Cabloy Start](/editions/cabloy-start).
|
|
52
|
+
|
|
53
|
+
If you are not sure which edition you are using or which one to choose, read:
|
|
54
|
+
|
|
55
|
+
- [Choosing Between Cabloy Basic and Cabloy Start](/editions/choosing-between-basic-and-start)
|
|
56
|
+
- [Edition Detection](/editions/detection)
|
|
57
|
+
- [Cabloy Basic](/editions/cabloy-basic)
|
|
58
|
+
- [Cabloy Start](/editions/cabloy-start)
|
|
59
|
+
|
|
60
|
+
## 5. Upgrade an existing project
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm run upgrade
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 6. Next steps for framework-aware development
|
|
67
|
+
|
|
68
|
+
If you are contributing to framework-aware workflows or using Cabloy CLI generation directly, prefer CLI-backed generation over manual scaffolding.
|
|
69
|
+
|
|
70
|
+
Read [Fullstack CLI](/fullstack/cli) for the shared cross-stack workflow model, then start with:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm run vona :create
|
|
74
|
+
npm run zova :create
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Then narrow into the specific command family you need.
|
|
78
|
+
|
|
79
|
+
## 7. Shared verification commands for deeper workflow checks
|
|
80
|
+
|
|
81
|
+
If you are validating framework-aware changes or a broader workflow, use the shared project scripts before declaring a workflow correct:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npm run tsc
|
|
85
|
+
npm run test
|
|
86
|
+
npm run build
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Choose more targeted checks when only one area is affected, but treat these scripts as the shared reference surface.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Fullstack Vona + Zova Integration
|
|
2
|
+
|
|
3
|
+
This guide explains the current monorepo-native workflow for integrating Vona and Zova.
|
|
4
|
+
|
|
5
|
+
## Why the workflow looks different in the monorepo
|
|
6
|
+
|
|
7
|
+
Earlier standalone-repo workflows often described integrating Zova by cloning a separate repository and copying its built output into Vona manually.
|
|
8
|
+
|
|
9
|
+
That is not the preferred Cabloy workflow.
|
|
10
|
+
|
|
11
|
+
In the current monorepo:
|
|
12
|
+
|
|
13
|
+
- Vona and Zova already live in the same source tree
|
|
14
|
+
- the root repository already exposes shared scripts for both sides
|
|
15
|
+
- edition differences should be handled explicitly rather than through ad hoc path replacement
|
|
16
|
+
|
|
17
|
+
## Core integration model
|
|
18
|
+
|
|
19
|
+
Cabloy uses a frontend-backend separation architecture:
|
|
20
|
+
|
|
21
|
+
- Vona provides the backend runtime
|
|
22
|
+
- Zova provides the frontend application
|
|
23
|
+
- generated or built frontend output is consumed by the backend-side fullstack flow
|
|
24
|
+
- type sharing is coordinated through OpenAPI, generated SDKs, and frontend-generated route/component typing
|
|
25
|
+
|
|
26
|
+
## Cabloy Basic
|
|
27
|
+
|
|
28
|
+
In Cabloy Basic, the root repository already exposes these shared entrypoints:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm run dev
|
|
32
|
+
npm run dev:zova:admin
|
|
33
|
+
npm run dev:zova:web
|
|
34
|
+
npm run build
|
|
35
|
+
npm run build:zova
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The relevant Zova flavors in this repository include:
|
|
39
|
+
|
|
40
|
+
- `cabloyBasicAdmin`
|
|
41
|
+
- `cabloyBasicWeb`
|
|
42
|
+
|
|
43
|
+
The frontend-side REST/type build flows include:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
cd zova && npm run build:rest:cabloyBasicAdmin
|
|
47
|
+
cd zova && npm run build:rest:cabloyBasicWeb
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Cabloy Start
|
|
51
|
+
|
|
52
|
+
Cabloy Start is the private commercial edition. It lives in a licensed sibling repository rather than a subdirectory here, but the same integration idea applies.
|
|
53
|
+
|
|
54
|
+
Its root script surface uses Start-specific flavors such as:
|
|
55
|
+
|
|
56
|
+
- `cabloyStartAdmin`
|
|
57
|
+
- `cabloyStartWeb`
|
|
58
|
+
|
|
59
|
+
Because Start differs in UI layer, module composition, SSR site baselines, and project assets, do not reuse Basic integration examples without first confirming:
|
|
60
|
+
|
|
61
|
+
1. the `__CABLOY_START__` marker
|
|
62
|
+
2. the Start repo’s `package.json`
|
|
63
|
+
3. the exact Zova flavor names and generated output paths used there
|
|
64
|
+
|
|
65
|
+
## Recommended integration workflow
|
|
66
|
+
|
|
67
|
+
### 1. Detect the edition
|
|
68
|
+
|
|
69
|
+
- `__CABLOY_BASIC__` → use Basic examples from this repo
|
|
70
|
+
- `__CABLOY_START__` → verify the sibling Start repo scripts before using examples
|
|
71
|
+
|
|
72
|
+
### 2. Start from root scripts
|
|
73
|
+
|
|
74
|
+
Use the root `package.json` as the first workflow surface.
|
|
75
|
+
|
|
76
|
+
### 3. Use Zova build and REST generation deliberately
|
|
77
|
+
|
|
78
|
+
For frontend builds and type generation, inspect the relevant Zova flavor scripts instead of hardcoding copy paths or ad hoc integration steps.
|
|
79
|
+
|
|
80
|
+
### 4. Verify both sides together
|
|
81
|
+
|
|
82
|
+
For meaningful fullstack changes, verify:
|
|
83
|
+
|
|
84
|
+
- backend dev/build/test flow
|
|
85
|
+
- frontend dev/build/type generation flow
|
|
86
|
+
- the edition-specific flavor you actually targeted
|