cabloy 5.1.141 → 5.1.142

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 (92) hide show
  1. package/.cabloy-version +1 -1
  2. package/.github/workflows/playwright-e2e.yml +2 -2
  3. package/CHANGELOG.md +21 -0
  4. package/cabloy-docs/frontend/form-guide.md +47 -0
  5. package/cabloy-docs/frontend/markdown-guide.md +50 -17
  6. package/cabloy-docs/frontend/route-alias-guide.md +20 -0
  7. package/cabloy-docs/frontend/scripts.md +9 -11
  8. package/cabloy-docs/frontend/zova-form-under-the-hood.md +25 -0
  9. package/cabloy-docs/fullstack/parallel-worktree-environment.md +1 -1
  10. package/cabloy-docs/fullstack/quickstart.md +5 -4
  11. package/cabloy-docs/reference/repo-scripts.md +29 -42
  12. package/e2e/config/playwright.config.ts +34 -0
  13. package/e2e/scripts/e2e.ts +2 -27
  14. package/e2e/scripts/runE2e.ts +62 -0
  15. package/e2e/scripts/runE2eArgs.test.ts +75 -0
  16. package/e2e/scripts/runE2eArgs.ts +158 -0
  17. package/e2e/specs/{a-commerce/commerce.spec.ts → a-commerce.spec.ts} +361 -30
  18. package/e2e/specs/{cabloy-basic/account.spec.ts → account.spec.ts} +1 -2
  19. package/oxlint.config.ts +3 -0
  20. package/package.json +3 -9
  21. package/scripts/upgrade.ts +63 -68
  22. package/vona/packages-utils/lint/package.json +1 -1
  23. package/vona/packages-utils/lint/src/oxc/lint.ts +1 -1
  24. package/vona/packages-utils/lint/src/oxc/lintVue.ts +1 -1
  25. package/vona/pnpm-lock.yaml +41 -41
  26. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/refundRecoveryView.tsx +7 -2
  27. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +31 -15
  28. package/vona/src/suite/a-home/modules/home-user/package.json +1 -0
  29. package/vona/src/suite/a-home/modules/home-user/src/service/account.ts +15 -2
  30. package/vona/src/suite/a-home/modules/home-user/test/accountActivation.test.ts +34 -4
  31. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/package.json +2 -1
  32. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/.metadata/index.ts +26 -0
  33. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/bean/imageScene.markdown.ts +13 -0
  34. package/vona/src/suite-vendor/a-cabloy/package.json +2 -2
  35. package/vona/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  36. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/providerOperation.ts +23 -0
  37. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/refundOperation.ts +7 -0
  38. package/vona/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
  39. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/package.json +1 -1
  40. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/package.json +1 -1
  41. package/vona/src/suite-vendor/a-pay/package.json +5 -5
  42. package/zova/packages-utils/zova-jsx/package.json +2 -2
  43. package/zova/packages-zova/zova/package.json +3 -3
  44. package/zova/packages-zova/zova-core/package.json +1 -1
  45. package/zova/packages-zova/zova-core/src/bean/resource/locale/type.ts +1 -0
  46. package/zova/pnpm-lock.yaml +63 -18
  47. package/zova/src/front/config/config/config.cabloyBasicWeb.ts +3 -1
  48. package/zova/src/front/config/config/config.cabloyCommerce.ts +4 -2
  49. package/zova/src/suite/a-commerce/modules/commerce-member/src/page/address/controller.tsx +64 -63
  50. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +6 -1
  51. package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionRefund/controller.tsx +413 -134
  52. package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +76 -0
  53. package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +67 -0
  54. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +1 -0
  55. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/cart/controller.tsx +1 -1
  56. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/checkout/controller.tsx +7 -7
  57. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/order/controller.tsx +46 -9
  58. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx +50 -30
  59. package/zova/src/suite/cabloy-basic/modules/basic-captcha/src/component/formFieldCaptcha/controller.tsx +6 -2
  60. package/zova/src/suite/cabloy-basic/modules/basic-image/src/component/formFieldImage/controller.tsx +9 -15
  61. package/zova/src/suite/cabloy-basic/modules/basic-markdown/package.json +10 -2
  62. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/index.ts +11 -2
  63. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/locales.ts +7 -0
  64. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/controller.tsx +723 -5
  65. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/render.tsx +461 -2
  66. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/config/locale/en-us.ts +59 -0
  67. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/config/locale/zh-cn.ts +59 -0
  68. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/index.ts +1 -0
  69. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/lib/codeBlockLanguages.ts +42 -0
  70. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/lib/richTextContentStyle.ts +20 -0
  71. package/zova/src/suite/cabloy-basic/modules/basic-markdown/test/lib/codeBlockLanguages.test.ts +25 -0
  72. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  73. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +1 -0
  74. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  75. package/zova/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  76. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/component/paymentNextAction/controller.tsx +26 -12
  77. package/zova/src/suite-vendor/a-pay/modules/pay-mock/cli/openapi.config.ts +1 -1
  78. package/zova/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
  79. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/api/payMockMockPayment.ts +26 -0
  80. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/apiSchema/payMockMockPayment.ts +8 -1
  81. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/model/payMockPayment.ts +13 -1
  82. package/zova/src/suite-vendor/a-pay/package.json +3 -3
  83. package/zova/src/suite-vendor/a-zova/modules/a-form/package.json +1 -1
  84. package/zova/src/suite-vendor/a-zova/modules/a-form/src/component/formField/controller.tsx +2 -0
  85. package/zova/src/suite-vendor/a-zova/modules/a-form/src/types/formField.ts +7 -6
  86. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  87. package/zova/src/suite-vendor/a-zova/package.json +3 -3
  88. package/e2e/config/playwright.basic.config.ts +0 -3
  89. package/e2e/config/playwright.commerce.config.ts +0 -3
  90. package/e2e/config/playwright.shared.config.ts +0 -38
  91. package/e2e/scripts/testE2eClean.ts +0 -56
  92. /package/e2e/specs/{cabloy-basic/basic.spec.ts → cabloy-basic.spec.ts} +0 -0
@@ -0,0 +1,25 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+
4
+ import {
5
+ codeBlockLanguages,
6
+ getCodeBlockLanguage,
7
+ isCodeBlockLanguage,
8
+ } from '../../src/lib/codeBlockLanguages.js';
9
+
10
+ test('Code block languages contain stable unique identifiers', () => {
11
+ assert.equal(new Set(codeBlockLanguages).size, codeBlockLanguages.length);
12
+ assert.equal(codeBlockLanguages.includes('typescript'), true);
13
+ assert.equal(codeBlockLanguages.includes('python'), true);
14
+ });
15
+
16
+ test('Code block languages normalize supported aliases without treating unknown values as plain text', () => {
17
+ assert.equal(getCodeBlockLanguage('ts'), 'typescript');
18
+ assert.equal(getCodeBlockLanguage('js'), 'javascript');
19
+ assert.equal(getCodeBlockLanguage('sh'), 'shell');
20
+ assert.equal(getCodeBlockLanguage('plaintext'), undefined);
21
+ assert.equal(getCodeBlockLanguage(undefined), undefined);
22
+ assert.equal(isCodeBlockLanguage('typescript'), true);
23
+ assert.equal(isCodeBlockLanguage('ts'), true);
24
+ assert.equal(isCodeBlockLanguage('plaintext'), false);
25
+ });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-rest-resource",
3
- "version": "5.1.45",
3
+ "version": "5.1.46",
4
4
  "gitHead": "4dece229b6d3f4735930e833afcb4b95ec51bf86",
5
5
  "description": "",
6
6
  "keywords": [
@@ -26,6 +26,7 @@ interface IModelResourceQueryItemOptions<TData> {
26
26
  queryFn: () => Promise<TData>;
27
27
  meta?: {
28
28
  disableSuspenseOnInit?: boolean;
29
+ disableErrorEffect?: boolean;
29
30
  };
30
31
  }
31
32
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-suite-a-cabloy",
3
- "version": "5.1.46",
3
+ "version": "5.1.47",
4
4
  "gitHead": "4dece229b6d3f4735930e833afcb4b95ec51bf86",
5
5
  "description": "",
6
6
  "author": "",
@@ -8,7 +8,7 @@
8
8
  "type": "module",
9
9
  "dependencies": {
10
10
  "zova-module-a-rbac": "^5.0.1",
11
- "zova-module-rest-resource": "^5.1.45"
11
+ "zova-module-rest-resource": "^5.1.46"
12
12
  },
13
13
  "title": "a-cabloy"
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-pay",
3
- "version": "5.0.6",
3
+ "version": "5.0.7",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "Zova Module"
@@ -8,6 +8,13 @@ import { ServicePaymentCoordinator } from '../../service/paymentCoordinator.js';
8
8
  export interface ControllerPaymentNextActionProps {
9
9
  action?: TypePaymentNextAction;
10
10
  disabled?: boolean;
11
+ continueToPaymentText?: string;
12
+ continueToPaymentHelpText?: string;
13
+ embeddedCheckoutUnavailableText?: string;
14
+ paymentCompletedText?: string;
15
+ paymentPreparingText?: string;
16
+ paymentPreparingRetryText?: (retryAfterSeconds: number) => string;
17
+ refreshPaymentStatusText?: string;
11
18
  onRefresh?: () => void | Promise<void>;
12
19
  }
13
20
 
@@ -25,18 +32,29 @@ export class ControllerPaymentNextAction extends BeanControllerBase {
25
32
  }
26
33
 
27
34
  protected render() {
28
- const { action, disabled, onRefresh } = this.$props as ControllerPaymentNextActionProps;
35
+ const {
36
+ action,
37
+ disabled,
38
+ continueToPaymentText,
39
+ continueToPaymentHelpText,
40
+ embeddedCheckoutUnavailableText,
41
+ paymentCompletedText,
42
+ paymentPreparingText,
43
+ paymentPreparingRetryText,
44
+ refreshPaymentStatusText,
45
+ onRefresh,
46
+ } = this.$props as ControllerPaymentNextActionProps;
29
47
  if (!action) return null;
30
48
  if (action.kind === 'redirect') {
31
49
  return (
32
50
  <div class="mt-6 space-y-3">
33
- <p class="text-base-content/70">Continue to the payment provider to complete payment.</p>
51
+ <p class="text-base-content/70">{continueToPaymentHelpText}</p>
34
52
  <button
35
53
  class="btn btn-primary"
36
54
  disabled={disabled}
37
55
  onClick={() => this.continueRedirect()}
38
56
  >
39
- Continue to payment
57
+ {continueToPaymentText}
40
58
  </button>
41
59
  </div>
42
60
  );
@@ -45,15 +63,13 @@ export class ControllerPaymentNextAction extends BeanControllerBase {
45
63
  return (
46
64
  <div class="mt-6 space-y-3" aria-live="polite">
47
65
  <p class="text-base-content/70">
48
- Payment is being prepared
49
66
  {action.retryAfterSeconds
50
- ? `; retrying in about ${action.retryAfterSeconds} seconds`
51
- : ''}
52
- .
67
+ ? paymentPreparingRetryText?.(action.retryAfterSeconds)
68
+ : paymentPreparingText}
53
69
  </p>
54
70
  {onRefresh && (
55
71
  <button class="btn btn-outline" disabled={disabled} onClick={() => onRefresh()}>
56
- Refresh payment status
72
+ {refreshPaymentStatusText}
57
73
  </button>
58
74
  )}
59
75
  </div>
@@ -62,15 +78,13 @@ export class ControllerPaymentNextAction extends BeanControllerBase {
62
78
  if (action.kind === 'completed') {
63
79
  return (
64
80
  <p class="mt-6 text-base-content/70" aria-live="polite">
65
- Payment is complete. Confirming the order…
81
+ {paymentCompletedText}
66
82
  </p>
67
83
  );
68
84
  }
69
85
  return (
70
86
  <div class="mt-6" aria-live="polite">
71
- <p class="text-base-content/70">
72
- Embedded checkout will be available when this payment provider is configured.
73
- </p>
87
+ <p class="text-base-content/70">{embeddedCheckoutUnavailableText}</p>
74
88
  </div>
75
89
  );
76
90
  }
@@ -3,7 +3,7 @@ import type { ZovaOpenapiConfigModule } from 'zova-openapi';
3
3
  export default function (): ZovaOpenapiConfigModule {
4
4
  return {
5
5
  operations: {
6
- match: ['PayMockMockPayment_complete'],
6
+ match: ['PayMockMockPayment_complete', 'PayMockMockPayment_completeRefund'],
7
7
  },
8
8
  };
9
9
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-pay-mock",
3
- "version": "5.0.4",
3
+ "version": "5.0.5",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "Zova Module"
@@ -17,6 +17,19 @@ export type ApiApiPayMockMockPaymentcompleteRequestBody =
17
17
  export type ApiApiPayMockMockPaymentcompleteResponseBody =
18
18
  paths[ApiApiPayMockMockPaymentcompletePath][ApiApiPayMockMockPaymentcompleteMethod]['responses']['200']['content']['application/json']['data'];
19
19
 
20
+ /** PayMockMockPayment_completeRefund */
21
+ export const ApiApiPayMockMockPaymentcompleteRefundPath =
22
+ '/api/pay/mock/payment-session/refund-operation/{id}/complete';
23
+ export type ApiApiPayMockMockPaymentcompleteRefundPath =
24
+ '/api/pay/mock/payment-session/refund-operation/{id}/complete';
25
+ export type ApiApiPayMockMockPaymentcompleteRefundMethod = 'post';
26
+ export type ApiApiPayMockMockPaymentcompleteRefundRequestParams =
27
+ paths[ApiApiPayMockMockPaymentcompleteRefundPath][ApiApiPayMockMockPaymentcompleteRefundMethod]['parameters']['path'];
28
+ export type ApiApiPayMockMockPaymentcompleteRefundRequestBody =
29
+ components['schemas']['pay-mock.dto.mockRefundComplete'];
30
+ export type ApiApiPayMockMockPaymentcompleteRefundResponseBody =
31
+ paths[ApiApiPayMockMockPaymentcompleteRefundPath][ApiApiPayMockMockPaymentcompleteRefundMethod]['responses']['200']['content']['application/json']['data'];
32
+
20
33
  @Api()
21
34
  export class ApiPayMockMockPayment extends BeanApiBase {
22
35
  complete(
@@ -31,4 +44,17 @@ export class ApiPayMockMockPayment extends BeanApiBase {
31
44
  this.$configPrepare(OpenApiBaseURL(this.sys), options, true),
32
45
  );
33
46
  }
47
+
48
+ completeRefund(
49
+ body: ApiApiPayMockMockPaymentcompleteRefundRequestBody,
50
+ options: {
51
+ params: ApiApiPayMockMockPaymentcompleteRefundRequestParams;
52
+ } & IApiActionOptions,
53
+ ) {
54
+ return this.$fetch.post<any, ApiApiPayMockMockPaymentcompleteRefundResponseBody>(
55
+ this.$pathTranslate(ApiApiPayMockMockPaymentcompleteRefundPath, options.params),
56
+ body,
57
+ this.$configPrepare(OpenApiBaseURL(this.sys), options, true),
58
+ );
59
+ }
34
60
  }
@@ -3,11 +3,18 @@ import type { IApiSchemaOptions } from 'zova-module-a-api';
3
3
  import { BeanBase } from 'zova';
4
4
  import { ApiSchema } from 'zova-module-a-api';
5
5
 
6
- import { ApiApiPayMockMockPaymentcompletePath } from '../api/payMockMockPayment.js';
6
+ import {
7
+ ApiApiPayMockMockPaymentcompletePath,
8
+ ApiApiPayMockMockPaymentcompleteRefundPath,
9
+ } from '../api/payMockMockPayment.js';
7
10
 
8
11
  @ApiSchema()
9
12
  export class ApiSchemaPayMockMockPayment extends BeanBase {
10
13
  complete(options?: IApiSchemaOptions) {
11
14
  return this.$sdk.createApiSchemas(ApiApiPayMockMockPaymentcompletePath, 'post', options);
12
15
  }
16
+
17
+ completeRefund(options?: IApiSchemaOptions) {
18
+ return this.$sdk.createApiSchemas(ApiApiPayMockMockPaymentcompleteRefundPath, 'post', options);
19
+ }
13
20
  }
@@ -3,7 +3,10 @@ import type { IDecoratorModelOptions } from 'zova-module-a-model';
3
3
 
4
4
  import { BeanModelBase, Model } from 'zova-module-a-model';
5
5
 
6
- import { ApiApiPayMockMockPaymentcompleteRequestBody } from '../api/payMockMockPayment.js';
6
+ import {
7
+ ApiApiPayMockMockPaymentcompleteRefundRequestBody,
8
+ ApiApiPayMockMockPaymentcompleteRequestBody,
9
+ } from '../api/payMockMockPayment.js';
7
10
 
8
11
  export interface IModelOptionsPayMockPayment extends IDecoratorModelOptions {}
9
12
 
@@ -17,4 +20,13 @@ export class ModelPayMockPayment extends BeanModelBase {
17
20
  },
18
21
  });
19
22
  }
23
+
24
+ completeRefund(id: TableIdentity) {
25
+ return this.$useMutationData({
26
+ mutationKey: ['completeRefund', id],
27
+ mutationFn: async (body: ApiApiPayMockMockPaymentcompleteRefundRequestBody) => {
28
+ return await this.scope.api.payMockMockPayment.completeRefund(body, { params: { id } });
29
+ },
30
+ });
31
+ }
20
32
  }
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "zova-suite-a-pay",
3
- "version": "5.0.5",
3
+ "version": "5.0.6",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "files": [],
7
7
  "type": "module",
8
8
  "dependencies": {
9
- "zova-module-a-pay": "^5.0.6",
10
- "zova-module-pay-mock": "^5.0.4",
9
+ "zova-module-a-pay": "^5.0.7",
10
+ "zova-module-pay-mock": "^5.0.5",
11
11
  "zova-module-pay-paypal": "^5.0.2",
12
12
  "zova-module-pay-stripe": "^5.0.2"
13
13
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-form",
3
- "version": "5.1.47",
3
+ "version": "5.1.48",
4
4
  "gitHead": "09d901d17140a80ee0764211b441cda72fd94663",
5
5
  "description": "",
6
6
  "keywords": [
@@ -61,6 +61,7 @@ export class ControllerFormField<TParentData extends {} = {}> extends BeanContro
61
61
  const options = this._getFormFieldOptions();
62
62
  this._formField.api.update(options as any);
63
63
  this.form.resetField(this.name);
64
+ this.$props.onFieldStateReady?.(this);
64
65
  },
65
66
  );
66
67
  // behaviors
@@ -80,6 +81,7 @@ export class ControllerFormField<TParentData extends {} = {}> extends BeanContro
80
81
  },
81
82
  );
82
83
  }
84
+ this.$props.onFieldStateReady?.(this);
83
85
  }
84
86
 
85
87
  public get form() {
@@ -29,7 +29,7 @@ export type HTMLInputElementType =
29
29
  | 'email';
30
30
  export const constFieldProps = '$$FieldProps';
31
31
 
32
- export interface IFormFieldScope<TParentData = {}> {
32
+ export interface IFormFieldScope<TParentData extends {} = {}> {
33
33
  name: string;
34
34
  value: any;
35
35
  property?: SchemaObject;
@@ -51,7 +51,7 @@ export interface IFormFieldValidatorsOptionsBase {
51
51
  }
52
52
 
53
53
  export interface IFormFieldOptionsBase<
54
- TParentData = {},
54
+ TParentData extends {} = {},
55
55
  TName extends DeepKeys<TParentData> = DeepKeys<TParentData>,
56
56
  > {
57
57
  name?: TName;
@@ -63,6 +63,7 @@ export interface IFormFieldOptionsBase<
63
63
  required?: boolean;
64
64
  disableNotifyChanged?: boolean;
65
65
  onEffect?: TypeFormFieldOnEffect;
66
+ onFieldStateReady?: (formField: ControllerFormField<TParentData>) => void;
66
67
  validators?: IFormFieldValidatorsOptionsBase;
67
68
  // onChange?: (e: Event) => void; // allow set to null, but not provide null type
68
69
  // onInput?: (e: Event) => void; // allow set to null, but not provide null type
@@ -77,12 +78,12 @@ export interface IFormFieldPresetOptions<
77
78
  }
78
79
 
79
80
  export interface IFormFieldComponentOptions<
80
- TParentData = {},
81
+ TParentData extends {} = {},
81
82
  > extends IFormFieldOptions<TParentData> {
82
83
  options?: any;
83
84
  }
84
85
 
85
- export interface IFormFieldOptions<TParentData = {}>
86
+ export interface IFormFieldOptions<TParentData extends {} = {}>
86
87
  extends
87
88
  IFormFieldSysOptionsBase<TParentData>,
88
89
  IFormFieldOptionsBase<TParentData>,
@@ -113,7 +114,7 @@ export interface IFormFieldRenderContextProps {
113
114
  // onBlur?: (e: Event) => void;
114
115
  // }
115
116
 
116
- export interface IFormFieldRenderContextPropsBucket<TParentData = {}> extends Omit<
117
+ export interface IFormFieldRenderContextPropsBucket<TParentData extends {} = {}> extends Omit<
117
118
  IFormFieldOptions<TParentData>,
118
119
  'render'
119
120
  > {
@@ -123,7 +124,7 @@ export interface IFormFieldRenderContextPropsBucket<TParentData = {}> extends Om
123
124
  needHandleBorder?: boolean;
124
125
  }
125
126
 
126
- export interface IFormFieldRenderContext<TParentData = {}> {
127
+ export interface IFormFieldRenderContext<TParentData extends {} = {}> {
127
128
  propsBucket: IFormFieldRenderContextPropsBucket<TParentData>;
128
129
  props: IFormFieldRenderContextProps;
129
130
  celScope: IFormFieldScope<TParentData>;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-zova",
3
- "version": "5.1.101",
3
+ "version": "5.1.102",
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.86"
46
+ "zova-jsx": "^1.1.87"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@cabloy/cli": "^3.1.29",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-suite-a-zova",
3
- "version": "5.1.150",
3
+ "version": "5.1.151",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "zova",
6
6
  "license": "MIT",
@@ -16,7 +16,7 @@
16
16
  "zova-module-a-boundary": "^5.1.22",
17
17
  "zova-module-a-command": "^5.1.34",
18
18
  "zova-module-a-fetch": "^5.1.25",
19
- "zova-module-a-form": "^5.1.47",
19
+ "zova-module-a-form": "^5.1.48",
20
20
  "zova-module-a-icon": "^5.1.27",
21
21
  "zova-module-a-interceptor": "^5.1.31",
22
22
  "zova-module-a-logger": "^5.1.28",
@@ -32,7 +32,7 @@
32
32
  "zova-module-a-style": "^5.1.35",
33
33
  "zova-module-a-table": "^5.1.38",
34
34
  "zova-module-a-zod": "^5.1.37",
35
- "zova-module-a-zova": "^5.1.101"
35
+ "zova-module-a-zova": "^5.1.102"
36
36
  },
37
37
  "title": "a-zova"
38
38
  }
@@ -1,3 +0,0 @@
1
- import { createE2eConfig } from './playwright.shared.config.ts';
2
-
3
- export default createE2eConfig('basic');
@@ -1,3 +0,0 @@
1
- import { createE2eConfig } from './playwright.shared.config.ts';
2
-
3
- export default createE2eConfig('commerce');
@@ -1,38 +0,0 @@
1
- import { defineConfig } from '@playwright/test';
2
-
3
- import type { E2eSuiteName } from '../scripts/e2e.ts';
4
-
5
- import { E2E_LOCAL_BASE_URL, E2E_ROOT_DIR, getE2eSuite } from '../scripts/e2e.ts';
6
-
7
- export function createE2eConfig(suiteName: E2eSuiteName) {
8
- const suite = getE2eSuite(suiteName);
9
- const externalBaseURL = process.env[suite.externalBaseUrlEnv];
10
- const baseURL = externalBaseURL || E2E_LOCAL_BASE_URL;
11
-
12
- return defineConfig({
13
- testDir: suite.testDir,
14
- fullyParallel: true,
15
- forbidOnly: !!process.env.CI,
16
- retries: process.env.CI ? 2 : 0,
17
- reporter: process.env.CI ? [['html', { open: 'never' }], ['list']] : 'list',
18
- use: {
19
- baseURL,
20
- trace: 'on-first-retry',
21
- },
22
- webServer: externalBaseURL
23
- ? undefined
24
- : {
25
- command: 'node e2e/scripts/startE2eVona.ts',
26
- cwd: E2E_ROOT_DIR,
27
- url: `${baseURL}${suite.readinessPath}`,
28
- timeout: 180_000,
29
- reuseExistingServer: false,
30
- stdout: 'pipe',
31
- stderr: 'pipe',
32
- gracefulShutdown: {
33
- signal: 'SIGINT',
34
- timeout: 10_000,
35
- },
36
- },
37
- });
38
- }
@@ -1,56 +0,0 @@
1
- import { execFileSync } from 'node:child_process';
2
- import { createServer } from 'node:net';
3
-
4
- import { E2E_PORT, E2E_ROOT_DIR, getE2eSuite } from './e2e.ts';
5
-
6
- const suiteName = process.argv[2];
7
- const suite = getE2eSuite(suiteName);
8
- const playwrightArgs = process.argv.slice(3);
9
-
10
- function run(command: string, args: string[], cwd = E2E_ROOT_DIR) {
11
- // eslint-disable-next-line
12
- console.log(`\n===> ${[command, ...args].join(' ')}`);
13
- execFileSync(command, args, {
14
- cwd,
15
- stdio: 'inherit',
16
- });
17
- }
18
-
19
- function assertPlaywrightArgs(args: string[]) {
20
- for (const arg of args) {
21
- if (arg === '--config' || arg.startsWith('--config=')) {
22
- throw new Error(
23
- `test:e2e:${suiteName}:clean manages its suite config. Use --grep or --grep-invert to select tests.`,
24
- );
25
- }
26
- if (!arg.startsWith('-') && (arg.startsWith('e2e/') || /\.[cm]?[jt]sx?$/.test(arg))) {
27
- throw new Error(
28
- `test:e2e:${suiteName}:clean does not accept spec paths. Use --grep or --grep-invert to select tests.`,
29
- );
30
- }
31
- }
32
- }
33
-
34
- async function assertPortAvailable() {
35
- const server = createServer();
36
- await new Promise<void>((resolvePromise, reject) => {
37
- server.once('error', reject);
38
- server.listen(E2E_PORT, '127.0.0.1', () => {
39
- server.close(error => {
40
- if (error) reject(error);
41
- else resolvePromise();
42
- });
43
- });
44
- });
45
- }
46
-
47
- if (process.env[suite.externalBaseUrlEnv]) {
48
- throw new Error(
49
- `test:e2e:${suiteName}:clean manages only a local target. Use the aggregate or surface E2E commands for ${suite.externalBaseUrlEnv}.`,
50
- );
51
- }
52
-
53
- assertPlaywrightArgs(playwrightArgs);
54
- await assertPortAvailable();
55
- run('npm', ['run', 'db:reset']);
56
- run('npx', ['playwright', 'test', '--config', suite.configFile, ...playwrightArgs]);