cabloy 5.1.113 → 5.1.114

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 (138) hide show
  1. package/.cabloy-version +1 -1
  2. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +4 -0
  3. package/.github/workflows/vona-test-mysql.yml +12 -0
  4. package/.github/workflows/vona-test-pg.yml +5 -1
  5. package/CHANGELOG.md +14 -0
  6. package/CLAUDE.md +4 -0
  7. package/cabloy-docs/backend/internal-aop-guide.md +35 -0
  8. package/cabloy-docs/backend/unit-testing.md +72 -1
  9. package/package.json +1 -1
  10. package/vona/packages-cli/cli/package.json +1 -1
  11. package/vona/packages-cli/cli-set-api/package.json +1 -1
  12. package/vona/packages-cli/cli-set-api/toolsIsolate/test.ts +26 -13
  13. package/vona/packages-utils/compose/package.json +1 -1
  14. package/vona/packages-utils/compose/src/index.ts +19 -11
  15. package/vona/packages-vona/vona/package.json +1 -1
  16. package/vona/packages-vona/vona-core/package.json +1 -1
  17. package/vona/packages-vona/vona-core/src/lib/bean/beanContainer.ts +15 -3
  18. package/vona/packages-vona/vona-mock/package.json +1 -1
  19. package/vona/pnpm-lock.yaml +15 -0
  20. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/index.ts +8 -0
  21. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/meta.version.ts +1 -0
  22. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/en-us.ts +3 -0
  23. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/zh-cn.ts +3 -0
  24. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuAttribute.tsx +17 -0
  25. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/entity/sku.tsx +10 -1
  26. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/catalog.test.ts +1 -1
  27. package/vona/src/suite/a-commerce/modules/commerce-member/test/addressOwnership.test.ts +6 -1
  28. package/vona/src/suite/a-commerce/modules/commerce-payment/package.json +2 -1
  29. package/vona/src/suite/a-commerce/modules/commerce-payment/src/.metadata/index.ts +228 -0
  30. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.index.ts +15 -0
  31. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.version.ts +35 -0
  32. package/vona/src/suite/a-commerce/modules/commerce-payment/src/dto/paymentAttemptView.tsx +26 -0
  33. package/vona/src/suite/a-commerce/modules/commerce-payment/src/entity/paymentAttempt.tsx +34 -0
  34. package/vona/src/suite/a-commerce/modules/commerce-payment/src/model/paymentAttempt.ts +10 -0
  35. package/vona/src/suite/a-commerce/modules/commerce-payment/src/service/paymentAttempt.ts +41 -0
  36. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentAttempt.test.ts +33 -0
  37. package/vona/src/suite/a-commerce/modules/commerce-promotion/package.json +4 -2
  38. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/index.ts +533 -2
  39. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/locales.ts +18 -0
  40. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/meta.index.ts +24 -0
  41. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/meta.version.ts +137 -0
  42. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/ssrMenu.couponTemplate.ts +30 -0
  43. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/en-us.ts +37 -0
  44. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/zh-cn.ts +37 -0
  45. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/controller/coupon.ts +37 -0
  46. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/controller/couponTemplate.ts +65 -0
  47. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponIssue.tsx +22 -0
  48. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponMineItem.tsx +32 -0
  49. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateCreate.tsx +43 -0
  50. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateSelectReq.tsx +28 -0
  51. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateSelectRes.tsx +11 -0
  52. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateSelectResItem.tsx +39 -0
  53. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateUpdate.tsx +19 -0
  54. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateView.tsx +25 -0
  55. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponAudit.tsx +73 -0
  56. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponGrant.tsx +83 -0
  57. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponTemplate.tsx +82 -0
  58. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/index.ts +1 -0
  59. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/model/couponAudit.ts +10 -0
  60. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/model/couponGrant.ts +10 -0
  61. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/model/couponTemplate.ts +10 -0
  62. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/service/coupon.ts +397 -0
  63. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/service/couponTemplate.ts +52 -0
  64. package/vona/src/suite/a-commerce/modules/commerce-promotion/test/couponReservation.test.ts +162 -0
  65. package/vona/src/suite/a-commerce/modules/commerce-seed/src/bean/meta.version.ts +8 -10
  66. package/vona/src/suite/a-commerce/modules/commerce-trade/package.json +4 -1
  67. package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +277 -0
  68. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/bean.scheduleOrderExpiry.ts +26 -0
  69. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.index.ts +9 -0
  70. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.version.ts +75 -0
  71. package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +11 -2
  72. package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +11 -2
  73. package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/checkout.ts +19 -0
  74. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/checkoutCreate.tsx +19 -0
  75. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/checkoutResult.tsx +32 -0
  76. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderAddressSnapshot.tsx +33 -0
  77. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderCouponSnapshot.tsx +35 -0
  78. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderLineSkuAttributeSnapshot.tsx +15 -0
  79. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/order.tsx +90 -0
  80. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/orderAudit.tsx +36 -0
  81. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/orderLine.tsx +52 -0
  82. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/stockReservation.tsx +4 -1
  83. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +15 -0
  84. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/orderAudit.ts +10 -0
  85. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/orderLine.ts +10 -0
  86. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +556 -0
  87. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/stockBalance.ts +15 -20
  88. package/vona/src/suite/a-commerce/modules/commerce-trade/test/cartOwnership.test.ts +8 -3
  89. package/vona/src/suite/a-commerce/modules/commerce-trade/test/checkoutReservation.test.ts +158 -0
  90. package/vona/src/suite/a-commerce/modules/commerce-trade/test/orderSnapshot.test.ts +203 -0
  91. package/vona/src/suite/a-commerce/modules/commerce-trade/test/reservationExpiry.test.ts +163 -0
  92. package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockBalance.test.ts +11 -6
  93. package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockReservation.test.ts +11 -6
  94. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/package.json +1 -1
  95. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/service/imageCloudflare.ts +10 -7
  96. package/vona/src/suite-vendor/a-image/package.json +1 -1
  97. package/vona/src/suite-vendor/a-vona/modules/a-aspect/package.json +1 -1
  98. package/vona/src/suite-vendor/a-vona/modules/a-aspect/src/types/aopMethod.ts +16 -3
  99. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +4 -2
  100. package/vona/src/suite-vendor/a-vona/modules/a-core/src/bean/bean.core.ts +6 -0
  101. package/vona/src/suite-vendor/a-vona/modules/a-core/src/index.ts +1 -0
  102. package/vona/src/suite-vendor/a-vona/modules/a-core/src/lib/core.ts +6 -0
  103. package/vona/src/suite-vendor/a-vona/modules/a-core/src/types/fetch.ts +7 -0
  104. package/vona/src/suite-vendor/a-vona/modules/a-core/src/types/index.ts +1 -0
  105. package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +1 -1
  106. package/vona/src/suite-vendor/a-vona/modules/a-executor/src/lib/utils.ts +5 -3
  107. package/vona/src/suite-vendor/a-vona/modules/a-retryable/package.json +50 -0
  108. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/.metadata/index.ts +55 -0
  109. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/.metadata/this.ts +2 -0
  110. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/bean/aopMethod.retryable.ts +45 -0
  111. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/index.ts +1 -0
  112. package/vona/src/suite-vendor/a-vona/modules/a-retryable/tsconfig.build.json +11 -0
  113. package/vona/src/suite-vendor/a-vona/modules/a-retryable/tsconfig.json +7 -0
  114. package/vona/src/suite-vendor/a-vona/modules/a-vona/package.json +2 -1
  115. package/vona/src/suite-vendor/a-vona/package.json +2 -1
  116. package/vona/src/suite-vendor/a-vona/tsconfig.json +3 -0
  117. package/zova/packages-utils/zova-jsx/package.json +3 -3
  118. package/zova/packages-zova/zova/package.json +3 -3
  119. package/zova/packages-zova/zova-core/package.json +2 -2
  120. package/zova/src/suite/a-commerce/modules/commerce-promotion/cli/openapi.config.ts +9 -0
  121. package/zova/src/suite/a-commerce/modules/commerce-promotion/package.json +2 -1
  122. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/index.ts +115 -1
  123. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/commercePromotionCoupon.ts +24 -0
  124. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/baseURL.ts +5 -0
  125. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/index.ts +3 -0
  126. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/schemas.ts +478 -0
  127. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/types.ts +8187 -0
  128. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/apiSchema/commercePromotionCoupon.ts +13 -0
  129. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/model/coupon.ts +19 -0
  130. package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +1 -0
  131. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +30 -0
  132. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradeCheckout.ts +27 -0
  133. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +92 -52
  134. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +1389 -848
  135. package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradeCheckout.ts +13 -0
  136. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/cart.ts +13 -0
  137. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +3 -3
  138. package/zova/src/suite-vendor/a-zova/package.json +2 -2
@@ -162,7 +162,7 @@ export class ServiceImageCloudflare extends BeanBase {
162
162
  options: IImageProviderCloudflareClientOptions,
163
163
  ) {
164
164
  const normalized = this._normalizeClientOptions(options);
165
- const response = await fetch(
165
+ const response = await this.bean.core.fetch(
166
166
  `${normalized.apiBaseUrl}/accounts/${normalized.accountId}/images/v1/${encodeURIComponent(image.resourceId)}`,
167
167
  {
168
168
  method: 'DELETE',
@@ -247,13 +247,16 @@ export class ServiceImageCloudflare extends BeanBase {
247
247
  apiPath: string,
248
248
  init: RequestInit,
249
249
  ) {
250
- const response = await fetch(`${options.apiBaseUrl}/accounts/${options.accountId}${apiPath}`, {
251
- ...init,
252
- headers: {
253
- ...this._createHeaders(options),
254
- ...(init.headers ?? {}),
250
+ const response = await this.bean.core.fetch(
251
+ `${options.apiBaseUrl}/accounts/${options.accountId}${apiPath}`,
252
+ {
253
+ ...init,
254
+ headers: {
255
+ ...this._createHeaders(options),
256
+ ...(init.headers ?? {}),
257
+ },
255
258
  },
256
- });
259
+ );
257
260
  return await this._parseEnvelope<T>(response);
258
261
  }
259
262
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-suite-a-image",
3
- "version": "5.0.7",
3
+ "version": "5.0.8",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "files": [],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-aspect",
3
- "version": "5.1.11",
3
+ "version": "5.1.12",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "keywords": [
@@ -15,15 +15,28 @@ export interface IUseAopMethodPropMetadataInner<T extends keyof IAopMethodRecord
15
15
 
16
16
  export interface IAopMethodRecord {}
17
17
 
18
+ export type AopMethodNext = Next & {
19
+ replay: Next;
20
+ };
21
+
22
+ export type AopMethodNextSync = NextSync & {
23
+ replay: NextSync;
24
+ };
25
+
18
26
  export interface IAopMethodGet {
19
- get(options: IDecoratorAopMethodOptions, next: NextSync, receiver: any, prop: string): any;
27
+ get(
28
+ options: IDecoratorAopMethodOptions,
29
+ next: AopMethodNextSync,
30
+ receiver: any,
31
+ prop: string,
32
+ ): any;
20
33
  }
21
34
 
22
35
  export interface IAopMethodSet {
23
36
  set(
24
37
  options: IDecoratorAopMethodOptions,
25
38
  value: any,
26
- next: NextSync,
39
+ next: AopMethodNextSync,
27
40
  receiver: any,
28
41
  prop: string,
29
42
  ): boolean;
@@ -33,7 +46,7 @@ export interface IAopMethodExecute {
33
46
  execute(
34
47
  options: IDecoratorAopMethodOptions,
35
48
  args: [],
36
- next: Next | NextSync,
49
+ next: AopMethodNext | AopMethodNextSync,
37
50
  receiver: any,
38
51
  prop: string,
39
52
  ): Promise<any> | any;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-core",
3
- "version": "5.1.44",
3
+ "version": "5.1.45",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "keywords": [
@@ -84,7 +84,9 @@
84
84
  },
85
85
  "title": "a-core",
86
86
  "vonaModule": {
87
- "dependencies": {},
87
+ "dependencies": {
88
+ "a-retryable": "5.0.0"
89
+ },
88
90
  "globalDependencies": {
89
91
  "@babel/core": true,
90
92
  "@babel/traverse": true,
@@ -1,6 +1,8 @@
1
1
  import { BeanBase } from 'vona';
2
2
  import { Bean } from 'vona-module-a-bean';
3
3
 
4
+ import type { TypeContextFetch } from '../types/fetch.ts';
5
+
4
6
  @Bean()
5
7
  export class BeanCore extends BeanBase {
6
8
  get protocol() {
@@ -11,6 +13,10 @@ export class BeanCore extends BeanBase {
11
13
  return this.app.util.host;
12
14
  }
13
15
 
16
+ get fetch(): TypeContextFetch {
17
+ return this.ctx.state.fetch ?? globalThis.fetch;
18
+ }
19
+
14
20
  getAbsoluteUrl(path?: string) {
15
21
  return this.app.util.getAbsoluteUrl(path);
16
22
  }
@@ -1,2 +1,3 @@
1
1
  export * from './.metadata/index.ts';
2
2
  export * from './lib/index.ts';
3
+ export * from './types/index.ts';
@@ -3,6 +3,7 @@ import type { IFilterOptionsError } from 'vona-module-a-error';
3
3
  import type { IAopMethodOptionsLog } from 'vona-module-a-logger';
4
4
  import type { TypeUseOnionOmitOptionsGlobal } from 'vona-module-a-onion';
5
5
  import type { IAopMethodOptionsTransaction } from 'vona-module-a-orm';
6
+ import type { IAopMethodOptionsRetryable } from 'vona-module-a-retryable';
6
7
  import type { IInterceptorOptionsUpload } from 'vona-module-a-upload';
7
8
 
8
9
  import { Aspect } from 'vona-module-a-aspect';
@@ -29,6 +30,10 @@ function Transaction(options?: Partial<IAopMethodOptionsTransaction>): MethodDec
29
30
  return Aspect.aopMethod('a-orm:transaction', options);
30
31
  }
31
32
 
33
+ function Retryable(options: IAopMethodOptionsRetryable): MethodDecorator {
34
+ return Aspect.aopMethod('a-retryable:retryable', options);
35
+ }
36
+
32
37
  function CaptchaVerify(options?: Partial<IInterceptorOptionsCaptchaVerify>): MethodDecorator {
33
38
  return Aspect.interceptor('a-captcha:captchaVerify', options);
34
39
  }
@@ -46,6 +51,7 @@ export const Core = {
46
51
  error: Error,
47
52
  log: Log,
48
53
  transaction: Transaction,
54
+ retryable: Retryable,
49
55
  captchaVerify: CaptchaVerify,
50
56
  fileUpload: FileUpload,
51
57
  serializer: Serializer,
@@ -0,0 +1,7 @@
1
+ export type TypeContextFetch = typeof globalThis.fetch;
2
+
3
+ declare module 'vona' {
4
+ export interface ContextState {
5
+ fetch?: TypeContextFetch;
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ export * from './fetch.ts';
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-executor",
3
- "version": "5.1.13",
3
+ "version": "5.1.14",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "keywords": [
@@ -2,9 +2,11 @@ export function __delegateProperties(ctx, ctxCaller) {
2
2
  for (const property of ['state']) {
3
3
  __delegateProperty(ctx, ctxCaller, property);
4
4
  }
5
- for (const property of ['headers']) {
6
- __delegateProperty(ctx.request, ctxCaller.request, property);
7
- // if (ctx.request[property]) req[property] = ctx.request[property];
5
+ if (ctxCaller.request) {
6
+ for (const property of ['headers']) {
7
+ __delegateProperty(ctx.request, ctxCaller.request, property);
8
+ // if (ctx.request[property]) req[property] = ctx.request[property];
9
+ }
8
10
  }
9
11
  }
10
12
 
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "vona-module-a-retryable",
3
+ "version": "5.0.1",
4
+ "description": "",
5
+ "keywords": [
6
+ "Vona Module"
7
+ ],
8
+ "author": "",
9
+ "files": [
10
+ "assets",
11
+ "dist",
12
+ "src"
13
+ ],
14
+ "type": "module",
15
+ "exports": {
16
+ ".": {
17
+ "types": [
18
+ "./src/index.ts",
19
+ "./dist/index.d.ts"
20
+ ],
21
+ "import": "./src/index.ts",
22
+ "default": "./dist/index.js"
23
+ },
24
+ "./package.json": "./package.json"
25
+ },
26
+ "scripts": {
27
+ "clean": "rimraf dist tsconfig.build.tsbuildinfo",
28
+ "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/vona.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
29
+ "prepublishOnly": "npm run tsc:publish",
30
+ "prepack": "clean-package",
31
+ "postpack": "clean-package restore"
32
+ },
33
+ "dependencies": {},
34
+ "devDependencies": {
35
+ "clean-package": "^2.2.0",
36
+ "rimraf": "^6.1.3"
37
+ },
38
+ "clean-package": {
39
+ "indent": 2,
40
+ "remove": [
41
+ "clean-package",
42
+ "devDependencies",
43
+ "exports.\\..import"
44
+ ]
45
+ },
46
+ "title": "a-retryable",
47
+ "vonaModule": {
48
+ "dependencies": {}
49
+ }
50
+ }
@@ -0,0 +1,55 @@
1
+ // eslint-disable
2
+ /** aopMethod: begin */
3
+ export * from '../bean/aopMethod.retryable.ts';
4
+ import type { IAopMethodOptionsRetryable } from '../bean/aopMethod.retryable.ts';
5
+ import 'vona-module-a-aspect';
6
+ declare module 'vona-module-a-aspect' {
7
+
8
+ export interface IAopMethodRecord {
9
+ 'a-retryable:retryable': IAopMethodOptionsRetryable;
10
+ }
11
+
12
+
13
+ }
14
+ declare module 'vona-module-a-retryable' {
15
+
16
+ export interface AopMethodRetryable {
17
+ /** @internal */
18
+ get scope(): ScopeModuleARetryable;
19
+ }
20
+
21
+ export interface AopMethodRetryable {
22
+ get $beanFullName(): 'a-retryable.aopMethod.retryable';
23
+ get $onionName(): 'a-retryable:retryable';
24
+ get $onionOptions(): IAopMethodOptionsRetryable;
25
+ }
26
+ }
27
+ /** aopMethod: end */
28
+ /** scope: begin */
29
+ import { BeanScopeBase, type BeanScopeUtil } from 'vona';
30
+ import { Scope } from 'vona-module-a-bean';
31
+
32
+ @Scope()
33
+ export class ScopeModuleARetryable extends BeanScopeBase {}
34
+
35
+ export interface ScopeModuleARetryable {
36
+ util: BeanScopeUtil;
37
+ }
38
+
39
+ import 'vona';
40
+ declare module 'vona' {
41
+ export interface IBeanScopeRecord {
42
+ 'a-retryable': ScopeModuleARetryable;
43
+ }
44
+
45
+ export interface IBeanScopeContainer {
46
+ retryable: ScopeModuleARetryable;
47
+ }
48
+
49
+
50
+
51
+
52
+
53
+
54
+ }
55
+ /** scope: end */
@@ -0,0 +1,2 @@
1
+ export const __ThisModule__ = 'a-retryable';
2
+ export { ScopeModuleARetryable as ScopeModule } from './index.ts';
@@ -0,0 +1,45 @@
1
+ import type {
2
+ AopMethodNext,
3
+ IAopMethodExecute,
4
+ IDecoratorAopMethodOptions,
5
+ } from 'vona-module-a-aspect';
6
+
7
+ import { BeanAopMethodBase, Retry } from 'vona';
8
+ import { AopMethod } from 'vona-module-a-aspect';
9
+
10
+ export interface IAopMethodOptionsRetryable extends IDecoratorAopMethodOptions, Retry.WrapOptions {
11
+ errorCodes: string[];
12
+ ownerOnly?: boolean;
13
+ }
14
+
15
+ @AopMethod<IAopMethodOptionsRetryable>()
16
+ export class AopMethodRetryable extends BeanAopMethodBase implements IAopMethodExecute {
17
+ async execute(
18
+ options: IAopMethodOptionsRetryable,
19
+ _args: [],
20
+ next: AopMethodNext,
21
+ _receiver: any,
22
+ _prop: string,
23
+ ): Promise<any> {
24
+ if (options.ownerOnly && this.bean.database.current.transaction.inTransaction) {
25
+ return await next.replay();
26
+ }
27
+ const operation = Retry.operation(options);
28
+ return await new Promise((resolve, reject) => {
29
+ operation.attempt(() => {
30
+ next
31
+ .replay()
32
+ .then(resolve)
33
+ .catch(error => {
34
+ if (this._shouldRetry(error, options) && operation.retry(error)) return;
35
+ reject(error);
36
+ });
37
+ });
38
+ });
39
+ }
40
+
41
+ private _shouldRetry(error: unknown, options: IAopMethodOptionsRetryable) {
42
+ const code = (error as { code?: unknown })?.code;
43
+ return typeof code === 'string' && options.errorCodes?.includes(code) === true;
44
+ }
45
+ }
@@ -0,0 +1 @@
1
+ export * from './.metadata/index.ts';
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../tsconfig.base",
3
+ "compilerOptions": {
4
+ "rootDir": "src",
5
+ "declaration": true,
6
+ "declarationMap": true,
7
+ "emitDeclarationOnly": true,
8
+ "outDir": "dist"
9
+ },
10
+ "include": ["src", "src/.metadata/*.ts", "src/**/*.json"]
11
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "../../tsconfig.base",
3
+ "compilerOptions": {
4
+ "noEmit": true
5
+ },
6
+ "include": ["src", "src/.metadata/*.ts", "src/**/*.json", "test"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-vona",
3
- "version": "5.1.12",
3
+ "version": "5.1.13",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "keywords": [
@@ -84,6 +84,7 @@
84
84
  "a-queue": "5.0.0",
85
85
  "a-redis": "5.0.0",
86
86
  "a-redlock": "5.0.0",
87
+ "a-retryable": "5.0.0",
87
88
  "a-runtime": "5.0.0",
88
89
  "a-schedule": "5.0.0",
89
90
  "a-security": "5.0.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-suite-a-vona",
3
- "version": "5.1.71",
3
+ "version": "5.1.72",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "author": "",
@@ -44,6 +44,7 @@
44
44
  "vona-module-a-queue": "workspace:^",
45
45
  "vona-module-a-redis": "workspace:^",
46
46
  "vona-module-a-redlock": "workspace:^",
47
+ "vona-module-a-retryable": "workspace:^",
47
48
  "vona-module-a-runtime": "workspace:^",
48
49
  "vona-module-a-schedule": "workspace:^",
49
50
  "vona-module-a-security": "workspace:^",
@@ -160,6 +160,9 @@
160
160
  },
161
161
  {
162
162
  "path": "modules/a-hmrbase/tsconfig.build.json"
163
+ },
164
+ {
165
+ "path": "modules/a-retryable/tsconfig.build.json"
163
166
  }
164
167
  ],
165
168
  "exclude": ["modules"]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-jsx",
3
- "version": "1.1.78",
3
+ "version": "1.1.79",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "Zova JSX",
6
6
  "keywords": [
@@ -45,12 +45,12 @@
45
45
  "postpack": "clean-package restore"
46
46
  },
47
47
  "dependencies": {
48
- "@cabloy/compose": "^2.1.8",
48
+ "@cabloy/compose": "^2.1.9",
49
49
  "@cabloy/utils": "^2.1.26",
50
50
  "@cabloy/word-utils": "^2.1.14",
51
51
  "typestyle": "^2.4.0",
52
52
  "vue": "^3.5.38",
53
- "zova-core": "^5.1.78"
53
+ "zova-core": "^5.1.79"
54
54
  },
55
55
  "devDependencies": {
56
56
  "clean-package": "^2.2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova",
3
- "version": "5.1.139",
3
+ "version": "5.1.140",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A vue3 framework with ioc",
6
6
  "keywords": [
@@ -45,8 +45,8 @@
45
45
  "postpack": "clean-package restore"
46
46
  },
47
47
  "dependencies": {
48
- "zova-core": "^5.1.78",
49
- "zova-suite-a-zova": "^5.1.138"
48
+ "zova-core": "^5.1.79",
49
+ "zova-suite-a-zova": "^5.1.139"
50
50
  },
51
51
  "devDependencies": {
52
52
  "clean-package": "^2.2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-core",
3
- "version": "5.1.78",
3
+ "version": "5.1.79",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A vue3 framework with ioc",
6
6
  "keywords": [
@@ -46,7 +46,7 @@
46
46
  "postpack": "clean-package restore"
47
47
  },
48
48
  "dependencies": {
49
- "@cabloy/compose": "^2.1.8",
49
+ "@cabloy/compose": "^2.1.9",
50
50
  "@cabloy/extend": "^3.2.8",
51
51
  "@cabloy/json5": "^1.1.9",
52
52
  "@cabloy/localeutil": "^2.1.8",
@@ -0,0 +1,9 @@
1
+ import type { ZovaOpenapiConfigModule } from 'zova-openapi';
2
+
3
+ export default function (): ZovaOpenapiConfigModule {
4
+ return {
5
+ operations: {
6
+ match: ['CommercePromotionCoupon_mine'],
7
+ },
8
+ };
9
+ }
@@ -11,7 +11,8 @@
11
11
  "dist",
12
12
  "src",
13
13
  "icons",
14
- "assets"
14
+ "assets",
15
+ "cli"
15
16
  ],
16
17
  "type": "module",
17
18
  "exports": {
@@ -1,4 +1,116 @@
1
1
  // eslint-disable
2
+ /** model: begin */
3
+ export * from '../model/coupon.js';
4
+ import { IModelOptionsCoupon } from '../model/coupon.js';
5
+ import 'zova-module-a-model';
6
+ declare module 'zova-module-a-model' {
7
+
8
+ export interface IModelRecord {
9
+ 'commerce-promotion:coupon': IModelOptionsCoupon;
10
+ }
11
+
12
+
13
+ }
14
+ declare module 'zova-module-commerce-promotion' {
15
+
16
+ export interface ModelCoupon {
17
+ /** @internal */
18
+ get scope(): ScopeModuleCommercePromotion;
19
+ }
20
+
21
+ export interface ModelCoupon {
22
+ get $beanFullName(): 'commerce-promotion.model.coupon';
23
+ get $onionName(): 'commerce-promotion:coupon';
24
+ get $onionOptions(): IModelOptionsCoupon;
25
+ }
26
+ }
27
+ /** model: end */
28
+ /** model: begin */
29
+ import { ModelCoupon } from '../model/coupon.js';
30
+ import 'zova';
31
+ declare module 'zova' {
32
+ export interface IBeanRecordGeneral {
33
+ 'commerce-promotion.model.coupon': ModelCoupon;
34
+ }
35
+ }
36
+ /** model: end */
37
+ /** api: begin */
38
+ export * from '../api/commercePromotionCoupon.js';
39
+
40
+ import 'zova';
41
+ declare module 'zova' {
42
+
43
+
44
+ }
45
+ declare module 'zova-module-commerce-promotion' {
46
+
47
+ export interface ApiCommercePromotionCoupon {
48
+ /** @internal */
49
+ get scope(): ScopeModuleCommercePromotion;
50
+ }
51
+
52
+ export interface ApiCommercePromotionCoupon {
53
+ get $beanFullName(): 'commerce-promotion.api.commercePromotionCoupon';
54
+ get $onionName(): 'commerce-promotion:commercePromotionCoupon';
55
+
56
+ }
57
+ }
58
+ /** api: end */
59
+ /** api: begin */
60
+ import { ApiCommercePromotionCoupon } from '../api/commercePromotionCoupon.js';
61
+ export interface IModuleApi {
62
+ 'commercePromotionCoupon': ApiCommercePromotionCoupon;
63
+ }
64
+ /** api: end */
65
+ /** api: begin */
66
+
67
+ import 'zova';
68
+ declare module 'zova' {
69
+ export interface IBeanRecordGeneral {
70
+ 'commerce-promotion.api.commercePromotionCoupon': ApiCommercePromotionCoupon;
71
+ }
72
+ }
73
+ /** api: end */
74
+ /** openapi: begin */
75
+ export * from '../api/openapi/index.js';
76
+ /** openapi: end */
77
+ /** apiSchema: begin */
78
+ export * from '../apiSchema/commercePromotionCoupon.js';
79
+
80
+ import 'zova';
81
+ declare module 'zova' {
82
+
83
+
84
+ }
85
+ declare module 'zova-module-commerce-promotion' {
86
+
87
+ export interface ApiSchemaCommercePromotionCoupon {
88
+ /** @internal */
89
+ get scope(): ScopeModuleCommercePromotion;
90
+ }
91
+
92
+ export interface ApiSchemaCommercePromotionCoupon {
93
+ get $beanFullName(): 'commerce-promotion.apiSchema.commercePromotionCoupon';
94
+ get $onionName(): 'commerce-promotion:commercePromotionCoupon';
95
+
96
+ }
97
+ }
98
+ /** apiSchema: end */
99
+ /** apiSchema: begin */
100
+ import { ApiSchemaCommercePromotionCoupon } from '../apiSchema/commercePromotionCoupon.js';
101
+ export interface IModuleApiSchema {
102
+ 'commercePromotionCoupon': ApiSchemaCommercePromotionCoupon;
103
+ }
104
+ /** apiSchema: end */
105
+ /** apiSchema: begin */
106
+
107
+ import 'zova';
108
+ declare module 'zova' {
109
+ export interface IBeanRecordGeneral {
110
+ 'commerce-promotion.apiSchema.commercePromotionCoupon': ApiSchemaCommercePromotionCoupon;
111
+ }
112
+ }
113
+ /** apiSchema: end */
2
114
  /** scope: begin */
3
115
  import { BeanScopeBase, type BeanScopeUtil } from 'zova';
4
116
  import { Scope } from 'zova-module-a-bean';
@@ -8,6 +120,8 @@ export class ScopeModuleCommercePromotion extends BeanScopeBase {}
8
120
 
9
121
  export interface ScopeModuleCommercePromotion {
10
122
  util: BeanScopeUtil;
123
+ api: IModuleApi;
124
+ apiSchema: IModuleApiSchema;
11
125
  }
12
126
 
13
127
  import 'zova';
@@ -22,5 +136,5 @@ declare module 'zova' {
22
136
 
23
137
 
24
138
  }
25
-
139
+
26
140
  /** scope: end */
@@ -0,0 +1,24 @@
1
+ import type { IApiActionOptions } from 'zova-module-a-api';
2
+
3
+ import { Api, BeanApiBase } from 'zova-module-a-api';
4
+
5
+ import type { paths } from './openapi/index.js';
6
+
7
+ import { OpenApiBaseURL } from './openapi/index.js';
8
+
9
+ /** CommercePromotionCoupon_mine */
10
+ export const ApiApiCommercePromotionCouponminePath = '/api/commerce/promotion/coupon/mine';
11
+ export type ApiApiCommercePromotionCouponminePath = '/api/commerce/promotion/coupon/mine';
12
+ export type ApiApiCommercePromotionCouponmineMethod = 'get';
13
+ export type ApiApiCommercePromotionCouponmineResponseBody =
14
+ paths[ApiApiCommercePromotionCouponminePath][ApiApiCommercePromotionCouponmineMethod]['responses']['200']['content']['application/json']['data'];
15
+
16
+ @Api()
17
+ export class ApiCommercePromotionCoupon extends BeanApiBase {
18
+ mine(options?: IApiActionOptions) {
19
+ return this.$fetch.get<any, ApiApiCommercePromotionCouponmineResponseBody>(
20
+ ApiApiCommercePromotionCouponminePath,
21
+ this.$configPrepare(OpenApiBaseURL(this.sys), options, true),
22
+ );
23
+ }
24
+ }