UNPKG

@pmouli/isy-matter-server

Version:

Service to expose an ISY device as a Matter Border router

46 lines (41 loc) 1.41 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; }