rxjs-poll 1.1.10 → 2.0.1
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 +236 -76
- package/dist/cjs/common/config.js +43 -25
- package/dist/cjs/common/config.js.map +1 -1
- package/dist/cjs/common/observables.js +5 -5
- package/dist/cjs/common/observables.js.map +1 -1
- package/dist/cjs/common/operators.js +12 -0
- package/dist/cjs/common/operators.js.map +1 -0
- package/dist/cjs/common/strategies.js +41 -0
- package/dist/cjs/common/strategies.js.map +1 -0
- package/dist/cjs/common/utils.js +2 -2
- package/dist/cjs/common/utils.js.map +1 -1
- package/dist/cjs/constants/config.const.js +20 -0
- package/dist/cjs/constants/config.const.js.map +1 -0
- package/dist/cjs/constants/poll.const.js +12 -0
- package/dist/cjs/constants/poll.const.js.map +1 -0
- package/dist/cjs/constants/strategies.const.js +11 -0
- package/dist/cjs/constants/strategies.const.js.map +1 -0
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/poll.js +27 -27
- package/dist/cjs/poll.js.map +1 -1
- package/dist/cjs/types/config.type.js +3 -0
- package/dist/cjs/types/config.type.js.map +1 -0
- package/dist/cjs/types/poll.type.js +3 -0
- package/dist/cjs/types/poll.type.js.map +1 -0
- package/dist/cjs/types/strategies.type.js +3 -0
- package/dist/cjs/types/strategies.type.js.map +1 -0
- package/dist/cjs/types/utils.type.js +3 -0
- package/dist/cjs/types/utils.type.js.map +1 -0
- package/dist/esm/common/config.js +33 -21
- package/dist/esm/common/config.js.map +1 -1
- package/dist/esm/common/observables.js +5 -5
- package/dist/esm/common/observables.js.map +1 -1
- package/dist/esm/common/operators.js +7 -0
- package/dist/esm/common/operators.js.map +1 -0
- package/dist/esm/common/strategies.js +38 -0
- package/dist/esm/common/strategies.js.map +1 -0
- package/dist/esm/common/utils.js +1 -1
- package/dist/esm/common/utils.js.map +1 -1
- package/dist/esm/constants/config.const.js +17 -0
- package/dist/esm/constants/config.const.js.map +1 -0
- package/dist/esm/constants/poll.const.js +9 -0
- package/dist/esm/constants/poll.const.js.map +1 -0
- package/dist/esm/constants/strategies.const.js +8 -0
- package/dist/esm/constants/strategies.const.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/poll.js +29 -27
- package/dist/esm/poll.js.map +1 -1
- package/dist/esm/types/config.type.js +2 -0
- package/dist/esm/types/config.type.js.map +1 -0
- package/dist/esm/types/poll.type.js +2 -0
- package/dist/esm/types/poll.type.js.map +1 -0
- package/dist/esm/types/strategies.type.js +2 -0
- package/dist/esm/types/strategies.type.js.map +1 -0
- package/dist/esm/types/utils.type.js +2 -0
- package/dist/esm/types/utils.type.js.map +1 -0
- package/dist/types/common/config.d.ts +3 -30
- package/dist/types/common/config.d.ts.map +1 -1
- package/dist/types/common/observables.d.ts +2 -2
- package/dist/types/common/observables.d.ts.map +1 -1
- package/dist/types/common/operators.d.ts +3 -0
- package/dist/types/common/operators.d.ts.map +1 -0
- package/dist/types/common/strategies.d.ts +5 -0
- package/dist/types/common/strategies.d.ts.map +1 -0
- package/dist/types/common/utils.d.ts +4 -6
- package/dist/types/common/utils.d.ts.map +1 -1
- package/dist/types/constants/config.const.d.ts +15 -0
- package/dist/types/constants/config.const.d.ts.map +1 -0
- package/dist/types/constants/poll.const.d.ts +9 -0
- package/dist/types/constants/poll.const.d.ts.map +1 -0
- package/dist/types/constants/strategies.const.d.ts +8 -0
- package/dist/types/constants/strategies.const.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/poll.d.ts +7 -7
- package/dist/types/poll.d.ts.map +1 -1
- package/dist/types/types/config.type.d.ts +58 -0
- package/dist/types/types/config.type.d.ts.map +1 -0
- package/dist/types/types/poll.type.d.ts +12 -0
- package/dist/types/types/poll.type.d.ts.map +1 -0
- package/dist/types/types/strategies.type.d.ts +6 -0
- package/dist/types/types/strategies.type.d.ts.map +1 -0
- package/dist/types/types/utils.type.d.ts +3 -0
- package/dist/types/types/utils.type.d.ts.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
# RxJS Polling Operator
|
|
2
2
|
|
|
3
|
-
<a href="https://www.npmjs.com/package/rxjs-poll
|
|
4
|
-
<a href="https://bundlephobia.com/package/rxjs-poll@
|
|
5
|
-
<a href="https://github.com/mmustra/rxjs-poll/tree/
|
|
6
|
-
<a href="https://github.com/mmustra/rxjs-poll/issues
|
|
7
|
-
<a href="https://github.com/mmustra/rxjs-poll/commits/
|
|
3
|
+
<a href="https://www.npmjs.com/package/rxjs-poll" target="_blank" rel="noopener noreferrer nofollow"><img alt="NPM Version" src="https://img.shields.io/npm/v/rxjs-poll"></a>
|
|
4
|
+
<a href="https://bundlephobia.com/package/rxjs-poll@latest" target="_blank" rel="noopener noreferrer nofollow"><img alt="NPM Bundle Size" src="https://img.shields.io/bundlephobia/minzip/rxjs-poll?label=gzip"></a>
|
|
5
|
+
<a href="https://github.com/mmustra/rxjs-poll/tree/main/tests" target="_blank" rel="noopener noreferrer nofollow"><img alt="Codecov" src="https://img.shields.io/codecov/c/gh/mmustra/rxjs-poll?token=H9R97BLFQI"></a>
|
|
6
|
+
<a href="https://github.com/mmustra/rxjs-poll/issues" target="_blank" rel="noopener noreferrer nofollow"><img alt="GitHub Issues or Pull Requests" src="https://img.shields.io/github/issues/mmustra/rxjs-poll"></a>
|
|
7
|
+
<a href="https://github.com/mmustra/rxjs-poll/commits/main" target="_blank" rel="noopener noreferrer nofollow"><img alt="GitHub last commit (branch)" src="https://img.shields.io/github/last-commit/mmustra/rxjs-poll/main?label=activity"></a>
|
|
8
8
|
|
|
9
|
-
A flexible RxJS operator library that enables polling on any completed observable source with advanced
|
|
9
|
+
A flexible RxJS operator library that enables polling on any completed observable source with advanced timing and retry strategies.
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 🚀 Features
|
|
12
12
|
|
|
13
13
|
- **Two polling modes**: `repeat` and `interval` to suit different use cases
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
18
|
-
- **Input validation**: Guards against unexpected configuration values
|
|
14
|
+
- **Timing strategies**: `constant`, `linear`, `exponential`, `random` and `dynamic` (custom logic)
|
|
15
|
+
- **Auto-pause**: Automatically pause/resume polling based on page visibility (browser only)
|
|
16
|
+
- **Flexible retries**: Control retry attempts with consecutive or total counting modes
|
|
17
|
+
- **Input validation**: Guards against unexpected input time values
|
|
19
18
|
- **Cross-platform**: Works in both browser and Node.js environments
|
|
20
19
|
- **Modern compatibility**: Compatible with RxJS v7+
|
|
21
20
|
- **Multiple module formats**: Supports CommonJS (CJS) and ES Modules (ESM)
|
|
@@ -26,15 +25,17 @@ A flexible RxJS operator library that enables polling on any completed observabl
|
|
|
26
25
|
npm install rxjs-poll --save
|
|
27
26
|
```
|
|
28
27
|
|
|
29
|
-
##
|
|
28
|
+
## 🎯 Purpose & Process
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
Polling is essential when you need to repeatedly check for updates from sources that don't provide real-time notifications. Common scenarios include monitoring HTTP API endpoints for status changes, watching DOM elements for state updates, or periodically sampling data streams.
|
|
31
|
+
|
|
32
|
+
This operator cleanly separates polling concerns from your core observable logic. It waits for your source observable to complete per polling type, then schedules the next poll based on your configuration. The architecture distinguishes between normal polling delays and error retry scenarios, giving you precise control over both success and failure timing strategies.
|
|
32
33
|
|
|
33
34
|
## 📚 Usage Examples
|
|
34
35
|
|
|
35
36
|
### Default Configuration
|
|
36
37
|
|
|
37
|
-
[▶️ Live Demo](https://stackblitz.com/edit/rxjs-
|
|
38
|
+
[▶️ Live Demo](https://stackblitz.com/edit/rxjs-xdf2x4vx?devToolsHeight=100&file=index.ts)
|
|
38
39
|
|
|
39
40
|
Plug and play - just add the operator to your pipe and start polling.
|
|
40
41
|
|
|
@@ -44,17 +45,17 @@ import { takeWhile } from 'rxjs';
|
|
|
44
45
|
|
|
45
46
|
request$
|
|
46
47
|
.pipe(
|
|
47
|
-
poll(), //
|
|
48
|
+
poll(), // Poll every second with exponential retry strategy (7s max)
|
|
48
49
|
takeWhile(({ length }) => length < 200, true)
|
|
49
50
|
)
|
|
50
51
|
.subscribe({ next: console.log });
|
|
51
52
|
```
|
|
52
53
|
|
|
53
|
-
###
|
|
54
|
+
### Strategy-Based Configuration
|
|
54
55
|
|
|
55
|
-
[▶️ Live Demo](https://stackblitz.com/edit/rxjs-
|
|
56
|
+
[▶️ Live Demo](https://stackblitz.com/edit/rxjs-vrefdzj1?devToolsHeight=100&file=index.ts)
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
Use built-in strategies for easy timing control.
|
|
58
59
|
|
|
59
60
|
```typescript
|
|
60
61
|
import { poll } from 'rxjs-poll';
|
|
@@ -64,19 +65,24 @@ request$
|
|
|
64
65
|
.pipe(
|
|
65
66
|
poll({
|
|
66
67
|
type: 'interval', // Drops uncompleted source after delay
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
delay: {
|
|
69
|
+
strategy: 'random',
|
|
70
|
+
time: [1000, 3000], // Random delay between 1 and 3 seconds
|
|
71
|
+
},
|
|
72
|
+
retry: {
|
|
73
|
+
limit: Infinity, // Will never throw
|
|
74
|
+
},
|
|
69
75
|
}),
|
|
70
76
|
takeWhile(({ length }) => length < 200, true)
|
|
71
77
|
)
|
|
72
78
|
.subscribe({ next: console.log });
|
|
73
79
|
```
|
|
74
80
|
|
|
75
|
-
### Advanced Strategies
|
|
81
|
+
### Advanced Dynamic Strategies
|
|
76
82
|
|
|
77
|
-
[▶️ Live Demo](https://stackblitz.com/edit/rxjs-
|
|
83
|
+
[▶️ Live Demo](https://stackblitz.com/edit/rxjs-6fmgfij8?devtoolsheight=100&file=index.ts)
|
|
78
84
|
|
|
79
|
-
Implement complex polling strategies with dynamic
|
|
85
|
+
Implement complex polling strategies with dynamic timing based on poll state.
|
|
80
86
|
|
|
81
87
|
```typescript
|
|
82
88
|
import { poll } from 'rxjs-poll';
|
|
@@ -85,18 +91,21 @@ import { takeWhile } from 'rxjs';
|
|
|
85
91
|
request$
|
|
86
92
|
.pipe(
|
|
87
93
|
poll({
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
94
|
+
delay: {
|
|
95
|
+
/** Adaptive polling based on response data */
|
|
96
|
+
strategy: 'dynamic',
|
|
97
|
+
time: ({ value }) => (value?.length < 100 ? 500 : 1000),
|
|
98
|
+
},
|
|
99
|
+
retry: {
|
|
100
|
+
/** Custom exponential backoff with jitter */
|
|
101
|
+
strategy: 'dynamic',
|
|
102
|
+
time: ({ consecutiveRetryCount }) => {
|
|
103
|
+
const exponential = Math.pow(2, consecutiveRetryCount - 1) * 1000;
|
|
104
|
+
const jitter = Math.random() * 200;
|
|
105
|
+
|
|
106
|
+
return exponential + jitter;
|
|
107
|
+
},
|
|
108
|
+
limit: 6,
|
|
100
109
|
},
|
|
101
110
|
}),
|
|
102
111
|
takeWhile(({ length }) => length < 200, true)
|
|
@@ -123,69 +132,220 @@ interface PollConfig {
|
|
|
123
132
|
type?: 'repeat' | 'interval';
|
|
124
133
|
|
|
125
134
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* Can be:
|
|
129
|
-
* - A static number (e.g., 1000 for 1 second)
|
|
130
|
-
* - An array with [min, max] for random delay
|
|
131
|
-
* - A function returning either of the above based on state
|
|
132
|
-
* @default 1000
|
|
135
|
+
* Configuration for polling delays (between successful operations)
|
|
133
136
|
*/
|
|
134
|
-
delay?:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
137
|
+
delay?: {
|
|
138
|
+
/**
|
|
139
|
+
* Strategy mode for delay timing. Built-in strategies (except dynamic)
|
|
140
|
+
* calculate time per state's 'pollCount'.
|
|
141
|
+
* @default 'constant'
|
|
142
|
+
*/
|
|
143
|
+
strategy: 'constant' | 'random' | 'dynamic';
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Time (ms) depending on strategy:
|
|
147
|
+
* - constant: number
|
|
148
|
+
* - random: [min, max]
|
|
149
|
+
* - dynamic: (state) => number | [min, max]
|
|
150
|
+
* @default 1000
|
|
151
|
+
*/
|
|
152
|
+
time:
|
|
153
|
+
| number
|
|
154
|
+
| [min: number, max: number]
|
|
155
|
+
| (state: PollState) => number | [min: number, max: number];
|
|
156
|
+
};
|
|
138
157
|
|
|
139
158
|
/**
|
|
140
|
-
*
|
|
141
|
-
* Use Infinity to keep retrying indefinitely
|
|
142
|
-
* @default 3
|
|
159
|
+
* Configuration for retry behavior (on errors)
|
|
143
160
|
*/
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
161
|
+
retry?: {
|
|
162
|
+
/**
|
|
163
|
+
* Strategy mode for retry timing. Built-in strategies (except dynamic)
|
|
164
|
+
* calculate time per state:
|
|
165
|
+
* - consecutiveOnly: true → uses 'consecutiveRetryCount'
|
|
166
|
+
* - consecutiveOnly: false → uses 'retryCount'
|
|
167
|
+
* @default 'exponential'
|
|
168
|
+
*/
|
|
169
|
+
mode: 'constant' | 'linear' | 'exponential' | 'random' | 'dynamic';
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Time (ms) depending on strategy:
|
|
173
|
+
* - constant: number
|
|
174
|
+
* - linear: number
|
|
175
|
+
* - exponential: number
|
|
176
|
+
* - random: [min, max]
|
|
177
|
+
* - dynamic: (state) => number | [min, max]
|
|
178
|
+
* @default 1000
|
|
179
|
+
*/
|
|
180
|
+
time:
|
|
181
|
+
| number
|
|
182
|
+
| [min: number, max: number]
|
|
183
|
+
| (state: PollState) => number | [min: number, max: number];
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Maximum number of retry attempts before throwing an error
|
|
187
|
+
* Use Infinity to keep retrying indefinitely
|
|
188
|
+
* @default 3
|
|
189
|
+
*/
|
|
190
|
+
limit?: number;
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Controls how retries are counted:
|
|
194
|
+
* - true: Only consecutive errors count toward retry limit
|
|
195
|
+
* (resets counter on success)
|
|
196
|
+
* - false: All errors count toward retry limit regardless of
|
|
197
|
+
* successful responses between them
|
|
198
|
+
* @default true
|
|
199
|
+
*/
|
|
200
|
+
consecutiveOnly?: boolean;
|
|
201
|
+
};
|
|
155
202
|
|
|
156
203
|
/**
|
|
157
204
|
* [Browser only] Controls polling behavior when page isn't visible
|
|
158
|
-
* - true:
|
|
159
|
-
* - false:
|
|
160
|
-
* @default
|
|
205
|
+
* - true: Pause polling when tab isn't active, and resume on active
|
|
206
|
+
* - false: Poll even when tab isn't focused
|
|
207
|
+
* @default true
|
|
161
208
|
*/
|
|
162
|
-
|
|
209
|
+
pauseWhenHidden?: boolean;
|
|
163
210
|
}
|
|
164
211
|
```
|
|
165
212
|
|
|
166
213
|
### PollState
|
|
167
214
|
|
|
168
|
-
State object passed to
|
|
215
|
+
State object passed to delay/retry time producer functions:
|
|
169
216
|
|
|
170
217
|
```typescript
|
|
171
218
|
interface PollState<T> {
|
|
172
|
-
/**
|
|
173
|
-
|
|
219
|
+
/** Total number of successful poll operations */
|
|
220
|
+
pollCount: number;
|
|
174
221
|
|
|
175
222
|
/** Total number of retry attempts */
|
|
176
|
-
|
|
223
|
+
retryCount: number;
|
|
177
224
|
|
|
178
|
-
/**
|
|
179
|
-
|
|
225
|
+
/** Current number of consecutive retry attempts */
|
|
226
|
+
consecutiveRetryCount: number;
|
|
180
227
|
|
|
181
|
-
/** Latest value
|
|
182
|
-
|
|
228
|
+
/** Latest value from the source. For 'interval' polling mode,
|
|
229
|
+
* first emission is undefined. */
|
|
230
|
+
value: T | undefined;
|
|
183
231
|
|
|
184
|
-
/**
|
|
185
|
-
error: any |
|
|
232
|
+
/** Latest error when retrying */
|
|
233
|
+
error: any | undefined;
|
|
186
234
|
}
|
|
187
235
|
|
|
188
|
-
|
|
236
|
+
/** Note: pollCount + retryCount = total attempts */
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## 🚨 Breaking Changes
|
|
240
|
+
|
|
241
|
+
**Version 2** introduces an API focused on strategy-based configuration. The new architecture separates concerns between normal polling behavior and error handling scenarios, with type safety and clear configuration intent. This makes it easier to choose timings from common patterns.
|
|
242
|
+
|
|
243
|
+
### Changes
|
|
244
|
+
|
|
245
|
+
#### PollConfig
|
|
246
|
+
|
|
247
|
+
- **delay/retry**: Added configuration objects for polling and retry
|
|
248
|
+
- **retries**: Renamed and moved to `retry.limit`
|
|
249
|
+
- **isConsecutiveRule**: Renamed and moved to `retry.consecutiveOnly`
|
|
250
|
+
- **isBackgroundMode**: Renamed to `pauseWhenHidden` and default behavior inverted (`false` → `true`)
|
|
251
|
+
|
|
252
|
+
#### PollState
|
|
253
|
+
|
|
254
|
+
- **polls**: Renamed to `pollCount`
|
|
255
|
+
- **retries**: Renamed to `retryCount`
|
|
256
|
+
- **consecutiveRetries**: Renamed to `consecutiveRetryCount`
|
|
257
|
+
- **value**: Changed to type `T | undefined`
|
|
258
|
+
- **error**: Changed to type `any | undefined`
|
|
259
|
+
|
|
260
|
+
### Migration Examples
|
|
261
|
+
|
|
262
|
+
### Basic
|
|
263
|
+
|
|
264
|
+
**Before (v1.x)**
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
poll({
|
|
268
|
+
type: 'interval',
|
|
269
|
+
delay: 2000, // Same timing for delay and retry
|
|
270
|
+
retries: 5,
|
|
271
|
+
isConsecutiveRule: false,
|
|
272
|
+
});
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**After (v2.x)**
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
poll({
|
|
279
|
+
type: 'interval',
|
|
280
|
+
delay: {
|
|
281
|
+
strategy: 'constant',
|
|
282
|
+
time: 2000,
|
|
283
|
+
},
|
|
284
|
+
retry: {
|
|
285
|
+
strategy: 'constant',
|
|
286
|
+
time: 2000,
|
|
287
|
+
limit: 5,
|
|
288
|
+
consecutiveOnly: false,
|
|
289
|
+
},
|
|
290
|
+
});
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
or if you only care about delay timing:
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
poll({
|
|
297
|
+
type: 'interval',
|
|
298
|
+
delay: {
|
|
299
|
+
strategy: 'constant',
|
|
300
|
+
time: 2000,
|
|
301
|
+
},
|
|
302
|
+
retry: {
|
|
303
|
+
limit: 5,
|
|
304
|
+
consecutiveOnly: false,
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Dynamic
|
|
310
|
+
|
|
311
|
+
**Before (v1.x)**
|
|
312
|
+
|
|
313
|
+
```typescript
|
|
314
|
+
poll({
|
|
315
|
+
/** 'error' used as a flag to determine delay/retry timing */
|
|
316
|
+
delay: ({ error, consecutiveRetries }) =>
|
|
317
|
+
error ? consecutiveRetries * 1000 : 2000,
|
|
318
|
+
});
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**After (v2.x)**
|
|
322
|
+
|
|
323
|
+
```typescript
|
|
324
|
+
poll({
|
|
325
|
+
delay: {
|
|
326
|
+
strategy: 'constant',
|
|
327
|
+
time: 2000,
|
|
328
|
+
},
|
|
329
|
+
retry: {
|
|
330
|
+
strategy: 'dynamic',
|
|
331
|
+
time: ({ consecutiveRetryCount }) => consecutiveRetryCount * 1000,
|
|
332
|
+
},
|
|
333
|
+
});
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
or with built-in strategy:
|
|
337
|
+
|
|
338
|
+
```typescript
|
|
339
|
+
poll({
|
|
340
|
+
delay: {
|
|
341
|
+
strategy: 'constant',
|
|
342
|
+
time: 2000,
|
|
343
|
+
},
|
|
344
|
+
retry: {
|
|
345
|
+
strategy: 'linear',
|
|
346
|
+
time: 1000,
|
|
347
|
+
},
|
|
348
|
+
});
|
|
189
349
|
```
|
|
190
350
|
|
|
191
351
|
## 🙌 Credits
|
|
@@ -1,34 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
14
|
+
exports.extendConfig = extendConfig;
|
|
15
|
+
var config_const_1 = require("../constants/config.const");
|
|
16
|
+
var strategies_1 = require("./strategies");
|
|
5
17
|
var utils_1 = require("./utils");
|
|
6
|
-
function
|
|
7
|
-
var
|
|
8
|
-
return {
|
|
9
|
-
type: (_a = config === null || config === void 0 ? void 0 : config.type) !== null && _a !== void 0 ? _a : exports.controlConfig.type,
|
|
10
|
-
getDelay: (0, utils_1.isFunction)(config === null || config === void 0 ? void 0 : config.delay) ? delayProducer(config.delay) : defaultProducer(config === null || config === void 0 ? void 0 : config.delay),
|
|
11
|
-
retries: (0, utils_1.normalizeNumber)(config === null || config === void 0 ? void 0 : config.retries, exports.controlConfig.retries, false),
|
|
12
|
-
isConsecutiveRule: (_b = config === null || config === void 0 ? void 0 : config.isConsecutiveRule) !== null && _b !== void 0 ? _b : true,
|
|
13
|
-
isBackgroundMode: Boolean(config === null || config === void 0 ? void 0 : config.isBackgroundMode),
|
|
14
|
-
};
|
|
18
|
+
function extendConfig(config) {
|
|
19
|
+
var normalizedConfig = normalizeConfig(config);
|
|
20
|
+
return __assign(__assign({}, normalizedConfig), { getDelayTime: getTimeProducer('delay', normalizedConfig), getRetryTime: getTimeProducer('retry', normalizedConfig) });
|
|
15
21
|
}
|
|
16
|
-
function
|
|
22
|
+
function getTimeProducer(mode, config) {
|
|
23
|
+
var defaultTime = config_const_1.controlConfig[mode].time;
|
|
24
|
+
var timeProducer = (0, strategies_1.getStrategyTimeProducer)(mode, config);
|
|
17
25
|
return function (state) {
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
return (0, utils_1.
|
|
26
|
+
var producedTime = timeProducer(__assign({}, state));
|
|
27
|
+
var normalizedTime = (0, utils_1.normalizeNumber)(producedTime, defaultTime);
|
|
28
|
+
return (0, utils_1.pickNumber)(normalizedTime);
|
|
21
29
|
};
|
|
22
30
|
}
|
|
23
|
-
function
|
|
24
|
-
var
|
|
25
|
-
return
|
|
31
|
+
function normalizeConfig(config) {
|
|
32
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
33
|
+
return {
|
|
34
|
+
type: (_a = config === null || config === void 0 ? void 0 : config.type) !== null && _a !== void 0 ? _a : config_const_1.controlConfig.type,
|
|
35
|
+
delay: {
|
|
36
|
+
strategy: (_c = (_b = config === null || config === void 0 ? void 0 : config.delay) === null || _b === void 0 ? void 0 : _b.strategy) !== null && _c !== void 0 ? _c : config_const_1.controlConfig.delay.strategy,
|
|
37
|
+
time: (0, utils_1.isFunction)((_d = config === null || config === void 0 ? void 0 : config.delay) === null || _d === void 0 ? void 0 : _d.time)
|
|
38
|
+
? config.delay.time
|
|
39
|
+
: (0, utils_1.normalizeNumber)((_e = config === null || config === void 0 ? void 0 : config.delay) === null || _e === void 0 ? void 0 : _e.time, config_const_1.controlConfig.delay.time),
|
|
40
|
+
},
|
|
41
|
+
retry: {
|
|
42
|
+
strategy: (_g = (_f = config === null || config === void 0 ? void 0 : config.retry) === null || _f === void 0 ? void 0 : _f.strategy) !== null && _g !== void 0 ? _g : config_const_1.controlConfig.retry.strategy,
|
|
43
|
+
time: (0, utils_1.isFunction)((_h = config === null || config === void 0 ? void 0 : config.retry) === null || _h === void 0 ? void 0 : _h.time)
|
|
44
|
+
? config.retry.time
|
|
45
|
+
: (0, utils_1.normalizeNumber)((_j = config === null || config === void 0 ? void 0 : config.retry) === null || _j === void 0 ? void 0 : _j.time, config_const_1.controlConfig.retry.time),
|
|
46
|
+
limit: (0, utils_1.normalizeNumber)((_k = config === null || config === void 0 ? void 0 : config.retry) === null || _k === void 0 ? void 0 : _k.limit, config_const_1.controlConfig.retry.limit, false),
|
|
47
|
+
consecutiveOnly: (_m = (_l = config === null || config === void 0 ? void 0 : config.retry) === null || _l === void 0 ? void 0 : _l.consecutiveOnly) !== null && _m !== void 0 ? _m : config_const_1.controlConfig.retry.consecutiveOnly,
|
|
48
|
+
},
|
|
49
|
+
pauseWhenHidden: (_o = config === null || config === void 0 ? void 0 : config.pauseWhenHidden) !== null && _o !== void 0 ? _o : config_const_1.controlConfig.pauseWhenHidden,
|
|
50
|
+
};
|
|
26
51
|
}
|
|
27
|
-
exports.controlConfig = {
|
|
28
|
-
type: 'repeat',
|
|
29
|
-
delay: 1000,
|
|
30
|
-
retries: 3,
|
|
31
|
-
isConsecutiveRule: true,
|
|
32
|
-
isBackgroundMode: false,
|
|
33
|
-
};
|
|
34
52
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAOA,oCAQC;AAfD,0DAA0D;AAI1D,2CAAuD;AACvD,iCAAkE;AAElE,SAAgB,YAAY,CAAI,MAA4B;IAC1D,IAAM,gBAAgB,GAA4B,eAAe,CAAC,MAAM,CAAC,CAAC;IAE1E,6BACK,gBAAgB,KACnB,YAAY,EAAE,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,EACxD,YAAY,EAAE,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,IACxD;AACJ,CAAC;AAED,SAAS,eAAe,CAAI,IAAc,EAAE,MAA+B;IACzE,IAAM,WAAW,GAAG,4BAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAC7C,IAAM,YAAY,GAAG,IAAA,oCAAuB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE3D,OAAO,UAAC,KAAK;QACX,IAAM,YAAY,GAAG,YAAY,cAAM,KAAK,EAAG,CAAC;QAChD,IAAM,cAAc,GAAG,IAAA,uBAAe,EAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAElE,OAAO,IAAA,kBAAU,EAAC,cAAc,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAI,MAA2B;;IACrD,OAAO;QACL,IAAI,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,mCAAI,4BAAa,CAAC,IAAI;QACxC,KAAK,EAAE;YACL,QAAQ,EAAE,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,QAAQ,mCAAI,4BAAa,CAAC,KAAK,CAAC,QAAQ;YACjE,IAAI,EAAE,IAAA,kBAAU,EAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,IAAI,CAAC;gBACnC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;gBACnB,CAAC,CAAC,IAAA,uBAAe,EAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,IAAI,EAAE,4BAAa,CAAC,KAAK,CAAC,IAAI,CAAC;SACnE;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,QAAQ,mCAAI,4BAAa,CAAC,KAAK,CAAC,QAAQ;YACjE,IAAI,EAAE,IAAA,kBAAU,EAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,IAAI,CAAC;gBACnC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;gBACnB,CAAC,CAAC,IAAA,uBAAe,EAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,IAAI,EAAE,4BAAa,CAAC,KAAK,CAAC,IAAI,CAAC;YAClE,KAAK,EAAE,IAAA,uBAAe,EAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,KAAK,EAAE,4BAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YAC9E,eAAe,EAAE,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,eAAe,mCAAI,4BAAa,CAAC,KAAK,CAAC,eAAe;SACvF;QACD,eAAe,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,mCAAI,4BAAa,CAAC,eAAe;KAC1E,CAAC;AACJ,CAAC"}
|
|
@@ -5,23 +5,23 @@ exports.getPoller$ = getPoller$;
|
|
|
5
5
|
var rxjs_1 = require("rxjs");
|
|
6
6
|
var utils_1 = require("./utils");
|
|
7
7
|
exports.visibilityState$ = pageVisibility$().pipe((0, rxjs_1.shareReplay)({ bufferSize: 1, refCount: true }));
|
|
8
|
-
function getPoller$(type, source$,
|
|
8
|
+
function getPoller$(type, source$, getTime) {
|
|
9
9
|
var lastValue;
|
|
10
10
|
var completed$ = source$.pipe((0, rxjs_1.takeLast)(1), (0, rxjs_1.tap)(function (value) {
|
|
11
11
|
lastValue = value;
|
|
12
12
|
}));
|
|
13
13
|
return type === 'repeat'
|
|
14
14
|
? completed$.pipe((0, rxjs_1.repeat)({
|
|
15
|
-
delay: function () { return (0, rxjs_1.timer)(
|
|
15
|
+
delay: function () { return (0, rxjs_1.timer)(getTime(lastValue)); },
|
|
16
16
|
}))
|
|
17
|
-
: dynamicInterval$(function () { return
|
|
17
|
+
: dynamicInterval$(function () { return getTime(lastValue); }).pipe((0, rxjs_1.switchMap)(function () { return completed$; }));
|
|
18
18
|
}
|
|
19
19
|
function pageVisibility$() {
|
|
20
20
|
return (0, utils_1.isBrowser)() ? (0, rxjs_1.fromEvent)(document, 'visibilitychange').pipe((0, rxjs_1.startWith)(null), (0, rxjs_1.map)(utils_1.isDocumentVisible)) : (0, rxjs_1.of)(true);
|
|
21
21
|
}
|
|
22
|
-
function dynamicInterval$(
|
|
22
|
+
function dynamicInterval$(getTime) {
|
|
23
23
|
return (0, rxjs_1.of)(null).pipe((0, rxjs_1.repeat)({
|
|
24
|
-
delay: function () { return (0, rxjs_1.timer)(
|
|
24
|
+
delay: function () { return (0, rxjs_1.timer)(getTime()); },
|
|
25
25
|
}));
|
|
26
26
|
}
|
|
27
27
|
//# sourceMappingURL=observables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observables.js","sourceRoot":"","sources":["../../../src/common/observables.ts"],"names":[],"mappings":";;;AAOA,gCAgBC;AAvBD,6BAAuH;AAGvH,iCAAuD;AAE1C,QAAA,gBAAgB,GAAG,eAAe,EAAE,CAAC,IAAI,CAAC,IAAA,kBAAW,EAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEvG,SAAgB,UAAU,CAAI,IAAc,EAAE,OAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"observables.js","sourceRoot":"","sources":["../../../src/common/observables.ts"],"names":[],"mappings":";;;AAOA,gCAgBC;AAvBD,6BAAuH;AAGvH,iCAAuD;AAE1C,QAAA,gBAAgB,GAAG,eAAe,EAAE,CAAC,IAAI,CAAC,IAAA,kBAAW,EAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEvG,SAAgB,UAAU,CAAI,IAAc,EAAE,OAAsB,EAAE,OAA6B;IACjG,IAAI,SAAY,CAAC;IACjB,IAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,IAAA,eAAQ,EAAC,CAAC,CAAC,EACX,IAAA,UAAG,EAAC,UAAC,KAAK;QACR,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,UAAU,CAAC,IAAI,CACb,IAAA,aAAM,EAAC;YACL,KAAK,EAAE,cAAM,OAAA,IAAA,YAAK,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAzB,CAAyB;SACvC,CAAC,CACH;QACH,CAAC,CAAC,gBAAgB,CAAC,cAAM,OAAA,OAAO,CAAC,SAAS,CAAC,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAA,gBAAS,EAAC,cAAM,OAAA,UAAU,EAAV,CAAU,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,IAAA,iBAAS,GAAE,CAAC,CAAC,CAAC,IAAA,gBAAS,EAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAA,gBAAS,EAAC,IAAI,CAAC,EAAE,IAAA,UAAG,EAAC,yBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAqB;IAC7C,OAAO,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC,IAAI,CAClB,IAAA,aAAM,EAAC;QACL,KAAK,EAAE,cAAM,OAAA,IAAA,YAAK,EAAC,OAAO,EAAE,CAAC,EAAhB,CAAgB;KAC9B,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retryPoll = retryPoll;
|
|
4
|
+
var rxjs_1 = require("rxjs");
|
|
5
|
+
function retryPoll(isLimit, getTime, resetError) {
|
|
6
|
+
return function (source) {
|
|
7
|
+
return source.pipe((0, rxjs_1.retry)({
|
|
8
|
+
delay: function (error) { return (isLimit() ? (0, rxjs_1.throwError)(function () { return error; }) : (0, rxjs_1.timer)(getTime(error))); },
|
|
9
|
+
}), (0, rxjs_1.tap)(function () { return resetError(); }));
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=operators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":";;AAEA,8BAYC;AAdD,6BAA+E;AAE/E,SAAgB,SAAS,CACvB,OAAsB,EACtB,OAA+B,EAC/B,UAAsB;IAEtB,OAAO,UAAC,MAAM;QACZ,OAAA,MAAM,CAAC,IAAI,CACT,IAAA,YAAK,EAAC;YACJ,KAAK,EAAE,UAAC,KAAK,IAAK,OAAA,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAA,iBAAU,EAAC,cAAM,OAAA,KAAK,EAAL,CAAK,CAAC,CAAC,CAAC,CAAC,IAAA,YAAK,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAA7D,CAA6D;SAChF,CAAC,EACF,IAAA,UAAG,EAAC,cAAM,OAAA,UAAU,EAAE,EAAZ,CAAY,CAAC,CACxB;IALD,CAKC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getStrategyTimeProducer = getStrategyTimeProducer;
|
|
4
|
+
var utils_1 = require("./utils");
|
|
5
|
+
function getStrategyTimeProducer(mode, config) {
|
|
6
|
+
var _a = config[mode], strategy = _a.strategy, time = _a.time;
|
|
7
|
+
var isDelayMode = mode === 'delay';
|
|
8
|
+
var isConsecutive = config.retry.consecutiveOnly;
|
|
9
|
+
var timeProducer;
|
|
10
|
+
var attemptKey;
|
|
11
|
+
if (isDelayMode) {
|
|
12
|
+
attemptKey = 'pollCount';
|
|
13
|
+
}
|
|
14
|
+
else if (isConsecutive) {
|
|
15
|
+
attemptKey = 'consecutiveRetryCount';
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
attemptKey = 'retryCount';
|
|
19
|
+
}
|
|
20
|
+
switch (strategy) {
|
|
21
|
+
case 'constant':
|
|
22
|
+
timeProducer = function () { return time; };
|
|
23
|
+
break;
|
|
24
|
+
case 'linear':
|
|
25
|
+
timeProducer = function (state) { return state[attemptKey] * time; };
|
|
26
|
+
break;
|
|
27
|
+
case 'exponential':
|
|
28
|
+
timeProducer = function (state) { return Math.pow(2, state[attemptKey] - 1) * time; };
|
|
29
|
+
break;
|
|
30
|
+
case 'random':
|
|
31
|
+
timeProducer = function () { return (0, utils_1.randomNumber)(time[0], time[1]); };
|
|
32
|
+
break;
|
|
33
|
+
case 'dynamic':
|
|
34
|
+
timeProducer = function (state) { return time(state); };
|
|
35
|
+
break;
|
|
36
|
+
default:
|
|
37
|
+
throw new Error('rxjs-poll: Unknown strategy!');
|
|
38
|
+
}
|
|
39
|
+
return timeProducer;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=strategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategies.js","sourceRoot":"","sources":["../../../src/common/strategies.ts"],"names":[],"mappings":";;AAMA,0DAoCC;AAtCD,iCAAuC;AAEvC,SAAgB,uBAAuB,CAAI,IAAc,EAAE,MAA+B;IAClF,IAAA,KAAqB,MAAM,CAAC,IAAI,CAAC,EAA/B,QAAQ,cAAA,EAAE,IAAI,UAAiB,CAAC;IACxC,IAAM,WAAW,GAAG,IAAI,KAAK,OAAO,CAAC;IACrC,IAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;IACnD,IAAI,YAAgC,CAAC;IACrC,IAAI,UAAyB,CAAC;IAE9B,IAAI,WAAW,EAAE,CAAC;QAChB,UAAU,GAAG,WAAW,CAAC;IAC3B,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,UAAU,GAAG,uBAAuB,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,YAAY,CAAC;IAC5B,CAAC;IAED,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,YAAY,GAAG,cAAM,OAAA,IAAc,EAAd,CAAc,CAAC;YACpC,MAAM;QACR,KAAK,QAAQ;YACX,YAAY,GAAG,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,CAAC,GAAI,IAAe,EAApC,CAAoC,CAAC;YAC/D,MAAM;QACR,KAAK,aAAa;YAChB,YAAY,GAAG,UAAC,KAAK,IAAK,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAI,IAAe,EAArD,CAAqD,CAAC;YAChF,MAAM;QACR,KAAK,QAAQ;YACX,YAAY,GAAG,cAAM,OAAA,IAAA,oBAAY,EAAE,IAAe,CAAC,CAAC,CAAC,EAAG,IAAe,CAAC,CAAC,CAAC,CAAC,EAAtD,CAAsD,CAAC;YAC5E,MAAM;QACR,KAAK,SAAS;YACZ,YAAY,GAAG,UAAC,KAAmB,IAAK,OAAC,IAA2B,CAAC,KAAK,CAAC,EAAnC,CAAmC,CAAC;YAC5E,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
package/dist/cjs/common/utils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.normalizeNumber = normalizeNumber;
|
|
4
|
-
exports.
|
|
4
|
+
exports.pickNumber = pickNumber;
|
|
5
5
|
exports.randomNumber = randomNumber;
|
|
6
6
|
exports.isFunction = isFunction;
|
|
7
7
|
exports.isBrowser = isBrowser;
|
|
@@ -18,7 +18,7 @@ function normalizeNumber(value, defaultValue, isFinite) {
|
|
|
18
18
|
}
|
|
19
19
|
return Math.abs(normalizedValue);
|
|
20
20
|
}
|
|
21
|
-
function
|
|
21
|
+
function pickNumber(value) {
|
|
22
22
|
return Array.isArray(value) ? randomNumber(value[0], value[1]) : value;
|
|
23
23
|
}
|
|
24
24
|
function randomNumber(min, max) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/common/utils.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/common/utils.ts"],"names":[],"mappings":";;AASA,0CAYC;AAED,gCAEC;AAED,oCAEC;AAED,gCAEC;AAED,8BAEC;AAED,8CAEC;AAhCD,SAAgB,eAAe,CAAC,KAA4B,EAAE,YAAgB,EAAE,QAAe;IAAjC,6BAAA,EAAA,gBAAgB;IAAE,yBAAA,EAAA,eAAe;IAC7F,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,EAA1C,CAA0C,CAAW,CAAC;IAChF,CAAC;IAED,IAAI,eAAe,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,YAAY,CAAC;IAE5C,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QACrF,eAAe,GAAG,YAAY,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,UAAU,CAAC,KAAsB;IAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACzE,CAAC;AAED,SAAgB,YAAY,CAAC,GAAW,EAAE,GAAW;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3D,CAAC;AAED,SAAgB,UAAU,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;AACvG,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1B,CAAC"}
|