@daiso-tech/core
Version:
The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.
89 lines (88 loc) • 3.21 kB
TypeScript
/**
* @module SharedLock
*/
import { type IEventDispatcher } from "../../../../event-bus/contracts/_module.js";
import { type IExecutionContext } from "../../../../execution-context/contracts/_module.js";
import { type Use } from "../../../../middleware/contracts/_module.js";
import { type IKey, type INamespace } from "../../../../namespace/contracts/_module.js";
import { type ISharedLock, type ISharedLockAdapter, type ISharedLockState, type SharedLockAdapterVariants, type SharedLockEventMap } from "../../../../shared-lock/contracts/_module.js";
import { type ITimeSpan } from "../../../../time-span/contracts/_module.js";
import { TimeSpan } from "../../../../time-span/implementations/_module.js";
import { type AsyncLazy, type WaitUntil } from "../../../../utilities/_module.js";
/**
* @internal
*/
export type ISerializedSharedLock = {
version: "1";
key: string;
lockId: string;
limit: number;
ttlInMs: number | null;
};
/**
* @internal
*/
export type SharedLockSettings = {
serdeTransformerName: string;
namespace: INamespace;
adapter: ISharedLockAdapter;
originalAdapter: SharedLockAdapterVariants;
eventDispatcher: IEventDispatcher<SharedLockEventMap>;
limit: number;
key: IKey;
lockId: string;
ttl: TimeSpan | null;
defaultRefreshTime: TimeSpan;
waitUntil: WaitUntil;
executionContext: IExecutionContext;
use: Use;
};
/**
* @internal
*/
export declare class SharedLock implements ISharedLock {
/**
* @internal
*/
static _serialize(deserializedValue: SharedLock): ISerializedSharedLock;
private readonly namespace;
private readonly adapter;
private readonly originalAdapter;
private readonly eventDispatcher;
private readonly _key;
private readonly lockId;
private _ttl;
private readonly defaultRefreshTime;
private readonly serdeTransformerName;
private readonly limit;
private readonly waitUntil;
private readonly executionContext;
private readonly use;
constructor(settings: SharedLockSettings);
_getNamespace(): INamespace;
_getSerdeTransformerName(): string;
_getAdapter(): SharedLockAdapterVariants;
runReaderOrFail<TValue = void>(asyncFn: AsyncLazy<TValue>): Promise<TValue>;
acquireReader(): Promise<boolean>;
acquireReaderOrFail(): Promise<void>;
releaseReader(): Promise<boolean>;
releaseReaderOrFail(): Promise<void>;
forceReleaseAllReaders(): Promise<boolean>;
refreshReader(ttl?: ITimeSpan): Promise<boolean>;
refreshReaderOrFail(ttl?: ITimeSpan): Promise<void>;
runWriterOrFail<TValue = void>(asyncFn: AsyncLazy<TValue>): Promise<TValue>;
acquireWriter(): Promise<boolean>;
acquireWriterOrFail(): Promise<void>;
releaseWriter(): Promise<boolean>;
releaseWriterOrFail(): Promise<void>;
forceReleaseWriter(): Promise<boolean>;
refreshWriter(ttl?: ITimeSpan): Promise<boolean>;
refreshWriterOrFail(ttl?: ITimeSpan): Promise<void>;
get key(): IKey;
get id(): string;
get ttl(): TimeSpan | null;
forceRelease(): Promise<boolean>;
private extractWriterState;
private extractReaderState;
getState(): Promise<ISharedLockState>;
}