@daiso-tech/core 0.37.3 → 0.39.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 +5 -1
- package/dist/async/_module-exports.d.ts +1 -1
- package/dist/async/_module-exports.js +1 -1
- package/dist/async/_module-exports.js.map +1 -1
- package/dist/async/async.errors.d.ts +0 -20
- package/dist/async/async.errors.js +0 -16
- package/dist/async/async.errors.js.map +1 -1
- package/dist/async/backof-policies/constant-backoff-policy/constant-backoff-policy.d.ts +1 -1
- package/dist/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.d.ts +2 -2
- package/dist/async/backof-policies/linear-backoff-policy/linear-backoff-policy.d.ts +1 -1
- package/dist/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.d.ts +2 -2
- package/dist/async/middlewares/_module.d.ts +0 -1
- package/dist/async/middlewares/_module.js +0 -1
- package/dist/async/middlewares/_module.js.map +1 -1
- package/dist/async/middlewares/bulkhead/bulkhead.middleware.d.ts +2 -2
- package/dist/async/middlewares/bulkhead/bulkhead.middleware.js +1 -1
- package/dist/async/middlewares/bulkhead/bulkhead.middleware.js.map +1 -1
- package/dist/async/middlewares/fallback/_module.d.ts +1 -0
- package/dist/async/middlewares/fallback/_module.js +1 -0
- package/dist/async/middlewares/fallback/_module.js.map +1 -1
- package/dist/async/middlewares/fallback/fallback.middleware.d.ts +25 -49
- package/dist/async/middlewares/fallback/fallback.middleware.js +52 -14
- package/dist/async/middlewares/fallback/fallback.middleware.js.map +1 -1
- package/dist/async/middlewares/fallback/fallback.types.d.ts +42 -0
- package/dist/async/middlewares/fallback/fallback.types.js +6 -0
- package/dist/async/middlewares/fallback/fallback.types.js.map +1 -0
- package/dist/async/middlewares/hedging/_module.d.ts +2 -2
- package/dist/async/middlewares/hedging/_module.js +2 -2
- package/dist/async/middlewares/hedging/_module.js.map +1 -1
- package/dist/async/middlewares/hedging/{_shared.d.ts → hedging.types.d.ts} +37 -9
- package/dist/async/middlewares/hedging/hedging.types.js +6 -0
- package/dist/async/middlewares/hedging/hedging.types.js.map +1 -0
- package/dist/async/middlewares/hedging/{sequential-hedging/sequential-hedging.middleware.d.ts → sequential-hedging.middleware.d.ts} +3 -3
- package/dist/async/middlewares/hedging/sequential-hedging.middleware.js +133 -0
- package/dist/async/middlewares/hedging/sequential-hedging.middleware.js.map +1 -0
- package/dist/async/middlewares/observe/_module.d.ts +1 -0
- package/dist/async/middlewares/observe/_module.js +1 -0
- package/dist/async/middlewares/observe/_module.js.map +1 -1
- package/dist/async/middlewares/observe/observe.middleware.d.ts +37 -87
- package/dist/async/middlewares/observe/observe.middleware.js +53 -2
- package/dist/async/middlewares/observe/observe.middleware.js.map +1 -1
- package/dist/async/middlewares/observe/observe.types.d.ts +91 -0
- package/dist/async/middlewares/observe/observe.types.js +6 -0
- package/dist/async/middlewares/observe/observe.types.js.map +1 -0
- package/dist/async/middlewares/retry/_module.d.ts +1 -0
- package/dist/async/middlewares/retry/_module.js +1 -0
- package/dist/async/middlewares/retry/_module.js.map +1 -1
- package/dist/async/middlewares/retry/retry.middleware.d.ts +36 -86
- package/dist/async/middlewares/retry/retry.middleware.js +70 -22
- package/dist/async/middlewares/retry/retry.middleware.js.map +1 -1
- package/dist/async/middlewares/retry/retry.types.d.ts +77 -0
- package/dist/async/middlewares/retry/retry.types.js +7 -0
- package/dist/async/middlewares/retry/retry.types.js.map +1 -0
- package/dist/async/middlewares/timeout/_module.d.ts +1 -0
- package/dist/async/middlewares/timeout/_module.js +1 -0
- package/dist/async/middlewares/timeout/_module.js.map +1 -1
- package/dist/async/middlewares/timeout/timeout.middleware.d.ts +1 -47
- package/dist/async/middlewares/timeout/timeout.middleware.js +1 -1
- package/dist/async/middlewares/timeout/timeout.middleware.js.map +1 -1
- package/dist/async/middlewares/timeout/timeout.type.d.ts +51 -0
- package/dist/async/middlewares/timeout/timeout.type.js +6 -0
- package/dist/async/middlewares/timeout/timeout.type.js.map +1 -0
- package/dist/async/utilities/promise-queue/promise-queue.js +19 -8
- package/dist/async/utilities/promise-queue/promise-queue.js.map +1 -1
- package/dist/cache/contracts/cache.contract.d.ts +7 -7
- package/dist/cache/contracts/cache.errors.d.ts +3 -26
- package/dist/cache/contracts/cache.errors.js +0 -47
- package/dist/cache/contracts/cache.errors.js.map +1 -1
- package/dist/cache/implementations/adapters/kysely-cache-adapter/kysely-cache-adapter.d.ts +6 -5
- package/dist/cache/implementations/adapters/kysely-cache-adapter/kysely-cache-adapter.js +17 -13
- package/dist/cache/implementations/adapters/kysely-cache-adapter/kysely-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.d.ts +15 -3
- package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js +25 -9
- package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.d.ts +1 -1
- package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js +1 -1
- package/dist/cache/implementations/adapters/redis-cache-adapter/utilities.js +2 -1
- package/dist/cache/implementations/adapters/redis-cache-adapter/utilities.js.map +1 -1
- package/dist/cache/implementations/derivables/cache/cache.d.ts +2 -2
- package/dist/cache/implementations/derivables/cache/cache.js +1 -1
- package/dist/cache/implementations/derivables/cache/cache.js.map +1 -1
- package/dist/collection/contracts/async-collection.contract.d.ts +0 -1
- package/dist/collection/contracts/async-collection.contract.js +3 -1
- package/dist/collection/contracts/async-collection.contract.js.map +1 -1
- package/dist/collection/contracts/collection.contract.d.ts +0 -1
- package/dist/collection/contracts/collection.contract.js +3 -1
- package/dist/collection/contracts/collection.contract.js.map +1 -1
- package/dist/collection/contracts/collection.errors.d.ts +1 -26
- package/dist/collection/contracts/collection.errors.js +0 -55
- package/dist/collection/contracts/collection.errors.js.map +1 -1
- package/dist/collection/implementations/async-iterable-collection/_shared/async-split-iterable.js +1 -1
- package/dist/collection/implementations/async-iterable-collection/_shared/async-split-iterable.js.map +1 -1
- package/dist/collection/implementations/async-iterable-collection/_shared/async-zip-iterable.js +1 -1
- package/dist/collection/implementations/async-iterable-collection/_shared/async-zip-iterable.js.map +1 -1
- package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js +9 -6
- package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/_shared/split-iterable.js +1 -1
- package/dist/collection/implementations/iterable-collection/_shared/split-iterable.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/_shared/zip-iterable.js +1 -1
- package/dist/collection/implementations/iterable-collection/_shared/zip-iterable.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/iterable-collection.js +9 -6
- package/dist/collection/implementations/iterable-collection/iterable-collection.js.map +1 -1
- package/dist/collection/implementations/list-collection/list-collection.js +12 -9
- package/dist/collection/implementations/list-collection/list-collection.js.map +1 -1
- package/dist/event-bus/contracts/_module-exports.d.ts +0 -1
- package/dist/event-bus/contracts/_module-exports.js +0 -1
- package/dist/event-bus/contracts/_module-exports.js.map +1 -1
- package/dist/event-bus/contracts/event-bus.contract.d.ts +0 -6
- package/dist/event-bus/contracts/event-bus.contract.js +1 -7
- package/dist/event-bus/contracts/event-bus.contract.js.map +1 -1
- package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.d.ts +2 -2
- package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js +3 -2
- package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js.map +1 -1
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.d.ts +1 -1
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.js +6 -11
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
- package/dist/lock/contracts/database-lock-adapter.contract.d.ts +7 -5
- package/dist/lock/contracts/lock-adapter.contract.d.ts +5 -3
- package/dist/lock/contracts/lock.contract.d.ts +25 -41
- package/dist/lock/contracts/lock.errors.d.ts +5 -56
- package/dist/lock/contracts/lock.errors.js +1 -123
- package/dist/lock/contracts/lock.errors.js.map +1 -1
- package/dist/lock/contracts/lock.events.d.ts +3 -3
- package/dist/lock/contracts/lock.events.js +1 -1
- package/dist/lock/contracts/lock.events.js.map +1 -1
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.d.ts +16 -4
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js +11 -8
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.d.ts +17 -6
- package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js +9 -16
- package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.d.ts +1 -1
- package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js +3 -3
- package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/database-lock-adapter.d.ts +1 -1
- package/dist/lock/implementations/derivables/lock-provider/database-lock-adapter.js +3 -2
- package/dist/lock/implementations/derivables/lock-provider/database-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.d.ts +3 -3
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.js +2 -3
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js +4 -3
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-state.d.ts +8 -11
- package/dist/lock/implementations/derivables/lock-provider/lock-state.js +9 -26
- package/dist/lock/implementations/derivables/lock-provider/lock-state.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock.d.ts +11 -14
- package/dist/lock/implementations/derivables/lock-provider/lock.js +50 -26
- 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 +2 -2
- 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.js +43 -47
- package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js.map +1 -1
- package/dist/serde/implementations/derivables/serde.d.ts +22 -22
- package/dist/utilities/_module-exports.d.ts +1 -1
- package/dist/utilities/_module-exports.js +1 -1
- package/dist/utilities/_module-exports.js.map +1 -1
- package/dist/utilities/classes/hooks/async-hooks.d.ts +6 -4
- package/dist/utilities/classes/hooks/async-hooks.js +3 -1
- package/dist/utilities/classes/hooks/async-hooks.js.map +1 -1
- package/dist/utilities/classes/hooks/hooks.d.ts +1 -1
- package/dist/utilities/classes/hooks/hooks.js +1 -1
- package/dist/utilities/classes/hooks/hooks.js.map +1 -1
- package/dist/utilities/classes/kysely-table-name-transformer-plugin/kysely-table-name-transformer-plugin.js +2 -1
- package/dist/utilities/classes/kysely-table-name-transformer-plugin/kysely-table-name-transformer-plugin.js.map +1 -1
- package/dist/utilities/classes/namespace/namespace.d.ts +5 -5
- package/dist/utilities/classes/namespace/namespace.js +2 -2
- package/dist/utilities/classes/namespace/namespace.js.map +1 -1
- package/dist/utilities/classes/time-span/time-span.d.ts +10 -2
- package/dist/utilities/classes/time-span/time-span.js +10 -2
- package/dist/utilities/classes/time-span/time-span.js.map +1 -1
- package/dist/utilities/errors.d.ts +8 -0
- package/dist/utilities/errors.js +11 -0
- package/dist/utilities/errors.js.map +1 -1
- package/dist/utilities/functions/{_module-exports.d.ts → _module.d.ts} +6 -1
- package/dist/utilities/functions/{_module-exports.js → _module.js} +7 -2
- package/dist/utilities/functions/_module.js.map +1 -0
- package/dist/utilities/functions/error-policy.d.ts +54 -0
- package/dist/utilities/functions/error-policy.js +63 -0
- package/dist/utilities/functions/error-policy.js.map +1 -0
- package/dist/utilities/functions/invokable.d.ts +57 -1
- package/dist/utilities/functions/invokable.js +3 -1
- package/dist/utilities/functions/invokable.js.map +1 -1
- package/dist/utilities/functions/is-class.d.ts +9 -0
- package/dist/utilities/functions/is-class.js +15 -0
- package/dist/utilities/functions/is-class.js.map +1 -0
- package/dist/utilities/functions/is-positive-nbr.d.ts +8 -0
- package/dist/utilities/functions/is-positive-nbr.js +19 -0
- package/dist/utilities/functions/is-positive-nbr.js.map +1 -0
- package/dist/utilities/functions/is-standard-schema.d.ts +2 -0
- package/dist/utilities/functions/is-standard-schema.js +5 -0
- package/dist/utilities/functions/is-standard-schema.js.map +1 -0
- package/dist/utilities/functions/lazy.d.ts +27 -1
- package/dist/utilities/functions/lazy.js.map +1 -1
- package/dist/utilities/functions/option.d.ts +32 -0
- package/dist/utilities/functions/option.js +25 -0
- package/dist/utilities/functions/option.js.map +1 -0
- package/dist/utilities/functions/resolve-one-or-more.d.ts +5 -1
- package/dist/utilities/functions/resolve-one-or-more.js.map +1 -1
- package/dist/utilities/functions/result.d.ts +81 -1
- package/dist/utilities/functions/result.js +46 -2
- package/dist/utilities/functions/result.js.map +1 -1
- package/dist/utilities/types/_module.d.ts +1 -7
- package/dist/utilities/types/_module.js +1 -7
- package/dist/utilities/types/_module.js.map +1 -1
- package/dist/utilities/types/any-class.type.d.ts +3 -0
- package/dist/utilities/types/any-class.type.js +2 -0
- package/dist/utilities/types/any-class.type.js.map +1 -0
- package/package.json +1 -1
- package/dist/async/middlewares/_shared.d.ts +0 -15
- package/dist/async/middlewares/_shared.js +0 -15
- package/dist/async/middlewares/_shared.js.map +0 -1
- package/dist/async/middlewares/hedging/_shared.js +0 -5
- package/dist/async/middlewares/hedging/_shared.js.map +0 -1
- package/dist/async/middlewares/hedging/concurrent-hedging/_module.d.ts +0 -1
- package/dist/async/middlewares/hedging/concurrent-hedging/_module.js +0 -2
- package/dist/async/middlewares/hedging/concurrent-hedging/_module.js.map +0 -1
- package/dist/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.d.ts +0 -51
- package/dist/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.js +0 -138
- package/dist/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.js.map +0 -1
- package/dist/async/middlewares/hedging/sequential-hedging/_module.d.ts +0 -1
- package/dist/async/middlewares/hedging/sequential-hedging/_module.js +0 -2
- package/dist/async/middlewares/hedging/sequential-hedging/_module.js.map +0 -1
- package/dist/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.js +0 -104
- package/dist/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.js.map +0 -1
- package/dist/event-bus/contracts/event-bus.errors.d.ts +0 -72
- package/dist/event-bus/contracts/event-bus.errors.js +0 -110
- package/dist/event-bus/contracts/event-bus.errors.js.map +0 -1
- package/dist/utilities/functions/_module-exports.js.map +0 -1
- package/dist/utilities/types/at-least-one.type.d.ts +0 -8
- package/dist/utilities/types/at-least-one.type.js +0 -5
- package/dist/utilities/types/at-least-one.type.js.map +0 -1
- package/dist/utilities/types/factory.type.d.ts +0 -44
- package/dist/utilities/types/factory.type.js +0 -5
- package/dist/utilities/types/factory.type.js.map +0 -1
- package/dist/utilities/types/invokable.type.d.ts +0 -20
- package/dist/utilities/types/invokable.type.js +0 -5
- package/dist/utilities/types/invokable.type.js.map +0 -1
- package/dist/utilities/types/items.type.d.ts +0 -8
- package/dist/utilities/types/items.type.js +0 -5
- package/dist/utilities/types/items.type.js.map +0 -1
- package/dist/utilities/types/lazy.type.d.ts +0 -31
- package/dist/utilities/types/lazy.type.js +0 -5
- package/dist/utilities/types/lazy.type.js.map +0 -1
- package/dist/utilities/types/one-or-more.type.d.ts +0 -8
- package/dist/utilities/types/one-or-more.type.js +0 -5
- package/dist/utilities/types/one-or-more.type.js.map +0 -1
- package/dist/utilities/types/result.type.d.ts +0 -18
- package/dist/utilities/types/result.type.js +0 -5
- package/dist/utilities/types/result.type.js.map +0 -1
|
@@ -1,49 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Lock
|
|
3
3
|
*/
|
|
4
|
-
import { type ISerializedError, type OneOrMore } from "../../utilities/_module-exports.js";
|
|
5
|
-
import type { ISerderRegister, ISerializable } from "../../serde/contracts/_module-exports.js";
|
|
6
4
|
/**
|
|
7
5
|
*
|
|
8
6
|
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
9
7
|
* @group Errors
|
|
10
8
|
*/
|
|
11
|
-
export declare class LockError extends Error
|
|
12
|
-
static deserialize(serializedError: ISerializedError): LockError;
|
|
9
|
+
export declare class LockError extends Error {
|
|
13
10
|
constructor(message: string, cause?: unknown);
|
|
14
|
-
serialize(): ISerializedError;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
19
|
-
* @group Errors
|
|
20
|
-
*/
|
|
21
|
-
export declare class UnexpectedLockError extends LockError implements ISerializable<ISerializedError> {
|
|
22
|
-
static deserialize(serializedError: ISerializedError): UnexpectedLockError;
|
|
23
|
-
constructor(message: string, cause?: unknown);
|
|
24
|
-
serialize(): ISerializedError;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* The error is thrown when an unexpected error occurs while acquiring a lock.
|
|
28
|
-
*
|
|
29
|
-
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
30
|
-
* @group Errors
|
|
31
|
-
*/
|
|
32
|
-
export declare class UnableToAquireLockError extends UnexpectedLockError implements ISerializable<ISerializedError> {
|
|
33
|
-
static deserialize(serializedError: ISerializedError): UnableToAquireLockError;
|
|
34
|
-
constructor(message: string, cause?: unknown);
|
|
35
|
-
serialize(): ISerializedError;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* The error is thrown when an unexpected error occurs while releasing a lock.
|
|
39
|
-
*
|
|
40
|
-
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
41
|
-
* @group Errors
|
|
42
|
-
*/
|
|
43
|
-
export declare class UnableToReleaseLockError extends UnexpectedLockError implements ISerializable<ISerializedError> {
|
|
44
|
-
static deserialize(serializedError: ISerializedError): UnableToReleaseLockError;
|
|
45
|
-
constructor(message: string, cause?: unknown);
|
|
46
|
-
serialize(): ISerializedError;
|
|
47
11
|
}
|
|
48
12
|
/**
|
|
49
13
|
* The error is thrown when trying to acquire a lock that is owned by a different owner.
|
|
@@ -51,10 +15,8 @@ export declare class UnableToReleaseLockError extends UnexpectedLockError implem
|
|
|
51
15
|
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
52
16
|
* @group Errors
|
|
53
17
|
*/
|
|
54
|
-
export declare class KeyAlreadyAcquiredLockError extends LockError
|
|
55
|
-
static deserialize(serializedError: ISerializedError): KeyAlreadyAcquiredLockError;
|
|
18
|
+
export declare class KeyAlreadyAcquiredLockError extends LockError {
|
|
56
19
|
constructor(message: string, cause?: unknown);
|
|
57
|
-
serialize(): ISerializedError;
|
|
58
20
|
}
|
|
59
21
|
/**
|
|
60
22
|
* The error is thrown when trying to release a lock that is owned by a different owner.
|
|
@@ -62,10 +24,8 @@ export declare class KeyAlreadyAcquiredLockError extends LockError implements IS
|
|
|
62
24
|
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
63
25
|
* @group Errors
|
|
64
26
|
*/
|
|
65
|
-
export declare class UnownedReleaseLockError extends LockError
|
|
66
|
-
static deserialize(serializedError: ISerializedError): UnownedReleaseLockError;
|
|
27
|
+
export declare class UnownedReleaseLockError extends LockError {
|
|
67
28
|
constructor(message: string, cause?: unknown);
|
|
68
|
-
serialize(): ISerializedError;
|
|
69
29
|
}
|
|
70
30
|
/**
|
|
71
31
|
* The error is thrown when trying to referesh a lock that is owned by a different owner.
|
|
@@ -73,10 +33,8 @@ export declare class UnownedReleaseLockError extends LockError implements ISeria
|
|
|
73
33
|
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
74
34
|
* @group Errors
|
|
75
35
|
*/
|
|
76
|
-
export declare class UnownedRefreshLockError extends LockError
|
|
77
|
-
static deserialize(serializedError: ISerializedError): UnownedRefreshLockError;
|
|
36
|
+
export declare class UnownedRefreshLockError extends LockError {
|
|
78
37
|
constructor(message: string, cause?: unknown);
|
|
79
|
-
serialize(): ISerializedError;
|
|
80
38
|
}
|
|
81
39
|
/**
|
|
82
40
|
*
|
|
@@ -85,16 +43,7 @@ export declare class UnownedRefreshLockError extends LockError implements ISeria
|
|
|
85
43
|
*/
|
|
86
44
|
export declare const LOCK_ERRORS: {
|
|
87
45
|
readonly Base: typeof LockError;
|
|
88
|
-
readonly Unexpected: typeof UnexpectedLockError;
|
|
89
|
-
readonly UnableToAquire: typeof UnableToAquireLockError;
|
|
90
|
-
readonly UnableToRelease: typeof UnableToReleaseLockError;
|
|
91
46
|
readonly KeyAlreadyAcquired: typeof KeyAlreadyAcquiredLockError;
|
|
92
47
|
readonly UnownedRelease: typeof UnownedReleaseLockError;
|
|
48
|
+
readonly UnownedRefresh: typeof UnownedRefreshLockError;
|
|
93
49
|
};
|
|
94
|
-
/**
|
|
95
|
-
* The `registerLockErrorsToSerde` function registers all {@link ILock | `ILock`} related errors with `IFlexibleSerde`, ensuring they will properly be serialized and deserialized.
|
|
96
|
-
*
|
|
97
|
-
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
98
|
-
* @group Errors
|
|
99
|
-
*/
|
|
100
|
-
export declare function registerLockErrorsToSerde(serde: OneOrMore<ISerderRegister>): void;
|
|
@@ -1,88 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Lock
|
|
3
3
|
*/
|
|
4
|
-
import { CORE, resolveOneOrMore, } from "../../utilities/_module-exports.js";
|
|
5
4
|
/**
|
|
6
5
|
*
|
|
7
6
|
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
8
7
|
* @group Errors
|
|
9
8
|
*/
|
|
10
9
|
export class LockError extends Error {
|
|
11
|
-
static deserialize(serializedError) {
|
|
12
|
-
return new LockError(serializedError.message, serializedError.cause);
|
|
13
|
-
}
|
|
14
|
-
constructor(message, cause) {
|
|
15
|
-
super(message, { cause });
|
|
16
|
-
}
|
|
17
|
-
serialize() {
|
|
18
|
-
return {
|
|
19
|
-
cause: this.cause,
|
|
20
|
-
message: this.message,
|
|
21
|
-
name: this.name,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
28
|
-
* @group Errors
|
|
29
|
-
*/
|
|
30
|
-
export class UnexpectedLockError extends LockError {
|
|
31
|
-
static deserialize(serializedError) {
|
|
32
|
-
return new UnexpectedLockError(serializedError.message, serializedError.cause);
|
|
33
|
-
}
|
|
34
|
-
constructor(message, cause) {
|
|
35
|
-
super(message, { cause });
|
|
36
|
-
}
|
|
37
|
-
serialize() {
|
|
38
|
-
return {
|
|
39
|
-
cause: this.cause,
|
|
40
|
-
message: this.message,
|
|
41
|
-
name: this.name,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* The error is thrown when an unexpected error occurs while acquiring a lock.
|
|
47
|
-
*
|
|
48
|
-
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
49
|
-
* @group Errors
|
|
50
|
-
*/
|
|
51
|
-
export class UnableToAquireLockError extends UnexpectedLockError {
|
|
52
|
-
static deserialize(serializedError) {
|
|
53
|
-
return new UnableToAquireLockError(serializedError.message, serializedError.cause);
|
|
54
|
-
}
|
|
55
|
-
constructor(message, cause) {
|
|
56
|
-
super(message, { cause });
|
|
57
|
-
}
|
|
58
|
-
serialize() {
|
|
59
|
-
return {
|
|
60
|
-
cause: this.cause,
|
|
61
|
-
message: this.message,
|
|
62
|
-
name: this.name,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* The error is thrown when an unexpected error occurs while releasing a lock.
|
|
68
|
-
*
|
|
69
|
-
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
70
|
-
* @group Errors
|
|
71
|
-
*/
|
|
72
|
-
export class UnableToReleaseLockError extends UnexpectedLockError {
|
|
73
|
-
static deserialize(serializedError) {
|
|
74
|
-
return new UnableToReleaseLockError(serializedError.message, serializedError.cause);
|
|
75
|
-
}
|
|
76
10
|
constructor(message, cause) {
|
|
77
11
|
super(message, { cause });
|
|
78
12
|
}
|
|
79
|
-
serialize() {
|
|
80
|
-
return {
|
|
81
|
-
cause: this.cause,
|
|
82
|
-
message: this.message,
|
|
83
|
-
name: this.name,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
13
|
}
|
|
87
14
|
/**
|
|
88
15
|
* The error is thrown when trying to acquire a lock that is owned by a different owner.
|
|
@@ -91,19 +18,9 @@ export class UnableToReleaseLockError extends UnexpectedLockError {
|
|
|
91
18
|
* @group Errors
|
|
92
19
|
*/
|
|
93
20
|
export class KeyAlreadyAcquiredLockError extends LockError {
|
|
94
|
-
static deserialize(serializedError) {
|
|
95
|
-
return new KeyAlreadyAcquiredLockError(serializedError.message, serializedError.cause);
|
|
96
|
-
}
|
|
97
21
|
constructor(message, cause) {
|
|
98
22
|
super(message, { cause });
|
|
99
23
|
}
|
|
100
|
-
serialize() {
|
|
101
|
-
return {
|
|
102
|
-
cause: this.cause,
|
|
103
|
-
message: this.message,
|
|
104
|
-
name: this.name,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
24
|
}
|
|
108
25
|
/**
|
|
109
26
|
* The error is thrown when trying to release a lock that is owned by a different owner.
|
|
@@ -112,19 +29,9 @@ export class KeyAlreadyAcquiredLockError extends LockError {
|
|
|
112
29
|
* @group Errors
|
|
113
30
|
*/
|
|
114
31
|
export class UnownedReleaseLockError extends LockError {
|
|
115
|
-
static deserialize(serializedError) {
|
|
116
|
-
return new UnownedReleaseLockError(serializedError.message, serializedError.cause);
|
|
117
|
-
}
|
|
118
32
|
constructor(message, cause) {
|
|
119
33
|
super(message, { cause });
|
|
120
34
|
}
|
|
121
|
-
serialize() {
|
|
122
|
-
return {
|
|
123
|
-
cause: this.cause,
|
|
124
|
-
message: this.message,
|
|
125
|
-
name: this.name,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
35
|
}
|
|
129
36
|
/**
|
|
130
37
|
* The error is thrown when trying to referesh a lock that is owned by a different owner.
|
|
@@ -133,19 +40,9 @@ export class UnownedReleaseLockError extends LockError {
|
|
|
133
40
|
* @group Errors
|
|
134
41
|
*/
|
|
135
42
|
export class UnownedRefreshLockError extends LockError {
|
|
136
|
-
static deserialize(serializedError) {
|
|
137
|
-
return new UnownedRefreshLockError(serializedError.message, serializedError.cause);
|
|
138
|
-
}
|
|
139
43
|
constructor(message, cause) {
|
|
140
44
|
super(message, { cause });
|
|
141
45
|
}
|
|
142
|
-
serialize() {
|
|
143
|
-
return {
|
|
144
|
-
cause: this.cause,
|
|
145
|
-
message: this.message,
|
|
146
|
-
name: this.name,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
46
|
}
|
|
150
47
|
/**
|
|
151
48
|
*
|
|
@@ -154,27 +51,8 @@ export class UnownedRefreshLockError extends LockError {
|
|
|
154
51
|
*/
|
|
155
52
|
export const LOCK_ERRORS = {
|
|
156
53
|
Base: LockError,
|
|
157
|
-
Unexpected: UnexpectedLockError,
|
|
158
|
-
UnableToAquire: UnableToAquireLockError,
|
|
159
|
-
UnableToRelease: UnableToReleaseLockError,
|
|
160
54
|
KeyAlreadyAcquired: KeyAlreadyAcquiredLockError,
|
|
161
55
|
UnownedRelease: UnownedReleaseLockError,
|
|
56
|
+
UnownedRefresh: UnownedRefreshLockError,
|
|
162
57
|
};
|
|
163
|
-
/**
|
|
164
|
-
* The `registerLockErrorsToSerde` function registers all {@link ILock | `ILock`} related errors with `IFlexibleSerde`, ensuring they will properly be serialized and deserialized.
|
|
165
|
-
*
|
|
166
|
-
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
167
|
-
* @group Errors
|
|
168
|
-
*/
|
|
169
|
-
export function registerLockErrorsToSerde(serde) {
|
|
170
|
-
for (const serde_ of resolveOneOrMore(serde)) {
|
|
171
|
-
serde_
|
|
172
|
-
.registerClass(LockError, CORE)
|
|
173
|
-
.registerClass(UnexpectedLockError, CORE)
|
|
174
|
-
.registerClass(UnableToAquireLockError, CORE)
|
|
175
|
-
.registerClass(UnableToReleaseLockError, CORE)
|
|
176
|
-
.registerClass(KeyAlreadyAcquiredLockError, CORE)
|
|
177
|
-
.registerClass(UnownedReleaseLockError, CORE);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
58
|
//# sourceMappingURL=lock.errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.errors.js","sourceRoot":"","sources":["../../../src/lock/contracts/lock.errors.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"lock.errors.js","sourceRoot":"","sources":["../../../src/lock/contracts/lock.errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAChC,YAAY,OAAe,EAAE,KAAe;QACxC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9B,CAAC;CACJ;AAED;;;;;GAKG;AACH,MAAM,OAAO,2BAA4B,SAAQ,SAAS;IACtD,YAAY,OAAe,EAAE,KAAe;QACxC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9B,CAAC;CACJ;AAED;;;;;GAKG;AACH,MAAM,OAAO,uBAAwB,SAAQ,SAAS;IAClD,YAAY,OAAe,EAAE,KAAe;QACxC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9B,CAAC;CACJ;AAED;;;;;GAKG;AACH,MAAM,OAAO,uBAAwB,SAAQ,SAAS;IAClD,YAAY,OAAe,EAAE,KAAe;QACxC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9B,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,IAAI,EAAE,SAAS;IACf,kBAAkB,EAAE,2BAA2B;IAC/C,cAAc,EAAE,uBAAuB;IACvC,cAAc,EAAE,uBAAuB;CACjC,CAAC"}
|
|
@@ -58,7 +58,7 @@ export type UnownedRefreshTryLockEvent = {
|
|
|
58
58
|
* IMPORT_PATH: `"@daiso-tech/core/lock/contracts"`
|
|
59
59
|
* @group Events
|
|
60
60
|
*/
|
|
61
|
-
export type
|
|
61
|
+
export type UnavailableLockEvent = {
|
|
62
62
|
key: string;
|
|
63
63
|
owner: string;
|
|
64
64
|
};
|
|
@@ -94,7 +94,7 @@ export declare const LOCK_EVENTS: {
|
|
|
94
94
|
readonly RELEASED: "RELEASED";
|
|
95
95
|
readonly UNOWNED_RELEASE_TRY: "UNOWNED_RELEASE_TRY";
|
|
96
96
|
readonly UNOWNED_REFRESH_TRY: "UNOWNED_REFRESH_TRY";
|
|
97
|
-
readonly
|
|
97
|
+
readonly UNAVAILABLE: "UNAVAILABLE";
|
|
98
98
|
readonly FORCE_RELEASED: "FORCE_RELEASED";
|
|
99
99
|
readonly REFRESHED: "REFRESHED";
|
|
100
100
|
readonly UNEXPECTED_ERROR: "UNEXPECTED_ERROR";
|
|
@@ -109,7 +109,7 @@ export type LockEventMap = {
|
|
|
109
109
|
[LOCK_EVENTS.RELEASED]: ReleasedLockEvent;
|
|
110
110
|
[LOCK_EVENTS.UNOWNED_RELEASE_TRY]: UnownedReleaseTryLockEvent;
|
|
111
111
|
[LOCK_EVENTS.UNOWNED_REFRESH_TRY]: UnownedRefreshTryLockEvent;
|
|
112
|
-
[LOCK_EVENTS.
|
|
112
|
+
[LOCK_EVENTS.UNAVAILABLE]: UnavailableLockEvent;
|
|
113
113
|
[LOCK_EVENTS.FORCE_RELEASED]: ForceReleasedLockEvent;
|
|
114
114
|
[LOCK_EVENTS.REFRESHED]: RefreshedLockEvent;
|
|
115
115
|
[LOCK_EVENTS.UNEXPECTED_ERROR]: UnexpectedErrorLockEvent;
|
|
@@ -11,7 +11,7 @@ export const LOCK_EVENTS = {
|
|
|
11
11
|
RELEASED: "RELEASED",
|
|
12
12
|
UNOWNED_RELEASE_TRY: "UNOWNED_RELEASE_TRY",
|
|
13
13
|
UNOWNED_REFRESH_TRY: "UNOWNED_REFRESH_TRY",
|
|
14
|
-
|
|
14
|
+
UNAVAILABLE: "UNAVAILABLE",
|
|
15
15
|
FORCE_RELEASED: "FORCE_RELEASED",
|
|
16
16
|
REFRESHED: "REFRESHED",
|
|
17
17
|
UNEXPECTED_ERROR: "UNEXPECTED_ERROR",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.events.js","sourceRoot":"","sources":["../../../src/lock/contracts/lock.events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgGH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAC1C,
|
|
1
|
+
{"version":3,"file":"lock.events.js","sourceRoot":"","sources":["../../../src/lock/contracts/lock.events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgGH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAC1C,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,kBAAkB;CAC9B,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { type IDeinitizable, type IInitizable, type IPrunable, TimeSpan } from "
|
|
|
9
9
|
* IMPORT_PATH: `"@daiso-tech/core/lock/adapters"`
|
|
10
10
|
* @group Adapters
|
|
11
11
|
*/
|
|
12
|
-
type KyselyLockAdapterTable = {
|
|
12
|
+
export type KyselyLockAdapterTable = {
|
|
13
13
|
key: string;
|
|
14
14
|
owner: string;
|
|
15
15
|
expiresAt: number | string | null;
|
|
@@ -19,7 +19,7 @@ type KyselyLockAdapterTable = {
|
|
|
19
19
|
* IMPORT_PATH: `"@daiso-tech/core/lock/adapters"`
|
|
20
20
|
* @group Adapters
|
|
21
21
|
*/
|
|
22
|
-
type KyselyLockAdapterTables = {
|
|
22
|
+
export type KyselyLockAdapterTables = {
|
|
23
23
|
lock: KyselyLockAdapterTable;
|
|
24
24
|
};
|
|
25
25
|
/**
|
|
@@ -27,12 +27,25 @@ type KyselyLockAdapterTables = {
|
|
|
27
27
|
* IMPORT_PATH: `"@daiso-tech/core/lock/adapters"`
|
|
28
28
|
* @group Adapters
|
|
29
29
|
*/
|
|
30
|
-
type KyselyLockAdapterSettings = {
|
|
30
|
+
export type KyselyLockAdapterSettings = {
|
|
31
31
|
kysely: Kysely<KyselyLockAdapterTables>;
|
|
32
|
+
/**
|
|
33
|
+
* @default
|
|
34
|
+
* ```ts
|
|
35
|
+
* TimeSpan.fromMinutes(1)
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
32
38
|
expiredKeysRemovalInterval?: TimeSpan;
|
|
39
|
+
/**
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
33
42
|
shouldRemoveExpiredKeys?: boolean;
|
|
34
43
|
};
|
|
35
44
|
/**
|
|
45
|
+
* To utilize the `KyselyLockAdapter`, you must install the [`"kysely"`](https://www.npmjs.com/package/kysely) package and configure a `Kysely` class instance.
|
|
46
|
+
*
|
|
47
|
+
* Note in order to use `KyselyLockAdapter` correctly, ensure you use a single, consistent database across all server instances.
|
|
48
|
+
* The adapter have been tested with `sqlite`, `postgres` and `mysql` databases.
|
|
36
49
|
*
|
|
37
50
|
* IMPORT_PATH: `"@daiso-tech/core/lock/adapters"`
|
|
38
51
|
* @group Adapters
|
|
@@ -69,4 +82,3 @@ export declare class KyselyLockAdapter implements IDatabaseLockAdapter, IDeiniti
|
|
|
69
82
|
refresh(key: string, owner: string, expiration: Date): Promise<number>;
|
|
70
83
|
find(key: string): Promise<ILockData | null>;
|
|
71
84
|
}
|
|
72
|
-
export {};
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { TimeSpan, } from "../../../../utilities/_module-exports.js";
|
|
5
5
|
/**
|
|
6
|
+
* To utilize the `KyselyLockAdapter`, you must install the [`"kysely"`](https://www.npmjs.com/package/kysely) package and configure a `Kysely` class instance.
|
|
7
|
+
*
|
|
8
|
+
* Note in order to use `KyselyLockAdapter` correctly, ensure you use a single, consistent database across all server instances.
|
|
9
|
+
* The adapter have been tested with `sqlite`, `postgres` and `mysql` databases.
|
|
6
10
|
*
|
|
7
11
|
* IMPORT_PATH: `"@daiso-tech/core/lock/adapters"`
|
|
8
12
|
* @group Adapters
|
|
@@ -39,7 +43,7 @@ export class KyselyLockAdapter {
|
|
|
39
43
|
if (this.shouldRemoveExpiredKeys && this.timeoutId !== null) {
|
|
40
44
|
clearTimeout(this.timeoutId);
|
|
41
45
|
}
|
|
42
|
-
// Should
|
|
46
|
+
// Should throw if the index does not exists thats why the try catch is used.
|
|
43
47
|
try {
|
|
44
48
|
await this.kysely.schema
|
|
45
49
|
.dropIndex("lock_expiresAt")
|
|
@@ -49,7 +53,7 @@ export class KyselyLockAdapter {
|
|
|
49
53
|
catch {
|
|
50
54
|
/* EMPTY */
|
|
51
55
|
}
|
|
52
|
-
// Should
|
|
56
|
+
// Should throw if the table does not exists thats why the try catch is used.
|
|
53
57
|
try {
|
|
54
58
|
await this.kysely.schema.dropTable("lock").execute();
|
|
55
59
|
}
|
|
@@ -58,20 +62,19 @@ export class KyselyLockAdapter {
|
|
|
58
62
|
}
|
|
59
63
|
}
|
|
60
64
|
async init() {
|
|
61
|
-
// Should
|
|
65
|
+
// Should throw if the table already exists thats why the try catch is used.
|
|
62
66
|
try {
|
|
63
67
|
await this.kysely.schema
|
|
64
68
|
.createTable("lock")
|
|
65
|
-
.ifNotExists()
|
|
66
69
|
.addColumn("key", "varchar(255)", (col) => col.primaryKey())
|
|
67
|
-
.addColumn("owner", "varchar(255)")
|
|
70
|
+
.addColumn("owner", "varchar(255)", (col) => col.notNull())
|
|
68
71
|
.addColumn("expiresAt", "bigint")
|
|
69
72
|
.execute();
|
|
70
73
|
}
|
|
71
74
|
catch {
|
|
72
75
|
/* EMPTY */
|
|
73
76
|
}
|
|
74
|
-
// Should
|
|
77
|
+
// Should throw if the index already exists thats why the try catch is used.
|
|
75
78
|
try {
|
|
76
79
|
await this.kysely.schema
|
|
77
80
|
.createIndex("lock_expiresAt")
|
|
@@ -83,7 +86,7 @@ export class KyselyLockAdapter {
|
|
|
83
86
|
/* EMPTY */
|
|
84
87
|
}
|
|
85
88
|
if (this.shouldRemoveExpiredKeys) {
|
|
86
|
-
this.timeoutId =
|
|
89
|
+
this.timeoutId = setInterval(() => {
|
|
87
90
|
void this.removeAllExpired();
|
|
88
91
|
}, this.expiredKeysRemovalInterval.toMilliseconds());
|
|
89
92
|
}
|
|
@@ -143,7 +146,7 @@ export class KyselyLockAdapter {
|
|
|
143
146
|
return null;
|
|
144
147
|
}
|
|
145
148
|
return {
|
|
146
|
-
expiration: row.expiresAt ? new Date(Number(row.expiresAt)) : null,
|
|
149
|
+
expiration: row.expiresAt !== null ? new Date(Number(row.expiresAt)) : null,
|
|
147
150
|
owner: row.owner,
|
|
148
151
|
};
|
|
149
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-lock-adapter.js","sourceRoot":"","sources":["../../../../../src/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAIH,QAAQ,GACX,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"kysely-lock-adapter.js","sourceRoot":"","sources":["../../../../../src/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Lock
|
|
3
3
|
*/
|
|
4
|
-
import { type IDeinitizable, type IInitizable
|
|
4
|
+
import { type IDeinitizable, type IInitizable } from "../../../../utilities/_module-exports.js";
|
|
5
5
|
import type { IDatabaseLockAdapter, ILockData } from "../../../../lock/contracts/_module-exports.js";
|
|
6
6
|
import type { CollectionOptions, Db } from "mongodb";
|
|
7
|
+
import { ObjectId } from "mongodb";
|
|
7
8
|
/**
|
|
8
9
|
*
|
|
9
10
|
* IMPORT_PATH: `"@daiso-tech/core/lock/adapters"`
|
|
@@ -12,20 +13,31 @@ import type { CollectionOptions, Db } from "mongodb";
|
|
|
12
13
|
export type MongodbLockAdapterSettings = {
|
|
13
14
|
database: Db;
|
|
14
15
|
/**
|
|
15
|
-
* @default
|
|
16
|
+
* @default "lock"
|
|
16
17
|
*/
|
|
17
18
|
collectionName?: string;
|
|
18
19
|
collectionSettings?: CollectionOptions;
|
|
19
20
|
};
|
|
20
21
|
/**
|
|
21
|
-
*
|
|
22
|
+
*
|
|
23
|
+
* IMPORT_PATH: `"@daiso-tech/core/lock/adapters"`
|
|
24
|
+
* @group Adapters
|
|
25
|
+
*/
|
|
26
|
+
export type MongodbLockDocument = {
|
|
27
|
+
_id: ObjectId;
|
|
28
|
+
key: string;
|
|
29
|
+
owner: string;
|
|
30
|
+
expiresAt: Date | null;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* To utilize the `MongodbLockAdapter`, you must install the [`"mongodb"`](https://www.npmjs.com/package/mongodb) package.
|
|
22
34
|
*
|
|
23
35
|
* Note in order to use `MongodbLockAdapter` correctly, ensure you use a single, consistent database across all server instances.
|
|
24
36
|
*
|
|
25
37
|
* IMPORT_PATH: `"@daiso-tech/core/lock/adapters"`
|
|
26
38
|
* @group Adapters
|
|
27
39
|
*/
|
|
28
|
-
export declare class MongodbLockAdapter implements IDatabaseLockAdapter, IDeinitizable, IInitizable
|
|
40
|
+
export declare class MongodbLockAdapter implements IDatabaseLockAdapter, IDeinitizable, IInitizable {
|
|
29
41
|
private readonly database;
|
|
30
42
|
private readonly collection;
|
|
31
43
|
private readonly collectionName;
|
|
@@ -44,8 +56,7 @@ export declare class MongodbLockAdapter implements IDatabaseLockAdapter, IDeinit
|
|
|
44
56
|
* await lockAdapter.init()
|
|
45
57
|
* ```
|
|
46
58
|
*/
|
|
47
|
-
constructor(
|
|
48
|
-
removeAllExpired(): Promise<void>;
|
|
59
|
+
constructor(settings: MongodbLockAdapterSettings);
|
|
49
60
|
/**
|
|
50
61
|
* Creates all related indexes.
|
|
51
62
|
* Note the `init` method needs to be called before using the adapter.
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Lock
|
|
3
3
|
*/
|
|
4
|
-
import {} from "../../../../utilities/_module-exports.js";
|
|
5
|
-
import { UnexpectedLockError } from "../../../../lock/contracts/_module-exports.js";
|
|
4
|
+
import { UnexpectedError, } from "../../../../utilities/_module-exports.js";
|
|
6
5
|
import { ObjectId } from "mongodb";
|
|
7
6
|
/**
|
|
8
|
-
* To utilize the `MongodbLockAdapter`, you must install the `"mongodb"` package.
|
|
7
|
+
* To utilize the `MongodbLockAdapter`, you must install the [`"mongodb"`](https://www.npmjs.com/package/mongodb) package.
|
|
9
8
|
*
|
|
10
9
|
* Note in order to use `MongodbLockAdapter` correctly, ensure you use a single, consistent database across all server instances.
|
|
11
10
|
*
|
|
@@ -31,18 +30,12 @@ export class MongodbLockAdapter {
|
|
|
31
30
|
* await lockAdapter.init()
|
|
32
31
|
* ```
|
|
33
32
|
*/
|
|
34
|
-
constructor(
|
|
33
|
+
constructor(settings) {
|
|
34
|
+
const { collectionName = "lock", collectionSettings, database, } = settings;
|
|
35
35
|
this.collectionName = collectionName;
|
|
36
36
|
this.database = database;
|
|
37
37
|
this.collection = database.collection(collectionName, collectionSettings);
|
|
38
38
|
}
|
|
39
|
-
async removeAllExpired() {
|
|
40
|
-
await this.collection.deleteMany({
|
|
41
|
-
expiresAt: {
|
|
42
|
-
$lte: new Date(),
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
39
|
/**
|
|
47
40
|
* Creates all related indexes.
|
|
48
41
|
* Note the `init` method needs to be called before using the adapter.
|
|
@@ -73,7 +66,7 @@ export class MongodbLockAdapter {
|
|
|
73
66
|
expiresAt: expiration,
|
|
74
67
|
});
|
|
75
68
|
if (!insertResult.acknowledged) {
|
|
76
|
-
throw new
|
|
69
|
+
throw new UnexpectedError("Mongodb insertion was not acknowledged");
|
|
77
70
|
}
|
|
78
71
|
}
|
|
79
72
|
async update(key, owner, expiration) {
|
|
@@ -98,7 +91,7 @@ export class MongodbLockAdapter {
|
|
|
98
91
|
},
|
|
99
92
|
});
|
|
100
93
|
if (!updateResult.acknowledged) {
|
|
101
|
-
throw new
|
|
94
|
+
throw new UnexpectedError("Mongodb update was not acknowledged");
|
|
102
95
|
}
|
|
103
96
|
return updateResult.modifiedCount; // > 0;
|
|
104
97
|
}
|
|
@@ -108,7 +101,7 @@ export class MongodbLockAdapter {
|
|
|
108
101
|
key,
|
|
109
102
|
});
|
|
110
103
|
if (!deleteResult.acknowledged) {
|
|
111
|
-
throw new
|
|
104
|
+
throw new UnexpectedError("Mongodb deletion was not acknowledged");
|
|
112
105
|
}
|
|
113
106
|
return;
|
|
114
107
|
}
|
|
@@ -117,7 +110,7 @@ export class MongodbLockAdapter {
|
|
|
117
110
|
owner,
|
|
118
111
|
});
|
|
119
112
|
if (!deleteResult.acknowledged) {
|
|
120
|
-
throw new
|
|
113
|
+
throw new UnexpectedError("Mongodb deletion was not acknowledged");
|
|
121
114
|
}
|
|
122
115
|
}
|
|
123
116
|
async refresh(key, owner, expiration) {
|
|
@@ -130,7 +123,7 @@ export class MongodbLockAdapter {
|
|
|
130
123
|
},
|
|
131
124
|
});
|
|
132
125
|
if (!updateResult.acknowledged) {
|
|
133
|
-
throw new
|
|
126
|
+
throw new UnexpectedError("Mongodb update was not acknowledged");
|
|
134
127
|
}
|
|
135
128
|
return updateResult.modifiedCount; // > 0;
|
|
136
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb-lock-adapter.js","sourceRoot":"","sources":["../../../../../src/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"mongodb-lock-adapter.js","sourceRoot":"","sources":["../../../../../src/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ declare module "ioredis" {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* To utilize the `RedisLockAdapter`, you must install the `"ioredis"` package.
|
|
16
|
+
* To utilize the `RedisLockAdapter`, you must install the [`"ioredis"`](https://www.npmjs.com/package/ioredis) package.
|
|
17
17
|
*
|
|
18
18
|
* Note in order to use `RedisLockAdapter` correctly, ensure you use a single, consistent database across all server instances.
|
|
19
19
|
*
|