@matter/model 0.16.0-alpha.0-20251102-faee7ab25 → 0.16.0-alpha.0-20251104-8c3166ea3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/aspects/Conformance.d.ts +6 -2
- package/dist/cjs/aspects/Conformance.d.ts.map +1 -1
- package/dist/cjs/aspects/Conformance.js +4 -6
- package/dist/cjs/aspects/Conformance.js.map +1 -1
- package/dist/cjs/elements/RequirementElement.d.ts +2 -1
- package/dist/cjs/elements/RequirementElement.d.ts.map +1 -1
- package/dist/cjs/elements/RequirementElement.js +1 -0
- package/dist/cjs/elements/RequirementElement.js.map +1 -1
- package/dist/cjs/logic/ClusterModifier.d.ts +3 -3
- package/dist/cjs/logic/ClusterModifier.d.ts.map +1 -1
- package/dist/cjs/logic/ClusterModifier.js +3 -3
- package/dist/cjs/logic/ClusterModifier.js.map +1 -1
- package/dist/cjs/logic/Scope.d.ts +10 -2
- package/dist/cjs/logic/Scope.d.ts.map +1 -1
- package/dist/cjs/logic/Scope.js +32 -25
- package/dist/cjs/logic/Scope.js.map +2 -2
- package/dist/cjs/logic/definition-validation/RequirementValidator.js +2 -2
- package/dist/cjs/logic/definition-validation/RequirementValidator.js.map +1 -1
- package/dist/cjs/logic/definition-validation/ValueValidator.js +1 -1
- package/dist/cjs/logic/definition-validation/ValueValidator.js.map +1 -1
- package/dist/cjs/models/ClusterModel.d.ts +3 -2
- package/dist/cjs/models/ClusterModel.d.ts.map +1 -1
- package/dist/cjs/models/ClusterModel.js +1 -1
- package/dist/cjs/models/ClusterModel.js.map +1 -1
- package/dist/cjs/models/Model.d.ts +7 -3
- package/dist/cjs/models/Model.d.ts.map +1 -1
- package/dist/cjs/models/Model.js +12 -2
- package/dist/cjs/models/Model.js.map +1 -1
- package/dist/cjs/models/Schema.d.ts +10 -2
- package/dist/cjs/models/Schema.d.ts.map +1 -1
- package/dist/cjs/models/Schema.js +1 -0
- package/dist/cjs/models/Schema.js.map +1 -1
- package/dist/cjs/standard/elements/air-purifier.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/air-purifier.element.js +5 -1
- package/dist/cjs/standard/elements/air-purifier.element.js.map +1 -1
- package/dist/cjs/standard/elements/battery-storage.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/battery-storage.element.js +49 -1
- package/dist/cjs/standard/elements/battery-storage.element.js.map +1 -1
- package/dist/cjs/standard/elements/bridged-node.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/bridged-node.element.js +1 -0
- package/dist/cjs/standard/elements/bridged-node.element.js.map +1 -1
- package/dist/cjs/standard/elements/cooktop.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/cooktop.element.js +2 -1
- package/dist/cjs/standard/elements/cooktop.element.js.map +1 -1
- package/dist/cjs/standard/elements/energy-evse-device.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/energy-evse-device.element.js +4 -1
- package/dist/cjs/standard/elements/energy-evse-device.element.js.map +1 -1
- package/dist/cjs/standard/elements/extractor-hood.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/extractor-hood.element.js +2 -1
- package/dist/cjs/standard/elements/extractor-hood.element.js.map +1 -1
- package/dist/cjs/standard/elements/fan.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/fan.element.js +2 -1
- package/dist/cjs/standard/elements/fan.element.js.map +1 -1
- package/dist/cjs/standard/elements/heat-pump.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/heat-pump.element.js +43 -1
- package/dist/cjs/standard/elements/heat-pump.element.js.map +1 -1
- package/dist/cjs/standard/elements/microwave-oven.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/microwave-oven.element.js +2 -1
- package/dist/cjs/standard/elements/microwave-oven.element.js.map +1 -1
- package/dist/cjs/standard/elements/oven.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/oven.element.js +3 -1
- package/dist/cjs/standard/elements/oven.element.js.map +1 -1
- package/dist/cjs/standard/elements/refrigerator-device.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/refrigerator-device.element.js +2 -1
- package/dist/cjs/standard/elements/refrigerator-device.element.js.map +1 -1
- package/dist/cjs/standard/elements/room-air-conditioner-device.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/room-air-conditioner-device.element.js +3 -1
- package/dist/cjs/standard/elements/room-air-conditioner-device.element.js.map +1 -1
- package/dist/cjs/standard/elements/root-node.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/root-node.element.js +1 -0
- package/dist/cjs/standard/elements/root-node.element.js.map +1 -1
- package/dist/cjs/standard/elements/smoke-co-alarm-device.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/smoke-co-alarm-device.element.js +2 -1
- package/dist/cjs/standard/elements/smoke-co-alarm-device.element.js.map +1 -1
- package/dist/cjs/standard/elements/solar-power.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/solar-power.element.js +38 -1
- package/dist/cjs/standard/elements/solar-power.element.js.map +1 -1
- package/dist/cjs/standard/elements/water-heater.element.d.ts.map +1 -1
- package/dist/cjs/standard/elements/water-heater.element.js +5 -1
- package/dist/cjs/standard/elements/water-heater.element.js.map +1 -1
- package/dist/cjs/standard/resources/air-purifier.resource.js +5 -1
- package/dist/cjs/standard/resources/air-purifier.resource.js.map +1 -1
- package/dist/cjs/standard/resources/battery-storage.resource.js +8 -1
- package/dist/cjs/standard/resources/battery-storage.resource.js.map +1 -1
- package/dist/cjs/standard/resources/bridged-node.resource.js +7 -1
- package/dist/cjs/standard/resources/bridged-node.resource.js.map +1 -1
- package/dist/cjs/standard/resources/cooktop.resource.js +2 -1
- package/dist/cjs/standard/resources/cooktop.resource.js.map +1 -1
- package/dist/cjs/standard/resources/energy-evse-device.resource.js +4 -1
- package/dist/cjs/standard/resources/energy-evse-device.resource.js.map +1 -1
- package/dist/cjs/standard/resources/extractor-hood.resource.js +2 -1
- package/dist/cjs/standard/resources/extractor-hood.resource.js.map +1 -1
- package/dist/cjs/standard/resources/fan.resource.js +2 -1
- package/dist/cjs/standard/resources/fan.resource.js.map +1 -1
- package/dist/cjs/standard/resources/heat-pump.resource.js +7 -1
- package/dist/cjs/standard/resources/heat-pump.resource.js.map +1 -1
- package/dist/cjs/standard/resources/microwave-oven.resource.js +2 -1
- package/dist/cjs/standard/resources/microwave-oven.resource.js.map +1 -1
- package/dist/cjs/standard/resources/oven.resource.js +5 -1
- package/dist/cjs/standard/resources/oven.resource.js.map +1 -1
- package/dist/cjs/standard/resources/refrigerator-device.resource.js +2 -1
- package/dist/cjs/standard/resources/refrigerator-device.resource.js.map +1 -1
- package/dist/cjs/standard/resources/room-air-conditioner-device.resource.js +3 -1
- package/dist/cjs/standard/resources/room-air-conditioner-device.resource.js.map +1 -1
- package/dist/cjs/standard/resources/root-node.resource.js +1 -0
- package/dist/cjs/standard/resources/root-node.resource.js.map +1 -1
- package/dist/cjs/standard/resources/smoke-co-alarm-device.resource.js +2 -1
- package/dist/cjs/standard/resources/smoke-co-alarm-device.resource.js.map +1 -1
- package/dist/cjs/standard/resources/solar-power.resource.js +7 -1
- package/dist/cjs/standard/resources/solar-power.resource.js.map +1 -1
- package/dist/cjs/standard/resources/water-heater.resource.js +5 -1
- package/dist/cjs/standard/resources/water-heater.resource.js.map +1 -1
- package/dist/esm/aspects/Conformance.d.ts +6 -2
- package/dist/esm/aspects/Conformance.d.ts.map +1 -1
- package/dist/esm/aspects/Conformance.js +4 -6
- package/dist/esm/aspects/Conformance.js.map +1 -1
- package/dist/esm/elements/RequirementElement.d.ts +2 -1
- package/dist/esm/elements/RequirementElement.d.ts.map +1 -1
- package/dist/esm/elements/RequirementElement.js +1 -0
- package/dist/esm/elements/RequirementElement.js.map +1 -1
- package/dist/esm/logic/ClusterModifier.d.ts +3 -3
- package/dist/esm/logic/ClusterModifier.d.ts.map +1 -1
- package/dist/esm/logic/ClusterModifier.js +3 -3
- package/dist/esm/logic/ClusterModifier.js.map +1 -1
- package/dist/esm/logic/Scope.d.ts +10 -2
- package/dist/esm/logic/Scope.d.ts.map +1 -1
- package/dist/esm/logic/Scope.js +32 -25
- package/dist/esm/logic/Scope.js.map +2 -2
- package/dist/esm/logic/definition-validation/RequirementValidator.js +2 -2
- package/dist/esm/logic/definition-validation/RequirementValidator.js.map +1 -1
- package/dist/esm/logic/definition-validation/ValueValidator.js +1 -1
- package/dist/esm/logic/definition-validation/ValueValidator.js.map +1 -1
- package/dist/esm/models/ClusterModel.d.ts +3 -2
- package/dist/esm/models/ClusterModel.d.ts.map +1 -1
- package/dist/esm/models/ClusterModel.js +1 -1
- package/dist/esm/models/ClusterModel.js.map +1 -1
- package/dist/esm/models/Model.d.ts +7 -3
- package/dist/esm/models/Model.d.ts.map +1 -1
- package/dist/esm/models/Model.js +12 -2
- package/dist/esm/models/Model.js.map +1 -1
- package/dist/esm/models/Schema.d.ts +10 -2
- package/dist/esm/models/Schema.d.ts.map +1 -1
- package/dist/esm/models/Schema.js +1 -0
- package/dist/esm/models/Schema.js.map +1 -1
- package/dist/esm/standard/elements/air-purifier.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/air-purifier.element.js +5 -1
- package/dist/esm/standard/elements/air-purifier.element.js.map +1 -1
- package/dist/esm/standard/elements/battery-storage.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/battery-storage.element.js +49 -1
- package/dist/esm/standard/elements/battery-storage.element.js.map +1 -1
- package/dist/esm/standard/elements/bridged-node.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/bridged-node.element.js +1 -0
- package/dist/esm/standard/elements/bridged-node.element.js.map +1 -1
- package/dist/esm/standard/elements/cooktop.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/cooktop.element.js +2 -1
- package/dist/esm/standard/elements/cooktop.element.js.map +1 -1
- package/dist/esm/standard/elements/energy-evse-device.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/energy-evse-device.element.js +4 -1
- package/dist/esm/standard/elements/energy-evse-device.element.js.map +1 -1
- package/dist/esm/standard/elements/extractor-hood.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/extractor-hood.element.js +2 -1
- package/dist/esm/standard/elements/extractor-hood.element.js.map +1 -1
- package/dist/esm/standard/elements/fan.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/fan.element.js +2 -1
- package/dist/esm/standard/elements/fan.element.js.map +1 -1
- package/dist/esm/standard/elements/heat-pump.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/heat-pump.element.js +43 -1
- package/dist/esm/standard/elements/heat-pump.element.js.map +1 -1
- package/dist/esm/standard/elements/microwave-oven.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/microwave-oven.element.js +2 -1
- package/dist/esm/standard/elements/microwave-oven.element.js.map +1 -1
- package/dist/esm/standard/elements/oven.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/oven.element.js +3 -1
- package/dist/esm/standard/elements/oven.element.js.map +1 -1
- package/dist/esm/standard/elements/refrigerator-device.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/refrigerator-device.element.js +2 -1
- package/dist/esm/standard/elements/refrigerator-device.element.js.map +1 -1
- package/dist/esm/standard/elements/room-air-conditioner-device.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/room-air-conditioner-device.element.js +3 -1
- package/dist/esm/standard/elements/room-air-conditioner-device.element.js.map +1 -1
- package/dist/esm/standard/elements/root-node.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/root-node.element.js +1 -0
- package/dist/esm/standard/elements/root-node.element.js.map +1 -1
- package/dist/esm/standard/elements/smoke-co-alarm-device.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/smoke-co-alarm-device.element.js +2 -1
- package/dist/esm/standard/elements/smoke-co-alarm-device.element.js.map +1 -1
- package/dist/esm/standard/elements/solar-power.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/solar-power.element.js +38 -1
- package/dist/esm/standard/elements/solar-power.element.js.map +1 -1
- package/dist/esm/standard/elements/water-heater.element.d.ts.map +1 -1
- package/dist/esm/standard/elements/water-heater.element.js +5 -1
- package/dist/esm/standard/elements/water-heater.element.js.map +1 -1
- package/dist/esm/standard/resources/air-purifier.resource.js +5 -1
- package/dist/esm/standard/resources/air-purifier.resource.js.map +1 -1
- package/dist/esm/standard/resources/battery-storage.resource.js +8 -1
- package/dist/esm/standard/resources/battery-storage.resource.js.map +1 -1
- package/dist/esm/standard/resources/bridged-node.resource.js +7 -1
- package/dist/esm/standard/resources/bridged-node.resource.js.map +1 -1
- package/dist/esm/standard/resources/cooktop.resource.js +2 -1
- package/dist/esm/standard/resources/cooktop.resource.js.map +1 -1
- package/dist/esm/standard/resources/energy-evse-device.resource.js +4 -1
- package/dist/esm/standard/resources/energy-evse-device.resource.js.map +1 -1
- package/dist/esm/standard/resources/extractor-hood.resource.js +2 -1
- package/dist/esm/standard/resources/extractor-hood.resource.js.map +1 -1
- package/dist/esm/standard/resources/fan.resource.js +2 -1
- package/dist/esm/standard/resources/fan.resource.js.map +1 -1
- package/dist/esm/standard/resources/heat-pump.resource.js +7 -1
- package/dist/esm/standard/resources/heat-pump.resource.js.map +1 -1
- package/dist/esm/standard/resources/microwave-oven.resource.js +2 -1
- package/dist/esm/standard/resources/microwave-oven.resource.js.map +1 -1
- package/dist/esm/standard/resources/oven.resource.js +5 -1
- package/dist/esm/standard/resources/oven.resource.js.map +1 -1
- package/dist/esm/standard/resources/refrigerator-device.resource.js +2 -1
- package/dist/esm/standard/resources/refrigerator-device.resource.js.map +1 -1
- package/dist/esm/standard/resources/room-air-conditioner-device.resource.js +3 -1
- package/dist/esm/standard/resources/room-air-conditioner-device.resource.js.map +1 -1
- package/dist/esm/standard/resources/root-node.resource.js +1 -0
- package/dist/esm/standard/resources/root-node.resource.js.map +1 -1
- package/dist/esm/standard/resources/smoke-co-alarm-device.resource.js +2 -1
- package/dist/esm/standard/resources/smoke-co-alarm-device.resource.js.map +1 -1
- package/dist/esm/standard/resources/solar-power.resource.js +7 -1
- package/dist/esm/standard/resources/solar-power.resource.js.map +1 -1
- package/dist/esm/standard/resources/water-heater.resource.js +5 -1
- package/dist/esm/standard/resources/water-heater.resource.js.map +1 -1
- package/package.json +4 -4
- package/src/aspects/Conformance.ts +9 -7
- package/src/elements/RequirementElement.ts +1 -0
- package/src/logic/ClusterModifier.ts +3 -3
- package/src/logic/Scope.ts +39 -21
- package/src/logic/definition-validation/RequirementValidator.ts +7 -2
- package/src/logic/definition-validation/ValueValidator.ts +1 -1
- package/src/models/ClusterModel.ts +6 -2
- package/src/models/Model.ts +16 -6
- package/src/models/Schema.ts +13 -1
- package/src/standard/elements/air-purifier.element.ts +5 -1
- package/src/standard/elements/battery-storage.element.ts +58 -1
- package/src/standard/elements/bridged-node.element.ts +1 -0
- package/src/standard/elements/cooktop.element.ts +2 -1
- package/src/standard/elements/energy-evse-device.element.ts +4 -1
- package/src/standard/elements/extractor-hood.element.ts +3 -1
- package/src/standard/elements/fan.element.ts +2 -1
- package/src/standard/elements/heat-pump.element.ts +50 -1
- package/src/standard/elements/microwave-oven.element.ts +2 -1
- package/src/standard/elements/oven.element.ts +3 -1
- package/src/standard/elements/refrigerator-device.element.ts +2 -1
- package/src/standard/elements/room-air-conditioner-device.element.ts +3 -1
- package/src/standard/elements/root-node.element.ts +1 -0
- package/src/standard/elements/smoke-co-alarm-device.element.ts +2 -1
- package/src/standard/elements/solar-power.element.ts +42 -1
- package/src/standard/elements/water-heater.element.ts +5 -1
- package/src/standard/resources/air-purifier.resource.ts +5 -1
- package/src/standard/resources/battery-storage.resource.ts +9 -1
- package/src/standard/resources/bridged-node.resource.ts +5 -1
- package/src/standard/resources/cooktop.resource.ts +2 -1
- package/src/standard/resources/energy-evse-device.resource.ts +4 -1
- package/src/standard/resources/extractor-hood.resource.ts +2 -1
- package/src/standard/resources/fan.resource.ts +2 -1
- package/src/standard/resources/heat-pump.resource.ts +7 -1
- package/src/standard/resources/microwave-oven.resource.ts +2 -1
- package/src/standard/resources/oven.resource.ts +5 -1
- package/src/standard/resources/refrigerator-device.resource.ts +3 -1
- package/src/standard/resources/room-air-conditioner-device.resource.ts +3 -1
- package/src/standard/resources/root-node.resource.ts +1 -0
- package/src/standard/resources/smoke-co-alarm-device.resource.ts +2 -1
- package/src/standard/resources/solar-power.resource.ts +8 -1
- package/src/standard/resources/water-heater.resource.ts +5 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/standard/resources/root-node.resource.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,gBAAgB;AAEzB,SAAS,IAAI;AAAA,EACT,KAAK;AAAA,EAAc,MAAM;AAAA,EAAY,gBAAgB;AAAA,EAAQ,MAAM;AAAA,EAEnE,SAAS;AAAA,EAYT,UAAU;AAAA,IACN,EAAE,KAAK,eAAe,MAAM,oBAAoB,MAAM,kBAAe;AAAA,IACrE,EAAE,KAAK,eAAe,MAAM,iBAAiB,MAAM,kBAAe;AAAA,IAClE,EAAE,KAAK,eAAe,MAAM,4BAA4B,MAAM,kBAAe;AAAA,IAC7E,EAAE,KAAK,eAAe,MAAM,uBAAuB,MAAM,kBAAe;AAAA,IACxE,EAAE,KAAK,eAAe,MAAM,sBAAsB,MAAM,kBAAe;AAAA,IACvE,EAAE,KAAK,eAAe,MAAM,wBAAwB,MAAM,kBAAe;AAAA,IACzE,EAAE,KAAK,eAAe,MAAM,wBAAwB,MAAM,kBAAe;AAAA,IACzE,EAAE,KAAK,eAAe,MAAM,8BAA8B,MAAM,kBAAe;AAAA,IAC/E,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,kBAAe;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,6BAA6B,MAAM,kBAAe;AAAA,IAC9E,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,kBAAe;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,oBAAoB,MAAM,kBAAe;AAAA,IACrE,EAAE,KAAK,eAAe,MAAM,sBAAsB,MAAM,kBAAe;AAAA,IACvE,EAAE,KAAK,eAAe,MAAM,kBAAkB,MAAM,kBAAe;AAAA,IACnE,EAAE,KAAK,eAAe,MAAM,uBAAuB,MAAM,kBAAe;AAAA,IACxE,EAAE,KAAK,eAAe,MAAM,8BAA8B,MAAM,kBAAe;AAAA,IAC/E,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,kBAAe;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,4BAA4B,MAAM,kBAAe;AAAA,IAC7E,EAAE,KAAK,eAAe,MAAM,iBAAiB,MAAM,kBAAe;AAAA,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,gBAAgB;AAEzB,SAAS,IAAI;AAAA,EACT,KAAK;AAAA,EAAc,MAAM;AAAA,EAAY,gBAAgB;AAAA,EAAQ,MAAM;AAAA,EAEnE,SAAS;AAAA,EAYT,UAAU;AAAA,IACN,EAAE,KAAK,eAAe,MAAM,oBAAoB,MAAM,kBAAe;AAAA,IACrE,EAAE,KAAK,eAAe,MAAM,iBAAiB,MAAM,kBAAe;AAAA,IAClE,EAAE,KAAK,eAAe,MAAM,4BAA4B,MAAM,kBAAe;AAAA,IAC7E,EAAE,KAAK,eAAe,MAAM,uBAAuB,MAAM,kBAAe;AAAA,IACxE,EAAE,KAAK,eAAe,MAAM,sBAAsB,MAAM,kBAAe;AAAA,IACvE,EAAE,KAAK,eAAe,MAAM,wBAAwB,MAAM,kBAAe;AAAA,IACzE,EAAE,KAAK,eAAe,MAAM,wBAAwB,MAAM,kBAAe;AAAA,IACzE,EAAE,KAAK,eAAe,MAAM,8BAA8B,MAAM,kBAAe;AAAA,IAC/E,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,kBAAe;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,6BAA6B,MAAM,kBAAe;AAAA,IAC9E,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,kBAAe;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,oBAAoB,MAAM,kBAAe;AAAA,IACrE,EAAE,KAAK,eAAe,MAAM,sBAAsB,MAAM,kBAAe;AAAA,IACvE,EAAE,KAAK,eAAe,MAAM,kBAAkB,MAAM,kBAAe;AAAA,IACnE,EAAE,KAAK,eAAe,MAAM,uBAAuB,MAAM,kBAAe;AAAA,IACxE,EAAE,KAAK,eAAe,MAAM,8BAA8B,MAAM,kBAAe;AAAA,IAC/E,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,kBAAe;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,4BAA4B,MAAM,kBAAe;AAAA,IAC7E,EAAE,KAAK,eAAe,MAAM,iBAAiB,MAAM,kBAAe;AAAA,IAClE,EAAE,KAAK,eAAe,MAAM,eAAe,MAAM,kBAAe;AAAA,IAEhE;AAAA,MACI,KAAK;AAAA,MAAS,MAAM;AAAA,MAEpB,UAAU;AAAA,QACN;AAAA,UACI,KAAK;AAAA,UAAS,MAAM;AAAA,UACpB,aAAa;AAAA,UACb,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,KAAK;AAAA,UAAS,MAAM;AAAA,UACpB,aAAa;AAAA,UACb,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ,CAAC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -16,7 +16,8 @@ Resource.add({
|
|
|
16
16
|
{ tag: "requirement", name: "SmokeCoAlarm", xref: "device\xA77.9.5" },
|
|
17
17
|
{ tag: "requirement", name: "RelativeHumidityMeasurement", xref: "device\xA77.9.5" },
|
|
18
18
|
{ tag: "requirement", name: "TemperatureMeasurement", xref: "device\xA77.9.5" },
|
|
19
|
-
{ tag: "requirement", name: "CarbonMonoxideConcentrationMeasurement", xref: "device\xA77.9.5" }
|
|
19
|
+
{ tag: "requirement", name: "CarbonMonoxideConcentrationMeasurement", xref: "device\xA77.9.5" },
|
|
20
|
+
{ tag: "requirement", name: "PowerSource", xref: "device\xA77.9.4" }
|
|
20
21
|
]
|
|
21
22
|
});
|
|
22
23
|
//# sourceMappingURL=smoke-co-alarm-device.resource.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/standard/resources/smoke-co-alarm-device.resource.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,gBAAgB;AAEzB,SAAS,IAAI;AAAA,EACT,KAAK;AAAA,EAAc,MAAM;AAAA,EAAgB,gBAAgB;AAAA,EAAU,MAAM;AAAA,EAEzE,SAAS;AAAA,EAYT,UAAU;AAAA,IACN,EAAE,KAAK,eAAe,MAAM,YAAY,MAAM,kBAAe;AAAA,IAC7D,EAAE,KAAK,eAAe,MAAM,UAAU,MAAM,kBAAe;AAAA,IAC3D,EAAE,KAAK,eAAe,MAAM,gBAAgB,MAAM,kBAAe;AAAA,IACjE,EAAE,KAAK,eAAe,MAAM,+BAA+B,MAAM,kBAAe;AAAA,IAChF,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,kBAAe;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,0CAA0C,MAAM,kBAAe;AAAA,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,gBAAgB;AAEzB,SAAS,IAAI;AAAA,EACT,KAAK;AAAA,EAAc,MAAM;AAAA,EAAgB,gBAAgB;AAAA,EAAU,MAAM;AAAA,EAEzE,SAAS;AAAA,EAYT,UAAU;AAAA,IACN,EAAE,KAAK,eAAe,MAAM,YAAY,MAAM,kBAAe;AAAA,IAC7D,EAAE,KAAK,eAAe,MAAM,UAAU,MAAM,kBAAe;AAAA,IAC3D,EAAE,KAAK,eAAe,MAAM,gBAAgB,MAAM,kBAAe;AAAA,IACjE,EAAE,KAAK,eAAe,MAAM,+BAA+B,MAAM,kBAAe;AAAA,IAChF,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,kBAAe;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,0CAA0C,MAAM,kBAAe;AAAA,IAC3F,EAAE,KAAK,eAAe,MAAM,eAAe,MAAM,kBAAe;AAAA,EACpE;AACJ,CAAC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -10,6 +10,12 @@ Resource.add({
|
|
|
10
10
|
classification: "simple",
|
|
11
11
|
xref: "device\xA714.3",
|
|
12
12
|
details: "A Solar Power device is a device that allows a solar panel array, which can optionally be comprised of a set parallel strings of solar panels, and its associated controller and, if appropriate, inverter, to be monitored and controlled by an Energy Management System.",
|
|
13
|
-
children: [
|
|
13
|
+
children: [
|
|
14
|
+
{ tag: "requirement", name: "Identify", xref: "device\xA714.3.6" },
|
|
15
|
+
{ tag: "requirement", name: "PowerSource", xref: "device\xA714.3.5" },
|
|
16
|
+
{ tag: "requirement", name: "ElectricalSensor", xref: "device\xA714.3.5" },
|
|
17
|
+
{ tag: "requirement", name: "DeviceEnergyManagement", xref: "device\xA714.3.5" },
|
|
18
|
+
{ tag: "requirement", name: "TemperatureSensor", xref: "device\xA714.3.5" }
|
|
19
|
+
]
|
|
14
20
|
});
|
|
15
21
|
//# sourceMappingURL=solar-power.resource.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/standard/resources/solar-power.resource.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,gBAAgB;AAEzB,SAAS,IAAI;AAAA,EACT,KAAK;AAAA,EAAc,MAAM;AAAA,EAAc,gBAAgB;AAAA,EAAU,MAAM;AAAA,EACvE,SAAS;AAAA,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,gBAAgB;AAEzB,SAAS,IAAI;AAAA,EACT,KAAK;AAAA,EAAc,MAAM;AAAA,EAAc,gBAAgB;AAAA,EAAU,MAAM;AAAA,EACvE,SAAS;AAAA,EAIT,UAAU;AAAA,IACN,EAAE,KAAK,eAAe,MAAM,YAAY,MAAM,mBAAgB;AAAA,IAC9D,EAAE,KAAK,eAAe,MAAM,eAAe,MAAM,mBAAgB;AAAA,IACjE,EAAE,KAAK,eAAe,MAAM,oBAAoB,MAAM,mBAAgB;AAAA,IACtE,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,mBAAgB;AAAA,IAC5E,EAAE,KAAK,eAAe,MAAM,qBAAqB,MAAM,mBAAgB;AAAA,EAC3E;AACJ,CAAC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -14,7 +14,11 @@ Resource.add({
|
|
|
14
14
|
{ tag: "requirement", name: "Identify", xref: "device\xA714.2.6" },
|
|
15
15
|
{ tag: "requirement", name: "Thermostat", xref: "device\xA714.2.6" },
|
|
16
16
|
{ tag: "requirement", name: "WaterHeaterManagement", xref: "device\xA714.2.6" },
|
|
17
|
-
{ tag: "requirement", name: "WaterHeaterMode", xref: "device\xA714.2.6" }
|
|
17
|
+
{ tag: "requirement", name: "WaterHeaterMode", xref: "device\xA714.2.6" },
|
|
18
|
+
{ tag: "requirement", name: "PowerSource", xref: "device\xA714.2.5" },
|
|
19
|
+
{ tag: "requirement", name: "TemperatureSensor", xref: "device\xA714.2.5" },
|
|
20
|
+
{ tag: "requirement", name: "ElectricalSensor", xref: "device\xA714.2.5" },
|
|
21
|
+
{ tag: "requirement", name: "DeviceEnergyManagement", xref: "device\xA714.2.5" }
|
|
18
22
|
]
|
|
19
23
|
});
|
|
20
24
|
//# sourceMappingURL=water-heater.resource.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/standard/resources/water-heater.resource.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,gBAAgB;AAEzB,SAAS,IAAI;AAAA,EACT,KAAK;AAAA,EAAc,MAAM;AAAA,EAAe,gBAAgB;AAAA,EAAU,MAAM;AAAA,EACxE,SAAS;AAAA,EAGT,UAAU;AAAA,IACN,EAAE,KAAK,eAAe,MAAM,YAAY,MAAM,mBAAgB;AAAA,IAC9D,EAAE,KAAK,eAAe,MAAM,cAAc,MAAM,mBAAgB;AAAA,IAChE,EAAE,KAAK,eAAe,MAAM,yBAAyB,MAAM,mBAAgB;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,mBAAmB,MAAM,mBAAgB;AAAA,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,gBAAgB;AAEzB,SAAS,IAAI;AAAA,EACT,KAAK;AAAA,EAAc,MAAM;AAAA,EAAe,gBAAgB;AAAA,EAAU,MAAM;AAAA,EACxE,SAAS;AAAA,EAGT,UAAU;AAAA,IACN,EAAE,KAAK,eAAe,MAAM,YAAY,MAAM,mBAAgB;AAAA,IAC9D,EAAE,KAAK,eAAe,MAAM,cAAc,MAAM,mBAAgB;AAAA,IAChE,EAAE,KAAK,eAAe,MAAM,yBAAyB,MAAM,mBAAgB;AAAA,IAC3E,EAAE,KAAK,eAAe,MAAM,mBAAmB,MAAM,mBAAgB;AAAA,IACrE,EAAE,KAAK,eAAe,MAAM,eAAe,MAAM,mBAAgB;AAAA,IACjE,EAAE,KAAK,eAAe,MAAM,qBAAqB,MAAM,mBAAgB;AAAA,IACvE,EAAE,KAAK,eAAe,MAAM,oBAAoB,MAAM,mBAAgB;AAAA,IACtE,EAAE,KAAK,eAAe,MAAM,0BAA0B,MAAM,mBAAgB;AAAA,EAChF;AACJ,CAAC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/model",
|
|
3
|
-
"version": "0.16.0-alpha.0-
|
|
3
|
+
"version": "0.16.0-alpha.0-20251104-8c3166ea3",
|
|
4
4
|
"description": "Matter data model",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -31,11 +31,11 @@
|
|
|
31
31
|
"embed-examples": "embedme **/README.md"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@matter/general": "0.16.0-alpha.0-
|
|
34
|
+
"@matter/general": "0.16.0-alpha.0-20251104-8c3166ea3"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@matter/testing": "0.16.0-alpha.0-
|
|
38
|
-
"@matter/tools": "0.16.0-alpha.0-
|
|
37
|
+
"@matter/testing": "0.16.0-alpha.0-20251104-8c3166ea3",
|
|
38
|
+
"@matter/tools": "0.16.0-alpha.0-20251104-8c3166ea3"
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
41
|
"dist/**/*",
|
|
@@ -67,10 +67,10 @@ export class Conformance extends Aspect<Conformance.Definition> {
|
|
|
67
67
|
return Conformance.validateReferences(this, this.ast, errorTarget, lookup);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
validateComputation(errorTarget: Conformance.ErrorTarget,
|
|
70
|
+
validateComputation(errorTarget: Conformance.ErrorTarget, features?: FeatureSet) {
|
|
71
71
|
try {
|
|
72
72
|
// This validation only confirms we can perform computation; we ignore the result
|
|
73
|
-
this.
|
|
73
|
+
this.applicabilityFor({ definedFeatures: features ?? new Set(), supportedFeatures: new Set() });
|
|
74
74
|
} catch (e) {
|
|
75
75
|
errorTarget.error("CANNOT_COMPUTE_CONFORMANCE", `Error computing conformance: ${asError(e).message}`);
|
|
76
76
|
}
|
|
@@ -106,11 +106,8 @@ export class Conformance extends Aspect<Conformance.Definition> {
|
|
|
106
106
|
* This is useful for filtering elements at compile time. For complete accuracy you then need to filter at runtime
|
|
107
107
|
* once field values are known.
|
|
108
108
|
*/
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const sfset =
|
|
112
|
-
supportedFeatures instanceof Set ? (supportedFeatures as Set<string>) : new Set(supportedFeatures);
|
|
113
|
-
return computeApplicability(fset, sfset, this);
|
|
109
|
+
applicabilityFor({ definedFeatures: features, supportedFeatures }: Conformance.FeatureContext) {
|
|
110
|
+
return computeApplicability(features, supportedFeatures, this);
|
|
114
111
|
}
|
|
115
112
|
|
|
116
113
|
override toString() {
|
|
@@ -124,6 +121,11 @@ export class Conformance extends Aspect<Conformance.Definition> {
|
|
|
124
121
|
}
|
|
125
122
|
|
|
126
123
|
export namespace Conformance {
|
|
124
|
+
export interface FeatureContext {
|
|
125
|
+
definedFeatures: Set<string>;
|
|
126
|
+
supportedFeatures: Set<string>;
|
|
127
|
+
}
|
|
128
|
+
|
|
127
129
|
export enum Applicability {
|
|
128
130
|
None = 0,
|
|
129
131
|
Optional = 1,
|
|
@@ -73,14 +73,14 @@ export namespace ClusterModifier {
|
|
|
73
73
|
*/
|
|
74
74
|
export function applyPresence(target: ClusterModel, modifications: ClusterModifier.PresenceModifications) {
|
|
75
75
|
return apply(target, modifications, (element, isSupported) => {
|
|
76
|
-
if (element.
|
|
76
|
+
if (element.effectiveIsSupported === isSupported) {
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
if (element.isFinal) {
|
|
81
81
|
element = element.clone();
|
|
82
82
|
}
|
|
83
|
-
element.
|
|
83
|
+
element.operationalIsSupported = isSupported;
|
|
84
84
|
|
|
85
85
|
return element;
|
|
86
86
|
});
|
|
@@ -116,7 +116,7 @@ export namespace ClusterModifier {
|
|
|
116
116
|
|
|
117
117
|
const replacement = apply(member, mod as T);
|
|
118
118
|
if (replacement === member || replacement === undefined) {
|
|
119
|
-
|
|
119
|
+
continue;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
if (model === undefined) {
|
package/src/logic/Scope.ts
CHANGED
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Conformance } from "#aspects/Conformance.js";
|
|
7
8
|
import { ElementTag } from "#common/ElementTag.js";
|
|
8
9
|
import { SchemaImplementationError } from "#common/errors.js";
|
|
9
|
-
import { FeatureSet } from "#common/FeatureSet.js";
|
|
10
10
|
import { ImplementationError } from "#general";
|
|
11
|
+
import { ModelIndex, MutableModelIndex } from "./ModelIndex.js";
|
|
11
12
|
import { ModelTraversal } from "./ModelTraversal.js";
|
|
12
13
|
|
|
13
14
|
// These must be types to avoid circular references
|
|
14
15
|
import type { ClusterModel, Model, ScopeModel, ValueModel } from "#models/index.js";
|
|
15
|
-
import { ModelIndex, MutableModelIndex } from "./ModelIndex.js";
|
|
16
16
|
|
|
17
17
|
const DEFAULT_TAGS = new Set([ElementTag.Field, ElementTag.Attribute]);
|
|
18
18
|
const GLOBAL_IDS = new Set([0xfffd, 0xfffc, 0xfffb, 0xfffa, 0xfff9, 0xfff8]);
|
|
@@ -37,7 +37,7 @@ const cache = new WeakMap<Model, Scope>();
|
|
|
37
37
|
*
|
|
38
38
|
* TODO - currently we only consider shadows at scope root but shadows of nested children is possible with this approach
|
|
39
39
|
*/
|
|
40
|
-
export interface Scope {
|
|
40
|
+
export interface Scope extends Conformance.FeatureContext {
|
|
41
41
|
/**
|
|
42
42
|
* The model analyzed.
|
|
43
43
|
*/
|
|
@@ -63,6 +63,14 @@ export interface Scope {
|
|
|
63
63
|
* Identify members (child properties) of the designated model in this scope.
|
|
64
64
|
*/
|
|
65
65
|
membersOf<T extends Model>(parent: T, options?: Scope.MemberOptions): ModelIndex<Model.ChildOf<T>>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Test whether an element is supported in this scope.
|
|
69
|
+
*
|
|
70
|
+
* We define "supported" as an element that is mandatory given active features or has
|
|
71
|
+
* {@link Model#operationalIsSupported} set.
|
|
72
|
+
*/
|
|
73
|
+
hasOperationalSupport(model: Model): boolean;
|
|
66
74
|
}
|
|
67
75
|
|
|
68
76
|
/**
|
|
@@ -91,13 +99,10 @@ export function Scope(subject: Model, options: Scope.ScopeOptions = {}) {
|
|
|
91
99
|
let deconflictedMemberCache: Map<Model, Map<ElementTag, Set<Model>>> | undefined;
|
|
92
100
|
let conformantMemberCache: Map<Model, Map<ElementTag, Set<Model>>> | undefined;
|
|
93
101
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
if (!supportedFeatures) {
|
|
99
|
-
supportedFeatures = new FeatureSet();
|
|
100
|
-
}
|
|
102
|
+
const features: Conformance.FeatureContext = {
|
|
103
|
+
definedFeatures: (owner as ClusterModel).definedFeatures ?? new Set(),
|
|
104
|
+
supportedFeatures: (owner as ClusterModel).supportedFeatures ?? new Set(),
|
|
105
|
+
};
|
|
101
106
|
|
|
102
107
|
if (useCache && !options.disableCache) {
|
|
103
108
|
const cached = cache.get(owner);
|
|
@@ -135,8 +140,9 @@ export function Scope(subject: Model, options: Scope.ScopeOptions = {}) {
|
|
|
135
140
|
}
|
|
136
141
|
});
|
|
137
142
|
|
|
138
|
-
const
|
|
143
|
+
const scope: Scope = {
|
|
139
144
|
owner,
|
|
145
|
+
...features,
|
|
140
146
|
isShadow: shadows ? model => shadows!.has(model as ValueModel) : () => false,
|
|
141
147
|
extensionOf: shadows
|
|
142
148
|
? <T extends Model>(model?: T) => shadows!.get(model as unknown as ValueModel)?.[0] as T | undefined
|
|
@@ -146,6 +152,7 @@ export function Scope(subject: Model, options: Scope.ScopeOptions = {}) {
|
|
|
146
152
|
(shadows!.get(model as unknown as ValueModel)?.[0] as T | undefined) ?? model
|
|
147
153
|
: <T extends Model>(model: T) => model,
|
|
148
154
|
membersOf,
|
|
155
|
+
hasOperationalSupport,
|
|
149
156
|
};
|
|
150
157
|
|
|
151
158
|
function membersOf<T extends Model>(parent: T, options: Scope.MemberOptions = {}) {
|
|
@@ -154,7 +161,7 @@ export function Scope(subject: Model, options: Scope.ScopeOptions = {}) {
|
|
|
154
161
|
if (Array.isArray(tags)) {
|
|
155
162
|
tags = new Set(tags);
|
|
156
163
|
}
|
|
157
|
-
const allMembers = findAllMembers(parent, tags,
|
|
164
|
+
const allMembers = findAllMembers(parent, tags, scope);
|
|
158
165
|
|
|
159
166
|
if (parent.tag === ElementTag.Cluster && tags.has(ElementTag.Attribute)) {
|
|
160
167
|
injectGlobalAttributes(
|
|
@@ -177,18 +184,30 @@ export function Scope(subject: Model, options: Scope.ScopeOptions = {}) {
|
|
|
177
184
|
parent,
|
|
178
185
|
tags,
|
|
179
186
|
allMembers,
|
|
180
|
-
|
|
181
|
-
supportedFeatures,
|
|
187
|
+
features,
|
|
182
188
|
conformantOnly,
|
|
183
189
|
conformantOnly ? deconflictedMemberCache : conformantMemberCache,
|
|
184
190
|
);
|
|
185
191
|
}
|
|
186
192
|
|
|
193
|
+
function hasOperationalSupport(model: Model) {
|
|
194
|
+
model = scope.modelFor(model);
|
|
195
|
+
|
|
196
|
+
const operational = model.effectiveIsSupported;
|
|
197
|
+
if (operational !== undefined) {
|
|
198
|
+
return operational;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const conformance = (model as { effectiveConformance?: Conformance }).effectiveConformance;
|
|
202
|
+
|
|
203
|
+
return conformance?.applicabilityFor(scope) === Conformance.Applicability.Mandatory;
|
|
204
|
+
}
|
|
205
|
+
|
|
187
206
|
if (useCache) {
|
|
188
|
-
cache.set(owner,
|
|
207
|
+
cache.set(owner, scope);
|
|
189
208
|
}
|
|
190
209
|
|
|
191
|
-
return
|
|
210
|
+
return scope;
|
|
192
211
|
}
|
|
193
212
|
|
|
194
213
|
export namespace Scope {
|
|
@@ -350,8 +369,7 @@ function filterWithConformance<T extends Model>(
|
|
|
350
369
|
parent: T,
|
|
351
370
|
tags: Set<ElementTag>,
|
|
352
371
|
members: Model[],
|
|
353
|
-
features:
|
|
354
|
-
supportedFeatures: FeatureSet,
|
|
372
|
+
features: Conformance.FeatureContext,
|
|
355
373
|
conformantOnly: boolean,
|
|
356
374
|
cache?: Map<Model, Map<ElementTag, Set<Model>>>,
|
|
357
375
|
) {
|
|
@@ -388,13 +406,13 @@ function filterWithConformance<T extends Model>(
|
|
|
388
406
|
);
|
|
389
407
|
}
|
|
390
408
|
|
|
391
|
-
if (conformantOnly && !conformance.
|
|
409
|
+
if (conformantOnly && !conformance.applicabilityFor(features)) {
|
|
392
410
|
continue;
|
|
393
411
|
}
|
|
394
412
|
|
|
395
413
|
const other = selectedMembers[tag][member.name];
|
|
396
414
|
if (other !== undefined) {
|
|
397
|
-
if (!conformantOnly && !conformance.
|
|
415
|
+
if (!conformantOnly && !conformance.applicabilityFor(features)) {
|
|
398
416
|
continue;
|
|
399
417
|
}
|
|
400
418
|
|
|
@@ -405,7 +423,7 @@ function filterWithConformance<T extends Model>(
|
|
|
405
423
|
);
|
|
406
424
|
}
|
|
407
425
|
|
|
408
|
-
if (otherConformance.
|
|
426
|
+
if (otherConformance.applicabilityFor(features)) {
|
|
409
427
|
throw new SchemaImplementationError(
|
|
410
428
|
parent,
|
|
411
429
|
`There are multiple definitions of "${member.name}" that cannot be differentiated by conformance`,
|
|
@@ -25,10 +25,15 @@ ModelValidator.validators[RequirementElement.Tag] = class RequirementValidator e
|
|
|
25
25
|
switch (this.model.element) {
|
|
26
26
|
case RequirementElement.ElementType.ClientCluster:
|
|
27
27
|
case RequirementElement.ElementType.ServerCluster:
|
|
28
|
-
if (
|
|
28
|
+
if (
|
|
29
|
+
parentTag !== ElementTag.DeviceType &&
|
|
30
|
+
(parentTag !== ElementTag.Requirement ||
|
|
31
|
+
(this.model.parent as RequirementModel).element !==
|
|
32
|
+
RequirementElement.ElementType.DeviceType)
|
|
33
|
+
) {
|
|
29
34
|
this.error(
|
|
30
35
|
"ILLEGAL_REQUIREMENT_PARENT",
|
|
31
|
-
`Requirement type ${this.model.type} must be parented by device type`,
|
|
36
|
+
`Requirement type ${this.model.type} must be parented by device type or device requirement`,
|
|
32
37
|
);
|
|
33
38
|
}
|
|
34
39
|
break;
|
|
@@ -43,7 +43,7 @@ export class ValueValidator<T extends ValueModel> extends ModelValidator<T> {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
|
-
this.model.conformance.validateComputation(this, this.model.owner(ClusterModel)?.
|
|
46
|
+
this.model.conformance.validateComputation(this, this.model.owner(ClusterModel)?.definedFeatures);
|
|
47
47
|
|
|
48
48
|
this.#validateAspect("constraint");
|
|
49
49
|
this.#validateAspect("access");
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import type { Conformance } from "#aspects/Conformance.js";
|
|
7
8
|
import { camelize, describeList } from "#general";
|
|
8
9
|
import { ModelIndex } from "#logic/ModelIndex.js";
|
|
9
10
|
import { ModelTraversal } from "#logic/ModelTraversal.js";
|
|
@@ -21,7 +22,10 @@ import type { FieldModel } from "./FieldModel.js";
|
|
|
21
22
|
import { Model } from "./Model.js";
|
|
22
23
|
import { ScopeModel } from "./ScopeModel.js";
|
|
23
24
|
|
|
24
|
-
export class ClusterModel
|
|
25
|
+
export class ClusterModel
|
|
26
|
+
extends ScopeModel<ClusterElement, ClusterModel.Child>
|
|
27
|
+
implements ClusterElement, Conformance.FeatureContext
|
|
28
|
+
{
|
|
25
29
|
override tag: ClusterElement.Tag = ClusterElement.Tag;
|
|
26
30
|
|
|
27
31
|
#quality: Quality;
|
|
@@ -106,7 +110,7 @@ export class ClusterModel extends ScopeModel<ClusterElement, ClusterModel.Child>
|
|
|
106
110
|
return (this.member(FeatureMap.id, [ElementTag.Attribute]) as AttributeModel) ?? new AttributeModel(FeatureMap);
|
|
107
111
|
}
|
|
108
112
|
|
|
109
|
-
get
|
|
113
|
+
get definedFeatures(): FeatureSet {
|
|
110
114
|
return new FeatureSet(this.features.map(feature => feature.name));
|
|
111
115
|
}
|
|
112
116
|
|
package/src/models/Model.ts
CHANGED
|
@@ -54,7 +54,7 @@ export abstract class Model<E extends BaseElement = BaseElement, C extends Model
|
|
|
54
54
|
*
|
|
55
55
|
* This is an operational implementation hint and does not override conformance.
|
|
56
56
|
*/
|
|
57
|
-
|
|
57
|
+
operationalIsSupported?: boolean;
|
|
58
58
|
|
|
59
59
|
#id: E["id"];
|
|
60
60
|
#name: string;
|
|
@@ -329,6 +329,17 @@ export abstract class Model<E extends BaseElement = BaseElement, C extends Model
|
|
|
329
329
|
return [this.tag];
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
+
/**
|
|
333
|
+
* Obtain the "is supported" flag from inheritance.
|
|
334
|
+
*/
|
|
335
|
+
get effectiveIsSupported(): boolean | undefined {
|
|
336
|
+
if (this.operationalIsSupported !== undefined) {
|
|
337
|
+
return this.operationalIsSupported;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return this.base?.effectiveIsSupported;
|
|
341
|
+
}
|
|
342
|
+
|
|
332
343
|
/**
|
|
333
344
|
* Update a subset of fields.
|
|
334
345
|
*
|
|
@@ -532,16 +543,15 @@ export abstract class Model<E extends BaseElement = BaseElement, C extends Model
|
|
|
532
543
|
*/
|
|
533
544
|
extend<This extends Model>(
|
|
534
545
|
this: This,
|
|
535
|
-
properties?: Partial<
|
|
546
|
+
properties?: Partial<Model.Definition<This>>,
|
|
536
547
|
...children: Model.ChildDefinition<Model>[]
|
|
537
548
|
): This {
|
|
538
549
|
const constructor = this.constructor as new (properties: unknown) => This;
|
|
539
|
-
|
|
540
550
|
const definition = {
|
|
541
551
|
id: this.id,
|
|
542
552
|
name: this.name,
|
|
543
553
|
|
|
544
|
-
...properties,
|
|
554
|
+
...properties!, // This assertion may be a lie, but necessary due to apparent TS bug
|
|
545
555
|
|
|
546
556
|
tag: this.tag,
|
|
547
557
|
operationalBase: this,
|
|
@@ -573,7 +583,7 @@ export abstract class Model<E extends BaseElement = BaseElement, C extends Model
|
|
|
573
583
|
this.isSeed = definition.isSeed;
|
|
574
584
|
this.operationalBase = definition.operationalBase;
|
|
575
585
|
this.operationalShadow = definition.operationalShadow;
|
|
576
|
-
this.
|
|
586
|
+
this.operationalIsSupported = definition.operationalIsSupported;
|
|
577
587
|
|
|
578
588
|
if (isClone) {
|
|
579
589
|
if (definition.hasLocalResource) {
|
|
@@ -762,7 +772,7 @@ export namespace Model {
|
|
|
762
772
|
parent?: Model;
|
|
763
773
|
operationalBase?: Model;
|
|
764
774
|
operationalShadow?: Model;
|
|
765
|
-
|
|
775
|
+
operationalIsSupported?: boolean;
|
|
766
776
|
})
|
|
767
777
|
| T;
|
|
768
778
|
|
package/src/models/Schema.ts
CHANGED
|
@@ -54,10 +54,20 @@ export function Schema(source: Model.Source) {
|
|
|
54
54
|
throw new ImplementationError(`Model ${model.name} tag ${model.tag} is not legal for schema`);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
return model as Schema;
|
|
57
|
+
return model as Schema.Struct;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
export namespace Schema {
|
|
61
|
+
/**
|
|
62
|
+
* Schema that defines an object with named properties.
|
|
63
|
+
*/
|
|
64
|
+
export type Struct = ClusterModel | DatatypeModel;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Schema that defines a cluster.
|
|
68
|
+
*/
|
|
69
|
+
export type Cluster = ClusterModel;
|
|
70
|
+
|
|
61
71
|
/**
|
|
62
72
|
* Obtain {@link Schema} that is required for operation.
|
|
63
73
|
*/
|
|
@@ -74,4 +84,6 @@ export namespace Schema {
|
|
|
74
84
|
export type Source = Schema | NewableFunction;
|
|
75
85
|
|
|
76
86
|
export const empty = new DatatypeModel({ name: "Empty", type: "struct" });
|
|
87
|
+
|
|
88
|
+
empty.finalize();
|
|
77
89
|
}
|
|
@@ -20,7 +20,11 @@ export const AirPurifierDt = DeviceType(
|
|
|
20
20
|
Requirement({ name: "OnOff", id: 0x6, conformance: "O", element: "serverCluster" }),
|
|
21
21
|
Requirement({ name: "FanControl", id: 0x202, conformance: "M", element: "serverCluster" }),
|
|
22
22
|
Requirement({ name: "HepaFilterMonitoring", id: 0x71, conformance: "O", element: "serverCluster" }),
|
|
23
|
-
Requirement({ name: "ActivatedCarbonFilterMonitoring", id: 0x72, conformance: "O", element: "serverCluster" })
|
|
23
|
+
Requirement({ name: "ActivatedCarbonFilterMonitoring", id: 0x72, conformance: "O", element: "serverCluster" }),
|
|
24
|
+
Requirement({ name: "Thermostat", id: 0x301, conformance: "O", element: "deviceType" }),
|
|
25
|
+
Requirement({ name: "TemperatureSensor", id: 0x302, conformance: "O", element: "deviceType" }),
|
|
26
|
+
Requirement({ name: "HumiditySensor", id: 0x307, conformance: "O", element: "deviceType" }),
|
|
27
|
+
Requirement({ name: "AirQualitySensor", id: 0x2c, conformance: "O", element: "deviceType" })
|
|
24
28
|
);
|
|
25
29
|
|
|
26
30
|
MatterDefinition.children.push(AirPurifierDt);
|
|
@@ -15,7 +15,64 @@ export const BatteryStorageDt = DeviceType(
|
|
|
15
15
|
{ name: "Descriptor", id: 0x1d, element: "serverCluster" },
|
|
16
16
|
Requirement({ name: "DeviceTypeList", default: [ { deviceType: 24, revision: 1 } ], element: "attribute" })
|
|
17
17
|
),
|
|
18
|
-
Requirement({ name: "Identify", id: 0x3, conformance: "O", element: "serverCluster" })
|
|
18
|
+
Requirement({ name: "Identify", id: 0x3, conformance: "O", element: "serverCluster" }),
|
|
19
|
+
|
|
20
|
+
Requirement(
|
|
21
|
+
{ name: "PowerSource", id: 0x11, conformance: "M", element: "deviceType" },
|
|
22
|
+
|
|
23
|
+
Requirement(
|
|
24
|
+
{ name: "PowerSource", id: 0x2f, element: "serverCluster" },
|
|
25
|
+
Requirement({ name: "Wired", conformance: "M", element: "feature" }),
|
|
26
|
+
Requirement({ name: "Battery", conformance: "M", element: "feature" }),
|
|
27
|
+
Requirement({ name: "BatVoltage", conformance: "M", element: "attribute" }),
|
|
28
|
+
Requirement({ name: "BatPercentRemaining", conformance: "M", element: "attribute" }),
|
|
29
|
+
Requirement({ name: "BatTimeRemaining", conformance: "M", element: "attribute" }),
|
|
30
|
+
Requirement({ name: "ActiveBatFaults", conformance: "M", element: "attribute" }),
|
|
31
|
+
Requirement({ name: "BatCapacity", conformance: "M", element: "attribute" }),
|
|
32
|
+
Requirement({ name: "BatTimeToFullCharge", conformance: "M", element: "attribute" }),
|
|
33
|
+
Requirement({ name: "BatChargingCurrent", conformance: "M", element: "attribute" }),
|
|
34
|
+
Requirement({ name: "ActiveBatChargeFaults", conformance: "M", element: "attribute" })
|
|
35
|
+
),
|
|
36
|
+
|
|
37
|
+
Requirement(
|
|
38
|
+
{ name: "Descriptor", id: 0x1d, element: "serverCluster" },
|
|
39
|
+
Requirement({ name: "TagList", conformance: "M", element: "feature" })
|
|
40
|
+
)
|
|
41
|
+
),
|
|
42
|
+
|
|
43
|
+
Requirement(
|
|
44
|
+
{ name: "ElectricalSensor", id: 0x510, conformance: "M", element: "deviceType" },
|
|
45
|
+
|
|
46
|
+
Requirement(
|
|
47
|
+
{ name: "ElectricalPowerMeasurement", id: 0x90, element: "serverCluster" },
|
|
48
|
+
Requirement({ name: "AlternatingCurrent", conformance: "M", element: "feature" }),
|
|
49
|
+
Requirement({ name: "Voltage", conformance: "M", element: "attribute" }),
|
|
50
|
+
Requirement({ name: "ActiveCurrent", conformance: "M", element: "attribute" })
|
|
51
|
+
),
|
|
52
|
+
|
|
53
|
+
Requirement(
|
|
54
|
+
{ name: "ElectricalEnergyMeasurement", id: 0x91, element: "serverCluster" },
|
|
55
|
+
Requirement({ name: "ExportedEnergy", conformance: "M", element: "feature" })
|
|
56
|
+
)
|
|
57
|
+
),
|
|
58
|
+
|
|
59
|
+
Requirement(
|
|
60
|
+
{ name: "DeviceEnergyManagement", id: 0x50d, conformance: "M", element: "deviceType" },
|
|
61
|
+
Requirement(
|
|
62
|
+
{ name: "DeviceEnergyManagement", id: 0x98, element: "serverCluster" },
|
|
63
|
+
Requirement({ name: "PowerAdjustment", conformance: "M", element: "feature" })
|
|
64
|
+
)
|
|
65
|
+
),
|
|
66
|
+
|
|
67
|
+
Requirement(
|
|
68
|
+
{ name: "TemperatureSensor", id: 0x302, conformance: "O", element: "deviceType" },
|
|
69
|
+
Requirement(
|
|
70
|
+
{ name: "Descriptor", id: 0x1d, element: "serverCluster" },
|
|
71
|
+
Requirement({ name: "TagList", conformance: "M", element: "feature" })
|
|
72
|
+
)
|
|
73
|
+
),
|
|
74
|
+
|
|
75
|
+
Requirement({ name: "SolarPower", id: 0x17, conformance: "O", element: "deviceType" })
|
|
19
76
|
);
|
|
20
77
|
|
|
21
78
|
MatterDefinition.children.push(BatteryStorageDt);
|
|
@@ -26,6 +26,7 @@ export const BridgedNodeDt = DeviceType(
|
|
|
26
26
|
{ name: "EcosystemInformation", id: 0x750, conformance: "FabricSynchronizedNode, O", element: "serverCluster" }
|
|
27
27
|
),
|
|
28
28
|
Requirement({ name: "AdministratorCommissioning", id: 0x3c, conformance: "FabricSynchronizedNode", element: "serverCluster" }),
|
|
29
|
+
Requirement({ name: "PowerSource", id: 0x11, conformance: "O", element: "deviceType" }),
|
|
29
30
|
Field({ name: "conditions", type: "enum8" }, Field({ name: "FabricSynchronizedNode" }))
|
|
30
31
|
);
|
|
31
32
|
|
|
@@ -19,7 +19,8 @@ export const CooktopDt = DeviceType(
|
|
|
19
19
|
Requirement(
|
|
20
20
|
{ name: "OnOff", id: 0x6, conformance: "M", element: "serverCluster" },
|
|
21
21
|
Requirement({ name: "OFFONLY", conformance: "M", element: "feature" })
|
|
22
|
-
)
|
|
22
|
+
),
|
|
23
|
+
Requirement({ name: "CookSurface", id: 0x77, conformance: "O", element: "deviceType" })
|
|
23
24
|
);
|
|
24
25
|
|
|
25
26
|
MatterDefinition.children.push(CooktopDt);
|
|
@@ -18,7 +18,10 @@ export const EnergyEvseDt = DeviceType(
|
|
|
18
18
|
Requirement({ name: "Identify", id: 0x3, conformance: "O", element: "serverCluster" }),
|
|
19
19
|
Requirement({ name: "EnergyEvse", id: 0x99, conformance: "M", element: "serverCluster" }),
|
|
20
20
|
Requirement({ name: "EnergyEvseMode", id: 0x9d, conformance: "M", element: "serverCluster" }),
|
|
21
|
-
Requirement({ name: "TemperatureMeasurement", id: 0x402, conformance: "O", element: "serverCluster" })
|
|
21
|
+
Requirement({ name: "TemperatureMeasurement", id: 0x402, conformance: "O", element: "serverCluster" }),
|
|
22
|
+
Requirement({ name: "PowerSource", id: 0x11, conformance: "M", element: "deviceType" }),
|
|
23
|
+
Requirement({ name: "ElectricalSensor", id: 0x510, conformance: "M", element: "deviceType" }),
|
|
24
|
+
Requirement({ name: "DeviceEnergyManagement", id: 0x50d, conformance: "M", element: "deviceType" })
|
|
22
25
|
);
|
|
23
26
|
|
|
24
27
|
MatterDefinition.children.push(EnergyEvseDt);
|
|
@@ -24,7 +24,9 @@ export const ExtractorHoodDt = DeviceType(
|
|
|
24
24
|
Requirement({ name: "ROCKING", conformance: "X", element: "feature" }),
|
|
25
25
|
Requirement({ name: "WIND", conformance: "X", element: "feature" }),
|
|
26
26
|
Requirement({ name: "AIRFLOWDIRECTION", conformance: "X", element: "feature" })
|
|
27
|
-
)
|
|
27
|
+
),
|
|
28
|
+
|
|
29
|
+
Requirement({ name: "OnOffLight", id: 0x100, conformance: "O", element: "deviceType" })
|
|
28
30
|
);
|
|
29
31
|
|
|
30
32
|
MatterDefinition.children.push(ExtractorHoodDt);
|
|
@@ -21,7 +21,8 @@ export const FanDt = DeviceType(
|
|
|
21
21
|
Requirement(
|
|
22
22
|
{ name: "FanControl", id: 0x202, conformance: "M", element: "serverCluster" },
|
|
23
23
|
Requirement({ name: "FanModeSequence", access: "R V", conformance: "Matter", element: "attribute" })
|
|
24
|
-
)
|
|
24
|
+
),
|
|
25
|
+
Requirement({ name: "Thermostat", id: 0x301, conformance: "O", element: "deviceType" })
|
|
25
26
|
);
|
|
26
27
|
|
|
27
28
|
MatterDefinition.children.push(FanDt);
|