@daiso-tech/core 0.35.3 → 0.36.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 +22 -54
- package/dist/async/backof-policies/_shared.d.ts +8 -2
- package/dist/async/backof-policies/_shared.js +0 -1
- package/dist/async/backof-policies/_shared.js.map +1 -1
- package/dist/async/backof-policies/constant-backoff-policy/constant-backoff-policy.d.ts +3 -3
- package/dist/async/backof-policies/constant-backoff-policy/constant-backoff-policy.js +10 -4
- package/dist/async/backof-policies/constant-backoff-policy/constant-backoff-policy.js.map +1 -1
- package/dist/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.d.ts +3 -3
- package/dist/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.js +10 -4
- package/dist/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.js.map +1 -1
- package/dist/async/backof-policies/linear-backoff-policy/linear-backoff-policy.d.ts +3 -3
- package/dist/async/backof-policies/linear-backoff-policy/linear-backoff-policy.js +10 -4
- package/dist/async/backof-policies/linear-backoff-policy/linear-backoff-policy.js.map +1 -1
- package/dist/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.d.ts +3 -3
- package/dist/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.js +10 -4
- package/dist/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.js.map +1 -1
- package/dist/async/middlewares/fallback/fallback.middleware.d.ts +2 -2
- package/dist/async/middlewares/fallback/fallback.middleware.js +2 -2
- package/dist/async/middlewares/fallback/fallback.middleware.js.map +1 -1
- package/dist/async/middlewares/hedging/_shared.d.ts +7 -7
- package/dist/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.js +7 -7
- package/dist/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.js.map +1 -1
- package/dist/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.js +6 -6
- package/dist/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.js.map +1 -1
- package/dist/async/middlewares/observe/observe.middleware.d.ts +4 -4
- package/dist/async/middlewares/retry/retry.middleware.d.ts +5 -4
- package/dist/async/middlewares/retry/retry.middleware.js +9 -9
- package/dist/async/middlewares/retry/retry.middleware.js.map +1 -1
- package/dist/async/middlewares/timeout/timeout.middleware.d.ts +4 -2
- package/dist/async/middlewares/timeout/timeout.middleware.js +3 -1
- package/dist/async/middlewares/timeout/timeout.middleware.js.map +1 -1
- package/dist/async/utilities/lazy-promise/lazy-promise.d.ts +1 -1
- package/dist/async/utilities/lazy-promise/lazy-promise.js +1 -1
- package/dist/async/utilities/promise-queue/promise-queue.js.map +1 -1
- package/dist/cache/contracts/cache.errors.d.ts +3 -3
- package/dist/cache/contracts/cache.errors.js +1 -1
- package/dist/cache/contracts/cache.errors.js.map +1 -1
- package/dist/cache/contracts/cache.events.d.ts +2 -2
- package/dist/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.d.ts +14 -0
- package/dist/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.d.ts +3 -0
- package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.d.ts +11 -0
- package/dist/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/derivables/cache/cache.d.ts +12 -8
- package/dist/cache/implementations/derivables/cache/cache.js +25 -34
- package/dist/cache/implementations/derivables/cache/cache.js.map +1 -1
- package/dist/cache/implementations/derivables/cache-factory/cache-factory.d.ts +6 -41
- package/dist/cache/implementations/derivables/cache-factory/cache-factory.js +10 -45
- package/dist/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
- package/dist/cache/implementations/test-utilities/cache.test-suite.d.ts +4 -5
- package/dist/cache/implementations/test-utilities/cache.test-suite.js +11 -12
- package/dist/cache/implementations/test-utilities/cache.test-suite.js.map +1 -1
- package/dist/collection/contracts/async-collection.contract.d.ts +121 -121
- package/dist/collection/contracts/collection.contract.d.ts +120 -120
- package/dist/collection/contracts/collection.errors.d.ts +3 -3
- package/dist/collection/contracts/collection.errors.js +1 -1
- package/dist/collection/contracts/collection.errors.js.map +1 -1
- package/dist/collection/implementations/_shared.d.ts +4 -4
- package/dist/collection/implementations/_shared.js +2 -2
- package/dist/collection/implementations/_shared.js.map +1 -1
- package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.d.ts +13 -13
- package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js +15 -15
- package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/iterable-collection.d.ts +12 -12
- package/dist/collection/implementations/iterable-collection/iterable-collection.js +12 -12
- package/dist/collection/implementations/iterable-collection/iterable-collection.js.map +1 -1
- package/dist/collection/implementations/list-collection/list-collection.d.ts +12 -12
- package/dist/collection/implementations/list-collection/list-collection.js +12 -12
- package/dist/collection/implementations/list-collection/list-collection.js.map +1 -1
- package/dist/event-bus/contracts/event-bus-factory.contract.d.ts +1 -1
- package/dist/event-bus/contracts/event-bus.contract.d.ts +2 -2
- package/dist/event-bus/contracts/event-bus.errors.d.ts +3 -3
- package/dist/event-bus/contracts/event-bus.errors.js +1 -1
- package/dist/event-bus/contracts/event-bus.errors.js.map +1 -1
- package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.d.ts +1 -1
- package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js +1 -1
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.d.ts +13 -6
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.js +21 -19
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
- package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.d.ts +5 -36
- package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js +4 -35
- package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js.map +1 -1
- package/dist/lock/contracts/lock.errors.d.ts +2 -2
- package/dist/lock/contracts/lock.errors.js.map +1 -1
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.d.ts +3 -3
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js +2 -2
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.d.ts +3 -3
- package/dist/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.js +2 -2
- package/dist/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.d.ts +6 -3
- package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js +1 -1
- package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.d.ts +4 -4
- package/dist/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.js +3 -3
- package/dist/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.d.ts +22 -18
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.js +20 -22
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.d.ts +3 -3
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js +12 -6
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock.d.ts +4 -2
- package/dist/lock/implementations/derivables/lock-provider/lock.js +16 -18
- package/dist/lock/implementations/derivables/lock-provider/lock.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.d.ts +6 -50
- package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js +10 -54
- package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js.map +1 -1
- package/dist/lock/implementations/test-utilities/lock-provider.test-suite.d.ts +1 -9
- package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js +1 -9
- package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js.map +1 -1
- package/dist/serde/contracts/flexible-serde.contract.d.ts +9 -2
- package/dist/utilities/classes/_module.d.ts +1 -1
- package/dist/utilities/classes/_module.js +1 -1
- package/dist/utilities/classes/_module.js.map +1 -1
- package/dist/utilities/classes/hooks/hooks.d.ts +2 -2
- package/dist/utilities/classes/hooks/hooks.js +2 -2
- package/dist/utilities/classes/namespace/_module.d.ts +1 -0
- package/dist/utilities/classes/namespace/_module.js +2 -0
- package/dist/utilities/classes/namespace/_module.js.map +1 -0
- package/dist/utilities/classes/{key-prefixer/key-prefixer.d.ts → namespace/namespace.d.ts} +38 -17
- package/dist/utilities/classes/{key-prefixer/key-prefixer.js → namespace/namespace.js} +51 -19
- package/dist/utilities/classes/namespace/namespace.js.map +1 -0
- package/dist/utilities/classes/time-span/time-span.d.ts +1 -2
- package/dist/utilities/classes/time-span/time-span.js +1 -4
- package/dist/utilities/classes/time-span/time-span.js.map +1 -1
- package/dist/utilities/functions/_module-exports.d.ts +1 -1
- package/dist/utilities/functions/_module-exports.js +1 -1
- package/dist/utilities/functions/_module-exports.js.map +1 -1
- package/dist/utilities/functions/result.d.ts +11 -0
- package/dist/utilities/functions/result.js +15 -0
- package/dist/utilities/functions/result.js.map +1 -0
- package/dist/utilities/types/factory.type.d.ts +13 -18
- package/dist/utilities/types/result.type.d.ts +11 -1
- package/package.json +3 -2
- package/dist/utilities/classes/key-prefixer/_module.d.ts +0 -1
- package/dist/utilities/classes/key-prefixer/_module.js +0 -2
- package/dist/utilities/classes/key-prefixer/_module.js.map +0 -1
- package/dist/utilities/classes/key-prefixer/key-prefixer.js.map +0 -1
- package/dist/utilities/functions/factory.d.ts +0 -44
- package/dist/utilities/functions/factory.js +0 -80
- package/dist/utilities/functions/factory.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,72 +1,40 @@
|
|
|
1
|
-
# @daiso-tech/core
|
|
2
|
-
|
|
3
1
|
[](https://www.npmjs.com/package/@daiso-tech/core)
|
|
4
2
|

|
|
5
3
|

|
|
6
4
|
[](https://nodejs.org/api/esm.html)
|
|
7
5
|
[](LICENSE)
|
|
8
6
|
|
|
7
|
+
# @daiso-tech/core
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
## ✨ Features
|
|
9
|
+
`@daiso-tech/core` is a TypeScript-first backend library for building web apps and API servers. It includes an ecosystem of official packages designed to work seamlessly together.
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
[Get started now](https://daiso-core.vercel.app/docs/Installation)
|
|
15
12
|
|
|
16
|
-
-
|
|
13
|
+
- **Type safe:**
|
|
14
|
+
We pay a closer look at type-safety, seamless intellisense, and support for auto imports when designing library APIs.
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- `AsyncIterableCollection` - Simplifies work with `AsyncIterable`
|
|
16
|
+
- **ESM ready:**
|
|
17
|
+
@daiso-tech/core leverages modern JavaScript primitives, including ES modules
|
|
21
18
|
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
- `fallback`: Automatic recovery with default values on errors
|
|
25
|
-
- `observe`: Monitor function execution and performance
|
|
26
|
-
- `retry`: Smart retries with multiple backoff policies:
|
|
27
|
-
- `constantBackoffPolicy`
|
|
28
|
-
- `exponentialBackoffPolicy`
|
|
29
|
-
- `linearBackoffPolicy`
|
|
30
|
-
- `polynomialBackoffPolicy`
|
|
31
|
-
- `sequentialHedging`: Runs fallbacks sequentially if the primary function fails, ensuring graceful failure handling.
|
|
32
|
-
- `concurrentHedging`: Executes the primary function alongside fallbacks concurrently, returning the first successful result and aborting all remaining operations.
|
|
33
|
-
- `timeout`: Guaranteed execution time limits
|
|
34
|
-
- **LazyPromise**:
|
|
35
|
-
- Executes only when awaited
|
|
36
|
-
- With middleware support
|
|
37
|
-
- **Pluggable Components**:
|
|
38
|
-
- `Cache` with adapter support
|
|
39
|
-
- `Lock` with adapter support
|
|
40
|
-
- `EventBus` with adapter support
|
|
41
|
-
- `Serde` (serializer, deserializer) adapters
|
|
19
|
+
- **Easily testable:**
|
|
20
|
+
@daiso-tech/core includes built-in vitest helpers for custom adapters and in-memory adapters for all components, enabling testing without Docker.
|
|
42
21
|
|
|
43
|
-
|
|
22
|
+
## A growing collection of officially maintained components
|
|
44
23
|
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
- Semaphore component
|
|
48
|
-
- SharedLock (ReaderWriterLock)
|
|
49
|
-
- RateLimiter
|
|
50
|
-
- CircuitBreaker
|
|
51
|
-
- MessageQueue
|
|
52
|
-
- TaskScheduler
|
|
53
|
-
- Notification system
|
|
54
|
-
- Abstract file system
|
|
24
|
+
- **Cache:**
|
|
25
|
+
Speed up your applications by storing slowly changing data in a cache store.
|
|
55
26
|
|
|
56
|
-
|
|
27
|
+
- **EventBus:**
|
|
28
|
+
Easily send events accross different applications or in-memory.
|
|
57
29
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
```
|
|
30
|
+
- **Atomic lock:**
|
|
31
|
+
Synchronize the access to a shared resource to prevents several processes, or concurrent code, from executing a section of code at the same time.
|
|
61
32
|
|
|
62
|
-
|
|
33
|
+
- **Serde:**
|
|
34
|
+
Add custom serialization and deserialization logic that seamlessly integrates with all other components.
|
|
63
35
|
|
|
64
|
-
|
|
36
|
+
- **Collection:**
|
|
37
|
+
Effortlessly work with Arrays, Iterables, and AsyncIterables. Filter and transform with precision.
|
|
65
38
|
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
- [Verrou](https://verrou.dev/docs/introduction), TypeScript
|
|
69
|
-
- [Distributed lock](https://github.com/ZiggyCreatures/FusionCache), C#
|
|
70
|
-
- [Bento cache](https://bentocache.dev/docs/introduction), TypeScript
|
|
71
|
-
- [Fusion cache](https://github.com/ZiggyCreatures/FusionCache), C#
|
|
72
|
-
- [Polly](https://www.pollydocs.org/), C#
|
|
39
|
+
- **Hooks:**
|
|
40
|
+
Extend any sync and async function with agnostic hooks.@daiso-tech/core includes predefined retry, fallback, timeout and hedging hooks to easily allow handling transient failures.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Async
|
|
3
3
|
*/
|
|
4
|
-
import type { Invokable } from "../../utilities/_module-exports.js";
|
|
4
|
+
import type { Invokable, TimeSpan } from "../../utilities/_module-exports.js";
|
|
5
5
|
/**
|
|
6
6
|
* @returns Amount milliseconds to wait
|
|
7
7
|
*
|
|
@@ -11,7 +11,13 @@ import type { Invokable } from "../../utilities/_module-exports.js";
|
|
|
11
11
|
export type BackoffPolicy = Invokable<[
|
|
12
12
|
attempt: number,
|
|
13
13
|
error: unknown
|
|
14
|
-
],
|
|
14
|
+
], TimeSpan>;
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
* IMPORT_PATH: `"@daiso-tech/core/async"`
|
|
18
|
+
* @group BackoffPolicies
|
|
19
|
+
*/
|
|
20
|
+
export type DynamicBackoffPolicy<TSettings> = TSettings | Invokable<[error: unknown], TSettings | undefined>;
|
|
15
21
|
/**
|
|
16
22
|
* @internal
|
|
17
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../../src/async/backof-policies/_shared.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../../src/async/backof-policies/_shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwBH;;GAEG;AACH,MAAM,UAAU,UAAU,CACtB,MAAc,EACd,KAAa,EACb,UAAwB;IAExB,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC;AAC/C,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Async
|
|
3
3
|
*/
|
|
4
4
|
import { TimeSpan } from "../../../utilities/_module-exports.js";
|
|
5
|
-
import { type BackoffPolicy } from "../../../async/backof-policies/_shared.js";
|
|
5
|
+
import { type BackoffPolicy, type DynamicBackoffPolicy } from "../../../async/backof-policies/_shared.js";
|
|
6
6
|
/**
|
|
7
7
|
*
|
|
8
8
|
* IMPORT_PATH: `"@daiso-tech/core/async"`
|
|
@@ -18,8 +18,8 @@ export type ConstantBackoffPolicySettings = {
|
|
|
18
18
|
*/
|
|
19
19
|
jitter?: number;
|
|
20
20
|
/**
|
|
21
|
-
* Used only for testing
|
|
22
21
|
* @internal
|
|
22
|
+
* Should only be used for testing
|
|
23
23
|
*/
|
|
24
24
|
_mathRandom?: () => number;
|
|
25
25
|
};
|
|
@@ -29,4 +29,4 @@ export type ConstantBackoffPolicySettings = {
|
|
|
29
29
|
* IMPORT_PATH: `"@daiso-tech/core/async"`
|
|
30
30
|
* @group BackoffPolicies
|
|
31
31
|
*/
|
|
32
|
-
export declare function constantBackoffPolicy(settings?: ConstantBackoffPolicySettings
|
|
32
|
+
export declare function constantBackoffPolicy(settings?: DynamicBackoffPolicy<ConstantBackoffPolicySettings>): BackoffPolicy;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Async
|
|
3
3
|
*/
|
|
4
|
-
import { TimeSpan } from "../../../utilities/_module-exports.js";
|
|
4
|
+
import { callInvokable, isInvokable, TimeSpan, } from "../../../utilities/_module-exports.js";
|
|
5
5
|
import { withJitter, } from "../../../async/backof-policies/_shared.js";
|
|
6
6
|
/**
|
|
7
7
|
* Constant backoff policy with jitter
|
|
@@ -11,15 +11,21 @@ import { withJitter, } from "../../../async/backof-policies/_shared.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export function constantBackoffPolicy(settings = {}) {
|
|
13
13
|
return (_attempt, error) => {
|
|
14
|
-
if (
|
|
15
|
-
|
|
14
|
+
if (isInvokable(settings)) {
|
|
15
|
+
const dynamicSettings = callInvokable(settings, error);
|
|
16
|
+
if (dynamicSettings === undefined) {
|
|
17
|
+
settings = {};
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
settings = dynamicSettings;
|
|
21
|
+
}
|
|
16
22
|
}
|
|
17
23
|
let { delay = 1000 } = settings;
|
|
18
24
|
if (delay instanceof TimeSpan) {
|
|
19
25
|
delay = delay.toMilliseconds();
|
|
20
26
|
}
|
|
21
27
|
const { jitter = 0.5, _mathRandom = Math.random } = settings;
|
|
22
|
-
return withJitter(jitter, delay, _mathRandom);
|
|
28
|
+
return TimeSpan.fromMilliseconds(withJitter(jitter, delay, _mathRandom));
|
|
23
29
|
};
|
|
24
30
|
}
|
|
25
31
|
//# sourceMappingURL=constant-backoff-policy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constant-backoff-policy.js","sourceRoot":"","sources":["../../../../src/async/backof-policies/constant-backoff-policy/constant-backoff-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"constant-backoff-policy.js","sourceRoot":"","sources":["../../../../src/async/backof-policies/constant-backoff-policy/constant-backoff-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,aAAa,EACb,WAAW,EACX,QAAQ,GACX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACH,UAAU,GAGb,MAAM,oCAAoC,CAAC;AAuB5C;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACjC,WAAgE,EAAE;IAElE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QACvB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChC,QAAQ,GAAG,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACJ,QAAQ,GAAG,eAAe,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;QAChC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC5B,KAAK,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC;QAC7D,OAAO,QAAQ,CAAC,gBAAgB,CAC5B,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CACzC,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|
package/dist/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Async
|
|
3
3
|
*/
|
|
4
4
|
import { TimeSpan } from "../../../utilities/_module-exports.js";
|
|
5
|
-
import type { BackoffPolicy } from "../../../async/backof-policies/_shared.js";
|
|
5
|
+
import type { BackoffPolicy, DynamicBackoffPolicy } from "../../../async/backof-policies/_shared.js";
|
|
6
6
|
/**
|
|
7
7
|
*
|
|
8
8
|
* IMPORT_PATH: `"@daiso-tech/core/async"`
|
|
@@ -26,8 +26,8 @@ export type ExponentialBackoffPolicySettings = {
|
|
|
26
26
|
*/
|
|
27
27
|
jitter?: number;
|
|
28
28
|
/**
|
|
29
|
-
* Used only for testing
|
|
30
29
|
* @internal
|
|
30
|
+
* Should only be used for testing
|
|
31
31
|
*/
|
|
32
32
|
_mathRandom?: () => number;
|
|
33
33
|
};
|
|
@@ -37,4 +37,4 @@ export type ExponentialBackoffPolicySettings = {
|
|
|
37
37
|
* IMPORT_PATH: `"@daiso-tech/core/async"`
|
|
38
38
|
* @group BackoffPolicies
|
|
39
39
|
*/
|
|
40
|
-
export declare function exponentialBackoffPolicy(settings?: ExponentialBackoffPolicySettings
|
|
40
|
+
export declare function exponentialBackoffPolicy(settings?: DynamicBackoffPolicy<ExponentialBackoffPolicySettings>): BackoffPolicy;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Async
|
|
3
3
|
*/
|
|
4
|
-
import { TimeSpan } from "../../../utilities/_module-exports.js";
|
|
4
|
+
import { callInvokable, isInvokable, TimeSpan, } from "../../../utilities/_module-exports.js";
|
|
5
5
|
import { withJitter } from "../../../async/backof-policies/_shared.js";
|
|
6
6
|
/**
|
|
7
7
|
* Exponential backoff policy with jitter
|
|
@@ -11,8 +11,14 @@ import { withJitter } from "../../../async/backof-policies/_shared.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export function exponentialBackoffPolicy(settings = {}) {
|
|
13
13
|
return (attempt, error) => {
|
|
14
|
-
if (
|
|
15
|
-
|
|
14
|
+
if (isInvokable(settings)) {
|
|
15
|
+
const dynamicSettings = callInvokable(settings, error);
|
|
16
|
+
if (dynamicSettings === undefined) {
|
|
17
|
+
settings = {};
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
settings = dynamicSettings;
|
|
21
|
+
}
|
|
16
22
|
}
|
|
17
23
|
let { maxDelay = 60_000, minDelay = 1_000 } = settings;
|
|
18
24
|
if (maxDelay instanceof TimeSpan) {
|
|
@@ -23,7 +29,7 @@ export function exponentialBackoffPolicy(settings = {}) {
|
|
|
23
29
|
}
|
|
24
30
|
const { multiplier = 2, jitter = 0.5, _mathRandom = Math.random, } = settings;
|
|
25
31
|
const exponential = Math.min(maxDelay, minDelay * Math.pow(multiplier, attempt));
|
|
26
|
-
return withJitter(jitter, exponential, _mathRandom);
|
|
32
|
+
return TimeSpan.fromMilliseconds(withJitter(jitter, exponential, _mathRandom));
|
|
27
33
|
};
|
|
28
34
|
}
|
|
29
35
|
//# sourceMappingURL=exponential-backoff-policy.js.map
|
package/dist/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exponential-backoff-policy.js","sourceRoot":"","sources":["../../../../src/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"exponential-backoff-policy.js","sourceRoot":"","sources":["../../../../src/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,aAAa,EACb,WAAW,EACX,QAAQ,GACX,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AA+BhE;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACpC,WAAmE,EAAE;IAErE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACtB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChC,QAAQ,GAAG,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACJ,QAAQ,GAAG,eAAe,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC;QACvD,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YAC/B,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YAC/B,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;QACD,MAAM,EACF,UAAU,GAAG,CAAC,EACd,MAAM,GAAG,GAAG,EACZ,WAAW,GAAG,IAAI,CAAC,MAAM,GAC5B,GAAG,QAAQ,CAAC;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CACxB,QAAQ,EACR,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAC3C,CAAC;QACF,OAAO,QAAQ,CAAC,gBAAgB,CAC5B,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAC/C,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Async
|
|
3
3
|
*/
|
|
4
4
|
import { TimeSpan } from "../../../utilities/_module-exports.js";
|
|
5
|
-
import type { BackoffPolicy } from "../../../async/backof-policies/_shared.js";
|
|
5
|
+
import type { BackoffPolicy, DynamicBackoffPolicy } from "../../../async/backof-policies/_shared.js";
|
|
6
6
|
/**
|
|
7
7
|
*
|
|
8
8
|
* IMPORT_PATH: `"@daiso-tech/core/async"`
|
|
@@ -22,8 +22,8 @@ export type LinearBackoffPolicySettings = {
|
|
|
22
22
|
*/
|
|
23
23
|
jitter?: number;
|
|
24
24
|
/**
|
|
25
|
-
* Used only for testing
|
|
26
25
|
* @internal
|
|
26
|
+
* Should only be used for testing
|
|
27
27
|
*/
|
|
28
28
|
_mathRandom?: () => number;
|
|
29
29
|
};
|
|
@@ -33,4 +33,4 @@ export type LinearBackoffPolicySettings = {
|
|
|
33
33
|
* IMPORT_PATH: `"@daiso-tech/core/async"`
|
|
34
34
|
* @group BackoffPolicies
|
|
35
35
|
*/
|
|
36
|
-
export declare function linearBackoffPolicy(settings?: LinearBackoffPolicySettings
|
|
36
|
+
export declare function linearBackoffPolicy(settings?: DynamicBackoffPolicy<LinearBackoffPolicySettings>): BackoffPolicy;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Async
|
|
3
3
|
*/
|
|
4
|
-
import { TimeSpan } from "../../../utilities/_module-exports.js";
|
|
4
|
+
import { callInvokable, isInvokable, TimeSpan, } from "../../../utilities/_module-exports.js";
|
|
5
5
|
import { withJitter } from "../../../async/backof-policies/_shared.js";
|
|
6
6
|
/**
|
|
7
7
|
* Linear backoff policy with jitter
|
|
@@ -11,8 +11,14 @@ import { withJitter } from "../../../async/backof-policies/_shared.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export function linearBackoffPolicy(settings = {}) {
|
|
13
13
|
return (attempt, error) => {
|
|
14
|
-
if (
|
|
15
|
-
|
|
14
|
+
if (isInvokable(settings)) {
|
|
15
|
+
const dynamicSettings = callInvokable(settings, error);
|
|
16
|
+
if (dynamicSettings === undefined) {
|
|
17
|
+
settings = {};
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
settings = dynamicSettings;
|
|
21
|
+
}
|
|
16
22
|
}
|
|
17
23
|
let { maxDelay = 6000, minDelay = 1_000 } = settings;
|
|
18
24
|
if (maxDelay instanceof TimeSpan) {
|
|
@@ -23,7 +29,7 @@ export function linearBackoffPolicy(settings = {}) {
|
|
|
23
29
|
}
|
|
24
30
|
const { jitter = 0.5, _mathRandom = Math.random } = settings;
|
|
25
31
|
const linear = Math.min(maxDelay, minDelay * attempt);
|
|
26
|
-
return withJitter(jitter, linear, _mathRandom);
|
|
32
|
+
return TimeSpan.fromMilliseconds(withJitter(jitter, linear, _mathRandom));
|
|
27
33
|
};
|
|
28
34
|
}
|
|
29
35
|
//# sourceMappingURL=linear-backoff-policy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear-backoff-policy.js","sourceRoot":"","sources":["../../../../src/async/backof-policies/linear-backoff-policy/linear-backoff-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"linear-backoff-policy.js","sourceRoot":"","sources":["../../../../src/async/backof-policies/linear-backoff-policy/linear-backoff-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,aAAa,EACb,WAAW,EACX,QAAQ,GACX,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AA2BhE;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAC/B,WAA8D,EAAE;IAEhE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACtB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChC,QAAQ,GAAG,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACJ,QAAQ,GAAG,eAAe,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC;QACrD,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YAC/B,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YAC/B,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;QACD,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,gBAAgB,CAC5B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAC1C,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Async
|
|
3
3
|
*/
|
|
4
4
|
import { TimeSpan } from "../../../utilities/_module-exports.js";
|
|
5
|
-
import type { BackoffPolicy } from "../../../async/backof-policies/_shared.js";
|
|
5
|
+
import type { BackoffPolicy, DynamicBackoffPolicy } from "../../../async/backof-policies/_shared.js";
|
|
6
6
|
/**
|
|
7
7
|
*
|
|
8
8
|
* IMPORT_PATH: `"@daiso-tech/core/async"`
|
|
@@ -26,8 +26,8 @@ export type PolynomialBackoffPolicySettings = {
|
|
|
26
26
|
*/
|
|
27
27
|
jitter?: number;
|
|
28
28
|
/**
|
|
29
|
-
* Used only for testing
|
|
30
29
|
* @internal
|
|
30
|
+
* Should only be used for testing
|
|
31
31
|
*/
|
|
32
32
|
_mathRandom?: () => number;
|
|
33
33
|
};
|
|
@@ -37,4 +37,4 @@ export type PolynomialBackoffPolicySettings = {
|
|
|
37
37
|
* IMPORT_PATH: `"@daiso-tech/core/async"`
|
|
38
38
|
* @group BackoffPolicies
|
|
39
39
|
*/
|
|
40
|
-
export declare function polynomialBackoffPolicy(settings?: PolynomialBackoffPolicySettings
|
|
40
|
+
export declare function polynomialBackoffPolicy(settings?: DynamicBackoffPolicy<PolynomialBackoffPolicySettings>): BackoffPolicy;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Async
|
|
3
3
|
*/
|
|
4
|
-
import { TimeSpan } from "../../../utilities/_module-exports.js";
|
|
4
|
+
import { callInvokable, isInvokable, TimeSpan, } from "../../../utilities/_module-exports.js";
|
|
5
5
|
import { withJitter } from "../../../async/backof-policies/_shared.js";
|
|
6
6
|
/**
|
|
7
7
|
* Polynomial backoff policy with jitter
|
|
@@ -11,8 +11,14 @@ import { withJitter } from "../../../async/backof-policies/_shared.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export function polynomialBackoffPolicy(settings = {}) {
|
|
13
13
|
return (attempt, error) => {
|
|
14
|
-
if (
|
|
15
|
-
|
|
14
|
+
if (isInvokable(settings)) {
|
|
15
|
+
const dynamicSettings = callInvokable(settings, error);
|
|
16
|
+
if (dynamicSettings === undefined) {
|
|
17
|
+
settings = {};
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
settings = dynamicSettings;
|
|
21
|
+
}
|
|
16
22
|
}
|
|
17
23
|
let { maxDelay = 6000, minDelay = 1_000 } = settings;
|
|
18
24
|
if (maxDelay instanceof TimeSpan) {
|
|
@@ -23,7 +29,7 @@ export function polynomialBackoffPolicy(settings = {}) {
|
|
|
23
29
|
}
|
|
24
30
|
const { degree = 2, jitter = 0.5, _mathRandom = Math.random, } = settings;
|
|
25
31
|
const polynomial = Math.min(maxDelay, minDelay * Math.pow(attempt, degree));
|
|
26
|
-
return withJitter(jitter, polynomial, _mathRandom);
|
|
32
|
+
return TimeSpan.fromMilliseconds(withJitter(jitter, polynomial, _mathRandom));
|
|
27
33
|
};
|
|
28
34
|
}
|
|
29
35
|
//# sourceMappingURL=polynomial-backoff-policy.js.map
|
package/dist/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polynomial-backoff-policy.js","sourceRoot":"","sources":["../../../../src/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"polynomial-backoff-policy.js","sourceRoot":"","sources":["../../../../src/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,aAAa,EACb,WAAW,EACX,QAAQ,GACX,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AA+BhE;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACnC,WAAkE,EAAE;IAEpE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACtB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChC,QAAQ,GAAG,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACJ,QAAQ,GAAG,eAAe,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC;QACrD,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YAC/B,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YAC/B,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;QACD,MAAM,EACF,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,GAAG,EACZ,WAAW,GAAG,IAAI,CAAC,MAAM,GAC5B,GAAG,QAAQ,CAAC;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACvB,QAAQ,EACR,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CACvC,CAAC;QACF,OAAO,QAAQ,CAAC,gBAAgB,CAC5B,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAC9C,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -28,7 +28,7 @@ export type OnFallback<TParameters extends unknown[] = unknown[], TFallbackValue
|
|
|
28
28
|
*/
|
|
29
29
|
export type FallbackCallbacks<TParameters extends unknown[] = unknown[], TReturn = unknown, TContext extends HookContext = HookContext> = {
|
|
30
30
|
/**
|
|
31
|
-
* Callback
|
|
31
|
+
* Callback {@link Invokable | `Invokable`} that will be called before fallback value is returned.
|
|
32
32
|
*/
|
|
33
33
|
onFallback?: OnFallback<TParameters, TReturn, TContext>;
|
|
34
34
|
};
|
|
@@ -47,7 +47,7 @@ export type FallbackSettings<TParameters extends unknown[] = unknown[], TReturn
|
|
|
47
47
|
* (_error: unknown) => true
|
|
48
48
|
* ```
|
|
49
49
|
*/
|
|
50
|
-
|
|
50
|
+
errorPolicy?: ErrorPolicy;
|
|
51
51
|
};
|
|
52
52
|
/**
|
|
53
53
|
* The `fallback` middleware adds fallback value when an error occurs.
|
|
@@ -29,13 +29,13 @@ import { callInvokable, resolveAsyncLazyable, } from "../../../utilities/_module
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
export function fallback(settings) {
|
|
32
|
-
const { fallbackValue,
|
|
32
|
+
const { fallbackValue, errorPolicy = () => true, onFallback = () => { }, } = settings;
|
|
33
33
|
return async (args, next, { context }) => {
|
|
34
34
|
try {
|
|
35
35
|
return await next(...args);
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
38
|
-
if (callInvokable(
|
|
38
|
+
if (callInvokable(errorPolicy, error)) {
|
|
39
39
|
const resolvedFallbackValue = await resolveAsyncLazyable(fallbackValue);
|
|
40
40
|
callInvokable(onFallback, {
|
|
41
41
|
error,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fallback.middleware.js","sourceRoot":"","sources":["../../../../src/async/middlewares/fallback/fallback.middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EACH,aAAa,EACb,oBAAoB,GAGvB,MAAM,gCAAgC,CAAC;AAqExC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,QAAQ,CAKpB,QAAmE;IAEnE,MAAM,EACF,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"fallback.middleware.js","sourceRoot":"","sources":["../../../../src/async/middlewares/fallback/fallback.middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EACH,aAAa,EACb,oBAAoB,GAGvB,MAAM,gCAAgC,CAAC;AAqExC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,QAAQ,CAKpB,QAAmE;IAEnE,MAAM,EACF,aAAa,EACb,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,EACxB,UAAU,GAAG,GAAG,EAAE,GAAE,CAAC,GACxB,GAAG,QAAQ,CAAC;IACb,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAoB,EAAE;QACvD,IAAI,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;gBACpC,MAAM,qBAAqB,GACvB,MAAM,oBAAoB,CAAC,aAAa,CAAC,CAAC;gBAC9C,aAAa,CAAC,UAAU,EAAE;oBACtB,KAAK;oBACL,aAAa,EAAE,qBAAqB;oBACpC,IAAI;oBACJ,OAAO;iBACV,CAAC,CAAC;gBACH,OAAO,qBAAqB,CAAC;YACjC,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -43,13 +43,13 @@ export type OnHedgeError<TParameters extends unknown[] = unknown[], TContext ext
|
|
|
43
43
|
*/
|
|
44
44
|
export type HedgingCallbacks<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = {
|
|
45
45
|
/**
|
|
46
|
-
* Callback
|
|
46
|
+
* Callback {@link Invokable | `Invokable`} that will be called before execution attempt.
|
|
47
47
|
*/
|
|
48
|
-
|
|
48
|
+
onHedgingAttempt?: OnHedgeAttempt<TParameters, TContext>;
|
|
49
49
|
/**
|
|
50
|
-
* Callback
|
|
50
|
+
* Callback {@link Invokable | `Invokable`} that will be called when the error occurs.
|
|
51
51
|
*/
|
|
52
|
-
|
|
52
|
+
onHedgingError?: OnHedgeError<TParameters, TContext>;
|
|
53
53
|
};
|
|
54
54
|
/**
|
|
55
55
|
*
|
|
@@ -64,10 +64,10 @@ export type Fallback<TParameters extends unknown[] = unknown[], TReturn = unknow
|
|
|
64
64
|
*/
|
|
65
65
|
export type NamedFallback<TParameters extends unknown[] = unknown[], TReturn = unknown> = {
|
|
66
66
|
/**
|
|
67
|
-
* You can assign a custom name to the fallback
|
|
67
|
+
* You can assign a custom name to the fallback {@link Invokable | `Invokable`} for easier identification in logs.
|
|
68
68
|
*/
|
|
69
69
|
name: string;
|
|
70
|
-
|
|
70
|
+
invokable: Fallback<TParameters, TReturn>;
|
|
71
71
|
};
|
|
72
72
|
/**
|
|
73
73
|
*
|
|
@@ -76,7 +76,7 @@ export type NamedFallback<TParameters extends unknown[] = unknown[], TReturn = u
|
|
|
76
76
|
*/
|
|
77
77
|
export type HedgingSettings<TParameters extends unknown[] = unknown[], TReturn = unknown, TContext extends HookContext = HookContext> = HedgingCallbacks<TParameters, TContext> & {
|
|
78
78
|
/**
|
|
79
|
-
* The maximum time to wait before automatically aborting the executing primary
|
|
79
|
+
* The maximum time to wait before automatically aborting the executing primary {@link Invokable | `Invokable`} or fallback {@link Invokable | `Invokable:s`}.
|
|
80
80
|
*
|
|
81
81
|
* @default
|
|
82
82
|
* ```ts
|
|
@@ -59,21 +59,21 @@ class ResolvedError extends Error {
|
|
|
59
59
|
* ```
|
|
60
60
|
*/
|
|
61
61
|
export function concurrentHedging(settings) {
|
|
62
|
-
const { waitTime = TimeSpan.fromSeconds(2), fallbacks,
|
|
62
|
+
const { waitTime = TimeSpan.fromSeconds(2), fallbacks, onHedgingAttempt = () => { }, onHedgingError = () => { }, } = settings;
|
|
63
63
|
const resolvedFallbacks = resolveOneOrMore(fallbacks).map((fallback, index) => {
|
|
64
64
|
if (isInvokable(fallback)) {
|
|
65
65
|
return {
|
|
66
66
|
name: `fallback-${String(index + 1)}`,
|
|
67
|
-
|
|
67
|
+
invokable: fallback,
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
return fallback;
|
|
71
71
|
});
|
|
72
72
|
return async (args, next, { context, abort, signal }) => {
|
|
73
|
-
function step1({ name,
|
|
73
|
+
function step1({ name, invokable }) {
|
|
74
74
|
return {
|
|
75
75
|
name,
|
|
76
|
-
promise: timeoutAndFail(abortAndFail((async () => callInvokable(
|
|
76
|
+
promise: timeoutAndFail(abortAndFail((async () => callInvokable(invokable, ...args))(), signal), waitTime, (error) => {
|
|
77
77
|
abort(error);
|
|
78
78
|
}, signal),
|
|
79
79
|
};
|
|
@@ -100,7 +100,7 @@ export function concurrentHedging(settings) {
|
|
|
100
100
|
const funcs = [
|
|
101
101
|
{
|
|
102
102
|
name: "__initial",
|
|
103
|
-
|
|
103
|
+
invokable: next,
|
|
104
104
|
},
|
|
105
105
|
...resolvedFallbacks,
|
|
106
106
|
];
|
|
@@ -108,7 +108,7 @@ export function concurrentHedging(settings) {
|
|
|
108
108
|
const errors = [];
|
|
109
109
|
const promiseResults = await Promise.all(promises);
|
|
110
110
|
for (const promiseResult of promiseResults) {
|
|
111
|
-
callInvokable(
|
|
111
|
+
callInvokable(onHedgingAttempt, {
|
|
112
112
|
args,
|
|
113
113
|
context,
|
|
114
114
|
name: promiseResult.name,
|
|
@@ -118,7 +118,7 @@ export function concurrentHedging(settings) {
|
|
|
118
118
|
return promiseResult.value;
|
|
119
119
|
}
|
|
120
120
|
else if (!(promiseResult.error instanceof ResolvedError)) {
|
|
121
|
-
callInvokable(
|
|
121
|
+
callInvokable(onHedgingError, {
|
|
122
122
|
args,
|
|
123
123
|
context,
|
|
124
124
|
error: promiseResult.error,
|
package/dist/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concurrent-hedging.middleware.js","sourceRoot":"","sources":["../../../../../src/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,QAAQ,GAGX,MAAM,gCAAgC,CAAC;AAMxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5E;;GAEG;AACH,MAAM,aAAc,SAAQ,KAAK;IAC7B,YAAY,OAAe,EAAE,KAAe;QACxC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;IACnC,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,UAAU,iBAAiB,CAK7B,QAAkE;IAElE,MAAM,EACF,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAClC,SAAS,EACT,
|
|
1
|
+
{"version":3,"file":"concurrent-hedging.middleware.js","sourceRoot":"","sources":["../../../../../src/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,12 +50,12 @@ import { timeoutAndFail } from "../../../../async/utilities/_module.js";
|
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
52
|
export function sequentialHedging(settings) {
|
|
53
|
-
const { waitTime = TimeSpan.fromSeconds(2), fallbacks,
|
|
53
|
+
const { waitTime = TimeSpan.fromSeconds(2), fallbacks, onHedgingAttempt = () => { }, onHedgingError = () => { }, } = settings;
|
|
54
54
|
const resolvedFallbacks = resolveOneOrMore(fallbacks).map((fallback, index) => {
|
|
55
55
|
if (isInvokable(fallback)) {
|
|
56
56
|
return {
|
|
57
57
|
name: `fallback-${String(index + 1)}`,
|
|
58
|
-
|
|
58
|
+
invokable: fallback,
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
return fallback;
|
|
@@ -65,13 +65,13 @@ export function sequentialHedging(settings) {
|
|
|
65
65
|
const funcs = [
|
|
66
66
|
{
|
|
67
67
|
name: "__initial",
|
|
68
|
-
|
|
68
|
+
invokable: next,
|
|
69
69
|
},
|
|
70
70
|
...resolvedFallbacks,
|
|
71
71
|
];
|
|
72
|
-
for (const { name, func } of funcs) {
|
|
72
|
+
for (const { name, invokable: func } of funcs) {
|
|
73
73
|
try {
|
|
74
|
-
callInvokable(
|
|
74
|
+
callInvokable(onHedgingAttempt, {
|
|
75
75
|
args,
|
|
76
76
|
context,
|
|
77
77
|
name,
|
|
@@ -84,7 +84,7 @@ export function sequentialHedging(settings) {
|
|
|
84
84
|
if (signal.aborted) {
|
|
85
85
|
break;
|
|
86
86
|
}
|
|
87
|
-
callInvokable(
|
|
87
|
+
callInvokable(onHedgingError, {
|
|
88
88
|
args,
|
|
89
89
|
context,
|
|
90
90
|
error,
|
package/dist/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequential-hedging.middleware.js","sourceRoot":"","sources":["../../../../../src/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,QAAQ,GAGX,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,UAAU,iBAAiB,CAK7B,QAAkE;IAElE,MAAM,EACF,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAClC,SAAS,EACT,
|
|
1
|
+
{"version":3,"file":"sequential-hedging.middleware.js","sourceRoot":"","sources":["../../../../../src/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,QAAQ,GAGX,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,UAAU,iBAAiB,CAK7B,QAAkE;IAElE,MAAM,EACF,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAClC,SAAS,EACT,gBAAgB,GAAG,GAAG,EAAE,GAAE,CAAC,EAC3B,cAAc,GAAG,GAAG,EAAE,GAAE,CAAC,GAC5B,GAAG,QAAQ,CAAC;IAEb,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,GAAG,CAEvD,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QAClB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,OAAO;gBACH,IAAI,EAAE,YAAY,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;gBACrC,SAAS,EAAE,QAAQ;aACtB,CAAC;QACN,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACpD,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG;YACV;gBACI,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,IAAI;aAClB;YACD,GAAG,iBAAiB;SACvB,CAAC;QACF,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACD,aAAa,CAAC,gBAAgB,EAAE;oBAC5B,IAAI;oBACJ,OAAO;oBACP,IAAI;iBACP,CAAC,CAAC;gBACH,OAAO,MAAM,cAAc,CACvB,CAAC,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,EAC5C,QAAQ,EACR,CAAC,KAAc,EAAE,EAAE;oBACf,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC,EACD,MAAM,CACT,CAAC;YACN,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACtB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM;gBACV,CAAC;gBACD,aAAa,CAAC,cAAc,EAAE;oBAC1B,IAAI;oBACJ,OAAO;oBACP,KAAK;oBACL,IAAI;iBACP,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;QAED,4DAA4D;QAC5D,MAAM,SAAS,GAAG,KAAK;aAClB,KAAK,CAAC,CAAC,CAAC;aACR,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,IAAI,iBAAiB,CACvB,wDAAwD,SAAS,EAAE,EACnE,MAAM,CACT,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
|