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.
Files changed (300) hide show
  1. package/.claude/skills/cabloy-backend-scaffold/SKILL.md +207 -0
  2. package/.claude/skills/cabloy-backend-scaffold/evals/evals.json +29 -0
  3. package/.claude/skills/cabloy-backend-scaffold/references/backend-thread-map.md +52 -0
  4. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +39 -0
  5. package/.claude/skills/cabloy-contract-loop/SKILL.md +201 -0
  6. package/.claude/skills/cabloy-contract-loop/evals/evals.json +29 -0
  7. package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +47 -0
  8. package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -0
  9. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +230 -0
  10. package/.claude/skills/cabloy-frontend-scaffold/evals/evals.json +35 -0
  11. package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +41 -0
  12. package/.claude/skills/cabloy-frontend-scaffold/references/frontend-thread-map.md +54 -0
  13. package/.claude/skills/cabloy-workflow/SKILL.md +292 -0
  14. package/.claude/skills/cabloy-workflow/evals/evals.json +35 -0
  15. package/.claude/skills/cabloy-workflow/references/cli-strategy.md +39 -0
  16. package/.claude/skills/cabloy-workflow/references/edition-detection.md +30 -0
  17. package/.github/workflows/docs-pages.yml +56 -0
  18. package/.gitignore +1 -0
  19. package/CHANGELOG.md +54 -0
  20. package/CLAUDE.md +59 -0
  21. package/README.md +152 -0
  22. package/cabloy-docs/.vitepress/config.mjs +255 -0
  23. package/cabloy-docs/.vitepress/public/CNAME +1 -0
  24. package/cabloy-docs/.vitepress/theme/custom.css +64 -0
  25. package/cabloy-docs/.vitepress/theme/edition-badges.md +5 -0
  26. package/cabloy-docs/.vitepress/theme/index.js +5 -0
  27. package/cabloy-docs/ai/class-placement-rule.md +139 -0
  28. package/cabloy-docs/ai/cli-for-agents.md +56 -0
  29. package/cabloy-docs/ai/cli-to-skill-map.md +165 -0
  30. package/cabloy-docs/ai/docs-skills-rules-mapping.md +168 -0
  31. package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
  32. package/cabloy-docs/ai/edition-detection.md +30 -0
  33. package/cabloy-docs/ai/future-skill-roadmap.md +135 -0
  34. package/cabloy-docs/ai/global-bean-lookup.md +158 -0
  35. package/cabloy-docs/ai/introduction.md +62 -0
  36. package/cabloy-docs/ai/playbook-backend-module.md +111 -0
  37. package/cabloy-docs/ai/playbook-contract-regeneration.md +100 -0
  38. package/cabloy-docs/ai/playbook-frontend-page.md +99 -0
  39. package/cabloy-docs/ai/playbook-metadata-refresh.md +67 -0
  40. package/cabloy-docs/ai/repo-guidance.md +58 -0
  41. package/cabloy-docs/ai/rules-and-config.md +29 -0
  42. package/cabloy-docs/ai/skills.md +37 -0
  43. package/cabloy-docs/ai/verification.md +31 -0
  44. package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
  45. package/cabloy-docs/backend/aop-overview.md +128 -0
  46. package/cabloy-docs/backend/auth-guide.md +151 -0
  47. package/cabloy-docs/backend/backend-essentials.md +128 -0
  48. package/cabloy-docs/backend/broadcast-guide.md +138 -0
  49. package/cabloy-docs/backend/cache-guide.md +70 -0
  50. package/cabloy-docs/backend/captcha-guide.md +162 -0
  51. package/cabloy-docs/backend/cli.md +173 -0
  52. package/cabloy-docs/backend/config-guide.md +249 -0
  53. package/cabloy-docs/backend/controller-aop-guide.md +270 -0
  54. package/cabloy-docs/backend/controller-guide.md +347 -0
  55. package/cabloy-docs/backend/crud-workflow.md +118 -0
  56. package/cabloy-docs/backend/dto-guide.md +161 -0
  57. package/cabloy-docs/backend/dto-infer-generation.md +153 -0
  58. package/cabloy-docs/backend/dynamic-datasource-guide.md +70 -0
  59. package/cabloy-docs/backend/election-guide.md +141 -0
  60. package/cabloy-docs/backend/entity-guide.md +150 -0
  61. package/cabloy-docs/backend/error-guide.md +108 -0
  62. package/cabloy-docs/backend/event-guide.md +183 -0
  63. package/cabloy-docs/backend/external-aop-guide.md +149 -0
  64. package/cabloy-docs/backend/field-indexes.md +79 -0
  65. package/cabloy-docs/backend/foundation.md +281 -0
  66. package/cabloy-docs/backend/i18n-guide.md +211 -0
  67. package/cabloy-docs/backend/internal-aop-guide.md +181 -0
  68. package/cabloy-docs/backend/introduction.md +95 -0
  69. package/cabloy-docs/backend/jwt-guide.md +276 -0
  70. package/cabloy-docs/backend/logger-guide.md +223 -0
  71. package/cabloy-docs/backend/mail-guide.md +189 -0
  72. package/cabloy-docs/backend/menu-guide.md +80 -0
  73. package/cabloy-docs/backend/migration-and-changes.md +192 -0
  74. package/cabloy-docs/backend/model-guide.md +274 -0
  75. package/cabloy-docs/backend/multi-database-datasource.md +171 -0
  76. package/cabloy-docs/backend/multi-instance-and-instance-resolution.md +196 -0
  77. package/cabloy-docs/backend/openapi-guide.md +118 -0
  78. package/cabloy-docs/backend/orm-aggregate-group-guide.md +210 -0
  79. package/cabloy-docs/backend/orm-configuration-guide.md +165 -0
  80. package/cabloy-docs/backend/orm-guide.md +109 -0
  81. package/cabloy-docs/backend/orm-mutation-guide.md +195 -0
  82. package/cabloy-docs/backend/orm-select-guide.md +243 -0
  83. package/cabloy-docs/backend/queue-guide.md +271 -0
  84. package/cabloy-docs/backend/quickstart.md +141 -0
  85. package/cabloy-docs/backend/redis-guide.md +70 -0
  86. package/cabloy-docs/backend/redlock-guide.md +60 -0
  87. package/cabloy-docs/backend/relations-guide.md +250 -0
  88. package/cabloy-docs/backend/runtime-and-flavors.md +304 -0
  89. package/cabloy-docs/backend/schedule-guide.md +81 -0
  90. package/cabloy-docs/backend/scripts.md +116 -0
  91. package/cabloy-docs/backend/serialization-guide.md +192 -0
  92. package/cabloy-docs/backend/service-guide.md +166 -0
  93. package/cabloy-docs/backend/sharding-guide.md +49 -0
  94. package/cabloy-docs/backend/startup-guide.md +326 -0
  95. package/cabloy-docs/backend/transaction-guide.md +82 -0
  96. package/cabloy-docs/backend/unit-testing.md +209 -0
  97. package/cabloy-docs/backend/upload-guide.md +160 -0
  98. package/cabloy-docs/backend/user-access-guide.md +157 -0
  99. package/cabloy-docs/backend/validation-guide.md +80 -0
  100. package/cabloy-docs/backend/worker-guide.md +59 -0
  101. package/cabloy-docs/editions/cabloy-basic.md +26 -0
  102. package/cabloy-docs/editions/cabloy-start.md +55 -0
  103. package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
  104. package/cabloy-docs/editions/detection.md +31 -0
  105. package/cabloy-docs/editions/overview.md +107 -0
  106. package/cabloy-docs/frontend/api-guide.md +93 -0
  107. package/cabloy-docs/frontend/api-schema-guide.md +43 -0
  108. package/cabloy-docs/frontend/app-startup-guide.md +185 -0
  109. package/cabloy-docs/frontend/cli.md +78 -0
  110. package/cabloy-docs/frontend/component-guide.md +105 -0
  111. package/cabloy-docs/frontend/component-props-guide.md +97 -0
  112. package/cabloy-docs/frontend/component-v-model-guide.md +110 -0
  113. package/cabloy-docs/frontend/css-in-js-guide.md +151 -0
  114. package/cabloy-docs/frontend/design-principles.md +55 -0
  115. package/cabloy-docs/frontend/environment-config-guide.md +250 -0
  116. package/cabloy-docs/frontend/foundation.md +58 -0
  117. package/cabloy-docs/frontend/generic-component-guide.md +35 -0
  118. package/cabloy-docs/frontend/icon-engine-guide.md +88 -0
  119. package/cabloy-docs/frontend/introduction.md +33 -0
  120. package/cabloy-docs/frontend/ioc-and-beans.md +211 -0
  121. package/cabloy-docs/frontend/mock-guide.md +109 -0
  122. package/cabloy-docs/frontend/model-architecture.md +87 -0
  123. package/cabloy-docs/frontend/model-state-guide.md +70 -0
  124. package/cabloy-docs/frontend/module-scope.md +168 -0
  125. package/cabloy-docs/frontend/modules-and-suites.md +179 -0
  126. package/cabloy-docs/frontend/navigation-guards-guide.md +68 -0
  127. package/cabloy-docs/frontend/openapi-sdk-guide.md +102 -0
  128. package/cabloy-docs/frontend/page-guide.md +223 -0
  129. package/cabloy-docs/frontend/page-params-guide.md +87 -0
  130. package/cabloy-docs/frontend/page-query-guide.md +96 -0
  131. package/cabloy-docs/frontend/page-route-guide.md +147 -0
  132. package/cabloy-docs/frontend/quickstart.md +202 -0
  133. package/cabloy-docs/frontend/route-alias-guide.md +61 -0
  134. package/cabloy-docs/frontend/scripts.md +86 -0
  135. package/cabloy-docs/frontend/sdk-guide.md +45 -0
  136. package/cabloy-docs/frontend/server-data.md +74 -0
  137. package/cabloy-docs/frontend/ssr-client-only.md +40 -0
  138. package/cabloy-docs/frontend/ssr-env.md +51 -0
  139. package/cabloy-docs/frontend/ssr-init-data.md +46 -0
  140. package/cabloy-docs/frontend/ssr-overview.md +48 -0
  141. package/cabloy-docs/frontend/ssr-seo-meta.md +52 -0
  142. package/cabloy-docs/frontend/system-startup-guide.md +186 -0
  143. package/cabloy-docs/frontend/theme-guide.md +154 -0
  144. package/cabloy-docs/frontend/zod-guide.md +161 -0
  145. package/cabloy-docs/fullstack/cli.md +118 -0
  146. package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +117 -0
  147. package/cabloy-docs/fullstack/edition-collaboration-differences.md +62 -0
  148. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
  149. package/cabloy-docs/fullstack/introduction.md +81 -0
  150. package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
  151. package/cabloy-docs/fullstack/quickstart.md +89 -0
  152. package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
  153. package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
  154. package/cabloy-docs/index.md +72 -0
  155. package/cabloy-docs/package.json +16 -0
  156. package/cabloy-docs/pnpm-lock.yaml +1607 -0
  157. package/cabloy-docs/reference/backend-directory-structure.md +88 -0
  158. package/cabloy-docs/reference/cli-reference.md +49 -0
  159. package/cabloy-docs/reference/glossary.md +38 -0
  160. package/cabloy-docs/reference/package-map.md +105 -0
  161. package/cabloy-docs/reference/repo-scripts.md +36 -0
  162. package/package.json +4 -1
  163. package/scripts/init.ts +12 -0
  164. package/scripts/upgrade.ts +31 -3
  165. package/vona/README.md +4 -4
  166. package/vona/README.zh-CN.md +4 -4
  167. package/vona/packages-vona/vona/package.json +1 -1
  168. package/vona/pnpm-lock.yaml +383 -38
  169. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +1 -1
  170. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/src/bean/summerCache.datasourceWrite.ts +2 -2
  171. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
  172. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/.metadata/index.ts +49 -1
  173. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/controller/memoryDiag.ts +97 -0
  174. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  175. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +1 -1
  176. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/src/bean/cacheRedis.captcha.ts +2 -2
  177. package/vona/src/suite-vendor/a-captcha/package.json +1 -1
  178. package/vona/src/suite-vendor/a-vona/modules/a-bean/cli/bean/metadata/generate.ts +5 -6
  179. package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +1 -1
  180. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheMem/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  181. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheRedis/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  182. package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +1 -1
  183. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/.metadata/index.ts +13 -2
  184. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/bean/bean.cache.ts +6 -7
  185. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheMemBase.ts → service/cacheMemBase_.ts} +3 -3
  186. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheRedisBase.ts → service/cacheRedisBase_.ts} +3 -3
  187. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +1 -1
  188. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.emailConfirm.ts +2 -2
  189. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.passwordReset.ts +2 -2
  190. package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
  191. package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/bean/summerCache.json.ts +2 -2
  192. package/vona/src/suite-vendor/a-vona/modules/a-orm/cli/databaseDialect/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  193. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  194. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/.metadata/index.ts +4 -3
  195. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.database.ts +3 -3
  196. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts +1 -1
  197. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/schedule.softDeletionPrune.ts +1 -1
  198. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/utils.ts +1 -1
  199. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/index.ts +1 -1
  200. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_cache.ts +1 -1
  201. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_meta.ts +1 -1
  202. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.modelBase.ts +0 -5
  203. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoAggregate.ts +1 -1
  204. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoCreate.ts +1 -1
  205. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +1 -1
  206. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGroup.ts +1 -1
  207. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +1 -1
  208. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoSelectAndCount.ts +1 -1
  209. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoUpdate.ts +1 -1
  210. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/index.ts +1 -0
  211. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/modelCacheBase.ts +3 -3
  212. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relations.ts +1 -1
  213. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsDynamic.ts +1 -1
  214. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsMutate.ts +1 -1
  215. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsStatic.ts +1 -1
  216. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheEntity_.ts +1 -1
  217. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheQuery_.ts +1 -1
  218. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/database.ts +2 -2
  219. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean/bean.databaseDialectBase.ts → service/databaseDialectBase_.ts} +38 -41
  220. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/db_.ts +2 -2
  221. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +3 -3
  222. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/database.ts +0 -5
  223. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoGet.ts +1 -1
  224. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoMutate.ts +1 -1
  225. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoSelectAndCount.ts +1 -1
  226. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/model.ts +1 -1
  227. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelAggr.ts +1 -1
  228. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelCount.ts +1 -1
  229. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGeneral.ts +1 -1
  230. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGroup.ts +1 -1
  231. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelIncrement.ts +1 -1
  232. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relations.ts +1 -1
  233. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsColumns.ts +1 -1
  234. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDef.ts +1 -1
  235. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefDynamic.ts +1 -1
  236. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefMutate.ts +1 -1
  237. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsMutate.ts +1 -1
  238. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsTables.ts +1 -1
  239. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +1 -1
  240. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.betterSqlite3.ts +2 -2
  241. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql.ts +2 -2
  242. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.pg.ts +2 -2
  243. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  244. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +109 -40
  245. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +2 -2
  246. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
  247. package/vona/src/suite-vendor/a-vona/modules/a-startup/src/bean/cacheRedis.startupDebounce.ts +2 -2
  248. package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  249. package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +1 -1
  250. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/.metadata/index.ts +1 -1
  251. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/bean/bean.summer.ts +3 -3
  252. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localMem_.ts +3 -3
  253. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localRedis_.ts +3 -3
  254. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/{bean/bean.summerCacheBase.ts → service/summerCacheBase_.ts} +3 -3
  255. package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +1 -1
  256. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.rapidoc.ts +2 -2
  257. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.swagger.ts +2 -2
  258. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
  259. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/cacheRedis.authToken.ts +2 -2
  260. package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +1 -1
  261. package/vona/src/suite-vendor/a-vona/modules/a-worker/src/bean/cacheRedis.workerAlive.ts +2 -2
  262. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  263. package/zova/README.md +5 -5
  264. package/zova/README.zh-CN.md +4 -4
  265. package/zova/package.original.json +4 -4
  266. package/zova/packages-cli/cli/package.json +2 -2
  267. package/zova/packages-cli/cli-set-front/package.json +2 -2
  268. package/zova/packages-utils/zova-jsx/package.json +2 -2
  269. package/zova/packages-utils/zova-vite/package.json +2 -2
  270. package/zova/packages-utils/zova-vite/templates/app/controller.tsx_ +3 -3
  271. package/zova/packages-zova/zova/package.json +3 -3
  272. package/zova/packages-zova/zova-core/package.json +2 -2
  273. package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +3 -3
  274. package/zova/packages-zova/zova-core/src/bean/beanControllerPageBase.ts +1 -0
  275. package/zova/packages-zova/zova-core/src/core/component/module.ts +16 -16
  276. package/zova/packages-zova/zova-core/src/core/context/component.ts +35 -3
  277. package/zova/packages-zova/zova-core/src/core/context/util.ts +15 -11
  278. package/zova/pnpm-lock.yaml +1596 -1679
  279. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +11 -0
  280. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/toolMinimal.ts +9 -0
  281. package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolMinimal/controller.tsx +11 -0
  282. package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +10 -0
  283. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  284. package/zova/src/suite-vendor/a-zova/modules/a-model/src/service/storage.ts +4 -5
  285. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  286. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/monkey.ts +1 -1
  287. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  288. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +36 -1
  289. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +7 -2
  290. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +3 -0
  291. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
  292. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +70 -29
  293. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  294. package/zova/src/suite-vendor/a-zova/package.json +6 -6
  295. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud.ts +0 -0
  296. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_inner.ts +0 -0
  297. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_table.ts +0 -0
  298. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_knex.ts +0 -0
  299. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_utils.ts +0 -0
  300. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_view.ts +0 -0
@@ -0,0 +1,250 @@
1
+ # Environment and Config Guide
2
+
3
+ ## Why this guide matters
4
+
5
+ Zova uses a multi-dimensional environment and configuration model so frontend behavior can vary cleanly across runtime scenarios without scattering ad hoc conditionals through the codebase.
6
+
7
+ That matters because SSR, SPA, edition-specific flavors, and deployment-specific variants all need a shared way to select the right settings.
8
+
9
+ ## The three core dimensions
10
+
11
+ Zova’s frontend runtime model is built around three dimensions:
12
+
13
+ - **mode**
14
+ - **appMode**
15
+ - **flavor**
16
+
17
+ Together they determine which env variables, config files, and script paths should be active.
18
+
19
+ ## Runtime mode
20
+
21
+ Runtime mode describes whether the app is running in:
22
+
23
+ - `development`
24
+ - `production`
25
+
26
+ This affects script behavior, environment loading, and tree-shakeable flags such as `DEV` and `PROD`.
27
+
28
+ ## App mode
29
+
30
+ App mode describes the application delivery model, such as:
31
+
32
+ - `ssr`
33
+ - `spa`
34
+
35
+ This matters because SSR and SPA have different runtime assumptions, build paths, and environment-sensitive code behavior.
36
+
37
+ ## Flavor
38
+
39
+ Flavor adds a third dimension so the frontend can support different product or UI variants without flattening everything into only one mode axis.
40
+
41
+ Representative built-in flavors include:
42
+
43
+ - `admin`
44
+ - `web`
45
+ - `cabloyBasicAdmin`
46
+ - `cabloyStartAdmin`
47
+ - `cabloyStartWeb`
48
+
49
+ Flavor is especially important in Cabloy because Basic and Start do not always share the same frontend stack or output assumptions.
50
+
51
+ ## Env-file loading model
52
+
53
+ Zova loads env files from `env/` using the multi-dimensional model.
54
+
55
+ Representative patterns include:
56
+
57
+ - `.env`
58
+ - `.env.[meta]`
59
+ - `.env.local`
60
+ - `.env.[meta].local`
61
+
62
+ This means env loading is layered and conditional rather than single-file only.
63
+
64
+ ## Config-file loading model
65
+
66
+ Zova also loads frontend config files from `src/front/config/config/` using the same multi-dimensional logic.
67
+
68
+ Representative patterns include:
69
+
70
+ - `config.ts`
71
+ - `config.[meta].ts`
72
+ - `config.local.ts`
73
+ - `config.[meta].local.ts`
74
+
75
+ That keeps env variables and frontend config aligned around the same runtime-selection model.
76
+
77
+ ## Resolution principle
78
+
79
+ The practical rule is:
80
+
81
+ - base files always load
82
+ - meta-specific files load when their dimensions match
83
+ - `.local` files override while remaining git-ignored
84
+
85
+ This lets projects combine shared defaults with scenario-specific and local overrides cleanly.
86
+
87
+ A representative SSR admin development stack looks like:
88
+
89
+ ```txt
90
+ .env
91
+ .env.ssr
92
+ .env.ssr.admin
93
+ .env.ssr.admin.development
94
+ .env.local
95
+ .env.ssr.local
96
+ .env.ssr.admin.local
97
+ .env.ssr.admin.development.local
98
+ ```
99
+
100
+ The config side follows the same merge pattern with `config.ts`, `config.[meta].ts`, and `.local` variants.
101
+
102
+ ## Scripts and runtime variants
103
+
104
+ Frontend scripts map directly onto the same runtime dimensions.
105
+
106
+ Representative commands include variants such as:
107
+
108
+ - `dev:ssr:admin`
109
+ - `build:ssr:admin`
110
+ - `preview:ssr:admin`
111
+ - `dev:ssr:web`
112
+ - `build:ssr:web`
113
+ - `dev:spa`
114
+ - `dev:ssr:cabloyBasicAdmin`
115
+ - `build:ssr:cabloyBasicWeb`
116
+
117
+ Representative current-repo script shapes include:
118
+
119
+ ```json
120
+ {
121
+ "dev": "npm run dev:ssr:admin",
122
+ "build": "npm run build:ssr:admin",
123
+ "preview": "npm run preview:ssr:admin",
124
+ "dev:ssr:admin": "npm run prerun && quasar dev --mode ssr --flavor admin",
125
+ "dev:ssr:web": "npm run prerun && quasar dev --mode ssr --flavor web",
126
+ "dev:spa": "npm run prerun && quasar dev --mode spa --flavor admin"
127
+ }
128
+ ```
129
+
130
+ That means scripts are not just convenience aliases. They are the operational surface for selecting mode, appMode, and flavor.
131
+
132
+ For current monorepo usage, also see [Frontend Scripts](/frontend/scripts).
133
+
134
+ ## Tree-shakeable env flags
135
+
136
+ Some environment variables are especially important because they support tree-shaking or compile-time branching.
137
+
138
+ Representative flags include:
139
+
140
+ - `META_MODE`
141
+ - `META_APP_MODE`
142
+ - `META_FLAVOR`
143
+ - `NODE_ENV`
144
+ - `DEV`
145
+ - `PROD`
146
+ - `SSR`
147
+ - `CLIENT`
148
+ - `SERVER`
149
+
150
+ This is one of the most important reasons environment access should be done deliberately rather than by inventing custom runtime checks everywhere.
151
+
152
+ ## `process.env` vs `sys.env` vs `sys.config`
153
+
154
+ Use the right access path for the right kind of value:
155
+
156
+ - `process.env` for tree-shakeable env-based conditions
157
+ - `sys.env` for runtime env values that are not tree-shaken
158
+ - `sys.config` for the merged frontend config model
159
+
160
+ Representative patterns:
161
+
162
+ ```typescript
163
+ if (process.env.DEV) {
164
+ console.log('for development');
165
+ }
166
+
167
+ const publicPath = this.sys.env.APP_PUBLIC_PATH;
168
+ const apiBaseURL = this.sys.config.api.baseURL;
169
+ const flavor = this.sys.config.meta.flavor;
170
+ ```
171
+
172
+ This distinction is central to writing Zova code that behaves correctly across builds and runtime variants.
173
+
174
+ ## Built-in env variables
175
+
176
+ Zova exposes built-in variables covering areas such as:
177
+
178
+ - app identity
179
+ - router mode
180
+ - dev-server settings
181
+ - project-disabled suites/modules
182
+ - build output settings
183
+ - API/proxy configuration
184
+ - SSR-specific values
185
+ - mock configuration
186
+
187
+ That means many common project-level knobs already exist and should be reused before inventing project-specific patterns.
188
+
189
+ ## Custom flavors
190
+
191
+ Projects can define custom flavors when built-in variants are not enough.
192
+
193
+ This usually requires:
194
+
195
+ - adding scripts that pass the new `--flavor` value
196
+ - using `META_FLAVOR` or `sys.config.meta.flavor` in code
197
+ - optionally augmenting type definitions for better autocomplete
198
+
199
+ Representative flavor type extension:
200
+
201
+ ```typescript
202
+ declare module '@cabloy/module-info' {
203
+ export interface ZovaMetaFlavorExtend {
204
+ customA: never;
205
+ }
206
+ }
207
+ ```
208
+
209
+ In the VSCode workflow, the `recordflavor` snippet can generate this augmentation skeleton.
210
+
211
+ ## Async config loading
212
+
213
+ Frontend config files can also load asynchronously when configuration must be derived from a remote or generated source.
214
+
215
+ Representative pattern:
216
+
217
+ ```typescript
218
+ export default async function (_sys: ZovaSys) {
219
+ const config: ZovaConfigOptional = {};
220
+
221
+ // async load remote config
222
+
223
+ return config;
224
+ }
225
+ ```
226
+
227
+ That should be used deliberately, because asynchronous config still participates in the same startup and merge model.
228
+
229
+ ## Relationship to other frontend guides
230
+
231
+ Read this guide together with:
232
+
233
+ - [Frontend Scripts](/frontend/scripts)
234
+ - [SSR Environment Variables](/frontend/ssr-env)
235
+ - [Frontend Quickstart](/frontend/quickstart)
236
+ - [App Startup Guide](/frontend/app-startup-guide)
237
+ - [System Startup Guide](/frontend/system-startup-guide)
238
+
239
+ These guides explain the operational script surface, SSR-specific environment concerns, and the monorepo-first starting path.
240
+
241
+ ## Implementation checks for runtime-sensitive changes
242
+
243
+ When changing frontend runtime-sensitive code, ask:
244
+
245
+ 1. does this behavior depend on mode, appMode, flavor, or more than one of them?
246
+ 2. should this logic read from `process.env`, `sys.env`, or `sys.config`?
247
+ 3. is there already a built-in env/config variable for this concern?
248
+ 4. does the active edition change which flavor or script family is correct?
249
+
250
+ That helps AI keep frontend runtime behavior aligned with Zova’s actual configuration model.
@@ -0,0 +1,58 @@
1
+ # Frontend Foundation
2
+
3
+ This guide explains the core architectural role of Zova in the Cabloy monorepo.
4
+
5
+ ## What Zova is in Cabloy
6
+
7
+ Zova is the frontend half of the Cabloy fullstack architecture.
8
+
9
+ It is an intuitive frontend framework that combines strengths associated with Vue3 reactivity, React-style TSX rendering, and Angular-style IOC.
10
+
11
+ ## Why that matters in practice
12
+
13
+ The point of this combination is not branding. The point is to make large business systems feel more natural to write and maintain.
14
+
15
+ Three enduring ideas define this design:
16
+
17
+ - intuitive reactive code
18
+ - elegant structure for complex systems
19
+ - strong extensibility through IOC and AOP patterns
20
+
21
+ ## UI-library flexibility
22
+
23
+ One point still matters throughout the monorepo docs:
24
+
25
+ Zova is not tied to one UI library.
26
+
27
+ That flexibility matters directly for Cabloy’s edition model:
28
+
29
+ - **Shared frontend engineering layer**: both editions follow the same Zova-centered frontend direction, with Vue, Vite, Quasar tooling, and related libraries
30
+ - **Cabloy Basic UI layer**: current public docs and examples align with DaisyUI + Tailwind CSS
31
+ - **Cabloy Start UI layer**: the private commercial edition aligns with Vuetify-oriented frontend modules, workflows, and SSR site baselines
32
+
33
+ So docs and skills must separate shared Zova principles from edition-specific UI assumptions.
34
+
35
+ ## Enduring frontend capabilities
36
+
37
+ The highest-value Zova capabilities to preserve in the unified docs are:
38
+
39
+ - SSR support across `SSR`, `SPA`, `Web`, and `Admin` flows
40
+ - dual-layer tabs navigation
41
+ - CRUD-oriented rendering patterns
42
+ - model-based unified state management
43
+ - CSS-in-JS and theme support
44
+ - IOC + AOP extensibility
45
+ - compatibility with multiple UI-library strategies
46
+
47
+ For the deeper architectural concepts behind IoC, module boundaries, and scope-based resources, see [IoC and Beans](/frontend/ioc-and-beans), [Modules and Suites](/frontend/modules-and-suites), and [Module Scope](/frontend/module-scope). For the runtime-variant and startup model, see [Environment and Config Guide](/frontend/environment-config-guide), [App Startup Guide](/frontend/app-startup-guide), and [System Startup Guide](/frontend/system-startup-guide).
48
+
49
+ ## Why this matters for AI development
50
+
51
+ AI systems should not treat Zova as generic Vue with a few utilities.
52
+
53
+ Instead, they should:
54
+
55
+ - preserve Zova’s model, IOC, and AOP conventions
56
+ - detect the active edition before assuming a UI-library workflow
57
+ - prefer the Zova CLI for scaffolding and refactor work
58
+ - verify that the generated or edited code still matches Zova’s actual architecture
@@ -0,0 +1,35 @@
1
+ # Generic Component Guide
2
+
3
+ This guide explains how generic components work in Zova within the Cabloy monorepo.
4
+
5
+ ## Why generic components matter
6
+
7
+ Zova supports generic components so strongly typed reusable components can preserve richer type information across usage sites.
8
+
9
+ This matters in large TypeScript-heavy systems because generic components help keep abstraction reusable without giving up strong typing.
10
+
11
+ ## Convert a component to a generic component
12
+
13
+ Example: convert component `card` into a generic component.
14
+
15
+ ```bash
16
+ npm run zova :refactor:componentGeneric card -- --module=demo-student
17
+ ```
18
+
19
+ ## Why the CLI matters here
20
+
21
+ This topic is intentionally short, but the implication is important: generic-component conversion is not treated as an ad hoc manual rewrite. It is part of the framework’s supported refactor surface.
22
+
23
+ That means the safest default is to let the Zova refactor command establish the skeleton first, then refine the typing and behavior.
24
+
25
+ ## Implementation checks for reusable component design
26
+
27
+ When you see a component that is reused across multiple typed data shapes, ask whether the right answer is a generic component instead of copying the component into several near-duplicate variants.
28
+
29
+ A better default is:
30
+
31
+ 1. inspect whether the component really needs generic typing
32
+ 2. use the Zova generic-component refactor command
33
+ 3. refine the resulting type surface instead of inventing a framework-foreign pattern
34
+
35
+ That keeps generic typing aligned with Zova’s supported refactor workflow.
@@ -0,0 +1,88 @@
1
+ # Icon Engine Guide
2
+
3
+ This guide explains how the icon engine works in Zova within the Cabloy monorepo.
4
+
5
+ ## Why the icon engine exists
6
+
7
+ In large systems, no fixed built-in icon set is ever enough.
8
+
9
+ Zova’s icon engine solves that problem by treating icons as a modular, asynchronous, UI-library-independent resource system.
10
+
11
+ ## Core advantages
12
+
13
+ Several important advantages stand out:
14
+
15
+ - easy icon maintenance
16
+ - performance-conscious loading behavior
17
+ - asynchronous loading on demand
18
+ - UI-library independence
19
+
20
+ This is especially important for Cabloy because the same icon strategy should work across Basic and Start even when their UI libraries differ.
21
+
22
+ ## Basic concepts
23
+
24
+ The icon engine is organized around two ideas:
25
+
26
+ ### Icon group
27
+
28
+ A group combines multiple SVG icons into one asynchronously loaded unit.
29
+
30
+ ### Icon module
31
+
32
+ An icon module can contain multiple groups, and a system can contain multiple icon modules.
33
+
34
+ ## Naming convention
35
+
36
+ The naming convention is:
37
+
38
+ ```text
39
+ {moduleName}:{groupName}:{iconName}
40
+ ```
41
+
42
+ Representative example:
43
+
44
+ - full name: `home-icon:default:add`
45
+
46
+ There are also shorthand rules, such as:
47
+
48
+ - `::add`
49
+ - `:auth:github`
50
+ - `test-othericon::icon`
51
+
52
+ This matters because icon use is part of the framework’s typed, discoverable resource model.
53
+
54
+ ## Access helpers
55
+
56
+ Two important helpers are:
57
+
58
+ - `icon` for typed icon-name access and completion
59
+ - `iconh` for directly generating the icon vnode
60
+
61
+ ## UI-library independence
62
+
63
+ The icon engine exposes a unified interface that can be used from multiple UI libraries.
64
+
65
+ This is one of the clearest places where Zova’s architecture deliberately protects higher-level app code from UI-library churn.
66
+
67
+ ## Create and build icons
68
+
69
+ A simple process looks like this:
70
+
71
+ 1. initialize the icon skeleton
72
+ 2. place SVG icons into the module/group directory
73
+ 3. regenerate metadata
74
+
75
+ The metadata generation step matters because icons are part of the framework’s typed resource graph.
76
+
77
+ ## Implementation checks for icon-related changes
78
+
79
+ When adding icons, do not hardcode one-off icon usage patterns too quickly.
80
+
81
+ A better default is to ask:
82
+
83
+ 1. should the icon belong in an existing icon module or a new one?
84
+ 2. what group should own it?
85
+ 3. should metadata be regenerated after adding the icon?
86
+ 4. is the chosen icon usage path still UI-library-independent?
87
+
88
+ That keeps icon work maintainable and consistent across editions.
@@ -0,0 +1,33 @@
1
+ # Frontend (Zova)
2
+
3
+ This page is the frontend hub for Cabloy users, contributors, and AI vibe coding workflows that need the frontend side of the framework.
4
+
5
+ Zova is the frontend half of Cabloy’s one-framework-system fullstack architecture.
6
+
7
+ ## What Zova is responsible for
8
+
9
+ - page and component architecture
10
+ - SSR, SPA, Web, and Admin rendering flows
11
+ - data access patterns such as `$fetch`, `$api`, and generated SDKs
12
+ - UI library integration
13
+ - route, icon, and component type generation
14
+ - frontend-side refactors and code generation through the Zova CLI
15
+
16
+ ## How to approach frontend work
17
+
18
+ For contributor and automation workflows in this repository, prefer this order:
19
+
20
+ 1. inspect the root `package.json` and `npm run zova` entrypoint
21
+ 2. inspect Zova CLI command families such as `create:*`, `init:*`, `refactor:*`, `tools:*`, and `openapi:*`
22
+ 3. inspect the active edition before assuming a UI stack
23
+ 4. document shared concepts once, then isolate edition-specific notes where the module set or UI library differs
24
+
25
+ ## Edition impact
26
+
27
+ Frontend work is where Cabloy Basic and Cabloy Start differ most clearly.
28
+
29
+ - **Shared frontend engineering layer**: both editions follow the same Zova-centered frontend direction, with Vue, Vite, Quasar tooling, and related libraries.
30
+ - **Cabloy Basic UI layer**: current public docs and examples align with DaisyUI + Tailwind CSS.
31
+ - **Cabloy Start UI layer**: the private commercial edition aligns with Vuetify and ships different frontend modules, SSR site baselines, and project assets.
32
+
33
+ Because of this, automation and docs should always detect the active edition before recommending page-level, component-level, or UI-library-specific work.
@@ -0,0 +1,211 @@
1
+ # IoC and Beans
2
+
3
+ ## Why IoC matters in Zova
4
+
5
+ Zova uses IoC as a unifying frontend architecture rather than treating it as a small dependency-injection helper.
6
+
7
+ That matters because state sharing, resource access, lifecycle behavior, and cross-module composition all need to stay structured as the system grows.
8
+
9
+ ## The four state-sharing scopes
10
+
11
+ A key Zova idea is that several common sharing scopes can be handled through one IoC-centered model:
12
+
13
+ - component-internal
14
+ - between-components
15
+ - app-global
16
+ - system-level
17
+
18
+ This replaces the need to switch constantly between unrelated mechanisms for each sharing scope.
19
+
20
+ ## The three container types
21
+
22
+ Zova uses three main IoC containers:
23
+
24
+ - **sys container** for system-wide singleton-style beans
25
+ - **app container** for request-scoped or app-scoped beans
26
+ - **ctx container** for component-instance-local beans
27
+
28
+ This is one of the main reasons Zova can support both SSR-aware behavior and strongly structured frontend logic.
29
+
30
+ ## Bean classes
31
+
32
+ Zova’s IoC model is built around bean classes provided by modules.
33
+
34
+ All beans inherit from `BeanBase`, which exposes common framework capabilities and gives each bean a structured place inside the broader frontend architecture.
35
+
36
+ ## `BeanBase`
37
+
38
+ `BeanBase` provides built-in members and is also a host for extended members injected by modules and adapters.
39
+
40
+ Representative members include:
41
+
42
+ - `sys`
43
+ - `app`
44
+ - `ctx`
45
+ - `bean`
46
+ - `scope`
47
+ - `$el`
48
+ - `$event`
49
+ - `$ssr`
50
+ - `$useMeta`
51
+
52
+ Page and component beans also get frontend-specific members such as:
53
+
54
+ - `$params`
55
+ - `$query`
56
+ - `$props`
57
+
58
+ Module and UI adapters can further extend the base surface.
59
+
60
+ ## Injection methods
61
+
62
+ Zova supports two main styles:
63
+
64
+ - **dependency injection** through `@Use`
65
+ - **dependency lookup** through the container and scope model
66
+
67
+ A key Zova preference is to keep the code concise by favoring dependency lookup where it leads to clearer business code.
68
+
69
+ ## Resolution rules
70
+
71
+ A bean can be resolved by:
72
+
73
+ - bean class
74
+ - bean identifier
75
+ - registration name
76
+ - variable name
77
+
78
+ The most important design point is that cross-module access should prefer bean identifiers over hardwired file-path coupling.
79
+
80
+ ### Representative `@Use` patterns
81
+
82
+ Same-module injection can stay class-oriented and concise:
83
+
84
+ ```typescript
85
+ import { ModelTodo } from '../../bean/model.todo.js';
86
+
87
+ class ControllerTodo {
88
+ @Use()
89
+ $$modelTodo: ModelTodo;
90
+ }
91
+ ```
92
+
93
+ Cross-module injection should usually prefer a bean identifier so the consuming module does not depend on the provider’s internal file path layout:
94
+
95
+ ```typescript
96
+ import type { ModelTabs } from 'zova-module-a-routertabs';
97
+
98
+ class ControllerLayout {
99
+ @Use('a-routertabs.model.tabs')
100
+ $$modelTabs: ModelTabs;
101
+ }
102
+ ```
103
+
104
+ In practice, Zova can still preserve the ergonomic class-based development experience while compiling cross-module usage back toward bean-identifier-based resolution.
105
+
106
+ ### Hierarchical injection patterns
107
+
108
+ Hierarchical injection replaces many cases where a generic Vue app would fall back to `provide/inject`.
109
+
110
+ Representative child lookup pattern:
111
+
112
+ ```typescript
113
+ import type { ModelTabs } from 'zova-module-a-routertabs';
114
+
115
+ class Child {
116
+ @Use({ injectionScope: 'host' })
117
+ $$modelTabs: ModelTabs;
118
+ }
119
+ ```
120
+
121
+ That keeps parent/child sharing aligned with the same IoC model instead of introducing a separate state-sharing mechanism.
122
+
123
+ ## Injection scopes
124
+
125
+ Zova supports several injection scopes:
126
+
127
+ - `sys`
128
+ - `app`
129
+ - `ctx`
130
+ - `new`
131
+ - `host`
132
+ - `skipSelf`
133
+
134
+ This allows code to be explicit about whether a bean should be shared globally, per request, per component instance, or created fresh.
135
+
136
+ ## Hierarchical injection
137
+
138
+ The `host` and `skipSelf` scopes provide hierarchical lookup behavior.
139
+
140
+ This replaces much of the conventional Vue `provide/inject` style with an IoC-native rule set.
141
+
142
+ That means parent/child sharing can stay aligned with the same overall bean model instead of becoming a separate architectural subsystem.
143
+
144
+ ## Lifecycle
145
+
146
+ All beans can define two lifecycle methods:
147
+
148
+ - `__init__`
149
+ - `__dispose__`
150
+
151
+ These lifecycle hooks are important because they give beans a structured place for initialization and cleanup logic.
152
+
153
+ Representative uses include:
154
+
155
+ - computed setup
156
+ - watchers
157
+ - derived state wiring
158
+ - resource cleanup
159
+
160
+ Representative initialization pattern:
161
+
162
+ ```typescript
163
+ export class Counter {
164
+ count: number = 0;
165
+ count2: string;
166
+
167
+ protected async __init__() {
168
+ this.count2 = this.$computed(() => {
169
+ return `=== ${this.count} ===`;
170
+ });
171
+
172
+ this.$watch(
173
+ () => this.count,
174
+ () => {
175
+ console.log('changed: ', this.count);
176
+ },
177
+ );
178
+ }
179
+ }
180
+ ```
181
+
182
+ That gives a bean one consistent place to wire reactive behavior instead of scattering setup logic through unrelated hooks.
183
+
184
+ ## Bean identifiers and loose coupling
185
+
186
+ Bean identifiers are a key part of Zova’s modular architecture.
187
+
188
+ They make cross-module access more stable and decoupled than always relying on direct file-path imports.
189
+
190
+ This matters especially in large systems, where business modules should remain reusable and composable.
191
+
192
+ ## Relationship to other frontend guides
193
+
194
+ Read this together with:
195
+
196
+ - [Modules and Suites](/frontend/modules-and-suites)
197
+ - [Module Scope](/frontend/module-scope)
198
+ - [Frontend Design Principles](/frontend/design-principles)
199
+
200
+ Those pages explain how beans fit into module boundaries, scope-based resources, and the broader Zova architectural model.
201
+
202
+ ## Implementation checks for frontend bean-architecture changes
203
+
204
+ When editing Zova frontend code, ask:
205
+
206
+ 1. should this behavior live in a bean instead of a framework-neutral helper?
207
+ 2. is the right sharing scope `ctx`, `app`, or `sys`?
208
+ 3. should dependency injection or dependency lookup be preferred here?
209
+ 4. does this component or page already rely on lifecycle hooks, hierarchical injection, or bean identifiers that should be preserved?
210
+
211
+ That helps AI keep frontend changes aligned with Zova’s real architectural model instead of drifting toward generic Vue patterns.