/** * @module SharedLock */ import { type IReadableContext } from "../../../../execution-context/contracts/_module.js"; import { type ISharedLockAdapter, type ISharedLockAdapterState, type SharedLockAcquireSettings } from "../../../../shared-lock/contracts/_module.js"; import { type TimeSpan } from "../../../../time-span/implementations/_module.js"; import { type IDeinitizable } from "../../../../utilities/_module.js"; /** * IMPORT_PATH: `"@daiso-tech/core/shared-lock/memory-shared-lock-adapter"` * @group Adapters */ export type MemorySharedWriterLockData = { owner: string; hasExpiration: true; timeoutId: string | number | NodeJS.Timeout; expiration: Date; } | { owner: string; hasExpiration: false; }; /** * IMPORT_PATH: `"@daiso-tech/core/shared-lock/memory-shared-lock-adapter"` * @group Adapters */ export type MemorySharedReaderSemaphoreData = { limit: number; slots: Map; }; /** * IMPORT_PATH: `"@daiso-tech/core/shared-lock/memory-shared-lock-adapter"` * @group Adapters */ export type MemorySharedLockData = { writerLock: MemorySharedWriterLockData | null; readerSemaphore: MemorySharedReaderSemaphoreData | null; }; /** * Note the `MemorySharedLockAdapter` is limited to single process usage and cannot be shared across multiple servers or different processes. * This adapter is meant for easily faking{@link ISharedLockFactory | `ISharedLockFactory`} for testing. * * IMPORT_PATH: `"@daiso-tech/core/shared-lock/memory-shared-lock-adapter"` * @group Adapters */ export declare class MemorySharedLockAdapter implements ISharedLockAdapter, IDeinitizable { private readonly map; /** * @example * ```ts * import { MemorySharedLockAdapter } from "@daiso-tech/core/shared-lock/memory-shared-lock-adapter"; * * const sharedLockAdapter = new MemorySharedLockAdapter(); * ``` * You can also provide an `Map`. * @example * ```ts * import { MemorySharedLockAdapter } from "@daiso-tech/core/shared-lock/memory-shared-lock-adapter"; * * const map = new Map(); * const sharedLockAdapter = new MemorySharedLockAdapter(map); * ``` */ constructor(map?: Map); /** * Removes all in-memory shared-lock data. */ deInit(): Promise; acquireWriter(key: string, lockId: string, ttl: TimeSpan | null, _context: IReadableContext): Promise; releaseWriter(key: string, lockId: string, _context: IReadableContext): Promise; private _forceReleaseWriter; forceReleaseWriter(key: string, context: IReadableContext): Promise; refreshWriter(key: string, lockId: string, ttl: TimeSpan, _context: IReadableContext): Promise; acquireReader(settings: SharedLockAcquireSettings): Promise; releaseReader(key: string, lockId: string, _context: IReadableContext): Promise; private _forceReleaseAllReaders; forceReleaseAllReaders(key: string, context: IReadableContext): Promise; refreshReader(key: string, lockId: string, ttl: TimeSpan, _context: IReadableContext): Promise; forceRelease(key: string, context: IReadableContext): Promise; private static extractReaderState; private static extractWriterState_; private static extractActiveWriterState; getState(key: string, _context: IReadableContext): Promise; }