@zwave-js/config 15.2.0 → 15.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/build/cjs/ConfigManager.js +6 -3
  2. package/build/cjs/ConfigManager.js.map +2 -2
  3. package/build/cjs/Manufacturers.js +3 -3
  4. package/build/cjs/Manufacturers.js.map +2 -2
  5. package/build/cjs/_version.d.ts +1 -1
  6. package/build/cjs/_version.js +1 -1
  7. package/build/cjs/_version.js.map +1 -1
  8. package/build/cjs/configDir.browser.d.ts +3 -0
  9. package/build/cjs/configDir.browser.js +30 -0
  10. package/build/cjs/configDir.browser.js.map +7 -0
  11. package/build/cjs/configDir.node.d.ts +3 -0
  12. package/build/cjs/configDir.node.js +43 -0
  13. package/build/cjs/configDir.node.js.map +7 -0
  14. package/build/cjs/devices/DeviceConfig.js +3 -3
  15. package/build/cjs/devices/DeviceConfig.js.map +2 -2
  16. package/build/cjs/package.json +20 -1
  17. package/build/cjs/utils.d.ts +0 -2
  18. package/build/cjs/utils.js +2 -7
  19. package/build/cjs/utils.js.map +4 -4
  20. package/build/esm/ConfigManager.d.ts.map +1 -1
  21. package/build/esm/ConfigManager.js +6 -3
  22. package/build/esm/ConfigManager.js.map +1 -1
  23. package/build/esm/Manufacturers.d.ts.map +1 -1
  24. package/build/esm/Manufacturers.js +1 -1
  25. package/build/esm/Manufacturers.js.map +1 -1
  26. package/build/esm/_version.d.ts +1 -1
  27. package/build/esm/_version.js +1 -1
  28. package/build/esm/configDir.browser.d.ts +3 -0
  29. package/build/esm/configDir.browser.d.ts.map +1 -0
  30. package/build/esm/configDir.browser.js +3 -0
  31. package/build/esm/configDir.browser.js.map +1 -0
  32. package/build/esm/configDir.node.d.ts +3 -0
  33. package/build/esm/configDir.node.d.ts.map +1 -0
  34. package/build/esm/configDir.node.js +9 -0
  35. package/build/esm/configDir.node.js.map +1 -0
  36. package/build/esm/devices/DeviceConfig.d.ts.map +1 -1
  37. package/build/esm/devices/DeviceConfig.js +1 -1
  38. package/build/esm/devices/DeviceConfig.js.map +1 -1
  39. package/build/esm/package.json +20 -1
  40. package/build/esm/utils.d.ts +0 -2
  41. package/build/esm/utils.d.ts.map +1 -1
  42. package/build/esm/utils.js +1 -7
  43. package/build/esm/utils.js.map +1 -1
  44. package/config/devices/0x0084/ssa1_ssa2.json +4 -0
  45. package/package.json +25 -6
@@ -32,6 +32,7 @@ __export(ConfigManager_exports, {
32
32
  ConfigManager: () => ConfigManager
33
33
  });
34
34
  module.exports = __toCommonJS(ConfigManager_exports);
35
+ var import_config_dir = require("#config_dir");
35
36
  var import_core = require("@zwave-js/core");
36
37
  var import_shared = require("@zwave-js/shared");
37
38
  var import_pathe = __toESM(require("pathe"), 1);
@@ -53,7 +54,7 @@ class ConfigManager {
53
54
  }
54
55
  _fs;
55
56
  async getFS() {
56
- this._fs ??= (await import("@zwave-js/core/bindings/fs/node")).fs;
57
+ this._fs ??= (await import("#default_bindings/fs")).fs;
57
58
  return this._fs;
58
59
  }
59
60
  _configVersion;
@@ -64,7 +65,9 @@ class ConfigManager {
64
65
  _logger;
65
66
  async getLogger() {
66
67
  if (!this._logContainer) {
67
- this._logContainer = (await import("@zwave-js/core/bindings/log/node")).log({
68
+ this._logContainer = // eslint-disable-next-line @typescript-eslint/ban-ts-comment
69
+ // @ts-ignore - For some reason, VSCode does not like this import, although tsc is fine with it
70
+ (await import("#default_bindings/log")).log({
68
71
  enabled: false
69
72
  });
70
73
  }
@@ -202,7 +205,7 @@ class ConfigManager {
202
205
  const indexEntries = this.index.filter((0, import_utils.getDeviceEntryPredicate)(manufacturerId, productType, productId, firmwareVersion));
203
206
  const indexEntry = indexEntries.find((e) => !!e.preferred) ?? indexEntries[0];
204
207
  if (indexEntry) {
205
- const devicesDir = (0, import_DeviceConfig.getDevicesPaths)(this._useExternalConfig && this.externalConfigDir || import_utils.configDir).devicesDir;
208
+ const devicesDir = (0, import_DeviceConfig.getDevicesPaths)(this._useExternalConfig && this.externalConfigDir || import_config_dir.configDir).devicesDir;
206
209
  const filePath = import_pathe.default.isAbsolute(indexEntry.filename) ? indexEntry.filename : import_pathe.default.join(devicesDir, indexEntry.filename);
207
210
  if (!await (0, import_shared.pathExists)(fs, filePath))
208
211
  return;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/ConfigManager.ts"],
4
- "sourcesContent": ["import {\n\ttype LogContainer,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tisZWaveError,\n} from \"@zwave-js/core\";\nimport { getErrorMessage, pathExists } from \"@zwave-js/shared\";\nimport type { FileSystem } from \"@zwave-js/shared/bindings\";\nimport path from \"pathe\";\nimport { ConfigLogger } from \"./Logger.js\";\nimport {\n\ttype ManufacturersMap,\n\tloadManufacturersInternal,\n\tsaveManufacturersInternal,\n} from \"./Manufacturers.js\";\nimport { PACKAGE_VERSION } from \"./_version.js\";\nimport {\n\tConditionalDeviceConfig,\n\ttype DeviceConfig,\n\ttype DeviceConfigIndex,\n\ttype FulltextDeviceConfigIndex,\n\tgeneratePriorityDeviceIndex,\n\tgetDevicesPaths,\n\tloadDeviceIndexInternal,\n\tloadFulltextDeviceIndexInternal,\n} from \"./devices/DeviceConfig.js\";\nimport {\n\ttype SyncExternalConfigDirResult,\n\tconfigDir,\n\tgetDeviceEntryPredicate,\n\tgetExternalConfigDirEnvVariable,\n\tsyncExternalConfigDir,\n} from \"./utils.js\";\n\nexport interface ConfigManagerOptions {\n\tbindings?: FileSystem;\n\tlogContainer?: LogContainer;\n\tdeviceConfigPriorityDir?: string;\n\tdeviceConfigExternalDir?: string;\n}\n\nexport class ConfigManager {\n\tpublic constructor(options: ConfigManagerOptions = {}) {\n\t\tthis._fs = options.bindings;\n\t\tthis._logContainer = options.logContainer;\n\n\t\tthis.deviceConfigPriorityDir = options.deviceConfigPriorityDir;\n\t\tthis.deviceConfigExternalDir = options.deviceConfigExternalDir;\n\n\t\tthis._configVersion = PACKAGE_VERSION;\n\t}\n\n\tprivate _fs: FileSystem | undefined;\n\tprivate async getFS(): Promise<FileSystem> {\n\t\tthis._fs ??= (await import(\"@zwave-js/core/bindings/fs/node\")).fs;\n\t\treturn this._fs;\n\t}\n\n\tprivate _configVersion: string;\n\tpublic get configVersion(): string {\n\t\treturn this._configVersion;\n\t}\n\n\tprivate _logContainer: LogContainer | undefined;\n\tprivate _logger: ConfigLogger | undefined;\n\tprivate async getLogger(): Promise<ConfigLogger> {\n\t\tif (!this._logContainer) {\n\t\t\tthis._logContainer =\n\t\t\t\t(await import(\"@zwave-js/core/bindings/log/node\")).log({\n\t\t\t\t\tenabled: false,\n\t\t\t\t});\n\t\t}\n\t\tif (!this._logger) {\n\t\t\tthis._logger = new ConfigLogger(this._logContainer);\n\t\t}\n\t\treturn this._logger;\n\t}\n\n\tprivate _manufacturers: ManufacturersMap | undefined;\n\tpublic get manufacturers(): ManufacturersMap {\n\t\tif (!this._manufacturers) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The config has not been loaded yet!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotReady,\n\t\t\t);\n\t\t}\n\t\treturn this._manufacturers;\n\t}\n\n\tprivate deviceConfigPriorityDir: string | undefined;\n\tprivate deviceConfigExternalDir: string | undefined;\n\tpublic get externalConfigDir(): string | undefined {\n\t\treturn this.deviceConfigExternalDir\n\t\t\t?? getExternalConfigDirEnvVariable();\n\t}\n\n\tprivate index: DeviceConfigIndex | undefined;\n\tprivate fulltextIndex: FulltextDeviceConfigIndex | undefined;\n\n\tprivate _useExternalConfig: boolean = false;\n\tpublic get useExternalConfig(): boolean {\n\t\treturn this._useExternalConfig;\n\t}\n\n\tpublic async loadAll(): Promise<void> {\n\t\tconst logger = await this.getLogger();\n\t\t// If the environment option for an external config dir is set\n\t\t// try to sync it and then use it\n\t\tlet syncResult: SyncExternalConfigDirResult | undefined;\n\t\tconst externalConfigDir = this.externalConfigDir;\n\t\tif (externalConfigDir) {\n\t\t\tsyncResult = await syncExternalConfigDir(\n\t\t\t\tawait this.getFS(),\n\t\t\t\texternalConfigDir,\n\t\t\t\tlogger,\n\t\t\t);\n\t\t}\n\n\t\tif (syncResult?.success) {\n\t\t\tthis._useExternalConfig = true;\n\t\t\tlogger.print(\n\t\t\t\t`Using external configuration dir ${externalConfigDir}`,\n\t\t\t);\n\t\t\tthis._configVersion = syncResult.version;\n\t\t} else {\n\t\t\tthis._useExternalConfig = false;\n\t\t\tthis._configVersion = PACKAGE_VERSION;\n\t\t}\n\t\tlogger.print(`version ${this._configVersion}`, \"info\");\n\n\t\tawait this.loadManufacturers();\n\t\tawait this.loadDeviceIndex();\n\t}\n\n\tpublic async loadManufacturers(): Promise<void> {\n\t\ttry {\n\t\t\tthis._manufacturers = await loadManufacturersInternal(\n\t\t\t\tawait this.getFS(),\n\t\t\t\tthis._useExternalConfig && this.externalConfigDir || undefined,\n\t\t\t);\n\t\t} catch (e) {\n\t\t\t// If the config file is missing or invalid, don't try to find it again\n\t\t\tif (isZWaveError(e) && e.code === ZWaveErrorCodes.Config_Invalid) {\n\t\t\t\tif (process.env.NODE_ENV !== \"test\") {\n\t\t\t\t\t(await this.getLogger()).print(\n\t\t\t\t\t\t`Could not load manufacturers config: ${e.message}`,\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (!this._manufacturers) this._manufacturers = new Map();\n\t\t\t} else {\n\t\t\t\t// This is an unexpected error\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async saveManufacturers(): Promise<void> {\n\t\tif (!this._manufacturers) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The config has not been loaded yet!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotReady,\n\t\t\t);\n\t\t}\n\n\t\tawait saveManufacturersInternal(\n\t\t\tawait this.getFS(),\n\t\t\tthis._manufacturers,\n\t\t);\n\t}\n\n\t/**\n\t * Looks up the name of the manufacturer with the given ID in the configuration DB\n\t * @param manufacturerId The manufacturer id to look up\n\t */\n\tpublic lookupManufacturer(manufacturerId: number): string | undefined {\n\t\tif (!this._manufacturers) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The config has not been loaded yet!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotReady,\n\t\t\t);\n\t\t}\n\n\t\treturn this._manufacturers.get(manufacturerId);\n\t}\n\n\t/**\n\t * Add new manufacturers to configuration DB\n\t * @param manufacturerId The manufacturer id to look up\n\t * @param manufacturerName The manufacturer name\n\t */\n\tpublic setManufacturer(\n\t\tmanufacturerId: number,\n\t\tmanufacturerName: string,\n\t): void {\n\t\tif (!this._manufacturers) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The config has not been loaded yet!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotReady,\n\t\t\t);\n\t\t}\n\n\t\tthis._manufacturers.set(manufacturerId, manufacturerName);\n\t}\n\n\tpublic async loadDeviceIndex(): Promise<void> {\n\t\tconst fs = await this.getFS();\n\t\tconst logger = await this.getLogger();\n\t\ttry {\n\t\t\t// The index of config files included in this package\n\t\t\tconst embeddedIndex = await loadDeviceIndexInternal(\n\t\t\t\tfs,\n\t\t\t\tlogger,\n\t\t\t\tthis._useExternalConfig && this.externalConfigDir || undefined,\n\t\t\t);\n\t\t\t// A dynamic index of the user-defined priority device config files\n\t\t\tconst priorityIndex: DeviceConfigIndex = [];\n\t\t\tif (this.deviceConfigPriorityDir) {\n\t\t\t\tif (await pathExists(fs, this.deviceConfigPriorityDir)) {\n\t\t\t\t\tpriorityIndex.push(\n\t\t\t\t\t\t...(await generatePriorityDeviceIndex(\n\t\t\t\t\t\t\tfs,\n\t\t\t\t\t\t\tthis.deviceConfigPriorityDir,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t)),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.print(\n\t\t\t\t\t\t`Priority device configuration directory ${this.deviceConfigPriorityDir} not found`,\n\t\t\t\t\t\t\"warn\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Put the priority index in front, so the files get resolved first\n\t\t\tthis.index = [...priorityIndex, ...embeddedIndex];\n\t\t} catch (e) {\n\t\t\t// If the index file is missing or invalid, don't try to find it again\n\t\t\tif (\n\t\t\t\t(!isZWaveError(e) && e instanceof Error)\n\t\t\t\t|| (isZWaveError(e)\n\t\t\t\t\t&& e.code === ZWaveErrorCodes.Config_Invalid)\n\t\t\t) {\n\t\t\t\t// Fall back to no index on production systems\n\t\t\t\tif (!this.index) this.index = [];\n\t\t\t\tif (process.env.NODE_ENV !== \"test\") {\n\t\t\t\t\tlogger.print(\n\t\t\t\t\t\t`Could not load or regenerate device config index: ${e.message}`,\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t\t// and don't throw\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// But fail hard in tests\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getIndex(): DeviceConfigIndex | undefined {\n\t\treturn this.index;\n\t}\n\n\tpublic async loadFulltextDeviceIndex(): Promise<void> {\n\t\tthis.fulltextIndex = await loadFulltextDeviceIndexInternal(\n\t\t\tawait this.getFS(),\n\t\t\tawait this.getLogger(),\n\t\t);\n\t}\n\n\tpublic getFulltextIndex(): FulltextDeviceConfigIndex | undefined {\n\t\treturn this.fulltextIndex;\n\t}\n\n\t/**\n\t * Looks up the definition of a given device in the configuration DB, but does not evaluate conditional settings.\n\t * @param manufacturerId The manufacturer id of the device\n\t * @param productType The product type of the device\n\t * @param productId The product id of the device\n\t * @param firmwareVersion If known, configuration for a specific firmware version can be loaded.\n\t * If this is `undefined` or not given, the first matching file with a defined firmware range will be returned.\n\t */\n\tpublic async lookupDevicePreserveConditions(\n\t\tmanufacturerId: number,\n\t\tproductType: number,\n\t\tproductId: number,\n\t\tfirmwareVersion?: string,\n\t): Promise<ConditionalDeviceConfig | undefined> {\n\t\t// Load/regenerate the index if necessary\n\t\tif (!this.index) await this.loadDeviceIndex();\n\n\t\tconst fs = await this.getFS();\n\n\t\t// Look up the device in the index\n\t\tconst indexEntries = this.index!.filter(\n\t\t\tgetDeviceEntryPredicate(\n\t\t\t\tmanufacturerId,\n\t\t\t\tproductType,\n\t\t\t\tproductId,\n\t\t\t\tfirmwareVersion,\n\t\t\t),\n\t\t);\n\t\t// If there are multiple with overlapping firmware ranges, return the preferred one first\n\t\tconst indexEntry = indexEntries.find((e) => !!e.preferred)\n\t\t\t?? indexEntries[0];\n\n\t\tif (indexEntry) {\n\t\t\tconst devicesDir = getDevicesPaths(\n\t\t\t\tthis._useExternalConfig && this.externalConfigDir || configDir,\n\t\t\t).devicesDir;\n\t\t\tconst filePath = path.isAbsolute(indexEntry.filename)\n\t\t\t\t? indexEntry.filename\n\t\t\t\t: path.join(devicesDir, indexEntry.filename);\n\t\t\tif (!(await pathExists(fs, filePath))) return;\n\n\t\t\t// A config file is treated as am embedded one when it is located under the devices root dir\n\t\t\t// or the external config dir\n\t\t\tconst isEmbedded = !path\n\t\t\t\t.relative(devicesDir, filePath)\n\t\t\t\t.startsWith(\"..\");\n\n\t\t\t// When a device file is located in a different root directory than the embedded config files,\n\t\t\t// we use the embedded dir a fallback\n\t\t\tconst rootDir = indexEntry.rootDir ?? devicesDir;\n\t\t\tconst fallbackDirs = rootDir === devicesDir\n\t\t\t\t? undefined\n\t\t\t\t: [devicesDir];\n\n\t\t\ttry {\n\t\t\t\treturn await ConditionalDeviceConfig.from(\n\t\t\t\t\tfs,\n\t\t\t\t\tfilePath,\n\t\t\t\t\tisEmbedded,\n\t\t\t\t\t{ rootDir, fallbackDirs },\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tif (process.env.NODE_ENV !== \"test\") {\n\t\t\t\t\t(await this.getLogger()).print(\n\t\t\t\t\t\t`Error loading device config ${filePath}: ${\n\t\t\t\t\t\t\tgetErrorMessage(\n\t\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Looks up the definition of a given device in the configuration DB\n\t * @param manufacturerId The manufacturer id of the device\n\t * @param productType The product type of the device\n\t * @param productId The product id of the device\n\t * @param firmwareVersion If known, configuration for a specific firmware version can be loaded.\n\t * If this is `undefined` or not given, the first matching file with a defined firmware range will be returned.\n\t */\n\tpublic async lookupDevice(\n\t\tmanufacturerId: number,\n\t\tproductType: number,\n\t\tproductId: number,\n\t\tfirmwareVersion?: string,\n\t): Promise<DeviceConfig | undefined> {\n\t\tconst ret = await this.lookupDevicePreserveConditions(\n\t\t\tmanufacturerId,\n\t\t\tproductType,\n\t\t\tproductId,\n\t\t\tfirmwareVersion,\n\t\t);\n\t\treturn ret?.evaluate({\n\t\t\tmanufacturerId,\n\t\t\tproductType,\n\t\t\tproductId,\n\t\t\tfirmwareVersion,\n\t\t});\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,kBAKO;AACP,oBAA4C;AAE5C,mBAAiB;AACjB,oBAA6B;AAC7B,2BAIO;AACP,qBAAgC;AAChC,0BASO;AACP,mBAMO;AASD,MAAO,cAAa;EAzC1B,OAyC0B;;;EACzB,YAAmB,UAAgC,CAAA,GAAE;AACpD,SAAK,MAAM,QAAQ;AACnB,SAAK,gBAAgB,QAAQ;AAE7B,SAAK,0BAA0B,QAAQ;AACvC,SAAK,0BAA0B,QAAQ;AAEvC,SAAK,iBAAiB;EACvB;EAEQ;EACA,MAAM,QAAK;AAClB,SAAK,SAAS,MAAM,OAAO,iCAAiC,GAAG;AAC/D,WAAO,KAAK;EACb;EAEQ;EACR,IAAW,gBAAa;AACvB,WAAO,KAAK;EACb;EAEQ;EACA;EACA,MAAM,YAAS;AACtB,QAAI,CAAC,KAAK,eAAe;AACxB,WAAK,iBACH,MAAM,OAAO,kCAAkC,GAAG,IAAI;QACtD,SAAS;OACT;IACH;AACA,QAAI,CAAC,KAAK,SAAS;AAClB,WAAK,UAAU,IAAI,2BAAa,KAAK,aAAa;IACnD;AACA,WAAO,KAAK;EACb;EAEQ;EACR,IAAW,gBAAa;AACvB,QAAI,CAAC,KAAK,gBAAgB;AACzB,YAAM,IAAI,uBACT,uCACA,4BAAgB,eAAe;IAEjC;AACA,WAAO,KAAK;EACb;EAEQ;EACA;EACR,IAAW,oBAAiB;AAC3B,WAAO,KAAK,+BACR,8CAA+B;EACpC;EAEQ;EACA;EAEA,qBAA8B;EACtC,IAAW,oBAAiB;AAC3B,WAAO,KAAK;EACb;EAEO,MAAM,UAAO;AACnB,UAAM,SAAS,MAAM,KAAK,UAAS;AAGnC,QAAI;AACJ,UAAM,oBAAoB,KAAK;AAC/B,QAAI,mBAAmB;AACtB,mBAAa,UAAM,oCAClB,MAAM,KAAK,MAAK,GAChB,mBACA,MAAM;IAER;AAEA,QAAI,YAAY,SAAS;AACxB,WAAK,qBAAqB;AAC1B,aAAO,MACN,oCAAoC,iBAAiB,EAAE;AAExD,WAAK,iBAAiB,WAAW;IAClC,OAAO;AACN,WAAK,qBAAqB;AAC1B,WAAK,iBAAiB;IACvB;AACA,WAAO,MAAM,WAAW,KAAK,cAAc,IAAI,MAAM;AAErD,UAAM,KAAK,kBAAiB;AAC5B,UAAM,KAAK,gBAAe;EAC3B;EAEO,MAAM,oBAAiB;AAC7B,QAAI;AACH,WAAK,iBAAiB,UAAM,gDAC3B,MAAM,KAAK,MAAK,GAChB,KAAK,sBAAsB,KAAK,qBAAqB,MAAS;IAEhE,SAAS,GAAG;AAEX,cAAI,0BAAa,CAAC,KAAK,EAAE,SAAS,4BAAgB,gBAAgB;AACjE,YAAI,QAAQ,IAAI,aAAa,QAAQ;AACpC,WAAC,MAAM,KAAK,UAAS,GAAI,MACxB,wCAAwC,EAAE,OAAO,IACjD,OAAO;QAET;AACA,YAAI,CAAC,KAAK;AAAgB,eAAK,iBAAiB,oBAAI,IAAG;MACxD,OAAO;AAEN,cAAM;MACP;IACD;EACD;EAEO,MAAM,oBAAiB;AAC7B,QAAI,CAAC,KAAK,gBAAgB;AACzB,YAAM,IAAI,uBACT,uCACA,4BAAgB,eAAe;IAEjC;AAEA,cAAM,gDACL,MAAM,KAAK,MAAK,GAChB,KAAK,cAAc;EAErB;;;;;EAMO,mBAAmB,gBAAsB;AAC/C,QAAI,CAAC,KAAK,gBAAgB;AACzB,YAAM,IAAI,uBACT,uCACA,4BAAgB,eAAe;IAEjC;AAEA,WAAO,KAAK,eAAe,IAAI,cAAc;EAC9C;;;;;;EAOO,gBACN,gBACA,kBAAwB;AAExB,QAAI,CAAC,KAAK,gBAAgB;AACzB,YAAM,IAAI,uBACT,uCACA,4BAAgB,eAAe;IAEjC;AAEA,SAAK,eAAe,IAAI,gBAAgB,gBAAgB;EACzD;EAEO,MAAM,kBAAe;AAC3B,UAAM,KAAK,MAAM,KAAK,MAAK;AAC3B,UAAM,SAAS,MAAM,KAAK,UAAS;AACnC,QAAI;AAEH,YAAM,gBAAgB,UAAM,6CAC3B,IACA,QACA,KAAK,sBAAsB,KAAK,qBAAqB,MAAS;AAG/D,YAAM,gBAAmC,CAAA;AACzC,UAAI,KAAK,yBAAyB;AACjC,YAAI,UAAM,0BAAW,IAAI,KAAK,uBAAuB,GAAG;AACvD,wBAAc,KACb,GAAI,UAAM,iDACT,IACA,KAAK,yBACL,MAAM,CACL;QAEJ,OAAO;AACN,iBAAO,MACN,2CAA2C,KAAK,uBAAuB,cACvE,MAAM;QAER;MACD;AAEA,WAAK,QAAQ,CAAC,GAAG,eAAe,GAAG,aAAa;IACjD,SAAS,GAAG;AAEX,UACE,KAAC,0BAAa,CAAC,KAAK,aAAa,aAC9B,0BAAa,CAAC,KACd,EAAE,SAAS,4BAAgB,gBAC9B;AAED,YAAI,CAAC,KAAK;AAAO,eAAK,QAAQ,CAAA;AAC9B,YAAI,QAAQ,IAAI,aAAa,QAAQ;AACpC,iBAAO,MACN,qDAAqD,EAAE,OAAO,IAC9D,OAAO;AAGR;QACD;AAEA,cAAM;MACP;IACD;EACD;EAEO,WAAQ;AACd,WAAO,KAAK;EACb;EAEO,MAAM,0BAAuB;AACnC,SAAK,gBAAgB,UAAM,qDAC1B,MAAM,KAAK,MAAK,GAChB,MAAM,KAAK,UAAS,CAAE;EAExB;EAEO,mBAAgB;AACtB,WAAO,KAAK;EACb;;;;;;;;;EAUO,MAAM,+BACZ,gBACA,aACA,WACA,iBAAwB;AAGxB,QAAI,CAAC,KAAK;AAAO,YAAM,KAAK,gBAAe;AAE3C,UAAM,KAAK,MAAM,KAAK,MAAK;AAG3B,UAAM,eAAe,KAAK,MAAO,WAChC,sCACC,gBACA,aACA,WACA,eAAe,CACf;AAGF,UAAM,aAAa,aAAa,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,KACrD,aAAa,CAAC;AAElB,QAAI,YAAY;AACf,YAAM,iBAAa,qCAClB,KAAK,sBAAsB,KAAK,qBAAqB,sBAAS,EAC7D;AACF,YAAM,WAAW,aAAAA,QAAK,WAAW,WAAW,QAAQ,IACjD,WAAW,WACX,aAAAA,QAAK,KAAK,YAAY,WAAW,QAAQ;AAC5C,UAAI,CAAE,UAAM,0BAAW,IAAI,QAAQ;AAAI;AAIvC,YAAM,aAAa,CAAC,aAAAA,QAClB,SAAS,YAAY,QAAQ,EAC7B,WAAW,IAAI;AAIjB,YAAM,UAAU,WAAW,WAAW;AACtC,YAAM,eAAe,YAAY,aAC9B,SACA,CAAC,UAAU;AAEd,UAAI;AACH,eAAO,MAAM,4CAAwB,KACpC,IACA,UACA,YACA,EAAE,SAAS,aAAY,CAAE;MAE3B,SAAS,GAAG;AACX,YAAI,QAAQ,IAAI,aAAa,QAAQ;AACpC,WAAC,MAAM,KAAK,UAAS,GAAI,MACxB,+BAA+B,QAAQ,SACtC,+BACC,GACA,IAAI,CAEN,IACA,OAAO;QAET;MACD;IACD;EACD;;;;;;;;;EAUO,MAAM,aACZ,gBACA,aACA,WACA,iBAAwB;AAExB,UAAM,MAAM,MAAM,KAAK,+BACtB,gBACA,aACA,WACA,eAAe;AAEhB,WAAO,KAAK,SAAS;MACpB;MACA;MACA;MACA;KACA;EACF;;",
4
+ "sourcesContent": ["import { configDir } from \"#config_dir\";\nimport {\n\ttype LogContainer,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tisZWaveError,\n} from \"@zwave-js/core\";\nimport { getErrorMessage, pathExists } from \"@zwave-js/shared\";\nimport type { FileSystem } from \"@zwave-js/shared/bindings\";\nimport path from \"pathe\";\nimport { ConfigLogger } from \"./Logger.js\";\nimport {\n\ttype ManufacturersMap,\n\tloadManufacturersInternal,\n\tsaveManufacturersInternal,\n} from \"./Manufacturers.js\";\nimport { PACKAGE_VERSION } from \"./_version.js\";\nimport {\n\tConditionalDeviceConfig,\n\ttype DeviceConfig,\n\ttype DeviceConfigIndex,\n\ttype FulltextDeviceConfigIndex,\n\tgeneratePriorityDeviceIndex,\n\tgetDevicesPaths,\n\tloadDeviceIndexInternal,\n\tloadFulltextDeviceIndexInternal,\n} from \"./devices/DeviceConfig.js\";\nimport {\n\ttype SyncExternalConfigDirResult,\n\tgetDeviceEntryPredicate,\n\tgetExternalConfigDirEnvVariable,\n\tsyncExternalConfigDir,\n} from \"./utils.js\";\n\nexport interface ConfigManagerOptions {\n\tbindings?: FileSystem;\n\tlogContainer?: LogContainer;\n\tdeviceConfigPriorityDir?: string;\n\tdeviceConfigExternalDir?: string;\n}\n\nexport class ConfigManager {\n\tpublic constructor(options: ConfigManagerOptions = {}) {\n\t\tthis._fs = options.bindings;\n\t\tthis._logContainer = options.logContainer;\n\n\t\tthis.deviceConfigPriorityDir = options.deviceConfigPriorityDir;\n\t\tthis.deviceConfigExternalDir = options.deviceConfigExternalDir;\n\n\t\tthis._configVersion = PACKAGE_VERSION;\n\t}\n\n\tprivate _fs: FileSystem | undefined;\n\tprivate async getFS(): Promise<FileSystem> {\n\t\tthis._fs ??= (await import(\"#default_bindings/fs\")).fs;\n\t\treturn this._fs;\n\t}\n\n\tprivate _configVersion: string;\n\tpublic get configVersion(): string {\n\t\treturn this._configVersion;\n\t}\n\n\tprivate _logContainer: LogContainer | undefined;\n\tprivate _logger: ConfigLogger | undefined;\n\tprivate async getLogger(): Promise<ConfigLogger> {\n\t\tif (!this._logContainer) {\n\t\t\tthis._logContainer =\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\t\t\t\t// @ts-ignore - For some reason, VSCode does not like this import, although tsc is fine with it\n\t\t\t\t(await import(\"#default_bindings/log\")).log({\n\t\t\t\t\tenabled: false,\n\t\t\t\t});\n\t\t}\n\t\tif (!this._logger) {\n\t\t\tthis._logger = new ConfigLogger(this._logContainer);\n\t\t}\n\t\treturn this._logger;\n\t}\n\n\tprivate _manufacturers: ManufacturersMap | undefined;\n\tpublic get manufacturers(): ManufacturersMap {\n\t\tif (!this._manufacturers) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The config has not been loaded yet!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotReady,\n\t\t\t);\n\t\t}\n\t\treturn this._manufacturers;\n\t}\n\n\tprivate deviceConfigPriorityDir: string | undefined;\n\tprivate deviceConfigExternalDir: string | undefined;\n\tpublic get externalConfigDir(): string | undefined {\n\t\treturn this.deviceConfigExternalDir\n\t\t\t?? getExternalConfigDirEnvVariable();\n\t}\n\n\tprivate index: DeviceConfigIndex | undefined;\n\tprivate fulltextIndex: FulltextDeviceConfigIndex | undefined;\n\n\tprivate _useExternalConfig: boolean = false;\n\tpublic get useExternalConfig(): boolean {\n\t\treturn this._useExternalConfig;\n\t}\n\n\tpublic async loadAll(): Promise<void> {\n\t\tconst logger = await this.getLogger();\n\t\t// If the environment option for an external config dir is set\n\t\t// try to sync it and then use it\n\t\tlet syncResult: SyncExternalConfigDirResult | undefined;\n\t\tconst externalConfigDir = this.externalConfigDir;\n\t\tif (externalConfigDir) {\n\t\t\tsyncResult = await syncExternalConfigDir(\n\t\t\t\tawait this.getFS(),\n\t\t\t\texternalConfigDir,\n\t\t\t\tlogger,\n\t\t\t);\n\t\t}\n\n\t\tif (syncResult?.success) {\n\t\t\tthis._useExternalConfig = true;\n\t\t\tlogger.print(\n\t\t\t\t`Using external configuration dir ${externalConfigDir}`,\n\t\t\t);\n\t\t\tthis._configVersion = syncResult.version;\n\t\t} else {\n\t\t\tthis._useExternalConfig = false;\n\t\t\tthis._configVersion = PACKAGE_VERSION;\n\t\t}\n\t\tlogger.print(`version ${this._configVersion}`, \"info\");\n\n\t\tawait this.loadManufacturers();\n\t\tawait this.loadDeviceIndex();\n\t}\n\n\tpublic async loadManufacturers(): Promise<void> {\n\t\ttry {\n\t\t\tthis._manufacturers = await loadManufacturersInternal(\n\t\t\t\tawait this.getFS(),\n\t\t\t\tthis._useExternalConfig && this.externalConfigDir || undefined,\n\t\t\t);\n\t\t} catch (e) {\n\t\t\t// If the config file is missing or invalid, don't try to find it again\n\t\t\tif (isZWaveError(e) && e.code === ZWaveErrorCodes.Config_Invalid) {\n\t\t\t\tif (process.env.NODE_ENV !== \"test\") {\n\t\t\t\t\t(await this.getLogger()).print(\n\t\t\t\t\t\t`Could not load manufacturers config: ${e.message}`,\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (!this._manufacturers) this._manufacturers = new Map();\n\t\t\t} else {\n\t\t\t\t// This is an unexpected error\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async saveManufacturers(): Promise<void> {\n\t\tif (!this._manufacturers) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The config has not been loaded yet!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotReady,\n\t\t\t);\n\t\t}\n\n\t\tawait saveManufacturersInternal(\n\t\t\tawait this.getFS(),\n\t\t\tthis._manufacturers,\n\t\t);\n\t}\n\n\t/**\n\t * Looks up the name of the manufacturer with the given ID in the configuration DB\n\t * @param manufacturerId The manufacturer id to look up\n\t */\n\tpublic lookupManufacturer(manufacturerId: number): string | undefined {\n\t\tif (!this._manufacturers) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The config has not been loaded yet!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotReady,\n\t\t\t);\n\t\t}\n\n\t\treturn this._manufacturers.get(manufacturerId);\n\t}\n\n\t/**\n\t * Add new manufacturers to configuration DB\n\t * @param manufacturerId The manufacturer id to look up\n\t * @param manufacturerName The manufacturer name\n\t */\n\tpublic setManufacturer(\n\t\tmanufacturerId: number,\n\t\tmanufacturerName: string,\n\t): void {\n\t\tif (!this._manufacturers) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The config has not been loaded yet!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotReady,\n\t\t\t);\n\t\t}\n\n\t\tthis._manufacturers.set(manufacturerId, manufacturerName);\n\t}\n\n\tpublic async loadDeviceIndex(): Promise<void> {\n\t\tconst fs = await this.getFS();\n\t\tconst logger = await this.getLogger();\n\t\ttry {\n\t\t\t// The index of config files included in this package\n\t\t\tconst embeddedIndex = await loadDeviceIndexInternal(\n\t\t\t\tfs,\n\t\t\t\tlogger,\n\t\t\t\tthis._useExternalConfig && this.externalConfigDir || undefined,\n\t\t\t);\n\t\t\t// A dynamic index of the user-defined priority device config files\n\t\t\tconst priorityIndex: DeviceConfigIndex = [];\n\t\t\tif (this.deviceConfigPriorityDir) {\n\t\t\t\tif (await pathExists(fs, this.deviceConfigPriorityDir)) {\n\t\t\t\t\tpriorityIndex.push(\n\t\t\t\t\t\t...(await generatePriorityDeviceIndex(\n\t\t\t\t\t\t\tfs,\n\t\t\t\t\t\t\tthis.deviceConfigPriorityDir,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t)),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.print(\n\t\t\t\t\t\t`Priority device configuration directory ${this.deviceConfigPriorityDir} not found`,\n\t\t\t\t\t\t\"warn\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Put the priority index in front, so the files get resolved first\n\t\t\tthis.index = [...priorityIndex, ...embeddedIndex];\n\t\t} catch (e) {\n\t\t\t// If the index file is missing or invalid, don't try to find it again\n\t\t\tif (\n\t\t\t\t(!isZWaveError(e) && e instanceof Error)\n\t\t\t\t|| (isZWaveError(e)\n\t\t\t\t\t&& e.code === ZWaveErrorCodes.Config_Invalid)\n\t\t\t) {\n\t\t\t\t// Fall back to no index on production systems\n\t\t\t\tif (!this.index) this.index = [];\n\t\t\t\tif (process.env.NODE_ENV !== \"test\") {\n\t\t\t\t\tlogger.print(\n\t\t\t\t\t\t`Could not load or regenerate device config index: ${e.message}`,\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t\t// and don't throw\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// But fail hard in tests\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getIndex(): DeviceConfigIndex | undefined {\n\t\treturn this.index;\n\t}\n\n\tpublic async loadFulltextDeviceIndex(): Promise<void> {\n\t\tthis.fulltextIndex = await loadFulltextDeviceIndexInternal(\n\t\t\tawait this.getFS(),\n\t\t\tawait this.getLogger(),\n\t\t);\n\t}\n\n\tpublic getFulltextIndex(): FulltextDeviceConfigIndex | undefined {\n\t\treturn this.fulltextIndex;\n\t}\n\n\t/**\n\t * Looks up the definition of a given device in the configuration DB, but does not evaluate conditional settings.\n\t * @param manufacturerId The manufacturer id of the device\n\t * @param productType The product type of the device\n\t * @param productId The product id of the device\n\t * @param firmwareVersion If known, configuration for a specific firmware version can be loaded.\n\t * If this is `undefined` or not given, the first matching file with a defined firmware range will be returned.\n\t */\n\tpublic async lookupDevicePreserveConditions(\n\t\tmanufacturerId: number,\n\t\tproductType: number,\n\t\tproductId: number,\n\t\tfirmwareVersion?: string,\n\t): Promise<ConditionalDeviceConfig | undefined> {\n\t\t// Load/regenerate the index if necessary\n\t\tif (!this.index) await this.loadDeviceIndex();\n\n\t\tconst fs = await this.getFS();\n\n\t\t// Look up the device in the index\n\t\tconst indexEntries = this.index!.filter(\n\t\t\tgetDeviceEntryPredicate(\n\t\t\t\tmanufacturerId,\n\t\t\t\tproductType,\n\t\t\t\tproductId,\n\t\t\t\tfirmwareVersion,\n\t\t\t),\n\t\t);\n\t\t// If there are multiple with overlapping firmware ranges, return the preferred one first\n\t\tconst indexEntry = indexEntries.find((e) => !!e.preferred)\n\t\t\t?? indexEntries[0];\n\n\t\tif (indexEntry) {\n\t\t\tconst devicesDir = getDevicesPaths(\n\t\t\t\tthis._useExternalConfig && this.externalConfigDir || configDir,\n\t\t\t).devicesDir;\n\t\t\tconst filePath = path.isAbsolute(indexEntry.filename)\n\t\t\t\t? indexEntry.filename\n\t\t\t\t: path.join(devicesDir, indexEntry.filename);\n\t\t\tif (!(await pathExists(fs, filePath))) return;\n\n\t\t\t// A config file is treated as am embedded one when it is located under the devices root dir\n\t\t\t// or the external config dir\n\t\t\tconst isEmbedded = !path\n\t\t\t\t.relative(devicesDir, filePath)\n\t\t\t\t.startsWith(\"..\");\n\n\t\t\t// When a device file is located in a different root directory than the embedded config files,\n\t\t\t// we use the embedded dir a fallback\n\t\t\tconst rootDir = indexEntry.rootDir ?? devicesDir;\n\t\t\tconst fallbackDirs = rootDir === devicesDir\n\t\t\t\t? undefined\n\t\t\t\t: [devicesDir];\n\n\t\t\ttry {\n\t\t\t\treturn await ConditionalDeviceConfig.from(\n\t\t\t\t\tfs,\n\t\t\t\t\tfilePath,\n\t\t\t\t\tisEmbedded,\n\t\t\t\t\t{ rootDir, fallbackDirs },\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tif (process.env.NODE_ENV !== \"test\") {\n\t\t\t\t\t(await this.getLogger()).print(\n\t\t\t\t\t\t`Error loading device config ${filePath}: ${\n\t\t\t\t\t\t\tgetErrorMessage(\n\t\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Looks up the definition of a given device in the configuration DB\n\t * @param manufacturerId The manufacturer id of the device\n\t * @param productType The product type of the device\n\t * @param productId The product id of the device\n\t * @param firmwareVersion If known, configuration for a specific firmware version can be loaded.\n\t * If this is `undefined` or not given, the first matching file with a defined firmware range will be returned.\n\t */\n\tpublic async lookupDevice(\n\t\tmanufacturerId: number,\n\t\tproductType: number,\n\t\tproductId: number,\n\t\tfirmwareVersion?: string,\n\t): Promise<DeviceConfig | undefined> {\n\t\tconst ret = await this.lookupDevicePreserveConditions(\n\t\t\tmanufacturerId,\n\t\t\tproductType,\n\t\t\tproductId,\n\t\t\tfirmwareVersion,\n\t\t);\n\t\treturn ret?.evaluate({\n\t\t\tmanufacturerId,\n\t\t\tproductType,\n\t\t\tproductId,\n\t\t\tfirmwareVersion,\n\t\t});\n\t}\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["path"]
7
7
  }
@@ -33,15 +33,15 @@ __export(Manufacturers_exports, {
33
33
  saveManufacturersInternal: () => saveManufacturersInternal
34
34
  });
35
35
  module.exports = __toCommonJS(Manufacturers_exports);
36
+ var import_config_dir = require("#config_dir");
36
37
  var import_core = require("@zwave-js/core");
37
38
  var import_shared = require("@zwave-js/shared");
38
39
  var import_typeguards = require("alcalzone-shared/typeguards");
39
40
  var import_json5 = __toESM(require("json5"), 1);
40
41
  var import_pathe = __toESM(require("pathe"), 1);
41
- var import_utils = require("./utils.js");
42
42
  var import_utils_safe = require("./utils_safe.js");
43
43
  async function loadManufacturersInternal(fs, externalConfigDir) {
44
- const configPath = import_pathe.default.join(externalConfigDir || import_utils.configDir, "manufacturers.json");
44
+ const configPath = import_pathe.default.join(externalConfigDir || import_config_dir.configDir, "manufacturers.json");
45
45
  if (!await (0, import_shared.pathExists)(fs, configPath)) {
46
46
  throw new import_core.ZWaveError("The manufacturer config file does not exist!", import_core.ZWaveErrorCodes.Config_Invalid);
47
47
  }
@@ -78,7 +78,7 @@ async function saveManufacturersInternal(fs, manufacturers) {
78
78
  for (const [id, name] of orderedMap) {
79
79
  data[(0, import_shared.formatId)(id)] = name;
80
80
  }
81
- const configPath = import_pathe.default.join(import_utils.configDir, "manufacturers.json");
81
+ const configPath = import_pathe.default.join(import_config_dir.configDir, "manufacturers.json");
82
82
  await (0, import_shared.writeTextFile)(fs, configPath, (0, import_shared.stringify)(data, " ") + "\n");
83
83
  }
84
84
  __name(saveManufacturersInternal, "saveManufacturersInternal");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Manufacturers.ts"],
4
- "sourcesContent": ["import { ZWaveError, ZWaveErrorCodes, isZWaveError } from \"@zwave-js/core\";\nimport {\n\tformatId,\n\tpathExists,\n\treadTextFile,\n\tstringify,\n\twriteTextFile,\n} from \"@zwave-js/shared\";\nimport type {\n\tReadFile,\n\tReadFileSystemInfo,\n\tWriteFile,\n} from \"@zwave-js/shared/bindings\";\nimport { isObject } from \"alcalzone-shared/typeguards\";\nimport JSON5 from \"json5\";\nimport path from \"pathe\";\nimport { configDir } from \"./utils.js\";\nimport { hexKeyRegex4Digits, throwInvalidConfig } from \"./utils_safe.js\";\n\nexport type ManufacturersMap = Map<number, string>;\n\n/** @internal */\nexport async function loadManufacturersInternal(\n\tfs: ReadFileSystemInfo & ReadFile,\n\texternalConfigDir?: string,\n): Promise<ManufacturersMap> {\n\tconst configPath = path.join(\n\t\texternalConfigDir || configDir,\n\t\t\"manufacturers.json\",\n\t);\n\n\tif (!(await pathExists(fs, configPath))) {\n\t\tthrow new ZWaveError(\n\t\t\t\"The manufacturer config file does not exist!\",\n\t\t\tZWaveErrorCodes.Config_Invalid,\n\t\t);\n\t}\n\ttry {\n\t\tconst fileContents = await readTextFile(fs, configPath, \"utf8\");\n\t\tconst definition = JSON5.parse(fileContents);\n\t\tif (!isObject(definition)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"manufacturers\",\n\t\t\t\t`the database is not an object!`,\n\t\t\t);\n\t\t}\n\n\t\tconst manufacturers = new Map();\n\t\tfor (const [id, name] of Object.entries(definition)) {\n\t\t\tif (!hexKeyRegex4Digits.test(id)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"manufacturers\",\n\t\t\t\t\t`found invalid key ${id} at the root level. Manufacturer IDs must be hexadecimal lowercase.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof name !== \"string\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"manufacturers\",\n\t\t\t\t\t`Key ${id} has a non-string manufacturer name`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst idNum = parseInt(id.slice(2), 16);\n\t\t\tmanufacturers.set(idNum, name);\n\t\t}\n\n\t\treturn manufacturers;\n\t} catch (e) {\n\t\tif (isZWaveError(e) || ((e as any).code === \"ENOENT\")) {\n\t\t\tthrow e;\n\t\t} else {\n\t\t\tthrowInvalidConfig(\"manufacturers\");\n\t\t}\n\t}\n}\n\n/**\n * Write current manufacturers map to json\n */\nexport async function saveManufacturersInternal(\n\tfs: WriteFile,\n\tmanufacturers: ManufacturersMap,\n): Promise<void> {\n\tconst data: Record<string, string> = {};\n\n\tconst orderedMap = new Map(\n\t\t[...manufacturers].sort((a, b) => (a[0] > b[0] ? 1 : -1)),\n\t);\n\n\tfor (const [id, name] of orderedMap) {\n\t\tdata[formatId(id)] = name;\n\t}\n\n\tconst configPath = path.join(configDir, \"manufacturers.json\");\n\tawait writeTextFile(fs, configPath, stringify(data, \"\\t\") + \"\\n\");\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,kBAA0D;AAC1D,oBAMO;AAMP,wBAAyB;AACzB,mBAAkB;AAClB,mBAAiB;AACjB,mBAA0B;AAC1B,wBAAuD;AAKvD,eAAsB,0BACrB,IACA,mBAA0B;AAE1B,QAAM,aAAa,aAAAA,QAAK,KACvB,qBAAqB,wBACrB,oBAAoB;AAGrB,MAAI,CAAE,UAAM,0BAAW,IAAI,UAAU,GAAI;AACxC,UAAM,IAAI,uBACT,gDACA,4BAAgB,cAAc;EAEhC;AACA,MAAI;AACH,UAAM,eAAe,UAAM,4BAAa,IAAI,YAAY,MAAM;AAC9D,UAAM,aAAa,aAAAC,QAAM,MAAM,YAAY;AAC3C,QAAI,KAAC,4BAAS,UAAU,GAAG;AAC1B,gDACC,iBACA,gCAAgC;IAElC;AAEA,UAAM,gBAAgB,oBAAI,IAAG;AAC7B,eAAW,CAAC,IAAI,IAAI,KAAK,OAAO,QAAQ,UAAU,GAAG;AACpD,UAAI,CAAC,qCAAmB,KAAK,EAAE,GAAG;AACjC,kDACC,iBACA,qBAAqB,EAAE,qEAAqE;MAE9F;AACA,UAAI,OAAO,SAAS,UAAU;AAC7B,kDACC,iBACA,OAAO,EAAE,qCAAqC;MAEhD;AACA,YAAM,QAAQ,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE;AACtC,oBAAc,IAAI,OAAO,IAAI;IAC9B;AAEA,WAAO;EACR,SAAS,GAAG;AACX,YAAI,0BAAa,CAAC,KAAO,EAAU,SAAS,UAAW;AACtD,YAAM;IACP,OAAO;AACN,gDAAmB,eAAe;IACnC;EACD;AACD;AAnDsB;AAwDtB,eAAsB,0BACrB,IACA,eAA+B;AAE/B,QAAM,OAA+B,CAAA;AAErC,QAAM,aAAa,IAAI,IACtB,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,MAAO,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAG,CAAC;AAG1D,aAAW,CAAC,IAAI,IAAI,KAAK,YAAY;AACpC,aAAK,wBAAS,EAAE,CAAC,IAAI;EACtB;AAEA,QAAM,aAAa,aAAAD,QAAK,KAAK,wBAAW,oBAAoB;AAC5D,YAAM,6BAAc,IAAI,gBAAY,yBAAU,MAAM,GAAI,IAAI,IAAI;AACjE;AAhBsB;",
4
+ "sourcesContent": ["import { configDir } from \"#config_dir\";\nimport { ZWaveError, ZWaveErrorCodes, isZWaveError } from \"@zwave-js/core\";\nimport {\n\tformatId,\n\tpathExists,\n\treadTextFile,\n\tstringify,\n\twriteTextFile,\n} from \"@zwave-js/shared\";\nimport type {\n\tReadFile,\n\tReadFileSystemInfo,\n\tWriteFile,\n} from \"@zwave-js/shared/bindings\";\nimport { isObject } from \"alcalzone-shared/typeguards\";\nimport JSON5 from \"json5\";\nimport path from \"pathe\";\nimport { hexKeyRegex4Digits, throwInvalidConfig } from \"./utils_safe.js\";\n\nexport type ManufacturersMap = Map<number, string>;\n\n/** @internal */\nexport async function loadManufacturersInternal(\n\tfs: ReadFileSystemInfo & ReadFile,\n\texternalConfigDir?: string,\n): Promise<ManufacturersMap> {\n\tconst configPath = path.join(\n\t\texternalConfigDir || configDir,\n\t\t\"manufacturers.json\",\n\t);\n\n\tif (!(await pathExists(fs, configPath))) {\n\t\tthrow new ZWaveError(\n\t\t\t\"The manufacturer config file does not exist!\",\n\t\t\tZWaveErrorCodes.Config_Invalid,\n\t\t);\n\t}\n\ttry {\n\t\tconst fileContents = await readTextFile(fs, configPath, \"utf8\");\n\t\tconst definition = JSON5.parse(fileContents);\n\t\tif (!isObject(definition)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t\"manufacturers\",\n\t\t\t\t`the database is not an object!`,\n\t\t\t);\n\t\t}\n\n\t\tconst manufacturers = new Map();\n\t\tfor (const [id, name] of Object.entries(definition)) {\n\t\t\tif (!hexKeyRegex4Digits.test(id)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"manufacturers\",\n\t\t\t\t\t`found invalid key ${id} at the root level. Manufacturer IDs must be hexadecimal lowercase.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof name !== \"string\") {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\"manufacturers\",\n\t\t\t\t\t`Key ${id} has a non-string manufacturer name`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst idNum = parseInt(id.slice(2), 16);\n\t\t\tmanufacturers.set(idNum, name);\n\t\t}\n\n\t\treturn manufacturers;\n\t} catch (e) {\n\t\tif (isZWaveError(e) || ((e as any).code === \"ENOENT\")) {\n\t\t\tthrow e;\n\t\t} else {\n\t\t\tthrowInvalidConfig(\"manufacturers\");\n\t\t}\n\t}\n}\n\n/**\n * Write current manufacturers map to json\n */\nexport async function saveManufacturersInternal(\n\tfs: WriteFile,\n\tmanufacturers: ManufacturersMap,\n): Promise<void> {\n\tconst data: Record<string, string> = {};\n\n\tconst orderedMap = new Map(\n\t\t[...manufacturers].sort((a, b) => (a[0] > b[0] ? 1 : -1)),\n\t);\n\n\tfor (const [id, name] of orderedMap) {\n\t\tdata[formatId(id)] = name;\n\t}\n\n\tconst configPath = path.join(configDir, \"manufacturers.json\");\n\tawait writeTextFile(fs, configPath, stringify(data, \"\\t\") + \"\\n\");\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,wBAA0B;AAC1B,kBAA0D;AAC1D,oBAMO;AAMP,wBAAyB;AACzB,mBAAkB;AAClB,mBAAiB;AACjB,wBAAuD;AAKvD,eAAsB,0BACrB,IACA,mBAA0B;AAE1B,QAAM,aAAa,aAAAA,QAAK,KACvB,qBAAqB,6BACrB,oBAAoB;AAGrB,MAAI,CAAE,UAAM,0BAAW,IAAI,UAAU,GAAI;AACxC,UAAM,IAAI,uBACT,gDACA,4BAAgB,cAAc;EAEhC;AACA,MAAI;AACH,UAAM,eAAe,UAAM,4BAAa,IAAI,YAAY,MAAM;AAC9D,UAAM,aAAa,aAAAC,QAAM,MAAM,YAAY;AAC3C,QAAI,KAAC,4BAAS,UAAU,GAAG;AAC1B,gDACC,iBACA,gCAAgC;IAElC;AAEA,UAAM,gBAAgB,oBAAI,IAAG;AAC7B,eAAW,CAAC,IAAI,IAAI,KAAK,OAAO,QAAQ,UAAU,GAAG;AACpD,UAAI,CAAC,qCAAmB,KAAK,EAAE,GAAG;AACjC,kDACC,iBACA,qBAAqB,EAAE,qEAAqE;MAE9F;AACA,UAAI,OAAO,SAAS,UAAU;AAC7B,kDACC,iBACA,OAAO,EAAE,qCAAqC;MAEhD;AACA,YAAM,QAAQ,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE;AACtC,oBAAc,IAAI,OAAO,IAAI;IAC9B;AAEA,WAAO;EACR,SAAS,GAAG;AACX,YAAI,0BAAa,CAAC,KAAO,EAAU,SAAS,UAAW;AACtD,YAAM;IACP,OAAO;AACN,gDAAmB,eAAe;IACnC;EACD;AACD;AAnDsB;AAwDtB,eAAsB,0BACrB,IACA,eAA+B;AAE/B,QAAM,OAA+B,CAAA;AAErC,QAAM,aAAa,IAAI,IACtB,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,MAAO,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAG,CAAC;AAG1D,aAAW,CAAC,IAAI,IAAI,KAAK,YAAY;AACpC,aAAK,wBAAS,EAAE,CAAC,IAAI;EACtB;AAEA,QAAM,aAAa,aAAAD,QAAK,KAAK,6BAAW,oBAAoB;AAC5D,YAAM,6BAAc,IAAI,gBAAY,yBAAU,MAAM,GAAI,IAAI,IAAI;AACjE;AAhBsB;",
6
6
  "names": ["path", "JSON5"]
7
7
  }
@@ -1,2 +1,2 @@
1
- export declare const PACKAGE_VERSION = "15.2.0";
1
+ export declare const PACKAGE_VERSION = "15.3.0";
2
2
  //# sourceMappingURL=_version.d.ts.map
@@ -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.2.0";
24
+ const PACKAGE_VERSION = "15.3.0";
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.2.0\";\n"],
4
+ "sourcesContent": ["// This file is auto-generated by the codegen maintenance script\nexport const PACKAGE_VERSION = \"15.3.0\";\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;AACO,MAAM,kBAAkB;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,3 @@
1
+ /** The absolute path of the embedded configuration directory */
2
+ export declare const configDir: string;
3
+ //# sourceMappingURL=configDir.browser.d.ts.map
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var configDir_browser_exports = {};
20
+ __export(configDir_browser_exports, {
21
+ configDir: () => configDir
22
+ });
23
+ module.exports = __toCommonJS(configDir_browser_exports);
24
+ const import_meta = {};
25
+ const configDir = import_meta.resolve("/config");
26
+ // Annotate the CommonJS export names for ESM import in node:
27
+ 0 && (module.exports = {
28
+ configDir
29
+ });
30
+ //# sourceMappingURL=configDir.browser.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/configDir.browser.ts"],
4
+ "sourcesContent": ["/** The absolute path of the embedded configuration directory */\nexport const configDir = import.meta.resolve(\"/config\");\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA;AACO,MAAM,YAAY,YAAY,QAAQ,SAAS;",
6
+ "names": []
7
+ }
@@ -0,0 +1,3 @@
1
+ /** The absolute path of the embedded configuration directory */
2
+ export declare const configDir: string;
3
+ //# sourceMappingURL=configDir.node.d.ts.map
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var configDir_node_exports = {};
30
+ __export(configDir_node_exports, {
31
+ configDir: () => configDir
32
+ });
33
+ module.exports = __toCommonJS(configDir_node_exports);
34
+ var __import_meta_url = typeof document === "undefined" ? new (require("url".replace("", ""))).URL("file:" + __filename).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
35
+ var import_node_url = require("node:url");
36
+ var import_pathe = __toESM(require("pathe"), 1);
37
+ const import_meta = {};
38
+ const configDir = __import_meta_url.startsWith("file:") ? import_pathe.default.join(import_pathe.default.dirname((0, import_node_url.fileURLToPath)(__import_meta_url)), /src\/[^/\\]+\.ts$/.test(__import_meta_url) ? ".." : "../..", "config") : import_meta.resolve("/config");
39
+ // Annotate the CommonJS export names for ESM import in node:
40
+ 0 && (module.exports = {
41
+ configDir
42
+ });
43
+ //# sourceMappingURL=configDir.node.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/configDir.node.ts", "../../../../node_modules/.store/@alcalzone-esm2cjs-npm-1.4.1-18ec443a54/package/shims/import.meta.url/shim.js"],
4
+ "sourcesContent": ["import { fileURLToPath } from \"node:url\";\nimport path from \"pathe\";\n\n/** The absolute path of the embedded configuration directory */\nexport const configDir = import.meta.url.startsWith(\"file:\")\n\t? path.join(\n\t\tpath.dirname(fileURLToPath(import.meta.url)),\n\t\t/src\\/[^/\\\\]+\\.ts$/.test(import.meta.url)\n\t\t\t? \"..\"\n\t\t\t: \"../..\",\n\t\t\"config\",\n\t)\n\t: import.meta.resolve(\"/config\");\n", "export const __import_meta_url =\n typeof document === 'undefined' ? new (require('url'.replace('', '')).URL)('file:' + __filename).href :\n (document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href)\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;ACAO,IAAM,oBACX,OAAO,aAAa,cAAc,KAAK,QAAQ,MAAM,QAAQ,IAAI,EAAE,CAAC,GAAE,IAAK,UAAU,UAAU,EAAE,OAC9F,SAAS,iBAAiB,SAAS,cAAc,OAAO,IAAI,IAAI,WAAW,SAAS,OAAO,EAAE;ADFlG,sBAA8B;AAC9B,mBAAiB;AADjB;AAIO,MAAM,YAAY,kBAAgB,WAAW,OAAO,IACxD,aAAAA,QAAK,KACN,aAAAA,QAAK,YAAQ,+BAAc,iBAAe,CAAC,GAC3C,oBAAoB,KAAK,iBAAe,IACrC,OACA,SACH,QAAQ,IAEP,YAAY,QAAQ,SAAS;",
6
+ "names": ["path"]
7
+ }
@@ -38,6 +38,7 @@ __export(DeviceConfig_exports, {
38
38
  loadFulltextDeviceIndexInternal: () => loadFulltextDeviceIndexInternal
39
39
  });
40
40
  module.exports = __toCommonJS(DeviceConfig_exports);
41
+ var import_config_dir = require("#config_dir");
41
42
  var import_core = require("@zwave-js/core");
42
43
  var import_shared = require("@zwave-js/shared");
43
44
  var import_typeguards = require("alcalzone-shared/typeguards");
@@ -45,7 +46,6 @@ var import_json5 = __toESM(require("json5"), 1);
45
46
  var import_pathe = __toESM(require("pathe"), 1);
46
47
  var import_gt = __toESM(require("semver/functions/gt.js"), 1);
47
48
  var import_JsonTemplate = require("../JsonTemplate.js");
48
- var import_utils = require("../utils.js");
49
49
  var import_utils_safe = require("../utils_safe.js");
50
50
  var import_AssociationConfig = require("./AssociationConfig.js");
51
51
  var import_CompatConfig = require("./CompatConfig.js");
@@ -54,7 +54,7 @@ var import_ConditionalPrimitive = require("./ConditionalPrimitive.js");
54
54
  var import_DeviceMetadata = require("./DeviceMetadata.js");
55
55
  var import_EndpointConfig = require("./EndpointConfig.js");
56
56
  var import_ParamInformation = require("./ParamInformation.js");
57
- const embeddedDevicesDir = import_pathe.default.join(import_utils.configDir, "devices");
57
+ const embeddedDevicesDir = import_pathe.default.join(import_config_dir.configDir, "devices");
58
58
  const fulltextIndexPath = import_pathe.default.join(embeddedDevicesDir, "fulltext_index.json");
59
59
  function getDevicesPaths(configDir2) {
60
60
  const devicesDir = import_pathe.default.join(configDir2, "devices");
@@ -171,7 +171,7 @@ async function generatePriorityDeviceIndex(fs, deviceConfigPriorityDir, logger)
171
171
  }
172
172
  __name(generatePriorityDeviceIndex, "generatePriorityDeviceIndex");
173
173
  async function loadDeviceIndexInternal(fs, logger, externalConfigDir) {
174
- const { devicesDir, indexPath } = getDevicesPaths(externalConfigDir || import_utils.configDir);
174
+ const { devicesDir, indexPath } = getDevicesPaths(externalConfigDir || import_config_dir.configDir);
175
175
  return loadDeviceIndexShared(fs, devicesDir, indexPath, (config) => config.devices.map((dev) => ({
176
176
  manufacturerId: (0, import_shared.formatId)(config.manufacturerId.toString(16)),
177
177
  manufacturer: config.manufacturer,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/devices/DeviceConfig.ts"],
4
- "sourcesContent": ["import { ZWaveError, ZWaveErrorCodes, digest } from \"@zwave-js/core\";\nimport {\n\tBytes,\n\ttype JSONObject,\n\tenumFilesRecursive,\n\tformatId,\n\tgetenv,\n\tnum2hex,\n\tpadVersion,\n\tpathExists,\n\tpick,\n\treadTextFile,\n\tstringify,\n\twriteTextFile,\n} from \"@zwave-js/shared\";\nimport type {\n\tReadFile,\n\tReadFileSystemInfo,\n\tWriteFile,\n} from \"@zwave-js/shared/bindings\";\nimport { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport JSON5 from \"json5\";\nimport path from \"pathe\";\nimport semverGt from \"semver/functions/gt.js\";\nimport { clearTemplateCache, readJsonWithTemplate } from \"../JsonTemplate.js\";\nimport type { ConfigLogger } from \"../Logger.js\";\nimport { configDir } from \"../utils.js\";\nimport { hexKeyRegex4Digits, throwInvalidConfig } from \"../utils_safe.js\";\nimport {\n\ttype AssociationConfig,\n\tConditionalAssociationConfig,\n} from \"./AssociationConfig.js\";\nimport { type CompatConfig, ConditionalCompatConfig } from \"./CompatConfig.js\";\nimport { evaluateDeep, validateCondition } from \"./ConditionalItem.js\";\nimport {\n\ttype ConditionalPrimitive,\n\tparseConditionalPrimitive,\n} from \"./ConditionalPrimitive.js\";\nimport {\n\tConditionalDeviceMetadata,\n\ttype DeviceMetadata,\n} from \"./DeviceMetadata.js\";\nimport {\n\tConditionalEndpointConfig,\n\ttype EndpointConfig,\n} from \"./EndpointConfig.js\";\nimport {\n\ttype ConditionalParamInfoMap,\n\ttype ParamInfoMap,\n\ttype ParamInformation,\n\tparseConditionalParamInformationMap,\n} from \"./ParamInformation.js\";\nimport type { DeviceID, FirmwareVersionRange } from \"./shared.js\";\n\nexport interface DeviceConfigIndexEntry {\n\tmanufacturerId: string;\n\tproductType: string;\n\tproductId: string;\n\tfirmwareVersion: FirmwareVersionRange;\n\tpreferred?: true;\n\trootDir?: string;\n\tfilename: string;\n}\n\nexport interface FulltextDeviceConfigIndexEntry {\n\tmanufacturerId: string;\n\tmanufacturer: string;\n\tlabel: string;\n\tdescription: string;\n\tproductType: string;\n\tproductId: string;\n\tfirmwareVersion: FirmwareVersionRange;\n\tpreferred?: true;\n\trootDir?: string;\n\tfilename: string;\n}\n\nexport const embeddedDevicesDir = path.join(configDir, \"devices\");\nconst fulltextIndexPath = path.join(embeddedDevicesDir, \"fulltext_index.json\");\n\nexport function getDevicesPaths(configDir: string): {\n\tdevicesDir: string;\n\tindexPath: string;\n} {\n\tconst devicesDir = path.join(configDir, \"devices\");\n\tconst indexPath = path.join(devicesDir, \"index.json\");\n\treturn { devicesDir, indexPath };\n}\n\nexport type DeviceConfigIndex = DeviceConfigIndexEntry[];\nexport type FulltextDeviceConfigIndex = FulltextDeviceConfigIndexEntry[];\n\nasync function hasChangedDeviceFiles(\n\tfs: ReadFileSystemInfo,\n\tdevicesRoot: string,\n\tdir: string,\n\tlastChange: Date,\n): Promise<boolean> {\n\t// Check if there are any files BUT index.json that were changed\n\t// or directories that were modified\n\tconst filesAndDirs = await fs.readDir(dir);\n\tfor (const f of filesAndDirs) {\n\t\tconst fullPath = path.join(dir, f);\n\n\t\tconst stat = await fs.stat(fullPath);\n\t\tif (\n\t\t\t(dir !== devicesRoot || f !== \"index.json\")\n\t\t\t&& (stat.isFile() || stat.isDirectory())\n\t\t\t&& stat.mtime > lastChange\n\t\t) {\n\t\t\treturn true;\n\t\t} else if (stat.isDirectory()) {\n\t\t\t// we need to go deeper!\n\t\t\tif (\n\t\t\t\tawait hasChangedDeviceFiles(\n\t\t\t\t\tfs,\n\t\t\t\t\tdevicesRoot,\n\t\t\t\t\tfullPath,\n\t\t\t\t\tlastChange,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Read all device config files from a given directory and return them as index entries.\n * Does not update the index itself.\n */\nasync function generateIndex<T extends Record<string, unknown>>(\n\tfs: ReadFileSystemInfo & ReadFile,\n\tdevicesDir: string,\n\tisEmbedded: boolean,\n\textractIndexEntries: (config: DeviceConfig) => T[],\n\tlogger?: ConfigLogger,\n): Promise<(T & { filename: string; rootDir?: string })[]> {\n\tconst index: (T & { filename: string; rootDir?: string })[] = [];\n\n\tclearTemplateCache();\n\tconst configFiles = await enumFilesRecursive(\n\t\tfs,\n\t\tdevicesDir,\n\t\t(file) =>\n\t\t\tfile.endsWith(\".json\")\n\t\t\t&& !file.endsWith(\"index.json\")\n\t\t\t&& !file.includes(\"/templates/\")\n\t\t\t&& !file.includes(\"\\\\templates\\\\\"),\n\t);\n\n\t// Add the embedded devices dir as a fallback if necessary\n\tconst fallbackDirs = devicesDir !== embeddedDevicesDir\n\t\t? [embeddedDevicesDir]\n\t\t: undefined;\n\n\tfor (const file of configFiles) {\n\t\tconst relativePath = path\n\t\t\t.relative(devicesDir, file)\n\t\t\t.replaceAll(\"\\\\\", \"/\");\n\t\t// Try parsing the file\n\t\ttry {\n\t\t\tconst config = await DeviceConfig.from(\n\t\t\t\tfs,\n\t\t\t\tfile,\n\t\t\t\tisEmbedded,\n\t\t\t\t{\n\t\t\t\t\trootDir: devicesDir,\n\t\t\t\t\tfallbackDirs,\n\t\t\t\t\trelative: true,\n\t\t\t\t},\n\t\t\t);\n\t\t\t// Add the file to the index\n\t\t\tindex.push(\n\t\t\t\t...extractIndexEntries(config).map((entry) => {\n\t\t\t\t\tconst ret: T & { filename: string; rootDir?: string } = {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tfilename: relativePath,\n\t\t\t\t\t};\n\t\t\t\t\t// Only add the root dir to the index if necessary\n\t\t\t\t\tif (devicesDir !== embeddedDevicesDir) {\n\t\t\t\t\t\tret.rootDir = devicesDir;\n\t\t\t\t\t}\n\t\t\t\t\treturn ret;\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tconst message = `Error parsing config file ${relativePath}: ${\n\t\t\t\t(e as Error).message\n\t\t\t}`;\n\t\t\t// Crash hard during tests, just print an error when in production systems.\n\t\t\t// A user could have changed a config file\n\t\t\tif (process.env.NODE_ENV === \"test\" || !!getenv(\"CI\")) {\n\t\t\t\tthrow new ZWaveError(message, ZWaveErrorCodes.Config_Invalid);\n\t\t\t} else {\n\t\t\t\tlogger?.print(message, \"error\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn index;\n}\n\nasync function loadDeviceIndexShared<T extends Record<string, unknown>>(\n\tfs: ReadFileSystemInfo & ReadFile & WriteFile,\n\tdevicesDir: string,\n\tindexPath: string,\n\textractIndexEntries: (config: DeviceConfig) => T[],\n\tlogger?: ConfigLogger,\n): Promise<(T & { filename: string })[]> {\n\t// The index file needs to be regenerated if it does not exist\n\tlet needsUpdate = !(await pathExists(fs, indexPath));\n\tlet index: (T & { filename: string })[] | undefined;\n\tlet mtimeIndex: Date | undefined;\n\t// ...or if cannot be parsed\n\tif (!needsUpdate) {\n\t\ttry {\n\t\t\tconst fileContents = await readTextFile(fs, indexPath, \"utf8\");\n\t\t\tindex = JSON5.parse(fileContents);\n\t\t\tmtimeIndex = (await fs.stat(indexPath)).mtime;\n\t\t} catch {\n\t\t\tlogger?.print(\n\t\t\t\t\"Error while parsing index file - regenerating...\",\n\t\t\t\t\"warn\",\n\t\t\t);\n\t\t\tneedsUpdate = true;\n\t\t} finally {\n\t\t\tif (!index) {\n\t\t\t\tlogger?.print(\n\t\t\t\t\t\"Index file was malformed - regenerating...\",\n\t\t\t\t\t\"warn\",\n\t\t\t\t);\n\t\t\t\tneedsUpdate = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t// ...or if there were any changes in the file system\n\tif (!needsUpdate) {\n\t\tneedsUpdate = await hasChangedDeviceFiles(\n\t\t\tfs,\n\t\t\tdevicesDir,\n\t\t\tdevicesDir,\n\t\t\tmtimeIndex!,\n\t\t);\n\t\tif (needsUpdate) {\n\t\t\tlogger?.print(\n\t\t\t\t\"Device configuration files on disk changed - regenerating index...\",\n\t\t\t\t\"verbose\",\n\t\t\t);\n\t\t}\n\t}\n\n\tif (needsUpdate) {\n\t\t// Read all files from disk and generate an index\n\t\tindex = await generateIndex(\n\t\t\tfs,\n\t\t\tdevicesDir,\n\t\t\ttrue,\n\t\t\textractIndexEntries,\n\t\t\tlogger,\n\t\t);\n\t\t// Save the index to disk\n\t\ttry {\n\t\t\tawait writeTextFile(\n\t\t\t\tfs,\n\t\t\t\tpath.join(indexPath),\n\t\t\t\t`// This file is auto-generated. DO NOT edit it by hand if you don't know what you're doing!\"\n${stringify(index, \"\\t\")}\n`,\n\t\t\t\t\"utf8\",\n\t\t\t);\n\t\t\tlogger?.print(\"Device index regenerated\", \"verbose\");\n\t\t} catch (e) {\n\t\t\tlogger?.print(\n\t\t\t\t`Writing the device index to disk failed: ${\n\t\t\t\t\t(e as Error).message\n\t\t\t\t}`,\n\t\t\t\t\"error\",\n\t\t\t);\n\t\t}\n\t}\n\n\treturn index!;\n}\n\n/**\n * @internal\n * Loads the index file to quickly access the device configs.\n * Transparently handles updating the index if necessary\n */\nexport async function generatePriorityDeviceIndex(\n\tfs: ReadFileSystemInfo & ReadFile,\n\tdeviceConfigPriorityDir: string,\n\tlogger?: ConfigLogger,\n): Promise<DeviceConfigIndex> {\n\treturn (\n\t\tawait generateIndex(\n\t\t\tfs,\n\t\t\tdeviceConfigPriorityDir,\n\t\t\tfalse,\n\t\t\t(config) =>\n\t\t\t\tconfig.devices.map((dev) => ({\n\t\t\t\t\tmanufacturerId: formatId(\n\t\t\t\t\t\tconfig.manufacturerId.toString(16),\n\t\t\t\t\t),\n\t\t\t\t\tmanufacturer: config.manufacturer,\n\t\t\t\t\tlabel: config.label,\n\t\t\t\t\tproductType: formatId(dev.productType),\n\t\t\t\t\tproductId: formatId(dev.productId),\n\t\t\t\t\tfirmwareVersion: config.firmwareVersion,\n\t\t\t\t\t...(config.preferred ? { preferred: true as const } : {}),\n\t\t\t\t\trootDir: deviceConfigPriorityDir,\n\t\t\t\t})),\n\t\t\tlogger,\n\t\t)\n\t).map(({ filename, ...entry }) => ({\n\t\t...entry,\n\t\t// The generated index makes the filenames relative to the given directory\n\t\t// but we need them to be absolute\n\t\tfilename: path.join(deviceConfigPriorityDir, filename),\n\t}));\n}\n\n/**\n * @internal\n * Loads the index file to quickly access the device configs.\n * Transparently handles updating the index if necessary\n */\nexport async function loadDeviceIndexInternal(\n\tfs: ReadFileSystemInfo & ReadFile & WriteFile,\n\tlogger?: ConfigLogger,\n\texternalConfigDir?: string,\n): Promise<DeviceConfigIndex> {\n\tconst { devicesDir, indexPath } = getDevicesPaths(\n\t\texternalConfigDir || configDir,\n\t);\n\n\treturn loadDeviceIndexShared(\n\t\tfs,\n\t\tdevicesDir,\n\t\tindexPath,\n\t\t(config) =>\n\t\t\tconfig.devices.map((dev) => ({\n\t\t\t\tmanufacturerId: formatId(config.manufacturerId.toString(16)),\n\t\t\t\tmanufacturer: config.manufacturer,\n\t\t\t\tlabel: config.label,\n\t\t\t\tproductType: formatId(dev.productType),\n\t\t\t\tproductId: formatId(dev.productId),\n\t\t\t\tfirmwareVersion: config.firmwareVersion,\n\t\t\t\t...(config.preferred ? { preferred: true as const } : {}),\n\t\t\t})),\n\t\tlogger,\n\t);\n}\n\n/**\n * @internal\n * Loads the full text index file to quickly search the device configs.\n * Transparently handles updating the index if necessary\n */\nexport async function loadFulltextDeviceIndexInternal(\n\tfs: ReadFileSystemInfo & ReadFile & WriteFile,\n\tlogger?: ConfigLogger,\n): Promise<FulltextDeviceConfigIndex> {\n\t// This method is not meant to operate with the external device index!\n\treturn loadDeviceIndexShared(\n\t\tfs,\n\t\tembeddedDevicesDir,\n\t\tfulltextIndexPath,\n\t\t(config) =>\n\t\t\tconfig.devices.map((dev) => ({\n\t\t\t\tmanufacturerId: formatId(config.manufacturerId.toString(16)),\n\t\t\t\tmanufacturer: config.manufacturer,\n\t\t\t\tlabel: config.label,\n\t\t\t\tdescription: config.description,\n\t\t\t\tproductType: formatId(dev.productType),\n\t\t\t\tproductId: formatId(dev.productId),\n\t\t\t\tfirmwareVersion: config.firmwareVersion,\n\t\t\t\t...(config.preferred ? { preferred: true as const } : {}),\n\t\t\t\trootDir: embeddedDevicesDir,\n\t\t\t})),\n\t\tlogger,\n\t);\n}\n\nfunction isHexKeyWith4Digits(val: any): val is string {\n\treturn typeof val === \"string\" && hexKeyRegex4Digits.test(val);\n}\n\nconst firmwareVersionRegex = /^\\d{1,3}\\.\\d{1,3}(\\.\\d{1,3})?$/;\nfunction isFirmwareVersion(val: any): val is string {\n\treturn (\n\t\ttypeof val === \"string\"\n\t\t&& firmwareVersionRegex.test(val)\n\t\t&& val\n\t\t\t.split(\".\")\n\t\t\t.map((str) => parseInt(str, 10))\n\t\t\t.every((num) => num >= 0 && num <= 255)\n\t);\n}\n\n/** This class represents a device config entry whose conditional settings have not been evaluated yet */\nexport class ConditionalDeviceConfig {\n\tpublic static async from(\n\t\tfs: ReadFileSystemInfo & ReadFile,\n\t\tfilename: string,\n\t\tisEmbedded: boolean,\n\t\toptions: {\n\t\t\trootDir: string;\n\t\t\tfallbackDirs?: string[];\n\t\t\trelative?: boolean;\n\t\t},\n\t): Promise<ConditionalDeviceConfig> {\n\t\tconst { relative, rootDir } = options;\n\n\t\tconst relativePath = relative\n\t\t\t? path.relative(rootDir, filename).replaceAll(\"\\\\\", \"/\")\n\t\t\t: filename;\n\t\tconst json = await readJsonWithTemplate(\n\t\t\tfs,\n\t\t\tfilename,\n\t\t\t[\n\t\t\t\toptions.rootDir,\n\t\t\t\t...(options.fallbackDirs ?? []),\n\t\t\t],\n\t\t);\n\t\treturn new ConditionalDeviceConfig(relativePath, isEmbedded, json);\n\t}\n\n\tpublic constructor(\n\t\tfilename: string,\n\t\tisEmbedded: boolean,\n\t\tdefinition: JSONObject,\n\t) {\n\t\tthis.filename = filename;\n\t\tthis.isEmbedded = isEmbedded;\n\n\t\tif (!isHexKeyWith4Digits(definition.manufacturerId)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t`device`,\n\t\t\t\t`packages/config/config/devices/${filename}:\nmanufacturer id must be a lowercase hexadecimal number with 4 digits`,\n\t\t\t);\n\t\t}\n\t\tthis.manufacturerId = parseInt(definition.manufacturerId, 16);\n\n\t\tfor (const prop of [\"manufacturer\", \"label\", \"description\"] as const) {\n\t\t\tthis[prop] = parseConditionalPrimitive(\n\t\t\t\tfilename,\n\t\t\t\t\"string\",\n\t\t\t\tprop,\n\t\t\t\tdefinition[prop],\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\t!isArray(definition.devices)\n\t\t\t|| !(definition.devices as any[]).every(\n\t\t\t\t(dev: unknown) =>\n\t\t\t\t\tisObject(dev)\n\t\t\t\t\t&& isHexKeyWith4Digits(dev.productType)\n\t\t\t\t\t&& isHexKeyWith4Digits(dev.productId),\n\t\t\t)\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t`device`,\n\t\t\t\t`packages/config/config/devices/${filename}:\ndevices is malformed (not an object or type/id that is not a lowercase 4-digit hex key)`,\n\t\t\t);\n\t\t}\n\t\tthis.devices = (definition.devices as any[]).map(\n\t\t\t({ productType, productId }) => ({\n\t\t\t\tproductType: parseInt(productType, 16),\n\t\t\t\tproductId: parseInt(productId, 16),\n\t\t\t}),\n\t\t);\n\n\t\tif (\n\t\t\t!isObject(definition.firmwareVersion)\n\t\t\t|| !isFirmwareVersion(definition.firmwareVersion.min)\n\t\t\t|| !isFirmwareVersion(definition.firmwareVersion.max)\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t`device`,\n\t\t\t\t`packages/config/config/devices/${filename}:\nfirmwareVersion is malformed or invalid. Must be x.y or x.y.z where x, y, and z are integers between 0 and 255`,\n\t\t\t);\n\t\t} else {\n\t\t\tconst { min, max } = definition.firmwareVersion;\n\t\t\tif (semverGt(padVersion(min), padVersion(max))) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nfirmwareVersion.min ${min} must not be greater than firmwareVersion.max ${max}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.firmwareVersion = { min, max };\n\t\t}\n\n\t\tif (\n\t\t\tdefinition.preferred != undefined\n\t\t\t&& definition.preferred !== true\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t`device`,\n\t\t\t\t`packages/config/config/devices/${filename}:\npreferred must be true or omitted`,\n\t\t\t);\n\t\t}\n\t\tthis.preferred = !!definition.preferred;\n\n\t\tif (definition.endpoints != undefined) {\n\t\t\tconst endpoints = new Map<number, ConditionalEndpointConfig>();\n\t\t\tif (!isObject(definition.endpoints)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nendpoints is not an object`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const [key, ep] of Object.entries(definition.endpoints)) {\n\t\t\t\tif (!/^\\d+$/.test(key)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t`device`,\n\t\t\t\t\t\t`packages/config/config/devices/${filename}:\nfound non-numeric endpoint index \"${key}\" in endpoints`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst epIndex = parseInt(key, 10);\n\t\t\t\tendpoints.set(\n\t\t\t\t\tepIndex,\n\t\t\t\t\tnew ConditionalEndpointConfig(this, epIndex, ep as any),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.endpoints = endpoints;\n\t\t}\n\n\t\tif (definition.associations != undefined) {\n\t\t\tconst associations = new Map<\n\t\t\t\tnumber,\n\t\t\t\tConditionalAssociationConfig\n\t\t\t>();\n\t\t\tif (!isObject(definition.associations)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nassociations is not an object`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (\n\t\t\t\tconst [key, assocDefinition] of Object.entries(\n\t\t\t\t\tdefinition.associations,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (!/^[1-9][0-9]*$/.test(key)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t`device`,\n\t\t\t\t\t\t`packages/config/config/devices/${filename}:\nfound non-numeric group id \"${key}\" in associations`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst keyNum = parseInt(key, 10);\n\t\t\t\tassociations.set(\n\t\t\t\t\tkeyNum,\n\t\t\t\t\tnew ConditionalAssociationConfig(\n\t\t\t\t\t\tfilename,\n\t\t\t\t\t\tkeyNum,\n\t\t\t\t\t\tassocDefinition as any,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.associations = associations;\n\t\t}\n\n\t\tif (definition.paramInformation != undefined) {\n\t\t\tthis.paramInformation = parseConditionalParamInformationMap(\n\t\t\t\tdefinition,\n\t\t\t\tthis,\n\t\t\t);\n\t\t}\n\n\t\tif (definition.proprietary != undefined) {\n\t\t\tif (!isObject(definition.proprietary)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nproprietary is not an object`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.proprietary = definition.proprietary;\n\t\t}\n\n\t\tif (definition.compat != undefined) {\n\t\t\tif (\n\t\t\t\tisArray(definition.compat)\n\t\t\t\t&& definition.compat.every((item: any) => isObject(item))\n\t\t\t) {\n\t\t\t\t// Make sure all conditions are valid\n\t\t\t\tfor (const entry of definition.compat) {\n\t\t\t\t\tvalidateCondition(\n\t\t\t\t\t\tfilename,\n\t\t\t\t\t\tentry,\n\t\t\t\t\t\t`At least one entry of compat contains an`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.compat = definition.compat.map(\n\t\t\t\t\t(item: any) => new ConditionalCompatConfig(filename, item),\n\t\t\t\t);\n\t\t\t} else if (isObject(definition.compat)) {\n\t\t\t\tthis.compat = new ConditionalCompatConfig(\n\t\t\t\t\tfilename,\n\t\t\t\t\tdefinition.compat,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\ncompat must be an object or any array of conditional objects`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (definition.metadata != undefined) {\n\t\t\tif (!isObject(definition.metadata)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nmetadata is not an object`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.metadata = new ConditionalDeviceMetadata(\n\t\t\t\tfilename,\n\t\t\t\tdefinition.metadata,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic readonly filename: string;\n\n\tpublic readonly manufacturer!: ConditionalPrimitive<string>;\n\tpublic readonly manufacturerId: number;\n\tpublic readonly label!: ConditionalPrimitive<string>;\n\tpublic readonly description!: ConditionalPrimitive<string>;\n\tpublic readonly devices: readonly {\n\t\tproductType: number;\n\t\tproductId: number;\n\t}[];\n\tpublic readonly firmwareVersion: FirmwareVersionRange;\n\t/** Mark this configuration as preferred over other config files with an overlapping firmware range */\n\tpublic readonly preferred: boolean;\n\tpublic readonly endpoints?: ReadonlyMap<number, ConditionalEndpointConfig>;\n\tpublic readonly associations?: ReadonlyMap<\n\t\tnumber,\n\t\tConditionalAssociationConfig\n\t>;\n\tpublic readonly paramInformation?: ConditionalParamInfoMap;\n\t/**\n\t * Contains manufacturer-specific support information for the\n\t * ManufacturerProprietary CC\n\t */\n\tpublic readonly proprietary?: Record<string, unknown>;\n\t/** Contains compatibility options */\n\tpublic readonly compat?:\n\t\t| ConditionalCompatConfig\n\t\t| ConditionalCompatConfig[];\n\t/** Contains instructions and other metadata for the device */\n\tpublic readonly metadata?: ConditionalDeviceMetadata;\n\n\t/** Whether this is an embedded configuration or not */\n\tpublic readonly isEmbedded: boolean;\n\n\tpublic evaluate(deviceId?: DeviceID): DeviceConfig {\n\t\treturn new DeviceConfig(\n\t\t\tthis.filename,\n\t\t\tthis.isEmbedded,\n\t\t\tevaluateDeep(this.manufacturer, deviceId),\n\t\t\tthis.manufacturerId,\n\t\t\tevaluateDeep(this.label, deviceId),\n\t\t\tevaluateDeep(this.description, deviceId),\n\t\t\tthis.devices,\n\t\t\tthis.firmwareVersion,\n\t\t\tthis.preferred,\n\t\t\tevaluateDeep(this.endpoints, deviceId),\n\t\t\tevaluateDeep(this.associations, deviceId),\n\t\t\tevaluateDeep(this.paramInformation, deviceId),\n\t\t\tthis.proprietary,\n\t\t\tevaluateDeep(this.compat, deviceId),\n\t\t\tevaluateDeep(this.metadata, deviceId),\n\t\t);\n\t}\n}\n\nexport class DeviceConfig {\n\tpublic static async from(\n\t\tfs: ReadFileSystemInfo & ReadFile,\n\t\tfilename: string,\n\t\tisEmbedded: boolean,\n\t\toptions: {\n\t\t\trootDir: string;\n\t\t\tfallbackDirs?: string[];\n\t\t\trelative?: boolean;\n\t\t\tdeviceId?: DeviceID;\n\t\t},\n\t): Promise<DeviceConfig> {\n\t\tconst ret = await ConditionalDeviceConfig.from(\n\t\t\tfs,\n\t\t\tfilename,\n\t\t\tisEmbedded,\n\t\t\toptions,\n\t\t);\n\t\treturn ret.evaluate(options.deviceId);\n\t}\n\n\tpublic constructor(\n\t\tfilename: string,\n\t\tisEmbedded: boolean,\n\t\tmanufacturer: string,\n\t\tmanufacturerId: number,\n\t\tlabel: string,\n\t\tdescription: string,\n\t\tdevices: readonly {\n\t\t\tproductType: number;\n\t\t\tproductId: number;\n\t\t}[],\n\t\tfirmwareVersion: FirmwareVersionRange,\n\t\tpreferred: boolean,\n\t\tendpoints?: ReadonlyMap<number, EndpointConfig>,\n\t\tassociations?: ReadonlyMap<number, AssociationConfig>,\n\t\tparamInformation?: ParamInfoMap,\n\t\tproprietary?: Record<string, unknown>,\n\t\tcompat?: CompatConfig,\n\t\tmetadata?: DeviceMetadata,\n\t) {\n\t\tthis.filename = filename;\n\t\tthis.isEmbedded = isEmbedded;\n\t\tthis.manufacturer = manufacturer;\n\t\tthis.manufacturerId = manufacturerId;\n\t\tthis.label = label;\n\t\tthis.description = description;\n\t\tthis.devices = devices;\n\t\tthis.firmwareVersion = firmwareVersion;\n\t\tthis.preferred = preferred;\n\t\tthis.endpoints = endpoints;\n\t\tthis.associations = associations;\n\t\tthis.paramInformation = paramInformation;\n\t\tthis.proprietary = proprietary;\n\t\tthis.compat = compat;\n\t\tthis.metadata = metadata;\n\t}\n\n\tpublic readonly filename: string;\n\t/** Whether this is an embedded configuration or not */\n\tpublic readonly isEmbedded: boolean;\n\tpublic readonly manufacturer: string;\n\tpublic readonly manufacturerId: number;\n\tpublic readonly label: string;\n\tpublic readonly description: string;\n\tpublic readonly devices: readonly {\n\t\tproductType: number;\n\t\tproductId: number;\n\t}[];\n\tpublic readonly firmwareVersion: FirmwareVersionRange;\n\t/** Mark this configuration as preferred over other config files with an overlapping firmware range */\n\tpublic readonly preferred: boolean;\n\tpublic readonly endpoints?: ReadonlyMap<number, EndpointConfig>;\n\tpublic readonly associations?: ReadonlyMap<number, AssociationConfig>;\n\tpublic readonly paramInformation?: ParamInfoMap;\n\t/**\n\t * Contains manufacturer-specific support information for the\n\t * ManufacturerProprietary CC\n\t */\n\tpublic readonly proprietary?: Record<string, unknown>;\n\t/** Contains compatibility options */\n\tpublic readonly compat?: CompatConfig;\n\t/** Contains instructions and other metadata for the device */\n\tpublic readonly metadata?: DeviceMetadata;\n\n\t/** Returns the association config for a given endpoint */\n\tpublic getAssociationConfigForEndpoint(\n\t\tendpointIndex: number,\n\t\tgroup: number,\n\t): AssociationConfig | undefined {\n\t\tif (endpointIndex === 0) {\n\t\t\t// The root endpoint's associations may be configured separately or as part of \"endpoints\"\n\t\t\treturn (\n\t\t\t\tthis.associations?.get(group)\n\t\t\t\t\t?? this.endpoints?.get(0)?.associations?.get(group)\n\t\t\t);\n\t\t} else {\n\t\t\t// The other endpoints can only have a configuration as part of \"endpoints\"\n\t\t\treturn this.endpoints?.get(endpointIndex)?.associations?.get(group);\n\t\t}\n\t}\n\n\tprivate getHashable(): Uint8Array {\n\t\t// We only need to compare the information that is persisted elsewhere:\n\t\t// - config parameters\n\t\t// - functional association settings\n\t\t// - CC-related compat flags\n\n\t\tlet hashable: Record<string, any> = {\n\t\t\t// endpoints: {\n\t\t\t// \tassociations: {},\n\t\t\t// \tparamInformation: []\n\t\t\t// },\n\t\t\t// proprietary: {},\n\t\t\t// compat: {},\n\t\t};\n\n\t\tconst sortObject = (obj: Record<string, any>) => {\n\t\t\tconst ret: Record<string, any> = {};\n\t\t\tfor (const key of Object.keys(obj).sort()) {\n\t\t\t\tret[key] = obj[key];\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\n\t\tconst cloneAssociationConfig = (a: AssociationConfig) => {\n\t\t\treturn sortObject(\n\t\t\t\tpick(a, [\"maxNodes\", \"multiChannel\", \"isLifeline\"]),\n\t\t\t);\n\t\t};\n\t\tconst cloneAssociationMap = (\n\t\t\ttarget: Record<string, any>,\n\t\t\tmap: ReadonlyMap<number, AssociationConfig> | undefined,\n\t\t) => {\n\t\t\tif (!map || !map.size) return;\n\t\t\ttarget.associations = {};\n\t\t\tfor (const [key, value] of map) {\n\t\t\t\ttarget.associations[key] = cloneAssociationConfig(value);\n\t\t\t}\n\t\t\ttarget.associations = sortObject(target.associations);\n\t\t};\n\n\t\tconst cloneParamInformationMap = (\n\t\t\ttarget: Record<string, any>,\n\t\t\tmap: ParamInfoMap | undefined,\n\t\t) => {\n\t\t\tif (!map || !map.size) return;\n\t\t\tconst getParamKey = (param: ParamInformation) =>\n\t\t\t\t`${param.parameterNumber}${\n\t\t\t\t\tparam.valueBitMask ? `[${num2hex(param.valueBitMask)}]` : \"\"\n\t\t\t\t}`;\n\t\t\ttarget.paramInformation = [...map.values()].sort((a, b) =>\n\t\t\t\tgetParamKey(a).localeCompare(getParamKey(b))\n\t\t\t);\n\t\t};\n\n\t\t// Clone associations and param information on the root (ep 0) and endpoints\n\t\t{\n\t\t\tlet ep0: Record<string, any> = {};\n\t\t\tcloneAssociationMap(ep0, this.associations);\n\t\t\tcloneParamInformationMap(ep0, this.paramInformation);\n\t\t\tep0 = sortObject(ep0);\n\n\t\t\tif (Object.keys(ep0).length > 0) {\n\t\t\t\thashable.endpoints ??= {};\n\t\t\t\thashable.endpoints[0] = ep0;\n\t\t\t}\n\t\t}\n\n\t\tif (this.endpoints) {\n\t\t\tfor (const [index, endpoint] of this.endpoints) {\n\t\t\t\tlet ep: Record<string, any> = {};\n\n\t\t\t\tcloneAssociationMap(ep, endpoint.associations);\n\t\t\t\tcloneParamInformationMap(ep, endpoint.paramInformation);\n\n\t\t\t\tep = sortObject(ep);\n\n\t\t\t\tif (Object.keys(ep).length > 0) {\n\t\t\t\t\thashable.endpoints ??= {};\n\t\t\t\t\thashable.endpoints[index] = ep;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Clone proprietary config\n\t\tif (this.proprietary && Object.keys(this.proprietary).length > 0) {\n\t\t\thashable.proprietary = sortObject({ ...this.proprietary });\n\t\t}\n\n\t\t// Clone relevant compat flags\n\t\tif (this.compat) {\n\t\t\tlet c: Record<string, any> = {};\n\n\t\t\t// Copy some simple flags over\n\t\t\tfor (\n\t\t\t\tconst prop of [\n\t\t\t\t\t\"forceSceneControllerGroupCount\",\n\t\t\t\t\t\"mapRootReportsToEndpoint\",\n\t\t\t\t\t\"mapBasicSet\",\n\t\t\t\t\t\"preserveRootApplicationCCValueIDs\",\n\t\t\t\t\t\"preserveEndpoints\",\n\t\t\t\t\t\"removeEndpoints\",\n\t\t\t\t\t\"treatMultilevelSwitchSetAsEvent\",\n\t\t\t\t] as const\n\t\t\t) {\n\t\t\t\tif (this.compat[prop] != undefined) {\n\t\t\t\t\tc[prop] = this.compat[prop];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy other, more complex flags\n\t\t\tif (this.compat.overrideQueries) {\n\t\t\t\tc.overrideQueries = Object.fromEntries(\n\t\t\t\t\tthis.compat.overrideQueries[\"overrides\"],\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.compat.addCCs) {\n\t\t\t\tc.addCCs = Object.fromEntries(\n\t\t\t\t\t[...this.compat.addCCs].map(([ccId, def]) => [\n\t\t\t\t\t\tccId,\n\t\t\t\t\t\tObject.fromEntries(def.endpoints),\n\t\t\t\t\t]),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.compat.removeCCs) {\n\t\t\t\tc.removeCCs = Object.fromEntries(this.compat.removeCCs);\n\t\t\t}\n\t\t\tif (this.compat.treatSetAsReport) {\n\t\t\t\tc.treatSetAsReport = [...this.compat.treatSetAsReport].sort();\n\t\t\t}\n\n\t\t\tc = sortObject(c);\n\t\t\tif (Object.keys(c).length > 0) {\n\t\t\t\thashable.compat = c;\n\t\t\t}\n\t\t}\n\n\t\thashable = sortObject(hashable);\n\n\t\treturn Bytes.from(JSON.stringify(hashable), \"utf8\");\n\t}\n\n\t/**\n\t * Returns a hash code that can be used to check whether a device config has changed enough to require a re-interview.\n\t */\n\tpublic getHash(\n\t\talgorithm: \"md5\" | \"sha-256\" = \"sha-256\",\n\t): Promise<Uint8Array> {\n\t\t// Figure out what to hash\n\t\tconst buffer = this.getHashable();\n\n\t\t// And create a hash from it. This does not need to be cryptographically secure, just good enough to detect changes.\n\t\treturn digest(algorithm, buffer);\n\t}\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { configDir } from \"#config_dir\";\nimport { ZWaveError, ZWaveErrorCodes, digest } from \"@zwave-js/core\";\nimport {\n\tBytes,\n\ttype JSONObject,\n\tenumFilesRecursive,\n\tformatId,\n\tgetenv,\n\tnum2hex,\n\tpadVersion,\n\tpathExists,\n\tpick,\n\treadTextFile,\n\tstringify,\n\twriteTextFile,\n} from \"@zwave-js/shared\";\nimport type {\n\tReadFile,\n\tReadFileSystemInfo,\n\tWriteFile,\n} from \"@zwave-js/shared/bindings\";\nimport { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport JSON5 from \"json5\";\nimport path from \"pathe\";\nimport semverGt from \"semver/functions/gt.js\";\nimport { clearTemplateCache, readJsonWithTemplate } from \"../JsonTemplate.js\";\nimport type { ConfigLogger } from \"../Logger.js\";\nimport { hexKeyRegex4Digits, throwInvalidConfig } from \"../utils_safe.js\";\nimport {\n\ttype AssociationConfig,\n\tConditionalAssociationConfig,\n} from \"./AssociationConfig.js\";\nimport { type CompatConfig, ConditionalCompatConfig } from \"./CompatConfig.js\";\nimport { evaluateDeep, validateCondition } from \"./ConditionalItem.js\";\nimport {\n\ttype ConditionalPrimitive,\n\tparseConditionalPrimitive,\n} from \"./ConditionalPrimitive.js\";\nimport {\n\tConditionalDeviceMetadata,\n\ttype DeviceMetadata,\n} from \"./DeviceMetadata.js\";\nimport {\n\tConditionalEndpointConfig,\n\ttype EndpointConfig,\n} from \"./EndpointConfig.js\";\nimport {\n\ttype ConditionalParamInfoMap,\n\ttype ParamInfoMap,\n\ttype ParamInformation,\n\tparseConditionalParamInformationMap,\n} from \"./ParamInformation.js\";\nimport type { DeviceID, FirmwareVersionRange } from \"./shared.js\";\n\nexport interface DeviceConfigIndexEntry {\n\tmanufacturerId: string;\n\tproductType: string;\n\tproductId: string;\n\tfirmwareVersion: FirmwareVersionRange;\n\tpreferred?: true;\n\trootDir?: string;\n\tfilename: string;\n}\n\nexport interface FulltextDeviceConfigIndexEntry {\n\tmanufacturerId: string;\n\tmanufacturer: string;\n\tlabel: string;\n\tdescription: string;\n\tproductType: string;\n\tproductId: string;\n\tfirmwareVersion: FirmwareVersionRange;\n\tpreferred?: true;\n\trootDir?: string;\n\tfilename: string;\n}\n\nexport const embeddedDevicesDir = path.join(configDir, \"devices\");\nconst fulltextIndexPath = path.join(embeddedDevicesDir, \"fulltext_index.json\");\n\nexport function getDevicesPaths(configDir: string): {\n\tdevicesDir: string;\n\tindexPath: string;\n} {\n\tconst devicesDir = path.join(configDir, \"devices\");\n\tconst indexPath = path.join(devicesDir, \"index.json\");\n\treturn { devicesDir, indexPath };\n}\n\nexport type DeviceConfigIndex = DeviceConfigIndexEntry[];\nexport type FulltextDeviceConfigIndex = FulltextDeviceConfigIndexEntry[];\n\nasync function hasChangedDeviceFiles(\n\tfs: ReadFileSystemInfo,\n\tdevicesRoot: string,\n\tdir: string,\n\tlastChange: Date,\n): Promise<boolean> {\n\t// Check if there are any files BUT index.json that were changed\n\t// or directories that were modified\n\tconst filesAndDirs = await fs.readDir(dir);\n\tfor (const f of filesAndDirs) {\n\t\tconst fullPath = path.join(dir, f);\n\n\t\tconst stat = await fs.stat(fullPath);\n\t\tif (\n\t\t\t(dir !== devicesRoot || f !== \"index.json\")\n\t\t\t&& (stat.isFile() || stat.isDirectory())\n\t\t\t&& stat.mtime > lastChange\n\t\t) {\n\t\t\treturn true;\n\t\t} else if (stat.isDirectory()) {\n\t\t\t// we need to go deeper!\n\t\t\tif (\n\t\t\t\tawait hasChangedDeviceFiles(\n\t\t\t\t\tfs,\n\t\t\t\t\tdevicesRoot,\n\t\t\t\t\tfullPath,\n\t\t\t\t\tlastChange,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Read all device config files from a given directory and return them as index entries.\n * Does not update the index itself.\n */\nasync function generateIndex<T extends Record<string, unknown>>(\n\tfs: ReadFileSystemInfo & ReadFile,\n\tdevicesDir: string,\n\tisEmbedded: boolean,\n\textractIndexEntries: (config: DeviceConfig) => T[],\n\tlogger?: ConfigLogger,\n): Promise<(T & { filename: string; rootDir?: string })[]> {\n\tconst index: (T & { filename: string; rootDir?: string })[] = [];\n\n\tclearTemplateCache();\n\tconst configFiles = await enumFilesRecursive(\n\t\tfs,\n\t\tdevicesDir,\n\t\t(file) =>\n\t\t\tfile.endsWith(\".json\")\n\t\t\t&& !file.endsWith(\"index.json\")\n\t\t\t&& !file.includes(\"/templates/\")\n\t\t\t&& !file.includes(\"\\\\templates\\\\\"),\n\t);\n\n\t// Add the embedded devices dir as a fallback if necessary\n\tconst fallbackDirs = devicesDir !== embeddedDevicesDir\n\t\t? [embeddedDevicesDir]\n\t\t: undefined;\n\n\tfor (const file of configFiles) {\n\t\tconst relativePath = path\n\t\t\t.relative(devicesDir, file)\n\t\t\t.replaceAll(\"\\\\\", \"/\");\n\t\t// Try parsing the file\n\t\ttry {\n\t\t\tconst config = await DeviceConfig.from(\n\t\t\t\tfs,\n\t\t\t\tfile,\n\t\t\t\tisEmbedded,\n\t\t\t\t{\n\t\t\t\t\trootDir: devicesDir,\n\t\t\t\t\tfallbackDirs,\n\t\t\t\t\trelative: true,\n\t\t\t\t},\n\t\t\t);\n\t\t\t// Add the file to the index\n\t\t\tindex.push(\n\t\t\t\t...extractIndexEntries(config).map((entry) => {\n\t\t\t\t\tconst ret: T & { filename: string; rootDir?: string } = {\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tfilename: relativePath,\n\t\t\t\t\t};\n\t\t\t\t\t// Only add the root dir to the index if necessary\n\t\t\t\t\tif (devicesDir !== embeddedDevicesDir) {\n\t\t\t\t\t\tret.rootDir = devicesDir;\n\t\t\t\t\t}\n\t\t\t\t\treturn ret;\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tconst message = `Error parsing config file ${relativePath}: ${\n\t\t\t\t(e as Error).message\n\t\t\t}`;\n\t\t\t// Crash hard during tests, just print an error when in production systems.\n\t\t\t// A user could have changed a config file\n\t\t\tif (process.env.NODE_ENV === \"test\" || !!getenv(\"CI\")) {\n\t\t\t\tthrow new ZWaveError(message, ZWaveErrorCodes.Config_Invalid);\n\t\t\t} else {\n\t\t\t\tlogger?.print(message, \"error\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn index;\n}\n\nasync function loadDeviceIndexShared<T extends Record<string, unknown>>(\n\tfs: ReadFileSystemInfo & ReadFile & WriteFile,\n\tdevicesDir: string,\n\tindexPath: string,\n\textractIndexEntries: (config: DeviceConfig) => T[],\n\tlogger?: ConfigLogger,\n): Promise<(T & { filename: string })[]> {\n\t// The index file needs to be regenerated if it does not exist\n\tlet needsUpdate = !(await pathExists(fs, indexPath));\n\tlet index: (T & { filename: string })[] | undefined;\n\tlet mtimeIndex: Date | undefined;\n\t// ...or if cannot be parsed\n\tif (!needsUpdate) {\n\t\ttry {\n\t\t\tconst fileContents = await readTextFile(fs, indexPath, \"utf8\");\n\t\t\tindex = JSON5.parse(fileContents);\n\t\t\tmtimeIndex = (await fs.stat(indexPath)).mtime;\n\t\t} catch {\n\t\t\tlogger?.print(\n\t\t\t\t\"Error while parsing index file - regenerating...\",\n\t\t\t\t\"warn\",\n\t\t\t);\n\t\t\tneedsUpdate = true;\n\t\t} finally {\n\t\t\tif (!index) {\n\t\t\t\tlogger?.print(\n\t\t\t\t\t\"Index file was malformed - regenerating...\",\n\t\t\t\t\t\"warn\",\n\t\t\t\t);\n\t\t\t\tneedsUpdate = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t// ...or if there were any changes in the file system\n\tif (!needsUpdate) {\n\t\tneedsUpdate = await hasChangedDeviceFiles(\n\t\t\tfs,\n\t\t\tdevicesDir,\n\t\t\tdevicesDir,\n\t\t\tmtimeIndex!,\n\t\t);\n\t\tif (needsUpdate) {\n\t\t\tlogger?.print(\n\t\t\t\t\"Device configuration files on disk changed - regenerating index...\",\n\t\t\t\t\"verbose\",\n\t\t\t);\n\t\t}\n\t}\n\n\tif (needsUpdate) {\n\t\t// Read all files from disk and generate an index\n\t\tindex = await generateIndex(\n\t\t\tfs,\n\t\t\tdevicesDir,\n\t\t\ttrue,\n\t\t\textractIndexEntries,\n\t\t\tlogger,\n\t\t);\n\t\t// Save the index to disk\n\t\ttry {\n\t\t\tawait writeTextFile(\n\t\t\t\tfs,\n\t\t\t\tpath.join(indexPath),\n\t\t\t\t`// This file is auto-generated. DO NOT edit it by hand if you don't know what you're doing!\"\n${stringify(index, \"\\t\")}\n`,\n\t\t\t\t\"utf8\",\n\t\t\t);\n\t\t\tlogger?.print(\"Device index regenerated\", \"verbose\");\n\t\t} catch (e) {\n\t\t\tlogger?.print(\n\t\t\t\t`Writing the device index to disk failed: ${\n\t\t\t\t\t(e as Error).message\n\t\t\t\t}`,\n\t\t\t\t\"error\",\n\t\t\t);\n\t\t}\n\t}\n\n\treturn index!;\n}\n\n/**\n * @internal\n * Loads the index file to quickly access the device configs.\n * Transparently handles updating the index if necessary\n */\nexport async function generatePriorityDeviceIndex(\n\tfs: ReadFileSystemInfo & ReadFile,\n\tdeviceConfigPriorityDir: string,\n\tlogger?: ConfigLogger,\n): Promise<DeviceConfigIndex> {\n\treturn (\n\t\tawait generateIndex(\n\t\t\tfs,\n\t\t\tdeviceConfigPriorityDir,\n\t\t\tfalse,\n\t\t\t(config) =>\n\t\t\t\tconfig.devices.map((dev) => ({\n\t\t\t\t\tmanufacturerId: formatId(\n\t\t\t\t\t\tconfig.manufacturerId.toString(16),\n\t\t\t\t\t),\n\t\t\t\t\tmanufacturer: config.manufacturer,\n\t\t\t\t\tlabel: config.label,\n\t\t\t\t\tproductType: formatId(dev.productType),\n\t\t\t\t\tproductId: formatId(dev.productId),\n\t\t\t\t\tfirmwareVersion: config.firmwareVersion,\n\t\t\t\t\t...(config.preferred ? { preferred: true as const } : {}),\n\t\t\t\t\trootDir: deviceConfigPriorityDir,\n\t\t\t\t})),\n\t\t\tlogger,\n\t\t)\n\t).map(({ filename, ...entry }) => ({\n\t\t...entry,\n\t\t// The generated index makes the filenames relative to the given directory\n\t\t// but we need them to be absolute\n\t\tfilename: path.join(deviceConfigPriorityDir, filename),\n\t}));\n}\n\n/**\n * @internal\n * Loads the index file to quickly access the device configs.\n * Transparently handles updating the index if necessary\n */\nexport async function loadDeviceIndexInternal(\n\tfs: ReadFileSystemInfo & ReadFile & WriteFile,\n\tlogger?: ConfigLogger,\n\texternalConfigDir?: string,\n): Promise<DeviceConfigIndex> {\n\tconst { devicesDir, indexPath } = getDevicesPaths(\n\t\texternalConfigDir || configDir,\n\t);\n\n\treturn loadDeviceIndexShared(\n\t\tfs,\n\t\tdevicesDir,\n\t\tindexPath,\n\t\t(config) =>\n\t\t\tconfig.devices.map((dev) => ({\n\t\t\t\tmanufacturerId: formatId(config.manufacturerId.toString(16)),\n\t\t\t\tmanufacturer: config.manufacturer,\n\t\t\t\tlabel: config.label,\n\t\t\t\tproductType: formatId(dev.productType),\n\t\t\t\tproductId: formatId(dev.productId),\n\t\t\t\tfirmwareVersion: config.firmwareVersion,\n\t\t\t\t...(config.preferred ? { preferred: true as const } : {}),\n\t\t\t})),\n\t\tlogger,\n\t);\n}\n\n/**\n * @internal\n * Loads the full text index file to quickly search the device configs.\n * Transparently handles updating the index if necessary\n */\nexport async function loadFulltextDeviceIndexInternal(\n\tfs: ReadFileSystemInfo & ReadFile & WriteFile,\n\tlogger?: ConfigLogger,\n): Promise<FulltextDeviceConfigIndex> {\n\t// This method is not meant to operate with the external device index!\n\treturn loadDeviceIndexShared(\n\t\tfs,\n\t\tembeddedDevicesDir,\n\t\tfulltextIndexPath,\n\t\t(config) =>\n\t\t\tconfig.devices.map((dev) => ({\n\t\t\t\tmanufacturerId: formatId(config.manufacturerId.toString(16)),\n\t\t\t\tmanufacturer: config.manufacturer,\n\t\t\t\tlabel: config.label,\n\t\t\t\tdescription: config.description,\n\t\t\t\tproductType: formatId(dev.productType),\n\t\t\t\tproductId: formatId(dev.productId),\n\t\t\t\tfirmwareVersion: config.firmwareVersion,\n\t\t\t\t...(config.preferred ? { preferred: true as const } : {}),\n\t\t\t\trootDir: embeddedDevicesDir,\n\t\t\t})),\n\t\tlogger,\n\t);\n}\n\nfunction isHexKeyWith4Digits(val: any): val is string {\n\treturn typeof val === \"string\" && hexKeyRegex4Digits.test(val);\n}\n\nconst firmwareVersionRegex = /^\\d{1,3}\\.\\d{1,3}(\\.\\d{1,3})?$/;\nfunction isFirmwareVersion(val: any): val is string {\n\treturn (\n\t\ttypeof val === \"string\"\n\t\t&& firmwareVersionRegex.test(val)\n\t\t&& val\n\t\t\t.split(\".\")\n\t\t\t.map((str) => parseInt(str, 10))\n\t\t\t.every((num) => num >= 0 && num <= 255)\n\t);\n}\n\n/** This class represents a device config entry whose conditional settings have not been evaluated yet */\nexport class ConditionalDeviceConfig {\n\tpublic static async from(\n\t\tfs: ReadFileSystemInfo & ReadFile,\n\t\tfilename: string,\n\t\tisEmbedded: boolean,\n\t\toptions: {\n\t\t\trootDir: string;\n\t\t\tfallbackDirs?: string[];\n\t\t\trelative?: boolean;\n\t\t},\n\t): Promise<ConditionalDeviceConfig> {\n\t\tconst { relative, rootDir } = options;\n\n\t\tconst relativePath = relative\n\t\t\t? path.relative(rootDir, filename).replaceAll(\"\\\\\", \"/\")\n\t\t\t: filename;\n\t\tconst json = await readJsonWithTemplate(\n\t\t\tfs,\n\t\t\tfilename,\n\t\t\t[\n\t\t\t\toptions.rootDir,\n\t\t\t\t...(options.fallbackDirs ?? []),\n\t\t\t],\n\t\t);\n\t\treturn new ConditionalDeviceConfig(relativePath, isEmbedded, json);\n\t}\n\n\tpublic constructor(\n\t\tfilename: string,\n\t\tisEmbedded: boolean,\n\t\tdefinition: JSONObject,\n\t) {\n\t\tthis.filename = filename;\n\t\tthis.isEmbedded = isEmbedded;\n\n\t\tif (!isHexKeyWith4Digits(definition.manufacturerId)) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t`device`,\n\t\t\t\t`packages/config/config/devices/${filename}:\nmanufacturer id must be a lowercase hexadecimal number with 4 digits`,\n\t\t\t);\n\t\t}\n\t\tthis.manufacturerId = parseInt(definition.manufacturerId, 16);\n\n\t\tfor (const prop of [\"manufacturer\", \"label\", \"description\"] as const) {\n\t\t\tthis[prop] = parseConditionalPrimitive(\n\t\t\t\tfilename,\n\t\t\t\t\"string\",\n\t\t\t\tprop,\n\t\t\t\tdefinition[prop],\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\t!isArray(definition.devices)\n\t\t\t|| !(definition.devices as any[]).every(\n\t\t\t\t(dev: unknown) =>\n\t\t\t\t\tisObject(dev)\n\t\t\t\t\t&& isHexKeyWith4Digits(dev.productType)\n\t\t\t\t\t&& isHexKeyWith4Digits(dev.productId),\n\t\t\t)\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t`device`,\n\t\t\t\t`packages/config/config/devices/${filename}:\ndevices is malformed (not an object or type/id that is not a lowercase 4-digit hex key)`,\n\t\t\t);\n\t\t}\n\t\tthis.devices = (definition.devices as any[]).map(\n\t\t\t({ productType, productId }) => ({\n\t\t\t\tproductType: parseInt(productType, 16),\n\t\t\t\tproductId: parseInt(productId, 16),\n\t\t\t}),\n\t\t);\n\n\t\tif (\n\t\t\t!isObject(definition.firmwareVersion)\n\t\t\t|| !isFirmwareVersion(definition.firmwareVersion.min)\n\t\t\t|| !isFirmwareVersion(definition.firmwareVersion.max)\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t`device`,\n\t\t\t\t`packages/config/config/devices/${filename}:\nfirmwareVersion is malformed or invalid. Must be x.y or x.y.z where x, y, and z are integers between 0 and 255`,\n\t\t\t);\n\t\t} else {\n\t\t\tconst { min, max } = definition.firmwareVersion;\n\t\t\tif (semverGt(padVersion(min), padVersion(max))) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nfirmwareVersion.min ${min} must not be greater than firmwareVersion.max ${max}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.firmwareVersion = { min, max };\n\t\t}\n\n\t\tif (\n\t\t\tdefinition.preferred != undefined\n\t\t\t&& definition.preferred !== true\n\t\t) {\n\t\t\tthrowInvalidConfig(\n\t\t\t\t`device`,\n\t\t\t\t`packages/config/config/devices/${filename}:\npreferred must be true or omitted`,\n\t\t\t);\n\t\t}\n\t\tthis.preferred = !!definition.preferred;\n\n\t\tif (definition.endpoints != undefined) {\n\t\t\tconst endpoints = new Map<number, ConditionalEndpointConfig>();\n\t\t\tif (!isObject(definition.endpoints)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nendpoints is not an object`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const [key, ep] of Object.entries(definition.endpoints)) {\n\t\t\t\tif (!/^\\d+$/.test(key)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t`device`,\n\t\t\t\t\t\t`packages/config/config/devices/${filename}:\nfound non-numeric endpoint index \"${key}\" in endpoints`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst epIndex = parseInt(key, 10);\n\t\t\t\tendpoints.set(\n\t\t\t\t\tepIndex,\n\t\t\t\t\tnew ConditionalEndpointConfig(this, epIndex, ep as any),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.endpoints = endpoints;\n\t\t}\n\n\t\tif (definition.associations != undefined) {\n\t\t\tconst associations = new Map<\n\t\t\t\tnumber,\n\t\t\t\tConditionalAssociationConfig\n\t\t\t>();\n\t\t\tif (!isObject(definition.associations)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nassociations is not an object`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (\n\t\t\t\tconst [key, assocDefinition] of Object.entries(\n\t\t\t\t\tdefinition.associations,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (!/^[1-9][0-9]*$/.test(key)) {\n\t\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t\t`device`,\n\t\t\t\t\t\t`packages/config/config/devices/${filename}:\nfound non-numeric group id \"${key}\" in associations`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst keyNum = parseInt(key, 10);\n\t\t\t\tassociations.set(\n\t\t\t\t\tkeyNum,\n\t\t\t\t\tnew ConditionalAssociationConfig(\n\t\t\t\t\t\tfilename,\n\t\t\t\t\t\tkeyNum,\n\t\t\t\t\t\tassocDefinition as any,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.associations = associations;\n\t\t}\n\n\t\tif (definition.paramInformation != undefined) {\n\t\t\tthis.paramInformation = parseConditionalParamInformationMap(\n\t\t\t\tdefinition,\n\t\t\t\tthis,\n\t\t\t);\n\t\t}\n\n\t\tif (definition.proprietary != undefined) {\n\t\t\tif (!isObject(definition.proprietary)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nproprietary is not an object`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.proprietary = definition.proprietary;\n\t\t}\n\n\t\tif (definition.compat != undefined) {\n\t\t\tif (\n\t\t\t\tisArray(definition.compat)\n\t\t\t\t&& definition.compat.every((item: any) => isObject(item))\n\t\t\t) {\n\t\t\t\t// Make sure all conditions are valid\n\t\t\t\tfor (const entry of definition.compat) {\n\t\t\t\t\tvalidateCondition(\n\t\t\t\t\t\tfilename,\n\t\t\t\t\t\tentry,\n\t\t\t\t\t\t`At least one entry of compat contains an`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.compat = definition.compat.map(\n\t\t\t\t\t(item: any) => new ConditionalCompatConfig(filename, item),\n\t\t\t\t);\n\t\t\t} else if (isObject(definition.compat)) {\n\t\t\t\tthis.compat = new ConditionalCompatConfig(\n\t\t\t\t\tfilename,\n\t\t\t\t\tdefinition.compat,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\ncompat must be an object or any array of conditional objects`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (definition.metadata != undefined) {\n\t\t\tif (!isObject(definition.metadata)) {\n\t\t\t\tthrowInvalidConfig(\n\t\t\t\t\t`device`,\n\t\t\t\t\t`packages/config/config/devices/${filename}:\nmetadata is not an object`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.metadata = new ConditionalDeviceMetadata(\n\t\t\t\tfilename,\n\t\t\t\tdefinition.metadata,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic readonly filename: string;\n\n\tpublic readonly manufacturer!: ConditionalPrimitive<string>;\n\tpublic readonly manufacturerId: number;\n\tpublic readonly label!: ConditionalPrimitive<string>;\n\tpublic readonly description!: ConditionalPrimitive<string>;\n\tpublic readonly devices: readonly {\n\t\tproductType: number;\n\t\tproductId: number;\n\t}[];\n\tpublic readonly firmwareVersion: FirmwareVersionRange;\n\t/** Mark this configuration as preferred over other config files with an overlapping firmware range */\n\tpublic readonly preferred: boolean;\n\tpublic readonly endpoints?: ReadonlyMap<number, ConditionalEndpointConfig>;\n\tpublic readonly associations?: ReadonlyMap<\n\t\tnumber,\n\t\tConditionalAssociationConfig\n\t>;\n\tpublic readonly paramInformation?: ConditionalParamInfoMap;\n\t/**\n\t * Contains manufacturer-specific support information for the\n\t * ManufacturerProprietary CC\n\t */\n\tpublic readonly proprietary?: Record<string, unknown>;\n\t/** Contains compatibility options */\n\tpublic readonly compat?:\n\t\t| ConditionalCompatConfig\n\t\t| ConditionalCompatConfig[];\n\t/** Contains instructions and other metadata for the device */\n\tpublic readonly metadata?: ConditionalDeviceMetadata;\n\n\t/** Whether this is an embedded configuration or not */\n\tpublic readonly isEmbedded: boolean;\n\n\tpublic evaluate(deviceId?: DeviceID): DeviceConfig {\n\t\treturn new DeviceConfig(\n\t\t\tthis.filename,\n\t\t\tthis.isEmbedded,\n\t\t\tevaluateDeep(this.manufacturer, deviceId),\n\t\t\tthis.manufacturerId,\n\t\t\tevaluateDeep(this.label, deviceId),\n\t\t\tevaluateDeep(this.description, deviceId),\n\t\t\tthis.devices,\n\t\t\tthis.firmwareVersion,\n\t\t\tthis.preferred,\n\t\t\tevaluateDeep(this.endpoints, deviceId),\n\t\t\tevaluateDeep(this.associations, deviceId),\n\t\t\tevaluateDeep(this.paramInformation, deviceId),\n\t\t\tthis.proprietary,\n\t\t\tevaluateDeep(this.compat, deviceId),\n\t\t\tevaluateDeep(this.metadata, deviceId),\n\t\t);\n\t}\n}\n\nexport class DeviceConfig {\n\tpublic static async from(\n\t\tfs: ReadFileSystemInfo & ReadFile,\n\t\tfilename: string,\n\t\tisEmbedded: boolean,\n\t\toptions: {\n\t\t\trootDir: string;\n\t\t\tfallbackDirs?: string[];\n\t\t\trelative?: boolean;\n\t\t\tdeviceId?: DeviceID;\n\t\t},\n\t): Promise<DeviceConfig> {\n\t\tconst ret = await ConditionalDeviceConfig.from(\n\t\t\tfs,\n\t\t\tfilename,\n\t\t\tisEmbedded,\n\t\t\toptions,\n\t\t);\n\t\treturn ret.evaluate(options.deviceId);\n\t}\n\n\tpublic constructor(\n\t\tfilename: string,\n\t\tisEmbedded: boolean,\n\t\tmanufacturer: string,\n\t\tmanufacturerId: number,\n\t\tlabel: string,\n\t\tdescription: string,\n\t\tdevices: readonly {\n\t\t\tproductType: number;\n\t\t\tproductId: number;\n\t\t}[],\n\t\tfirmwareVersion: FirmwareVersionRange,\n\t\tpreferred: boolean,\n\t\tendpoints?: ReadonlyMap<number, EndpointConfig>,\n\t\tassociations?: ReadonlyMap<number, AssociationConfig>,\n\t\tparamInformation?: ParamInfoMap,\n\t\tproprietary?: Record<string, unknown>,\n\t\tcompat?: CompatConfig,\n\t\tmetadata?: DeviceMetadata,\n\t) {\n\t\tthis.filename = filename;\n\t\tthis.isEmbedded = isEmbedded;\n\t\tthis.manufacturer = manufacturer;\n\t\tthis.manufacturerId = manufacturerId;\n\t\tthis.label = label;\n\t\tthis.description = description;\n\t\tthis.devices = devices;\n\t\tthis.firmwareVersion = firmwareVersion;\n\t\tthis.preferred = preferred;\n\t\tthis.endpoints = endpoints;\n\t\tthis.associations = associations;\n\t\tthis.paramInformation = paramInformation;\n\t\tthis.proprietary = proprietary;\n\t\tthis.compat = compat;\n\t\tthis.metadata = metadata;\n\t}\n\n\tpublic readonly filename: string;\n\t/** Whether this is an embedded configuration or not */\n\tpublic readonly isEmbedded: boolean;\n\tpublic readonly manufacturer: string;\n\tpublic readonly manufacturerId: number;\n\tpublic readonly label: string;\n\tpublic readonly description: string;\n\tpublic readonly devices: readonly {\n\t\tproductType: number;\n\t\tproductId: number;\n\t}[];\n\tpublic readonly firmwareVersion: FirmwareVersionRange;\n\t/** Mark this configuration as preferred over other config files with an overlapping firmware range */\n\tpublic readonly preferred: boolean;\n\tpublic readonly endpoints?: ReadonlyMap<number, EndpointConfig>;\n\tpublic readonly associations?: ReadonlyMap<number, AssociationConfig>;\n\tpublic readonly paramInformation?: ParamInfoMap;\n\t/**\n\t * Contains manufacturer-specific support information for the\n\t * ManufacturerProprietary CC\n\t */\n\tpublic readonly proprietary?: Record<string, unknown>;\n\t/** Contains compatibility options */\n\tpublic readonly compat?: CompatConfig;\n\t/** Contains instructions and other metadata for the device */\n\tpublic readonly metadata?: DeviceMetadata;\n\n\t/** Returns the association config for a given endpoint */\n\tpublic getAssociationConfigForEndpoint(\n\t\tendpointIndex: number,\n\t\tgroup: number,\n\t): AssociationConfig | undefined {\n\t\tif (endpointIndex === 0) {\n\t\t\t// The root endpoint's associations may be configured separately or as part of \"endpoints\"\n\t\t\treturn (\n\t\t\t\tthis.associations?.get(group)\n\t\t\t\t\t?? this.endpoints?.get(0)?.associations?.get(group)\n\t\t\t);\n\t\t} else {\n\t\t\t// The other endpoints can only have a configuration as part of \"endpoints\"\n\t\t\treturn this.endpoints?.get(endpointIndex)?.associations?.get(group);\n\t\t}\n\t}\n\n\tprivate getHashable(): Uint8Array {\n\t\t// We only need to compare the information that is persisted elsewhere:\n\t\t// - config parameters\n\t\t// - functional association settings\n\t\t// - CC-related compat flags\n\n\t\tlet hashable: Record<string, any> = {\n\t\t\t// endpoints: {\n\t\t\t// \tassociations: {},\n\t\t\t// \tparamInformation: []\n\t\t\t// },\n\t\t\t// proprietary: {},\n\t\t\t// compat: {},\n\t\t};\n\n\t\tconst sortObject = (obj: Record<string, any>) => {\n\t\t\tconst ret: Record<string, any> = {};\n\t\t\tfor (const key of Object.keys(obj).sort()) {\n\t\t\t\tret[key] = obj[key];\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\n\t\tconst cloneAssociationConfig = (a: AssociationConfig) => {\n\t\t\treturn sortObject(\n\t\t\t\tpick(a, [\"maxNodes\", \"multiChannel\", \"isLifeline\"]),\n\t\t\t);\n\t\t};\n\t\tconst cloneAssociationMap = (\n\t\t\ttarget: Record<string, any>,\n\t\t\tmap: ReadonlyMap<number, AssociationConfig> | undefined,\n\t\t) => {\n\t\t\tif (!map || !map.size) return;\n\t\t\ttarget.associations = {};\n\t\t\tfor (const [key, value] of map) {\n\t\t\t\ttarget.associations[key] = cloneAssociationConfig(value);\n\t\t\t}\n\t\t\ttarget.associations = sortObject(target.associations);\n\t\t};\n\n\t\tconst cloneParamInformationMap = (\n\t\t\ttarget: Record<string, any>,\n\t\t\tmap: ParamInfoMap | undefined,\n\t\t) => {\n\t\t\tif (!map || !map.size) return;\n\t\t\tconst getParamKey = (param: ParamInformation) =>\n\t\t\t\t`${param.parameterNumber}${\n\t\t\t\t\tparam.valueBitMask ? `[${num2hex(param.valueBitMask)}]` : \"\"\n\t\t\t\t}`;\n\t\t\ttarget.paramInformation = [...map.values()].sort((a, b) =>\n\t\t\t\tgetParamKey(a).localeCompare(getParamKey(b))\n\t\t\t);\n\t\t};\n\n\t\t// Clone associations and param information on the root (ep 0) and endpoints\n\t\t{\n\t\t\tlet ep0: Record<string, any> = {};\n\t\t\tcloneAssociationMap(ep0, this.associations);\n\t\t\tcloneParamInformationMap(ep0, this.paramInformation);\n\t\t\tep0 = sortObject(ep0);\n\n\t\t\tif (Object.keys(ep0).length > 0) {\n\t\t\t\thashable.endpoints ??= {};\n\t\t\t\thashable.endpoints[0] = ep0;\n\t\t\t}\n\t\t}\n\n\t\tif (this.endpoints) {\n\t\t\tfor (const [index, endpoint] of this.endpoints) {\n\t\t\t\tlet ep: Record<string, any> = {};\n\n\t\t\t\tcloneAssociationMap(ep, endpoint.associations);\n\t\t\t\tcloneParamInformationMap(ep, endpoint.paramInformation);\n\n\t\t\t\tep = sortObject(ep);\n\n\t\t\t\tif (Object.keys(ep).length > 0) {\n\t\t\t\t\thashable.endpoints ??= {};\n\t\t\t\t\thashable.endpoints[index] = ep;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Clone proprietary config\n\t\tif (this.proprietary && Object.keys(this.proprietary).length > 0) {\n\t\t\thashable.proprietary = sortObject({ ...this.proprietary });\n\t\t}\n\n\t\t// Clone relevant compat flags\n\t\tif (this.compat) {\n\t\t\tlet c: Record<string, any> = {};\n\n\t\t\t// Copy some simple flags over\n\t\t\tfor (\n\t\t\t\tconst prop of [\n\t\t\t\t\t\"forceSceneControllerGroupCount\",\n\t\t\t\t\t\"mapRootReportsToEndpoint\",\n\t\t\t\t\t\"mapBasicSet\",\n\t\t\t\t\t\"preserveRootApplicationCCValueIDs\",\n\t\t\t\t\t\"preserveEndpoints\",\n\t\t\t\t\t\"removeEndpoints\",\n\t\t\t\t\t\"treatMultilevelSwitchSetAsEvent\",\n\t\t\t\t] as const\n\t\t\t) {\n\t\t\t\tif (this.compat[prop] != undefined) {\n\t\t\t\t\tc[prop] = this.compat[prop];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy other, more complex flags\n\t\t\tif (this.compat.overrideQueries) {\n\t\t\t\tc.overrideQueries = Object.fromEntries(\n\t\t\t\t\tthis.compat.overrideQueries[\"overrides\"],\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.compat.addCCs) {\n\t\t\t\tc.addCCs = Object.fromEntries(\n\t\t\t\t\t[...this.compat.addCCs].map(([ccId, def]) => [\n\t\t\t\t\t\tccId,\n\t\t\t\t\t\tObject.fromEntries(def.endpoints),\n\t\t\t\t\t]),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.compat.removeCCs) {\n\t\t\t\tc.removeCCs = Object.fromEntries(this.compat.removeCCs);\n\t\t\t}\n\t\t\tif (this.compat.treatSetAsReport) {\n\t\t\t\tc.treatSetAsReport = [...this.compat.treatSetAsReport].sort();\n\t\t\t}\n\n\t\t\tc = sortObject(c);\n\t\t\tif (Object.keys(c).length > 0) {\n\t\t\t\thashable.compat = c;\n\t\t\t}\n\t\t}\n\n\t\thashable = sortObject(hashable);\n\n\t\treturn Bytes.from(JSON.stringify(hashable), \"utf8\");\n\t}\n\n\t/**\n\t * Returns a hash code that can be used to check whether a device config has changed enough to require a re-interview.\n\t */\n\tpublic getHash(\n\t\talgorithm: \"md5\" | \"sha-256\" = \"sha-256\",\n\t): Promise<Uint8Array> {\n\t\t// Figure out what to hash\n\t\tconst buffer = this.getHashable();\n\n\t\t// And create a hash from it. This does not need to be cryptographically secure, just good enough to detect changes.\n\t\treturn digest(algorithm, buffer);\n\t}\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["path", "configDir", "JSON5", "semverGt"]
7
7
  }
@@ -1,3 +1,22 @@
1
1
  {
2
- "type": "commonjs"
2
+ "type": "commonjs",
3
+ "sideEffects": false,
4
+ "imports": {
5
+ "#default_bindings/fs": {
6
+ "@@dev": "@zwave-js/core/bindings/fs/node",
7
+ "node": "@zwave-js/core/bindings/fs/node",
8
+ "default": "@zwave-js/core/bindings/fs/stub"
9
+ },
10
+ "#default_bindings/log": {
11
+ "@@dev": "@zwave-js/core/bindings/log/node",
12
+ "node": "@zwave-js/core/bindings/log/node",
13
+ "default": "@zwave-js/core/bindings/log/stub"
14
+ },
15
+ "#config_dir": {
16
+ "@@dev": "../../src/configDir.node.ts",
17
+ "browser": "../esm/configDir.browser.js",
18
+ "import": "../esm/configDir.node.js",
19
+ "require": "./configDir.node.js"
20
+ }
21
+ }
3
22
  }
@@ -1,8 +1,6 @@
1
1
  import type { CopyFile, ManageDirectory, ReadFile, ReadFileSystemInfo, WriteFile } from "@zwave-js/shared/bindings";
2
2
  import type { ConfigLogger } from "./Logger.js";
3
3
  import type { DeviceConfigIndexEntry } from "./devices/DeviceConfig.js";
4
- /** The absolute path of the embedded configuration directory */
5
- export declare const configDir: string;
6
4
  /** The (optional) absolute path of an external configuration directory */
7
5
  export declare function getExternalConfigDirEnvVariable(): string | undefined;
8
6
  export declare function getDeviceEntryPredicate(manufacturerId: number, productType: number, productId: number, firmwareVersion?: string): (entry: DeviceConfigIndexEntry) => boolean;
@@ -29,17 +29,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
29
29
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
30
  var utils_exports = {};
31
31
  __export(utils_exports, {
32
- configDir: () => configDir,
33
32
  getDeviceEntryPredicate: () => getDeviceEntryPredicate,
34
33
  getExternalConfigDirEnvVariable: () => getExternalConfigDirEnvVariable,
35
34
  syncExternalConfigDir: () => syncExternalConfigDir,
36
35
  versionInRange: () => versionInRange
37
36
  });
38
37
  module.exports = __toCommonJS(utils_exports);
39
- var __import_meta_url = typeof document === "undefined" ? new (require("url".replace("", ""))).URL("file:" + __filename).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
40
- const import_meta = {};
38
+ var import_config_dir = require("#config_dir");
41
39
  var import_shared = require("@zwave-js/shared");
42
- var import_node_url = require("node:url");
43
40
  var import_pathe = __toESM(require("pathe"), 1);
44
41
  var import_gte = __toESM(require("semver/functions/gte.js"), 1);
45
42
  var import_inc = __toESM(require("semver/functions/inc.js"), 1);
@@ -47,7 +44,6 @@ var import_lte = __toESM(require("semver/functions/lte.js"), 1);
47
44
  var import_satisfies = __toESM(require("semver/functions/satisfies.js"), 1);
48
45
  var import_valid = __toESM(require("semver/functions/valid.js"), 1);
49
46
  var import_version = require("./_version.js");
50
- const configDir = __import_meta_url.startsWith("file:") ? import_pathe.default.join(import_pathe.default.dirname((0, import_node_url.fileURLToPath)(__import_meta_url)), __import_meta_url.endsWith("src/utils.ts") ? ".." : "../..", "config") : import_meta.resolve("/config");
51
47
  function getExternalConfigDirEnvVariable() {
52
48
  return (0, import_shared.getenv)("ZWAVEJS_EXTERNAL_CONFIG");
53
49
  }
@@ -99,7 +95,7 @@ async function syncExternalConfigDir(fs, extConfigDir, logger) {
99
95
  logger.print(`Synchronizing external config dir ${extConfigDir}...`);
100
96
  await fs.deleteDir(extConfigDir);
101
97
  await fs.ensureDir(extConfigDir);
102
- await (0, import_shared.copyFilesRecursive)(fs, configDir, extConfigDir, (src) => src.endsWith(".json"));
98
+ await (0, import_shared.copyFilesRecursive)(fs, import_config_dir.configDir, extConfigDir, (src) => src.endsWith(".json"));
103
99
  await (0, import_shared.writeTextFile)(fs, externalVersionFilename, currentVersion, "utf8");
104
100
  externalVersion = currentVersion;
105
101
  } catch {
@@ -115,7 +111,6 @@ function versionInRange(version, min, max) {
115
111
  __name(versionInRange, "versionInRange");
116
112
  // Annotate the CommonJS export names for ESM import in node:
117
113
  0 && (module.exports = {
118
- configDir,
119
114
  getDeviceEntryPredicate,
120
115
  getExternalConfigDirEnvVariable,
121
116
  syncExternalConfigDir,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/utils.ts", "../../../../node_modules/.store/@alcalzone-esm2cjs-npm-1.4.1-18ec443a54/package/shims/import.meta.url/shim.js"],
4
- "sourcesContent": ["import {\n\tcopyFilesRecursive,\n\tformatId,\n\tgetenv,\n\tpadVersion,\n\treadTextFile,\n\twriteTextFile,\n} from \"@zwave-js/shared\";\nimport type {\n\tCopyFile,\n\tManageDirectory,\n\tReadFile,\n\tReadFileSystemInfo,\n\tWriteFile,\n} from \"@zwave-js/shared/bindings\";\nimport { fileURLToPath } from \"node:url\";\nimport path from \"pathe\";\nimport semverGte from \"semver/functions/gte.js\";\nimport semverInc from \"semver/functions/inc.js\";\nimport semverLte from \"semver/functions/lte.js\";\nimport semverSatisfies from \"semver/functions/satisfies.js\";\nimport semverValid from \"semver/functions/valid.js\";\nimport type { ConfigLogger } from \"./Logger.js\";\nimport { PACKAGE_VERSION } from \"./_version.js\";\nimport type { DeviceConfigIndexEntry } from \"./devices/DeviceConfig.js\";\n\n/** The absolute path of the embedded configuration directory */\nexport const configDir = import.meta.url.startsWith(\"file:\")\n\t? path.join(\n\t\tpath.dirname(fileURLToPath(import.meta.url)),\n\t\timport.meta.url.endsWith(\"src/utils.ts\")\n\t\t\t? \"..\"\n\t\t\t: \"../..\",\n\t\t\"config\",\n\t)\n\t: import.meta.resolve(\"/config\");\n\n/** The (optional) absolute path of an external configuration directory */\nexport function getExternalConfigDirEnvVariable(): string | undefined {\n\treturn getenv(\"ZWAVEJS_EXTERNAL_CONFIG\");\n}\n\nexport function getDeviceEntryPredicate(\n\tmanufacturerId: number,\n\tproductType: number,\n\tproductId: number,\n\tfirmwareVersion?: string,\n): (entry: DeviceConfigIndexEntry) => boolean {\n\treturn (entry) => {\n\t\tif (entry.manufacturerId !== formatId(manufacturerId)) return false;\n\t\tif (entry.productType !== formatId(productType)) return false;\n\t\tif (entry.productId !== formatId(productId)) return false;\n\t\tif (firmwareVersion != undefined) {\n\t\t\t// A firmware version was given, only look at files with a matching firmware version\n\t\t\treturn (\n\t\t\t\tsemverLte(\n\t\t\t\t\tpadVersion(entry.firmwareVersion.min),\n\t\t\t\t\tpadVersion(firmwareVersion),\n\t\t\t\t)\n\t\t\t\t&& semverGte(\n\t\t\t\t\tpadVersion(entry.firmwareVersion.max),\n\t\t\t\t\tpadVersion(firmwareVersion),\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t};\n}\n\nexport type SyncExternalConfigDirResult =\n\t| {\n\t\tsuccess: false;\n\t}\n\t| {\n\t\tsuccess: true;\n\t\tversion: string;\n\t};\n\n/**\n * Synchronizes or updates the external config directory and returns whether the directory is in a state that can be used\n */\nexport async function syncExternalConfigDir(\n\tfs: ManageDirectory & ReadFileSystemInfo & ReadFile & CopyFile & WriteFile,\n\textConfigDir: string,\n\tlogger: ConfigLogger,\n): Promise<SyncExternalConfigDirResult> {\n\tif (!extConfigDir) return { success: false };\n\n\t// Make sure the config dir exists\n\ttry {\n\t\tawait fs.ensureDir(extConfigDir);\n\t} catch {\n\t\tlogger.print(\n\t\t\t`Synchronizing external config dir failed - directory could not be created`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn { success: false };\n\t}\n\n\tconst externalVersionFilename = path.join(extConfigDir, \"version\");\n\tconst currentVersion = PACKAGE_VERSION;\n\tconst supportedRange = `>=${currentVersion} <${\n\t\tsemverInc(\n\t\t\tcurrentVersion,\n\t\t\t\"patch\",\n\t\t)\n\t}`;\n\n\t// We remember the config version that was copied there in a file called \"version\"\n\t// If that either...\n\t// ...isn't there,\n\t// ...can't be read,\n\t// ...doesn't contain a matching version (>= current && nightly)\n\t// wipe the external config dir and recreate it\n\tlet wipe = false;\n\tlet externalVersion: string | undefined;\n\ttry {\n\t\texternalVersion = await readTextFile(\n\t\t\tfs,\n\t\t\texternalVersionFilename,\n\t\t\t\"utf8\",\n\t\t);\n\t\tif (!semverValid(externalVersion)) {\n\t\t\twipe = true;\n\t\t} else if (\n\t\t\t!semverSatisfies(externalVersion, supportedRange, {\n\t\t\t\tincludePrerelease: true,\n\t\t\t})\n\t\t) {\n\t\t\twipe = true;\n\t\t}\n\t} catch {\n\t\twipe = true;\n\t}\n\n\t// Nothing to wipe, the external dir is good to go\n\tif (!wipe) return { success: true, version: externalVersion! };\n\n\t// Wipe and override the external dir\n\ttry {\n\t\tlogger.print(`Synchronizing external config dir ${extConfigDir}...`);\n\t\tawait fs.deleteDir(extConfigDir);\n\t\tawait fs.ensureDir(extConfigDir);\n\t\tawait copyFilesRecursive(\n\t\t\tfs,\n\t\t\tconfigDir,\n\t\t\textConfigDir,\n\t\t\t(src) => src.endsWith(\".json\"),\n\t\t);\n\t\tawait writeTextFile(\n\t\t\tfs,\n\t\t\texternalVersionFilename,\n\t\t\tcurrentVersion,\n\t\t\t\"utf8\",\n\t\t);\n\t\texternalVersion = currentVersion;\n\t} catch {\n\t\t// Something went wrong\n\t\tlogger.print(\n\t\t\t`Synchronizing external config dir failed - using embedded config`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn { success: false };\n\t}\n\n\treturn { success: true, version: externalVersion };\n}\n\nexport function versionInRange(\n\tversion: string,\n\tmin: string,\n\tmax: string,\n): boolean {\n\treturn (\n\t\tsemverGte(padVersion(version), padVersion(min))\n\t\t&& semverLte(padVersion(version), padVersion(max))\n\t);\n}\n", "export const __import_meta_url =\n typeof document === 'undefined' ? new (require('url'.replace('', '')).URL)('file:' + __filename).href :\n (document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href)\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAO,IAAM,oBACX,OAAO,aAAa,cAAc,KAAK,QAAQ,MAAM,QAAQ,IAAI,EAAE,CAAC,GAAE,IAAK,UAAU,UAAU,EAAE,OAC9F,SAAS,iBAAiB,SAAS,cAAc,OAAO,IAAI,IAAI,WAAW,SAAS,OAAO,EAAE;ADFlG;AAAA,oBAOO;AAQP,sBAA8B;AAC9B,mBAAiB;AACjB,iBAAsB;AACtB,iBAAsB;AACtB,iBAAsB;AACtB,uBAA4B;AAC5B,mBAAwB;AAExB,qBAAgC;AAIzB,MAAM,YAAY,kBAAgB,WAAW,OAAO,IACxD,aAAAA,QAAK,KACN,aAAAA,QAAK,YAAQ,+BAAc,iBAAe,CAAC,GAC3C,kBAAgB,SAAS,cAAc,IACpC,OACA,SACH,QAAQ,IAEP,YAAY,QAAQ,SAAS;AAG1B,SAAU,kCAA+B;AAC9C,aAAO,sBAAO,yBAAyB;AACxC;AAFgB;AAIV,SAAU,wBACf,gBACA,aACA,WACA,iBAAwB;AAExB,SAAO,CAAC,UAAS;AAChB,QAAI,MAAM,uBAAmB,wBAAS,cAAc;AAAG,aAAO;AAC9D,QAAI,MAAM,oBAAgB,wBAAS,WAAW;AAAG,aAAO;AACxD,QAAI,MAAM,kBAAc,wBAAS,SAAS;AAAG,aAAO;AACpD,QAAI,mBAAmB,QAAW;AAEjC,iBACC,WAAAC,aACC,0BAAW,MAAM,gBAAgB,GAAG,OACpC,0BAAW,eAAe,CAAC,SAEzB,WAAAC,aACF,0BAAW,MAAM,gBAAgB,GAAG,OACpC,0BAAW,eAAe,CAAC;IAG9B;AACA,WAAO;EACR;AACD;AAzBgB;AAuChB,eAAsB,sBACrB,IACA,cACA,QAAoB;AAEpB,MAAI,CAAC;AAAc,WAAO,EAAE,SAAS,MAAK;AAG1C,MAAI;AACH,UAAM,GAAG,UAAU,YAAY;EAChC,QAAQ;AACP,WAAO,MACN,6EACA,OAAO;AAER,WAAO,EAAE,SAAS,MAAK;EACxB;AAEA,QAAM,0BAA0B,aAAAF,QAAK,KAAK,cAAc,SAAS;AACjE,QAAM,iBAAiB;AACvB,QAAM,iBAAiB,KAAK,cAAc,SACzC,WAAAG,SACC,gBACA,OAAO,CAET;AAQA,MAAI,OAAO;AACX,MAAI;AACJ,MAAI;AACH,sBAAkB,UAAM,4BACvB,IACA,yBACA,MAAM;AAEP,QAAI,KAAC,aAAAC,SAAY,eAAe,GAAG;AAClC,aAAO;IACR,WACC,KAAC,iBAAAC,SAAgB,iBAAiB,gBAAgB;MACjD,mBAAmB;KACnB,GACA;AACD,aAAO;IACR;EACD,QAAQ;AACP,WAAO;EACR;AAGA,MAAI,CAAC;AAAM,WAAO,EAAE,SAAS,MAAM,SAAS,gBAAgB;AAG5D,MAAI;AACH,WAAO,MAAM,qCAAqC,YAAY,KAAK;AACnE,UAAM,GAAG,UAAU,YAAY;AAC/B,UAAM,GAAG,UAAU,YAAY;AAC/B,cAAM,kCACL,IACA,WACA,cACA,CAAC,QAAQ,IAAI,SAAS,OAAO,CAAC;AAE/B,cAAM,6BACL,IACA,yBACA,gBACA,MAAM;AAEP,sBAAkB;EACnB,QAAQ;AAEP,WAAO,MACN,oEACA,OAAO;AAER,WAAO,EAAE,SAAS,MAAK;EACxB;AAEA,SAAO,EAAE,SAAS,MAAM,SAAS,gBAAe;AACjD;AArFsB;AAuFhB,SAAU,eACf,SACA,KACA,KAAW;AAEX,aACC,WAAAH,aAAU,0BAAW,OAAO,OAAG,0BAAW,GAAG,CAAC,SAC3C,WAAAD,aAAU,0BAAW,OAAO,OAAG,0BAAW,GAAG,CAAC;AAEnD;AATgB;",
6
- "names": ["path", "semverLte", "semverGte", "semverInc", "semverValid", "semverSatisfies"]
3
+ "sources": ["../../src/utils.ts"],
4
+ "sourcesContent": ["import { configDir } from \"#config_dir\";\nimport {\n\tcopyFilesRecursive,\n\tformatId,\n\tgetenv,\n\tpadVersion,\n\treadTextFile,\n\twriteTextFile,\n} from \"@zwave-js/shared\";\nimport type {\n\tCopyFile,\n\tManageDirectory,\n\tReadFile,\n\tReadFileSystemInfo,\n\tWriteFile,\n} from \"@zwave-js/shared/bindings\";\nimport path from \"pathe\";\nimport semverGte from \"semver/functions/gte.js\";\nimport semverInc from \"semver/functions/inc.js\";\nimport semverLte from \"semver/functions/lte.js\";\nimport semverSatisfies from \"semver/functions/satisfies.js\";\nimport semverValid from \"semver/functions/valid.js\";\nimport type { ConfigLogger } from \"./Logger.js\";\nimport { PACKAGE_VERSION } from \"./_version.js\";\nimport type { DeviceConfigIndexEntry } from \"./devices/DeviceConfig.js\";\n\n/** The (optional) absolute path of an external configuration directory */\nexport function getExternalConfigDirEnvVariable(): string | undefined {\n\treturn getenv(\"ZWAVEJS_EXTERNAL_CONFIG\");\n}\n\nexport function getDeviceEntryPredicate(\n\tmanufacturerId: number,\n\tproductType: number,\n\tproductId: number,\n\tfirmwareVersion?: string,\n): (entry: DeviceConfigIndexEntry) => boolean {\n\treturn (entry) => {\n\t\tif (entry.manufacturerId !== formatId(manufacturerId)) return false;\n\t\tif (entry.productType !== formatId(productType)) return false;\n\t\tif (entry.productId !== formatId(productId)) return false;\n\t\tif (firmwareVersion != undefined) {\n\t\t\t// A firmware version was given, only look at files with a matching firmware version\n\t\t\treturn (\n\t\t\t\tsemverLte(\n\t\t\t\t\tpadVersion(entry.firmwareVersion.min),\n\t\t\t\t\tpadVersion(firmwareVersion),\n\t\t\t\t)\n\t\t\t\t&& semverGte(\n\t\t\t\t\tpadVersion(entry.firmwareVersion.max),\n\t\t\t\t\tpadVersion(firmwareVersion),\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t};\n}\n\nexport type SyncExternalConfigDirResult =\n\t| {\n\t\tsuccess: false;\n\t}\n\t| {\n\t\tsuccess: true;\n\t\tversion: string;\n\t};\n\n/**\n * Synchronizes or updates the external config directory and returns whether the directory is in a state that can be used\n */\nexport async function syncExternalConfigDir(\n\tfs: ManageDirectory & ReadFileSystemInfo & ReadFile & CopyFile & WriteFile,\n\textConfigDir: string,\n\tlogger: ConfigLogger,\n): Promise<SyncExternalConfigDirResult> {\n\tif (!extConfigDir) return { success: false };\n\n\t// Make sure the config dir exists\n\ttry {\n\t\tawait fs.ensureDir(extConfigDir);\n\t} catch {\n\t\tlogger.print(\n\t\t\t`Synchronizing external config dir failed - directory could not be created`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn { success: false };\n\t}\n\n\tconst externalVersionFilename = path.join(extConfigDir, \"version\");\n\tconst currentVersion = PACKAGE_VERSION;\n\tconst supportedRange = `>=${currentVersion} <${\n\t\tsemverInc(\n\t\t\tcurrentVersion,\n\t\t\t\"patch\",\n\t\t)\n\t}`;\n\n\t// We remember the config version that was copied there in a file called \"version\"\n\t// If that either...\n\t// ...isn't there,\n\t// ...can't be read,\n\t// ...doesn't contain a matching version (>= current && nightly)\n\t// wipe the external config dir and recreate it\n\tlet wipe = false;\n\tlet externalVersion: string | undefined;\n\ttry {\n\t\texternalVersion = await readTextFile(\n\t\t\tfs,\n\t\t\texternalVersionFilename,\n\t\t\t\"utf8\",\n\t\t);\n\t\tif (!semverValid(externalVersion)) {\n\t\t\twipe = true;\n\t\t} else if (\n\t\t\t!semverSatisfies(externalVersion, supportedRange, {\n\t\t\t\tincludePrerelease: true,\n\t\t\t})\n\t\t) {\n\t\t\twipe = true;\n\t\t}\n\t} catch {\n\t\twipe = true;\n\t}\n\n\t// Nothing to wipe, the external dir is good to go\n\tif (!wipe) return { success: true, version: externalVersion! };\n\n\t// Wipe and override the external dir\n\ttry {\n\t\tlogger.print(`Synchronizing external config dir ${extConfigDir}...`);\n\t\tawait fs.deleteDir(extConfigDir);\n\t\tawait fs.ensureDir(extConfigDir);\n\t\tawait copyFilesRecursive(\n\t\t\tfs,\n\t\t\tconfigDir,\n\t\t\textConfigDir,\n\t\t\t(src) => src.endsWith(\".json\"),\n\t\t);\n\t\tawait writeTextFile(\n\t\t\tfs,\n\t\t\texternalVersionFilename,\n\t\t\tcurrentVersion,\n\t\t\t\"utf8\",\n\t\t);\n\t\texternalVersion = currentVersion;\n\t} catch {\n\t\t// Something went wrong\n\t\tlogger.print(\n\t\t\t`Synchronizing external config dir failed - using embedded config`,\n\t\t\t\"error\",\n\t\t);\n\t\treturn { success: false };\n\t}\n\n\treturn { success: true, version: externalVersion };\n}\n\nexport function versionInRange(\n\tversion: string,\n\tmin: string,\n\tmax: string,\n): boolean {\n\treturn (\n\t\tsemverGte(padVersion(version), padVersion(min))\n\t\t&& semverLte(padVersion(version), padVersion(max))\n\t);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAAA,wBAA0B;AAC1B,oBAOO;AAQP,mBAAiB;AACjB,iBAAsB;AACtB,iBAAsB;AACtB,iBAAsB;AACtB,uBAA4B;AAC5B,mBAAwB;AAExB,qBAAgC;AAI1B,SAAU,kCAA+B;AAC9C,aAAO,sBAAO,yBAAyB;AACxC;AAFgB;AAIV,SAAU,wBACf,gBACA,aACA,WACA,iBAAwB;AAExB,SAAO,CAAC,UAAS;AAChB,QAAI,MAAM,uBAAmB,wBAAS,cAAc;AAAG,aAAO;AAC9D,QAAI,MAAM,oBAAgB,wBAAS,WAAW;AAAG,aAAO;AACxD,QAAI,MAAM,kBAAc,wBAAS,SAAS;AAAG,aAAO;AACpD,QAAI,mBAAmB,QAAW;AAEjC,iBACC,WAAAA,aACC,0BAAW,MAAM,gBAAgB,GAAG,OACpC,0BAAW,eAAe,CAAC,SAEzB,WAAAC,aACF,0BAAW,MAAM,gBAAgB,GAAG,OACpC,0BAAW,eAAe,CAAC;IAG9B;AACA,WAAO;EACR;AACD;AAzBgB;AAuChB,eAAsB,sBACrB,IACA,cACA,QAAoB;AAEpB,MAAI,CAAC;AAAc,WAAO,EAAE,SAAS,MAAK;AAG1C,MAAI;AACH,UAAM,GAAG,UAAU,YAAY;EAChC,QAAQ;AACP,WAAO,MACN,6EACA,OAAO;AAER,WAAO,EAAE,SAAS,MAAK;EACxB;AAEA,QAAM,0BAA0B,aAAAC,QAAK,KAAK,cAAc,SAAS;AACjE,QAAM,iBAAiB;AACvB,QAAM,iBAAiB,KAAK,cAAc,SACzC,WAAAC,SACC,gBACA,OAAO,CAET;AAQA,MAAI,OAAO;AACX,MAAI;AACJ,MAAI;AACH,sBAAkB,UAAM,4BACvB,IACA,yBACA,MAAM;AAEP,QAAI,KAAC,aAAAC,SAAY,eAAe,GAAG;AAClC,aAAO;IACR,WACC,KAAC,iBAAAC,SAAgB,iBAAiB,gBAAgB;MACjD,mBAAmB;KACnB,GACA;AACD,aAAO;IACR;EACD,QAAQ;AACP,WAAO;EACR;AAGA,MAAI,CAAC;AAAM,WAAO,EAAE,SAAS,MAAM,SAAS,gBAAgB;AAG5D,MAAI;AACH,WAAO,MAAM,qCAAqC,YAAY,KAAK;AACnE,UAAM,GAAG,UAAU,YAAY;AAC/B,UAAM,GAAG,UAAU,YAAY;AAC/B,cAAM,kCACL,IACA,6BACA,cACA,CAAC,QAAQ,IAAI,SAAS,OAAO,CAAC;AAE/B,cAAM,6BACL,IACA,yBACA,gBACA,MAAM;AAEP,sBAAkB;EACnB,QAAQ;AAEP,WAAO,MACN,oEACA,OAAO;AAER,WAAO,EAAE,SAAS,MAAK;EACxB;AAEA,SAAO,EAAE,SAAS,MAAM,SAAS,gBAAe;AACjD;AArFsB;AAuFhB,SAAU,eACf,SACA,KACA,KAAW;AAEX,aACC,WAAAJ,aAAU,0BAAW,OAAO,OAAG,0BAAW,GAAG,CAAC,SAC3C,WAAAD,aAAU,0BAAW,OAAO,OAAG,0BAAW,GAAG,CAAC;AAEnD;AATgB;",
6
+ "names": ["semverLte", "semverGte", "path", "semverInc", "semverValid", "semverSatisfies"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/ConfigManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,YAAY,EAIjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D,OAAO,EACN,KAAK,gBAAgB,EAGrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,uBAAuB,EACvB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAK9B,MAAM,2BAA2B,CAAC;AASnC,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,aAAa;gBACN,OAAO,GAAE,oBAAyB;IAUrD,OAAO,CAAC,GAAG,CAAyB;YACtB,KAAK;IAKnB,OAAO,CAAC,cAAc,CAAS;IAC/B,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,OAAO,CAA2B;YAC5B,SAAS;IAavB,OAAO,CAAC,cAAc,CAA+B;IACrD,IAAW,aAAa,IAAI,gBAAgB,CAQ3C;IAED,OAAO,CAAC,uBAAuB,CAAqB;IACpD,OAAO,CAAC,uBAAuB,CAAqB;IACpD,IAAW,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAGjD;IAED,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,aAAa,CAAwC;IAE7D,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAEY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BxB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBlC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/C;;;OAGG;IACI,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAWrE;;;;OAIG;IACI,eAAe,CACrB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACtB,IAAI;IAWM,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAqDtC,QAAQ,IAAI,iBAAiB,GAAG,SAAS;IAInC,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9C,gBAAgB,IAAI,yBAAyB,GAAG,SAAS;IAIhE;;;;;;;OAOG;IACU,8BAA8B,CAC1C,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAgE/C;;;;;;;OAOG;IACU,YAAY,CACxB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;CAcpC"}
1
+ {"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/ConfigManager.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,YAAY,EAIjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D,OAAO,EACN,KAAK,gBAAgB,EAGrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,uBAAuB,EACvB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAK9B,MAAM,2BAA2B,CAAC;AAQnC,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,aAAa;gBACN,OAAO,GAAE,oBAAyB;IAUrD,OAAO,CAAC,GAAG,CAAyB;YACtB,KAAK;IAKnB,OAAO,CAAC,cAAc,CAAS;IAC/B,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,OAAO,CAA2B;YAC5B,SAAS;IAevB,OAAO,CAAC,cAAc,CAA+B;IACrD,IAAW,aAAa,IAAI,gBAAgB,CAQ3C;IAED,OAAO,CAAC,uBAAuB,CAAqB;IACpD,OAAO,CAAC,uBAAuB,CAAqB;IACpD,IAAW,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAGjD;IAED,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,aAAa,CAAwC;IAE7D,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAEY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BxB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBlC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/C;;;OAGG;IACI,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAWrE;;;;OAIG;IACI,eAAe,CACrB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACtB,IAAI;IAWM,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAqDtC,QAAQ,IAAI,iBAAiB,GAAG,SAAS;IAInC,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9C,gBAAgB,IAAI,yBAAyB,GAAG,SAAS;IAIhE;;;;;;;OAOG;IACU,8BAA8B,CAC1C,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAgE/C;;;;;;;OAOG;IACU,YAAY,CACxB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;CAcpC"}
@@ -1,3 +1,4 @@
1
+ import { configDir } from "#config_dir";
1
2
  import { ZWaveError, ZWaveErrorCodes, isZWaveError, } from "@zwave-js/core";
2
3
  import { getErrorMessage, pathExists } from "@zwave-js/shared";
3
4
  import path from "pathe";
@@ -5,7 +6,7 @@ import { ConfigLogger } from "./Logger.js";
5
6
  import { loadManufacturersInternal, saveManufacturersInternal, } from "./Manufacturers.js";
6
7
  import { PACKAGE_VERSION } from "./_version.js";
7
8
  import { ConditionalDeviceConfig, generatePriorityDeviceIndex, getDevicesPaths, loadDeviceIndexInternal, loadFulltextDeviceIndexInternal, } from "./devices/DeviceConfig.js";
8
- import { configDir, getDeviceEntryPredicate, getExternalConfigDirEnvVariable, syncExternalConfigDir, } from "./utils.js";
9
+ import { getDeviceEntryPredicate, getExternalConfigDirEnvVariable, syncExternalConfigDir, } from "./utils.js";
9
10
  export class ConfigManager {
10
11
  constructor(options = {}) {
11
12
  this._fs = options.bindings;
@@ -16,7 +17,7 @@ export class ConfigManager {
16
17
  }
17
18
  _fs;
18
19
  async getFS() {
19
- this._fs ??= (await import("@zwave-js/core/bindings/fs/node")).fs;
20
+ this._fs ??= (await import("#default_bindings/fs")).fs;
20
21
  return this._fs;
21
22
  }
22
23
  _configVersion;
@@ -28,7 +29,9 @@ export class ConfigManager {
28
29
  async getLogger() {
29
30
  if (!this._logContainer) {
30
31
  this._logContainer =
31
- (await import("@zwave-js/core/bindings/log/node")).log({
32
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
33
+ // @ts-ignore - For some reason, VSCode does not like this import, although tsc is fine with it
34
+ (await import("#default_bindings/log")).log({
32
35
  enabled: false,
33
36
  });
34
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/ConfigManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,UAAU,EACV,eAAe,EACf,YAAY,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,IAAI,MAAM,OAAO,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAEN,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACN,uBAAuB,EAIvB,2BAA2B,EAC3B,eAAe,EACf,uBAAuB,EACvB,+BAA+B,GAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEN,SAAS,EACT,uBAAuB,EACvB,+BAA+B,EAC/B,qBAAqB,GACrB,MAAM,YAAY,CAAC;AASpB,MAAM,OAAO,aAAa;IACzB,YAAmB,UAAgC,EAAE;QACpD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;QAE1C,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;QAC/D,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;QAE/D,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC;IACvC,CAAC;IAEO,GAAG,CAAyB;IAC5B,KAAK,CAAC,KAAK;QAClB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAEO,cAAc,CAAS;IAC/B,IAAW,aAAa;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAEO,aAAa,CAA2B;IACxC,OAAO,CAA2B;IAClC,KAAK,CAAC,SAAS;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa;gBACjB,CAAC,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC,GAAG,CAAC;oBACtD,OAAO,EAAE,KAAK;iBACd,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAEO,cAAc,CAA+B;IACrD,IAAW,aAAa;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CACnB,qCAAqC,EACrC,eAAe,CAAC,eAAe,CAC/B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAEO,uBAAuB,CAAqB;IAC5C,uBAAuB,CAAqB;IACpD,IAAW,iBAAiB;QAC3B,OAAO,IAAI,CAAC,uBAAuB;eAC/B,+BAA+B,EAAE,CAAC;IACvC,CAAC;IAEO,KAAK,CAAgC;IACrC,aAAa,CAAwC;IAErD,kBAAkB,GAAY,KAAK,CAAC;IAC5C,IAAW,iBAAiB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,OAAO;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,8DAA8D;QAC9D,iCAAiC;QACjC,IAAI,UAAmD,CAAC;QACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACjD,IAAI,iBAAiB,EAAE,CAAC;YACvB,UAAU,GAAG,MAAM,qBAAqB,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,EAClB,iBAAiB,EACjB,MAAM,CACN,CAAC;QACH,CAAC;QAED,IAAI,UAAU,EAAE,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,MAAM,CAAC,KAAK,CACX,oCAAoC,iBAAiB,EAAE,CACvD,CAAC;YACF,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC;QAC1C,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC;QACvC,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;QAEvD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC;YACJ,IAAI,CAAC,cAAc,GAAG,MAAM,yBAAyB,CACpD,MAAM,IAAI,CAAC,KAAK,EAAE,EAClB,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAC9D,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,uEAAuE;YACvE,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,cAAc,EAAE,CAAC;gBAClE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACrC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAC7B,wCAAwC,CAAC,CAAC,OAAO,EAAE,EACnD,OAAO,CACP,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACP,8BAA8B;gBAC9B,MAAM,CAAC,CAAC;YACT,CAAC;QACF,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CACnB,qCAAqC,EACrC,eAAe,CAAC,eAAe,CAC/B,CAAC;QACH,CAAC;QAED,MAAM,yBAAyB,CAC9B,MAAM,IAAI,CAAC,KAAK,EAAE,EAClB,IAAI,CAAC,cAAc,CACnB,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,cAAsB;QAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CACnB,qCAAqC,EACrC,eAAe,CAAC,eAAe,CAC/B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACI,eAAe,CACrB,cAAsB,EACtB,gBAAwB;QAExB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CACnB,qCAAqC,EACrC,eAAe,CAAC,eAAe,CAC/B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,eAAe;QAC3B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC;YACJ,qDAAqD;YACrD,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAClD,EAAE,EACF,MAAM,EACN,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAC9D,CAAC;YACF,mEAAmE;YACnE,MAAM,aAAa,GAAsB,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAClC,IAAI,MAAM,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC;oBACxD,aAAa,CAAC,IAAI,CACjB,GAAG,CAAC,MAAM,2BAA2B,CACpC,EAAE,EACF,IAAI,CAAC,uBAAuB,EAC5B,MAAM,CACN,CAAC,CACF,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,KAAK,CACX,2CAA2C,IAAI,CAAC,uBAAuB,YAAY,EACnF,MAAM,CACN,CAAC;gBACH,CAAC;YACF,CAAC;YACD,mEAAmE;YACnE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,sEAAsE;YACtE,IACC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC;mBACrC,CAAC,YAAY,CAAC,CAAC,CAAC;uBACf,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,cAAc,CAAC,EAC7C,CAAC;gBACF,8CAA8C;gBAC9C,IAAI,CAAC,IAAI,CAAC,KAAK;oBAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACrC,MAAM,CAAC,KAAK,CACX,qDAAqD,CAAC,CAAC,OAAO,EAAE,EAChE,OAAO,CACP,CAAC;oBACF,kBAAkB;oBAClB,OAAO;gBACR,CAAC;gBACD,yBAAyB;gBACzB,MAAM,CAAC,CAAC;YACT,CAAC;QACF,CAAC;IACF,CAAC;IAEM,QAAQ;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,uBAAuB;QACnC,IAAI,CAAC,aAAa,GAAG,MAAM,+BAA+B,CACzD,MAAM,IAAI,CAAC,KAAK,EAAE,EAClB,MAAM,IAAI,CAAC,SAAS,EAAE,CACtB,CAAC;IACH,CAAC;IAEM,gBAAgB;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,8BAA8B,CAC1C,cAAsB,EACtB,WAAmB,EACnB,SAAiB,EACjB,eAAwB;QAExB,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE9C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAE9B,kCAAkC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAM,CAAC,MAAM,CACtC,uBAAuB,CACtB,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,CACf,CACD,CAAC;QACF,yFAAyF;QACzF,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;eACtD,YAAY,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,eAAe,CACjC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAC9D,CAAC,UAAU,CAAC;YACb,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACpD,CAAC,CAAC,UAAU,CAAC,QAAQ;gBACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAAE,OAAO;YAE9C,4FAA4F;YAC5F,6BAA6B;YAC7B,MAAM,UAAU,GAAG,CAAC,IAAI;iBACtB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;iBAC9B,UAAU,CAAC,IAAI,CAAC,CAAC;YAEnB,8FAA8F;YAC9F,qCAAqC;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC;YACjD,MAAM,YAAY,GAAG,OAAO,KAAK,UAAU;gBAC1C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAEhB,IAAI,CAAC;gBACJ,OAAO,MAAM,uBAAuB,CAAC,IAAI,CACxC,EAAE,EACF,QAAQ,EACR,UAAU,EACV,EAAE,OAAO,EAAE,YAAY,EAAE,CACzB,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACrC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAC7B,+BAA+B,QAAQ,KACtC,eAAe,CACd,CAAC,EACD,IAAI,CAEN,EAAE,EACF,OAAO,CACP,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,YAAY,CACxB,cAAsB,EACtB,WAAmB,EACnB,SAAiB,EACjB,eAAwB;QAExB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,8BAA8B,CACpD,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,CACf,CAAC;QACF,OAAO,GAAG,EAAE,QAAQ,CAAC;YACpB,cAAc;YACd,WAAW;YACX,SAAS;YACT,eAAe;SACf,CAAC,CAAC;IACJ,CAAC;CACD"}
1
+ {"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/ConfigManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAEN,UAAU,EACV,eAAe,EACf,YAAY,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,IAAI,MAAM,OAAO,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAEN,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACN,uBAAuB,EAIvB,2BAA2B,EAC3B,eAAe,EACf,uBAAuB,EACvB,+BAA+B,GAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEN,uBAAuB,EACvB,+BAA+B,EAC/B,qBAAqB,GACrB,MAAM,YAAY,CAAC;AASpB,MAAM,OAAO,aAAa;IACzB,YAAmB,UAAgC,EAAE;QACpD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;QAE1C,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;QAC/D,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;QAE/D,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC;IACvC,CAAC;IAEO,GAAG,CAAyB;IAC5B,KAAK,CAAC,KAAK;QAClB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAEO,cAAc,CAAS;IAC/B,IAAW,aAAa;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAEO,aAAa,CAA2B;IACxC,OAAO,CAA2B;IAClC,KAAK,CAAC,SAAS;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa;gBACjB,6DAA6D;gBAC7D,+FAA+F;gBAC/F,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC3C,OAAO,EAAE,KAAK;iBACd,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAEO,cAAc,CAA+B;IACrD,IAAW,aAAa;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CACnB,qCAAqC,EACrC,eAAe,CAAC,eAAe,CAC/B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAEO,uBAAuB,CAAqB;IAC5C,uBAAuB,CAAqB;IACpD,IAAW,iBAAiB;QAC3B,OAAO,IAAI,CAAC,uBAAuB;eAC/B,+BAA+B,EAAE,CAAC;IACvC,CAAC;IAEO,KAAK,CAAgC;IACrC,aAAa,CAAwC;IAErD,kBAAkB,GAAY,KAAK,CAAC;IAC5C,IAAW,iBAAiB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,OAAO;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,8DAA8D;QAC9D,iCAAiC;QACjC,IAAI,UAAmD,CAAC;QACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACjD,IAAI,iBAAiB,EAAE,CAAC;YACvB,UAAU,GAAG,MAAM,qBAAqB,CACvC,MAAM,IAAI,CAAC,KAAK,EAAE,EAClB,iBAAiB,EACjB,MAAM,CACN,CAAC;QACH,CAAC;QAED,IAAI,UAAU,EAAE,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,MAAM,CAAC,KAAK,CACX,oCAAoC,iBAAiB,EAAE,CACvD,CAAC;YACF,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC;QAC1C,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC;QACvC,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;QAEvD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC;YACJ,IAAI,CAAC,cAAc,GAAG,MAAM,yBAAyB,CACpD,MAAM,IAAI,CAAC,KAAK,EAAE,EAClB,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAC9D,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,uEAAuE;YACvE,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,cAAc,EAAE,CAAC;gBAClE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACrC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAC7B,wCAAwC,CAAC,CAAC,OAAO,EAAE,EACnD,OAAO,CACP,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACP,8BAA8B;gBAC9B,MAAM,CAAC,CAAC;YACT,CAAC;QACF,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CACnB,qCAAqC,EACrC,eAAe,CAAC,eAAe,CAC/B,CAAC;QACH,CAAC;QAED,MAAM,yBAAyB,CAC9B,MAAM,IAAI,CAAC,KAAK,EAAE,EAClB,IAAI,CAAC,cAAc,CACnB,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,cAAsB;QAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CACnB,qCAAqC,EACrC,eAAe,CAAC,eAAe,CAC/B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACI,eAAe,CACrB,cAAsB,EACtB,gBAAwB;QAExB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CACnB,qCAAqC,EACrC,eAAe,CAAC,eAAe,CAC/B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,eAAe;QAC3B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC;YACJ,qDAAqD;YACrD,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAClD,EAAE,EACF,MAAM,EACN,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAC9D,CAAC;YACF,mEAAmE;YACnE,MAAM,aAAa,GAAsB,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAClC,IAAI,MAAM,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC;oBACxD,aAAa,CAAC,IAAI,CACjB,GAAG,CAAC,MAAM,2BAA2B,CACpC,EAAE,EACF,IAAI,CAAC,uBAAuB,EAC5B,MAAM,CACN,CAAC,CACF,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,KAAK,CACX,2CAA2C,IAAI,CAAC,uBAAuB,YAAY,EACnF,MAAM,CACN,CAAC;gBACH,CAAC;YACF,CAAC;YACD,mEAAmE;YACnE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,sEAAsE;YACtE,IACC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC;mBACrC,CAAC,YAAY,CAAC,CAAC,CAAC;uBACf,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,cAAc,CAAC,EAC7C,CAAC;gBACF,8CAA8C;gBAC9C,IAAI,CAAC,IAAI,CAAC,KAAK;oBAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACrC,MAAM,CAAC,KAAK,CACX,qDAAqD,CAAC,CAAC,OAAO,EAAE,EAChE,OAAO,CACP,CAAC;oBACF,kBAAkB;oBAClB,OAAO;gBACR,CAAC;gBACD,yBAAyB;gBACzB,MAAM,CAAC,CAAC;YACT,CAAC;QACF,CAAC;IACF,CAAC;IAEM,QAAQ;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,uBAAuB;QACnC,IAAI,CAAC,aAAa,GAAG,MAAM,+BAA+B,CACzD,MAAM,IAAI,CAAC,KAAK,EAAE,EAClB,MAAM,IAAI,CAAC,SAAS,EAAE,CACtB,CAAC;IACH,CAAC;IAEM,gBAAgB;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,8BAA8B,CAC1C,cAAsB,EACtB,WAAmB,EACnB,SAAiB,EACjB,eAAwB;QAExB,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE9C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAE9B,kCAAkC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAM,CAAC,MAAM,CACtC,uBAAuB,CACtB,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,CACf,CACD,CAAC;QACF,yFAAyF;QACzF,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;eACtD,YAAY,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,eAAe,CACjC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAC9D,CAAC,UAAU,CAAC;YACb,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACpD,CAAC,CAAC,UAAU,CAAC,QAAQ;gBACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAAE,OAAO;YAE9C,4FAA4F;YAC5F,6BAA6B;YAC7B,MAAM,UAAU,GAAG,CAAC,IAAI;iBACtB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;iBAC9B,UAAU,CAAC,IAAI,CAAC,CAAC;YAEnB,8FAA8F;YAC9F,qCAAqC;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC;YACjD,MAAM,YAAY,GAAG,OAAO,KAAK,UAAU;gBAC1C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAEhB,IAAI,CAAC;gBACJ,OAAO,MAAM,uBAAuB,CAAC,IAAI,CACxC,EAAE,EACF,QAAQ,EACR,UAAU,EACV,EAAE,OAAO,EAAE,YAAY,EAAE,CACzB,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACrC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAC7B,+BAA+B,QAAQ,KACtC,eAAe,CACd,CAAC,EACD,IAAI,CAEN,EAAE,EACF,OAAO,CACP,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,YAAY,CACxB,cAAsB,EACtB,WAAmB,EACnB,SAAiB,EACjB,eAAwB;QAExB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,8BAA8B,CACpD,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,CACf,CAAC;QACF,OAAO,GAAG,EAAE,QAAQ,CAAC;YACpB,cAAc;YACd,WAAW;YACX,SAAS;YACT,eAAe;SACf,CAAC,CAAC;IACJ,CAAC;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"Manufacturers.d.ts","sourceRoot":"","sources":["../../src/Manufacturers.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAGX,SAAS,EACT,MAAM,2BAA2B,CAAC;AAOnC,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAwDnD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,EAAE,EAAE,SAAS,EACb,aAAa,EAAE,gBAAgB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAaf"}
1
+ {"version":3,"file":"Manufacturers.d.ts","sourceRoot":"","sources":["../../src/Manufacturers.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGX,SAAS,EACT,MAAM,2BAA2B,CAAC;AAMnC,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAwDnD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,EAAE,EAAE,SAAS,EACb,aAAa,EAAE,gBAAgB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -1,9 +1,9 @@
1
+ import { configDir } from "#config_dir";
1
2
  import { ZWaveError, ZWaveErrorCodes, isZWaveError } from "@zwave-js/core";
2
3
  import { formatId, pathExists, readTextFile, stringify, writeTextFile, } from "@zwave-js/shared";
3
4
  import { isObject } from "alcalzone-shared/typeguards";
4
5
  import JSON5 from "json5";
5
6
  import path from "pathe";
6
- import { configDir } from "./utils.js";
7
7
  import { hexKeyRegex4Digits, throwInvalidConfig } from "./utils_safe.js";
8
8
  /** @internal */
9
9
  export async function loadManufacturersInternal(fs, externalConfigDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"Manufacturers.js","sourceRoot":"","sources":["../../src/Manufacturers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Manufacturers.js","sourceRoot":"","sources":["../../src/Manufacturers.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const PACKAGE_VERSION = "15.2.0";
1
+ export declare const PACKAGE_VERSION = "15.3.0";
2
2
  //# sourceMappingURL=_version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // This file is auto-generated by the codegen maintenance script
2
- export const PACKAGE_VERSION = "15.2.0";
2
+ export const PACKAGE_VERSION = "15.3.0";
3
3
  //# sourceMappingURL=_version.js.map
@@ -0,0 +1,3 @@
1
+ /** The absolute path of the embedded configuration directory */
2
+ export declare const configDir: string;
3
+ //# sourceMappingURL=configDir.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configDir.browser.d.ts","sourceRoot":"","sources":["../../src/configDir.browser.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,eAAO,MAAM,SAAS,QAAiC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The absolute path of the embedded configuration directory */
2
+ export const configDir = import.meta.resolve("/config");
3
+ //# sourceMappingURL=configDir.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configDir.browser.js","sourceRoot":"","sources":["../../src/configDir.browser.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The absolute path of the embedded configuration directory */
2
+ export declare const configDir: string;
3
+ //# sourceMappingURL=configDir.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configDir.node.d.ts","sourceRoot":"","sources":["../../src/configDir.node.ts"],"names":[],"mappings":"AAGA,gEAAgE;AAChE,eAAO,MAAM,SAAS,QAQW,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { fileURLToPath } from "node:url";
2
+ import path from "pathe";
3
+ /** The absolute path of the embedded configuration directory */
4
+ export const configDir = import.meta.url.startsWith("file:")
5
+ ? path.join(path.dirname(fileURLToPath(import.meta.url)), /src\/[^/\\]+\.ts$/.test(import.meta.url)
6
+ ? ".."
7
+ : "../..", "config")
8
+ : import.meta.resolve("/config");
9
+ //# sourceMappingURL=configDir.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configDir.node.js","sourceRoot":"","sources":["../../src/configDir.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,OAAO,CAAC;AAEzB,gEAAgE;AAChE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;IAC3D,CAAC,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACxC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,EACV,QAAQ,CACR;IACD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceConfig.d.ts","sourceRoot":"","sources":["../../../src/devices/DeviceConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DeviceConfig.d.ts","sourceRoot":"","sources":["../../../src/devices/DeviceConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,UAAU,EAWf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACX,QAAQ,EACR,kBAAkB,EAElB,MAAM,2BAA2B,CAAC;AAQnC,OAAO,EACN,KAAK,iBAAiB,EACtB,4BAA4B,EAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,OAAO,EACN,KAAK,oBAAoB,EAEzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,yBAAyB,EACzB,KAAK,cAAc,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,yBAAyB,EACzB,KAAK,cAAc,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,oBAAoB,CAAC;IACtC,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,oBAAoB,CAAC;IACtC,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,QAAkC,CAAC;AAGlE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CAClB,CAIA;AAED,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,EAAE,CAAC;AACzD,MAAM,MAAM,yBAAyB,GAAG,8BAA8B,EAAE,CAAC;AAyTzE,yGAAyG;AACzG,qBAAa,uBAAuB;WACf,IAAI,CACvB,EAAE,EAAE,kBAAkB,GAAG,QAAQ,EACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACnB,GACC,OAAO,CAAC,uBAAuB,CAAC;gBAkBlC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,UAAU;IAgNvB,SAAgB,QAAQ,EAAE,MAAM,CAAC;IAEjC,SAAgB,YAAY,EAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC5D,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,KAAK,EAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACrD,SAAgB,WAAW,EAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC3D,SAAgB,OAAO,EAAE,SAAS;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IACJ,SAAgB,eAAe,EAAE,oBAAoB,CAAC;IACtD,sGAAsG;IACtG,SAAgB,SAAS,EAAE,OAAO,CAAC;IACnC,SAAgB,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAC3E,SAAgB,YAAY,CAAC,EAAE,WAAW,CACzC,MAAM,EACN,4BAA4B,CAC5B,CAAC;IACF,SAAgB,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3D;;;OAGG;IACH,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,qCAAqC;IACrC,SAAgB,MAAM,CAAC,EACpB,uBAAuB,GACvB,uBAAuB,EAAE,CAAC;IAC7B,8DAA8D;IAC9D,SAAgB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IAErD,uDAAuD;IACvD,SAAgB,UAAU,EAAE,OAAO,CAAC;IAE7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,YAAY;CAmBlD;AAED,qBAAa,YAAY;WACJ,IAAI,CACvB,EAAE,EAAE,kBAAkB,GAAG,QAAQ,EACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACpB,GACC,OAAO,CAAC,YAAY,CAAC;gBAWvB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,EACnB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KAClB,EAAE,EACH,eAAe,EAAE,oBAAoB,EACrC,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC/C,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,gBAAgB,CAAC,EAAE,YAAY,EAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,MAAM,CAAC,EAAE,YAAY,EACrB,QAAQ,CAAC,EAAE,cAAc;IAmB1B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,uDAAuD;IACvD,SAAgB,UAAU,EAAE,OAAO,CAAC;IACpC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,OAAO,EAAE,SAAS;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IACJ,SAAgB,eAAe,EAAE,oBAAoB,CAAC;IACtD,sGAAsG;IACtG,SAAgB,SAAS,EAAE,OAAO,CAAC;IACnC,SAAgB,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAChE,SAAgB,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACtE,SAAgB,gBAAgB,CAAC,EAAE,YAAY,CAAC;IAChD;;;OAGG;IACH,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,qCAAqC;IACrC,SAAgB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtC,8DAA8D;IAC9D,SAAgB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1C,0DAA0D;IACnD,+BAA+B,CACrC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,GACX,iBAAiB,GAAG,SAAS;IAahC,OAAO,CAAC,WAAW;IA6InB;;OAEG;IACI,OAAO,CACb,SAAS,GAAE,KAAK,GAAG,SAAqB,GACtC,OAAO,CAAC,UAAU,CAAC;CAOtB"}
@@ -1,3 +1,4 @@
1
+ import { configDir } from "#config_dir";
1
2
  import { ZWaveError, ZWaveErrorCodes, digest } from "@zwave-js/core";
2
3
  import { Bytes, enumFilesRecursive, formatId, getenv, num2hex, padVersion, pathExists, pick, readTextFile, stringify, writeTextFile, } from "@zwave-js/shared";
3
4
  import { isArray, isObject } from "alcalzone-shared/typeguards";
@@ -5,7 +6,6 @@ import JSON5 from "json5";
5
6
  import path from "pathe";
6
7
  import semverGt from "semver/functions/gt.js";
7
8
  import { clearTemplateCache, readJsonWithTemplate } from "../JsonTemplate.js";
8
- import { configDir } from "../utils.js";
9
9
  import { hexKeyRegex4Digits, throwInvalidConfig } from "../utils_safe.js";
10
10
  import { ConditionalAssociationConfig, } from "./AssociationConfig.js";
11
11
  import { ConditionalCompatConfig } from "./CompatConfig.js";
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceConfig.js","sourceRoot":"","sources":["../../../src/devices/DeviceConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EACN,KAAK,EAEL,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,aAAa,GACb,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,OAAO,CAAC;AACzB,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAEN,4BAA4B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAqB,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAEN,yBAAyB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,yBAAyB,GAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,yBAAyB,GAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIN,mCAAmC,GACnC,MAAM,uBAAuB,CAAC;AA0B/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAClE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;AAE/E,MAAM,UAAU,eAAe,CAAC,SAAiB;IAIhD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACtD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC;AAKD,KAAK,UAAU,qBAAqB,CACnC,EAAsB,EACtB,WAAmB,EACnB,GAAW,EACX,UAAgB;IAEhB,gEAAgE;IAChE,oCAAoC;IACpC,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAEnC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,IACC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,KAAK,YAAY,CAAC;eACxC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;eACrC,IAAI,CAAC,KAAK,GAAG,UAAU,EACzB,CAAC;YACF,OAAO,IAAI,CAAC;QACb,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,wBAAwB;YACxB,IACC,MAAM,qBAAqB,CAC1B,EAAE,EACF,WAAW,EACX,QAAQ,EACR,UAAU,CACV,EACA,CAAC;gBACF,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,aAAa,CAC3B,EAAiC,EACjC,UAAkB,EAClB,UAAmB,EACnB,mBAAkD,EAClD,MAAqB;IAErB,MAAM,KAAK,GAAmD,EAAE,CAAC;IAEjE,kBAAkB,EAAE,CAAC;IACrB,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAC3C,EAAE,EACF,UAAU,EACV,CAAC,IAAI,EAAE,EAAE,CACR,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;WACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;WAC5B,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;WAC7B,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CACnC,CAAC;IAEF,0DAA0D;IAC1D,MAAM,YAAY,GAAG,UAAU,KAAK,kBAAkB;QACrD,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACtB,CAAC,CAAC,SAAS,CAAC;IAEb,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,IAAI;aACvB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;aAC1B,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxB,uBAAuB;QACvB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CACrC,EAAE,EACF,IAAI,EACJ,UAAU,EACV;gBACC,OAAO,EAAE,UAAU;gBACnB,YAAY;gBACZ,QAAQ,EAAE,IAAI;aACd,CACD,CAAC;YACF,4BAA4B;YAC5B,KAAK,CAAC,IAAI,CACT,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5C,MAAM,GAAG,GAA+C;oBACvD,GAAG,KAAK;oBACR,QAAQ,EAAE,YAAY;iBACtB,CAAC;gBACF,kDAAkD;gBAClD,IAAI,UAAU,KAAK,kBAAkB,EAAE,CAAC;oBACvC,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC;gBAC1B,CAAC;gBACD,OAAO,GAAG,CAAC;YACZ,CAAC,CAAC,CACF,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,6BAA6B,YAAY,KACvD,CAAW,CAAC,OACd,EAAE,CAAC;YACH,2EAA2E;YAC3E,0CAA0C;YAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACP,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,KAAK,UAAU,qBAAqB,CACnC,EAA6C,EAC7C,UAAkB,EAClB,SAAiB,EACjB,mBAAkD,EAClD,MAAqB;IAErB,8DAA8D;IAC9D,IAAI,WAAW,GAAG,CAAC,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IACrD,IAAI,KAA+C,CAAC;IACpD,IAAI,UAA4B,CAAC;IACjC,4BAA4B;IAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,IAAI,CAAC;YACJ,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/D,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAClC,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACR,MAAM,EAAE,KAAK,CACZ,kDAAkD,EAClD,MAAM,CACN,CAAC;YACF,WAAW,GAAG,IAAI,CAAC;QACpB,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,EAAE,KAAK,CACZ,4CAA4C,EAC5C,MAAM,CACN,CAAC;gBACF,WAAW,GAAG,IAAI,CAAC;YACpB,CAAC;QACF,CAAC;IACF,CAAC;IAED,qDAAqD;IACrD,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,WAAW,GAAG,MAAM,qBAAqB,CACxC,EAAE,EACF,UAAU,EACV,UAAU,EACV,UAAW,CACX,CAAC;QACF,IAAI,WAAW,EAAE,CAAC;YACjB,MAAM,EAAE,KAAK,CACZ,oEAAoE,EACpE,SAAS,CACT,CAAC;QACH,CAAC;IACF,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACjB,iDAAiD;QACjD,KAAK,GAAG,MAAM,aAAa,CAC1B,EAAE,EACF,UAAU,EACV,IAAI,EACJ,mBAAmB,EACnB,MAAM,CACN,CAAC;QACF,yBAAyB;QACzB,IAAI,CAAC;YACJ,MAAM,aAAa,CAClB,EAAE,EACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EACpB;EACF,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;CACvB,EACG,MAAM,CACN,CAAC;YACF,MAAM,EAAE,KAAK,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,EAAE,KAAK,CACZ,4CACE,CAAW,CAAC,OACd,EAAE,EACF,OAAO,CACP,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,KAAM,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAChD,EAAiC,EACjC,uBAA+B,EAC/B,MAAqB;IAErB,OAAO,CACN,MAAM,aAAa,CAClB,EAAE,EACF,uBAAuB,EACvB,KAAK,EACL,CAAC,MAAM,EAAE,EAAE,CACV,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,cAAc,EAAE,QAAQ,CACvB,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAClC;QACD,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QACtC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,uBAAuB;KAChC,CAAC,CAAC,EACJ,MAAM,CACN,CACD,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,GAAG,KAAK;QACR,0EAA0E;QAC1E,kCAAkC;QAClC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC;KACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,EAA6C,EAC7C,MAAqB,EACrB,iBAA0B;IAE1B,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,eAAe,CAChD,iBAAiB,IAAI,SAAS,CAC9B,CAAC;IAEF,OAAO,qBAAqB,CAC3B,EAAE,EACF,UAAU,EACV,SAAS,EACT,CAAC,MAAM,EAAE,EAAE,CACV,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5D,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QACtC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC,CAAC,EACJ,MAAM,CACN,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACpD,EAA6C,EAC7C,MAAqB;IAErB,sEAAsE;IACtE,OAAO,qBAAqB,CAC3B,EAAE,EACF,kBAAkB,EAClB,iBAAiB,EACjB,CAAC,MAAM,EAAE,EAAE,CACV,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5D,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QACtC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,kBAAkB;KAC3B,CAAC,CAAC,EACJ,MAAM,CACN,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAQ;IACpC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,oBAAoB,GAAG,gCAAgC,CAAC;AAC9D,SAAS,iBAAiB,CAAC,GAAQ;IAClC,OAAO,CACN,OAAO,GAAG,KAAK,QAAQ;WACpB,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;WAC9B,GAAG;aACJ,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;aAC/B,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CACxC,CAAC;AACH,CAAC;AAED,yGAAyG;AACzG,MAAM,OAAO,uBAAuB;IAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CACvB,EAAiC,EACjC,QAAgB,EAChB,UAAmB,EACnB,OAIC;QAED,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAEtC,MAAM,YAAY,GAAG,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;YACxD,CAAC,CAAC,QAAQ,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,oBAAoB,CACtC,EAAE,EACF,QAAQ,EACR;YACC,OAAO,CAAC,OAAO;YACf,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;SAC/B,CACD,CAAC;QACF,OAAO,IAAI,uBAAuB,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,YACC,QAAgB,EAChB,UAAmB,EACnB,UAAsB;QAEtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACrD,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;qEACuB,CACjE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAE9D,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,aAAa,CAAU,EAAE,CAAC;YACtE,IAAI,CAAC,IAAI,CAAC,GAAG,yBAAyB,CACrC,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,UAAU,CAAC,IAAI,CAAC,CAChB,CAAC;QACH,CAAC;QAED,IACC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;eACzB,CAAE,UAAU,CAAC,OAAiB,CAAC,KAAK,CACtC,CAAC,GAAY,EAAE,EAAE,CAChB,QAAQ,CAAC,GAAG,CAAC;mBACV,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;mBACpC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CACtC,EACA,CAAC;YACF,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;wFAC0C,CACpF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,GAAI,UAAU,CAAC,OAAiB,CAAC,GAAG,CAC/C,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAChC,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;SAClC,CAAC,CACF,CAAC;QAEF,IACC,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC;eAClC,CAAC,iBAAiB,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC;eAClD,CAAC,iBAAiB,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,EACpD,CAAC;YACF,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;+GACiE,CAC3G,CAAC;QACH,CAAC;aAAM,CAAC;YACP,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC;YAChD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAChD,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;sBACzB,GAAG,iDAAiD,GAAG,EAAE,CAC1E,CAAC;YACH,CAAC;YACD,IAAI,CAAC,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACrC,CAAC;QAED,IACC,UAAU,CAAC,SAAS,IAAI,SAAS;eAC9B,UAAU,CAAC,SAAS,KAAK,IAAI,EAC/B,CAAC;YACF,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;kCACZ,CAC9B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;QAExC,IAAI,UAAU,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrC,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;2BACpB,CACtB,CAAC;YACH,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;oCACZ,GAAG,gBAAgB,CACjD,CAAC;gBACH,CAAC;gBAED,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAClC,SAAS,CAAC,GAAG,CACZ,OAAO,EACP,IAAI,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAS,CAAC,CACvD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5B,CAAC;QAED,IAAI,UAAU,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,EAGzB,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;8BACjB,CACzB,CAAC;YACH,CAAC;YACD,KACC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAC7C,UAAU,CAAC,YAAY,CACvB,EACA,CAAC;gBACF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;8BAClB,GAAG,mBAAmB,CAC9C,CAAC;gBACH,CAAC;gBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACjC,YAAY,CAAC,GAAG,CACf,MAAM,EACN,IAAI,4BAA4B,CAC/B,QAAQ,EACR,MAAM,EACN,eAAsB,CACtB,CACD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAClC,CAAC;QAED,IAAI,UAAU,CAAC,gBAAgB,IAAI,SAAS,EAAE,CAAC;YAC9C,IAAI,CAAC,gBAAgB,GAAG,mCAAmC,CAC1D,UAAU,EACV,IAAI,CACJ,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvC,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;6BAClB,CACxB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC3C,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YACpC,IACC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;mBACvB,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EACxD,CAAC;gBACF,qCAAqC;gBACrC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBACvC,iBAAiB,CAChB,QAAQ,EACR,KAAK,EACL,0CAA0C,CAC1C,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAClC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAC1D,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,MAAM,GAAG,IAAI,uBAAuB,CACxC,QAAQ,EACR,UAAU,CAAC,MAAM,CACjB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;6DACc,CACxD,CAAC;YACH,CAAC;QACF,CAAC;QAED,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,kBAAkB,CACjB,QAAQ,EACR,kCAAkC,QAAQ;0BACrB,CACrB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAyB,CAC5C,QAAQ,EACR,UAAU,CAAC,QAAQ,CACnB,CAAC;QACH,CAAC;IACF,CAAC;IAEe,QAAQ,CAAS;IAEjB,YAAY,CAAgC;IAC5C,cAAc,CAAS;IACvB,KAAK,CAAgC;IACrC,WAAW,CAAgC;IAC3C,OAAO,CAGnB;IACY,eAAe,CAAuB;IACtD,sGAAsG;IACtF,SAAS,CAAU;IACnB,SAAS,CAAkD;IAC3D,YAAY,CAG1B;IACc,gBAAgB,CAA2B;IAC3D;;;OAGG;IACa,WAAW,CAA2B;IACtD,qCAAqC;IACrB,MAAM,CAEO;IAC7B,8DAA8D;IAC9C,QAAQ,CAA6B;IAErD,uDAAuD;IACvC,UAAU,CAAU;IAE7B,QAAQ,CAAC,QAAmB;QAClC,OAAO,IAAI,YAAY,CACtB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,UAAU,EACf,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EACzC,IAAI,CAAC,cAAc,EACnB,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,EAClC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EACxC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,SAAS,EACd,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EACtC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EACzC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAC7C,IAAI,CAAC,WAAW,EAChB,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EACnC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACrC,CAAC;IACH,CAAC;CACD;AAED,MAAM,OAAO,YAAY;IACjB,MAAM,CAAC,KAAK,CAAC,IAAI,CACvB,EAAiC,EACjC,QAAgB,EAChB,UAAmB,EACnB,OAKC;QAED,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAC7C,EAAE,EACF,QAAQ,EACR,UAAU,EACV,OAAO,CACP,CAAC;QACF,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,YACC,QAAgB,EAChB,UAAmB,EACnB,YAAoB,EACpB,cAAsB,EACtB,KAAa,EACb,WAAmB,EACnB,OAGG,EACH,eAAqC,EACrC,SAAkB,EAClB,SAA+C,EAC/C,YAAqD,EACrD,gBAA+B,EAC/B,WAAqC,EACrC,MAAqB,EACrB,QAAyB;QAEzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAEe,QAAQ,CAAS;IACjC,uDAAuD;IACvC,UAAU,CAAU;IACpB,YAAY,CAAS;IACrB,cAAc,CAAS;IACvB,KAAK,CAAS;IACd,WAAW,CAAS;IACpB,OAAO,CAGnB;IACY,eAAe,CAAuB;IACtD,sGAAsG;IACtF,SAAS,CAAU;IACnB,SAAS,CAAuC;IAChD,YAAY,CAA0C;IACtD,gBAAgB,CAAgB;IAChD;;;OAGG;IACa,WAAW,CAA2B;IACtD,qCAAqC;IACrB,MAAM,CAAgB;IACtC,8DAA8D;IAC9C,QAAQ,CAAkB;IAE1C,0DAA0D;IACnD,+BAA+B,CACrC,aAAqB,EACrB,KAAa;QAEb,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YACzB,0FAA0F;YAC1F,OAAO,CACN,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC;mBACzB,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,CACpD,CAAC;QACH,CAAC;aAAM,CAAC;YACP,2EAA2E;YAC3E,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACrE,CAAC;IACF,CAAC;IAEO,WAAW;QAClB,uEAAuE;QACvE,sBAAsB;QACtB,oCAAoC;QACpC,4BAA4B;QAE5B,IAAI,QAAQ,GAAwB;QACnC,eAAe;QACf,qBAAqB;QACrB,wBAAwB;QACxB,KAAK;QACL,mBAAmB;QACnB,cAAc;SACd,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,GAAwB,EAAE,EAAE;YAC/C,MAAM,GAAG,GAAwB,EAAE,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,GAAG,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,sBAAsB,GAAG,CAAC,CAAoB,EAAE,EAAE;YACvD,OAAO,UAAU,CAChB,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CACnD,CAAC;QACH,CAAC,CAAC;QACF,MAAM,mBAAmB,GAAG,CAC3B,MAA2B,EAC3B,GAAuD,EACtD,EAAE;YACH,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;gBAAE,OAAO;YAC9B,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;gBAChC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,MAAM,wBAAwB,GAAG,CAChC,MAA2B,EAC3B,GAA6B,EAC5B,EAAE;YACH,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;gBAAE,OAAO;YAC9B,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE,CAC/C,GAAG,KAAK,CAAC,eAAe,GACvB,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAC3D,EAAE,CAAC;YACJ,MAAM,CAAC,gBAAgB,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACzD,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAC5C,CAAC;QACH,CAAC,CAAC;QAEF,4EAA4E;QAC5E,CAAC;YACA,IAAI,GAAG,GAAwB,EAAE,CAAC;YAClC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5C,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrD,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAEtB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,QAAQ,CAAC,SAAS,KAAK,EAAE,CAAC;gBAC1B,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAC7B,CAAC;QACF,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChD,IAAI,EAAE,GAAwB,EAAE,CAAC;gBAEjC,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC/C,wBAAwB,CAAC,EAAE,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBAExD,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;gBAEpB,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChC,QAAQ,CAAC,SAAS,KAAK,EAAE,CAAC;oBAC1B,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBAChC,CAAC;YACF,CAAC;QACF,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,GAAwB,EAAE,CAAC;YAEhC,8BAA8B;YAC9B,KACC,MAAM,IAAI,IAAI;gBACb,gCAAgC;gBAChC,0BAA0B;gBAC1B,aAAa;gBACb,mCAAmC;gBACnC,mBAAmB;gBACnB,iBAAiB;gBACjB,iCAAiC;aACxB,EACT,CAAC;gBACF,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;oBACpC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;YACF,CAAC;YAED,iCAAiC;YACjC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBACjC,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,CACrC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CACxC,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACxB,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAC5B,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;oBAC5C,IAAI;oBACJ,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;iBACjC,CAAC,CACF,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3B,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAClC,CAAC,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/D,CAAC;YAED,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACrB,CAAC;QACF,CAAC;QAED,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEhC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACI,OAAO,CACb,YAA+B,SAAS;QAExC,0BAA0B;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAElC,oHAAoH;QACpH,OAAO,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;CACD"}
1
+ {"version":3,"file":"DeviceConfig.js","sourceRoot":"","sources":["../../../src/devices/DeviceConfig.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,22 @@
1
1
  {
2
- "type": "module"
2
+ "type": "module",
3
+ "sideEffects": false,
4
+ "imports": {
5
+ "#default_bindings/fs": {
6
+ "@@dev": "@zwave-js/core/bindings/fs/node",
7
+ "node": "@zwave-js/core/bindings/fs/node",
8
+ "default": "@zwave-js/core/bindings/fs/stub"
9
+ },
10
+ "#default_bindings/log": {
11
+ "@@dev": "@zwave-js/core/bindings/log/node",
12
+ "node": "@zwave-js/core/bindings/log/node",
13
+ "default": "@zwave-js/core/bindings/log/stub"
14
+ },
15
+ "#config_dir": {
16
+ "@@dev": "../../src/configDir.node.ts",
17
+ "browser": "./configDir.browser.js",
18
+ "import": "./configDir.node.js",
19
+ "require": "../cjs/configDir.node.js"
20
+ }
21
+ }
3
22
  }
@@ -1,8 +1,6 @@
1
1
  import type { CopyFile, ManageDirectory, ReadFile, ReadFileSystemInfo, WriteFile } from "@zwave-js/shared/bindings";
2
2
  import type { ConfigLogger } from "./Logger.js";
3
3
  import type { DeviceConfigIndexEntry } from "./devices/DeviceConfig.js";
4
- /** The absolute path of the embedded configuration directory */
5
- export declare const configDir: string;
6
4
  /** The (optional) absolute path of an external configuration directory */
7
5
  export declare function getExternalConfigDirEnvVariable(): string | undefined;
8
6
  export declare function getDeviceEntryPredicate(manufacturerId: number, productType: number, productId: number, firmwareVersion?: string): (entry: DeviceConfigIndexEntry) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACX,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,SAAS,EACT,MAAM,2BAA2B,CAAC;AAQnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,gEAAgE;AAChE,eAAO,MAAM,SAAS,QAQW,CAAC;AAElC,0EAA0E;AAC1E,wBAAgB,+BAA+B,IAAI,MAAM,GAAG,SAAS,CAEpE;AAED,wBAAgB,uBAAuB,CACtC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACtB,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAoB5C;AAED,MAAM,MAAM,2BAA2B,GACpC;IACD,OAAO,EAAE,KAAK,CAAC;CACf,GACC;IACD,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEH;;GAEG;AACH,wBAAsB,qBAAqB,CAC1C,EAAE,EAAE,eAAe,GAAG,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,EAC1E,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,GAClB,OAAO,CAAC,2BAA2B,CAAC,CAiFtC;AAED,wBAAgB,cAAc,CAC7B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACT,OAAO,CAKT"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACX,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,SAAS,EACT,MAAM,2BAA2B,CAAC;AAOnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,0EAA0E;AAC1E,wBAAgB,+BAA+B,IAAI,MAAM,GAAG,SAAS,CAEpE;AAED,wBAAgB,uBAAuB,CACtC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACtB,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAoB5C;AAED,MAAM,MAAM,2BAA2B,GACpC;IACD,OAAO,EAAE,KAAK,CAAC;CACf,GACC;IACD,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEH;;GAEG;AACH,wBAAsB,qBAAqB,CAC1C,EAAE,EAAE,eAAe,GAAG,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,EAC1E,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,GAClB,OAAO,CAAC,2BAA2B,CAAC,CAiFtC;AAED,wBAAgB,cAAc,CAC7B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACT,OAAO,CAKT"}
@@ -1,5 +1,5 @@
1
+ import { configDir } from "#config_dir";
1
2
  import { copyFilesRecursive, formatId, getenv, padVersion, readTextFile, writeTextFile, } from "@zwave-js/shared";
2
- import { fileURLToPath } from "node:url";
3
3
  import path from "pathe";
4
4
  import semverGte from "semver/functions/gte.js";
5
5
  import semverInc from "semver/functions/inc.js";
@@ -7,12 +7,6 @@ import semverLte from "semver/functions/lte.js";
7
7
  import semverSatisfies from "semver/functions/satisfies.js";
8
8
  import semverValid from "semver/functions/valid.js";
9
9
  import { PACKAGE_VERSION } from "./_version.js";
10
- /** The absolute path of the embedded configuration directory */
11
- export const configDir = import.meta.url.startsWith("file:")
12
- ? path.join(path.dirname(fileURLToPath(import.meta.url)), import.meta.url.endsWith("src/utils.ts")
13
- ? ".."
14
- : "../..", "config")
15
- : import.meta.resolve("/config");
16
10
  /** The (optional) absolute path of an external configuration directory */
17
11
  export function getExternalConfigDirEnvVariable() {
18
12
  return getenv("ZWAVEJS_EXTERNAL_CONFIG");
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,GACb,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,OAAO,CAAC;AACzB,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,WAAW,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,gEAAgE;AAChE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;IAC3D,CAAC,CAAC,IAAI,CAAC,IAAI,CACV,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;QACvC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,EACV,QAAQ,CACR;IACD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAElC,0EAA0E;AAC1E,MAAM,UAAU,+BAA+B;IAC9C,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,cAAsB,EACtB,WAAmB,EACnB,SAAiB,EACjB,eAAwB;IAExB,OAAO,CAAC,KAAK,EAAE,EAAE;QAChB,IAAI,KAAK,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QACpE,IAAI,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1D,IAAI,eAAe,IAAI,SAAS,EAAE,CAAC;YAClC,oFAAoF;YACpF,OAAO,CACN,SAAS,CACR,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,EACrC,UAAU,CAAC,eAAe,CAAC,CAC3B;mBACE,SAAS,CACX,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,EACrC,UAAU,CAAC,eAAe,CAAC,CAC3B,CACD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAWD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,EAA0E,EAC1E,YAAoB,EACpB,MAAoB;IAEpB,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE7C,kCAAkC;IAClC,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,CAAC,KAAK,CACX,2EAA2E,EAC3E,OAAO,CACP,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,eAAe,CAAC;IACvC,MAAM,cAAc,GAAG,KAAK,cAAc,KACzC,SAAS,CACR,cAAc,EACd,OAAO,CAET,EAAE,CAAC;IAEH,kFAAkF;IAClF,oBAAoB;IACpB,kBAAkB;IAClB,oBAAoB;IACpB,gEAAgE;IAChE,+CAA+C;IAC/C,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,eAAmC,CAAC;IACxC,IAAI,CAAC;QACJ,eAAe,GAAG,MAAM,YAAY,CACnC,EAAE,EACF,uBAAuB,EACvB,MAAM,CACN,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;aAAM,IACN,CAAC,eAAe,CAAC,eAAe,EAAE,cAAc,EAAE;YACjD,iBAAiB,EAAE,IAAI;SACvB,CAAC,EACD,CAAC;YACF,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,IAAI,GAAG,IAAI,CAAC;IACb,CAAC;IAED,kDAAkD;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAgB,EAAE,CAAC;IAE/D,qCAAqC;IACrC,IAAI,CAAC;QACJ,MAAM,CAAC,KAAK,CAAC,qCAAqC,YAAY,KAAK,CAAC,CAAC;QACrE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACjC,MAAM,kBAAkB,CACvB,EAAE,EACF,SAAS,EACT,YAAY,EACZ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC9B,CAAC;QACF,MAAM,aAAa,CAClB,EAAE,EACF,uBAAuB,EACvB,cAAc,EACd,MAAM,CACN,CAAC;QACF,eAAe,GAAG,cAAc,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACR,uBAAuB;QACvB,MAAM,CAAC,KAAK,CACX,kEAAkE,EAClE,OAAO,CACP,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,OAAe,EACf,GAAW,EACX,GAAW;IAEX,OAAO,CACN,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;WAC5C,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAClD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACN,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,GACb,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,IAAI,MAAM,OAAO,CAAC;AACzB,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,WAAW,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,0EAA0E;AAC1E,MAAM,UAAU,+BAA+B;IAC9C,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,cAAsB,EACtB,WAAmB,EACnB,SAAiB,EACjB,eAAwB;IAExB,OAAO,CAAC,KAAK,EAAE,EAAE;QAChB,IAAI,KAAK,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QACpE,IAAI,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1D,IAAI,eAAe,IAAI,SAAS,EAAE,CAAC;YAClC,oFAAoF;YACpF,OAAO,CACN,SAAS,CACR,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,EACrC,UAAU,CAAC,eAAe,CAAC,CAC3B;mBACE,SAAS,CACX,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,EACrC,UAAU,CAAC,eAAe,CAAC,CAC3B,CACD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAWD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,EAA0E,EAC1E,YAAoB,EACpB,MAAoB;IAEpB,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE7C,kCAAkC;IAClC,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,CAAC,KAAK,CACX,2EAA2E,EAC3E,OAAO,CACP,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,eAAe,CAAC;IACvC,MAAM,cAAc,GAAG,KAAK,cAAc,KACzC,SAAS,CACR,cAAc,EACd,OAAO,CAET,EAAE,CAAC;IAEH,kFAAkF;IAClF,oBAAoB;IACpB,kBAAkB;IAClB,oBAAoB;IACpB,gEAAgE;IAChE,+CAA+C;IAC/C,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,eAAmC,CAAC;IACxC,IAAI,CAAC;QACJ,eAAe,GAAG,MAAM,YAAY,CACnC,EAAE,EACF,uBAAuB,EACvB,MAAM,CACN,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;aAAM,IACN,CAAC,eAAe,CAAC,eAAe,EAAE,cAAc,EAAE;YACjD,iBAAiB,EAAE,IAAI;SACvB,CAAC,EACD,CAAC;YACF,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,IAAI,GAAG,IAAI,CAAC;IACb,CAAC;IAED,kDAAkD;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAgB,EAAE,CAAC;IAE/D,qCAAqC;IACrC,IAAI,CAAC;QACJ,MAAM,CAAC,KAAK,CAAC,qCAAqC,YAAY,KAAK,CAAC,CAAC;QACrE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACjC,MAAM,kBAAkB,CACvB,EAAE,EACF,SAAS,EACT,YAAY,EACZ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC9B,CAAC;QACF,MAAM,aAAa,CAClB,EAAE,EACF,uBAAuB,EACvB,cAAc,EACd,MAAM,CACN,CAAC;QACF,eAAe,GAAG,cAAc,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACR,uBAAuB;QACvB,MAAM,CAAC,KAAK,CACX,kEAAkE,EAClE,OAAO,CACP,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,OAAe,EACf,GAAW,EACX,GAAW;IAEX,OAAO,CACN,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;WAC5C,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAClD,CAAC;AACH,CAAC"}
@@ -19,6 +19,10 @@
19
19
  {
20
20
  "productType": "0x0311",
21
21
  "productId": "0x0109"
22
+ },
23
+ {
24
+ "productType": "0x0313",
25
+ "productId": "0x0109"
22
26
  }
23
27
  ],
24
28
  "firmwareVersion": {
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@zwave-js/config",
3
- "version": "15.2.0",
3
+ "version": "15.3.0",
4
4
  "description": "zwave-js: configuration files",
5
+ "keywords": [],
5
6
  "publishConfig": {
6
7
  "access": "public"
7
8
  },
@@ -19,12 +20,30 @@
19
20
  },
20
21
  "./package.json": "./package.json"
21
22
  },
22
- "keywords": [],
23
+ "imports": {
24
+ "#default_bindings/fs": {
25
+ "@@dev": "@zwave-js/core/bindings/fs/node",
26
+ "node": "@zwave-js/core/bindings/fs/node",
27
+ "default": "@zwave-js/core/bindings/fs/stub"
28
+ },
29
+ "#default_bindings/log": {
30
+ "@@dev": "@zwave-js/core/bindings/log/node",
31
+ "node": "@zwave-js/core/bindings/log/node",
32
+ "default": "@zwave-js/core/bindings/log/stub"
33
+ },
34
+ "#config_dir": {
35
+ "@@dev": "./src/configDir.node.ts",
36
+ "browser": "./build/esm/configDir.browser.js",
37
+ "import": "./build/esm/configDir.node.js",
38
+ "require": "./build/cjs/configDir.node.js"
39
+ }
40
+ },
23
41
  "files": [
24
42
  "build/**/*.{js,cjs,mjs,d.ts,d.cts,d.mts,map}",
25
43
  "build/**/package.json",
26
44
  "config/"
27
45
  ],
46
+ "sideEffects": false,
28
47
  "author": {
29
48
  "name": "AlCalzone",
30
49
  "email": "d.griesel@gmx.net"
@@ -58,8 +77,8 @@
58
77
  "test:dirty": "tsx ../maintenance/src/resolveDirtyTests.ts --run"
59
78
  },
60
79
  "dependencies": {
61
- "@zwave-js/core": "15.1.2",
62
- "@zwave-js/shared": "15.1.2",
80
+ "@zwave-js/core": "15.3.0",
81
+ "@zwave-js/shared": "15.3.0",
63
82
  "alcalzone-shared": "^5.0.0",
64
83
  "ansi-colors": "^4.1.3",
65
84
  "json-logic-js": "^2.0.5",
@@ -73,12 +92,12 @@
73
92
  "@microsoft/api-extractor": "^7.52.2",
74
93
  "@types/js-levenshtein": "^1.1.3",
75
94
  "@types/json-logic-js": "^2.0.8",
76
- "@types/node": "^20.17.16",
95
+ "@types/node": "^20.17.32",
77
96
  "@types/semver": "^7.5.8",
78
97
  "@types/sinon": "^17.0.3",
79
98
  "@types/xml2js": "^0.4.14",
80
99
  "@types/yargs": "^17.0.33",
81
- "@zwave-js/maintenance": "15.1.2",
100
+ "@zwave-js/maintenance": "15.3.0",
82
101
  "comment-json": "^4.2.5",
83
102
  "del-cli": "^6.0.0",
84
103
  "es-main": "^1.3.0",