cabloy 5.1.161 → 5.1.162

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 (52) hide show
  1. package/.cabloy-version +1 -1
  2. package/CHANGELOG.md +13 -0
  3. package/CLAUDE.md +1 -1
  4. package/CONTRIBUTING.md +1 -1
  5. package/README.md +34 -58
  6. package/package.json +1 -1
  7. package/repo-docs/.vitepress/config.mjs +58 -32
  8. package/repo-docs/ai/ai-spec-driven-development.md +99 -0
  9. package/repo-docs/ai/docs-skills-rules-mapping.md +25 -8
  10. package/repo-docs/ai/edition-consistency-checklist.md +2 -3
  11. package/repo-docs/ai/introduction.md +7 -4
  12. package/repo-docs/ai/playbook-spec-execution.md +19 -5
  13. package/repo-docs/ai/playbook-spec-generation.md +69 -101
  14. package/repo-docs/ai/repo-guidance.md +1 -1
  15. package/repo-docs/ai/skills.md +31 -10
  16. package/repo-docs/backend/dto-guide.md +1 -0
  17. package/repo-docs/backend/openapi-guide.md +1 -1
  18. package/repo-docs/editions/overview.md +51 -120
  19. package/repo-docs/frontend/environment-config-guide.md +1 -1
  20. package/repo-docs/frontend/form-layout-guide.md +4 -2
  21. package/repo-docs/frontend/introduction.md +2 -1
  22. package/repo-docs/frontend/quickstart.md +2 -8
  23. package/repo-docs/frontend/scripts.md +7 -3
  24. package/repo-docs/frontend/ssr-architecture-overview.md +1 -1
  25. package/repo-docs/frontend/ssr-build-deploy-guide.md +4 -2
  26. package/repo-docs/fullstack/comparison-with-other-frameworks.md +6 -2
  27. package/repo-docs/fullstack/contract-loop-playbook.md +4 -0
  28. package/repo-docs/fullstack/introduction.md +13 -4
  29. package/repo-docs/fullstack/parallel-worktree-environment.md +2 -0
  30. package/repo-docs/fullstack/quickstart.md +65 -74
  31. package/repo-docs/fullstack/semantic-presentation-contract.md +121 -0
  32. package/repo-docs/fullstack/ssr-site-and-flavor-setup.md +2 -2
  33. package/repo-docs/index.md +16 -11
  34. package/repo-docs/reference/glossary.md +30 -0
  35. package/repo-docs/reference/package-map.md +1 -1
  36. package/repo-docs/reference/repo-scripts.md +6 -4
  37. package/vona/pnpm-lock.yaml +10 -96
  38. package/zova/pnpm-lock.yaml +8 -0
  39. package/zova/src/suite/a-home/modules/home-base/src/.metadata/component/siteEntryTables.ts +12 -0
  40. package/zova/src/suite/a-home/modules/home-base/src/.metadata/index.ts +13 -0
  41. package/zova/src/suite/a-home/modules/home-base/src/component/siteEntryTables/controller.tsx +71 -0
  42. package/zova/src/suite/a-home/modules/home-base/src/config/locale/en-us.ts +8 -0
  43. package/zova/src/suite/a-home/modules/home-base/src/config/locale/zh-cn.ts +8 -0
  44. package/zova/src/suite/a-home/modules/home-indexadmin/package.json +3 -0
  45. package/zova/src/suite/a-home/modules/home-indexadmin/src/page/dashboard/controller.tsx +6 -13
  46. package/zova/src/suite/a-home/modules/home-indexweb/package.json +3 -1
  47. package/zova/src/suite/a-home/modules/home-indexweb/src/page/home/controller.tsx +6 -14
  48. package/repo-docs/ai/edition-detection.md +0 -30
  49. package/repo-docs/editions/cabloy-basic.md +0 -26
  50. package/repo-docs/editions/cabloy-start.md +0 -53
  51. package/repo-docs/editions/choosing-between-basic-and-start.md +0 -83
  52. package/repo-docs/editions/detection.md +0 -31
@@ -4,7 +4,7 @@ layout: home
4
4
  hero:
5
5
  name: 'Cabloy'
6
6
  text: 'Node.js fullstack framework for AI vibe coding'
7
- tagline: One fullstack system for AI vibe coding—bidirectional type sync, CLI-first workflows, docs, and skills.
7
+ tagline: One fullstack system for AI vibe coding—bidirectional type sync, CLI-first workflows, and Traceable Spec Delivery from product intent to verifiable evidence.
8
8
  actions:
9
9
  - theme: brand
10
10
  text: Get Started
@@ -13,8 +13,8 @@ hero:
13
13
  text: Editions
14
14
  link: /editions/overview
15
15
  - theme: alt
16
- text: AI Development
17
- link: /ai/introduction
16
+ text: AI Spec-Driven Development
17
+ link: /ai/ai-spec-driven-development
18
18
 
19
19
  features:
20
20
  - title: One fullstack system
@@ -25,17 +25,21 @@ features:
25
25
  details: Use explicit commands for scaffolding, generation, refactors, and verification.
26
26
  - title: Docs and skills
27
27
  details: Give people and AI agents reusable, source-grounded guidance for the current repository.
28
+ - title: AI Spec-Driven Development
29
+ details: Connect confirmed product intent to contracts, bounded delivery, acceptance procedures, and verifiable evidence.
28
30
  - title: Vona + Zova
29
31
  details: Use aligned backend and frontend layers for code sharing and cross-stack consistency.
30
32
  - title: Modular delivery
31
33
  details: Organize capabilities as suites and modules, then deliver SSR, SPA, Web, and Admin applications with shared conventions.
34
+ - title: Semantic presentation
35
+ details: Translate confirmed audience, task, scene, and DTO contracts into schema-driven UI without changing security or ownership authority.
32
36
  ---
33
37
 
34
38
  # Cabloy Documentation
35
39
 
36
- Cabloy is a Node.js fullstack framework for AI vibe coding. It brings backend and frontend work into one system, with bidirectional type sync, CLI-first workflows, and source-grounded docs and skills for people and AI agents.
40
+ Cabloy is a Node.js fullstack framework for AI vibe coding, with AI Spec-Driven Development for traceable, evidence-backed delivery. It brings backend and frontend work into one system, with bidirectional type sync, CLI-first workflows, and source-grounded docs and skills for people and AI agents.
37
41
 
38
- Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to understand bidirectional type sync, then use the [Fullstack CLI](/fullstack/cli) and [AI Development](/ai/introduction) guides to follow the current repository. Cabloy coordinates Vona and Zova as its backend and frontend layers, while Cabloy Basic and Cabloy Start are related, complete edition baselines built on that shared architecture. See [Editions Overview](/editions/overview) for the relationship and deliberate edition differences.
42
+ [AI Spec-Driven Development](/ai/ai-spec-driven-development) adds Cabloy's disciplined delivery path: **Traceable Spec Delivery** connects confirmed product intent to contracts, bounded work, acceptance procedures, and verifiable evidence. Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to understand bidirectional type sync, then use the [Fullstack CLI](/fullstack/cli) and [AI Development](/ai/introduction) guides to follow the current repository. Cabloy coordinates Vona and Zova as its backend and frontend layers, while Cabloy Basic and Cabloy Start are related, complete edition baselines built on that shared architecture. See [Editions Overview](/editions/overview) for the relationship and deliberate edition differences.
39
43
 
40
44
  ## What you can do here
41
45
 
@@ -44,7 +48,8 @@ Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to un
44
48
  - **Explore backend and frontend workflows** without losing the cross-stack picture
45
49
  - **Understand Cabloy’s performance philosophy and runtime stability story** with [Framework Performance](/fullstack/framework-performance)
46
50
  - **See how Cabloy Basic and Cabloy Start differ by edition** when UI assumptions, flavors, modules, SSR sites, or AI workflow guidance matter
47
- - **Follow source-grounded AI vibe coding guidance** for prompting, workflow selection, and verification
51
+ - **Follow AI Spec-Driven Development** from confirmed product intent to evidence-backed verification
52
+ - **Use source-grounded AI vibe coding guidance** for prompting, workflow selection, and verification
48
53
 
49
54
  ## First reading path
50
55
 
@@ -52,9 +57,8 @@ Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to un
52
57
 
53
58
  1. [Fullstack Quickstart](/fullstack/quickstart)
54
59
  2. [Fullstack Quick Start Tutorials](/fullstack/tutorials-overview)
55
- 3. [Editions Overview](/editions/overview)
56
- 4. [Choosing Between Cabloy Basic and Cabloy Start](/editions/choosing-between-basic-and-start)
57
- 5. [Fullstack Introduction](/fullstack/introduction)
60
+ 3. [Cabloy Editions](/editions/overview#choosing-an-edition)
61
+ 4. [Fullstack Introduction](/fullstack/introduction)
58
62
 
59
63
  ### For contributors and AI vibe coding workflows
60
64
 
@@ -62,8 +66,9 @@ Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to un
62
66
  2. [Fullstack CLI](/fullstack/cli)
63
67
  3. [VS Code Extensions](/fullstack/vscode-extensions)
64
68
  4. [AI Development Introduction](/ai/introduction)
65
- 5. [Reference Introduction](/reference/introduction)
66
- 6. [Editions Overview](/editions/overview)
69
+ 5. [AI Spec-Driven Development](/ai/ai-spec-driven-development)
70
+ 6. [Reference Introduction](/reference/introduction)
71
+ 7. [Editions Overview](/editions/overview)
67
72
 
68
73
  ### For performance-oriented reading
69
74
 
@@ -26,10 +26,40 @@ Vona and Zova describe architectural layers; Cabloy Basic and Cabloy Start descr
26
26
 
27
27
  The process of identifying whether the current repo is Cabloy Basic or Cabloy Start before choosing a workflow, example, or skill branch.
28
28
 
29
+ ## Vona integrated SSR
30
+
31
+ The SSR path owned by the Vona server: Vona accepts the HTTP request, selects the SSR site, and dispatches the built Zova SSR runtime before returning the response. In the Cabloy Basic default environment, this is reached through Vona's `SERVER_LISTEN_PORT` at `7102`.
32
+
33
+ ## Zova standalone SSR
34
+
35
+ The SSR path served directly by the Zova development server, used for frontend page, route, and hydration iteration. In the Cabloy Basic default environment, this uses `DEV_SERVER_PORT` `9000`. It does not by itself prove Vona site matching, artifact handoff, or integrated SSR acceptance.
36
+
37
+ A Zova standalone SSR server is a runtime entry mode, not the same thing as an independently deployable SSR Site/flavor. The latter describes an application boundary and its deployment identity.
38
+
29
39
  ## CLI-first
30
40
 
31
41
  The practice of using existing Vona and Zova command families before attempting manual scaffolding or refactor work.
32
42
 
43
+ ## AI Spec-Driven Development
44
+
45
+ Cabloy's AI-assisted approach for moving from confirmed product intent to verifiable delivery evidence. It is the public entry point for [Traceable Spec Delivery](/ai/ai-spec-driven-development), not a claim of unconstrained or autonomous delivery.
46
+
47
+ ## Traceable Spec Delivery
48
+
49
+ Cabloy's repository-native method for tracing `PRD → SRS → WBS → ATP → Evidence`. It keeps authority at the owning record and delivers bounded increments with evidence-backed status. See [AI Spec-Driven Development](/ai/ai-spec-driven-development).
50
+
51
+ ## Evidence-gated delivery
52
+
53
+ The status discipline in which `implementation-complete` and `verified` remain distinct: `verified` requires retained, linked, redacted observed evidence for the applicable WBS checks and ATPs. See [AI Spec-Driven Development](/ai/ai-spec-driven-development).
54
+
55
+ ## Contract Loop
56
+
57
+ Cabloy's bidirectional Vona↔Zova model for synchronizing contract sources, generated handoffs, and consumers through forward and reverse chains. It is complementary to, not a substitute for, Traceable Spec Delivery. See [Contract Loop Playbook](/fullstack/contract-loop-playbook).
58
+
59
+ ## Semantic Presentation Contract
60
+
61
+ The design boundary that translates a confirmed audience, task, scene, information area, and operation DTO contract into presentation metadata and renderer choices without redefining API, persistence, validation, authorization, state ownership, or SSR privacy. See [Semantic Presentation Contract](/fullstack/semantic-presentation-contract).
62
+
33
63
  ## Read next
34
64
 
35
65
  Use the glossary together with:
@@ -11,7 +11,7 @@ This monorepo is organized around a small set of stable top-level areas.
11
11
  - `repo-docs/` — unified public docs
12
12
  - `repo-specs/` — suite-local product, technical, delivery, ATP, progress, observed-evidence, and ADR authority
13
13
 
14
- `repo-specs/` is distinct from `repo-docs/`, which explains reusable public guidance, `.claude/`, which contains executable workflow behavior, and `repo-docs-internal/`, which preserves supporting maintainer rationale. For the public planning workflow, see [Playbook: Plan a Cabloy Suite Specification](/ai/playbook-spec-generation).
14
+ `repo-specs/` is distinct from `repo-docs/`, which explains reusable public guidance, `.claude/`, which contains executable workflow behavior, and `repo-docs-internal/`, which preserves supporting maintainer rationale. For the public planning workflow, see [Generate a Cabloy Suite Specification](/ai/playbook-spec-generation).
15
15
 
16
16
  ## Backend side
17
17
 
@@ -136,8 +136,10 @@ The public-package upgrade flow does not source or reconcile the Start-owned bas
136
136
 
137
137
  The unified runner has two modes:
138
138
 
139
- - `npm run test:e2e`: clean local run; checks the managed port, resets the database, starts one development Vona worker, and runs Playwright.
140
- - `npm run test:e2e:fast`: skips the reset for quick reruns and may target either the local managed server or an externally managed `E2E_BASE_URL`.
139
+ - `npm run test:e2e`: clean local run; checks the managed Vona port, resets the database, starts one development Vona worker, and runs Playwright.
140
+ - `npm run test:e2e:fast`: skips the reset for quick reruns and may target either the local managed Vona server or an externally managed `E2E_BASE_URL`.
141
+
142
+ These browser checks target Vona integrated SSR. In the Cabloy Basic default environment, the Vona listener is `7102`; the Zova standalone SSR development server uses `9000` and is not an acceptance target.
141
143
 
142
144
  Place spec basenames directly after the npm script name; use npm's `--` delimiter only before Playwright options. Multiple spec names are allowed. With no names, every spec in `repo-e2e/specs` is discovered:
143
145
 
@@ -160,7 +162,7 @@ The existing tags include `@web`, `@admin`, `@smoke`, `@flow`, `@ssr`, `@theme`,
160
162
 
161
163
  ### Cabloy Basic and Commerce
162
164
 
163
- The Basic baseline exercises Web at `/` and Admin at `/admin` through Vona's SSR dispatcher. Prepare artifacts when frontend output has changed:
165
+ The Basic baseline exercises Web at `/` and Admin at `/admin` through Vona integrated SSR dispatch. Prepare artifacts when frontend output has changed:
164
166
 
165
167
  ```bash
166
168
  npm run build:zova
@@ -184,7 +186,7 @@ E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:fast a-commerce -- --tag @sm
184
186
 
185
187
  ### Cabloy Start
186
188
 
187
- The Start suite exercises Web at `/` and Admin at `/admin` through Vona's SSR dispatcher. Prepare current Start artifacts before a managed local run:
189
+ The Start suite exercises Web at `/` and Admin at `/admin` through Vona integrated SSR dispatch. Prepare current Start artifacts before a managed local run:
188
190
 
189
191
  ```bash
190
192
  npm run build:zova
@@ -642,8 +642,8 @@ importers:
642
642
  specifier: npm:@cabloy/zod@4.3.8
643
643
  version: '@cabloy/zod@4.3.8'
644
644
  zova:
645
- specifier: ^5.1.155
646
- version: 5.1.155(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
645
+ specifier: ^5.1.156
646
+ version: 5.1.156(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
647
647
  zova-jsx:
648
648
  specifier: ^1.1.88
649
649
  version: 1.1.88(typescript@5.9.3)
@@ -660,8 +660,8 @@ importers:
660
660
  specifier: ^5.1.34
661
661
  version: 5.1.34
662
662
  zova-module-a-form:
663
- specifier: ^5.1.50
664
- version: 5.1.50(vue@3.5.39(typescript@5.9.3))
663
+ specifier: ^5.1.51
664
+ version: 5.1.51(vue@3.5.39(typescript@5.9.3))
665
665
  zova-module-a-icon:
666
666
  specifier: ^5.1.27
667
667
  version: 5.1.27
@@ -672,8 +672,8 @@ importers:
672
672
  specifier: ^5.1.36
673
673
  version: 5.1.36(vue@3.5.39(typescript@5.9.3))
674
674
  zova-module-a-openapi:
675
- specifier: ^5.1.51
676
- version: 5.1.51
675
+ specifier: ^5.1.52
676
+ version: 5.1.52
677
677
  zova-module-a-pay:
678
678
  specifier: ^5.0.7
679
679
  version: 5.0.7
@@ -690,14 +690,14 @@ importers:
690
690
  specifier: ^5.1.35
691
691
  version: 5.1.35
692
692
  zova-module-a-table:
693
- specifier: ^5.1.38
694
- version: 5.1.38(vue@3.5.39(typescript@5.9.3))
693
+ specifier: ^5.1.39
694
+ version: 5.1.39(vue@3.5.39(typescript@5.9.3))
695
695
  zova-module-pay-mock:
696
696
  specifier: ^5.0.5
697
697
  version: 5.0.5
698
698
  zova-module-rest-resource:
699
- specifier: ^5.1.49
700
- version: 5.1.49
699
+ specifier: ^5.1.50
700
+ version: 5.1.50
701
701
 
702
702
  .zova-rest/cabloy-commerce:
703
703
  dependencies:
@@ -8986,9 +8986,6 @@ packages:
8986
8986
  zova-module-a-fetch@5.1.25:
8987
8987
  resolution: {integrity: sha512-kbMB/jIynN0dhivEZLLaY+ic9mU0rZJBeyjXwzAiWuOS330YsxipasxBZhACJD8s29RmLC9EQajI+vVLoBEveQ==}
8988
8988
 
8989
- zova-module-a-form@5.1.50:
8990
- resolution: {integrity: sha512-pfC9pL9SDO7HI7453oTyWbplBBTG+yz31K7Q6ERkSr3YnSPWl5gub93DL4cRPObnotDzrDDb+LWU9JuAdmHmQw==}
8991
-
8992
8989
  zova-module-a-form@5.1.51:
8993
8990
  resolution: {integrity: sha512-/UlaorIX2SpN/ozGsXMaklfNuS64as322jD3+0wlfj9FVyhV1nz0wEBpYSGgsiX+KFLJicwpNqAz/kMI7WfvUw==}
8994
8991
 
@@ -9007,9 +9004,6 @@ packages:
9007
9004
  zova-module-a-model@5.1.36:
9008
9005
  resolution: {integrity: sha512-AEiYy68vFzw3OBrJMUfq05Xh0M4TR0Qj/9p4jfZ3IS7qIXu+4w/52wsInvbfy0V9tOistp+kui6kB3Lm1/UAiQ==}
9009
9006
 
9010
- zova-module-a-openapi@5.1.51:
9011
- resolution: {integrity: sha512-7oi32wKEnpnVhrC5jS5rv1pDan/NjZbj4rj9sUiGvwXU5pwG5O6XiiA/IHoyLVhHu4EkeE4ldYow9sQVKDquMw==}
9012
-
9013
9007
  zova-module-a-openapi@5.1.52:
9014
9008
  resolution: {integrity: sha512-pUbyEI2tiJ2tEih/qFvfYYR/yqnWZnK0QqyCNfgkD2Nvn4EY+iyIHISLZhVtWDJbYMXcqfXlxvb8Ltvm+GD/PA==}
9015
9009
 
@@ -9037,9 +9031,6 @@ packages:
9037
9031
  zova-module-a-style@5.1.35:
9038
9032
  resolution: {integrity: sha512-i73I3wFvdQonj3l4fkovkKBZwSK4s6D4vL3AVfVvFJ4eIboKH2yw0hCILKRzLoESNQ0T+lNS6ozeimvtA4/6DQ==}
9039
9033
 
9040
- zova-module-a-table@5.1.38:
9041
- resolution: {integrity: sha512-q4URU+D1CbGtKAOhFnujaSMV1Py5twil3eI6lRz3bFL0p79Lr+hNyjqaLpLKoBAnHKRSW/XHy/LvCYGMJ1C89w==}
9042
-
9043
9034
  zova-module-a-table@5.1.39:
9044
9035
  resolution: {integrity: sha512-MhYYlOIFJ32m61xtDCnIHfWf/g17g2HvEL7zRd5k1As7+or/9FPe9DbmFpHvjk7vp/Yba6oTqV0D5GbueJt/OA==}
9045
9036
 
@@ -9052,21 +9043,12 @@ packages:
9052
9043
  zova-module-pay-mock@5.0.5:
9053
9044
  resolution: {integrity: sha512-PFbNz1g2MDVp3NdvKV37WFzHTQ2awSPTD5iexkkOOloAaItmt/KYoV7xadM46wHUCSQZcZQ1SZdgDaUFev+R4Q==}
9054
9045
 
9055
- zova-module-rest-resource@5.1.49:
9056
- resolution: {integrity: sha512-tLf3BLov4GnV1QPivvLro6T2sNdriDZ8vZMsghuUN7dl+PRCG2pI0q9hBCrqe2faRSIcVUXowwnEbEynmaM7Zg==}
9057
-
9058
9046
  zova-module-rest-resource@5.1.50:
9059
9047
  resolution: {integrity: sha512-BZp4W9j4DhuQt9mk/jlquRFemzTBHe8saNtV/EUT6smAVj+7Li8AYkeaDUofKbssouqbOxHoFb0Qrlmd+1kZOw==}
9060
9048
 
9061
- zova-suite-a-zova@5.1.154:
9062
- resolution: {integrity: sha512-ii1qFxaBNc4PpNSj+sKgiH0Ryefr4KE0Gb5M8o2Df0hoe8//3uM7QK02GyQDKAK+bu6Q+7mwBZFW8hcD8TrEYw==}
9063
-
9064
9049
  zova-suite-a-zova@5.1.155:
9065
9050
  resolution: {integrity: sha512-w4+mlwOJ3DF+Bl9N1hkZBbgNW0UouP3/Xaw8PtiNEpmmr/ScWj+/+l85RTr/q9F+Qw/hjDCWTLwy4GBukTiBag==}
9066
9051
 
9067
- zova@5.1.155:
9068
- resolution: {integrity: sha512-TbaG8D/s/ML5gGBoaLeW92bjYyDd+8AU+Vw3y3cQopOtnthGLMiLnssKmzUOavyOiVGb25tyNAqgAWrGz4z/vQ==}
9069
-
9070
9052
  zova@5.1.156:
9071
9053
  resolution: {integrity: sha512-LawJuQhiR+M+BdFkLYEz1wLz0zQa2IuZFAR0Vtq/dcNMX1Jus9g2iem/guNbavgeNP8aXRa+P4vCnaFynnWC/w==}
9072
9054
 
@@ -15408,14 +15390,6 @@ snapshots:
15408
15390
  - debug
15409
15391
  - supports-color
15410
15392
 
15411
- zova-module-a-form@5.1.50(vue@3.5.39(typescript@5.9.3)):
15412
- dependencies:
15413
- '@tanstack/vue-form': 1.33.2(vue@3.5.39(typescript@5.9.3))
15414
- '@tanstack/vue-store': 0.11.0(vue@3.5.39(typescript@5.9.3))
15415
- transitivePeerDependencies:
15416
- - '@vue/composition-api'
15417
- - vue
15418
-
15419
15393
  zova-module-a-form@5.1.51(vue@3.5.39(typescript@5.9.3)):
15420
15394
  dependencies:
15421
15395
  '@tanstack/vue-form': 1.33.2(vue@3.5.39(typescript@5.9.3))
@@ -15446,12 +15420,6 @@ snapshots:
15446
15420
  - '@vue/composition-api'
15447
15421
  - vue
15448
15422
 
15449
- zova-module-a-openapi@5.1.51:
15450
- dependencies:
15451
- '@cabloy/json-schema-to-zod': 2.6.5
15452
- openapi3-ts: 4.6.0
15453
- typestyle: 2.4.0
15454
-
15455
15423
  zova-module-a-openapi@5.1.52:
15456
15424
  dependencies:
15457
15425
  '@cabloy/json-schema-to-zod': 2.6.5
@@ -15485,13 +15453,6 @@ snapshots:
15485
15453
  csx: 10.0.2
15486
15454
  typestyle: 2.4.0
15487
15455
 
15488
- zova-module-a-table@5.1.38(vue@3.5.39(typescript@5.9.3)):
15489
- dependencies:
15490
- '@tanstack/table-core': 8.21.3
15491
- '@tanstack/vue-table': 8.21.3(vue@3.5.39(typescript@5.9.3))
15492
- transitivePeerDependencies:
15493
- - vue
15494
-
15495
15456
  zova-module-a-table@5.1.39(vue@3.5.39(typescript@5.9.3)):
15496
15457
  dependencies:
15497
15458
  '@tanstack/table-core': 8.21.3
@@ -15524,44 +15485,8 @@ snapshots:
15524
15485
 
15525
15486
  zova-module-pay-mock@5.0.5: {}
15526
15487
 
15527
- zova-module-rest-resource@5.1.49: {}
15528
-
15529
15488
  zova-module-rest-resource@5.1.50: {}
15530
15489
 
15531
- zova-suite-a-zova@5.1.154(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15532
- dependencies:
15533
- zova-module-a-api: 5.1.22
15534
- zova-module-a-app: 5.1.26
15535
- zova-module-a-bean: 5.1.33
15536
- zova-module-a-behavior: 5.1.26
15537
- zova-module-a-behaviors: 5.1.22
15538
- zova-module-a-boundary: 5.1.22
15539
- zova-module-a-command: 5.1.34
15540
- zova-module-a-fetch: 5.1.25
15541
- zova-module-a-form: 5.1.51(vue@3.5.39(typescript@5.9.3))
15542
- zova-module-a-icon: 5.1.27
15543
- zova-module-a-interceptor: 5.1.31
15544
- zova-module-a-logger: 5.1.28
15545
- zova-module-a-meta: 5.1.22
15546
- zova-module-a-model: 5.1.36(vue@3.5.39(typescript@5.9.3))
15547
- zova-module-a-openapi: 5.1.52
15548
- zova-module-a-router: 5.1.34
15549
- zova-module-a-routerstack: 5.1.27
15550
- zova-module-a-routertabs: 5.1.34
15551
- zova-module-a-ssr: 5.1.38
15552
- zova-module-a-ssrhmr: 5.1.23
15553
- zova-module-a-ssrserver: 5.1.26
15554
- zova-module-a-style: 5.1.35
15555
- zova-module-a-table: 5.1.39(vue@3.5.39(typescript@5.9.3))
15556
- zova-module-a-zod: 5.1.37
15557
- zova-module-a-zova: 5.1.103(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
15558
- transitivePeerDependencies:
15559
- - '@vue/composition-api'
15560
- - debug
15561
- - supports-color
15562
- - typescript
15563
- - vue
15564
-
15565
15490
  zova-suite-a-zova@5.1.155(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15566
15491
  dependencies:
15567
15492
  zova-module-a-api: 5.1.22
@@ -15596,17 +15521,6 @@ snapshots:
15596
15521
  - typescript
15597
15522
  - vue
15598
15523
 
15599
- zova@5.1.155(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15600
- dependencies:
15601
- zova-core: 5.1.88(patch_hash=144450bd7a567a6067e5857c0cf4c780981b7e90bc48745c09e1696a9b6f1b97)(typescript@5.9.3)
15602
- zova-suite-a-zova: 5.1.154(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
15603
- transitivePeerDependencies:
15604
- - '@vue/composition-api'
15605
- - debug
15606
- - supports-color
15607
- - typescript
15608
- - vue
15609
-
15610
15524
  zova@5.1.156(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15611
15525
  dependencies:
15612
15526
  zova-core: 5.1.88(patch_hash=144450bd7a567a6067e5857c0cf4c780981b7e90bc48745c09e1696a9b6f1b97)(typescript@5.9.3)
@@ -1695,6 +1695,10 @@ importers:
1695
1695
  version: 6.1.3
1696
1696
 
1697
1697
  src/suite/a-home/modules/home-indexadmin:
1698
+ dependencies:
1699
+ zova-module-home-base:
1700
+ specifier: ^5.0.0
1701
+ version: link:../home-base
1698
1702
  devDependencies:
1699
1703
  clean-package:
1700
1704
  specifier: ^2.2.0
@@ -1704,6 +1708,10 @@ importers:
1704
1708
  version: 6.1.3
1705
1709
 
1706
1710
  src/suite/a-home/modules/home-indexweb:
1711
+ dependencies:
1712
+ zova-module-home-base:
1713
+ specifier: ^5.0.0
1714
+ version: link:../home-base
1707
1715
  devDependencies:
1708
1716
  clean-package:
1709
1717
  specifier: ^2.2.0
@@ -0,0 +1,12 @@
1
+ import { defineComponent } from 'vue';
2
+ import { prepareComponentOptions, useController } from 'zova';
3
+
4
+ import { ControllerSiteEntryTables } from '../../component/siteEntryTables/controller.jsx';
5
+ export type ZSiteEntryTablesProps = {
6
+ controllerRef?: (ref: ControllerSiteEntryTables) => void;
7
+ };
8
+
9
+ export const ZSiteEntryTables = defineComponent((_props: ZSiteEntryTablesProps) => {
10
+ useController(ControllerSiteEntryTables, undefined, undefined);
11
+ return () => {};
12
+ }, prepareComponentOptions());
@@ -67,6 +67,7 @@ declare module 'zova' {
67
67
  /** controller: begin */
68
68
  export * from '../component/itemLink/controller.jsx';
69
69
  export * from '../component/page/controller.jsx';
70
+ export * from '../component/siteEntryTables/controller.jsx';
70
71
  export * from '../page/authCallback/controller.jsx';
71
72
  export * from '../page/errorAccessDenied/controller.jsx';
72
73
  export * from '../page/errorExpired/controller.jsx';
@@ -89,6 +90,11 @@ declare module 'zova-module-home-base' {
89
90
  get scope(): ScopeModuleHomeBase;
90
91
  }
91
92
 
93
+ export interface ControllerSiteEntryTables {
94
+ /** @internal */
95
+ get scope(): ScopeModuleHomeBase;
96
+ }
97
+
92
98
  export interface ControllerPageAuthCallback {
93
99
  /** @internal */
94
100
  get scope(): ScopeModuleHomeBase;
@@ -113,6 +119,7 @@ declare module 'zova-module-home-base' {
113
119
  /** controller: begin */
114
120
  import { ControllerItemLink } from '../component/itemLink/controller.jsx';
115
121
  import { ControllerPage } from '../component/page/controller.jsx';
122
+ import { ControllerSiteEntryTables } from '../component/siteEntryTables/controller.jsx';
116
123
  import { ControllerPageAuthCallback } from '../page/authCallback/controller.jsx';
117
124
  import { ControllerPageErrorAccessDenied } from '../page/errorAccessDenied/controller.jsx';
118
125
  import { ControllerPageErrorExpired } from '../page/errorExpired/controller.jsx';
@@ -122,6 +129,7 @@ declare module 'zova' {
122
129
  export interface IBeanRecordLocal {
123
130
  'home-base.controller.itemLink': ControllerItemLink;
124
131
  'home-base.controller.page': ControllerPage;
132
+ 'home-base.controller.siteEntryTables': ControllerSiteEntryTables;
125
133
  'home-base.controller.pageAuthCallback': ControllerPageAuthCallback;
126
134
  'home-base.controller.pageErrorAccessDenied': ControllerPageErrorAccessDenied;
127
135
  'home-base.controller.pageErrorExpired': ControllerPageErrorExpired;
@@ -176,19 +184,24 @@ export * from './component/itemLink.js';
176
184
  import { ZItemLink } from './component/itemLink.js';
177
185
  export * from './component/page.js';
178
186
  import { ZPage } from './component/page.js';
187
+ export * from './component/siteEntryTables.js';
188
+ import { ZSiteEntryTables } from './component/siteEntryTables.js';
179
189
  export const components = {
180
190
  'itemLink': ZItemLink,
181
191
  'page': ZPage,
192
+ 'siteEntryTables': ZSiteEntryTables,
182
193
  };
183
194
  import 'zova';
184
195
  declare module 'zova' {
185
196
  export interface IComponentRecord {
186
197
  'home-base:itemLink': ControllerItemLink;
187
198
  'home-base:page': ControllerPage;
199
+ 'home-base:siteEntryTables': ControllerSiteEntryTables;
188
200
  }
189
201
  export interface IZovaComponentRecord {
190
202
  'home-base:itemLink': typeof ZItemLink;
191
203
  'home-base:page': typeof ZPage;
204
+ 'home-base:siteEntryTables': typeof ZSiteEntryTables;
192
205
  }
193
206
  }
194
207
  /** components: end */
@@ -0,0 +1,71 @@
1
+ import { BeanControllerBase } from 'zova';
2
+ import { Controller } from 'zova-module-a-bean';
3
+
4
+ interface SiteEntry {
5
+ site: 'Web' | 'Admin' | 'CommerceWeb' | 'CommerceAdmin';
6
+ href: string;
7
+ }
8
+
9
+ const siteEntries: SiteEntry[] = [
10
+ { site: 'Web', href: 'http://localhost:7102/' },
11
+ { site: 'Admin', href: 'http://localhost:7102/admin/' },
12
+ { site: 'CommerceWeb', href: 'http://localhost:7102/commerce/' },
13
+ { site: 'CommerceAdmin', href: 'http://localhost:7102/commerce-admin/' },
14
+ ];
15
+
16
+ @Controller()
17
+ export class ControllerSiteEntryTables extends BeanControllerBase {
18
+ protected render() {
19
+ const locale = this.scope.locale;
20
+ const siteLabels = {
21
+ Web: locale.SiteWeb(),
22
+ Admin: locale.SiteAdmin(),
23
+ CommerceWeb: locale.SiteCommerceWeb(),
24
+ CommerceAdmin: locale.SiteCommerceAdmin(),
25
+ };
26
+ const tables = [
27
+ { title: locale.VonaIntegratedSsr(), entries: siteEntries },
28
+ {
29
+ title: locale.ZovaStandaloneSsr(),
30
+ entries: siteEntries.map(entry => ({
31
+ ...entry,
32
+ href: entry.href.replace(':7102', ':9000'),
33
+ })),
34
+ },
35
+ ];
36
+
37
+ return (
38
+ <div class="grid gap-6 lg:grid-cols-2">
39
+ {tables.map(table => (
40
+ <section class="card border border-base-300 bg-base-100 shadow-sm">
41
+ <div class="card-body gap-4">
42
+ <h2 class="card-title">{table.title}</h2>
43
+ <div class="overflow-x-auto">
44
+ <table class="table">
45
+ <thead>
46
+ <tr>
47
+ <th scope="col">{locale.SsrSite()}</th>
48
+ <th scope="col">{locale.Url()}</th>
49
+ </tr>
50
+ </thead>
51
+ <tbody>
52
+ {table.entries.map(entry => (
53
+ <tr>
54
+ <td>{siteLabels[entry.site]}</td>
55
+ <td>
56
+ <a class="link link-primary break-all" href={entry.href} rel="noreferrer">
57
+ {entry.href}
58
+ </a>
59
+ </td>
60
+ </tr>
61
+ ))}
62
+ </tbody>
63
+ </table>
64
+ </div>
65
+ </div>
66
+ </section>
67
+ ))}
68
+ </div>
69
+ );
70
+ }
71
+ }
@@ -3,4 +3,12 @@ export default {
3
3
  GoHome: 'Go Home',
4
4
  LanguageEnglish: 'English',
5
5
  LanguageChinese: 'Chinese',
6
+ VonaIntegratedSsr: 'Vona integrated SSR',
7
+ ZovaStandaloneSsr: 'Zova standalone SSR',
8
+ SsrSite: 'SSR Site',
9
+ Url: 'URL',
10
+ SiteWeb: 'Web',
11
+ SiteAdmin: 'Admin',
12
+ SiteCommerceWeb: 'Commerce-Web',
13
+ SiteCommerceAdmin: 'Commerce-Admin',
6
14
  };
@@ -3,4 +3,12 @@ export default {
3
3
  GoHome: '返回首页',
4
4
  LanguageEnglish: '英语',
5
5
  LanguageChinese: '简体中文',
6
+ VonaIntegratedSsr: 'Vona 集成式 SSR',
7
+ ZovaStandaloneSsr: 'Zova 独立式 SSR',
8
+ SsrSite: 'SSR 站点',
9
+ Url: 'URL',
10
+ SiteWeb: 'Web',
11
+ SiteAdmin: 'Admin',
12
+ SiteCommerceWeb: 'Commerce-Web',
13
+ SiteCommerceAdmin: 'Commerce-Admin',
6
14
  };
@@ -32,6 +32,9 @@
32
32
  "prepack": "clean-package",
33
33
  "postpack": "clean-package restore"
34
34
  },
35
+ "dependencies": {
36
+ "zova-module-home-base": "^5.0.0"
37
+ },
35
38
  "devDependencies": {
36
39
  "clean-package": "^2.2.0",
37
40
  "rimraf": "^6.1.3"
@@ -1,23 +1,16 @@
1
1
  import { BeanControllerPageBase } from 'zova';
2
2
  import { Controller } from 'zova-module-a-bean';
3
+ import { ZPage, ZSiteEntryTables } from 'zova-module-home-base';
3
4
 
4
5
  @Controller()
5
6
  export class ControllerPageDashboard extends BeanControllerPageBase {
6
- public message: string;
7
-
8
- protected async __init__() {
9
- this.message = 'Hello Zova';
10
- }
11
-
12
7
  protected render() {
13
8
  return (
14
- <div style="text-align: center;">
15
- <div>
16
- <div style="font-size: 36px;">{this.message}</div>
17
- <div style="font-size: 24px;opacity:.4;">Less is more, while more is less</div>
18
- <div>Dashboard</div>
19
- </div>
20
- </div>
9
+ <ZPage>
10
+ <section class="mx-auto max-w-6xl p-6">
11
+ <ZSiteEntryTables />
12
+ </section>
13
+ </ZPage>
21
14
  );
22
15
  }
23
16
  }
@@ -32,7 +32,9 @@
32
32
  "prepack": "clean-package",
33
33
  "postpack": "clean-package restore"
34
34
  },
35
- "dependencies": {},
35
+ "dependencies": {
36
+ "zova-module-home-base": "^5.0.0"
37
+ },
36
38
  "devDependencies": {
37
39
  "clean-package": "^2.2.0",
38
40
  "rimraf": "^6.1.3"
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { BeanControllerPageBase } from 'zova';
3
3
  import { Controller } from 'zova-module-a-bean';
4
+ import { ZPage, ZSiteEntryTables } from 'zova-module-home-base';
4
5
 
5
6
  export const ControllerPageHomeSchemaParams = z.object({
6
7
  locale: z.string().optional(),
@@ -8,22 +9,13 @@ export const ControllerPageHomeSchemaParams = z.object({
8
9
 
9
10
  @Controller()
10
11
  export class ControllerPageHome extends BeanControllerPageBase {
11
- public message: string;
12
-
13
- protected async __init__() {
14
- this.message = 'Hello Zova';
15
- }
16
-
17
12
  protected render() {
18
- const localeCurrent = this.app.meta.locale.current;
19
13
  return (
20
- <div style="text-align: center;">
21
- <div>
22
- <div style="font-size: 36px;">{this.message}</div>
23
- <div style="font-size: 24px;opacity:.4;">Less is more, while more is less</div>
24
- <div>{`Web: ${localeCurrent}`}</div>
25
- </div>
26
- </div>
14
+ <ZPage>
15
+ <section class="mx-auto max-w-6xl p-6">
16
+ <ZSiteEntryTables />
17
+ </section>
18
+ </ZPage>
27
19
  );
28
20
  }
29
21
  }