UNPKG

@pmouli/isy-matter-server

Version:

Service to expose an ISY device as a Matter Border router

108 lines 3.79 kB
import { Family } from './Definitions/index.js'; import { NodeFactory } from './Devices/NodeFactory.js'; import { ISYDevice } from './ISYDevice.js'; export class Registry { Global = {}; FamilyLevel = {}; DeviceLevel = {}; NodeDefLevel = {}; ClassLevel = {}; registerGlobal(key, value) { this.Global[key] = value; } registerFamilyLevel(family, key, value) { this.FamilyLevel[Family[family]] = this.FamilyLevel[Family[family]] ?? {}; this.FamilyLevel[Family[family]][key] = value; } registerDeviceLevel(device, key, value) { this.DeviceLevel[device] = this.DeviceLevel[device] ?? {}; this.DeviceLevel[device][key] = value; } registerNodeDefLevel(nodeDefId, key, value) { this.NodeDefLevel[nodeDefId] = this.NodeDefLevel[nodeDefId] ?? {}; this.NodeDefLevel[nodeDefId][key] = value; } registerClassLevel(className, key, value) { this.ClassLevel[className] = this.ClassLevel[className] ?? {}; this.ClassLevel[className][key] = value; } register(key, value, discriminant) { if (discriminant === undefined) { this.registerGlobal(key, value); return; } else if (typeof discriminant === 'string') { this.registerDeviceLevel(discriminant, key, value); return; } else if (typeof discriminant === 'number') { if (discriminant in Family) { this.registerFamilyLevel(discriminant, key, value); return; } } else if (ISYDevice.isNode(discriminant)) { this.registerNodeDefLevel(discriminant.Class.prototype.nodeDefId, key, value); for (const nodeDefId in NodeFactory.getImplements(discriminant)) { this.registerNodeDefLevel(nodeDefId, key, value); } this.registerClassLevel(discriminant.Class.name, key, value); this.registerFamilyLevel(discriminant.Class.family, key, value); return; } else if (ISYDevice.isComposite(discriminant)) { this.registerClassLevel(discriminant.Class.name, key, value); return; } /*else if(ISYDevice.isComposite(discriminant)) { this.registerFamilyLevel(discriminant.types, key, value); return; }*/ //TODO: Implement Composite Device } getGlobal(key) { return this.Global[key]; } getFamilyLevel(family, key) { return this.FamilyLevel[Family[family]]?.[key]; } getDeviceLevel(device, key) { return this.DeviceLevel[device]?.[key]; } getNodeLevel(nodeDefId, key) { return this.NodeDefLevel[nodeDefId]?.[key]; } getClassLevel(className, key) { return this.ClassLevel[className]?.[key]; } get(device, key) { if (device.type) { let d = this.getDeviceLevel(device.type, key); if (d) return d; } if (ISYDevice.isNode(device)) { let d = this.getNodeLevel(device.nodeDefId, key); if (d) { return d; } else { for (const nodeDefId in NodeFactory.getImplements(device)) { let d = this.getNodeLevel(nodeDefId, key); if (d) return d; } } } if (ISYDevice.isComposite(device)) { let d = this.getClassLevel(device.constructor.name, key); if (d) return d; } let f = this.getFamilyLevel(device.family, key); if (f) return f; return this.getGlobal(key); } } //# sourceMappingURL=Registry.js.map