UNPKG

node-tado-client

Version:
65 lines 3.67 kB
"use strict"; // Adapted from https://gist.github.com/gregkorossy/e33be1f201cf242197d9c4d0a1fa7335 var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Semaphore_instances, _Semaphore_max, _Semaphore_counter, _Semaphore_waiting, _Semaphore_take; Object.defineProperty(exports, "__esModule", { value: true }); exports.Semaphore = void 0; class Semaphore { constructor(max) { _Semaphore_instances.add(this); _Semaphore_max.set(this, void 0); _Semaphore_counter.set(this, 0); _Semaphore_waiting.set(this, []); __classPrivateFieldSet(this, _Semaphore_max, max, "f"); } async acquire() { var _a; if (__classPrivateFieldGet(this, _Semaphore_counter, "f") < __classPrivateFieldGet(this, _Semaphore_max, "f")) { __classPrivateFieldSet(this, _Semaphore_counter, (_a = __classPrivateFieldGet(this, _Semaphore_counter, "f"), _a++, _a), "f"); return new Promise((resolve) => { resolve(); }); } else { return new Promise((resolve, err) => { __classPrivateFieldGet(this, _Semaphore_waiting, "f").push({ resolve, err }); }); } } release() { var _a; __classPrivateFieldSet(this, _Semaphore_counter, (_a = __classPrivateFieldGet(this, _Semaphore_counter, "f"), _a--, _a), "f"); __classPrivateFieldGet(this, _Semaphore_instances, "m", _Semaphore_take).call(this); } purge() { const unresolved = __classPrivateFieldGet(this, _Semaphore_waiting, "f").length; for (let i = 0; i < unresolved; i++) { __classPrivateFieldGet(this, _Semaphore_waiting, "f")[i].err("Task has been purged."); } __classPrivateFieldSet(this, _Semaphore_counter, 0, "f"); __classPrivateFieldSet(this, _Semaphore_waiting, [], "f"); return unresolved; } } exports.Semaphore = Semaphore; _Semaphore_max = new WeakMap(), _Semaphore_counter = new WeakMap(), _Semaphore_waiting = new WeakMap(), _Semaphore_instances = new WeakSet(), _Semaphore_take = function _Semaphore_take() { var _a; if (__classPrivateFieldGet(this, _Semaphore_waiting, "f").length > 0 && __classPrivateFieldGet(this, _Semaphore_counter, "f") < __classPrivateFieldGet(this, _Semaphore_max, "f")) { __classPrivateFieldSet(this, _Semaphore_counter, (_a = __classPrivateFieldGet(this, _Semaphore_counter, "f"), _a++, _a), "f"); const promise = __classPrivateFieldGet(this, _Semaphore_waiting, "f").shift(); if (promise) { promise.resolve(); } } }; //# sourceMappingURL=semaphore.js.map