@tslock/drizzle
v2.0.1
Published
TSLock SQL provider using Drizzle ORM
Readme
@tslock/drizzle
TSLock SQL provider via the Drizzle ORM.
A TSLock provider that runs the standard ShedLock insert-or-update SQL through Drizzle's db.execute() / db.run() APIs, sharing configuration and statement generation with @tslock/sql-support. Supports PostgreSQL, MySQL, and SQLite.
Installation
pnpm add @tslock/core @tslock/drizzle @tslock/sql-support drizzle-orm pg
# or mysql2 / better-sqlite3 instead of pgSetup
Create a shedlock table (same schema as the raw SQL provider — see @tslock/sql).
Usage
import { createLockConfig, DefaultLockingTaskExecutor } from '@tslock/core';
import { DrizzleLockProvider } from '@tslock/drizzle';
import { SqlConfiguration, DatabaseProduct } from '@tslock/sql-support';
import { drizzle } from 'drizzle-orm/node-postgres';
import { Pool } from 'pg';
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const db = drizzle(pool);
const provider = new DrizzleLockProvider(
db,
'postgresql',
new SqlConfiguration({ databaseProduct: DatabaseProduct.POSTGRES }),
);
const executor = new DefaultLockingTaskExecutor(provider);
await executor.executeWithLock(
() => runBatchJob(),
createLockConfig({ name: 'batch-job', lockAtMostFor: '30m' }),
);The second argument is the dialect name: 'postgresql' | 'mysql' | 'sqlite'. The third is a standard SqlConfiguration — see @tslock/sql-support for all options.
Integration tests
The shared storage and fuzz contracts run against an ephemeral PostgreSQL container:
pnpm --filter @tslock/drizzle test:integrationDocker is required for this suite.
Requirements
- Node.js >= 22
- Peer:
drizzle-orm+ a driver (pg,mysql2, orbetter-sqlite3)
License
Apache 2.0 — see LICENSE for details.
