@terascope/core-utils 2.0.0-dev.10
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/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/src/arrays.d.ts +59 -0
- package/dist/src/arrays.d.ts.map +1 -0
- package/dist/src/arrays.js +180 -0
- package/dist/src/arrays.js.map +1 -0
- package/dist/src/big-lru-map.d.ts +14 -0
- package/dist/src/big-lru-map.d.ts.map +1 -0
- package/dist/src/big-lru-map.js +20 -0
- package/dist/src/big-lru-map.js.map +1 -0
- package/dist/src/big-map.d.ts +28 -0
- package/dist/src/big-map.d.ts.map +1 -0
- package/dist/src/big-map.js +148 -0
- package/dist/src/big-map.js.map +1 -0
- package/dist/src/big-set.d.ts +20 -0
- package/dist/src/big-set.d.ts.map +1 -0
- package/dist/src/big-set.js +109 -0
- package/dist/src/big-set.js.map +1 -0
- package/dist/src/booleans.d.ts +44 -0
- package/dist/src/booleans.d.ts.map +1 -0
- package/dist/src/booleans.js +81 -0
- package/dist/src/booleans.js.map +1 -0
- package/dist/src/buffers.d.ts +9 -0
- package/dist/src/buffers.d.ts.map +1 -0
- package/dist/src/buffers.js +22 -0
- package/dist/src/buffers.js.map +1 -0
- package/dist/src/collector.d.ts +48 -0
- package/dist/src/collector.d.ts.map +1 -0
- package/dist/src/collector.js +74 -0
- package/dist/src/collector.js.map +1 -0
- package/dist/src/dates.d.ts +180 -0
- package/dist/src/dates.d.ts.map +1 -0
- package/dist/src/dates.js +744 -0
- package/dist/src/dates.js.map +1 -0
- package/dist/src/decorators.d.ts +7 -0
- package/dist/src/decorators.d.ts.map +1 -0
- package/dist/src/decorators.js +21 -0
- package/dist/src/decorators.js.map +1 -0
- package/dist/src/deps.d.ts +25 -0
- package/dist/src/deps.d.ts.map +1 -0
- package/dist/src/deps.js +96 -0
- package/dist/src/deps.js.map +1 -0
- package/dist/src/empty.d.ts +11 -0
- package/dist/src/empty.d.ts.map +1 -0
- package/dist/src/empty.js +32 -0
- package/dist/src/empty.js.map +1 -0
- package/dist/src/entities/data-entity.d.ts +153 -0
- package/dist/src/entities/data-entity.d.ts.map +1 -0
- package/dist/src/entities/data-entity.js +354 -0
- package/dist/src/entities/data-entity.js.map +1 -0
- package/dist/src/entities/index.d.ts +3 -0
- package/dist/src/entities/index.d.ts.map +1 -0
- package/dist/src/entities/index.js +3 -0
- package/dist/src/entities/index.js.map +1 -0
- package/dist/src/entities/interfaces.d.ts +52 -0
- package/dist/src/entities/interfaces.d.ts.map +1 -0
- package/dist/src/entities/interfaces.js +13 -0
- package/dist/src/entities/interfaces.js.map +1 -0
- package/dist/src/entities/utils.d.ts +9 -0
- package/dist/src/entities/utils.d.ts.map +1 -0
- package/dist/src/entities/utils.js +44 -0
- package/dist/src/entities/utils.js.map +1 -0
- package/dist/src/env.d.ts +6 -0
- package/dist/src/env.d.ts.map +1 -0
- package/dist/src/env.js +15 -0
- package/dist/src/env.js.map +1 -0
- package/dist/src/equality.d.ts +72 -0
- package/dist/src/equality.d.ts.map +1 -0
- package/dist/src/equality.js +128 -0
- package/dist/src/equality.js.map +1 -0
- package/dist/src/errors.d.ts +140 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +372 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/event-loop.d.ts +33 -0
- package/dist/src/event-loop.d.ts.map +1 -0
- package/dist/src/event-loop.js +74 -0
- package/dist/src/event-loop.js.map +1 -0
- package/dist/src/fp.d.ts +15 -0
- package/dist/src/fp.d.ts.map +1 -0
- package/dist/src/fp.js +25 -0
- package/dist/src/fp.js.map +1 -0
- package/dist/src/functions.d.ts +19 -0
- package/dist/src/functions.d.ts.map +1 -0
- package/dist/src/functions.js +58 -0
- package/dist/src/functions.js.map +1 -0
- package/dist/src/index.d.ts +33 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +33 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/iterators.d.ts +9 -0
- package/dist/src/iterators.d.ts.map +1 -0
- package/dist/src/iterators.js +13 -0
- package/dist/src/iterators.js.map +1 -0
- package/dist/src/json.d.ts +8 -0
- package/dist/src/json.d.ts.map +1 -0
- package/dist/src/json.js +46 -0
- package/dist/src/json.js.map +1 -0
- package/dist/src/logger.d.ts +18 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +87 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/numbers.d.ts +86 -0
- package/dist/src/numbers.d.ts.map +1 -0
- package/dist/src/numbers.js +354 -0
- package/dist/src/numbers.js.map +1 -0
- package/dist/src/objects.d.ts +66 -0
- package/dist/src/objects.d.ts.map +1 -0
- package/dist/src/objects.js +170 -0
- package/dist/src/objects.js.map +1 -0
- package/dist/src/phone-number.d.ts +4 -0
- package/dist/src/phone-number.d.ts.map +1 -0
- package/dist/src/phone-number.js +31 -0
- package/dist/src/phone-number.js.map +1 -0
- package/dist/src/promises.d.ts +102 -0
- package/dist/src/promises.d.ts.map +1 -0
- package/dist/src/promises.js +289 -0
- package/dist/src/promises.js.map +1 -0
- package/dist/src/queue/index.d.ts +27 -0
- package/dist/src/queue/index.d.ts.map +1 -0
- package/dist/src/queue/index.js +170 -0
- package/dist/src/queue/index.js.map +1 -0
- package/dist/src/queue/node.d.ts +7 -0
- package/dist/src/queue/node.d.ts.map +1 -0
- package/dist/src/queue/node.js +17 -0
- package/dist/src/queue/node.js.map +1 -0
- package/dist/src/regex.d.ts +19 -0
- package/dist/src/regex.d.ts.map +1 -0
- package/dist/src/regex.js +138 -0
- package/dist/src/regex.js.map +1 -0
- package/dist/src/schemas.d.ts +69 -0
- package/dist/src/schemas.d.ts.map +1 -0
- package/dist/src/schemas.js +619 -0
- package/dist/src/schemas.js.map +1 -0
- package/dist/src/status-codes.d.ts +67 -0
- package/dist/src/status-codes.d.ts.map +1 -0
- package/dist/src/status-codes.js +66 -0
- package/dist/src/status-codes.js.map +1 -0
- package/dist/src/strings.d.ts +279 -0
- package/dist/src/strings.d.ts.map +1 -0
- package/dist/src/strings.js +578 -0
- package/dist/src/strings.js.map +1 -0
- package/dist/src/vector.d.ts +2 -0
- package/dist/src/vector.d.ts.map +1 -0
- package/dist/src/vector.js +16 -0
- package/dist/src/vector.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/** promisified setTimeout */
|
|
2
|
+
export declare function pDelay<T = undefined>(delay?: number, arg?: T): Promise<T>;
|
|
3
|
+
/** promisified process.nextTick,setImmediate or setTimeout depending on your environment */
|
|
4
|
+
export declare function pImmediate<T = undefined>(arg?: T): Promise<T>;
|
|
5
|
+
export interface PRetryConfig {
|
|
6
|
+
/**
|
|
7
|
+
* The number of retries to attempt before failing.
|
|
8
|
+
* This does not include the initial attempt
|
|
9
|
+
*
|
|
10
|
+
* @default 3
|
|
11
|
+
*/
|
|
12
|
+
retries: number;
|
|
13
|
+
/**
|
|
14
|
+
* The initial time to delay before retrying the function
|
|
15
|
+
*
|
|
16
|
+
* @default 500
|
|
17
|
+
*/
|
|
18
|
+
delay: number;
|
|
19
|
+
/**
|
|
20
|
+
* The maximum time to delay when retrying in milliseconds
|
|
21
|
+
*
|
|
22
|
+
* @default 60000
|
|
23
|
+
*/
|
|
24
|
+
maxDelay: number;
|
|
25
|
+
/**
|
|
26
|
+
* The backoff multiplier
|
|
27
|
+
*
|
|
28
|
+
* @default 2
|
|
29
|
+
*/
|
|
30
|
+
backoff: number;
|
|
31
|
+
/**
|
|
32
|
+
* If set to true, this will set fail with fatalError to true
|
|
33
|
+
*/
|
|
34
|
+
endWithFatal: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Set a error message prefix
|
|
37
|
+
*/
|
|
38
|
+
reason?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Log function for logging any errors that occurred
|
|
41
|
+
*/
|
|
42
|
+
logError: (...args: any[]) => void;
|
|
43
|
+
/**
|
|
44
|
+
* If this not specified or is empty, all errors will be treated as retryable.
|
|
45
|
+
* If any of the items in the array match the error message,
|
|
46
|
+
* it will be considered retryable
|
|
47
|
+
*/
|
|
48
|
+
matches?: (string | RegExp)[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A promise retry fn.
|
|
52
|
+
*/
|
|
53
|
+
export declare function pRetry<T = any>(fn: PromiseFn<T>, options?: Partial<PRetryConfig>): Promise<T>;
|
|
54
|
+
export type PWhileOptions = {
|
|
55
|
+
/** @defaults to -1 which is never */
|
|
56
|
+
timeoutMs?: number;
|
|
57
|
+
/** @defaults to "Request" */
|
|
58
|
+
name?: string;
|
|
59
|
+
/** enable jitter to stagger requests */
|
|
60
|
+
enabledJitter?: boolean;
|
|
61
|
+
/** the minimum the jitter wait time will be (in milliseconds),
|
|
62
|
+
* defaults to 100ms */
|
|
63
|
+
minJitter?: number;
|
|
64
|
+
/** the maximum the jitter wait time will be (in milliseconds),
|
|
65
|
+
* defaults to 3x the minJitter setting, but less than timeoutMs
|
|
66
|
+
* */
|
|
67
|
+
maxJitter?: number;
|
|
68
|
+
/** error that can be expressed if the timer ends because the function does not return true */
|
|
69
|
+
error?: string;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Run a function until it returns true or throws an error
|
|
73
|
+
*/
|
|
74
|
+
export declare function pWhile(fn: PromiseFn, options?: PWhileOptions): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Get backoff delay that will safe to retry and is slightly staggered
|
|
77
|
+
*/
|
|
78
|
+
export declare function getBackoffDelay(current: number, factor?: number, max?: number, min?: number): number;
|
|
79
|
+
interface PromiseFn<T = any> {
|
|
80
|
+
(...args: any[]): Promise<T>;
|
|
81
|
+
}
|
|
82
|
+
/** Async waterfall function */
|
|
83
|
+
export declare function waterfall(input: unknown, fns: PromiseFn[], addBreak?: boolean): Promise<any>;
|
|
84
|
+
/**
|
|
85
|
+
* Run multiple promises at once, and resolve/reject when the first completes
|
|
86
|
+
*/
|
|
87
|
+
export declare function pRace(promises: Promise<any>[], logError?: (err: any) => void): Promise<any>;
|
|
88
|
+
/**
|
|
89
|
+
* Similar to pRace but with
|
|
90
|
+
*/
|
|
91
|
+
export declare function pRaceWithTimeout(promises: Promise<any>[] | Promise<any>, timeout: number, logError?: (err: any) => void): Promise<any>;
|
|
92
|
+
/**
|
|
93
|
+
* An alternative to Bluebird.defer: http://bluebirdjs.com/docs/api/deferred-migration.html
|
|
94
|
+
* Considered bad practice in most cases, use the Promise constructor
|
|
95
|
+
*/
|
|
96
|
+
export declare function pDefer(): {
|
|
97
|
+
resolve: (value?: unknown) => void;
|
|
98
|
+
reject: (reason?: any) => void;
|
|
99
|
+
promise: Promise<any>;
|
|
100
|
+
};
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=promises.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promises.d.ts","sourceRoot":"","sources":["../../src/promises.ts"],"names":[],"mappings":"AASA,6BAA6B;AAC7B,wBAAgB,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAIzE;AA6BD,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAoB7D;AAED,MAAM,WAAW,YAAY;IACzB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAEnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,CAAC,GAAG,GAAG,EAChC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAChB,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC,CAuFZ;AAED,MAAM,MAAM,aAAa,GAAG;IACxB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,wCAAwC;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;2BACuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;UAEM;IACN,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,wBAAsB,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEtF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,SAAI,EACV,GAAG,SAAQ,EACX,GAAG,SAAM,GACV,MAAM,CAgBR;AAOD,UAAU,SAAS,CAAC,CAAC,GAAG,GAAG;IACvB,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAChC;AAED,+BAA+B;AAC/B,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAM1F;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAoB3F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAC9B,OAAO,CAAC,GAAG,CAAC,CAqBd;AAED;;;EAGE;AACF,wBAAgB,MAAM,IAAI;IACtB,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;CACzB,CAcA"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { debugLogger } from './logger.js';
|
|
2
|
+
import { toHumanTime } from './dates.js';
|
|
3
|
+
import { isRetryableError, TSError, parseError, isFatalError } from './errors.js';
|
|
4
|
+
const logger = debugLogger('utils:promises');
|
|
5
|
+
/** promisified setTimeout */
|
|
6
|
+
export function pDelay(delay, arg) {
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
setTimeout(resolve, delay ?? 0, arg);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
let supportsSetImmediate = false;
|
|
12
|
+
try {
|
|
13
|
+
if (typeof globalThis.setImmediate === 'function') {
|
|
14
|
+
supportsSetImmediate = true;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
supportsSetImmediate = false;
|
|
19
|
+
}
|
|
20
|
+
let supportsNextTick = false;
|
|
21
|
+
try {
|
|
22
|
+
if (typeof globalThis.process.nextTick === 'function') {
|
|
23
|
+
supportsNextTick = true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
supportsNextTick = false;
|
|
28
|
+
}
|
|
29
|
+
let supportsQueueMicroTask = false;
|
|
30
|
+
try {
|
|
31
|
+
if (typeof globalThis.queueMicrotask === 'function') {
|
|
32
|
+
supportsQueueMicroTask = true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
supportsQueueMicroTask = false;
|
|
37
|
+
}
|
|
38
|
+
/** promisified process.nextTick,setImmediate or setTimeout depending on your environment */
|
|
39
|
+
export function pImmediate(arg) {
|
|
40
|
+
return new Promise((resolve) => {
|
|
41
|
+
if (supportsQueueMicroTask) {
|
|
42
|
+
if (typeof arg !== 'undefined') {
|
|
43
|
+
queueMicrotask(resolve.bind(resolve, arg));
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
queueMicrotask(resolve);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if (supportsNextTick) {
|
|
50
|
+
process.nextTick(resolve, arg);
|
|
51
|
+
}
|
|
52
|
+
else if (supportsSetImmediate) {
|
|
53
|
+
if (typeof arg !== 'undefined') {
|
|
54
|
+
setImmediate(resolve, arg);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
setImmediate(resolve);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
setTimeout(resolve, 0, arg);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A promise retry fn.
|
|
67
|
+
*/
|
|
68
|
+
export async function pRetry(fn, options) {
|
|
69
|
+
const config = Object.assign({
|
|
70
|
+
retries: 3,
|
|
71
|
+
delay: 500,
|
|
72
|
+
maxDelay: 60000,
|
|
73
|
+
backoff: 2,
|
|
74
|
+
matches: [],
|
|
75
|
+
_currentDelay: 0,
|
|
76
|
+
// @ts-expect-error
|
|
77
|
+
_context: undefined,
|
|
78
|
+
}, options);
|
|
79
|
+
if (!config._currentDelay) {
|
|
80
|
+
config._currentDelay = config.delay;
|
|
81
|
+
}
|
|
82
|
+
config._context = config._context || {
|
|
83
|
+
startTime: Date.now(),
|
|
84
|
+
attempts: 0,
|
|
85
|
+
};
|
|
86
|
+
config._context.attempts++;
|
|
87
|
+
try {
|
|
88
|
+
return await fn();
|
|
89
|
+
}
|
|
90
|
+
catch (_err) {
|
|
91
|
+
let matches = true;
|
|
92
|
+
if (config.matches?.length) {
|
|
93
|
+
const rawErr = parseError(_err);
|
|
94
|
+
matches = config.matches.some((match) => {
|
|
95
|
+
const reg = new RegExp(match);
|
|
96
|
+
return reg.test(rawErr);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const context = {
|
|
100
|
+
...config._context,
|
|
101
|
+
duration: Date.now() - config._context.startTime,
|
|
102
|
+
};
|
|
103
|
+
const err = new TSError(_err, {
|
|
104
|
+
reason: config.reason,
|
|
105
|
+
context,
|
|
106
|
+
});
|
|
107
|
+
if (_err && _err.stack) {
|
|
108
|
+
err.stack += `\n${_err.stack
|
|
109
|
+
.split('\n')
|
|
110
|
+
.slice(1)
|
|
111
|
+
.join('\n')}`;
|
|
112
|
+
}
|
|
113
|
+
if (!isFatalError(err) && err.retryable == null) {
|
|
114
|
+
err.retryable = matches;
|
|
115
|
+
}
|
|
116
|
+
if (isRetryableError(err) && config.retries > 1) {
|
|
117
|
+
config.retries--;
|
|
118
|
+
config._currentDelay = getBackoffDelay(config._currentDelay, config.backoff, config.maxDelay, config.delay);
|
|
119
|
+
await pDelay(config._currentDelay);
|
|
120
|
+
if (config.logError) {
|
|
121
|
+
config.logError(err, 'retry error, retrying...', {
|
|
122
|
+
...config,
|
|
123
|
+
_context: null,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return pRetry(fn, config);
|
|
127
|
+
}
|
|
128
|
+
err.retryable = false;
|
|
129
|
+
if (config.endWithFatal) {
|
|
130
|
+
err.fatalError = true;
|
|
131
|
+
}
|
|
132
|
+
throw err;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Run a function until it returns true or throws an error
|
|
137
|
+
*/
|
|
138
|
+
export async function pWhile(fn, options = {}) {
|
|
139
|
+
const { timeoutMs = -1, name = 'Request', enabledJitter = false, minJitter = 100, } = options;
|
|
140
|
+
const maxJitter = options.maxJitter ?? minJitter * 3;
|
|
141
|
+
if (timeoutMs <= 2 && options.enabledJitter) {
|
|
142
|
+
throw new Error('Jitter cannot be enabled whe timeout is <=2');
|
|
143
|
+
}
|
|
144
|
+
const startTime = Date.now();
|
|
145
|
+
const endTime = timeoutMs > 0 ? startTime + timeoutMs : Number.POSITIVE_INFINITY;
|
|
146
|
+
let running = false;
|
|
147
|
+
let interval;
|
|
148
|
+
const promise = new Promise((resolve, reject) => {
|
|
149
|
+
interval = setInterval(async () => {
|
|
150
|
+
if (running)
|
|
151
|
+
return;
|
|
152
|
+
running = true;
|
|
153
|
+
const remaining = endTime - Date.now();
|
|
154
|
+
if (remaining <= 0) {
|
|
155
|
+
let errMsg = `${name} timeout after ${toHumanTime(timeoutMs)}`;
|
|
156
|
+
if (options.error)
|
|
157
|
+
errMsg = `${errMsg}; ${options.error}`;
|
|
158
|
+
reject(new TSError(errMsg, {
|
|
159
|
+
statusCode: 503,
|
|
160
|
+
}));
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
if (enabledJitter) {
|
|
165
|
+
const jitterDelay = getBackoffDelay(minJitter, 3, maxJitter, minJitter);
|
|
166
|
+
// ensure we don't exceed the remaing time
|
|
167
|
+
const delay = Math.min(jitterDelay, remaining - 2);
|
|
168
|
+
if (delay > 2) {
|
|
169
|
+
await pDelay(delay);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const result = await fn();
|
|
173
|
+
if (result) {
|
|
174
|
+
resolve();
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
running = false;
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
reject(err);
|
|
181
|
+
}
|
|
182
|
+
}, 1);
|
|
183
|
+
});
|
|
184
|
+
try {
|
|
185
|
+
await promise;
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
clearInterval(interval);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get backoff delay that will safe to retry and is slightly staggered
|
|
193
|
+
*/
|
|
194
|
+
export function getBackoffDelay(current, factor = 2, max = 60000, min = 500) {
|
|
195
|
+
// jitter is a floating point number between -0.2 and 0.8
|
|
196
|
+
const jitter = Math.random() * 0.8 + -0.2;
|
|
197
|
+
let n = current;
|
|
198
|
+
// ensure the number does not go below the min val
|
|
199
|
+
if (n < min)
|
|
200
|
+
n = min;
|
|
201
|
+
// multiple the current backoff value by input factor and jitter
|
|
202
|
+
n *= factor + jitter;
|
|
203
|
+
// ensure the number does not exceed the max val
|
|
204
|
+
if (n > max)
|
|
205
|
+
n = max;
|
|
206
|
+
// round it so it remains a whole number
|
|
207
|
+
return Math.round(n);
|
|
208
|
+
}
|
|
209
|
+
/** Async waterfall function */
|
|
210
|
+
export function waterfall(input, fns, addBreak = false) {
|
|
211
|
+
let i = 0;
|
|
212
|
+
return fns.reduce(async (last, fn) => {
|
|
213
|
+
if (i++ === 0 && addBreak)
|
|
214
|
+
await pImmediate();
|
|
215
|
+
return fn(await last);
|
|
216
|
+
}, input);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Run multiple promises at once, and resolve/reject when the first completes
|
|
220
|
+
*/
|
|
221
|
+
export function pRace(promises, logError) {
|
|
222
|
+
if (!promises || !Array.isArray(promises)) {
|
|
223
|
+
throw new Error('Invalid promises argument, must be an array');
|
|
224
|
+
}
|
|
225
|
+
return new Promise((resolve, reject) => {
|
|
226
|
+
let done = false;
|
|
227
|
+
promises.forEach(async (promise) => {
|
|
228
|
+
try {
|
|
229
|
+
const result = await promise;
|
|
230
|
+
resolve(result);
|
|
231
|
+
done = true;
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
if (done) {
|
|
235
|
+
if (logError)
|
|
236
|
+
logError(err);
|
|
237
|
+
else
|
|
238
|
+
logger.error(err, 'pRace reject with an error after complete');
|
|
239
|
+
}
|
|
240
|
+
reject(err);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Similar to pRace but with
|
|
247
|
+
*/
|
|
248
|
+
export async function pRaceWithTimeout(promises, timeout, logError) {
|
|
249
|
+
if (!timeout || typeof timeout !== 'number') {
|
|
250
|
+
throw new Error('Invalid timeout argument, must be a number');
|
|
251
|
+
}
|
|
252
|
+
let timeoutId;
|
|
253
|
+
try {
|
|
254
|
+
const pTimeout = new Promise((resolve) => {
|
|
255
|
+
// add unref to avoid keeping the process open
|
|
256
|
+
timeoutId = setTimeout(resolve, timeout);
|
|
257
|
+
timeoutId.unref();
|
|
258
|
+
});
|
|
259
|
+
const _promises = Array.isArray(promises) ? promises : [promises];
|
|
260
|
+
await pRace([..._promises, pTimeout], logError);
|
|
261
|
+
}
|
|
262
|
+
catch (err) {
|
|
263
|
+
if (logError)
|
|
264
|
+
logError(err);
|
|
265
|
+
else
|
|
266
|
+
console.error(err);
|
|
267
|
+
}
|
|
268
|
+
finally {
|
|
269
|
+
clearTimeout(timeoutId);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* An alternative to Bluebird.defer: http://bluebirdjs.com/docs/api/deferred-migration.html
|
|
274
|
+
* Considered bad practice in most cases, use the Promise constructor
|
|
275
|
+
*/
|
|
276
|
+
export function pDefer() {
|
|
277
|
+
let resolve;
|
|
278
|
+
let reject;
|
|
279
|
+
const promise = new Promise((res, rej) => {
|
|
280
|
+
resolve = res;
|
|
281
|
+
reject = rej;
|
|
282
|
+
});
|
|
283
|
+
return {
|
|
284
|
+
resolve: resolve,
|
|
285
|
+
reject: reject,
|
|
286
|
+
promise
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=promises.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promises.js","sourceRoot":"","sources":["../../src/promises.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import Node from './node.js';
|
|
2
|
+
/** A basic FIFO queue */
|
|
3
|
+
export declare class Queue<T> {
|
|
4
|
+
head?: Node<T>;
|
|
5
|
+
tail?: Node<T>;
|
|
6
|
+
private _size;
|
|
7
|
+
/** A value to the end of the queue */
|
|
8
|
+
enqueue(value: T): void;
|
|
9
|
+
unshift(value: T): void;
|
|
10
|
+
dequeue(): T | undefined;
|
|
11
|
+
/** Iterate over each value */
|
|
12
|
+
each(fn: (value: T) => void): void;
|
|
13
|
+
remove(id: string, keyForID?: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* Search the queue for a key that matches a value and return the match
|
|
16
|
+
*/
|
|
17
|
+
extract(key: string, val: unknown): T | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Get the length of the queue
|
|
20
|
+
*/
|
|
21
|
+
size(): number;
|
|
22
|
+
/**
|
|
23
|
+
* Search the queue to see if a key value pair exists
|
|
24
|
+
*/
|
|
25
|
+
exists(key: string, val: unknown): boolean;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/queue/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,yBAAyB;AACzB,qBAAa,KAAK,CAAC,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,CAAC,KAAK,CAAK;IAElB,sCAAsC;IACtC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAQvB,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAUvB,OAAO,IAAI,CAAC,GAAG,SAAS;IAqBxB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAWlC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAkD3C;;MAEE;IACF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS;IAyCjD;;MAEE;IACF,IAAI,IAAI,MAAM;IAId;;MAEE;IACF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO;CAmB7C"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import Node from './node.js';
|
|
2
|
+
/** A basic FIFO queue */
|
|
3
|
+
export class Queue {
|
|
4
|
+
head;
|
|
5
|
+
tail;
|
|
6
|
+
_size = 0;
|
|
7
|
+
/** A value to the end of the queue */
|
|
8
|
+
enqueue(value) {
|
|
9
|
+
this.tail = new Node(value, this.tail);
|
|
10
|
+
if (!this.head) {
|
|
11
|
+
this.head = this.tail;
|
|
12
|
+
}
|
|
13
|
+
this._size += 1;
|
|
14
|
+
}
|
|
15
|
+
unshift(value) {
|
|
16
|
+
const currentNode = this.head;
|
|
17
|
+
const node = new Node(value, undefined, currentNode);
|
|
18
|
+
this.head = node;
|
|
19
|
+
if (this.tail == null) {
|
|
20
|
+
this.tail = node;
|
|
21
|
+
}
|
|
22
|
+
this._size += 1;
|
|
23
|
+
}
|
|
24
|
+
dequeue() {
|
|
25
|
+
if (this._size === 0 || this.head == null) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const node = this.head;
|
|
29
|
+
this.head = node.next;
|
|
30
|
+
if (node.next) {
|
|
31
|
+
node.next = undefined;
|
|
32
|
+
node.prev = undefined;
|
|
33
|
+
}
|
|
34
|
+
this._size -= 1;
|
|
35
|
+
if (this._size === 1) {
|
|
36
|
+
this.tail = this.head;
|
|
37
|
+
}
|
|
38
|
+
else if (this._size === 0) {
|
|
39
|
+
this.head = undefined;
|
|
40
|
+
this.tail = undefined;
|
|
41
|
+
}
|
|
42
|
+
return node.value;
|
|
43
|
+
}
|
|
44
|
+
/** Iterate over each value */
|
|
45
|
+
each(fn) {
|
|
46
|
+
let currentNode = this.head;
|
|
47
|
+
if (currentNode) {
|
|
48
|
+
fn(currentNode.value);
|
|
49
|
+
}
|
|
50
|
+
while (currentNode && currentNode.next) {
|
|
51
|
+
currentNode = currentNode.next;
|
|
52
|
+
fn(currentNode.value);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
remove(id, keyForID) {
|
|
56
|
+
const key = keyForID || 'id';
|
|
57
|
+
if (this.head == null || !id) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// fast forward head to right spot
|
|
61
|
+
while (this.head && this.head.value[key] === id) {
|
|
62
|
+
this.head = this.head.next;
|
|
63
|
+
this._size -= 1;
|
|
64
|
+
}
|
|
65
|
+
// if whole list is gone, set tail to undefined
|
|
66
|
+
if (this.head == null) {
|
|
67
|
+
this.tail = undefined;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// clean up prev
|
|
71
|
+
this.head.prev = undefined;
|
|
72
|
+
// there is anything left in list
|
|
73
|
+
if (this.head) {
|
|
74
|
+
let currentNode = this.head;
|
|
75
|
+
while (currentNode) {
|
|
76
|
+
const previousNode = currentNode.prev;
|
|
77
|
+
const nextNode = currentNode.next;
|
|
78
|
+
if (currentNode.value[key] === id) {
|
|
79
|
+
if (nextNode) {
|
|
80
|
+
if (previousNode) {
|
|
81
|
+
previousNode.next = nextNode;
|
|
82
|
+
nextNode.prev = previousNode;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
nextNode.prev = undefined;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (previousNode) {
|
|
89
|
+
previousNode.next = undefined;
|
|
90
|
+
this.tail = previousNode;
|
|
91
|
+
}
|
|
92
|
+
this._size -= 1;
|
|
93
|
+
currentNode = nextNode;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
currentNode = nextNode;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Search the queue for a key that matches a value and return the match
|
|
103
|
+
*/
|
|
104
|
+
extract(key, val) {
|
|
105
|
+
if (val == null)
|
|
106
|
+
return;
|
|
107
|
+
if (this.head) {
|
|
108
|
+
let currentNode = this.head;
|
|
109
|
+
let isFound = false;
|
|
110
|
+
while (currentNode && !isFound) {
|
|
111
|
+
const previousNode = currentNode.prev;
|
|
112
|
+
const nextNode = currentNode.next;
|
|
113
|
+
if (currentNode.value[key] === val) {
|
|
114
|
+
const data = currentNode.value;
|
|
115
|
+
isFound = true;
|
|
116
|
+
if (nextNode) {
|
|
117
|
+
if (previousNode) {
|
|
118
|
+
previousNode.next = nextNode;
|
|
119
|
+
nextNode.prev = previousNode;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.head = nextNode;
|
|
123
|
+
nextNode.prev = undefined;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (previousNode) {
|
|
127
|
+
previousNode.next = undefined;
|
|
128
|
+
this.tail = previousNode;
|
|
129
|
+
}
|
|
130
|
+
this._size -= 1;
|
|
131
|
+
if (this._size === 1) {
|
|
132
|
+
this.tail = this.head;
|
|
133
|
+
}
|
|
134
|
+
else if (this._size === 0) {
|
|
135
|
+
this.head = undefined;
|
|
136
|
+
this.tail = undefined;
|
|
137
|
+
}
|
|
138
|
+
return data;
|
|
139
|
+
}
|
|
140
|
+
currentNode = nextNode;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get the length of the queue
|
|
146
|
+
*/
|
|
147
|
+
size() {
|
|
148
|
+
return this._size;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Search the queue to see if a key value pair exists
|
|
152
|
+
*/
|
|
153
|
+
exists(key, val) {
|
|
154
|
+
let currentNode = this.head;
|
|
155
|
+
if (val == null) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
if (currentNode && currentNode.value[key] === val) {
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
while (currentNode && currentNode.next) {
|
|
162
|
+
currentNode = currentNode.next;
|
|
163
|
+
if (currentNode.value[key] === val) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/queue/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/queue/node.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEH,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;CAWvD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export default class Node {
|
|
2
|
+
value;
|
|
3
|
+
next;
|
|
4
|
+
prev;
|
|
5
|
+
constructor(value, prev, next) {
|
|
6
|
+
this.next = next;
|
|
7
|
+
if (next) {
|
|
8
|
+
next.prev = this;
|
|
9
|
+
}
|
|
10
|
+
this.prev = prev;
|
|
11
|
+
if (prev) {
|
|
12
|
+
prev.next = this;
|
|
13
|
+
}
|
|
14
|
+
this.value = value;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/queue/node.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,KAAK,CAAI;IACT,IAAI,CAAW;IACf,IAAI,CAAW;IAEf,YAAY,KAAQ,EAAE,IAAc,EAAE,IAAc;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;CACJ"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function isRegExp(input: unknown): input is RegExp;
|
|
2
|
+
export declare function isRegExpLike(input: unknown, strict?: boolean): boolean;
|
|
3
|
+
type RegexFlag = 'g' | 'i' | 's' | 'm' | 'x';
|
|
4
|
+
export declare function formatRegex(input: RegExp | string, flags?: RegexFlag[]): RegExp;
|
|
5
|
+
export declare function match(regexp: string | RegExp, value: string): string | null;
|
|
6
|
+
/**
|
|
7
|
+
* A functional version of match
|
|
8
|
+
*/
|
|
9
|
+
export declare function matchFP(regexp: string | RegExp): (value: string) => string | null;
|
|
10
|
+
export declare function matchAll(regexp: RegExp | string, value: string): string[] | null;
|
|
11
|
+
/**
|
|
12
|
+
* A functional version of matchAll
|
|
13
|
+
*/
|
|
14
|
+
export declare function matchAllFP(regexp: string | RegExp): (value: string) => string[] | null;
|
|
15
|
+
export declare function isWildCardString(term: string): boolean;
|
|
16
|
+
export declare function wildCardToRegex(term: string): RegExp;
|
|
17
|
+
export declare function matchWildcard(wildCard: string, value: string): boolean;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=regex.d.ts.map
|