Spaces:
Runtime error
Runtime error
| ; | |
| Object.defineProperty(exports, "__esModule", { value: true }); | |
| exports.withTimeout = void 0; | |
| var tslib_1 = require("tslib"); | |
| var errors_1 = require("./errors"); | |
| // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types | |
| function withTimeout(sync, timeout, timeoutError) { | |
| var _this = this; | |
| if (timeoutError === void 0) { timeoutError = errors_1.E_TIMEOUT; } | |
| return { | |
| acquire: function () { | |
| return new Promise(function (resolve, reject) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { | |
| var isTimeout, handle, ticket, release, e_1; | |
| return (0, tslib_1.__generator)(this, function (_a) { | |
| switch (_a.label) { | |
| case 0: | |
| isTimeout = false; | |
| handle = setTimeout(function () { | |
| isTimeout = true; | |
| reject(timeoutError); | |
| }, timeout); | |
| _a.label = 1; | |
| case 1: | |
| _a.trys.push([1, 3, , 4]); | |
| return [4 /*yield*/, sync.acquire()]; | |
| case 2: | |
| ticket = _a.sent(); | |
| if (isTimeout) { | |
| release = Array.isArray(ticket) ? ticket[1] : ticket; | |
| release(); | |
| } | |
| else { | |
| clearTimeout(handle); | |
| resolve(ticket); | |
| } | |
| return [3 /*break*/, 4]; | |
| case 3: | |
| e_1 = _a.sent(); | |
| if (!isTimeout) { | |
| clearTimeout(handle); | |
| reject(e_1); | |
| } | |
| return [3 /*break*/, 4]; | |
| case 4: return [2 /*return*/]; | |
| } | |
| }); | |
| }); }); | |
| }, | |
| runExclusive: function (callback) { | |
| return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { | |
| var release, ticket; | |
| return (0, tslib_1.__generator)(this, function (_a) { | |
| switch (_a.label) { | |
| case 0: | |
| release = function () { return undefined; }; | |
| _a.label = 1; | |
| case 1: | |
| _a.trys.push([1, , 7, 8]); | |
| return [4 /*yield*/, this.acquire()]; | |
| case 2: | |
| ticket = _a.sent(); | |
| if (!Array.isArray(ticket)) return [3 /*break*/, 4]; | |
| release = ticket[1]; | |
| return [4 /*yield*/, callback(ticket[0])]; | |
| case 3: return [2 /*return*/, _a.sent()]; | |
| case 4: | |
| release = ticket; | |
| return [4 /*yield*/, callback()]; | |
| case 5: return [2 /*return*/, _a.sent()]; | |
| case 6: return [3 /*break*/, 8]; | |
| case 7: | |
| release(); | |
| return [7 /*endfinally*/]; | |
| case 8: return [2 /*return*/]; | |
| } | |
| }); | |
| }); | |
| }, | |
| /** @deprecated Deprecated in 0.3.0, will be removed in 0.4.0. Use runExclusive instead. */ | |
| release: function () { | |
| sync.release(); | |
| }, | |
| cancel: function () { | |
| return sync.cancel(); | |
| }, | |
| waitForUnlock: function () { return sync.waitForUnlock(); }, | |
| isLocked: function () { return sync.isLocked(); }, | |
| }; | |
| } | |
| exports.withTimeout = withTimeout; | |