LockProvider class can be derived from any ILockAdapter or IDatabaseLockAdapter.

Note the ILock instances created by the LockProvider class are serializable and deserializable, allowing them to be seamlessly transferred across different servers, processes, and databases. This can be done directly using IFlexibleSerde or indirectly through components that rely on IFlexibleSerde internally.

IMPORT_PATH: "@daiso-tech/core/lock/implementations/derivables"

Implements

Constructors

  • Parameters

    Returns LockProvider

    import type { IGroupableLockProvider } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

Methods

  • You can listen to different events of all locks created by LockProvider class instance.

    Refer to LockEvents, to se all events dispatched by LockProvider class instance. Refer to IEventListenable for details on how the method works.

    Type Parameters

    Parameters

    Returns LazyPromise<void>

    import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    const listener: Invokable<LockEvents> = event => {
    console.log(event);
    }
    await lockProvider.addListener(KeyAcquiredLockEvent, listener);
    await lockProvider.removeListener(KeyAcquiredLockEvent, listener);
    await lockProvider.create("a").acquire();
  • You can listen to different events of all locks created by LockProvider class instance.

    Refer to LockEvents, to se all events dispatched by LockProvider class instance. Refer to IEventListenable for details on how the method works.

    Type Parameters

    Parameters

    Returns LazyPromise<void>

    import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    const listener: Invokable<LockEvents> = event => {
    console.log(event);
    }
    await lockProvider.addListenerMany([KeyAcquiredLockEvent], listener);
    await lockProvider.removeListenerMany([KeyAcquiredLockEvent], listener);
    await lockProvider.create("a").acquire();
  • import type { IGroupableLockProvider } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";
    import { TimeSpan } from "@daiso-tech/core/utilities";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    // You can use the lock
    const lockA = lockProvider.create("a");

    // You can provide ttl
    const lockB = lockProvider.create("b", {
    ttl: TimeSpan.fromMinutes(2),
    });

    // You can provide a custom owner. By default the owner will be unique random value.
    const lockC = lockProvider.create("b", {
    owner: "user-1"
    });

    Parameters

    Returns ILock

  • Returns string

    import type { IGroupableLockProvider } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    // Will print "@global"
    console.log(lockProvider.getGroup());
  • You can listen to different events of all locks created by LockProvider class instance.

    Refer to LockEvents, to se all events dispatched by LockProvider class instance. Refer to IEventListenable for details on how the method works.

    Type Parameters

    Parameters

    Returns LazyPromise<void>

    import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    const listener: Invokable<LockEvents> = event => {
    console.log(event);
    }
    await lockProvider.listenOnce(KeyAcquiredLockEvent, listener);
    await lockProvider.create("a").acquire();
  • You can listen to different events of all locks created by LockProvider class instance.

    Refer to LockEvents, to se all events dispatched by LockProvider class instance. Refer to IEventListenable for details on how the method works.

    Type Parameters

    Parameters

    Returns LazyPromise<void>

    import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    const listener: Invokable<LockEvents> = event => {
    console.log(event);
    }
    await lockProvider.addListener(KeyAcquiredLockEvent, listener);
    await lockProvider.removeListener(KeyAcquiredLockEvent, listener);
    await lockProvider.create("a").acquire();
  • You can listen to different events of all locks created by LockProvider class instance.

    Refer to LockEvents, to se all events dispatched by LockProvider class instance. Refer to IEventListenable for details on how the method works.

    Type Parameters

    Parameters

    Returns LazyPromise<void>

    import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    const listener: Invokable<LockEvents> = event => {
    console.log(event);
    }
    await lockProvider.addListenerMany(KeyAcquiredLockEvent, listener);
    await lockProvider.removeListenerMany([KeyAcquiredLockEvent], listener);
    await lockProvider.create("a").acquire();
  • You can listen to different events of all locks created by LockProvider class instance.

    Refer to LockEvents, to se all events dispatched by LockProvider class instance. Refer to IEventListenable for details on how the method works.

    Type Parameters

    Parameters

    Returns LazyPromise<Unsubscribe>

    import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    const listener: Invokable<LockEvents> = event => {
    console.log(event);
    }
    const unsubscribe = await lockProvider.subscribe(KeyAcquiredLockEvent, listener);
    await lockProvider.create("a").acquire();
    await unsubscribe();
  • You can listen to different events of all locks created by LockProvider class instance.

    Refer to LockEvents, to se all events dispatched by LockProvider class instance. Refer to IEventListenable for details on how the method works.

    Type Parameters

    Parameters

    Returns LazyPromise<Unsubscribe>

    import { type IGroupableLockProvider, type LockEvents, KeyAcquiredLockEvent } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import type { Invokable} from "@daiso-tech/core/event-bus/contracts";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    const listener: Invokable<LockEvents> = event => {
    console.log(event);
    }
    const unsubscribe = await lockProvider.subscribeMany([KeyAcquiredLockEvent], listener);
    await lockProvider.create("a").acquire();
    await unsubscribe();
  • Parameters

    Returns ILockProvider

    import type { IGroupableLockProvider, ILockProvider } from "@daiso-tech/core/lock/contracts";
    import { LockProvider } from "@daiso-tech/core/lock/implementations/derivables";
    import { MemoryLockAdapter } from "@daiso-tech/core/lock/implementations/adapters";
    import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
    import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
    import { Serde } from "@daiso-tech/core/serde/implementations/derivables";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/implementations/adapters";

    const eventBus = new EventBus({
    adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
    });
    const serde = new Serde(SuperJsonSerdeAdapter);
    const lockProvider: IGroupableLockProvider = new LockProvider({
    serde,
    adapter: new MemoryLockAdapter({
    rootGroup: "@global"
    }),
    eventBus,
    });

    // Will print "@global"
    console.log(lockProvider.getGroup());

    const groupedLockProvider: ILockProvider = lockProvider.withGroup("company-1");

    // Will print "@global/company-1"
    console.log(groupedLockProvider.getGroup());