@zwave-js/config 14.0.0-beta.1 → 14.0.0-beta.4

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