@module-federation/retry-plugin 2.5.0 → 2.6.0
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/README.md +13 -13
- package/dist/CHANGELOG.md +17 -0
- package/dist/README.md +13 -13
- package/dist/esm/index.js +7 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +7 -2
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -93,18 +93,18 @@ export default () =>
|
|
|
93
93
|
|
|
94
94
|
### CommonRetryOptions
|
|
95
95
|
|
|
96
|
-
| Option | Type
|
|
97
|
-
| ----------------- |
|
|
98
|
-
| `retryTimes` | `number`
|
|
99
|
-
| `retryDelay` | `number`
|
|
100
|
-
| `successTimes` | `number`
|
|
101
|
-
| `domains` | `string[]`
|
|
102
|
-
| `manifestDomains` | `string[]`
|
|
103
|
-
| `addQuery` | `boolean \| function`
|
|
104
|
-
| `fetchOptions` | `RequestInit`
|
|
105
|
-
| `onRetry` | `function`
|
|
106
|
-
| `onSuccess` | `function`
|
|
107
|
-
| `onError` | `function`
|
|
96
|
+
| Option | Type | Default | Description |
|
|
97
|
+
| ----------------- | --------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------ |
|
|
98
|
+
| `retryTimes` | `number` | `3` | Number of retry attempts |
|
|
99
|
+
| `retryDelay` | `number \| (attempt: number) => number` | `1000` | Delay between retries in milliseconds, or a function returning delay per 1-indexed retry attempt |
|
|
100
|
+
| `successTimes` | `number` | `0` | Number of successful requests required |
|
|
101
|
+
| `domains` | `string[]` | `[]` | Alternative domains for script resources |
|
|
102
|
+
| `manifestDomains` | `string[]` | `[]` | Alternative domains for manifest files |
|
|
103
|
+
| `addQuery` | `boolean \| function` | `false` | Add query parameters for cache busting |
|
|
104
|
+
| `fetchOptions` | `RequestInit` | `{}` | Additional fetch options |
|
|
105
|
+
| `onRetry` | `function` | `undefined` | Callback when retry occurs |
|
|
106
|
+
| `onSuccess` | `function` | `undefined` | Callback when request succeeds |
|
|
107
|
+
| `onError` | `function` | `undefined` | Callback when all retries fail |
|
|
108
108
|
|
|
109
109
|
### addQuery Function
|
|
110
110
|
|
|
@@ -142,7 +142,7 @@ onError: ({ domains, url, tagName }) => {
|
|
|
142
142
|
```ts
|
|
143
143
|
RetryPlugin({
|
|
144
144
|
retryTimes: 5,
|
|
145
|
-
retryDelay: (attempt) =>
|
|
145
|
+
retryDelay: (attempt) => 1000 * 2 ** (attempt - 1), // Exponential backoff: 1s, 2s, 4s, ...
|
|
146
146
|
domains: ['https://cdn1.example.com', 'https://cdn2.example.com', 'https://cdn3.example.com'],
|
|
147
147
|
manifestDomains: ['https://api1.example.com', 'https://api2.example.com'],
|
|
148
148
|
addQuery: ({ times, originalQuery }) => {
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @module-federation/retry-plugin
|
|
2
2
|
|
|
3
|
+
## 2.6.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 64719e2: Support function-based `retryDelay` for per-attempt delay strategies such as exponential backoff.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- @module-federation/sdk@2.6.0
|
|
12
|
+
|
|
13
|
+
## 2.5.1
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [b9b3b8c]
|
|
18
|
+
- @module-federation/sdk@2.5.1
|
|
19
|
+
|
|
3
20
|
## 2.5.0
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
package/dist/README.md
CHANGED
|
@@ -93,18 +93,18 @@ export default () =>
|
|
|
93
93
|
|
|
94
94
|
### CommonRetryOptions
|
|
95
95
|
|
|
96
|
-
| Option | Type
|
|
97
|
-
| ----------------- |
|
|
98
|
-
| `retryTimes` | `number`
|
|
99
|
-
| `retryDelay` | `number`
|
|
100
|
-
| `successTimes` | `number`
|
|
101
|
-
| `domains` | `string[]`
|
|
102
|
-
| `manifestDomains` | `string[]`
|
|
103
|
-
| `addQuery` | `boolean \| function`
|
|
104
|
-
| `fetchOptions` | `RequestInit`
|
|
105
|
-
| `onRetry` | `function`
|
|
106
|
-
| `onSuccess` | `function`
|
|
107
|
-
| `onError` | `function`
|
|
96
|
+
| Option | Type | Default | Description |
|
|
97
|
+
| ----------------- | --------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------ |
|
|
98
|
+
| `retryTimes` | `number` | `3` | Number of retry attempts |
|
|
99
|
+
| `retryDelay` | `number \| (attempt: number) => number` | `1000` | Delay between retries in milliseconds, or a function returning delay per 1-indexed retry attempt |
|
|
100
|
+
| `successTimes` | `number` | `0` | Number of successful requests required |
|
|
101
|
+
| `domains` | `string[]` | `[]` | Alternative domains for script resources |
|
|
102
|
+
| `manifestDomains` | `string[]` | `[]` | Alternative domains for manifest files |
|
|
103
|
+
| `addQuery` | `boolean \| function` | `false` | Add query parameters for cache busting |
|
|
104
|
+
| `fetchOptions` | `RequestInit` | `{}` | Additional fetch options |
|
|
105
|
+
| `onRetry` | `function` | `undefined` | Callback when retry occurs |
|
|
106
|
+
| `onSuccess` | `function` | `undefined` | Callback when request succeeds |
|
|
107
|
+
| `onError` | `function` | `undefined` | Callback when all retries fail |
|
|
108
108
|
|
|
109
109
|
### addQuery Function
|
|
110
110
|
|
|
@@ -142,7 +142,7 @@ onError: ({ domains, url, tagName }) => {
|
|
|
142
142
|
```ts
|
|
143
143
|
RetryPlugin({
|
|
144
144
|
retryTimes: 5,
|
|
145
|
-
retryDelay: (attempt) =>
|
|
145
|
+
retryDelay: (attempt) => 1000 * 2 ** (attempt - 1), // Exponential backoff: 1s, 2s, 4s, ...
|
|
146
146
|
domains: ['https://cdn1.example.com', 'https://cdn2.example.com', 'https://cdn3.example.com'],
|
|
147
147
|
manifestDomains: ['https://api1.example.com', 'https://api2.example.com'],
|
|
148
148
|
addQuery: ({ times, originalQuery }) => {
|
package/dist/esm/index.js
CHANGED
|
@@ -144,7 +144,11 @@ async function fetchRetry(params, lastRequestUrl, originalTotal) {
|
|
|
144
144
|
queryKey: "retryCount"
|
|
145
145
|
});
|
|
146
146
|
try {
|
|
147
|
-
if (!isFirstAttempt
|
|
147
|
+
if (!isFirstAttempt) {
|
|
148
|
+
const attemptIndex = total - retryTimes;
|
|
149
|
+
const delay = typeof retryDelay === "function" ? retryDelay(attemptIndex) : retryDelay;
|
|
150
|
+
if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
|
|
151
|
+
}
|
|
148
152
|
const response = await fetch(requestUrl, fetchOptions);
|
|
149
153
|
const responseClone = response.clone();
|
|
150
154
|
if (!response.ok) throw new Error(`${PLUGIN_IDENTIFIER}: Request failed: ${response.status} ${response.statusText || ""} | url: ${requestUrl}`);
|
|
@@ -204,7 +208,8 @@ function scriptRetry({ retryOptions, retryFn, beforeExecuteRetry = () => {} }) {
|
|
|
204
208
|
const maxAttempts = retryTimes;
|
|
205
209
|
while (attempts < maxAttempts) try {
|
|
206
210
|
beforeExecuteRetry();
|
|
207
|
-
|
|
211
|
+
const delay = typeof retryDelay === "function" ? retryDelay(attempts + 1) : retryDelay;
|
|
212
|
+
if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
|
|
208
213
|
const retryIndex = attempts + 1;
|
|
209
214
|
retryWrapper = await retryFn({
|
|
210
215
|
...params,
|
package/dist/index.d.ts
CHANGED
|
@@ -776,9 +776,10 @@ type CommonRetryOptions = {
|
|
|
776
776
|
*/
|
|
777
777
|
successTimes?: number;
|
|
778
778
|
/**
|
|
779
|
-
* retry delay
|
|
779
|
+
* retry delay in milliseconds, or a function that returns delay per attempt.
|
|
780
|
+
* When a function, `attempt` is 1-indexed (the nth retry, not the initial call).
|
|
780
781
|
*/
|
|
781
|
-
retryDelay?: number;
|
|
782
|
+
retryDelay?: number | ((attempt: number) => number);
|
|
782
783
|
/**
|
|
783
784
|
* retry path
|
|
784
785
|
*/
|
package/dist/index.js
CHANGED
|
@@ -145,7 +145,11 @@ async function fetchRetry(params, lastRequestUrl, originalTotal) {
|
|
|
145
145
|
queryKey: "retryCount"
|
|
146
146
|
});
|
|
147
147
|
try {
|
|
148
|
-
if (!isFirstAttempt
|
|
148
|
+
if (!isFirstAttempt) {
|
|
149
|
+
const attemptIndex = total - retryTimes;
|
|
150
|
+
const delay = typeof retryDelay === "function" ? retryDelay(attemptIndex) : retryDelay;
|
|
151
|
+
if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
|
|
152
|
+
}
|
|
149
153
|
const response = await fetch(requestUrl, fetchOptions);
|
|
150
154
|
const responseClone = response.clone();
|
|
151
155
|
if (!response.ok) throw new Error(`${PLUGIN_IDENTIFIER}: Request failed: ${response.status} ${response.statusText || ""} | url: ${requestUrl}`);
|
|
@@ -205,7 +209,8 @@ function scriptRetry({ retryOptions, retryFn, beforeExecuteRetry = () => {} }) {
|
|
|
205
209
|
const maxAttempts = retryTimes;
|
|
206
210
|
while (attempts < maxAttempts) try {
|
|
207
211
|
beforeExecuteRetry();
|
|
208
|
-
|
|
212
|
+
const delay = typeof retryDelay === "function" ? retryDelay(attempts + 1) : retryDelay;
|
|
213
|
+
if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
|
|
209
214
|
const retryIndex = attempts + 1;
|
|
210
215
|
retryWrapper = await retryFn({
|
|
211
216
|
...params,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@module-federation/retry-plugin",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"author": "danpeen <dapeen.feng@gmail.com>",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@module-federation/runtime": "2.
|
|
36
|
+
"@module-federation/runtime": "2.6.0"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@module-federation/sdk": "2.
|
|
39
|
+
"@module-federation/sdk": "2.6.0"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "tsdown --config tsdown.config.ts && cp *.md dist",
|