@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
TypeScript
/**
* @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>;
}