cabloy 5.1.52 → 5.1.54
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-frontend-scaffold/SKILL.md +10 -0
- package/.github/workflows/docs-pages.yml +1 -1
- package/.github/workflows/vona-cov-pg.yml +1 -1
- package/.github/workflows/vona-test-crud.yml +1 -1
- package/.github/workflows/vona-test-mysql.yml +1 -1
- package/.github/workflows/vona-test-pg.yml +1 -1
- package/.github/workflows/vona-test-sqlite3.yml +1 -1
- package/.github/workflows/vona-tsc.yml +1 -1
- package/.github/workflows/zova-ui.yml +1 -1
- package/CHANGELOG.md +33 -0
- package/CLAUDE.md +3 -0
- package/README.md +8 -8
- package/cabloy-docs/.vitepress/config.mjs +144 -50
- package/cabloy-docs/ai/introduction.md +44 -0
- package/cabloy-docs/backend/model-guide.md +7 -0
- package/cabloy-docs/backend/orm-mutation-guide.md +10 -0
- package/cabloy-docs/backend/orm-select-guide.md +7 -6
- package/cabloy-docs/backend/quickstart.md +9 -9
- package/cabloy-docs/editions/cabloy-start.md +3 -3
- package/cabloy-docs/editions/choosing-between-basic-and-start.md +5 -5
- package/cabloy-docs/editions/overview.md +34 -3
- package/cabloy-docs/frontend/css-in-js-guide.md +1 -1
- package/cabloy-docs/frontend/environment-config-guide.md +28 -0
- package/cabloy-docs/frontend/foundation.md +1 -1
- package/cabloy-docs/frontend/introduction.md +69 -1
- package/cabloy-docs/frontend/navigation-guards-guide.md +1 -1
- package/cabloy-docs/frontend/quickstart.md +1 -0
- package/cabloy-docs/frontend/scripts.md +1 -1
- package/cabloy-docs/frontend/ssr-env.md +23 -0
- package/cabloy-docs/frontend/theme-guide.md +140 -7
- package/cabloy-docs/fullstack/cli.md +6 -6
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +1 -1
- package/cabloy-docs/fullstack/introduction.md +39 -1
- package/cabloy-docs/fullstack/quickstart.md +8 -8
- package/cabloy-docs/fullstack/vona-zova-integration.md +1 -1
- package/cabloy-docs/index.md +1 -1
- package/cabloy-docs/pnpm-workspace.yaml +2 -0
- package/cabloy-docs/reference/cli-reference.md +65 -20
- package/cabloy-docs/reference/frontend-directory-structure.md +125 -0
- package/cabloy-docs/reference/introduction.md +47 -0
- package/cabloy-docs/reference/package-map.md +2 -0
- package/cabloy-docs/reference/repo-scripts.md +5 -3
- package/package.json +3 -3
- package/scripts/init.ts +18 -0
- package/vona/README.md +5 -5
- package/vona/README.zh-CN.md +5 -5
- package/vona/package.original.json +1 -6
- package/vona/packages-cli/cabloy-cli/package.json +2 -2
- package/vona/packages-cli/cli/README.md +56 -0
- package/vona/packages-cli/cli/package.json +1 -1
- package/vona/packages-cli/cli/src/bin/vona.ts +0 -26
- package/vona/packages-cli/cli-set-api/README.md +48 -0
- package/vona/packages-cli/cli-set-api/cli/templates/create/module/boilerplate/_package.json +1 -1
- package/vona/packages-cli/cli-set-api/package.json +2 -2
- package/vona/packages-cli/cli-set-api/src/lib/bean/cli.bin.test.ts +16 -5
- package/vona/packages-cli/cli-set-api/src/lib/command/bin.build.ts +2 -2
- package/vona/packages-cli/cli-set-api/src/lib/command/bin.buildGeneral.ts +1 -1
- package/vona/packages-cli/cli-set-api/src/lib/command/bin.buildModule.ts +1 -1
- package/vona/packages-cli/cli-set-api/src/lib/command/bin.play.ts +2 -1
- package/vona/packages-cli/cli-set-api/src/lib/command/bin.test.ts +1 -1
- package/vona/packages-utils/cascade-extend/package.json +2 -2
- package/vona/packages-utils/compose/package.json +2 -2
- package/vona/packages-utils/deps/package.json +2 -2
- package/vona/packages-utils/dotenv/package.json +2 -2
- package/vona/packages-utils/extend/package.json +2 -2
- package/vona/packages-utils/json5/package.json +2 -2
- package/vona/packages-utils/lint/package.json +1 -1
- package/vona/packages-utils/lint/src/oxc/lint.ts +1 -4
- package/vona/packages-utils/lint/src/oxc/lintVue.ts +1 -4
- package/vona/packages-utils/localeutil/package.json +2 -2
- package/vona/packages-utils/module-glob/package.json +2 -2
- package/vona/packages-utils/module-info-pro/package.json +2 -2
- package/vona/packages-utils/password-hash-salt/package.json +2 -2
- package/vona/packages-utils/process-helper/package.json +2 -2
- package/vona/packages-utils/socket/package.json +2 -2
- package/vona/packages-utils/table-identity/package.json +2 -2
- package/vona/packages-utils/utils/package.json +2 -2
- package/vona/packages-utils/zod-errors-custom/package.json +2 -2
- package/vona/packages-utils/zod-openapi/package.json +2 -2
- package/vona/packages-utils/zod-query/package.json +2 -2
- package/vona/packages-vona/vona/package.json +2 -2
- package/vona/packages-vona/vona-core/package.json +2 -2
- package/vona/packages-vona/vona-mock/package.json +2 -2
- package/vona/packages-vona/vona-shared/package.json +2 -2
- package/vona/pnpm-lock.yaml +1520 -1826
- package/vona/pnpm-workspace.yaml +28 -7
- package/vona/src/suite/a-demo/modules/demo-basic/package.json +1 -1
- package/vona/src/suite/a-home/modules/home-base/package.json +1 -1
- package/vona/src/suite/a-home/modules/home-index/package.json +1 -1
- package/vona/src/suite/a-home/modules/home-user/package.json +1 -1
- package/vona/src/suite/cabloy-basic/modules/basic-siteadmin/package.json +1 -1
- package/vona/src/suite/cabloy-basic/modules/basic-siteweb/package.json +1 -1
- package/vona/src/suite-vendor/a-auth/modules/a-auth/package.json +2 -2
- package/vona/src/suite-vendor/a-auth/modules/auth-oauth/package.json +2 -2
- package/vona/src/suite-vendor/a-auth/modules/auth-simple/package.json +2 -2
- package/vona/src/suite-vendor/a-auth/package.json +2 -2
- package/vona/src/suite-vendor/a-cabloy/modules/a-cabloy/package.json +2 -2
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +2 -2
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasource/package.json +2 -2
- package/vona/src/suite-vendor/a-cabloy/modules/a-socket/package.json +2 -2
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +2 -2
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssrhmr/package.json +2 -2
- package/vona/src/suite-vendor/a-cabloy/modules/a-status/package.json +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 +2 -2
- package/vona/src/suite-vendor/a-captcha/modules/captcha-simple/package.json +2 -2
- package/vona/src/suite-vendor/a-captcha/package.json +1 -1
- package/vona/src/suite-vendor/a-paypal/modules/a-paypal/package.json +2 -2
- package/vona/src/suite-vendor/a-paypal/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-aspect/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-aspectutils/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-beanmutate/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-body/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-broadcast/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-caching/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-election/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-error/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-event/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-hmr/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-hmrbase/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-index/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-instance/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-jwt/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-locale/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-logger/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-mail/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-menu/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-meta/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-onion/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-openapischema/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/buildWhere.ts +8 -9
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/bean.model/bean.model_cache.ts +15 -9
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelWhere.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-ormutils/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-play/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-printtip/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-queue/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-redis/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-redlock/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-runtime/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-schedule/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-security/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-serialization/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-static/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-validation/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-version/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-vona/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-web/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-zod/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/zova/package.original.json +2 -15
- package/zova/packages-cli/cli/README.md +58 -0
- package/zova/packages-cli/cli/package.json +4 -4
- package/zova/packages-cli/cli/src/bin/zova.ts +0 -25
- package/zova/packages-cli/cli-set-front/README.md +50 -0
- package/zova/packages-cli/cli-set-front/cli/templates/create/module/boilerplate/_package.json +1 -1
- package/zova/packages-cli/cli-set-front/package.json +7 -7
- package/zova/packages-cli/cli-set-front/src/lib/bean/cli.bin.buildRest.ts +49 -15
- package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -1
- package/zova/packages-cli/cli-set-front/src/lib/bean/toolsMetadata/generateConfig.ts +2 -12
- package/zova/packages-cli/cli-set-front/src/lib/beans.ts +0 -4
- package/zova/packages-cli/cli-set-front/src/lib/command/bin.buildModule.ts +1 -1
- package/zova/packages-cli/cli-set-front/src/lib/command/bin.buildRest.ts +1 -1
- package/zova/packages-utils/logger/package.json +3 -3
- package/zova/packages-utils/zova-jsx/package.json +6 -6
- package/zova/packages-utils/zova-openapi/package.json +2 -2
- package/zova/packages-utils/zova-vite/package.json +6 -6
- package/zova/packages-zova/zova/package.json +4 -4
- package/zova/packages-zova/zova-core/package.json +13 -13
- package/zova/packages-zova/zova-core/src/core/sys/config.ts +1 -1
- package/zova/pnpm-lock.yaml +427 -375
- package/zova/pnpm-workspace.yaml +21 -0
- package/zova/src/front/config/config/config.ts +1 -1
- package/zova/src/suite/a-demo/modules/demo-basic/package.json +1 -1
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-demo/modules/demo-todo/package.json +1 -1
- package/zova/src/suite/a-devui/modules/devui-adapter/package.json +1 -1
- package/zova/src/suite/a-devui/modules/devui-adapter/src/bean/meta.themeHandler.ts +1 -0
- package/zova/src/suite/a-home/modules/home-api/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-base/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-base/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-base/src/service/routerGuards.ts +1 -1
- package/zova/src/suite/a-home/modules/home-base/src/service/ssrLayout.ts +1 -0
- package/zova/src/suite/a-home/modules/home-icon/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-indexadmin/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-indexweb/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-layoutadmin/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-layoutempty/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-layoutweb/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-layoutweb/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +2 -2
- package/zova/src/suite/a-home/modules/home-login/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-login/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-passport/package.json +1 -1
- package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +2 -2
- package/zova/src/suite/a-home/modules/home-theme/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-adapter/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-captcha/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-captcha/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-commands/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-commandssync/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-currency/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-date/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-form/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-form/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-input/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-page/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-page/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-pageentry/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-select/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-table/package.json +1 -1
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-text/package.json +1 -1
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +2 -2
- package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-api/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-app/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-bean/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-behavior/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-behaviors/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-boundary/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-command/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-fetch/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-form/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-icon/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-interceptor/src/bean/interceptor.jwt.ts +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-logger/package.json +3 -3
- package/zova/src/suite-vendor/a-zova/modules/a-meta/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +3 -3
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-routerstack/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +1 -0
- package/zova/src/suite-vendor/a-zova/modules/a-ssrhmr/package.json +3 -3
- package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-style/src/bean/bean.theme.ts +6 -3
- package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-zod/package.json +5 -5
- package/zova/src/suite-vendor/a-zova/modules/a-zod/src/.metadata/locales.ts +0 -15
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +9 -9
- package/zova/src/suite-vendor/a-zova/package.json +26 -26
- package/zova/packages-cli/cli-set-front/src/lib/command/init.legacy.ts +0 -10
- package/zova/packages-cli/cli-set-front/src/lib/command/refactor.componentEmits.ts +0 -33
- package/zova/packages-cli/cli-set-front/src/lib/command/refactor.componentSlots.ts +0 -33
|
@@ -156,6 +156,16 @@ Check whether the feature needs:
|
|
|
156
156
|
- SSR or route-path verification
|
|
157
157
|
- edition-specific flavor, SSR site baseline, and project-asset verification
|
|
158
158
|
|
|
159
|
+
### SSR theme review reminder
|
|
160
|
+
|
|
161
|
+
If the frontend change is SSR theme-sensitive, apply this short review before finishing:
|
|
162
|
+
|
|
163
|
+
- detect the active edition marker and UI library before assuming SSR theme behavior
|
|
164
|
+
- do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff
|
|
165
|
+
- in Web SSR without cookie-backed theme resolution, do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth
|
|
166
|
+
- keep theme-finalization logic inside the active theme handler or client boot path instead of duplicating it in page or component code
|
|
167
|
+
- verify both server handoff and client hydration behavior for the active adapter
|
|
168
|
+
|
|
159
169
|
### Optional backend-contract reminder
|
|
160
170
|
|
|
161
171
|
Stay frontend-first, but if the frontend task clearly depends on backend contract output, add a reminder such as:
|
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
node-version: ${{ matrix.node-version }}
|
|
30
30
|
- uses: pnpm/action-setup@v5
|
|
31
31
|
with:
|
|
32
|
-
version:
|
|
32
|
+
version: 11.5.2
|
|
33
33
|
- name: init
|
|
34
34
|
run: npm run init
|
|
35
35
|
- run: DATABASE_DEFAULT_CLIENT=mysql DATABASE_CLIENT_MYSQL_HOST=127.0.0.1 DATABASE_CLIENT_MYSQL_PASSWORD=root npm run test
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.1.54
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Add a set of incremental feature updates across the codebase to expand supported functionality and behavior.
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
- Support `src/module` test targets.
|
|
12
|
+
- Support module-relative test targets.
|
|
13
|
+
|
|
14
|
+
### Improvements
|
|
15
|
+
|
|
16
|
+
- Clarify ORM omit semantics in tests and documentation.
|
|
17
|
+
- Refine query and model-related internals, including updates to post handling, `where` building, and model cache behavior.
|
|
18
|
+
|
|
19
|
+
## 5.1.53
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
- Update application functionality across core feature areas.
|
|
24
|
+
- Update configuration behavior and related integration points.
|
|
25
|
+
- Update theme configuration and controller handling.
|
|
26
|
+
|
|
27
|
+
### Improvements
|
|
28
|
+
|
|
29
|
+
- Remove the generated `$useLocale` helper.
|
|
30
|
+
- Refresh project configuration files and internal implementation details.
|
|
31
|
+
|
|
32
|
+
### Breaking Changes
|
|
33
|
+
|
|
34
|
+
- Rename the SSR cookie-disabled server flag and update related documentation.
|
|
35
|
+
|
|
3
36
|
## 5.1.52
|
|
4
37
|
|
|
5
38
|
### Features
|
package/CLAUDE.md
CHANGED
|
@@ -44,6 +44,9 @@ Before inventing a custom implementation path:
|
|
|
44
44
|
- Prefer CLI-backed workflows over manual scaffolding whenever Vona or Zova already provides a generator, refactor, metadata, or verification command.
|
|
45
45
|
- Treat legacy docs as input material, not as unquestioned truth. When docs conflict with source code, prefer current source code.
|
|
46
46
|
- For frontend work, assume Cabloy Basic and Cabloy Start share a frontend engineering layer but may diverge in UI layer, frontend flavors, suite/module availability, SSR site baselines, project assets, and generated outputs.
|
|
47
|
+
- For SSR theme-sensitive frontend work, detect the active edition marker and UI library before making assumptions. Cabloy Basic currently means DaisyUI + Tailwind CSS assumptions; Cabloy Start currently means Vuetify assumptions.
|
|
48
|
+
- In Web SSR without cookie-backed theme resolution, do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth. Keep theme-sensitive SSR branching hydration-tolerant or defer final theme-sensitive decisions to the client.
|
|
49
|
+
- Do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff. Verify the active theme handler and client hydration path before changing SSR theme behavior.
|
|
47
50
|
- Reuse existing repo terminology: Cabloy, Vona, Zova, suite, module, bean, SSR, SPA, Web, Admin.
|
|
48
51
|
- For backend base-class placement, use the A / B1 / B2 rule from `cabloy-docs/ai/class-placement-rule.md`.
|
|
49
52
|
- Pure helper bases belong in `src/lib`; subclass-only bases should be evaluated case by case and often belong in `src/lib`.
|
package/README.md
CHANGED
|
@@ -20,14 +20,14 @@ With Vona, Zova, suite-based modules, and CLI-first workflows, Cabloy turns comm
|
|
|
20
20
|
|
|
21
21
|
Before creating a new Cabloy project, make sure your environment has:
|
|
22
22
|
|
|
23
|
-
| Name | Version
|
|
24
|
-
| ---------- |
|
|
25
|
-
| pnpm | `>=
|
|
26
|
-
| Node.js | `>=24.4.0`
|
|
27
|
-
| Redis | `>=7.2.6`
|
|
28
|
-
| SQLite3 | `Built-in`
|
|
29
|
-
| MySQL | `>=8`
|
|
30
|
-
| PostgreSQL | `>=16`
|
|
23
|
+
| Name | Version |
|
|
24
|
+
| ---------- | ---------- |
|
|
25
|
+
| pnpm | `>=11.5.2` |
|
|
26
|
+
| Node.js | `>=24.4.0` |
|
|
27
|
+
| Redis | `>=7.2.6` |
|
|
28
|
+
| SQLite3 | `Built-in` |
|
|
29
|
+
| MySQL | `>=8` |
|
|
30
|
+
| PostgreSQL | `>=16` |
|
|
31
31
|
|
|
32
32
|
- `Redis`: powers queue, schedule, startup, broadcast, caching, two-layer cache, and redlock
|
|
33
33
|
- `SQLite3`: if you use `better-sqlite3`, set up `node-gyp` before installing dependencies
|
|
@@ -31,12 +31,60 @@ const aiItems = [
|
|
|
31
31
|
{ text: 'Verification', link: '/ai/verification' },
|
|
32
32
|
];
|
|
33
33
|
|
|
34
|
-
const
|
|
35
|
-
{
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
const fullstackGroups = [
|
|
35
|
+
{
|
|
36
|
+
text: 'Fullstack / Getting Started',
|
|
37
|
+
items: [
|
|
38
|
+
{ text: 'Introduction', link: '/fullstack/introduction' },
|
|
39
|
+
{ text: 'Quickstart', link: '/fullstack/quickstart' },
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
text: 'Tooling & Workflow',
|
|
44
|
+
items: [
|
|
45
|
+
{ text: 'CLI', link: '/fullstack/cli' },
|
|
46
|
+
{ text: 'VS Code Extensions', link: '/fullstack/vscode-extensions' },
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
text: 'Architecture & Integration',
|
|
51
|
+
items: [
|
|
52
|
+
{
|
|
53
|
+
text: 'Comparison with Other Frameworks',
|
|
54
|
+
link: '/fullstack/comparison-with-other-frameworks',
|
|
55
|
+
},
|
|
56
|
+
{ text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
|
|
57
|
+
{ text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
|
|
58
|
+
{
|
|
59
|
+
text: 'Frontend Metadata Back to Backend',
|
|
60
|
+
link: '/fullstack/frontend-metadata-to-backend',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
text: 'Edition Collaboration Differences',
|
|
64
|
+
link: '/fullstack/edition-collaboration-differences',
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const referenceGroups = [
|
|
71
|
+
{
|
|
72
|
+
text: 'Reference / Workflow Entry',
|
|
73
|
+
items: [
|
|
74
|
+
{ text: 'Introduction', link: '/reference/introduction' },
|
|
75
|
+
{ text: 'Repo Scripts', link: '/reference/repo-scripts' },
|
|
76
|
+
{ text: 'CLI Reference', link: '/reference/cli-reference' },
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
text: 'Structure & Lookup',
|
|
81
|
+
items: [
|
|
82
|
+
{ text: 'Package Map', link: '/reference/package-map' },
|
|
83
|
+
{ text: 'Backend Directory Structure', link: '/reference/backend-directory-structure' },
|
|
84
|
+
{ text: 'Frontend Directory Structure', link: '/reference/frontend-directory-structure' },
|
|
85
|
+
{ text: 'Glossary', link: '/reference/glossary' },
|
|
86
|
+
],
|
|
87
|
+
},
|
|
40
88
|
];
|
|
41
89
|
|
|
42
90
|
const GA_MEASUREMENT_ID = process.env.GA_MEASUREMENT_ID;
|
|
@@ -74,46 +122,27 @@ export default defineConfig({
|
|
|
74
122
|
nav: [
|
|
75
123
|
{ text: 'Home', link: '/' },
|
|
76
124
|
{ text: 'Fullstack', link: '/fullstack/introduction', activeMatch: '^/fullstack/' },
|
|
77
|
-
{ text: 'Backend', link: '/backend/introduction', activeMatch: '^/backend/' },
|
|
78
|
-
{ text: 'Frontend', link: '/frontend/introduction', activeMatch: '^/frontend/' },
|
|
125
|
+
{ text: 'Backend (Vona)', link: '/backend/introduction', activeMatch: '^/backend/' },
|
|
126
|
+
{ text: 'Frontend (Zova)', link: '/frontend/introduction', activeMatch: '^/frontend/' },
|
|
79
127
|
{ text: 'Editions', link: '/editions/overview', activeMatch: '^/editions/' },
|
|
80
128
|
{ text: 'AI Development', link: '/ai/introduction', activeMatch: '^/ai/' },
|
|
81
|
-
{ text: 'Reference', link: '/reference/
|
|
129
|
+
{ text: 'Reference', link: '/reference/introduction', activeMatch: '^/reference/' },
|
|
82
130
|
],
|
|
83
131
|
sidebar: {
|
|
84
|
-
'/fullstack/':
|
|
85
|
-
{
|
|
86
|
-
text: 'Fullstack',
|
|
87
|
-
items: [
|
|
88
|
-
{ text: 'Introduction', link: '/fullstack/introduction' },
|
|
89
|
-
{
|
|
90
|
-
text: 'Comparison with Other Frameworks',
|
|
91
|
-
link: '/fullstack/comparison-with-other-frameworks',
|
|
92
|
-
},
|
|
93
|
-
{ text: 'Quickstart', link: '/fullstack/quickstart' },
|
|
94
|
-
{ text: 'CLI', link: '/fullstack/cli' },
|
|
95
|
-
{ text: 'VS Code Extensions', link: '/fullstack/vscode-extensions' },
|
|
96
|
-
{ text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
|
|
97
|
-
{ text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
|
|
98
|
-
{
|
|
99
|
-
text: 'Frontend Metadata Back to Backend',
|
|
100
|
-
link: '/fullstack/frontend-metadata-to-backend',
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
text: 'Edition Collaboration Differences',
|
|
104
|
-
link: '/fullstack/edition-collaboration-differences',
|
|
105
|
-
},
|
|
106
|
-
],
|
|
107
|
-
},
|
|
108
|
-
],
|
|
132
|
+
'/fullstack/': fullstackGroups,
|
|
109
133
|
'/backend/': [
|
|
110
134
|
{
|
|
111
|
-
text: 'Backend (Vona)',
|
|
135
|
+
text: 'Backend (Vona) / Getting Started',
|
|
112
136
|
items: [
|
|
113
137
|
{ text: 'Introduction', link: '/backend/introduction' },
|
|
114
138
|
{ text: 'Foundation', link: '/backend/foundation' },
|
|
115
139
|
{ text: 'Backend Essentials', link: '/backend/backend-essentials' },
|
|
116
140
|
{ text: 'Quickstart', link: '/backend/quickstart' },
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
text: 'Tooling & Runtime',
|
|
145
|
+
items: [
|
|
117
146
|
{ text: 'CLI', link: '/backend/cli' },
|
|
118
147
|
{ text: 'Scripts', link: '/backend/scripts' },
|
|
119
148
|
{ text: 'Runtime and Flavors', link: '/backend/runtime-and-flavors' },
|
|
@@ -123,18 +152,34 @@ export default defineConfig({
|
|
|
123
152
|
text: 'Multi-Instance and Instance Resolution',
|
|
124
153
|
link: '/backend/multi-instance-and-instance-resolution',
|
|
125
154
|
},
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
text: 'Security & Access',
|
|
159
|
+
items: [
|
|
126
160
|
{ text: 'Auth Guide', link: '/backend/auth-guide' },
|
|
127
161
|
{ text: 'Captcha Guide', link: '/backend/captcha-guide' },
|
|
128
162
|
{ text: 'User Access Guide', link: '/backend/user-access-guide' },
|
|
163
|
+
{ text: 'JWT Guide', link: '/backend/jwt-guide' },
|
|
164
|
+
{ text: 'Validation Guide', link: '/backend/validation-guide' },
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
text: 'Application Basics',
|
|
169
|
+
items: [
|
|
129
170
|
{ text: 'Menu Guide', link: '/backend/menu-guide' },
|
|
130
171
|
{ text: 'I18n Guide', link: '/backend/i18n-guide' },
|
|
131
172
|
{ text: 'Error Guide', link: '/backend/error-guide' },
|
|
132
|
-
{ text: 'JWT Guide', link: '/backend/jwt-guide' },
|
|
133
173
|
{ text: 'Event Guide', link: '/backend/event-guide' },
|
|
134
174
|
{ text: 'Logger Guide', link: '/backend/logger-guide' },
|
|
135
175
|
{ text: 'Upload Guide', link: '/backend/upload-guide' },
|
|
136
176
|
{ text: 'Mail Guide', link: '/backend/mail-guide' },
|
|
137
177
|
{ text: 'Serialization Guide', link: '/backend/serialization-guide' },
|
|
178
|
+
],
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
text: 'Core Programming Model',
|
|
182
|
+
items: [
|
|
138
183
|
{ text: 'AOP Overview', link: '/backend/aop-overview' },
|
|
139
184
|
{ text: 'Controller Guide', link: '/backend/controller-guide' },
|
|
140
185
|
{ text: 'Controller AOP Guide', link: '/backend/controller-aop-guide' },
|
|
@@ -144,10 +189,14 @@ export default defineConfig({
|
|
|
144
189
|
{ text: 'Model Guide', link: '/backend/model-guide' },
|
|
145
190
|
{ text: 'Entity Guide', link: '/backend/entity-guide' },
|
|
146
191
|
{ text: 'DTO Guide', link: '/backend/dto-guide' },
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
text: 'Data & CRUD',
|
|
196
|
+
items: [
|
|
147
197
|
{ text: 'CRUD Workflow', link: '/backend/crud-workflow' },
|
|
148
198
|
{ text: 'Migration and Changes', link: '/backend/migration-and-changes' },
|
|
149
199
|
{ text: 'Field Indexes', link: '/backend/field-indexes' },
|
|
150
|
-
{ text: 'Unit Testing', link: '/backend/unit-testing' },
|
|
151
200
|
{ text: 'ORM Guide', link: '/backend/orm-guide' },
|
|
152
201
|
{ text: 'ORM Configuration Guide', link: '/backend/orm-configuration-guide' },
|
|
153
202
|
{ text: 'ORM Select Guide', link: '/backend/orm-select-guide' },
|
|
@@ -155,6 +204,11 @@ export default defineConfig({
|
|
|
155
204
|
{ text: 'ORM Aggregate and Group Guide', link: '/backend/orm-aggregate-group-guide' },
|
|
156
205
|
{ text: 'Relations Guide', link: '/backend/relations-guide' },
|
|
157
206
|
{ text: 'Transaction Guide', link: '/backend/transaction-guide' },
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
text: 'Infrastructure & Distributed',
|
|
211
|
+
items: [
|
|
158
212
|
{ text: 'Cache Guide', link: '/backend/cache-guide' },
|
|
159
213
|
{
|
|
160
214
|
text: 'Multi-Database and Datasource Guide',
|
|
@@ -169,55 +223,100 @@ export default defineConfig({
|
|
|
169
223
|
{ text: 'Worker Guide', link: '/backend/worker-guide' },
|
|
170
224
|
{ text: 'Broadcast Guide', link: '/backend/broadcast-guide' },
|
|
171
225
|
{ text: 'Redlock Guide', link: '/backend/redlock-guide' },
|
|
172
|
-
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
text: 'API & Testing',
|
|
230
|
+
items: [
|
|
173
231
|
{ text: 'OpenAPI Guide', link: '/backend/openapi-guide' },
|
|
174
232
|
{ text: 'DTO Infer and Generation', link: '/backend/dto-infer-generation' },
|
|
233
|
+
{ text: 'Unit Testing', link: '/backend/unit-testing' },
|
|
175
234
|
],
|
|
176
235
|
},
|
|
177
236
|
],
|
|
178
237
|
'/frontend/': [
|
|
179
238
|
{
|
|
180
|
-
text: 'Frontend (Zova)',
|
|
239
|
+
text: 'Frontend (Zova) / Getting Started',
|
|
181
240
|
items: [
|
|
182
241
|
{ text: 'Introduction', link: '/frontend/introduction' },
|
|
183
242
|
{ text: 'Quickstart', link: '/frontend/quickstart' },
|
|
184
243
|
{ text: 'Foundation', link: '/frontend/foundation' },
|
|
244
|
+
],
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
text: 'Architecture & Modules',
|
|
248
|
+
items: [
|
|
185
249
|
{ text: 'IoC and Beans', link: '/frontend/ioc-and-beans' },
|
|
186
250
|
{ text: 'Modules and Suites', link: '/frontend/modules-and-suites' },
|
|
187
251
|
{ text: 'Module Scope', link: '/frontend/module-scope' },
|
|
252
|
+
{ text: 'Design Principles', link: '/frontend/design-principles' },
|
|
253
|
+
],
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
text: 'Environment & Startup',
|
|
257
|
+
items: [
|
|
188
258
|
{ text: 'Environment and Config Guide', link: '/frontend/environment-config-guide' },
|
|
189
259
|
{ text: 'App Startup Guide', link: '/frontend/app-startup-guide' },
|
|
190
260
|
{ text: 'System Startup Guide', link: '/frontend/system-startup-guide' },
|
|
261
|
+
],
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
text: 'Tooling',
|
|
265
|
+
items: [
|
|
266
|
+
{ text: 'CLI', link: '/frontend/cli' },
|
|
267
|
+
{ text: 'Scripts', link: '/frontend/scripts' },
|
|
268
|
+
{ text: 'Mock Guide', link: '/frontend/mock-guide' },
|
|
269
|
+
],
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
text: 'Pages & Routing',
|
|
273
|
+
items: [
|
|
191
274
|
{ text: 'Page Guide', link: '/frontend/page-guide' },
|
|
192
275
|
{ text: 'Page Query Guide', link: '/frontend/page-query-guide' },
|
|
193
276
|
{ text: 'Page Params Guide', link: '/frontend/page-params-guide' },
|
|
194
|
-
{ text: 'Page Route Guide', link: '/frontend/page-route-guide' },
|
|
195
277
|
{ text: 'Zod Guide', link: '/frontend/zod-guide' },
|
|
278
|
+
{ text: 'Page Route Guide', link: '/frontend/page-route-guide' },
|
|
196
279
|
{ text: 'Route Alias Guide', link: '/frontend/route-alias-guide' },
|
|
197
280
|
{ text: 'Navigation Guards Guide', link: '/frontend/navigation-guards-guide' },
|
|
281
|
+
],
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
text: 'Components & UI',
|
|
285
|
+
items: [
|
|
198
286
|
{ text: 'Component Guide', link: '/frontend/component-guide' },
|
|
199
287
|
{ text: 'Component Props Guide', link: '/frontend/component-props-guide' },
|
|
200
288
|
{ text: 'Component v-model Guide', link: '/frontend/component-v-model-guide' },
|
|
201
289
|
{ text: 'Generic Component Guide', link: '/frontend/generic-component-guide' },
|
|
202
|
-
{ text: 'CLI', link: '/frontend/cli' },
|
|
203
|
-
{ text: 'Scripts', link: '/frontend/scripts' },
|
|
204
|
-
{ text: 'Mock Guide', link: '/frontend/mock-guide' },
|
|
205
290
|
{ text: 'CSS-in-JS Guide', link: '/frontend/css-in-js-guide' },
|
|
206
291
|
{ text: 'Theme Guide', link: '/frontend/theme-guide' },
|
|
207
292
|
{ text: 'Icon Engine Guide', link: '/frontend/icon-engine-guide' },
|
|
293
|
+
],
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
text: 'Data & State',
|
|
297
|
+
items: [
|
|
208
298
|
{ text: 'Server Data', link: '/frontend/server-data' },
|
|
209
299
|
{ text: 'API Guide', link: '/frontend/api-guide' },
|
|
210
300
|
{ text: 'Model Architecture', link: '/frontend/model-architecture' },
|
|
211
301
|
{ text: 'Model State Guide', link: '/frontend/model-state-guide' },
|
|
302
|
+
],
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
text: 'API Contract & SDK',
|
|
306
|
+
items: [
|
|
212
307
|
{ text: 'OpenAPI SDK Guide', link: '/frontend/openapi-sdk-guide' },
|
|
213
308
|
{ text: 'API Schema Guide', link: '/frontend/api-schema-guide' },
|
|
214
309
|
{ text: 'SDK Guide', link: '/frontend/sdk-guide' },
|
|
310
|
+
],
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
text: 'SSR',
|
|
314
|
+
items: [
|
|
215
315
|
{ text: 'SSR Overview', link: '/frontend/ssr-overview' },
|
|
216
316
|
{ text: 'SSR Init Data', link: '/frontend/ssr-init-data' },
|
|
217
317
|
{ text: 'SSR ClientOnly', link: '/frontend/ssr-client-only' },
|
|
218
318
|
{ text: 'SSR SEO Meta', link: '/frontend/ssr-seo-meta' },
|
|
219
319
|
{ text: 'SSR Env', link: '/frontend/ssr-env' },
|
|
220
|
-
{ text: 'Design Principles', link: '/frontend/design-principles' },
|
|
221
320
|
],
|
|
222
321
|
},
|
|
223
322
|
],
|
|
@@ -233,12 +332,7 @@ export default defineConfig({
|
|
|
233
332
|
items: aiItems,
|
|
234
333
|
},
|
|
235
334
|
],
|
|
236
|
-
'/reference/':
|
|
237
|
-
{
|
|
238
|
-
text: 'Reference',
|
|
239
|
-
items: referenceItems,
|
|
240
|
-
},
|
|
241
|
-
],
|
|
335
|
+
'/reference/': referenceGroups,
|
|
242
336
|
},
|
|
243
337
|
socialLinks: [{ icon: 'github', link: 'https://github.com/cabloy/cabloy' }],
|
|
244
338
|
search: {
|
|
@@ -23,6 +23,15 @@ The goal is to make AI **reuse the repo’s existing conventions directly**, esp
|
|
|
23
23
|
- internal architecture notes
|
|
24
24
|
- shared public documentation
|
|
25
25
|
|
|
26
|
+
## How to approach AI work
|
|
27
|
+
|
|
28
|
+
For contributor and automation workflows in this repository, prefer this order:
|
|
29
|
+
|
|
30
|
+
1. inspect the active edition and repo markers before making UI-sensitive or workflow-sensitive assumptions
|
|
31
|
+
2. inspect root scripts, Vona CLI, and Zova CLI before inventing manual scaffolding or custom workflow steps
|
|
32
|
+
3. use public docs for durable user-facing guidance and `.docs-internal/` for maintainer rationale
|
|
33
|
+
4. encode repeatable behavior in Claude rules, commands, or skills instead of relying on unstated habits
|
|
34
|
+
|
|
26
35
|
## The knowledge layers
|
|
27
36
|
|
|
28
37
|
### Public docs
|
|
@@ -43,6 +52,41 @@ Use root `CLAUDE.md` and `.claude/commands/` for concise operational behavior an
|
|
|
43
52
|
|
|
44
53
|
Use `.claude/skills/` for procedural workflows that benefit from reusable instructions, bundled references, or future deterministic scripts.
|
|
45
54
|
|
|
55
|
+
## AI reading paths
|
|
56
|
+
|
|
57
|
+
Use this page as the main AI-development hub, then choose the path that matches your task.
|
|
58
|
+
|
|
59
|
+
### Repo workflow path
|
|
60
|
+
|
|
61
|
+
Start here when the task is about choosing the right repo surface, docs location, or automation boundary:
|
|
62
|
+
|
|
63
|
+
- [Repo Guidance](/ai/repo-guidance)
|
|
64
|
+
- [Docs / Skills Mapping](/ai/docs-skills-rules-mapping)
|
|
65
|
+
- [CLI to Skill Map](/ai/cli-to-skill-map)
|
|
66
|
+
- [Skills](/ai/skills)
|
|
67
|
+
- [Rules and Config](/ai/rules-and-config)
|
|
68
|
+
|
|
69
|
+
### Framework implementation path
|
|
70
|
+
|
|
71
|
+
Use this path when the task is about implementing or reviewing Cabloy code with repo-aware rules:
|
|
72
|
+
|
|
73
|
+
- [Class Placement Rule](/ai/class-placement-rule)
|
|
74
|
+
- [Global Bean Lookup](/ai/global-bean-lookup)
|
|
75
|
+
- [Playbook: Backend Module](/ai/playbook-backend-module)
|
|
76
|
+
- [Playbook: Frontend Page](/ai/playbook-frontend-page)
|
|
77
|
+
- [Playbook: Contract Regeneration](/ai/playbook-contract-regeneration)
|
|
78
|
+
- [Playbook: Metadata Refresh](/ai/playbook-metadata-refresh)
|
|
79
|
+
|
|
80
|
+
### Verification and roadmap path
|
|
81
|
+
|
|
82
|
+
Use this path when the task is about consistency checks, verification, or future workflow planning:
|
|
83
|
+
|
|
84
|
+
- [Edition Detection](/ai/edition-detection)
|
|
85
|
+
- [Edition Consistency Checklist](/ai/edition-consistency-checklist)
|
|
86
|
+
- [Verification](/ai/verification)
|
|
87
|
+
- [Future Skill Roadmap](/ai/future-skill-roadmap)
|
|
88
|
+
- [CLI for Agents](/ai/cli-for-agents)
|
|
89
|
+
|
|
46
90
|
## Recommended AI lookup rules
|
|
47
91
|
|
|
48
92
|
For backend shorthand lookup, prefer these surfaces in order:
|
|
@@ -105,6 +105,13 @@ return await this.scope.model.student.deleteById(id);
|
|
|
105
105
|
|
|
106
106
|
These methods are also part of the generated CRUD thread; see [CRUD Workflow](/backend/crud-workflow).
|
|
107
107
|
|
|
108
|
+
When using magic methods, keep one semantic detail in mind:
|
|
109
|
+
|
|
110
|
+
- default `eq` methods can treat an omitted argument as `null`
|
|
111
|
+
- non-`eq` methods require an explicit argument
|
|
112
|
+
|
|
113
|
+
For omission inside structured `where` objects, prefer `Op.omit`; for SQL null checks, use `null`.
|
|
114
|
+
|
|
108
115
|
## Query-builder support
|
|
109
116
|
|
|
110
117
|
Vona models are built on Knex, so the model layer also supports lower-level query builder access when needed.
|
|
@@ -180,6 +180,16 @@ The important rule is:
|
|
|
180
180
|
- the underlying write semantics still come from the standard ORM mutation surface
|
|
181
181
|
- custom model methods take precedence when business-specific behavior is needed
|
|
182
182
|
|
|
183
|
+
There is also a useful argument-handling rule to remember:
|
|
184
|
+
|
|
185
|
+
- default `eq` magic methods such as `getByName()` or `selectByName()` treat an omitted argument as `null`
|
|
186
|
+
- non-`eq` magic methods such as `getByNameEqI()` require an explicit value and throw if the argument is omitted
|
|
187
|
+
|
|
188
|
+
This aligns magic-method behavior with the current ORM `where` semantics:
|
|
189
|
+
|
|
190
|
+
- `Op.omit` means omit a condition explicitly
|
|
191
|
+
- `null` means SQL `IS NULL`
|
|
192
|
+
|
|
183
193
|
That means mutation should stay conceptually grounded in the standard model methods even when convenience wrappers are present.
|
|
184
194
|
|
|
185
195
|
## Implementation checks for ORM mutation changes
|
|
@@ -110,7 +110,6 @@ The operator model is broad and includes examples like:
|
|
|
110
110
|
- `_includes_`
|
|
111
111
|
- case-insensitive variants
|
|
112
112
|
- `_ref_`
|
|
113
|
-
- `_skip_`
|
|
114
113
|
|
|
115
114
|
That operator vocabulary is part of the Cabloy data language and should be reused consistently.
|
|
116
115
|
|
|
@@ -121,15 +120,17 @@ A practical operator-family reading is:
|
|
|
121
120
|
- null checks: `_is_`, `_isNot_`
|
|
122
121
|
- string matching: `_startsWith_`, `_endsWith_`, `_includes_`, and case-insensitive variants
|
|
123
122
|
- composition/subquery: `_and_`, `_or_`, `_not_`, `_exists_`, `_notExists_`
|
|
124
|
-
- identifier
|
|
123
|
+
- identifier helper: `_ref_`
|
|
125
124
|
|
|
126
|
-
### `
|
|
125
|
+
### Omitting a condition with `Op.omit`
|
|
127
126
|
|
|
128
|
-
`
|
|
127
|
+
Use `Op.omit` when you want to express omission explicitly at the call site. `Op.omit` is defined as `undefined`, but using the named constant makes the business meaning of the query object clearer.
|
|
129
128
|
|
|
130
129
|
Representative pattern:
|
|
131
130
|
|
|
132
131
|
```typescript
|
|
132
|
+
import { Op } from 'vona-module-a-orm';
|
|
133
|
+
|
|
133
134
|
const where = {
|
|
134
135
|
title: { _includes_: 'ai' },
|
|
135
136
|
stars: { _gt_: 20 },
|
|
@@ -138,12 +139,12 @@ const where = {
|
|
|
138
139
|
await this.scope.model.post.select({
|
|
139
140
|
where: {
|
|
140
141
|
...where,
|
|
141
|
-
stars:
|
|
142
|
+
stars: Op.omit,
|
|
142
143
|
},
|
|
143
144
|
});
|
|
144
145
|
```
|
|
145
146
|
|
|
146
|
-
This lets a query builder remove one condition cleanly without rebuilding the whole `where` object by hand.
|
|
147
|
+
This lets a query builder remove one condition cleanly without rebuilding the whole `where` object by hand, while `null` remains available for SQL `IS NULL` semantics.
|
|
147
148
|
|
|
148
149
|
## Joint operators and subqueries
|
|
149
150
|
|
|
@@ -16,14 +16,14 @@ Use this page when you are contributing backend work in the framework repository
|
|
|
16
16
|
|
|
17
17
|
## Prerequisites
|
|
18
18
|
|
|
19
|
-
| Name | Version
|
|
20
|
-
| ---------- |
|
|
21
|
-
| pnpm | >=
|
|
22
|
-
| Node.js | >=24.8.0
|
|
23
|
-
| Redis | >=7.2.6
|
|
24
|
-
| Sqlite3 | Built-in
|
|
25
|
-
| MySQL | >=8
|
|
26
|
-
| Postgresql | >=16
|
|
19
|
+
| Name | Version |
|
|
20
|
+
| ---------- | -------- |
|
|
21
|
+
| pnpm | >=11.5.2 |
|
|
22
|
+
| Node.js | >=24.8.0 |
|
|
23
|
+
| Redis | >=7.2.6 |
|
|
24
|
+
| Sqlite3 | Built-in |
|
|
25
|
+
| MySQL | >=8 |
|
|
26
|
+
| Postgresql | >=16 |
|
|
27
27
|
|
|
28
28
|
Notes:
|
|
29
29
|
|
|
@@ -87,7 +87,7 @@ Legacy Vona docs described creating projects from templates such as `cabloy-basi
|
|
|
87
87
|
That history still matters, because it explains why the Cabloy ecosystem now supports two editions:
|
|
88
88
|
|
|
89
89
|
- **Cabloy Basic**: the public framework/reference edition, including the project route created by `npm create cabloy`, with a shared frontend engineering layer and a DaisyUI + Tailwind CSS oriented UI layer in the current public examples
|
|
90
|
-
- **Cabloy Start**: the private commercial edition, accessed by cloning the licensed private repository source, with Vuetify-oriented
|
|
90
|
+
- **Cabloy Start**: the private commercial edition, accessed by cloning the licensed private repository source, with a Vuetify-oriented UI layer plus edition-specific SSR site baselines and project assets
|
|
91
91
|
|
|
92
92
|
In the current monorepo docs, do not treat these as just template names. Treat them as edition boundaries that affect frontend integration, scripts, UI assumptions, and examples.
|
|
93
93
|
|