cabloy 5.1.172 → 5.1.174

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 (97) hide show
  1. package/.cabloy-version +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/package.json +2 -2
  4. package/repo-docs/frontend/component-guide.md +33 -0
  5. package/repo-docs/frontend/model-resource-cookbook.md +0 -8
  6. package/repo-docs/frontend/model-resource-usage-guide.md +0 -4
  7. package/repo-e2e/specs/cabloy-basic.spec.ts +158 -0
  8. package/repo-e2e/specs/controller-boundary.spec.ts +261 -0
  9. package/test-results/.last-run.json +1 -1
  10. package/vona/packages-utils/lint/package.json +1 -1
  11. package/vona/packages-utils/lint/src/oxc/lint.ts +1 -1
  12. package/vona/packages-utils/lint/src/oxc/lintVue.ts +1 -1
  13. package/vona/pnpm-lock.yaml +238 -46
  14. package/vona/pnpm-workspace.yaml +1 -1
  15. package/zova/package.original.json +1 -1
  16. package/zova/packages-cli/cli/package.json +2 -2
  17. package/zova/packages-cli/cli-set-front/package.json +3 -3
  18. package/zova/packages-utils/babel-plugin-zova-behavior/package.json +2 -1
  19. package/zova/packages-utils/babel-plugin-zova-behavior/src/index.ts +21 -8
  20. package/zova/packages-utils/babel-plugin-zova-behavior/test/behaviorSlots.test.ts +111 -0
  21. package/zova/packages-utils/zova-jsx/package.json +2 -2
  22. package/zova/packages-utils/zova-vite/package.json +2 -2
  23. package/zova/packages-zova/zova/package.json +3 -3
  24. package/zova/packages-zova/zova-core/package.json +1 -1
  25. package/zova/packages-zova/zova-core/src/bean/beanBase.ts +1 -1
  26. package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +95 -39
  27. package/zova/packages-zova/zova-core/src/bean/resource/error/type.ts +9 -0
  28. package/zova/packages-zova/zova-core/src/bean/type.ts +18 -0
  29. package/zova/packages-zova/zova-core/src/components/component.ts +2 -1
  30. package/zova/packages-zova/zova-core/src/composables/useController.ts +155 -25
  31. package/zova/packages-zova/zova-core/src/core/component/error.ts +62 -5
  32. package/zova/packages-zova/zova-core/src/core/context/component.ts +37 -2
  33. package/zova/packages-zova/zova-core/src/core/context/hooks.ts +13 -2
  34. package/zova/packages-zova/zova-core/src/core/context/meta.ts +1 -0
  35. package/zova/packages-zova/zova-core/src/core/context/state.ts +161 -0
  36. package/zova/packages-zova/zova-core/src/core/sys/config.ts +32 -7
  37. package/zova/packages-zova/zova-core/src/types/interface/monkey.ts +15 -0
  38. package/zova/packages-zova/zova-core/src/types/utils/powerPartial.ts +1 -1
  39. package/zova/pnpm-lock.yaml +40 -25
  40. package/zova/src/front/config/config/config.ts +11 -0
  41. package/zova/src/front/config/config/render.tsx +79 -0
  42. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +0 -1
  43. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/component/controllerBoundaryProbe.ts +31 -0
  44. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/component/controllerBoundaryProbeInline.ts +34 -0
  45. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/component/controllerBoundaryProbeOverride.ts +34 -0
  46. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +58 -1
  47. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/controllerBoundary.ts +23 -0
  48. package/zova/src/suite/a-demo/modules/demo-basic/src/component/controllerBoundaryProbe/controller.tsx +36 -0
  49. package/zova/src/suite/a-demo/modules/demo-basic/src/component/controllerBoundaryProbeInline/controller.tsx +34 -0
  50. package/zova/src/suite/a-demo/modules/demo-basic/src/component/controllerBoundaryProbeOverride/controller.tsx +46 -0
  51. package/zova/src/suite/a-demo/modules/demo-basic/src/page/controllerBoundary/controller.tsx +185 -0
  52. package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +6 -0
  53. package/zova/src/suite/a-home/modules/home-base/src/config/locale/en-us.ts +1 -0
  54. package/zova/src/suite/a-home/modules/home-base/src/config/locale/zh-cn.ts +1 -0
  55. package/zova/src/suite/a-training/modules/training-student/src/model/student.ts +0 -3
  56. package/zova/src/suite/cabloy-basic/modules/basic-button/package.json +58 -0
  57. package/zova/src/suite/cabloy-basic/modules/basic-button/src/.metadata/component/button.ts +31 -0
  58. package/zova/src/suite/cabloy-basic/modules/basic-button/src/.metadata/index.ts +122 -0
  59. package/zova/src/suite/cabloy-basic/modules/basic-button/src/.metadata/this.ts +2 -0
  60. package/zova/src/suite/cabloy-basic/modules/basic-button/src/bean/behavior.perform.tsx +103 -0
  61. package/zova/src/suite/cabloy-basic/modules/basic-button/src/component/button/controller.tsx +39 -0
  62. package/zova/src/suite/cabloy-basic/modules/basic-button/src/index.ts +1 -0
  63. package/zova/src/suite/cabloy-basic/modules/basic-button/tsconfig.build.json +13 -0
  64. package/zova/src/suite/cabloy-basic/modules/basic-button/tsconfig.json +5 -0
  65. package/zova/src/suite/cabloy-basic/modules/basic-details/package.json +2 -1
  66. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionDelete.tsx +4 -4
  67. package/zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx +5 -1
  68. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx +5 -1
  69. package/zova/src/suite/cabloy-basic/modules/basic-table/package.json +2 -1
  70. package/zova/src/suite/cabloy-basic/modules/basic-table/src/bean/tableCell.actionDelete.tsx +4 -4
  71. package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/actionRefresh/controller.tsx +10 -8
  72. package/zova/src/suite/cabloy-basic/package.json +1 -0
  73. package/zova/src/suite-vendor/a-cabloy/modules/a-layoutprofile/package.json +1 -1
  74. package/zova/src/suite-vendor/a-cabloy/modules/a-layoutprofile/src/model/layoutprofile.ts +0 -3
  75. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  76. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/.metadata/page/resource.ts +6 -1
  77. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +0 -1
  78. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx +5 -1
  79. package/zova/src/suite-vendor/a-cabloy/package.json +3 -3
  80. package/zova/src/suite-vendor/a-zova/modules/a-bean/cli/controller/metadata/generateFilePage.ts +3 -1
  81. package/zova/src/suite-vendor/a-zova/modules/a-bean/package.json +1 -1
  82. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  83. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useMutation.ts +1 -11
  84. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useQuery.ts +1 -17
  85. package/zova/src/suite-vendor/a-zova/modules/a-model/src/lib/utils.ts +2 -1
  86. package/zova/src/suite-vendor/a-zova/modules/a-model/src/types/query.ts +2 -7
  87. package/zova/src/suite-vendor/a-zova/modules/a-model/test/lib/mutation.types.ts +14 -0
  88. package/zova/src/suite-vendor/a-zova/modules/a-model/test/lib/queryEnsureLoaded.test.ts +56 -0
  89. package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +1 -1
  90. package/zova/src/suite-vendor/a-zova/modules/a-router/src/monkey.ts +8 -0
  91. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  92. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +85 -1
  93. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +25 -1
  94. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/types/ssr.ts +15 -1
  95. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  96. package/zova/src/suite-vendor/a-zova/package.json +6 -6
  97. /package/vona/patches/{zova-core@5.1.89.patch → zova-core@5.1.90.patch} +0 -0
@@ -5,6 +5,7 @@ import type { BeanContainer } from '../../bean/beanContainer.ts';
5
5
  import type { IControllerData } from '../../bean/type.ts';
6
6
  import type { ZovaApplication } from '../../core/app/application.ts';
7
7
  import type { ZovaContext } from '../../core/context/context.ts';
8
+ import type { Constructable } from '../../decorator/type/constructable.ts';
8
9
 
9
10
  export type TypeMonkeyName =
10
11
  | keyof IMonkeyModuleSys
@@ -59,10 +60,24 @@ export interface IMonkeyApp
59
60
  IMonkeyBeanDispose,
60
61
  IMonkeyBeanDisposed {}
61
62
 
63
+ export type ControllerLoadPhase = 'prepare' | 'fallback' | 'replay';
64
+
65
+ export interface IControllerLoadEvent {
66
+ phase: ControllerLoadPhase;
67
+ ctx: ZovaContext;
68
+ controllerBeanFullName: Constructable | string;
69
+ controllerBeanName?: string;
70
+ error?: Error;
71
+ controllerRecorded?: boolean;
72
+ replayError?: Error;
73
+ replayControllerRecorded?: boolean;
74
+ }
75
+
62
76
  export interface IMonkeyController {
63
77
  controllerDataPrepare(controllerData: IControllerData, ctx: ZovaContext): void;
64
78
  controllerDataInit(controllerData: IControllerData, controller: BeanBase): void;
65
79
  controllerDataUpdate(controller: BeanBase): void;
80
+ controllerLoad?(event: IControllerLoadEvent): void;
66
81
  }
67
82
 
68
83
  export interface IMonkeySysApplicationInitialize {
@@ -1,3 +1,3 @@
1
1
  export type PowerPartial<T> = {
2
- [U in keyof T]?: T[U] extends object ? PowerPartial<T[U]> : T[U];
2
+ [U in keyof T]?: T[U] extends Function ? T[U] : T[U] extends object ? PowerPartial<T[U]> : T[U];
3
3
  };
@@ -136,7 +136,7 @@ importers:
136
136
  specifier: workspace:^
137
137
  version: link:packages-zova/zova
138
138
  zova-jsx:
139
- specifier: ^1.1.89
139
+ specifier: ^1.1.90
140
140
  version: link:packages-utils/zova-jsx
141
141
  zova-module-a-api:
142
142
  specifier: workspace:^
@@ -228,6 +228,9 @@ importers:
228
228
  zova-module-basic-app:
229
229
  specifier: workspace:^
230
230
  version: link:src/suite/cabloy-basic/modules/basic-app
231
+ zova-module-basic-button:
232
+ specifier: workspace:^
233
+ version: link:src/suite/cabloy-basic/modules/basic-button
231
234
  zova-module-basic-captcha:
232
235
  specifier: workspace:^
233
236
  version: link:src/suite/cabloy-basic/modules/basic-captcha
@@ -368,8 +371,8 @@ importers:
368
371
  specifier: ^3.1.29
369
372
  version: 3.1.29(vue@3.5.42(typescript@5.9.3))
370
373
  '@cabloy/lint':
371
- specifier: ^5.1.32
372
- version: 5.1.32(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.70.0(typescript@5.9.3))(@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(oxfmt@0.62.0)(oxlint@1.82.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)))
374
+ specifier: ^5.1.33
375
+ version: 5.1.33(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.70.0(typescript@5.9.3))(@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(oxfmt@0.62.0)(oxlint@1.82.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)))
373
376
  '@cabloy/openapi-typescript':
374
377
  specifier: ^7.9.2
375
378
  version: 7.9.2(typescript@5.9.3)
@@ -452,7 +455,7 @@ importers:
452
455
  specifier: ^7.6.2
453
456
  version: 7.8.5
454
457
  zova-cli-set-front:
455
- specifier: ^1.2.106
458
+ specifier: ^1.2.108
456
459
  version: link:../cli-set-front
457
460
  devDependencies:
458
461
  clean-package:
@@ -513,7 +516,7 @@ importers:
513
516
  specifier: ^1.1.15
514
517
  version: link:../../packages-utils/babel-plugin-zova-bean-use
515
518
  babel-plugin-zova-behavior:
516
- specifier: ^1.1.15
519
+ specifier: ^1.1.16
517
520
  version: link:../../packages-utils/babel-plugin-zova-behavior
518
521
  babel-plugin-zova-component:
519
522
  specifier: ^1.1.15
@@ -561,7 +564,7 @@ importers:
561
564
  specifier: ^1.1.17
562
565
  version: link:../../packages-utils/zova-openapi
563
566
  zova-vite:
564
- specifier: ^1.1.45
567
+ specifier: ^1.1.46
565
568
  version: link:../../packages-utils/zova-vite
566
569
  devDependencies:
567
570
  clean-package:
@@ -729,7 +732,7 @@ importers:
729
732
  specifier: ^3.5.38
730
733
  version: 3.5.42(typescript@5.9.3)
731
734
  zova-core:
732
- specifier: ^5.1.89
735
+ specifier: ^5.1.90
733
736
  version: link:../../packages-zova/zova-core
734
737
  devDependencies:
735
738
  clean-package:
@@ -818,7 +821,7 @@ importers:
818
821
  specifier: ^1.1.15
819
822
  version: link:../babel-plugin-zova-bean-use
820
823
  babel-plugin-zova-behavior:
821
- specifier: ^1.1.15
824
+ specifier: ^1.1.16
822
825
  version: link:../babel-plugin-zova-behavior
823
826
  babel-plugin-zova-component:
824
827
  specifier: ^1.1.15
@@ -870,10 +873,10 @@ importers:
870
873
  packages-zova/zova:
871
874
  dependencies:
872
875
  zova-core:
873
- specifier: ^5.1.89
876
+ specifier: ^5.1.90
874
877
  version: link:../zova-core
875
878
  zova-suite-a-zova:
876
- specifier: ^5.1.161
879
+ specifier: ^5.1.162
877
880
  version: link:../../src/suite-vendor/a-zova
878
881
  devDependencies:
879
882
  clean-package:
@@ -977,13 +980,13 @@ importers:
977
980
  src/suite-vendor/a-cabloy:
978
981
  dependencies:
979
982
  zova-module-a-layoutprofile:
980
- specifier: ^5.0.2
983
+ specifier: ^5.0.3
981
984
  version: link:modules/a-layoutprofile
982
985
  zova-module-a-rbac:
983
986
  specifier: ^5.0.1
984
987
  version: link:modules/a-rbac
985
988
  zova-module-rest-resource:
986
- specifier: ^5.1.54
989
+ specifier: ^5.1.55
987
990
  version: link:modules/rest-resource
988
991
 
989
992
  src/suite-vendor/a-cabloy/modules/a-layoutprofile:
@@ -1073,7 +1076,7 @@ importers:
1073
1076
  specifier: ^5.1.26
1074
1077
  version: link:modules/a-app
1075
1078
  zova-module-a-bean:
1076
- specifier: ^5.1.35
1079
+ specifier: ^5.1.36
1077
1080
  version: link:modules/a-bean
1078
1081
  zova-module-a-behavior:
1079
1082
  specifier: ^5.1.26
@@ -1106,13 +1109,13 @@ importers:
1106
1109
  specifier: ^5.1.22
1107
1110
  version: link:modules/a-meta
1108
1111
  zova-module-a-model:
1109
- specifier: ^5.1.36
1112
+ specifier: ^5.1.37
1110
1113
  version: link:modules/a-model
1111
1114
  zova-module-a-openapi:
1112
1115
  specifier: ^5.1.54
1113
1116
  version: link:modules/a-openapi
1114
1117
  zova-module-a-router:
1115
- specifier: ^5.1.37
1118
+ specifier: ^5.1.38
1116
1119
  version: link:modules/a-router
1117
1120
  zova-module-a-routerstack:
1118
1121
  specifier: ^5.1.29
@@ -1121,7 +1124,7 @@ importers:
1121
1124
  specifier: ^5.1.34
1122
1125
  version: link:modules/a-routertabs
1123
1126
  zova-module-a-ssr:
1124
- specifier: ^5.1.39
1127
+ specifier: ^5.1.40
1125
1128
  version: link:modules/a-ssr
1126
1129
  zova-module-a-ssrhmr:
1127
1130
  specifier: ^5.1.23
@@ -1139,7 +1142,7 @@ importers:
1139
1142
  specifier: ^5.1.37
1140
1143
  version: link:modules/a-zod
1141
1144
  zova-module-a-zova:
1142
- specifier: ^5.1.104
1145
+ specifier: ^5.1.105
1143
1146
  version: link:modules/a-zova
1144
1147
 
1145
1148
  src/suite-vendor/a-zova/modules/a-api:
@@ -1481,7 +1484,7 @@ importers:
1481
1484
  specifier: ^3.7.2
1482
1485
  version: 3.7.2
1483
1486
  zova-jsx:
1484
- specifier: ^1.1.89
1487
+ specifier: ^1.1.90
1485
1488
  version: link:../../../../../packages-utils/zova-jsx
1486
1489
  devDependencies:
1487
1490
  '@cabloy/cli':
@@ -1847,6 +1850,9 @@ importers:
1847
1850
  zova-module-basic-app:
1848
1851
  specifier: ^5.0.0
1849
1852
  version: link:modules/basic-app
1853
+ zova-module-basic-button:
1854
+ specifier: ^5.0.0
1855
+ version: link:modules/basic-button
1850
1856
  zova-module-basic-captcha:
1851
1857
  specifier: ^5.0.8
1852
1858
  version: link:modules/basic-captcha
@@ -1923,6 +1929,15 @@ importers:
1923
1929
  specifier: ^6.1.3
1924
1930
  version: 6.1.3
1925
1931
 
1932
+ src/suite/cabloy-basic/modules/basic-button:
1933
+ devDependencies:
1934
+ clean-package:
1935
+ specifier: ^2.2.0
1936
+ version: 2.2.0
1937
+ rimraf:
1938
+ specifier: ^6.1.3
1939
+ version: 6.1.3
1940
+
1926
1941
  src/suite/cabloy-basic/modules/basic-captcha:
1927
1942
  devDependencies:
1928
1943
  clean-package:
@@ -2347,8 +2362,8 @@ packages:
2347
2362
  '@cabloy/json5@1.1.9':
2348
2363
  resolution: {integrity: sha512-jV0WqPaTuLOw5UvFWOVD/1HNaWHKABs8Xd652C7jq7vhKPZsKzBy5de+Az4kd3jgn4JxaPLJgVTID/svynAzFA==}
2349
2364
 
2350
- '@cabloy/lint@5.1.32':
2351
- resolution: {integrity: sha512-CgIheBgpXahfKixVLDweSoEki6jUjVAPE/8Rdj3OdtAAHSvxPA4keoPBB8oeUmZNrTVzZF+iC6FqB37n1fqpRg==}
2365
+ '@cabloy/lint@5.1.33':
2366
+ resolution: {integrity: sha512-x02EcUc5Wk0yFuofcb4xdz/P68l/yCJYyxB2TNPMNHEh3FAYto2z8WrKNZmLLEaJxI5TVNP4s44vP/LWh4A7Eg==}
2352
2367
  peerDependencies:
2353
2368
  oxfmt: '>=0.62.0'
2354
2369
  oxlint: '>=1.77.0'
@@ -8623,7 +8638,7 @@ snapshots:
8623
8638
 
8624
8639
  '@babel/generator@8.0.0-rc.2':
8625
8640
  dependencies:
8626
- '@babel/parser': 8.0.0-rc.2
8641
+ '@babel/parser': 8.0.5
8627
8642
  '@babel/types': 8.0.0-rc.2
8628
8643
  '@jridgewell/gen-mapping': 0.3.13
8629
8644
  '@jridgewell/trace-mapping': 0.3.31
@@ -8632,8 +8647,8 @@ snapshots:
8632
8647
 
8633
8648
  '@babel/generator@8.0.0-rc.3':
8634
8649
  dependencies:
8635
- '@babel/parser': 8.0.0-rc.3
8636
- '@babel/types': 8.0.0-rc.3
8650
+ '@babel/parser': 8.0.5
8651
+ '@babel/types': 8.0.5
8637
8652
  '@jridgewell/gen-mapping': 0.3.13
8638
8653
  '@jridgewell/trace-mapping': 0.3.31
8639
8654
  '@types/jsesc': 2.5.1
@@ -8740,7 +8755,7 @@ snapshots:
8740
8755
 
8741
8756
  '@babel/parser@8.0.0-rc.3':
8742
8757
  dependencies:
8743
- '@babel/types': 8.0.0-rc.3
8758
+ '@babel/types': 8.0.5
8744
8759
 
8745
8760
  '@babel/parser@8.0.5':
8746
8761
  dependencies:
@@ -8876,7 +8891,7 @@ snapshots:
8876
8891
  dependencies:
8877
8892
  json5: 2.2.3
8878
8893
 
8879
- '@cabloy/lint@5.1.32(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.70.0(typescript@5.9.3))(@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(oxfmt@0.62.0)(oxlint@1.82.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)))':
8894
+ '@cabloy/lint@5.1.33(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.70.0(typescript@5.9.3))(@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(oxfmt@0.62.0)(oxlint@1.82.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)))':
8880
8895
  dependencies:
8881
8896
  '@e18e/eslint-plugin': 0.2.0(eslint@10.10.0(jiti@2.7.0))(oxlint@1.82.0)
8882
8897
  '@eslint/json': 1.2.0
@@ -9,6 +9,8 @@ import type { IThemeRecord } from 'zova-module-a-style';
9
9
  import { colorizer, combine, errors, splatter, timestamp } from '@cabloy/logger';
10
10
  import { formatLoggerConsole, formatLoggerFilter } from 'zova';
11
11
 
12
+ import { renderError, renderLoading } from './render.jsx';
13
+
12
14
  export default function (sys: ZovaSys) {
13
15
  const config: ZovaConfigOptional = {};
14
16
  const env = sys.env;
@@ -33,6 +35,15 @@ export default function (sys: ZovaSys) {
33
35
  version: env.APP_VERSION,
34
36
  };
35
37
 
38
+ // boundary
39
+ config.boundary = {
40
+ loading: {
41
+ delay: 500,
42
+ },
43
+ renderLoading,
44
+ renderError,
45
+ };
46
+
36
47
  // api
37
48
  config.api = {
38
49
  baseURL: process.env.SERVER ? env.SSR_API_BASE_URL || env.API_BASE_URL : env.API_BASE_URL,
@@ -0,0 +1,79 @@
1
+ import type { VNodeChild } from 'vue';
2
+ import type {
3
+ TypeComponentBoundaryRenderMode,
4
+ TypeComponentBoundaryRetry,
5
+ ZovaContext,
6
+ } from 'zova';
7
+
8
+ function getErrorMessage(error: unknown) {
9
+ if (error instanceof Error) {
10
+ return error.message;
11
+ }
12
+ return String(error);
13
+ }
14
+
15
+ export function renderLoading(
16
+ _ctx: ZovaContext,
17
+ renderMode: TypeComponentBoundaryRenderMode,
18
+ ): VNodeChild {
19
+ if (renderMode === 'inline') {
20
+ return (
21
+ <span
22
+ class="box-border inline-block max-h-full max-w-full overflow-hidden p-1 align-middle"
23
+ role="status"
24
+ >
25
+ <span class="loading loading-spinner text-primary inline-block max-h-full max-w-full align-middle"></span>
26
+ </span>
27
+ );
28
+ }
29
+ return (
30
+ <div class="box-border max-h-full max-w-full overflow-hidden p-2 text-center" role="status">
31
+ <span class="loading loading-spinner text-primary inline-block max-h-full max-w-full align-middle"></span>
32
+ </div>
33
+ );
34
+ }
35
+
36
+ export function renderError(
37
+ ctx: ZovaContext,
38
+ error: unknown,
39
+ renderMode: TypeComponentBoundaryRenderMode,
40
+ retry?: TypeComponentBoundaryRetry,
41
+ ): VNodeChild {
42
+ const message = getErrorMessage(error);
43
+ const retryLabel = ctx.app.meta.locale.getText(false, 'home-base', undefined, 'Retry');
44
+ const retryButton = retry && (
45
+ <button
46
+ class="btn btn-sm btn-ghost"
47
+ type="button"
48
+ onClick={() => {
49
+ void retry();
50
+ }}
51
+ >
52
+ {retryLabel}
53
+ </button>
54
+ );
55
+ if (renderMode === 'inline') {
56
+ return (
57
+ <span class="box-border inline-block max-h-full max-w-full align-middle">
58
+ <span
59
+ class="bg-error text-error-content inline-block max-h-full max-w-full overflow-auto break-words rounded-field p-2 align-middle"
60
+ role="alert"
61
+ >
62
+ <span>{message}</span>
63
+ </span>
64
+ {retryButton}
65
+ </span>
66
+ );
67
+ }
68
+ return (
69
+ <div class="box-border max-h-full max-w-full overflow-auto p-2 text-center">
70
+ <div
71
+ class="alert alert-error inline-block max-h-full max-w-full overflow-auto break-words text-left align-middle"
72
+ role="alert"
73
+ >
74
+ <span>{message}</span>
75
+ </div>
76
+ {retryButton}
77
+ </div>
78
+ );
79
+ }
@@ -88,7 +88,6 @@ export class ModelOrder extends BeanModelBase {
88
88
  },
89
89
  meta: {
90
90
  disableSuspenseOnInit: true,
91
- disableErrorEffect: true,
92
91
  },
93
92
  });
94
93
  }
@@ -0,0 +1,31 @@
1
+ import type { TypeControllerInnerProps } from 'zova';
2
+
3
+ import { defineComponent } from 'vue';
4
+ import { prepareComponentOptions, useController } from 'zova';
5
+
6
+ import type { ControllerControllerBoundaryProbeProps } from '../../component/controllerBoundaryProbe/controller.jsx';
7
+
8
+ import { ControllerControllerBoundaryProbe } from '../../component/controllerBoundaryProbe/controller.jsx';
9
+ export type ZControllerBoundaryProbeProps = {
10
+ controllerRef?: (ref: ControllerControllerBoundaryProbe) => void;
11
+ } & ControllerControllerBoundaryProbeProps;
12
+
13
+ type ControllerInnerProps = TypeControllerInnerProps<
14
+ ControllerControllerBoundaryProbeProps,
15
+ keyof typeof ControllerControllerBoundaryProbe.$propsDefault
16
+ >;
17
+ declare module 'zova-module-demo-basic' {
18
+ export interface ControllerControllerBoundaryProbe {
19
+ $props: ControllerInnerProps;
20
+ }
21
+ }
22
+
23
+ export const ZControllerBoundaryProbe = defineComponent((_props: ZControllerBoundaryProbeProps) => {
24
+ useController(ControllerControllerBoundaryProbe, undefined, undefined);
25
+ return () => {};
26
+ }, prepareComponentOptions(ControllerControllerBoundaryProbe.$componentOptions));
27
+ declare module 'zova-module-a-bean' {
28
+ export interface IVonaComponentRecord {
29
+ 'demo-basic:controllerBoundaryProbe': ControllerControllerBoundaryProbeProps;
30
+ }
31
+ }
@@ -0,0 +1,34 @@
1
+ import type { TypeControllerInnerProps } from 'zova';
2
+
3
+ import { defineComponent } from 'vue';
4
+ import { prepareComponentOptions, useController } from 'zova';
5
+
6
+ import type { ControllerControllerBoundaryProbeInlineProps } from '../../component/controllerBoundaryProbeInline/controller.jsx';
7
+
8
+ import { ControllerControllerBoundaryProbeInline } from '../../component/controllerBoundaryProbeInline/controller.jsx';
9
+ export type ZControllerBoundaryProbeInlineProps = {
10
+ controllerRef?: (ref: ControllerControllerBoundaryProbeInline) => void;
11
+ } & ControllerControllerBoundaryProbeInlineProps;
12
+
13
+ type ControllerInnerProps = TypeControllerInnerProps<
14
+ ControllerControllerBoundaryProbeInlineProps,
15
+ keyof typeof ControllerControllerBoundaryProbeInline.$propsDefault
16
+ >;
17
+ declare module 'zova-module-demo-basic' {
18
+ export interface ControllerControllerBoundaryProbeInline {
19
+ $props: ControllerInnerProps;
20
+ }
21
+ }
22
+
23
+ export const ZControllerBoundaryProbeInline = defineComponent(
24
+ (_props: ZControllerBoundaryProbeInlineProps) => {
25
+ useController(ControllerControllerBoundaryProbeInline, undefined, undefined);
26
+ return () => {};
27
+ },
28
+ prepareComponentOptions(ControllerControllerBoundaryProbeInline.$componentOptions),
29
+ );
30
+ declare module 'zova-module-a-bean' {
31
+ export interface IVonaComponentRecord {
32
+ 'demo-basic:controllerBoundaryProbeInline': ControllerControllerBoundaryProbeInlineProps;
33
+ }
34
+ }
@@ -0,0 +1,34 @@
1
+ import type { TypeControllerInnerProps } from 'zova';
2
+
3
+ import { defineComponent } from 'vue';
4
+ import { prepareComponentOptions, useController } from 'zova';
5
+
6
+ import type { ControllerControllerBoundaryProbeOverrideProps } from '../../component/controllerBoundaryProbeOverride/controller.jsx';
7
+
8
+ import { ControllerControllerBoundaryProbeOverride } from '../../component/controllerBoundaryProbeOverride/controller.jsx';
9
+ export type ZControllerBoundaryProbeOverrideProps = {
10
+ controllerRef?: (ref: ControllerControllerBoundaryProbeOverride) => void;
11
+ } & ControllerControllerBoundaryProbeOverrideProps;
12
+
13
+ type ControllerInnerProps = TypeControllerInnerProps<
14
+ ControllerControllerBoundaryProbeOverrideProps,
15
+ keyof typeof ControllerControllerBoundaryProbeOverride.$propsDefault
16
+ >;
17
+ declare module 'zova-module-demo-basic' {
18
+ export interface ControllerControllerBoundaryProbeOverride {
19
+ $props: ControllerInnerProps;
20
+ }
21
+ }
22
+
23
+ export const ZControllerBoundaryProbeOverride = defineComponent(
24
+ (_props: ZControllerBoundaryProbeOverrideProps) => {
25
+ useController(ControllerControllerBoundaryProbeOverride, undefined, undefined);
26
+ return () => {};
27
+ },
28
+ prepareComponentOptions(ControllerControllerBoundaryProbeOverride.$componentOptions),
29
+ );
30
+ declare module 'zova-module-a-bean' {
31
+ export interface IVonaComponentRecord {
32
+ 'demo-basic:controllerBoundaryProbeOverride': ControllerControllerBoundaryProbeOverrideProps;
33
+ }
34
+ }
@@ -37,9 +37,13 @@ declare module 'zova' {
37
37
  /** controller: begin */
38
38
  export * from '../component/actionView/controller.jsx';
39
39
  export * from '../component/card/controller.jsx';
40
+ export * from '../component/controllerBoundaryProbe/controller.jsx';
41
+ export * from '../component/controllerBoundaryProbeInline/controller.jsx';
42
+ export * from '../component/controllerBoundaryProbeOverride/controller.jsx';
40
43
  export * from '../component/formFieldTest/controller.jsx';
41
44
  export * from '../component/tableCellTest/controller.jsx';
42
45
  export * from '../page/component/controller.jsx';
46
+ export * from '../page/controllerBoundary/controller.jsx';
43
47
  export * from '../page/locale/controller.jsx';
44
48
  export * from '../page/routeParams/controller.jsx';
45
49
  export * from '../page/routeQuery/controller.jsx';
@@ -70,6 +74,21 @@ declare module 'zova-module-demo-basic' {
70
74
  get scope(): ScopeModuleDemoBasic;
71
75
  }
72
76
 
77
+ export interface ControllerControllerBoundaryProbe {
78
+ /** @internal */
79
+ get scope(): ScopeModuleDemoBasic;
80
+ }
81
+
82
+ export interface ControllerControllerBoundaryProbeInline {
83
+ /** @internal */
84
+ get scope(): ScopeModuleDemoBasic;
85
+ }
86
+
87
+ export interface ControllerControllerBoundaryProbeOverride {
88
+ /** @internal */
89
+ get scope(): ScopeModuleDemoBasic;
90
+ }
91
+
73
92
  export interface ControllerFormFieldTest {
74
93
  /** @internal */
75
94
  get scope(): ScopeModuleDemoBasic;
@@ -85,6 +104,11 @@ declare module 'zova-module-demo-basic' {
85
104
  get scope(): ScopeModuleDemoBasic;
86
105
  }
87
106
 
107
+ export interface ControllerPageControllerBoundary {
108
+ /** @internal */
109
+ get scope(): ScopeModuleDemoBasic;
110
+ }
111
+
88
112
  export interface ControllerPageLocale {
89
113
  /** @internal */
90
114
  get scope(): ScopeModuleDemoBasic;
@@ -149,9 +173,13 @@ declare module 'zova-module-demo-basic' {
149
173
  /** controller: begin */
150
174
  import type { ControllerActionView } from '../component/actionView/controller.jsx';
151
175
  import type { ControllerCard } from '../component/card/controller.jsx';
176
+ import type { ControllerControllerBoundaryProbe } from '../component/controllerBoundaryProbe/controller.jsx';
177
+ import type { ControllerControllerBoundaryProbeInline } from '../component/controllerBoundaryProbeInline/controller.jsx';
178
+ import type { ControllerControllerBoundaryProbeOverride } from '../component/controllerBoundaryProbeOverride/controller.jsx';
152
179
  import type { ControllerFormFieldTest } from '../component/formFieldTest/controller.jsx';
153
180
  import type { ControllerTableCellTest } from '../component/tableCellTest/controller.jsx';
154
181
  import type { ControllerPageComponent } from '../page/component/controller.jsx';
182
+ import type { ControllerPageControllerBoundary } from '../page/controllerBoundary/controller.jsx';
155
183
  import type { ControllerPageLocale } from '../page/locale/controller.jsx';
156
184
  import type { ControllerPageRouteParams } from '../page/routeParams/controller.jsx';
157
185
  import type { ControllerPageRouteQuery } from '../page/routeQuery/controller.jsx';
@@ -169,9 +197,13 @@ declare module 'zova' {
169
197
  export interface IBeanRecordLocal {
170
198
  'demo-basic.controller.actionView': ControllerActionView;
171
199
  'demo-basic.controller.card': ControllerCard;
200
+ 'demo-basic.controller.controllerBoundaryProbe': ControllerControllerBoundaryProbe;
201
+ 'demo-basic.controller.controllerBoundaryProbeInline': ControllerControllerBoundaryProbeInline;
202
+ 'demo-basic.controller.controllerBoundaryProbeOverride': ControllerControllerBoundaryProbeOverride;
172
203
  'demo-basic.controller.formFieldTest': ControllerFormFieldTest;
173
204
  'demo-basic.controller.tableCellTest': ControllerTableCellTest;
174
205
  'demo-basic.controller.pageComponent': ControllerPageComponent;
206
+ 'demo-basic.controller.pageControllerBoundary': ControllerPageControllerBoundary;
175
207
  'demo-basic.controller.pageLocale': ControllerPageLocale;
176
208
  'demo-basic.controller.pageRouteParams': ControllerPageRouteParams;
177
209
  'demo-basic.controller.pageRouteQuery': ControllerPageRouteQuery;
@@ -189,6 +221,8 @@ declare module 'zova' {
189
221
  /** controller: end */
190
222
  /** pages: begin */
191
223
  export * from './page/component.js';
224
+ export * from './page/controllerBoundary.js';
225
+ import { NSControllerPageControllerBoundary } from './page/controllerBoundary.js';
192
226
  export * from './page/locale.js';
193
227
  export * from './page/routeParams.js';
194
228
  import { NSControllerPageRouteParams } from './page/routeParams.js';
@@ -214,6 +248,7 @@ import 'zova';
214
248
  declare module 'zova-module-a-router' {
215
249
  export interface IPagePathRecord {
216
250
  '/demo/basic/component': TypePagePathSchema<undefined,undefined>;
251
+ '/demo/basic/controllerBoundary': TypePagePathSchema<NSControllerPageControllerBoundary.ParamsInput,NSControllerPageControllerBoundary.QueryInput>;
217
252
  '/demo/basic/locale': TypePagePathSchema<undefined,undefined>;
218
253
  '/demo/basic/routeParams/:id?': TypePagePathSchema<NSControllerPageRouteParams.ParamsInput,NSControllerPageRouteParams.QueryInput>;
219
254
  '/demo/basic/routeQuery': TypePagePathSchema<NSControllerPageRouteQuery.ParamsInput,NSControllerPageRouteQuery.QueryInput>;
@@ -236,6 +271,9 @@ export interface IPageNameRecord {
236
271
  }
237
272
  }
238
273
  export const pagePathSchemas = {
274
+ '/demo/basic/controllerBoundary': {
275
+ query: NSControllerPageControllerBoundary.querySchema,
276
+ },
239
277
  '/demo/basic/routeQuery': {
240
278
  query: NSControllerPageRouteQuery.querySchema,
241
279
  },
@@ -265,7 +303,11 @@ export const pageNameSchemas = {
265
303
  },
266
304
  };
267
305
  declare module 'zova-module-demo-basic' {
268
- export interface ControllerPageRouteParams {
306
+ export interface ControllerPageControllerBoundary {
307
+ $params: NSControllerPageControllerBoundary.ParamsOutput;
308
+ $query: NSControllerPageControllerBoundary.QueryOutput;
309
+ }
310
+ export interface ControllerPageRouteParams {
269
311
  $params: NSControllerPageRouteParams.ParamsOutput;
270
312
  $query: NSControllerPageRouteParams.QueryOutput;
271
313
  }
@@ -301,6 +343,12 @@ export * from './component/actionView.js';
301
343
  import { ZActionView } from './component/actionView.js';
302
344
  export * from './component/card.js';
303
345
  import { ZCard } from './component/card.js';
346
+ export * from './component/controllerBoundaryProbe.js';
347
+ import { ZControllerBoundaryProbe } from './component/controllerBoundaryProbe.js';
348
+ export * from './component/controllerBoundaryProbeInline.js';
349
+ import { ZControllerBoundaryProbeInline } from './component/controllerBoundaryProbeInline.js';
350
+ export * from './component/controllerBoundaryProbeOverride.js';
351
+ import { ZControllerBoundaryProbeOverride } from './component/controllerBoundaryProbeOverride.js';
304
352
  export * from './component/formFieldTest.js';
305
353
  import { ZFormFieldTest } from './component/formFieldTest.js';
306
354
  export * from './component/tableCellTest.js';
@@ -308,6 +356,9 @@ import { ZTableCellTest } from './component/tableCellTest.js';
308
356
  export const components = {
309
357
  'actionView': ZActionView,
310
358
  'card': ZCard,
359
+ 'controllerBoundaryProbe': ZControllerBoundaryProbe,
360
+ 'controllerBoundaryProbeInline': ZControllerBoundaryProbeInline,
361
+ 'controllerBoundaryProbeOverride': ZControllerBoundaryProbeOverride,
311
362
  'formFieldTest': ZFormFieldTest,
312
363
  'tableCellTest': ZTableCellTest,
313
364
  };
@@ -316,12 +367,18 @@ declare module 'zova' {
316
367
  export interface IComponentRecord {
317
368
  'demo-basic:actionView': ControllerActionView;
318
369
  'demo-basic:card': ControllerCard;
370
+ 'demo-basic:controllerBoundaryProbe': ControllerControllerBoundaryProbe;
371
+ 'demo-basic:controllerBoundaryProbeInline': ControllerControllerBoundaryProbeInline;
372
+ 'demo-basic:controllerBoundaryProbeOverride': ControllerControllerBoundaryProbeOverride;
319
373
  'demo-basic:formFieldTest': ControllerFormFieldTest;
320
374
  'demo-basic:tableCellTest': ControllerTableCellTest;
321
375
  }
322
376
  export interface IZovaComponentRecord {
323
377
  'demo-basic:actionView': typeof ZActionView;
324
378
  'demo-basic:card': typeof ZCard;
379
+ 'demo-basic:controllerBoundaryProbe': typeof ZControllerBoundaryProbe;
380
+ 'demo-basic:controllerBoundaryProbeInline': typeof ZControllerBoundaryProbeInline;
381
+ 'demo-basic:controllerBoundaryProbeOverride': typeof ZControllerBoundaryProbeOverride;
325
382
  'demo-basic:formFieldTest': typeof ZFormFieldTest;
326
383
  'demo-basic:tableCellTest': typeof ZTableCellTest;
327
384
  }
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ import { createZovaComponentPage } from 'zova';
3
+
4
+ import { ControllerPageControllerBoundary } from '../../page/controllerBoundary/controller.jsx';
5
+ import {
6
+ ControllerPageControllerBoundarySchemaParams,
7
+ ControllerPageControllerBoundarySchemaQuery,
8
+ } from '../../page/controllerBoundary/controller.jsx';
9
+ export namespace NSControllerPageControllerBoundary {
10
+ export const paramsSchema = ControllerPageControllerBoundarySchemaParams;
11
+ export type ParamsInput = z.input<typeof ControllerPageControllerBoundarySchemaParams>;
12
+ export type ParamsOutput = z.output<typeof ControllerPageControllerBoundarySchemaParams>;
13
+
14
+ export const querySchema = ControllerPageControllerBoundarySchemaQuery;
15
+ export type QueryInput = z.input<typeof ControllerPageControllerBoundarySchemaQuery>;
16
+ export type QueryOutput = z.output<typeof ControllerPageControllerBoundarySchemaQuery>;
17
+ }
18
+
19
+ export const ZPageControllerBoundary = createZovaComponentPage(
20
+ ControllerPageControllerBoundary,
21
+ undefined,
22
+ undefined,
23
+ );