Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/szikszail/cross-process-lock

Cross-process file locking solution with lock-queue
https://github.com/szikszail/cross-process-lock

cross-process-lock hacktoberfest lock unlock

Last synced: 19 days ago
JSON representation

Cross-process file locking solution with lock-queue

Awesome Lists containing this project

README

        

# cross-process-lock

![Downloads](https://img.shields.io/npm/dw/cross-process-lock?style=flat-square)
![Version@npm](https://img.shields.io/npm/v/cross-process-lock?label=version%40npm&style=flat-square)
![Version@git](https://img.shields.io/github/package-json/v/szikszail/cross-process-lock/master?label=version%40git&style=flat-square)
![CI](https://img.shields.io/github/actions/workflow/status/szikszail/cross-process-lock/ci.yml?branch=master&label=ci&style=flat-square)
![Docs](https://img.shields.io/github/actions/workflow/status/szikszail/cross-process-lock/docs.yml?branch=master&label=docs&style=flat-square)

Cross-process file locking solution with lock-queue

## Usage

``` javascript
const { lock } = require('cross-process-lock');
const { writeFileSync } = require('fs');
// create a lock for the given file
const unlock = await lock('file.txt')
// do smth with the file here
writeFileSync('file.txt', 'some content', 'utf8');
// unlock file with the received function
return unlock();
```

## API

### Lock

`lock(file[, options])` - creates a lock for the given file for the actual process

**Arguments**:

* `{string} file` - the path of the file needs to be locked
* `{lockOptions} options` - the options to use to lock file, e.g timeouts

**Returns**: `Promise` - resolved with `unlock` function in case of successful lock; rejected in case of file couldn't be lock in the given timeout

### Unlock

`unlock(file)` - deletes the lock for the given file for the actual process

**Arguments**:

* `{string} file` - the path of the file needs to be unlocked

**Returns**: `Promise` - resolved in case of successful unlock or rejected in case of any error

### WithLock

`withLock(file[, options], callback)` - executes the callback with locking before and unlocking after the execution

**Arguments**:
* `{string} file` - path of the file needs to be locked
* `{lockOptions} options` - the options to use to lock file, e.g timeouts
* `{() => Promise} callback` - the function to be executed

**Returns**: `Promise` - resolved/rejected with the result of the callback

### lockOptions

| Option | Description | Default |
| :--------------------- | :--------------------------------------------- | :--------: |
| `lockTimeout {number}` | timeout (ms) when locks automatically released | 20 minutes |
| `waitTimeout {number}` | timeout (ms) until lock waits to lock a file | 10 seconds |

## Debug

The package uses the [debug](https://www.npmjs.com/package/debug) NPM package with `cross-process-lock:PID` name, where `PID` is the process ID of the current process.

To enable debug logging, use for example the `DEBUG=cross-process-lock:*` environment variable, but for more information, check the documentation of the [debug](https://www.npmjs.com/package/debug) package.