cross-process-lock
Version:
Cross-process file locking solution with lock-queue
70 lines (45 loc) • 2.87 kB
Markdown
# cross-process-lock





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<Function>` - 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<T>} callback` - the function to be executed
**Returns**: `Promise<T>` - 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.