@zwave-js/nvmedit 14.3.3 → 14.3.4
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/build/cjs/convert.js +36 -20
- package/build/cjs/convert.js.map +1 -1
- package/build/cjs/lib/NVM3.js +15 -7
- package/build/cjs/lib/NVM3.js.map +1 -1
- package/build/cjs/lib/NVM500.js +4 -0
- package/build/cjs/lib/NVM500.js.map +1 -1
- package/build/cjs/lib/common/routeCache.js +4 -0
- package/build/cjs/lib/common/routeCache.js.map +1 -1
- package/build/cjs/lib/common/sucUpdateEntry.js +3 -0
- package/build/cjs/lib/common/sucUpdateEntry.js.map +1 -1
- package/build/cjs/lib/common/utils.js +8 -0
- package/build/cjs/lib/common/utils.js.map +1 -1
- package/build/cjs/lib/io/BufferedNVMReader.js +4 -0
- package/build/cjs/lib/io/BufferedNVMReader.js.map +1 -1
- package/build/cjs/lib/io/NVMFileIO.js +4 -0
- package/build/cjs/lib/io/NVMFileIO.js.map +1 -1
- package/build/cjs/lib/io/NVMMemoryIO.js +4 -0
- package/build/cjs/lib/io/NVMMemoryIO.js.map +1 -1
- package/build/cjs/lib/nvm3/adapter.js +13 -8
- package/build/cjs/lib/nvm3/adapter.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationCCsFile.js +5 -0
- package/build/cjs/lib/nvm3/files/ApplicationCCsFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationDataFile.js +5 -0
- package/build/cjs/lib/nvm3/files/ApplicationDataFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationNameFile.js +5 -0
- package/build/cjs/lib/nvm3/files/ApplicationNameFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationRFConfigFile.js +5 -0
- package/build/cjs/lib/nvm3/files/ApplicationRFConfigFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationTypeFile.js +5 -0
- package/build/cjs/lib/nvm3/files/ApplicationTypeFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ControllerInfoFile.js +5 -0
- package/build/cjs/lib/nvm3/files/ControllerInfoFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/NVMFile.js +10 -0
- package/build/cjs/lib/nvm3/files/NVMFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/NodeInfoFiles.js +18 -0
- package/build/cjs/lib/nvm3/files/NodeInfoFiles.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ProtocolNodeMaskFiles.js +32 -0
- package/build/cjs/lib/nvm3/files/ProtocolNodeMaskFiles.js.map +1 -1
- package/build/cjs/lib/nvm3/files/RouteCacheFiles.js +10 -0
- package/build/cjs/lib/nvm3/files/RouteCacheFiles.js.map +1 -1
- package/build/cjs/lib/nvm3/files/SUCUpdateEntriesFile.js +9 -0
- package/build/cjs/lib/nvm3/files/SUCUpdateEntriesFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/VersionFiles.js +14 -0
- package/build/cjs/lib/nvm3/files/VersionFiles.js.map +1 -1
- package/build/cjs/lib/nvm3/object.js +8 -0
- package/build/cjs/lib/nvm3/object.js.map +1 -1
- package/build/cjs/lib/nvm3/page.js +4 -0
- package/build/cjs/lib/nvm3/page.js.map +1 -1
- package/build/cjs/lib/nvm3/utils.js +8 -0
- package/build/cjs/lib/nvm3/utils.js.map +1 -1
- package/build/cjs/lib/nvm500/EntryParsers.js +7 -0
- package/build/cjs/lib/nvm500/EntryParsers.js.map +1 -1
- package/build/cjs/lib/nvm500/adapter.js +4 -0
- package/build/cjs/lib/nvm500/adapter.js.map +1 -1
- package/build/cjs/lib/nvm500/shared.js +2 -0
- package/build/cjs/lib/nvm500/shared.js.map +1 -1
- package/package.json +4 -4
package/build/cjs/convert.js
CHANGED
|
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
9
|
var __export = (target, all) => {
|
|
9
10
|
for (var name in all)
|
|
10
11
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -63,6 +64,7 @@ var import_shared = require("./lib/nvm500/shared.js");
|
|
|
63
64
|
function nodeHasInfo(node) {
|
|
64
65
|
return !node.isVirtual || Object.keys(node).length > 1;
|
|
65
66
|
}
|
|
67
|
+
__name(nodeHasInfo, "nodeHasInfo");
|
|
66
68
|
function createEmptyPhysicalNode() {
|
|
67
69
|
return {
|
|
68
70
|
isVirtual: false,
|
|
@@ -87,6 +89,7 @@ function createEmptyPhysicalNode() {
|
|
|
87
89
|
nlwr: null
|
|
88
90
|
};
|
|
89
91
|
}
|
|
92
|
+
__name(createEmptyPhysicalNode, "createEmptyPhysicalNode");
|
|
90
93
|
function createEmptyLRNode() {
|
|
91
94
|
return {
|
|
92
95
|
isListening: false,
|
|
@@ -102,20 +105,21 @@ function createEmptyLRNode() {
|
|
|
102
105
|
specificDeviceClass: null
|
|
103
106
|
};
|
|
104
107
|
}
|
|
108
|
+
__name(createEmptyLRNode, "createEmptyLRNode");
|
|
105
109
|
function nvmObjectsToJSON(objects) {
|
|
106
110
|
const nodes = /* @__PURE__ */ new Map();
|
|
107
|
-
const getNode = (id) => {
|
|
111
|
+
const getNode = /* @__PURE__ */ __name((id) => {
|
|
108
112
|
if (!nodes.has(id))
|
|
109
113
|
nodes.set(id, createEmptyPhysicalNode());
|
|
110
114
|
return nodes.get(id);
|
|
111
|
-
};
|
|
115
|
+
}, "getNode");
|
|
112
116
|
const lrNodes = /* @__PURE__ */ new Map();
|
|
113
|
-
const getLRNode = (id) => {
|
|
117
|
+
const getLRNode = /* @__PURE__ */ __name((id) => {
|
|
114
118
|
if (!lrNodes.has(id))
|
|
115
119
|
lrNodes.set(id, createEmptyLRNode());
|
|
116
120
|
return lrNodes.get(id);
|
|
117
|
-
};
|
|
118
|
-
const getObject = (id) => {
|
|
121
|
+
}, "getLRNode");
|
|
122
|
+
const getObject = /* @__PURE__ */ __name((id) => {
|
|
119
123
|
if (typeof id === "number") {
|
|
120
124
|
return objects.get(id);
|
|
121
125
|
} else {
|
|
@@ -124,23 +128,23 @@ function nvmObjectsToJSON(objects) {
|
|
|
124
128
|
return obj;
|
|
125
129
|
}
|
|
126
130
|
}
|
|
127
|
-
};
|
|
128
|
-
const getObjectOrThrow = (id) => {
|
|
131
|
+
}, "getObject");
|
|
132
|
+
const getObjectOrThrow = /* @__PURE__ */ __name((id) => {
|
|
129
133
|
const ret2 = getObject(id);
|
|
130
134
|
if (ret2)
|
|
131
135
|
return ret2;
|
|
132
136
|
throw new import_error.ZWaveError(`Object${typeof id === "number" ? ` ${(0, import_safe2.num2hex)(id)} (${id})` : ""} not found!`, import_error.ZWaveErrorCodes.NVM_ObjectNotFound);
|
|
133
|
-
};
|
|
134
|
-
const getFileOrThrow = (id, fileVersion) => {
|
|
137
|
+
}, "getObjectOrThrow");
|
|
138
|
+
const getFileOrThrow = /* @__PURE__ */ __name((id, fileVersion) => {
|
|
135
139
|
const obj = getObjectOrThrow(id);
|
|
136
140
|
return import_files.NVMFile.from(obj.key, obj.data, fileVersion);
|
|
137
|
-
};
|
|
138
|
-
const getFile = (id, fileVersion) => {
|
|
141
|
+
}, "getFileOrThrow");
|
|
142
|
+
const getFile = /* @__PURE__ */ __name((id, fileVersion) => {
|
|
139
143
|
const obj = getObject(id);
|
|
140
144
|
if (!obj || !obj.data)
|
|
141
145
|
return void 0;
|
|
142
146
|
return import_files.NVMFile.from(obj.key, obj.data, fileVersion);
|
|
143
|
-
};
|
|
147
|
+
}, "getFile");
|
|
144
148
|
const protocolVersionFile = getFileOrThrow(import_files.ProtocolVersionFileID, "7.0.0");
|
|
145
149
|
const protocolFileFormat = protocolVersionFile.format;
|
|
146
150
|
const protocolVersion = `${protocolVersionFile.major}.${protocolVersionFile.minor}.${protocolVersionFile.patch}`;
|
|
@@ -156,11 +160,11 @@ function nvmObjectsToJSON(objects) {
|
|
|
156
160
|
const routeCacheExists = new Set(getFileOrThrow(import_files.ProtocolRouteCacheExistsNodeMaskFileID, protocolVersion).nodeIds);
|
|
157
161
|
for (const id of nodeIds) {
|
|
158
162
|
const node = getNode(id);
|
|
159
|
-
const rememberOnlyVirtual = () => {
|
|
163
|
+
const rememberOnlyVirtual = /* @__PURE__ */ __name(() => {
|
|
160
164
|
nodes.set(id, {
|
|
161
165
|
isVirtual: true
|
|
162
166
|
});
|
|
163
|
-
};
|
|
167
|
+
}, "rememberOnlyVirtual");
|
|
164
168
|
let nodeInfo;
|
|
165
169
|
try {
|
|
166
170
|
if (protocolFileFormat === 0) {
|
|
@@ -311,6 +315,7 @@ function nvmObjectsToJSON(objects) {
|
|
|
311
315
|
}
|
|
312
316
|
return ret;
|
|
313
317
|
}
|
|
318
|
+
__name(nvmObjectsToJSON, "nvmObjectsToJSON");
|
|
314
319
|
function nvmJSONNodeToNodeInfo(nodeId, node) {
|
|
315
320
|
return {
|
|
316
321
|
nodeId,
|
|
@@ -331,6 +336,7 @@ function nvmJSONNodeToNodeInfo(nodeId, node) {
|
|
|
331
336
|
])
|
|
332
337
|
};
|
|
333
338
|
}
|
|
339
|
+
__name(nvmJSONNodeToNodeInfo, "nvmJSONNodeToNodeInfo");
|
|
334
340
|
function nvmJSONLRNodeToLRNodeInfo(nodeId, node) {
|
|
335
341
|
return {
|
|
336
342
|
nodeId,
|
|
@@ -349,6 +355,7 @@ function nvmJSONLRNodeToLRNodeInfo(nodeId, node) {
|
|
|
349
355
|
])
|
|
350
356
|
};
|
|
351
357
|
}
|
|
358
|
+
__name(nvmJSONLRNodeToLRNodeInfo, "nvmJSONLRNodeToLRNodeInfo");
|
|
352
359
|
function nvmJSONControllerToFileOptions(ctrlr) {
|
|
353
360
|
const ret = {
|
|
354
361
|
homeId: import_safe2.Bytes.from(ctrlr.homeId.replace(/^0x/, ""), "hex"),
|
|
@@ -375,6 +382,7 @@ function nvmJSONControllerToFileOptions(ctrlr) {
|
|
|
375
382
|
}
|
|
376
383
|
return ret;
|
|
377
384
|
}
|
|
385
|
+
__name(nvmJSONControllerToFileOptions, "nvmJSONControllerToFileOptions");
|
|
378
386
|
async function nvmToJSON(buffer, debugLogs = false) {
|
|
379
387
|
const io = new import_NVMMemoryIO.NVMMemoryIO(buffer);
|
|
380
388
|
const nvm3 = new import_NVM3.NVM3(io);
|
|
@@ -394,17 +402,17 @@ async function nvmToJSON(buffer, debugLogs = false) {
|
|
|
394
402
|
])
|
|
395
403
|
};
|
|
396
404
|
const nodes = /* @__PURE__ */ new Map();
|
|
397
|
-
const getNode = (id) => {
|
|
405
|
+
const getNode = /* @__PURE__ */ __name((id) => {
|
|
398
406
|
if (!nodes.has(id))
|
|
399
407
|
nodes.set(id, createEmptyPhysicalNode());
|
|
400
408
|
return nodes.get(id);
|
|
401
|
-
};
|
|
409
|
+
}, "getNode");
|
|
402
410
|
const lrNodes = /* @__PURE__ */ new Map();
|
|
403
|
-
const getLRNode = (id) => {
|
|
411
|
+
const getLRNode = /* @__PURE__ */ __name((id) => {
|
|
404
412
|
if (!lrNodes.has(id))
|
|
405
413
|
lrNodes.set(id, createEmptyLRNode());
|
|
406
414
|
return lrNodes.get(id);
|
|
407
|
-
};
|
|
415
|
+
}, "getLRNode");
|
|
408
416
|
const protocolFileFormat = await adapter.get({
|
|
409
417
|
domain: "controller",
|
|
410
418
|
type: "protocolFileFormat"
|
|
@@ -582,6 +590,7 @@ async function nvmToJSON(buffer, debugLogs = false) {
|
|
|
582
590
|
}
|
|
583
591
|
return ret;
|
|
584
592
|
}
|
|
593
|
+
__name(nvmToJSON, "nvmToJSON");
|
|
585
594
|
async function nvm500ToJSON(buffer) {
|
|
586
595
|
const io = new import_NVMMemoryIO.NVMMemoryIO(buffer);
|
|
587
596
|
const nvm = new import_NVM500.NVM500(io);
|
|
@@ -764,6 +773,7 @@ async function nvm500ToJSON(buffer) {
|
|
|
764
773
|
nodes
|
|
765
774
|
};
|
|
766
775
|
}
|
|
776
|
+
__name(nvm500ToJSON, "nvm500ToJSON");
|
|
767
777
|
async function jsonToNVM(json, targetSDKVersion) {
|
|
768
778
|
const parsedVersion = (0, import_parse.default)(targetSDKVersion);
|
|
769
779
|
if (!parsedVersion) {
|
|
@@ -775,10 +785,10 @@ async function jsonToNVM(json, targetSDKVersion) {
|
|
|
775
785
|
const io = new import_NVMMemoryIO.NVMMemoryIO(ret);
|
|
776
786
|
const nvm3 = new import_NVM3.NVM3(io);
|
|
777
787
|
await nvm3.erase(json.meta);
|
|
778
|
-
const serializeFile = async (file) => {
|
|
788
|
+
const serializeFile = /* @__PURE__ */ __name(async (file) => {
|
|
779
789
|
const { key, data } = file.serialize();
|
|
780
790
|
await nvm3.set(key, data);
|
|
781
|
-
};
|
|
791
|
+
}, "serializeFile");
|
|
782
792
|
let targetApplicationVersion;
|
|
783
793
|
let targetProtocolVersion;
|
|
784
794
|
let targetProtocolFormat;
|
|
@@ -954,6 +964,7 @@ async function jsonToNVM(json, targetSDKVersion) {
|
|
|
954
964
|
await io.close();
|
|
955
965
|
return ret;
|
|
956
966
|
}
|
|
967
|
+
__name(jsonToNVM, "jsonToNVM");
|
|
957
968
|
async function jsonToNVM500(json, protocolVersion) {
|
|
958
969
|
const impl = import_impls.nvm500Impls.find((p) => p.protocolVersions.includes(protocolVersion) && p.name.toLowerCase().startsWith(json.meta.library));
|
|
959
970
|
if (!impl) {
|
|
@@ -1054,6 +1065,7 @@ async function jsonToNVM500(json, protocolVersion) {
|
|
|
1054
1065
|
await io.close();
|
|
1055
1066
|
return ret;
|
|
1056
1067
|
}
|
|
1068
|
+
__name(jsonToNVM500, "jsonToNVM500");
|
|
1057
1069
|
function json500To700(json, truncateApplicationData) {
|
|
1058
1070
|
const source = (0, import_safe2.cloneDeep)(json);
|
|
1059
1071
|
let controllerNode = source.nodes[source.controller.nodeId || 1];
|
|
@@ -1144,6 +1156,7 @@ function json500To700(json, truncateApplicationData) {
|
|
|
1144
1156
|
};
|
|
1145
1157
|
return ret;
|
|
1146
1158
|
}
|
|
1159
|
+
__name(json500To700, "json500To700");
|
|
1147
1160
|
function json700To500(json) {
|
|
1148
1161
|
const source = (0, import_safe2.cloneDeep)(json);
|
|
1149
1162
|
let ownHomeId;
|
|
@@ -1195,6 +1208,7 @@ function json700To500(json) {
|
|
|
1195
1208
|
};
|
|
1196
1209
|
return ret;
|
|
1197
1210
|
}
|
|
1211
|
+
__name(json700To500, "json700To500");
|
|
1198
1212
|
async function migrateNVM(sourceNVM, targetNVM) {
|
|
1199
1213
|
let source;
|
|
1200
1214
|
let target;
|
|
@@ -1291,6 +1305,7 @@ async function migrateNVM(sourceNVM, targetNVM) {
|
|
|
1291
1305
|
return jsonToNVM(json, target.json.controller.applicationVersion);
|
|
1292
1306
|
}
|
|
1293
1307
|
}
|
|
1308
|
+
__name(migrateNVM, "migrateNVM");
|
|
1294
1309
|
function hasShiftedAppVersion800File(json) {
|
|
1295
1310
|
if (!json.meta.sharedFileSystem)
|
|
1296
1311
|
return false;
|
|
@@ -1307,6 +1322,7 @@ function hasShiftedAppVersion800File(json) {
|
|
|
1307
1322
|
}
|
|
1308
1323
|
return true;
|
|
1309
1324
|
}
|
|
1325
|
+
__name(hasShiftedAppVersion800File, "hasShiftedAppVersion800File");
|
|
1310
1326
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1311
1327
|
0 && (module.exports = {
|
|
1312
1328
|
json500To700,
|
package/build/cjs/convert.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/convert.ts"],
|
|
4
4
|
"sourcesContent": ["import {\n\tZWaveError,\n\tZWaveErrorCodes,\n\tisZWaveError,\n} from \"@zwave-js/core/error\";\nimport {\n\ttype CommandClasses,\n\tControllerCapabilityFlags,\n\tMAX_NODES,\n\tNodeIDType,\n\ttype NodeProtocolInfo,\n\tNodeType,\n\tRFRegion,\n\tstripUndefined,\n} from \"@zwave-js/core/safe\";\nimport {\n\tBytes,\n\tbuffer2hex,\n\tcloneDeep,\n\tnum2hex,\n\tpick,\n} from \"@zwave-js/shared/safe\";\nimport { isObject } from \"alcalzone-shared/typeguards\";\nimport type { SemVer } from \"semver\";\nimport semverGte from \"semver/functions/gte.js\";\nimport semverLt from \"semver/functions/lt.js\";\nimport semverLte from \"semver/functions/lte.js\";\nimport semverParse from \"semver/functions/parse.js\";\nimport { MAX_PROTOCOL_FILE_FORMAT, SUC_MAX_UPDATES } from \"./consts.js\";\nimport { NVM3, type NVM3Meta } from \"./lib/NVM3.js\";\nimport { NVM500 } from \"./lib/NVM500.js\";\nimport {\n\ttype Route,\n\ttype RouteCache,\n\tgetEmptyRoute,\n} from \"./lib/common/routeCache.js\";\nimport { type SUCUpdateEntry } from \"./lib/common/sucUpdateEntry.js\";\nimport { NVMMemoryIO } from \"./lib/io/NVMMemoryIO.js\";\nimport { NVM3Adapter } from \"./lib/nvm3/adapter.js\";\nimport {\n\tZWAVE_APPLICATION_NVM_SIZE,\n\tZWAVE_PROTOCOL_NVM_SIZE,\n\tZWAVE_SHARED_NVM_SIZE,\n} from \"./lib/nvm3/consts.js\";\nimport {\n\ttype ApplicationNameFile,\n\tApplicationNameFileID,\n} from \"./lib/nvm3/files/ApplicationNameFile.js\";\nimport {\n\tApplicationCCsFile,\n\tApplicationCCsFileID,\n\ttype ApplicationDataFile,\n\tApplicationDataFileID,\n\tApplicationRFConfigFile,\n\tApplicationRFConfigFileID,\n\tApplicationTypeFile,\n\tApplicationTypeFileID,\n\tApplicationVersionFile,\n\tApplicationVersionFile800,\n\tApplicationVersionFile800ID,\n\tApplicationVersionFileID,\n\tControllerInfoFile,\n\tControllerInfoFileID,\n\ttype ControllerInfoFileOptions,\n\ttype LRNodeInfo,\n\ttype LRNodeInfoFileV5,\n\tNVMFile,\n\ttype NodeInfo,\n\ttype NodeInfoFileV0,\n\ttype NodeInfoFileV1,\n\ttype ProtocolAppRouteLockNodeMaskFile,\n\tProtocolAppRouteLockNodeMaskFileID,\n\ttype ProtocolLRNodeListFile,\n\tProtocolLRNodeListFileID,\n\ttype ProtocolNodeListFile,\n\tProtocolNodeListFileID,\n\ttype ProtocolPendingDiscoveryNodeMaskFile,\n\tProtocolPendingDiscoveryNodeMaskFileID,\n\ttype ProtocolPreferredRepeatersFile,\n\tProtocolPreferredRepeatersFileID,\n\tProtocolRouteCacheExistsNodeMaskFile,\n\tProtocolRouteCacheExistsNodeMaskFileID,\n\ttype ProtocolRouteSlaveSUCNodeMaskFile,\n\tProtocolRouteSlaveSUCNodeMaskFileID,\n\ttype ProtocolSUCPendingUpdateNodeMaskFile,\n\tProtocolSUCPendingUpdateNodeMaskFileID,\n\tProtocolVersionFile,\n\tProtocolVersionFileID,\n\ttype ProtocolVirtualNodeMaskFile,\n\tProtocolVirtualNodeMaskFileID,\n\ttype RouteCacheFileV0,\n\ttype RouteCacheFileV1,\n\tSUCUpdateEntriesFileIDV0,\n\ttype SUCUpdateEntriesFileV0,\n\ttype SUCUpdateEntriesFileV5,\n\tSUC_UPDATES_PER_FILE_V5,\n\tnodeIdToLRNodeInfoFileIDV5,\n\tnodeIdToNodeInfoFileIDV0,\n\tnodeIdToNodeInfoFileIDV1,\n\tnodeIdToRouteCacheFileIDV0,\n\tnodeIdToRouteCacheFileIDV1,\n\tsucUpdateIndexToSUCUpdateEntriesFileIDV5,\n} from \"./lib/nvm3/files/index.js\";\nimport type { NVM3Object } from \"./lib/nvm3/object.js\";\nimport { dumpNVM, mapToObject } from \"./lib/nvm3/utils.js\";\nimport { NVM500Adapter } from \"./lib/nvm500/adapter.js\";\nimport { nvm500Impls } from \"./lib/nvm500/impls/index.js\";\nimport { resolveLayout } from \"./lib/nvm500/shared.js\";\nimport {\n\ttype NVM500JSON,\n\ttype NVM500JSONController,\n\ttype NVM500JSONNode,\n\ttype NVM500Meta,\n} from \"./nvm500/NVMParser.js\";\n\nexport interface NVMJSON {\n\tformat: number; // protocol file format\n\tapplicationFileFormat?: number;\n\tmeta?: NVM3Meta;\n\tcontroller: NVMJSONController;\n\tnodes: Record<number, NVMJSONNode>;\n\tlrNodes?: Record<number, NVMJSONLRNode>;\n}\n\nexport type NVMJSONWithMeta = NVMJSON & { meta: NVM3Meta };\n\nexport interface NVMJSONController {\n\tprotocolVersion: string;\n\tapplicationVersion: string;\n\thomeId: string;\n\tnodeId: number;\n\tlastNodeId: number;\n\tstaticControllerNodeId: number;\n\tsucLastIndex: number;\n\tcontrollerConfiguration: number;\n\tsucUpdateEntries: SUCUpdateEntry[];\n\tsucAwarenessPushNeeded?: number | null;\n\tmaxNodeId: number;\n\treservedId: number;\n\tsystemState: number;\n\tlastNodeIdLR?: number | null;\n\tmaxNodeIdLR?: number | null;\n\treservedIdLR?: number | null;\n\tprimaryLongRangeChannelId?: number | null;\n\tdcdcConfig?: number | null;\n\trfConfig?: NVMJSONControllerRFConfig | null;\n\tpreferredRepeaters?: number[] | null;\n\n\tisListening: boolean;\n\toptionalFunctionality: boolean;\n\tgenericDeviceClass: number;\n\tspecificDeviceClass: number;\n\n\tcommandClasses: {\n\t\tincludedInsecurely: CommandClasses[];\n\t\tincludedSecurelyInsecureCCs: CommandClasses[];\n\t\tincludedSecurelySecureCCs: CommandClasses[];\n\t};\n\n\tapplicationData?: string | null;\n\tapplicationName?: string | null;\n}\n\nexport interface NVMJSONControllerRFConfig {\n\trfRegion: RFRegion;\n\ttxPower: number;\n\tmeasured0dBm: number;\n\tenablePTI: number | null;\n\tmaxTXPower: number | null;\n\tnodeIdType: NodeIDType | null;\n}\n\nexport interface NVMJSONNodeWithInfo\n\textends Omit<NodeProtocolInfo, \"hasSpecificDeviceClass\">\n{\n\tisVirtual: boolean;\n\n\tgenericDeviceClass: number;\n\tspecificDeviceClass: number | null;\n\tneighbors: number[];\n\tsucUpdateIndex: number;\n\n\tappRouteLock: boolean;\n\trouteSlaveSUC: boolean;\n\tsucPendingUpdate: boolean;\n\tpendingDiscovery: boolean;\n\n\tlwr?: Route | null;\n\tnlwr?: Route | null;\n}\n\n// Unlike NVMJSONNodeWithInfo this does not carry any node information\nexport interface NVMJSONVirtualNode {\n\tisVirtual: true;\n}\n\nexport interface NVMJSONLRNode\n\textends Omit<NodeProtocolInfo, \"hasSpecificDeviceClass\">\n{\n\tgenericDeviceClass: number;\n\tspecificDeviceClass?: number | null;\n}\n\nexport type NVMJSONNode = NVMJSONNodeWithInfo | NVMJSONVirtualNode;\n\ntype ParsedNVM =\n\t| {\n\t\ttype: 500;\n\t\tjson: Required<NVM500JSON>;\n\t}\n\t| {\n\t\ttype: 700;\n\t\tjson: NVMJSONWithMeta;\n\t}\n\t| {\n\t\ttype: \"unknown\";\n\t};\n\nexport function nodeHasInfo(node: NVMJSONNode): node is NVMJSONNodeWithInfo {\n\treturn !node.isVirtual || Object.keys(node).length > 1;\n}\n\nfunction createEmptyPhysicalNode(): NVMJSONNodeWithInfo {\n\treturn {\n\t\tisVirtual: false,\n\t\tisListening: false,\n\t\tisFrequentListening: false,\n\t\tisRouting: false,\n\t\tsupportedDataRates: [],\n\t\tprotocolVersion: 0,\n\t\toptionalFunctionality: false,\n\t\tnodeType: NodeType[\"End Node\"],\n\t\tsupportsSecurity: false,\n\t\tsupportsBeaming: false,\n\t\tgenericDeviceClass: 0,\n\t\tspecificDeviceClass: null,\n\t\tneighbors: [],\n\t\tsucUpdateIndex: 0,\n\t\tappRouteLock: false,\n\t\trouteSlaveSUC: false,\n\t\tsucPendingUpdate: false,\n\t\tpendingDiscovery: false,\n\t\tlwr: null,\n\t\tnlwr: null,\n\t};\n}\n\nfunction createEmptyLRNode(): NVMJSONLRNode {\n\treturn {\n\t\tisListening: false,\n\t\tisFrequentListening: false,\n\t\tisRouting: false,\n\t\tsupportedDataRates: [],\n\t\tprotocolVersion: 3,\n\t\toptionalFunctionality: false,\n\t\tnodeType: NodeType[\"End Node\"],\n\t\tsupportsSecurity: true,\n\t\tsupportsBeaming: false,\n\t\tgenericDeviceClass: 0,\n\t\tspecificDeviceClass: null,\n\t};\n}\n\n/** Converts a compressed set of NVM objects to a JSON representation */\nexport function nvmObjectsToJSON(\n\tobjects: ReadonlyMap<number, NVM3Object>,\n): NVMJSON {\n\tconst nodes = new Map<number, NVMJSONNode>();\n\tconst getNode = (id: number): NVMJSONNode => {\n\t\tif (!nodes.has(id)) nodes.set(id, createEmptyPhysicalNode());\n\t\treturn nodes.get(id)!;\n\t};\n\n\tconst lrNodes = new Map<number, NVMJSONLRNode>();\n\tconst getLRNode = (id: number): NVMJSONLRNode => {\n\t\tif (!lrNodes.has(id)) lrNodes.set(id, createEmptyLRNode());\n\t\treturn lrNodes.get(id)!;\n\t};\n\n\tconst getObject = (\n\t\tid: number | ((id: number) => boolean),\n\t): NVM3Object | undefined => {\n\t\tif (typeof id === \"number\") {\n\t\t\treturn objects.get(id);\n\t\t} else {\n\t\t\tfor (const [key, obj] of objects) {\n\t\t\t\tif (id(key)) return obj;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst getObjectOrThrow = (\n\t\tid: number | ((id: number) => boolean),\n\t): NVM3Object => {\n\t\tconst ret = getObject(id);\n\t\tif (ret) return ret;\n\t\tthrow new ZWaveError(\n\t\t\t`Object${\n\t\t\t\ttypeof id === \"number\" ? ` ${num2hex(id)} (${id})` : \"\"\n\t\t\t} not found!`,\n\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t);\n\t};\n\n\tconst getFileOrThrow = <T extends NVMFile>(\n\t\tid: number | ((id: number) => boolean),\n\t\tfileVersion: string,\n\t): T => {\n\t\tconst obj = getObjectOrThrow(id);\n\t\treturn NVMFile.from(obj.key, obj.data!, fileVersion) as T;\n\t};\n\n\tconst getFile = <T extends NVMFile>(\n\t\tid: number | ((id: number) => boolean),\n\t\tfileVersion: string,\n\t): T | undefined => {\n\t\tconst obj = getObject(id);\n\t\tif (!obj || !obj.data) return undefined;\n\t\treturn NVMFile.from(obj.key, obj.data, fileVersion) as T;\n\t};\n\n\t// === Protocol NVM files ===\n\n\t// Figure out how to parse the individual files\n\tconst protocolVersionFile = getFileOrThrow<ProtocolVersionFile>(\n\t\tProtocolVersionFileID,\n\t\t\"7.0.0\", // We don't know the version here yet\n\t);\n\tconst protocolFileFormat = protocolVersionFile.format;\n\tconst protocolVersion =\n\t\t`${protocolVersionFile.major}.${protocolVersionFile.minor}.${protocolVersionFile.patch}`;\n\n\t// Bail early if the NVM uses a protocol file format that's newer than we support\n\tif (protocolFileFormat > MAX_PROTOCOL_FILE_FORMAT) {\n\t\tthrow new ZWaveError(\n\t\t\t`Unsupported protocol file format: ${protocolFileFormat}`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t\t{ protocolFileFormat },\n\t\t);\n\t}\n\n\t// Figure out which nodes exist\n\tconst nodeIds = getFileOrThrow<ProtocolNodeListFile>(\n\t\tProtocolNodeListFileID,\n\t\tprotocolVersion,\n\t).nodeIds;\n\n\t// Read all flags for all nodes\n\tconst appRouteLock = new Set(\n\t\tgetFileOrThrow<ProtocolAppRouteLockNodeMaskFile>(\n\t\t\tProtocolAppRouteLockNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst routeSlaveSUC = new Set(\n\t\tgetFileOrThrow<ProtocolRouteSlaveSUCNodeMaskFile>(\n\t\t\tProtocolRouteSlaveSUCNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst sucPendingUpdate = new Set(\n\t\tgetFileOrThrow<ProtocolSUCPendingUpdateNodeMaskFile>(\n\t\t\tProtocolSUCPendingUpdateNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst isVirtual = new Set(\n\t\tgetFileOrThrow<ProtocolVirtualNodeMaskFile>(\n\t\t\tProtocolVirtualNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst pendingDiscovery = new Set(\n\t\tgetFileOrThrow<ProtocolPendingDiscoveryNodeMaskFile>(\n\t\t\tProtocolPendingDiscoveryNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst routeCacheExists = new Set(\n\t\tgetFileOrThrow<ProtocolRouteCacheExistsNodeMaskFile>(\n\t\t\tProtocolRouteCacheExistsNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\n\t// And create each node entry, including virtual ones\n\tfor (const id of nodeIds) {\n\t\tconst node = getNode(id) as NVMJSONNodeWithInfo;\n\n\t\tconst rememberOnlyVirtual = () => {\n\t\t\tnodes.set(id, {\n\t\t\t\tisVirtual: true,\n\t\t\t});\n\t\t};\n\n\t\t// Find node info\n\t\tlet nodeInfo: NodeInfo;\n\t\ttry {\n\t\t\tif (protocolFileFormat === 0) {\n\t\t\t\tconst fileId = nodeIdToNodeInfoFileIDV0(id);\n\t\t\t\tconst file = getFileOrThrow<NodeInfoFileV0>(\n\t\t\t\t\tfileId,\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t);\n\t\t\t\tnodeInfo = file.nodeInfo;\n\t\t\t} else {\n\t\t\t\tconst fileId = nodeIdToNodeInfoFileIDV1(id);\n\t\t\t\tconst file = getFileOrThrow<NodeInfoFileV1>(\n\t\t\t\t\tfileId,\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t);\n\t\t\t\tnodeInfo = file.nodeInfos.find((i) => i.nodeId === id)!;\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\tif (e.message.includes(\"Object not found\")) {\n\t\t\t\trememberOnlyVirtual();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow e;\n\t\t}\n\n\t\tObject.assign(node, nodeInfo);\n\n\t\t// Evaluate flags\n\t\tnode.isVirtual = isVirtual.has(id);\n\t\tnode.appRouteLock = appRouteLock.has(id);\n\t\tnode.routeSlaveSUC = routeSlaveSUC.has(id);\n\t\tnode.sucPendingUpdate = sucPendingUpdate.has(id);\n\t\tnode.pendingDiscovery = pendingDiscovery.has(id);\n\t\tif (routeCacheExists.has(id)) {\n\t\t\tlet routeCache: RouteCache | undefined;\n\t\t\tif (protocolFileFormat === 0) {\n\t\t\t\tconst fileId = nodeIdToRouteCacheFileIDV0(id);\n\t\t\t\tconst file = getFile<RouteCacheFileV0>(fileId, protocolVersion);\n\t\t\t\trouteCache = file?.routeCache;\n\t\t\t} else {\n\t\t\t\tconst fileId = nodeIdToRouteCacheFileIDV1(id);\n\t\t\t\tconst file = getFile<RouteCacheFileV1>(fileId, protocolVersion);\n\t\t\t\trouteCache = file?.routeCaches.find((i) => i.nodeId === id);\n\t\t\t}\n\t\t\tif (routeCache) {\n\t\t\t\tnode.lwr = routeCache.lwr;\n\t\t\t\tnode.nlwr = routeCache.nlwr;\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error Some fields include a nodeId, but we don't need it\n\t\tdelete node.nodeId;\n\t}\n\n\t// If they exist, read info about LR nodes\n\tconst lrNodeIds = getFile<ProtocolLRNodeListFile>(\n\t\tProtocolLRNodeListFileID,\n\t\tprotocolVersion,\n\t)?.nodeIds;\n\tif (lrNodeIds) {\n\t\tfor (const id of lrNodeIds) {\n\t\t\tconst node = getLRNode(id);\n\n\t\t\t// Find node info\n\t\t\tconst fileId = nodeIdToLRNodeInfoFileIDV5(id);\n\t\t\tconst file = getFileOrThrow<LRNodeInfoFileV5>(\n\t\t\t\tfileId,\n\t\t\t\tprotocolVersion,\n\t\t\t);\n\t\t\tconst { nodeId, ...nodeInfo } = file.nodeInfos.find((i) =>\n\t\t\t\ti.nodeId === id\n\t\t\t)!;\n\n\t\t\tObject.assign(node, nodeInfo);\n\t\t}\n\t}\n\n\t// Now read info about the controller\n\tconst controllerInfoFile = getFileOrThrow<ControllerInfoFile>(\n\t\tControllerInfoFileID,\n\t\tprotocolVersion,\n\t);\n\n\tlet sucUpdateEntries: SUCUpdateEntry[];\n\tif (protocolFileFormat < 5) {\n\t\tsucUpdateEntries = getFileOrThrow<SUCUpdateEntriesFileV0>(\n\t\t\tSUCUpdateEntriesFileIDV0,\n\t\t\tprotocolVersion,\n\t\t).updateEntries;\n\t} else {\n\t\t// V5 has split the entries into multiple files\n\t\tsucUpdateEntries = [];\n\t\tfor (\n\t\t\tlet index = 0;\n\t\t\tindex < SUC_MAX_UPDATES;\n\t\t\tindex += SUC_UPDATES_PER_FILE_V5\n\t\t) {\n\t\t\tconst file = getFile<SUCUpdateEntriesFileV5>(\n\t\t\t\tsucUpdateIndexToSUCUpdateEntriesFileIDV5(index),\n\t\t\t\tprotocolVersion,\n\t\t\t);\n\t\t\tif (!file) break;\n\t\t\tsucUpdateEntries.push(...file.updateEntries);\n\t\t}\n\t}\n\n\t// === Application NVM files ===\n\n\tconst applicationVersionFile700 = getFile<ApplicationVersionFile>(\n\t\tApplicationVersionFileID,\n\t\t\"7.0.0\", // We don't know the version here yet\n\t);\n\tconst applicationVersionFile800 = getFile<ApplicationVersionFile800>(\n\t\tApplicationVersionFile800ID,\n\t\t\"7.0.0\", // We don't know the version here yet\n\t);\n\tconst applicationVersionFile = applicationVersionFile700\n\t\t?? applicationVersionFile800;\n\tif (!applicationVersionFile) {\n\t\tthrow new ZWaveError(\n\t\t\t\"ApplicationVersionFile not found!\",\n\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t);\n\t}\n\tconst applicationVersion =\n\t\t`${applicationVersionFile.major}.${applicationVersionFile.minor}.${applicationVersionFile.patch}`;\n\n\tconst rfConfigFile = getFile<ApplicationRFConfigFile>(\n\t\tApplicationRFConfigFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationCCsFile = getFileOrThrow<ApplicationCCsFile>(\n\t\tApplicationCCsFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationDataFile = getFile<ApplicationDataFile>(\n\t\tApplicationDataFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationTypeFile = getFileOrThrow<ApplicationTypeFile>(\n\t\tApplicationTypeFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationNameFile = getFile<ApplicationNameFile>(\n\t\tApplicationNameFileID,\n\t\tapplicationVersion,\n\t);\n\n\tconst preferredRepeaters = getFile<ProtocolPreferredRepeatersFile>(\n\t\tProtocolPreferredRepeatersFileID,\n\t\tapplicationVersion,\n\t)?.nodeIds;\n\n\tconst controllerProps = [\n\t\t\"nodeId\",\n\t\t\"lastNodeId\",\n\t\t\"staticControllerNodeId\",\n\t\t\"sucLastIndex\",\n\t\t\"controllerConfiguration\",\n\t\t\"sucAwarenessPushNeeded\",\n\t\t\"maxNodeId\",\n\t\t\"reservedId\",\n\t\t\"systemState\",\n\t\t\"lastNodeIdLR\",\n\t\t\"maxNodeIdLR\",\n\t\t\"reservedIdLR\",\n\t\t\"primaryLongRangeChannelId\",\n\t\t\"dcdcConfig\",\n\t] as const;\n\tconst controller: NVMJSONController = {\n\t\tprotocolVersion,\n\t\tapplicationVersion,\n\t\thomeId: buffer2hex(controllerInfoFile.homeId),\n\t\t...pick(controllerInfoFile, controllerProps),\n\t\t...pick(applicationTypeFile, [\n\t\t\t\"isListening\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t\tcommandClasses: pick(applicationCCsFile, [\n\t\t\t\"includedInsecurely\",\n\t\t\t\"includedSecurelyInsecureCCs\",\n\t\t\t\"includedSecurelySecureCCs\",\n\t\t]),\n\t\tpreferredRepeaters,\n\t\t...(rfConfigFile\n\t\t\t? {\n\t\t\t\trfConfig: {\n\t\t\t\t\trfRegion: rfConfigFile.rfRegion,\n\t\t\t\t\ttxPower: rfConfigFile.txPower,\n\t\t\t\t\tmeasured0dBm: rfConfigFile.measured0dBm,\n\t\t\t\t\tenablePTI: rfConfigFile.enablePTI ?? null,\n\t\t\t\t\tmaxTXPower: rfConfigFile.maxTXPower ?? null,\n\t\t\t\t\tnodeIdType: rfConfigFile.nodeIdType ?? null,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: {}),\n\t\tsucUpdateEntries,\n\t\tapplicationData: applicationDataFile?.applicationData.toString(\"hex\")\n\t\t\t?? null,\n\t\tapplicationName: applicationNameFile?.name ?? null,\n\t};\n\n\t// Make sure all props are defined\n\tconst optionalControllerProps = [\n\t\t\"sucAwarenessPushNeeded\",\n\t\t\"lastNodeIdLR\",\n\t\t\"maxNodeIdLR\",\n\t\t\"reservedIdLR\",\n\t\t\"primaryLongRangeChannelId\",\n\t\t\"dcdcConfig\",\n\t\t\"rfConfig\",\n\t\t\"preferredRepeaters\",\n\t\t\"applicationData\",\n\t] as const;\n\tfor (const prop of optionalControllerProps) {\n\t\tif (controller[prop] === undefined) controller[prop] = null;\n\t}\n\n\tconst ret: NVMJSON = {\n\t\tformat: protocolFileFormat,\n\t\tcontroller,\n\t\tnodes: mapToObject(nodes),\n\t};\n\tif (lrNodes.size > 0) {\n\t\tret.lrNodes = mapToObject(lrNodes);\n\t}\n\n\treturn ret;\n}\n\nfunction nvmJSONNodeToNodeInfo(\n\tnodeId: number,\n\tnode: NVMJSONNodeWithInfo,\n): NodeInfo {\n\treturn {\n\t\tnodeId,\n\t\t...pick(node, [\n\t\t\t\"isListening\",\n\t\t\t\"isFrequentListening\",\n\t\t\t\"isRouting\",\n\t\t\t\"supportedDataRates\",\n\t\t\t\"protocolVersion\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"nodeType\",\n\t\t\t\"supportsSecurity\",\n\t\t\t\"supportsBeaming\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t\t\"neighbors\",\n\t\t\t\"sucUpdateIndex\",\n\t\t]),\n\t};\n}\n\nfunction nvmJSONLRNodeToLRNodeInfo(\n\tnodeId: number,\n\tnode: NVMJSONLRNode,\n): LRNodeInfo {\n\treturn {\n\t\tnodeId,\n\t\t...pick(node, [\n\t\t\t\"isListening\",\n\t\t\t\"isFrequentListening\",\n\t\t\t\"isRouting\",\n\t\t\t\"supportedDataRates\",\n\t\t\t\"protocolVersion\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"nodeType\",\n\t\t\t\"supportsSecurity\",\n\t\t\t\"supportsBeaming\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t};\n}\n\nfunction nvmJSONControllerToFileOptions(\n\tctrlr: NVMJSONController,\n): ControllerInfoFileOptions {\n\tconst ret = {\n\t\thomeId: Bytes.from(ctrlr.homeId.replace(/^0x/, \"\"), \"hex\"),\n\t\tnodeId: ctrlr.nodeId,\n\t\tlastNodeId: ctrlr.lastNodeId,\n\t\tstaticControllerNodeId: ctrlr.staticControllerNodeId,\n\t\tsucLastIndex: ctrlr.sucLastIndex,\n\t\tcontrollerConfiguration: ctrlr.controllerConfiguration,\n\t\tmaxNodeId: ctrlr.maxNodeId,\n\t\treservedId: ctrlr.reservedId,\n\t\tsystemState: ctrlr.systemState,\n\t} as unknown as ControllerInfoFileOptions;\n\tif (ctrlr.sucAwarenessPushNeeded != undefined) {\n\t\t// @ts-expect-error We're dealing with a conditional object here\n\t\t// TS doesn't like that.\n\t\tret.sucAwarenessPushNeeded = ctrlr.sucAwarenessPushNeeded;\n\t} else {\n\t\tObject.assign(\n\t\t\tret,\n\t\t\tstripUndefined(\n\t\t\t\tpick(ctrlr, [\n\t\t\t\t\t\"sucAwarenessPushNeeded\",\n\t\t\t\t\t\"lastNodeIdLR\",\n\t\t\t\t\t\"maxNodeIdLR\",\n\t\t\t\t\t\"reservedIdLR\",\n\t\t\t\t\t\"primaryLongRangeChannelId\",\n\t\t\t\t\t\"dcdcConfig\",\n\t\t\t\t]),\n\t\t\t),\n\t\t);\n\t}\n\treturn ret;\n}\n\n/** Reads an NVM buffer of a 700+ series stick and returns its JSON representation */\nexport async function nvmToJSON(\n\tbuffer: Uint8Array,\n\tdebugLogs: boolean = false,\n): Promise<NVMJSONWithMeta> {\n\tconst io = new NVMMemoryIO(buffer);\n\tconst nvm3 = new NVM3(io);\n\tconst info = await nvm3.init();\n\n\tconst adapter = new NVM3Adapter(nvm3);\n\n\tif (debugLogs) {\n\t\t// Dump all pages, all raw objects in each page, and each object in its final state\n\t\tawait dumpNVM(nvm3);\n\t}\n\n\tconst firstPageHeader = info.isSharedFileSystem\n\t\t? info.sections.all.pages[0]\n\t\t: info.sections.protocol.pages[0];\n\n\tconst meta: NVM3Meta = {\n\t\tsharedFileSystem: info.isSharedFileSystem,\n\t\t...pick(firstPageHeader, [\n\t\t\t\"pageSize\",\n\t\t\t\"writeSize\",\n\t\t\t\"memoryMapped\",\n\t\t\t\"deviceFamily\",\n\t\t]),\n\t};\n\n\tconst nodes = new Map<number, NVMJSONNode>();\n\tconst getNode = (id: number): NVMJSONNode => {\n\t\tif (!nodes.has(id)) nodes.set(id, createEmptyPhysicalNode());\n\t\treturn nodes.get(id)!;\n\t};\n\n\tconst lrNodes = new Map<number, NVMJSONLRNode>();\n\tconst getLRNode = (id: number): NVMJSONLRNode => {\n\t\tif (!lrNodes.has(id)) lrNodes.set(id, createEmptyLRNode());\n\t\treturn lrNodes.get(id)!;\n\t};\n\n\tconst protocolFileFormat = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"protocolFileFormat\",\n\t}, true);\n\n\t// Bail early if the NVM uses a protocol file format that's newer than we support\n\tif (protocolFileFormat > MAX_PROTOCOL_FILE_FORMAT) {\n\t\tthrow new ZWaveError(\n\t\t\t`Unsupported protocol file format: ${protocolFileFormat}`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t\t{ protocolFileFormat },\n\t\t);\n\t}\n\n\tconst protocolVersion = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"protocolVersion\",\n\t}, true);\n\n\t// Read all flags for all nodes\n\tconst appRouteLock = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"appRouteLock\",\n\t\t}, true),\n\t);\n\tconst routeSlaveSUC = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"routeSlaveSUC\",\n\t\t}, true),\n\t);\n\tconst sucPendingUpdate = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"sucPendingUpdate\",\n\t\t}, true),\n\t);\n\tconst virtualNodeIds = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"virtualNodeIds\",\n\t\t}, true),\n\t);\n\tconst pendingDiscovery = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"pendingDiscovery\",\n\t\t}, true),\n\t);\n\n\t// Figure out which nodes exist\n\tconst nodeIds = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"nodeIds\",\n\t}, true);\n\n\t// And create each node entry, including virtual ones\n\tfor (const id of nodeIds) {\n\t\tconst node = getNode(id) as NVMJSONNodeWithInfo;\n\n\t\t// Find node info\n\t\tconst nodeInfo = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId: id,\n\t\t\ttype: \"info\",\n\t\t}, true);\n\n\t\tObject.assign(node, nodeInfo);\n\n\t\t// Evaluate flags\n\t\tnode.isVirtual = virtualNodeIds.has(id);\n\t\tnode.appRouteLock = appRouteLock.has(id);\n\t\tnode.routeSlaveSUC = routeSlaveSUC.has(id);\n\t\tnode.sucPendingUpdate = sucPendingUpdate.has(id);\n\t\tnode.pendingDiscovery = pendingDiscovery.has(id);\n\n\t\tconst routes = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId: id,\n\t\t\ttype: \"routes\",\n\t\t});\n\t\tif (routes) {\n\t\t\tnode.lwr = routes.lwr;\n\t\t\tnode.nlwr = routes.nlwr;\n\t\t}\n\n\t\t// @ts-expect-error Some fields include a nodeId, but we don't need it\n\t\tdelete node.nodeId;\n\t}\n\n\t// If they exist, read info about LR nodes\n\tconst lrNodeIds = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"lrNodeIds\",\n\t});\n\tif (lrNodeIds) {\n\t\tfor (const id of lrNodeIds) {\n\t\t\tconst node = getLRNode(id);\n\n\t\t\t// Find node info\n\t\t\tconst nodeInfo = await adapter.get({\n\t\t\t\tdomain: \"lrnode\",\n\t\t\t\tnodeId: id,\n\t\t\t\ttype: \"info\",\n\t\t\t}, true);\n\n\t\t\tObject.assign(node, nodeInfo);\n\t\t}\n\t}\n\n\t// Read info about the controller\n\tconst sucUpdateEntries = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"sucUpdateEntries\",\n\t}, true);\n\n\tconst applicationVersion = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationVersion\",\n\t}, true);\n\n\tconst applicationFileFormat = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationFileFormat\",\n\t}, true);\n\n\tconst applicationData = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationData\",\n\t});\n\n\tconst applicationName = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationName\",\n\t});\n\n\tconst preferredRepeaters = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"preferredRepeaters\",\n\t});\n\n\t// The following are a bit awkward to read one by one, so we just take the files\n\tconst controllerInfoFile = await adapter.getFile<ControllerInfoFile>(\n\t\tControllerInfoFileID,\n\t\ttrue,\n\t);\n\tconst rfConfigFile = await adapter.getFile<ApplicationRFConfigFile>(\n\t\tApplicationRFConfigFileID,\n\t);\n\tconst applicationCCsFile = await adapter.getFile<ApplicationCCsFile>(\n\t\tApplicationCCsFileID,\n\t\ttrue,\n\t);\n\tconst applicationTypeFile = await adapter.getFile<ApplicationTypeFile>(\n\t\tApplicationTypeFileID,\n\t\ttrue,\n\t);\n\n\tconst controller: NVMJSONController = {\n\t\tprotocolVersion,\n\t\tapplicationVersion,\n\t\thomeId: buffer2hex(controllerInfoFile.homeId),\n\t\t...pick(controllerInfoFile, [\n\t\t\t\"nodeId\",\n\t\t\t\"lastNodeId\",\n\t\t\t\"staticControllerNodeId\",\n\t\t\t\"sucLastIndex\",\n\t\t\t\"controllerConfiguration\",\n\t\t\t\"sucAwarenessPushNeeded\",\n\t\t\t\"maxNodeId\",\n\t\t\t\"reservedId\",\n\t\t\t\"systemState\",\n\t\t\t\"lastNodeIdLR\",\n\t\t\t\"maxNodeIdLR\",\n\t\t\t\"reservedIdLR\",\n\t\t\t\"primaryLongRangeChannelId\",\n\t\t\t\"dcdcConfig\",\n\t\t]),\n\t\t...pick(applicationTypeFile, [\n\t\t\t\"isListening\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t\tcommandClasses: pick(applicationCCsFile, [\n\t\t\t\"includedInsecurely\",\n\t\t\t\"includedSecurelyInsecureCCs\",\n\t\t\t\"includedSecurelySecureCCs\",\n\t\t]),\n\t\tpreferredRepeaters,\n\t\t...(rfConfigFile\n\t\t\t? {\n\t\t\t\trfConfig: {\n\t\t\t\t\trfRegion: rfConfigFile.rfRegion,\n\t\t\t\t\ttxPower: rfConfigFile.txPower,\n\t\t\t\t\tmeasured0dBm: rfConfigFile.measured0dBm,\n\t\t\t\t\tenablePTI: rfConfigFile.enablePTI ?? null,\n\t\t\t\t\tmaxTXPower: rfConfigFile.maxTXPower ?? null,\n\t\t\t\t\tnodeIdType: rfConfigFile.nodeIdType ?? null,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: {}),\n\t\tsucUpdateEntries,\n\t\tapplicationData:\n\t\t\t(applicationData && Bytes.view(applicationData).toString(\"hex\"))\n\t\t\t\t?? null,\n\t\tapplicationName: applicationName ?? null,\n\t};\n\n\t// Make sure all props are defined\n\tconst optionalControllerProps = [\n\t\t\"sucAwarenessPushNeeded\",\n\t\t\"lastNodeIdLR\",\n\t\t\"maxNodeIdLR\",\n\t\t\"reservedIdLR\",\n\t\t\"primaryLongRangeChannelId\",\n\t\t\"dcdcConfig\",\n\t\t\"rfConfig\",\n\t\t\"preferredRepeaters\",\n\t\t\"applicationData\",\n\t] as const;\n\tfor (const prop of optionalControllerProps) {\n\t\tif (controller[prop] === undefined) controller[prop] = null;\n\t}\n\n\tconst ret: NVMJSONWithMeta = {\n\t\tformat: protocolFileFormat,\n\t\tcontroller,\n\t\tnodes: mapToObject(nodes),\n\t\tmeta,\n\t};\n\tif (applicationFileFormat !== 0) {\n\t\tret.applicationFileFormat = applicationFileFormat;\n\t}\n\tif (lrNodes.size > 0) {\n\t\tret.lrNodes = mapToObject(lrNodes);\n\t}\n\treturn ret;\n}\n\n/** Reads an NVM buffer of a 500-series stick and returns its JSON representation */\nexport async function nvm500ToJSON(\n\tbuffer: Uint8Array,\n): Promise<Required<NVM500JSON>> {\n\tconst io = new NVMMemoryIO(buffer);\n\tconst nvm = new NVM500(io);\n\n\tconst info = await nvm.init();\n\tconst meta: NVM500Meta = {\n\t\tlibrary: info.library,\n\t\t...pick(info.nvmDescriptor, [\n\t\t\t\"manufacturerID\",\n\t\t\t\"firmwareID\",\n\t\t\t\"productType\",\n\t\t\t\"productID\",\n\t\t]),\n\t};\n\n\tconst adapter = new NVM500Adapter(nvm);\n\n\t// Read all flags for all nodes\n\tconst appRouteLock = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"appRouteLock\",\n\t\t}, true),\n\t);\n\tconst routeSlaveSUC = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"routeSlaveSUC\",\n\t\t}, true),\n\t);\n\tconst sucPendingUpdate = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"sucPendingUpdate\",\n\t\t}, true),\n\t);\n\tconst virtualNodeIds = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"virtualNodeIds\",\n\t\t}) ?? [],\n\t);\n\tconst pendingDiscovery = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"pendingDiscovery\",\n\t\t}, true),\n\t);\n\n\t// Figure out which nodes exist along with their info\n\tconst nodes: Record<number, NVM500JSONNode> = {};\n\tfor (let nodeId = 1; nodeId <= MAX_NODES; nodeId++) {\n\t\tconst nodeInfo = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId,\n\t\t\ttype: \"info\",\n\t\t});\n\t\tconst isVirtual = virtualNodeIds.has(nodeId);\n\t\tif (!nodeInfo) {\n\t\t\tif (isVirtual) {\n\t\t\t\tnodes[nodeId] = { isVirtual: true };\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst routes = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId,\n\t\t\ttype: \"routes\",\n\t\t});\n\n\t\t// @ts-expect-error Some fields include a nodeId, but we don't need it\n\t\tdelete nodeInfo.nodeId;\n\n\t\tnodes[nodeId] = {\n\t\t\t...nodeInfo,\n\t\t\tspecificDeviceClass: nodeInfo.specificDeviceClass ?? null,\n\t\t\tisVirtual,\n\n\t\t\tappRouteLock: appRouteLock.has(nodeId),\n\t\t\trouteSlaveSUC: routeSlaveSUC.has(nodeId),\n\t\t\tsucPendingUpdate: sucPendingUpdate.has(nodeId),\n\t\t\tpendingDiscovery: pendingDiscovery.has(nodeId),\n\n\t\t\tlwr: routes?.lwr ?? null,\n\t\t\tnlwr: routes?.nlwr ?? null,\n\t\t};\n\t}\n\n\t// Read info about the controller\n\tconst ownNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"nodeId\",\n\t}, true);\n\n\tconst ownHomeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"homeId\",\n\t}, true);\n\n\tlet learnedHomeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"learnedHomeId\",\n\t});\n\tif (learnedHomeId?.length === 4 && learnedHomeId.every((b) => b === 0)) {\n\t\tlearnedHomeId = undefined;\n\t}\n\n\tconst lastNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"lastNodeId\",\n\t}, true);\n\n\tconst maxNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"maxNodeId\",\n\t}, true);\n\n\tconst reservedId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"reservedId\",\n\t}, true);\n\n\tconst staticControllerNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"staticControllerNodeId\",\n\t}, true);\n\n\tconst sucLastIndex = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"sucLastIndex\",\n\t}, true);\n\n\tconst controllerConfiguration = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"controllerConfiguration\",\n\t}, true);\n\n\tconst commandClasses = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"commandClasses\",\n\t}, true);\n\n\tconst sucUpdateEntries = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"sucUpdateEntries\",\n\t}, true);\n\n\tconst applicationData = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationData\",\n\t});\n\n\tconst preferredRepeaters = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"preferredRepeaters\",\n\t}, true);\n\n\tconst systemState = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"systemState\",\n\t});\n\n\tconst watchdogStarted = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"watchdogStarted\",\n\t}, true);\n\n\tconst powerLevelNormal = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerLevelNormal\",\n\t});\n\tconst powerLevelLow = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerLevelLow\",\n\t});\n\tconst powerMode = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerMode\",\n\t});\n\tconst powerModeExtintEnable = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerModeExtintEnable\",\n\t});\n\tconst powerModeWutTimeout = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerModeWutTimeout\",\n\t});\n\n\tconst controller: NVM500JSONController = {\n\t\tprotocolVersion: info.nvmDescriptor.protocolVersion,\n\t\tapplicationVersion: info.nvmDescriptor.firmwareVersion,\n\t\townHomeId: buffer2hex(ownHomeId),\n\t\tlearnedHomeId: learnedHomeId\n\t\t\t? buffer2hex(learnedHomeId)\n\t\t\t: null,\n\t\tnodeId: ownNodeId,\n\t\tlastNodeId,\n\t\tstaticControllerNodeId,\n\t\tsucLastIndex,\n\t\tcontrollerConfiguration,\n\t\tsucUpdateEntries,\n\t\tmaxNodeId,\n\t\treservedId,\n\t\tsystemState,\n\t\twatchdogStarted,\n\t\trfConfig: {\n\t\t\tpowerLevelNormal,\n\t\t\tpowerLevelLow,\n\t\t\tpowerMode,\n\t\t\tpowerModeExtintEnable,\n\t\t\tpowerModeWutTimeout,\n\t\t},\n\t\tpreferredRepeaters,\n\t\tcommandClasses,\n\t\tapplicationData:\n\t\t\t(applicationData && Bytes.view(applicationData).toString(\"hex\"))\n\t\t\t\t?? null,\n\t};\n\n\treturn {\n\t\tformat: 500,\n\t\tmeta,\n\t\tcontroller,\n\t\tnodes,\n\t};\n}\n\nexport async function jsonToNVM(\n\tjson: NVMJSON,\n\ttargetSDKVersion: string,\n): Promise<Uint8Array> {\n\tconst parsedVersion = semverParse(targetSDKVersion);\n\tif (!parsedVersion) {\n\t\tthrow new ZWaveError(\n\t\t\t`Invalid SDK version: ${targetSDKVersion}`,\n\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t);\n\t}\n\n\t// Erase the NVM\n\tconst sharedFileSystem = json.meta?.sharedFileSystem;\n\tconst nvmSize = sharedFileSystem\n\t\t? ZWAVE_SHARED_NVM_SIZE\n\t\t: (ZWAVE_APPLICATION_NVM_SIZE + ZWAVE_PROTOCOL_NVM_SIZE);\n\tconst ret = new Uint8Array(nvmSize);\n\tconst io = new NVMMemoryIO(ret);\n\tconst nvm3 = new NVM3(io);\n\tawait nvm3.erase(json.meta);\n\n\tconst serializeFile = async (file: NVMFile) => {\n\t\tconst { key, data } = file.serialize();\n\t\tawait nvm3.set(key, data);\n\t};\n\n\t// Figure out which SDK version we are targeting\n\tlet targetApplicationVersion: SemVer;\n\tlet targetProtocolVersion: SemVer;\n\tlet targetProtocolFormat: number;\n\n\t// We currently support application version migrations up to:\n\tconst HIGHEST_SUPPORTED_SDK_VERSION = \"7.21.0\";\n\t// For all higher ones, set the highest version we support and let the controller handle the migration itself\n\tif (semverLte(targetSDKVersion, HIGHEST_SUPPORTED_SDK_VERSION)) {\n\t\ttargetApplicationVersion = semverParse(targetSDKVersion)!;\n\t} else {\n\t\ttargetApplicationVersion = semverParse(HIGHEST_SUPPORTED_SDK_VERSION)!;\n\t}\n\n\t// The protocol version file only seems to be updated when the format of the protocol file system changes\n\t// Once again, we simply set the highest version we support here and let the controller handle any potential migration\n\tif (semverGte(targetSDKVersion, \"7.19.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.19.0\")!;\n\t\ttargetProtocolFormat = 5;\n\t} else if (semverGte(targetSDKVersion, \"7.17.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.17.0\")!;\n\t\ttargetProtocolFormat = 4;\n\t} else if (semverGte(targetSDKVersion, \"7.15.3\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.15.3\")!;\n\t\ttargetProtocolFormat = 3;\n\t} else if (semverGte(targetSDKVersion, \"7.12.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.12.0\")!;\n\t\ttargetProtocolFormat = 2;\n\t} else if (semverGte(targetSDKVersion, \"7.11.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.11.0\")!;\n\t\ttargetProtocolFormat = 1;\n\t} else {\n\t\ttargetProtocolVersion = semverParse(\"7.0.0\")!;\n\t\ttargetProtocolFormat = 0;\n\t}\n\n\tconst target = cloneDeep(json);\n\ttarget.controller.protocolVersion = targetProtocolVersion.format();\n\ttarget.format = targetProtocolFormat;\n\ttarget.controller.applicationVersion = parsedVersion.format();\n\n\t// Write application and protocol version files, because they are required\n\t// for the NVM3 adapter to work.\n\tconst ApplicationVersionConstructor = sharedFileSystem\n\t\t? ApplicationVersionFile800\n\t\t: ApplicationVersionFile;\n\tconst applVersionFile = new ApplicationVersionConstructor({\n\t\tformat: 0,\n\t\tmajor: targetApplicationVersion.major,\n\t\tminor: targetApplicationVersion.minor,\n\t\tpatch: targetApplicationVersion.patch,\n\t\tfileVersion: targetProtocolVersion.format(), // does not matter for this file\n\t});\n\tawait serializeFile(applVersionFile);\n\n\tconst protocolVersionFile = new ProtocolVersionFile({\n\t\tformat: targetProtocolFormat,\n\t\tmajor: targetProtocolVersion.major,\n\t\tminor: targetProtocolVersion.minor,\n\t\tpatch: targetProtocolVersion.patch,\n\t\tfileVersion: targetProtocolVersion.format(), // does not matter for this file\n\t});\n\tawait serializeFile(protocolVersionFile);\n\t{\n\t\tconst { key, data } = protocolVersionFile.serialize();\n\t\tawait nvm3.set(key, data);\n\t}\n\n\t// Now use the adapter where possible. Some properties have to be set together though,\n\t// so we set the files directly\n\tconst adapter = new NVM3Adapter(nvm3);\n\n\t// Start with the application data\n\n\tconst applTypeFile = new ApplicationTypeFile({\n\t\t...pick(target.controller, [\n\t\t\t\"isListening\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t\tfileVersion: target.controller.applicationVersion,\n\t});\n\tadapter.setFile(applTypeFile);\n\n\tconst applCCsFile = new ApplicationCCsFile({\n\t\t...pick(target.controller.commandClasses, [\n\t\t\t\"includedInsecurely\",\n\t\t\t\"includedSecurelyInsecureCCs\",\n\t\t\t\"includedSecurelySecureCCs\",\n\t\t]),\n\t\tfileVersion: target.controller.applicationVersion,\n\t});\n\tadapter.setFile(applCCsFile);\n\n\t// When converting it can be that the rfConfig doesn't exist. Make sure\n\t// that it is initialized with proper defaults.\n\ttarget.controller.rfConfig ??= {\n\t\trfRegion: RFRegion[\"Default (EU)\"],\n\t\ttxPower: 0.0,\n\t\tmeasured0dBm: +3.3,\n\t\tenablePTI: null,\n\t\tmaxTXPower: null,\n\t\tnodeIdType: null,\n\t};\n\n\t// Make sure the RF config format matches the application version.\n\t// Otherwise, the controller will ignore the file and not accept any changes to the RF config\n\tif (semverGte(targetSDKVersion, \"7.15.3\")) {\n\t\ttarget.controller.rfConfig.enablePTI ??= 0;\n\t\ttarget.controller.rfConfig.maxTXPower ??= 14.0;\n\t}\n\tif (semverGte(targetSDKVersion, \"7.21.0\")) {\n\t\ttarget.controller.rfConfig.nodeIdType ??= NodeIDType.Short;\n\t}\n\n\tconst applRFConfigFile = new ApplicationRFConfigFile({\n\t\t...pick(target.controller.rfConfig, [\n\t\t\t\"rfRegion\",\n\t\t\t\"txPower\",\n\t\t\t\"measured0dBm\",\n\t\t]),\n\t\tenablePTI: target.controller.rfConfig.enablePTI ?? undefined,\n\t\tmaxTXPower: target.controller.rfConfig.maxTXPower ?? undefined,\n\t\tnodeIdType: target.controller.rfConfig.nodeIdType ?? undefined,\n\t\tfileVersion: target.controller.applicationVersion,\n\t});\n\tadapter.setFile(applRFConfigFile);\n\n\tif (target.controller.applicationData) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"applicationData\" },\n\t\t\tBytes.from(target.controller.applicationData, \"hex\"),\n\t\t);\n\t}\n\n\t// The application name only seems to be used on 800 series with the shared file system\n\tif (target.controller.applicationName && target.meta?.sharedFileSystem) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"applicationName\" },\n\t\t\ttarget.controller.applicationName,\n\t\t);\n\t}\n\n\t// Now the protocol data\n\n\t// TODO: node IDs and LR node IDs should probably be handled by the NVM adapter when\n\t// setting the node info. But then we need to make sure here that the files are guaranteed to exist\n\tconst nodeInfoExists = new Set<number>();\n\tconst lrNodeInfoExists = new Set<number>();\n\tconst virtualNodeIds = new Set<number>();\n\n\tconst appRouteLock = new Set<number>();\n\tconst routeSlaveSUC = new Set<number>();\n\tconst sucPendingUpdate = new Set<number>();\n\tconst pendingDiscovery = new Set<number>();\n\n\t// Ensure that the route cache exists nodemask is written, even when no routes exist\n\tadapter.setFile(\n\t\tnew ProtocolRouteCacheExistsNodeMaskFile({\n\t\t\tnodeIds: [],\n\t\t\tfileVersion: target.controller.protocolVersion,\n\t\t}),\n\t);\n\n\tfor (const [id, node] of Object.entries(target.nodes)) {\n\t\tconst nodeId = parseInt(id);\n\t\tif (!nodeHasInfo(node)) {\n\t\t\tvirtualNodeIds.add(nodeId);\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tnodeInfoExists.add(nodeId);\n\t\t\tif (node.isVirtual) virtualNodeIds.add(nodeId);\n\t\t\tif (node.appRouteLock) appRouteLock.add(nodeId);\n\t\t\tif (node.routeSlaveSUC) routeSlaveSUC.add(nodeId);\n\t\t\tif (node.sucPendingUpdate) sucPendingUpdate.add(nodeId);\n\t\t\tif (node.pendingDiscovery) pendingDiscovery.add(nodeId);\n\t\t}\n\n\t\tawait adapter.set(\n\t\t\t{ domain: \"node\", nodeId, type: \"info\" },\n\t\t\tnvmJSONNodeToNodeInfo(nodeId, node),\n\t\t);\n\n\t\tif (node.lwr || node.nlwr) {\n\t\t\tawait adapter.set(\n\t\t\t\t{ domain: \"node\", nodeId, type: \"routes\" },\n\t\t\t\t{\n\t\t\t\t\tlwr: node.lwr ?? getEmptyRoute(),\n\t\t\t\t\tnlwr: node.nlwr ?? getEmptyRoute(),\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"nodeIds\" },\n\t\t[...nodeInfoExists],\n\t);\n\n\tif (target.lrNodes) {\n\t\tfor (const [id, node] of Object.entries(target.lrNodes)) {\n\t\t\tconst nodeId = parseInt(id);\n\t\t\tlrNodeInfoExists.add(nodeId);\n\n\t\t\tawait adapter.set(\n\t\t\t\t{ domain: \"lrnode\", nodeId, type: \"info\" },\n\t\t\t\tnvmJSONLRNodeToLRNodeInfo(nodeId, node),\n\t\t\t);\n\t\t}\n\t}\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"lrNodeIds\" },\n\t\t[...lrNodeInfoExists],\n\t);\n\n\t// For v3+ targets, the ControllerInfoFile must contain the LongRange properties\n\t// or the controller will ignore the file and not have a home ID\n\tif (targetProtocolFormat >= 3) {\n\t\ttarget.controller.lastNodeIdLR ??= 255;\n\t\ttarget.controller.maxNodeIdLR ??= 0;\n\t\ttarget.controller.reservedIdLR ??= 0;\n\t\ttarget.controller.primaryLongRangeChannelId ??= 0;\n\t\ttarget.controller.dcdcConfig ??= 255;\n\t}\n\tadapter.setFile(\n\t\tnew ControllerInfoFile(\n\t\t\tnvmJSONControllerToFileOptions(target.controller),\n\t\t),\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"appRouteLock\" },\n\t\t[...appRouteLock],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"routeSlaveSUC\" },\n\t\t[...routeSlaveSUC],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucPendingUpdate\" },\n\t\t[...sucPendingUpdate],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"virtualNodeIds\" },\n\t\t[...virtualNodeIds],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"pendingDiscovery\" },\n\t\t[...pendingDiscovery],\n\t);\n\n\tif (target.controller.preferredRepeaters?.length) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"preferredRepeaters\" },\n\t\t\ttarget.controller.preferredRepeaters,\n\t\t);\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucUpdateEntries\" },\n\t\ttarget.controller.sucUpdateEntries,\n\t);\n\n\tawait adapter.commit();\n\tawait io.close();\n\treturn ret;\n}\n\n/** Takes a JSON represented 500 series NVM and converts it to binary */\nexport async function jsonToNVM500(\n\tjson: Required<NVM500JSON>,\n\tprotocolVersion: string,\n): Promise<Uint8Array> {\n\t// Try to find a matching implementation\n\tconst impl = nvm500Impls.find(\n\t\t(p) =>\n\t\t\tp.protocolVersions.includes(protocolVersion)\n\t\t\t&& p.name.toLowerCase().startsWith(json.meta.library),\n\t);\n\n\tif (!impl) {\n\t\tthrow new ZWaveError(\n\t\t\t`Did not find a matching implementation for protocol version ${protocolVersion} and library ${json.meta.library}. To convert 500-series NVMs, both the source and the target controller must be using Z-Wave SDK 6.61 or higher.`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t}\n\n\tconst { layout, nvmSize } = resolveLayout(impl.layout);\n\n\t// Erase the NVM and set some basic information\n\tconst ret = new Uint8Array(nvmSize);\n\tconst io = new NVMMemoryIO(ret);\n\tconst nvm = new NVM500(io);\n\tawait nvm.erase({\n\t\tlayout,\n\t\tnvmSize,\n\t\tlibrary: impl.library,\n\t\tnvmDescriptor: {\n\t\t\t...pick(json.meta, [\n\t\t\t\t\"manufacturerID\",\n\t\t\t\t\"productType\",\n\t\t\t\t\"productID\",\n\t\t\t\t\"firmwareID\",\n\t\t\t]),\n\t\t\t// Override the protocol version with the specified one\n\t\t\tprotocolVersion,\n\t\t\tfirmwareVersion: json.controller.applicationVersion,\n\t\t},\n\t});\n\n\tconst adapter = new NVM500Adapter(nvm);\n\n\t// Set controller infos\n\tconst c = json.controller;\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"homeId\" },\n\t\tBytes.from(c.ownHomeId.replace(/^0x/, \"\"), \"hex\"),\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"learnedHomeId\" },\n\t\tc.learnedHomeId\n\t\t\t? Bytes.from(c.learnedHomeId.replace(/^0x/, \"\"), \"hex\")\n\t\t\t: undefined,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"nodeId\" },\n\t\tc.nodeId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"lastNodeId\" },\n\t\tc.lastNodeId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"maxNodeId\" },\n\t\tc.maxNodeId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"reservedId\" },\n\t\tc.reservedId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"staticControllerNodeId\" },\n\t\tc.staticControllerNodeId,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"controllerConfiguration\" },\n\t\tc.controllerConfiguration,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucUpdateEntries\" },\n\t\tc.sucUpdateEntries,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucLastIndex\" },\n\t\tc.sucLastIndex,\n\t);\n\n\tif (c.systemState != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"systemState\" },\n\t\t\tc.systemState,\n\t\t);\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"watchdogStarted\" },\n\t\tc.watchdogStarted,\n\t);\n\n\tif (c.rfConfig.powerLevelNormal != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerLevelNormal\" },\n\t\t\tc.rfConfig.powerLevelNormal,\n\t\t);\n\t}\n\tif (c.rfConfig.powerLevelLow != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerLevelLow\" },\n\t\t\tc.rfConfig.powerLevelLow,\n\t\t);\n\t}\n\tif (c.rfConfig.powerMode != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerMode\" },\n\t\t\tc.rfConfig.powerMode,\n\t\t);\n\t}\n\tif (c.rfConfig.powerModeExtintEnable != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerModeExtintEnable\" },\n\t\t\tc.rfConfig.powerModeExtintEnable,\n\t\t);\n\t}\n\tif (c.rfConfig.powerModeWutTimeout != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerModeWutTimeout\" },\n\t\t\tc.rfConfig.powerModeWutTimeout,\n\t\t);\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"preferredRepeaters\" },\n\t\tc.preferredRepeaters,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"commandClasses\" },\n\t\tc.commandClasses,\n\t);\n\n\tif (c.applicationData) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"applicationData\" },\n\t\t\tBytes.from(c.applicationData, \"hex\"),\n\t\t);\n\t}\n\n\t// Set node infos\n\tconst appRouteLock: number[] = [];\n\tconst routeSlaveSUC: number[] = [];\n\tconst pendingDiscovery: number[] = [];\n\tconst sucPendingUpdate: number[] = [];\n\tconst virtualNodeIds: number[] = [];\n\n\tfor (const [id, node] of Object.entries(json.nodes)) {\n\t\tconst nodeId = parseInt(id);\n\t\tif (!nodeHasInfo(node)) {\n\t\t\tvirtualNodeIds.push(nodeId);\n\t\t\tcontinue;\n\t\t}\n\t\tif (node.appRouteLock) appRouteLock.push(nodeId);\n\t\tif (node.routeSlaveSUC) routeSlaveSUC.push(nodeId);\n\t\tif (node.pendingDiscovery) pendingDiscovery.push(nodeId);\n\t\tif (node.sucPendingUpdate) sucPendingUpdate.push(nodeId);\n\n\t\tawait adapter.set(\n\t\t\t{ domain: \"node\", nodeId, type: \"info\" },\n\t\t\t{\n\t\t\t\tnodeId,\n\t\t\t\t...node,\n\t\t\t},\n\t\t);\n\n\t\tif (node.lwr || node.nlwr) {\n\t\t\tawait adapter.set(\n\t\t\t\t{ domain: \"node\", nodeId, type: \"routes\" },\n\t\t\t\t{\n\t\t\t\t\tlwr: node.lwr ?? undefined,\n\t\t\t\t\tnlwr: node.nlwr ?? undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"appRouteLock\" },\n\t\t[...appRouteLock],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"routeSlaveSUC\" },\n\t\t[...routeSlaveSUC],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucPendingUpdate\" },\n\t\t[...sucPendingUpdate],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"virtualNodeIds\" },\n\t\t[...virtualNodeIds],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"pendingDiscovery\" },\n\t\t[...pendingDiscovery],\n\t);\n\n\tawait adapter.commit();\n\tawait io.close();\n\treturn ret;\n}\n\nexport function json500To700(\n\tjson: NVM500JSON,\n\ttruncateApplicationData?: boolean,\n): NVMJSON {\n\tconst source = cloneDeep(json);\n\n\t// On the 500 series, some properties are only defined for the nodes, so we pull it off the\n\t// controller's node entry\n\tlet controllerNode = source.nodes[\n\t\tsource.controller.nodeId || 1\n\t] as NVMJSONNodeWithInfo; // Little hack because TS doesn't type check the union type properly\n\tif (!nodeHasInfo(controllerNode)) {\n\t\t// No information available, use sensible defaults\n\t\tcontrollerNode = {\n\t\t\tisListening: true,\n\t\t\toptionalFunctionality: false,\n\t\t\t// Static PC Controller\n\t\t\tgenericDeviceClass: 0x02,\n\t\t\tspecificDeviceClass: 0x01,\n\t\t} as any;\n\t}\n\n\tlet applicationData: string | null = null;\n\tif (source.controller.applicationData) {\n\t\tlet raw = Bytes.from(source.controller.applicationData, \"hex\");\n\t\t// Find actual start and end of application data, ignoring zeroes\n\t\tlet start = 0;\n\t\twhile (start < raw.length && raw[start] === 0) {\n\t\t\tstart++;\n\t\t}\n\t\tlet end = raw.length - 1;\n\t\twhile (end > start && raw[end] === 0) {\n\t\t\tend--;\n\t\t}\n\t\traw = raw.subarray(start, end + 1);\n\t\tif (raw.length > 512) {\n\t\t\tif (!truncateApplicationData) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\"Invalid NVM JSON: Application data would be truncated! Set truncateApplicationData to true to allow this.\",\n\t\t\t\t\tZWaveErrorCodes.NVM_InvalidJSON,\n\t\t\t\t);\n\t\t\t}\n\t\t\traw = raw.subarray(0, 512);\n\t\t}\n\t\tapplicationData = raw.toString(\"hex\");\n\t}\n\n\t// https://github.com/zwave-js/node-zwave-js/issues/6055\n\t// On some controllers this byte can be 0xff (effectively not set)\n\tlet controllerConfiguration = source.controller.controllerConfiguration;\n\tif (source.controller.controllerConfiguration === 0xff) {\n\t\t// Default to SUC/Primary\n\t\tcontrollerConfiguration = ControllerCapabilityFlags.SISPresent\n\t\t\t| ControllerCapabilityFlags.WasRealPrimary\n\t\t\t| ControllerCapabilityFlags.SUC;\n\t}\n\n\tlet homeId: string;\n\tif (\n\t\t!!(\n\t\t\tcontrollerConfiguration & ControllerCapabilityFlags.OnOtherNetwork\n\t\t)\n\t\t&& source.controller.learnedHomeId\n\t\t&& source.controller.nodeId\n\t) {\n\t\t// The controller did not start the network itself. We only keep this if we have a home ID and node ID\n\t\thomeId = source.controller.learnedHomeId;\n\t} else {\n\t\t// The controller did start the network itself\n\t\thomeId = source.controller.ownHomeId;\n\t\tcontrollerConfiguration &= ~ControllerCapabilityFlags.OnOtherNetwork;\n\t\t// Reconstruct the node ID. If we don't know, 1 is a good default\n\t\tif (controllerConfiguration & ControllerCapabilityFlags.SUC) {\n\t\t\tsource.controller.nodeId = source.controller.staticControllerNodeId\n\t\t\t\t|| 1;\n\t\t} else {\n\t\t\tsource.controller.nodeId = 1;\n\t\t}\n\t}\n\n\t// https://github.com/zwave-js/node-zwave-js/issues/6055\n\t// Some controllers have invalid information for the IDs\n\tlet maxNodeId = source.controller.maxNodeId;\n\tif (maxNodeId === 0xff) maxNodeId = source.controller.lastNodeId;\n\tlet reservedId = source.controller.reservedId;\n\tif (reservedId === 0xff) reservedId = 0;\n\n\tconst ret: NVMJSON = {\n\t\t// Start out with format 0 (= protocol version 7.0.0), the jsonToNVM routines will do further conversion\n\t\tformat: 0,\n\t\tcontroller: {\n\t\t\t// This will contain the original 6.x protocol version, but the jsonToNVM routines will update it\n\t\t\tprotocolVersion: source.controller.protocolVersion,\n\t\t\tapplicationVersion: source.controller.applicationVersion,\n\t\t\thomeId,\n\t\t\tnodeId: source.controller.nodeId,\n\t\t\tlastNodeId: source.controller.lastNodeId,\n\t\t\tstaticControllerNodeId: source.controller.staticControllerNodeId,\n\t\t\tsucLastIndex: source.controller.sucLastIndex,\n\t\t\tcontrollerConfiguration,\n\t\t\tsucUpdateEntries: source.controller.sucUpdateEntries,\n\t\t\tmaxNodeId,\n\t\t\treservedId,\n\t\t\tsystemState: source.controller.systemState ?? 0,\n\t\t\tpreferredRepeaters: source.controller.preferredRepeaters,\n\n\t\t\t// RF config exists on both series but isn't compatible\n\n\t\t\tisListening: controllerNode.isListening,\n\t\t\toptionalFunctionality: controllerNode.optionalFunctionality,\n\t\t\tgenericDeviceClass: controllerNode.genericDeviceClass,\n\t\t\tspecificDeviceClass: controllerNode.specificDeviceClass ?? 0,\n\n\t\t\tcommandClasses: {\n\t\t\t\tincludedInsecurely: source.controller.commandClasses,\n\t\t\t\tincludedSecurelyInsecureCCs: [],\n\t\t\t\tincludedSecurelySecureCCs: [],\n\t\t\t},\n\n\t\t\tapplicationData,\n\t\t},\n\t\t// The node entries are actually compatible between the two JSON versions\n\t\t// but the types are structured differently\n\t\tnodes: source.nodes,\n\t};\n\treturn ret;\n}\n\nexport function json700To500(json: NVMJSON): NVM500JSON {\n\tconst source = cloneDeep(json);\n\n\tlet ownHomeId: string;\n\tlet learnedHomeId: string | null = null;\n\tlet nodeId: number;\n\tif (\n\t\tsource.controller.controllerConfiguration\n\t\t& ControllerCapabilityFlags.OnOtherNetwork\n\t) {\n\t\t// The controller did not start the network itself\n\t\townHomeId = learnedHomeId = source.controller.homeId;\n\t\tnodeId = source.controller.nodeId;\n\t} else {\n\t\t// The controller did start the network itself\n\t\townHomeId = source.controller.homeId;\n\t\t// 500 series controllers expect the node ID to be 0 when they are the primary\n\t\tnodeId = 0;\n\t}\n\n\tconst ret: NVM500JSON = {\n\t\tformat: 500,\n\t\tcontroller: {\n\t\t\t// This will contain the original 7.x protocol version, but the jsonToNVM routines will update it\n\t\t\tprotocolVersion: source.controller.protocolVersion,\n\t\t\tapplicationVersion: source.controller.applicationVersion,\n\t\t\t// The 700 series does not distinguish between own and learned home ID in NVM\n\t\t\t// We infer it from the controller configuration if we need it\n\t\t\townHomeId,\n\t\t\tlearnedHomeId,\n\t\t\tnodeId,\n\t\t\tlastNodeId: source.controller.lastNodeId,\n\t\t\tstaticControllerNodeId: source.controller.staticControllerNodeId,\n\t\t\tsucLastIndex: source.controller.sucLastIndex,\n\t\t\tcontrollerConfiguration: source.controller.controllerConfiguration,\n\t\t\tsucUpdateEntries: source.controller.sucUpdateEntries,\n\t\t\tmaxNodeId: source.controller.maxNodeId,\n\t\t\treservedId: source.controller.reservedId,\n\t\t\tsystemState: source.controller.systemState,\n\t\t\twatchdogStarted: 0,\n\t\t\tpreferredRepeaters: json.controller.preferredRepeaters ?? [],\n\n\t\t\t// RF config exists on both series but isn't compatible. So set the default,\n\t\t\t// it will be taken from the target NVM on restore.\n\t\t\trfConfig: {\n\t\t\t\tpowerLevelNormal: [255, 255, 255],\n\t\t\t\tpowerLevelLow: [255, 255, 255],\n\t\t\t\tpowerMode: 255,\n\t\t\t\tpowerModeExtintEnable: 255,\n\t\t\t\tpowerModeWutTimeout: 0xffffffff,\n\t\t\t},\n\n\t\t\tcommandClasses: source.controller.commandClasses.includedInsecurely,\n\n\t\t\tapplicationData: source.controller.applicationData,\n\t\t},\n\t\t// The node entries are actually compatible between the two JSON versions\n\t\t// just the types are structured differently\n\t\tnodes: source.nodes,\n\t};\n\treturn ret;\n}\n\n/** Converts the given source NVM into a format that is compatible with the given target NVM */\nexport async function migrateNVM(\n\tsourceNVM: Uint8Array,\n\ttargetNVM: Uint8Array,\n): Promise<Uint8Array> {\n\tlet source: ParsedNVM;\n\tlet target: ParsedNVM;\n\tlet sourceProtocolFileFormat: number | undefined;\n\tlet targetProtocolFileFormat: number | undefined;\n\n\ttry {\n\t\tsource = {\n\t\t\ttype: 700,\n\t\t\tjson: await nvmToJSON(sourceNVM),\n\t\t};\n\t\tsourceProtocolFileFormat = source.json.format;\n\t} catch (e) {\n\t\tif (isZWaveError(e) && e.code === ZWaveErrorCodes.NVM_InvalidFormat) {\n\t\t\t// This is not a 700 series NVM, maybe it is a 500 series one?\n\t\t\tsource = {\n\t\t\t\ttype: 500,\n\t\t\t\tjson: await nvm500ToJSON(sourceNVM),\n\t\t\t};\n\t\t} else if (\n\t\t\tisZWaveError(e)\n\t\t\t&& e.code === ZWaveErrorCodes.NVM_NotSupported\n\t\t\t&& isObject(e.context)\n\t\t\t&& typeof e.context.protocolFileFormat === \"number\"\n\t\t) {\n\t\t\t// This is a 700 series NVM, but the protocol version is not (yet) supported\n\t\t\tsource = { type: \"unknown\" };\n\t\t\tsourceProtocolFileFormat = e.context.protocolFileFormat;\n\t\t} else {\n\t\t\tsource = { type: \"unknown\" };\n\t\t}\n\t}\n\n\ttry {\n\t\ttarget = {\n\t\t\ttype: 700,\n\t\t\tjson: await nvmToJSON(targetNVM),\n\t\t};\n\t\ttargetProtocolFileFormat = target.json.format;\n\t} catch (e) {\n\t\tif (isZWaveError(e) && e.code === ZWaveErrorCodes.NVM_InvalidFormat) {\n\t\t\t// This is not a 700 series NVM, maybe it is a 500 series one?\n\t\t\ttarget = {\n\t\t\t\ttype: 500,\n\t\t\t\tjson: await nvm500ToJSON(targetNVM),\n\t\t\t};\n\t\t} else if (\n\t\t\tisZWaveError(e)\n\t\t\t&& e.code === ZWaveErrorCodes.NVM_NotSupported\n\t\t\t&& source.type === 700\n\t\t\t&& isObject(e.context)\n\t\t\t&& typeof e.context.protocolFileFormat === \"number\"\n\t\t) {\n\t\t\t// This is a 700 series NVM, but the protocol version is not (yet) supported\n\t\t\ttarget = { type: \"unknown\" };\n\t\t\ttargetProtocolFileFormat = e.context.protocolFileFormat;\n\t\t} else {\n\t\t\ttarget = { type: \"unknown\" };\n\t\t}\n\t}\n\n\t// Short circuit if...\n\tif (\n\t\ttarget.type === \"unknown\"\n\t\t&& targetProtocolFileFormat\n\t\t&& targetProtocolFileFormat > MAX_PROTOCOL_FILE_FORMAT\n\t\t&& sourceProtocolFileFormat\n\t\t&& sourceProtocolFileFormat <= targetProtocolFileFormat\n\t\t&& sourceNVM.length === targetNVM.length\n\t) {\n\t\t// ...both the source and the target are 700 series, but at least the target uses an unsupported protocol version.\n\t\t// We can be sure however that the target can upgrade any 700 series NVM to its protocol version, as long as the\n\t\t// source protocol version is not higher than the target's\n\t\treturn sourceNVM;\n\t} else if (\n\t\tsource.type === 700\n\t\t&& target.type === 700\n\t\t// ...the source and target NVMs have the same size and structure\n\t\t&& sourceNVM.length === targetNVM.length\n\t\t&& source.json.meta.sharedFileSystem\n\t\t\t=== target.json.meta.sharedFileSystem\n\t) {\n\t\t// ... the source and target protocol versions are compatible without conversion\n\t\tconst sourceProtocolVersion = source.json.controller.protocolVersion;\n\t\tconst targetProtocolVersion = target.json.controller.protocolVersion;\n\t\t// ... and the application version on the both is compatible with the respective protocol version\n\t\tconst sourceApplicationVersion =\n\t\t\tsource.json.controller.applicationVersion;\n\t\tconst targetApplicationVersion =\n\t\t\ttarget.json.controller.applicationVersion;\n\n\t\t// The 700 series firmware can automatically upgrade backups from a previous protocol version\n\t\t// Not sure when that ability was added. To be on the safe side, allow it for 7.16+ which definitely supports it.\n\t\tif (\n\t\t\tsemverGte(targetProtocolVersion, \"7.16.0\")\n\t\t\t&& semverGte(targetProtocolVersion, sourceProtocolVersion)\n\t\t\t// the application version is updated on every update, protocol version only when the format changes\n\t\t\t// so this is a good indicator if the NVMs are in a compatible state\n\t\t\t&& semverGte(targetApplicationVersion, targetProtocolVersion)\n\t\t\t&& semverGte(sourceApplicationVersion, sourceProtocolVersion)\n\t\t\t// avoid preserving broken 255.x versions which appear on some controllers\n\t\t\t&& semverLt(sourceApplicationVersion, \"255.0.0\")\n\t\t\t&& semverLt(targetApplicationVersion, \"255.0.0\")\n\t\t\t// and avoid restoring a backup with a shifted 800 series application version file\n\t\t\t&& (!hasShiftedAppVersion800File(source.json))\n\t\t) {\n\t\t\treturn sourceNVM;\n\t\t}\n\t} else if (source.type === \"unknown\" && target.type !== \"unknown\") {\n\t\t// ...only the source has an unsupported format, so we have to convert but can't\n\t\tthrow new ZWaveError(\n\t\t\t`The source NVM has an unsupported format, which cannot be restored on a ${target.type}-series NVM!`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t} else if (source.type !== \"unknown\" && target.type === \"unknown\") {\n\t\t// ...only the target has an unsupported format, so we have to convert but can't\n\t\tthrow new ZWaveError(\n\t\t\t`The target NVM has an unsupported format, cannot restore ${source.type}-series NVM onto it!`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t} else if (source.type === \"unknown\" && target.type === \"unknown\") {\n\t\t// ...both are an unsupported format, meaning pre-6.61 SDK, which we cannot convert\n\t\treturn sourceNVM;\n\t}\n\n\t// TypeScript doesn't understand multi-variable narrowings (yet)\n\tsource = source as Exclude<ParsedNVM, { type: \"unknown\" }>;\n\ttarget = target as Exclude<ParsedNVM, { type: \"unknown\" }>;\n\n\t// Some 700 series NVMs have a strange 255.x application version - fix that first\n\tif (\n\t\ttarget.type === 700\n\t\t&& semverGte(target.json.controller.applicationVersion, \"255.0.0\")\n\t) {\n\t\t// replace both with the protocol version\n\t\ttarget.json.controller.applicationVersion =\n\t\t\ttarget.json.controller.protocolVersion;\n\t}\n\n\t// In any case, preserve the application version of the target stick\n\tsource.json.controller.applicationVersion =\n\t\ttarget.json.controller.applicationVersion;\n\n\tif (source.type === 500 && target.type === 500) {\n\t\t// Both are 500, so we just need to update the metadata to match the target\n\t\tconst json: Required<NVM500JSON> = {\n\t\t\t...source.json,\n\t\t\tmeta: target.json.meta,\n\t\t};\n\t\t// If the target is a 500 series stick, preserve the RF config\n\t\tjson.controller.rfConfig = target.json.controller.rfConfig;\n\t\treturn jsonToNVM500(json, target.json.controller.protocolVersion);\n\t} else if (source.type === 500 && target.type === 700) {\n\t\t// We need to upgrade the source to 700 series\n\t\tconst json: NVMJSONWithMeta = {\n\t\t\tlrNodes: {},\n\t\t\t...json500To700(source.json, true),\n\t\t\tmeta: target.json.meta,\n\t\t};\n\t\t// The target is a different series, try to preserve the RF config of the target stick\n\t\tjson.controller.rfConfig = target.json.controller.rfConfig;\n\t\t// 700 series distinguishes the NVM format by the application version\n\t\treturn jsonToNVM(json, target.json.controller.applicationVersion);\n\t} else if (source.type === 700 && target.type === 500) {\n\t\t// We need to downgrade the source to 500 series\n\t\tconst json: Required<NVM500JSON> = {\n\t\t\t...json700To500(source.json),\n\t\t\tmeta: target.json.meta,\n\t\t};\n\t\t// The target is a different series, try to preserve the RF config of the target stick\n\t\tjson.controller.rfConfig = target.json.controller.rfConfig;\n\t\treturn jsonToNVM500(json, target.json.controller.protocolVersion);\n\t} else {\n\t\t// Both are 700, so we just need to update the metadata to match the target\n\t\tconst json: NVMJSONWithMeta = {\n\t\t\t...(source.json as NVMJSONWithMeta),\n\t\t\tmeta: (target.json as NVMJSONWithMeta).meta,\n\t\t};\n\t\t// 700 series distinguishes the NVM format by the application version\n\t\treturn jsonToNVM(json, target.json.controller.applicationVersion);\n\t}\n}\n\n/**\n * Detects whether the app version file on a 800 series controller is shifted by 1 byte\n */\nfunction hasShiftedAppVersion800File(\n\tjson: NVMJSONWithMeta,\n): boolean {\n\t// We can only detect this on 800 series controllers with the shared FS\n\tif (!json.meta.sharedFileSystem) return false;\n\n\tconst protocolVersion = semverParse(json.controller.protocolVersion);\n\t// Invalid protocol version, cannot fix anything\n\tif (!protocolVersion) return false;\n\n\tconst applicationVersion = semverParse(json.controller.applicationVersion);\n\t// Invalid application version, cannot fix anything\n\tif (!applicationVersion) return false;\n\n\t// We consider the version shifted if:\n\t// - the app version format is the major protocol version\n\t// - the app version major is the minor protocol version +/- 3\n\n\tif (json.applicationFileFormat !== protocolVersion.major) return false;\n\tif (Math.abs(applicationVersion.major - protocolVersion.minor) > 3) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_safe", "import_consts", "import_adapter", "ret", "semverParse", "semverLte", "semverGte", "semverLt"]
|
|
7
7
|
}
|
package/build/cjs/lib/NVM3.js
CHANGED
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -31,6 +32,9 @@ var import_object = require("./nvm3/object.js");
|
|
|
31
32
|
var import_page = require("./nvm3/page.js");
|
|
32
33
|
var import_utils2 = require("./nvm3/utils.js");
|
|
33
34
|
class NVM3 {
|
|
35
|
+
static {
|
|
36
|
+
__name(this, "NVM3");
|
|
37
|
+
}
|
|
34
38
|
constructor(io) {
|
|
35
39
|
this._io = io;
|
|
36
40
|
}
|
|
@@ -96,7 +100,7 @@ class NVM3 {
|
|
|
96
100
|
applicationPages = pages.filter((p) => p.offset < import_consts.ZWAVE_APPLICATION_NVM_SIZE);
|
|
97
101
|
protocolPages = pages.filter((p) => p.offset >= import_consts.ZWAVE_APPLICATION_NVM_SIZE);
|
|
98
102
|
}
|
|
99
|
-
const pageInfoToSectionInfo = (pages2) => {
|
|
103
|
+
const pageInfoToSectionInfo = /* @__PURE__ */ __name((pages2) => {
|
|
100
104
|
const maxEraseCount = Math.max(...pages2.map((p) => p.eraseCount));
|
|
101
105
|
let currentPageIndex = pages2.findLastIndex((p) => p.eraseCount === maxEraseCount && p.objects.length > 0);
|
|
102
106
|
if (currentPageIndex === -1) {
|
|
@@ -127,7 +131,7 @@ class NVM3 {
|
|
|
127
131
|
currentPage: currentPageIndex,
|
|
128
132
|
objectLocations
|
|
129
133
|
};
|
|
130
|
-
};
|
|
134
|
+
}, "pageInfoToSectionInfo");
|
|
131
135
|
if (isSharedFileSystem) {
|
|
132
136
|
this._info = {
|
|
133
137
|
isSharedFileSystem: true,
|
|
@@ -164,16 +168,16 @@ class NVM3 {
|
|
|
164
168
|
let parts;
|
|
165
169
|
let complete = false;
|
|
166
170
|
let objType;
|
|
167
|
-
const resetFragments = () => {
|
|
171
|
+
const resetFragments = /* @__PURE__ */ __name(() => {
|
|
168
172
|
parts = void 0;
|
|
169
173
|
complete = false;
|
|
170
|
-
};
|
|
174
|
+
}, "resetFragments");
|
|
171
175
|
pages: for (let offset = 0; offset < pages.length; offset++) {
|
|
172
176
|
const index = (section.currentPage - offset + pages.length) % pages.length;
|
|
173
177
|
const page = pages[index];
|
|
174
178
|
objects: for (let j = page.objects.length - 1; j >= 0; j--) {
|
|
175
179
|
const object = page.objects[j];
|
|
176
|
-
const readObject = () => this.readObjectData(object);
|
|
180
|
+
const readObject = /* @__PURE__ */ __name(() => this.readObjectData(object), "readObject");
|
|
177
181
|
if (object.key !== fileId) {
|
|
178
182
|
resetFragments();
|
|
179
183
|
continue objects;
|
|
@@ -214,7 +218,7 @@ class NVM3 {
|
|
|
214
218
|
const section = this.getNVMSectionForFile(objects[0].key);
|
|
215
219
|
let page = section.pages[section.currentPage];
|
|
216
220
|
let remainingSpace = page.pageSize - import_consts.NVM3_PAGE_HEADER_SIZE - section.offsetInPage;
|
|
217
|
-
const nextPage = async () => {
|
|
221
|
+
const nextPage = /* @__PURE__ */ __name(async () => {
|
|
218
222
|
section.currentPage = (section.currentPage + 1) % section.pages.length;
|
|
219
223
|
page = section.pages[section.currentPage];
|
|
220
224
|
const toPreserve = [...section.objectLocations].filter(([, pageIndex]) => pageIndex === section.currentPage).map(([fileID]) => page.objects.findLast((h) => h.key === fileID)).filter((h) => h != void 0).filter((h) => h.type !== import_consts.ObjectType.Deleted);
|
|
@@ -241,7 +245,7 @@ class NVM3 {
|
|
|
241
245
|
}
|
|
242
246
|
section.offsetInPage = import_consts.NVM3_PAGE_HEADER_SIZE;
|
|
243
247
|
remainingSpace = page.pageSize - import_consts.NVM3_PAGE_HEADER_SIZE;
|
|
244
|
-
};
|
|
248
|
+
}, "nextPage");
|
|
245
249
|
for (const object of objects) {
|
|
246
250
|
const isLargeObject = object.type === import_consts.ObjectType.DataLarge || object.type === import_consts.ObjectType.CounterLarge;
|
|
247
251
|
let fragments;
|
|
@@ -436,6 +440,7 @@ async function readPageHeader(io, offset) {
|
|
|
436
440
|
deviceFamily
|
|
437
441
|
};
|
|
438
442
|
}
|
|
443
|
+
__name(readPageHeader, "readPageHeader");
|
|
439
444
|
function tryGetVersionAndEraseCount(header) {
|
|
440
445
|
const buffer = import_safe2.Bytes.view(header);
|
|
441
446
|
const version = buffer.readUInt16LE(0);
|
|
@@ -459,6 +464,7 @@ function tryGetVersionAndEraseCount(header) {
|
|
|
459
464
|
}
|
|
460
465
|
return { version, eraseCount };
|
|
461
466
|
}
|
|
467
|
+
__name(tryGetVersionAndEraseCount, "tryGetVersionAndEraseCount");
|
|
462
468
|
async function isValidPageHeaderAtOffset(io, offset) {
|
|
463
469
|
if (offset > io.size - import_consts.NVM3_PAGE_HEADER_SIZE) {
|
|
464
470
|
return false;
|
|
@@ -471,6 +477,7 @@ async function isValidPageHeaderAtOffset(io, offset) {
|
|
|
471
477
|
return false;
|
|
472
478
|
}
|
|
473
479
|
}
|
|
480
|
+
__name(isValidPageHeaderAtOffset, "isValidPageHeaderAtOffset");
|
|
474
481
|
async function readObjectHeader(io, offset) {
|
|
475
482
|
let headerSize = 4;
|
|
476
483
|
const hdr1 = await (0, import_utils.nvmReadUInt32LE)(io, offset);
|
|
@@ -512,6 +519,7 @@ async function readObjectHeader(io, offset) {
|
|
|
512
519
|
alignedSize
|
|
513
520
|
};
|
|
514
521
|
}
|
|
522
|
+
__name(readObjectHeader, "readObjectHeader");
|
|
515
523
|
// Annotate the CommonJS export names for ESM import in node:
|
|
516
524
|
0 && (module.exports = {
|
|
517
525
|
NVM3
|