matterbridge 3.4.6 → 3.4.7-dev-20260103-3152357

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 (345) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README-DOCKER.md +8 -0
  3. package/dist/broadcastServer.js +0 -117
  4. package/dist/broadcastServerTypes.js +0 -24
  5. package/dist/cli.js +1 -97
  6. package/dist/cliEmitter.js +0 -37
  7. package/dist/cliHistory.js +0 -38
  8. package/dist/clusters/export.js +0 -2
  9. package/dist/deviceManager.js +1 -113
  10. package/dist/devices/airConditioner.js +0 -57
  11. package/dist/devices/batteryStorage.js +1 -48
  12. package/dist/devices/cooktop.js +0 -56
  13. package/dist/devices/dishwasher.js +0 -57
  14. package/dist/devices/evse.js +10 -74
  15. package/dist/devices/export.js +0 -5
  16. package/dist/devices/extractorHood.js +0 -43
  17. package/dist/devices/heatPump.js +2 -50
  18. package/dist/devices/laundryDryer.js +3 -62
  19. package/dist/devices/laundryWasher.js +4 -70
  20. package/dist/devices/microwaveOven.js +5 -88
  21. package/dist/devices/oven.js +0 -85
  22. package/dist/devices/refrigerator.js +0 -102
  23. package/dist/devices/roboticVacuumCleaner.js +9 -100
  24. package/dist/devices/solarPower.js +0 -38
  25. package/dist/devices/speaker.js +0 -84
  26. package/dist/devices/temperatureControl.js +3 -24
  27. package/dist/devices/waterHeater.js +2 -82
  28. package/dist/dgram/coap.js +13 -126
  29. package/dist/dgram/dgram.js +2 -114
  30. package/dist/dgram/mb_coap.js +3 -41
  31. package/dist/dgram/mb_mdns.js +23 -77
  32. package/dist/dgram/mdns.js +139 -371
  33. package/dist/dgram/mdnsReflectorClient.js +5 -71
  34. package/dist/dgram/mdnsReflectorServer.js +8 -73
  35. package/dist/dgram/mdnsReflectorTypes.js +1 -24
  36. package/dist/dgram/multicast.js +1 -62
  37. package/dist/dgram/unicast.js +0 -60
  38. package/dist/frontend.js +38 -485
  39. package/dist/frontendTypes.js +0 -45
  40. package/dist/helpers.js +0 -53
  41. package/dist/index.js +0 -25
  42. package/dist/jestutils/export.js +0 -1
  43. package/dist/jestutils/jestHelpers.js +14 -371
  44. package/dist/logger/export.js +0 -1
  45. package/dist/matter/behaviors.js +0 -2
  46. package/dist/matter/clusters.js +0 -2
  47. package/dist/matter/devices.js +0 -2
  48. package/dist/matter/endpoints.js +0 -2
  49. package/dist/matter/export.js +0 -3
  50. package/dist/matter/types.js +0 -3
  51. package/dist/matterNode.js +8 -369
  52. package/dist/matterbridge.js +46 -824
  53. package/dist/matterbridgeAccessoryPlatform.js +0 -38
  54. package/dist/matterbridgeBehaviors.js +5 -68
  55. package/dist/matterbridgeDeviceTypes.js +14 -635
  56. package/dist/matterbridgeDynamicPlatform.js +0 -38
  57. package/dist/matterbridgeEndpoint.js +53 -1457
  58. package/dist/matterbridgeEndpointHelpers.js +20 -483
  59. package/dist/matterbridgeEndpointTypes.js +0 -25
  60. package/dist/matterbridgePlatform.js +1 -451
  61. package/dist/matterbridgeTypes.js +0 -26
  62. package/dist/pluginManager.js +5 -341
  63. package/dist/shelly.js +7 -178
  64. package/dist/storage/export.js +0 -1
  65. package/dist/update.js +1 -93
  66. package/dist/utils/colorUtils.js +2 -97
  67. package/dist/utils/commandLine.js +0 -60
  68. package/dist/utils/copyDirectory.js +0 -37
  69. package/dist/utils/createDirectory.js +0 -33
  70. package/dist/utils/createZip.js +2 -47
  71. package/dist/utils/deepCopy.js +0 -39
  72. package/dist/utils/deepEqual.js +1 -72
  73. package/dist/utils/error.js +0 -42
  74. package/dist/utils/export.js +0 -1
  75. package/dist/utils/format.js +0 -49
  76. package/dist/utils/hex.js +0 -124
  77. package/dist/utils/inspector.js +1 -69
  78. package/dist/utils/isValid.js +0 -93
  79. package/dist/utils/network.js +5 -125
  80. package/dist/utils/spawn.js +1 -71
  81. package/dist/utils/tracker.js +1 -64
  82. package/dist/utils/wait.js +8 -60
  83. package/dist/workerGlobalPrefix.js +5 -37
  84. package/dist/workerTypes.js +0 -24
  85. package/dist/workers.js +4 -68
  86. package/npm-shrinkwrap.json +25 -25
  87. package/package.json +1 -2
  88. package/packages/mb-lib-test/dist/jestutils/jestHelpers.js +77 -0
  89. package/packages/mb-lib-test/dist/module.js +2 -0
  90. package/packages/mb-lib-test/dist/vitestutils/vitestHelpers.js +77 -0
  91. package/packages/mb-lib-test/package.json +10 -9
  92. package/dist/broadcastServer.d.ts +0 -144
  93. package/dist/broadcastServer.d.ts.map +0 -1
  94. package/dist/broadcastServer.js.map +0 -1
  95. package/dist/broadcastServerTypes.d.ts +0 -841
  96. package/dist/broadcastServerTypes.d.ts.map +0 -1
  97. package/dist/broadcastServerTypes.js.map +0 -1
  98. package/dist/cli.d.ts +0 -30
  99. package/dist/cli.d.ts.map +0 -1
  100. package/dist/cli.js.map +0 -1
  101. package/dist/cliEmitter.d.ts +0 -50
  102. package/dist/cliEmitter.d.ts.map +0 -1
  103. package/dist/cliEmitter.js.map +0 -1
  104. package/dist/cliHistory.d.ts +0 -48
  105. package/dist/cliHistory.d.ts.map +0 -1
  106. package/dist/cliHistory.js.map +0 -1
  107. package/dist/clusters/export.d.ts +0 -2
  108. package/dist/clusters/export.d.ts.map +0 -1
  109. package/dist/clusters/export.js.map +0 -1
  110. package/dist/deviceManager.d.ts +0 -135
  111. package/dist/deviceManager.d.ts.map +0 -1
  112. package/dist/deviceManager.js.map +0 -1
  113. package/dist/devices/airConditioner.d.ts +0 -98
  114. package/dist/devices/airConditioner.d.ts.map +0 -1
  115. package/dist/devices/airConditioner.js.map +0 -1
  116. package/dist/devices/batteryStorage.d.ts +0 -48
  117. package/dist/devices/batteryStorage.d.ts.map +0 -1
  118. package/dist/devices/batteryStorage.js.map +0 -1
  119. package/dist/devices/cooktop.d.ts +0 -61
  120. package/dist/devices/cooktop.d.ts.map +0 -1
  121. package/dist/devices/cooktop.js.map +0 -1
  122. package/dist/devices/dishwasher.d.ts +0 -71
  123. package/dist/devices/dishwasher.d.ts.map +0 -1
  124. package/dist/devices/dishwasher.js.map +0 -1
  125. package/dist/devices/evse.d.ts +0 -76
  126. package/dist/devices/evse.d.ts.map +0 -1
  127. package/dist/devices/evse.js.map +0 -1
  128. package/dist/devices/export.d.ts +0 -17
  129. package/dist/devices/export.d.ts.map +0 -1
  130. package/dist/devices/export.js.map +0 -1
  131. package/dist/devices/extractorHood.d.ts +0 -46
  132. package/dist/devices/extractorHood.d.ts.map +0 -1
  133. package/dist/devices/extractorHood.js.map +0 -1
  134. package/dist/devices/heatPump.d.ts +0 -47
  135. package/dist/devices/heatPump.d.ts.map +0 -1
  136. package/dist/devices/heatPump.js.map +0 -1
  137. package/dist/devices/laundryDryer.d.ts +0 -67
  138. package/dist/devices/laundryDryer.d.ts.map +0 -1
  139. package/dist/devices/laundryDryer.js.map +0 -1
  140. package/dist/devices/laundryWasher.d.ts +0 -81
  141. package/dist/devices/laundryWasher.d.ts.map +0 -1
  142. package/dist/devices/laundryWasher.js.map +0 -1
  143. package/dist/devices/microwaveOven.d.ts +0 -168
  144. package/dist/devices/microwaveOven.d.ts.map +0 -1
  145. package/dist/devices/microwaveOven.js.map +0 -1
  146. package/dist/devices/oven.d.ts +0 -105
  147. package/dist/devices/oven.d.ts.map +0 -1
  148. package/dist/devices/oven.js.map +0 -1
  149. package/dist/devices/refrigerator.d.ts +0 -118
  150. package/dist/devices/refrigerator.d.ts.map +0 -1
  151. package/dist/devices/refrigerator.js.map +0 -1
  152. package/dist/devices/roboticVacuumCleaner.d.ts +0 -112
  153. package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
  154. package/dist/devices/roboticVacuumCleaner.js.map +0 -1
  155. package/dist/devices/solarPower.d.ts +0 -40
  156. package/dist/devices/solarPower.d.ts.map +0 -1
  157. package/dist/devices/solarPower.js.map +0 -1
  158. package/dist/devices/speaker.d.ts +0 -87
  159. package/dist/devices/speaker.d.ts.map +0 -1
  160. package/dist/devices/speaker.js.map +0 -1
  161. package/dist/devices/temperatureControl.d.ts +0 -166
  162. package/dist/devices/temperatureControl.d.ts.map +0 -1
  163. package/dist/devices/temperatureControl.js.map +0 -1
  164. package/dist/devices/waterHeater.d.ts +0 -111
  165. package/dist/devices/waterHeater.d.ts.map +0 -1
  166. package/dist/devices/waterHeater.js.map +0 -1
  167. package/dist/dgram/coap.d.ts +0 -205
  168. package/dist/dgram/coap.d.ts.map +0 -1
  169. package/dist/dgram/coap.js.map +0 -1
  170. package/dist/dgram/dgram.d.ts +0 -143
  171. package/dist/dgram/dgram.d.ts.map +0 -1
  172. package/dist/dgram/dgram.js.map +0 -1
  173. package/dist/dgram/mb_coap.d.ts +0 -24
  174. package/dist/dgram/mb_coap.d.ts.map +0 -1
  175. package/dist/dgram/mb_coap.js.map +0 -1
  176. package/dist/dgram/mb_mdns.d.ts +0 -24
  177. package/dist/dgram/mb_mdns.d.ts.map +0 -1
  178. package/dist/dgram/mb_mdns.js.map +0 -1
  179. package/dist/dgram/mdns.d.ts +0 -371
  180. package/dist/dgram/mdns.d.ts.map +0 -1
  181. package/dist/dgram/mdns.js.map +0 -1
  182. package/dist/dgram/mdnsReflectorClient.d.ts +0 -88
  183. package/dist/dgram/mdnsReflectorClient.d.ts.map +0 -1
  184. package/dist/dgram/mdnsReflectorClient.js.map +0 -1
  185. package/dist/dgram/mdnsReflectorServer.d.ts +0 -78
  186. package/dist/dgram/mdnsReflectorServer.d.ts.map +0 -1
  187. package/dist/dgram/mdnsReflectorServer.js.map +0 -1
  188. package/dist/dgram/mdnsReflectorTypes.d.ts +0 -28
  189. package/dist/dgram/mdnsReflectorTypes.d.ts.map +0 -1
  190. package/dist/dgram/mdnsReflectorTypes.js.map +0 -1
  191. package/dist/dgram/multicast.d.ts +0 -67
  192. package/dist/dgram/multicast.d.ts.map +0 -1
  193. package/dist/dgram/multicast.js.map +0 -1
  194. package/dist/dgram/unicast.d.ts +0 -64
  195. package/dist/dgram/unicast.d.ts.map +0 -1
  196. package/dist/dgram/unicast.js.map +0 -1
  197. package/dist/frontend.d.ts +0 -245
  198. package/dist/frontend.d.ts.map +0 -1
  199. package/dist/frontend.js.map +0 -1
  200. package/dist/frontendTypes.d.ts +0 -529
  201. package/dist/frontendTypes.d.ts.map +0 -1
  202. package/dist/frontendTypes.js.map +0 -1
  203. package/dist/helpers.d.ts +0 -48
  204. package/dist/helpers.d.ts.map +0 -1
  205. package/dist/helpers.js.map +0 -1
  206. package/dist/index.d.ts +0 -34
  207. package/dist/index.d.ts.map +0 -1
  208. package/dist/index.js.map +0 -1
  209. package/dist/jestutils/export.d.ts +0 -2
  210. package/dist/jestutils/export.d.ts.map +0 -1
  211. package/dist/jestutils/export.js.map +0 -1
  212. package/dist/jestutils/jestHelpers.d.ts +0 -345
  213. package/dist/jestutils/jestHelpers.d.ts.map +0 -1
  214. package/dist/jestutils/jestHelpers.js.map +0 -1
  215. package/dist/logger/export.d.ts +0 -2
  216. package/dist/logger/export.d.ts.map +0 -1
  217. package/dist/logger/export.js.map +0 -1
  218. package/dist/matter/behaviors.d.ts +0 -2
  219. package/dist/matter/behaviors.d.ts.map +0 -1
  220. package/dist/matter/behaviors.js.map +0 -1
  221. package/dist/matter/clusters.d.ts +0 -2
  222. package/dist/matter/clusters.d.ts.map +0 -1
  223. package/dist/matter/clusters.js.map +0 -1
  224. package/dist/matter/devices.d.ts +0 -2
  225. package/dist/matter/devices.d.ts.map +0 -1
  226. package/dist/matter/devices.js.map +0 -1
  227. package/dist/matter/endpoints.d.ts +0 -2
  228. package/dist/matter/endpoints.d.ts.map +0 -1
  229. package/dist/matter/endpoints.js.map +0 -1
  230. package/dist/matter/export.d.ts +0 -5
  231. package/dist/matter/export.d.ts.map +0 -1
  232. package/dist/matter/export.js.map +0 -1
  233. package/dist/matter/types.d.ts +0 -3
  234. package/dist/matter/types.d.ts.map +0 -1
  235. package/dist/matter/types.js.map +0 -1
  236. package/dist/matterNode.d.ts +0 -342
  237. package/dist/matterNode.d.ts.map +0 -1
  238. package/dist/matterNode.js.map +0 -1
  239. package/dist/matterbridge.d.ts +0 -505
  240. package/dist/matterbridge.d.ts.map +0 -1
  241. package/dist/matterbridge.js.map +0 -1
  242. package/dist/matterbridgeAccessoryPlatform.d.ts +0 -41
  243. package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
  244. package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
  245. package/dist/matterbridgeBehaviors.d.ts +0 -2404
  246. package/dist/matterbridgeBehaviors.d.ts.map +0 -1
  247. package/dist/matterbridgeBehaviors.js.map +0 -1
  248. package/dist/matterbridgeDeviceTypes.d.ts +0 -698
  249. package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
  250. package/dist/matterbridgeDeviceTypes.js.map +0 -1
  251. package/dist/matterbridgeDynamicPlatform.d.ts +0 -41
  252. package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
  253. package/dist/matterbridgeDynamicPlatform.js.map +0 -1
  254. package/dist/matterbridgeEndpoint.d.ts +0 -1507
  255. package/dist/matterbridgeEndpoint.d.ts.map +0 -1
  256. package/dist/matterbridgeEndpoint.js.map +0 -1
  257. package/dist/matterbridgeEndpointHelpers.d.ts +0 -787
  258. package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
  259. package/dist/matterbridgeEndpointHelpers.js.map +0 -1
  260. package/dist/matterbridgeEndpointTypes.d.ts +0 -166
  261. package/dist/matterbridgeEndpointTypes.d.ts.map +0 -1
  262. package/dist/matterbridgeEndpointTypes.js.map +0 -1
  263. package/dist/matterbridgePlatform.d.ts +0 -539
  264. package/dist/matterbridgePlatform.d.ts.map +0 -1
  265. package/dist/matterbridgePlatform.js.map +0 -1
  266. package/dist/matterbridgeTypes.d.ts +0 -252
  267. package/dist/matterbridgeTypes.d.ts.map +0 -1
  268. package/dist/matterbridgeTypes.js.map +0 -1
  269. package/dist/pluginManager.d.ts +0 -372
  270. package/dist/pluginManager.d.ts.map +0 -1
  271. package/dist/pluginManager.js.map +0 -1
  272. package/dist/shelly.d.ts +0 -181
  273. package/dist/shelly.d.ts.map +0 -1
  274. package/dist/shelly.js.map +0 -1
  275. package/dist/storage/export.d.ts +0 -2
  276. package/dist/storage/export.d.ts.map +0 -1
  277. package/dist/storage/export.js.map +0 -1
  278. package/dist/update.d.ts +0 -84
  279. package/dist/update.d.ts.map +0 -1
  280. package/dist/update.js.map +0 -1
  281. package/dist/utils/colorUtils.d.ts +0 -101
  282. package/dist/utils/colorUtils.d.ts.map +0 -1
  283. package/dist/utils/colorUtils.js.map +0 -1
  284. package/dist/utils/commandLine.d.ts +0 -66
  285. package/dist/utils/commandLine.d.ts.map +0 -1
  286. package/dist/utils/commandLine.js.map +0 -1
  287. package/dist/utils/copyDirectory.d.ts +0 -35
  288. package/dist/utils/copyDirectory.d.ts.map +0 -1
  289. package/dist/utils/copyDirectory.js.map +0 -1
  290. package/dist/utils/createDirectory.d.ts +0 -34
  291. package/dist/utils/createDirectory.d.ts.map +0 -1
  292. package/dist/utils/createDirectory.js.map +0 -1
  293. package/dist/utils/createZip.d.ts +0 -39
  294. package/dist/utils/createZip.d.ts.map +0 -1
  295. package/dist/utils/createZip.js.map +0 -1
  296. package/dist/utils/deepCopy.d.ts +0 -32
  297. package/dist/utils/deepCopy.d.ts.map +0 -1
  298. package/dist/utils/deepCopy.js.map +0 -1
  299. package/dist/utils/deepEqual.d.ts +0 -54
  300. package/dist/utils/deepEqual.d.ts.map +0 -1
  301. package/dist/utils/deepEqual.js.map +0 -1
  302. package/dist/utils/error.d.ts +0 -45
  303. package/dist/utils/error.d.ts.map +0 -1
  304. package/dist/utils/error.js.map +0 -1
  305. package/dist/utils/export.d.ts +0 -13
  306. package/dist/utils/export.d.ts.map +0 -1
  307. package/dist/utils/export.js.map +0 -1
  308. package/dist/utils/format.d.ts +0 -53
  309. package/dist/utils/format.d.ts.map +0 -1
  310. package/dist/utils/format.js.map +0 -1
  311. package/dist/utils/hex.d.ts +0 -89
  312. package/dist/utils/hex.d.ts.map +0 -1
  313. package/dist/utils/hex.js.map +0 -1
  314. package/dist/utils/inspector.d.ts +0 -87
  315. package/dist/utils/inspector.d.ts.map +0 -1
  316. package/dist/utils/inspector.js.map +0 -1
  317. package/dist/utils/isValid.d.ts +0 -103
  318. package/dist/utils/isValid.d.ts.map +0 -1
  319. package/dist/utils/isValid.js.map +0 -1
  320. package/dist/utils/network.d.ts +0 -140
  321. package/dist/utils/network.d.ts.map +0 -1
  322. package/dist/utils/network.js.map +0 -1
  323. package/dist/utils/spawn.d.ts +0 -33
  324. package/dist/utils/spawn.d.ts.map +0 -1
  325. package/dist/utils/spawn.js.map +0 -1
  326. package/dist/utils/tracker.d.ts +0 -108
  327. package/dist/utils/tracker.d.ts.map +0 -1
  328. package/dist/utils/tracker.js.map +0 -1
  329. package/dist/utils/wait.d.ts +0 -54
  330. package/dist/utils/wait.d.ts.map +0 -1
  331. package/dist/utils/wait.js.map +0 -1
  332. package/dist/workerGlobalPrefix.d.ts +0 -25
  333. package/dist/workerGlobalPrefix.d.ts.map +0 -1
  334. package/dist/workerGlobalPrefix.js.map +0 -1
  335. package/dist/workerTypes.d.ts +0 -52
  336. package/dist/workerTypes.d.ts.map +0 -1
  337. package/dist/workerTypes.js.map +0 -1
  338. package/dist/workers.d.ts +0 -69
  339. package/dist/workers.d.ts.map +0 -1
  340. package/dist/workers.js.map +0 -1
  341. package/scripts/data_model.mjs +0 -2058
  342. package/scripts/fetch-chip.mjs +0 -102
  343. package/scripts/marked.mjs +0 -133
  344. package/scripts/markedFooter.html +0 -42
  345. package/scripts/markedHeader.html +0 -78
@@ -1,41 +1,6 @@
1
- /**
2
- * This file contains the wait, waiter and withTimeout functions.
3
- *
4
- * @file wait.ts
5
- * @author Luca Liguori
6
- * @created 2025-02-16
7
- * @version 1.0.2
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2025, 2026, 2027 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
- // AnsiLogger module
25
1
  import { AnsiLogger } from 'node-ansi-logger';
26
- /**
27
- * Asynchronous waiter function that resolves when the provided condition is met or rejects on timeout.
28
- *
29
- * @param {string} name - The name of the waiter.
30
- * @param {() => boolean} check - A function that checks the condition. Should return a boolean.
31
- * @param {boolean} [exitWithReject] - Optional. If true, the promise will be rejected on timeout. Default is false.
32
- * @param {number} [resolveTimeout] - Optional. The timeout duration in milliseconds. Default is 5000ms.
33
- * @param {number} [resolveInterval] - Optional. The interval duration in milliseconds between condition checks. Default is 500ms.
34
- * @param {boolean} [debug] - Optional. If true, debug messages will be logged to the console. Default is false.
35
- * @returns {Promise<boolean>} A promise that resolves to true when the condition is met, or false if the timeout occurs.
36
- */
37
2
  export async function waiter(name, check, exitWithReject = false, resolveTimeout = 5000, resolveInterval = 500, debug = false) {
38
- const log = new AnsiLogger({ logName: 'Waiter', logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: "debug" /* LogLevel.DEBUG */ });
3
+ const log = new AnsiLogger({ logName: 'Waiter', logTimestampFormat: 4, logLevel: "debug" });
39
4
  if (check()) {
40
5
  if (debug)
41
6
  log.debug(`Waiter "${name}" already true`);
@@ -66,16 +31,8 @@ export async function waiter(name, check, exitWithReject = false, resolveTimeout
66
31
  }, resolveInterval).unref();
67
32
  });
68
33
  }
69
- /**
70
- * Asynchronously waits for a specified amount of time.
71
- *
72
- * @param {number} timeout - The duration to wait in milliseconds. Default is 1000ms.
73
- * @param {string} name - The name of the wait operation. Default is undefined.
74
- * @param {boolean} debug - Whether to enable debug logging. Default is false.
75
- * @returns {Promise<void>} A Promise that resolves after the specified timeout.
76
- */
77
34
  export async function wait(timeout = 1000, name, debug = false) {
78
- const log = new AnsiLogger({ logName: 'Wait', logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: "debug" /* LogLevel.DEBUG */ });
35
+ const log = new AnsiLogger({ logName: 'Wait', logTimestampFormat: 4, logLevel: "debug" });
79
36
  if (debug)
80
37
  log.debug(`Wait "${name}" started...`);
81
38
  return new Promise((resolve) => {
@@ -87,14 +44,6 @@ export async function wait(timeout = 1000, name, debug = false) {
87
44
  }, timeout).unref();
88
45
  });
89
46
  }
90
- /**
91
- * Wraps a promise with a timeout. If the promise does not resolve or reject within the specified time, it will be rejected.
92
- *
93
- * @param {Promise<T>} promise - The promise to wrap.
94
- * @param {number} [timeoutMillisecs] - The timeout duration in milliseconds. Default is 10000ms.
95
- * @param {boolean} [reThrow] - Optional. If true, the promise will rethrow the original promise and will reject on timeout. Default is true.
96
- * @returns {Promise<T>} A new promise that resolves or rejects based on the original promise and the timeout.
97
- */
98
47
  export function withTimeout(promise, timeoutMillisecs = 10000, reThrow = true) {
99
48
  return new Promise((resolve, reject) => {
100
49
  const timer = setTimeout(() => {
@@ -102,24 +51,23 @@ export function withTimeout(promise, timeoutMillisecs = 10000, reThrow = true) {
102
51
  reject(new Error('Operation timed out'));
103
52
  }
104
53
  else {
105
- resolve(undefined); // Resolve with undefined if reThrow is false
54
+ resolve(undefined);
106
55
  }
107
- }, timeoutMillisecs).unref(); // Unref the timer to prevent it from keeping the event loop alive
56
+ }, timeoutMillisecs).unref();
108
57
  promise
109
58
  .then((result) => {
110
- clearTimeout(timer); // Ensure timeout does not fire if promise resolves first
59
+ clearTimeout(timer);
111
60
  resolve(result);
112
61
  return result;
113
62
  })
114
63
  .catch((error) => {
115
- clearTimeout(timer); // Ensure timeout does not fire if promise rejects first
64
+ clearTimeout(timer);
116
65
  if (reThrow) {
117
- reject(error); // Reject with the original error
66
+ reject(error);
118
67
  }
119
68
  else {
120
- resolve(undefined); // Resolve with undefined if reThrow is false
69
+ resolve(undefined);
121
70
  }
122
71
  });
123
72
  });
124
73
  }
125
- //# sourceMappingURL=wait.js.map
@@ -1,26 +1,3 @@
1
- /**
2
- * This file contains the workerGlobalPrefix functions.
3
- *
4
- * @file workerGlobalPrefix.ts
5
- * @author Luca Liguori
6
- * @created 2025-11-25
7
- * @version 1.0.0
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2025, 2026, 2027 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
1
  import { threadId, isMainThread, parentPort, workerData } from 'node:worker_threads';
25
2
  import { AnsiLogger } from 'node-ansi-logger';
26
3
  import { getGlobalNodeModules } from './utils/network.js';
@@ -30,17 +7,13 @@ import { logWorkerInfo, parentLog, parentPost } from './workers.js';
30
7
  import { hasParameter } from './utils/commandLine.js';
31
8
  const debug = hasParameter('debug') || hasParameter('verbose');
32
9
  const verbose = hasParameter('verbose');
33
- // Send init message
34
- // istanbul ignore next cause it's available only in worker threads
35
10
  if (!isMainThread && parentPort) {
36
11
  parentPost({ type: 'init', threadId, threadName: workerData.threadName, success: true });
37
12
  if (debug)
38
- parentLog('MatterbridgePrefix', "info" /* LogLevel.INFO */, `Worker ${workerData.threadName}:${threadId} initialized.`);
13
+ parentLog('MatterbridgePrefix', "info", `Worker ${workerData.threadName}:${threadId} initialized.`);
39
14
  }
40
- // Broadcast server
41
- const log = new AnsiLogger({ logName: 'MatterbridgePrefix', logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: debug ? "debug" /* LogLevel.DEBUG */ : "info" /* LogLevel.INFO */ });
15
+ const log = new AnsiLogger({ logName: 'MatterbridgePrefix', logTimestampFormat: 4, logLevel: debug ? "debug" : "info" });
42
16
  const server = new BroadcastServer('matterbridge', log);
43
- // Log worker info
44
17
  if (verbose)
45
18
  logWorkerInfo(log, verbose);
46
19
  let prefix;
@@ -51,21 +24,16 @@ try {
51
24
  server.request({ type: 'matterbridge_global_prefix', src: `matterbridge`, dst: 'matterbridge', params: { prefix } });
52
25
  success = true;
53
26
  if (!isMainThread && parentPort)
54
- parentLog('MatterbridgePrefix', "debug" /* LogLevel.DEBUG */, `Global node_modules Directory: ${prefix}`);
27
+ parentLog('MatterbridgePrefix', "debug", `Global node_modules Directory: ${prefix}`);
55
28
  }
56
29
  catch (error) {
57
- // istanbul ignore next cause it's just an error log
58
30
  const errorMessage = inspectError(log, `Failed to get global node modules`, error);
59
- // istanbul ignore next cause it's just an error log
60
31
  if (!isMainThread && parentPort)
61
- parentLog('MatterbridgePrefix', "error" /* LogLevel.ERROR */, errorMessage);
32
+ parentLog('MatterbridgePrefix', "error", errorMessage);
62
33
  }
63
34
  server.close();
64
- // Send exit message
65
- // istanbul ignore next cause it's available only in worker threads
66
35
  if (!isMainThread && parentPort) {
67
36
  parentPost({ type: 'exit', threadId, threadName: workerData.threadName, success });
68
37
  if (debug)
69
- parentLog('MatterbridgePrefix', "info" /* LogLevel.INFO */, `Worker ${workerData.threadName}:${threadId} exiting with success: ${success}.`);
38
+ parentLog('MatterbridgePrefix', "info", `Worker ${workerData.threadName}:${threadId} exiting with success: ${success}.`);
70
39
  }
71
- //# sourceMappingURL=workerGlobalPrefix.js.map
@@ -1,25 +1 @@
1
- /**
2
- * This file contains the worker types.
3
- *
4
- * @file workerTypes.ts
5
- * @author Luca Liguori
6
- * @created 2025-11-25
7
- * @version 1.0.0
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2025, 2026, 2027 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
1
  export {};
25
- //# sourceMappingURL=workerTypes.js.map
package/dist/workers.js CHANGED
@@ -1,94 +1,31 @@
1
- /**
2
- * This file contains the worker functions.
3
- *
4
- * @file workers.ts
5
- * @author Luca Liguori
6
- * @created 2025-11-25
7
- * @version 1.0.0
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2025, 2026, 2027 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
1
  import { isMainThread, parentPort, threadId, Worker, workerData } from 'node:worker_threads';
25
2
  import { pathToFileURL } from 'node:url';
26
3
  import { resolve } from 'node:path';
27
4
  import { inspect } from 'node:util';
28
- /**
29
- * Sends a control message to the parent through parentPort
30
- *
31
- * @param {ControlMessage} message - The control message to send.
32
- */
33
- // istanbul ignore next cause it's available only in worker threads
34
5
  export function parentPost(message) {
35
6
  if (!parentPort)
36
7
  throw new Error(`WorkerServer ${workerData.threadName}: parentPort is not available.`);
37
8
  parentPort.postMessage(message);
38
9
  }
39
- /**
40
- * Sends a control message to the parent through parentPort to log a message.
41
- *
42
- * @param {string | undefined} logName - The name of the logger.
43
- * @param {LogLevel} logLevel - The log level of the message.
44
- * @param {string} message - The log message to send.
45
- */
46
- // istanbul ignore next cause it's available only in worker threads
47
10
  export function parentLog(logName, logLevel, message) {
48
11
  if (!parentPort)
49
12
  throw new Error(`WorkerServer ${workerData.threadName}: parentPort is not available.`);
50
13
  const logMessage = { type: 'log', threadId, threadName: workerData.threadName, logName, logLevel, message };
51
14
  parentPort.postMessage(logMessage);
52
15
  }
53
- /**
54
- * Typed helper to create an ESM Worker.
55
- *
56
- * This function uses pathToFileURL to convert the relative path to a file URL,
57
- * which is necessary for ESM modules. It also sets the worker type to 'module'.
58
- *
59
- * @param {string} name - name of the worker
60
- * @param {string} relativePath - path to the worker file code: it must be an ESM module in javascript
61
- * @param {Record<string, boolean | number | string | object>} [workerData] - optional data to pass to the worker
62
- * @param {string[]} [argv] - optional command line arguments to pass to the worker. If not provided, inherits from the main thread.
63
- * @param {NodeJS.ProcessEnv} [env] - optional environment variables to pass to the worker. If not provided, inherits from the main thread.
64
- * @param {string[]} [execArgv] - optional execArgv to pass to the worker. If not provided no execArgv are passed.
65
- * @returns {Worker} - the created Worker instance
66
- *
67
- * @example
68
- * ```typescript
69
- * createESMWorker('NpmCommand', './dist/npmCommand.js', { command: 'npm list --global --depth=0' });
70
- * ```
71
- */
72
16
  export function createESMWorker(name, relativePath, workerData, argv, env, execArgv) {
73
17
  const fileURL = pathToFileURL(resolve(relativePath));
74
18
  const options = {
75
- workerData: { ...workerData, threadName: name }, // Pass threadName in workerData cause worker_threads don't have it natively in node 20
19
+ workerData: { ...workerData, threadName: name },
76
20
  type: 'module',
77
21
  name,
78
- argv: argv ?? process.argv.slice(2), // Pass command line arguments to worker
79
- env: env ?? process.env, // Inherit environment variables
80
- execArgv, // execArgv for node like --inspect
22
+ argv: argv ?? process.argv.slice(2),
23
+ env: env ?? process.env,
24
+ execArgv,
81
25
  };
82
26
  return new Worker(fileURL, options);
83
27
  }
84
- /**
85
- * Log worker information.
86
- *
87
- * @param {AnsiLogger} log - The logger instance to use for logging.
88
- * @param {boolean} [logEnv] - Whether to log environment variables. Defaults to false.
89
- */
90
28
  export function logWorkerInfo(log, logEnv = false) {
91
- // Log worker info
92
29
  log.debug(`${isMainThread ? 'Main thread' : 'Worker thread'}: ${workerData?.threadName}:${threadId} Pid: ${process.pid}`);
93
30
  log.debug(`ParentPort: ${parentPort ? 'active' : 'not active'}`);
94
31
  log.debug(`WorkerData: ${workerData ? inspect(workerData, true, 10, true) : 'none'}`);
@@ -96,4 +33,3 @@ export function logWorkerInfo(log, logEnv = false) {
96
33
  log.debug(`Argv: ${argv.length ? argv.join(' ') : 'none'}`);
97
34
  log.debug(`Env: ${logEnv ? inspect(process.env, true, 10, true) : 'not logged'}`);
98
35
  }
99
- //# sourceMappingURL=workers.js.map
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "matterbridge",
3
- "version": "3.4.6",
3
+ "version": "3.4.7-dev-20260103-3152357",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "matterbridge",
9
- "version": "3.4.6",
9
+ "version": "3.4.7-dev-20260103-3152357",
10
10
  "license": "Apache-2.0",
11
11
  "workspaces": [
12
12
  "packages/*"
@@ -2479,9 +2479,9 @@
2479
2479
  "license": "MIT"
2480
2480
  },
2481
2481
  "node_modules/@sinclair/typebox": {
2482
- "version": "0.34.45",
2483
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.45.tgz",
2484
- "integrity": "sha512-qJcFVfCa5jxBFSuv7S5WYbA8XdeCPmhnaVVfX/2Y6L8WYg8sk3XY2+6W0zH+3mq1Cz+YC7Ki66HfqX6IHAwnkg==",
2482
+ "version": "0.34.46",
2483
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.46.tgz",
2484
+ "integrity": "sha512-kiW7CtS/NkdvTUjkjUJo7d5JsFfbJ14YjdhDk9KoEgK6nFjKNXZPrX0jfLA8ZlET4cFLHxOZ/0vFKOP+bOxIOQ==",
2485
2485
  "dev": true,
2486
2486
  "license": "MIT"
2487
2487
  },
@@ -3244,14 +3244,14 @@
3244
3244
  }
3245
3245
  },
3246
3246
  "node_modules/@vitest/eslint-plugin": {
3247
- "version": "1.6.4",
3248
- "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.6.4.tgz",
3249
- "integrity": "sha512-+qw32ux8HMVNrJnQOYgdjrMYmCn9vsiKnJUv5MoOg40e18WOvhWurzHdbRB3vXLfUrP7+jYyQbd6TuRhL23AkQ==",
3247
+ "version": "1.6.5",
3248
+ "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.6.5.tgz",
3249
+ "integrity": "sha512-+wKYGmvXQJjq58qBx/AwiZr5bFfMiWBdgHViSQoFW/+wl5MQhJeOGP/3HM7GO7W1+AoiW9Gcyy2Hdwcao4LnfQ==",
3250
3250
  "dev": true,
3251
3251
  "license": "MIT",
3252
3252
  "dependencies": {
3253
- "@typescript-eslint/scope-manager": "^8.46.1",
3254
- "@typescript-eslint/utils": "^8.46.1"
3253
+ "@typescript-eslint/scope-manager": "^8.51.0",
3254
+ "@typescript-eslint/utils": "^8.51.0"
3255
3255
  },
3256
3256
  "engines": {
3257
3257
  "node": ">=18"
@@ -4245,9 +4245,9 @@
4245
4245
  }
4246
4246
  },
4247
4247
  "node_modules/cjs-module-lexer": {
4248
- "version": "2.1.1",
4249
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz",
4250
- "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==",
4248
+ "version": "2.2.0",
4249
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz",
4250
+ "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==",
4251
4251
  "dev": true,
4252
4252
  "license": "MIT"
4253
4253
  },
@@ -5207,9 +5207,9 @@
5207
5207
  }
5208
5208
  },
5209
5209
  "node_modules/eslint-plugin-jest": {
5210
- "version": "29.12.0",
5211
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.12.0.tgz",
5212
- "integrity": "sha512-dOMLGkl5vCDZo/KcsmzJkkYJUH+SDLls4PLBj8Aw86x5BHdXkygMGdfnqikJ8RUgEx3MHni09B5cebZF5+4rrQ==",
5210
+ "version": "29.12.1",
5211
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.12.1.tgz",
5212
+ "integrity": "sha512-Rxo7r4jSANMBkXLICJKS0gjacgyopfNAsoS0e3R9AHnjoKuQOaaPfmsDJPi8UWwygI099OV/K/JhpYRVkxD4AA==",
5213
5213
  "dev": true,
5214
5214
  "license": "MIT",
5215
5215
  "dependencies": {
@@ -8322,9 +8322,9 @@
8322
8322
  }
8323
8323
  },
8324
8324
  "node_modules/npm-check-updates": {
8325
- "version": "19.2.0",
8326
- "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-19.2.0.tgz",
8327
- "integrity": "sha512-XSIuL0FNgzXPDZa4lje7+OwHjiyEt84qQm6QMsQRbixNY5EHEM9nhgOjxjlK9jIbN+ysvSqOV8DKNS0zydwbdg==",
8325
+ "version": "19.2.1",
8326
+ "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-19.2.1.tgz",
8327
+ "integrity": "sha512-jWIMuE6K+DSDXfjXpM3SlJ+Gg07ZV57dlFKPr2EZTpimFk9y+gt138+kmP3Uocdqk1PZlOKpTpFvAx7Z1QCeog==",
8328
8328
  "dev": true,
8329
8329
  "license": "Apache-2.0",
8330
8330
  "bin": {
@@ -10404,9 +10404,9 @@
10404
10404
  }
10405
10405
  },
10406
10406
  "node_modules/ts-api-utils": {
10407
- "version": "2.3.0",
10408
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.3.0.tgz",
10409
- "integrity": "sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==",
10407
+ "version": "2.4.0",
10408
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz",
10409
+ "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==",
10410
10410
  "dev": true,
10411
10411
  "license": "MIT",
10412
10412
  "engines": {
@@ -11417,18 +11417,18 @@
11417
11417
  "@types/jest": "30.0.0",
11418
11418
  "@types/node": "25.0.3",
11419
11419
  "@vitest/coverage-v8": "4.0.16",
11420
- "@vitest/eslint-plugin": "1.6.4",
11420
+ "@vitest/eslint-plugin": "1.6.5",
11421
11421
  "cross-env": "10.1.0",
11422
11422
  "eslint": "9.39.2",
11423
11423
  "eslint-config-prettier": "10.1.8",
11424
11424
  "eslint-plugin-import": "2.32.0",
11425
- "eslint-plugin-jest": "29.12.0",
11425
+ "eslint-plugin-jest": "29.12.1",
11426
11426
  "eslint-plugin-jsdoc": "61.5.0",
11427
11427
  "eslint-plugin-n": "17.23.1",
11428
11428
  "eslint-plugin-prettier": "5.5.4",
11429
11429
  "eslint-plugin-promise": "7.2.1",
11430
11430
  "jest": "30.2.0",
11431
- "npm-check-updates": "19.2.0",
11431
+ "npm-check-updates": "19.2.1",
11432
11432
  "prettier": "3.7.4",
11433
11433
  "shx": "0.4.0",
11434
11434
  "ts-jest": "29.4.6",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge",
3
- "version": "3.4.6",
3
+ "version": "3.4.7-dev-20260103-3152357",
4
4
  "description": "Matterbridge plugin manager for Matter",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "Apache-2.0",
@@ -40,7 +40,6 @@
40
40
  ],
41
41
  "type": "module",
42
42
  "main": "dist/index.js",
43
- "types": "dist/index.d.ts",
44
43
  "bin": {
45
44
  "matterbridge": "bin/matterbridge.js",
46
45
  "mb_mdns": "bin/mb_mdns.js",
@@ -0,0 +1,77 @@
1
+ import { rmSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { AnsiLogger } from 'node-ansi-logger';
4
+ export const originalProcessArgv = Object.freeze([...process.argv]);
5
+ export const originalProcessEnv = Object.freeze({ ...process.env });
6
+ export let loggerLogSpy;
7
+ export let loggerDebugSpy;
8
+ export let loggerInfoSpy;
9
+ export let loggerNoticeSpy;
10
+ export let loggerWarnSpy;
11
+ export let loggerErrorSpy;
12
+ export let loggerFatalSpy;
13
+ export let consoleLogSpy;
14
+ export let consoleDebugSpy;
15
+ export let consoleInfoSpy;
16
+ export let consoleWarnSpy;
17
+ export let consoleErrorSpy;
18
+ export let NAME;
19
+ export let HOMEDIR;
20
+ export let log;
21
+ export async function setupTest(name, debug = false) {
22
+ expect(name).toBeDefined();
23
+ expect(typeof name).toBe('string');
24
+ expect(name.length).toBeGreaterThanOrEqual(4);
25
+ NAME = name;
26
+ HOMEDIR = path.join('temp', name);
27
+ log = new AnsiLogger({ logName: 'Jest', logTimestampFormat: 4, logLevel: "info" });
28
+ rmSync(HOMEDIR, { recursive: true, force: true });
29
+ const { jest } = await import('@jest/globals');
30
+ loggerDebugSpy = jest.spyOn(AnsiLogger.prototype, 'debug');
31
+ loggerInfoSpy = jest.spyOn(AnsiLogger.prototype, 'info');
32
+ loggerNoticeSpy = jest.spyOn(AnsiLogger.prototype, 'notice');
33
+ loggerWarnSpy = jest.spyOn(AnsiLogger.prototype, 'warn');
34
+ loggerErrorSpy = jest.spyOn(AnsiLogger.prototype, 'error');
35
+ loggerFatalSpy = jest.spyOn(AnsiLogger.prototype, 'fatal');
36
+ if (debug) {
37
+ loggerLogSpy = jest.spyOn(AnsiLogger.prototype, 'log');
38
+ consoleLogSpy = jest.spyOn(console, 'log');
39
+ consoleDebugSpy = jest.spyOn(console, 'debug');
40
+ consoleInfoSpy = jest.spyOn(console, 'info');
41
+ consoleWarnSpy = jest.spyOn(console, 'warn');
42
+ consoleErrorSpy = jest.spyOn(console, 'error');
43
+ }
44
+ else {
45
+ loggerLogSpy = jest.spyOn(AnsiLogger.prototype, 'log').mockImplementation(() => { });
46
+ consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(() => { });
47
+ consoleDebugSpy = jest.spyOn(console, 'debug').mockImplementation(() => { });
48
+ consoleInfoSpy = jest.spyOn(console, 'info').mockImplementation(() => { });
49
+ consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => { });
50
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => { });
51
+ }
52
+ }
53
+ export async function setDebug(debug) {
54
+ const { jest } = await import('@jest/globals');
55
+ if (debug) {
56
+ loggerLogSpy.mockRestore();
57
+ consoleLogSpy.mockRestore();
58
+ consoleDebugSpy.mockRestore();
59
+ consoleInfoSpy.mockRestore();
60
+ consoleWarnSpy.mockRestore();
61
+ consoleErrorSpy.mockRestore();
62
+ loggerLogSpy = jest.spyOn(AnsiLogger.prototype, 'log');
63
+ consoleLogSpy = jest.spyOn(console, 'log');
64
+ consoleDebugSpy = jest.spyOn(console, 'debug');
65
+ consoleInfoSpy = jest.spyOn(console, 'info');
66
+ consoleWarnSpy = jest.spyOn(console, 'warn');
67
+ consoleErrorSpy = jest.spyOn(console, 'error');
68
+ }
69
+ else {
70
+ loggerLogSpy = jest.spyOn(AnsiLogger.prototype, 'log').mockImplementation(() => { });
71
+ consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(() => { });
72
+ consoleDebugSpy = jest.spyOn(console, 'debug').mockImplementation(() => { });
73
+ consoleInfoSpy = jest.spyOn(console, 'info').mockImplementation(() => { });
74
+ consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => { });
75
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => { });
76
+ }
77
+ }
@@ -0,0 +1,2 @@
1
+ export * as jestHelpers from './jestutils/jestHelpers.js';
2
+ export * as vitestHelpers from './vitestutils/vitestHelpers.js';
@@ -0,0 +1,77 @@
1
+ import { rmSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { AnsiLogger } from 'node-ansi-logger';
4
+ export const originalProcessArgv = Object.freeze([...process.argv]);
5
+ export const originalProcessEnv = Object.freeze({ ...process.env });
6
+ export let loggerLogSpy;
7
+ export let loggerDebugSpy;
8
+ export let loggerInfoSpy;
9
+ export let loggerNoticeSpy;
10
+ export let loggerWarnSpy;
11
+ export let loggerErrorSpy;
12
+ export let loggerFatalSpy;
13
+ export let consoleLogSpy;
14
+ export let consoleDebugSpy;
15
+ export let consoleInfoSpy;
16
+ export let consoleWarnSpy;
17
+ export let consoleErrorSpy;
18
+ export let NAME;
19
+ export let HOMEDIR;
20
+ export let log;
21
+ export async function setupTest(name, debug = false) {
22
+ expect(name).toBeDefined();
23
+ expect(typeof name).toBe('string');
24
+ expect(name.length).toBeGreaterThanOrEqual(4);
25
+ NAME = name;
26
+ HOMEDIR = path.join('temp', name);
27
+ log = new AnsiLogger({ logName: 'Vitest', logTimestampFormat: 4, logLevel: "info" });
28
+ rmSync(HOMEDIR, { recursive: true, force: true });
29
+ const { vi } = await import('vitest');
30
+ loggerDebugSpy = vi.spyOn(AnsiLogger.prototype, 'debug');
31
+ loggerInfoSpy = vi.spyOn(AnsiLogger.prototype, 'info');
32
+ loggerNoticeSpy = vi.spyOn(AnsiLogger.prototype, 'notice');
33
+ loggerWarnSpy = vi.spyOn(AnsiLogger.prototype, 'warn');
34
+ loggerErrorSpy = vi.spyOn(AnsiLogger.prototype, 'error');
35
+ loggerFatalSpy = vi.spyOn(AnsiLogger.prototype, 'fatal');
36
+ if (debug) {
37
+ loggerLogSpy = vi.spyOn(AnsiLogger.prototype, 'log');
38
+ consoleLogSpy = vi.spyOn(console, 'log');
39
+ consoleDebugSpy = vi.spyOn(console, 'debug');
40
+ consoleInfoSpy = vi.spyOn(console, 'info');
41
+ consoleWarnSpy = vi.spyOn(console, 'warn');
42
+ consoleErrorSpy = vi.spyOn(console, 'error');
43
+ }
44
+ else {
45
+ loggerLogSpy = vi.spyOn(AnsiLogger.prototype, 'log').mockImplementation(() => { });
46
+ consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
47
+ consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
48
+ consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
49
+ consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
50
+ consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
51
+ }
52
+ }
53
+ export async function setDebug(debug) {
54
+ const { vi } = await import('vitest');
55
+ if (debug) {
56
+ loggerLogSpy.mockRestore();
57
+ consoleLogSpy.mockRestore();
58
+ consoleDebugSpy.mockRestore();
59
+ consoleInfoSpy.mockRestore();
60
+ consoleWarnSpy.mockRestore();
61
+ consoleErrorSpy.mockRestore();
62
+ loggerLogSpy = vi.spyOn(AnsiLogger.prototype, 'log');
63
+ consoleLogSpy = vi.spyOn(console, 'log');
64
+ consoleDebugSpy = vi.spyOn(console, 'debug');
65
+ consoleInfoSpy = vi.spyOn(console, 'info');
66
+ consoleWarnSpy = vi.spyOn(console, 'warn');
67
+ consoleErrorSpy = vi.spyOn(console, 'error');
68
+ }
69
+ else {
70
+ loggerLogSpy = vi.spyOn(AnsiLogger.prototype, 'log').mockImplementation(() => { });
71
+ consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
72
+ consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
73
+ consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
74
+ consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
75
+ consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
76
+ }
77
+ }
@@ -30,19 +30,20 @@
30
30
  "start": "node dist/module.js",
31
31
  "build": "tsc --project tsconfig.json",
32
32
  "buildProduction": "tsc --project tsconfig.production.json",
33
- "cleanBuild": "npx shx rm -rf tsconfig.tsbuildinfo dist && npm run build",
34
- "cleanBuildProduction": "npx shx rm -rf tsconfig.tsbuildinfo dist && npm run buildProduction",
33
+ "clean": "npx shx rm -rf tsconfig.tsbuildinfo dist",
34
+ "cleanBuild": "npm run clean && npm run build",
35
+ "cleanBuildProduction": "npm run clean && npm run buildProduction",
35
36
  "watch": "tsc --watch",
36
37
  "test": "cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" jest --maxWorkers=100%",
37
- "test:verbose": "cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" jest --maxWorkers=100% --verbose",
38
38
  "test:watch": "cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" jest --maxWorkers=100% --watch",
39
- "test:coverage": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --maxWorkers=100% --coverage",
39
+ "test:verbose": "cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" jest --maxWorkers=100% --verbose",
40
+ "test:coverage": "cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" jest --maxWorkers=100% --coverage",
40
41
  "test:vitest": "vitest run",
41
42
  "test:vitest:watch": "vitest --reporter verbose",
42
43
  "test:vitest:verbose": "vitest run --reporter verbose",
43
44
  "test:vitest:coverage": "vitest run --reporter verbose --coverage",
44
- "clean": "npx shx rm -rf tsconfig.tsbuildinfo dist coverage jest temp package-lock.json npm-shrinkwrap.json node_modules/* node_modules/.[!.]* node_modules/..?*",
45
- "reset": "npm run clean && npm install && npm run build && npx jest --clearCache",
45
+ "deepClean": "npx shx rm -rf tsconfig.tsbuildinfo dist coverage jest temp package-lock.json npm-shrinkwrap.json node_modules/* node_modules/.[!.]* node_modules/..?*",
46
+ "reset": "npm run deepClean && npm install && npm run build && npx jest --clearCache",
46
47
  "lint": "eslint --max-warnings=0 .",
47
48
  "lint:fix": "eslint --fix --max-warnings=0 .",
48
49
  "format": "prettier --write .",
@@ -83,18 +84,18 @@
83
84
  "@types/jest": "30.0.0",
84
85
  "@types/node": "25.0.3",
85
86
  "@vitest/coverage-v8": "4.0.16",
86
- "@vitest/eslint-plugin": "1.6.4",
87
+ "@vitest/eslint-plugin": "1.6.5",
87
88
  "cross-env": "10.1.0",
88
89
  "eslint": "9.39.2",
89
90
  "eslint-config-prettier": "10.1.8",
90
91
  "eslint-plugin-import": "2.32.0",
91
- "eslint-plugin-jest": "29.12.0",
92
+ "eslint-plugin-jest": "29.12.1",
92
93
  "eslint-plugin-jsdoc": "61.5.0",
93
94
  "eslint-plugin-n": "17.23.1",
94
95
  "eslint-plugin-prettier": "5.5.4",
95
96
  "eslint-plugin-promise": "7.2.1",
96
97
  "jest": "30.2.0",
97
- "npm-check-updates": "19.2.0",
98
+ "npm-check-updates": "19.2.1",
98
99
  "prettier": "3.7.4",
99
100
  "shx": "0.4.0",
100
101
  "ts-jest": "29.4.6",