@matter/types 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.
Files changed (46) hide show
  1. package/dist/cjs/common/ModelBounds.d.ts +74 -0
  2. package/dist/cjs/common/ModelBounds.d.ts.map +1 -0
  3. package/dist/cjs/common/ModelBounds.js +102 -0
  4. package/dist/cjs/common/ModelBounds.js.map +6 -0
  5. package/dist/cjs/common/StatusResponseError.d.ts +1 -0
  6. package/dist/cjs/common/StatusResponseError.d.ts.map +1 -1
  7. package/dist/cjs/common/StatusResponseError.js +4 -1
  8. package/dist/cjs/common/StatusResponseError.js.map +1 -1
  9. package/dist/cjs/common/index.d.ts +1 -0
  10. package/dist/cjs/common/index.d.ts.map +1 -1
  11. package/dist/cjs/common/index.js +1 -0
  12. package/dist/cjs/common/index.js.map +1 -1
  13. package/dist/cjs/tlv/TlvOfModel.d.ts +9 -0
  14. package/dist/cjs/tlv/TlvOfModel.d.ts.map +1 -0
  15. package/dist/cjs/tlv/TlvOfModel.js +227 -0
  16. package/dist/cjs/tlv/TlvOfModel.js.map +6 -0
  17. package/dist/cjs/tlv/index.d.ts +1 -0
  18. package/dist/cjs/tlv/index.d.ts.map +1 -1
  19. package/dist/cjs/tlv/index.js +1 -0
  20. package/dist/cjs/tlv/index.js.map +1 -1
  21. package/dist/esm/common/ModelBounds.d.ts +74 -0
  22. package/dist/esm/common/ModelBounds.d.ts.map +1 -0
  23. package/dist/esm/common/ModelBounds.js +99 -0
  24. package/dist/esm/common/ModelBounds.js.map +6 -0
  25. package/dist/esm/common/StatusResponseError.d.ts +1 -0
  26. package/dist/esm/common/StatusResponseError.d.ts.map +1 -1
  27. package/dist/esm/common/StatusResponseError.js +4 -1
  28. package/dist/esm/common/StatusResponseError.js.map +1 -1
  29. package/dist/esm/common/index.d.ts +1 -0
  30. package/dist/esm/common/index.d.ts.map +1 -1
  31. package/dist/esm/common/index.js +1 -0
  32. package/dist/esm/common/index.js.map +1 -1
  33. package/dist/esm/tlv/TlvOfModel.d.ts +9 -0
  34. package/dist/esm/tlv/TlvOfModel.d.ts.map +1 -0
  35. package/dist/esm/tlv/TlvOfModel.js +260 -0
  36. package/dist/esm/tlv/TlvOfModel.js.map +6 -0
  37. package/dist/esm/tlv/index.d.ts +1 -0
  38. package/dist/esm/tlv/index.d.ts.map +1 -1
  39. package/dist/esm/tlv/index.js +1 -0
  40. package/dist/esm/tlv/index.js.map +1 -1
  41. package/package.json +5 -5
  42. package/src/common/ModelBounds.ts +118 -0
  43. package/src/common/StatusResponseError.ts +5 -1
  44. package/src/common/index.ts +1 -0
  45. package/src/tlv/TlvOfModel.ts +312 -0
  46. package/src/tlv/index.ts +1 -0
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import {
7
+ camelize,
8
+ FLOAT32_MAX,
9
+ FLOAT32_MIN,
10
+ INT16_MAX,
11
+ INT16_MIN,
12
+ INT32_MAX,
13
+ INT32_MIN,
14
+ INT64_MAX,
15
+ INT64_MIN,
16
+ INT8_MAX,
17
+ INT8_MIN,
18
+ UINT16_MAX,
19
+ UINT24_MAX,
20
+ UINT32_MAX,
21
+ UINT64_MAX,
22
+ UINT8_MAX
23
+ } from "#general";
24
+ import { FieldValue } from "#model";
25
+ var ModelBounds;
26
+ ((ModelBounds2) => {
27
+ function createLengthBounds(model) {
28
+ const constraint = extractApplicableConstraint(model);
29
+ const value = FieldValue.numericValue(constraint.value, model.type);
30
+ if (value !== void 0) {
31
+ return { length: value };
32
+ }
33
+ return createRangeBounds(constraint, "minLength", "maxLength");
34
+ }
35
+ ModelBounds2.createLengthBounds = createLengthBounds;
36
+ function createNumberBounds(model) {
37
+ const constraint = model.effectiveConstraint;
38
+ const value = FieldValue.numericValue(constraint.value, model.type);
39
+ if (value !== void 0) {
40
+ return { min: value, max: value };
41
+ }
42
+ return createRangeBounds(constraint, "min", "max", model.type);
43
+ }
44
+ ModelBounds2.createNumberBounds = createNumberBounds;
45
+ ModelBounds2.NumericRanges = {
46
+ uint8: { min: 0, max: UINT8_MAX },
47
+ uint16: { min: 0, max: UINT16_MAX },
48
+ uint24: { min: 0, max: UINT24_MAX },
49
+ uint32: { min: 0, max: UINT32_MAX },
50
+ uint64: { min: 0, max: UINT64_MAX },
51
+ int8: { min: INT8_MIN, max: INT8_MAX },
52
+ int16: { min: INT16_MIN, max: INT16_MAX },
53
+ int32: { min: INT32_MIN, max: INT32_MAX },
54
+ int64: { min: INT64_MIN, max: INT64_MAX },
55
+ float32: { min: FLOAT32_MIN, max: FLOAT32_MAX },
56
+ percent: { min: 0, max: 100 },
57
+ percent100ths: { min: 0, max: 1e4 }
58
+ };
59
+ })(ModelBounds || (ModelBounds = {}));
60
+ function createRangeBounds(constraint, minKey, maxKey, type) {
61
+ let min = FieldValue.numericValue(constraint.min, type);
62
+ let max = FieldValue.numericValue(constraint.max, type);
63
+ if (min === ModelBounds.NumericRanges[type]?.min) {
64
+ min = void 0;
65
+ }
66
+ if (max === ModelBounds.NumericRanges[type]?.max) {
67
+ max = void 0;
68
+ }
69
+ if (min === void 0 && max === void 0) {
70
+ return;
71
+ }
72
+ const bounds = {};
73
+ if (min !== void 0) {
74
+ bounds[minKey] = min;
75
+ }
76
+ if (max !== void 0) {
77
+ bounds[maxKey] = max;
78
+ }
79
+ return bounds;
80
+ }
81
+ function extractApplicableConstraint(model) {
82
+ let constraint = model.effectiveConstraint;
83
+ if (constraint.in) {
84
+ const siblingName = FieldValue.referenced(constraint.in);
85
+ if (siblingName) {
86
+ const sibling = model.parent?.member(camelize(siblingName, true));
87
+ const siblingConstraint = sibling.effectiveConstraint;
88
+ if (siblingConstraint.entry) {
89
+ constraint = siblingConstraint.entry;
90
+ }
91
+ }
92
+ }
93
+ return constraint;
94
+ }
95
+ export {
96
+ ModelBounds,
97
+ extractApplicableConstraint
98
+ };
99
+ //# sourceMappingURL=ModelBounds.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/common/ModelBounds.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAqB,kBAA8B;AAO5C,IAAU;AAAA,CAAV,CAAUA,iBAAV;AACI,WAAS,mBAAmB,OAAmB;AAClD,UAAM,aAAa,4BAA4B,KAAK;AAEpD,UAAM,QAAQ,WAAW,aAAa,WAAW,OAAO,MAAM,IAAI;AAClE,QAAI,UAAU,QAAW;AACrB,aAAO,EAAE,QAAQ,MAAM;AAAA,IAC3B;AAEA,WAAO,kBAAkB,YAAY,aAAa,WAAW;AAAA,EACjE;AATO,EAAAA,aAAS;AAWT,WAAS,mBAAmB,OAAmB;AAClD,UAAM,aAAa,MAAM;AAEzB,UAAM,QAAQ,WAAW,aAAa,WAAW,OAAO,MAAM,IAAI;AAClE,QAAI,UAAU,QAAW;AACrB,aAAO,EAAE,KAAK,OAAO,KAAK,MAAM;AAAA,IACpC;AAEA,WAAO,kBAAkB,YAAY,OAAO,OAAO,MAAM,IAAI;AAAA,EACjE;AATO,EAAAA,aAAS;AAcT,EAAMA,aAAA,gBAAgB;AAAA,IACzB,OAAO,EAAE,KAAK,GAAG,KAAK,UAAU;AAAA,IAChC,QAAQ,EAAE,KAAK,GAAG,KAAK,WAAW;AAAA,IAClC,QAAQ,EAAE,KAAK,GAAG,KAAK,WAAW;AAAA,IAClC,QAAQ,EAAE,KAAK,GAAG,KAAK,WAAW;AAAA,IAClC,QAAQ,EAAE,KAAK,GAAG,KAAK,WAAW;AAAA,IAClC,MAAM,EAAE,KAAK,UAAU,KAAK,SAAS;AAAA,IACrC,OAAO,EAAE,KAAK,WAAW,KAAK,UAAU;AAAA,IACxC,OAAO,EAAE,KAAK,WAAW,KAAK,UAAU;AAAA,IACxC,OAAO,EAAE,KAAK,WAAW,KAAK,UAAU;AAAA,IACxC,SAAS,EAAE,KAAK,aAAa,KAAK,YAAY;AAAA,IAC9C,SAAS,EAAE,KAAK,GAAG,KAAK,IAAI;AAAA,IAC5B,eAAe,EAAE,KAAK,GAAG,KAAK,IAAM;AAAA,EACxC;AAAA,GAvCa;AA0CjB,SAAS,kBAAkB,YAAwB,QAAgB,QAAgB,MAAe;AAC9F,MAAI,MAAM,WAAW,aAAa,WAAW,KAAK,IAAI;AACtD,MAAI,MAAM,WAAW,aAAa,WAAW,KAAK,IAAI;AAEtD,MAAI,QAAS,YAAY,cAAsB,IAAW,GAAG,KAAK;AAC9D,UAAM;AAAA,EACV;AAEA,MAAI,QAAS,YAAY,cAAsB,IAAW,GAAG,KAAK;AAC9D,UAAM;AAAA,EACV;AAEA,MAAI,QAAQ,UAAa,QAAQ,QAAW;AACxC;AAAA,EACJ;AAEA,QAAM,SAAS,CAAC;AAChB,MAAI,QAAQ,QAAW;AACnB,WAAO,MAAM,IAAI;AAAA,EACrB;AACA,MAAI,QAAQ,QAAW;AACnB,WAAO,MAAM,IAAI;AAAA,EACrB;AAEA,SAAO;AACX;AAEO,SAAS,4BAA4B,OAAmB;AAC3D,MAAI,aAAa,MAAM;AAIvB,MAAI,WAAW,IAAI;AACf,UAAM,cAAc,WAAW,WAAW,WAAW,EAAE;AACvD,QAAI,aAAa;AACb,YAAM,UAAU,MAAM,QAAQ,OAAO,SAAS,aAAa,IAAI,CAAC;AAChE,YAAM,oBAAoB,QAAQ;AAClC,UAAI,kBAAkB,OAAO;AACzB,qBAAa,kBAAkB;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;",
5
+ "names": ["ModelBounds"]
6
+ }
@@ -12,6 +12,7 @@ export declare class StatusResponseError extends MatterError {
12
12
  readonly code: Status;
13
13
  readonly clusterCode?: number | undefined;
14
14
  constructor(message: string, code: Status, clusterCode?: number | undefined);
15
+ get bareMessage(): string;
15
16
  static is(error: unknown, ...codes: Status[]): error is StatusResponseError;
16
17
  get id(): string;
17
18
  static create(code: Status, message?: string, clusterCode?: number): StatusResponseError;
@@ -1 +1 @@
1
- {"version":3,"file":"StatusResponseError.d.ts","sourceRoot":"","sources":["../../../src/common/StatusResponseError.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAA0B,MAAM,iBAAiB,CAAC;AAItE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;aAG5B,IAAI,EAAE,MAAM;aACZ,WAAW,CAAC,EAAE,MAAM;gBAFpC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,YAAA;IAKxC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,mBAAmB;IAI3E,IAAa,EAAE,WAWd;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CASrE;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,mBAAmB;CAAG;AAEtE;;GAEG;AACH,eAAO,MAAM,cAAc,EA8BtB,MAAM,CAAC,GAAG,MAAM,OAAO,MAAM,OAAO,EAAE,KAAK,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,mBAAmB,CAAC,CAAC;AAEhH,qFAAqF;AACrF,qBAAa,2BAA4B,SAAQ,mBAAmB;CAAG"}
1
+ {"version":3,"file":"StatusResponseError.d.ts","sourceRoot":"","sources":["../../../src/common/StatusResponseError.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAA0B,MAAM,iBAAiB,CAAC;AAItE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;aAG5B,IAAI,EAAE,MAAM;aACZ,WAAW,CAAC,EAAE,MAAM;gBAFpC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,YAAA;IAKxC,IAAI,WAAW,WAEd;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,mBAAmB;IAI3E,IAAa,EAAE,WAWd;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CASrE;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,mBAAmB;CAAG;AAEtE;;GAEG;AACH,eAAO,MAAM,cAAc,EA8BtB,MAAM,CAAC,GAAG,MAAM,OAAO,MAAM,OAAO,EAAE,KAAK,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,mBAAmB,CAAC,CAAC;AAEhH,qFAAqF;AACrF,qBAAa,2BAA4B,SAAQ,mBAAmB;CAAG"}
@@ -12,6 +12,9 @@ class StatusResponseError extends MatterError {
12
12
  this.code = code;
13
13
  this.clusterCode = clusterCode;
14
14
  }
15
+ get bareMessage() {
16
+ return this.message.replace(/ \(code .+\)$/, "");
17
+ }
15
18
  static is(error, ...codes) {
16
19
  return error instanceof StatusResponseError && (!codes.length || codes.includes(error.code));
17
20
  }
@@ -51,7 +54,7 @@ const StatusResponse = Object.fromEntries(
51
54
  if (clusterCode !== void 0) {
52
55
  codeStr = `${codeStr}; cluster code ${clusterCode}`;
53
56
  }
54
- this.message = `message (${codeStr})`;
57
+ this.message = `${message} (${codeStr})`;
55
58
  }
56
59
  }
57
60
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/common/StatusResponseError.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,cAAc;AACvB,SAAS,aAAa,YAAY,kBAAkB;AAEpD,MAAM,sBAAsB,CAAC;AAKtB,MAAM,4BAA4B,YAAY;AAAA,EAC1C,YACH,SACgB,MACA,aAClB;AACE,UAAM,OAAO;AAHG;AACA;AAAA,EAGpB;AAAA,EAEA,OAAO,GAAG,UAAmB,OAA+C;AACxE,WAAO,iBAAiB,wBAAwB,CAAC,MAAM,UAAU,MAAM,SAAS,MAAM,IAAI;AAAA,EAC9F;AAAA,EAEA,IAAa,KAAK;AACd,UAAM,KAAK,MAAM;AAEjB,QAAI,OAAO,mBAAmB;AAC1B,YAAM,OAAO,OAAO,KAAK,IAAI;AAC7B,UAAI,MAAM;AACN,eAAO,WAAW,IAAI;AAAA,MAC1B;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,OAAO,MAAc,SAAkB,aAAsB;AAChE,UAAM,OAAO,oBAAoB,IAAI;AAErC,QAAI,MAAM;AACN,aAAO,IAAI,KAAK,SAAS,WAAW;AAAA,IACxC;AAEA,UAAM,IAAI,2BAA2B,WAAW,2BAA2B,MAAM,WAAW;AAAA,EAChG;AACJ;AAKO,MAAM,mCAAmC,oBAAoB;AAAC;AAK9D,MAAM,iBAAiB,OAAO;AAAA,EACjC,OAAO,QAAQ,MAAM,EAChB,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AACnB,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO;AAAA,IACX;AACA,UAAM,KAAK;AAAA,MACP,CAAC,IAAI,GAAG,cAAc,oBAAoB;AAAA,QACtC,YAAY,SAAkB,aAAsB;AAChD,cAAI,YAAY,QAAW;AACvB,sBAAU,WAAW,WAAW,IAAI,CAAC;AAAA,UACzC;AAEA,gBAAM,SAAS,MAAgB,WAAW;AAE1C,cAAI,UAAU,QAAQ,IAAI;AAC1B,cAAI,gBAAgB,QAAW;AAC3B,sBAAU,GAAG,OAAO,kBAAkB,WAAW;AAAA,UACrD;AAEA,eAAK,UAAU,YAAY,OAAO;AAAA,QACtC;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,cAAc,GAAG,IAAI;AAC3B,WAAO,eAAe,aAAa,QAAQ,EAAE,OAAO,KAAK,CAAC;AAC1D,wBAAoB,IAAI,IAAI;AAC5B,WAAO,CAAC,GAAG,IAAI,SAAS,WAAW;AAAA,EACvC,CAAC,EACA,OAAO,OAAK,CAAC;AACtB;AAGO,MAAM,oCAAoC,oBAAoB;AAAC;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,cAAc;AACvB,SAAS,aAAa,YAAY,kBAAkB;AAEpD,MAAM,sBAAsB,CAAC;AAKtB,MAAM,4BAA4B,YAAY;AAAA,EAC1C,YACH,SACgB,MACA,aAClB;AACE,UAAM,OAAO;AAHG;AACA;AAAA,EAGpB;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK,QAAQ,QAAQ,iBAAiB,EAAE;AAAA,EACnD;AAAA,EAEA,OAAO,GAAG,UAAmB,OAA+C;AACxE,WAAO,iBAAiB,wBAAwB,CAAC,MAAM,UAAU,MAAM,SAAS,MAAM,IAAI;AAAA,EAC9F;AAAA,EAEA,IAAa,KAAK;AACd,UAAM,KAAK,MAAM;AAEjB,QAAI,OAAO,mBAAmB;AAC1B,YAAM,OAAO,OAAO,KAAK,IAAI;AAC7B,UAAI,MAAM;AACN,eAAO,WAAW,IAAI;AAAA,MAC1B;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,OAAO,MAAc,SAAkB,aAAsB;AAChE,UAAM,OAAO,oBAAoB,IAAI;AAErC,QAAI,MAAM;AACN,aAAO,IAAI,KAAK,SAAS,WAAW;AAAA,IACxC;AAEA,UAAM,IAAI,2BAA2B,WAAW,2BAA2B,MAAM,WAAW;AAAA,EAChG;AACJ;AAKO,MAAM,mCAAmC,oBAAoB;AAAC;AAK9D,MAAM,iBAAiB,OAAO;AAAA,EACjC,OAAO,QAAQ,MAAM,EAChB,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AACnB,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO;AAAA,IACX;AACA,UAAM,KAAK;AAAA,MACP,CAAC,IAAI,GAAG,cAAc,oBAAoB;AAAA,QACtC,YAAY,SAAkB,aAAsB;AAChD,cAAI,YAAY,QAAW;AACvB,sBAAU,WAAW,WAAW,IAAI,CAAC;AAAA,UACzC;AAEA,gBAAM,SAAS,MAAgB,WAAW;AAE1C,cAAI,UAAU,QAAQ,IAAI;AAC1B,cAAI,gBAAgB,QAAW;AAC3B,sBAAU,GAAG,OAAO,kBAAkB,WAAW;AAAA,UACrD;AAEA,eAAK,UAAU,GAAG,OAAO,KAAK,OAAO;AAAA,QACzC;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,cAAc,GAAG,IAAI;AAC3B,WAAO,eAAe,aAAa,QAAQ,EAAE,OAAO,KAAK,CAAC;AAC1D,wBAAoB,IAAI,IAAI;AAC5B,WAAO,CAAC,GAAG,IAAI,SAAS,WAAW;AAAA,EACvC,CAAC,EACA,OAAO,OAAK,CAAC;AACtB;AAGO,MAAM,oCAAoC,oBAAoB;AAAC;",
5
5
  "names": []
6
6
  }
@@ -3,6 +3,7 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ export * from "./ModelBounds.js";
6
7
  export * from "./ProductDescription.js";
7
8
  export * from "./StatusCode.js";
8
9
  export * from "./StatusResponseError.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
@@ -3,6 +3,7 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ export * from "./ModelBounds.js";
6
7
  export * from "./ProductDescription.js";
7
8
  export * from "./StatusCode.js";
8
9
  export * from "./StatusResponseError.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/common/index.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
5
5
  "names": []
6
6
  }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ClusterModel, ValueModel } from "#model";
7
+ import { TlvSchema } from "./TlvSchema.js";
8
+ export declare function TlvOfModel(model: ClusterModel | ValueModel): TlvSchema<unknown>;
9
+ //# sourceMappingURL=TlvOfModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TlvOfModel.d.ts","sourceRoot":"","sources":["../../../src/tlv/TlvOfModel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,EAGH,YAAY,EA6BZ,UAAU,EAEb,MAAM,QAAQ,CAAC;AA6BhB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3C,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU,sBAO1D"}
@@ -0,0 +1,260 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ModelBounds } from "#common/ModelBounds.js";
7
+ import { TlvAttributeId } from "#datatype/AttributeId.js";
8
+ import { TlvClusterId } from "#datatype/ClusterId.js";
9
+ import { TlvCommandId } from "#datatype/CommandId.js";
10
+ import { TlvDeviceTypeId } from "#datatype/DeviceTypeId.js";
11
+ import { TlvEndpointNumber } from "#datatype/EndpointNumber.js";
12
+ import { TlvEventId } from "#datatype/EventId.js";
13
+ import { TlvFabricId } from "#datatype/FabricId.js";
14
+ import { TlvFabricIndex } from "#datatype/FabricIndex.js";
15
+ import { TlvGroupId } from "#datatype/GroupId.js";
16
+ import { TlvNodeId } from "#datatype/NodeId.js";
17
+ import { TlvSubjectId } from "#datatype/SubjectId.js";
18
+ import { TlvVendorId } from "#datatype/VendorId.js";
19
+ import { camelize, ImplementationError, InternalError } from "#general";
20
+ import {
21
+ attribId,
22
+ clusterId,
23
+ commandId,
24
+ devtypeId,
25
+ endpointNo,
26
+ epochS,
27
+ epochUs,
28
+ eventId,
29
+ fabricId,
30
+ fabricIdx,
31
+ groupId,
32
+ int16,
33
+ int32,
34
+ int64,
35
+ int8,
36
+ map16,
37
+ map32,
38
+ map8,
39
+ Metatype,
40
+ nodeId,
41
+ percent,
42
+ percent100ths,
43
+ posixMs,
44
+ subjectId,
45
+ systimeMs,
46
+ systimeUs,
47
+ uint16,
48
+ uint32,
49
+ uint64,
50
+ uint8,
51
+ ValueModel,
52
+ vendorId
53
+ } from "#model";
54
+ import { BitField, BitFlag } from "#schema/BitmapSchema.js";
55
+ import { TlvAny } from "./TlvAny.js";
56
+ import { TlvArray } from "./TlvArray.js";
57
+ import { TlvBoolean } from "./TlvBoolean.js";
58
+ import { TlvNullable } from "./TlvNullable.js";
59
+ import {
60
+ TlvBitmap,
61
+ TlvDouble,
62
+ TlvEnum,
63
+ TlvEpochS,
64
+ TlvEpochUs,
65
+ TlvFloat,
66
+ TlvInt16,
67
+ TlvInt32,
68
+ TlvInt64,
69
+ TlvInt8,
70
+ TlvPercent,
71
+ TlvPercent100ths,
72
+ TlvPosixMs,
73
+ TlvSysTimeMS,
74
+ TlvSysTimeUs,
75
+ TlvUInt16,
76
+ TlvUInt32,
77
+ TlvUInt64,
78
+ TlvUInt8
79
+ } from "./TlvNumber.js";
80
+ import { TlvObject } from "./TlvObject.js";
81
+ import { TlvByteString, TlvString } from "./TlvString.js";
82
+ const cache = /* @__PURE__ */ new WeakMap();
83
+ function TlvOfModel(model) {
84
+ let tlv = cache.get(model);
85
+ if (tlv === void 0) {
86
+ tlv = generateTlv(model);
87
+ cache.set(model, tlv);
88
+ }
89
+ return tlv;
90
+ }
91
+ const NumberMapping = {
92
+ // Signed int
93
+ [int8.name]: TlvInt8,
94
+ [int16.name]: TlvInt16,
95
+ [int32.name]: TlvInt32,
96
+ [int64.name]: TlvInt64,
97
+ // Unsigned int
98
+ [uint8.name]: TlvUInt8,
99
+ [uint16.name]: TlvUInt16,
100
+ [uint32.name]: TlvUInt32,
101
+ [uint64.name]: TlvUInt64,
102
+ // Bitmap
103
+ [map8.name]: TlvUInt8,
104
+ [map16.name]: TlvUInt16,
105
+ [map32.name]: TlvUInt32,
106
+ // ID
107
+ [attribId.name]: TlvAttributeId,
108
+ [clusterId.name]: TlvClusterId,
109
+ [commandId.name]: TlvCommandId,
110
+ [devtypeId.name]: TlvDeviceTypeId,
111
+ [endpointNo.name]: TlvEndpointNumber,
112
+ [eventId.name]: TlvEventId,
113
+ [fabricId.name]: TlvFabricId,
114
+ [fabricIdx.name]: TlvFabricIndex,
115
+ [groupId.name]: TlvGroupId,
116
+ [nodeId.name]: TlvNodeId,
117
+ [subjectId.name]: TlvSubjectId,
118
+ [vendorId.name]: TlvVendorId,
119
+ // Percent
120
+ [percent.name]: TlvPercent,
121
+ [percent100ths.name]: TlvPercent100ths,
122
+ // Time
123
+ [epochUs.name]: TlvEpochUs,
124
+ [epochS.name]: TlvEpochS,
125
+ [posixMs.name]: TlvPosixMs,
126
+ [systimeUs.name]: TlvSysTimeUs,
127
+ [systimeMs.name]: TlvSysTimeMS
128
+ // The following are defined in the specification but we don't support them so they're apparently unused
129
+ //[int24.name]: TlvInt24,
130
+ //[int40.name]: TlvInt40,
131
+ //[int48.name]: TlvInt48,
132
+ //[uint24.name]: TlvInt24,
133
+ //[uint40.name]: TlvInt40,
134
+ //[uint48.name]: TlvInt48,
135
+ //[map64.name]: TlvUInt64,
136
+ };
137
+ function generateTlv(model) {
138
+ const metatype = model.effectiveMetatype;
139
+ if (metatype === Metatype.object) {
140
+ return generateStruct(model);
141
+ }
142
+ if (!(model instanceof ValueModel)) {
143
+ throw new InternalError(`Inappropriate use of ${model.tag} model as datatype`);
144
+ }
145
+ let tlv;
146
+ const metabase = model.metabase;
147
+ if (metabase === void 0) {
148
+ throw new InternalError(`No metabase for model ${model.name}`);
149
+ }
150
+ switch (metatype) {
151
+ case Metatype.any:
152
+ tlv = TlvAny;
153
+ break;
154
+ case Metatype.boolean:
155
+ tlv = TlvBoolean;
156
+ break;
157
+ case Metatype.bitmap:
158
+ tlv = generateBitmap(model);
159
+ break;
160
+ case Metatype.array:
161
+ tlv = generateList(model);
162
+ break;
163
+ case Metatype.bytes:
164
+ tlv = generateString(TlvByteString, model);
165
+ break;
166
+ case Metatype.string:
167
+ tlv = generateString(TlvString, model);
168
+ break;
169
+ case Metatype.enum:
170
+ tlv = TlvEnum();
171
+ break;
172
+ case Metatype.float:
173
+ if (metabase.name === "single") {
174
+ tlv = TlvFloat;
175
+ } else {
176
+ tlv = TlvDouble;
177
+ }
178
+ break;
179
+ case Metatype.integer:
180
+ tlv = generateInteger(model);
181
+ break;
182
+ default:
183
+ throw new InternalError(`No TLV mapping for model ${model.name}`);
184
+ }
185
+ if (model.quality.nullable) {
186
+ tlv = TlvNullable(tlv);
187
+ }
188
+ return tlv;
189
+ }
190
+ function generateStruct(model) {
191
+ const entries = model.conformant.properties.map((p) => [camelize(p.name), TlvOfModel(model)]);
192
+ const fields = Object.fromEntries(entries);
193
+ return TlvObject(fields);
194
+ }
195
+ function generateBitmap(model) {
196
+ const { fields } = model.conformant;
197
+ if (!fields.length) {
198
+ return primitiveFallbackOf(model);
199
+ }
200
+ const entries = fields.map((field) => {
201
+ const name = camelize(field.name);
202
+ const { constraint } = field;
203
+ if (typeof constraint.value === "number") {
204
+ return [name, BitFlag(constraint.value)];
205
+ }
206
+ if (typeof constraint.min === "number" && typeof constraint.max === "number") {
207
+ return [name, BitField(constraint.min, constraint.max - constraint.min + 1)];
208
+ }
209
+ throw new ImplementationError(`Bit field ${field.path} is not properly constrained`);
210
+ });
211
+ const metabaseName = model.metabase?.name;
212
+ const num = metabaseName ? NumberMapping[metabaseName] : void 0;
213
+ if (!num) {
214
+ throw new ImplementationError(`Could not determine numeric type for bitmap ${model.path} type "${model.type}"`);
215
+ }
216
+ return TlvBitmap(num, Object.fromEntries(entries));
217
+ }
218
+ function generateList(model) {
219
+ const entry = model.conformant.fields.for("entry");
220
+ const bounds = ModelBounds.createLengthBounds(model);
221
+ if (entry === void 0) {
222
+ return TlvArray(TlvAny, bounds);
223
+ }
224
+ return TlvArray(TlvOfModel(model), bounds);
225
+ }
226
+ function generateString(base, model) {
227
+ const bounds = ModelBounds.createLengthBounds(model);
228
+ if (bounds) {
229
+ return base.bound(bounds);
230
+ }
231
+ return base;
232
+ }
233
+ function generateInteger(model) {
234
+ const base = model.metabase;
235
+ if (base === void 0) {
236
+ throw new InternalError(`No metabase for model ${model.path} type ${model.type}`);
237
+ }
238
+ const tlv = NumberMapping[base.name];
239
+ if (tlv === void 0) {
240
+ throw new InternalError(`No mapping for model ${model.path} metabase ${base.name}`);
241
+ }
242
+ if ("bound" in tlv) {
243
+ const bounds = ModelBounds.createNumberBounds(model);
244
+ if (bounds) {
245
+ return tlv.bound(bounds);
246
+ }
247
+ }
248
+ return tlv;
249
+ }
250
+ function primitiveFallbackOf(model) {
251
+ const primitive = model.metabase?.primitiveBase;
252
+ if (primitive === void 0) {
253
+ throw new ImplementationError(`Could not determine primitive base for ${model.path}`);
254
+ }
255
+ return TlvOfModel(primitive);
256
+ }
257
+ export {
258
+ TlvOfModel
259
+ };
260
+ //# sourceMappingURL=TlvOfModel.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tlv/TlvOfModel.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -11,6 +11,7 @@ export * from "./TlvNoArguments.js";
11
11
  export * from "./TlvNullable.js";
12
12
  export * from "./TlvNumber.js";
13
13
  export * from "./TlvObject.js";
14
+ export * from "./TlvOfModel.js";
14
15
  export * from "./TlvSchema.js";
15
16
  export * from "./TlvString.js";
16
17
  export * from "./TlvVoid.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tlv/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tlv/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
@@ -11,6 +11,7 @@ export * from "./TlvNoArguments.js";
11
11
  export * from "./TlvNullable.js";
12
12
  export * from "./TlvNumber.js";
13
13
  export * from "./TlvObject.js";
14
+ export * from "./TlvOfModel.js";
14
15
  export * from "./TlvSchema.js";
15
16
  export * from "./TlvString.js";
16
17
  export * from "./TlvVoid.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/tlv/index.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/types",
3
- "version": "0.16.0-alpha.0-20251004-92135c7df",
3
+ "version": "0.16.0-alpha.0-20251011-d8942d7d5",
4
4
  "description": "Definitions for Matter application",
5
5
  "keywords": [
6
6
  "iot",
@@ -33,12 +33,12 @@
33
33
  "embed-examples": "embedme **/README.md"
34
34
  },
35
35
  "dependencies": {
36
- "@matter/general": "0.16.0-alpha.0-20251004-92135c7df",
37
- "@matter/model": "0.16.0-alpha.0-20251004-92135c7df"
36
+ "@matter/general": "0.16.0-alpha.0-20251011-d8942d7d5",
37
+ "@matter/model": "0.16.0-alpha.0-20251011-d8942d7d5"
38
38
  },
39
39
  "devDependencies": {
40
- "@matter/tools": "0.16.0-alpha.0-20251004-92135c7df",
41
- "@matter/testing": "0.16.0-alpha.0-20251004-92135c7df"
40
+ "@matter/tools": "0.16.0-alpha.0-20251011-d8942d7d5",
41
+ "@matter/testing": "0.16.0-alpha.0-20251011-d8942d7d5"
42
42
  },
43
43
  "files": [
44
44
  "dist/**/*",
@@ -0,0 +1,118 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import {
8
+ camelize,
9
+ FLOAT32_MAX,
10
+ FLOAT32_MIN,
11
+ INT16_MAX,
12
+ INT16_MIN,
13
+ INT32_MAX,
14
+ INT32_MIN,
15
+ INT64_MAX,
16
+ INT64_MIN,
17
+ INT8_MAX,
18
+ INT8_MIN,
19
+ UINT16_MAX,
20
+ UINT24_MAX,
21
+ UINT32_MAX,
22
+ UINT64_MAX,
23
+ UINT8_MAX,
24
+ } from "#general";
25
+ import { Constraint, FieldValue, ValueModel } from "#model";
26
+
27
+ /**
28
+ * Helpers for generation of TLV schema from models.
29
+ *
30
+ * We must export these so long as we codegen TLV directly in TlvGenerator.ts.
31
+ */
32
+ export namespace ModelBounds {
33
+ export function createLengthBounds(model: ValueModel) {
34
+ const constraint = extractApplicableConstraint(model);
35
+
36
+ const value = FieldValue.numericValue(constraint.value, model.type);
37
+ if (value !== undefined) {
38
+ return { length: value };
39
+ }
40
+
41
+ return createRangeBounds(constraint, "minLength", "maxLength");
42
+ }
43
+
44
+ export function createNumberBounds(model: ValueModel) {
45
+ const constraint = model.effectiveConstraint;
46
+
47
+ const value = FieldValue.numericValue(constraint.value, model.type);
48
+ if (value !== undefined) {
49
+ return { min: value, max: value };
50
+ }
51
+
52
+ return createRangeBounds(constraint, "min", "max", model.type);
53
+ }
54
+
55
+ /**
56
+ * Bounds for numeric types.
57
+ */
58
+ export const NumericRanges = {
59
+ uint8: { min: 0, max: UINT8_MAX },
60
+ uint16: { min: 0, max: UINT16_MAX },
61
+ uint24: { min: 0, max: UINT24_MAX },
62
+ uint32: { min: 0, max: UINT32_MAX },
63
+ uint64: { min: 0, max: UINT64_MAX },
64
+ int8: { min: INT8_MIN, max: INT8_MAX },
65
+ int16: { min: INT16_MIN, max: INT16_MAX },
66
+ int32: { min: INT32_MIN, max: INT32_MAX },
67
+ int64: { min: INT64_MIN, max: INT64_MAX },
68
+ float32: { min: FLOAT32_MIN, max: FLOAT32_MAX },
69
+ percent: { min: 0, max: 100 },
70
+ percent100ths: { min: 0, max: 10000 },
71
+ };
72
+ }
73
+
74
+ function createRangeBounds(constraint: Constraint, minKey: string, maxKey: string, type?: string) {
75
+ let min = FieldValue.numericValue(constraint.min, type);
76
+ let max = FieldValue.numericValue(constraint.max, type);
77
+
78
+ if (min === (ModelBounds.NumericRanges as any)[type as any]?.min) {
79
+ min = undefined;
80
+ }
81
+
82
+ if (max === (ModelBounds.NumericRanges as any)[type as any]?.max) {
83
+ max = undefined;
84
+ }
85
+
86
+ if (min === undefined && max === undefined) {
87
+ return;
88
+ }
89
+
90
+ const bounds = {} as { [key: string]: number };
91
+ if (min !== undefined) {
92
+ bounds[minKey] = min;
93
+ }
94
+ if (max !== undefined) {
95
+ bounds[maxKey] = max;
96
+ }
97
+
98
+ return bounds;
99
+ }
100
+
101
+ export function extractApplicableConstraint(model: ValueModel) {
102
+ let constraint = model.effectiveConstraint;
103
+
104
+ // Our TLV parser has no way of representing "in" constraints. But if the referenced array has a member
105
+ // constraint then we can at least enforce to that level with the TLV parser
106
+ if (constraint.in) {
107
+ const siblingName = FieldValue.referenced(constraint.in);
108
+ if (siblingName) {
109
+ const sibling = model.parent?.member(camelize(siblingName, true)) as ValueModel;
110
+ const siblingConstraint = sibling.effectiveConstraint;
111
+ if (siblingConstraint.entry) {
112
+ constraint = siblingConstraint.entry;
113
+ }
114
+ }
115
+ }
116
+
117
+ return constraint;
118
+ }