UNPKG

@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.

80 lines (79 loc) 2.95 kB
/** * @module SharedLock */ import { type IDeinitizable } from "../../../../utilities/_module-exports.js"; import type { ISharedLockAdapter, ISharedLockAdapterState, SharedLockAcquireSettings } from "../../../../shared-lock/contracts/_module-exports.js"; import type { TimeSpan } from "../../../../time-span/implementations/_module-exports.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<string, { timeoutId: string | number | NodeJS.Timeout | null; expiration: Date | null; }>; }; /** * * 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 to be used 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<any, any>(); * const sharedLockAdapter = new MemorySharedLockAdapter(map); * ``` */ constructor(map?: Map<string, MemorySharedLockData>); deInit(): Promise<void>; acquireWriter(key: string, lockId: string, ttl: TimeSpan | null): Promise<boolean>; releaseWriter(key: string, lockId: string): Promise<boolean>; forceReleaseWriter(key: string): Promise<boolean>; refreshWriter(key: string, lockId: string, ttl: TimeSpan): Promise<boolean>; acquireReader(settings: SharedLockAcquireSettings): Promise<boolean>; releaseReader(key: string, lockId: string): Promise<boolean>; forceReleaseAllReaders(key: string): Promise<boolean>; refreshReader(key: string, lockId: string, ttl: TimeSpan): Promise<boolean>; forceRelease(key: string): Promise<boolean>; getState(key: string): Promise<ISharedLockAdapterState | null>; }