cabloy 5.1.51 → 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 (80) hide show
  1. package/.claude/skills/cabloy-contract-loop/SKILL.md +1 -1
  2. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +1 -1
  3. package/.claude/skills/cabloy-workflow/SKILL.md +8 -4
  4. package/.claude/skills/cabloy-workflow/references/edition-detection.md +3 -2
  5. package/.github/workflows/docs-pages.yml +2 -0
  6. package/CHANGELOG.md +25 -0
  7. package/CLAUDE.md +4 -4
  8. package/README.md +36 -21
  9. package/cabloy-docs/.vitepress/config.mjs +33 -0
  10. package/cabloy-docs/ai/class-placement-rule.md +1 -0
  11. package/cabloy-docs/ai/cli-for-agents.md +1 -1
  12. package/cabloy-docs/ai/docs-skills-rules-mapping.md +1 -0
  13. package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
  14. package/cabloy-docs/ai/edition-detection.md +3 -3
  15. package/cabloy-docs/ai/global-bean-lookup.md +1 -0
  16. package/cabloy-docs/ai/introduction.md +3 -3
  17. package/cabloy-docs/ai/repo-guidance.md +2 -2
  18. package/cabloy-docs/ai/rules-and-config.md +1 -1
  19. package/cabloy-docs/ai/skills.md +2 -0
  20. package/cabloy-docs/ai/verification.md +1 -0
  21. package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
  22. package/cabloy-docs/backend/introduction.md +2 -2
  23. package/cabloy-docs/backend/logger-guide.md +1 -1
  24. package/cabloy-docs/backend/quickstart.md +3 -3
  25. package/cabloy-docs/editions/cabloy-basic.md +4 -3
  26. package/cabloy-docs/editions/cabloy-start.md +33 -2
  27. package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
  28. package/cabloy-docs/editions/overview.md +83 -20
  29. package/cabloy-docs/frontend/foundation.md +3 -2
  30. package/cabloy-docs/frontend/introduction.md +5 -4
  31. package/cabloy-docs/frontend/quickstart.md +3 -2
  32. package/cabloy-docs/frontend/scripts.md +2 -2
  33. package/cabloy-docs/fullstack/cli.md +118 -0
  34. package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +117 -0
  35. package/cabloy-docs/fullstack/edition-collaboration-differences.md +3 -2
  36. package/cabloy-docs/fullstack/introduction.md +45 -33
  37. package/cabloy-docs/fullstack/quickstart.md +7 -4
  38. package/cabloy-docs/fullstack/vona-zova-integration.md +2 -2
  39. package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
  40. package/cabloy-docs/index.md +39 -40
  41. package/cabloy-docs/reference/glossary.md +2 -2
  42. package/cabloy-docs/reference/repo-scripts.md +1 -1
  43. package/package.json +1 -1
  44. package/vona/README.md +1 -1
  45. package/vona/pnpm-lock.yaml +383 -38
  46. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
  47. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/.metadata/index.ts +49 -1
  48. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/controller/memoryDiag.ts +97 -0
  49. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  50. package/zova/README.md +1 -1
  51. package/zova/package.original.json +4 -4
  52. package/zova/packages-cli/cli/package.json +2 -2
  53. package/zova/packages-cli/cli-set-front/package.json +2 -2
  54. package/zova/packages-utils/zova-jsx/package.json +2 -2
  55. package/zova/packages-utils/zova-vite/package.json +2 -2
  56. package/zova/packages-utils/zova-vite/templates/app/controller.tsx_ +3 -3
  57. package/zova/packages-zova/zova/package.json +3 -3
  58. package/zova/packages-zova/zova-core/package.json +2 -2
  59. package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +3 -3
  60. package/zova/packages-zova/zova-core/src/bean/beanControllerPageBase.ts +1 -0
  61. package/zova/packages-zova/zova-core/src/core/component/module.ts +16 -16
  62. package/zova/packages-zova/zova-core/src/core/context/component.ts +35 -3
  63. package/zova/packages-zova/zova-core/src/core/context/util.ts +15 -11
  64. package/zova/pnpm-lock.yaml +1596 -1679
  65. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +11 -0
  66. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/toolMinimal.ts +9 -0
  67. package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolMinimal/controller.tsx +11 -0
  68. package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +10 -0
  69. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  70. package/zova/src/suite-vendor/a-zova/modules/a-model/src/service/storage.ts +4 -5
  71. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  72. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/monkey.ts +1 -1
  73. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  74. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +36 -1
  75. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +7 -2
  76. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +3 -0
  77. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
  78. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +70 -29
  79. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  80. package/zova/src/suite-vendor/a-zova/package.json +6 -6
@@ -46,6 +46,7 @@ export * from '../page/routeQuery/controller.jsx';
46
46
  export * from '../page/routeQueryB/controller.jsx';
47
47
  export * from '../page/state/controller.jsx';
48
48
  export * from '../page/style/controller.jsx';
49
+ export * from '../page/toolMinimal/controller.jsx';
49
50
  export * from '../page/toolOne/controller.jsx';
50
51
  export * from '../page/toolTwo/controller.jsx';
51
52
 
@@ -111,6 +112,11 @@ declare module 'zova-module-demo-basic' {
111
112
  get scope(): ScopeModuleDemoBasic;
112
113
  }
113
114
 
115
+ export interface ControllerPageToolMinimal {
116
+ /** @internal */
117
+ get scope(): ScopeModuleDemoBasic;
118
+ }
119
+
114
120
  export interface ControllerPageToolOne {
115
121
  /** @internal */
116
122
  get scope(): ScopeModuleDemoBasic;
@@ -134,6 +140,7 @@ import { ControllerPageRouteQuery } from '../page/routeQuery/controller.jsx';
134
140
  import { ControllerPageRouteQueryB } from '../page/routeQueryB/controller.jsx';
135
141
  import { ControllerPageState } from '../page/state/controller.jsx';
136
142
  import { ControllerPageStyle } from '../page/style/controller.jsx';
143
+ import { ControllerPageToolMinimal } from '../page/toolMinimal/controller.jsx';
137
144
  import { ControllerPageToolOne } from '../page/toolOne/controller.jsx';
138
145
  import { ControllerPageToolTwo } from '../page/toolTwo/controller.jsx';
139
146
  import 'zova';
@@ -150,6 +157,7 @@ declare module 'zova' {
150
157
  'demo-basic.controller.pageRouteQueryB': ControllerPageRouteQueryB;
151
158
  'demo-basic.controller.pageState': ControllerPageState;
152
159
  'demo-basic.controller.pageStyle': ControllerPageStyle;
160
+ 'demo-basic.controller.pageToolMinimal': ControllerPageToolMinimal;
153
161
  'demo-basic.controller.pageToolOne': ControllerPageToolOne;
154
162
  'demo-basic.controller.pageToolTwo': ControllerPageToolTwo;
155
163
  }
@@ -166,6 +174,7 @@ export * from './page/routeQueryB.js';
166
174
  import { NSControllerPageRouteQueryB } from './page/routeQueryB.js';
167
175
  export * from './page/state.js';
168
176
  export * from './page/style.js';
177
+ export * from './page/toolMinimal.js';
169
178
  export * from './page/toolOne.js';
170
179
  import { NSControllerPageToolOne } from './page/toolOne.js';
171
180
  export * from './page/toolTwo.js';
@@ -182,11 +191,13 @@ export interface IPagePathRecord {
182
191
  '/demo/basic/routeQueryB': TypePagePathSchema<NSControllerPageRouteQueryB.ParamsInput,NSControllerPageRouteQueryB.QueryInput>;
183
192
  '/demo/basic/state': TypePagePathSchema<undefined,undefined>;
184
193
  '/demo/basic/style': TypePagePathSchema<undefined,undefined>;
194
+ '/demo/basic/toolMinimal': TypePagePathSchema<undefined,undefined>;
185
195
  '/demo/basic/toolOne/:id?': TypePagePathSchema<NSControllerPageToolOne.ParamsInput,NSControllerPageToolOne.QueryInput>;
186
196
  '/demo/basic/toolTwo/:id?': TypePagePathSchema<NSControllerPageToolTwo.ParamsInput,NSControllerPageToolTwo.QueryInput>;
187
197
  }
188
198
  export interface IPageNameRecord {
189
199
  'demo-basic:routeParams': undefined;
200
+ 'demo-basic:toolMinimal': undefined;
190
201
  'demo-basic:toolOne': undefined;
191
202
  'demo-basic:toolTwo': undefined;
192
203
  }
@@ -0,0 +1,9 @@
1
+ import { createZovaComponentPage } from 'zova';
2
+
3
+ import { ControllerPageToolMinimal } from '../../page/toolMinimal/controller.jsx';
4
+
5
+ export const ZPageToolMinimal = createZovaComponentPage(
6
+ ControllerPageToolMinimal,
7
+ undefined,
8
+ undefined,
9
+ );
@@ -0,0 +1,11 @@
1
+ import { BeanControllerPageBase } from 'zova';
2
+ import { Controller } from 'zova-module-a-bean';
3
+
4
+ @Controller()
5
+ export class ControllerPageToolMinimal extends BeanControllerPageBase {
6
+ protected async __init__() {}
7
+
8
+ protected render() {
9
+ return <div>minimal</div>;
10
+ }
11
+ }
@@ -7,6 +7,7 @@ import { ZPageRouteQuery } from './.metadata/page/routeQuery.js';
7
7
  import { ZPageRouteQueryB } from './.metadata/page/routeQueryB.js';
8
8
  import { ZPageState } from './.metadata/page/state.js';
9
9
  import { ZPageStyle } from './.metadata/page/style.js';
10
+ import { ZPageToolMinimal } from './.metadata/page/toolMinimal.js';
10
11
  import { ZPageToolOne } from './.metadata/page/toolOne.js';
11
12
  import { ZPageToolTwo } from './.metadata/page/toolTwo.js';
12
13
 
@@ -26,6 +27,15 @@ export const routes: IModuleRoute[] = [
26
27
  },
27
28
  },
28
29
  { path: 'routeQueryB', component: ZPageRouteQueryB, meta: { requiresAuth: false } },
30
+ {
31
+ name: 'toolMinimal',
32
+ path: 'toolMinimal',
33
+ component: ZPageToolMinimal,
34
+ meta: {
35
+ layout: 'empty',
36
+ requiresAuth: false,
37
+ },
38
+ },
29
39
  {
30
40
  name: 'toolOne',
31
41
  path: 'toolOne/:id?',
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-model",
3
- "version": "5.1.23",
3
+ "version": "5.1.24",
4
4
  "gitHead": "09d901d17140a80ee0764211b441cda72fd94663",
5
5
  "description": "core",
6
6
  "keywords": [
@@ -10,11 +10,10 @@ export class ServiceStorage extends BeanBase {
10
10
 
11
11
  async moduleLoaded() {
12
12
  // options
13
- let options = this.scope.config.queryClientConfig.defaultOptions;
13
+ const options = deepExtend({}, this.scope.config.queryClientConfig.defaultOptions);
14
14
  if (process.env.SERVER) {
15
- options = deepExtend({}, options, {
16
- queries: { gcTime: Infinity },
17
- });
15
+ options.queries ??= {};
16
+ options.queries.gcTime = Infinity;
18
17
  }
19
18
  // queryCache
20
19
  const queryCache = new QueryCache();
@@ -39,7 +38,7 @@ export class ServiceStorage extends BeanBase {
39
38
  },
40
39
  });
41
40
  }
42
- this._queryClient.clear();
41
+ this._queryClient?.clear();
43
42
  });
44
43
  }
45
44
  // client
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-openapi",
3
- "version": "5.1.30",
3
+ "version": "5.1.31",
4
4
  "gitHead": "09d901d17140a80ee0764211b441cda72fd94663",
5
5
  "description": "",
6
6
  "keywords": [
@@ -22,7 +22,7 @@ export class Monkey extends BeanSimple implements IMonkeyModule, IMonkeyBeanInit
22
22
  if (this._moduleSelf === module) {
23
23
  await this._loadSdk();
24
24
  this.ctx.util.instanceScope(() => {
25
- return watch(
25
+ watch(
26
26
  () => {
27
27
  return this.app.meta.locale.current;
28
28
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-ssr",
3
- "version": "5.1.18",
3
+ "version": "5.1.19",
4
4
  "gitHead": "09d901d17140a80ee0764211b441cda72fd94663",
5
5
  "description": "",
6
6
  "keywords": [
@@ -1,5 +1,5 @@
1
1
  import type { ComponentInternalInstance, Ref, VNode } from 'vue';
2
- import type { Functionable } from 'zova';
2
+ import type { Functionable, ZovaContext } from 'zova';
3
3
 
4
4
  import { includeBooleanAttr, isBooleanAttr, isString, stringifyStyle } from '@vue/shared';
5
5
  import { defu } from 'defu';
@@ -23,6 +23,7 @@ const SymbolOnHydrateds = Symbol('SymbolOnHydrateds');
23
23
  const SymbolOnHydratePropHasMismatches = Symbol('SymbolOnHydratePropHasMismatches');
24
24
  const SymbolInstanceUpdates = Symbol('SymbolInstanceUpdates');
25
25
  const SymbolHydratingCounter = Symbol('SymbolHydratingCounter');
26
+ const SymbolServerContexts = Symbol('SymbolServerContexts');
26
27
 
27
28
  export class CtxSSR extends BeanSimple {
28
29
  private [SymbolIsRuntimeSsrPreHydration]: Ref<boolean> = ref(false);
@@ -33,11 +34,15 @@ export class CtxSSR extends BeanSimple {
33
34
  private [SymbolInstanceUpdates]: ComponentInternalInstance[] = [];
34
35
 
35
36
  private [SymbolHydratingCounter]: number = 0;
37
+ private [SymbolServerContexts]: Set<ZovaContext> = new Set();
36
38
 
37
39
  public metaStore: CtxSSRMetaStore;
38
40
 
39
41
  /** @internal */
40
42
  public initialize() {
43
+ if (process.env.SERVER) {
44
+ this._serverContextRegister();
45
+ }
41
46
  // ssr state
42
47
  this[SymbolSSRState] = this.sys.bean._getBeanSyncOnly('a-ssr.sys.ssrState');
43
48
  // SymbolIsRuntimeSsrPreHydration
@@ -63,6 +68,26 @@ export class CtxSSR extends BeanSimple {
63
68
  }
64
69
  }
65
70
 
71
+ private _serverContextRegister(currentContext: ZovaContext = this.ctx) {
72
+ const serverContexts = this[SymbolServerContexts];
73
+ serverContexts.add(currentContext);
74
+ this.context.onRendered(() => {
75
+ serverContexts.delete(currentContext);
76
+ });
77
+ }
78
+
79
+ private _serverContextsDispose() {
80
+ const serverContexts = this[SymbolServerContexts];
81
+ for (const serverContext of serverContexts) {
82
+ if (serverContext.disposed) continue;
83
+ if (serverContext.bean && serverContext.bean !== serverContext.app?.bean) {
84
+ serverContext.bean.dispose();
85
+ }
86
+ serverContext.dispose();
87
+ }
88
+ serverContexts.clear();
89
+ }
90
+
66
91
  get isRuntimeSsrPreHydration() {
67
92
  return this[SymbolIsRuntimeSsrPreHydration].value;
68
93
  }
@@ -265,4 +290,14 @@ export class CtxSSR extends BeanSimple {
265
290
  }
266
291
  return false;
267
292
  }
293
+
294
+ /** @internal */
295
+ public _registerServerContext(currentContext: ZovaContext) {
296
+ this._serverContextRegister(currentContext);
297
+ }
298
+
299
+ /** @internal */
300
+ public _disposeServerContexts() {
301
+ this._serverContextsDispose();
302
+ }
268
303
  }
@@ -32,13 +32,18 @@ export class CtxSSRMetaStore extends BeanSimple {
32
32
  }
33
33
 
34
34
  private _onRenderedLast(err?: Error) {
35
- if (!err) {
35
+ const app = this.app;
36
+ try {
37
+ if (err) return;
38
+
36
39
  const ssrContext = this.ctx.meta.$ssr.context;
37
40
  this._injectContextState(ssrContext);
38
41
  this._injectContextStateDefer(ssrContext);
39
42
  this._injectServerMeta(ssrContext);
43
+ } finally {
44
+ this.ctx.meta.$ssr._disposeServerContexts();
45
+ app?.close();
40
46
  }
41
- this.app.close();
42
47
  }
43
48
 
44
49
  addMetaOptions(metaOptionsWrapper: SSRMetaOptionsWrapper) {
@@ -22,6 +22,9 @@ export class Monkey
22
22
  {
23
23
  appContextInitialize(ctx: ZovaContext): void {
24
24
  ctx.meta.$ssr = ctx.app.ctx.meta.$ssr;
25
+ if (process.env.SERVER) {
26
+ ctx.meta.$ssr._registerServerContext(ctx);
27
+ }
25
28
  }
26
29
 
27
30
  async appInitialize() {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-ssrserver",
3
- "version": "5.1.15",
3
+ "version": "5.1.16",
4
4
  "gitHead": "09d901d17140a80ee0764211b441cda72fd94663",
5
5
  "description": "",
6
6
  "keywords": [
@@ -72,42 +72,83 @@ export class ServiceSsrHandler extends BeanBase {
72
72
  onRenderedList.push(fn);
73
73
  },
74
74
  };
75
- // render
76
- const renderFn = await serverEntry(ssrContext);
77
- const [runtimePageContent, err] = await catchError(() => {
78
- return renderToString(renderFn, ssrContext);
79
- });
75
+ let renderFn;
76
+ let runtimePageContent = '';
77
+ let renderedError;
78
+ let onRenderedFlushed = false;
79
+ let renderedFinalized = false;
80
+ try {
81
+ // render
82
+ renderFn = await serverEntry(ssrContext);
83
+ const [runtimePageContentInner, err] = await catchError(() => {
84
+ return renderToString(renderFn, ssrContext);
85
+ });
86
+ if (runtimePageContentInner) {
87
+ runtimePageContent = runtimePageContentInner as string;
88
+ }
80
89
 
81
- const error = ssrContext._meta.renderError ?? err;
82
- onRenderedList.forEach(fn => {
83
- fn(error);
84
- });
85
- cast(ssrContext).rendered(error);
86
- if (error) {
87
- if (error instanceof Error) throw error;
88
- return error;
89
- }
90
+ const error = ssrContext._meta.renderError ?? err;
91
+ renderedError = error;
92
+ onRenderedList.forEach(fn => {
93
+ fn(error);
94
+ });
95
+ onRenderedFlushed = true;
96
+ cast(ssrContext).rendered(error);
97
+ renderedFinalized = true;
98
+ if (error) {
99
+ if (error instanceof Error) throw error;
100
+ return error;
101
+ }
90
102
 
91
- ssrContext._meta.runtimePageContent = runtimePageContent;
103
+ ssrContext._meta.runtimePageContent = runtimePageContent;
104
+
105
+ // @vitejs/plugin-vue injects code into a component's setup() that registers
106
+ // itself on ctx.modules. After the render, ctx.modules would contain all the
107
+ // components that have been instantiated during this render call.
108
+ const modules = cast(ssrContext).modules;
109
+ if (modules) {
110
+ ssrContext._meta.endingHeadTags += this._renderModulesPreload_zova(modules, {
111
+ ssrContext,
112
+ });
113
+ ssrContext._meta.endingHeadTags += this._renderModulesPreload(modules, {
114
+ ssrContext,
115
+ });
116
+ }
92
117
 
93
- // @vitejs/plugin-vue injects code into a component's setup() that registers
94
- // itself on ctx.modules. After the render, ctx.modules would contain all the
95
- // components that have been instantiated during this render call.
96
- ssrContext._meta.endingHeadTags += this._renderModulesPreload_zova(cast(ssrContext).modules, {
97
- ssrContext,
98
- });
99
- ssrContext._meta.endingHeadTags += this._renderModulesPreload(cast(ssrContext).modules, {
100
- ssrContext,
101
- });
118
+ const html = renderTemplate(ssrContext);
102
119
 
103
- const html = renderTemplate(ssrContext);
120
+ // transferCache
121
+ await this._renderTransferCache(options, route);
104
122
 
105
- // transferCache
106
- await this._renderTransferCache(options, route);
123
+ // todo: ssg
107
124
 
108
- // todo: ssg
125
+ return html;
126
+ } finally {
127
+ const context = cast(ssrContext);
128
+ if (!onRenderedFlushed) {
129
+ onRenderedList.forEach(fn => {
130
+ fn(renderedError);
131
+ });
132
+ }
133
+ if (!renderedFinalized && typeof context.rendered === 'function') {
134
+ context.rendered(renderedError);
135
+ }
136
+ onRenderedList.length = 0;
137
+ this._clearSsrContext(context);
138
+ renderFn = undefined;
139
+ }
140
+ }
109
141
 
110
- return html;
142
+ private _clearSsrContext(context): void {
143
+ context.modules?.clear?.();
144
+ if (context.__qMetaList?.length) {
145
+ context.__qMetaList.length = 0;
146
+ }
147
+ context.state = undefined;
148
+ context.stateDefer = undefined;
149
+ context.performAction = undefined;
150
+ context.rendered = undefined;
151
+ context._meta = undefined;
111
152
  }
112
153
 
113
154
  public async ensureReady(handlerNonce: number) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-zova",
3
- "version": "5.1.60",
3
+ "version": "5.1.61",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "zova",
6
6
  "keywords": [
@@ -43,7 +43,7 @@
43
43
  "@cabloy/word-utils": "^2.1.14",
44
44
  "defu": "^6.1.7",
45
45
  "luxon": "^3.7.2",
46
- "zova-jsx": "^1.1.54"
46
+ "zova-jsx": "^1.1.55"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@cabloy/cli": "^3.1.14",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-suite-a-zova",
3
- "version": "5.1.92",
3
+ "version": "5.1.93",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "zova",
6
6
  "license": "MIT",
@@ -21,18 +21,18 @@
21
21
  "zova-module-a-interceptor": "^5.1.22",
22
22
  "zova-module-a-logger": "^5.1.20",
23
23
  "zova-module-a-meta": "^5.1.15",
24
- "zova-module-a-model": "^5.1.23",
25
- "zova-module-a-openapi": "^5.1.30",
24
+ "zova-module-a-model": "^5.1.24",
25
+ "zova-module-a-openapi": "^5.1.31",
26
26
  "zova-module-a-router": "^5.1.23",
27
27
  "zova-module-a-routerstack": "^5.1.20",
28
28
  "zova-module-a-routertabs": "^5.1.25",
29
- "zova-module-a-ssr": "^5.1.18",
29
+ "zova-module-a-ssr": "^5.1.19",
30
30
  "zova-module-a-ssrhmr": "^5.1.16",
31
- "zova-module-a-ssrserver": "^5.1.15",
31
+ "zova-module-a-ssrserver": "^5.1.16",
32
32
  "zova-module-a-style": "^5.1.25",
33
33
  "zova-module-a-table": "^5.1.27",
34
34
  "zova-module-a-zod": "^5.1.23",
35
- "zova-module-a-zova": "^5.1.60"
35
+ "zova-module-a-zova": "^5.1.61"
36
36
  },
37
37
  "title": "a-zova"
38
38
  }