@hello.nrfcloud.com/proto-map 16.5.44 → 16.6.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/api/Email.spec.ts +1 -1
- package/dist/api/IsoDateType.js +1 -1
- package/dist/generator/addDocBlock.js +1 -1
- package/dist/generator/generateLwM2MDefinitions.js +3 -3
- package/dist/generator/generateLwm2mTimestampResources.js +1 -1
- package/dist/generator/generateModels.js +1 -1
- package/dist/generator/generateType.js +4 -4
- package/dist/generator/generateValidator.js +4 -4
- package/dist/generator/generateValidators.js +1 -1
- package/dist/generator/lwm2m.js +1 -1
- package/dist/generator/models.js +12 -4
- package/dist/generator/printNode.js +1 -1
- package/dist/generator/tokenizeName.js +1 -1
- package/dist/generator/types.js +2 -2
- package/dist/lwm2m/aws/instanceMeasuresToRecord.js +1 -1
- package/dist/lwm2m/aws/instanceToMeasures.js +1 -1
- package/dist/lwm2m/aws/objectsToShadow.js +2 -3
- package/dist/lwm2m/aws/shadowToObjects.js +1 -1
- package/dist/lwm2m/check-lwm2m-rules.js +33 -17
- package/dist/lwm2m/correctOffset.js +1 -1
- package/dist/lwm2m/fromXML2JSON.js +13 -5
- package/dist/lwm2m/instanceTs.js +2 -2
- package/dist/lwm2m/isLwM2MObjectID.js +1 -1
- package/dist/lwm2m/isNumber.js +1 -1
- package/dist/lwm2m/isNumeric.js +1 -1
- package/dist/lwm2m/isUnixTimeInSeconds.js +1 -1
- package/dist/lwm2m/object/validate14201.js +1 -1
- package/dist/lwm2m/object/validate14202.js +1 -1
- package/dist/lwm2m/object/validate14203.js +1 -1
- package/dist/lwm2m/object/validate14204.js +1 -1
- package/dist/lwm2m/object/validate14205.js +1 -1
- package/dist/lwm2m/object/validate14210.js +1 -1
- package/dist/lwm2m/object/validate14220.js +1 -1
- package/dist/lwm2m/object/validate14230.js +1 -1
- package/dist/lwm2m/object/validate14240.js +1 -1
- package/dist/lwm2m/object/validate14250.js +1 -1
- package/dist/lwm2m/object/validate14301.js +1 -1
- package/dist/lwm2m/object/validate14401.js +1 -1
- package/dist/lwm2m/object/validate14501.js +1 -1
- package/dist/lwm2m/object/validate14502.js +1 -1
- package/dist/lwm2m/object/validate14503.js +1 -1
- package/dist/lwm2m/parseRangeEnumeration.js +2 -2
- package/dist/lwm2m/unwrapNestedArray.js +1 -1
- package/dist/lwm2m/validate.js +1 -1
- package/dist/lwm2m/validation.js +15 -15
- package/dist/markdown/getCodeBlock.js +5 -5
- package/dist/markdown/parseREADME.js +3 -3
- package/dist/models/check-model-rules.js +1 -1
- package/dist/senml/fromCBOR.js +1 -1
- package/dist/senml/hasName.js +1 -1
- package/dist/senml/hasValue.js +3 -3
- package/dist/senml/index.js +1 -0
- package/dist/senml/lwm2mToSenML.js +2 -2
- package/dist/senml/parseResourceId.js +1 -1
- package/dist/senml/senMLtoLwM2M.js +23 -14
- package/dist/senml/senMLtoLwM2M.spec.js +11 -3
- package/dist/senml/toCBOR.js +174 -0
- package/dist/senml/toCBOR.spec.js +75 -0
- package/dist/senml/validateSenML.js +1 -1
- package/package.json +9 -9
- package/senml/index.ts +1 -0
- package/senml/toCBOR.spec.ts +38 -0
- package/senml/toCBOR.ts +39 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { RangeEnumerationRegExp } from './LWM2MObjectDefinition.js';
|
|
2
|
-
export var parseRangeEnumeration = function(re) {
|
|
2
|
+
export var parseRangeEnumeration = function parseRangeEnumeration(re) {
|
|
3
|
+
var _match_groups;
|
|
3
4
|
var match = RangeEnumerationRegExp.exec(re);
|
|
4
5
|
if (match === null) return {
|
|
5
6
|
error: new Error("Could not match '".concat(re, "' against ").concat(RangeEnumerationRegExp, "!"))
|
|
6
7
|
};
|
|
7
|
-
var _match_groups;
|
|
8
8
|
var _ref = (_match_groups = match.groups) !== null && _match_groups !== void 0 ? _match_groups : {}, minS = _ref.min, maxS = _ref.max;
|
|
9
9
|
var min = parseFloat(minS);
|
|
10
10
|
var max = parseFloat(maxS);
|
|
@@ -98,7 +98,7 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
98
98
|
}
|
|
99
99
|
/**
|
|
100
100
|
* A recursive function that walks through the given object and for each property checks if its value is an array and only has one element. If that is the case it takes the first element and uses it instead.
|
|
101
|
-
*/ export var unwrapNestedArray = function(object) {
|
|
101
|
+
*/ export var unwrapNestedArray = function unwrapNestedArray1(object) {
|
|
102
102
|
if (typeof object === 'string') return object;
|
|
103
103
|
return Object.entries(object).reduce(function(result, param) {
|
|
104
104
|
var _param = _sliced_to_array(param, 2), k = _param[0], v = _param[1];
|
package/dist/lwm2m/validate.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isLwM2MObject } from './validation.js';
|
|
2
|
-
export var validate = function(validators) {
|
|
2
|
+
export var validate = function validate(validators) {
|
|
3
3
|
return function(o) {
|
|
4
4
|
var maybeValidInstance = isLwM2MObject(o);
|
|
5
5
|
if ('error' in maybeValidInstance) return maybeValidInstance;
|
package/dist/lwm2m/validation.js
CHANGED
|
@@ -49,9 +49,10 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
49
49
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
50
50
|
}
|
|
51
51
|
import { LwM2MObjectIDs } from './LwM2MObjectID.js';
|
|
52
|
-
export var isLwM2MObject = function(object) {
|
|
52
|
+
export var isLwM2MObject = function isLwM2MObject(object) {
|
|
53
|
+
var _ref;
|
|
53
54
|
var _Object_keys_find;
|
|
54
|
-
var error = function(message) {
|
|
55
|
+
var error = function error(message) {
|
|
55
56
|
return {
|
|
56
57
|
error: new Error(message)
|
|
57
58
|
};
|
|
@@ -70,11 +71,10 @@ export var isLwM2MObject = function(object) {
|
|
|
70
71
|
}
|
|
71
72
|
// Must have valid resources
|
|
72
73
|
if (!('Resources' in object) || _type_of(object.Resources) !== 'object' || object.Resources === null) return error("Resources must be an object");
|
|
73
|
-
var _Object_keys_find_length;
|
|
74
74
|
// All keys must be numbers
|
|
75
|
-
if (((
|
|
75
|
+
if (((_ref = (_Object_keys_find = Object.keys(object.Resources).find(function(k) {
|
|
76
76
|
return /[^\d]/.test(k);
|
|
77
|
-
})) === null || _Object_keys_find === void 0 ? void 0 : _Object_keys_find.length) !== null &&
|
|
77
|
+
})) === null || _Object_keys_find === void 0 ? void 0 : _Object_keys_find.length) !== null && _ref !== void 0 ? _ref : 0) > 0) return error("All resource IDs must be a number");
|
|
78
78
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
79
79
|
try {
|
|
80
80
|
// All values must be number, string, boolean
|
|
@@ -104,16 +104,17 @@ export var isLwM2MObject = function(object) {
|
|
|
104
104
|
object: object
|
|
105
105
|
};
|
|
106
106
|
};
|
|
107
|
-
var isSimpleResource = function(v) {
|
|
107
|
+
var isSimpleResource = function isSimpleResource(v) {
|
|
108
108
|
if (v === undefined) return true;
|
|
109
109
|
if (typeof v === 'string') return true;
|
|
110
110
|
if (typeof v === 'boolean') return true;
|
|
111
111
|
if (typeof v === 'number') return true;
|
|
112
112
|
return false;
|
|
113
113
|
};
|
|
114
|
-
export var validateInstance = function(ObjectID, ObjectVersion, Resources) {
|
|
114
|
+
export var validateInstance = function validateInstance(ObjectID, ObjectVersion, Resources) {
|
|
115
115
|
return function(o) {
|
|
116
|
-
var
|
|
116
|
+
var _i_ObjectVersion;
|
|
117
|
+
var error = function error(message) {
|
|
117
118
|
return {
|
|
118
119
|
error: new Error(message)
|
|
119
120
|
};
|
|
@@ -124,7 +125,6 @@ export var validateInstance = function(ObjectID, ObjectVersion, Resources) {
|
|
|
124
125
|
if (i.ObjectID !== ObjectID) {
|
|
125
126
|
return error("Given Object ID ".concat(i.ObjectID, " does not match expected ").concat(ObjectID));
|
|
126
127
|
}
|
|
127
|
-
var _i_ObjectVersion;
|
|
128
128
|
if (((_i_ObjectVersion = i.ObjectVersion) !== null && _i_ObjectVersion !== void 0 ? _i_ObjectVersion : '1.0') !== ObjectVersion) {
|
|
129
129
|
return error("Given Object version ".concat(i.ObjectVersion, " does not match expected ").concat(ObjectVersion));
|
|
130
130
|
}
|
|
@@ -155,24 +155,24 @@ export var validateInstance = function(ObjectID, ObjectVersion, Resources) {
|
|
|
155
155
|
};
|
|
156
156
|
};
|
|
157
157
|
};
|
|
158
|
-
export var NumberResource = function(r) {
|
|
158
|
+
export var NumberResource = function NumberResource(r) {
|
|
159
159
|
return typeof r === 'number';
|
|
160
160
|
};
|
|
161
|
-
export var TimeResource = function(r) {
|
|
161
|
+
export var TimeResource = function TimeResource(r) {
|
|
162
162
|
return NumberResource(r) && r > 1700000000 && r < 9999999999;
|
|
163
163
|
};
|
|
164
|
-
export var StringResource = function(r) {
|
|
164
|
+
export var StringResource = function StringResource(r) {
|
|
165
165
|
return typeof r === 'string';
|
|
166
166
|
};
|
|
167
|
-
export var BooleanResource = function(r) {
|
|
167
|
+
export var BooleanResource = function BooleanResource(r) {
|
|
168
168
|
return typeof r === 'boolean';
|
|
169
169
|
};
|
|
170
|
-
export var OptionalResource = function(validator) {
|
|
170
|
+
export var OptionalResource = function OptionalResource(validator) {
|
|
171
171
|
return function(r) {
|
|
172
172
|
return r === undefined ? true : validator(r);
|
|
173
173
|
};
|
|
174
174
|
};
|
|
175
|
-
export var MultipleInstanceResource = function(validator) {
|
|
175
|
+
export var MultipleInstanceResource = function MultipleInstanceResource(validator) {
|
|
176
176
|
return function(r) {
|
|
177
177
|
return Array.isArray(r) && r.every(validator);
|
|
178
178
|
};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { remark } from 'remark';
|
|
2
2
|
export var parseMarkdown2 = remark();
|
|
3
|
-
var isHeading = function(child) {
|
|
3
|
+
var isHeading = function isHeading(child) {
|
|
4
4
|
return child.type === 'heading';
|
|
5
5
|
};
|
|
6
|
-
var isParagraph = function(child) {
|
|
6
|
+
var isParagraph = function isParagraph(child) {
|
|
7
7
|
return child.type === 'paragraph';
|
|
8
8
|
};
|
|
9
|
-
var headingWithLevel = function(children, level) {
|
|
9
|
+
var headingWithLevel = function headingWithLevel(children, level) {
|
|
10
10
|
return children.filter(isHeading).find(function(param) {
|
|
11
11
|
var depth = param.depth;
|
|
12
12
|
return depth === level;
|
|
13
13
|
});
|
|
14
14
|
};
|
|
15
|
-
export var getHeading = function(markdown, level) {
|
|
15
|
+
export var getHeading = function getHeading(markdown, level) {
|
|
16
16
|
return headingWithLevel(remark().parse(markdown).children, level);
|
|
17
17
|
};
|
|
18
18
|
// Find all the paragraphs immediately after the first headline with the given level
|
|
19
|
-
export var getParagraphsAfterHeading = function(markdown, level) {
|
|
19
|
+
export var getParagraphsAfterHeading = function getParagraphsAfterHeading(markdown, level) {
|
|
20
20
|
var headingFound = false;
|
|
21
21
|
var paragraphs = [];
|
|
22
22
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getHeading, getParagraphsAfterHeading } from './getCodeBlock.js';
|
|
2
|
-
export var parseREADME = function(markdown) {
|
|
2
|
+
export var parseREADME = function parseREADME(markdown) {
|
|
3
3
|
var h1 = getHeading(markdown, 1);
|
|
4
4
|
if (h1 === undefined) throw new Error("No H1 defined!");
|
|
5
5
|
var descriptionParagraphs = getParagraphsAfterHeading(markdown, 1);
|
|
@@ -9,11 +9,11 @@ export var parseREADME = function(markdown) {
|
|
|
9
9
|
description: descriptionParagraphs.map(nodeToString).map(toOneLine)
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
|
-
var nodeToString = function(node) {
|
|
12
|
+
var nodeToString = function nodeToString1(node) {
|
|
13
13
|
if ('value' in node) return node.value;
|
|
14
14
|
if ('children' in node) return node.children.map(nodeToString).join('');
|
|
15
15
|
return '';
|
|
16
16
|
};
|
|
17
|
-
var toOneLine = function(s) {
|
|
17
|
+
var toOneLine = function toOneLine(s) {
|
|
18
18
|
return s.trim().replaceAll('\n', ' ');
|
|
19
19
|
};
|
|
@@ -19,7 +19,7 @@ try {
|
|
|
19
19
|
// A README.md should exist
|
|
20
20
|
try {
|
|
21
21
|
await stat(path.join(modelDir, 'README.md'));
|
|
22
|
-
} catch (
|
|
22
|
+
} catch (unused) {
|
|
23
23
|
throw new Error("No README.md defined for model ".concat(model, "!"));
|
|
24
24
|
}
|
|
25
25
|
console.log(chalk.green('✔'), chalk.gray("README.md exists"));
|
package/dist/senml/fromCBOR.js
CHANGED
|
@@ -166,7 +166,7 @@ var labelMap = new Map([
|
|
|
166
166
|
* Convert SenML from CBOR notation to JSON notation.
|
|
167
167
|
*
|
|
168
168
|
* @see https://www.rfc-editor.org/rfc/rfc8428.html#section-6
|
|
169
|
-
*/ export var fromCBOR = function(records) {
|
|
169
|
+
*/ export var fromCBOR = function fromCBOR(records) {
|
|
170
170
|
return records.map(function(record) {
|
|
171
171
|
return Object.entries(record).reduce(function(json, param) {
|
|
172
172
|
var _param = _sliced_to_array(param, 2), k = _param[0], v = _param[1];
|
package/dist/senml/hasName.js
CHANGED
|
@@ -2,7 +2,7 @@ function _type_of(obj) {
|
|
|
2
2
|
"@swc/helpers - typeof";
|
|
3
3
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
4
4
|
}
|
|
5
|
-
export var hasName = function(m) {
|
|
5
|
+
export var hasName = function hasName(m) {
|
|
6
6
|
if (m === null) return false;
|
|
7
7
|
if ((typeof m === "undefined" ? "undefined" : _type_of(m)) !== 'object') return false;
|
|
8
8
|
return 'n' in m;
|
package/dist/senml/hasValue.js
CHANGED
|
@@ -2,11 +2,11 @@ function _type_of(obj) {
|
|
|
2
2
|
"@swc/helpers - typeof";
|
|
3
3
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
4
4
|
}
|
|
5
|
-
export var hasValue = function(m) {
|
|
5
|
+
export var hasValue = function hasValue(m) {
|
|
6
|
+
var _ref, _ref1, _ref2, _ref3;
|
|
6
7
|
if (m === null) return false;
|
|
7
8
|
if ((typeof m === "undefined" ? "undefined" : _type_of(m)) !== 'object') return false;
|
|
8
|
-
var _ref
|
|
9
|
-
var v = (_ref3 = (_ref2 = (_ref1 = (_ref = 'bv' in m ? m.bv : undefined) !== null && _ref !== void 0 ? _ref : 'v' in m ? m.v : undefined) !== null && _ref1 !== void 0 ? _ref1 : 'vs' in m ? m.vs : undefined) !== null && _ref2 !== void 0 ? _ref2 : 'vb' in m ? m.vb : undefined) !== null && _ref3 !== void 0 ? _ref3 : 'vd' in m ? m.vd : undefined;
|
|
9
|
+
var v = (_ref = (_ref1 = (_ref2 = (_ref3 = 'bv' in m ? m.bv : undefined) !== null && _ref3 !== void 0 ? _ref3 : 'v' in m ? m.v : undefined) !== null && _ref2 !== void 0 ? _ref2 : 'vs' in m ? m.vs : undefined) !== null && _ref1 !== void 0 ? _ref1 : 'vb' in m ? m.vb : undefined) !== null && _ref !== void 0 ? _ref : 'vd' in m ? m.vd : undefined;
|
|
10
10
|
if (v === null || v === undefined) return false;
|
|
11
11
|
return true;
|
|
12
12
|
};
|
package/dist/senml/index.js
CHANGED
|
@@ -81,7 +81,7 @@ import { ResourceType } from '../lwm2m/LWM2MObjectInfo.js';
|
|
|
81
81
|
import { timestampResources } from '../lwm2m/timestampResources.js';
|
|
82
82
|
/**
|
|
83
83
|
* Convert LwM2M Object Instances to senML
|
|
84
|
-
*/ export var lwm2mToSenML = function(lwm2m) {
|
|
84
|
+
*/ export var lwm2mToSenML = function lwm2mToSenML(lwm2m) {
|
|
85
85
|
var def = definitions[lwm2m.ObjectID];
|
|
86
86
|
var i = instanceTs(lwm2m);
|
|
87
87
|
var tsResourceId = timestampResources.get(lwm2m.ObjectID)// All registered objects must have a timestamp resource
|
|
@@ -144,7 +144,7 @@ import { timestampResources } from '../lwm2m/timestampResources.js';
|
|
|
144
144
|
senML: senML
|
|
145
145
|
};
|
|
146
146
|
};
|
|
147
|
-
var toKey = function(def, resourceId) {
|
|
147
|
+
var toKey = function toKey(def, resourceId) {
|
|
148
148
|
var _def_Resources_resourceId;
|
|
149
149
|
switch((_def_Resources_resourceId = def.Resources[resourceId]) === null || _def_Resources_resourceId === void 0 ? void 0 : _def_Resources_resourceId.Type){
|
|
150
150
|
case ResourceType.String:
|
|
@@ -44,7 +44,7 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
44
44
|
if (n === "Map" || n === "Set") return Array.from(n);
|
|
45
45
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
46
46
|
}
|
|
47
|
-
export var parseResourceId = function(resourceId) {
|
|
47
|
+
export var parseResourceId = function parseResourceId(resourceId) {
|
|
48
48
|
if (!/^\d+\/\d+\/\d+\/\d+$/.test(resourceId)) return null;
|
|
49
49
|
var _resourceId_split_map = _sliced_to_array(resourceId.split('/').map(function(s) {
|
|
50
50
|
return parseInt(s, 10);
|
|
@@ -52,12 +52,22 @@ function _object_spread_props(target, source) {
|
|
|
52
52
|
}
|
|
53
53
|
function _object_without_properties(source, excluded) {
|
|
54
54
|
if (source == null) return {};
|
|
55
|
-
var target =
|
|
56
|
-
|
|
55
|
+
var target = {}, sourceKeys, key, i;
|
|
56
|
+
if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
|
|
57
|
+
sourceKeys = Reflect.ownKeys(source);
|
|
58
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
59
|
+
key = sourceKeys[i];
|
|
60
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
61
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
62
|
+
target[key] = source[key];
|
|
63
|
+
}
|
|
64
|
+
return target;
|
|
65
|
+
}
|
|
66
|
+
target = _object_without_properties_loose(source, excluded);
|
|
57
67
|
if (Object.getOwnPropertySymbols) {
|
|
58
|
-
|
|
59
|
-
for(i = 0; i <
|
|
60
|
-
key =
|
|
68
|
+
sourceKeys = Object.getOwnPropertySymbols(source);
|
|
69
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
70
|
+
key = sourceKeys[i];
|
|
61
71
|
if (excluded.indexOf(key) >= 0) continue;
|
|
62
72
|
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
63
73
|
target[key] = source[key];
|
|
@@ -67,12 +77,11 @@ function _object_without_properties(source, excluded) {
|
|
|
67
77
|
}
|
|
68
78
|
function _object_without_properties_loose(source, excluded) {
|
|
69
79
|
if (source == null) return {};
|
|
70
|
-
var target = {};
|
|
71
|
-
var sourceKeys = Object.keys(source);
|
|
72
|
-
var key, i;
|
|
80
|
+
var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
|
|
73
81
|
for(i = 0; i < sourceKeys.length; i++){
|
|
74
82
|
key = sourceKeys[i];
|
|
75
83
|
if (excluded.indexOf(key) >= 0) continue;
|
|
84
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
76
85
|
target[key] = source[key];
|
|
77
86
|
}
|
|
78
87
|
return target;
|
|
@@ -81,16 +90,16 @@ import { timestampResources } from '../lwm2m/timestampResources.js';
|
|
|
81
90
|
import { hasName } from './hasName.js';
|
|
82
91
|
import { hasValue } from './hasValue.js';
|
|
83
92
|
import { parseResourceId } from './parseResourceId.js';
|
|
84
|
-
var isInfoForDifferentInstance = function(currentObject, resourceID, currentBaseTime, tsRes) {
|
|
93
|
+
var isInfoForDifferentInstance = function isInfoForDifferentInstance(currentObject, resourceID, currentBaseTime, tsRes) {
|
|
94
|
+
var _currentObject_ObjectInstanceID;
|
|
85
95
|
var _currentObject_Resources;
|
|
86
96
|
if (currentObject === undefined) return true;
|
|
87
97
|
if (currentObject.ObjectID !== resourceID.ObjectID) return true;
|
|
88
|
-
var _currentObject_ObjectInstanceID;
|
|
89
98
|
if (((_currentObject_ObjectInstanceID = currentObject.ObjectInstanceID) !== null && _currentObject_ObjectInstanceID !== void 0 ? _currentObject_ObjectInstanceID : 0) !== resourceID.ObjectInstanceID) return true;
|
|
90
99
|
if (currentBaseTime !== ((_currentObject_Resources = currentObject.Resources) === null || _currentObject_Resources === void 0 ? void 0 : _currentObject_Resources[tsRes])) return true;
|
|
91
100
|
return false;
|
|
92
101
|
};
|
|
93
|
-
var getValue = function(measurement) {
|
|
102
|
+
var getValue = function getValue(measurement) {
|
|
94
103
|
if ('bv' in measurement && !('v' in measurement)) return measurement.bv;
|
|
95
104
|
if ('bv' in measurement && 'v' in measurement) return measurement.bv + measurement.v;
|
|
96
105
|
if ('v' in measurement) return measurement.v;
|
|
@@ -99,7 +108,7 @@ var getValue = function(measurement) {
|
|
|
99
108
|
if ('vd' in measurement) return measurement.vd;
|
|
100
109
|
return undefined;
|
|
101
110
|
};
|
|
102
|
-
export var senMLtoLwM2M = function(senML) {
|
|
111
|
+
export var senMLtoLwM2M = function senMLtoLwM2M(senML) {
|
|
103
112
|
var currentBaseName = '';
|
|
104
113
|
var currentBaseTime = undefined;
|
|
105
114
|
var currentObject = undefined;
|
|
@@ -115,11 +124,11 @@ export var senMLtoLwM2M = function(senML) {
|
|
|
115
124
|
try {
|
|
116
125
|
for(var _iterator = senML[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
117
126
|
var item = _step.value;
|
|
127
|
+
var _item_n;
|
|
118
128
|
if ('bn' in item && item.bn !== undefined) currentBaseName = item.bn;
|
|
119
129
|
if ('bt' in item && item.bt !== undefined) currentBaseTime = item.bt;
|
|
120
130
|
if (!hasValue(item)) continue;
|
|
121
131
|
if (!hasName(item)) continue;
|
|
122
|
-
var _item_n;
|
|
123
132
|
var itemResourceId = "".concat(currentBaseName).concat((_item_n = item.n) !== null && _item_n !== void 0 ? _item_n : '', "/0");
|
|
124
133
|
var resourceId = parseResourceId(itemResourceId);
|
|
125
134
|
if (resourceId === null) {
|
|
@@ -174,7 +183,7 @@ export var senMLtoLwM2M = function(senML) {
|
|
|
174
183
|
};
|
|
175
184
|
/**
|
|
176
185
|
* Handle objects which are only `bt` (base time) and `bn` (base name)
|
|
177
|
-
*/ var parseTimestampOnly = function(senML) {
|
|
186
|
+
*/ var parseTimestampOnly = function parseTimestampOnly(senML) {
|
|
178
187
|
if (senML.length !== 1) return null;
|
|
179
188
|
var item = senML[0];
|
|
180
189
|
if (!('bn' in item) || !('bt' in item)) return null;
|
|
@@ -36,9 +36,17 @@ function _ts_generator(thisArg, body) {
|
|
|
36
36
|
},
|
|
37
37
|
trys: [],
|
|
38
38
|
ops: []
|
|
39
|
-
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
40
|
-
return
|
|
41
|
-
|
|
39
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
40
|
+
return d(g, "next", {
|
|
41
|
+
value: verb(0)
|
|
42
|
+
}), d(g, "throw", {
|
|
43
|
+
value: verb(1)
|
|
44
|
+
}), d(g, "return", {
|
|
45
|
+
value: verb(2)
|
|
46
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
47
|
+
value: function() {
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
42
50
|
}), g;
|
|
43
51
|
function verb(n) {
|
|
44
52
|
return function(v) {
|
|
@@ -0,0 +1,174 @@
|
|
|
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 _define_property(obj, key, value) {
|
|
10
|
+
if (key in obj) {
|
|
11
|
+
Object.defineProperty(obj, key, {
|
|
12
|
+
value: value,
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true
|
|
16
|
+
});
|
|
17
|
+
} else {
|
|
18
|
+
obj[key] = value;
|
|
19
|
+
}
|
|
20
|
+
return obj;
|
|
21
|
+
}
|
|
22
|
+
function _iterable_to_array_limit(arr, i) {
|
|
23
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
24
|
+
if (_i == null) return;
|
|
25
|
+
var _arr = [];
|
|
26
|
+
var _n = true;
|
|
27
|
+
var _d = false;
|
|
28
|
+
var _s, _e;
|
|
29
|
+
try {
|
|
30
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
31
|
+
_arr.push(_s.value);
|
|
32
|
+
if (i && _arr.length === i) break;
|
|
33
|
+
}
|
|
34
|
+
} catch (err) {
|
|
35
|
+
_d = true;
|
|
36
|
+
_e = err;
|
|
37
|
+
} finally{
|
|
38
|
+
try {
|
|
39
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
40
|
+
} finally{
|
|
41
|
+
if (_d) throw _e;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return _arr;
|
|
45
|
+
}
|
|
46
|
+
function _non_iterable_rest() {
|
|
47
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
48
|
+
}
|
|
49
|
+
function _object_spread(target) {
|
|
50
|
+
for(var i = 1; i < arguments.length; i++){
|
|
51
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
52
|
+
var ownKeys = Object.keys(source);
|
|
53
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
54
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
55
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
ownKeys.forEach(function(key) {
|
|
59
|
+
_define_property(target, key, source[key]);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return target;
|
|
63
|
+
}
|
|
64
|
+
function ownKeys(object, enumerableOnly) {
|
|
65
|
+
var keys = Object.keys(object);
|
|
66
|
+
if (Object.getOwnPropertySymbols) {
|
|
67
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
68
|
+
if (enumerableOnly) {
|
|
69
|
+
symbols = symbols.filter(function(sym) {
|
|
70
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
keys.push.apply(keys, symbols);
|
|
74
|
+
}
|
|
75
|
+
return keys;
|
|
76
|
+
}
|
|
77
|
+
function _object_spread_props(target, source) {
|
|
78
|
+
source = source != null ? source : {};
|
|
79
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
80
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
81
|
+
} else {
|
|
82
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
83
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return target;
|
|
87
|
+
}
|
|
88
|
+
function _sliced_to_array(arr, i) {
|
|
89
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
90
|
+
}
|
|
91
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
92
|
+
if (!o) return;
|
|
93
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
94
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
95
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
96
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
97
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
98
|
+
}
|
|
99
|
+
var reverseLabelMap = new Map([
|
|
100
|
+
[
|
|
101
|
+
'bver',
|
|
102
|
+
-1
|
|
103
|
+
],
|
|
104
|
+
[
|
|
105
|
+
'bn',
|
|
106
|
+
-2
|
|
107
|
+
],
|
|
108
|
+
[
|
|
109
|
+
'bt',
|
|
110
|
+
-3
|
|
111
|
+
],
|
|
112
|
+
[
|
|
113
|
+
'bu',
|
|
114
|
+
-4
|
|
115
|
+
],
|
|
116
|
+
[
|
|
117
|
+
'bv',
|
|
118
|
+
-5
|
|
119
|
+
],
|
|
120
|
+
[
|
|
121
|
+
'bs',
|
|
122
|
+
-6
|
|
123
|
+
],
|
|
124
|
+
[
|
|
125
|
+
'n',
|
|
126
|
+
0
|
|
127
|
+
],
|
|
128
|
+
[
|
|
129
|
+
'u',
|
|
130
|
+
1
|
|
131
|
+
],
|
|
132
|
+
[
|
|
133
|
+
'v',
|
|
134
|
+
2
|
|
135
|
+
],
|
|
136
|
+
[
|
|
137
|
+
'vs',
|
|
138
|
+
3
|
|
139
|
+
],
|
|
140
|
+
[
|
|
141
|
+
'vb',
|
|
142
|
+
4
|
|
143
|
+
],
|
|
144
|
+
[
|
|
145
|
+
's',
|
|
146
|
+
5
|
|
147
|
+
],
|
|
148
|
+
[
|
|
149
|
+
't',
|
|
150
|
+
6
|
|
151
|
+
],
|
|
152
|
+
[
|
|
153
|
+
'ut',
|
|
154
|
+
7
|
|
155
|
+
],
|
|
156
|
+
[
|
|
157
|
+
'vd',
|
|
158
|
+
8
|
|
159
|
+
]
|
|
160
|
+
]);
|
|
161
|
+
/**
|
|
162
|
+
* Convert SenML from JSON notation to CBOR notation.
|
|
163
|
+
*
|
|
164
|
+
* @see https://www.rfc-editor.org/rfc/rfc8428.html#section-6
|
|
165
|
+
*/ export var toCBOR = function toCBOR(records) {
|
|
166
|
+
return records.map(function(record) {
|
|
167
|
+
return Object.entries(record).reduce(function(cbor, param) {
|
|
168
|
+
var _param = _sliced_to_array(param, 2), label = _param[0], v = _param[1];
|
|
169
|
+
var key = reverseLabelMap.get(label);
|
|
170
|
+
if (key === undefined) return cbor;
|
|
171
|
+
return _object_spread_props(_object_spread({}, cbor), _define_property({}, String(key), v));
|
|
172
|
+
}, {});
|
|
173
|
+
});
|
|
174
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
|
+
import { fromCBOR } from './fromCBOR.js';
|
|
4
|
+
import { toCBOR } from './toCBOR.js';
|
|
5
|
+
void describe('toCBOR()', function() {
|
|
6
|
+
void it('should convert JSON encoding to CBOR encoding', function() {
|
|
7
|
+
return assert.deepEqual(toCBOR([
|
|
8
|
+
{
|
|
9
|
+
n: '0',
|
|
10
|
+
v: 28.904369,
|
|
11
|
+
bn: '14205/0/'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
n: '1',
|
|
15
|
+
v: 17.66905
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
n: '2',
|
|
19
|
+
v: 100562.21875
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
n: '10',
|
|
23
|
+
v: 57
|
|
24
|
+
}
|
|
25
|
+
]), [
|
|
26
|
+
{
|
|
27
|
+
'0': '0',
|
|
28
|
+
'2': 28.904369,
|
|
29
|
+
'-2': '14205/0/'
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
'0': '1',
|
|
33
|
+
'2': 17.66905
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
'0': '2',
|
|
37
|
+
'2': 100562.21875
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
'0': '10',
|
|
41
|
+
'2': 57
|
|
42
|
+
}
|
|
43
|
+
]);
|
|
44
|
+
});
|
|
45
|
+
void it('should round-trip through fromCBOR', function() {
|
|
46
|
+
var json = [
|
|
47
|
+
{
|
|
48
|
+
n: '0',
|
|
49
|
+
v: 28.904369,
|
|
50
|
+
bn: '14205/0/'
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
n: '1',
|
|
54
|
+
v: 17.66905,
|
|
55
|
+
u: 'lat'
|
|
56
|
+
}
|
|
57
|
+
];
|
|
58
|
+
assert.deepEqual(fromCBOR(toCBOR(json)), json);
|
|
59
|
+
});
|
|
60
|
+
void it('should round-trip through toCBOR', function() {
|
|
61
|
+
var cbor = [
|
|
62
|
+
{
|
|
63
|
+
'0': '0',
|
|
64
|
+
'2': 28.904369,
|
|
65
|
+
'-2': '14205/0/'
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
'0': '1',
|
|
69
|
+
'2': 17.66905,
|
|
70
|
+
'1': 'lat'
|
|
71
|
+
}
|
|
72
|
+
];
|
|
73
|
+
assert.deepEqual(toCBOR(fromCBOR(cbor)), cbor);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SenML } from '../senml/SenMLSchema.js';
|
|
2
2
|
import { validate } from '../validate.js';
|
|
3
3
|
var validator = validate(SenML);
|
|
4
|
-
export var validateSenML = function(maybeSenML) {
|
|
4
|
+
export var validateSenML = function validateSenML(maybeSenML) {
|
|
5
5
|
return validator(maybeSenML);
|
|
6
6
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hello.nrfcloud.com/proto-map",
|
|
3
|
-
"version": "16.
|
|
3
|
+
"version": "16.6.0",
|
|
4
4
|
"description": "Documents the communication protocol between devices, the hello.nrfcloud.com/map backend and web application",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@bifravst/eslint-config-typescript": "6.4.4",
|
|
39
|
-
"@bifravst/prettier-config": "1.1.
|
|
40
|
-
"@commitlint/config-conventional": "
|
|
41
|
-
"@swc/cli": "0.
|
|
42
|
-
"@swc/core": "1.15.
|
|
43
|
-
"@types/node": "
|
|
39
|
+
"@bifravst/prettier-config": "1.1.17",
|
|
40
|
+
"@commitlint/config-conventional": "20.4.1",
|
|
41
|
+
"@swc/cli": "0.8.0",
|
|
42
|
+
"@swc/core": "1.15.11",
|
|
43
|
+
"@types/node": "25.2.3",
|
|
44
44
|
"@types/xml2js": "0.4.14",
|
|
45
45
|
"chalk": "5.6.2",
|
|
46
46
|
"globstar": "1.0.0",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"remark": "15.0.1",
|
|
50
50
|
"remark-frontmatter": "5.0.0",
|
|
51
51
|
"tsx": "4.21.0",
|
|
52
|
-
"typescript": "5.
|
|
52
|
+
"typescript": "5.9.3",
|
|
53
53
|
"xml2js": "0.6.2",
|
|
54
54
|
"yaml": "2.8.2"
|
|
55
55
|
},
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"lwm2m"
|
|
98
98
|
],
|
|
99
99
|
"peerDependencies": {
|
|
100
|
-
"@aws-sdk/client-timestream-write": "^3.
|
|
101
|
-
"@sinclair/typebox": "^0.34.
|
|
100
|
+
"@aws-sdk/client-timestream-write": "^3.986.0",
|
|
101
|
+
"@sinclair/typebox": "^0.34.48"
|
|
102
102
|
}
|
|
103
103
|
}
|