Skip to main content

Creating lock adapters

Implementing your custom ILockAdapter

In order to create an adapter you need to implement the ILockAdapter contract.

Testing your custom ILockAdapter

We provide a complete test suite to verify your event bus adapter implementation. Simply use the lockAdapterTestSuite function:

  • Preconfigured Vitest test cases
  • Standardized event bus behavior validation
  • Common edge case coverage

Usage example:

// filename: MyLockAdapter.test.ts

import { beforeEach, describe, expect, test } from "vitest";
import { lockAdapterTestSuite } from "@daiso-tech/core/lock/test-utilities";
import { MemoryLockAdapter } from "./MemoryLockAdapter.js";

describe("class: MyLockAdapter", () => {
lockAdapterTestSuite({
createAdapter: () => new MemoryLockAdapter(),
test,
beforeEach,
expect,
describe,
});
});

Implementing your custom IDatabaseLockAdapter

We provide an additional contract IDatabaseLockAdapter for building custom lock adapters tailored to databases.

Testing your custom IDatabaseLockAdapter

We provide a complete test suite to verify your event bus adapter implementation. Simply use the databaseLockAdapterTestSuite function:

  • Preconfigured Vitest test cases
  • Standardized event bus behavior validation
  • Common edge case coverage

Usage example:

import { beforeEach, describe, expect, test } from "vitest";
import { databaseLockAdapterTestSuite } from "@daiso-tech/core/lock/test-utilities";
import { MyDatabaseLockAdapter } from "./MyDatabaseLockAdapter.js";

describe("class: MyDatabaseLockAdapter", () => {
databaseLockAdapterTestSuite({
createAdapter: async () => {
return new MyDatabaseLockAdapter(),
},
test,
beforeEach,
expect,
describe,
});
});

Implementing your custom ILockProvider class

In some cases, you may need to implement a custom LockProvider class to optimize performance for your specific technology stack. You can then directly implement the ILockProvider contract.

Testing your custom ILockProvider class

We provide a complete test suite to verify your custom event bus class implementation. Simply use the lockProviderTestSuite function:

  • Preconfigured Vitest test cases
  • Standardized event bus behavior validation
  • Common edge case coverage

Usage example:

// filename: MyLockProvider.test.ts

import { beforeEach, describe, expect, test } from "vitest";
import { lockProviderTestSuite } from "@daiso-tech/core/lock/test-utilities";
import { MyLockProvider } from "./MyLockProvider.js";

describe("class: MyLockProvider", () => {
lockProviderTestSuite({
createLockProvider: () => new MyLockProvider(),
test,
beforeEach,
expect,
describe,
});
});