UNPKG

cli-engine

Version:
67 lines (49 loc) 1.54 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); require('cli-engine-config'); var _rwlockfile = require('rwlockfile'); var _rwlockfile2 = _interopRequireDefault(_rwlockfile); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _cliUx = require('cli-ux'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class Lock { constructor(config) { this.config = config; this.cli = new _cliUx.CLI({ mock: config.mock }); } get updatelockfile() { return _path2.default.join(this.config.cacheDir, 'update.lock'); } // get read lock async read() { return _rwlockfile2.default.read(this.updatelockfile); } async unread() { await _rwlockfile2.default.unread(this.updatelockfile); } async canRead() { let hasWriter = await _rwlockfile2.default.hasWriter(this.updatelockfile); return !hasWriter; } // upgrade to writer async upgrade() { // take off reader await this.unread(); // check for other readers if (await _rwlockfile2.default.hasReaders(this.updatelockfile)) { this.cli.action.status = `Waiting for all commands to finish`; } // grab writer lock let unlock = await _rwlockfile2.default.write(this.updatelockfile); // return downgrade function return async () => { // turn back into reader when unlocking await unlock(); return _rwlockfile2.default.read(this.updatelockfile); }; } } exports.default = Lock;