cabloy 5.1.113 → 5.1.115

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 (141) 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 +20 -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 +143 -12
  20. package/vona/pnpm-workspace.yaml +1 -1
  21. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/index.ts +8 -0
  22. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/meta.version.ts +1 -0
  23. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/en-us.ts +3 -0
  24. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/zh-cn.ts +3 -0
  25. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuAttribute.tsx +17 -0
  26. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/entity/sku.tsx +10 -1
  27. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/catalog.test.ts +1 -1
  28. package/vona/src/suite/a-commerce/modules/commerce-member/test/addressOwnership.test.ts +6 -1
  29. package/vona/src/suite/a-commerce/modules/commerce-payment/package.json +2 -1
  30. package/vona/src/suite/a-commerce/modules/commerce-payment/src/.metadata/index.ts +228 -0
  31. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.index.ts +15 -0
  32. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.version.ts +35 -0
  33. package/vona/src/suite/a-commerce/modules/commerce-payment/src/dto/paymentAttemptView.tsx +26 -0
  34. package/vona/src/suite/a-commerce/modules/commerce-payment/src/entity/paymentAttempt.tsx +34 -0
  35. package/vona/src/suite/a-commerce/modules/commerce-payment/src/model/paymentAttempt.ts +10 -0
  36. package/vona/src/suite/a-commerce/modules/commerce-payment/src/service/paymentAttempt.ts +41 -0
  37. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentAttempt.test.ts +33 -0
  38. package/vona/src/suite/a-commerce/modules/commerce-promotion/package.json +4 -2
  39. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/index.ts +533 -2
  40. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/locales.ts +18 -0
  41. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/meta.index.ts +24 -0
  42. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/meta.version.ts +137 -0
  43. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/ssrMenu.couponTemplate.ts +30 -0
  44. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/en-us.ts +37 -0
  45. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/zh-cn.ts +37 -0
  46. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/controller/coupon.ts +37 -0
  47. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/controller/couponTemplate.ts +65 -0
  48. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponIssue.tsx +22 -0
  49. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponMineItem.tsx +32 -0
  50. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateCreate.tsx +43 -0
  51. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateSelectReq.tsx +28 -0
  52. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateSelectRes.tsx +11 -0
  53. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateSelectResItem.tsx +39 -0
  54. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateUpdate.tsx +19 -0
  55. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateView.tsx +25 -0
  56. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponAudit.tsx +73 -0
  57. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponGrant.tsx +83 -0
  58. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponTemplate.tsx +82 -0
  59. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/index.ts +1 -0
  60. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/model/couponAudit.ts +10 -0
  61. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/model/couponGrant.ts +10 -0
  62. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/model/couponTemplate.ts +10 -0
  63. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/service/coupon.ts +397 -0
  64. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/service/couponTemplate.ts +52 -0
  65. package/vona/src/suite/a-commerce/modules/commerce-promotion/test/couponReservation.test.ts +162 -0
  66. package/vona/src/suite/a-commerce/modules/commerce-seed/src/bean/meta.version.ts +8 -10
  67. package/vona/src/suite/a-commerce/modules/commerce-trade/package.json +4 -1
  68. package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +277 -0
  69. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/bean.scheduleOrderExpiry.ts +26 -0
  70. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.index.ts +9 -0
  71. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.version.ts +75 -0
  72. package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +11 -2
  73. package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +11 -2
  74. package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/checkout.ts +19 -0
  75. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/checkoutCreate.tsx +19 -0
  76. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/checkoutResult.tsx +32 -0
  77. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderAddressSnapshot.tsx +33 -0
  78. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderCouponSnapshot.tsx +35 -0
  79. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderLineSkuAttributeSnapshot.tsx +15 -0
  80. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/order.tsx +90 -0
  81. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/orderAudit.tsx +36 -0
  82. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/orderLine.tsx +52 -0
  83. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/stockReservation.tsx +4 -1
  84. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +15 -0
  85. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/orderAudit.ts +10 -0
  86. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/orderLine.ts +10 -0
  87. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +556 -0
  88. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/stockBalance.ts +15 -20
  89. package/vona/src/suite/a-commerce/modules/commerce-trade/test/cartOwnership.test.ts +8 -3
  90. package/vona/src/suite/a-commerce/modules/commerce-trade/test/checkoutReservation.test.ts +158 -0
  91. package/vona/src/suite/a-commerce/modules/commerce-trade/test/orderSnapshot.test.ts +203 -0
  92. package/vona/src/suite/a-commerce/modules/commerce-trade/test/reservationExpiry.test.ts +163 -0
  93. package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockBalance.test.ts +11 -6
  94. package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockReservation.test.ts +11 -6
  95. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/package.json +1 -1
  96. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/service/imageCloudflare.ts +10 -7
  97. package/vona/src/suite-vendor/a-image/package.json +1 -1
  98. package/vona/src/suite-vendor/a-vona/modules/a-aspect/package.json +1 -1
  99. package/vona/src/suite-vendor/a-vona/modules/a-aspect/src/types/aopMethod.ts +16 -3
  100. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +4 -2
  101. package/vona/src/suite-vendor/a-vona/modules/a-core/src/bean/bean.core.ts +6 -0
  102. package/vona/src/suite-vendor/a-vona/modules/a-core/src/index.ts +1 -0
  103. package/vona/src/suite-vendor/a-vona/modules/a-core/src/lib/core.ts +6 -0
  104. package/vona/src/suite-vendor/a-vona/modules/a-core/src/types/fetch.ts +7 -0
  105. package/vona/src/suite-vendor/a-vona/modules/a-core/src/types/index.ts +1 -0
  106. package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +1 -1
  107. package/vona/src/suite-vendor/a-vona/modules/a-executor/src/lib/utils.ts +5 -3
  108. package/vona/src/suite-vendor/a-vona/modules/a-retryable/package.json +50 -0
  109. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/.metadata/index.ts +55 -0
  110. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/.metadata/this.ts +2 -0
  111. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/bean/aopMethod.retryable.ts +45 -0
  112. package/vona/src/suite-vendor/a-vona/modules/a-retryable/src/index.ts +1 -0
  113. package/vona/src/suite-vendor/a-vona/modules/a-retryable/tsconfig.build.json +11 -0
  114. package/vona/src/suite-vendor/a-vona/modules/a-retryable/tsconfig.json +7 -0
  115. package/vona/src/suite-vendor/a-vona/modules/a-vona/package.json +2 -1
  116. package/vona/src/suite-vendor/a-vona/package.json +2 -1
  117. package/vona/src/suite-vendor/a-vona/tsconfig.json +3 -0
  118. package/zova/packages-utils/zova-jsx/package.json +3 -3
  119. package/zova/packages-zova/zova/package.json +3 -3
  120. package/zova/packages-zova/zova-core/package.json +2 -2
  121. package/zova/pnpm-lock.yaml +31 -31
  122. package/zova/src/suite/a-commerce/modules/commerce-promotion/cli/openapi.config.ts +9 -0
  123. package/zova/src/suite/a-commerce/modules/commerce-promotion/package.json +2 -1
  124. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/index.ts +115 -1
  125. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/commercePromotionCoupon.ts +24 -0
  126. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/baseURL.ts +5 -0
  127. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/index.ts +3 -0
  128. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/schemas.ts +478 -0
  129. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/types.ts +8187 -0
  130. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/apiSchema/commercePromotionCoupon.ts +13 -0
  131. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/model/coupon.ts +19 -0
  132. package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +1 -0
  133. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +30 -0
  134. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradeCheckout.ts +27 -0
  135. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +92 -52
  136. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +1389 -848
  137. package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradeCheckout.ts +13 -0
  138. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/cart.ts +13 -0
  139. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +3 -3
  140. package/zova/src/suite-vendor/a-zova/package.json +2 -2
  141. /package/vona/patches/{zova-core@5.1.78.patch → zova-core@5.1.79.patch} +0 -0
@@ -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",