@zwave-js/config 15.21.0 → 15.22.1
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/_version.d.ts +1 -1
- package/build/cjs/_version.js +1 -1
- package/build/cjs/_version.js.map +1 -1
- package/build/cjs/devices/CompatConfig.d.ts +26 -2
- package/build/cjs/devices/CompatConfig.js +85 -0
- package/build/cjs/devices/CompatConfig.js.map +2 -2
- package/build/cjs/devices/ConditionalPrimitive.js.map +1 -1
- package/build/cjs/devices/DeviceMetadata.js.map +1 -1
- package/build/cjs/devices/ParamInformation.js.map +1 -1
- package/build/cjs/index.d.ts +1 -1
- package/build/cjs/index.js +1 -3
- package/build/cjs/index.js.map +2 -2
- package/build/esm/ConfigManager.d.ts.map +1 -1
- package/build/esm/ConfigManager.js.map +1 -1
- package/build/esm/Logger.d.ts.map +1 -1
- package/build/esm/LogicParser.js.map +1 -1
- package/build/esm/_version.d.ts +1 -1
- package/build/esm/_version.js +1 -1
- package/build/esm/configDir.browser.js.map +1 -1
- package/build/esm/configDir.node.js.map +1 -1
- package/build/esm/devices/AssociationConfig.d.ts.map +1 -1
- package/build/esm/devices/CompatConfig.d.ts +26 -2
- package/build/esm/devices/CompatConfig.d.ts.map +1 -1
- package/build/esm/devices/CompatConfig.js +86 -0
- package/build/esm/devices/CompatConfig.js.map +1 -1
- package/build/esm/devices/ConditionalItem.js.map +1 -1
- package/build/esm/devices/ConditionalPrimitive.d.ts.map +1 -1
- package/build/esm/devices/ConditionalPrimitive.js.map +1 -1
- package/build/esm/devices/DeviceConfig.d.ts.map +1 -1
- package/build/esm/devices/DeviceConfig.js.map +1 -1
- package/build/esm/devices/DeviceMetadata.d.ts.map +1 -1
- package/build/esm/devices/DeviceMetadata.js.map +1 -1
- package/build/esm/devices/EndpointConfig.d.ts.map +1 -1
- package/build/esm/devices/ParamInformation.d.ts.map +1 -1
- package/build/esm/devices/ParamInformation.js.map +1 -1
- package/build/esm/devices/SceneConfig.d.ts.map +1 -1
- package/build/esm/index.d.ts +1 -1
- package/build/esm/index.d.ts.map +1 -1
- package/build/esm/index.js +0 -1
- package/build/esm/index.js.map +1 -1
- package/config/devices/0x0000/700_800_series_controller.json +3 -3
- package/config/devices/0x027a/zac93.json +1 -1
- package/config/devices/0x027a/zst10_700.json +2 -2
- package/config/devices/0x027a/zst39lr.json +1 -1
- package/config/devices/0x0313/e0400z-ef.json +65 -0
- package/config/eslint.config.mjs +3 -4
- package/package.json +15 -14
package/build/cjs/_version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PACKAGE_VERSION = "15.
|
|
1
|
+
export declare const PACKAGE_VERSION = "15.22.1";
|
|
2
2
|
//# sourceMappingURL=_version.d.ts.map
|
package/build/cjs/_version.js
CHANGED
|
@@ -21,7 +21,7 @@ __export(version_exports, {
|
|
|
21
21
|
PACKAGE_VERSION: () => PACKAGE_VERSION
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(version_exports);
|
|
24
|
-
const PACKAGE_VERSION = "15.
|
|
24
|
+
const PACKAGE_VERSION = "15.22.1";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
PACKAGE_VERSION
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/_version.ts"],
|
|
4
|
-
"sourcesContent": ["// This file is auto-generated by the codegen maintenance script\nexport const PACKAGE_VERSION = \"15.
|
|
4
|
+
"sourcesContent": ["// This file is auto-generated by the codegen maintenance script\nexport const PACKAGE_VERSION = \"15.22.1\";\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;AACO,MAAM,kBAAkB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -6,6 +6,7 @@ export declare class ConditionalCompatConfig implements ConditionalItem<CompatCo
|
|
|
6
6
|
private valueIdRegex;
|
|
7
7
|
constructor(filename: string, definition: JSONObject);
|
|
8
8
|
readonly alarmMapping?: readonly CompatMapAlarm[];
|
|
9
|
+
readonly remapNotifications?: readonly CompatRemapNotification[];
|
|
9
10
|
readonly addCCs?: ReadonlyMap<CommandClasses, CompatAddCC>;
|
|
10
11
|
readonly removeCCs?: ReadonlyMap<CommandClasses, "*" | readonly number[]>;
|
|
11
12
|
readonly disableAutoRefresh?: boolean;
|
|
@@ -61,6 +62,29 @@ export declare class CompatMapAlarm {
|
|
|
61
62
|
readonly from: CompatMapAlarmFrom;
|
|
62
63
|
readonly to: CompatMapAlarmTo;
|
|
63
64
|
}
|
|
65
|
+
export interface CompatRemapNotificationFrom {
|
|
66
|
+
notificationType: number;
|
|
67
|
+
notificationEvent: number;
|
|
68
|
+
}
|
|
69
|
+
export interface CompatRemapNotificationTo {
|
|
70
|
+
notificationType: number;
|
|
71
|
+
notificationEvent: number;
|
|
72
|
+
}
|
|
73
|
+
export type CompatRemapNotificationAction = {
|
|
74
|
+
type: "remap";
|
|
75
|
+
to: CompatRemapNotificationTo;
|
|
76
|
+
} | {
|
|
77
|
+
type: "clear";
|
|
78
|
+
targets: CompatRemapNotificationTo[];
|
|
79
|
+
} | {
|
|
80
|
+
type: "idle";
|
|
81
|
+
targets: CompatRemapNotificationTo[];
|
|
82
|
+
};
|
|
83
|
+
export declare class CompatRemapNotification {
|
|
84
|
+
constructor(filename: string, definition: JSONObject, index: number);
|
|
85
|
+
readonly from: CompatRemapNotificationFrom;
|
|
86
|
+
readonly action: CompatRemapNotificationAction;
|
|
87
|
+
}
|
|
64
88
|
export declare class CompatOverrideQueries {
|
|
65
89
|
constructor(filename: string, definition: JSONObject);
|
|
66
90
|
private readonly overrides;
|
|
@@ -98,7 +122,7 @@ declare const basicReportMappings: readonly [false, "auto", "Binary Sensor"];
|
|
|
98
122
|
* - false: treat the report verbatim without mapping
|
|
99
123
|
* - "Binary Sensor": treat it as a Binary Sensor CC Report, regardless of device type
|
|
100
124
|
*/
|
|
101
|
-
export type BasicReportMapping = typeof basicReportMappings[number];
|
|
125
|
+
export type BasicReportMapping = (typeof basicReportMappings)[number];
|
|
102
126
|
declare const basicSetMappings: readonly ["event", "report", "auto", "Binary Sensor"];
|
|
103
127
|
/**
|
|
104
128
|
* Defines how to handle a received Basic CC Set:
|
|
@@ -107,6 +131,6 @@ declare const basicSetMappings: readonly ["event", "report", "auto", "Binary Sen
|
|
|
107
131
|
* - "auto": map it to a different CC based on the device type, with fallback to Basic CC report
|
|
108
132
|
* - "Binary Sensor": treat it as a Binary Sensor CC Report, regardless of device type
|
|
109
133
|
*/
|
|
110
|
-
export type BasicSetMapping = typeof basicSetMappings[number];
|
|
134
|
+
export type BasicSetMapping = (typeof basicSetMappings)[number];
|
|
111
135
|
export {};
|
|
112
136
|
//# sourceMappingURL=CompatConfig.d.ts.map
|
|
@@ -22,6 +22,7 @@ __export(CompatConfig_exports, {
|
|
|
22
22
|
CompatAddCC: () => CompatAddCC,
|
|
23
23
|
CompatMapAlarm: () => CompatMapAlarm,
|
|
24
24
|
CompatOverrideQueries: () => CompatOverrideQueries,
|
|
25
|
+
CompatRemapNotification: () => CompatRemapNotification,
|
|
25
26
|
ConditionalCompatConfig: () => ConditionalCompatConfig
|
|
26
27
|
});
|
|
27
28
|
module.exports = __toCommonJS(CompatConfig_exports);
|
|
@@ -307,6 +308,13 @@ compat option alarmMapping must be an array where all items are objects!`);
|
|
|
307
308
|
}
|
|
308
309
|
this.alarmMapping = definition.alarmMapping.map((m, i) => new CompatMapAlarm(filename, m, i + 1));
|
|
309
310
|
}
|
|
311
|
+
if (definition.remapNotifications != void 0) {
|
|
312
|
+
if (!(0, import_typeguards.isArray)(definition.remapNotifications) || !definition.remapNotifications.every((m) => (0, import_typeguards.isObject)(m))) {
|
|
313
|
+
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
314
|
+
compat option remapNotifications must be an array where all items are objects!`);
|
|
315
|
+
}
|
|
316
|
+
this.remapNotifications = definition.remapNotifications.map((m, i) => new CompatRemapNotification(filename, m, i + 1));
|
|
317
|
+
}
|
|
310
318
|
if (definition.overrideQueries != void 0) {
|
|
311
319
|
if (!(0, import_typeguards.isObject)(definition.overrideQueries)) {
|
|
312
320
|
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
@@ -316,6 +324,7 @@ compat option overrideQueries must be an object!`);
|
|
|
316
324
|
}
|
|
317
325
|
}
|
|
318
326
|
alarmMapping;
|
|
327
|
+
remapNotifications;
|
|
319
328
|
addCCs;
|
|
320
329
|
removeCCs;
|
|
321
330
|
disableAutoRefresh;
|
|
@@ -348,6 +357,7 @@ compat option overrideQueries must be an object!`);
|
|
|
348
357
|
return;
|
|
349
358
|
const ret = (0, import_shared.pick)(this, [
|
|
350
359
|
"alarmMapping",
|
|
360
|
+
"remapNotifications",
|
|
351
361
|
"addCCs",
|
|
352
362
|
"removeCCs",
|
|
353
363
|
"disableAutoRefresh",
|
|
@@ -491,6 +501,80 @@ error in compat option alarmMapping, mapping #${index}: property "to.eventParame
|
|
|
491
501
|
from;
|
|
492
502
|
to;
|
|
493
503
|
}
|
|
504
|
+
class CompatRemapNotification {
|
|
505
|
+
static {
|
|
506
|
+
__name(this, "CompatRemapNotification");
|
|
507
|
+
}
|
|
508
|
+
constructor(filename, definition, index) {
|
|
509
|
+
if (!(0, import_typeguards.isObject)(definition.from)) {
|
|
510
|
+
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
511
|
+
error in compat option remapNotifications, mapping #${index}: property "from" must be an object!`);
|
|
512
|
+
} else {
|
|
513
|
+
if (typeof definition.from.notificationType !== "number") {
|
|
514
|
+
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
515
|
+
error in compat option remapNotifications, mapping #${index}: property "from.notificationType" must be a number!`);
|
|
516
|
+
}
|
|
517
|
+
if (typeof definition.from.notificationEvent !== "number") {
|
|
518
|
+
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
519
|
+
error in compat option remapNotifications, mapping #${index}: property "from.notificationEvent" must be a number!`);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
this.from = (0, import_shared.pick)(definition.from, [
|
|
523
|
+
"notificationType",
|
|
524
|
+
"notificationEvent"
|
|
525
|
+
]);
|
|
526
|
+
const validateToObject = /* @__PURE__ */ __name((obj, label) => {
|
|
527
|
+
if (!(0, import_typeguards.isObject)(obj)) {
|
|
528
|
+
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
529
|
+
error in compat option remapNotifications, mapping #${index}: ${label} must be an object!`);
|
|
530
|
+
}
|
|
531
|
+
if (typeof obj.notificationType !== "number") {
|
|
532
|
+
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
533
|
+
error in compat option remapNotifications, mapping #${index}: ${label} must have a numeric "notificationType"!`);
|
|
534
|
+
}
|
|
535
|
+
if (typeof obj.notificationEvent !== "number") {
|
|
536
|
+
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
537
|
+
error in compat option remapNotifications, mapping #${index}: ${label} must have a numeric "notificationEvent"!`);
|
|
538
|
+
}
|
|
539
|
+
}, "validateToObject");
|
|
540
|
+
const validateTargetArray = /* @__PURE__ */ __name((arr, label) => {
|
|
541
|
+
if (!(0, import_typeguards.isArray)(arr) || arr.length === 0) {
|
|
542
|
+
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
543
|
+
error in compat option remapNotifications, mapping #${index}: property "${label}" must be a non-empty array of objects!`);
|
|
544
|
+
}
|
|
545
|
+
for (let j = 0; j < arr.length; j++) {
|
|
546
|
+
validateToObject(arr[j], `"${label}[${j}]"`);
|
|
547
|
+
}
|
|
548
|
+
}, "validateTargetArray");
|
|
549
|
+
if (definition.to != void 0) {
|
|
550
|
+
validateToObject(definition.to, `property "to"`);
|
|
551
|
+
this.action = {
|
|
552
|
+
type: "remap",
|
|
553
|
+
to: (0, import_shared.pick)(definition.to, [
|
|
554
|
+
"notificationType",
|
|
555
|
+
"notificationEvent"
|
|
556
|
+
])
|
|
557
|
+
};
|
|
558
|
+
} else if (definition.clear != void 0) {
|
|
559
|
+
validateTargetArray(definition.clear, "clear");
|
|
560
|
+
this.action = {
|
|
561
|
+
type: "clear",
|
|
562
|
+
targets: definition.clear.map((target) => (0, import_shared.pick)(target, ["notificationType", "notificationEvent"]))
|
|
563
|
+
};
|
|
564
|
+
} else if (definition.idle != void 0) {
|
|
565
|
+
validateTargetArray(definition.idle, "idle");
|
|
566
|
+
this.action = {
|
|
567
|
+
type: "idle",
|
|
568
|
+
targets: definition.idle.map((target) => (0, import_shared.pick)(target, ["notificationType", "notificationEvent"]))
|
|
569
|
+
};
|
|
570
|
+
} else {
|
|
571
|
+
(0, import_utils_safe.throwInvalidConfig)("devices", `config/devices/${filename}:
|
|
572
|
+
error in compat option remapNotifications, mapping #${index}: exactly one of "to", "clear", or "idle" must be defined!`);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
from;
|
|
576
|
+
action;
|
|
577
|
+
}
|
|
494
578
|
class CompatOverrideQueries {
|
|
495
579
|
static {
|
|
496
580
|
__name(this, "CompatOverrideQueries");
|
|
@@ -594,6 +678,7 @@ __name(isBasicSetMapping, "isBasicSetMapping");
|
|
|
594
678
|
CompatAddCC,
|
|
595
679
|
CompatMapAlarm,
|
|
596
680
|
CompatOverrideQueries,
|
|
681
|
+
CompatRemapNotification,
|
|
597
682
|
ConditionalCompatConfig
|
|
598
683
|
});
|
|
599
684
|
//# sourceMappingURL=CompatConfig.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/devices/CompatConfig.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\ttype CommandClassInfo,\n\ttype CommandClasses,\n\ttype ValueID,\n\tgetCCName,\n\tstripUndefined,\n} from \"@zwave-js/core\";\nimport { type JSONObject, pick } from \"@zwave-js/shared\";\nimport { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport { throwInvalidConfig, tryParseCCId } from \"../utils_safe.js\";\nimport { type ConditionalItem, conditionApplies } from \"./ConditionalItem.js\";\nimport type { DeviceID } from \"./shared.js\";\n\nexport class ConditionalCompatConfig implements ConditionalItem<CompatConfig> {\n\tprivate valueIdRegex = /^\\$value\\$\\[.+\\]$/;\n\n\tpublic constructor(filename: string, definition: JSONObject) {\n\t\tthis.condition = definition.$if;\n\n\t\tif (definition.queryOnWakeup != undefined) {\n\t\t\tif (\n\t\t\t\t!isArray(definition.queryOnWakeup)\n\t\t\t\t|| !definition.queryOnWakeup.every(\n\t\t\t\t\t(cmd: unknown) =>\n\t\t\t\t\t\tisArray(cmd)\n\t\t\t\t\t\t&& cmd.length >= 2\n\t\t\t\t\t\t&& typeof cmd[0] === \"string\"\n\t\t\t\t\t\t&& typeof cmd[1] === \"string\"\n\t\t\t\t\t\t&& cmd\n\t\t\t\t\t\t\t.slice(2)\n\t\t\t\t\t\t\t.every(\n\t\t\t\t\t\t\t\t(arg) =>\n\t\t\t\t\t\t\t\t\ttypeof arg === \"string\"\n\t\t\t\t\t\t\t\t\t|| typeof arg === \"number\"\n\t\t\t\t\t\t\t\t\t|| typeof arg === \"boolean\",\n\t\t\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option queryOnWakeup`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Parse \"smart\" values into partial Value IDs\n\t\t\tthis.queryOnWakeup = (definition.queryOnWakeup as any[][]).map(\n\t\t\t\t(cmd) =>\n\t\t\t\t\tcmd.map((arg) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof arg === \"string\"\n\t\t\t\t\t\t\t&& this.valueIdRegex.test(arg)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst tuple = JSON.parse(\n\t\t\t\t\t\t\t\targ.slice(\"$value$\".length),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tproperty: tuple[0],\n\t\t\t\t\t\t\t\tpropertyKey: tuple[1],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t}),\n\t\t\t) as any;\n\t\t}\n\n\t\tif (definition.disableAutoRefresh != undefined) {\n\t\t\tif (definition.disableAutoRefresh !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option disableAutoRefresh must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.disableAutoRefresh = definition.disableAutoRefresh;\n\t\t}\n\n\t\tif (definition.disableCallbackFunctionTypeCheck != undefined) {\n\t\t\tif (\n\t\t\t\t!isArray(definition.disableCallbackFunctionTypeCheck)\n\t\t\t\t|| !definition.disableCallbackFunctionTypeCheck.every(\n\t\t\t\t\t(d: any) => typeof d === \"number\" && d % 1 === 0 && d > 0,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nwhen present, compat option disableCallbackFunctionTypeCheck msut be an array of positive integers`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.disableCallbackFunctionTypeCheck =\n\t\t\t\tdefinition.disableCallbackFunctionTypeCheck;\n\t\t}\n\n\t\tif (definition.disableStrictEntryControlDataValidation != undefined) {\n\t\t\tif (definition.disableStrictEntryControlDataValidation !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option disableStrictEntryControlDataValidation must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.disableStrictEntryControlDataValidation =\n\t\t\t\tdefinition.disableStrictEntryControlDataValidation;\n\t\t}\n\n\t\tif (definition.disableStrictMeasurementValidation != undefined) {\n\t\t\tif (definition.disableStrictMeasurementValidation !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option disableStrictMeasurementValidation must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.disableStrictMeasurementValidation =\n\t\t\t\tdefinition.disableStrictMeasurementValidation;\n\t\t}\n\n\t\tif (definition.encodeCCsUsingTargetVersion != undefined) {\n\t\t\tif (definition.encodeCCsUsingTargetVersion !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option encodeCCsUsingTargetVersion must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.encodeCCsUsingTargetVersion =\n\t\t\t\tdefinition.encodeCCsUsingTargetVersion;\n\t\t}\n\n\t\tif (definition.forceNotificationIdleReset != undefined) {\n\t\t\tif (definition.forceNotificationIdleReset !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option forceNotificationIdleReset must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.forceNotificationIdleReset =\n\t\t\t\tdefinition.forceNotificationIdleReset;\n\t\t}\n\n\t\tif (definition.forceSceneControllerGroupCount != undefined) {\n\t\t\tif (typeof definition.forceSceneControllerGroupCount !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option forceSceneControllerGroupCount must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdefinition.forceSceneControllerGroupCount < 0\n\t\t\t\t|| definition.forceSceneControllerGroupCount > 255\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option forceSceneControllerGroupCount must be between 0 and 255!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.forceSceneControllerGroupCount =\n\t\t\t\tdefinition.forceSceneControllerGroupCount;\n\t\t}\n\n\t\tif (definition.mapBasicReport != undefined) {\n\t\t\tif (!isBasicReportMapping(definition.mapBasicReport)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option mapBasicReport contains an invalid value`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.mapBasicReport = definition.mapBasicReport;\n\t\t}\n\n\t\tif (definition.mapBasicSet != undefined) {\n\t\t\tif (!isBasicSetMapping(definition.mapBasicSet)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option mapBasicSet contains an invalid value`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.mapBasicSet = definition.mapBasicSet;\n\t\t}\n\n\t\tif (definition.preserveRootApplicationCCValueIDs != undefined) {\n\t\t\tif (definition.preserveRootApplicationCCValueIDs !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option preserveRootApplicationCCValueIDs`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.preserveRootApplicationCCValueIDs =\n\t\t\t\tdefinition.preserveRootApplicationCCValueIDs;\n\t\t}\n\n\t\tif (definition.preserveEndpoints != undefined) {\n\t\t\tif (\n\t\t\t\tdefinition.preserveEndpoints !== \"*\"\n\t\t\t\t&& !(\n\t\t\t\t\tisArray(definition.preserveEndpoints)\n\t\t\t\t\t&& definition.preserveEndpoints.every(\n\t\t\t\t\t\t(d: any) =>\n\t\t\t\t\t\t\ttypeof d === \"number\" && d % 1 === 0 && d > 0,\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option preserveEndpoints must be \"*\" or an array of positive integers`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.preserveEndpoints = definition.preserveEndpoints;\n\t\t}\n\n\t\tif (definition.removeEndpoints != undefined) {\n\t\t\tif (\n\t\t\t\tdefinition.removeEndpoints !== \"*\"\n\t\t\t\t&& !(\n\t\t\t\t\tisArray(definition.removeEndpoints)\n\t\t\t\t\t&& definition.removeEndpoints.every(\n\t\t\t\t\t\t(d: any) =>\n\t\t\t\t\t\t\ttypeof d === \"number\" && d % 1 === 0 && d > 0,\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option removeEndpoints must be \"*\" or an array of positive integers`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.removeEndpoints = definition.removeEndpoints;\n\t\t}\n\n\t\tif (definition.skipConfigurationNameQuery != undefined) {\n\t\t\tif (definition.skipConfigurationNameQuery !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option skipConfigurationNameQuery`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.skipConfigurationNameQuery =\n\t\t\t\tdefinition.skipConfigurationNameQuery;\n\t\t}\n\n\t\tif (definition.skipConfigurationInfoQuery != undefined) {\n\t\t\tif (definition.skipConfigurationInfoQuery !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option skipConfigurationInfoQuery`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.skipConfigurationInfoQuery =\n\t\t\t\tdefinition.skipConfigurationInfoQuery;\n\t\t}\n\n\t\tif (definition.treatMultilevelSwitchSetAsEvent != undefined) {\n\t\t\tif (definition.treatMultilevelSwitchSetAsEvent !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option treatMultilevelSwitchSetAsEvent`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.treatMultilevelSwitchSetAsEvent =\n\t\t\t\tdefinition.treatMultilevelSwitchSetAsEvent;\n\t\t}\n\n\t\tif (definition.treatSetAsReport != undefined) {\n\t\t\tif (\n\t\t\t\t!(isArray(definition.treatSetAsReport)\n\t\t\t\t\t&& definition.treatSetAsReport.every(\n\t\t\t\t\t\t(d: any) => typeof d === \"string\",\n\t\t\t\t\t))\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option treatSetAsReport must be an array of strings`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.treatSetAsReport = new Set(definition.treatSetAsReport);\n\t\t}\n\n\t\tif (definition.treatDestinationEndpointAsSource != undefined) {\n\t\t\tif (definition.treatDestinationEndpointAsSource !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option treatDestinationEndpointAsSource`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.treatDestinationEndpointAsSource =\n\t\t\t\tdefinition.treatDestinationEndpointAsSource;\n\t\t}\n\n\t\tif (definition.useUTCInTimeParametersCC != undefined) {\n\t\t\tif (definition.useUTCInTimeParametersCC !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option useUTCInTimeParametersCC must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.useUTCInTimeParametersCC = definition.useUTCInTimeParametersCC;\n\t\t}\n\n\t\tif (definition.manualValueRefreshDelayMs != undefined) {\n\t\t\tif (typeof definition.manualValueRefreshDelayMs !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option manualValueRefreshDelayMs must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdefinition.manualValueRefreshDelayMs % 1 !== 0\n\t\t\t\t|| definition.manualValueRefreshDelayMs < 0\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option manualValueRefreshDelayMs must be a non-negative integer!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.manualValueRefreshDelayMs =\n\t\t\t\tdefinition.manualValueRefreshDelayMs;\n\t\t}\n\n\t\tif (definition.reportTimeout != undefined) {\n\t\t\tif (typeof definition.reportTimeout !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option reportTimeout must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdefinition.reportTimeout % 1 !== 0\n\t\t\t\t|| definition.reportTimeout < 1000\n\t\t\t\t|| definition.reportTimeout > 10000\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option reportTimeout must be an integer between 1000 and 10000!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.reportTimeout = definition.reportTimeout;\n\t\t}\n\n\t\tif (definition.mapRootReportsToEndpoint != undefined) {\n\t\t\tif (typeof definition.mapRootReportsToEndpoint !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option mapRootReportsToEndpoint must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdefinition.mapRootReportsToEndpoint % 1 !== 0\n\t\t\t\t|| definition.mapRootReportsToEndpoint < 1\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option mapRootReportsToEndpoint must be a positive integer!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.mapRootReportsToEndpoint = definition.mapRootReportsToEndpoint;\n\t\t}\n\n\t\tif (definition.overrideFloatEncoding != undefined) {\n\t\t\tif (!isObject(definition.overrideFloatEncoding)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option overrideFloatEncoding`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.overrideFloatEncoding = {};\n\t\t\tif (\"precision\" in definition.overrideFloatEncoding) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof definition.overrideFloatEncoding.precision\n\t\t\t\t\t\t!= \"number\"\n\t\t\t\t) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideFloatEncoding.precision must be a number!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tdefinition.overrideFloatEncoding.precision % 1 !== 0\n\t\t\t\t\t|| definition.overrideFloatEncoding.precision < 0\n\t\t\t\t) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideFloatEncoding.precision must be a positive integer!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.overrideFloatEncoding.precision =\n\t\t\t\t\tdefinition.overrideFloatEncoding.precision;\n\t\t\t}\n\t\t\tif (\"size\" in definition.overrideFloatEncoding) {\n\t\t\t\tif (typeof definition.overrideFloatEncoding.size != \"number\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideFloatEncoding.size must be a number!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tdefinition.overrideFloatEncoding.size % 1 !== 0\n\t\t\t\t\t|| definition.overrideFloatEncoding.size < 1\n\t\t\t\t\t|| definition.overrideFloatEncoding.size > 4\n\t\t\t\t) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideFloatEncoding.size must be an integer between 1 and 4!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.overrideFloatEncoding.size =\n\t\t\t\t\tdefinition.overrideFloatEncoding.size;\n\t\t\t}\n\n\t\t\tif (Object.keys(this.overrideFloatEncoding).length === 0) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option overrideFloatEncoding: size and/or precision must be specified!`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (definition.commandClasses != undefined) {\n\t\t\tif (!isObject(definition.commandClasses)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option commandClasses`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (definition.commandClasses.add != undefined) {\n\t\t\t\tif (!isObject(definition.commandClasses.add)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nerror in compat option commandClasses.add`,\n\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\t!Object.values(definition.commandClasses.add).every((v) =>\n\t\t\t\t\t\tisObject(v)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nAll values in compat option commandClasses.add must be objects`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst addCCs = new Map<CommandClasses, CompatAddCC>();\n\t\t\t\tfor (\n\t\t\t\t\tconst [key, info] of Object.entries(\n\t\t\t\t\t\tdefinition.commandClasses.add,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t// Parse the key into a CC ID\n\t\t\t\t\tconst cc = tryParseCCId(key);\n\t\t\t\t\tif (cc == undefined) {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`config/devices/${filename}:\nInvalid Command Class \"${key}\" specified in compat option commandClasses.add!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\taddCCs.set(cc, new CompatAddCC(filename, info as any));\n\t\t\t\t}\n\t\t\t\tthis.addCCs = addCCs;\n\t\t\t}\n\n\t\t\tif (definition.commandClasses.remove != undefined) {\n\t\t\t\tif (!isObject(definition.commandClasses.remove)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nerror in compat option commandClasses.remove`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst removeCCs = new Map<\n\t\t\t\t\tCommandClasses,\n\t\t\t\t\t\"*\" | readonly number[]\n\t\t\t\t>();\n\t\t\t\tfor (\n\t\t\t\t\tconst [key, info] of Object.entries(\n\t\t\t\t\t\tdefinition.commandClasses.remove,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t// Parse the key into a CC ID\n\t\t\t\t\tconst cc = tryParseCCId(key);\n\t\t\t\t\tif (cc == undefined) {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`config/devices/${filename}:\nInvalid Command Class \"${key}\" specified in compat option commandClasses.remove!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (isObject(info) && \"endpoints\" in info) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tinfo.endpoints === \"*\"\n\t\t\t\t\t\t\t|| (isArray(info.endpoints)\n\t\t\t\t\t\t\t\t&& info.endpoints.every(\n\t\t\t\t\t\t\t\t\t(i) => typeof i === \"number\",\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCCs.set(cc, info.endpoints as any);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t\t`config/devices/${filename}:\nCompat option commandClasses.remove has an invalid \"endpoints\" property. Only \"*\" and numeric arrays are allowed!`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`config/devices/${filename}:\nAll values in compat option commandClasses.remove must be objects with an \"endpoints\" property!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.removeCCs = removeCCs;\n\t\t\t}\n\t\t}\n\n\t\tif (definition.alarmMapping != undefined) {\n\t\t\tif (\n\t\t\t\t!isArray(definition.alarmMapping)\n\t\t\t\t|| !definition.alarmMapping.every((m: any) => isObject(m))\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option alarmMapping must be an array where all items are objects!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.alarmMapping = (definition.alarmMapping as any[]).map(\n\t\t\t\t(m, i) => new CompatMapAlarm(filename, m, i + 1),\n\t\t\t);\n\t\t}\n\n\t\tif (definition.overrideQueries != undefined) {\n\t\t\tif (!isObject(definition.overrideQueries)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideQueries must be an object!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.overrideQueries = new CompatOverrideQueries(\n\t\t\t\tfilename,\n\t\t\t\tdefinition.overrideQueries,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic readonly alarmMapping?: readonly CompatMapAlarm[];\n\tpublic readonly addCCs?: ReadonlyMap<CommandClasses, CompatAddCC>;\n\tpublic readonly removeCCs?: ReadonlyMap<\n\t\tCommandClasses,\n\t\t\"*\" | readonly number[]\n\t>;\n\tpublic readonly disableAutoRefresh?: boolean;\n\tpublic readonly disableStrictEntryControlDataValidation?: boolean;\n\tpublic readonly disableStrictMeasurementValidation?: boolean;\n\tpublic readonly disableCallbackFunctionTypeCheck?: number[];\n\tpublic readonly encodeCCsUsingTargetVersion?: boolean;\n\tpublic readonly forceNotificationIdleReset?: boolean;\n\tpublic readonly forceSceneControllerGroupCount?: number;\n\tpublic readonly manualValueRefreshDelayMs?: number;\n\tpublic readonly mapRootReportsToEndpoint?: number;\n\tpublic readonly mapBasicReport?: BasicReportMapping;\n\tpublic readonly mapBasicSet?: BasicSetMapping;\n\tpublic readonly overrideFloatEncoding?: {\n\t\tsize?: number;\n\t\tprecision?: number;\n\t};\n\tpublic readonly overrideQueries?: CompatOverrideQueries;\n\tpublic readonly preserveRootApplicationCCValueIDs?: boolean;\n\tpublic readonly preserveEndpoints?: \"*\" | readonly number[];\n\tpublic readonly removeEndpoints?: \"*\" | readonly number[];\n\tpublic readonly reportTimeout?: number;\n\tpublic readonly skipConfigurationNameQuery?: boolean;\n\tpublic readonly skipConfigurationInfoQuery?: boolean;\n\tpublic readonly treatMultilevelSwitchSetAsEvent?: boolean;\n\tpublic readonly treatSetAsReport?: ReadonlySet<string>;\n\tpublic readonly treatDestinationEndpointAsSource?: boolean;\n\tpublic readonly useUTCInTimeParametersCC?: boolean;\n\tpublic readonly queryOnWakeup?: readonly [\n\t\tstring,\n\t\tstring,\n\t\t...(\n\t\t\t| string\n\t\t\t| number\n\t\t\t| boolean\n\t\t\t| Pick<ValueID, \"property\" | \"propertyKey\">\n\t\t)[],\n\t][];\n\n\tpublic readonly condition?: string | undefined;\n\n\tpublic evaluateCondition(deviceId?: DeviceID): CompatConfig | undefined {\n\t\tif (!conditionApplies(this, deviceId)) return;\n\t\tconst ret = pick(this, [\n\t\t\t\"alarmMapping\",\n\t\t\t\"addCCs\",\n\t\t\t\"removeCCs\",\n\t\t\t\"disableAutoRefresh\",\n\t\t\t\"disableCallbackFunctionTypeCheck\",\n\t\t\t\"disableStrictEntryControlDataValidation\",\n\t\t\t\"disableStrictMeasurementValidation\",\n\t\t\t\"encodeCCsUsingTargetVersion\",\n\t\t\t\"forceNotificationIdleReset\",\n\t\t\t\"forceSceneControllerGroupCount\",\n\t\t\t\"manualValueRefreshDelayMs\",\n\t\t\t\"mapBasicReport\",\n\t\t\t\"mapBasicSet\",\n\t\t\t\"mapRootReportsToEndpoint\",\n\t\t\t\"overrideFloatEncoding\",\n\t\t\t\"overrideQueries\",\n\t\t\t\"reportTimeout\",\n\t\t\t\"preserveRootApplicationCCValueIDs\",\n\t\t\t\"preserveEndpoints\",\n\t\t\t\"removeEndpoints\",\n\t\t\t\"skipConfigurationNameQuery\",\n\t\t\t\"skipConfigurationInfoQuery\",\n\t\t\t\"treatMultilevelSwitchSetAsEvent\",\n\t\t\t\"treatSetAsReport\",\n\t\t\t\"treatDestinationEndpointAsSource\",\n\t\t\t\"useUTCInTimeParametersCC\",\n\t\t\t\"queryOnWakeup\",\n\t\t]);\n\t\treturn stripUndefined(ret) as CompatConfig;\n\t}\n}\n\nexport type CompatConfig = Omit<\n\tConditionalCompatConfig,\n\t\"condition\" | \"evaluateCondition\"\n>;\n\nexport class CompatAddCC {\n\tpublic constructor(filename: string, definition: JSONObject) {\n\t\tconst endpoints = new Map<number, Partial<CommandClassInfo>>();\n\t\tconst parseEndpointInfo = (endpoint: number, info: JSONObject) => {\n\t\t\tconst parsed: Partial<CommandClassInfo> = {};\n\t\t\tif (info.isSupported != undefined) {\n\t\t\t\tif (typeof info.isSupported !== \"boolean\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nProperty isSupported in compat option commandClasses.add, endpoint ${endpoint} must be a boolean!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tparsed.isSupported = info.isSupported;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (info.isControlled != undefined) {\n\t\t\t\tif (typeof info.isControlled !== \"boolean\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nProperty isControlled in compat option commandClasses.add, endpoint ${endpoint} must be a boolean!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tparsed.isControlled = info.isControlled;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (info.secure != undefined) {\n\t\t\t\tif (typeof info.secure !== \"boolean\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nProperty secure in compat option commandClasses.add, endpoint ${endpoint} must be a boolean!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tparsed.secure = info.secure;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (info.version != undefined) {\n\t\t\t\tif (typeof info.version !== \"number\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nProperty version in compat option commandClasses.add, endpoint ${endpoint} must be a number!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tparsed.version = info.version;\n\t\t\t\t}\n\t\t\t}\n\t\t\tendpoints.set(endpoint, parsed);\n\t\t};\n\t\t// Parse root endpoint info if given\n\t\tif (\n\t\t\tdefinition.isSupported != undefined\n\t\t\t|| definition.isControlled != undefined\n\t\t\t|| definition.version != undefined\n\t\t\t|| definition.secure != undefined\n\t\t) {\n\t\t\t// We have info for the root endpoint\n\t\t\tparseEndpointInfo(0, definition);\n\t\t}\n\t\t// Parse all other endpoints\n\t\tif (isObject(definition.endpoints)) {\n\t\t\tif (\n\t\t\t\t!Object.keys(definition.endpoints).every((k) => /^\\d+$/.test(k))\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ninvalid endpoint index in compat option commandClasses.add`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tfor (const [ep, info] of Object.entries(definition.endpoints)) {\n\t\t\t\t\tparseEndpointInfo(parseInt(ep), info as any);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.endpoints = endpoints;\n\t}\n\n\tpublic readonly endpoints: ReadonlyMap<number, Partial<CommandClassInfo>>;\n}\n\nexport interface CompatMapAlarmFrom {\n\talarmType: number;\n\talarmLevel?: number;\n}\n\nexport interface CompatMapAlarmTo {\n\tnotificationType: number;\n\tnotificationEvent: number;\n\teventParameters?: Record<string, number | \"alarmLevel\">;\n}\n\nexport class CompatMapAlarm {\n\tpublic constructor(\n\t\tfilename: string,\n\t\tdefinition: JSONObject,\n\t\tindex: number,\n\t) {\n\t\tif (!isObject(definition.from)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"from\" must be an object!`,\n\t\t\t);\n\t\t} else {\n\t\t\tif (typeof definition.from.alarmType !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"from.alarmType\" must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tdefinition.from.alarmLevel != undefined\n\t\t\t\t&& typeof definition.from.alarmLevel !== \"number\"\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: if property \"from.alarmLevel\" is given, it must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (!isObject(definition.to)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to\" must be an object!`,\n\t\t\t);\n\t\t} else {\n\t\t\tif (typeof definition.to.notificationType !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to.notificationType\" must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof definition.to.notificationEvent !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to.notificationEvent\" must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (definition.to.eventParameters != undefined) {\n\t\t\t\tif (!isObject(definition.to.eventParameters)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to.eventParameters\" must be an object!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tfor (\n\t\t\t\t\t\tconst [key, val] of Object.entries(\n\t\t\t\t\t\t\tdefinition.to.eventParameters,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (typeof val !== \"number\" && val !== \"alarmLevel\") {\n\t\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to.eventParameters.${key}\" must be a number or the literal \"alarmLevel\"!`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.from = pick(definition.from, [\"alarmType\", \"alarmLevel\"]);\n\t\tthis.to = pick(definition.to, [\n\t\t\t\"notificationType\",\n\t\t\t\"notificationEvent\",\n\t\t\t\"eventParameters\",\n\t\t]);\n\t}\n\n\tpublic readonly from: CompatMapAlarmFrom;\n\tpublic readonly to: CompatMapAlarmTo;\n}\n\nexport class CompatOverrideQueries {\n\tpublic constructor(filename: string, definition: JSONObject) {\n\t\tconst overrides = new Map();\n\n\t\tconst parseOverride = (\n\t\t\tcc: CommandClasses,\n\t\t\tinfo: JSONObject,\n\t\t): CompatOverrideQuery => {\n\t\t\tif (typeof info.method !== \"string\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"method\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be a string!`,\n\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\tinfo.matchArgs != undefined\n\t\t\t\t&& !isArray(info.matchArgs)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"matchArgs\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be an array!`,\n\t\t\t\t);\n\t\t\t} else if (!(\"result\" in info)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"result\" is missing in in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t}!`,\n\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\tinfo.endpoint != undefined\n\t\t\t\t&& typeof info.endpoint !== \"number\"\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"endpoint\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be a number!`,\n\t\t\t\t);\n\t\t\t} else if (info.persistValues && !isObject(info.persistValues)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"persistValues\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be an object!`,\n\t\t\t\t);\n\t\t\t} else if (info.extendMetadata && !isObject(info.extendMetadata)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"extendMetadata\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be an object!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tendpoint: info.endpoint,\n\t\t\t\tmethod: info.method,\n\t\t\t\tmatchArgs: info.matchArgs,\n\t\t\t\tresult: info.result,\n\t\t\t\tpersistValues: info.persistValues,\n\t\t\t\textendMetadata: info.extendMetadata,\n\t\t\t};\n\t\t};\n\n\t\tfor (const [key, value] of Object.entries(definition)) {\n\t\t\t// Parse the key into a CC ID\n\t\t\tconst cc = tryParseCCId(key);\n\t\t\tif (cc == undefined) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nInvalid Command Class \"${key}\" specified in compat option overrideQueries!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet overrideDefinitions: any;\n\t\t\tif (isObject(value)) {\n\t\t\t\toverrideDefinitions = [value];\n\t\t\t} else if (!isArray(value)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"${key}\" in compat option overrideQueries must be a single override object or an array thereof!`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toverrideDefinitions = value;\n\t\t\t}\n\n\t\t\toverrides.set(\n\t\t\t\tcc,\n\t\t\t\toverrideDefinitions.map((info: any) => parseOverride(cc, info)),\n\t\t\t);\n\t\t}\n\n\t\tthis.overrides = overrides;\n\t}\n\n\t// CC -> endpoint -> queries\n\tprivate readonly overrides: ReadonlyMap<\n\t\tCommandClasses,\n\t\tCompatOverrideQuery[]\n\t>;\n\n\tpublic hasOverride(ccId: CommandClasses): boolean {\n\t\treturn this.overrides.has(ccId);\n\t}\n\n\tpublic matchOverride(\n\t\tcc: CommandClasses,\n\t\tendpointIndex: number,\n\t\tmethod: string,\n\t\targs: any[],\n\t):\n\t\t| Pick<\n\t\t\tCompatOverrideQuery,\n\t\t\t\"result\" | \"persistValues\" | \"extendMetadata\"\n\t\t>\n\t\t| undefined\n\t{\n\t\tconst queries = this.overrides.get(cc);\n\t\tif (!queries) return undefined;\n\t\tfor (const query of queries) {\n\t\t\tif ((query.endpoint ?? 0) !== endpointIndex) continue;\n\t\t\tif (query.method !== method) continue;\n\t\t\tif (query.matchArgs) {\n\t\t\t\tif (query.matchArgs.length !== args.length) continue;\n\t\t\t\tif (!query.matchArgs.every((arg, i) => arg === args[i])) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pick(query, [\"result\", \"persistValues\", \"extendMetadata\"]);\n\t\t}\n\t}\n}\n\nexport interface CompatOverrideQuery {\n\t/** Which endpoint this override is for */\n\tendpoint?: number;\n\t/** For which API method this override is defined */\n\tmethod: string;\n\t/**\n\t * An array of method arguments that needs to match for this override to apply.\n\t * If `undefined`, no matching is performed.\n\t */\n\tmatchArgs?: any[];\n\t/** The result to return from the API call */\n\tresult: any;\n\t/**\n\t * An optional dictionary of values that will be persisted in the cache.\n\t * The keys are properties of the `...CCValues` objects that belong to this CC.\n\t */\n\tpersistValues?: Record<string, any>;\n\t/**\n\t * An optional dictionary of value metadata that will be persisted in the cache.\n\t * The keys are properties of the `...CCValues` objects that belong to this CC.\n\t * The given metadata will be merged with statically defined value metadata.\n\t */\n\textendMetadata?: Record<string, any>;\n}\n\nconst basicReportMappings = [\n\tfalse,\n\t\"auto\",\n\t\"Binary Sensor\",\n] as const;\n\n/**\n * Defines how to handle a received Basic CC Report:\n * - \"auto\": map it to a different CC based on the device type, with fallback to `false`\n * - false: treat the report verbatim without mapping\n * - \"Binary Sensor\": treat it as a Binary Sensor CC Report, regardless of device type\n */\nexport type BasicReportMapping = typeof basicReportMappings[number];\n\nfunction isBasicReportMapping(v: unknown): v is BasicReportMapping {\n\treturn basicReportMappings.includes(v as any);\n}\n\nconst basicSetMappings = [\n\t\"event\",\n\t\"report\",\n\t\"auto\",\n\t\"Binary Sensor\",\n] as const;\n\n/**\n * Defines how to handle a received Basic CC Set:\n * - \"event\": emit an event for the special `event` CC value\n * - \"report\": treat it as as a Basic CC Report (default)\n * - \"auto\": map it to a different CC based on the device type, with fallback to Basic CC report\n * - \"Binary Sensor\": treat it as a Binary Sensor CC Report, regardless of device type\n */\nexport type BasicSetMapping = typeof basicSetMappings[number];\n\nfunction isBasicSetMapping(v: unknown): v is BasicSetMapping {\n\treturn basicSetMappings.includes(v as any);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n\ttype CommandClassInfo,\n\ttype CommandClasses,\n\ttype ValueID,\n\tgetCCName,\n\tstripUndefined,\n} from \"@zwave-js/core\";\nimport { type JSONObject, pick } from \"@zwave-js/shared\";\nimport { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport { throwInvalidConfig, tryParseCCId } from \"../utils_safe.js\";\nimport { type ConditionalItem, conditionApplies } from \"./ConditionalItem.js\";\nimport type { DeviceID } from \"./shared.js\";\n\nexport class ConditionalCompatConfig implements ConditionalItem<CompatConfig> {\n\tprivate valueIdRegex = /^\\$value\\$\\[.+\\]$/;\n\n\tpublic constructor(filename: string, definition: JSONObject) {\n\t\tthis.condition = definition.$if;\n\n\t\tif (definition.queryOnWakeup != undefined) {\n\t\t\tif (\n\t\t\t\t!isArray(definition.queryOnWakeup)\n\t\t\t\t|| !definition.queryOnWakeup.every(\n\t\t\t\t\t(cmd: unknown) =>\n\t\t\t\t\t\tisArray(cmd)\n\t\t\t\t\t\t&& cmd.length >= 2\n\t\t\t\t\t\t&& typeof cmd[0] === \"string\"\n\t\t\t\t\t\t&& typeof cmd[1] === \"string\"\n\t\t\t\t\t\t&& cmd\n\t\t\t\t\t\t\t.slice(2)\n\t\t\t\t\t\t\t.every(\n\t\t\t\t\t\t\t\t(arg) =>\n\t\t\t\t\t\t\t\t\ttypeof arg === \"string\"\n\t\t\t\t\t\t\t\t\t|| typeof arg === \"number\"\n\t\t\t\t\t\t\t\t\t|| typeof arg === \"boolean\",\n\t\t\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option queryOnWakeup`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Parse \"smart\" values into partial Value IDs\n\t\t\tthis.queryOnWakeup = (definition.queryOnWakeup as any[][]).map(\n\t\t\t\t(cmd) =>\n\t\t\t\t\tcmd.map((arg) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof arg === \"string\"\n\t\t\t\t\t\t\t&& this.valueIdRegex.test(arg)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst tuple = JSON.parse(\n\t\t\t\t\t\t\t\targ.slice(\"$value$\".length),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tproperty: tuple[0],\n\t\t\t\t\t\t\t\tpropertyKey: tuple[1],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t}),\n\t\t\t) as any;\n\t\t}\n\n\t\tif (definition.disableAutoRefresh != undefined) {\n\t\t\tif (definition.disableAutoRefresh !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option disableAutoRefresh must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.disableAutoRefresh = definition.disableAutoRefresh;\n\t\t}\n\n\t\tif (definition.disableCallbackFunctionTypeCheck != undefined) {\n\t\t\tif (\n\t\t\t\t!isArray(definition.disableCallbackFunctionTypeCheck)\n\t\t\t\t|| !definition.disableCallbackFunctionTypeCheck.every(\n\t\t\t\t\t(d: any) => typeof d === \"number\" && d % 1 === 0 && d > 0,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nwhen present, compat option disableCallbackFunctionTypeCheck msut be an array of positive integers`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.disableCallbackFunctionTypeCheck =\n\t\t\t\tdefinition.disableCallbackFunctionTypeCheck;\n\t\t}\n\n\t\tif (definition.disableStrictEntryControlDataValidation != undefined) {\n\t\t\tif (definition.disableStrictEntryControlDataValidation !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option disableStrictEntryControlDataValidation must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.disableStrictEntryControlDataValidation =\n\t\t\t\tdefinition.disableStrictEntryControlDataValidation;\n\t\t}\n\n\t\tif (definition.disableStrictMeasurementValidation != undefined) {\n\t\t\tif (definition.disableStrictMeasurementValidation !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option disableStrictMeasurementValidation must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.disableStrictMeasurementValidation =\n\t\t\t\tdefinition.disableStrictMeasurementValidation;\n\t\t}\n\n\t\tif (definition.encodeCCsUsingTargetVersion != undefined) {\n\t\t\tif (definition.encodeCCsUsingTargetVersion !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option encodeCCsUsingTargetVersion must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.encodeCCsUsingTargetVersion =\n\t\t\t\tdefinition.encodeCCsUsingTargetVersion;\n\t\t}\n\n\t\tif (definition.forceNotificationIdleReset != undefined) {\n\t\t\tif (definition.forceNotificationIdleReset !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option forceNotificationIdleReset must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.forceNotificationIdleReset =\n\t\t\t\tdefinition.forceNotificationIdleReset;\n\t\t}\n\n\t\tif (definition.forceSceneControllerGroupCount != undefined) {\n\t\t\tif (typeof definition.forceSceneControllerGroupCount !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option forceSceneControllerGroupCount must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdefinition.forceSceneControllerGroupCount < 0\n\t\t\t\t|| definition.forceSceneControllerGroupCount > 255\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option forceSceneControllerGroupCount must be between 0 and 255!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.forceSceneControllerGroupCount =\n\t\t\t\tdefinition.forceSceneControllerGroupCount;\n\t\t}\n\n\t\tif (definition.mapBasicReport != undefined) {\n\t\t\tif (!isBasicReportMapping(definition.mapBasicReport)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option mapBasicReport contains an invalid value`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.mapBasicReport = definition.mapBasicReport;\n\t\t}\n\n\t\tif (definition.mapBasicSet != undefined) {\n\t\t\tif (!isBasicSetMapping(definition.mapBasicSet)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option mapBasicSet contains an invalid value`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.mapBasicSet = definition.mapBasicSet;\n\t\t}\n\n\t\tif (definition.preserveRootApplicationCCValueIDs != undefined) {\n\t\t\tif (definition.preserveRootApplicationCCValueIDs !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option preserveRootApplicationCCValueIDs`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.preserveRootApplicationCCValueIDs =\n\t\t\t\tdefinition.preserveRootApplicationCCValueIDs;\n\t\t}\n\n\t\tif (definition.preserveEndpoints != undefined) {\n\t\t\tif (\n\t\t\t\tdefinition.preserveEndpoints !== \"*\"\n\t\t\t\t&& !(\n\t\t\t\t\tisArray(definition.preserveEndpoints)\n\t\t\t\t\t&& definition.preserveEndpoints.every(\n\t\t\t\t\t\t(d: any) =>\n\t\t\t\t\t\t\ttypeof d === \"number\" && d % 1 === 0 && d > 0,\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option preserveEndpoints must be \"*\" or an array of positive integers`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.preserveEndpoints = definition.preserveEndpoints;\n\t\t}\n\n\t\tif (definition.removeEndpoints != undefined) {\n\t\t\tif (\n\t\t\t\tdefinition.removeEndpoints !== \"*\"\n\t\t\t\t&& !(\n\t\t\t\t\tisArray(definition.removeEndpoints)\n\t\t\t\t\t&& definition.removeEndpoints.every(\n\t\t\t\t\t\t(d: any) =>\n\t\t\t\t\t\t\ttypeof d === \"number\" && d % 1 === 0 && d > 0,\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option removeEndpoints must be \"*\" or an array of positive integers`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.removeEndpoints = definition.removeEndpoints;\n\t\t}\n\n\t\tif (definition.skipConfigurationNameQuery != undefined) {\n\t\t\tif (definition.skipConfigurationNameQuery !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option skipConfigurationNameQuery`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.skipConfigurationNameQuery =\n\t\t\t\tdefinition.skipConfigurationNameQuery;\n\t\t}\n\n\t\tif (definition.skipConfigurationInfoQuery != undefined) {\n\t\t\tif (definition.skipConfigurationInfoQuery !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option skipConfigurationInfoQuery`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.skipConfigurationInfoQuery =\n\t\t\t\tdefinition.skipConfigurationInfoQuery;\n\t\t}\n\n\t\tif (definition.treatMultilevelSwitchSetAsEvent != undefined) {\n\t\t\tif (definition.treatMultilevelSwitchSetAsEvent !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option treatMultilevelSwitchSetAsEvent`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.treatMultilevelSwitchSetAsEvent =\n\t\t\t\tdefinition.treatMultilevelSwitchSetAsEvent;\n\t\t}\n\n\t\tif (definition.treatSetAsReport != undefined) {\n\t\t\tif (\n\t\t\t\t!(isArray(definition.treatSetAsReport)\n\t\t\t\t\t&& definition.treatSetAsReport.every(\n\t\t\t\t\t\t(d: any) => typeof d === \"string\",\n\t\t\t\t\t))\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option treatSetAsReport must be an array of strings`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.treatSetAsReport = new Set(definition.treatSetAsReport);\n\t\t}\n\n\t\tif (definition.treatDestinationEndpointAsSource != undefined) {\n\t\t\tif (definition.treatDestinationEndpointAsSource !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option treatDestinationEndpointAsSource`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.treatDestinationEndpointAsSource =\n\t\t\t\tdefinition.treatDestinationEndpointAsSource;\n\t\t}\n\n\t\tif (definition.useUTCInTimeParametersCC != undefined) {\n\t\t\tif (definition.useUTCInTimeParametersCC !== true) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option useUTCInTimeParametersCC must be true or omitted`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.useUTCInTimeParametersCC = definition.useUTCInTimeParametersCC;\n\t\t}\n\n\t\tif (definition.manualValueRefreshDelayMs != undefined) {\n\t\t\tif (typeof definition.manualValueRefreshDelayMs !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option manualValueRefreshDelayMs must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdefinition.manualValueRefreshDelayMs % 1 !== 0\n\t\t\t\t|| definition.manualValueRefreshDelayMs < 0\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option manualValueRefreshDelayMs must be a non-negative integer!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.manualValueRefreshDelayMs =\n\t\t\t\tdefinition.manualValueRefreshDelayMs;\n\t\t}\n\n\t\tif (definition.reportTimeout != undefined) {\n\t\t\tif (typeof definition.reportTimeout !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option reportTimeout must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdefinition.reportTimeout % 1 !== 0\n\t\t\t\t|| definition.reportTimeout < 1000\n\t\t\t\t|| definition.reportTimeout > 10000\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option reportTimeout must be an integer between 1000 and 10000!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.reportTimeout = definition.reportTimeout;\n\t\t}\n\n\t\tif (definition.mapRootReportsToEndpoint != undefined) {\n\t\t\tif (typeof definition.mapRootReportsToEndpoint !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option mapRootReportsToEndpoint must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdefinition.mapRootReportsToEndpoint % 1 !== 0\n\t\t\t\t|| definition.mapRootReportsToEndpoint < 1\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option mapRootReportsToEndpoint must be a positive integer!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.mapRootReportsToEndpoint = definition.mapRootReportsToEndpoint;\n\t\t}\n\n\t\tif (definition.overrideFloatEncoding != undefined) {\n\t\t\tif (!isObject(definition.overrideFloatEncoding)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option overrideFloatEncoding`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.overrideFloatEncoding = {};\n\t\t\tif (\"precision\" in definition.overrideFloatEncoding) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof definition.overrideFloatEncoding.precision\n\t\t\t\t\t\t!= \"number\"\n\t\t\t\t) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideFloatEncoding.precision must be a number!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tdefinition.overrideFloatEncoding.precision % 1 !== 0\n\t\t\t\t\t|| definition.overrideFloatEncoding.precision < 0\n\t\t\t\t) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideFloatEncoding.precision must be a positive integer!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.overrideFloatEncoding.precision =\n\t\t\t\t\tdefinition.overrideFloatEncoding.precision;\n\t\t\t}\n\t\t\tif (\"size\" in definition.overrideFloatEncoding) {\n\t\t\t\tif (typeof definition.overrideFloatEncoding.size != \"number\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideFloatEncoding.size must be a number!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tdefinition.overrideFloatEncoding.size % 1 !== 0\n\t\t\t\t\t|| definition.overrideFloatEncoding.size < 1\n\t\t\t\t\t|| definition.overrideFloatEncoding.size > 4\n\t\t\t\t) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideFloatEncoding.size must be an integer between 1 and 4!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.overrideFloatEncoding.size =\n\t\t\t\t\tdefinition.overrideFloatEncoding.size;\n\t\t\t}\n\n\t\t\tif (Object.keys(this.overrideFloatEncoding).length === 0) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option overrideFloatEncoding: size and/or precision must be specified!`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (definition.commandClasses != undefined) {\n\t\t\tif (!isObject(definition.commandClasses)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option commandClasses`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (definition.commandClasses.add != undefined) {\n\t\t\t\tif (!isObject(definition.commandClasses.add)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nerror in compat option commandClasses.add`,\n\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\t!Object.values(definition.commandClasses.add).every((v) =>\n\t\t\t\t\t\tisObject(v)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nAll values in compat option commandClasses.add must be objects`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst addCCs = new Map<CommandClasses, CompatAddCC>();\n\t\t\t\tfor (\n\t\t\t\t\tconst [key, info] of Object.entries(\n\t\t\t\t\t\tdefinition.commandClasses.add,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t// Parse the key into a CC ID\n\t\t\t\t\tconst cc = tryParseCCId(key);\n\t\t\t\t\tif (cc == undefined) {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`config/devices/${filename}:\nInvalid Command Class \"${key}\" specified in compat option commandClasses.add!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\taddCCs.set(cc, new CompatAddCC(filename, info as any));\n\t\t\t\t}\n\t\t\t\tthis.addCCs = addCCs;\n\t\t\t}\n\n\t\t\tif (definition.commandClasses.remove != undefined) {\n\t\t\t\tif (!isObject(definition.commandClasses.remove)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nerror in compat option commandClasses.remove`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst removeCCs = new Map<\n\t\t\t\t\tCommandClasses,\n\t\t\t\t\t\"*\" | readonly number[]\n\t\t\t\t>();\n\t\t\t\tfor (\n\t\t\t\t\tconst [key, info] of Object.entries(\n\t\t\t\t\t\tdefinition.commandClasses.remove,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t// Parse the key into a CC ID\n\t\t\t\t\tconst cc = tryParseCCId(key);\n\t\t\t\t\tif (cc == undefined) {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`config/devices/${filename}:\nInvalid Command Class \"${key}\" specified in compat option commandClasses.remove!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (isObject(info) && \"endpoints\" in info) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tinfo.endpoints === \"*\"\n\t\t\t\t\t\t\t|| (isArray(info.endpoints)\n\t\t\t\t\t\t\t\t&& info.endpoints.every(\n\t\t\t\t\t\t\t\t\t(i) => typeof i === \"number\",\n\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCCs.set(cc, info.endpoints as any);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t\t`config/devices/${filename}:\nCompat option commandClasses.remove has an invalid \"endpoints\" property. Only \"*\" and numeric arrays are allowed!`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`config/devices/${filename}:\nAll values in compat option commandClasses.remove must be objects with an \"endpoints\" property!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.removeCCs = removeCCs;\n\t\t\t}\n\t\t}\n\n\t\tif (definition.alarmMapping != undefined) {\n\t\t\tif (\n\t\t\t\t!isArray(definition.alarmMapping)\n\t\t\t\t|| !definition.alarmMapping.every((m: any) => isObject(m))\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option alarmMapping must be an array where all items are objects!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.alarmMapping = (definition.alarmMapping as any[]).map(\n\t\t\t\t(m, i) => new CompatMapAlarm(filename, m, i + 1),\n\t\t\t);\n\t\t}\n\n\t\tif (definition.remapNotifications != undefined) {\n\t\t\tif (\n\t\t\t\t!isArray(definition.remapNotifications)\n\t\t\t\t|| !definition.remapNotifications.every((m: any) => isObject(m))\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option remapNotifications must be an array where all items are objects!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.remapNotifications = (definition.remapNotifications as any[])\n\t\t\t\t.map(\n\t\t\t\t\t(m, i) => new CompatRemapNotification(filename, m, i + 1),\n\t\t\t\t);\n\t\t}\n\n\t\tif (definition.overrideQueries != undefined) {\n\t\t\tif (!isObject(definition.overrideQueries)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ncompat option overrideQueries must be an object!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.overrideQueries = new CompatOverrideQueries(\n\t\t\t\tfilename,\n\t\t\t\tdefinition.overrideQueries,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic readonly alarmMapping?: readonly CompatMapAlarm[];\n\tpublic readonly remapNotifications?: readonly CompatRemapNotification[];\n\tpublic readonly addCCs?: ReadonlyMap<CommandClasses, CompatAddCC>;\n\tpublic readonly removeCCs?: ReadonlyMap<\n\t\tCommandClasses,\n\t\t\"*\" | readonly number[]\n\t>;\n\tpublic readonly disableAutoRefresh?: boolean;\n\tpublic readonly disableStrictEntryControlDataValidation?: boolean;\n\tpublic readonly disableStrictMeasurementValidation?: boolean;\n\tpublic readonly disableCallbackFunctionTypeCheck?: number[];\n\tpublic readonly encodeCCsUsingTargetVersion?: boolean;\n\tpublic readonly forceNotificationIdleReset?: boolean;\n\tpublic readonly forceSceneControllerGroupCount?: number;\n\tpublic readonly manualValueRefreshDelayMs?: number;\n\tpublic readonly mapRootReportsToEndpoint?: number;\n\tpublic readonly mapBasicReport?: BasicReportMapping;\n\tpublic readonly mapBasicSet?: BasicSetMapping;\n\tpublic readonly overrideFloatEncoding?: {\n\t\tsize?: number;\n\t\tprecision?: number;\n\t};\n\tpublic readonly overrideQueries?: CompatOverrideQueries;\n\tpublic readonly preserveRootApplicationCCValueIDs?: boolean;\n\tpublic readonly preserveEndpoints?: \"*\" | readonly number[];\n\tpublic readonly removeEndpoints?: \"*\" | readonly number[];\n\tpublic readonly reportTimeout?: number;\n\tpublic readonly skipConfigurationNameQuery?: boolean;\n\tpublic readonly skipConfigurationInfoQuery?: boolean;\n\tpublic readonly treatMultilevelSwitchSetAsEvent?: boolean;\n\tpublic readonly treatSetAsReport?: ReadonlySet<string>;\n\tpublic readonly treatDestinationEndpointAsSource?: boolean;\n\tpublic readonly useUTCInTimeParametersCC?: boolean;\n\tpublic readonly queryOnWakeup?: readonly [\n\t\tstring,\n\t\tstring,\n\t\t...(\n\t\t\t| string\n\t\t\t| number\n\t\t\t| boolean\n\t\t\t| Pick<ValueID, \"property\" | \"propertyKey\">\n\t\t)[],\n\t][];\n\n\tpublic readonly condition?: string | undefined;\n\n\tpublic evaluateCondition(deviceId?: DeviceID): CompatConfig | undefined {\n\t\tif (!conditionApplies(this, deviceId)) return;\n\t\tconst ret = pick(this, [\n\t\t\t\"alarmMapping\",\n\t\t\t\"remapNotifications\",\n\t\t\t\"addCCs\",\n\t\t\t\"removeCCs\",\n\t\t\t\"disableAutoRefresh\",\n\t\t\t\"disableCallbackFunctionTypeCheck\",\n\t\t\t\"disableStrictEntryControlDataValidation\",\n\t\t\t\"disableStrictMeasurementValidation\",\n\t\t\t\"encodeCCsUsingTargetVersion\",\n\t\t\t\"forceNotificationIdleReset\",\n\t\t\t\"forceSceneControllerGroupCount\",\n\t\t\t\"manualValueRefreshDelayMs\",\n\t\t\t\"mapBasicReport\",\n\t\t\t\"mapBasicSet\",\n\t\t\t\"mapRootReportsToEndpoint\",\n\t\t\t\"overrideFloatEncoding\",\n\t\t\t\"overrideQueries\",\n\t\t\t\"reportTimeout\",\n\t\t\t\"preserveRootApplicationCCValueIDs\",\n\t\t\t\"preserveEndpoints\",\n\t\t\t\"removeEndpoints\",\n\t\t\t\"skipConfigurationNameQuery\",\n\t\t\t\"skipConfigurationInfoQuery\",\n\t\t\t\"treatMultilevelSwitchSetAsEvent\",\n\t\t\t\"treatSetAsReport\",\n\t\t\t\"treatDestinationEndpointAsSource\",\n\t\t\t\"useUTCInTimeParametersCC\",\n\t\t\t\"queryOnWakeup\",\n\t\t]);\n\t\treturn stripUndefined(ret) as CompatConfig;\n\t}\n}\n\nexport type CompatConfig = Omit<\n\tConditionalCompatConfig,\n\t\"condition\" | \"evaluateCondition\"\n>;\n\nexport class CompatAddCC {\n\tpublic constructor(filename: string, definition: JSONObject) {\n\t\tconst endpoints = new Map<number, Partial<CommandClassInfo>>();\n\t\tconst parseEndpointInfo = (endpoint: number, info: JSONObject) => {\n\t\t\tconst parsed: Partial<CommandClassInfo> = {};\n\t\t\tif (info.isSupported != undefined) {\n\t\t\t\tif (typeof info.isSupported !== \"boolean\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nProperty isSupported in compat option commandClasses.add, endpoint ${endpoint} must be a boolean!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tparsed.isSupported = info.isSupported;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (info.isControlled != undefined) {\n\t\t\t\tif (typeof info.isControlled !== \"boolean\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nProperty isControlled in compat option commandClasses.add, endpoint ${endpoint} must be a boolean!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tparsed.isControlled = info.isControlled;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (info.secure != undefined) {\n\t\t\t\tif (typeof info.secure !== \"boolean\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nProperty secure in compat option commandClasses.add, endpoint ${endpoint} must be a boolean!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tparsed.secure = info.secure;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (info.version != undefined) {\n\t\t\t\tif (typeof info.version !== \"number\") {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nProperty version in compat option commandClasses.add, endpoint ${endpoint} must be a number!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tparsed.version = info.version;\n\t\t\t\t}\n\t\t\t}\n\t\t\tendpoints.set(endpoint, parsed);\n\t\t};\n\t\t// Parse root endpoint info if given\n\t\tif (\n\t\t\tdefinition.isSupported != undefined\n\t\t\t|| definition.isControlled != undefined\n\t\t\t|| definition.version != undefined\n\t\t\t|| definition.secure != undefined\n\t\t) {\n\t\t\t// We have info for the root endpoint\n\t\t\tparseEndpointInfo(0, definition);\n\t\t}\n\t\t// Parse all other endpoints\n\t\tif (isObject(definition.endpoints)) {\n\t\t\tif (\n\t\t\t\t!Object.keys(definition.endpoints).every((k) => /^\\d+$/.test(k))\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\ninvalid endpoint index in compat option commandClasses.add`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tfor (const [ep, info] of Object.entries(definition.endpoints)) {\n\t\t\t\t\tparseEndpointInfo(parseInt(ep), info as any);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.endpoints = endpoints;\n\t}\n\n\tpublic readonly endpoints: ReadonlyMap<number, Partial<CommandClassInfo>>;\n}\n\nexport interface CompatMapAlarmFrom {\n\talarmType: number;\n\talarmLevel?: number;\n}\n\nexport interface CompatMapAlarmTo {\n\tnotificationType: number;\n\tnotificationEvent: number;\n\teventParameters?: Record<string, number | \"alarmLevel\">;\n}\n\nexport class CompatMapAlarm {\n\tpublic constructor(\n\t\tfilename: string,\n\t\tdefinition: JSONObject,\n\t\tindex: number,\n\t) {\n\t\tif (!isObject(definition.from)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"from\" must be an object!`,\n\t\t\t);\n\t\t} else {\n\t\t\tif (typeof definition.from.alarmType !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"from.alarmType\" must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tdefinition.from.alarmLevel != undefined\n\t\t\t\t&& typeof definition.from.alarmLevel !== \"number\"\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: if property \"from.alarmLevel\" is given, it must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (!isObject(definition.to)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to\" must be an object!`,\n\t\t\t);\n\t\t} else {\n\t\t\tif (typeof definition.to.notificationType !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to.notificationType\" must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof definition.to.notificationEvent !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to.notificationEvent\" must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (definition.to.eventParameters != undefined) {\n\t\t\t\tif (!isObject(definition.to.eventParameters)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to.eventParameters\" must be an object!`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tfor (\n\t\t\t\t\t\tconst [key, val] of Object.entries(\n\t\t\t\t\t\t\tdefinition.to.eventParameters,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (typeof val !== \"number\" && val !== \"alarmLevel\") {\n\t\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t\t`config/devices/${filename}:\nerror in compat option alarmMapping, mapping #${index}: property \"to.eventParameters.${key}\" must be a number or the literal \"alarmLevel\"!`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.from = pick(definition.from, [\"alarmType\", \"alarmLevel\"]);\n\t\tthis.to = pick(definition.to, [\n\t\t\t\"notificationType\",\n\t\t\t\"notificationEvent\",\n\t\t\t\"eventParameters\",\n\t\t]);\n\t}\n\n\tpublic readonly from: CompatMapAlarmFrom;\n\tpublic readonly to: CompatMapAlarmTo;\n}\n\nexport interface CompatRemapNotificationFrom {\n\tnotificationType: number;\n\tnotificationEvent: number;\n}\n\nexport interface CompatRemapNotificationTo {\n\tnotificationType: number;\n\tnotificationEvent: number;\n}\n\nexport type CompatRemapNotificationAction =\n\t| { type: \"remap\"; to: CompatRemapNotificationTo }\n\t| { type: \"clear\"; targets: CompatRemapNotificationTo[] }\n\t| { type: \"idle\"; targets: CompatRemapNotificationTo[] };\n\nexport class CompatRemapNotification {\n\tpublic constructor(\n\t\tfilename: string,\n\t\tdefinition: JSONObject,\n\t\tindex: number,\n\t) {\n\t\tif (!isObject(definition.from)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`config/devices/${filename}:\nerror in compat option remapNotifications, mapping #${index}: property \"from\" must be an object!`,\n\t\t\t);\n\t\t} else {\n\t\t\tif (typeof definition.from.notificationType !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option remapNotifications, mapping #${index}: property \"from.notificationType\" must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof definition.from.notificationEvent !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option remapNotifications, mapping #${index}: property \"from.notificationEvent\" must be a number!`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.from = pick(definition.from, [\n\t\t\t\"notificationType\",\n\t\t\t\"notificationEvent\",\n\t\t]);\n\n\t\tconst validateToObject = (obj: any, label: string) => {\n\t\t\tif (!isObject(obj)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option remapNotifications, mapping #${index}: ${label} must be an object!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof obj.notificationType !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option remapNotifications, mapping #${index}: ${label} must have a numeric \"notificationType\"!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof obj.notificationEvent !== \"number\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option remapNotifications, mapping #${index}: ${label} must have a numeric \"notificationEvent\"!`,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst validateTargetArray = (arr: any, label: string): void => {\n\t\t\tif (!isArray(arr) || arr.length === 0) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nerror in compat option remapNotifications, mapping #${index}: property \"${label}\" must be a non-empty array of objects!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (let j = 0; j < arr.length; j++) {\n\t\t\t\tvalidateToObject(\n\t\t\t\t\tarr[j],\n\t\t\t\t\t`\"${label}[${j}]\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tif (definition.to != undefined) {\n\t\t\tvalidateToObject(definition.to, `property \"to\"`);\n\t\t\tthis.action = {\n\t\t\t\ttype: \"remap\",\n\t\t\t\tto: pick(definition.to, [\n\t\t\t\t\t\"notificationType\",\n\t\t\t\t\t\"notificationEvent\",\n\t\t\t\t]),\n\t\t\t};\n\t\t} else if (definition.clear != undefined) {\n\t\t\tvalidateTargetArray(definition.clear, \"clear\");\n\t\t\tthis.action = {\n\t\t\t\ttype: \"clear\",\n\t\t\t\ttargets: (definition.clear as any[]).map((target) =>\n\t\t\t\t\tpick(target, [\"notificationType\", \"notificationEvent\"])\n\t\t\t\t),\n\t\t\t};\n\t\t} else if (definition.idle != undefined) {\n\t\t\tvalidateTargetArray(definition.idle, \"idle\");\n\t\t\tthis.action = {\n\t\t\t\ttype: \"idle\",\n\t\t\t\ttargets: (definition.idle as any[]).map((target) =>\n\t\t\t\t\tpick(target, [\"notificationType\", \"notificationEvent\"])\n\t\t\t\t),\n\t\t\t};\n\t\t} else {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`config/devices/${filename}:\nerror in compat option remapNotifications, mapping #${index}: exactly one of \"to\", \"clear\", or \"idle\" must be defined!`,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic readonly from: CompatRemapNotificationFrom;\n\tpublic readonly action: CompatRemapNotificationAction;\n}\n\nexport class CompatOverrideQueries {\n\tpublic constructor(filename: string, definition: JSONObject) {\n\t\tconst overrides = new Map();\n\n\t\tconst parseOverride = (\n\t\t\tcc: CommandClasses,\n\t\t\tinfo: JSONObject,\n\t\t): CompatOverrideQuery => {\n\t\t\tif (typeof info.method !== \"string\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"method\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be a string!`,\n\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\tinfo.matchArgs != undefined\n\t\t\t\t&& !isArray(info.matchArgs)\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"matchArgs\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be an array!`,\n\t\t\t\t);\n\t\t\t} else if (!(\"result\" in info)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"result\" is missing in in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t}!`,\n\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\tinfo.endpoint != undefined\n\t\t\t\t&& typeof info.endpoint !== \"number\"\n\t\t\t) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"endpoint\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be a number!`,\n\t\t\t\t);\n\t\t\t} else if (info.persistValues && !isObject(info.persistValues)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"persistValues\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be an object!`,\n\t\t\t\t);\n\t\t\t} else if (info.extendMetadata && !isObject(info.extendMetadata)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"extendMetadata\" in compat option overrideQueries, CC ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} must be an object!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tendpoint: info.endpoint,\n\t\t\t\tmethod: info.method,\n\t\t\t\tmatchArgs: info.matchArgs,\n\t\t\t\tresult: info.result,\n\t\t\t\tpersistValues: info.persistValues,\n\t\t\t\textendMetadata: info.extendMetadata,\n\t\t\t};\n\t\t};\n\n\t\tfor (const [key, value] of Object.entries(definition)) {\n\t\t\t// Parse the key into a CC ID\n\t\t\tconst cc = tryParseCCId(key);\n\t\t\tif (cc == undefined) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nInvalid Command Class \"${key}\" specified in compat option overrideQueries!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet overrideDefinitions: any;\n\t\t\tif (isObject(value)) {\n\t\t\t\toverrideDefinitions = [value];\n\t\t\t} else if (!isArray(value)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`config/devices/${filename}:\nProperty \"${key}\" in compat option overrideQueries must be a single override object or an array thereof!`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toverrideDefinitions = value;\n\t\t\t}\n\n\t\t\toverrides.set(\n\t\t\t\tcc,\n\t\t\t\toverrideDefinitions.map((info: any) => parseOverride(cc, info)),\n\t\t\t);\n\t\t}\n\n\t\tthis.overrides = overrides;\n\t}\n\n\t// CC -> endpoint -> queries\n\tprivate readonly overrides: ReadonlyMap<\n\t\tCommandClasses,\n\t\tCompatOverrideQuery[]\n\t>;\n\n\tpublic hasOverride(ccId: CommandClasses): boolean {\n\t\treturn this.overrides.has(ccId);\n\t}\n\n\tpublic matchOverride(\n\t\tcc: CommandClasses,\n\t\tendpointIndex: number,\n\t\tmethod: string,\n\t\targs: any[],\n\t):\n\t\t| Pick<\n\t\t\tCompatOverrideQuery,\n\t\t\t\"result\" | \"persistValues\" | \"extendMetadata\"\n\t\t>\n\t\t| undefined\n\t{\n\t\tconst queries = this.overrides.get(cc);\n\t\tif (!queries) return undefined;\n\t\tfor (const query of queries) {\n\t\t\tif ((query.endpoint ?? 0) !== endpointIndex) continue;\n\t\t\tif (query.method !== method) continue;\n\t\t\tif (query.matchArgs) {\n\t\t\t\tif (query.matchArgs.length !== args.length) continue;\n\t\t\t\tif (!query.matchArgs.every((arg, i) => arg === args[i])) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pick(query, [\"result\", \"persistValues\", \"extendMetadata\"]);\n\t\t}\n\t}\n}\n\nexport interface CompatOverrideQuery {\n\t/** Which endpoint this override is for */\n\tendpoint?: number;\n\t/** For which API method this override is defined */\n\tmethod: string;\n\t/**\n\t * An array of method arguments that needs to match for this override to apply.\n\t * If `undefined`, no matching is performed.\n\t */\n\tmatchArgs?: any[];\n\t/** The result to return from the API call */\n\tresult: any;\n\t/**\n\t * An optional dictionary of values that will be persisted in the cache.\n\t * The keys are properties of the `...CCValues` objects that belong to this CC.\n\t */\n\tpersistValues?: Record<string, any>;\n\t/**\n\t * An optional dictionary of value metadata that will be persisted in the cache.\n\t * The keys are properties of the `...CCValues` objects that belong to this CC.\n\t * The given metadata will be merged with statically defined value metadata.\n\t */\n\textendMetadata?: Record<string, any>;\n}\n\nconst basicReportMappings = [\n\tfalse,\n\t\"auto\",\n\t\"Binary Sensor\",\n] as const;\n\n/**\n * Defines how to handle a received Basic CC Report:\n * - \"auto\": map it to a different CC based on the device type, with fallback to `false`\n * - false: treat the report verbatim without mapping\n * - \"Binary Sensor\": treat it as a Binary Sensor CC Report, regardless of device type\n */\nexport type BasicReportMapping = typeof basicReportMappings[number];\n\nfunction isBasicReportMapping(v: unknown): v is BasicReportMapping {\n\treturn basicReportMappings.includes(v as any);\n}\n\nconst basicSetMappings = [\n\t\"event\",\n\t\"report\",\n\t\"auto\",\n\t\"Binary Sensor\",\n] as const;\n\n/**\n * Defines how to handle a received Basic CC Set:\n * - \"event\": emit an event for the special `event` CC value\n * - \"report\": treat it as as a Basic CC Report (default)\n * - \"auto\": map it to a different CC based on the device type, with fallback to Basic CC report\n * - \"Binary Sensor\": treat it as a Binary Sensor CC Report, regardless of device type\n */\nexport type BasicSetMapping = typeof basicSetMappings[number];\n\nfunction isBasicSetMapping(v: unknown): v is BasicSetMapping {\n\treturn basicSetMappings.includes(v as any);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/devices/ConditionalPrimitive.ts"],
|
|
4
4
|
"sourcesContent": ["import { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport { throwInvalidConfig } from \"../utils_safe.js\";\nimport { type ConditionalItem, conditionApplies } from \"./ConditionalItem.js\";\nimport type { DeviceID } from \"./shared.js\";\n\ntype ToPrimitive<T extends string> = T extends \"string\" ? string\n\t: T extends \"number\" ? number\n\t: T extends \"boolean\" ? boolean\n\t: never;\n\nexport function parseConditionalPrimitive<\n\tT extends \"string\" | \"number\" | \"boolean\",\n>(\n\tfilename: string,\n\tvalueType: T,\n\tpropertyName: string,\n\tdefinition: any,\n\terrorMessagePrefix: string = \"\",\n): ConditionalPrimitive<ToPrimitive<T>> {\n\tif (\n\t\tisArray(definition)\n\t\t&& (definition as any[]).every(\n\t\t\t(i, index, dfn) =>\n\t\t\t\t// In arrays, only the last item may be non-conditional\n\t\t\t\t(isObject(i) && typeof i.value === valueType)\n\t\t\t\t|| (index === dfn.length - 1 && typeof i === valueType),\n\t\t)\n\t) {\n\t\treturn definition.map((d: any) =>\n\t\t\ttypeof d === valueType\n\t\t\t\t? new ConditionalPrimitiveVariant<ToPrimitive<T>>(d)\n\t\t\t\t: new ConditionalPrimitiveVariant<ToPrimitive<T>>(\n\t\t\t\t\td.value,\n\t\t\t\t\ttypeof d.$if === \"string\" ? d.$if : undefined,\n\t\t\t\t)\n\t\t);\n\t} else if (typeof definition === valueType) {\n\t\treturn definition;\n\t} else {\n\t\tthrowInvalidConfig(\n\t\t\t`device`,\n\t\t\t`packages/config/config/devices/${filename}:\n${errorMessagePrefix}${propertyName} must be a ${valueType} or an array of conditional ${valueType} entries`,\n\t\t);\n\t}\n}\n\nexport type ConditionalPrimitive<T extends number | string | boolean> =\n\t| T\n\t| ConditionalPrimitiveVariant<T>[];\n\nexport class ConditionalPrimitiveVariant<T extends number | string | boolean>\n\timplements ConditionalItem<T>\n{\n\tpublic constructor(\n\t\tpublic readonly value: T,\n\t\tpublic readonly condition?: string,\n\t) {}\n\n\tpublic evaluateCondition(deviceId?: DeviceID): T | undefined {\n\t\tif (!conditionApplies(this, deviceId)) return;\n\t\treturn this.value;\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,wBAAkC;AAClC,wBAAmC;AACnC,6BAAuD;AAQjD,SAAU,0BAGf,UACA,WACA,cACA,YACA,qBAA6B,IAAE;AAE/B,UACC,2BAAQ,UAAU,KACd,WAAqB,MACxB,CAAC,GAAG,OAAO;;QAET,4BAAS,CAAC,KAAK,OAAO,EAAE,UAAU,aAC/B,UAAU,IAAI,SAAS,KAAK,OAAO,MAAM;GAAU,GAExD;AACD,WAAO,WAAW,IAAI,CAAC,MACtB,OAAO,MAAM,YACV,IAAI,4BAA4C,CAAC,IACjD,IAAI,4BACL,EAAE,OACF,OAAO,EAAE,QAAQ,WAAW,EAAE,MAAM,MAAS,CAC7C;EAEJ,WAAW,OAAO,eAAe,WAAW;AAC3C,WAAO;EACR,OAAO;AACN,8CACC,UACA,kCAAkC,QAAQ;EAC3C,kBAAkB,GAAG,YAAY,cAAc,SAAS,+BAA+B,SAAS,UAAU;EAE3G;AACD;AAnCgB;AAyCV,MAAO,4BAA2B;EAnDxC,OAmDwC;;;EAItB;EACA;EAFjB,YACiB,OACA,WAAkB;
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,wBAAkC;AAClC,wBAAmC;AACnC,6BAAuD;AAQjD,SAAU,0BAGf,UACA,WACA,cACA,YACA,qBAA6B,IAAE;AAE/B,UACC,2BAAQ,UAAU,KACd,WAAqB,MACxB,CAAC,GAAG,OAAO;;QAET,4BAAS,CAAC,KAAK,OAAO,EAAE,UAAU,aAC/B,UAAU,IAAI,SAAS,KAAK,OAAO,MAAM;GAAU,GAExD;AACD,WAAO,WAAW,IAAI,CAAC,MACtB,OAAO,MAAM,YACV,IAAI,4BAA4C,CAAC,IACjD,IAAI,4BACL,EAAE,OACF,OAAO,EAAE,QAAQ,WAAW,EAAE,MAAM,MAAS,CAC7C;EAEJ,WAAW,OAAO,eAAe,WAAW;AAC3C,WAAO;EACR,OAAO;AACN,8CACC,UACA,kCAAkC,QAAQ;EAC3C,kBAAkB,GAAG,YAAY,cAAc,SAAS,+BAA+B,SAAS,UAAU;EAE3G;AACD;AAnCgB;AAyCV,MAAO,4BAA2B;EAnDxC,OAmDwC;;;EAItB;EACA;EAFjB,YACiB,OACA,WAAkB;iBADlB;qBACA;EACd;EAEI,kBAAkB,UAAmB;AAC3C,QAAI,KAAC,yCAAiB,MAAM,QAAQ;AAAG;AACvC,WAAO,KAAK;EACb;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/devices/DeviceMetadata.ts"],
|
|
4
4
|
"sourcesContent": ["import { type JSONObject, pick } from \"@zwave-js/shared\";\nimport { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport { throwInvalidConfig } from \"../utils_safe.js\";\nimport {\n\ttype ConditionalItem,\n\tconditionApplies,\n\tevaluateDeep,\n} from \"./ConditionalItem.js\";\nimport {\n\ttype ConditionalPrimitive,\n\tparseConditionalPrimitive,\n} from \"./ConditionalPrimitive.js\";\nimport type { DeviceID } from \"./shared.js\";\n\nexport class ConditionalDeviceMetadata\n\timplements ConditionalItem<DeviceMetadata>\n{\n\tpublic constructor(filename: string, definition: JSONObject) {\n\t\tfor (\n\t\t\tconst prop of [\n\t\t\t\t\"wakeup\",\n\t\t\t\t\"inclusion\",\n\t\t\t\t\"exclusion\",\n\t\t\t\t\"reset\",\n\t\t\t\t\"manual\",\n\t\t\t] as const\n\t\t) {\n\t\t\tif (prop in definition) {\n\t\t\t\tthis[prop] = parseConditionalPrimitive(\n\t\t\t\t\tfilename,\n\t\t\t\t\t\"string\",\n\t\t\t\t\tprop,\n\t\t\t\t\tdefinition[prop],\n\t\t\t\t\t\"The metadata entry \",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (\"comments\" in definition) {\n\t\t\tconst value = definition.comments;\n\t\t\tconst isComment = (opt: unknown) =>\n\t\t\t\tisObject(opt)\n\t\t\t\t&& typeof opt.level === \"string\"\n\t\t\t\t&& typeof opt.text === \"string\";\n\n\t\t\tif (isComment(value)) {\n\t\t\t\tthis.comments = new ConditionalDeviceComment(\n\t\t\t\t\tvalue.level,\n\t\t\t\t\tvalue.text,\n\t\t\t\t\tvalue.$if,\n\t\t\t\t);\n\t\t\t} else if (isArray(value) && value.every(isComment)) {\n\t\t\t\tthis.comments = value.map(\n\t\t\t\t\t(c: any) =>\n\t\t\t\t\t\tnew ConditionalDeviceComment(c.level, c.text, c.$if),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nThe metadata entry comments is invalid!`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic readonly condition?: string;\n\n\tpublic evaluateCondition(deviceId?: DeviceID): DeviceMetadata | undefined {\n\t\tif (!conditionApplies(this, deviceId)) return;\n\t\tconst ret: DeviceMetadata = {};\n\t\tfor (\n\t\t\tconst prop of [\n\t\t\t\t\"wakeup\",\n\t\t\t\t\"inclusion\",\n\t\t\t\t\"exclusion\",\n\t\t\t\t\"reset\",\n\t\t\t\t\"manual\",\n\t\t\t] as const\n\t\t) {\n\t\t\tif (this[prop]) {\n\t\t\t\tconst evaluated = evaluateDeep(this[prop], deviceId);\n\t\t\t\tif (evaluated) ret[prop] = evaluated;\n\t\t\t}\n\t\t}\n\t\tconst comments = evaluateDeep(this.comments, deviceId, true);\n\t\tif (comments) ret.comments = comments;\n\n\t\treturn ret;\n\t}\n\n\t/** How to wake up the device manually */\n\tpublic readonly wakeup?: ConditionalPrimitive<string>;\n\t/** Inclusion instructions */\n\tpublic readonly inclusion?: ConditionalPrimitive<string>;\n\t/** Exclusion instructions */\n\tpublic readonly exclusion?: ConditionalPrimitive<string>;\n\t/** Instructions for resetting the device to factory defaults */\n\tpublic readonly reset?: ConditionalPrimitive<string>;\n\t/** A link to the device manual */\n\tpublic readonly manual?: ConditionalPrimitive<string>;\n\t/** Comments for this device */\n\tpublic readonly comments?:\n\t\t| ConditionalDeviceComment\n\t\t| ConditionalDeviceComment[];\n}\n\nexport interface DeviceMetadata {\n\twakeup?: string;\n\tinclusion?: string;\n\texclusion?: string;\n\treset?: string;\n\tmanual?: string;\n\tcomments?: DeviceComment | DeviceComment[];\n}\n\nexport class ConditionalDeviceComment\n\timplements ConditionalItem<DeviceComment>\n{\n\tpublic constructor(\n\t\tpublic readonly level: DeviceComment[\"level\"],\n\t\tpublic readonly text: string,\n\t\tpublic readonly condition?: string,\n\t) {}\n\n\tpublic evaluateCondition(deviceId?: DeviceID): DeviceComment | undefined {\n\t\tif (!conditionApplies(this, deviceId)) return;\n\t\treturn pick(this, [\"level\", \"text\"]);\n\t}\n}\n\nexport interface DeviceComment {\n\tlevel: \"info\" | \"warning\" | \"error\";\n\ttext: string;\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,oBAAsC;AACtC,wBAAkC;AAClC,wBAAmC;AACnC,6BAIO;AACP,kCAGO;AAGD,MAAO,0BAAyB;EAdtC,OAcsC;;;EAGrC,YAAmB,UAAkB,YAAsB;AAC1D,eACO,QAAQ;MACb;MACA;MACA;MACA;MACA;OAEA;AACD,UAAI,QAAQ,YAAY;AACvB,aAAK,IAAI,QAAI,uDACZ,UACA,UACA,MACA,WAAW,IAAI,GACf,qBAAqB;MAEvB;IACD;AAEA,QAAI,cAAc,YAAY;AAC7B,YAAM,QAAQ,WAAW;AACzB,YAAM,YAAY,wBAAC,YAClB,4BAAS,GAAG,KACT,OAAO,IAAI,UAAU,YACrB,OAAO,IAAI,SAAS,UAHN;AAKlB,UAAI,UAAU,KAAK,GAAG;AACrB,aAAK,WAAW,IAAI,yBACnB,MAAM,OACN,MAAM,MACN,MAAM,GAAG;MAEX,eAAW,2BAAQ,KAAK,KAAK,MAAM,MAAM,SAAS,GAAG;AACpD,aAAK,WAAW,MAAM,IACrB,CAAC,MACA,IAAI,yBAAyB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;MAEvD,OAAO;AACN,kDACC,WACA,kCAAkC,QAAQ;wCACP;MAErC;IACD;EACD;EAEgB;EAET,kBAAkB,UAAmB;AAC3C,QAAI,KAAC,yCAAiB,MAAM,QAAQ;AAAG;AACvC,UAAM,MAAsB,CAAA;AAC5B,eACO,QAAQ;MACb;MACA;MACA;MACA;MACA;OAEA;AACD,UAAI,KAAK,IAAI,GAAG;AACf,cAAM,gBAAY,qCAAa,KAAK,IAAI,GAAG,QAAQ;AACnD,YAAI;AAAW,cAAI,IAAI,IAAI;MAC5B;IACD;AACA,UAAM,eAAW,qCAAa,KAAK,UAAU,UAAU,IAAI;AAC3D,QAAI;AAAU,UAAI,WAAW;AAE7B,WAAO;EACR;;EAGgB;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;AAcX,MAAO,yBAAwB;EApHrC,OAoHqC;;;EAInB;EACA;EACA;EAHjB,YACiB,OACA,MACA,WAAkB;
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,oBAAsC;AACtC,wBAAkC;AAClC,wBAAmC;AACnC,6BAIO;AACP,kCAGO;AAGD,MAAO,0BAAyB;EAdtC,OAcsC;;;EAGrC,YAAmB,UAAkB,YAAsB;AAC1D,eACO,QAAQ;MACb;MACA;MACA;MACA;MACA;OAEA;AACD,UAAI,QAAQ,YAAY;AACvB,aAAK,IAAI,QAAI,uDACZ,UACA,UACA,MACA,WAAW,IAAI,GACf,qBAAqB;MAEvB;IACD;AAEA,QAAI,cAAc,YAAY;AAC7B,YAAM,QAAQ,WAAW;AACzB,YAAM,YAAY,wBAAC,YAClB,4BAAS,GAAG,KACT,OAAO,IAAI,UAAU,YACrB,OAAO,IAAI,SAAS,UAHN;AAKlB,UAAI,UAAU,KAAK,GAAG;AACrB,aAAK,WAAW,IAAI,yBACnB,MAAM,OACN,MAAM,MACN,MAAM,GAAG;MAEX,eAAW,2BAAQ,KAAK,KAAK,MAAM,MAAM,SAAS,GAAG;AACpD,aAAK,WAAW,MAAM,IACrB,CAAC,MACA,IAAI,yBAAyB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;MAEvD,OAAO;AACN,kDACC,WACA,kCAAkC,QAAQ;wCACP;MAErC;IACD;EACD;EAEgB;EAET,kBAAkB,UAAmB;AAC3C,QAAI,KAAC,yCAAiB,MAAM,QAAQ;AAAG;AACvC,UAAM,MAAsB,CAAA;AAC5B,eACO,QAAQ;MACb;MACA;MACA;MACA;MACA;OAEA;AACD,UAAI,KAAK,IAAI,GAAG;AACf,cAAM,gBAAY,qCAAa,KAAK,IAAI,GAAG,QAAQ;AACnD,YAAI;AAAW,cAAI,IAAI,IAAI;MAC5B;IACD;AACA,UAAM,eAAW,qCAAa,KAAK,UAAU,UAAU,IAAI;AAC3D,QAAI;AAAU,UAAI,WAAW;AAE7B,WAAO;EACR;;EAGgB;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;AAcX,MAAO,yBAAwB;EApHrC,OAoHqC;;;EAInB;EACA;EACA;EAHjB,YACiB,OACA,MACA,WAAkB;iBAFlB;gBACA;qBACA;EACd;EAEI,kBAAkB,UAAmB;AAC3C,QAAI,KAAC,yCAAiB,MAAM,QAAQ;AAAG;AACvC,eAAO,oBAAK,MAAM,CAAC,SAAS,MAAM,CAAC;EACpC;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/devices/ParamInformation.ts"],
|
|
4
4
|
"sourcesContent": ["/* oxlint-disable typescript/no-unnecessary-type-assertion */\nimport { type AllowedValue, tryParseParamNumber } from \"@zwave-js/core\";\nimport {\n\ttype JSONObject,\n\tObjectKeyMap,\n\ttype ReadonlyObjectKeyMap,\n\tpick,\n} from \"@zwave-js/shared\";\nimport { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport { throwInvalidConfig } from \"../utils_safe.js\";\nimport {\n\ttype ConditionalItem,\n\tconditionApplies,\n\tevaluateDeep,\n\tvalidateCondition,\n} from \"./ConditionalItem.js\";\nimport type { ConditionalDeviceConfig } from \"./DeviceConfig.js\";\nimport type { DeviceID } from \"./shared.js\";\n\nexport class ConditionalParamInformation\n\timplements ConditionalItem<ParamInformation>\n{\n\tpublic constructor(\n\t\tparent: ConditionalDeviceConfig,\n\t\tparameterNumber: number,\n\t\tvalueBitMask: number | undefined,\n\t\tdefinition: JSONObject,\n\t) {\n\t\tthis.parent = parent;\n\t\tthis.parameterNumber = parameterNumber;\n\t\tthis.valueBitMask = valueBitMask;\n\t\t// No need to validate here, this should be done one level higher\n\t\tthis.condition = definition.$if;\n\n\t\tif (typeof definition.label !== \"string\") {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-string label`,\n\t\t\t);\n\t\t}\n\t\tthis.label = definition.label;\n\n\t\tif (\n\t\t\tdefinition.description != undefined\n\t\t\t&& typeof definition.description !== \"string\"\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-string description`,\n\t\t\t);\n\t\t}\n\t\tthis.description = definition.description;\n\n\t\tif (\n\t\t\ttypeof definition.valueSize !== \"number\"\n\t\t\t|| definition.valueSize <= 0\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has an invalid value size`,\n\t\t\t);\n\t\t}\n\t\tthis.valueSize = definition.valueSize;\n\n\t\tif (\n\t\t\tdefinition.minValue != undefined\n\t\t\t&& typeof definition.minValue !== \"number\"\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-numeric property minValue`,\n\t\t\t);\n\t\t}\n\t\tthis.minValue = definition.minValue;\n\n\t\tif (\n\t\t\tdefinition.maxValue != undefined\n\t\t\t&& typeof definition.maxValue !== \"number\"\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-numeric property maxValue`,\n\t\t\t);\n\t\t}\n\t\tthis.maxValue = definition.maxValue;\n\n\t\tif (\n\t\t\tdefinition.unsigned != undefined\n\t\t\t&& typeof definition.unsigned !== \"boolean\"\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-boolean property unsigned`,\n\t\t\t);\n\t\t}\n\t\tthis.unsigned = definition.unsigned === true;\n\n\t\tif (\n\t\t\tdefinition.unit != undefined\n\t\t\t&& typeof definition.unit !== \"string\"\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-string unit`,\n\t\t\t);\n\t\t}\n\t\tthis.unit = definition.unit;\n\n\t\tif (definition.readOnly != undefined && definition.readOnly !== true) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\n\t\tParameter #${parameterNumber}: readOnly must true or omitted!`,\n\t\t\t);\n\t\t}\n\t\tthis.readOnly = definition.readOnly;\n\n\t\tif (\n\t\t\tdefinition.writeOnly != undefined\n\t\t\t&& definition.writeOnly !== true\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\n\t\tParameter #${parameterNumber}: writeOnly must be true or omitted!`,\n\t\t\t);\n\t\t}\n\t\tthis.writeOnly = definition.writeOnly;\n\n\t\tif (definition.defaultValue == undefined) {\n\t\t\tif (!this.readOnly) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} is missing defaultValue, which is required unless the parameter is readOnly`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (typeof definition.defaultValue !== \"number\") {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-numeric property defaultValue`,\n\t\t\t);\n\t\t}\n\t\tthis.defaultValue = definition.defaultValue;\n\n\t\tif (\n\t\t\tdefinition.recommendedValue != undefined\n\t\t\t&& typeof definition.recommendedValue !== \"number\"\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-numeric property recommendedValue`,\n\t\t\t);\n\t\t}\n\t\tthis.recommendedValue = definition.recommendedValue;\n\n\t\tif (\n\t\t\tdefinition.allowManualEntry != undefined\n\t\t\t&& definition.allowManualEntry !== false\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: allowManualEntry must be false or omitted!`,\n\t\t\t);\n\t\t}\n\t\t// Default to allowing manual entry, except if the param is readonly\n\t\tthis.allowManualEntry = definition.allowManualEntry ?? !this.readOnly;\n\n\t\tif (\n\t\t\tdefinition.destructive != undefined\n\t\t\t&& typeof definition.destructive !== \"boolean\"\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-boolean property destructive`,\n\t\t\t);\n\t\t}\n\t\tthis.destructive = definition.destructive;\n\n\t\tif (\n\t\t\tisArray(definition.options)\n\t\t\t&& !definition.options.every(\n\t\t\t\t(opt: unknown) =>\n\t\t\t\t\tisObject(opt)\n\t\t\t\t\t&& typeof opt.label === \"string\"\n\t\t\t\t\t&& typeof opt.value === \"number\",\n\t\t\t)\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: options is malformed!`,\n\t\t\t);\n\t\t}\n\n\t\tthis.options = definition.options?.map(\n\t\t\t(opt: any) =>\n\t\t\t\tnew ConditionalConfigOption(opt.value, opt.label, opt.$if),\n\t\t) ?? [];\n\n\t\tif (\n\t\t\tdefinition.hidden != undefined\n\t\t\t&& typeof definition.hidden !== \"boolean\"\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-boolean property hidden`,\n\t\t\t);\n\t\t}\n\t\tthis.hidden = definition.hidden;\n\n\t\tif (\n\t\t\tdefinition[\"$purpose\"] != undefined\n\t\t\t&& typeof definition[\"$purpose\"] !== \"string\"\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"devices\",\n\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber} has a non-string property $purpose`,\n\t\t\t);\n\t\t}\n\t\tthis.purpose = definition[\"$purpose\"];\n\n\t\t// Parse and validate the allowed field\n\t\tif (definition.allowed != undefined) {\n\t\t\t// Validate mutual exclusivity with minValue/maxValue\n\t\t\tif (this.minValue != undefined || this.maxValue != undefined) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: \"allowed\" cannot be used together with \"minValue\" or \"maxValue\"!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Validate mutual exclusivity with allowManualEntry: false\n\t\t\tif (this.allowManualEntry === false) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: \"allowed\" cannot be used with \"allowManualEntry: false\"!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Validate it's an array\n\t\t\tif (!isArray(definition.allowed)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: \"allowed\" must be an array!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Validate array is not empty\n\t\t\tif (definition.allowed.length === 0) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: \"allowed\" array must contain at least one entry!`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Parse each value definition\n\t\t\tconst parsedValues: AllowedValue[] = [];\n\t\t\tfor (let i = 0; i < definition.allowed.length; i++) {\n\t\t\t\tconst def = definition.allowed[i];\n\n\t\t\t\tif (!isObject(def)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: allowed[${i}] must be an object!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Check for single value\n\t\t\t\tif (\"value\" in def) {\n\t\t\t\t\tif (typeof def.value !== \"number\") {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: allowed[${i}].value must be a number!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tparsedValues.push({ value: def.value });\n\t\t\t\t} // Check for range\n\t\t\t\telse if (\"range\" in def) {\n\t\t\t\t\tif (!isArray(def.range)) {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: allowed[${i}].range must be an array!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (def.range.length !== 2) {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: allowed[${i}].range must have exactly 2 elements [from, to]!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst [from, to] = def.range;\n\t\t\t\t\tconst step = def.step;\n\n\t\t\t\t\tif (typeof from !== \"number\" || typeof to !== \"number\") {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: allowed[${i}].range elements must be numbers!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (step !== undefined && typeof step !== \"number\") {\n\t\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: allowed[${i}].step must be a number if provided!`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tparsedValues.push({\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tto,\n\t\t\t\t\t\t...(step !== undefined && { step }),\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t\"devices\",\n\t\t\t\t\t\t`packages/config/config/devices/${parent.filename}:\nParameter #${parameterNumber}: allowed[${i}] must have either \"value\" or \"range\" property!`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.allowed = parsedValues;\n\t\t}\n\t}\n\n\t// IMPORTANT: Changes to these properties can affect the device config hash,\n\t// which may prompt users to re-interview their devices.\n\t//\n\t// Whenever adding, removing or changing properties of this class,\n\t// make sure that these changes do not cause the hash to change unintentionally.\n\t// For example, adding a new optional property with a default value of `undefined`\n\t// is fine, unless the constructor always sets it to a concrete value.\n\t//\n\t// In all other case, make sure to increase the `maxHashVersion` in DeviceConfig.ts\n\t// and add appropriate, backwards-compatible handling for the new version\n\t// in `areHashesEqual`\n\n\tprivate parent: ConditionalDeviceConfig;\n\tpublic readonly parameterNumber: number;\n\tpublic readonly valueBitMask?: number;\n\tpublic readonly label: string;\n\tpublic readonly description?: string;\n\tpublic readonly valueSize: number;\n\tpublic readonly allowed?: readonly AllowedValue[];\n\tpublic readonly minValue?: number;\n\tpublic readonly maxValue?: number;\n\tpublic readonly unsigned?: boolean;\n\tpublic readonly defaultValue: number;\n\tpublic readonly recommendedValue?: number;\n\tpublic readonly unit?: string;\n\tpublic readonly readOnly?: true;\n\tpublic readonly writeOnly?: true;\n\tpublic readonly allowManualEntry: boolean;\n\tpublic readonly destructive?: boolean;\n\tpublic readonly options: readonly ConditionalConfigOption[];\n\tpublic readonly hidden?: boolean;\n\tpublic readonly purpose?: string;\n\n\tpublic readonly condition?: string;\n\n\tpublic evaluateCondition(\n\t\tdeviceId?: DeviceID,\n\t): ParamInformation | undefined {\n\t\tif (!conditionApplies(this, deviceId)) return;\n\n\t\tconst ret = {\n\t\t\t...pick(this, [\n\t\t\t\t\"parameterNumber\",\n\t\t\t\t\"valueBitMask\",\n\t\t\t\t\"label\",\n\t\t\t\t\"description\",\n\t\t\t\t\"valueSize\",\n\t\t\t\t\"allowed\",\n\t\t\t\t\"minValue\",\n\t\t\t\t\"maxValue\",\n\t\t\t\t\"unsigned\",\n\t\t\t\t\"defaultValue\",\n\t\t\t\t\"recommendedValue\",\n\t\t\t\t\"unit\",\n\t\t\t\t\"readOnly\",\n\t\t\t\t\"writeOnly\",\n\t\t\t\t\"allowManualEntry\",\n\t\t\t\t\"destructive\",\n\t\t\t\t\"hidden\",\n\t\t\t\t\"purpose\",\n\t\t\t]),\n\t\t\toptions: evaluateDeep(this.options, deviceId, true),\n\t\t};\n\n\t\t// If allowed is defined, compute the envelope (minValue/maxValue) for backwards compatibility\n\t\tif (ret.allowed && ret.allowed.length > 0) {\n\t\t\tlet globalMin = Infinity;\n\t\t\tlet globalMax = -Infinity;\n\n\t\t\tfor (const def of ret.allowed) {\n\t\t\t\tif (\"value\" in def) {\n\t\t\t\t\tglobalMin = Math.min(globalMin, def.value);\n\t\t\t\t\tglobalMax = Math.max(globalMax, def.value);\n\t\t\t\t} else {\n\t\t\t\t\tglobalMin = Math.min(globalMin, def.from);\n\t\t\t\t\tglobalMax = Math.max(globalMax, def.to);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tret.minValue = globalMin;\n\t\t\tret.maxValue = globalMax;\n\t\t} // Infer minValue from options if possible\n\t\telse if (ret.minValue == undefined) {\n\t\t\tif (ret.allowManualEntry === false && ret.options.length > 0) {\n\t\t\t\tret.minValue = Math.min(...ret.options.map((o) => o.value));\n\t\t\t} else {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`packages/config/config/devices/${this.parent.filename}:\nParameter #${this.parameterNumber} is missing required property \"minValue\"!`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (ret.allowed == undefined && ret.maxValue == undefined) {\n\t\t\tif (ret.allowManualEntry === false && ret.options.length > 0) {\n\t\t\t\tret.maxValue = Math.max(...ret.options.map((o) => o.value));\n\t\t\t} else {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"devices\",\n\t\t\t\t\t`packages/config/config/devices/${this.parent.filename}:\nParameter #${this.parameterNumber} is missing required property \"maxValue\"!`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// After inferring minValue/maxValue, create the allowed array if not already set\n\t\tif (ret.allowed == undefined) {\n\t\t\tret.allowed = [{ from: ret.minValue!, to: ret.maxValue! }];\n\t\t}\n\n\t\t// @ts-expect-error TS doesn't understand that we set min/maxValue and allowed\n\t\treturn ret;\n\t}\n}\n\nexport type ParamInformation =\n\t& Omit<\n\t\tConditionalParamInformation,\n\t\t| \"condition\"\n\t\t| \"evaluateCondition\"\n\t\t| \"options\"\n\t\t| \"minValue\"\n\t\t| \"maxValue\"\n\t\t| \"allowed\"\n\t>\n\t& {\n\t\toptions: readonly ConfigOption[];\n\t\tminValue: NonNullable<ConditionalParamInformation[\"minValue\"]>;\n\t\tmaxValue: NonNullable<ConditionalParamInformation[\"maxValue\"]>;\n\t\tallowed: NonNullable<ConditionalParamInformation[\"allowed\"]>;\n\t};\n\nexport class ConditionalConfigOption implements ConditionalItem<ConfigOption> {\n\tpublic constructor(\n\t\tpublic readonly value: number,\n\t\tpublic readonly label: string,\n\t\tpublic readonly condition?: string,\n\t) {}\n\n\tpublic evaluateCondition(deviceId?: DeviceID): ConfigOption | undefined {\n\t\tif (!conditionApplies(this, deviceId)) return;\n\n\t\treturn pick(this, [\"value\", \"label\"]);\n\t}\n}\n\nexport interface ConfigOption {\n\tvalue: number;\n\tlabel: string;\n}\n\nexport type ConditionalParamInfoMap = ReadonlyObjectKeyMap<\n\t{ parameter: number; valueBitMask?: number },\n\tConditionalParamInformation[]\n>;\n\nexport type ParamInfoMap = ReadonlyObjectKeyMap<\n\t{ parameter: number; valueBitMask?: number },\n\tParamInformation\n>;\n\nexport function parseConditionalParamInformationMap(\n\tdefinition: JSONObject,\n\tparent: ConditionalDeviceConfig,\n\terrorPrefix: string = \"\",\n): ConditionalParamInfoMap {\n\tconst paramInformation = new ObjectKeyMap<\n\t\t{ parameter: number; valueBitMask?: number },\n\t\tConditionalParamInformation[]\n\t>();\n\n\tconst filename = parent.filename;\n\n\tif (isArray(definition.paramInformation)) {\n\t\t// Check that every param has a param number\n\t\tif (!definition.paramInformation.every((entry: any) => \"#\" in entry)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t`device`,\n\t\t\t\t`packages/config/config/devices/${filename}: \n${errorPrefix}required property \"#\" missing in at least one entry of paramInformation`,\n\t\t\t);\n\t\t}\n\n\t\t// And a valid $if condition\n\t\tfor (const entry of definition.paramInformation) {\n\t\t\tvalidateCondition(\n\t\t\t\tfilename,\n\t\t\t\tentry,\n\t\t\t\t`${errorPrefix}At least one entry of paramInformation contains an`,\n\t\t\t);\n\t\t}\n\n\t\tfor (const paramDefinition of definition.paramInformation) {\n\t\t\tconst { [\"#\"]: paramNo, ...defn } = paramDefinition;\n\t\t\tconst key = tryParseParamNumber(paramNo);\n\t\t\tif (!key) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}: \n${errorPrefix}found invalid param number \"${paramNo}\" in paramInformation`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!paramInformation.has(key)) paramInformation.set(key, []);\n\t\t\tparamInformation\n\t\t\t\t.get(key)!\n\t\t\t\t.push(\n\t\t\t\t\tnew ConditionalParamInformation(\n\t\t\t\t\t\tparent,\n\t\t\t\t\t\tkey.parameter,\n\t\t\t\t\t\tkey.valueBitMask,\n\t\t\t\t\t\tdefn,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t}\n\t} else if (isObject(definition.paramInformation)) {\n\t\t// Silently ignore this old format\n\t} else {\n\t\tthrowInvalidConfig(\n\t\t\t`device`,\n\t\t\t`packages/config/config/devices/${filename}:\n${errorPrefix}paramInformation must be an array!`,\n\t\t);\n\t}\n\n\treturn paramInformation;\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/cjs/index.d.ts
CHANGED
|
@@ -9,6 +9,6 @@ export * from "./devices/DeviceMetadata.js";
|
|
|
9
9
|
export * from "./devices/EndpointConfig.js";
|
|
10
10
|
export * from "./devices/ParamInformation.js";
|
|
11
11
|
export * from "./devices/SceneConfig.js";
|
|
12
|
-
export * from "./devices/shared.js";
|
|
12
|
+
export type * from "./devices/shared.js";
|
|
13
13
|
export type * from "./traits.js";
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
package/build/cjs/index.js
CHANGED
|
@@ -33,7 +33,6 @@ __reExport(index_exports, require("./devices/DeviceMetadata.js"), module.exports
|
|
|
33
33
|
__reExport(index_exports, require("./devices/EndpointConfig.js"), module.exports);
|
|
34
34
|
__reExport(index_exports, require("./devices/ParamInformation.js"), module.exports);
|
|
35
35
|
__reExport(index_exports, require("./devices/SceneConfig.js"), module.exports);
|
|
36
|
-
__reExport(index_exports, require("./devices/shared.js"), module.exports);
|
|
37
36
|
// Annotate the CommonJS export names for ESM import in node:
|
|
38
37
|
0 && (module.exports = {
|
|
39
38
|
PACKAGE_VERSION,
|
|
@@ -46,7 +45,6 @@ __reExport(index_exports, require("./devices/shared.js"), module.exports);
|
|
|
46
45
|
...require("./devices/DeviceMetadata.js"),
|
|
47
46
|
...require("./devices/EndpointConfig.js"),
|
|
48
47
|
...require("./devices/ParamInformation.js"),
|
|
49
|
-
...require("./devices/SceneConfig.js")
|
|
50
|
-
...require("./devices/shared.js")
|
|
48
|
+
...require("./devices/SceneConfig.js")
|
|
51
49
|
});
|
|
52
50
|
//# sourceMappingURL=index.js.map
|