@matter/model 0.16.0-alpha.0-20251004-92135c7df → 0.16.0-alpha.0-20251011-d8942d7d5
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/Constraint.d.ts +9 -2
- package/dist/cjs/aspects/Constraint.d.ts.map +1 -1
- package/dist/cjs/aspects/Constraint.js +93 -18
- package/dist/cjs/aspects/Constraint.js.map +2 -2
- package/dist/cjs/common/FieldValue.d.ts +3 -9
- package/dist/cjs/common/FieldValue.d.ts.map +1 -1
- package/dist/cjs/elements/DatatypeElement.d.ts +6 -9
- package/dist/cjs/elements/DatatypeElement.d.ts.map +1 -1
- package/dist/cjs/elements/DatatypeElement.js.map +1 -1
- package/dist/cjs/logic/ModelIndex.d.ts +39 -0
- package/dist/cjs/logic/ModelIndex.d.ts.map +1 -0
- package/dist/cjs/logic/ModelIndex.js +100 -0
- package/dist/cjs/logic/ModelIndex.js.map +6 -0
- package/dist/cjs/logic/Scope.d.ts +2 -1
- package/dist/cjs/logic/Scope.d.ts.map +1 -1
- package/dist/cjs/logic/Scope.js +7 -3
- package/dist/cjs/logic/Scope.js.map +1 -1
- package/dist/cjs/logic/definition-validation/ValueValidator.d.ts.map +1 -1
- package/dist/cjs/logic/definition-validation/ValueValidator.js +2 -0
- package/dist/cjs/logic/definition-validation/ValueValidator.js.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/ClusterModel.d.ts +43 -5
- package/dist/cjs/models/ClusterModel.d.ts.map +1 -1
- package/dist/cjs/models/ClusterModel.js +69 -1
- package/dist/cjs/models/ClusterModel.js.map +2 -2
- package/dist/cjs/models/ValueModel.d.ts +18 -2
- package/dist/cjs/models/ValueModel.d.ts.map +1 -1
- package/dist/cjs/models/ValueModel.js +27 -0
- package/dist/cjs/models/ValueModel.js.map +2 -2
- package/dist/cjs/parser/Lexer.js +1 -1
- package/dist/cjs/parser/TokenStream.js +2 -2
- package/dist/cjs/parser/TokenStream.js.map +1 -1
- package/dist/esm/aspects/Constraint.d.ts +9 -2
- package/dist/esm/aspects/Constraint.d.ts.map +1 -1
- package/dist/esm/aspects/Constraint.js +94 -19
- package/dist/esm/aspects/Constraint.js.map +2 -2
- package/dist/esm/common/FieldValue.d.ts +3 -9
- package/dist/esm/common/FieldValue.d.ts.map +1 -1
- package/dist/esm/elements/DatatypeElement.d.ts +6 -9
- package/dist/esm/elements/DatatypeElement.d.ts.map +1 -1
- package/dist/esm/elements/DatatypeElement.js.map +1 -1
- package/dist/esm/logic/ModelIndex.d.ts +39 -0
- package/dist/esm/logic/ModelIndex.d.ts.map +1 -0
- package/dist/esm/logic/ModelIndex.js +80 -0
- package/dist/esm/logic/ModelIndex.js.map +6 -0
- package/dist/esm/logic/Scope.d.ts +2 -1
- package/dist/esm/logic/Scope.d.ts.map +1 -1
- package/dist/esm/logic/Scope.js +7 -3
- package/dist/esm/logic/Scope.js.map +1 -1
- package/dist/esm/logic/definition-validation/ValueValidator.d.ts.map +1 -1
- package/dist/esm/logic/definition-validation/ValueValidator.js +2 -0
- package/dist/esm/logic/definition-validation/ValueValidator.js.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/ClusterModel.d.ts +43 -5
- package/dist/esm/models/ClusterModel.d.ts.map +1 -1
- package/dist/esm/models/ClusterModel.js +69 -1
- package/dist/esm/models/ClusterModel.js.map +2 -2
- package/dist/esm/models/ValueModel.d.ts +18 -2
- package/dist/esm/models/ValueModel.d.ts.map +1 -1
- package/dist/esm/models/ValueModel.js +27 -0
- package/dist/esm/models/ValueModel.js.map +2 -2
- package/dist/esm/parser/Lexer.js +1 -1
- package/dist/esm/parser/TokenStream.js +2 -2
- package/dist/esm/parser/TokenStream.js.map +1 -1
- package/package.json +4 -4
- package/src/aspects/Constraint.ts +121 -22
- package/src/common/FieldValue.ts +1 -1
- package/src/elements/DatatypeElement.ts +6 -9
- package/src/logic/ModelIndex.ts +125 -0
- package/src/logic/Scope.ts +16 -12
- package/src/logic/definition-validation/ValueValidator.ts +2 -0
- package/src/logic/index.ts +1 -0
- package/src/models/ClusterModel.ts +82 -9
- package/src/models/ValueModel.ts +35 -3
- package/src/parser/Lexer.ts +1 -1
- package/src/parser/TokenStream.ts +2 -2
|
@@ -41,6 +41,9 @@ class ClusterModel extends ScopeModel {
|
|
|
41
41
|
get datatypes() {
|
|
42
42
|
return this.scope.membersOf(this, { tags: [ElementTag.Datatype] });
|
|
43
43
|
}
|
|
44
|
+
get conformant() {
|
|
45
|
+
return new ClusterModel.Conformant(this);
|
|
46
|
+
}
|
|
44
47
|
get classification() {
|
|
45
48
|
return this.resource?.classification;
|
|
46
49
|
}
|
|
@@ -61,7 +64,9 @@ class ClusterModel extends ScopeModel {
|
|
|
61
64
|
* Get attributes, commands and events whether inherited or defined directly in this model.
|
|
62
65
|
*/
|
|
63
66
|
get allAces() {
|
|
64
|
-
return this.scope.membersOf(this, {
|
|
67
|
+
return this.scope.membersOf(this, {
|
|
68
|
+
tags: [ElementTag.Attribute, ElementTag.Command, ElementTag.Event]
|
|
69
|
+
});
|
|
65
70
|
}
|
|
66
71
|
get revision() {
|
|
67
72
|
let revision = 1;
|
|
@@ -140,6 +145,69 @@ class ClusterModel extends ScopeModel {
|
|
|
140
145
|
static Tag = ClusterElement.Tag;
|
|
141
146
|
}
|
|
142
147
|
ClusterModel.register();
|
|
148
|
+
((ClusterModel2) => {
|
|
149
|
+
class Conformant {
|
|
150
|
+
#model;
|
|
151
|
+
constructor(model) {
|
|
152
|
+
this.#model = model;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The cluster's conformant attributes.
|
|
156
|
+
*/
|
|
157
|
+
get attributes() {
|
|
158
|
+
return this.#model.scope.membersOf(this.#model, {
|
|
159
|
+
tags: [ElementTag.Attribute],
|
|
160
|
+
conformance: "conformant"
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The cluster's conformant properties (includes fields and attributes).
|
|
165
|
+
*
|
|
166
|
+
* This offers compatibility with the equivalent field for ValueModel. It is useful when treating a cluster as
|
|
167
|
+
* a struct.
|
|
168
|
+
*/
|
|
169
|
+
get properties() {
|
|
170
|
+
return this.#model.scope.membersOf(this.#model, {
|
|
171
|
+
tags: [ElementTag.Attribute, ElementTag.Field],
|
|
172
|
+
conformance: "conformant"
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* The cluster's conformant fields.
|
|
177
|
+
*
|
|
178
|
+
* Fields are not formally allowed on clusters but we allow for extensions that should not be served via the
|
|
179
|
+
* Matter protocol.
|
|
180
|
+
*
|
|
181
|
+
* This is primarily here to allow simplified access to fields in contexts where a variable is typed as a
|
|
182
|
+
* ClusterModel or ValueModel.
|
|
183
|
+
*/
|
|
184
|
+
get fields() {
|
|
185
|
+
return this.#model.scope.membersOf(this.#model, {
|
|
186
|
+
tags: [ElementTag.Field],
|
|
187
|
+
conformance: "conformant"
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* The cluster's conformant commands.
|
|
192
|
+
*/
|
|
193
|
+
get commands() {
|
|
194
|
+
return this.#model.scope.membersOf(this.#model, {
|
|
195
|
+
tags: [ElementTag.Command],
|
|
196
|
+
conformance: "conformant"
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* The cluster's conformant events.
|
|
201
|
+
*/
|
|
202
|
+
get events() {
|
|
203
|
+
return this.#model.scope.membersOf(this.#model, {
|
|
204
|
+
tags: [ElementTag.Event],
|
|
205
|
+
conformance: "conformant"
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
ClusterModel2.Conformant = Conformant;
|
|
210
|
+
})(ClusterModel || (ClusterModel = {}));
|
|
143
211
|
export {
|
|
144
212
|
ClusterModel
|
|
145
213
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/models/ClusterModel.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,UAAU,oBAAoB;
|
|
5
|
-
"names": []
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["ClusterModel"]
|
|
6
6
|
}
|
|
@@ -8,6 +8,7 @@ import { ElementTag, FieldValue, Metatype } from "../common/index.js";
|
|
|
8
8
|
import { ValueElement } from "../elements/index.js";
|
|
9
9
|
import { Model } from "./Model.js";
|
|
10
10
|
import type { PropertyModel } from "./PropertyModel.js";
|
|
11
|
+
import { ModelIndex } from "#logic/ModelIndex.js";
|
|
11
12
|
import type { FieldModel } from "./FieldModel.js";
|
|
12
13
|
/**
|
|
13
14
|
* Each {@link ValueElement} type has a corresponding implementation that derives from this class.
|
|
@@ -30,7 +31,8 @@ export declare abstract class ValueModel<T extends ValueElement = ValueElement>
|
|
|
30
31
|
get quality(): Quality;
|
|
31
32
|
set quality(definition: Quality | Quality.Definition);
|
|
32
33
|
get effectiveQuality(): Quality;
|
|
33
|
-
get fields(): FieldModel
|
|
34
|
+
get fields(): ModelIndex<FieldModel>;
|
|
35
|
+
get conformant(): ValueModel.Conformant;
|
|
34
36
|
/**
|
|
35
37
|
* Metatype is only present on global types with specific semantic meaning. This model is significant because it
|
|
36
38
|
* gives us information about how to manipulate the data. This accessor retrieves this model.
|
|
@@ -68,7 +70,7 @@ export declare abstract class ValueModel<T extends ValueElement = ValueElement>
|
|
|
68
70
|
/**
|
|
69
71
|
* All {@link FieldModel} children in the context of the model's containing scope.
|
|
70
72
|
*/
|
|
71
|
-
get members(): PropertyModel
|
|
73
|
+
get members(): ModelIndex<PropertyModel>;
|
|
72
74
|
/**
|
|
73
75
|
* Collect constraints and conformance for this type and all base types.
|
|
74
76
|
*/
|
|
@@ -105,4 +107,18 @@ export declare abstract class ValueModel<T extends ValueElement = ValueElement>
|
|
|
105
107
|
constructor(definition: Model.Definition<ValueModel<T>>, ...children: Model.ChildDefinition<FieldModel>[]);
|
|
106
108
|
toElement(omitResources?: boolean, extra?: Record<string, unknown>): T;
|
|
107
109
|
}
|
|
110
|
+
export declare namespace ValueModel {
|
|
111
|
+
class Conformant {
|
|
112
|
+
#private;
|
|
113
|
+
constructor(model: Model);
|
|
114
|
+
/**
|
|
115
|
+
* The model's conformant fields.
|
|
116
|
+
*/
|
|
117
|
+
get fields(): ModelIndex<FieldModel>;
|
|
118
|
+
/**
|
|
119
|
+
* An alias for {@link fields} that offers compatibility with the same field for clusters.
|
|
120
|
+
*/
|
|
121
|
+
get properties(): ModelIndex<FieldModel>;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
108
124
|
//# sourceMappingURL=ValueModel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValueModel.d.ts","sourceRoot":"","sources":["../../../src/models/ValueModel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,8BAAsB,UAAU,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,CAClE,SAAQ,KAAK,CAAC,CAAC,EAAE,UAAU,CAC3B,YAAW,YAAY;;IAEvB,QAAQ,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC;IACjC,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACX,MAAM,CAAC,sBAAQ;IAOxB,IAAI,UAAU,IAAI,UAAU,CAE3B;IACD,IAAI,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,UAAU,EAE5D;IACD,IAAI,mBAAmB,IAAI,UAAU,CAEpC;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IACD,IAAI,WAAW,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAC,UAAU,EAE/D;IACD,IAAI,oBAAoB,IAAI,WAAW,CAEtC;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,EAEhD;IACD,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAEnD;IACD,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,MAAM,IAC8D,UAAU,
|
|
1
|
+
{"version":3,"file":"ValueModel.d.ts","sourceRoot":"","sources":["../../../src/models/ValueModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,9 @@ class ValueModel extends Model {
|
|
|
56
56
|
get fields() {
|
|
57
57
|
return Scope(this).membersOf(this, { tags: [ElementTag.Field] });
|
|
58
58
|
}
|
|
59
|
+
get conformant() {
|
|
60
|
+
return new ValueModel.Conformant(this);
|
|
61
|
+
}
|
|
59
62
|
/**
|
|
60
63
|
* Metatype is only present on global types with specific semantic meaning. This model is significant because it
|
|
61
64
|
* gives us information about how to manipulate the data. This accessor retrieves this model.
|
|
@@ -243,6 +246,30 @@ class ValueModel extends Model {
|
|
|
243
246
|
});
|
|
244
247
|
}
|
|
245
248
|
}
|
|
249
|
+
((ValueModel2) => {
|
|
250
|
+
class Conformant {
|
|
251
|
+
#model;
|
|
252
|
+
constructor(model) {
|
|
253
|
+
this.#model = model;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* The model's conformant fields.
|
|
257
|
+
*/
|
|
258
|
+
get fields() {
|
|
259
|
+
return Scope(this.#model).membersOf(this.#model, {
|
|
260
|
+
tags: [ElementTag.Field],
|
|
261
|
+
conformance: "conformant"
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* An alias for {@link fields} that offers compatibility with the same field for clusters.
|
|
266
|
+
*/
|
|
267
|
+
get properties() {
|
|
268
|
+
return this.fields;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
ValueModel2.Conformant = Conformant;
|
|
272
|
+
})(ValueModel || (ValueModel = {}));
|
|
246
273
|
export {
|
|
247
274
|
ValueModel
|
|
248
275
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/models/ValueModel.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,aAAa;AACtB,SAAS,QAAgB,aAAa,YAAY,eAAe;AACjE,SAAS,YAAwB,gBAAgB;AAEjD,SAAS,sBAAsB;AAC/B,SAAS,aAAa;
|
|
5
|
-
"names": []
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["ValueModel"]
|
|
6
6
|
}
|
package/dist/esm/parser/Lexer.js
CHANGED
|
@@ -91,7 +91,7 @@ function* lex(text, error, keywords) {
|
|
|
91
91
|
function tokenizeDigits(base, valueOf) {
|
|
92
92
|
let num = valueOf(current.value);
|
|
93
93
|
if (num === void 0) {
|
|
94
|
-
error("INVALID_NUMBER", `Expected digit following numeric
|
|
94
|
+
error("INVALID_NUMBER", `Expected digit following numeric prefix`);
|
|
95
95
|
return { type: "value", value: 0, startLine, startChar };
|
|
96
96
|
}
|
|
97
97
|
while (true) {
|
|
@@ -31,8 +31,8 @@ function TokenStream(iterator) {
|
|
|
31
31
|
return "end of statement";
|
|
32
32
|
case "word":
|
|
33
33
|
return `word "${this.token.value}"`;
|
|
34
|
-
case "
|
|
35
|
-
return `
|
|
34
|
+
case "value":
|
|
35
|
+
return `value "${this.token.value}"`;
|
|
36
36
|
default:
|
|
37
37
|
if (this.token?.type.match(/[a-z]/i)) {
|
|
38
38
|
return `keyword "${this.token?.type}"`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/parser/TokenStream.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAmBO,SAAS,YAA6B,UAAuC;AAChF,MAAI,OAAO;AAEX,WAAS,OAAO;AACZ,QAAI,MAAM;AACN,aAAO;AAAA,IACX;AACA,UAAM,IAAI,SAAS,KAAK;AACxB,QAAI,EAAE,MAAM;AACR,aAAO;AAAA,IACX;AACA,WAAO,EAAE;AAAA,EACb;AAEA,SAAO;AAAA,IACH,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK;AAAA,IAEb,IAAI,OAAO;AACP,aAAO,KAAK,UAAU;AAAA,IAC1B;AAAA,IAEA,OAAO;AACH,WAAK,QAAQ,KAAK;AAClB,WAAK,SAAS,KAAK;AAAA,IACvB;AAAA,IAEA,IAAI,cAAc;AACd,cAAQ,KAAK,OAAO,MAAM;AAAA,QACtB,KAAK;AACD,iBAAO;AAAA,QAEX,KAAK;AACD,iBAAO,SAAU,KAAK,MAAqC,KAAK;AAAA,QAEpE,KAAK;AACD,iBAAO,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAmBO,SAAS,YAA6B,UAAuC;AAChF,MAAI,OAAO;AAEX,WAAS,OAAO;AACZ,QAAI,MAAM;AACN,aAAO;AAAA,IACX;AACA,UAAM,IAAI,SAAS,KAAK;AACxB,QAAI,EAAE,MAAM;AACR,aAAO;AAAA,IACX;AACA,WAAO,EAAE;AAAA,EACb;AAEA,SAAO;AAAA,IACH,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK;AAAA,IAEb,IAAI,OAAO;AACP,aAAO,KAAK,UAAU;AAAA,IAC1B;AAAA,IAEA,OAAO;AACH,WAAK,QAAQ,KAAK;AAClB,WAAK,SAAS,KAAK;AAAA,IACvB;AAAA,IAEA,IAAI,cAAc;AACd,cAAQ,KAAK,OAAO,MAAM;AAAA,QACtB,KAAK;AACD,iBAAO;AAAA,QAEX,KAAK;AACD,iBAAO,SAAU,KAAK,MAAqC,KAAK;AAAA,QAEpE,KAAK;AACD,iBAAO,UAAW,KAAK,MAAuC,KAAK;AAAA,QAEvE;AACI,cAAI,KAAK,OAAO,KAAK,MAAM,QAAQ,GAAG;AAClC,mBAAO,YAAY,KAAK,OAAO,IAAI;AAAA,UACvC;AACA,iBAAO,aAAa,KAAK,OAAO,IAAI;AAAA,MAC5C;AAAA,IACJ;AAAA,EACJ;AACJ;",
|
|
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-20251011-d8942d7d5",
|
|
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-20251011-d8942d7d5"
|
|
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-20251011-d8942d7d5",
|
|
38
|
+
"@matter/tools": "0.16.0-alpha.0-20251011-d8942d7d5"
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
41
|
"dist/**/*",
|
|
@@ -4,13 +4,27 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { camelize } from "#general";
|
|
7
|
+
import { camelize, isObject } from "#general";
|
|
8
8
|
import { Lexer } from "#parser/Lexer.js";
|
|
9
9
|
import { BasicToken } from "#parser/Token.js";
|
|
10
10
|
import { TokenStream } from "#parser/TokenStream.js";
|
|
11
11
|
import { FieldValue } from "../common/index.js";
|
|
12
12
|
import { Aspect } from "./Aspect.js";
|
|
13
13
|
|
|
14
|
+
namespace Functions {
|
|
15
|
+
export function minOf(args: unknown[]) {
|
|
16
|
+
return Math.min(...args.filter(arg => typeof arg === "number"));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function maxOf(args: unknown[]) {
|
|
20
|
+
return Math.max(...args.filter(arg => typeof arg === "number"));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function isFunction(name: string): name is keyof typeof Functions {
|
|
25
|
+
return Object.hasOwn(Functions, name);
|
|
26
|
+
}
|
|
27
|
+
|
|
14
28
|
/**
|
|
15
29
|
* An operational view of constraints as defined by the Matter specification.
|
|
16
30
|
*
|
|
@@ -124,30 +138,56 @@ export class Constraint extends Aspect<Constraint.Definition> implements Constra
|
|
|
124
138
|
case FieldValue.reference:
|
|
125
139
|
if (typeof value.name === "string") {
|
|
126
140
|
value = FieldValue(nameResolver?.(camelize(value.name)));
|
|
141
|
+
if (isObject(value)) {
|
|
142
|
+
value = { type: "properties", properties: value as Record<string, FieldValue> };
|
|
143
|
+
}
|
|
127
144
|
}
|
|
128
145
|
break;
|
|
129
146
|
|
|
130
|
-
case "+":
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
147
|
+
case "+": {
|
|
148
|
+
const lhs = valueOf(value.lhs);
|
|
149
|
+
const rhs = valueOf(value.rhs);
|
|
150
|
+
if (typeof lhs === "number" && typeof rhs === "number") {
|
|
151
|
+
return lhs + rhs;
|
|
152
|
+
}
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
case "-": {
|
|
157
|
+
const lhs = valueOf(value.lhs);
|
|
158
|
+
const rhs = valueOf(value.rhs);
|
|
159
|
+
if (typeof lhs === "number" && typeof rhs === "number") {
|
|
160
|
+
return lhs - rhs;
|
|
161
|
+
}
|
|
162
|
+
return undefined;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
case ".": {
|
|
166
|
+
const object = valueOf(value.lhs);
|
|
167
|
+
if (!isObject(object)) {
|
|
137
168
|
return undefined;
|
|
138
169
|
}
|
|
139
|
-
break;
|
|
140
170
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const rhs = valueOf(value.rhs);
|
|
145
|
-
if (typeof lhs === "number" && typeof rhs === "number") {
|
|
146
|
-
return lhs - rhs;
|
|
147
|
-
}
|
|
171
|
+
// rhs may only legally be a name reference
|
|
172
|
+
const rhs = FieldValue.referenced(valueOf(value.rhs));
|
|
173
|
+
if (rhs === undefined) {
|
|
148
174
|
return undefined;
|
|
149
175
|
}
|
|
150
|
-
|
|
176
|
+
|
|
177
|
+
// Resolve name in context of object. We aren't using schema here but Object.hasOwn is
|
|
178
|
+
// sufficient
|
|
179
|
+
if (Object.hasOwn(object, rhs)) {
|
|
180
|
+
return (object as Record<string, FieldValue>)[rhs];
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
case "maxOf":
|
|
187
|
+
case "minOf": {
|
|
188
|
+
Functions[type](value.args.map(value => valueOf(value)));
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
151
191
|
}
|
|
152
192
|
}
|
|
153
193
|
|
|
@@ -267,17 +307,26 @@ export namespace Constraint {
|
|
|
267
307
|
* Parsed binary operator.
|
|
268
308
|
*/
|
|
269
309
|
export interface BinaryOperator {
|
|
270
|
-
type: "+" | "-";
|
|
310
|
+
type: "+" | "-" | ".";
|
|
271
311
|
|
|
272
312
|
lhs: Expression;
|
|
273
313
|
|
|
274
314
|
rhs: Expression;
|
|
275
315
|
}
|
|
276
316
|
|
|
317
|
+
/**
|
|
318
|
+
* Parsed function.
|
|
319
|
+
*/
|
|
320
|
+
export interface Function {
|
|
321
|
+
type: "maxOf" | "minOf";
|
|
322
|
+
|
|
323
|
+
args: Expression[];
|
|
324
|
+
}
|
|
325
|
+
|
|
277
326
|
/**
|
|
278
327
|
* Parsed expression.
|
|
279
328
|
*/
|
|
280
|
-
export type Expression = FieldValue | BinaryOperator;
|
|
329
|
+
export type Expression = FieldValue | BinaryOperator | Function;
|
|
281
330
|
|
|
282
331
|
/**
|
|
283
332
|
* These are all ways to describe a constraint.
|
|
@@ -307,7 +356,9 @@ namespace Serializer {
|
|
|
307
356
|
switch (value.type) {
|
|
308
357
|
case "+":
|
|
309
358
|
case "-":
|
|
310
|
-
|
|
359
|
+
case ".":
|
|
360
|
+
const sep = value.type === "." ? "" : " ";
|
|
361
|
+
const sum = `${serializeValue(value.lhs, true)}${sep}${value.type}${sep}${serializeValue(value.rhs, true)}`;
|
|
311
362
|
if (inExpr) {
|
|
312
363
|
// Ideally only add parenthesis if precedence requires. But nested expressions are not used
|
|
313
364
|
// anywhere as yet (and probably won't be) so don't try to be fancy, just correct
|
|
@@ -316,7 +367,11 @@ namespace Serializer {
|
|
|
316
367
|
return sum;
|
|
317
368
|
|
|
318
369
|
default:
|
|
319
|
-
|
|
370
|
+
if (isFunction(value.type)) {
|
|
371
|
+
return `${value.type}(${(value as Constraint.Function).args.map(value => serializeValue(value)).join(", ")})`;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
return FieldValue.serialize(value as FieldValue);
|
|
320
375
|
}
|
|
321
376
|
}
|
|
322
377
|
|
|
@@ -357,11 +412,15 @@ namespace Parser {
|
|
|
357
412
|
const result = parseParts();
|
|
358
413
|
|
|
359
414
|
if (tokens.token && tokens.token?.type !== ",") {
|
|
360
|
-
|
|
415
|
+
unexpected();
|
|
361
416
|
}
|
|
362
417
|
|
|
363
418
|
return result;
|
|
364
419
|
|
|
420
|
+
function unexpected() {
|
|
421
|
+
constraint.error("UNEXPECTED_CONSTRAINT_TOKEN", `Unexpected ${tokens.description}`);
|
|
422
|
+
}
|
|
423
|
+
|
|
365
424
|
function parseParts(): Constraint.Ast {
|
|
366
425
|
const parts = Array<Constraint.Ast>();
|
|
367
426
|
|
|
@@ -522,6 +581,7 @@ namespace Parser {
|
|
|
522
581
|
switch (tokens.token?.type) {
|
|
523
582
|
case "+":
|
|
524
583
|
case "-":
|
|
584
|
+
case ".":
|
|
525
585
|
const type = tokens.token.type;
|
|
526
586
|
tokens.next();
|
|
527
587
|
const rhs = parseValueExpression();
|
|
@@ -535,6 +595,45 @@ namespace Parser {
|
|
|
535
595
|
lhs: value,
|
|
536
596
|
rhs,
|
|
537
597
|
};
|
|
598
|
+
|
|
599
|
+
case "(":
|
|
600
|
+
const functionName = FieldValue.referenced(value);
|
|
601
|
+
if (functionName === undefined) {
|
|
602
|
+
unexpected();
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
tokens.next();
|
|
607
|
+
if (!isFunction(functionName)) {
|
|
608
|
+
constraint.error("UNKNOWN_FUNCTION", `Unknown function "${functionName}"`);
|
|
609
|
+
return;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
const args = Array<Constraint.Expression>();
|
|
613
|
+
while ((tokens.token?.type as BasicToken.Operator) !== ")") {
|
|
614
|
+
const expr = parseValueExpression();
|
|
615
|
+
if (expr === undefined) {
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
args.push(expr);
|
|
619
|
+
switch (tokens.token?.type as BasicToken.Operator) {
|
|
620
|
+
case ",":
|
|
621
|
+
tokens.next();
|
|
622
|
+
break;
|
|
623
|
+
|
|
624
|
+
case ")":
|
|
625
|
+
break;
|
|
626
|
+
|
|
627
|
+
default:
|
|
628
|
+
unexpected();
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
tokens.next();
|
|
633
|
+
return {
|
|
634
|
+
type: functionName,
|
|
635
|
+
args,
|
|
636
|
+
};
|
|
538
637
|
}
|
|
539
638
|
|
|
540
639
|
return value;
|
package/src/common/FieldValue.ts
CHANGED
|
@@ -43,9 +43,8 @@ export namespace DatatypeElement {
|
|
|
43
43
|
/**
|
|
44
44
|
* Convert a TypeScript enum to Matter enum values.
|
|
45
45
|
*
|
|
46
|
-
* Matter enums include conformance and other metadata. They may also have
|
|
47
|
-
*
|
|
48
|
-
* we can't use a TypeScript enum directly.
|
|
46
|
+
* Matter enums include conformance and other metadata. They may also have multiple definitions of the same value
|
|
47
|
+
* selectable by conformance. So we can't use a TypeScript enum directly.
|
|
49
48
|
*/
|
|
50
49
|
export function ListValues(values: ValueMap): ListValues {
|
|
51
50
|
const result = Array<FieldElement>();
|
|
@@ -67,16 +66,14 @@ export namespace DatatypeElement {
|
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
/**
|
|
70
|
-
* We express enum values as IntElements as this gives us conformance
|
|
71
|
-
* and other metadata.
|
|
69
|
+
* We express enum values as IntElements as this gives us conformance and other metadata.
|
|
72
70
|
*/
|
|
73
71
|
export type ListValues = FieldElement[];
|
|
74
72
|
|
|
75
73
|
/**
|
|
76
|
-
* Per the Matter specification, enums are named integers. The following
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* generating the Matter enum we ignore the string keys.
|
|
74
|
+
* Per the Matter specification, enums are named integers. The following allows TypeScript enums to be supplied for
|
|
75
|
+
* translation into Matter enums. To do so, we must accept both numeric and string values. For generating the
|
|
76
|
+
* Matter enum we ignore the string keys.
|
|
80
77
|
*/
|
|
81
78
|
export type ValueMap = { [name: string]: number | string };
|
|
82
79
|
}
|