node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
120 lines (119 loc) • 6.82 kB
JavaScript
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 __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _InputService_instances, _InputService_inputs, _InputService_nodeConfig, _InputService_schema, _InputService_allowInputOverrides, _InputService_transformCallback, _InputService_transform, _InputService_parsedMessageToSchemaObject;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DataSource = void 0;
const selectn_1 = __importDefault(require("selectn"));
var DataSource;
(function (DataSource) {
DataSource["Config"] = "config";
DataSource["Default"] = "default";
DataSource["Message"] = "message";
DataSource["Missing"] = "missing";
DataSource["Transformed"] = "transformed";
})(DataSource || (exports.DataSource = DataSource = {}));
class InputService {
constructor({ inputs, nodeConfig, schema, transform, }) {
_InputService_instances.add(this);
_InputService_inputs.set(this, void 0);
_InputService_nodeConfig.set(this, void 0);
_InputService_schema.set(this, void 0);
_InputService_allowInputOverrides.set(this, true);
_InputService_transformCallback.set(this, []);
__classPrivateFieldSet(this, _InputService_inputs, inputs !== null && inputs !== void 0 ? inputs : {}, "f");
__classPrivateFieldSet(this, _InputService_nodeConfig, nodeConfig, "f");
__classPrivateFieldSet(this, _InputService_schema, schema, "f");
__classPrivateFieldSet(this, _InputService_transformCallback, transform ? [transform] : undefined, "f");
}
// TODO: Add logic to block input if inputOptions.block is true
parse(msg) {
const parsedResult = {};
for (const [fieldKey, fieldConfig] of Object.entries(__classPrivateFieldGet(this, _InputService_inputs, "f"))) {
let result = {
key: fieldKey,
value: undefined,
source: DataSource.Missing,
};
if (__classPrivateFieldGet(this, _InputService_allowInputOverrides, "f")) {
// Find messageProp value if it's a string or Array
// When it's an array lowest valid index takes precedent
const props = Array.isArray(fieldConfig.messageProp)
? fieldConfig.messageProp
: [fieldConfig.messageProp];
const messageProp = props.reduce((val, cur) => val !== null && val !== void 0 ? val : (0, selectn_1.default)(cur, msg), undefined);
result = {
key: fieldKey,
value: messageProp,
source: DataSource.Message,
};
}
// If message missing value and node has config that can be used instead
if (result.value === undefined && fieldConfig.configProp) {
result.value = (0, selectn_1.default)(fieldConfig.configProp, __classPrivateFieldGet(this, _InputService_nodeConfig, "f"));
result.source = DataSource.Config;
}
if (result.value === undefined &&
fieldConfig.default !== undefined) {
result.value = fieldConfig.default;
result.source = DataSource.Default;
}
// If value not found in both config and message
if (result.value === undefined) {
result.source = DataSource.Missing;
}
// Assign result to config key value
parsedResult[fieldKey] = result;
}
return __classPrivateFieldGet(this, _InputService_instances, "m", _InputService_transform).call(this, parsedResult);
}
validate(parsedMessage) {
if (!__classPrivateFieldGet(this, _InputService_schema, "f"))
return true;
const schemaObject = __classPrivateFieldGet(this, _InputService_instances, "m", _InputService_parsedMessageToSchemaObject).call(this, parsedMessage);
return InputService.validateSchema(__classPrivateFieldGet(this, _InputService_schema, "f"), schemaObject);
}
static validateSchema(schema, obj) {
const { error } = schema.validate(obj);
if (error)
throw error;
return true;
}
disableInputOverrides() {
__classPrivateFieldSet(this, _InputService_allowInputOverrides, false, "f");
}
enableInputOverrides() {
__classPrivateFieldSet(this, _InputService_allowInputOverrides, true, "f");
}
get isInputOverridesEnabled() {
return __classPrivateFieldGet(this, _InputService_allowInputOverrides, "f");
}
addTransform(transform) {
var _a;
(_a = __classPrivateFieldGet(this, _InputService_transformCallback, "f")) === null || _a === void 0 ? void 0 : _a.push(transform);
}
}
_InputService_inputs = new WeakMap(), _InputService_nodeConfig = new WeakMap(), _InputService_schema = new WeakMap(), _InputService_allowInputOverrides = new WeakMap(), _InputService_transformCallback = new WeakMap(), _InputService_instances = new WeakSet(), _InputService_transform = function _InputService_transform(parsedMessage) {
if (!__classPrivateFieldGet(this, _InputService_transformCallback, "f"))
return parsedMessage;
return __classPrivateFieldGet(this, _InputService_transformCallback, "f").reduce((acc, transform) => transform.call(this, acc), parsedMessage);
}, _InputService_parsedMessageToSchemaObject = function _InputService_parsedMessageToSchemaObject(parsedMessage) {
const schemaObject = {};
for (const [key, value] of Object.entries(parsedMessage)) {
schemaObject[key] = value.value;
}
return schemaObject;
};
exports.default = InputService;
;