node-tado-client
Version:
A Tado client for nodejs
65 lines • 3.67 kB
JavaScript
"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