@matter/model 0.11.9-alpha.0-20241203-06077d82e → 0.11.9-alpha.0-20241206-22f233334
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/elements/MatterElement.d.ts +5 -1
- package/dist/cjs/elements/MatterElement.d.ts.map +1 -1
- package/dist/cjs/elements/MatterElement.js +1 -1
- package/dist/cjs/elements/MatterElement.js.map +1 -1
- package/dist/cjs/logic/DefaultValue.d.ts +3 -1
- package/dist/cjs/logic/DefaultValue.d.ts.map +1 -1
- package/dist/cjs/logic/DefaultValue.js +11 -11
- package/dist/cjs/logic/DefaultValue.js.map +1 -1
- package/dist/cjs/logic/ModelTraversal.d.ts +6 -35
- package/dist/cjs/logic/ModelTraversal.d.ts.map +1 -1
- package/dist/cjs/logic/ModelTraversal.js +15 -109
- package/dist/cjs/logic/ModelTraversal.js.map +1 -1
- package/dist/cjs/logic/ModelVariantTraversal.d.ts.map +1 -1
- package/dist/cjs/logic/ModelVariantTraversal.js.map +1 -1
- package/dist/cjs/logic/Scope.d.ts +102 -0
- package/dist/cjs/logic/Scope.d.ts.map +1 -0
- package/dist/cjs/logic/Scope.js +220 -0
- package/dist/cjs/logic/Scope.js.map +6 -0
- package/dist/cjs/logic/definition-validation/ModelValidator.d.ts.map +1 -1
- package/dist/cjs/logic/index.d.ts +1 -0
- package/dist/cjs/logic/index.d.ts.map +1 -1
- package/dist/cjs/logic/index.js +1 -0
- package/dist/cjs/logic/index.js.map +1 -1
- package/dist/cjs/models/AttributeModel.d.ts +20 -0
- package/dist/cjs/models/AttributeModel.d.ts.map +1 -1
- package/dist/cjs/models/AttributeModel.js +3 -0
- package/dist/cjs/models/AttributeModel.js.map +1 -1
- package/dist/cjs/models/Children.d.ts +4 -0
- package/dist/cjs/models/Children.d.ts.map +1 -1
- package/dist/cjs/models/Children.js +13 -0
- package/dist/cjs/models/Children.js.map +1 -1
- package/dist/cjs/models/ClusterModel.d.ts +6 -7
- package/dist/cjs/models/ClusterModel.d.ts.map +1 -1
- package/dist/cjs/models/ClusterModel.js +5 -38
- package/dist/cjs/models/ClusterModel.js.map +1 -1
- package/dist/cjs/models/CommandModel.d.ts +22 -0
- package/dist/cjs/models/CommandModel.d.ts.map +1 -1
- package/dist/cjs/models/CommandModel.js +3 -0
- package/dist/cjs/models/CommandModel.js.map +1 -1
- package/dist/cjs/models/DatatypeModel.js +0 -2
- package/dist/cjs/models/DatatypeModel.js.map +1 -1
- package/dist/cjs/models/EventModel.d.ts +21 -0
- package/dist/cjs/models/EventModel.d.ts.map +1 -1
- package/dist/cjs/models/EventModel.js +3 -0
- package/dist/cjs/models/EventModel.js.map +1 -1
- package/dist/cjs/models/MatterModel.d.ts +3 -3
- package/dist/cjs/models/MatterModel.d.ts.map +1 -1
- package/dist/cjs/models/MatterModel.js +6 -5
- package/dist/cjs/models/MatterModel.js.map +1 -1
- package/dist/cjs/models/Model.d.ts +10 -6
- package/dist/cjs/models/Model.d.ts.map +1 -1
- package/dist/cjs/models/Model.js +28 -9
- package/dist/cjs/models/Model.js.map +1 -1
- package/dist/cjs/models/ScopeModel.d.ts +22 -0
- package/dist/cjs/models/ScopeModel.d.ts.map +1 -0
- package/dist/cjs/models/ScopeModel.js +63 -0
- package/dist/cjs/models/ScopeModel.js.map +6 -0
- package/dist/cjs/models/ValueModel.d.ts +7 -21
- package/dist/cjs/models/ValueModel.d.ts.map +1 -1
- package/dist/cjs/models/ValueModel.js +15 -34
- package/dist/cjs/models/ValueModel.js.map +1 -1
- package/dist/cjs/models/index.d.ts +1 -0
- package/dist/cjs/models/index.d.ts.map +1 -1
- package/dist/cjs/models/index.js +1 -0
- package/dist/cjs/models/index.js.map +1 -1
- package/dist/cjs/standard/elements/ColorControl.js +3 -4
- package/dist/cjs/standard/elements/ColorControl.js.map +1 -1
- package/dist/cjs/standard/elements/ModeBase.js +1 -1
- package/dist/cjs/standard/elements/ModeBase.js.map +1 -1
- package/dist/cjs/standard/elements/PumpConfigurationAndControl.d.ts.map +1 -1
- package/dist/cjs/standard/elements/PumpConfigurationAndControl.js +3 -20
- package/dist/cjs/standard/elements/PumpConfigurationAndControl.js.map +1 -1
- package/dist/cjs/standard/elements/UserLabel.d.ts.map +1 -1
- package/dist/cjs/standard/elements/UserLabel.js +13 -16
- package/dist/cjs/standard/elements/UserLabel.js.map +1 -1
- package/dist/cjs/standard/elements/WildcardPathFlagsBitmap.d.ts.map +1 -1
- package/dist/cjs/standard/elements/WildcardPathFlagsBitmap.js +1 -5
- package/dist/cjs/standard/elements/WildcardPathFlagsBitmap.js.map +1 -1
- package/dist/cjs/standard/elements/WindowCovering.js +2 -2
- package/dist/esm/elements/MatterElement.d.ts +5 -1
- package/dist/esm/elements/MatterElement.d.ts.map +1 -1
- package/dist/esm/elements/MatterElement.js +1 -1
- package/dist/esm/elements/MatterElement.js.map +1 -1
- package/dist/esm/logic/DefaultValue.d.ts +3 -1
- package/dist/esm/logic/DefaultValue.d.ts.map +1 -1
- package/dist/esm/logic/DefaultValue.js +11 -11
- package/dist/esm/logic/DefaultValue.js.map +1 -1
- package/dist/esm/logic/ModelTraversal.d.ts +6 -35
- package/dist/esm/logic/ModelTraversal.d.ts.map +1 -1
- package/dist/esm/logic/ModelTraversal.js +16 -110
- package/dist/esm/logic/ModelTraversal.js.map +1 -1
- package/dist/esm/logic/ModelVariantTraversal.d.ts.map +1 -1
- package/dist/esm/logic/ModelVariantTraversal.js.map +1 -1
- package/dist/esm/logic/Scope.d.ts +102 -0
- package/dist/esm/logic/Scope.d.ts.map +1 -0
- package/dist/esm/logic/Scope.js +200 -0
- package/dist/esm/logic/Scope.js.map +6 -0
- package/dist/esm/logic/definition-validation/ModelValidator.d.ts.map +1 -1
- package/dist/esm/logic/index.d.ts +1 -0
- package/dist/esm/logic/index.d.ts.map +1 -1
- package/dist/esm/logic/index.js +1 -0
- package/dist/esm/logic/index.js.map +1 -1
- package/dist/esm/models/AttributeModel.d.ts +20 -0
- package/dist/esm/models/AttributeModel.d.ts.map +1 -1
- package/dist/esm/models/AttributeModel.js +3 -0
- package/dist/esm/models/AttributeModel.js.map +1 -1
- package/dist/esm/models/Children.d.ts +4 -0
- package/dist/esm/models/Children.d.ts.map +1 -1
- package/dist/esm/models/Children.js +13 -0
- package/dist/esm/models/Children.js.map +1 -1
- package/dist/esm/models/ClusterModel.d.ts +6 -7
- package/dist/esm/models/ClusterModel.d.ts.map +1 -1
- package/dist/esm/models/ClusterModel.js +5 -38
- package/dist/esm/models/ClusterModel.js.map +1 -1
- package/dist/esm/models/CommandModel.d.ts +22 -0
- package/dist/esm/models/CommandModel.d.ts.map +1 -1
- package/dist/esm/models/CommandModel.js +3 -0
- package/dist/esm/models/CommandModel.js.map +1 -1
- package/dist/esm/models/DatatypeModel.js +0 -2
- package/dist/esm/models/DatatypeModel.js.map +1 -1
- package/dist/esm/models/EventModel.d.ts +21 -0
- package/dist/esm/models/EventModel.d.ts.map +1 -1
- package/dist/esm/models/EventModel.js +3 -0
- package/dist/esm/models/EventModel.js.map +1 -1
- package/dist/esm/models/MatterModel.d.ts +3 -3
- package/dist/esm/models/MatterModel.d.ts.map +1 -1
- package/dist/esm/models/MatterModel.js +6 -5
- package/dist/esm/models/MatterModel.js.map +1 -1
- package/dist/esm/models/Model.d.ts +10 -6
- package/dist/esm/models/Model.d.ts.map +1 -1
- package/dist/esm/models/Model.js +28 -9
- package/dist/esm/models/Model.js.map +1 -1
- package/dist/esm/models/ScopeModel.d.ts +22 -0
- package/dist/esm/models/ScopeModel.d.ts.map +1 -0
- package/dist/esm/models/ScopeModel.js +43 -0
- package/dist/esm/models/ScopeModel.js.map +6 -0
- package/dist/esm/models/ValueModel.d.ts +7 -21
- package/dist/esm/models/ValueModel.d.ts.map +1 -1
- package/dist/esm/models/ValueModel.js +15 -34
- package/dist/esm/models/ValueModel.js.map +1 -1
- package/dist/esm/models/index.d.ts +1 -0
- package/dist/esm/models/index.d.ts.map +1 -1
- package/dist/esm/models/index.js +1 -0
- package/dist/esm/models/index.js.map +1 -1
- package/dist/esm/standard/elements/ColorControl.js +3 -4
- package/dist/esm/standard/elements/ColorControl.js.map +1 -1
- package/dist/esm/standard/elements/ModeBase.js +1 -1
- package/dist/esm/standard/elements/ModeBase.js.map +1 -1
- package/dist/esm/standard/elements/PumpConfigurationAndControl.d.ts.map +1 -1
- package/dist/esm/standard/elements/PumpConfigurationAndControl.js +3 -20
- package/dist/esm/standard/elements/PumpConfigurationAndControl.js.map +1 -1
- package/dist/esm/standard/elements/UserLabel.d.ts.map +1 -1
- package/dist/esm/standard/elements/UserLabel.js +13 -16
- package/dist/esm/standard/elements/UserLabel.js.map +1 -1
- package/dist/esm/standard/elements/WildcardPathFlagsBitmap.d.ts.map +1 -1
- package/dist/esm/standard/elements/WildcardPathFlagsBitmap.js +1 -5
- package/dist/esm/standard/elements/WildcardPathFlagsBitmap.js.map +1 -1
- package/dist/esm/standard/elements/WindowCovering.js +2 -2
- package/package.json +4 -4
- package/src/elements/MatterElement.ts +7 -2
- package/src/logic/DefaultValue.ts +13 -11
- package/src/logic/ModelTraversal.ts +28 -147
- package/src/logic/ModelVariantTraversal.ts +0 -1
- package/src/logic/Scope.ts +400 -0
- package/src/logic/index.ts +1 -0
- package/src/models/AttributeModel.ts +4 -0
- package/src/models/Children.ts +24 -1
- package/src/models/ClusterModel.ts +12 -51
- package/src/models/CommandModel.ts +4 -0
- package/src/models/DatatypeModel.ts +0 -2
- package/src/models/EventModel.ts +4 -0
- package/src/models/MatterModel.ts +6 -5
- package/src/models/Model.ts +38 -12
- package/src/models/ScopeModel.ts +55 -0
- package/src/models/ValueModel.ts +17 -39
- package/src/models/index.ts +1 -0
- package/src/standard/elements/ColorControl.ts +4 -4
- package/src/standard/elements/ModeBase.ts +1 -1
- package/src/standard/elements/PumpConfigurationAndControl.ts +2 -18
- package/src/standard/elements/UserLabel.ts +8 -12
- package/src/standard/elements/WildcardPathFlagsBitmap.ts +1 -4
- package/src/standard/elements/WindowCovering.ts +2 -2
package/src/models/Model.ts
CHANGED
|
@@ -34,11 +34,6 @@ export abstract class Model<T extends BaseElement = BaseElement> {
|
|
|
34
34
|
#name: string;
|
|
35
35
|
#frozen?: boolean;
|
|
36
36
|
|
|
37
|
-
/**
|
|
38
|
-
* Indicates that an element may have type definitions as children.
|
|
39
|
-
*/
|
|
40
|
-
isTypeScope?: boolean;
|
|
41
|
-
|
|
42
37
|
/**
|
|
43
38
|
* Indicates that an element defines a datatype.
|
|
44
39
|
*/
|
|
@@ -59,7 +54,7 @@ export abstract class Model<T extends BaseElement = BaseElement> {
|
|
|
59
54
|
*/
|
|
60
55
|
operationalShadow?: Model | null;
|
|
61
56
|
|
|
62
|
-
#children?: Children
|
|
57
|
+
#children?: Children;
|
|
63
58
|
#parent?: Model;
|
|
64
59
|
|
|
65
60
|
/**
|
|
@@ -269,6 +264,15 @@ export abstract class Model<T extends BaseElement = BaseElement> {
|
|
|
269
264
|
return [this.tag];
|
|
270
265
|
}
|
|
271
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Update a subset of fields.
|
|
269
|
+
*/
|
|
270
|
+
patch(values: Partial<T>) {
|
|
271
|
+
for (const [k, v] of Object.entries(values.valueOf())) {
|
|
272
|
+
this[k as keyof this] = v;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
272
276
|
/**
|
|
273
277
|
* Determine whether this element applies to a specific revision.
|
|
274
278
|
*/
|
|
@@ -357,9 +361,10 @@ export abstract class Model<T extends BaseElement = BaseElement> {
|
|
|
357
361
|
switch (key) {
|
|
358
362
|
case "parent":
|
|
359
363
|
case "errors":
|
|
360
|
-
case "
|
|
364
|
+
case "scope":
|
|
361
365
|
case "isType":
|
|
362
366
|
case "operationalBase":
|
|
367
|
+
case "isScope":
|
|
363
368
|
continue;
|
|
364
369
|
|
|
365
370
|
default:
|
|
@@ -379,6 +384,13 @@ export abstract class Model<T extends BaseElement = BaseElement> {
|
|
|
379
384
|
return new ModelTraversal().visit(this, visitor);
|
|
380
385
|
}
|
|
381
386
|
|
|
387
|
+
/**
|
|
388
|
+
* Visit this model and each of its ancestors.
|
|
389
|
+
*/
|
|
390
|
+
forEachAncestor(fn: (model: Model) => boolean | void) {
|
|
391
|
+
new ModelTraversal().visitInheritance(this, fn);
|
|
392
|
+
}
|
|
393
|
+
|
|
382
394
|
/**
|
|
383
395
|
* Find all children that reference a specific type.
|
|
384
396
|
*/
|
|
@@ -412,10 +424,14 @@ export abstract class Model<T extends BaseElement = BaseElement> {
|
|
|
412
424
|
* Create an operational extension of the model. This creates a new model that inherits from this model for
|
|
413
425
|
* operational purposes.
|
|
414
426
|
*/
|
|
415
|
-
extend<This extends Model>(
|
|
427
|
+
extend<This extends Model>(
|
|
428
|
+
this: This,
|
|
429
|
+
properties?: Partial<BaseElement.Properties<T>>,
|
|
430
|
+
...children: Model.Definition<Model>[]
|
|
431
|
+
): This {
|
|
416
432
|
const constructor = this.constructor as new (properties: unknown) => This;
|
|
417
433
|
|
|
418
|
-
const
|
|
434
|
+
const definition = {
|
|
419
435
|
id: this.id,
|
|
420
436
|
name: this.name,
|
|
421
437
|
|
|
@@ -423,14 +439,24 @@ export abstract class Model<T extends BaseElement = BaseElement> {
|
|
|
423
439
|
|
|
424
440
|
tag: this.tag,
|
|
425
441
|
operationalBase: this,
|
|
426
|
-
}
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
if (children.length) {
|
|
445
|
+
if (definition.children) {
|
|
446
|
+
definition.children = [...definition.children, ...children];
|
|
447
|
+
} else {
|
|
448
|
+
definition.children = children;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const extension = new constructor(definition);
|
|
427
453
|
|
|
428
454
|
return extension;
|
|
429
455
|
}
|
|
430
456
|
|
|
431
457
|
constructor(definition: Model<T> | BaseElement.Properties<T>, ...children: Model.Definition<Model>[]) {
|
|
432
458
|
if (typeof definition !== "object") {
|
|
433
|
-
throw new ImplementationError(`Model definition must be an object, not
|
|
459
|
+
throw new ImplementationError(`Model definition must be an object, not ${typeof definition}`);
|
|
434
460
|
}
|
|
435
461
|
|
|
436
462
|
const isClone = definition instanceof Model;
|
|
@@ -556,7 +582,7 @@ export namespace Model {
|
|
|
556
582
|
/**
|
|
557
583
|
* Obtain the element type of a model type.
|
|
558
584
|
*/
|
|
559
|
-
export type ElementOf<T> = T extends Model<infer E extends AnyElement> ? E :
|
|
585
|
+
export type ElementOf<T> = T extends Model<infer E extends AnyElement> ? E : AnyElement;
|
|
560
586
|
|
|
561
587
|
/**
|
|
562
588
|
* Obtain the child type of a model type.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { SchemaImplementationError } from "#common/errors.js";
|
|
8
|
+
import { BaseElement } from "#elements/BaseElement.js";
|
|
9
|
+
import { ModelTraversal } from "#logic/ModelTraversal.js";
|
|
10
|
+
import { Scope } from "#logic/Scope.js";
|
|
11
|
+
import { Model } from "./Model.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A "scope" is a model provides name resolution for other models.
|
|
15
|
+
*
|
|
16
|
+
* {@link Model#type} must reference a model named in a parent scope.
|
|
17
|
+
*/
|
|
18
|
+
export abstract class ScopeModel<T extends BaseElement = BaseElement> extends Model<T> {
|
|
19
|
+
#operationalScope: undefined | Scope;
|
|
20
|
+
|
|
21
|
+
readonly isScope = true;
|
|
22
|
+
|
|
23
|
+
get scope() {
|
|
24
|
+
if (this.#operationalScope !== undefined) {
|
|
25
|
+
return this.#operationalScope;
|
|
26
|
+
}
|
|
27
|
+
return Scope(this);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override freeze() {
|
|
31
|
+
if (!this.#operationalScope) {
|
|
32
|
+
this.#operationalScope = Scope(this);
|
|
33
|
+
}
|
|
34
|
+
super.freeze();
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static is(model: Model): model is ScopeModel {
|
|
39
|
+
return !!(model as ScopeModel).isScope;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
static of(model: Model) {
|
|
43
|
+
if ((model as ScopeModel).isScope) {
|
|
44
|
+
return model as ScopeModel;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const scope = new ModelTraversal().findScope(model);
|
|
48
|
+
|
|
49
|
+
if (scope === undefined) {
|
|
50
|
+
throw new SchemaImplementationError(model, `No parent scope`);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return scope;
|
|
54
|
+
}
|
|
55
|
+
}
|
package/src/models/ValueModel.ts
CHANGED
|
@@ -14,10 +14,8 @@ import { PropertyModel } from "./PropertyModel.js";
|
|
|
14
14
|
|
|
15
15
|
// These are circular dependencies so just to be safe we only import the types. We also need the class, though, at
|
|
16
16
|
// runtime. So we use the references in the Model.constructors factory pool.
|
|
17
|
-
import {
|
|
18
|
-
import { DefaultValue } from "../logic/DefaultValue.js";
|
|
17
|
+
import { Scope } from "#logic/Scope.js";
|
|
19
18
|
import { Children } from "./Children.js";
|
|
20
|
-
import { type ClusterModel } from "./ClusterModel.js";
|
|
21
19
|
import { type FieldModel } from "./FieldModel.js";
|
|
22
20
|
|
|
23
21
|
const CONSTRAINT: unique symbol = Symbol("constraint");
|
|
@@ -135,14 +133,6 @@ export abstract class ValueModel<T extends ValueElement = ValueElement> extends
|
|
|
135
133
|
}
|
|
136
134
|
}
|
|
137
135
|
|
|
138
|
-
/**
|
|
139
|
-
* The value to use as a default. The "default" field has a manually supplied value but this property decodes the
|
|
140
|
-
* default and/or generates a default from subfields.
|
|
141
|
-
*/
|
|
142
|
-
get effectiveDefault() {
|
|
143
|
-
return DefaultValue(this);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
136
|
/**
|
|
147
137
|
* Get the first derived ancestor with children, if any.
|
|
148
138
|
*/
|
|
@@ -176,34 +166,10 @@ export abstract class ValueModel<T extends ValueElement = ValueElement> extends
|
|
|
176
166
|
}
|
|
177
167
|
|
|
178
168
|
/**
|
|
179
|
-
* All {@link FieldModel} children
|
|
169
|
+
* All {@link FieldModel} children in the context of the model's containing scope.
|
|
180
170
|
*/
|
|
181
171
|
get members(): PropertyModel[] {
|
|
182
|
-
return
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* A subset of {@link members} with conflicts resolved by conformance.
|
|
187
|
-
*/
|
|
188
|
-
get activeMembers() {
|
|
189
|
-
const cluster = this.owner(Model.types[ElementTag.Cluster]) as ClusterModel | undefined;
|
|
190
|
-
return new ModelTraversal().findActiveMembers(this, false, cluster);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* The subset of {@link members} that are conformant.
|
|
195
|
-
*/
|
|
196
|
-
get conformantMembers() {
|
|
197
|
-
const cluster = this.owner(Model.types[ElementTag.Cluster]) as ClusterModel | undefined;
|
|
198
|
-
return new ModelTraversal().findActiveMembers(this, true, cluster);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Active members keyed by property name.
|
|
203
|
-
*/
|
|
204
|
-
get fields() {
|
|
205
|
-
const members = this.activeMembers;
|
|
206
|
-
return Object.fromEntries(members.map(member => [camelize(member.name), member]));
|
|
172
|
+
return Scope(this).membersOf(this) as PropertyModel[];
|
|
207
173
|
}
|
|
208
174
|
|
|
209
175
|
/**
|
|
@@ -290,6 +256,18 @@ export abstract class ValueModel<T extends ValueElement = ValueElement> extends
|
|
|
290
256
|
return new ModelTraversal().findBitDefinition(this, bit);
|
|
291
257
|
}
|
|
292
258
|
|
|
259
|
+
/**
|
|
260
|
+
* Clone the model with minimum metadata required to ensure model is valid.
|
|
261
|
+
*/
|
|
262
|
+
cloneAsReference<This extends ValueModel>(this: This): This {
|
|
263
|
+
const Type = this.constructor as new (definition: T) => This;
|
|
264
|
+
return new Type(this.requiredFields as T);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
get requiredFields() {
|
|
268
|
+
return { name: this.name } as T;
|
|
269
|
+
}
|
|
270
|
+
|
|
293
271
|
override valueOf() {
|
|
294
272
|
const result = super.valueOf() as any;
|
|
295
273
|
for (const k of ["conformance", "access", "quality", "constraint"]) {
|
|
@@ -304,8 +282,8 @@ export abstract class ValueModel<T extends ValueElement = ValueElement> extends
|
|
|
304
282
|
return result as T;
|
|
305
283
|
}
|
|
306
284
|
|
|
307
|
-
constructor(definition: BaseElement.Properties<T>) {
|
|
308
|
-
super(definition);
|
|
285
|
+
constructor(definition: BaseElement.Properties<T>, ...children: Model.Definition<FieldModel>[]) {
|
|
286
|
+
super(definition, ...children);
|
|
309
287
|
|
|
310
288
|
const match = this.type?.match(/^list\[(.*)\]$/);
|
|
311
289
|
if (match) {
|
package/src/models/index.ts
CHANGED
|
@@ -19,6 +19,7 @@ export * from "./Model.js";
|
|
|
19
19
|
export * from "./NodeModel.js";
|
|
20
20
|
export * from "./PropertyModel.js";
|
|
21
21
|
export * from "./RequirementModel.js";
|
|
22
|
+
export * from "./ScopeModel.js";
|
|
22
23
|
export * from "./SemanticNamespaceModel.js";
|
|
23
24
|
export * from "./SemanticTagModel.js";
|
|
24
25
|
export * from "./ValueModel.js";
|
|
@@ -166,7 +166,7 @@ export const ColorControl = Cluster({
|
|
|
166
166
|
|
|
167
167
|
Attribute({
|
|
168
168
|
name: "ColorMode", id: 0x8, type: "enum8", access: "R V", conformance: "M", constraint: "0 to 2",
|
|
169
|
-
|
|
169
|
+
quality: "N",
|
|
170
170
|
|
|
171
171
|
details: "The ColorMode attribute indicates which attributes are currently determining the color of the " +
|
|
172
172
|
"device." +
|
|
@@ -178,9 +178,9 @@ export const ColorControl = Cluster({
|
|
|
178
178
|
|
|
179
179
|
xref: { document: "cluster", section: "3.2.7.10" },
|
|
180
180
|
children: [
|
|
181
|
-
Field({ name: "CurrentHueAndCurrentSaturation", id: 0x0 }),
|
|
182
|
-
Field({ name: "CurrentXAndCurrentY", id: 0x1 }),
|
|
183
|
-
Field({ name: "ColorTemperatureMireds", id: 0x2 })
|
|
181
|
+
Field({ name: "CurrentHueAndCurrentSaturation", id: 0x0, conformance: "HS" }),
|
|
182
|
+
Field({ name: "CurrentXAndCurrentY", id: 0x1, conformance: "XY" }),
|
|
183
|
+
Field({ name: "ColorTemperatureMireds", id: 0x2, conformance: "CT" })
|
|
184
184
|
]
|
|
185
185
|
}),
|
|
186
186
|
|
|
@@ -204,7 +204,7 @@ export const ModeBase = Cluster({
|
|
|
204
204
|
}),
|
|
205
205
|
|
|
206
206
|
Field({
|
|
207
|
-
name: "Value", id: 0x1, type: "
|
|
207
|
+
name: "Value", id: 0x1, type: "ModeTag", conformance: "M",
|
|
208
208
|
details: "This field shall indicate the mode tag within a mode tag namespace which is either manufacturer " +
|
|
209
209
|
"specific or standard.",
|
|
210
210
|
xref: { document: "cluster", section: "1.10.5.1.2" }
|
|
@@ -388,26 +388,10 @@ export const PumpConfigurationAndControl = Cluster({
|
|
|
388
388
|
}),
|
|
389
389
|
|
|
390
390
|
Attribute({
|
|
391
|
-
name: "AlarmMask", id:
|
|
391
|
+
name: "AlarmMask", id: 0x22, type: "uint16", access: "R V", conformance: "D", constraint: "desc",
|
|
392
392
|
default: 0, quality: "N",
|
|
393
|
-
xref: { document: "cluster", section: "4.2.7" }
|
|
394
|
-
|
|
395
|
-
children: [
|
|
396
|
-
Field({
|
|
397
|
-
name: "InitializationFailure", constraint: "0",
|
|
398
|
-
details: "The device failed to complete initialization at powerup"
|
|
399
|
-
}),
|
|
400
|
-
Field({
|
|
401
|
-
name: "HardwareFailure", constraint: "1",
|
|
402
|
-
details: "The device has detected a hardware fault"
|
|
403
|
-
}),
|
|
404
|
-
Field({
|
|
405
|
-
name: "SelfCalibrationFailure", constraint: "2",
|
|
406
|
-
details: "The device was unable to complete self calibration"
|
|
407
|
-
})
|
|
408
|
-
]
|
|
393
|
+
xref: { document: "cluster", section: "4.2.7" }
|
|
409
394
|
}),
|
|
410
|
-
|
|
411
395
|
Event({
|
|
412
396
|
name: "SupplyVoltageLow", id: 0x0, access: "V", conformance: "O", priority: "info",
|
|
413
397
|
xref: { document: "cluster", section: "4.2.8" }
|
|
@@ -18,18 +18,14 @@ export const UserLabel = Cluster({
|
|
|
18
18
|
details: "This cluster provides a feature to tag an endpoint with zero or more labels.",
|
|
19
19
|
xref: { document: "core", section: "9.9" },
|
|
20
20
|
|
|
21
|
-
children: [
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
xref: { document: "core", section: "9.9.4.1" },
|
|
30
|
-
children: [Field({ name: "entry", type: "LabelStruct" })]
|
|
31
|
-
})
|
|
32
|
-
]
|
|
21
|
+
children: [Attribute({
|
|
22
|
+
name: "LabelList", id: 0x0, type: "list", access: "RW VM", conformance: "M", constraint: "min 0",
|
|
23
|
+
default: [], quality: "N",
|
|
24
|
+
details: "An implementation shall support at least 4 list entries per node for all User Label cluster " +
|
|
25
|
+
"instances on the node.",
|
|
26
|
+
xref: { document: "core", section: "9.9.4.1" },
|
|
27
|
+
children: [Field({ name: "entry", type: "LabelStruct" })]
|
|
28
|
+
})]
|
|
33
29
|
});
|
|
34
30
|
|
|
35
31
|
MatterDefinition.children.push(UserLabel);
|
|
@@ -28,10 +28,7 @@ export const WildcardPathFlagsBitmap = Datatype({
|
|
|
28
28
|
name: "WildcardSkipAttributeList", constraint: "2",
|
|
29
29
|
description: "Skip the AttributeList global attribute during wildcard expansion."
|
|
30
30
|
}),
|
|
31
|
-
Field({
|
|
32
|
-
name: "WildcardSkipEventList", constraint: "3",
|
|
33
|
-
description: "Skip the EventList global attribute during wildcard expansion."
|
|
34
|
-
}),
|
|
31
|
+
Field({ name: "Reserved", constraint: "3", description: "Reserved" }),
|
|
35
32
|
Field({
|
|
36
33
|
name: "WildcardSkipCommandLists", constraint: "4",
|
|
37
34
|
description: "Skip the AcceptedCommandList and GeneratedCommandList global attributes during wildcard expansion."
|
|
@@ -403,7 +403,7 @@ export const WindowCovering = Cluster({
|
|
|
403
403
|
name: "LiftPercent100thsValue", id: 0x0, type: "percent100ths", conformance: "M",
|
|
404
404
|
constraint: "desc"
|
|
405
405
|
}),
|
|
406
|
-
Field({ name: "Ignored", id: 0x1, type: "percent100ths", conformance: "
|
|
406
|
+
Field({ name: "Ignored", id: 0x1, type: "percent100ths", conformance: "X", constraint: "desc" })
|
|
407
407
|
]
|
|
408
408
|
}),
|
|
409
409
|
|
|
@@ -447,7 +447,7 @@ export const WindowCovering = Cluster({
|
|
|
447
447
|
name: "TiltPercent100thsValue", id: 0x0, type: "percent100ths", conformance: "M",
|
|
448
448
|
constraint: "desc"
|
|
449
449
|
}),
|
|
450
|
-
Field({ name: "Ignored", id: 0x1, type: "percent100ths", conformance: "
|
|
450
|
+
Field({ name: "Ignored", id: 0x1, type: "percent100ths", conformance: "X", constraint: "desc" })
|
|
451
451
|
]
|
|
452
452
|
}),
|
|
453
453
|
|