UNPKG

@pmouli/isy-matter-server

Version:

Service to expose an ISY device as a Matter Border router

39 lines (35 loc) 1.42 kB
import type { MutableEndpoint, SupportedBehaviors } from '@matter/node'; enum RequirementType { Client = 1, Server = 1 << 1, Optional = 1 << 2, Mandatory = 1 << 3, All = Client | Server | Optional | Mandatory /*AllServer = Server | Optional | Mandatory, AllClient = Client | Optional | Mandatory, AllOptional = Server | Client | Optional, AllMandatory = Server | Client | Mandatory*/ } function hasFlag<T extends number>(value: T, flag: T): boolean { return (value & flag) === flag; } export function getRequiredBehaviors<D extends MutableEndpoint>(deviceType: D, requirements: RequirementType = RequirementType.All): SupportedBehaviors { let behaviors: SupportedBehaviors = {}; if (hasFlag(requirements, RequirementType.Client)) { if (hasFlag(requirements, RequirementType.Mandatory)) { behaviors = { ...behaviors, ...(deviceType.requirements.client?.mandatory ?? {}) }; } if (hasFlag(requirements, RequirementType.Optional)) { behaviors = { ...behaviors, ...(deviceType.requirements.client?.optional ?? {}) }; } } if (hasFlag(requirements, RequirementType.Server)) { if (hasFlag(requirements, RequirementType.Mandatory)) { behaviors = { ...behaviors, ...(deviceType.requirements.server?.mandatory ?? {}) }; } if (hasFlag(requirements, RequirementType.Optional)) { behaviors = { ...behaviors, ...(deviceType.requirements.server?.optional ?? {}) }; } } return behaviors; }