@hello.nrfcloud.com/proto-map 5.6.2 → 6.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 (99) hide show
  1. package/README.md +0 -16
  2. package/api/Context.ts +1 -1
  3. package/api/{ResourceUpdate.spec.ts → ObjectUpdate.spec.ts} +5 -5
  4. package/api/{ResourceUpdate.ts → ObjectUpdate.ts} +4 -4
  5. package/dist/api/Context.js +1 -1
  6. package/dist/api/DeviceId.js +7 -7
  7. package/dist/api/Devices.js +11 -11
  8. package/dist/api/History.js +10 -10
  9. package/dist/api/History.spec.js +17 -17
  10. package/dist/api/LwM2M.js +11 -11
  11. package/dist/api/ObjectUpdate.js +17 -0
  12. package/dist/api/ObjectUpdate.spec.js +26 -0
  13. package/dist/api/ShareDeviceOwnershipConfirmed.js +4 -4
  14. package/dist/api/ShareDeviceRequest.js +4 -4
  15. package/dist/api/Timestamp.js +3 -3
  16. package/dist/api/Timestamp.spec.js +9 -9
  17. package/dist/api/index.js +8 -8
  18. package/dist/generator/addDocBlock.js +2 -2
  19. package/dist/generator/generateLwM2MDefinitions.js +27 -27
  20. package/dist/generator/generateLwM2MDefinitions.spec.js +32 -32
  21. package/dist/generator/generateLwm2mTimestampResources.js +7 -7
  22. package/dist/generator/generateModels.js +26 -111
  23. package/dist/generator/generateType.js +21 -21
  24. package/dist/generator/generateValidator.js +29 -29
  25. package/dist/generator/generateValidators.js +9 -9
  26. package/dist/generator/lwm2m.js +23 -23
  27. package/dist/generator/models.js +14 -96
  28. package/dist/generator/printNode.js +2 -2
  29. package/dist/generator/tokenizeName.js +2 -2
  30. package/dist/generator/tokenizeName.spec.js +20 -20
  31. package/dist/generator/types.js +37 -37
  32. package/dist/lwm2m/LWM2MObjectDefinition.js +30 -30
  33. package/dist/lwm2m/check-lwm2m-rules.js +34 -34
  34. package/dist/lwm2m/definitions.js +4 -4
  35. package/dist/lwm2m/fromXML2JSON.js +4 -4
  36. package/dist/lwm2m/instanceTs.js +2 -2
  37. package/dist/lwm2m/instanceTs.spec.js +10 -10
  38. package/dist/lwm2m/isRegisteredLwM2MObject.js +2 -2
  39. package/dist/lwm2m/isRegisteredLwM2MObject.spec.js +12 -12
  40. package/dist/lwm2m/parseRangeEnumeration.js +1 -1
  41. package/dist/lwm2m/parseRangeEnumeration.spec.js +11 -11
  42. package/dist/lwm2m/unwrapNestedArray.js +2 -2
  43. package/dist/lwm2m/unwrapNestedArray.spec.js +155 -155
  44. package/dist/lwm2m/validate.js +1 -1
  45. package/dist/lwm2m/validation.js +16 -16
  46. package/dist/markdown/getCodeBlock.js +3 -29
  47. package/dist/markdown/parseREADME.js +5 -5
  48. package/dist/models/check-model-rules.js +16 -106
  49. package/dist/models/models.js +6 -115
  50. package/dist/models/types.js +0 -12
  51. package/dist/senml/SenMLSchema.js +16 -16
  52. package/dist/senml/SenMLSchema.spec.js +11 -11
  53. package/dist/senml/hasValue.js +2 -2
  54. package/dist/senml/hasValue.spec.js +4 -4
  55. package/dist/senml/lwm2mToSenML.js +8 -8
  56. package/dist/senml/lwm2mToSenML.spec.js +42 -42
  57. package/dist/senml/parseResourceId.js +1 -1
  58. package/dist/senml/parseResourceId.spec.js +6 -6
  59. package/dist/senml/senMLtoLwM2M.js +14 -14
  60. package/dist/senml/senMLtoLwM2M.spec.js +53 -53
  61. package/dist/senml/validateSenML.js +2 -2
  62. package/dist/senml/validateSenML.spec.js +11 -11
  63. package/models/README.md +0 -4
  64. package/models/check-model-rules.ts +1 -90
  65. package/models/models.ts +1 -8
  66. package/models/types.ts +0 -16
  67. package/package.json +5 -10
  68. package/dist/api/ResourceUpdate.js +0 -17
  69. package/dist/api/ResourceUpdate.spec.js +0 -26
  70. package/dist/generator/isDir.js +0 -163
  71. package/dist/generator/isDir.spec.js +0 -212
  72. package/dist/markdown/getFrontMatter.js +0 -15
  73. package/dist/models/asset_tracker_v2+AWS/examples/examples.spec.js +0 -489
  74. package/models/PCA20035+solar/README.md +0 -10
  75. package/models/PCA20035+solar/transforms/airQuality.md +0 -48
  76. package/models/PCA20035+solar/transforms/battery.md +0 -46
  77. package/models/PCA20035+solar/transforms/button.md +0 -45
  78. package/models/PCA20035+solar/transforms/deviceInfo.md +0 -72
  79. package/models/PCA20035+solar/transforms/gain.md +0 -45
  80. package/models/PCA20035+solar/transforms/geolocationFromGroundfix.md +0 -67
  81. package/models/PCA20035+solar/transforms/geolocationFromMessage.md +0 -80
  82. package/models/PCA20035+solar/transforms/humidity.md +0 -43
  83. package/models/PCA20035+solar/transforms/networkInfo.md +0 -84
  84. package/models/PCA20035+solar/transforms/pressure.md +0 -43
  85. package/models/PCA20035+solar/transforms/temperature.md +0 -43
  86. package/models/asset_tracker_v2+AWS/README.md +0 -6
  87. package/models/asset_tracker_v2+AWS/examples/examples.spec.ts +0 -229
  88. package/models/asset_tracker_v2+AWS/examples/shadow/example-1.json +0 -24
  89. package/models/asset_tracker_v2+AWS/examples/shadow/example-2.json +0 -30
  90. package/models/asset_tracker_v2+AWS/examples/shadow/example-3.json +0 -37
  91. package/models/asset_tracker_v2+AWS/examples/shadow/example-4.json +0 -48
  92. package/models/asset_tracker_v2+AWS/examples/shadow/example-5.json +0 -43
  93. package/models/asset_tracker_v2+AWS/transforms/GNSS.md +0 -66
  94. package/models/asset_tracker_v2+AWS/transforms/battery-voltage.md +0 -50
  95. package/models/asset_tracker_v2+AWS/transforms/device-info.md +0 -61
  96. package/models/asset_tracker_v2+AWS/transforms/env.md +0 -69
  97. package/models/asset_tracker_v2+AWS/transforms/fuel-gauge.md +0 -62
  98. package/models/asset_tracker_v2+AWS/transforms/roam.md +0 -100
  99. package/models/asset_tracker_v2+AWS/transforms/solar.md +0 -58
@@ -1,33 +1,10 @@
1
- import { remark } from "remark";
1
+ import { remark } from 'remark';
2
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
3
  var isHeading = function(child) {
15
- return child.type === "heading";
4
+ return child.type === 'heading';
16
5
  };
17
6
  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
- };
7
+ return child.type === 'paragraph';
31
8
  };
32
9
  var headingWithLevel = function(children, level) {
33
10
  return children.filter(isHeading).find(function(param) {
@@ -35,9 +12,6 @@ var headingWithLevel = function(children, level) {
35
12
  return depth === level;
36
13
  });
37
14
  };
38
- export var getCodeBlock = function(markdown) {
39
- return codeBlockWithHeading(remark().parse(markdown).children);
40
- };
41
15
  export var getHeading = function(markdown, level) {
42
16
  return headingWithLevel(remark().parse(markdown).children, level);
43
17
  };
@@ -1,4 +1,4 @@
1
- import { getHeading, getParagraphsAfterHeading } from "./getCodeBlock.js";
1
+ import { getHeading, getParagraphsAfterHeading } from './getCodeBlock.js';
2
2
  export var parseREADME = function(markdown) {
3
3
  var h1 = getHeading(markdown, 1);
4
4
  if (h1 === undefined) throw new Error("No H1 defined!");
@@ -10,10 +10,10 @@ export var parseREADME = function(markdown) {
10
10
  };
11
11
  };
12
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 "";
13
+ if ('value' in node) return node.value;
14
+ if ('children' in node) return node.children.map(nodeToString).join('');
15
+ return '';
16
16
  };
17
17
  var toOneLine = function(s) {
18
- return s.trim().replaceAll("\n", " ");
18
+ return s.trim().replaceAll('\n', ' ');
19
19
  };
@@ -1,125 +1,35 @@
1
- import chalk from "chalk";
2
- import jsonata from "jsonata";
3
- import assert from "node:assert/strict";
4
- import { readFile, readdir, stat } from "node:fs/promises";
5
- import path from "node:path";
6
- import { FrontMatter, ModelIDRegExp } from "./types.js";
7
- import { senMLtoLwM2M } from "../senml/senMLtoLwM2M.js";
8
- import { getCodeBlock } from "../markdown/getCodeBlock.js";
9
- import { getFrontMatter } from "../markdown/getFrontMatter.js";
10
- import { validateSenML } from "../senml/validateSenML.js";
11
- import { isRegisteredLwM2MObject } from "../lwm2m/isRegisteredLwM2MObject.js";
12
- import { hasValue } from "../senml/hasValue.js";
13
- import { parseREADME } from "markdown/parseREADME.js";
14
- console.log(chalk.gray("Models rules check"));
15
- console.log("");
16
- var modelsDir = path.join(process.cwd(), "models");
1
+ import chalk from 'chalk';
2
+ import assert from 'node:assert/strict';
3
+ import { readFile, readdir, stat } from 'node:fs/promises';
4
+ import path from 'node:path';
5
+ import { ModelIDRegExp } from './types.js';
6
+ import { parseREADME } from 'markdown/parseREADME.js';
7
+ console.log(chalk.gray('Models rules check'));
8
+ console.log('');
9
+ var modelsDir = path.join(process.cwd(), 'models');
17
10
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
18
11
  try {
19
12
  for(var _iterator = (await readdir(modelsDir))[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
20
13
  var model = _step.value;
21
14
  var modelDir = path.join(modelsDir, model);
22
15
  if (!(await stat(modelDir)).isDirectory()) continue;
23
- console.log(chalk.white("\xb7"), chalk.white.bold(model));
24
- assert.match(model, ModelIDRegExp, "Model identifiers must consist of numbers, letters, dash, plus, and underscore only");
25
- console.log(chalk.green(""), chalk.gray("Model name is correct"));
16
+ console.log(chalk.white('·'), chalk.white.bold(model));
17
+ assert.match(model, ModelIDRegExp, 'Model identifiers must consist of numbers, letters, dash, plus, and underscore only');
18
+ console.log(chalk.green(''), chalk.gray('Model name is correct'));
26
19
  // A README.md should exist
27
20
  try {
28
- await stat(path.join(modelDir, "README.md"));
21
+ await stat(path.join(modelDir, 'README.md'));
29
22
  } catch (e) {
30
23
  throw new Error("No README.md defined for model ".concat(model, "!"));
31
24
  }
32
- console.log(chalk.green(""), chalk.gray("README.md exists"));
25
+ console.log(chalk.green(''), chalk.gray("README.md exists"));
33
26
  try {
34
- parseREADME(await readFile(path.join(modelDir, "README.md"), "utf-8"));
27
+ parseREADME(await readFile(path.join(modelDir, 'README.md'), 'utf-8'));
35
28
  } catch (err) {
36
29
  console.error(err);
37
30
  throw new Error("README is not valid for ".concat(model, "!"));
38
31
  }
39
- console.log(chalk.green(""), chalk.gray("README.md is valid"));
40
- // Validate jsonata expressions
41
- var hasTransforms = false;
42
- var transformsFolder = path.join(modelDir, "transforms");
43
- try {
44
- await stat(transformsFolder);
45
- hasTransforms = true;
46
- console.log(" ", chalk.gray("Transforms:"));
47
- } catch (e) {
48
- console.log(" ", chalk.gray("No transforms found."));
49
- }
50
- if (hasTransforms) {
51
- var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
52
- try {
53
- for(var _iterator1 = (await readdir(transformsFolder)).filter(function(f) {
54
- return f.endsWith(".md");
55
- })[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
56
- var transform = _step1.value;
57
- console.log(" ", chalk.white("\xb7"), chalk.white.bold(transform));
58
- var markdown = await readFile(path.join(modelDir, "transforms", transform), "utf-8");
59
- // Validate front-matter
60
- var type = getFrontMatter(markdown, FrontMatter).type;
61
- console.log(" ", chalk.green("✔"), chalk.gray("Type ".concat(type, " is valid")));
62
- var findBlock = getCodeBlock(markdown);
63
- var matchExpression = findBlock("jsonata", "Match Expression");
64
- var transformExpression = findBlock("jsonata", "Transform Expression");
65
- var inputExample = JSON.parse(findBlock("json", "Input Example"));
66
- var resultExample = JSON.parse(findBlock("json", "Result Example"));
67
- var selectResult = await jsonata(matchExpression).evaluate(inputExample);
68
- if (selectResult !== true) {
69
- throw new Error("The select expression did not evaluate to true with the given example.");
70
- }
71
- console.log(" ", chalk.green("✔"), chalk.gray("Select expression evaluated to true for the example input"));
72
- var transformResult = await jsonata(// For testing purposes this function call result is hardcoded
73
- transformExpression.replace("$millis()", "1699999999999")).evaluate(inputExample);
74
- var maybeValidSenML = validateSenML(transformResult.filter(hasValue));
75
- if ("errors" in maybeValidSenML) {
76
- console.error(maybeValidSenML.errors);
77
- throw new Error("The JSONata expression must produce valid SenML");
78
- }
79
- assert.deepEqual(maybeValidSenML.value, resultExample);
80
- console.log(" ", chalk.green("✔"), chalk.gray("Transformation result is valid SenML"));
81
- assert.deepEqual(maybeValidSenML.value, resultExample);
82
- console.log(" ", chalk.green("✔"), chalk.gray("The transformation result matches the example"));
83
- var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
84
- try {
85
- // Validate
86
- for(var _iterator2 = senMLtoLwM2M(maybeValidSenML.value)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
87
- var object = _step2.value;
88
- if (!isRegisteredLwM2MObject(object, console.error)) {
89
- throw new Error("The LwM2M object must follow LwM2M schema definition");
90
- }
91
- console.log(" ", chalk.green("✔"), chalk.gray("SenML object is valid LwM2M"));
92
- }
93
- } catch (err) {
94
- _didIteratorError2 = true;
95
- _iteratorError2 = err;
96
- } finally{
97
- try {
98
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
99
- _iterator2.return();
100
- }
101
- } finally{
102
- if (_didIteratorError2) {
103
- throw _iteratorError2;
104
- }
105
- }
106
- }
107
- }
108
- } catch (err) {
109
- _didIteratorError1 = true;
110
- _iteratorError1 = err;
111
- } finally{
112
- try {
113
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
114
- _iterator1.return();
115
- }
116
- } finally{
117
- if (_didIteratorError1) {
118
- throw _iteratorError1;
119
- }
120
- }
121
- }
122
- }
32
+ console.log(chalk.green(''), chalk.gray("README.md is valid"));
123
33
  }
124
34
  } catch (err) {
125
35
  _didIteratorError = true;
@@ -1,4 +1,6 @@
1
- function _define_property(obj, key, value) {
1
+ /**
2
+ * The Model IDs defined in this repo.
3
+ */ function _define_property(obj, key, value) {
2
4
  if (key in obj) {
3
5
  Object.defineProperty(obj, key, {
4
6
  value: value,
@@ -11,127 +13,16 @@ function _define_property(obj, key, value) {
11
13
  }
12
14
  return obj;
13
15
  }
14
- import { TransformType } from "./types.js";
15
16
  export var ModelID;
16
17
  (function(ModelID) {
17
- ModelID["PCA20035_solar"] = "PCA20035+solar";
18
- ModelID["Asset_tracker_v2_AWS"] = "asset_tracker_v2+AWS";
19
18
  ModelID["Kartverket_vasstandsdata"] = "kartverket-vasstandsdata";
20
19
  })(ModelID || (ModelID = {}));
21
- var _obj;
22
20
  /**
23
21
  * The models defined for hello.nrfcloud.com
24
- */ export var models = (_obj = {}, _define_property(_obj, "PCA20035+solar", {
25
- "id": "PCA20035+solar",
26
- "transforms": [
27
- {
28
- "type": TransformType.Messages,
29
- "match": "appId = 'AIR_QUAL'",
30
- "transform": '[\n {"bn": "14205/0/", "n": "10", "v": $number(data), "bt": ts }\n]'
31
- },
32
- {
33
- "type": TransformType.Messages,
34
- "match": "appId = 'BATTERY'",
35
- "transform": '[\n {"bn": "14202/0/", "n": "0", "v": $number(data), "bt": ts }\n]'
36
- },
37
- {
38
- "type": TransformType.Messages,
39
- "match": "appId = 'BUTTON'",
40
- "transform": '[\n {"bn": "14220/0/", "n": "0", "v": $number(data), "bt": ts }\n]'
41
- },
42
- {
43
- "type": TransformType.Messages,
44
- "match": "appId = 'DEVICE' and $exists(data.deviceInfo)",
45
- "transform": '[\n {"bn": "14204/0/", "n": "0", "vs": data.deviceInfo.imei, "bt": ts },\n {"n": "1", "vs": data.deviceInfo.iccid },\n {"n": "2", "vs": data.deviceInfo.modemFirmware },\n {"n": "3", "vs": data.deviceInfo.appVersion },\n {"n": "4", "vs": data.deviceInfo.board },\n {"n": "5", "vs": data.deviceInfo.bat }\n]'
46
- },
47
- {
48
- "type": TransformType.Messages,
49
- "match": "appId = 'SOLAR'",
50
- "transform": '[\n {"bn": "14210/0/", "n": "0", "v": $number(data), "bt": ts }\n]'
51
- },
52
- {
53
- "type": TransformType.Messages,
54
- "match": "appId = 'GROUND_FIX' and $exists(data.lat) and $exists(data.lon) and $exists(data.uncertainty) and $exists(data.fulfilledWith)",
55
- "transform": '[\n {"bn": "14201/1/", "n": "0", "v": data.lat, "bt": $millis() },\n {"n": "1", "v": data.lon },\n {"n": "3", "v": data.uncertainty },\n {"n": "6", "vs": data.fulfilledWith }\n]'
56
- },
57
- {
58
- "type": TransformType.Messages,
59
- "match": "appId = 'GNSS'",
60
- "transform": '[\n {"bn": "14201/0/", "n": "0", "v": data.lat, "bt": ts },\n {"n": "1", "v": data.lng },\n {"n": "2", "v": data.alt },\n {"n": "3", "v": data.acc },\n {"n": "4", "v": data.spd },\n {"n": "5", "v": data.hdg },\n {"n": "6", "vs": "GNSS" }\n]'
61
- },
62
- {
63
- "type": TransformType.Messages,
64
- "match": "appId = 'HUMID'",
65
- "transform": '[\n {"bn": "14205/0/", "n": "1", "v": $number(data), "bt": ts }\n]'
66
- },
67
- {
68
- "type": TransformType.Messages,
69
- "match": "appId = 'DEVICE' and $exists(data.networkInfo)",
70
- "transform": '[\n {"bn": "14203/0/", "n": "0", "vs": data.networkInfo.networkMode, "bt": ts },\n {"n": "1", "v": data.networkInfo.currentBand },\n {"n": "2", "v": data.networkInfo.rsrp },\n {"n": "3", "v": data.networkInfo.areaCode },\n {"n": "4", "v": data.networkInfo.cellID },\n {"n": "5", "v": data.networkInfo.mccmnc },\n {"n": "6", "vs": data.networkInfo.ipAddress },\n {"n": "11", "v": data.networkInfo.eest }\n]'
71
- },
72
- {
73
- "type": TransformType.Messages,
74
- "match": "appId = 'AIR_PRESS'",
75
- "transform": '[\n {"bn": "14205/0/", "n": "2", "v": $number(data)*10, "bt": ts }\n]'
76
- },
77
- {
78
- "type": TransformType.Messages,
79
- "match": "appId = 'TEMP'",
80
- "transform": '[\n {"bn": "14205/0/", "n": "0", "v": $number(data), "bt": ts }\n]'
81
- }
82
- ],
83
- "about": {
84
- "title": "Thingy:91 with Solar Shield",
85
- "description": "The Nordic Thingy:91 Solar Shield is a plug-and-play prototyping platform. Powerfoyle solar cell is mounted onto the Thingy to quickly get started exploring the endless possibilities with solar powered IoT applications and to develop products with eternal life or even battery-free products.​\nThe Thingy:91 runs the asset_tracker_v2 application and sends messages to nRF Cloud using MQTT."
86
- }
87
- }), _define_property(_obj, "asset_tracker_v2+AWS", {
88
- "id": "asset_tracker_v2+AWS",
89
- "transforms": [
90
- {
91
- "type": TransformType.Shadow,
92
- "match": "$exists(state.reported.gnss)",
93
- "transform": '[\n {"bn": "14201/0/", "n": "0", "v": state.reported.gnss.v.lat, "bt": state.reported.gnss.ts },\n {"n": "1", "v": state.reported.gnss.v.lng },\n {"n": "2", "v": state.reported.gnss.v.alt },\n {"n": "3", "v": state.reported.gnss.v.acc },\n {"n": "4", "v": state.reported.gnss.v.spd },\n {"n": "5", "v": state.reported.gnss.v.hdg },\n {"n": "6", "vs": "GNSS" }\n]'
94
- },
95
- {
96
- "type": TransformType.Shadow,
97
- "match": "$exists(state.reported.bat)",
98
- "transform": '[\n {"bn": "14202/0/", "n": "1", "v": state.reported.bat.v/1000, "bt": state.reported.bat.ts }\n]'
99
- },
100
- {
101
- "type": TransformType.Shadow,
102
- "match": "$exists(state.reported.dev)",
103
- "transform": '[\n {"bn": "14204/0/", "n": "0", "vs": state.reported.dev.v.imei, "bt": state.reported.dev.ts },\n {"n": "1", "vs": state.reported.dev.v.iccid },\n {"n": "2", "vs": state.reported.dev.v.modV },\n {"n": "3", "vs": state.reported.dev.v.appV },\n {"n": "4", "vs": state.reported.dev.v.brdV }\n]'
104
- },
105
- {
106
- "type": TransformType.Shadow,
107
- "match": "$exists(state.reported.env)",
108
- "transform": '[\n {"bn": "14205/0/", "n": "0", "v": state.reported.env.v.temp, "bt": state.reported.env.ts },\n {"n": "1", "v": state.reported.env.v.hum },\n {"n": "2", "v": state.reported.env.v.atmp },\n {"n": "10", "v": state.reported.env.v.bsec_iaq }\n]'
109
- },
110
- {
111
- "type": TransformType.Shadow,
112
- "match": "$exists(state.reported.fg)",
113
- "transform": '[\n {"bn": "14202/0/", "n": "0", "v": state.reported.fg.v.SoC, "bt": state.reported.fg.ts },\n {"n": "1", "v": state.reported.fg.v.V/1000 },\n {"n": "2", "v": state.reported.fg.v.I },\n {"n": "3", "v": state.reported.fg.v.T = null ? null : state.reported.fg.v.T/10 },\n {"n": "4", "v": state.reported.fg.v.TTF },\n {"n": "5", "v": state.reported.fg.v.TTE }\n]'
114
- },
115
- {
116
- "type": TransformType.Shadow,
117
- "match": "$exists(state.reported.roam)",
118
- "transform": '[\n {"bn": "14203/0/", "n": "0", "vs": state.reported.roam.v.nw, "bt": state.reported.roam.ts },\n {"n": "1", "v": state.reported.roam.v.band },\n {"bn": "14203/0/", "n": "2", "v": state.reported.roam.v.rsrp, "bt": state.reported.roam.ts },\n {"n": "3", "v": state.reported.roam.v.area },\n {"n": "4", "v": state.reported.roam.v.cell },\n {"n": "5", "v": state.reported.roam.v.mccmnc },\n {"n": "6", "vs": state.reported.roam.v.ip },\n {"bn": "14203/0/", "n": "11", "v": state.reported.roam.v.eest, "bt": state.reported.roam.ts }\n]'
119
- },
120
- {
121
- "type": TransformType.Shadow,
122
- "match": "$exists(state.reported.sol)",
123
- "transform": '[\n {"bn": "14210/0/", "n": "0", "v": state.reported.sol.v.gain, "bt": state.reported.sol.ts },\n {"n": "1", "v": state.reported.sol.v.bat }\n]'
124
- }
125
- ],
126
- "about": {
127
- "title": "asset_tracker_v2 on AWS",
128
- "description": "This implements the conversion for the asset_tracker_v2 message protocol when connected to AWS IoT."
129
- }
130
- }), _define_property(_obj, "kartverket-vasstandsdata", {
22
+ */ export var models = _define_property({}, "kartverket-vasstandsdata", {
131
23
  "id": "kartverket-vasstandsdata",
132
- "transforms": [],
133
24
  "about": {
134
25
  "title": "Kartverket Vasstandsdata",
135
- "description": "A simulated device reporting the current sea level as provided by the Kartverket's (Norwegian Mapping Authority) API for vasstandsdata (API for water level data).\nReports sea water level using the Object 14230.\nThe data is licensed by the Norwegian Mapping Authority’s under the Creative Commons Attribution 4.0 International (CC BY 4.0) license."
26
+ "description": "A simulated device reporting the current sea level as provided by the Kartverket's (Norwegian Mapping Authority) API for vasstandsdata (API for water level data).\nReports sea water level using the Object 14230.\nThe data is licensed by the Norwegian Mapping Authority\u2019s under the Creative Commons Attribution 4.0 International (CC BY 4.0) license."
136
27
  }
137
- }), _obj);
28
+ });
@@ -1,13 +1 @@
1
- import { Type } from "@sinclair/typebox";
2
1
  export var ModelIDRegExp = /^[A-Za-z0-9+_-]+$/;
3
- export var TransformType;
4
- (function(TransformType) {
5
- TransformType["Shadow"] = "shadow";
6
- TransformType["Messages"] = "messages";
7
- })(TransformType || (TransformType = {}));
8
- export var FrontMatter = Type.Object({
9
- type: Type.Union([
10
- Type.Literal("shadow"),
11
- Type.Literal("messages")
12
- ])
13
- });
@@ -1,22 +1,22 @@
1
- import { Type } from "@sinclair/typebox";
1
+ import { Type } from '@sinclair/typebox';
2
2
  var ResourceIDPart = Type.RegExp(/^[0-9/]+$/, {
3
- title: "ResourceIDPart",
4
- description: "Combines `bn` and `n` to a fully qualified resource identifier in the form of `/<object ID>/<object instance ID>/<resource ID>/0`. (Multiple resource instances are not supported right now.).",
3
+ title: 'ResourceIDPart',
4
+ description: 'Combines `bn` and `n` to a fully qualified resource identifier in the form of `/<object ID>/<object instance ID>/<resource ID>/0`. (Multiple resource instances are not supported right now.).',
5
5
  examples: [
6
- "/",
7
- "/14201/0/",
8
- "5"
6
+ '/',
7
+ '/14201/0/',
8
+ '5'
9
9
  ]
10
10
  });
11
11
  var BaseValue = Type.Number({
12
- title: "Base Value"
12
+ title: 'Base Value'
13
13
  });
14
14
  var Value = Type.Number({
15
- title: "Value"
15
+ title: 'Value'
16
16
  });
17
17
  var Time = Type.Integer({
18
18
  minimum: 0,
19
- title: "Time"
19
+ title: 'Time'
20
20
  });
21
21
  /**
22
22
  * Defines a SenML type with some unsupported elements removed: Sum, Base Sum, Update Time
@@ -32,8 +32,8 @@ var Time = Type.Integer({
32
32
  n: ResourceIDPart,
33
33
  blv: Type.String({
34
34
  minLength: 1,
35
- description: "The LwM2M object version used",
36
- default: "1.0"
35
+ description: 'The LwM2M object version used',
36
+ default: '1.0'
37
37
  }),
38
38
  bt: Type.Optional(Time)
39
39
  })
@@ -56,23 +56,23 @@ var Time = Type.Integer({
56
56
  Type.Object({
57
57
  vs: Type.String({
58
58
  minLength: 1,
59
- title: "String Value"
59
+ title: 'String Value'
60
60
  })
61
61
  }),
62
62
  Type.Object({
63
63
  vb: Type.Boolean({
64
- title: "Boolean Value"
64
+ title: 'Boolean Value'
65
65
  })
66
66
  }),
67
67
  Type.Object({
68
68
  vd: Type.String({
69
- title: "Data Value.",
70
- description: "Octets in the Data Value are base64 encoded with the URL-safe alphabet as defined in Section 5 of [RFC4648], with padding omitted."
69
+ title: 'Data Value.',
70
+ description: 'Octets in the Data Value are base64 encoded with the URL-safe alphabet as defined in Section 5 of [RFC4648], with padding omitted.'
71
71
  })
72
72
  })
73
73
  ])
74
74
  ], {
75
- description: "SenML schema for conversion results. This is limited to properties useful for the hello.nrfcloud.com/map application."
75
+ description: 'SenML schema for conversion results. This is limited to properties useful for the hello.nrfcloud.com/map application.'
76
76
  });
77
77
  export var SenML = Type.Array(Measurement, {
78
78
  minItems: 1
@@ -1,23 +1,23 @@
1
- import { describe, it } from "node:test";
2
- import { SenML } from "./SenMLSchema.js";
3
- import assert from "node:assert/strict";
4
- import { validate } from "../validate.js";
5
- void describe("SenMLType", function() {
6
- void it("it should validate a SenML payload", function() {
1
+ import { describe, it } from 'node:test';
2
+ import { SenML } from './SenMLSchema.js';
3
+ import assert from 'node:assert/strict';
4
+ import { validate } from '../validate.js';
5
+ void describe('SenMLType', function() {
6
+ void it('it should validate a SenML payload', function() {
7
7
  var example = [
8
8
  {
9
- bn: "14201/0/",
10
- n: "0",
9
+ bn: '14201/0/',
10
+ n: '0',
11
11
  v: 33.98755678796222,
12
12
  bt: 1698155694999
13
13
  },
14
14
  {
15
- n: "1",
15
+ n: '1',
16
16
  v: -84.506132079174634
17
17
  }
18
18
  ];
19
19
  var res = validate(SenML)(example);
20
- assert.equal("errors" in res, false);
21
- assert.deepEqual("value" in res && res.value, example);
20
+ assert.equal('errors' in res, false);
21
+ assert.deepEqual('value' in res && res.value, example);
22
22
  });
23
23
  });
@@ -1,8 +1,8 @@
1
1
  export var hasValue = function(m) {
2
2
  if (m === null) return false;
3
- if (typeof m !== "object") return false;
3
+ if (typeof m !== 'object') return false;
4
4
  var _ref, _ref1, _ref2, _ref3;
5
- 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;
5
+ 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;
6
6
  if (v === null || v === undefined) return false;
7
7
  return true;
8
8
  };
@@ -44,10 +44,10 @@ 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
- import { describe, it } from "node:test";
48
- import assert from "node:assert/strict";
49
- import { hasValue } from "./hasValue.js";
50
- void describe("hasValue() should determine whether an object has a value", function() {
47
+ import { describe, it } from 'node:test';
48
+ import assert from 'node:assert/strict';
49
+ import { hasValue } from './hasValue.js';
50
+ void describe('hasValue() should determine whether an object has a value', function() {
51
51
  var _loop = function(_i, _iter) {
52
52
  var _iter__i = _sliced_to_array(_iter[_i], 2), record = _iter__i[0], expected = _iter__i[1];
53
53
  void it("should determine that ".concat(JSON.stringify(record), " has a value: ").concat(JSON.stringify(expected)), function() {
@@ -84,10 +84,10 @@ function _unsupported_iterable_to_array(o, minLen) {
84
84
  if (n === "Map" || n === "Set") return Array.from(n);
85
85
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
86
86
  }
87
- import { instanceTs } from "../lwm2m/instanceTs.js";
88
- import { timestampResources } from "../lwm2m/timestampResources.js";
89
- import { definitions } from "../lwm2m/definitions.js";
90
- import { ResourceType } from "../lwm2m/LWM2MObjectInfo.js";
87
+ import { instanceTs } from '../lwm2m/instanceTs.js';
88
+ import { timestampResources } from '../lwm2m/timestampResources.js';
89
+ import { definitions } from '../lwm2m/definitions.js';
90
+ import { ResourceType } from '../lwm2m/LWM2MObjectInfo.js';
91
91
  /**
92
92
  * Convert LwM2M Object Instances to senML
93
93
  */ export var lwm2mToSenML = function(lwm2m) {
@@ -122,15 +122,15 @@ var toKey = function(def, resourceId) {
122
122
  var _def_Resources_resourceId;
123
123
  switch((_def_Resources_resourceId = def.Resources[resourceId]) === null || _def_Resources_resourceId === void 0 ? void 0 : _def_Resources_resourceId.Type){
124
124
  case ResourceType.String:
125
- return "vs";
125
+ return 'vs';
126
126
  case ResourceType.Boolean:
127
- return "vb";
127
+ return 'vb';
128
128
  case ResourceType.Float:
129
129
  case ResourceType.Integer:
130
130
  case ResourceType.Time:
131
- return "v";
131
+ return 'v';
132
132
  case ResourceType.Opaque:
133
- return "vd";
133
+ return 'vd';
134
134
  default:
135
135
  throw new Error("Unknown ResourceID ".concat(resourceId, " for LwM2M Object ").concat(def.ObjectID, "!"));
136
136
  }