UNPKG

@constructorfleet/ultimate-govee

Version:

Library for interacting with Govee devices written in Typescript.

63 lines 2.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.propertyMatches = void 0; const decoder_constants_1 = require("./decoder.constants"); const types_1 = require("./types"); const decoder_1 = require("./decoder"); const propertyMatches = (device, conditions, operand) => { if (conditions.length === 0) { return true; } if (conditions.includes(decoder_constants_1.Or)) { return conditions .reduce((acc, cond) => { if (cond === decoder_constants_1.Or) { acc.push([]); } else { acc[acc.length - 1].push(cond); } return acc; }, [[]]) .some((conditionGroup) => { return (0, exports.propertyMatches)(device, conditionGroup); }); } // logger.debug({ // device, // condition: conditions[0], // condition1: conditions[1], // operand, // }); switch (conditions[0]) { case decoder_constants_1.ManufacturerData: case decoder_constants_1.ServiceData: if (typeof conditions[1] === 'number') { return (0, exports.propertyMatches)(device, conditions.slice(2), Reflect.get(device, conditions[0].replace('data', 'Data')).slice(conditions[1])); } if (typeof conditions[1] === 'string' && types_1.Comparator.includes(conditions[1].replace('data', 'Data'))) { return ((0, decoder_1.evaluateComparison)(conditions[1], Reflect.get(device, conditions[0]).length, conditions[2]) && (0, exports.propertyMatches)(device, conditions.slice(3))); } return false; case decoder_constants_1.Inverse: return !(0, exports.propertyMatches)(device, conditions.slice(1), operand); case decoder_constants_1.BitShift: return (((Number.parseInt(operand[0], 16) >> conditions[1]) & 0x01) === conditions[2] && (0, exports.propertyMatches)(device, conditions.slice(3), device)); case decoder_constants_1.And: return false; default: if (typeof conditions[0] === 'number' && typeof conditions[1] === 'string' && typeof operand === 'string') { return (conditions[1].slice(0, conditions[0]) === operand.slice(0, conditions[0]) && (0, exports.propertyMatches)(device, conditions.slice(3))); } return false; } }; exports.propertyMatches = propertyMatches; //# sourceMappingURL=property.condition.js.map