node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
80 lines (79 loc) • 3.82 kB
JavaScript
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 __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 _Events_instances, _Events_listeners, _Events_status, _Events_errorHandler, _Events_onClose;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NodeEvent = void 0;
const inputErrorHandler_1 = require("../errors/inputErrorHandler");
var NodeEvent;
(function (NodeEvent) {
NodeEvent["Close"] = "close";
NodeEvent["Input"] = "input";
NodeEvent["StateChanged"] = "state_changed";
})(NodeEvent || (exports.NodeEvent = NodeEvent = {}));
class Events {
constructor({ node, emitter }) {
_Events_instances.add(this);
_Events_listeners.set(this, []);
_Events_status.set(this, void 0);
this.node = node;
this.emitter = emitter;
emitter.setMaxListeners(0);
node.on(NodeEvent.Close, __classPrivateFieldGet(this, _Events_instances, "m", _Events_onClose).bind(this));
}
addListener(event, handler, options = { once: false }) {
const handlerWrapper = __classPrivateFieldGet(this, _Events_instances, "m", _Events_errorHandler).call(this, handler);
__classPrivateFieldGet(this, _Events_listeners, "f").push([event, handlerWrapper]);
if (options.once === true) {
this.emitter.once(event, handlerWrapper);
}
else {
this.emitter.on(event, handlerWrapper);
}
}
addListeners(bind, eventsList) {
eventsList.forEach(([event, handler]) => {
this.addListener(event, handler.bind(bind));
});
}
removeListeners() {
__classPrivateFieldGet(this, _Events_listeners, "f").forEach(([event, handler]) => {
this.emitter.removeListener(event, handler);
});
__classPrivateFieldSet(this, _Events_listeners, [], "f");
}
// set status for error reporting
setStatus(status) {
__classPrivateFieldSet(this, _Events_status, status, "f");
}
emit(event, ...args) {
return this.emitter.emit(event, ...args);
}
}
_Events_listeners = new WeakMap(), _Events_status = new WeakMap(), _Events_instances = new WeakSet(), _Events_errorHandler = function _Events_errorHandler(callback) {
return async (...args) => {
var _a;
try {
// eslint-disable-next-line n/no-callback-literal
await callback(...args);
}
catch (e) {
const { error, statusMessage } = (0, inputErrorHandler_1.getErrorData)(e);
this.node.error(error);
(_a = __classPrivateFieldGet(this, _Events_status, "f")) === null || _a === void 0 ? void 0 : _a.setFailed(statusMessage);
}
};
}, _Events_onClose = function _Events_onClose(_removed, done) {
this.removeListeners();
done();
};
exports.default = Events;
;