LockDB
LockDB is a cross-platform tool you can use to handle process/event locking and avoid race conditions. It is sometimes also known as a semaphore.
There are packages for Node.js/Browser/Bun/NPM, Deno, and you can also use it as a CLI.
It has no dependencies, and is very simple to use, with effectively 3 commands/actions/methods: lock('name')
, unlock('name')
, and check('name')
.
You can get your apiKey
at lockdb.com or connect LockDB
to your own server/API.
Usage (package)
Node/Browser/Bun/NPM
npm install --save-exact lockdb
const LockDB = require('lockdb'); // or import LockDB from 'lockdb';
const lock = new LockDB('service-id', { apiKey: 'api-key' });
// Check on a lock (optional)
const isReportLocked = await lock.check('report');
console.log(isReportLocked); // Outputs `false`
// Create a lock, returning if it was locked before
const wasReportLocked = await lock.lock('report');
console.log(isReportLocked); // Outputs `false`
// Unlock a lock, returning if it was locked before
const wasReportLockedBeforeUnlock = await lock.unlock('report');
console.log(wasReportLockedBeforeUnlock); // Outputs `true`
Deno
import LockDB from 'https://deno.land/x/lockdb@1.0.0/mod.ts';
const lock = new LockDB('service-id', { apiKey: 'api-key' });
// Check on a lock (optional)
const isReportLocked = await lock.check('report');
console.log(isReportLocked); // Outputs `false`
// Create a lock, returning if it was locked before
const wasReportLocked = await lock.lock('report');
console.log(isReportLocked); // Outputs `false`
// Unlock a lock, returning if it was locked before
const wasReportLockedBeforeUnlock = await lock.unlock('report');
console.log(wasReportLockedBeforeUnlock); // Outputs `true`
CLI
You can find binaries for your system in the latest release.
Here’s an example for Linux intel (x86_64), on downloading it with curl
and moving it to /usr/local/bin/
so it’s available globally as lockdb
:
# Download the binary from the latest release for your system and move it to `/usr/local/bin/`. Here's an example for most Linux OSes:
$ curl https://github.com/BrunoBernardino/lockdb/releases/latest/download/lockdb-linux-intel --output lockdb && sudo mv lockdb /usr/local/bin/
Then to use it, on any OS:
# Set ENV variables
$ export LOCKDB_SERVICE_ID="service-id"
$ export LOCKDB_API_KEY="api-key"
# Check on a lock
$ lockdb check report
false
# Create a lock, returning if it was locked before
$ lockdb lock report
false
# Unlock a lock, returning if it was locked before
$ lockdb unlock report
true
Development
Requires deno@1.36.0
(other versions will probably work).
$ make format
$ make test
# CLI
$ deno run --allow-net mock_server.ts
$ deno run --allow-net --allow-env=LOCKDB_SERVICE_ID,LOCKDB_API_KEY,LOCKDB_SERVER_URL main.ts check report --server-url="http://127.0.0.1:5678" --service-id="service-identifier" --api-key="api-key"
Publishing
After committing and pushing, just run make publish VERSION=x.y.z
. That will also trigger a new tag, build binaries, and a new draft release with them.