@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.
60 lines (59 loc) • 2.27 kB
TypeScript
/**
* @module SharedLock
*/
import { type IEventListenable } from "../../event-bus/contracts/_module.js";
import { type ISharedLock } from "../../shared-lock/contracts/shared-lock.contract.js";
import { type SharedLockEventMap } from "../../shared-lock/contracts/shared-lock.events.js";
import { type ITimeSpan } from "../../time-span/contracts/_module.js";
/**
* The `ISharedLockListenable` contract defines a way for listening {@link ISharedLock | `ISharedLock`} operations.
*
* IMPORT_PATH: `"@daiso-tech/core/shared-lock/contracts"`
* @group Contracts
*/
export type ISharedLockListenable = IEventListenable<SharedLockEventMap>;
/**
* Configuration settings for creating a shared lock instance through the factory.
*
* IMPORT_PATH: `"@daiso-tech/core/shared-lock/contracts"`
* @group Contracts
*/
export type SharedLockFactoryCreateSettings = {
/**
* Maximum number of concurrent readers that can hold a read lock simultaneously.
* This defines the semaphore limit for the reader component of the shared lock.
*/
limit: number;
/**
* Time-to-live (TTL) duration for the locks.
* When set, locks will automatically expire after this duration if not refreshed.
* Pass `null` to create locks without automatic expiration.
*/
ttl?: ITimeSpan | null;
/**
* Custom identifier for this shared-lock holder.
* Used to uniquely identify writer ownership and reader slot ownership.
* If not specified, a unique identifier will be automatically generated.
*/
lockId?: string;
};
/**
* IMPORT_PATH: `"@daiso-tech/core/shared-lock/contracts"`
* @group Contracts
*/
export type ISharedLockFactoryBase = {
/**
* The `create` method is used to create an instance of {@link ISharedLock | `ISharedLock`}.
*/
create(key: string, settings: SharedLockFactoryCreateSettings): ISharedLock;
};
/**
* The `ISharedLockFactory` contract defines a way for managing locks independent of the underlying technology.
* It comes with more convenient methods compared to `ISharedLockAdapter`.
*
* IMPORT_PATH: `"@daiso-tech/core/shared-lock/contracts"`
* @group Contracts
*/
export type ISharedLockFactory = ISharedLockFactoryBase & {
readonly events: ISharedLockListenable;
};