cabloy 5.1.50 → 5.1.51
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 +288 -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 +29 -0
- package/.github/workflows/docs-pages.yml +54 -0
- package/.gitignore +1 -0
- package/CHANGELOG.md +29 -0
- package/CLAUDE.md +59 -0
- package/README.md +137 -0
- package/cabloy-docs/.vitepress/config.mjs +222 -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 +138 -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 +167 -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 +157 -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 +35 -0
- package/cabloy-docs/ai/verification.md +30 -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 +25 -0
- package/cabloy-docs/editions/cabloy-start.md +24 -0
- package/cabloy-docs/editions/detection.md +31 -0
- package/cabloy-docs/editions/overview.md +44 -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 +57 -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 +32 -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 +201 -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/edition-collaboration-differences.md +61 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
- package/cabloy-docs/fullstack/introduction.md +69 -0
- package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
- package/cabloy-docs/fullstack/quickstart.md +86 -0
- package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
- package/cabloy-docs/index.md +73 -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 +3 -3
- package/vona/README.zh-CN.md +4 -4
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/src/bean/summerCache.datasourceWrite.ts +2 -2
- 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 +4 -4
- package/zova/README.zh-CN.md +4 -4
- /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,88 @@
|
|
|
1
|
+
# Backend Directory Structure
|
|
2
|
+
|
|
3
|
+
This page gives a compact reference view of the backend tree under `vona/`.
|
|
4
|
+
|
|
5
|
+
## Why this page exists
|
|
6
|
+
|
|
7
|
+
The package map explains the architectural meaning of package, module, and suite boundaries.
|
|
8
|
+
|
|
9
|
+
This page complements that by showing the practical backend tree layout used in the Cabloy repository.
|
|
10
|
+
|
|
11
|
+
## Simplified backend tree
|
|
12
|
+
|
|
13
|
+
Representative backend structure:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
vona/
|
|
17
|
+
├── packages-cli/
|
|
18
|
+
├── packages-utils/
|
|
19
|
+
├── packages-vona/
|
|
20
|
+
└── src/
|
|
21
|
+
├── module/
|
|
22
|
+
├── module-vendor/
|
|
23
|
+
├── suite/
|
|
24
|
+
└── suite-vendor/
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Meaning of the main directories
|
|
28
|
+
|
|
29
|
+
| Path | Meaning |
|
|
30
|
+
| ------------------------- | ---------------------------------------- |
|
|
31
|
+
| `vona/packages-cli/` | Vona CLI entrypoints and command sets |
|
|
32
|
+
| `vona/packages-utils/` | shared backend-side utilities |
|
|
33
|
+
| `vona/packages-vona/` | framework packages |
|
|
34
|
+
| `vona/src/module/` | first-party standalone modules |
|
|
35
|
+
| `vona/src/module-vendor/` | vendor-provided standalone modules |
|
|
36
|
+
| `vona/src/suite/` | first-party suites and their modules |
|
|
37
|
+
| `vona/src/suite-vendor/` | vendor-provided suites and their modules |
|
|
38
|
+
|
|
39
|
+
## Project-level backend areas
|
|
40
|
+
|
|
41
|
+
Within the backend application layer, contributors should also know these practical areas:
|
|
42
|
+
|
|
43
|
+
| Path | Meaning |
|
|
44
|
+
| -------------------------- | -------------------------------------------------- |
|
|
45
|
+
| `vona/env/` | backend env files and runtime configuration inputs |
|
|
46
|
+
| `vona/src/backend/config/` | project-level backend config and locale overrides |
|
|
47
|
+
| `vona/src/backend/typing/` | project-level backend type definitions |
|
|
48
|
+
| `vona/src/backend/play/` | backend playground-oriented verification assets |
|
|
49
|
+
|
|
50
|
+
## Practical development reading of the tree
|
|
51
|
+
|
|
52
|
+
A useful rule is:
|
|
53
|
+
|
|
54
|
+
- start in `vona/src/module/` when the work belongs to a standalone module
|
|
55
|
+
- start in `vona/src/suite/` when the work belongs to a suite-composed business area
|
|
56
|
+
- inspect `vona/packages-cli/` when the task is about command discovery or generation behavior
|
|
57
|
+
- inspect `vona/src/backend/config/` when the task is about project-level config overrides rather than module-local defaults
|
|
58
|
+
|
|
59
|
+
A practical generator-oriented reading is:
|
|
60
|
+
|
|
61
|
+
- `:create:module` and `:create:suite` choose the structural target first
|
|
62
|
+
- `:create:bean` then places scene-based resources under the chosen module
|
|
63
|
+
- initializer commands such as `:init:constant`, `:init:types`, and `:init:asset` create module-scope resource files rather than ordinary bean-scene classes
|
|
64
|
+
|
|
65
|
+
## Relationship to other reference pages
|
|
66
|
+
|
|
67
|
+
Read this page together with:
|
|
68
|
+
|
|
69
|
+
- [Package Map](/reference/package-map)
|
|
70
|
+
- [Backend Essentials](/backend/backend-essentials)
|
|
71
|
+
- [Backend CLI](/backend/cli)
|
|
72
|
+
- [Backend Scripts](/backend/scripts)
|
|
73
|
+
|
|
74
|
+
A practical split is:
|
|
75
|
+
|
|
76
|
+
- [Backend (Vona)](/backend/introduction) is the broader backend hub
|
|
77
|
+
- [Package Map](/reference/package-map) explains architecture boundaries and package metadata
|
|
78
|
+
- this page explains the practical directory tree contributors navigate
|
|
79
|
+
|
|
80
|
+
## Implementation checks for backend file-location changes
|
|
81
|
+
|
|
82
|
+
When changing backend code, ask:
|
|
83
|
+
|
|
84
|
+
1. does this change belong to a standalone module, a suite-contained module, or project-level backend config?
|
|
85
|
+
2. is the task about generation behavior under `packages-cli/` or runtime behavior under `src/`?
|
|
86
|
+
3. should the example use a module path, a suite path, or a project-level backend path?
|
|
87
|
+
|
|
88
|
+
That helps keep backend file references aligned with the actual monorepo layout.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# CLI Reference
|
|
2
|
+
|
|
3
|
+
This page is the compact reference layer for the two main command entrypoints.
|
|
4
|
+
|
|
5
|
+
## Vona
|
|
6
|
+
|
|
7
|
+
Entry from repo root:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm run vona :
|
|
11
|
+
npm run vona :create
|
|
12
|
+
npm run vona :tools
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Primary command families:
|
|
16
|
+
|
|
17
|
+
- `bin:*`
|
|
18
|
+
- `create:*`
|
|
19
|
+
- `init:*`
|
|
20
|
+
- `tools:*`
|
|
21
|
+
|
|
22
|
+
## Zova
|
|
23
|
+
|
|
24
|
+
Entry from repo root:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm run zova :
|
|
28
|
+
npm run zova :create
|
|
29
|
+
npm run zova :refactor
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Primary command families:
|
|
33
|
+
|
|
34
|
+
- `bin:*`
|
|
35
|
+
- `create:*`
|
|
36
|
+
- `init:*`
|
|
37
|
+
- `refactor:*`
|
|
38
|
+
- `tools:*`
|
|
39
|
+
- `openapi:*`
|
|
40
|
+
|
|
41
|
+
## Workflow guidance for docs, skills, and rules
|
|
42
|
+
|
|
43
|
+
When creating docs, skills, or rules, use the CLI family names as the public mental model first. Only drop to file-level implementation details when the command surface is insufficient.
|
|
44
|
+
|
|
45
|
+
Use this page together with:
|
|
46
|
+
|
|
47
|
+
- [Backend Quickstart](/backend/quickstart)
|
|
48
|
+
- [Frontend (Zova)](/frontend/introduction)
|
|
49
|
+
- [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Glossary
|
|
2
|
+
|
|
3
|
+
## Cabloy
|
|
4
|
+
|
|
5
|
+
The fullstack framework and monorepo direction that combines backend and frontend workflows.
|
|
6
|
+
|
|
7
|
+
## Vona
|
|
8
|
+
|
|
9
|
+
The backend framework in the Cabloy ecosystem.
|
|
10
|
+
|
|
11
|
+
## Zova
|
|
12
|
+
|
|
13
|
+
The frontend framework in the Cabloy ecosystem.
|
|
14
|
+
|
|
15
|
+
## Cabloy Basic
|
|
16
|
+
|
|
17
|
+
The public reference repository for the shared Cabloy architecture.
|
|
18
|
+
|
|
19
|
+
## Cabloy Start
|
|
20
|
+
|
|
21
|
+
A private sibling repository with different UI and module choices, provided as a value-add edition.
|
|
22
|
+
|
|
23
|
+
## Edition detection
|
|
24
|
+
|
|
25
|
+
The process of identifying whether the current repo is Cabloy Basic or Cabloy Start before choosing a workflow, example, or skill branch.
|
|
26
|
+
|
|
27
|
+
## CLI-first
|
|
28
|
+
|
|
29
|
+
The practice of using existing Vona and Zova command families before attempting manual scaffolding or refactor work.
|
|
30
|
+
|
|
31
|
+
## Read next
|
|
32
|
+
|
|
33
|
+
Use the glossary together with:
|
|
34
|
+
|
|
35
|
+
- [Fullstack Introduction](/fullstack/introduction)
|
|
36
|
+
- [Backend (Vona)](/backend/introduction)
|
|
37
|
+
- [Frontend (Zova)](/frontend/introduction)
|
|
38
|
+
- [Package Map](/reference/package-map)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Package Map
|
|
2
|
+
|
|
3
|
+
This monorepo is organized around a small set of stable top-level areas.
|
|
4
|
+
|
|
5
|
+
## Root
|
|
6
|
+
|
|
7
|
+
- `package.json` — shared scripts and release entrypoints
|
|
8
|
+
- `lerna.json` — package topology
|
|
9
|
+
- `.docs-internal/` — internal engineering docs
|
|
10
|
+
- `.claude/` — Claude commands, skills, and local settings
|
|
11
|
+
- `cabloy-docs/` — unified public docs
|
|
12
|
+
|
|
13
|
+
## Backend side
|
|
14
|
+
|
|
15
|
+
- `vona/packages-cli/` — Vona CLI and command sets
|
|
16
|
+
- `vona/packages-utils/` — shared utilities
|
|
17
|
+
- `vona/packages-vona/` — framework packages
|
|
18
|
+
- `vona/src/module/` — first-party Vona modules
|
|
19
|
+
- `vona/src/module-vendor/` — vendor-provided modules
|
|
20
|
+
- `vona/src/suite/` — first-party suites and their modules
|
|
21
|
+
- `vona/src/suite-vendor/` — vendor-provided suites and their modules
|
|
22
|
+
|
|
23
|
+
A useful structural rule is:
|
|
24
|
+
|
|
25
|
+
- **package** is the publishable/package-metadata unit
|
|
26
|
+
- **module** is the main backend capability unit
|
|
27
|
+
- **suite** is the composition unit that groups modules into a larger architecture surface
|
|
28
|
+
|
|
29
|
+
## Representative backend package metadata
|
|
30
|
+
|
|
31
|
+
Representative package metadata in the current repo shows the distinction clearly.
|
|
32
|
+
|
|
33
|
+
### Module package
|
|
34
|
+
|
|
35
|
+
Example: `vona/src/module/demo-student/package.json`
|
|
36
|
+
|
|
37
|
+
- package name: `vona-module-demo-student`
|
|
38
|
+
- title: `demo-student`
|
|
39
|
+
- `vonaModule.dependencies` records module-level framework dependencies
|
|
40
|
+
|
|
41
|
+
### Suite package
|
|
42
|
+
|
|
43
|
+
Example: `vona/src/suite/a-demo/package.json`
|
|
44
|
+
|
|
45
|
+
- package name: `vona-suite-a-demo`
|
|
46
|
+
- title: `a-demo`
|
|
47
|
+
- `dependencies` declare which module packages the suite composes
|
|
48
|
+
|
|
49
|
+
### Suite-contained module package
|
|
50
|
+
|
|
51
|
+
Example: `vona/src/suite/a-demo/modules/demo-basic/package.json`
|
|
52
|
+
|
|
53
|
+
- package name: `vona-module-demo-basic`
|
|
54
|
+
- title: `demo-basic`
|
|
55
|
+
- `vonaModule.dependencies` still expresses module-level dependencies even when the module lives under a suite
|
|
56
|
+
|
|
57
|
+
This matters because Vona modularization is not just folder layout. Package metadata participates in dependency declarations and architecture boundaries.
|
|
58
|
+
|
|
59
|
+
## Practical modularization edge table
|
|
60
|
+
|
|
61
|
+
| Unit | Main role | Where dependency intent is usually expressed |
|
|
62
|
+
| ------- | ------------------------------------- | -------------------------------------------------------------------- |
|
|
63
|
+
| Package | metadata and publication unit | package-level `dependencies`, scripts, exports, and release metadata |
|
|
64
|
+
| Module | main backend capability unit | `vonaModule.dependencies` for framework/module dependency intent |
|
|
65
|
+
| Suite | composition unit for multiple modules | normal package `dependencies` that compose module packages |
|
|
66
|
+
|
|
67
|
+
A practical comparison is:
|
|
68
|
+
|
|
69
|
+
- a standalone module package still uses `vonaModule.dependencies` to describe backend framework/module dependency intent
|
|
70
|
+
- a suite package uses ordinary package `dependencies` to compose the module packages it contains or depends on
|
|
71
|
+
- a suite-contained module still remains a module package with its own `vonaModule.dependencies`
|
|
72
|
+
|
|
73
|
+
## How this relates to backend docs
|
|
74
|
+
|
|
75
|
+
Use this package map together with:
|
|
76
|
+
|
|
77
|
+
- [Backend Essentials](/backend/backend-essentials)
|
|
78
|
+
- [Backend Foundation](/backend/foundation)
|
|
79
|
+
- [Backend CLI](/backend/cli)
|
|
80
|
+
- [Backend Scripts](/backend/scripts)
|
|
81
|
+
- [Backend Directory Structure](/reference/backend-directory-structure)
|
|
82
|
+
|
|
83
|
+
A practical split is:
|
|
84
|
+
|
|
85
|
+
- the backend essentials pages explain the architecture model
|
|
86
|
+
- this page grounds that model in the real monorepo layout
|
|
87
|
+
|
|
88
|
+
For the broader backend entry path, also see [Backend (Vona)](/backend/introduction).
|
|
89
|
+
|
|
90
|
+
## Frontend side
|
|
91
|
+
|
|
92
|
+
- `zova/packages-cli/` — Zova CLI and command sets
|
|
93
|
+
- `zova/packages-utils/` — shared utilities
|
|
94
|
+
- `zova/packages-zova/` — framework packages
|
|
95
|
+
- `zova/src/` — modules, suites, and vendor source
|
|
96
|
+
|
|
97
|
+
For the frontend architectural meaning of modules, suites, scope-driven resources, and runtime/startup structure, see `/frontend/modules-and-suites`, `/frontend/module-scope`, `/frontend/ioc-and-beans`, `/frontend/environment-config-guide`, `/frontend/app-startup-guide`, and `/frontend/system-startup-guide`.
|
|
98
|
+
|
|
99
|
+
## Sibling edition
|
|
100
|
+
|
|
101
|
+
- `cabloy-start` is a separate sibling repository, not a subdirectory of this monorepo.
|
|
102
|
+
|
|
103
|
+
### Maintainer note for cross-repo guidance
|
|
104
|
+
|
|
105
|
+
When maintaining docs, skills, or rules that refer to Cabloy Start, keep the cross-repo guidance conceptually aligned with the system documented here.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Repo Scripts
|
|
2
|
+
|
|
3
|
+
The root `package.json` is the first reference point for shared monorepo workflows.
|
|
4
|
+
|
|
5
|
+
## Current shared entrypoints in Cabloy Basic
|
|
6
|
+
|
|
7
|
+
- `npm run init`
|
|
8
|
+
- `npm run vona`
|
|
9
|
+
- `npm run zova`
|
|
10
|
+
- `npm run dev`
|
|
11
|
+
- `npm run dev:zova:admin`
|
|
12
|
+
- `npm run dev:zova:web`
|
|
13
|
+
- `npm run build`
|
|
14
|
+
- `npm run build:zova`
|
|
15
|
+
- `npm run start`
|
|
16
|
+
- `npm run test`
|
|
17
|
+
- `npm run tsc`
|
|
18
|
+
- `npm run docs:dev`
|
|
19
|
+
- `npm run docs:build`
|
|
20
|
+
- `npm run docs:preview`
|
|
21
|
+
|
|
22
|
+
## Edition-sensitive note
|
|
23
|
+
|
|
24
|
+
Cabloy Start keeps the same high-level pattern while using different frontend flavors such as `cabloyStartAdmin` and `cabloyStartWeb`.
|
|
25
|
+
|
|
26
|
+
### Documentation and automation guidance
|
|
27
|
+
|
|
28
|
+
When documenting or automating flavor-specific commands, always confirm the active repo first.
|
|
29
|
+
|
|
30
|
+
## Read together with
|
|
31
|
+
|
|
32
|
+
Use this page together with:
|
|
33
|
+
|
|
34
|
+
- [Backend Quickstart](/backend/quickstart)
|
|
35
|
+
- [Runtime and Flavors](/backend/runtime-and-flavors)
|
|
36
|
+
- [CLI Reference](/reference/cli-reference)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cabloy",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.51",
|
|
4
4
|
"gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
|
|
5
5
|
"description": "A Node.js fullstack framework",
|
|
6
6
|
"keywords": [
|
|
@@ -41,6 +41,9 @@
|
|
|
41
41
|
"format:fix": "oxfmt --write",
|
|
42
42
|
"lint": "oxlint",
|
|
43
43
|
"lint:fix": "oxlint --fix",
|
|
44
|
+
"docs:dev": "pnpm --dir cabloy-docs docs:dev",
|
|
45
|
+
"docs:build": "pnpm --dir cabloy-docs docs:build",
|
|
46
|
+
"docs:preview": "pnpm --dir cabloy-docs docs:preview",
|
|
44
47
|
"docs:fix": "textlint --fix ./cabloy-docs/**/*.md",
|
|
45
48
|
"release-patch": "node scripts/release.ts patch",
|
|
46
49
|
"release-minor": "node scripts/release.ts minor",
|
package/scripts/init.ts
CHANGED
|
@@ -17,6 +17,7 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
|
17
17
|
const ROOT_DIR = resolve(__dirname, '..');
|
|
18
18
|
const VONA_DIR = resolve(ROOT_DIR, 'vona');
|
|
19
19
|
const ZOVA_DIR = resolve(ROOT_DIR, 'zova');
|
|
20
|
+
const CABLOY_DOCS_DIR = resolve(ROOT_DIR, 'cabloy-docs');
|
|
20
21
|
|
|
21
22
|
// --- Helpers ---
|
|
22
23
|
|
|
@@ -202,6 +203,16 @@ function cleanupWorkspaceYaml(): void {
|
|
|
202
203
|
}
|
|
203
204
|
}
|
|
204
205
|
|
|
206
|
+
// --- Step G: init:cabloy-docs ---
|
|
207
|
+
|
|
208
|
+
function initCabloyDocs(): void {
|
|
209
|
+
const pkgPath = resolve(CABLOY_DOCS_DIR, 'package.json');
|
|
210
|
+
if (!existsSync(pkgPath)) return;
|
|
211
|
+
// eslint-disable-next-line
|
|
212
|
+
console.log('[init] Initializing cabloy-docs...');
|
|
213
|
+
exec('pnpm install --no-frozen-lockfile', CABLOY_DOCS_DIR);
|
|
214
|
+
}
|
|
215
|
+
|
|
205
216
|
// --- Main ---
|
|
206
217
|
|
|
207
218
|
setAppName();
|
|
@@ -210,6 +221,7 @@ generateEnvProdDockerLocal();
|
|
|
210
221
|
cleanupWorkspaceYaml();
|
|
211
222
|
initVona();
|
|
212
223
|
initZova();
|
|
224
|
+
initCabloyDocs();
|
|
213
225
|
buildSsrCabloyBasicStartBatch();
|
|
214
226
|
// eslint-disable-next-line
|
|
215
227
|
console.log('[init] Done!');
|
package/scripts/upgrade.ts
CHANGED
|
@@ -14,10 +14,11 @@ const TEMP_DIR = resolve(ROOT_DIR, 'node_modules/.cabloy-upgrade');
|
|
|
14
14
|
|
|
15
15
|
// --- Whitelist ---
|
|
16
16
|
|
|
17
|
-
const
|
|
17
|
+
const OVERWRITE_DIRS: string[] = [
|
|
18
18
|
// root
|
|
19
19
|
'scripts',
|
|
20
20
|
'.husky',
|
|
21
|
+
'cabloy-docs',
|
|
21
22
|
// vona
|
|
22
23
|
'vona/packages-vona',
|
|
23
24
|
'vona/packages-cli',
|
|
@@ -36,6 +37,12 @@ const WHITELIST_DIRS: string[] = [
|
|
|
36
37
|
'zova/scripts',
|
|
37
38
|
];
|
|
38
39
|
|
|
40
|
+
const MERGE_DIRS: string[] = [
|
|
41
|
+
// Claude project assets
|
|
42
|
+
'.claude/commands',
|
|
43
|
+
'.claude/skills',
|
|
44
|
+
];
|
|
45
|
+
|
|
39
46
|
const BLACKLIST_DIRS: string[] = [
|
|
40
47
|
// vona
|
|
41
48
|
'vona/src/suite-vendor/a-test',
|
|
@@ -43,6 +50,7 @@ const BLACKLIST_DIRS: string[] = [
|
|
|
43
50
|
|
|
44
51
|
const WHITELIST_FILES: string[] = [
|
|
45
52
|
// root
|
|
53
|
+
'CLAUDE.md',
|
|
46
54
|
'tsconfig.json',
|
|
47
55
|
'tsconfig.base.json',
|
|
48
56
|
'tsconfig.base.esm.json',
|
|
@@ -79,6 +87,14 @@ function exec(cmd: string): void {
|
|
|
79
87
|
execSync(cmd, { stdio: 'inherit', cwd: ROOT_DIR });
|
|
80
88
|
}
|
|
81
89
|
|
|
90
|
+
function shouldCopyPath(path: string): boolean {
|
|
91
|
+
return !path.includes('.DS_Store');
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function copyDirectory(src: string, dest: string): void {
|
|
95
|
+
cpSync(src, dest, { recursive: true, filter: shouldCopyPath });
|
|
96
|
+
}
|
|
97
|
+
|
|
82
98
|
async function extractTarball(tarballPath: string, targetDir: string): Promise<void> {
|
|
83
99
|
rmSync(targetDir, { recursive: true, force: true });
|
|
84
100
|
mkdirSync(targetDir, { recursive: true });
|
|
@@ -145,7 +161,7 @@ async function downloadAndExtract(): Promise<void> {
|
|
|
145
161
|
|
|
146
162
|
function selectiveOverwrite(dryRun?: boolean): void {
|
|
147
163
|
// Overwrite directories
|
|
148
|
-
for (const dir of
|
|
164
|
+
for (const dir of OVERWRITE_DIRS) {
|
|
149
165
|
const src = resolve(TEMP_DIR, dir);
|
|
150
166
|
const dest = resolve(ROOT_DIR, dir);
|
|
151
167
|
if (!existsSync(src)) continue;
|
|
@@ -156,7 +172,19 @@ function selectiveOverwrite(dryRun?: boolean): void {
|
|
|
156
172
|
if (existsSync(dest)) {
|
|
157
173
|
rmSync(dest, { recursive: true, force: true });
|
|
158
174
|
}
|
|
159
|
-
|
|
175
|
+
copyDirectory(src, dest);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Merge directories
|
|
179
|
+
for (const dir of MERGE_DIRS) {
|
|
180
|
+
const src = resolve(TEMP_DIR, dir);
|
|
181
|
+
const dest = resolve(ROOT_DIR, dir);
|
|
182
|
+
if (!existsSync(src)) continue;
|
|
183
|
+
if (dryRun) {
|
|
184
|
+
log(` [dry-run] Merge directory: ${dir}`);
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
copyDirectory(src, dest);
|
|
160
188
|
}
|
|
161
189
|
|
|
162
190
|
// Delete directories
|
package/vona/README.md
CHANGED
|
@@ -2,7 +2,7 @@ English | [简体中文](./README.zh-CN.md)
|
|
|
2
2
|
|
|
3
3
|
# Vona
|
|
4
4
|
|
|
5
|
-
Vona is a fullstack framework for building SSR/SPA/
|
|
5
|
+
Vona is a fullstack framework for building SSR/SPA/Web/Admin in one codebase, featuring frontend and backend separation and native type sharing
|
|
6
6
|
|
|
7
7
|
- Supports dual-layer tabs navigation, enabling efficient page switching while maintaining page state
|
|
8
8
|
- Dynamically render CRUD list pages, entry pages, and search forms, while demonstrating best practices for Tanstack Table, Tanstack Form, and Tanstack Query
|
|
@@ -37,9 +37,9 @@ Frontend-backend type sharing mechanism:
|
|
|
37
37
|
|
|
38
38
|
## Demo Online
|
|
39
39
|
|
|
40
|
-
The
|
|
40
|
+
The Web and Admin of Cabloy Store are built by one codebase
|
|
41
41
|
|
|
42
|
-
-
|
|
42
|
+
- Web: [https://cabloy.com](https://cabloy.com)
|
|
43
43
|
- Admin: [https://cabloy.com/admin](https://cabloy.com/admin)
|
|
44
44
|
|
|
45
45
|
## GIF Demo
|
package/vona/README.zh-CN.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Vona 是什么
|
|
4
4
|
|
|
5
|
-
Vona 是一款全栈框架,支持单代码库构建`SSR/SPA/Web
|
|
5
|
+
Vona 是一款全栈框架,支持单代码库构建`SSR/SPA/Web/Admin`,采用前后端分离架构,并内置前后端类型共享能力
|
|
6
6
|
|
|
7
7
|
- 提供 DTO 动态推断与生成能力,减少重复的类型定义工作,提升开发效率
|
|
8
8
|
- 支持双层页签导航,实现高效页面切换,并保持页面状态
|
|
@@ -37,10 +37,10 @@ Vona 采用前后端分离的架构。前端使用 Zova 框架,将构建生成
|
|
|
37
37
|
|
|
38
38
|
## 在线演示
|
|
39
39
|
|
|
40
|
-
使用同一套代码实现 Cabloy Store 的`Web
|
|
40
|
+
使用同一套代码实现 Cabloy Store 的`Web`和`Admin`
|
|
41
41
|
|
|
42
|
-
- Web
|
|
43
|
-
- Admin
|
|
42
|
+
- Web:[https://cabloy.com](https://cabloy.com)
|
|
43
|
+
- Admin:[https://cabloy.com/admin](https://cabloy.com/admin)
|
|
44
44
|
|
|
45
45
|
## 动图演示
|
|
46
46
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vona",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.41",
|
|
4
4
|
"gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
|
|
5
5
|
"description": "Vona is an intuitive, elegant and powerful Node.js framework for rapidly developing enterprise applications of any size",
|
|
6
6
|
"keywords": [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TableIdentity } from 'table-identity';
|
|
2
2
|
import type { IDatabaseClientRecord } from 'vona-module-a-orm';
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
|
|
5
5
|
|
|
6
6
|
export type TSummerCacheDatasourceWriteKey = TableIdentity;
|
|
7
7
|
export type TSummerCacheDatasourceWriteData = keyof IDatabaseClientRecord;
|
|
@@ -14,7 +14,7 @@ export type TSummerCacheDatasourceWriteData = keyof IDatabaseClientRecord;
|
|
|
14
14
|
ttl: 3 * 1000, // 3s
|
|
15
15
|
},
|
|
16
16
|
})
|
|
17
|
-
export class SummerCacheDatasourceWrite extends
|
|
17
|
+
export class SummerCacheDatasourceWrite extends ServiceSummerCacheBase<
|
|
18
18
|
TSummerCacheDatasourceWriteKey,
|
|
19
19
|
TSummerCacheDatasourceWriteData
|
|
20
20
|
> {}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ServiceCacheRedisBase, CacheRedis } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
import type { ICaptchaDataCache } from '../types/captcha.ts';
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ export type TCacheRedisCaptchaKey = string;
|
|
|
6
6
|
export type TCacheRedisCaptchaData = ICaptchaDataCache;
|
|
7
7
|
|
|
8
8
|
@CacheRedis({ disableTransactionCompensate: true })
|
|
9
|
-
export class CacheRedisCaptcha extends
|
|
9
|
+
export class CacheRedisCaptcha extends ServiceCacheRedisBase<
|
|
10
10
|
TCacheRedisCaptchaKey,
|
|
11
11
|
TCacheRedisCaptchaData
|
|
12
12
|
> {}
|
|
@@ -5,20 +5,19 @@ export default async function (options: IMetadataCustomGenerateOptions): Promise
|
|
|
5
5
|
const contentImports: string[] = [];
|
|
6
6
|
const contentRecordsGlobal: string[] = [];
|
|
7
7
|
for (const globFile of globFiles) {
|
|
8
|
-
const { className, beanName, fileNameJSRelative, isIgnore
|
|
9
|
-
if (isIgnore
|
|
10
|
-
const beanFullName = beanName;
|
|
8
|
+
const { className, beanName, fileNameJSRelative, isIgnore } = globFile;
|
|
9
|
+
if (isIgnore) continue;
|
|
11
10
|
contentImports.push(`import type { ${className} } from '${fileNameJSRelative}';`);
|
|
12
|
-
contentRecordsGlobal.push(`'${
|
|
11
|
+
contentRecordsGlobal.push(` '${beanName}': ${className};`);
|
|
13
12
|
}
|
|
14
13
|
if (contentImports.length === 0) return '';
|
|
15
14
|
// combine
|
|
16
15
|
const content = `/** ${sceneName}: begin */
|
|
17
16
|
${contentImports.join('\n')}
|
|
18
|
-
import 'vona';
|
|
17
|
+
import 'vona';
|
|
19
18
|
declare module 'vona' {
|
|
20
19
|
export interface IBeanRecordGlobal {
|
|
21
|
-
|
|
20
|
+
${contentRecordsGlobal.join('\n')}
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
23
|
/** ${sceneName}: end */
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ServiceCacheMemBase, CacheMem } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
export type TCacheMem<%=argv.beanNameCapitalize%>Key = any;
|
|
4
4
|
export type TCacheMem<%=argv.beanNameCapitalize%>Data = any;
|
|
5
5
|
|
|
6
6
|
@CacheMem()
|
|
7
7
|
export class CacheMem<%=argv.beanNameCapitalize%>
|
|
8
|
-
extends
|
|
8
|
+
extends ServiceCacheMemBase<TCacheMem<%=argv.beanNameCapitalize%>Key, TCacheMem<%=argv.beanNameCapitalize%>Data> {}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ServiceCacheRedisBase, CacheRedis } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
export type TCacheRedis<%=argv.beanNameCapitalize%>Key = any;
|
|
4
4
|
export type TCacheRedis<%=argv.beanNameCapitalize%>Data = any;
|
|
5
5
|
|
|
6
6
|
@CacheRedis()
|
|
7
7
|
export class CacheRedis<%=argv.beanNameCapitalize%>
|
|
8
|
-
extends
|
|
8
|
+
extends ServiceCacheRedisBase<TCacheRedis<%=argv.beanNameCapitalize%>Key, TCacheRedis<%=argv.beanNameCapitalize%>Data> {}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
// eslint-disable
|
|
2
2
|
/** bean: begin */
|
|
3
3
|
export * from '../bean/bean.cache.ts';
|
|
4
|
-
export * from '../bean/bean.cacheMemBase.ts';
|
|
5
|
-
export * from '../bean/bean.cacheRedisBase.ts';
|
|
6
4
|
|
|
7
5
|
import 'vona';
|
|
8
6
|
declare module 'vona' {
|
|
@@ -26,6 +24,19 @@ declare module 'vona' {
|
|
|
26
24
|
}
|
|
27
25
|
}
|
|
28
26
|
/** bean: end */
|
|
27
|
+
/** service: begin */
|
|
28
|
+
export * from '../service/cacheMemBase_.ts';
|
|
29
|
+
export * from '../service/cacheRedisBase_.ts';
|
|
30
|
+
|
|
31
|
+
import 'vona-module-a-bean';
|
|
32
|
+
declare module 'vona-module-a-bean' {
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
declare module 'vona-module-a-cache' {
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
/** service: end */
|
|
29
40
|
/** broadcast: begin */
|
|
30
41
|
export * from '../bean/broadcast.memClear.ts';
|
|
31
42
|
export * from '../bean/broadcast.memDel.ts';
|