@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.
- package/LICENSE +29 -0
- package/README.md +122 -0
- package/dist/generator/addDocBlock.js +5 -0
- package/dist/generator/generateLwM2MDefinitions.js +82 -0
- package/dist/generator/generateLwM2MDefinitions.spec.js +91 -0
- package/dist/generator/generateLwm2mTimestampResources.js +69 -0
- package/dist/generator/generateModels.js +142 -0
- package/dist/generator/generateType.js +90 -0
- package/dist/generator/generateValidator.js +132 -0
- package/dist/generator/generateValidators.js +63 -0
- package/dist/generator/isDir.js +163 -0
- package/dist/generator/isDir.spec.js +212 -0
- package/dist/generator/lwm2m.js +106 -0
- package/dist/generator/models.js +306 -0
- package/dist/generator/printNode.js +8 -0
- package/dist/generator/tokenizeName.js +5 -0
- package/dist/generator/tokenizeName.spec.js +98 -0
- package/dist/generator/types.js +140 -0
- package/dist/lwm2m/LWM2MObjectDefinition.js +88 -0
- package/dist/lwm2m/LWM2MObjectInfo.js +9 -0
- package/dist/lwm2m/LwM2MObject.d.js +1 -0
- package/dist/lwm2m/LwM2MObjectID.js +57 -0
- package/dist/lwm2m/ParsedLwM2MObjectDefinition.js +1 -0
- package/dist/lwm2m/check-lwm2m-rules.js +480 -0
- package/dist/lwm2m/definitions.js +596 -0
- package/dist/lwm2m/fromXML2JSON.js +194 -0
- package/dist/lwm2m/instanceTs.js +9 -0
- package/dist/lwm2m/instanceTs.spec.js +16 -0
- package/dist/lwm2m/isRegisteredLwM2MObject.js +3 -0
- package/dist/lwm2m/isRegisteredLwM2MObject.spec.js +45 -0
- package/dist/lwm2m/object/14201.d.js +5 -0
- package/dist/lwm2m/object/14202.d.js +5 -0
- package/dist/lwm2m/object/14203.d.js +5 -0
- package/dist/lwm2m/object/14204.d.js +5 -0
- package/dist/lwm2m/object/14205.d.js +5 -0
- package/dist/lwm2m/object/14210.d.js +5 -0
- package/dist/lwm2m/object/14220.d.js +5 -0
- package/dist/lwm2m/object/14230.d.js +5 -0
- package/dist/lwm2m/object/validate14201.js +18 -0
- package/dist/lwm2m/object/validate14202.js +17 -0
- package/dist/lwm2m/object/validate14203.js +19 -0
- package/dist/lwm2m/object/validate14204.js +17 -0
- package/dist/lwm2m/object/validate14205.js +15 -0
- package/dist/lwm2m/object/validate14210.js +13 -0
- package/dist/lwm2m/object/validate14220.js +12 -0
- package/dist/lwm2m/object/validate14230.js +13 -0
- package/dist/lwm2m/objects.js +8 -0
- package/dist/lwm2m/parseRangeEnumeration.js +20 -0
- package/dist/lwm2m/parseRangeEnumeration.spec.js +27 -0
- package/dist/lwm2m/resourceType.js +12 -0
- package/dist/lwm2m/timestampResources.js +12 -0
- package/dist/lwm2m/unwrapNestedArray.js +114 -0
- package/dist/lwm2m/unwrapNestedArray.spec.js +374 -0
- package/dist/lwm2m/validate.js +14 -0
- package/dist/lwm2m/validation.js +146 -0
- package/dist/lwm2m/validators.js +20 -0
- package/dist/markdown/getCodeBlock.js +74 -0
- package/dist/markdown/getFrontMatter.js +15 -0
- package/dist/markdown/parseREADME.js +19 -0
- package/dist/models/asset_tracker_v2+AWS/examples/examples.spec.js +489 -0
- package/dist/models/check-model-rules.js +137 -0
- package/dist/models/models.js +137 -0
- package/dist/models/types.js +13 -0
- package/dist/senml/SenMLSchema.js +79 -0
- package/dist/senml/SenMLSchema.spec.js +23 -0
- package/dist/senml/hasValue.js +8 -0
- package/dist/senml/hasValue.spec.js +103 -0
- package/dist/senml/lwm2mToSenML.js +137 -0
- package/dist/senml/lwm2mToSenML.spec.js +104 -0
- package/dist/senml/parseResourceId.js +58 -0
- package/dist/senml/parseResourceId.spec.js +13 -0
- package/dist/senml/senMLtoLwM2M.js +126 -0
- package/dist/senml/senMLtoLwM2M.spec.js +226 -0
- package/dist/senml/validateSenML.js +6 -0
- package/dist/senml/validateSenML.spec.js +31 -0
- package/export.js +13 -0
- package/index.d.ts +14 -0
- package/lwm2m/14201.xml +94 -0
- package/lwm2m/14202.xml +84 -0
- package/lwm2m/14203.xml +104 -0
- package/lwm2m/14204.xml +84 -0
- package/lwm2m/14205.xml +64 -0
- package/lwm2m/14210.xml +44 -0
- package/lwm2m/14220.xml +34 -0
- package/lwm2m/14230.xml +44 -0
- package/lwm2m/LWM2M-v1_1.xsd +168 -0
- package/lwm2m/LWM2MObjectDefinition.ts +84 -0
- package/lwm2m/LWM2MObjectInfo.ts +42 -0
- package/lwm2m/LwM2MObject.d.ts +19 -0
- package/lwm2m/LwM2MObjectID.ts +73 -0
- package/lwm2m/ParsedLwM2MObjectDefinition.ts +28 -0
- package/lwm2m/check-lwm2m-rules.ts +160 -0
- package/lwm2m/definitions.ts +278 -0
- package/lwm2m/format.sh +3 -0
- package/lwm2m/fromXML2JSON.ts +44 -0
- package/lwm2m/instanceTs.spec.ts +19 -0
- package/lwm2m/instanceTs.ts +10 -0
- package/lwm2m/isRegisteredLwM2MObject.spec.ts +48 -0
- package/lwm2m/isRegisteredLwM2MObject.ts +4 -0
- package/lwm2m/object/14201.d.ts +73 -0
- package/lwm2m/object/14202.d.ts +59 -0
- package/lwm2m/object/14203.d.ts +67 -0
- package/lwm2m/object/14204.d.ts +55 -0
- package/lwm2m/object/14205.d.ts +43 -0
- package/lwm2m/object/14210.d.ts +31 -0
- package/lwm2m/object/14220.d.ts +25 -0
- package/lwm2m/object/14230.d.ts +31 -0
- package/lwm2m/object/validate14201.ts +10 -0
- package/lwm2m/object/validate14202.ts +10 -0
- package/lwm2m/object/validate14203.ts +10 -0
- package/lwm2m/object/validate14204.ts +10 -0
- package/lwm2m/object/validate14205.ts +10 -0
- package/lwm2m/object/validate14210.ts +10 -0
- package/lwm2m/object/validate14220.ts +10 -0
- package/lwm2m/object/validate14230.ts +10 -0
- package/lwm2m/objects.ts +16 -0
- package/lwm2m/parseRangeEnumeration.spec.ts +34 -0
- package/lwm2m/parseRangeEnumeration.ts +29 -0
- package/lwm2m/resourceType.ts +11 -0
- package/lwm2m/timestampResources.ts +4 -0
- package/lwm2m/unwrapNestedArray.spec.ts +241 -0
- package/lwm2m/unwrapNestedArray.ts +27 -0
- package/lwm2m/validate.ts +30 -0
- package/lwm2m/validation.ts +120 -0
- package/lwm2m/validators.ts +21 -0
- package/models/PCA20035+solar/README.md +10 -0
- package/models/PCA20035+solar/transforms/airQuality.md +48 -0
- package/models/PCA20035+solar/transforms/battery.md +46 -0
- package/models/PCA20035+solar/transforms/button.md +45 -0
- package/models/PCA20035+solar/transforms/deviceInfo.md +72 -0
- package/models/PCA20035+solar/transforms/gain.md +45 -0
- package/models/PCA20035+solar/transforms/geolocationFromGroundfix.md +67 -0
- package/models/PCA20035+solar/transforms/geolocationFromMessage.md +80 -0
- package/models/PCA20035+solar/transforms/humidity.md +43 -0
- package/models/PCA20035+solar/transforms/networkInfo.md +84 -0
- package/models/PCA20035+solar/transforms/pressure.md +43 -0
- package/models/PCA20035+solar/transforms/temperature.md +43 -0
- package/models/README.md +10 -0
- package/models/asset_tracker_v2+AWS/README.md +6 -0
- package/models/asset_tracker_v2+AWS/examples/examples.spec.ts +229 -0
- package/models/asset_tracker_v2+AWS/examples/shadow/example-1.json +24 -0
- package/models/asset_tracker_v2+AWS/examples/shadow/example-2.json +30 -0
- package/models/asset_tracker_v2+AWS/examples/shadow/example-3.json +37 -0
- package/models/asset_tracker_v2+AWS/examples/shadow/example-4.json +48 -0
- package/models/asset_tracker_v2+AWS/examples/shadow/example-5.json +43 -0
- package/models/asset_tracker_v2+AWS/transforms/GNSS.md +66 -0
- package/models/asset_tracker_v2+AWS/transforms/battery-voltage.md +50 -0
- package/models/asset_tracker_v2+AWS/transforms/device-info.md +61 -0
- package/models/asset_tracker_v2+AWS/transforms/env.md +69 -0
- package/models/asset_tracker_v2+AWS/transforms/fuel-gauge.md +62 -0
- package/models/asset_tracker_v2+AWS/transforms/roam.md +100 -0
- package/models/asset_tracker_v2+AWS/transforms/solar.md +58 -0
- package/models/check-model-rules.ts +125 -0
- package/models/kartverket-vasstandsdata/README.md +13 -0
- package/models/models.ts +36 -0
- package/models/types.ts +17 -0
- package/package.json +111 -0
- package/senml/SenMLSchema.spec.ts +21 -0
- package/senml/SenMLSchema.ts +74 -0
- package/senml/hasValue.spec.ts +19 -0
- package/senml/hasValue.ts +12 -0
- package/senml/lwm2mToSenML.spec.ts +74 -0
- package/senml/lwm2mToSenML.ts +62 -0
- package/senml/parseResourceId.spec.ts +13 -0
- package/senml/parseResourceId.ts +23 -0
- package/senml/senMLtoLwM2M.spec.ts +181 -0
- package/senml/senMLtoLwM2M.ts +121 -0
- package/senml/validateSenML.spec.ts +16 -0
- package/senml/validateSenML.ts +8 -0
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { unwrapNestedArray } from "./unwrapNestedArray.js";
|
|
4
|
+
void describe("unwrapNestedArray()", function() {
|
|
5
|
+
void it("should unwrap an array", function() {
|
|
6
|
+
return assert.deepEqual(unwrapNestedArray({
|
|
7
|
+
LWM2M: {
|
|
8
|
+
$: {
|
|
9
|
+
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
10
|
+
"xsi:noNamespaceSchemaLocation": "http://www.openmobilealliance.org/tech/profiles/LWM2M-v1_1.xsd"
|
|
11
|
+
},
|
|
12
|
+
Object: [
|
|
13
|
+
{
|
|
14
|
+
$: {
|
|
15
|
+
ObjectType: "MODefinition"
|
|
16
|
+
},
|
|
17
|
+
Name: [
|
|
18
|
+
"Location"
|
|
19
|
+
],
|
|
20
|
+
Description1: [
|
|
21
|
+
"This LwM2M Object provides a range of location telemetry related information which can be queried by the LwM2M Server."
|
|
22
|
+
],
|
|
23
|
+
ObjectID: [
|
|
24
|
+
"6"
|
|
25
|
+
],
|
|
26
|
+
ObjectURN: [
|
|
27
|
+
"urn:oma:lwm2m:oma:6"
|
|
28
|
+
],
|
|
29
|
+
LWM2MVersion: [
|
|
30
|
+
"1.0"
|
|
31
|
+
],
|
|
32
|
+
ObjectVersion: [
|
|
33
|
+
"1.0"
|
|
34
|
+
],
|
|
35
|
+
MultipleInstances: [
|
|
36
|
+
"Single"
|
|
37
|
+
],
|
|
38
|
+
Mandatory: [
|
|
39
|
+
"Optional"
|
|
40
|
+
],
|
|
41
|
+
Resources: [
|
|
42
|
+
{
|
|
43
|
+
Item: [
|
|
44
|
+
{
|
|
45
|
+
$: {
|
|
46
|
+
ID: "0"
|
|
47
|
+
},
|
|
48
|
+
Name: [
|
|
49
|
+
"Latitude"
|
|
50
|
+
],
|
|
51
|
+
Operations: [
|
|
52
|
+
"R"
|
|
53
|
+
],
|
|
54
|
+
MultipleInstances: [
|
|
55
|
+
"Single"
|
|
56
|
+
],
|
|
57
|
+
Mandatory: [
|
|
58
|
+
"Mandatory"
|
|
59
|
+
],
|
|
60
|
+
Type: [
|
|
61
|
+
"Float"
|
|
62
|
+
],
|
|
63
|
+
RangeEnumeration: [
|
|
64
|
+
""
|
|
65
|
+
],
|
|
66
|
+
Units: [
|
|
67
|
+
"lat"
|
|
68
|
+
],
|
|
69
|
+
Description: [
|
|
70
|
+
"The decimal notation of latitude, e.g. -43.5723 [World Geodetic System 1984]."
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
$: {
|
|
75
|
+
ID: "1"
|
|
76
|
+
},
|
|
77
|
+
Name: [
|
|
78
|
+
"Longitude"
|
|
79
|
+
],
|
|
80
|
+
Operations: [
|
|
81
|
+
"R"
|
|
82
|
+
],
|
|
83
|
+
MultipleInstances: [
|
|
84
|
+
"Single"
|
|
85
|
+
],
|
|
86
|
+
Mandatory: [
|
|
87
|
+
"Mandatory"
|
|
88
|
+
],
|
|
89
|
+
Type: [
|
|
90
|
+
"Float"
|
|
91
|
+
],
|
|
92
|
+
RangeEnumeration: [
|
|
93
|
+
""
|
|
94
|
+
],
|
|
95
|
+
Units: [
|
|
96
|
+
"lon"
|
|
97
|
+
],
|
|
98
|
+
Description: [
|
|
99
|
+
"The decimal notation of longitude, e.g. 153.21760 [World Geodetic System 1984]."
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
$: {
|
|
104
|
+
ID: "2"
|
|
105
|
+
},
|
|
106
|
+
Name: [
|
|
107
|
+
"Altitude"
|
|
108
|
+
],
|
|
109
|
+
Operations: [
|
|
110
|
+
"R"
|
|
111
|
+
],
|
|
112
|
+
MultipleInstances: [
|
|
113
|
+
"Single"
|
|
114
|
+
],
|
|
115
|
+
Mandatory: [
|
|
116
|
+
"Optional"
|
|
117
|
+
],
|
|
118
|
+
Type: [
|
|
119
|
+
"Float"
|
|
120
|
+
],
|
|
121
|
+
RangeEnumeration: [
|
|
122
|
+
""
|
|
123
|
+
],
|
|
124
|
+
Units: [
|
|
125
|
+
"m"
|
|
126
|
+
],
|
|
127
|
+
Description: [
|
|
128
|
+
"The decimal notation of altitude in meters above sea level."
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
$: {
|
|
133
|
+
ID: "3"
|
|
134
|
+
},
|
|
135
|
+
Name: [
|
|
136
|
+
"Radius"
|
|
137
|
+
],
|
|
138
|
+
Operations: [
|
|
139
|
+
"R"
|
|
140
|
+
],
|
|
141
|
+
MultipleInstances: [
|
|
142
|
+
"Single"
|
|
143
|
+
],
|
|
144
|
+
Mandatory: [
|
|
145
|
+
"Optional"
|
|
146
|
+
],
|
|
147
|
+
Type: [
|
|
148
|
+
"Float"
|
|
149
|
+
],
|
|
150
|
+
RangeEnumeration: [
|
|
151
|
+
""
|
|
152
|
+
],
|
|
153
|
+
Units: [
|
|
154
|
+
"m"
|
|
155
|
+
],
|
|
156
|
+
Description: [
|
|
157
|
+
"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."
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
$: {
|
|
162
|
+
ID: "4"
|
|
163
|
+
},
|
|
164
|
+
Name: [
|
|
165
|
+
"Velocity"
|
|
166
|
+
],
|
|
167
|
+
Operations: [
|
|
168
|
+
"R"
|
|
169
|
+
],
|
|
170
|
+
MultipleInstances: [
|
|
171
|
+
"Single"
|
|
172
|
+
],
|
|
173
|
+
Mandatory: [
|
|
174
|
+
"Optional"
|
|
175
|
+
],
|
|
176
|
+
Type: [
|
|
177
|
+
"Opaque"
|
|
178
|
+
],
|
|
179
|
+
RangeEnumeration: [
|
|
180
|
+
""
|
|
181
|
+
],
|
|
182
|
+
Units: [
|
|
183
|
+
""
|
|
184
|
+
],
|
|
185
|
+
Description: [
|
|
186
|
+
"The velocity of the LwM2M Client, as defined in [3GPP-TS_23.032]."
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
$: {
|
|
191
|
+
ID: "5"
|
|
192
|
+
},
|
|
193
|
+
Name: [
|
|
194
|
+
"Timestamp"
|
|
195
|
+
],
|
|
196
|
+
Operations: [
|
|
197
|
+
"R"
|
|
198
|
+
],
|
|
199
|
+
MultipleInstances: [
|
|
200
|
+
"Single"
|
|
201
|
+
],
|
|
202
|
+
Mandatory: [
|
|
203
|
+
"Mandatory"
|
|
204
|
+
],
|
|
205
|
+
Type: [
|
|
206
|
+
"Time"
|
|
207
|
+
],
|
|
208
|
+
RangeEnumeration: [
|
|
209
|
+
""
|
|
210
|
+
],
|
|
211
|
+
Units: [
|
|
212
|
+
""
|
|
213
|
+
],
|
|
214
|
+
Description: [
|
|
215
|
+
"The timestamp of when the location measurement was performed."
|
|
216
|
+
]
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
$: {
|
|
220
|
+
ID: "6"
|
|
221
|
+
},
|
|
222
|
+
Name: [
|
|
223
|
+
"Speed"
|
|
224
|
+
],
|
|
225
|
+
Operations: [
|
|
226
|
+
"R"
|
|
227
|
+
],
|
|
228
|
+
MultipleInstances: [
|
|
229
|
+
"Single"
|
|
230
|
+
],
|
|
231
|
+
Mandatory: [
|
|
232
|
+
"Optional"
|
|
233
|
+
],
|
|
234
|
+
Type: [
|
|
235
|
+
"Float"
|
|
236
|
+
],
|
|
237
|
+
RangeEnumeration: [
|
|
238
|
+
""
|
|
239
|
+
],
|
|
240
|
+
Units: [
|
|
241
|
+
"m/s"
|
|
242
|
+
],
|
|
243
|
+
Description: [
|
|
244
|
+
"Speed is the time rate of change in position of a LwM2M Client without regard for direction: the scalar component of velocity."
|
|
245
|
+
]
|
|
246
|
+
}
|
|
247
|
+
]
|
|
248
|
+
}
|
|
249
|
+
],
|
|
250
|
+
Description2: [
|
|
251
|
+
""
|
|
252
|
+
]
|
|
253
|
+
}
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
}), {
|
|
257
|
+
LWM2M: {
|
|
258
|
+
$: {
|
|
259
|
+
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
260
|
+
"xsi:noNamespaceSchemaLocation": "http://www.openmobilealliance.org/tech/profiles/LWM2M-v1_1.xsd"
|
|
261
|
+
},
|
|
262
|
+
Object: {
|
|
263
|
+
$: {
|
|
264
|
+
ObjectType: "MODefinition"
|
|
265
|
+
},
|
|
266
|
+
Name: "Location",
|
|
267
|
+
Description1: "This LwM2M Object provides a range of location telemetry related information which can be queried by the LwM2M Server.",
|
|
268
|
+
ObjectID: "6",
|
|
269
|
+
ObjectURN: "urn:oma:lwm2m:oma:6",
|
|
270
|
+
LWM2MVersion: "1.0",
|
|
271
|
+
ObjectVersion: "1.0",
|
|
272
|
+
MultipleInstances: "Single",
|
|
273
|
+
Mandatory: "Optional",
|
|
274
|
+
Resources: {
|
|
275
|
+
Item: [
|
|
276
|
+
{
|
|
277
|
+
$: {
|
|
278
|
+
ID: "0"
|
|
279
|
+
},
|
|
280
|
+
Name: "Latitude",
|
|
281
|
+
Operations: "R",
|
|
282
|
+
MultipleInstances: "Single",
|
|
283
|
+
Mandatory: "Mandatory",
|
|
284
|
+
Type: "Float",
|
|
285
|
+
RangeEnumeration: "",
|
|
286
|
+
Units: "lat",
|
|
287
|
+
Description: "The decimal notation of latitude, e.g. -43.5723 [World Geodetic System 1984]."
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
$: {
|
|
291
|
+
ID: "1"
|
|
292
|
+
},
|
|
293
|
+
Name: "Longitude",
|
|
294
|
+
Operations: "R",
|
|
295
|
+
MultipleInstances: "Single",
|
|
296
|
+
Mandatory: "Mandatory",
|
|
297
|
+
Type: "Float",
|
|
298
|
+
RangeEnumeration: "",
|
|
299
|
+
Units: "lon",
|
|
300
|
+
Description: "The decimal notation of longitude, e.g. 153.21760 [World Geodetic System 1984]."
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
$: {
|
|
304
|
+
ID: "2"
|
|
305
|
+
},
|
|
306
|
+
Name: "Altitude",
|
|
307
|
+
Operations: "R",
|
|
308
|
+
MultipleInstances: "Single",
|
|
309
|
+
Mandatory: "Optional",
|
|
310
|
+
Type: "Float",
|
|
311
|
+
RangeEnumeration: "",
|
|
312
|
+
Units: "m",
|
|
313
|
+
Description: "The decimal notation of altitude in meters above sea level."
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
$: {
|
|
317
|
+
ID: "3"
|
|
318
|
+
},
|
|
319
|
+
Name: "Radius",
|
|
320
|
+
Operations: "R",
|
|
321
|
+
MultipleInstances: "Single",
|
|
322
|
+
Mandatory: "Optional",
|
|
323
|
+
Type: "Float",
|
|
324
|
+
RangeEnumeration: "",
|
|
325
|
+
Units: "m",
|
|
326
|
+
Description: "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."
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
$: {
|
|
330
|
+
ID: "4"
|
|
331
|
+
},
|
|
332
|
+
Name: "Velocity",
|
|
333
|
+
Operations: "R",
|
|
334
|
+
MultipleInstances: "Single",
|
|
335
|
+
Mandatory: "Optional",
|
|
336
|
+
Type: "Opaque",
|
|
337
|
+
RangeEnumeration: "",
|
|
338
|
+
Units: "",
|
|
339
|
+
Description: "The velocity of the LwM2M Client, as defined in [3GPP-TS_23.032]."
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
$: {
|
|
343
|
+
ID: "5"
|
|
344
|
+
},
|
|
345
|
+
Name: "Timestamp",
|
|
346
|
+
Operations: "R",
|
|
347
|
+
MultipleInstances: "Single",
|
|
348
|
+
Mandatory: "Mandatory",
|
|
349
|
+
Type: "Time",
|
|
350
|
+
RangeEnumeration: "",
|
|
351
|
+
Units: "",
|
|
352
|
+
Description: "The timestamp of when the location measurement was performed."
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
$: {
|
|
356
|
+
ID: "6"
|
|
357
|
+
},
|
|
358
|
+
Name: "Speed",
|
|
359
|
+
Operations: "R",
|
|
360
|
+
MultipleInstances: "Single",
|
|
361
|
+
Mandatory: "Optional",
|
|
362
|
+
Type: "Float",
|
|
363
|
+
RangeEnumeration: "",
|
|
364
|
+
Units: "m/s",
|
|
365
|
+
Description: "Speed is the time rate of change in position of a LwM2M Client without regard for direction: the scalar component of velocity."
|
|
366
|
+
}
|
|
367
|
+
]
|
|
368
|
+
},
|
|
369
|
+
Description2: ""
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
});
|
|
374
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { isLwM2MObject } from "./validation.js";
|
|
2
|
+
export var validate = function(validators) {
|
|
3
|
+
return function(o, onError) {
|
|
4
|
+
if (!isLwM2MObject(o, onError)) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
var validator = validators.get(o.ObjectID);
|
|
8
|
+
if (validator === undefined) {
|
|
9
|
+
onError === null || onError === void 0 ? void 0 : onError(new Error("No validator defined for ObjectID: ".concat(o.ObjectID, "!")));
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
return validator(o, onError);
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
function _array_like_to_array(arr, len) {
|
|
2
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
+
return arr2;
|
|
5
|
+
}
|
|
6
|
+
function _array_with_holes(arr) {
|
|
7
|
+
if (Array.isArray(arr)) return arr;
|
|
8
|
+
}
|
|
9
|
+
function _instanceof(left, right) {
|
|
10
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
11
|
+
return !!right[Symbol.hasInstance](left);
|
|
12
|
+
} else {
|
|
13
|
+
return left instanceof right;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function _iterable_to_array_limit(arr, i) {
|
|
17
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
18
|
+
if (_i == null) return;
|
|
19
|
+
var _arr = [];
|
|
20
|
+
var _n = true;
|
|
21
|
+
var _d = false;
|
|
22
|
+
var _s, _e;
|
|
23
|
+
try {
|
|
24
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
25
|
+
_arr.push(_s.value);
|
|
26
|
+
if (i && _arr.length === i) break;
|
|
27
|
+
}
|
|
28
|
+
} catch (err) {
|
|
29
|
+
_d = true;
|
|
30
|
+
_e = err;
|
|
31
|
+
} finally{
|
|
32
|
+
try {
|
|
33
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
34
|
+
} finally{
|
|
35
|
+
if (_d) throw _e;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return _arr;
|
|
39
|
+
}
|
|
40
|
+
function _non_iterable_rest() {
|
|
41
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
42
|
+
}
|
|
43
|
+
function _sliced_to_array(arr, i) {
|
|
44
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
45
|
+
}
|
|
46
|
+
function _type_of(obj) {
|
|
47
|
+
"@swc/helpers - typeof";
|
|
48
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
49
|
+
}
|
|
50
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
51
|
+
if (!o) return;
|
|
52
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
53
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
54
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
55
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
56
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
57
|
+
}
|
|
58
|
+
import { LwM2MObjectIDs } from "./LwM2MObjectID.js";
|
|
59
|
+
export var isLwM2MObject = function(object, onError) {
|
|
60
|
+
var _Object_keys_find;
|
|
61
|
+
var error = function(message) {
|
|
62
|
+
onError === null || onError === void 0 ? void 0 : onError(new Error(message));
|
|
63
|
+
return false;
|
|
64
|
+
};
|
|
65
|
+
// Must be an object
|
|
66
|
+
if (typeof object !== "object" || object === null) return error("Not an object");
|
|
67
|
+
// Must have valid ObjectID
|
|
68
|
+
if (!("ObjectID" in object) || typeof object.ObjectID !== "number" || object.ObjectID < 14200 || object.ObjectID > 15000 || LwM2MObjectIDs.includes(object.ObjectID) === false) return error("Not an valid Object ID: ".concat(JSON.stringify(object.ObjectID)));
|
|
69
|
+
// ObjectVersion must be valid
|
|
70
|
+
if ("ObjectVersion" in object) {
|
|
71
|
+
if (typeof object.ObjectVersion !== "string" || !/^\d+\.\d+$/.test(object.ObjectVersion)) return error("Invalid ObjectVersion");
|
|
72
|
+
}
|
|
73
|
+
// Must have valid resources
|
|
74
|
+
if (!("Resources" in object) || typeof object.Resources !== "object" || object.Resources === null) return error("Resources must be an object");
|
|
75
|
+
var _Object_keys_find_length;
|
|
76
|
+
// All keys must be numbers
|
|
77
|
+
if (((_Object_keys_find_length = (_Object_keys_find = Object.keys(object.Resources).find(function(k) {
|
|
78
|
+
return /[^\d]/.test(k);
|
|
79
|
+
})) === null || _Object_keys_find === void 0 ? void 0 : _Object_keys_find.length) !== null && _Object_keys_find_length !== void 0 ? _Object_keys_find_length : 0) > 0) return error("All resource IDs must be a number");
|
|
80
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
81
|
+
try {
|
|
82
|
+
// All values must be number, string, boolean, or Date
|
|
83
|
+
for(var _iterator = Object.values(object.Resources)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
84
|
+
var v = _step.value;
|
|
85
|
+
if (typeof v === "string") continue;
|
|
86
|
+
if (typeof v === "boolean") continue;
|
|
87
|
+
if (typeof v === "number") continue;
|
|
88
|
+
if (typeof v === "object" && _instanceof(v, Date)) continue;
|
|
89
|
+
return error("Invalid value type ".concat(typeof v === "undefined" ? "undefined" : _type_of(v)));
|
|
90
|
+
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
_didIteratorError = true;
|
|
93
|
+
_iteratorError = err;
|
|
94
|
+
} finally{
|
|
95
|
+
try {
|
|
96
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
97
|
+
_iterator.return();
|
|
98
|
+
}
|
|
99
|
+
} finally{
|
|
100
|
+
if (_didIteratorError) {
|
|
101
|
+
throw _iteratorError;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return true;
|
|
106
|
+
};
|
|
107
|
+
export var validate = function(ObjectID, ObjectVersion, Resources) {
|
|
108
|
+
return function(o, onError) {
|
|
109
|
+
var error = function(message) {
|
|
110
|
+
onError === null || onError === void 0 ? void 0 : onError(new Error(message));
|
|
111
|
+
return false;
|
|
112
|
+
};
|
|
113
|
+
if (!isLwM2MObject(o, onError)) return false;
|
|
114
|
+
if (o.ObjectID !== ObjectID) return error("Given Object ID ".concat(o.ObjectID, " does not match expected ").concat(ObjectID));
|
|
115
|
+
var _o_ObjectVersion;
|
|
116
|
+
if (((_o_ObjectVersion = o.ObjectVersion) !== null && _o_ObjectVersion !== void 0 ? _o_ObjectVersion : "1.0") !== ObjectVersion) return error("Given Object version ".concat(o.ObjectVersion, " does not match expected ").concat(ObjectVersion));
|
|
117
|
+
return Object.entries(Resources).reduce(function(allValid, param) {
|
|
118
|
+
var _param = _sliced_to_array(param, 2), ResourceID = _param[0], validator = _param[1];
|
|
119
|
+
if (!allValid) return false;
|
|
120
|
+
if (validator(o.Resources[parseInt(ResourceID, 10)]) === false) {
|
|
121
|
+
return error("Resource ".concat(ResourceID, " is invalid."));
|
|
122
|
+
}
|
|
123
|
+
return allValid;
|
|
124
|
+
}, true);
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
export var NumberResource = function(r) {
|
|
128
|
+
return typeof r === "number";
|
|
129
|
+
};
|
|
130
|
+
export var StringResource = function(r) {
|
|
131
|
+
return typeof r === "string";
|
|
132
|
+
};
|
|
133
|
+
export var DateResource = function(r) {
|
|
134
|
+
return typeof r === "object" && _instanceof(r, Date);
|
|
135
|
+
};
|
|
136
|
+
export var BooleanResource = function(r) {
|
|
137
|
+
return typeof r === "boolean";
|
|
138
|
+
};
|
|
139
|
+
export var OptionalResource = function(validator) {
|
|
140
|
+
return function(r) {
|
|
141
|
+
return r === undefined ? true : validator(r);
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
export var isLwM2MObjectID = function(o) {
|
|
145
|
+
return typeof o === "number" && LwM2MObjectIDs.includes(o);
|
|
146
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { LwM2MObjectID } from "./LwM2MObjectID.js";
|
|
2
|
+
import { validate14201 } from "./object/validate14201.js";
|
|
3
|
+
import { validate14202 } from "./object/validate14202.js";
|
|
4
|
+
import { validate14203 } from "./object/validate14203.js";
|
|
5
|
+
import { validate14204 } from "./object/validate14204.js";
|
|
6
|
+
import { validate14205 } from "./object/validate14205.js";
|
|
7
|
+
import { validate14210 } from "./object/validate14210.js";
|
|
8
|
+
import { validate14220 } from "./object/validate14220.js";
|
|
9
|
+
import { validate14230 } from "./object/validate14230.js";
|
|
10
|
+
/**
|
|
11
|
+
* Contains the validators for all registered LwM2M objects.
|
|
12
|
+
*/ export var validators = new Map();
|
|
13
|
+
validators.set(LwM2MObjectID.Geolocation_14201, validate14201);
|
|
14
|
+
validators.set(LwM2MObjectID.BatteryAndPower_14202, validate14202);
|
|
15
|
+
validators.set(LwM2MObjectID.ConnectionInformation_14203, validate14203);
|
|
16
|
+
validators.set(LwM2MObjectID.DeviceInformation_14204, validate14204);
|
|
17
|
+
validators.set(LwM2MObjectID.Environment_14205, validate14205);
|
|
18
|
+
validators.set(LwM2MObjectID.SolarCharge_14210, validate14210);
|
|
19
|
+
validators.set(LwM2MObjectID.ButtonPress_14220, validate14220);
|
|
20
|
+
validators.set(LwM2MObjectID.SeaWaterLevel_14230, validate14230);
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { remark } from "remark";
|
|
2
|
+
export var parseMarkdown2 = remark();
|
|
3
|
+
var isCodeBlock = function(lang) {
|
|
4
|
+
return function(child) {
|
|
5
|
+
return child.type === "code" && child.lang === lang;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
var isHeadingWithTitle = function(title) {
|
|
9
|
+
return function(child) {
|
|
10
|
+
var _child_children_;
|
|
11
|
+
return child.type === "heading" && ((_child_children_ = child.children[0]) === null || _child_children_ === void 0 ? void 0 : _child_children_.type) === "text" && child.children[0].value === title;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
var isHeading = function(child) {
|
|
15
|
+
return child.type === "heading";
|
|
16
|
+
};
|
|
17
|
+
var isParagraph = function(child) {
|
|
18
|
+
return child.type === "paragraph";
|
|
19
|
+
};
|
|
20
|
+
var codeBlockWithHeading = function(children) {
|
|
21
|
+
return function(lang, title) {
|
|
22
|
+
var block = children.find(function(child, index, array) {
|
|
23
|
+
if (!isCodeBlock(lang)(child)) return false;
|
|
24
|
+
var prevChild = array[index - 1];
|
|
25
|
+
if (prevChild === undefined) return false;
|
|
26
|
+
return isHeadingWithTitle(title)(prevChild);
|
|
27
|
+
});
|
|
28
|
+
if (block === undefined) throw new Error("Could not find ".concat(lang, ' codeblock with title "').concat(title, '"!'));
|
|
29
|
+
return block.value;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
var headingWithLevel = function(children, level) {
|
|
33
|
+
return children.filter(isHeading).find(function(param) {
|
|
34
|
+
var depth = param.depth;
|
|
35
|
+
return depth === level;
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
export var getCodeBlock = function(markdown) {
|
|
39
|
+
return codeBlockWithHeading(remark().parse(markdown).children);
|
|
40
|
+
};
|
|
41
|
+
export var getHeading = function(markdown, level) {
|
|
42
|
+
return headingWithLevel(remark().parse(markdown).children, level);
|
|
43
|
+
};
|
|
44
|
+
// Find all the paragraphs immediately after the first headline with the given level
|
|
45
|
+
export var getParagraphsAfterHeading = function(markdown, level) {
|
|
46
|
+
var headingFound = false;
|
|
47
|
+
var paragraphs = [];
|
|
48
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
49
|
+
try {
|
|
50
|
+
for(var _iterator = remark().parse(markdown).children[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
51
|
+
var child = _step.value;
|
|
52
|
+
if (!headingFound && isHeading(child) && child.depth === level) {
|
|
53
|
+
headingFound = true;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (!isParagraph(child)) break; // once we reached a non-paragraph
|
|
57
|
+
paragraphs.push(child);
|
|
58
|
+
}
|
|
59
|
+
} catch (err) {
|
|
60
|
+
_didIteratorError = true;
|
|
61
|
+
_iteratorError = err;
|
|
62
|
+
} finally{
|
|
63
|
+
try {
|
|
64
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
65
|
+
_iterator.return();
|
|
66
|
+
}
|
|
67
|
+
} finally{
|
|
68
|
+
if (_didIteratorError) {
|
|
69
|
+
throw _iteratorError;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return paragraphs;
|
|
74
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { remark } from "remark";
|
|
2
|
+
import frontmatter from "remark-frontmatter";
|
|
3
|
+
import { validate } from "../validate.js";
|
|
4
|
+
import yaml from "yaml";
|
|
5
|
+
export var getFrontMatter = function(markdown, schema) {
|
|
6
|
+
var data = yaml.parse(remark().use(frontmatter, [
|
|
7
|
+
"yaml"
|
|
8
|
+
]).parse(markdown).children[0].value);
|
|
9
|
+
var maybeValid = validate(schema)(data);
|
|
10
|
+
if ("errors" in maybeValid) {
|
|
11
|
+
console.error(maybeValid.errors);
|
|
12
|
+
throw new Error("Frontmatter is not valid!");
|
|
13
|
+
}
|
|
14
|
+
return maybeValid.value;
|
|
15
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getHeading, getParagraphsAfterHeading } from "./getCodeBlock.js";
|
|
2
|
+
export var parseREADME = function(markdown) {
|
|
3
|
+
var h1 = getHeading(markdown, 1);
|
|
4
|
+
if (h1 === undefined) throw new Error("No H1 defined!");
|
|
5
|
+
var descriptionParagraphs = getParagraphsAfterHeading(markdown, 1);
|
|
6
|
+
if (descriptionParagraphs.length === 0) throw new Error("No description defined!");
|
|
7
|
+
return {
|
|
8
|
+
heading: toOneLine(nodeToString(h1)),
|
|
9
|
+
description: descriptionParagraphs.map(nodeToString).map(toOneLine)
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
var nodeToString = function(node) {
|
|
13
|
+
if ("value" in node) return node.value;
|
|
14
|
+
if ("children" in node) return node.children.map(nodeToString).join("");
|
|
15
|
+
return "";
|
|
16
|
+
};
|
|
17
|
+
var toOneLine = function(s) {
|
|
18
|
+
return s.trim().replaceAll("\n", " ");
|
|
19
|
+
};
|