@zwave-js/config 14.0.0-beta.1 → 14.0.0-beta.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/{ConfigManager.d.ts → cjs/ConfigManager.d.ts} +2 -2
- package/build/cjs/ConfigManager.js +208 -0
- package/build/cjs/ConfigManager.js.map +7 -0
- package/build/cjs/JsonTemplate.js +198 -0
- package/build/cjs/JsonTemplate.js.map +7 -0
- package/build/{Logger.d.ts → cjs/Logger.d.ts} +1 -1
- package/build/cjs/Logger.js +50 -0
- package/build/cjs/Logger.js.map +7 -0
- package/build/cjs/Logger_safe.js +32 -0
- package/build/cjs/Logger_safe.js.map +7 -0
- package/build/cjs/Logic.js +71 -0
- package/build/cjs/Logic.js.map +7 -0
- package/build/cjs/LogicParser.js +1343 -0
- package/build/cjs/LogicParser.js.map +7 -0
- package/build/cjs/Manufacturers.js +88 -0
- package/build/cjs/Manufacturers.js.map +7 -0
- package/build/cjs/_version.d.ts +2 -0
- package/build/cjs/_version.js +29 -0
- package/build/cjs/_version.js.map +7 -0
- package/build/{devices → cjs/devices}/AssociationConfig.d.ts +2 -2
- package/build/cjs/devices/AssociationConfig.js +93 -0
- package/build/cjs/devices/AssociationConfig.js.map +7 -0
- package/build/{devices → cjs/devices}/CompatConfig.d.ts +2 -2
- package/build/cjs/devices/CompatConfig.js +584 -0
- package/build/cjs/devices/CompatConfig.js.map +7 -0
- package/build/{devices → cjs/devices}/ConditionalItem.d.ts +1 -1
- package/build/cjs/devices/ConditionalItem.js +107 -0
- package/build/cjs/devices/ConditionalItem.js.map +7 -0
- package/build/{devices → cjs/devices}/ConditionalPrimitive.d.ts +2 -2
- package/build/cjs/devices/ConditionalPrimitive.js +59 -0
- package/build/cjs/devices/ConditionalPrimitive.js.map +7 -0
- package/build/{devices → cjs/devices}/DeviceConfig.d.ts +7 -7
- package/build/cjs/devices/DeviceConfig.js +502 -0
- package/build/cjs/devices/DeviceConfig.js.map +7 -0
- package/build/cjs/devices/DeviceConfig.unit._test.js +17 -0
- package/build/cjs/devices/DeviceConfig.unit._test.js.map +7 -0
- package/build/{devices → cjs/devices}/DeviceMetadata.d.ts +3 -3
- package/build/cjs/devices/DeviceMetadata.js +112 -0
- package/build/cjs/devices/DeviceMetadata.js.map +7 -0
- package/build/{devices → cjs/devices}/EndpointConfig.d.ts +5 -5
- package/build/cjs/devices/EndpointConfig.js +87 -0
- package/build/cjs/devices/EndpointConfig.js.map +7 -0
- package/build/{devices → cjs/devices}/ParamInformation.d.ts +3 -3
- package/build/cjs/devices/ParamInformation.js +209 -0
- package/build/cjs/devices/ParamInformation.js.map +7 -0
- package/build/cjs/devices/shared.js +17 -0
- package/build/cjs/devices/shared.js.map +7 -0
- package/build/cjs/index.d.ts +13 -0
- package/build/cjs/index.js +53 -0
- package/build/cjs/index.js.map +7 -0
- package/build/cjs/index_safe.d.ts +3 -0
- package/build/cjs/index_safe.js +32 -0
- package/build/cjs/index_safe.js.map +7 -0
- package/build/cjs/package.json +3 -0
- package/build/{utils.d.ts → cjs/utils.d.ts} +2 -2
- package/build/cjs/utils.js +117 -0
- package/build/cjs/utils.js.map +7 -0
- package/build/cjs/utils_safe.js +57 -0
- package/build/cjs/utils_safe.js.map +7 -0
- package/build/esm/ConfigManager.d.ts +57 -0
- package/build/esm/ConfigManager.d.ts.map +1 -0
- package/build/{ConfigManager.js → esm/ConfigManager.js} +36 -43
- package/build/esm/ConfigManager.js.map +1 -0
- package/build/esm/JsonTemplate.d.ts +4 -0
- package/build/esm/JsonTemplate.d.ts.map +1 -0
- package/build/{JsonTemplate.js → esm/JsonTemplate.js} +30 -60
- package/build/esm/JsonTemplate.js.map +1 -0
- package/build/esm/Logger.d.ts +11 -0
- package/build/esm/Logger.d.ts.map +1 -0
- package/build/esm/Logger.js +23 -0
- package/build/esm/Logger.js.map +1 -0
- package/build/esm/Logger_safe.d.ts +5 -0
- package/build/esm/Logger_safe.d.ts.map +1 -0
- package/build/esm/Logger_safe.js +3 -0
- package/build/esm/Logger_safe.js.map +1 -0
- package/build/esm/Logic.d.ts +4 -0
- package/build/esm/Logic.d.ts.map +1 -0
- package/build/esm/Logic.js +35 -0
- package/build/esm/Logic.js.map +1 -0
- package/build/esm/LogicParser.d.ts +93 -0
- package/build/esm/LogicParser.d.ts.map +1 -0
- package/build/{LogicParser.js → esm/LogicParser.js} +2 -5
- package/build/{LogicParser.js.map → esm/LogicParser.js.map} +1 -1
- package/build/esm/Manufacturers.d.ts +6 -0
- package/build/esm/Manufacturers.d.ts.map +1 -0
- package/build/esm/Manufacturers.js +55 -0
- package/build/esm/Manufacturers.js.map +1 -0
- package/build/esm/_version.d.ts +2 -0
- package/build/esm/_version.d.ts.map +1 -0
- package/build/esm/_version.js +3 -0
- package/build/esm/_version.js.map +1 -0
- package/build/esm/devices/AssociationConfig.d.ts +27 -0
- package/build/esm/devices/AssociationConfig.d.ts.map +1 -0
- package/build/{devices → esm/devices}/AssociationConfig.js +12 -16
- package/build/esm/devices/AssociationConfig.js.map +1 -0
- package/build/esm/devices/CompatConfig.d.ts +112 -0
- package/build/esm/devices/CompatConfig.d.ts.map +1 -0
- package/build/{devices → esm/devices}/CompatConfig.js +112 -119
- package/build/esm/devices/CompatConfig.js.map +1 -0
- package/build/esm/devices/ConditionalItem.d.ts +14 -0
- package/build/esm/devices/ConditionalItem.d.ts.map +1 -0
- package/build/{devices → esm/devices}/ConditionalItem.js +15 -21
- package/build/esm/devices/ConditionalItem.js.map +1 -0
- package/build/esm/devices/ConditionalPrimitive.d.ts +13 -0
- package/build/esm/devices/ConditionalPrimitive.d.ts.map +1 -0
- package/build/esm/devices/ConditionalPrimitive.js +35 -0
- package/build/esm/devices/ConditionalPrimitive.js.map +1 -0
- package/build/esm/devices/DeviceConfig.d.ts +117 -0
- package/build/esm/devices/DeviceConfig.d.ts.map +1 -0
- package/build/{devices → esm/devices}/DeviceConfig.js +96 -108
- package/build/esm/devices/DeviceConfig.js.map +1 -0
- package/build/esm/devices/DeviceConfig.unit._test.d.ts +2 -0
- package/build/esm/devices/DeviceConfig.unit._test.d.ts.map +1 -0
- package/build/{devices → esm/devices}/DeviceConfig.unit._test.js +1 -2
- package/build/esm/devices/DeviceConfig.unit._test.js.map +1 -0
- package/build/esm/devices/DeviceMetadata.d.ts +41 -0
- package/build/esm/devices/DeviceMetadata.d.ts.map +1 -0
- package/build/{devices → esm/devices}/DeviceMetadata.js +16 -21
- package/build/esm/devices/DeviceMetadata.js.map +1 -0
- package/build/esm/devices/EndpointConfig.d.ts +20 -0
- package/build/esm/devices/EndpointConfig.d.ts.map +1 -0
- package/build/esm/devices/EndpointConfig.js +60 -0
- package/build/esm/devices/EndpointConfig.js.map +1 -0
- package/build/esm/devices/ParamInformation.d.ts +50 -0
- package/build/esm/devices/ParamInformation.d.ts.map +1 -0
- package/build/{devices → esm/devices}/ParamInformation.js +38 -44
- package/build/esm/devices/ParamInformation.js.map +1 -0
- package/build/esm/devices/shared.d.ts +11 -0
- package/build/esm/devices/shared.d.ts.map +1 -0
- package/build/esm/devices/shared.js +2 -0
- package/build/{devices → esm/devices}/shared.js.map +1 -1
- package/build/esm/index.d.ts +13 -0
- package/build/esm/index.d.ts.map +1 -0
- package/build/esm/index.js +14 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/index_safe.d.ts +3 -0
- package/build/esm/index_safe.d.ts.map +1 -0
- package/build/esm/index_safe.js +4 -0
- package/build/esm/index_safe.js.map +1 -0
- package/build/esm/package.json +3 -0
- package/build/esm/utils.d.ts +19 -0
- package/build/esm/utils.d.ts.map +1 -0
- package/build/esm/utils.js +93 -0
- package/build/esm/utils.js.map +1 -0
- package/build/esm/utils_safe.d.ts +7 -0
- package/build/esm/utils_safe.d.ts.map +1 -0
- package/build/esm/utils_safe.js +28 -0
- package/build/esm/utils_safe.js.map +1 -0
- package/package.json +22 -19
- package/build/ConfigManager.d.ts.map +0 -1
- package/build/ConfigManager.js.map +0 -1
- package/build/JsonTemplate.d.ts.map +0 -1
- package/build/JsonTemplate.js.map +0 -1
- package/build/Logger.d.ts.map +0 -1
- package/build/Logger.js +0 -27
- package/build/Logger.js.map +0 -1
- package/build/Logger_safe.d.ts.map +0 -1
- package/build/Logger_safe.js +0 -6
- package/build/Logger_safe.js.map +0 -1
- package/build/Logic.d.ts.map +0 -1
- package/build/Logic.js +0 -60
- package/build/Logic.js.map +0 -1
- package/build/LogicParser.d.ts.map +0 -1
- package/build/Manufacturers.d.ts.map +0 -1
- package/build/Manufacturers.js +0 -62
- package/build/Manufacturers.js.map +0 -1
- package/build/_version.d.ts +0 -2
- package/build/_version.d.ts.map +0 -1
- package/build/_version.js +0 -6
- package/build/_version.js.map +0 -1
- package/build/devices/AssociationConfig.d.ts.map +0 -1
- package/build/devices/AssociationConfig.js.map +0 -1
- package/build/devices/CompatConfig.d.ts.map +0 -1
- package/build/devices/CompatConfig.js.map +0 -1
- package/build/devices/ConditionalItem.d.ts.map +0 -1
- package/build/devices/ConditionalItem.js.map +0 -1
- package/build/devices/ConditionalPrimitive.d.ts.map +0 -1
- package/build/devices/ConditionalPrimitive.js +0 -40
- package/build/devices/ConditionalPrimitive.js.map +0 -1
- package/build/devices/DeviceConfig.d.ts.map +0 -1
- package/build/devices/DeviceConfig.js.map +0 -1
- package/build/devices/DeviceConfig.unit._test.d.ts.map +0 -1
- package/build/devices/DeviceConfig.unit._test.js.map +0 -1
- package/build/devices/DeviceMetadata.d.ts.map +0 -1
- package/build/devices/DeviceMetadata.js.map +0 -1
- package/build/devices/EndpointConfig.d.ts.map +0 -1
- package/build/devices/EndpointConfig.js +0 -64
- package/build/devices/EndpointConfig.js.map +0 -1
- package/build/devices/ParamInformation.d.ts.map +0 -1
- package/build/devices/ParamInformation.js.map +0 -1
- package/build/devices/shared.d.ts.map +0 -1
- package/build/devices/shared.js +0 -3
- package/build/index.d.ts +0 -13
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -33
- package/build/index.js.map +0 -1
- package/build/index_safe.d.ts +0 -3
- package/build/index_safe.d.ts.map +0 -1
- package/build/index_safe.js +0 -22
- package/build/index_safe.js.map +0 -1
- package/build/utils.d.ts.map +0 -1
- package/build/utils.js +0 -124
- package/build/utils.js.map +0 -1
- package/build/utils_safe.d.ts.map +0 -1
- package/build/utils_safe.js +0 -33
- package/build/utils_safe.js.map +0 -1
- /package/build/{JsonTemplate.d.ts → cjs/JsonTemplate.d.ts} +0 -0
- /package/build/{Logger_safe.d.ts → cjs/Logger_safe.d.ts} +0 -0
- /package/build/{Logic.d.ts → cjs/Logic.d.ts} +0 -0
- /package/build/{LogicParser.d.ts → cjs/LogicParser.d.ts} +0 -0
- /package/build/{Manufacturers.d.ts → cjs/Manufacturers.d.ts} +0 -0
- /package/build/{devices → cjs/devices}/DeviceConfig.unit._test.d.ts +0 -0
- /package/build/{devices → cjs/devices}/shared.d.ts +0 -0
- /package/build/{utils_safe.d.ts → cjs/utils_safe.d.ts} +0 -0
|
@@ -1,45 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const ConditionalItem_1 = require("./ConditionalItem");
|
|
25
|
-
const ConditionalPrimitive_1 = require("./ConditionalPrimitive");
|
|
26
|
-
const DeviceMetadata_1 = require("./DeviceMetadata");
|
|
27
|
-
const EndpointConfig_1 = require("./EndpointConfig");
|
|
28
|
-
const ParamInformation_1 = require("./ParamInformation");
|
|
29
|
-
exports.embeddedDevicesDir = node_path_1.default.join(utils_1.configDir, "devices");
|
|
30
|
-
const fulltextIndexPath = node_path_1.default.join(exports.embeddedDevicesDir, "fulltext_index.json");
|
|
31
|
-
function getDevicesPaths(configDir) {
|
|
32
|
-
const devicesDir = node_path_1.default.join(configDir, "devices");
|
|
33
|
-
const indexPath = node_path_1.default.join(devicesDir, "index.json");
|
|
1
|
+
import { ZWaveError, ZWaveErrorCodes } from "@zwave-js/core";
|
|
2
|
+
import { Bytes, enumFilesRecursive, formatId, num2hex, padVersion, pathExists, pick, stringify, } from "@zwave-js/shared";
|
|
3
|
+
import { isArray, isObject } from "alcalzone-shared/typeguards/index.js";
|
|
4
|
+
import JSON5 from "json5";
|
|
5
|
+
import { createHash } from "node:crypto";
|
|
6
|
+
import fs from "node:fs/promises";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import semver from "semver";
|
|
9
|
+
import { clearTemplateCache, readJsonWithTemplate } from "../JsonTemplate.js";
|
|
10
|
+
import { configDir, externalConfigDir } from "../utils.js";
|
|
11
|
+
import { hexKeyRegex4Digits, throwInvalidConfig } from "../utils_safe.js";
|
|
12
|
+
import { ConditionalAssociationConfig, } from "./AssociationConfig.js";
|
|
13
|
+
import { ConditionalCompatConfig } from "./CompatConfig.js";
|
|
14
|
+
import { evaluateDeep, validateCondition } from "./ConditionalItem.js";
|
|
15
|
+
import { parseConditionalPrimitive, } from "./ConditionalPrimitive.js";
|
|
16
|
+
import { ConditionalDeviceMetadata, } from "./DeviceMetadata.js";
|
|
17
|
+
import { ConditionalEndpointConfig, } from "./EndpointConfig.js";
|
|
18
|
+
import { parseConditionalParamInformationMap, } from "./ParamInformation.js";
|
|
19
|
+
export const embeddedDevicesDir = path.join(configDir, "devices");
|
|
20
|
+
const fulltextIndexPath = path.join(embeddedDevicesDir, "fulltext_index.json");
|
|
21
|
+
export function getDevicesPaths(configDir) {
|
|
22
|
+
const devicesDir = path.join(configDir, "devices");
|
|
23
|
+
const indexPath = path.join(devicesDir, "index.json");
|
|
34
24
|
return { devicesDir, indexPath };
|
|
35
25
|
}
|
|
36
26
|
async function hasChangedDeviceFiles(devicesRoot, dir, lastChange) {
|
|
37
27
|
// Check if there are any files BUT index.json that were changed
|
|
38
28
|
// or directories that were modified
|
|
39
|
-
const filesAndDirs = await
|
|
29
|
+
const filesAndDirs = await fs.readdir(dir);
|
|
40
30
|
for (const f of filesAndDirs) {
|
|
41
|
-
const fullPath =
|
|
42
|
-
const stat = await
|
|
31
|
+
const fullPath = path.join(dir, f);
|
|
32
|
+
const stat = await fs.stat(fullPath);
|
|
43
33
|
if ((dir !== devicesRoot || f !== "index.json")
|
|
44
34
|
&& (stat.isFile() || stat.isDirectory())
|
|
45
35
|
&& stat.mtime > lastChange) {
|
|
@@ -60,17 +50,17 @@ async function hasChangedDeviceFiles(devicesRoot, dir, lastChange) {
|
|
|
60
50
|
*/
|
|
61
51
|
async function generateIndex(devicesDir, isEmbedded, extractIndexEntries, logger) {
|
|
62
52
|
const index = [];
|
|
63
|
-
|
|
64
|
-
const configFiles = await
|
|
53
|
+
clearTemplateCache();
|
|
54
|
+
const configFiles = await enumFilesRecursive(devicesDir, (file) => file.endsWith(".json")
|
|
65
55
|
&& !file.endsWith("index.json")
|
|
66
56
|
&& !file.includes("/templates/")
|
|
67
57
|
&& !file.includes("\\templates\\"));
|
|
68
58
|
// Add the embedded devices dir as a fallback if necessary
|
|
69
|
-
const fallbackDirs = devicesDir !==
|
|
70
|
-
? [
|
|
59
|
+
const fallbackDirs = devicesDir !== embeddedDevicesDir
|
|
60
|
+
? [embeddedDevicesDir]
|
|
71
61
|
: undefined;
|
|
72
62
|
for (const file of configFiles) {
|
|
73
|
-
const relativePath =
|
|
63
|
+
const relativePath = path
|
|
74
64
|
.relative(devicesDir, file)
|
|
75
65
|
.replaceAll("\\", "/");
|
|
76
66
|
// Try parsing the file
|
|
@@ -87,7 +77,7 @@ async function generateIndex(devicesDir, isEmbedded, extractIndexEntries, logger
|
|
|
87
77
|
filename: relativePath,
|
|
88
78
|
};
|
|
89
79
|
// Only add the root dir to the index if necessary
|
|
90
|
-
if (devicesDir !==
|
|
80
|
+
if (devicesDir !== embeddedDevicesDir) {
|
|
91
81
|
ret.rootDir = devicesDir;
|
|
92
82
|
}
|
|
93
83
|
return ret;
|
|
@@ -98,7 +88,7 @@ async function generateIndex(devicesDir, isEmbedded, extractIndexEntries, logger
|
|
|
98
88
|
// Crash hard during tests, just print an error when in production systems.
|
|
99
89
|
// A user could have changed a config file
|
|
100
90
|
if (process.env.NODE_ENV === "test" || !!process.env.CI) {
|
|
101
|
-
throw new
|
|
91
|
+
throw new ZWaveError(message, ZWaveErrorCodes.Config_Invalid);
|
|
102
92
|
}
|
|
103
93
|
else {
|
|
104
94
|
logger?.print(message, "error");
|
|
@@ -109,15 +99,15 @@ async function generateIndex(devicesDir, isEmbedded, extractIndexEntries, logger
|
|
|
109
99
|
}
|
|
110
100
|
async function loadDeviceIndexShared(devicesDir, indexPath, extractIndexEntries, logger) {
|
|
111
101
|
// The index file needs to be regenerated if it does not exist
|
|
112
|
-
let needsUpdate = !(await
|
|
102
|
+
let needsUpdate = !(await pathExists(indexPath));
|
|
113
103
|
let index;
|
|
114
104
|
let mtimeIndex;
|
|
115
105
|
// ...or if cannot be parsed
|
|
116
106
|
if (!needsUpdate) {
|
|
117
107
|
try {
|
|
118
|
-
const fileContents = await
|
|
119
|
-
index =
|
|
120
|
-
mtimeIndex = (await
|
|
108
|
+
const fileContents = await fs.readFile(indexPath, "utf8");
|
|
109
|
+
index = JSON5.parse(fileContents);
|
|
110
|
+
mtimeIndex = (await fs.stat(indexPath)).mtime;
|
|
121
111
|
}
|
|
122
112
|
catch {
|
|
123
113
|
logger?.print("Error while parsing index file - regenerating...", "warn");
|
|
@@ -142,8 +132,8 @@ async function loadDeviceIndexShared(devicesDir, indexPath, extractIndexEntries,
|
|
|
142
132
|
index = await generateIndex(devicesDir, true, extractIndexEntries, logger);
|
|
143
133
|
// Save the index to disk
|
|
144
134
|
try {
|
|
145
|
-
await
|
|
146
|
-
${
|
|
135
|
+
await fs.writeFile(path.join(indexPath), `// This file is auto-generated. DO NOT edit it by hand if you don't know what you're doing!"
|
|
136
|
+
${stringify(index, "\t")}
|
|
147
137
|
`, "utf8");
|
|
148
138
|
logger?.print("Device index regenerated", "verbose");
|
|
149
139
|
}
|
|
@@ -158,13 +148,13 @@ ${(0, shared_1.stringify)(index, "\t")}
|
|
|
158
148
|
* Loads the index file to quickly access the device configs.
|
|
159
149
|
* Transparently handles updating the index if necessary
|
|
160
150
|
*/
|
|
161
|
-
async function generatePriorityDeviceIndex(deviceConfigPriorityDir, logger) {
|
|
151
|
+
export async function generatePriorityDeviceIndex(deviceConfigPriorityDir, logger) {
|
|
162
152
|
return (await generateIndex(deviceConfigPriorityDir, false, (config) => config.devices.map((dev) => ({
|
|
163
|
-
manufacturerId:
|
|
153
|
+
manufacturerId: formatId(config.manufacturerId.toString(16)),
|
|
164
154
|
manufacturer: config.manufacturer,
|
|
165
155
|
label: config.label,
|
|
166
|
-
productType:
|
|
167
|
-
productId:
|
|
156
|
+
productType: formatId(dev.productType),
|
|
157
|
+
productId: formatId(dev.productId),
|
|
168
158
|
firmwareVersion: config.firmwareVersion,
|
|
169
159
|
...(config.preferred ? { preferred: true } : {}),
|
|
170
160
|
rootDir: deviceConfigPriorityDir,
|
|
@@ -172,7 +162,7 @@ async function generatePriorityDeviceIndex(deviceConfigPriorityDir, logger) {
|
|
|
172
162
|
...entry,
|
|
173
163
|
// The generated index makes the filenames relative to the given directory
|
|
174
164
|
// but we need them to be absolute
|
|
175
|
-
filename:
|
|
165
|
+
filename: path.join(deviceConfigPriorityDir, filename),
|
|
176
166
|
}));
|
|
177
167
|
}
|
|
178
168
|
/**
|
|
@@ -180,14 +170,14 @@ async function generatePriorityDeviceIndex(deviceConfigPriorityDir, logger) {
|
|
|
180
170
|
* Loads the index file to quickly access the device configs.
|
|
181
171
|
* Transparently handles updating the index if necessary
|
|
182
172
|
*/
|
|
183
|
-
async function loadDeviceIndexInternal(logger, externalConfig) {
|
|
184
|
-
const { devicesDir, indexPath } = getDevicesPaths((externalConfig &&
|
|
173
|
+
export async function loadDeviceIndexInternal(logger, externalConfig) {
|
|
174
|
+
const { devicesDir, indexPath } = getDevicesPaths((externalConfig && externalConfigDir()) || configDir);
|
|
185
175
|
return loadDeviceIndexShared(devicesDir, indexPath, (config) => config.devices.map((dev) => ({
|
|
186
|
-
manufacturerId:
|
|
176
|
+
manufacturerId: formatId(config.manufacturerId.toString(16)),
|
|
187
177
|
manufacturer: config.manufacturer,
|
|
188
178
|
label: config.label,
|
|
189
|
-
productType:
|
|
190
|
-
productId:
|
|
179
|
+
productType: formatId(dev.productType),
|
|
180
|
+
productId: formatId(dev.productId),
|
|
191
181
|
firmwareVersion: config.firmwareVersion,
|
|
192
182
|
...(config.preferred ? { preferred: true } : {}),
|
|
193
183
|
})), logger);
|
|
@@ -197,22 +187,22 @@ async function loadDeviceIndexInternal(logger, externalConfig) {
|
|
|
197
187
|
* Loads the full text index file to quickly search the device configs.
|
|
198
188
|
* Transparently handles updating the index if necessary
|
|
199
189
|
*/
|
|
200
|
-
async function loadFulltextDeviceIndexInternal(logger) {
|
|
190
|
+
export async function loadFulltextDeviceIndexInternal(logger) {
|
|
201
191
|
// This method is not meant to operate with the external device index!
|
|
202
|
-
return loadDeviceIndexShared(
|
|
203
|
-
manufacturerId:
|
|
192
|
+
return loadDeviceIndexShared(embeddedDevicesDir, fulltextIndexPath, (config) => config.devices.map((dev) => ({
|
|
193
|
+
manufacturerId: formatId(config.manufacturerId.toString(16)),
|
|
204
194
|
manufacturer: config.manufacturer,
|
|
205
195
|
label: config.label,
|
|
206
196
|
description: config.description,
|
|
207
|
-
productType:
|
|
208
|
-
productId:
|
|
197
|
+
productType: formatId(dev.productType),
|
|
198
|
+
productId: formatId(dev.productId),
|
|
209
199
|
firmwareVersion: config.firmwareVersion,
|
|
210
200
|
...(config.preferred ? { preferred: true } : {}),
|
|
211
|
-
rootDir:
|
|
201
|
+
rootDir: embeddedDevicesDir,
|
|
212
202
|
})), logger);
|
|
213
203
|
}
|
|
214
204
|
function isHexKeyWith4Digits(val) {
|
|
215
|
-
return typeof val === "string" &&
|
|
205
|
+
return typeof val === "string" && hexKeyRegex4Digits.test(val);
|
|
216
206
|
}
|
|
217
207
|
const firmwareVersionRegex = /^\d{1,3}\.\d{1,3}(\.\d{1,3})?$/;
|
|
218
208
|
function isFirmwareVersion(val) {
|
|
@@ -224,13 +214,13 @@ function isFirmwareVersion(val) {
|
|
|
224
214
|
.every((num) => num >= 0 && num <= 255));
|
|
225
215
|
}
|
|
226
216
|
/** This class represents a device config entry whose conditional settings have not been evaluated yet */
|
|
227
|
-
class ConditionalDeviceConfig {
|
|
217
|
+
export class ConditionalDeviceConfig {
|
|
228
218
|
static async from(filename, isEmbedded, options) {
|
|
229
219
|
const { relative, rootDir } = options;
|
|
230
220
|
const relativePath = relative
|
|
231
|
-
?
|
|
221
|
+
? path.relative(rootDir, filename).replaceAll("\\", "/")
|
|
232
222
|
: filename;
|
|
233
|
-
const json = await
|
|
223
|
+
const json = await readJsonWithTemplate(filename, [
|
|
234
224
|
options.rootDir,
|
|
235
225
|
...(options.fallbackDirs ?? []),
|
|
236
226
|
]);
|
|
@@ -240,109 +230,109 @@ class ConditionalDeviceConfig {
|
|
|
240
230
|
this.filename = filename;
|
|
241
231
|
this.isEmbedded = isEmbedded;
|
|
242
232
|
if (!isHexKeyWith4Digits(definition.manufacturerId)) {
|
|
243
|
-
|
|
233
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
244
234
|
manufacturer id must be a lowercase hexadecimal number with 4 digits`);
|
|
245
235
|
}
|
|
246
236
|
this.manufacturerId = parseInt(definition.manufacturerId, 16);
|
|
247
237
|
for (const prop of ["manufacturer", "label", "description"]) {
|
|
248
|
-
this[prop] =
|
|
238
|
+
this[prop] = parseConditionalPrimitive(filename, "string", prop, definition[prop]);
|
|
249
239
|
}
|
|
250
|
-
if (!
|
|
251
|
-
|| !definition.devices.every((dev) =>
|
|
240
|
+
if (!isArray(definition.devices)
|
|
241
|
+
|| !definition.devices.every((dev) => isObject(dev)
|
|
252
242
|
&& isHexKeyWith4Digits(dev.productType)
|
|
253
243
|
&& isHexKeyWith4Digits(dev.productId))) {
|
|
254
|
-
|
|
244
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
255
245
|
devices is malformed (not an object or type/id that is not a lowercase 4-digit hex key)`);
|
|
256
246
|
}
|
|
257
247
|
this.devices = definition.devices.map(({ productType, productId }) => ({
|
|
258
248
|
productType: parseInt(productType, 16),
|
|
259
249
|
productId: parseInt(productId, 16),
|
|
260
250
|
}));
|
|
261
|
-
if (!
|
|
251
|
+
if (!isObject(definition.firmwareVersion)
|
|
262
252
|
|| !isFirmwareVersion(definition.firmwareVersion.min)
|
|
263
253
|
|| !isFirmwareVersion(definition.firmwareVersion.max)) {
|
|
264
|
-
|
|
254
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
265
255
|
firmwareVersion is malformed or invalid. Must be x.y or x.y.z where x, y, and z are integers between 0 and 255`);
|
|
266
256
|
}
|
|
267
257
|
else {
|
|
268
258
|
const { min, max } = definition.firmwareVersion;
|
|
269
|
-
if (
|
|
270
|
-
|
|
259
|
+
if (semver.gt(padVersion(min), padVersion(max))) {
|
|
260
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
271
261
|
firmwareVersion.min ${min} must not be greater than firmwareVersion.max ${max}`);
|
|
272
262
|
}
|
|
273
263
|
this.firmwareVersion = { min, max };
|
|
274
264
|
}
|
|
275
265
|
if (definition.preferred != undefined
|
|
276
266
|
&& definition.preferred !== true) {
|
|
277
|
-
|
|
267
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
278
268
|
preferred must be true or omitted`);
|
|
279
269
|
}
|
|
280
270
|
this.preferred = !!definition.preferred;
|
|
281
271
|
if (definition.endpoints != undefined) {
|
|
282
272
|
const endpoints = new Map();
|
|
283
|
-
if (!
|
|
284
|
-
|
|
273
|
+
if (!isObject(definition.endpoints)) {
|
|
274
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
285
275
|
endpoints is not an object`);
|
|
286
276
|
}
|
|
287
277
|
for (const [key, ep] of Object.entries(definition.endpoints)) {
|
|
288
278
|
if (!/^\d+$/.test(key)) {
|
|
289
|
-
|
|
279
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
290
280
|
found non-numeric endpoint index "${key}" in endpoints`);
|
|
291
281
|
}
|
|
292
282
|
const epIndex = parseInt(key, 10);
|
|
293
|
-
endpoints.set(epIndex, new
|
|
283
|
+
endpoints.set(epIndex, new ConditionalEndpointConfig(this, epIndex, ep));
|
|
294
284
|
}
|
|
295
285
|
this.endpoints = endpoints;
|
|
296
286
|
}
|
|
297
287
|
if (definition.associations != undefined) {
|
|
298
288
|
const associations = new Map();
|
|
299
|
-
if (!
|
|
300
|
-
|
|
289
|
+
if (!isObject(definition.associations)) {
|
|
290
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
301
291
|
associations is not an object`);
|
|
302
292
|
}
|
|
303
293
|
for (const [key, assocDefinition] of Object.entries(definition.associations)) {
|
|
304
294
|
if (!/^[1-9][0-9]*$/.test(key)) {
|
|
305
|
-
|
|
295
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
306
296
|
found non-numeric group id "${key}" in associations`);
|
|
307
297
|
}
|
|
308
298
|
const keyNum = parseInt(key, 10);
|
|
309
|
-
associations.set(keyNum, new
|
|
299
|
+
associations.set(keyNum, new ConditionalAssociationConfig(filename, keyNum, assocDefinition));
|
|
310
300
|
}
|
|
311
301
|
this.associations = associations;
|
|
312
302
|
}
|
|
313
303
|
if (definition.paramInformation != undefined) {
|
|
314
|
-
this.paramInformation =
|
|
304
|
+
this.paramInformation = parseConditionalParamInformationMap(definition, this);
|
|
315
305
|
}
|
|
316
306
|
if (definition.proprietary != undefined) {
|
|
317
|
-
if (!
|
|
318
|
-
|
|
307
|
+
if (!isObject(definition.proprietary)) {
|
|
308
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
319
309
|
proprietary is not an object`);
|
|
320
310
|
}
|
|
321
311
|
this.proprietary = definition.proprietary;
|
|
322
312
|
}
|
|
323
313
|
if (definition.compat != undefined) {
|
|
324
|
-
if (
|
|
325
|
-
&& definition.compat.every((item) =>
|
|
314
|
+
if (isArray(definition.compat)
|
|
315
|
+
&& definition.compat.every((item) => isObject(item))) {
|
|
326
316
|
// Make sure all conditions are valid
|
|
327
317
|
for (const entry of definition.compat) {
|
|
328
|
-
|
|
318
|
+
validateCondition(filename, entry, `At least one entry of compat contains an`);
|
|
329
319
|
}
|
|
330
|
-
this.compat = definition.compat.map((item) => new
|
|
320
|
+
this.compat = definition.compat.map((item) => new ConditionalCompatConfig(filename, item));
|
|
331
321
|
}
|
|
332
|
-
else if (
|
|
333
|
-
this.compat = new
|
|
322
|
+
else if (isObject(definition.compat)) {
|
|
323
|
+
this.compat = new ConditionalCompatConfig(filename, definition.compat);
|
|
334
324
|
}
|
|
335
325
|
else {
|
|
336
|
-
|
|
326
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
337
327
|
compat must be an object or any array of conditional objects`);
|
|
338
328
|
}
|
|
339
329
|
}
|
|
340
330
|
if (definition.metadata != undefined) {
|
|
341
|
-
if (!
|
|
342
|
-
|
|
331
|
+
if (!isObject(definition.metadata)) {
|
|
332
|
+
throwInvalidConfig(`device`, `packages/config/config/devices/${filename}:
|
|
343
333
|
metadata is not an object`);
|
|
344
334
|
}
|
|
345
|
-
this.metadata = new
|
|
335
|
+
this.metadata = new ConditionalDeviceMetadata(filename, definition.metadata);
|
|
346
336
|
}
|
|
347
337
|
}
|
|
348
338
|
filename;
|
|
@@ -369,11 +359,10 @@ metadata is not an object`);
|
|
|
369
359
|
/** Whether this is an embedded configuration or not */
|
|
370
360
|
isEmbedded;
|
|
371
361
|
evaluate(deviceId) {
|
|
372
|
-
return new DeviceConfig(this.filename, this.isEmbedded,
|
|
362
|
+
return new DeviceConfig(this.filename, this.isEmbedded, evaluateDeep(this.manufacturer, deviceId), this.manufacturerId, evaluateDeep(this.label, deviceId), evaluateDeep(this.description, deviceId), this.devices, this.firmwareVersion, this.preferred, evaluateDeep(this.endpoints, deviceId), evaluateDeep(this.associations, deviceId), evaluateDeep(this.paramInformation, deviceId), this.proprietary, evaluateDeep(this.compat, deviceId), evaluateDeep(this.metadata, deviceId));
|
|
373
363
|
}
|
|
374
364
|
}
|
|
375
|
-
|
|
376
|
-
class DeviceConfig {
|
|
365
|
+
export class DeviceConfig {
|
|
377
366
|
static async from(filename, isEmbedded, options) {
|
|
378
367
|
const ret = await ConditionalDeviceConfig.from(filename, isEmbedded, options);
|
|
379
368
|
return ret.evaluate(options.deviceId);
|
|
@@ -454,7 +443,7 @@ class DeviceConfig {
|
|
|
454
443
|
return ret;
|
|
455
444
|
};
|
|
456
445
|
const cloneAssociationConfig = (a) => {
|
|
457
|
-
return sortObject(
|
|
446
|
+
return sortObject(pick(a, ["maxNodes", "multiChannel", "isLifeline"]));
|
|
458
447
|
};
|
|
459
448
|
const cloneAssociationMap = (target, map) => {
|
|
460
449
|
if (!map || !map.size)
|
|
@@ -468,7 +457,7 @@ class DeviceConfig {
|
|
|
468
457
|
const cloneParamInformationMap = (target, map) => {
|
|
469
458
|
if (!map || !map.size)
|
|
470
459
|
return;
|
|
471
|
-
const getParamKey = (param) => `${param.parameterNumber}${param.valueBitMask ? `[${
|
|
460
|
+
const getParamKey = (param) => `${param.parameterNumber}${param.valueBitMask ? `[${num2hex(param.valueBitMask)}]` : ""}`;
|
|
472
461
|
target.paramInformation = [...map.values()].sort((a, b) => getParamKey(a).localeCompare(getParamKey(b)));
|
|
473
462
|
};
|
|
474
463
|
// Clone associations and param information on the root (ep 0) and endpoints
|
|
@@ -538,10 +527,9 @@ class DeviceConfig {
|
|
|
538
527
|
}
|
|
539
528
|
hashable = sortObject(hashable);
|
|
540
529
|
// And create a hash from it. This does not need to be cryptographically secure, just good enough to detect changes.
|
|
541
|
-
const buffer =
|
|
542
|
-
const md5 =
|
|
530
|
+
const buffer = Bytes.from(JSON.stringify(hashable), "utf8");
|
|
531
|
+
const md5 = createHash("md5");
|
|
543
532
|
return md5.update(buffer).digest();
|
|
544
533
|
}
|
|
545
534
|
}
|
|
546
|
-
exports.DeviceConfig = DeviceConfig;
|
|
547
535
|
//# sourceMappingURL=DeviceConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceConfig.js","sourceRoot":"","sources":["../../../src/devices/DeviceConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceConfig.unit._test.d.ts","sourceRoot":"","sources":["../../../src/devices/DeviceConfig.unit._test.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// FIXME: These tests are incompatible with auto-generating the index file
|
|
3
|
-
|
|
2
|
+
export {};
|
|
4
3
|
// import fsExtra from "fs-extra";
|
|
5
4
|
// import path from "path";
|
|
6
5
|
// import { ConfigManager } from "./ConfigManager";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceConfig.unit._test.js","sourceRoot":"","sources":["../../../src/devices/DeviceConfig.unit._test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type JSONObject } from "@zwave-js/shared/safe";
|
|
2
|
+
import { type ConditionalItem } from "./ConditionalItem.js";
|
|
3
|
+
import { type ConditionalPrimitive } from "./ConditionalPrimitive.js";
|
|
4
|
+
import type { DeviceID } from "./shared.js";
|
|
5
|
+
export declare class ConditionalDeviceMetadata implements ConditionalItem<DeviceMetadata> {
|
|
6
|
+
constructor(filename: string, definition: JSONObject);
|
|
7
|
+
readonly condition?: string;
|
|
8
|
+
evaluateCondition(deviceId?: DeviceID): DeviceMetadata | undefined;
|
|
9
|
+
/** How to wake up the device manually */
|
|
10
|
+
readonly wakeup?: ConditionalPrimitive<string>;
|
|
11
|
+
/** Inclusion instructions */
|
|
12
|
+
readonly inclusion?: ConditionalPrimitive<string>;
|
|
13
|
+
/** Exclusion instructions */
|
|
14
|
+
readonly exclusion?: ConditionalPrimitive<string>;
|
|
15
|
+
/** Instructions for resetting the device to factory defaults */
|
|
16
|
+
readonly reset?: ConditionalPrimitive<string>;
|
|
17
|
+
/** A link to the device manual */
|
|
18
|
+
readonly manual?: ConditionalPrimitive<string>;
|
|
19
|
+
/** Comments for this device */
|
|
20
|
+
readonly comments?: ConditionalDeviceComment | ConditionalDeviceComment[];
|
|
21
|
+
}
|
|
22
|
+
export interface DeviceMetadata {
|
|
23
|
+
wakeup?: string;
|
|
24
|
+
inclusion?: string;
|
|
25
|
+
exclusion?: string;
|
|
26
|
+
reset?: string;
|
|
27
|
+
manual?: string;
|
|
28
|
+
comments?: DeviceComment | DeviceComment[];
|
|
29
|
+
}
|
|
30
|
+
export declare class ConditionalDeviceComment implements ConditionalItem<DeviceComment> {
|
|
31
|
+
readonly level: DeviceComment["level"];
|
|
32
|
+
readonly text: string;
|
|
33
|
+
readonly condition?: string | undefined;
|
|
34
|
+
constructor(level: DeviceComment["level"], text: string, condition?: string | undefined);
|
|
35
|
+
evaluateCondition(deviceId?: DeviceID): DeviceComment | undefined;
|
|
36
|
+
}
|
|
37
|
+
export interface DeviceComment {
|
|
38
|
+
level: "info" | "warning" | "error";
|
|
39
|
+
text: string;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=DeviceMetadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceMetadata.d.ts","sourceRoot":"","sources":["../../../src/devices/DeviceMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,uBAAuB,CAAC;AAG9D,OAAO,EACN,KAAK,eAAe,EAGpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,KAAK,oBAAoB,EAEzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,qBAAa,yBACZ,YAAW,eAAe,CAAC,cAAc,CAAC;gBAEvB,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAiD3D,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,iBAAiB,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS;IAuBzE,yCAAyC;IACzC,SAAgB,MAAM,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACtD,6BAA6B;IAC7B,SAAgB,SAAS,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACzD,6BAA6B;IAC7B,SAAgB,SAAS,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACzD,gEAAgE;IAChE,SAAgB,KAAK,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACrD,kCAAkC;IAClC,SAAgB,MAAM,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACtD,+BAA+B;IAC/B,SAAgB,QAAQ,CAAC,EACtB,wBAAwB,GACxB,wBAAwB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;CAC3C;AAED,qBAAa,wBACZ,YAAW,eAAe,CAAC,aAAa,CAAC;aAGxB,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;aAC7B,IAAI,EAAE,MAAM;aACZ,SAAS,CAAC,EAAE,MAAM;gBAFlB,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,YAAA;IAG5B,iBAAiB,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,SAAS;CAIxE;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACb"}
|