hap-nodejs 1.1.1-beta.4 → 1.1.1-beta.6

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 (289) hide show
  1. package/@types/bonjour-hap.d.ts +53 -50
  2. package/@types/simple-plist.d.ts +4 -0
  3. package/README.md +19 -16
  4. package/dist/accessories/AirConditioner_accessory.js +30 -28
  5. package/dist/accessories/AirConditioner_accessory.js.map +1 -1
  6. package/dist/accessories/AppleTVRemote_accessory.js +81 -69
  7. package/dist/accessories/AppleTVRemote_accessory.js.map +1 -1
  8. package/dist/accessories/Camera_accessory.js +136 -141
  9. package/dist/accessories/Camera_accessory.js.map +1 -1
  10. package/dist/accessories/Fan_accessory.js +22 -18
  11. package/dist/accessories/Fan_accessory.js.map +1 -1
  12. package/dist/accessories/GarageDoorOpener_accessory.js +35 -33
  13. package/dist/accessories/GarageDoorOpener_accessory.js.map +1 -1
  14. package/dist/accessories/Light-AdaptiveLighting_accessory.js +44 -42
  15. package/dist/accessories/Light-AdaptiveLighting_accessory.js.map +1 -1
  16. package/dist/accessories/Light_accessory.js +34 -32
  17. package/dist/accessories/Light_accessory.js.map +1 -1
  18. package/dist/accessories/Lock_accessory.js +26 -25
  19. package/dist/accessories/Lock_accessory.js.map +1 -1
  20. package/dist/accessories/MotionSensor_accessory.js +16 -13
  21. package/dist/accessories/MotionSensor_accessory.js.map +1 -1
  22. package/dist/accessories/Outlet_accessory.js +22 -20
  23. package/dist/accessories/Outlet_accessory.js.map +1 -1
  24. package/dist/accessories/SmartSpeaker_accessory.js +20 -18
  25. package/dist/accessories/SmartSpeaker_accessory.js.map +1 -1
  26. package/dist/accessories/Sprinkler_accessory.js +37 -34
  27. package/dist/accessories/Sprinkler_accessory.js.map +1 -1
  28. package/dist/accessories/TV_accessory.js +45 -43
  29. package/dist/accessories/TV_accessory.js.map +1 -1
  30. package/dist/accessories/TemperatureSensor_accessory.js +15 -12
  31. package/dist/accessories/TemperatureSensor_accessory.js.map +1 -1
  32. package/dist/accessories/Wi-FiRouter_accessory.d.ts +1 -1
  33. package/dist/accessories/Wi-FiRouter_accessory.d.ts.map +1 -1
  34. package/dist/accessories/Wi-FiRouter_accessory.js +12 -9
  35. package/dist/accessories/Wi-FiRouter_accessory.js.map +1 -1
  36. package/dist/accessories/Wi-FiSatellite_accessory.d.ts +1 -1
  37. package/dist/accessories/Wi-FiSatellite_accessory.d.ts.map +1 -1
  38. package/dist/accessories/Wi-FiSatellite_accessory.js +14 -11
  39. package/dist/accessories/Wi-FiSatellite_accessory.js.map +1 -1
  40. package/dist/accessories/gstreamer-audioProducer.d.ts +3 -3
  41. package/dist/accessories/gstreamer-audioProducer.d.ts.map +1 -1
  42. package/dist/accessories/gstreamer-audioProducer.js +38 -37
  43. package/dist/accessories/gstreamer-audioProducer.js.map +1 -1
  44. package/dist/accessories/types.d.ts +63 -63
  45. package/dist/accessories/types.d.ts.map +1 -1
  46. package/dist/accessories/types.js +87 -83
  47. package/dist/accessories/types.js.map +1 -1
  48. package/dist/index.d.ts +28 -26
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +34 -40
  51. package/dist/index.js.map +1 -1
  52. package/dist/internal-types.d.ts +1 -1
  53. package/dist/internal-types.d.ts.map +1 -1
  54. package/dist/internal-types.js +21 -19
  55. package/dist/internal-types.js.map +1 -1
  56. package/dist/lib/Accessory.d.ts +37 -38
  57. package/dist/lib/Accessory.d.ts.map +1 -1
  58. package/dist/lib/Accessory.js +296 -286
  59. package/dist/lib/Accessory.js.map +1 -1
  60. package/dist/lib/Advertiser.d.ts +7 -7
  61. package/dist/lib/Advertiser.d.ts.map +1 -1
  62. package/dist/lib/Advertiser.js +136 -128
  63. package/dist/lib/Advertiser.js.map +1 -1
  64. package/dist/lib/Bridge.d.ts +1 -1
  65. package/dist/lib/Bridge.d.ts.map +1 -1
  66. package/dist/lib/Bridge.js +6 -2
  67. package/dist/lib/Bridge.js.map +1 -1
  68. package/dist/lib/Characteristic.d.ts +41 -40
  69. package/dist/lib/Characteristic.d.ts.map +1 -1
  70. package/dist/lib/Characteristic.js +208 -204
  71. package/dist/lib/Characteristic.js.map +1 -1
  72. package/dist/lib/HAPServer.d.ts +30 -31
  73. package/dist/lib/HAPServer.d.ts.map +1 -1
  74. package/dist/lib/HAPServer.js +229 -220
  75. package/dist/lib/HAPServer.js.map +1 -1
  76. package/dist/lib/Service.d.ts +22 -22
  77. package/dist/lib/Service.d.ts.map +1 -1
  78. package/dist/lib/Service.js +67 -63
  79. package/dist/lib/Service.js.map +1 -1
  80. package/dist/lib/camera/RTPProxy.d.ts +1 -2
  81. package/dist/lib/camera/RTPProxy.d.ts.map +1 -1
  82. package/dist/lib/camera/RTPProxy.js +44 -28
  83. package/dist/lib/camera/RTPProxy.js.map +1 -1
  84. package/dist/lib/camera/RTPStreamManagement.d.ts +33 -34
  85. package/dist/lib/camera/RTPStreamManagement.d.ts.map +1 -1
  86. package/dist/lib/camera/RTPStreamManagement.js +149 -181
  87. package/dist/lib/camera/RTPStreamManagement.js.map +1 -1
  88. package/dist/lib/camera/RecordingManagement.d.ts +17 -19
  89. package/dist/lib/camera/RecordingManagement.d.ts.map +1 -1
  90. package/dist/lib/camera/RecordingManagement.js +151 -160
  91. package/dist/lib/camera/RecordingManagement.js.map +1 -1
  92. package/dist/lib/camera/index.d.ts +3 -3
  93. package/dist/lib/camera/index.d.ts.map +1 -1
  94. package/dist/lib/camera/index.js +6 -3
  95. package/dist/lib/camera/index.js.map +1 -1
  96. package/dist/lib/controller/AdaptiveLightingController.d.ts +33 -33
  97. package/dist/lib/controller/AdaptiveLightingController.d.ts.map +1 -1
  98. package/dist/lib/controller/AdaptiveLightingController.js +144 -152
  99. package/dist/lib/controller/AdaptiveLightingController.js.map +1 -1
  100. package/dist/lib/controller/CameraController.d.ts +20 -22
  101. package/dist/lib/controller/CameraController.d.ts.map +1 -1
  102. package/dist/lib/controller/CameraController.js +78 -74
  103. package/dist/lib/controller/CameraController.js.map +1 -1
  104. package/dist/lib/controller/Controller.d.ts +4 -4
  105. package/dist/lib/controller/Controller.d.ts.map +1 -1
  106. package/dist/lib/controller/Controller.js +8 -5
  107. package/dist/lib/controller/Controller.js.map +1 -1
  108. package/dist/lib/controller/DoorbellController.d.ts +4 -5
  109. package/dist/lib/controller/DoorbellController.d.ts.map +1 -1
  110. package/dist/lib/controller/DoorbellController.js +13 -9
  111. package/dist/lib/controller/DoorbellController.js.map +1 -1
  112. package/dist/lib/controller/RemoteController.d.ts +37 -39
  113. package/dist/lib/controller/RemoteController.d.ts.map +1 -1
  114. package/dist/lib/controller/RemoteController.js +197 -208
  115. package/dist/lib/controller/RemoteController.js.map +1 -1
  116. package/dist/lib/controller/index.d.ts +5 -5
  117. package/dist/lib/controller/index.d.ts.map +1 -1
  118. package/dist/lib/controller/index.js +8 -5
  119. package/dist/lib/controller/index.js.map +1 -1
  120. package/dist/lib/datastream/DataStreamManagement.d.ts +2 -2
  121. package/dist/lib/datastream/DataStreamManagement.d.ts.map +1 -1
  122. package/dist/lib/datastream/DataStreamManagement.js +39 -39
  123. package/dist/lib/datastream/DataStreamManagement.js.map +1 -1
  124. package/dist/lib/datastream/DataStreamParser.d.ts +0 -1
  125. package/dist/lib/datastream/DataStreamParser.d.ts.map +1 -1
  126. package/dist/lib/datastream/DataStreamParser.js +77 -57
  127. package/dist/lib/datastream/DataStreamParser.js.map +1 -1
  128. package/dist/lib/datastream/DataStreamServer.d.ts +22 -23
  129. package/dist/lib/datastream/DataStreamServer.d.ts.map +1 -1
  130. package/dist/lib/datastream/DataStreamServer.js +164 -154
  131. package/dist/lib/datastream/DataStreamServer.js.map +1 -1
  132. package/dist/lib/datastream/index.d.ts +3 -3
  133. package/dist/lib/datastream/index.d.ts.map +1 -1
  134. package/dist/lib/datastream/index.js +6 -3
  135. package/dist/lib/datastream/index.js.map +1 -1
  136. package/dist/lib/definitions/CharacteristicDefinitions.d.ts +11 -1
  137. package/dist/lib/definitions/CharacteristicDefinitions.d.ts.map +1 -1
  138. package/dist/lib/definitions/CharacteristicDefinitions.js +1218 -957
  139. package/dist/lib/definitions/CharacteristicDefinitions.js.map +1 -1
  140. package/dist/lib/definitions/ServiceDefinitions.d.ts +1 -1
  141. package/dist/lib/definitions/ServiceDefinitions.d.ts.map +1 -1
  142. package/dist/lib/definitions/ServiceDefinitions.js +695 -620
  143. package/dist/lib/definitions/ServiceDefinitions.js.map +1 -1
  144. package/dist/lib/definitions/generate-definitions.d.ts +3 -3
  145. package/dist/lib/definitions/generate-definitions.d.ts.map +1 -1
  146. package/dist/lib/definitions/generate-definitions.js +256 -244
  147. package/dist/lib/definitions/generate-definitions.js.map +1 -1
  148. package/dist/lib/definitions/generator-configuration.d.ts +1 -1
  149. package/dist/lib/definitions/generator-configuration.d.ts.map +1 -1
  150. package/dist/lib/definitions/generator-configuration.js +170 -160
  151. package/dist/lib/definitions/generator-configuration.js.map +1 -1
  152. package/dist/lib/definitions/index.d.ts +2 -2
  153. package/dist/lib/definitions/index.d.ts.map +1 -1
  154. package/dist/lib/definitions/index.js +5 -2
  155. package/dist/lib/definitions/index.js.map +1 -1
  156. package/dist/lib/gen/HomeKit.d.ts +7 -0
  157. package/dist/lib/gen/HomeKit.d.ts.map +1 -0
  158. package/dist/lib/gen/HomeKit.js +8 -0
  159. package/dist/lib/gen/HomeKit.js.map +1 -0
  160. package/dist/lib/model/AccessoryInfo.d.ts +3 -4
  161. package/dist/lib/model/AccessoryInfo.d.ts.map +1 -1
  162. package/dist/lib/model/AccessoryInfo.js +53 -50
  163. package/dist/lib/model/AccessoryInfo.js.map +1 -1
  164. package/dist/lib/model/ControllerStorage.d.ts +3 -3
  165. package/dist/lib/model/ControllerStorage.d.ts.map +1 -1
  166. package/dist/lib/model/ControllerStorage.js +23 -18
  167. package/dist/lib/model/ControllerStorage.js.map +1 -1
  168. package/dist/lib/model/HAPStorage.d.ts +2 -2
  169. package/dist/lib/model/HAPStorage.d.ts.map +1 -1
  170. package/dist/lib/model/HAPStorage.js +11 -4
  171. package/dist/lib/model/HAPStorage.js.map +1 -1
  172. package/dist/lib/model/IdentifierCache.d.ts +1 -1
  173. package/dist/lib/model/IdentifierCache.d.ts.map +1 -1
  174. package/dist/lib/model/IdentifierCache.js +27 -19
  175. package/dist/lib/model/IdentifierCache.js.map +1 -1
  176. package/dist/lib/tv/AccessControlManagement.d.ts +9 -9
  177. package/dist/lib/tv/AccessControlManagement.d.ts.map +1 -1
  178. package/dist/lib/tv/AccessControlManagement.js +29 -27
  179. package/dist/lib/tv/AccessControlManagement.js.map +1 -1
  180. package/dist/lib/util/checkName.d.ts +2 -2
  181. package/dist/lib/util/checkName.d.ts.map +1 -1
  182. package/dist/lib/util/checkName.js +9 -6
  183. package/dist/lib/util/checkName.js.map +1 -1
  184. package/dist/lib/util/clone.d.ts.map +1 -1
  185. package/dist/lib/util/clone.js +5 -1
  186. package/dist/lib/util/clone.js.map +1 -1
  187. package/dist/lib/util/color-utils.d.ts +1 -1
  188. package/dist/lib/util/color-utils.d.ts.map +1 -1
  189. package/dist/lib/util/color-utils.js +9 -4
  190. package/dist/lib/util/color-utils.js.map +1 -1
  191. package/dist/lib/util/eventedhttp.d.ts +22 -23
  192. package/dist/lib/util/eventedhttp.d.ts.map +1 -1
  193. package/dist/lib/util/eventedhttp.js +116 -109
  194. package/dist/lib/util/eventedhttp.js.map +1 -1
  195. package/dist/lib/util/hapCrypto.d.ts +2 -3
  196. package/dist/lib/util/hapCrypto.d.ts.map +1 -1
  197. package/dist/lib/util/hapCrypto.js +40 -31
  198. package/dist/lib/util/hapCrypto.js.map +1 -1
  199. package/dist/lib/util/hapStatusError.d.ts +1 -1
  200. package/dist/lib/util/hapStatusError.d.ts.map +1 -1
  201. package/dist/lib/util/hapStatusError.js +8 -4
  202. package/dist/lib/util/hapStatusError.js.map +1 -1
  203. package/dist/lib/util/net-utils.d.ts +1 -1
  204. package/dist/lib/util/net-utils.js +23 -17
  205. package/dist/lib/util/net-utils.js.map +1 -1
  206. package/dist/lib/util/once.d.ts.map +1 -1
  207. package/dist/lib/util/once.js +6 -2
  208. package/dist/lib/util/once.js.map +1 -1
  209. package/dist/lib/util/promise-utils.d.ts +1 -1
  210. package/dist/lib/util/promise-utils.d.ts.map +1 -1
  211. package/dist/lib/util/promise-utils.js +10 -3
  212. package/dist/lib/util/promise-utils.js.map +1 -1
  213. package/dist/lib/util/request-util.d.ts +2 -3
  214. package/dist/lib/util/request-util.d.ts.map +1 -1
  215. package/dist/lib/util/request-util.js +19 -11
  216. package/dist/lib/util/request-util.js.map +1 -1
  217. package/dist/lib/util/time.d.ts +0 -1
  218. package/dist/lib/util/time.d.ts.map +1 -1
  219. package/dist/lib/util/time.js +11 -6
  220. package/dist/lib/util/time.js.map +1 -1
  221. package/dist/lib/util/tlv.d.ts +0 -1
  222. package/dist/lib/util/tlv.d.ts.map +1 -1
  223. package/dist/lib/util/tlv.js +43 -28
  224. package/dist/lib/util/tlv.js.map +1 -1
  225. package/dist/lib/util/uuid.d.ts +0 -1
  226. package/dist/lib/util/uuid.d.ts.map +1 -1
  227. package/dist/lib/util/uuid.js +38 -26
  228. package/dist/lib/util/uuid.js.map +1 -1
  229. package/dist/types.d.ts +24 -24
  230. package/dist/types.d.ts.map +1 -1
  231. package/dist/types.js +5 -3
  232. package/dist/types.js.map +1 -1
  233. package/package.json +45 -50
  234. package/dist/lib/dbus/align.d.ts +0 -2
  235. package/dist/lib/dbus/align.d.ts.map +0 -1
  236. package/dist/lib/dbus/align.js +0 -12
  237. package/dist/lib/dbus/align.js.map +0 -1
  238. package/dist/lib/dbus/bus.d.ts +0 -38
  239. package/dist/lib/dbus/bus.d.ts.map +0 -1
  240. package/dist/lib/dbus/bus.js +0 -222
  241. package/dist/lib/dbus/bus.js.map +0 -1
  242. package/dist/lib/dbus/constants.d.ts +0 -43
  243. package/dist/lib/dbus/constants.d.ts.map +0 -1
  244. package/dist/lib/dbus/constants.js +0 -53
  245. package/dist/lib/dbus/constants.js.map +0 -1
  246. package/dist/lib/dbus/dbus-buffer.d.ts +0 -30
  247. package/dist/lib/dbus/dbus-buffer.d.ts.map +0 -1
  248. package/dist/lib/dbus/dbus-buffer.js +0 -175
  249. package/dist/lib/dbus/dbus-buffer.js.map +0 -1
  250. package/dist/lib/dbus/handshake.d.ts +0 -2
  251. package/dist/lib/dbus/handshake.d.ts.map +0 -1
  252. package/dist/lib/dbus/handshake.js +0 -130
  253. package/dist/lib/dbus/handshake.js.map +0 -1
  254. package/dist/lib/dbus/index.d.ts +0 -3
  255. package/dist/lib/dbus/index.d.ts.map +0 -1
  256. package/dist/lib/dbus/index.js +0 -123
  257. package/dist/lib/dbus/index.js.map +0 -1
  258. package/dist/lib/dbus/introspect.d.ts +0 -30
  259. package/dist/lib/dbus/introspect.d.ts.map +0 -1
  260. package/dist/lib/dbus/introspect.js +0 -208
  261. package/dist/lib/dbus/introspect.js.map +0 -1
  262. package/dist/lib/dbus/marshall.d.ts +0 -2
  263. package/dist/lib/dbus/marshall.d.ts.map +0 -1
  264. package/dist/lib/dbus/marshall.js +0 -97
  265. package/dist/lib/dbus/marshall.js.map +0 -1
  266. package/dist/lib/dbus/marshallers.d.ts +0 -10
  267. package/dist/lib/dbus/marshallers.d.ts.map +0 -1
  268. package/dist/lib/dbus/marshallers.js +0 -329
  269. package/dist/lib/dbus/marshallers.js.map +0 -1
  270. package/dist/lib/dbus/message.d.ts +0 -4
  271. package/dist/lib/dbus/message.d.ts.map +0 -1
  272. package/dist/lib/dbus/message.js +0 -116
  273. package/dist/lib/dbus/message.js.map +0 -1
  274. package/dist/lib/dbus/put.d.ts +0 -21
  275. package/dist/lib/dbus/put.d.ts.map +0 -1
  276. package/dist/lib/dbus/put.js +0 -120
  277. package/dist/lib/dbus/put.js.map +0 -1
  278. package/dist/lib/dbus/readline.d.ts +0 -2
  279. package/dist/lib/dbus/readline.d.ts.map +0 -1
  280. package/dist/lib/dbus/readline.js +0 -27
  281. package/dist/lib/dbus/readline.js.map +0 -1
  282. package/dist/lib/dbus/signature.d.ts +0 -2
  283. package/dist/lib/dbus/signature.d.ts.map +0 -1
  284. package/dist/lib/dbus/signature.js +0 -59
  285. package/dist/lib/dbus/signature.js.map +0 -1
  286. package/dist/lib/dbus/stdifaces.d.ts +0 -3
  287. package/dist/lib/dbus/stdifaces.d.ts.map +0 -1
  288. package/dist/lib/dbus/stdifaces.js +0 -206
  289. package/dist/lib/dbus/stdifaces.js.map +0 -1
@@ -1,41 +1,43 @@
1
- /* eslint-disable no-console */
2
- import assert from 'node:assert';
3
- import { createWriteStream, existsSync, readFileSync, writeFileSync } from 'node:fs';
4
- import { dirname, join, resolve } from 'node:path';
5
- import process from 'node:process';
6
- import { fileURLToPath } from 'node:url';
7
- import { Command } from 'commander';
8
- import { readFileSync as readPlistFileSync } from 'simple-plist';
9
- import * as Characteristic from '../Characteristic.js';
10
- import { toLongForm } from '../util/uuid.js';
11
- import './CharacteristicDefinitions.js';
12
- import { CharacteristicClassAdditions, CharacteristicDeprecatedNames, CharacteristicHidden, CharacteristicManualAdditions, CharacteristicNameOverrides, CharacteristicOverriding, CharacteristicSinceInformation, CharacteristicValidValuesOverride, ServiceCharacteristicConfigurationOverrides, ServiceDeprecatedNames, ServiceManualAdditions, ServiceNameOverrides, ServiceSinceInformation, } from './generator-configuration.js';
13
- console.log('Generating definitions...');
14
- // This is needed to have "Characteristic" not being only type import
15
- console.log(Characteristic.Characteristic);
16
- const __dirname = dirname(fileURLToPath(import.meta.url));
17
- const command = new Command('generate-definitions')
18
- .version('1.0.0')
19
- .option('-f, --force')
20
- .option('-m, --metadata <path>', 'Define a custom location for the plain-metadata.config file', '/System/Library/PrivateFrameworks/HomeKitDaemon.framework/Resources/plain-metadata.config')
21
- .requiredOption('-s, --simulator <path>', 'Define the path to the accessory simulator.');
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ /* eslint-disable @typescript-eslint/no-use-before-define */
5
+ require("./CharacteristicDefinitions");
6
+ const assert_1 = tslib_1.__importDefault(require("assert"));
7
+ const commander_1 = require("commander");
8
+ const fs_1 = tslib_1.__importDefault(require("fs"));
9
+ const path_1 = tslib_1.__importDefault(require("path"));
10
+ const simple_plist_1 = require("simple-plist");
11
+ const Characteristic_1 = require("../Characteristic");
12
+ const uuid_1 = require("../util/uuid");
13
+ const generator_configuration_1 = require("./generator-configuration");
14
+ // noinspection JSUnusedLocalSymbols
15
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
+ const temp = Characteristic_1.Characteristic; // this to have "../Characteristic" not being only type import, otherwise this would not result in a require statement
17
+ const command = new commander_1.Command("generate-definitions")
18
+ .version("1.0.0")
19
+ .option("-f, --force")
20
+ .option("-m, --metadata <path>", "Define a custom location for the plain-metadata.config file", "/System/Library/PrivateFrameworks/HomeKitDaemon.framework/Resources/plain-metadata.config")
21
+ .option("-s, --simulator <path>", "Define the path to the accessory simulator.", "/Users/benpotter/Desktop/a.app");
22
22
  command.parse(process.argv);
23
23
  const options = command.opts();
24
24
  const metadataFile = options.metadata;
25
25
  const simulator = options.simulator;
26
- if (!existsSync(metadataFile)) {
26
+ if (!fs_1.default.existsSync(metadataFile)) {
27
27
  console.warn(`The metadata file at '${metadataFile}' does not exist!`);
28
28
  process.exit(1);
29
29
  }
30
- if (!existsSync(simulator)) {
30
+ if (!fs_1.default.existsSync(simulator)) {
31
31
  console.warn(`The simulator app directory '${simulator}' does not exist!`);
32
32
  process.exit(1);
33
33
  }
34
- const defaultPlist = resolve(simulator, 'Contents/Frameworks/HAPAccessoryKit.framework/Resources/default.metadata.plist');
35
- const defaultMfiPlist = resolve(simulator, 'Contents/Frameworks/HAPAccessoryKit.framework/Resources/default_mfi.metadata.plist');
36
- const plistData = readPlistFileSync(metadataFile);
37
- const simulatorPlistData = readPlistFileSync(defaultPlist);
38
- const simulatorMfiPlistData = existsSync(defaultMfiPlist) ? readPlistFileSync(defaultMfiPlist) : undefined;
34
+ const defaultPlist = path_1.default.resolve(simulator, "Contents/Frameworks/HAPAccessoryKit.framework/Resources/default.metadata.plist");
35
+ const defaultMfiPlist = path_1.default.resolve(simulator, "Contents/Frameworks/HAPAccessoryKit.framework/Resources/default_mfi.metadata.plist");
36
+ /* eslint-disable @typescript-eslint/no-explicit-any */
37
+ const plistData = (0, simple_plist_1.readFileSync)(metadataFile);
38
+ const simulatorPlistData = (0, simple_plist_1.readFileSync)(defaultPlist);
39
+ const simulatorMfiPlistData = fs_1.default.existsSync(defaultMfiPlist) ? (0, simple_plist_1.readFileSync)(defaultMfiPlist) : undefined;
40
+ /* eslint-enable @typescript-eslint/no-explicit-any */
39
41
  if (plistData.SchemaVersion !== 1) {
40
42
  console.warn(`Detected unsupported schema version ${plistData.SchemaVersion}!`);
41
43
  }
@@ -43,14 +45,14 @@ if (plistData.PlistDictionary.SchemaVersion !== 1) {
43
45
  console.warn(`Detect unsupported PlistDictionary schema version ${plistData.PlistDictionary.SchemaVersion}!`);
44
46
  }
45
47
  console.log(`Parsing version ${plistData.Version}...`);
46
- const shouldParseCharacteristics = checkWrittenVersion('./CharacteristicDefinitions.ts', plistData.Version);
47
- const shouldParseServices = checkWrittenVersion('./ServiceDefinitions.ts', plistData.Version);
48
+ const shouldParseCharacteristics = checkWrittenVersion("./CharacteristicDefinitions.ts", plistData.Version);
49
+ const shouldParseServices = checkWrittenVersion("./ServiceDefinitions.ts", plistData.Version);
48
50
  if (!options.force && (!shouldParseCharacteristics || !shouldParseServices)) {
49
- console.log(`Parsed schema version ${plistData.Version} is older than what's already generated. `
50
- + `User --force option to generate and overwrite nonetheless!`);
51
+ console.log("Parsed schema version " + plistData.Version + " is older than what's already generated. " +
52
+ "User --force option to generate and overwrite nonetheless!");
51
53
  process.exit(1);
52
54
  }
53
- const undefinedUnits = ['micrograms/m^3', 'ppm'];
55
+ const undefinedUnits = ["micrograms/m^3", "ppm"];
54
56
  let characteristics;
55
57
  const simulatorCharacteristics = new Map();
56
58
  let services;
@@ -60,11 +62,13 @@ const properties = new Map();
60
62
  try {
61
63
  characteristics = checkDefined(plistData.PlistDictionary.HAP.Characteristics);
62
64
  services = checkDefined(plistData.PlistDictionary.HAP.Services);
63
- // eslint-disable-next-line unused-imports/no-unused-vars
65
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
64
66
  units = checkDefined(plistData.PlistDictionary.HAP.Units);
65
67
  categories = checkDefined(plistData.PlistDictionary.HomeKit.Categories);
66
68
  const props = checkDefined(plistData.PlistDictionary.HAP.Properties);
67
- for (const [id, definition] of Object.entries(props).sort(([, aDef], [, bDef]) => aDef.Position - bDef.Position)) {
69
+ // noinspection JSUnusedLocalSymbols
70
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
71
+ for (const [id, definition] of Object.entries(props).sort(([a, aDef], [b, bDef]) => aDef.Position - bDef.Position)) {
68
72
  const perm = characteristicPerm(id);
69
73
  if (perm) {
70
74
  const num = 1 << definition.Position;
@@ -81,7 +85,7 @@ try {
81
85
  }
82
86
  }
83
87
  catch (error) {
84
- console.log('Unexpected structure of the plist file!');
88
+ console.log("Unexpected structure of the plist file!");
85
89
  throw error;
86
90
  }
87
91
  // first step is to check if we are up to date on categories
@@ -90,11 +94,11 @@ for (const definition of Object.values(categories)) {
90
94
  console.log(`Detected a new category '${definition.DefaultDescription}' with id ${definition.Identifier}`);
91
95
  }
92
96
  }
93
- const characteristicOutput = createWriteStream(join(__dirname, 'CharacteristicDefinitions.ts'));
94
- characteristicOutput.write('// THIS FILE IS AUTO-GENERATED - DO NOT MODIFY\n');
97
+ const characteristicOutput = fs_1.default.createWriteStream(path_1.default.join(__dirname, "CharacteristicDefinitions.ts"));
98
+ characteristicOutput.write("// THIS FILE IS AUTO-GENERATED - DO NOT MODIFY\n");
95
99
  characteristicOutput.write(`// V=${plistData.Version}\n`);
96
- characteristicOutput.write('\n');
97
- characteristicOutput.write('import { Access, Characteristic, Formats, Perms, Units } from \'../Characteristic.js\'\n');
100
+ characteristicOutput.write("\n");
101
+ characteristicOutput.write("import { Access, Characteristic, Formats, Perms, Units } from \"../Characteristic\";\n\n");
98
102
  /**
99
103
  * Characteristics
100
104
  */
@@ -102,51 +106,51 @@ const generatedCharacteristics = {}; // indexed by id
102
106
  const writtenCharacteristicEntries = {}; // indexed by class name
103
107
  for (const [id, definition] of Object.entries(characteristics)) {
104
108
  try {
105
- if (CharacteristicHidden.has(id)) {
109
+ if (generator_configuration_1.CharacteristicHidden.has(id)) {
106
110
  continue;
107
111
  }
108
112
  // "Carbon dioxide Detected" -> "Carbon Dioxide Detected"
109
- const name = (CharacteristicNameOverrides.get(id)
110
- ?? definition.DefaultDescription).split(' ').map(entry => entry[0].toUpperCase() + entry.slice(1)).join(' ');
111
- const deprecatedName = CharacteristicDeprecatedNames.get(id);
113
+ const name = (generator_configuration_1.CharacteristicNameOverrides.get(id)
114
+ ?? definition.DefaultDescription).split(" ").map(entry => entry[0].toUpperCase() + entry.slice(1)).join(" ");
115
+ const deprecatedName = generator_configuration_1.CharacteristicDeprecatedNames.get(id);
112
116
  // "Target Door State" -> "TargetDoorState", "PM2.5" -> "PM2_5"
113
- const className = name.replace(/[\s-]/g, '').replace(/\./g, '_');
114
- const deprecatedClassName = deprecatedName?.replace(/[\s-]/g, '').replace(/\./g, '_');
115
- const longUUID = toLongForm(definition.ShortUUID);
117
+ const className = name.replace(/[\s-]/g, "").replace(/[.]/g, "_");
118
+ const deprecatedClassName = deprecatedName?.replace(/[\s-]/g, "").replace(/[.]/g, "_");
119
+ const longUUID = (0, uuid_1.toLongForm)(definition.ShortUUID);
116
120
  const simulatorCharacteristic = simulatorCharacteristics.get(longUUID);
117
121
  const validValues = simulatorCharacteristic?.Constraints?.ValidValues || {};
118
- const validValuesOverride = CharacteristicValidValuesOverride.get(id);
122
+ const validValuesOverride = generator_configuration_1.CharacteristicValidValuesOverride.get(id);
119
123
  if (validValuesOverride) {
120
124
  for (const [key, value] of Object.entries(validValuesOverride)) {
121
125
  validValues[key] = value;
122
126
  }
123
127
  }
124
128
  for (const [value, name] of Object.entries(validValues)) {
125
- let constName = name.toUpperCase().replace(/\W+/g, '_');
129
+ let constName = name.toUpperCase().replace(/[^\w]+/g, "_");
126
130
  if (/^[1-9]/.test(constName)) {
127
- constName = `_${constName}`; // variables can't start with a number
131
+ constName = "_" + constName; // variables can't start with a number
128
132
  }
129
133
  validValues[value] = constName;
130
134
  }
131
135
  const validBits = simulatorCharacteristic?.Constraints?.ValidBits;
132
- let validBitMasks;
136
+ let validBitMasks = undefined;
133
137
  if (validBits) {
134
138
  validBitMasks = {};
135
139
  for (const [value, name] of Object.entries(validBits)) {
136
- let constName = name.toUpperCase().replace(/\W+/g, '_');
140
+ let constName = name.toUpperCase().replace(/[^\w]+/g, "_");
137
141
  if (/^[1-9]/.test(constName)) {
138
- constName = `_${constName}`; // variables can't start with a number
142
+ constName = "_" + constName; // variables can't start with a number
139
143
  }
140
- validBitMasks[`${1 << Number.parseInt(value, 10)}`] = `${constName}_BIT_MASK`;
144
+ validBitMasks["" + (1 << parseInt(value, 10))] = constName + "_BIT_MASK";
141
145
  }
142
146
  }
143
147
  const generatedCharacteristic = {
144
- id,
148
+ id: id,
145
149
  UUID: longUUID,
146
- name,
147
- className,
148
- deprecatedClassName,
149
- since: CharacteristicSinceInformation.get(id),
150
+ name: name,
151
+ className: className,
152
+ deprecatedClassName: deprecatedClassName,
153
+ since: generator_configuration_1.CharacteristicSinceInformation.get(id),
150
154
  format: definition.Format,
151
155
  units: definition.Units,
152
156
  properties: definition.Properties,
@@ -154,12 +158,12 @@ for (const [id, definition] of Object.entries(characteristics)) {
154
158
  maxValue: definition.MaxValue,
155
159
  stepValue: definition.StepValue,
156
160
  maxLength: definition.MaxLength,
157
- validValues,
158
- validBitMasks,
159
- classAdditions: CharacteristicClassAdditions.get(id),
161
+ validValues: validValues,
162
+ validBitMasks: validBitMasks,
163
+ classAdditions: generator_configuration_1.CharacteristicClassAdditions.get(id),
160
164
  };
161
165
  // call any handler which wants to manually override properties of the generated characteristic
162
- CharacteristicOverriding.get(id)?.(generatedCharacteristic);
166
+ generator_configuration_1.CharacteristicOverriding.get(id)?.(generatedCharacteristic);
163
167
  generatedCharacteristics[id] = generatedCharacteristic;
164
168
  writtenCharacteristicEntries[className] = generatedCharacteristic;
165
169
  if (deprecatedClassName) {
@@ -167,10 +171,10 @@ for (const [id, definition] of Object.entries(characteristics)) {
167
171
  }
168
172
  }
169
173
  catch (error) {
170
- throw new Error(`Error thrown generating characteristic '${id}' (${definition.DefaultDescription}): ${error.message}`);
174
+ throw new Error("Error thrown generating characteristic '" + id + "' (" + definition.DefaultDescription + "): " + error.message);
171
175
  }
172
176
  }
173
- for (const [id, generated] of CharacteristicManualAdditions) {
177
+ for (const [id, generated] of generator_configuration_1.CharacteristicManualAdditions) {
174
178
  generatedCharacteristics[id] = generated;
175
179
  writtenCharacteristicEntries[generated.className] = generated;
176
180
  if (generated.deprecatedClassName) {
@@ -180,20 +184,20 @@ for (const [id, generated] of CharacteristicManualAdditions) {
180
184
  for (const generated of Object.values(generatedCharacteristics)
181
185
  .sort((a, b) => a.className.localeCompare(b.className))) {
182
186
  try {
183
- characteristicOutput.write('\n/**\n');
184
- characteristicOutput.write(` * Characteristic "${generated.name}"\n`);
187
+ characteristicOutput.write("/**\n");
188
+ characteristicOutput.write(" * Characteristic \"" + generated.name + "\"\n");
185
189
  if (generated.since) {
186
- characteristicOutput.write(` * @since iOS ${generated.since}\n`);
190
+ characteristicOutput.write(" * @since iOS " + generated.since + "\n");
187
191
  }
188
192
  if (generated.deprecatedNotice) {
189
- characteristicOutput.write(` * @deprecated ${generated.deprecatedNotice}\n`);
193
+ characteristicOutput.write(" * @deprecated " + generated.deprecatedNotice + "\n");
190
194
  }
191
- characteristicOutput.write(' */\n');
192
- characteristicOutput.write(`export class ${generated.className} extends Characteristic {\n`);
193
- characteristicOutput.write(` public static readonly UUID: string = '${generated.UUID}'\n\n`);
195
+ characteristicOutput.write(" */\n");
196
+ characteristicOutput.write("export class " + generated.className + " extends Characteristic {\n\n");
197
+ characteristicOutput.write(" public static readonly UUID: string = \"" + generated.UUID + "\";\n\n");
194
198
  const classAdditions = generated.classAdditions;
195
199
  if (classAdditions) {
196
- characteristicOutput.write(`${classAdditions.map(line => ` ${line}\n`).join('')}\n`);
200
+ characteristicOutput.write(classAdditions.map(line => " " + line + "\n").join("") + "\n");
197
201
  }
198
202
  const validValuesEntries = Object.entries(generated.validValues ?? {});
199
203
  if (validValuesEntries.length) {
@@ -201,85 +205,90 @@ for (const generated of Object.values(generatedCharacteristics)
201
205
  if (!name) {
202
206
  continue;
203
207
  }
204
- // fix a weird edge case
208
+ // fix a weird edge case, still present in V=886
205
209
  let printName = name;
206
- if (name === 'PROGRAM_SCHEDULED_MANUAL_MODE_') {
207
- printName = 'PROGRAM_SCHEDULED_MANUAL_MODE';
210
+ if (name === "PROGRAM_SCHEDULED_MANUAL_MODE_") {
211
+ printName = "PROGRAM_SCHEDULED_MANUAL_MODE";
208
212
  }
209
- characteristicOutput.write(` public static readonly ${printName} = ${value}\n`);
213
+ characteristicOutput.write(` public static readonly ${printName} = ${value};\n`);
210
214
  }
211
- characteristicOutput.write('\n');
215
+ characteristicOutput.write("\n");
212
216
  }
213
217
  if (generated.validBitMasks) {
214
218
  for (const [value, name] of Object.entries(generated.validBitMasks)) {
215
- characteristicOutput.write(` public static readonly ${name} = ${value}\n`);
219
+ characteristicOutput.write(` public static readonly ${name} = ${value};\n`);
216
220
  }
217
- characteristicOutput.write('\n');
221
+ characteristicOutput.write("\n");
218
222
  }
219
- characteristicOutput.write(' constructor() {\n');
220
- characteristicOutput.write(` super('${generated.name}', ${generated.className}.UUID, {\n`);
221
- characteristicOutput.write(` format: Formats.${characteristicFormat(generated.format)},\n`);
222
- characteristicOutput.write(` perms: [${generatePermsString(generated.id, generated.properties)}],\n`);
223
+ characteristicOutput.write(" constructor() {\n");
224
+ characteristicOutput.write(" super(\"" + generated.name + "\", " + generated.className + ".UUID, {\n");
225
+ characteristicOutput.write(" format: Formats." + characteristicFormat(generated.format) + ",\n");
226
+ characteristicOutput.write(" perms: [" + generatePermsString(generated.id, generated.properties) + "],\n");
223
227
  if (generated.units && !undefinedUnits.includes(generated.units)) {
224
- characteristicOutput.write(` unit: Units.${characteristicUnit(generated.units)},\n`);
228
+ characteristicOutput.write(" unit: Units." + characteristicUnit(generated.units) + ",\n");
225
229
  }
226
230
  if (generated.minValue != null) {
227
- characteristicOutput.write(` minValue: ${generated.minValue},\n`);
231
+ characteristicOutput.write(" minValue: " + generated.minValue + ",\n");
228
232
  }
229
233
  if (generated.maxValue != null) {
230
- characteristicOutput.write(` maxValue: ${generated.maxValue},\n`);
234
+ characteristicOutput.write(" maxValue: " + generated.maxValue + ",\n");
231
235
  }
232
236
  if (generated.stepValue != null) {
233
- characteristicOutput.write(` minStep: ${generated.stepValue},\n`);
237
+ characteristicOutput.write(" minStep: " + generated.stepValue + ",\n");
234
238
  }
235
239
  if (generated.maxLength != null) {
236
- characteristicOutput.write(` maxLen: ${generated.maxLength},\n`);
240
+ characteristicOutput.write(" maxLen: " + generated.maxLength + ",\n");
237
241
  }
238
242
  if (validValuesEntries.length) {
239
- characteristicOutput.write(` validValues: [${Object.keys(generated.validValues).join(', ')}],\n`);
243
+ characteristicOutput.write(" validValues: [" + Object.keys(generated.validValues).join(", ") + "],\n");
240
244
  }
241
245
  if (generated.adminOnlyAccess) {
242
- characteristicOutput.write(` adminOnlyAccess: [${generated.adminOnlyAccess.map(value => `Access.${characteristicAccess(value)}`).join(', ')}],\n`);
246
+ characteristicOutput.write(" adminOnlyAccess: ["
247
+ + generated.adminOnlyAccess.map(value => "Access." + characteristicAccess(value)).join(", ") + "],\n");
243
248
  }
244
- characteristicOutput.write(' })\n');
245
- characteristicOutput.write(' this.value = this.getDefaultValue()\n');
246
- characteristicOutput.write(' }\n');
247
- characteristicOutput.write('}\n');
249
+ characteristicOutput.write(" });\n");
250
+ characteristicOutput.write(" this.value = this.getDefaultValue();\n");
251
+ characteristicOutput.write(" }\n");
252
+ characteristicOutput.write("}\n");
248
253
  if (generated.deprecatedClassName) {
249
- characteristicOutput.write(`Characteristic.${generated.deprecatedClassName} = ${generated.className}\n`);
254
+ characteristicOutput.write("// noinspection JSDeprecatedSymbols\n");
255
+ characteristicOutput.write("Characteristic." + generated.deprecatedClassName + " = " + generated.className + ";\n");
250
256
  }
251
- characteristicOutput.write(`Characteristic.${generated.className} = ${generated.className}\n`);
257
+ if (generated.deprecatedNotice) {
258
+ characteristicOutput.write("// noinspection JSDeprecatedSymbols\n");
259
+ }
260
+ characteristicOutput.write("Characteristic." + generated.className + " = " + generated.className + ";\n\n");
252
261
  }
253
262
  catch (error) {
254
- throw new Error(`Error thrown writing characteristic '${generated.id}' (${generated.className}): ${error.message}`);
263
+ throw new Error("Error thrown writing characteristic '" + generated.id + "' (" + generated.className + "): " + error.message);
255
264
  }
256
265
  }
257
266
  characteristicOutput.end();
258
267
  const characteristicProperties = Object.entries(writtenCharacteristicEntries).sort(([a], [b]) => a.localeCompare(b));
259
- rewriteProperties('Characteristic', characteristicProperties);
268
+ rewriteProperties("Characteristic", characteristicProperties);
260
269
  writeCharacteristicTestFile();
261
270
  /**
262
271
  * Services
263
272
  */
264
- const serviceOutput = createWriteStream(join(__dirname, 'ServiceDefinitions.ts'));
265
- serviceOutput.write('// THIS FILE IS AUTO-GENERATED - DO NOT MODIFY\n');
273
+ const serviceOutput = fs_1.default.createWriteStream(path_1.default.join(__dirname, "ServiceDefinitions.ts"));
274
+ serviceOutput.write("// THIS FILE IS AUTO-GENERATED - DO NOT MODIFY\n");
266
275
  serviceOutput.write(`// V=${plistData.Version}\n`);
267
- serviceOutput.write('\n');
268
- serviceOutput.write('import { Characteristic } from \'../Characteristic.js\'\n');
269
- serviceOutput.write('import { Service } from \'../Service.js\'\n');
276
+ serviceOutput.write("\n");
277
+ serviceOutput.write("import { Characteristic } from \"../Characteristic\";\n");
278
+ serviceOutput.write("import { Service } from \"../Service\";\n\n");
270
279
  const generatedServices = {}; // indexed by id
271
280
  const writtenServiceEntries = {}; // indexed by class name
272
281
  for (const [id, definition] of Object.entries(services)) {
273
282
  try {
274
283
  // "Carbon dioxide Sensor" -> "Carbon Dioxide Sensor"
275
- const name = (ServiceNameOverrides.get(id) ?? definition.DefaultDescription).split(' ').map(entry => entry[0].toUpperCase() + entry.slice(1)).join(' ');
276
- const deprecatedName = ServiceDeprecatedNames.get(id);
277
- const className = name.replace(/[\s-]/g, '').replace(/\./g, '_');
278
- const deprecatedClassName = deprecatedName?.replace(/[\s-]/g, '').replace(/\./g, '_');
279
- const longUUID = toLongForm(definition.ShortUUID);
284
+ const name = (generator_configuration_1.ServiceNameOverrides.get(id) ?? definition.DefaultDescription).split(" ").map(entry => entry[0].toUpperCase() + entry.slice(1)).join(" ");
285
+ const deprecatedName = generator_configuration_1.ServiceDeprecatedNames.get(id);
286
+ const className = name.replace(/[\s-]/g, "").replace(/[.]/g, "_");
287
+ const deprecatedClassName = deprecatedName?.replace(/[\s-]/g, "").replace(/[.]/g, "_");
288
+ const longUUID = (0, uuid_1.toLongForm)(definition.ShortUUID);
280
289
  const requiredCharacteristics = definition.Characteristics.Required;
281
290
  const optionalCharacteristics = definition.Characteristics.Optional;
282
- const configurationOverride = ServiceCharacteristicConfigurationOverrides.get(id);
291
+ const configurationOverride = generator_configuration_1.ServiceCharacteristicConfigurationOverrides.get(id);
283
292
  if (configurationOverride) {
284
293
  if (configurationOverride.removedRequired) {
285
294
  for (const entry of configurationOverride.removedRequired) {
@@ -313,14 +322,14 @@ for (const [id, definition] of Object.entries(services)) {
313
322
  }
314
323
  }
315
324
  const generatedService = {
316
- id,
325
+ id: id,
317
326
  UUID: longUUID,
318
- name,
319
- className,
320
- deprecatedClassName,
321
- since: ServiceSinceInformation.get(id),
322
- requiredCharacteristics,
323
- optionalCharacteristics,
327
+ name: name,
328
+ className: className,
329
+ deprecatedClassName: deprecatedClassName,
330
+ since: generator_configuration_1.ServiceSinceInformation.get(id),
331
+ requiredCharacteristics: requiredCharacteristics,
332
+ optionalCharacteristics: optionalCharacteristics,
324
333
  };
325
334
  generatedServices[id] = generatedService;
326
335
  writtenServiceEntries[className] = generatedService;
@@ -329,10 +338,10 @@ for (const [id, definition] of Object.entries(services)) {
329
338
  }
330
339
  }
331
340
  catch (error) {
332
- throw new Error(`Error thrown generating service '${id}' (${definition.DefaultDescription}): ${error.message}`);
341
+ throw new Error("Error thrown generating service '" + id + "' (" + definition.DefaultDescription + "): " + error.message);
333
342
  }
334
343
  }
335
- for (const [id, generated] of ServiceManualAdditions) {
344
+ for (const [id, generated] of generator_configuration_1.ServiceManualAdditions) {
336
345
  generatedServices[id] = generated;
337
346
  writtenServiceEntries[generated.className] = generated;
338
347
  if (generated.deprecatedClassName) {
@@ -342,276 +351,279 @@ for (const [id, generated] of ServiceManualAdditions) {
342
351
  for (const generated of Object.values(generatedServices)
343
352
  .sort((a, b) => a.className.localeCompare(b.className))) {
344
353
  try {
345
- serviceOutput.write('\n/**\n');
346
- serviceOutput.write(` * Service "${generated.name}"\n`);
354
+ serviceOutput.write("/**\n");
355
+ serviceOutput.write(" * Service \"" + generated.name + "\"\n");
347
356
  if (generated.since) {
348
- serviceOutput.write(` * @since iOS ${generated.since}\n`);
357
+ serviceOutput.write(" * @since iOS " + generated.since + "\n");
349
358
  }
350
359
  if (generated.deprecatedNotice) {
351
- serviceOutput.write(` * @deprecated ${generated.deprecatedNotice}\n`);
352
- }
353
- serviceOutput.write(' */\n');
354
- serviceOutput.write(`export class ${generated.className} extends Service {\n`);
355
- serviceOutput.write(` public static readonly UUID: string = '${generated.UUID}'\n\n`);
356
- serviceOutput.write(' constructor(displayName?: string, subtype?: string) {\n');
357
- serviceOutput.write(` super(displayName, ${generated.className}.UUID, subtype)\n\n`);
358
- serviceOutput.write(' // Required Characteristics\n');
360
+ serviceOutput.write(" * @deprecated " + generated.deprecatedNotice + "\n");
361
+ }
362
+ serviceOutput.write(" */\n");
363
+ serviceOutput.write("export class " + generated.className + " extends Service {\n\n");
364
+ serviceOutput.write(" public static readonly UUID: string = \"" + generated.UUID + "\";\n\n");
365
+ serviceOutput.write(" constructor(displayName?: string, subtype?: string) {\n");
366
+ serviceOutput.write(" super(displayName, " + generated.className + ".UUID, subtype);\n\n");
367
+ serviceOutput.write(" // Required Characteristics\n");
359
368
  for (const required of generated.requiredCharacteristics) {
360
369
  const characteristic = generatedCharacteristics[required];
361
370
  if (!characteristic) {
362
- console.warn(`Could not find required characteristic ${required} for ${generated.className}`);
371
+ console.warn("Could not find required characteristic " + required + " for " + generated.className);
363
372
  continue;
364
373
  }
365
- if (required === 'name') {
366
- serviceOutput.write(' if (!this.testCharacteristic(Characteristic.Name)) { // workaround for Name characteristic collision in constructor\n');
367
- serviceOutput.write(' this.addCharacteristic(Characteristic.Name).updateValue(\'Unnamed Service\')\n');
368
- serviceOutput.write(' }\n');
374
+ if (required === "name") {
375
+ serviceOutput.write(" if (!this.testCharacteristic(Characteristic.Name)) { // workaround for Name characteristic collision in constructor\n");
376
+ serviceOutput.write(" this.addCharacteristic(Characteristic.Name).updateValue(\"Unnamed Service\");\n");
377
+ serviceOutput.write(" }\n");
369
378
  }
370
379
  else {
371
- serviceOutput.write(` this.addCharacteristic(Characteristic.${characteristic.className})\n`);
380
+ serviceOutput.write(" this.addCharacteristic(Characteristic." + characteristic.className + ");\n");
372
381
  }
373
382
  }
374
383
  if (generated.optionalCharacteristics?.length) {
375
- serviceOutput.write('\n // Optional Characteristics\n');
384
+ serviceOutput.write("\n // Optional Characteristics\n");
376
385
  for (const optional of generated.optionalCharacteristics) {
377
386
  const characteristic = generatedCharacteristics[optional];
378
387
  if (!characteristic) {
379
- console.warn(`Could not find optional characteristic ${optional} for ${generated.className}`);
388
+ console.warn("Could not find optional characteristic " + optional + " for " + generated.className);
380
389
  continue;
381
390
  }
382
- serviceOutput.write(` this.addOptionalCharacteristic(Characteristic.${characteristic.className})\n`);
391
+ serviceOutput.write(" this.addOptionalCharacteristic(Characteristic." + characteristic.className + ");\n");
383
392
  }
384
393
  }
385
- serviceOutput.write(' }\n}\n');
394
+ serviceOutput.write(" }\n}\n");
386
395
  if (generated.deprecatedClassName) {
387
- serviceOutput.write(`Service.${generated.deprecatedClassName} = ${generated.className}\n`);
396
+ serviceOutput.write("// noinspection JSDeprecatedSymbols\n");
397
+ serviceOutput.write("Service." + generated.deprecatedClassName + " = " + generated.className + ";\n");
398
+ }
399
+ if (generated.deprecatedNotice) {
400
+ serviceOutput.write("// noinspection JSDeprecatedSymbols\n");
388
401
  }
389
- serviceOutput.write(`Service.${generated.className} = ${generated.className}\n`);
402
+ serviceOutput.write("Service." + generated.className + " = " + generated.className + ";\n\n");
390
403
  }
391
404
  catch (error) {
392
- throw new Error(`Error thrown writing service '${generated.id}' (${generated.className}): ${error.message}`);
405
+ throw new Error("Error thrown writing service '" + generated.id + "' (" + generated.className + "): " + error.message);
393
406
  }
394
407
  }
395
408
  serviceOutput.end();
396
409
  const serviceProperties = Object.entries(writtenServiceEntries).sort(([a], [b]) => a.localeCompare(b));
397
- rewriteProperties('Service', serviceProperties);
410
+ rewriteProperties("Service", serviceProperties);
398
411
  writeServicesTestFile();
399
412
  // ------------------------ utils ------------------------
400
413
  function checkDefined(input) {
401
414
  if (!input) {
402
- throw new Error('value is undefined!');
415
+ throw new Error("value is undefined!");
403
416
  }
404
417
  return input;
405
418
  }
406
419
  function characteristicFormat(format) {
407
420
  // @ts-expect-error: forceConsistentCasingInFileNames compiler option
408
- for (const [key, value] of Object.entries(Characteristic.Formats)) {
421
+ for (const [key, value] of Object.entries(Characteristic_1.Formats)) {
409
422
  if (value === format) {
410
423
  return key;
411
424
  }
412
425
  }
413
- throw new Error(`Unknown characteristic format '${format}'`);
426
+ throw new Error("Unknown characteristic format '" + format + "'");
414
427
  }
415
428
  function characteristicUnit(unit) {
416
429
  // @ts-expect-error: forceConsistentCasingInFileNames compiler option
417
- for (const [key, value] of Object.entries(Characteristic.Units)) {
430
+ for (const [key, value] of Object.entries(Characteristic_1.Units)) {
418
431
  if (value === unit) {
419
432
  return key;
420
433
  }
421
434
  }
422
- throw new Error(`Unknown characteristic format '${unit}'`);
435
+ throw new Error("Unknown characteristic format '" + unit + "'");
423
436
  }
424
437
  function characteristicAccess(access) {
425
438
  // @ts-expect-error: forceConsistentCasingInFileNames compiler option
426
- for (const [key, value] of Object.entries(Characteristic.Access)) {
439
+ for (const [key, value] of Object.entries(Characteristic_1.Access)) {
427
440
  if (value === access) {
428
441
  return key;
429
442
  }
430
443
  }
431
- throw new Error(`Unknown access for '${access}'`);
444
+ throw new Error("Unknown access for '" + access + "'");
432
445
  }
433
446
  function characteristicPerm(id) {
434
447
  switch (id) {
435
- case 'aa':
436
- return 'ADDITIONAL_AUTHORIZATION';
437
- case 'hidden':
438
- return 'HIDDEN';
439
- case 'notify':
440
- return 'NOTIFY';
441
- case 'read':
442
- return 'PAIRED_READ';
443
- case 'timedWrite':
444
- return 'TIMED_WRITE';
445
- case 'write':
446
- return 'PAIRED_WRITE';
447
- case 'writeResponse':
448
- return 'WRITE_RESPONSE';
449
- case 'broadcast': // used for bluetooth
448
+ case "aa":
449
+ return "ADDITIONAL_AUTHORIZATION";
450
+ case "hidden":
451
+ return "HIDDEN";
452
+ case "notify":
453
+ return "NOTIFY";
454
+ case "read":
455
+ return "PAIRED_READ";
456
+ case "timedWrite":
457
+ return "TIMED_WRITE";
458
+ case "write":
459
+ return "PAIRED_WRITE";
460
+ case "writeResponse":
461
+ return "WRITE_RESPONSE";
462
+ case "broadcast": // used for bluetooth
450
463
  return undefined;
451
- case 'adminOnly':
464
+ case "adminOnly":
452
465
  return undefined; // TODO add support for it (currently unused though)
453
466
  default:
454
- throw new Error(`Received unknown perms id: ${id}`);
467
+ throw new Error("Received unknown perms id: " + id);
455
468
  }
456
469
  }
457
470
  function generatePermsString(id, propertiesBitMap) {
458
471
  const perms = [];
459
472
  for (const [bitMap, name] of properties) {
460
- if (name === 'ADDITIONAL_AUTHORIZATION') {
461
- // aa set by homed just signals that aa may be supported. Setting up aa will always require a custom-made app though
473
+ if (name === "ADDITIONAL_AUTHORIZATION") {
474
+ // aa set by homed just signals that aa may be supported. Setting up aa will always require a custom made app though
462
475
  continue;
463
476
  }
464
477
  if ((propertiesBitMap | bitMap) === propertiesBitMap) { // if it stays the same the bit is set
465
- perms.push(`Perms.${name}`);
478
+ perms.push("Perms." + name);
466
479
  }
467
480
  }
468
- const result = perms.join(', ');
469
- assert(!!result, `perms string cannot be empty (${propertiesBitMap})`);
481
+ const result = perms.join(", ");
482
+ (0, assert_1.default)(!!result, "perms string cannot be empty (" + propertiesBitMap + ")");
470
483
  return result;
471
484
  }
472
485
  function checkWrittenVersion(filePath, parsingVersion) {
473
- filePath = resolve(__dirname, filePath);
474
- const content = readFileSync(filePath, { encoding: 'utf8' }).split('\n', 3);
486
+ filePath = path_1.default.resolve(__dirname, filePath);
487
+ const content = fs_1.default.readFileSync(filePath, { encoding: "utf8" }).split("\n", 3);
475
488
  const v = content[1];
476
- if (!v.startsWith('// V=')) {
477
- throw new Error(`Could not detect definition version for '${filePath}'`);
489
+ if (!v.startsWith("// V=")) {
490
+ throw new Error("Could not detect definition version for '" + filePath + "'");
478
491
  }
479
- const version = Number.parseInt(v.replace('// V=', ''), 10);
492
+ const version = parseInt(v.replace("// V=", ""), 10);
480
493
  return parsingVersion >= version;
481
494
  }
482
495
  function rewriteProperties(className, properties) {
483
- const filePath = resolve(__dirname, `../${className}.ts`);
484
- if (!existsSync(filePath)) {
485
- throw new Error(`File '${filePath}' does not exist!`);
496
+ const filePath = path_1.default.resolve(__dirname, "../" + className + ".ts");
497
+ if (!fs_1.default.existsSync(filePath)) {
498
+ throw new Error("File '" + filePath + "' does not exist!");
486
499
  }
487
- const file = readFileSync(filePath, { encoding: 'utf8' });
488
- const lines = file.split('\n');
500
+ const file = fs_1.default.readFileSync(filePath, { encoding: "utf8" });
501
+ const lines = file.split("\n");
489
502
  let i = 0;
490
503
  let importStart = -1;
491
504
  let importEnd = -1;
492
505
  let foundImport = false;
493
506
  for (; i < lines.length; i++) {
494
507
  const line = lines[i];
495
- if (line === 'import type {') {
508
+ if (line === "import type {") {
496
509
  importStart = i; // save last import start;
497
510
  }
498
- else if (line === '} from \'./definitions\'') {
511
+ else if (line === "} from \"./definitions\";") {
499
512
  importEnd = i;
500
513
  foundImport = true;
501
514
  break;
502
515
  }
503
516
  }
504
517
  if (!foundImport) {
505
- throw new Error('Could not find import section!');
518
+ throw new Error("Could not find import section!");
506
519
  }
507
520
  let startIndex = -1;
508
521
  let stopIndex = -1;
509
522
  for (; i < lines.length; i++) {
510
- if (lines[i] === ' // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-') {
523
+ if (lines[i] === " // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-") {
511
524
  startIndex = i;
512
525
  break;
513
526
  }
514
527
  }
515
528
  if (startIndex === -1) {
516
- throw new Error('Could not find start pattern in file!');
529
+ throw new Error("Could not find start pattern in file!");
517
530
  }
518
531
  for (; i < lines.length; i++) {
519
- if (lines[i] === ' // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=') {
532
+ if (lines[i] === " // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=") {
520
533
  stopIndex = i;
521
534
  break;
522
535
  }
523
536
  }
524
537
  if (stopIndex === -1) {
525
- throw new Error('Could not find stop pattern in file!');
538
+ throw new Error("Could not find stop pattern in file!");
526
539
  }
527
540
  const importSize = importEnd - importStart - 1;
528
541
  const newImports = properties
529
542
  .filter(([key, value]) => key === value.className)
530
- .map(([key]) => ` ${key},`);
543
+ .map(([key]) => " " + key + ",");
531
544
  lines.splice(importStart + 1, importSize, ...newImports); // remove current imports
532
545
  const importDelta = newImports.length - importSize;
533
546
  startIndex += importDelta;
534
547
  stopIndex += importDelta;
535
548
  const amount = stopIndex - startIndex - 1;
536
549
  const newContentLines = properties.map(([key, value]) => {
537
- let line = '';
550
+ let line = "";
538
551
  let deprecatedNotice = value.deprecatedNotice;
539
552
  if (key !== value.className) {
540
- deprecatedNotice = `Please use {@link ${className}.${value.className}}.${ // prepend deprecated notice
541
- deprecatedNotice ? ` ${deprecatedNotice}` : ''}`;
553
+ deprecatedNotice = "Please use {@link " + className + "." + value.className + "}." // prepend deprecated notice
554
+ + (deprecatedNotice ? " " + deprecatedNotice : "");
542
555
  }
543
- line += ' /**\n';
544
- line += ` * @group ${className} Definitions\n`;
556
+ line += " /**\n";
557
+ line += " * @group " + className + " Definitions\n";
545
558
  if (deprecatedNotice) {
546
- line += ` * @deprecated ${deprecatedNotice}\n`;
559
+ line += " * @deprecated " + deprecatedNotice + "\n";
547
560
  }
548
- line += ' */\n';
549
- line += ` public static ${key}: typeof ${value.className}`;
561
+ line += " */\n";
562
+ line += " public static " + key + ": typeof " + value.className + ";";
550
563
  return line;
551
564
  });
552
565
  lines.splice(startIndex + 1, amount, ...newContentLines); // insert new lines
553
- const resultContent = lines.join('\n');
554
- writeFileSync(filePath, resultContent, { encoding: 'utf8' });
566
+ const resultContent = lines.join("\n");
567
+ fs_1.default.writeFileSync(filePath, resultContent, { encoding: "utf8" });
555
568
  }
556
569
  function writeCharacteristicTestFile() {
557
570
  const characteristics = Object.values(generatedCharacteristics).sort((a, b) => a.className.localeCompare(b.className));
558
- const testOutput = createWriteStream(resolve(__dirname, './CharacteristicDefinitions.spec.ts'), { encoding: 'utf8' });
559
- testOutput.write('// THIS FILE IS AUTO-GENERATED - DO NOT MODIFY\n');
560
- testOutput.write('/* eslint-disable no-new */\n');
561
- testOutput.write('import { describe, it } from \'vitest\'\n\n');
562
- testOutput.write('import { Characteristic } from \'../Characteristic.js\'\n');
563
- testOutput.write('import \'./index.js\'\n\n');
564
- testOutput.write('describe(\'characteristicDefinitions\', () => {');
571
+ const testOutput = fs_1.default.createWriteStream(path_1.default.resolve(__dirname, "./CharacteristicDefinitions.spec.ts"), { encoding: "utf8" });
572
+ testOutput.write("// THIS FILE IS AUTO-GENERATED - DO NOT MODIFY\n");
573
+ testOutput.write("import \"./\";\n\n");
574
+ testOutput.write("import { Characteristic } from \"../Characteristic\";\n\n");
575
+ testOutput.write("describe(\"CharacteristicDefinitions\", () => {");
565
576
  for (const generated of characteristics) {
566
- testOutput.write('\n');
567
- testOutput.write(` describe('${generated.className[0].toLowerCase()}${generated.className.slice(1)}', () => {\n`);
577
+ testOutput.write("\n");
578
+ testOutput.write(" describe(\"" + generated.className + "\", () => {\n");
568
579
  // first test is just calling the constructor
569
- testOutput.write(' it(\'should be able to construct\', () => {\n');
570
- testOutput.write(` new Characteristic.${generated.className}()\n`);
580
+ testOutput.write(" it(\"should be able to construct\", () => {\n");
581
+ testOutput.write(" new Characteristic." + generated.className + "();\n");
571
582
  if (generated.deprecatedClassName) {
572
- testOutput.write(` new Characteristic.${generated.deprecatedClassName}()\n`);
583
+ testOutput.write(" // noinspection JSDeprecatedSymbols\n");
584
+ testOutput.write(" new Characteristic." + generated.deprecatedClassName + "();\n");
573
585
  }
574
- testOutput.write(' })\n');
575
- testOutput.write(' })\n');
586
+ testOutput.write(" });\n");
587
+ testOutput.write(" });\n");
576
588
  }
577
- testOutput.write('})\n');
589
+ testOutput.write("});\n");
578
590
  testOutput.end();
579
591
  }
580
592
  function writeServicesTestFile() {
581
593
  const services = Object.values(generatedServices).sort((a, b) => a.className.localeCompare(b.className));
582
- const testOutput = createWriteStream(resolve(__dirname, './ServiceDefinitions.spec.ts'), { encoding: 'utf8' });
583
- testOutput.write('// THIS FILE IS AUTO-GENERATED - DO NOT MODIFY\n');
584
- testOutput.write('import { describe, expect, it } from \'vitest\'\n\n');
585
- testOutput.write('import { Characteristic } from \'../Characteristic.js\'\n');
586
- testOutput.write('import { Service } from \'../Service.js\'\n');
587
- testOutput.write('import \'./index.js\'\n\n');
588
- testOutput.write('describe(\'serviceDefinitions\', () => {');
594
+ const testOutput = fs_1.default.createWriteStream(path_1.default.resolve(__dirname, "./ServiceDefinitions.spec.ts"), { encoding: "utf8" });
595
+ testOutput.write("// THIS FILE IS AUTO-GENERATED - DO NOT MODIFY\n");
596
+ testOutput.write("import \"./\";\n\n");
597
+ testOutput.write("import { Characteristic } from \"../Characteristic\";\n");
598
+ testOutput.write("import { Service } from \"../Service\";\n\n");
599
+ testOutput.write("describe(\"ServiceDefinitions\", () => {");
589
600
  for (const generated of services) {
590
- testOutput.write('\n');
591
- testOutput.write(` describe('${generated.className[0].toLowerCase()}${generated.className.slice(1)}', () => {\n`);
601
+ testOutput.write("\n");
602
+ testOutput.write(" describe(\"" + generated.className + "\", () => {\n");
592
603
  // first test is just calling the constructor
593
- testOutput.write(' it(\'should be able to construct\', () => {\n');
594
- testOutput.write(` const service0 = new Service.${generated.className}()\n`);
595
- testOutput.write(` const service1 = new Service.${generated.className}('test name')\n`);
596
- testOutput.write(` const service2 = new Service.${generated.className}('test name', 'test sub type')\n\n`);
597
- testOutput.write(' expect(service0.displayName).toBe(\'\')\n');
598
- testOutput.write(` expect(service0.testCharacteristic(Characteristic.Name)).toBe(${generated.requiredCharacteristics.includes('name')})\n`);
599
- testOutput.write(' expect(service0.subtype).toBeUndefined()\n\n');
600
- testOutput.write(' expect(service1.displayName).toBe(\'test name\')\n');
601
- testOutput.write(' expect(service1.testCharacteristic(Characteristic.Name)).toBe(true)\n');
602
- testOutput.write(' expect(service1.getCharacteristic(Characteristic.Name).value).toBe(\'test name\')\n');
603
- testOutput.write(' expect(service1.subtype).toBeUndefined()\n\n');
604
- testOutput.write(' expect(service2.displayName).toBe(\'test name\')\n');
605
- testOutput.write(' expect(service2.testCharacteristic(Characteristic.Name)).toBe(true)\n');
606
- testOutput.write(' expect(service2.getCharacteristic(Characteristic.Name).value).toBe(\'test name\')\n');
607
- testOutput.write(' expect(service2.subtype).toBe(\'test sub type\')\n');
604
+ testOutput.write(" it(\"should be able to construct\", () => {\n");
605
+ testOutput.write(" const service0 = new Service." + generated.className + "();\n");
606
+ testOutput.write(" const service1 = new Service." + generated.className + "(\"test name\");\n");
607
+ testOutput.write(" const service2 = new Service." + generated.className + "(\"test name\", \"test sub type\");\n\n");
608
+ testOutput.write(" expect(service0.displayName).toBe(\"\");\n");
609
+ testOutput.write(" expect(service0.testCharacteristic(Characteristic.Name)).toBe(" + generated.requiredCharacteristics.includes("name") + ");\n");
610
+ testOutput.write(" expect(service0.subtype).toBeUndefined();\n\n");
611
+ testOutput.write(" expect(service1.displayName).toBe(\"test name\");\n");
612
+ testOutput.write(" expect(service1.testCharacteristic(Characteristic.Name)).toBe(true);\n");
613
+ testOutput.write(" expect(service1.getCharacteristic(Characteristic.Name).value).toBe(\"test name\");\n");
614
+ testOutput.write(" expect(service1.subtype).toBeUndefined();\n\n");
615
+ testOutput.write(" expect(service2.displayName).toBe(\"test name\");\n");
616
+ testOutput.write(" expect(service2.testCharacteristic(Characteristic.Name)).toBe(true);\n");
617
+ testOutput.write(" expect(service2.getCharacteristic(Characteristic.Name).value).toBe(\"test name\");\n");
618
+ testOutput.write(" expect(service2.subtype).toBe(\"test sub type\");\n");
608
619
  if (generated.deprecatedClassName) {
609
- testOutput.write(`\n new Service.${generated.deprecatedClassName}()\n`);
620
+ testOutput.write(" // noinspection JSDeprecatedSymbols\n");
621
+ testOutput.write("\n new Service." + generated.deprecatedClassName + "();\n");
610
622
  }
611
- testOutput.write(' })\n');
612
- testOutput.write(' })\n');
623
+ testOutput.write(" });\n");
624
+ testOutput.write(" });\n");
613
625
  }
614
- testOutput.write('})\n');
626
+ testOutput.write("});\n");
615
627
  testOutput.end();
616
628
  }
617
629
  //# sourceMappingURL=generate-definitions.js.map