@digital-alchemy/hass 24.9.3 → 24.9.5

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 (276) hide show
  1. package/README.md +3 -0
  2. package/dist/dynamic.d.ts +1 -1
  3. package/dist/dynamic.js +7 -2
  4. package/dist/dynamic.js.map +1 -1
  5. package/dist/extensions/area.extension.d.ts +2 -12
  6. package/dist/extensions/area.extension.js +20 -26
  7. package/dist/extensions/area.extension.js.map +1 -1
  8. package/dist/extensions/backup.extension.d.ts +2 -7
  9. package/dist/extensions/backup.extension.js +5 -8
  10. package/dist/extensions/backup.extension.js.map +1 -1
  11. package/dist/extensions/call-proxy.extension.d.ts +1 -1
  12. package/dist/extensions/call-proxy.extension.js +3 -22
  13. package/dist/extensions/call-proxy.extension.js.map +1 -1
  14. package/dist/extensions/config.extension.d.ts +2 -6
  15. package/dist/extensions/config.extension.js +21 -25
  16. package/dist/extensions/config.extension.js.map +1 -1
  17. package/dist/extensions/conversation.extension.d.ts +2 -6
  18. package/dist/extensions/conversation.extension.js +5 -8
  19. package/dist/extensions/conversation.extension.js.map +1 -1
  20. package/dist/extensions/device.extension.d.ts +2 -5
  21. package/dist/extensions/device.extension.js +16 -22
  22. package/dist/extensions/device.extension.js.map +1 -1
  23. package/dist/extensions/entity.extension.d.ts +2 -61
  24. package/dist/extensions/entity.extension.js +42 -83
  25. package/dist/extensions/entity.extension.js.map +1 -1
  26. package/dist/extensions/events.extension.d.ts +3 -11
  27. package/dist/extensions/events.extension.js +8 -11
  28. package/dist/extensions/events.extension.js.map +1 -1
  29. package/dist/extensions/fetch-api.extension.d.ts +12 -4
  30. package/dist/extensions/fetch-api.extension.js +23 -35
  31. package/dist/extensions/fetch-api.extension.js.map +1 -1
  32. package/dist/extensions/floor.extension.d.ts +2 -9
  33. package/dist/extensions/floor.extension.js +17 -23
  34. package/dist/extensions/floor.extension.js.map +1 -1
  35. package/dist/extensions/id-by.extension.js +15 -20
  36. package/dist/extensions/id-by.extension.js.map +1 -1
  37. package/dist/extensions/index.d.ts +1 -0
  38. package/dist/extensions/index.js +16 -18
  39. package/dist/extensions/index.js.map +1 -1
  40. package/dist/extensions/internal.extension.d.ts +18 -0
  41. package/dist/extensions/internal.extension.js +102 -0
  42. package/dist/extensions/internal.extension.js.map +1 -0
  43. package/dist/extensions/label.extension.d.ts +2 -9
  44. package/dist/extensions/label.extension.js +17 -23
  45. package/dist/extensions/label.extension.js.map +1 -1
  46. package/dist/extensions/reference.extension.d.ts +2 -12
  47. package/dist/extensions/reference.extension.js +19 -25
  48. package/dist/extensions/reference.extension.js.map +1 -1
  49. package/dist/extensions/registry.extension.d.ts +2 -7
  50. package/dist/extensions/registry.extension.js +1 -4
  51. package/dist/extensions/registry.extension.js.map +1 -1
  52. package/dist/extensions/websocket-api.extension.d.ts +3 -78
  53. package/dist/extensions/websocket-api.extension.js +82 -165
  54. package/dist/extensions/websocket-api.extension.js.map +1 -1
  55. package/dist/extensions/zone.extension.d.ts +2 -7
  56. package/dist/extensions/zone.extension.js +15 -21
  57. package/dist/extensions/zone.extension.js.map +1 -1
  58. package/dist/hass.module.d.ts +47 -36
  59. package/dist/hass.module.js +70 -70
  60. package/dist/hass.module.js.map +1 -1
  61. package/dist/helpers/backup.helper.js +1 -2
  62. package/dist/helpers/constants.helper.js +15 -18
  63. package/dist/helpers/constants.helper.js.map +1 -1
  64. package/dist/helpers/device.helper.js +2 -5
  65. package/dist/helpers/device.helper.js.map +1 -1
  66. package/dist/helpers/entity-state.helper.d.ts +3 -8
  67. package/dist/helpers/entity-state.helper.js +1 -8
  68. package/dist/helpers/entity-state.helper.js.map +1 -1
  69. package/dist/helpers/features.helper.js +79 -85
  70. package/dist/helpers/features.helper.js.map +1 -1
  71. package/dist/helpers/fetch/calendar.js +1 -2
  72. package/dist/helpers/fetch/configuration.js +2 -5
  73. package/dist/helpers/fetch/configuration.js.map +1 -1
  74. package/dist/helpers/fetch/index.js +5 -8
  75. package/dist/helpers/fetch/index.js.map +1 -1
  76. package/dist/helpers/fetch/server-log.js +1 -2
  77. package/dist/helpers/fetch/server-log.js.map +1 -1
  78. package/dist/helpers/fetch/service-list.js +1 -2
  79. package/dist/helpers/fetch/weather-forecasts.js +1 -2
  80. package/dist/helpers/fetch/weather-forecasts.js.map +1 -1
  81. package/dist/helpers/fetch.helper.d.ts +162 -0
  82. package/dist/helpers/fetch.helper.js +161 -0
  83. package/dist/helpers/fetch.helper.js.map +1 -0
  84. package/dist/helpers/id-by.helper.js +1 -2
  85. package/dist/helpers/index.d.ts +2 -1
  86. package/dist/helpers/index.js +13 -15
  87. package/dist/helpers/index.js.map +1 -1
  88. package/dist/helpers/interfaces.helper.d.ts +228 -0
  89. package/dist/helpers/interfaces.helper.js +10 -0
  90. package/dist/helpers/interfaces.helper.js.map +1 -0
  91. package/dist/helpers/manifest.helper.d.ts +0 -1
  92. package/dist/helpers/manifest.helper.js +0 -1
  93. package/dist/helpers/notify.helper.d.ts +13 -5
  94. package/dist/helpers/notify.helper.js +1 -2
  95. package/dist/helpers/registry.js +7 -10
  96. package/dist/helpers/registry.js.map +1 -1
  97. package/dist/helpers/utility.helper.d.ts +6 -1
  98. package/dist/helpers/utility.helper.js +9 -13
  99. package/dist/helpers/utility.helper.js.map +1 -1
  100. package/dist/helpers/websocket.helper.d.ts +1 -2
  101. package/dist/helpers/websocket.helper.js +1 -2
  102. package/dist/index.js +5 -8
  103. package/dist/index.js.map +1 -1
  104. package/dist/mock_assistant/extensions/area.extension.d.ts +8 -0
  105. package/dist/mock_assistant/extensions/area.extension.js +51 -0
  106. package/dist/mock_assistant/extensions/area.extension.js.map +1 -0
  107. package/dist/mock_assistant/extensions/config.extension.d.ts +14 -0
  108. package/dist/mock_assistant/extensions/config.extension.js +29 -0
  109. package/dist/mock_assistant/extensions/config.extension.js.map +1 -0
  110. package/dist/mock_assistant/extensions/device.extension.d.ts +8 -0
  111. package/dist/mock_assistant/extensions/device.extension.js +33 -0
  112. package/dist/mock_assistant/extensions/device.extension.js.map +1 -0
  113. package/dist/mock_assistant/extensions/entity-registry.extension.d.ts +13 -0
  114. package/dist/mock_assistant/extensions/entity-registry.extension.js +28 -0
  115. package/dist/mock_assistant/extensions/entity-registry.extension.js.map +1 -0
  116. package/dist/mock_assistant/extensions/entity.extension.d.ts +30 -0
  117. package/dist/mock_assistant/extensions/entity.extension.js +77 -0
  118. package/dist/mock_assistant/extensions/entity.extension.js.map +1 -0
  119. package/dist/mock_assistant/extensions/events.extension.d.ts +1 -1
  120. package/dist/mock_assistant/extensions/events.extension.js +3 -6
  121. package/dist/mock_assistant/extensions/events.extension.js.map +1 -1
  122. package/dist/mock_assistant/extensions/fetch.extension.d.ts +1 -0
  123. package/dist/mock_assistant/extensions/fetch.extension.js +4 -0
  124. package/dist/mock_assistant/extensions/fetch.extension.js.map +1 -0
  125. package/dist/mock_assistant/extensions/fixtures.extension.d.ts +1 -1
  126. package/dist/mock_assistant/extensions/fixtures.extension.js +29 -33
  127. package/dist/mock_assistant/extensions/fixtures.extension.js.map +1 -1
  128. package/dist/mock_assistant/extensions/floor.extension.d.ts +8 -0
  129. package/dist/mock_assistant/extensions/floor.extension.js +51 -0
  130. package/dist/mock_assistant/extensions/floor.extension.js.map +1 -0
  131. package/dist/mock_assistant/extensions/index.d.ts +10 -0
  132. package/dist/mock_assistant/extensions/index.js +12 -5
  133. package/dist/mock_assistant/extensions/index.js.map +1 -1
  134. package/dist/mock_assistant/extensions/label.extension.d.ts +8 -0
  135. package/dist/mock_assistant/extensions/label.extension.js +51 -0
  136. package/dist/mock_assistant/extensions/label.extension.js.map +1 -0
  137. package/dist/mock_assistant/extensions/services.extension.d.ts +12 -0
  138. package/dist/mock_assistant/extensions/services.extension.js +20 -0
  139. package/dist/mock_assistant/extensions/services.extension.js.map +1 -0
  140. package/dist/mock_assistant/extensions/websocket-api.extension.d.ts +15 -0
  141. package/dist/mock_assistant/extensions/websocket-api.extension.js +68 -0
  142. package/dist/mock_assistant/extensions/websocket-api.extension.js.map +1 -0
  143. package/dist/mock_assistant/extensions/zone.extension.d.ts +8 -0
  144. package/dist/mock_assistant/extensions/zone.extension.js +51 -0
  145. package/dist/mock_assistant/extensions/zone.extension.js.map +1 -0
  146. package/dist/mock_assistant/helpers/fixtures.js +1 -2
  147. package/dist/mock_assistant/helpers/index.d.ts +0 -1
  148. package/dist/mock_assistant/helpers/index.js +1 -5
  149. package/dist/mock_assistant/helpers/index.js.map +1 -1
  150. package/dist/mock_assistant/index.js +3 -6
  151. package/dist/mock_assistant/index.js.map +1 -1
  152. package/dist/mock_assistant/main.js +11 -15
  153. package/dist/mock_assistant/main.js.map +1 -1
  154. package/dist/mock_assistant/mock-assistant.module.d.ts +156 -3
  155. package/dist/mock_assistant/mock-assistant.module.js +56 -11
  156. package/dist/mock_assistant/mock-assistant.module.js.map +1 -1
  157. package/dist/quickboot.module.js +5 -8
  158. package/dist/quickboot.module.js.map +1 -1
  159. package/dist/testing/area.spec.js +106 -194
  160. package/dist/testing/area.spec.js.map +1 -1
  161. package/dist/testing/backup.spec.js +97 -139
  162. package/dist/testing/backup.spec.js.map +1 -1
  163. package/dist/testing/config.spec.js +79 -153
  164. package/dist/testing/config.spec.js.map +1 -1
  165. package/dist/testing/device.spec.js +35 -69
  166. package/dist/testing/device.spec.js.map +1 -1
  167. package/dist/testing/entity.spec.js +94 -149
  168. package/dist/testing/entity.spec.js.map +1 -1
  169. package/dist/testing/events.spec.js +33 -57
  170. package/dist/testing/events.spec.js.map +1 -1
  171. package/dist/testing/fetch-api.spec.js +242 -427
  172. package/dist/testing/fetch-api.spec.js.map +1 -1
  173. package/dist/testing/fixtures.spec.d.ts +1 -0
  174. package/dist/testing/fixtures.spec.js +150 -0
  175. package/dist/testing/fixtures.spec.js.map +1 -0
  176. package/dist/testing/floor.spec.js +106 -194
  177. package/dist/testing/floor.spec.js.map +1 -1
  178. package/dist/testing/id-by.spec.js +68 -107
  179. package/dist/testing/id-by.spec.js.map +1 -1
  180. package/dist/testing/label.spec.js +106 -194
  181. package/dist/testing/label.spec.js.map +1 -1
  182. package/dist/testing/ref-by.spec.js +155 -219
  183. package/dist/testing/ref-by.spec.js.map +1 -1
  184. package/dist/testing/websocket.spec.d.ts +1 -8
  185. package/dist/testing/websocket.spec.js +35 -50
  186. package/dist/testing/websocket.spec.js.map +1 -1
  187. package/dist/testing/workflow.spec.js +82 -81
  188. package/dist/testing/workflow.spec.js.map +1 -1
  189. package/dist/testing/zone.spec.js +61 -113
  190. package/dist/testing/zone.spec.js.map +1 -1
  191. package/package.json +62 -44
  192. package/scripts/mock-assistant.sh +5 -0
  193. package/scripts/run-e2e.sh +7 -0
  194. package/scripts/test.sh +2 -0
  195. package/src/dynamic.ts +4254 -0
  196. package/src/extensions/area.extension.ts +118 -0
  197. package/src/extensions/backup.extension.ts +63 -0
  198. package/src/extensions/call-proxy.extension.ts +113 -0
  199. package/src/extensions/config.extension.ts +119 -0
  200. package/src/extensions/conversation.extension.ts +46 -0
  201. package/src/extensions/device.extension.ts +56 -0
  202. package/src/extensions/entity.extension.ts +344 -0
  203. package/src/extensions/events.extension.ts +25 -0
  204. package/src/extensions/fetch-api.extension.ts +269 -0
  205. package/src/extensions/floor.extension.ts +76 -0
  206. package/src/extensions/id-by.extension.ts +157 -0
  207. package/src/extensions/index.ts +16 -0
  208. package/src/extensions/internal.extension.ts +145 -0
  209. package/src/extensions/label.extension.ts +83 -0
  210. package/src/extensions/reference.extension.ts +330 -0
  211. package/src/extensions/registry.extension.ts +44 -0
  212. package/src/extensions/websocket-api.extension.ts +554 -0
  213. package/src/extensions/zone.extension.ts +69 -0
  214. package/src/hass.module.ts +217 -0
  215. package/src/helpers/backup.helper.ts +11 -0
  216. package/src/helpers/constants.helper.ts +30 -0
  217. package/src/helpers/device.helper.ts +25 -0
  218. package/src/helpers/entity-state.helper.ts +171 -0
  219. package/src/helpers/features.helper.ts +580 -0
  220. package/src/helpers/fetch/calendar.ts +54 -0
  221. package/src/helpers/fetch/configuration.ts +75 -0
  222. package/src/helpers/fetch/index.ts +5 -0
  223. package/src/helpers/fetch/server-log.ts +28 -0
  224. package/src/helpers/fetch/service-list.ts +64 -0
  225. package/src/helpers/fetch/weather-forecasts.ts +86 -0
  226. package/src/helpers/fetch.helper.ts +328 -0
  227. package/src/helpers/id-by.helper.ts +53 -0
  228. package/src/helpers/index.ts +13 -0
  229. package/src/helpers/interfaces.helper.ts +340 -0
  230. package/src/helpers/manifest.helper.ts +0 -0
  231. package/src/helpers/notify.helper.ts +302 -0
  232. package/src/helpers/registry.ts +281 -0
  233. package/src/helpers/utility.helper.ts +147 -0
  234. package/src/helpers/websocket.helper.ts +117 -0
  235. package/src/index.ts +5 -0
  236. package/src/mock_assistant/extensions/area.extension.ts +62 -0
  237. package/src/mock_assistant/extensions/config.extension.ts +33 -0
  238. package/src/mock_assistant/extensions/device.extension.ts +44 -0
  239. package/src/mock_assistant/extensions/entity-registry.extension.ts +41 -0
  240. package/src/mock_assistant/extensions/entity.extension.ts +114 -0
  241. package/src/mock_assistant/extensions/events.extension.ts +37 -0
  242. package/src/mock_assistant/extensions/fetch.extension.ts +3 -0
  243. package/src/mock_assistant/extensions/fixtures.extension.ts +79 -0
  244. package/src/mock_assistant/extensions/floor.extension.ts +64 -0
  245. package/src/mock_assistant/extensions/index.ts +12 -0
  246. package/src/mock_assistant/extensions/label.extension.ts +64 -0
  247. package/src/mock_assistant/extensions/services.extension.ts +25 -0
  248. package/src/mock_assistant/extensions/websocket-api.extension.ts +84 -0
  249. package/src/mock_assistant/extensions/zone.extension.ts +65 -0
  250. package/src/mock_assistant/helpers/fixtures.ts +22 -0
  251. package/src/mock_assistant/helpers/index.ts +1 -0
  252. package/src/mock_assistant/index.ts +3 -0
  253. package/src/mock_assistant/main.ts +46 -0
  254. package/src/mock_assistant/mock-assistant.module.ts +90 -0
  255. package/src/quickboot.module.ts +23 -0
  256. package/src/testing/area.spec.ts +189 -0
  257. package/src/testing/backup.spec.ts +157 -0
  258. package/src/testing/config.spec.ts +188 -0
  259. package/src/testing/device.spec.ts +89 -0
  260. package/src/testing/entity.spec.ts +171 -0
  261. package/src/testing/events.spec.ts +78 -0
  262. package/src/testing/fetch-api.spec.ts +410 -0
  263. package/src/testing/fixtures.spec.ts +158 -0
  264. package/src/testing/floor.spec.ts +186 -0
  265. package/src/testing/id-by.spec.ts +140 -0
  266. package/src/testing/label.spec.ts +186 -0
  267. package/src/testing/ref-by.spec.ts +300 -0
  268. package/src/testing/websocket.spec.ts +63 -0
  269. package/src/testing/workflow.spec.ts +195 -0
  270. package/src/testing/zone.spec.ts +109 -0
  271. package/dist/helpers/metrics.helper.d.ts +0 -29
  272. package/dist/helpers/metrics.helper.js +0 -62
  273. package/dist/helpers/metrics.helper.js.map +0 -1
  274. package/dist/mock_assistant/helpers/utils.d.ts +0 -4
  275. package/dist/mock_assistant/helpers/utils.js +0 -57
  276. package/dist/mock_assistant/helpers/utils.js.map +0 -1
@@ -4,8 +4,10 @@ export type AppleNotificationPush = {
4
4
  *
5
5
  * The sound to play for the notification.
6
6
  * [More info](https://companion.home-assistant.io/docs/notifications/notifications-basic#sounds)
7
+ *
8
+ * > default: "none"
7
9
  */
8
- sound?: "none" | string;
10
+ sound?: string;
9
11
  /**
10
12
  * **iOS | MacOS**
11
13
  *
@@ -31,9 +33,15 @@ export type AppleNotificationPush = {
31
33
  export type NotificationAction = {
32
34
  /**
33
35
  * Key passed back in events.
36
+ *
37
+ * ## REPLY
38
+ *
34
39
  * When set to `REPLY`, you will be prompted for text to send with the event.
40
+ *
41
+ * ## URI
42
+ *
35
43
  */
36
- action: "REPLY" | "URI" | string;
44
+ action: string;
37
45
  /**
38
46
  * Shown on the action button to the user.
39
47
  */
@@ -44,7 +52,7 @@ export type NotificationAction = {
44
52
  */
45
53
  uri?: string;
46
54
  };
47
- export type AndroidNotificationActionOptions = {};
55
+ export type AndroidNotificationActionOptions = Record<string, unknown>;
48
56
  export type AppleNotificationActionOptions = {
49
57
  /**
50
58
  * **iOS | MacOS**
@@ -110,7 +118,7 @@ export type AppleNotificationData = {
110
118
  /**
111
119
  * iOS Supports ~10 actions.
112
120
  */
113
- actions: Array<NotificationAction & AppleNotificationActionOptions>;
121
+ actions?: Array<NotificationAction & AppleNotificationActionOptions>;
114
122
  };
115
123
  export type AndroidNotificationData = {
116
124
  /**
@@ -249,7 +257,7 @@ export type AndroidNotificationData = {
249
257
  /**
250
258
  * Android Supports 3 actions.
251
259
  */
252
- actions: Array<NotificationAction & AndroidNotificationActionOptions>;
260
+ actions?: Array<NotificationAction & AndroidNotificationActionOptions>;
253
261
  };
254
262
  export type NotificationData = {
255
263
  /**
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=notify.helper.js.map
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QualityScale = exports.IotClass = exports.IntegrationType = exports.UPDATE_REGISTRY = void 0;
4
- exports.UPDATE_REGISTRY = "config/entity_registry/update";
5
- var IntegrationType;
1
+ export const UPDATE_REGISTRY = "config/entity_registry/update";
2
+ export var IntegrationType;
6
3
  (function (IntegrationType) {
7
4
  IntegrationType["Device"] = "device";
8
5
  IntegrationType["Entity"] = "entity";
@@ -10,18 +7,18 @@ var IntegrationType;
10
7
  IntegrationType["Hub"] = "hub";
11
8
  IntegrationType["Service"] = "service";
12
9
  IntegrationType["System"] = "system";
13
- })(IntegrationType || (exports.IntegrationType = IntegrationType = {}));
14
- var IotClass;
10
+ })(IntegrationType || (IntegrationType = {}));
11
+ export var IotClass;
15
12
  (function (IotClass) {
16
13
  IotClass["Calculated"] = "calculated";
17
14
  IotClass["CloudPolling"] = "cloud_polling";
18
15
  IotClass["CloudPush"] = "cloud_push";
19
16
  IotClass["LocalPolling"] = "local_polling";
20
17
  IotClass["LocalPush"] = "local_push";
21
- })(IotClass || (exports.IotClass = IotClass = {}));
22
- var QualityScale;
18
+ })(IotClass || (IotClass = {}));
19
+ export var QualityScale;
23
20
  (function (QualityScale) {
24
21
  QualityScale["Internal"] = "internal";
25
22
  QualityScale["Platinum"] = "platinum";
26
- })(QualityScale || (exports.QualityScale = QualityScale = {}));
23
+ })(QualityScale || (QualityScale = {}));
27
24
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/helpers/registry.ts"],"names":[],"mappings":";;;AAmLa,QAAA,eAAe,GAAG,+BAA+B,CAAC;AA+D/D,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;IACjB,8BAAW,CAAA;IACX,sCAAmB,CAAA;IACnB,oCAAiB,CAAA;AACnB,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B;AAED,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,qCAAyB,CAAA;IACzB,0CAA8B,CAAA;IAC9B,oCAAwB,CAAA;IACxB,0CAA8B,CAAA;IAC9B,oCAAwB,CAAA;AAC1B,CAAC,EANW,QAAQ,wBAAR,QAAQ,QAMnB;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,qCAAqB,CAAA;IACrB,qCAAqB,CAAA;AACvB,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/helpers/registry.ts"],"names":[],"mappings":"AA4KA,MAAM,CAAC,MAAM,eAAe,GAAG,+BAA+B,CAAC;AA+D/D,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;IACjB,8BAAW,CAAA;IACX,sCAAmB,CAAA;IACnB,oCAAiB,CAAA;AACnB,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAED,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,qCAAyB,CAAA;IACzB,0CAA8B,CAAA;IAC9B,oCAAwB,CAAA;IACxB,0CAA8B,CAAA;IAC9B,oCAAwB,CAAA;AAC1B,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,qCAAqB,CAAA;IACrB,qCAAqB,CAAA;AACvB,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB"}
@@ -46,9 +46,13 @@ export type ALL_DOMAINS = TRawDomains;
46
46
  */
47
47
  export type ALL_SERVICE_DOMAINS = keyof iCallService;
48
48
  export type GetDomain<ENTITY extends ANY_ENTITY> = ENTITY extends `${infer domain}.${string}` ? domain : never;
49
+ declare function isDomain<DOMAIN extends ALL_DOMAINS>(entity: string, domain: DOMAIN | DOMAIN[]): entity is PICK_ENTITY<DOMAIN>;
49
50
  declare module "@digital-alchemy/core" {
50
51
  interface IsIt {
51
- domain: <DOMAIN extends ALL_DOMAINS>(entity: string, domain: DOMAIN | DOMAIN[]) => entity is PICK_ENTITY<DOMAIN>;
52
+ /**
53
+ * Check to see if an entity matches
54
+ */
55
+ domain: typeof isDomain;
52
56
  }
53
57
  }
54
58
  export declare const PostConfigPriorities: {
@@ -60,3 +64,4 @@ export type PICK_FROM_LABEL<ID extends TLabelId, DOMAIN extends ALL_DOMAINS = AL
60
64
  export type PICK_FROM_FLOOR<ID extends TFloorId, DOMAIN extends ALL_DOMAINS = ALL_DOMAINS> = Extract<REGISTRY_SETUP["floor"][`_${ID}`], PICK_ENTITY<DOMAIN>>;
61
65
  export type PICK_FROM_DEVICE<ID extends TDeviceId, DOMAIN extends ALL_DOMAINS = ALL_DOMAINS> = Extract<REGISTRY_SETUP["device"][`_${ID}`], PICK_ENTITY<DOMAIN>>;
62
66
  export type PICK_FROM_PLATFORM<ID extends TPlatformId, DOMAIN extends ALL_DOMAINS = ALL_DOMAINS> = Extract<REGISTRY_SETUP["platform"][`_${ID}`], PICK_ENTITY<DOMAIN>>;
67
+ export {};
@@ -1,11 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PostConfigPriorities = void 0;
4
- exports.entity_split = entity_split;
5
- exports.domain = domain;
6
- const core_1 = require("@digital-alchemy/core");
7
- function entity_split(entity) {
8
- if (core_1.is.object(entity)) {
1
+ import { is } from "@digital-alchemy/core";
2
+ export function entity_split(entity) {
3
+ if (is.object(entity)) {
9
4
  entity = entity.entity_id;
10
5
  }
11
6
  return entity.split(".");
@@ -13,17 +8,18 @@ function entity_split(entity) {
13
8
  /**
14
9
  * Extract the domain from an entity with type safety
15
10
  */
16
- function domain(entity) {
17
- if (core_1.is.object(entity)) {
11
+ export function domain(entity) {
12
+ if (is.object(entity)) {
18
13
  entity = entity.entity_id;
19
14
  }
20
15
  return entity_split(entity).shift();
21
16
  }
22
- core_1.is.domain = (entity, domain) => {
17
+ function isDomain(entity, domain) {
23
18
  const [test] = entity.split(".");
24
19
  return [domain].flat().includes(test);
25
- };
26
- exports.PostConfigPriorities = {
20
+ }
21
+ is.domain = isDomain;
22
+ export const PostConfigPriorities = {
27
23
  FETCH: 1,
28
24
  VALIDATE: -1,
29
25
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utility.helper.js","sourceRoot":"","sources":["../../src/helpers/utility.helper.ts"],"names":[],"mappings":";;;AAkDA,oCAOC;AAID,wBAOC;AApED,gDAAuD;AAkDvD,SAAgB,YAAY,CAC1B,MAA8C;IAE9C,IAAI,SAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;AACpD,CAAC;AACD;;GAEG;AACH,SAAgB,MAAM,CACpB,MAA8C;IAE9C,IAAI,SAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5B,CAAC;IACD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAiB,CAAC;AACrD,CAAC;AAyCD,SAAE,CAAC,MAAM,GAAG,CACV,MAAc,EACd,MAAyB,EACM,EAAE;IACjC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC;AAWW,QAAA,oBAAoB,GAAG;IAClC,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"utility.helper.js","sourceRoot":"","sources":["../../src/helpers/utility.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAc,MAAM,uBAAuB,CAAC;AA8CvD,MAAM,UAAU,YAAY,CAC1B,MAA8C;IAE9C,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;AACpD,CAAC;AACD;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,MAA8C;IACnE,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5B,CAAC;IACD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAiB,CAAC;AACrD,CAAC;AAqCD,SAAS,QAAQ,CACf,MAAc,EACd,MAAyB;IAEzB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,EAAE,CAAC,MAAM,GAAG,QAAQ,CAAC;AAWrB,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC,CAAC;CACJ,CAAC"}
@@ -11,7 +11,7 @@ export interface SocketMessageDTO {
11
11
  event?: EntityUpdateEvent;
12
12
  id: string | number;
13
13
  message?: string;
14
- result?: Record<string, unknown>;
14
+ result?: Record<string, unknown> | Array<unknown>;
15
15
  type: `${HassSocketMessageTypes}`;
16
16
  }
17
17
  export type SocketSubscribeOptions<EVENT extends string> = {
@@ -91,7 +91,6 @@ export type EntityHistoryResult<ENTITY extends ANY_ENTITY = ANY_ENTITY, ATTRIBUT
91
91
  export type OnHassEventCallback<T = object> = (event: T) => TBlackHole;
92
92
  export type OnHassEventOptions<T = object> = {
93
93
  context: TContext;
94
- label?: string;
95
94
  exec: OnHassEventCallback<T>;
96
95
  event: string;
97
96
  once?: boolean;
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=websocket.helper.js.map
package/dist/index.js CHANGED
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./dynamic"), exports);
5
- tslib_1.__exportStar(require("./extensions"), exports);
6
- tslib_1.__exportStar(require("./hass.module"), exports);
7
- tslib_1.__exportStar(require("./helpers"), exports);
8
- tslib_1.__exportStar(require("./quickboot.module"), exports);
1
+ export * from "./dynamic";
2
+ export * from "./extensions";
3
+ export * from "./hass.module";
4
+ export * from "./helpers";
5
+ export * from "./quickboot.module";
9
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,oDAA0B;AAC1B,uDAA6B;AAC7B,wDAA8B;AAC9B,oDAA0B;AAC1B,6DAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { TServiceParams } from "@digital-alchemy/core";
2
+ import { AreaDetails } from "../../helpers";
3
+ export declare function MockAreaExtension({ mock_assistant }: TServiceParams): {
4
+ /**
5
+ * @internal
6
+ */
7
+ loadFixtures(incoming: AreaDetails[]): void;
8
+ };
@@ -0,0 +1,51 @@
1
+ export function MockAreaExtension({ mock_assistant }) {
2
+ let areas = new Map();
3
+ mock_assistant.socket.onMessage("config/area_registry/list", message => {
4
+ mock_assistant.socket.sendMessage({
5
+ id: message.id,
6
+ result: [...areas.values()],
7
+ type: "result",
8
+ });
9
+ });
10
+ mock_assistant.socket.onMessage("config/area_registry/delete", message => {
11
+ areas.delete(message.area_id);
12
+ sendUpdate();
13
+ mock_assistant.socket.sendMessage({
14
+ id: message.id,
15
+ result: null,
16
+ type: "result",
17
+ });
18
+ });
19
+ mock_assistant.socket.onMessage("config/area_registry/create", message => {
20
+ message.area_id = message.name;
21
+ areas.set(message.area_id, message);
22
+ sendUpdate();
23
+ mock_assistant.socket.sendMessage({
24
+ id: message.id,
25
+ result: null,
26
+ type: "result",
27
+ });
28
+ });
29
+ mock_assistant.socket.onMessage("config/area_registry/update", message => {
30
+ areas.set(message.area_id, message);
31
+ sendUpdate();
32
+ mock_assistant.socket.sendMessage({
33
+ id: message.id,
34
+ result: null,
35
+ type: "result",
36
+ });
37
+ });
38
+ const sendUpdate = () => mock_assistant.socket.sendMessage({
39
+ event: { event_type: "area_registry_updated" },
40
+ type: "event",
41
+ });
42
+ return {
43
+ /**
44
+ * @internal
45
+ */
46
+ loadFixtures(incoming) {
47
+ areas = new Map(incoming.map(i => [i.area_id, i]));
48
+ },
49
+ };
50
+ }
51
+ //# sourceMappingURL=area.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area.extension.js","sourceRoot":"","sources":["../../../src/mock_assistant/extensions/area.extension.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,iBAAiB,CAAC,EAAE,cAAc,EAAkB;IAClE,IAAI,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE5C,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,2BAA2B,EAAE,OAAO,CAAC,EAAE;QACrE,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,cAAc,CAAC,MAAM,CAAC,SAAS,CAAuB,6BAA6B,EAAE,OAAO,CAAC,EAAE;QAC7F,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,UAAU,EAAE,CAAC;QACb,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,cAAc,CAAC,MAAM,CAAC,SAAS,CAAc,6BAA6B,EAAE,OAAO,CAAC,EAAE;QACpF,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,IAAe,CAAC;QAC1C,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAkB,EAAE,OAAO,CAAC,CAAC;QAC/C,UAAU,EAAE,CAAC;QACb,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,cAAc,CAAC,MAAM,CAAC,SAAS,CAAc,6BAA6B,EAAE,OAAO,CAAC,EAAE;QACpF,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAkB,EAAE,OAAO,CAAC,CAAC;QAC/C,UAAU,EAAE,CAAC;QACb,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;QAChC,KAAK,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;QAC9C,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEL,OAAO;QACL;;WAEG;QACH,YAAY,CAAC,QAAuB;YAClC,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { TServiceParams } from "@digital-alchemy/core";
2
+ import { HassConfig } from "../../helpers";
3
+ export declare function MockConfig({ hass }: TServiceParams): {
4
+ current(): HassConfig;
5
+ /**
6
+ * @internal
7
+ */
8
+ loadFixtures(incoming: HassConfig): void;
9
+ merge(incoming: Partial<HassConfig>): void;
10
+ /**
11
+ * @internal
12
+ */
13
+ monkeyReset(): void;
14
+ };
@@ -0,0 +1,29 @@
1
+ import { deepExtend } from "@digital-alchemy/core";
2
+ export function MockConfig({ hass }) {
3
+ let config = { components: ["synapse"], version: "2024.4.1" };
4
+ const origConfig = hass.fetch.getConfig;
5
+ hass.fetch.getConfig = async () => config;
6
+ return {
7
+ current() {
8
+ return config;
9
+ },
10
+ /**
11
+ * @internal
12
+ */
13
+ loadFixtures(incoming) {
14
+ if (incoming) {
15
+ config = incoming;
16
+ }
17
+ },
18
+ merge(incoming) {
19
+ config = deepExtend(config, incoming);
20
+ },
21
+ /**
22
+ * @internal
23
+ */
24
+ monkeyReset() {
25
+ hass.fetch.getConfig = origConfig;
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=config.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.extension.js","sourceRoot":"","sources":["../../../src/mock_assistant/extensions/config.extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,uBAAuB,CAAC;AAInE,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAkB;IACjD,IAAI,MAAM,GAAG,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAgB,CAAC;IAE5E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC;IAE1C,OAAO;QACL,OAAO;YACL,OAAO,MAAM,CAAC;QAChB,CAAC;QACD;;WAEG;QACH,YAAY,CAAC,QAAoB;YAC/B,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,QAAQ,CAAC;YACpB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,QAA6B;YACjC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD;;WAEG;QACH,WAAW;YACT,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { TServiceParams } from "@digital-alchemy/core";
2
+ import { DeviceDetails } from "../../helpers";
3
+ export declare function MockDeviceExtension({ mock_assistant }: TServiceParams): {
4
+ /**
5
+ * @internal
6
+ */
7
+ loadFixtures(incoming: DeviceDetails[]): void;
8
+ };
@@ -0,0 +1,33 @@
1
+ import { DEVICE_REGISTRY_UPDATED } from "../../helpers";
2
+ export function MockDeviceExtension({ mock_assistant }) {
3
+ let devices = new Map();
4
+ mock_assistant.socket.onMessage("config/device_registry/list", message => {
5
+ mock_assistant.socket.sendMessage({
6
+ id: message.id,
7
+ result: [...devices.values()],
8
+ type: "result",
9
+ });
10
+ });
11
+ mock_assistant.socket.onMessage("config/device_registry/delete", message => {
12
+ devices.delete(message.device_id);
13
+ sendUpdate();
14
+ mock_assistant.socket.sendMessage({
15
+ id: message.id,
16
+ result: null,
17
+ type: "result",
18
+ });
19
+ });
20
+ const sendUpdate = () => mock_assistant.socket.sendMessage({
21
+ event: { event_type: DEVICE_REGISTRY_UPDATED },
22
+ type: "event",
23
+ });
24
+ return {
25
+ /**
26
+ * @internal
27
+ */
28
+ loadFixtures(incoming) {
29
+ devices = new Map(incoming.map(i => [i.id, i]));
30
+ },
31
+ };
32
+ }
33
+ //# sourceMappingURL=device.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.extension.js","sourceRoot":"","sources":["../../../src/mock_assistant/extensions/device.extension.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAiB,MAAM,eAAe,CAAC;AAEvE,MAAM,UAAU,mBAAmB,CAAC,EAAE,cAAc,EAAkB;IACpE,IAAI,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IAElD,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,6BAA6B,EAAE,OAAO,CAAC,EAAE;QACvE,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,cAAc,CAAC,MAAM,CAAC,SAAS,CAC7B,+BAA+B,EAC/B,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,UAAU,EAAE,CAAC;QACb,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;QAChC,KAAK,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE;QAC9C,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEL,OAAO;QACL;;WAEG;QACH,YAAY,CAAC,QAAyB;YACpC,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { TServiceParams } from "@digital-alchemy/core";
2
+ import { TRawEntityIds } from "../../dynamic";
3
+ import { EntityRegistryItem } from "../../helpers";
4
+ export declare function MockEntityRegistryExtension({ mock_assistant, hass }: TServiceParams): {
5
+ /**
6
+ * does not imply sendUpdate
7
+ */
8
+ loadFixtures(incoming: EntityRegistryItem<TRawEntityIds>[]): void;
9
+ /**
10
+ * emit entity_registry_updated
11
+ */
12
+ sendUpdate: () => void;
13
+ };
@@ -0,0 +1,28 @@
1
+ export function MockEntityRegistryExtension({ mock_assistant, hass }) {
2
+ let entityRegistry = new Map();
3
+ hass.entity.registry.list = async () => [...entityRegistry.values()];
4
+ const sendUpdate = () => mock_assistant.socket.sendMessage({
5
+ event: { event_type: "entity_registry_updated" },
6
+ type: "event",
7
+ });
8
+ mock_assistant.socket.onMessage("config/entity_registry/get", message => {
9
+ mock_assistant.socket.sendMessage({
10
+ id: message.id,
11
+ result: entityRegistry.get(message.entity_id),
12
+ type: "result",
13
+ });
14
+ });
15
+ return {
16
+ /**
17
+ * does not imply sendUpdate
18
+ */
19
+ loadFixtures(incoming) {
20
+ entityRegistry = new Map(incoming.map(i => [i.entity_id, i]));
21
+ },
22
+ /**
23
+ * emit entity_registry_updated
24
+ */
25
+ sendUpdate,
26
+ };
27
+ }
28
+ //# sourceMappingURL=entity-registry.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-registry.extension.js","sourceRoot":"","sources":["../../../src/mock_assistant/extensions/entity-registry.extension.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,2BAA2B,CAAC,EAAE,cAAc,EAAE,IAAI,EAAkB;IAClF,IAAI,cAAc,GAAG,IAAI,GAAG,EAAoD,CAAC;IAEjF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;QAChC,KAAK,EAAE,EAAE,UAAU,EAAE,yBAAyB,EAAE;QAChD,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEL,cAAc,CAAC,MAAM,CAAC,SAAS,CAC7B,4BAA4B,EAC5B,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;YAC7C,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,OAAO;QACL;;WAEG;QACH,YAAY,CAAC,QAA6C;YACxD,cAAc,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QAED;;WAEG;QACH,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { TServiceParams } from "@digital-alchemy/core";
2
+ import { TRawEntityIds } from "../../dynamic";
3
+ import { ENTITY_STATE, PICK_ENTITY } from "../../helpers";
4
+ export declare function MockEntityExtension({ hass, internal, context, logger, config, mock_assistant, }: TServiceParams): {
5
+ /**
6
+ *
7
+ */
8
+ emitChange: <ENTITY extends PICK_ENTITY>(entity: ENTITY, update: PartialUpdate<ENTITY>) => Promise<void>;
9
+ /**
10
+ * @internal
11
+ */
12
+ loadFixtures(incoming: ENTITY_STATE<TRawEntityIds>[]): void;
13
+ /**
14
+ * @internal
15
+ *
16
+ * restores code references, only used for testing internals
17
+ */
18
+ monkeyReset(): void;
19
+ /**
20
+ * Does not emit update event
21
+ *
22
+ * Intended for test setup
23
+ */
24
+ setupState: (incoming: SetupStateOptions) => void;
25
+ };
26
+ type PartialUpdate<ENTITY extends PICK_ENTITY> = Partial<Pick<ENTITY_STATE<ENTITY>, "state" | "attributes">>;
27
+ type SetupStateOptions = Partial<{
28
+ [ENTITY in PICK_ENTITY]: PartialUpdate<ENTITY>;
29
+ }>;
30
+ export {};
@@ -0,0 +1,77 @@
1
+ import { deepExtend, InternalError, is, sleep } from "@digital-alchemy/core";
2
+ export function MockEntityExtension({ hass, internal, context, logger, config, mock_assistant, }) {
3
+ let entities = new Map();
4
+ const origGetAll = hass.fetch.getAllEntities;
5
+ hass.fetch.getAllEntities = async () => [...entities.values()];
6
+ function setupState(incoming) {
7
+ if (internal.boot.completedLifecycleEvents.has("PreInit")) {
8
+ logger.error(`run [setupState] as part of the .setup command of your test`);
9
+ throw new InternalError(context, "LATE_SETUP", "Must call setupState before preInit");
10
+ }
11
+ const list = Object.keys(incoming);
12
+ list.forEach((key) => {
13
+ const data = entities.get(key);
14
+ entities.set(key, {
15
+ ...data,
16
+ state: incoming[key].state,
17
+ });
18
+ });
19
+ }
20
+ async function emitChange(entity, update) {
21
+ const old_state = entities.get(entity);
22
+ if (hass.socket.connectionState !== "connected") {
23
+ throw new InternalError(context, "EARLY_CHANGE", "Websocket does not identify as connected");
24
+ }
25
+ if (!old_state) {
26
+ throw new InternalError(context, "MISSING_ENTITY", "Cannot find existing entity for old_state");
27
+ }
28
+ const new_state = deepExtend({}, old_state);
29
+ if ("state" in update) {
30
+ new_state.state = update.state;
31
+ }
32
+ if (!is.empty(update.attributes)) {
33
+ new_state.attributes = deepExtend(new_state.attributes, update.attributes);
34
+ }
35
+ mock_assistant.socket.sendMessage({
36
+ event: {
37
+ data: { new_state, old_state },
38
+ event_type: "state_changed",
39
+ },
40
+ type: "event",
41
+ });
42
+ // allow changes to propagate properly
43
+ await sleep(config.mock_assistant.EMIT_SLEEP);
44
+ }
45
+ return {
46
+ /**
47
+ *
48
+ */
49
+ emitChange,
50
+ /**
51
+ * @internal
52
+ */
53
+ loadFixtures(incoming) {
54
+ if (!is.empty(entities)) {
55
+ // this should not be possible, the dependency resolution order of tests SHOULD prevent
56
+ // if you get this error, let me know how
57
+ throw new InternalError(context, "FIXTURES_ALREADY_LOADED", "There is data in the entity fixtures already, order of operations wrong");
58
+ }
59
+ entities = new Map(incoming.map(i => [i.entity_id, i]));
60
+ },
61
+ /**
62
+ * @internal
63
+ *
64
+ * restores code references, only used for testing internals
65
+ */
66
+ monkeyReset() {
67
+ hass.fetch.getAllEntities = origGetAll;
68
+ },
69
+ /**
70
+ * Does not emit update event
71
+ *
72
+ * Intended for test setup
73
+ */
74
+ setupState,
75
+ };
76
+ }
77
+ //# sourceMappingURL=entity.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.extension.js","sourceRoot":"","sources":["../../../src/mock_assistant/extensions/entity.extension.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { TServiceParams } from "@digital-alchemy/core";
2
2
  import { ANY_ENTITY, ENTITY_STATE } from "../../helpers";
3
- export declare function Events({ mock_assistant, hass }: TServiceParams): {
3
+ export declare function MockEvents({ mock_assistant, hass }: TServiceParams): {
4
4
  emitEntityUpdate: <ENTITY extends ANY_ENTITY>(entity: ENTITY, new_state: Partial<ENTITY_STATE<ENTITY>>) => Promise<void>;
5
5
  emitEvent: (event: string, data: object) => Promise<void>;
6
6
  };
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Events = Events;
4
- const core_1 = require("@digital-alchemy/core");
1
+ import { sleep } from "@digital-alchemy/core";
5
2
  const SUPER_SHORT = 1;
6
- function Events({ mock_assistant, hass }) {
3
+ export function MockEvents({ mock_assistant, hass }) {
7
4
  let id = 1000;
8
5
  async function emitEvent(event, data) {
9
6
  id++;
@@ -21,7 +18,7 @@ function Events({ mock_assistant, hass }) {
21
18
  new_state = mock_assistant.fixtures.replace(entity, new_state);
22
19
  await emitEvent("state_changed", { new_state, old_state });
23
20
  // help ensure all the async flows settle
24
- await (0, core_1.sleep)(SUPER_SHORT);
21
+ await sleep(SUPER_SHORT);
25
22
  }
26
23
  return {
27
24
  emitEntityUpdate,
@@ -1 +1 @@
1
- {"version":3,"file":"events.extension.js","sourceRoot":"","sources":["../../../src/mock_assistant/extensions/events.extension.ts"],"names":[],"mappings":";;AAMA,wBA8BC;AApCD,gDAA8D;AAI9D,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAAgB,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI,EAAkB;IAC7D,IAAI,EAAE,GAAG,IAAI,CAAC;IAEd,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,IAAY;QAClD,EAAE,EAAE,CAAC;QACL,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAC1B,KAAK,EAAE;gBACL,IAAI;gBACJ,UAAU,EAAE,KAAK;aACG;YACtB,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,gBAAgB,CAC7B,MAAc,EACd,SAAwC;QAExC,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,yCAAyC;QACzC,MAAM,IAAA,YAAK,EAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,gBAAgB;QAChB,SAAS;KACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"events.extension.js","sourceRoot":"","sources":["../../../src/mock_assistant/extensions/events.extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,uBAAuB,CAAC;AAI9D,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAM,UAAU,UAAU,CAAC,EAAE,cAAc,EAAE,IAAI,EAAkB;IACjE,IAAI,EAAE,GAAG,IAAI,CAAC;IAEd,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,IAAY;QAClD,EAAE,EAAE,CAAC;QACL,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAC1B,KAAK,EAAE;gBACL,IAAI;gBACJ,UAAU,EAAE,KAAK;aACG;YACtB,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,gBAAgB,CAC7B,MAAc,EACd,SAAwC;QAExC,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,yCAAyC;QACzC,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,gBAAgB;QAChB,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function MockFetchExtension(): void;
@@ -0,0 +1,4 @@
1
+ export function MockFetchExtension() {
2
+ //
3
+ }
4
+ //# sourceMappingURL=fetch.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.extension.js","sourceRoot":"","sources":["../../../src/mock_assistant/extensions/fetch.extension.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB;IAChC,EAAE;AACJ,CAAC"}
@@ -4,7 +4,7 @@ import { ScannerCacheData } from "../helpers";
4
4
  type StateOptions = Partial<{
5
5
  [entity in ANY_ENTITY]: Partial<ENTITY_STATE<entity>>;
6
6
  }>;
7
- export declare function Fixtures({ hass, lifecycle, config, internal, context, mock_assistant, }: TServiceParams): {
7
+ export declare function MockFixtures({ lifecycle, config, internal, context, mock_assistant, }: TServiceParams): {
8
8
  byId: (entity: ANY_ENTITY) => ENTITY_STATE<import("../..").TRawEntityIds>;
9
9
  data: ScannerCacheData;
10
10
  replace: <ENTITY extends ANY_ENTITY>(entity: ENTITY, new_state: Partial<ENTITY_STATE<ENTITY>>) => ENTITY_STATE<ENTITY>;