eslint-seatbelt
Version:
Gradually tighten ESLint rules in your codebase
98 lines (52 loc) • 2.64 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _chunkDFAJX4NKjs = require('./chunk-DFAJX4NK.js');
var _chunkQVNO5FTUjs = require('./chunk-QVNO5FTU.js');
// src/FileLock.ts
var _fs = require('fs');
var { O_CREAT, O_EXCL, O_RDWR } = _fs.constants;
var waitBuffer = new Int32Array(new SharedArrayBuffer(4));
var FileLock = class {
constructor(filename) {
this.filename = filename;
}
tryLock() {
this.assertNotLocked();
try {
this.fd = _fs.openSync.call(void 0, this.filename, O_CREAT | O_EXCL | O_RDWR);
return true;
} catch (e) {
if (_chunkDFAJX4NKjs.isErrno.call(void 0, e, "EEXIST")) {
return false;
}
throw e;
}
}
waitLock(timeoutMs) {
const deadline = Date.now() + timeoutMs;
while (!this.tryLock()) {
if (Date.now() > deadline) {
throw new Error(`Timed out waiting for lock on ${this.filename}`);
}
Atomics.wait(waitBuffer, 0, 0, 1);
}
}
isLocked() {
return this.fd !== void 0;
}
unlock() {
if (this.fd !== void 0) {
_fs.closeSync.call(void 0, this.fd);
_fs.rmSync.call(void 0, this.filename);
this.fd = void 0;
}
}
assertNotLocked() {
if (this.fd !== void 0) {
throw new Error(
`FileLock "${this.filename}" is already locked by this process [pid ${process.pid}]`
);
}
}
};
exports.FileLock = FileLock; exports.SEATBELT_DISABLE = _chunkQVNO5FTUjs.SEATBELT_DISABLE; exports.SEATBELT_FILE = _chunkQVNO5FTUjs.SEATBELT_FILE; exports.SEATBELT_FILE_NAME = _chunkQVNO5FTUjs.SEATBELT_FILE_NAME; exports.SEATBELT_FROZEN = _chunkQVNO5FTUjs.SEATBELT_FROZEN; exports.SEATBELT_INCREASE = _chunkQVNO5FTUjs.SEATBELT_INCREASE; exports.SEATBELT_KEEP = _chunkQVNO5FTUjs.SEATBELT_KEEP; exports.SEATBELT_PWD = _chunkQVNO5FTUjs.SEATBELT_PWD; exports.SEATBELT_ROOT = _chunkQVNO5FTUjs.SEATBELT_ROOT; exports.SEATBELT_THREADSAFE = _chunkQVNO5FTUjs.SEATBELT_THREADSAFE; exports.SEATBELT_VERBOSE = _chunkQVNO5FTUjs.SEATBELT_VERBOSE; exports.SeatbeltArgs = _chunkQVNO5FTUjs.SeatbeltArgs; exports.SeatbeltConfig = _chunkQVNO5FTUjs.SeatbeltConfig; exports.SeatbeltConfigSchema = _chunkQVNO5FTUjs.SeatbeltConfigSchema; exports.SeatbeltEnv = _chunkQVNO5FTUjs.SeatbeltEnv; exports.SeatbeltFile = _chunkDFAJX4NKjs.SeatbeltFile; exports.formatFilename = _chunkQVNO5FTUjs.formatFilename; exports.formatRuleId = _chunkQVNO5FTUjs.formatRuleId; exports.logStderr = _chunkQVNO5FTUjs.logStderr; exports.logStdout = _chunkQVNO5FTUjs.logStdout; exports.padVarName = _chunkQVNO5FTUjs.padVarName;
//# sourceMappingURL=api.js.map