Files
CommunitySolidServer/src/util/locking/ExpiringResourceLocker.ts
Joachim Van Herwegen b59357ec30 feat: Update WrappedExpiringResourceLocker to new interface
Due to the new interface, it is now possible to throw an error
if there is a timeout which should make it easier
to find locking issues.
2021-01-22 11:34:51 +01:00

32 lines
1.5 KiB
TypeScript

import type { ResourceIdentifier } from '../../ldp/representation/ResourceIdentifier';
import type { ResourceLocker } from './ResourceLocker';
/**
* A {@link ResourceLocker} where the locks expire after a given time.
*/
export interface ExpiringResourceLocker extends ResourceLocker {
/**
* As {@link ResourceLocker.withReadLock} but the locked function gets called with a `maintainLock` callback function
* to reset the lock expiration every time it is called.
* The resulting promise will reject once the lock expires.
*
* @param identifier - Identifier of the resource that needs to be locked.
* @param whileLocked - A function to execute while the resource is locked.
* Receives a callback as input parameter to maintain the lock.
*/
withReadLock: <T>(identifier: ResourceIdentifier, whileLocked: (maintainLock: () => void) => T | Promise<T>)
=> Promise<T>;
/**
* As {@link ResourceLocker.withWriteLock} but the locked function gets called with a `maintainLock` callback function
* to reset the lock expiration every time it is called.
* The resulting promise will reject once the lock expires.
*
* @param identifier - Identifier of the resource that needs to be locked.
* @param whileLocked - A function to execute while the resource is locked.
* Receives a callback as input parameter to maintain the lock.
*/
withWriteLock: <T>(identifier: ResourceIdentifier, whileLocked: (maintainLock: () => void) => T | Promise<T>)
=> Promise<T>;
}