@hello.nrfcloud.com/proto-map 4.0.0

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 (169) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +122 -0
  3. package/dist/generator/addDocBlock.js +5 -0
  4. package/dist/generator/generateLwM2MDefinitions.js +82 -0
  5. package/dist/generator/generateLwM2MDefinitions.spec.js +91 -0
  6. package/dist/generator/generateLwm2mTimestampResources.js +69 -0
  7. package/dist/generator/generateModels.js +142 -0
  8. package/dist/generator/generateType.js +90 -0
  9. package/dist/generator/generateValidator.js +132 -0
  10. package/dist/generator/generateValidators.js +63 -0
  11. package/dist/generator/isDir.js +163 -0
  12. package/dist/generator/isDir.spec.js +212 -0
  13. package/dist/generator/lwm2m.js +106 -0
  14. package/dist/generator/models.js +306 -0
  15. package/dist/generator/printNode.js +8 -0
  16. package/dist/generator/tokenizeName.js +5 -0
  17. package/dist/generator/tokenizeName.spec.js +98 -0
  18. package/dist/generator/types.js +140 -0
  19. package/dist/lwm2m/LWM2MObjectDefinition.js +88 -0
  20. package/dist/lwm2m/LWM2MObjectInfo.js +9 -0
  21. package/dist/lwm2m/LwM2MObject.d.js +1 -0
  22. package/dist/lwm2m/LwM2MObjectID.js +57 -0
  23. package/dist/lwm2m/ParsedLwM2MObjectDefinition.js +1 -0
  24. package/dist/lwm2m/check-lwm2m-rules.js +480 -0
  25. package/dist/lwm2m/definitions.js +596 -0
  26. package/dist/lwm2m/fromXML2JSON.js +194 -0
  27. package/dist/lwm2m/instanceTs.js +9 -0
  28. package/dist/lwm2m/instanceTs.spec.js +16 -0
  29. package/dist/lwm2m/isRegisteredLwM2MObject.js +3 -0
  30. package/dist/lwm2m/isRegisteredLwM2MObject.spec.js +45 -0
  31. package/dist/lwm2m/object/14201.d.js +5 -0
  32. package/dist/lwm2m/object/14202.d.js +5 -0
  33. package/dist/lwm2m/object/14203.d.js +5 -0
  34. package/dist/lwm2m/object/14204.d.js +5 -0
  35. package/dist/lwm2m/object/14205.d.js +5 -0
  36. package/dist/lwm2m/object/14210.d.js +5 -0
  37. package/dist/lwm2m/object/14220.d.js +5 -0
  38. package/dist/lwm2m/object/14230.d.js +5 -0
  39. package/dist/lwm2m/object/validate14201.js +18 -0
  40. package/dist/lwm2m/object/validate14202.js +17 -0
  41. package/dist/lwm2m/object/validate14203.js +19 -0
  42. package/dist/lwm2m/object/validate14204.js +17 -0
  43. package/dist/lwm2m/object/validate14205.js +15 -0
  44. package/dist/lwm2m/object/validate14210.js +13 -0
  45. package/dist/lwm2m/object/validate14220.js +12 -0
  46. package/dist/lwm2m/object/validate14230.js +13 -0
  47. package/dist/lwm2m/objects.js +8 -0
  48. package/dist/lwm2m/parseRangeEnumeration.js +20 -0
  49. package/dist/lwm2m/parseRangeEnumeration.spec.js +27 -0
  50. package/dist/lwm2m/resourceType.js +12 -0
  51. package/dist/lwm2m/timestampResources.js +12 -0
  52. package/dist/lwm2m/unwrapNestedArray.js +114 -0
  53. package/dist/lwm2m/unwrapNestedArray.spec.js +374 -0
  54. package/dist/lwm2m/validate.js +14 -0
  55. package/dist/lwm2m/validation.js +146 -0
  56. package/dist/lwm2m/validators.js +20 -0
  57. package/dist/markdown/getCodeBlock.js +74 -0
  58. package/dist/markdown/getFrontMatter.js +15 -0
  59. package/dist/markdown/parseREADME.js +19 -0
  60. package/dist/models/asset_tracker_v2+AWS/examples/examples.spec.js +489 -0
  61. package/dist/models/check-model-rules.js +137 -0
  62. package/dist/models/models.js +137 -0
  63. package/dist/models/types.js +13 -0
  64. package/dist/senml/SenMLSchema.js +79 -0
  65. package/dist/senml/SenMLSchema.spec.js +23 -0
  66. package/dist/senml/hasValue.js +8 -0
  67. package/dist/senml/hasValue.spec.js +103 -0
  68. package/dist/senml/lwm2mToSenML.js +137 -0
  69. package/dist/senml/lwm2mToSenML.spec.js +104 -0
  70. package/dist/senml/parseResourceId.js +58 -0
  71. package/dist/senml/parseResourceId.spec.js +13 -0
  72. package/dist/senml/senMLtoLwM2M.js +126 -0
  73. package/dist/senml/senMLtoLwM2M.spec.js +226 -0
  74. package/dist/senml/validateSenML.js +6 -0
  75. package/dist/senml/validateSenML.spec.js +31 -0
  76. package/export.js +13 -0
  77. package/index.d.ts +14 -0
  78. package/lwm2m/14201.xml +94 -0
  79. package/lwm2m/14202.xml +84 -0
  80. package/lwm2m/14203.xml +104 -0
  81. package/lwm2m/14204.xml +84 -0
  82. package/lwm2m/14205.xml +64 -0
  83. package/lwm2m/14210.xml +44 -0
  84. package/lwm2m/14220.xml +34 -0
  85. package/lwm2m/14230.xml +44 -0
  86. package/lwm2m/LWM2M-v1_1.xsd +168 -0
  87. package/lwm2m/LWM2MObjectDefinition.ts +84 -0
  88. package/lwm2m/LWM2MObjectInfo.ts +42 -0
  89. package/lwm2m/LwM2MObject.d.ts +19 -0
  90. package/lwm2m/LwM2MObjectID.ts +73 -0
  91. package/lwm2m/ParsedLwM2MObjectDefinition.ts +28 -0
  92. package/lwm2m/check-lwm2m-rules.ts +160 -0
  93. package/lwm2m/definitions.ts +278 -0
  94. package/lwm2m/format.sh +3 -0
  95. package/lwm2m/fromXML2JSON.ts +44 -0
  96. package/lwm2m/instanceTs.spec.ts +19 -0
  97. package/lwm2m/instanceTs.ts +10 -0
  98. package/lwm2m/isRegisteredLwM2MObject.spec.ts +48 -0
  99. package/lwm2m/isRegisteredLwM2MObject.ts +4 -0
  100. package/lwm2m/object/14201.d.ts +73 -0
  101. package/lwm2m/object/14202.d.ts +59 -0
  102. package/lwm2m/object/14203.d.ts +67 -0
  103. package/lwm2m/object/14204.d.ts +55 -0
  104. package/lwm2m/object/14205.d.ts +43 -0
  105. package/lwm2m/object/14210.d.ts +31 -0
  106. package/lwm2m/object/14220.d.ts +25 -0
  107. package/lwm2m/object/14230.d.ts +31 -0
  108. package/lwm2m/object/validate14201.ts +10 -0
  109. package/lwm2m/object/validate14202.ts +10 -0
  110. package/lwm2m/object/validate14203.ts +10 -0
  111. package/lwm2m/object/validate14204.ts +10 -0
  112. package/lwm2m/object/validate14205.ts +10 -0
  113. package/lwm2m/object/validate14210.ts +10 -0
  114. package/lwm2m/object/validate14220.ts +10 -0
  115. package/lwm2m/object/validate14230.ts +10 -0
  116. package/lwm2m/objects.ts +16 -0
  117. package/lwm2m/parseRangeEnumeration.spec.ts +34 -0
  118. package/lwm2m/parseRangeEnumeration.ts +29 -0
  119. package/lwm2m/resourceType.ts +11 -0
  120. package/lwm2m/timestampResources.ts +4 -0
  121. package/lwm2m/unwrapNestedArray.spec.ts +241 -0
  122. package/lwm2m/unwrapNestedArray.ts +27 -0
  123. package/lwm2m/validate.ts +30 -0
  124. package/lwm2m/validation.ts +120 -0
  125. package/lwm2m/validators.ts +21 -0
  126. package/models/PCA20035+solar/README.md +10 -0
  127. package/models/PCA20035+solar/transforms/airQuality.md +48 -0
  128. package/models/PCA20035+solar/transforms/battery.md +46 -0
  129. package/models/PCA20035+solar/transforms/button.md +45 -0
  130. package/models/PCA20035+solar/transforms/deviceInfo.md +72 -0
  131. package/models/PCA20035+solar/transforms/gain.md +45 -0
  132. package/models/PCA20035+solar/transforms/geolocationFromGroundfix.md +67 -0
  133. package/models/PCA20035+solar/transforms/geolocationFromMessage.md +80 -0
  134. package/models/PCA20035+solar/transforms/humidity.md +43 -0
  135. package/models/PCA20035+solar/transforms/networkInfo.md +84 -0
  136. package/models/PCA20035+solar/transforms/pressure.md +43 -0
  137. package/models/PCA20035+solar/transforms/temperature.md +43 -0
  138. package/models/README.md +10 -0
  139. package/models/asset_tracker_v2+AWS/README.md +6 -0
  140. package/models/asset_tracker_v2+AWS/examples/examples.spec.ts +229 -0
  141. package/models/asset_tracker_v2+AWS/examples/shadow/example-1.json +24 -0
  142. package/models/asset_tracker_v2+AWS/examples/shadow/example-2.json +30 -0
  143. package/models/asset_tracker_v2+AWS/examples/shadow/example-3.json +37 -0
  144. package/models/asset_tracker_v2+AWS/examples/shadow/example-4.json +48 -0
  145. package/models/asset_tracker_v2+AWS/examples/shadow/example-5.json +43 -0
  146. package/models/asset_tracker_v2+AWS/transforms/GNSS.md +66 -0
  147. package/models/asset_tracker_v2+AWS/transforms/battery-voltage.md +50 -0
  148. package/models/asset_tracker_v2+AWS/transforms/device-info.md +61 -0
  149. package/models/asset_tracker_v2+AWS/transforms/env.md +69 -0
  150. package/models/asset_tracker_v2+AWS/transforms/fuel-gauge.md +62 -0
  151. package/models/asset_tracker_v2+AWS/transforms/roam.md +100 -0
  152. package/models/asset_tracker_v2+AWS/transforms/solar.md +58 -0
  153. package/models/check-model-rules.ts +125 -0
  154. package/models/kartverket-vasstandsdata/README.md +13 -0
  155. package/models/models.ts +36 -0
  156. package/models/types.ts +17 -0
  157. package/package.json +111 -0
  158. package/senml/SenMLSchema.spec.ts +21 -0
  159. package/senml/SenMLSchema.ts +74 -0
  160. package/senml/hasValue.spec.ts +19 -0
  161. package/senml/hasValue.ts +12 -0
  162. package/senml/lwm2mToSenML.spec.ts +74 -0
  163. package/senml/lwm2mToSenML.ts +62 -0
  164. package/senml/parseResourceId.spec.ts +13 -0
  165. package/senml/parseResourceId.ts +23 -0
  166. package/senml/senMLtoLwM2M.spec.ts +181 -0
  167. package/senml/senMLtoLwM2M.ts +121 -0
  168. package/senml/validateSenML.spec.ts +16 -0
  169. package/senml/validateSenML.ts +8 -0
@@ -0,0 +1,13 @@
1
+ import assert from "node:assert";
2
+ import { describe, it } from "node:test";
3
+ import { parseResourceId } from "./parseResourceId.js";
4
+ void describe("parseResourceId()", function() {
5
+ void it("should parse an LwM2M resource ID", function() {
6
+ return assert.deepEqual(parseResourceId("/14201/1/2/0"), {
7
+ ObjectID: 14201,
8
+ ObjectInstanceID: 1,
9
+ ResourceID: 2,
10
+ ResourceInstanceId: 0
11
+ });
12
+ });
13
+ });
@@ -0,0 +1,126 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _object_spread(target) {
15
+ for(var i = 1; i < arguments.length; i++){
16
+ var source = arguments[i] != null ? arguments[i] : {};
17
+ var ownKeys = Object.keys(source);
18
+ if (typeof Object.getOwnPropertySymbols === "function") {
19
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
20
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
21
+ }));
22
+ }
23
+ ownKeys.forEach(function(key) {
24
+ _define_property(target, key, source[key]);
25
+ });
26
+ }
27
+ return target;
28
+ }
29
+ function ownKeys(object, enumerableOnly) {
30
+ var keys = Object.keys(object);
31
+ if (Object.getOwnPropertySymbols) {
32
+ var symbols = Object.getOwnPropertySymbols(object);
33
+ if (enumerableOnly) {
34
+ symbols = symbols.filter(function(sym) {
35
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
36
+ });
37
+ }
38
+ keys.push.apply(keys, symbols);
39
+ }
40
+ return keys;
41
+ }
42
+ function _object_spread_props(target, source) {
43
+ source = source != null ? source : {};
44
+ if (Object.getOwnPropertyDescriptors) {
45
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
46
+ } else {
47
+ ownKeys(Object(source)).forEach(function(key) {
48
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
49
+ });
50
+ }
51
+ return target;
52
+ }
53
+ import { timestampResources } from "../lwm2m/timestampResources.js";
54
+ import { parseResourceId } from "./parseResourceId.js";
55
+ import { hasValue } from "./hasValue.js";
56
+ var isInfoForDifferentInstance = function(currentObject, resourceID, currentBaseTime) {
57
+ var _currentObject_Resources_tsRes, _currentObject_Resources;
58
+ if (currentObject === undefined) return true;
59
+ if (currentObject.ObjectID !== resourceID.ObjectID) return true;
60
+ var _currentObject_ObjectInstanceID;
61
+ if (((_currentObject_ObjectInstanceID = currentObject.ObjectInstanceID) !== null && _currentObject_ObjectInstanceID !== void 0 ? _currentObject_ObjectInstanceID : 0) !== resourceID.ObjectInstanceID) return true;
62
+ var tsRes = timestampResources[resourceID.ObjectID];
63
+ if (tsRes === undefined) throw new Error("Unknown LwM2M Object ID: ".concat(resourceID.ObjectID, "!"));
64
+ if (currentBaseTime !== ((_currentObject_Resources = currentObject.Resources) === null || _currentObject_Resources === void 0 ? void 0 : (_currentObject_Resources_tsRes = _currentObject_Resources[tsRes]) === null || _currentObject_Resources_tsRes === void 0 ? void 0 : _currentObject_Resources_tsRes.getTime())) return true;
65
+ return false;
66
+ };
67
+ var getValue = function(measurement) {
68
+ if ("bv" in measurement && !("v" in measurement)) return measurement.bv;
69
+ if ("bv" in measurement && "v" in measurement) return measurement.bv + measurement.v;
70
+ if ("v" in measurement) return measurement.v;
71
+ if ("vs" in measurement) return measurement.vs;
72
+ if ("vb" in measurement) return measurement.vb;
73
+ if ("vd" in measurement) return measurement.vd;
74
+ return undefined;
75
+ };
76
+ export var senMLtoLwM2M = function(senML) {
77
+ var currentBaseName = "";
78
+ var currentBaseTime = undefined;
79
+ var currentObject = undefined;
80
+ var items = [];
81
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
82
+ try {
83
+ for(var _iterator = senML[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
84
+ var item = _step.value;
85
+ if ("bn" in item && item.bn !== undefined) currentBaseName = item.bn;
86
+ if ("bt" in item && item.bt !== undefined) currentBaseTime = item.bt;
87
+ if (!hasValue(item)) continue;
88
+ var _item_n;
89
+ var itemResourceId = "".concat(currentBaseName).concat((_item_n = item.n) !== null && _item_n !== void 0 ? _item_n : "", "/0");
90
+ var resourceId = parseResourceId(itemResourceId);
91
+ if (resourceId === null) throw new Error("Invalid resource ID: ".concat(itemResourceId));
92
+ if (currentObject === undefined || currentBaseTime !== undefined && isInfoForDifferentInstance(currentObject, resourceId, currentBaseTime)) {
93
+ if (currentObject !== undefined) items.push(currentObject);
94
+ var tsRes = timestampResources[resourceId.ObjectID];
95
+ if (tsRes === undefined) throw new Error("Unknown LwM2M Object ID: ".concat(resourceId.ObjectID, "!"));
96
+ if (currentBaseTime === undefined) throw new Error("No base time defined for object!");
97
+ currentObject = {
98
+ ObjectID: resourceId.ObjectID,
99
+ Resources: _define_property({}, tsRes, new Date(currentBaseTime))
100
+ };
101
+ if (resourceId.ObjectInstanceID !== 0) currentObject.ObjectInstanceID = resourceId.ObjectInstanceID;
102
+ if ("blv" in item) currentObject.ObjectVersion = item.blv;
103
+ }
104
+ if ((currentObject === null || currentObject === void 0 ? void 0 : currentObject.Resources) === undefined) continue;
105
+ var value = getValue(item);
106
+ if (value !== undefined) {
107
+ currentObject.Resources = _object_spread_props(_object_spread({}, currentObject.Resources), _define_property({}, item.n, value));
108
+ }
109
+ }
110
+ } catch (err) {
111
+ _didIteratorError = true;
112
+ _iteratorError = err;
113
+ } finally{
114
+ try {
115
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
116
+ _iterator.return();
117
+ }
118
+ } finally{
119
+ if (_didIteratorError) {
120
+ throw _iteratorError;
121
+ }
122
+ }
123
+ }
124
+ if (currentObject !== undefined) items.push(currentObject);
125
+ return items;
126
+ };
@@ -0,0 +1,226 @@
1
+ import assert from "node:assert/strict";
2
+ import { describe, it } from "node:test";
3
+ import { senMLtoLwM2M } from "./senMLtoLwM2M.js";
4
+ void describe("senMLtoLwM2M()", function() {
5
+ void it("should resolve a senML message into objects", function() {
6
+ var input = [
7
+ {
8
+ bn: "/14201/1/",
9
+ blv: "1.1",
10
+ bt: 1698155694999,
11
+ n: "0",
12
+ v: 33.98755678796222
13
+ },
14
+ {
15
+ n: "1",
16
+ v: -84.506132079174634
17
+ },
18
+ {
19
+ n: "2",
20
+ v: 295.468994140625
21
+ },
22
+ {
23
+ n: "3",
24
+ v: 17.74077033996582
25
+ },
26
+ {
27
+ n: "4",
28
+ v: 26.376304626464844
29
+ },
30
+ {
31
+ n: "5",
32
+ v: 359.1545715332
33
+ }
34
+ ];
35
+ var expected = [
36
+ {
37
+ ObjectID: 14201,
38
+ ObjectInstanceID: 1,
39
+ ObjectVersion: "1.1",
40
+ Resources: {
41
+ 0: 33.98755678796222,
42
+ 1: -84.506132079174634,
43
+ 2: 295.468994140625,
44
+ 3: 17.74077033996582,
45
+ 4: 26.376304626464844,
46
+ 5: 359.1545715332,
47
+ 99: new Date(1698155694999)
48
+ }
49
+ }
50
+ ];
51
+ assert.deepEqual(senMLtoLwM2M(input), expected);
52
+ });
53
+ void it("should drop empty resources", function() {
54
+ var input = [
55
+ {
56
+ bn: "/14203/0/",
57
+ n: "0",
58
+ vs: "LTE-M",
59
+ bt: 1676369307222
60
+ },
61
+ {
62
+ n: "1",
63
+ v: 20
64
+ },
65
+ {
66
+ n: "2",
67
+ v: -79
68
+ },
69
+ {
70
+ n: "3",
71
+ v: 6
72
+ },
73
+ {
74
+ n: "4",
75
+ v: 56879116
76
+ },
77
+ {
78
+ n: "5",
79
+ v: 24001
80
+ },
81
+ {
82
+ n: "6",
83
+ vs: "10.160.243.113"
84
+ },
85
+ {
86
+ n: "11"
87
+ }
88
+ ];
89
+ var expected = [
90
+ {
91
+ ObjectID: 14203,
92
+ Resources: {
93
+ 0: "LTE-M",
94
+ 1: 20,
95
+ 2: -79,
96
+ 3: 6,
97
+ 4: 56879116,
98
+ 5: 24001,
99
+ 6: "10.160.243.113",
100
+ 99: new Date(1676369307222)
101
+ }
102
+ }
103
+ ];
104
+ assert.deepEqual(senMLtoLwM2M(input), expected);
105
+ });
106
+ void it("should ignore repeated base properties", function() {
107
+ var input = [
108
+ {
109
+ bn: "/14203/0/",
110
+ n: "0",
111
+ vs: "LTE-M",
112
+ bt: 1699049665511
113
+ },
114
+ {
115
+ n: "1",
116
+ v: 20
117
+ },
118
+ {
119
+ bn: "/14203/0/",
120
+ n: "2",
121
+ v: -89,
122
+ bt: 1699049665511
123
+ },
124
+ {
125
+ n: "3",
126
+ v: 2305
127
+ },
128
+ {
129
+ n: "4",
130
+ v: 34784790
131
+ },
132
+ {
133
+ n: "5",
134
+ v: 24202
135
+ },
136
+ {
137
+ n: "6",
138
+ vs: "100.81.95.75"
139
+ },
140
+ {
141
+ bn: "/14203/0/",
142
+ n: "11",
143
+ v: 7,
144
+ bt: 1699049665511
145
+ }
146
+ ];
147
+ var expected = [
148
+ {
149
+ ObjectID: 14203,
150
+ Resources: {
151
+ 0: "LTE-M",
152
+ 1: 20,
153
+ 2: -89,
154
+ 3: 2305,
155
+ 4: 34784790,
156
+ 5: 24202,
157
+ 6: "100.81.95.75",
158
+ 11: 7,
159
+ 99: new Date(1699049665511)
160
+ }
161
+ }
162
+ ];
163
+ assert.deepEqual(senMLtoLwM2M(input), expected);
164
+ });
165
+ void it("should handle multiple measurements for the same resource", function() {
166
+ var input = [
167
+ {
168
+ bn: "/14205/0/",
169
+ n: "0",
170
+ v: 21,
171
+ bt: 1699049600000
172
+ },
173
+ {
174
+ bn: "/14205/1/",
175
+ n: "0",
176
+ v: 31,
177
+ bt: 1699049600000
178
+ },
179
+ {
180
+ bn: "/14205/0/",
181
+ n: "0",
182
+ v: 22,
183
+ bt: 1699049700000
184
+ },
185
+ {
186
+ bn: "/14205/1/",
187
+ n: "0",
188
+ v: 32,
189
+ bt: 1699049700000
190
+ }
191
+ ];
192
+ var expected = [
193
+ {
194
+ ObjectID: 14205,
195
+ Resources: {
196
+ 0: 21,
197
+ 99: new Date(1699049600000)
198
+ }
199
+ },
200
+ {
201
+ ObjectID: 14205,
202
+ ObjectInstanceID: 1,
203
+ Resources: {
204
+ 0: 31,
205
+ 99: new Date(1699049600000)
206
+ }
207
+ },
208
+ {
209
+ ObjectID: 14205,
210
+ Resources: {
211
+ 0: 22,
212
+ 99: new Date(1699049700000)
213
+ }
214
+ },
215
+ {
216
+ ObjectID: 14205,
217
+ ObjectInstanceID: 1,
218
+ Resources: {
219
+ 0: 32,
220
+ 99: new Date(1699049700000)
221
+ }
222
+ }
223
+ ];
224
+ assert.deepEqual(senMLtoLwM2M(input), expected);
225
+ });
226
+ });
@@ -0,0 +1,6 @@
1
+ import { SenML } from "../senml/SenMLSchema.js";
2
+ import { validate } from "../validate.js";
3
+ var validator = validate(SenML);
4
+ export var validateSenML = function(maybeSenML) {
5
+ return validator(maybeSenML);
6
+ };
@@ -0,0 +1,31 @@
1
+ import { describe, it } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { validateSenML } from "./validateSenML.js";
4
+ void describe("validateSenML()", function() {
5
+ void it("should validate", function() {
6
+ var senMl = [
7
+ {
8
+ bn: "/14202/1/",
9
+ blv: "1.1",
10
+ n: "0",
11
+ v: 99,
12
+ bt: 1699049685992
13
+ },
14
+ {
15
+ n: "1",
16
+ v: 4.179
17
+ },
18
+ {
19
+ n: "2",
20
+ v: 0
21
+ },
22
+ {
23
+ n: "3",
24
+ v: 25.7
25
+ }
26
+ ];
27
+ assert.deepEqual(validateSenML(senMl), {
28
+ value: senMl
29
+ });
30
+ });
31
+ });
package/export.js ADDED
@@ -0,0 +1,13 @@
1
+ export * from './dist/senml/SenMLSchema.js'
2
+ export * from './dist/senml/senMLtoLwM2M.js'
3
+ export * from './dist/senml/lwm2mToSenML.js'
4
+ export * from './dist/models/models.js'
5
+ export * from './dist/models/types.js'
6
+ export * from './dist/lwm2m/timestampResources.js'
7
+ export * from './dist/lwm2m/objects.js'
8
+ export * from './dist/lwm2m/definitions.js'
9
+ export * from './dist/lwm2m/LWM2MObjectInfo.js'
10
+ export * from './dist/lwm2m/validators.js'
11
+ export * from './dist/lwm2m/LwM2MObjectID.js'
12
+ export * from './dist/lwm2m/validation.js'
13
+ export * from './dist/lwm2m/instanceTs.js'
package/index.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export * from './senml/SenMLSchema.js'
2
+ export * from './senml/senMLtoLwM2M.js'
3
+ export * from './senml/lwm2mToSenML.js'
4
+ export * from './models/models.js'
5
+ export * from './models/types.js'
6
+ export * from './lwm2m/timestampResources.js'
7
+ export * from './lwm2m/LwM2MObject.js'
8
+ export * from './lwm2m/LwM2MObjectID.js'
9
+ export * from './lwm2m/objects.js'
10
+ export * from './lwm2m/definitions.js'
11
+ export * from './lwm2m/LWM2MObjectInfo.js'
12
+ export * from './lwm2m/validators.js'
13
+ export * from './lwm2m/validation.js'
14
+ export * from './lwm2m/instanceTs.js'
@@ -0,0 +1,94 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <LWM2M xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://openmobilealliance.org/tech/profiles/LWM2M-v1_1.xsd">
3
+ <Object ObjectType="MODefinition">
4
+ <Name>Geolocation</Name>
5
+ <Description1><![CDATA[Describes the geo location of a device]]></Description1>
6
+ <ObjectID>14201</ObjectID>
7
+ <ObjectURN>urn:oma:lwm2m:x:14201</ObjectURN>
8
+ <MultipleInstances>Multiple</MultipleInstances>
9
+ <Mandatory>Optional</Mandatory>
10
+ <Resources>
11
+ <Item ID="0">
12
+ <Name>Latitude</Name>
13
+ <Operations>R</Operations>
14
+ <MultipleInstances>Single</MultipleInstances>
15
+ <Mandatory>Mandatory</Mandatory>
16
+ <Type>Float</Type>
17
+ <RangeEnumeration>-90..90</RangeEnumeration>
18
+ <Units>°</Units>
19
+ <Description><![CDATA[The decimal notation of latitude in degrees, e.g. -43.5723 [World Geodetic System 1984].]]></Description>
20
+ </Item>
21
+ <Item ID="1">
22
+ <Name>Longitude</Name>
23
+ <Operations>R</Operations>
24
+ <MultipleInstances>Single</MultipleInstances>
25
+ <Mandatory>Mandatory</Mandatory>
26
+ <Type>Float</Type>
27
+ <RangeEnumeration>-180..180</RangeEnumeration>
28
+ <Units>°</Units>
29
+ <Description><![CDATA[The decimal notation of longitude in degrees, e.g. 153.21760 [World Geodetic System 1984].]]></Description>
30
+ </Item>
31
+ <Item ID="2">
32
+ <Name>Altitude</Name>
33
+ <Operations>R</Operations>
34
+ <MultipleInstances>Single</MultipleInstances>
35
+ <Mandatory>Optional</Mandatory>
36
+ <Type>Float</Type>
37
+ <RangeEnumeration/>
38
+ <Units>m</Units>
39
+ <Description><![CDATA[The decimal notation of altitude in meters above sea level.]]></Description>
40
+ </Item>
41
+ <Item ID="3">
42
+ <Name>Radius</Name>
43
+ <Operations>R</Operations>
44
+ <MultipleInstances>Single</MultipleInstances>
45
+ <Mandatory>Optional</Mandatory>
46
+ <Type>Float</Type>
47
+ <RangeEnumeration/>
48
+ <Units>m</Units>
49
+ <Description><![CDATA[The value in this resource indicates the radius of a circular area in meters. The circular area is used to describe uncertainty about a point for coordinates in a two-dimensional coordinate reference systems (CRS). The center point of a circular area is specified by using the Latitude and the Longitude Resources.]]></Description>
50
+ </Item>
51
+ <Item ID="4">
52
+ <Name>Speed</Name>
53
+ <Operations>R</Operations>
54
+ <MultipleInstances>Single</MultipleInstances>
55
+ <Mandatory>Optional</Mandatory>
56
+ <Type>Float</Type>
57
+ <RangeEnumeration/>
58
+ <Units>m/s</Units>
59
+ <Description><![CDATA[Speed is the time rate of change in position.]]></Description>
60
+ </Item>
61
+ <Item ID="5">
62
+ <Name>Heading</Name>
63
+ <Operations>R</Operations>
64
+ <MultipleInstances>Single</MultipleInstances>
65
+ <Mandatory>Optional</Mandatory>
66
+ <Type>Float</Type>
67
+ <RangeEnumeration>0..360</RangeEnumeration>
68
+ <Units>°</Units>
69
+ <Description><![CDATA[The angle of movement in degrees.]]></Description>
70
+ </Item>
71
+ <Item ID="6">
72
+ <Name>Source</Name>
73
+ <Operations>R</Operations>
74
+ <MultipleInstances>Single</MultipleInstances>
75
+ <Mandatory>Mandatory</Mandatory>
76
+ <Type>String</Type>
77
+ <RangeEnumeration/>
78
+ <Units/>
79
+ <Description><![CDATA[The source of the geo location, e.g. GNSS, SCELL, MCELL, WIFI.]]></Description>
80
+ </Item>
81
+ <Item ID="99">
82
+ <Name>Timestamp</Name>
83
+ <Operations>R</Operations>
84
+ <MultipleInstances>Single</MultipleInstances>
85
+ <Mandatory>Mandatory</Mandatory>
86
+ <Type>Time</Type>
87
+ <RangeEnumeration/>
88
+ <Units/>
89
+ <Description><![CDATA[The timestamp of when the location measurement was performed.]]></Description>
90
+ </Item>
91
+ </Resources>
92
+ <Description2/>
93
+ </Object>
94
+ </LWM2M>
@@ -0,0 +1,84 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <LWM2M xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://openmobilealliance.org/tech/profiles/LWM2M-v1_1.xsd">
3
+ <Object ObjectType="MODefinition">
4
+ <Name>Battery and Power</Name>
5
+ <Description1><![CDATA[Information about the battery and power status of the device.]]></Description1>
6
+ <ObjectID>14202</ObjectID>
7
+ <ObjectURN>urn:oma:lwm2m:x:14202</ObjectURN>
8
+ <MultipleInstances>Multiple</MultipleInstances>
9
+ <Mandatory>Optional</Mandatory>
10
+ <Resources>
11
+ <Item ID="0">
12
+ <Name>State of charge</Name>
13
+ <Operations>R</Operations>
14
+ <MultipleInstances>Single</MultipleInstances>
15
+ <Mandatory>Optional</Mandatory>
16
+ <Type>Integer</Type>
17
+ <RangeEnumeration>0..100</RangeEnumeration>
18
+ <Units>%</Units>
19
+ <Description><![CDATA[State of charge in percent. Examples: 23, 1, 100.]]></Description>
20
+ </Item>
21
+ <Item ID="1">
22
+ <Name>Voltage</Name>
23
+ <Operations>R</Operations>
24
+ <MultipleInstances>Single</MultipleInstances>
25
+ <Mandatory>Optional</Mandatory>
26
+ <Type>Float</Type>
27
+ <RangeEnumeration/>
28
+ <Units>V</Units>
29
+ <Description><![CDATA[Battery voltage in Volt. Examples: 2.754, 3.3.]]></Description>
30
+ </Item>
31
+ <Item ID="2">
32
+ <Name>Charge current</Name>
33
+ <Operations>R</Operations>
34
+ <MultipleInstances>Single</MultipleInstances>
35
+ <Mandatory>Optional</Mandatory>
36
+ <Type>Float</Type>
37
+ <RangeEnumeration/>
38
+ <Units>mA</Units>
39
+ <Description><![CDATA[Charge current in mA. Examples: 429, -244.]]></Description>
40
+ </Item>
41
+ <Item ID="3">
42
+ <Name>Battery temperature</Name>
43
+ <Operations>R</Operations>
44
+ <MultipleInstances>Single</MultipleInstances>
45
+ <Mandatory>Optional</Mandatory>
46
+ <Type>Float</Type>
47
+ <RangeEnumeration/>
48
+ <Units>C</Units>
49
+ <Description><![CDATA[Battery temperature in Celsius. Examples: 21.7, 23.123.]]></Description>
50
+ </Item>
51
+ <Item ID="4">
52
+ <Name>Time to full</Name>
53
+ <Operations>R</Operations>
54
+ <MultipleInstances>Single</MultipleInstances>
55
+ <Mandatory>Optional</Mandatory>
56
+ <Type>Integer</Type>
57
+ <RangeEnumeration/>
58
+ <Units>s</Units>
59
+ <Description><![CDATA[Time to full in seconds. Examples: 4652.]]></Description>
60
+ </Item>
61
+ <Item ID="5">
62
+ <Name>Time to empty</Name>
63
+ <Operations>R</Operations>
64
+ <MultipleInstances>Single</MultipleInstances>
65
+ <Mandatory>Optional</Mandatory>
66
+ <Type>Integer</Type>
67
+ <RangeEnumeration/>
68
+ <Units>s</Units>
69
+ <Description><![CDATA[Time to empty in seconds. Examples: 4652.]]></Description>
70
+ </Item>
71
+ <Item ID="99">
72
+ <Name>Timestamp</Name>
73
+ <Operations>R</Operations>
74
+ <MultipleInstances>Single</MultipleInstances>
75
+ <Mandatory>Mandatory</Mandatory>
76
+ <Type>Time</Type>
77
+ <RangeEnumeration/>
78
+ <Units/>
79
+ <Description><![CDATA[The timestamp of when the measurement was performed.]]></Description>
80
+ </Item>
81
+ </Resources>
82
+ <Description2/>
83
+ </Object>
84
+ </LWM2M>