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.
- package/.cabloy-version +1 -1
- package/.github/workflows/playwright-e2e.yml +2 -2
- package/CHANGELOG.md +21 -0
- package/cabloy-docs/frontend/form-guide.md +47 -0
- package/cabloy-docs/frontend/markdown-guide.md +50 -17
- package/cabloy-docs/frontend/route-alias-guide.md +20 -0
- package/cabloy-docs/frontend/scripts.md +9 -11
- package/cabloy-docs/frontend/zova-form-under-the-hood.md +25 -0
- package/cabloy-docs/fullstack/parallel-worktree-environment.md +1 -1
- package/cabloy-docs/fullstack/quickstart.md +5 -4
- package/cabloy-docs/reference/repo-scripts.md +29 -42
- package/e2e/config/playwright.config.ts +34 -0
- package/e2e/scripts/e2e.ts +2 -27
- package/e2e/scripts/runE2e.ts +62 -0
- package/e2e/scripts/runE2eArgs.test.ts +75 -0
- package/e2e/scripts/runE2eArgs.ts +158 -0
- package/e2e/specs/{a-commerce/commerce.spec.ts → a-commerce.spec.ts} +361 -30
- package/e2e/specs/{cabloy-basic/account.spec.ts → account.spec.ts} +1 -2
- package/oxlint.config.ts +3 -0
- package/package.json +3 -9
- package/scripts/upgrade.ts +63 -68
- package/vona/packages-utils/lint/package.json +1 -1
- package/vona/packages-utils/lint/src/oxc/lint.ts +1 -1
- package/vona/packages-utils/lint/src/oxc/lintVue.ts +1 -1
- package/vona/pnpm-lock.yaml +41 -41
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/refundRecoveryView.tsx +7 -2
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +31 -15
- package/vona/src/suite/a-home/modules/home-user/package.json +1 -0
- package/vona/src/suite/a-home/modules/home-user/src/service/account.ts +15 -2
- package/vona/src/suite/a-home/modules/home-user/test/accountActivation.test.ts +34 -4
- package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/package.json +2 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/.metadata/index.ts +26 -0
- package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/bean/imageScene.markdown.ts +13 -0
- package/vona/src/suite-vendor/a-cabloy/package.json +2 -2
- package/vona/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
- package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/providerOperation.ts +23 -0
- package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/refundOperation.ts +7 -0
- package/vona/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
- package/vona/src/suite-vendor/a-pay/modules/pay-paypal/package.json +1 -1
- package/vona/src/suite-vendor/a-pay/modules/pay-stripe/package.json +1 -1
- package/vona/src/suite-vendor/a-pay/package.json +5 -5
- package/zova/packages-utils/zova-jsx/package.json +2 -2
- package/zova/packages-zova/zova/package.json +3 -3
- package/zova/packages-zova/zova-core/package.json +1 -1
- package/zova/packages-zova/zova-core/src/bean/resource/locale/type.ts +1 -0
- package/zova/pnpm-lock.yaml +63 -18
- package/zova/src/front/config/config/config.cabloyBasicWeb.ts +3 -1
- package/zova/src/front/config/config/config.cabloyCommerce.ts +4 -2
- package/zova/src/suite/a-commerce/modules/commerce-member/src/page/address/controller.tsx +64 -63
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +6 -1
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionRefund/controller.tsx +413 -134
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +76 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +67 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +1 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/cart/controller.tsx +1 -1
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/checkout/controller.tsx +7 -7
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/order/controller.tsx +46 -9
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx +50 -30
- package/zova/src/suite/cabloy-basic/modules/basic-captcha/src/component/formFieldCaptcha/controller.tsx +6 -2
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/component/formFieldImage/controller.tsx +9 -15
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/package.json +10 -2
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/index.ts +11 -2
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/controller.tsx +723 -5
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/render.tsx +461 -2
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/config/locale/en-us.ts +59 -0
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/config/locale/zh-cn.ts +59 -0
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/index.ts +1 -0
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/lib/codeBlockLanguages.ts +42 -0
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/lib/richTextContentStyle.ts +20 -0
- package/zova/src/suite/cabloy-basic/modules/basic-markdown/test/lib/codeBlockLanguages.test.ts +25 -0
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +1 -0
- package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
- package/zova/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
- package/zova/src/suite-vendor/a-pay/modules/a-pay/src/component/paymentNextAction/controller.tsx +26 -12
- package/zova/src/suite-vendor/a-pay/modules/pay-mock/cli/openapi.config.ts +1 -1
- package/zova/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
- package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/api/payMockMockPayment.ts +26 -0
- package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/apiSchema/payMockMockPayment.ts +8 -1
- package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/model/payMockPayment.ts +13 -1
- package/zova/src/suite-vendor/a-pay/package.json +3 -3
- package/zova/src/suite-vendor/a-zova/modules/a-form/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-form/src/component/formField/controller.tsx +2 -0
- package/zova/src/suite-vendor/a-zova/modules/a-form/src/types/formField.ts +7 -6
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/package.json +3 -3
- package/e2e/config/playwright.basic.config.ts +0 -3
- package/e2e/config/playwright.commerce.config.ts +0 -3
- package/e2e/config/playwright.shared.config.ts +0 -38
- package/e2e/scripts/testE2eClean.ts +0 -56
- /package/e2e/specs/{cabloy-basic/basic.spec.ts → cabloy-basic.spec.ts} +0 -0
package/zova/src/suite/cabloy-basic/modules/basic-markdown/test/lib/codeBlockLanguages.test.ts
ADDED
|
@@ -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-suite-a-cabloy",
|
|
3
|
-
"version": "5.1.
|
|
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.
|
|
11
|
+
"zova-module-rest-resource": "^5.1.46"
|
|
12
12
|
},
|
|
13
13
|
"title": "a-cabloy"
|
|
14
14
|
}
|
package/zova/src/suite-vendor/a-pay/modules/a-pay/src/component/paymentNextAction/controller.tsx
CHANGED
|
@@ -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 {
|
|
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">
|
|
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
|
-
|
|
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
|
-
?
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|
|
@@ -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 {
|
|
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 {
|
|
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.
|
|
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.
|
|
10
|
-
"zova-module-pay-mock": "^5.0.
|
|
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
|
},
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
35
|
+
"zova-module-a-zova": "^5.1.102"
|
|
36
36
|
},
|
|
37
37
|
"title": "a-zova"
|
|
38
38
|
}
|
|
@@ -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]);
|
|
File without changes
|