@matter/general 0.16.0-alpha.0-20251205-dfb1e1556 → 0.16.0-alpha.0-20251209-d6072d23e

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 (295) hide show
  1. package/dist/cjs/MatterError.js +2 -2
  2. package/dist/cjs/MatterError.js.map +1 -1
  3. package/dist/cjs/codec/DerTypes.d.ts.map +1 -1
  4. package/dist/cjs/codec/DerTypes.js +2 -1
  5. package/dist/cjs/codec/DerTypes.js.map +1 -1
  6. package/dist/cjs/crypto/NodeJsStyleCrypto.d.ts +60 -3
  7. package/dist/cjs/crypto/NodeJsStyleCrypto.d.ts.map +1 -1
  8. package/dist/cjs/crypto/NodeJsStyleCrypto.js.map +1 -1
  9. package/dist/cjs/environment/Environment.d.ts +4 -1
  10. package/dist/cjs/environment/Environment.d.ts.map +1 -1
  11. package/dist/cjs/environment/Environment.js +83 -3
  12. package/dist/cjs/environment/Environment.js.map +1 -1
  13. package/dist/cjs/environment/Environmental.js +1 -1
  14. package/dist/cjs/environment/Environmental.js.map +1 -1
  15. package/dist/cjs/environment/RuntimeService.d.ts +3 -44
  16. package/dist/cjs/environment/RuntimeService.d.ts.map +1 -1
  17. package/dist/cjs/environment/RuntimeService.js +65 -10
  18. package/dist/cjs/environment/RuntimeService.js.map +2 -2
  19. package/dist/cjs/environment/Worker.d.ts +56 -0
  20. package/dist/cjs/environment/Worker.d.ts.map +1 -0
  21. package/dist/cjs/environment/Worker.js +44 -0
  22. package/dist/cjs/environment/Worker.js.map +6 -0
  23. package/dist/cjs/environment/index.d.ts +1 -0
  24. package/dist/cjs/environment/index.d.ts.map +1 -1
  25. package/dist/cjs/environment/index.js +1 -0
  26. package/dist/cjs/environment/index.js.map +1 -1
  27. package/dist/cjs/log/Diagnostic.d.ts +11 -1
  28. package/dist/cjs/log/Diagnostic.d.ts.map +1 -1
  29. package/dist/cjs/log/Diagnostic.js +3 -0
  30. package/dist/cjs/log/Diagnostic.js.map +1 -1
  31. package/dist/cjs/log/DiagnosticPresentation.d.ts +4 -0
  32. package/dist/cjs/log/DiagnosticPresentation.d.ts.map +1 -1
  33. package/dist/cjs/log/DiagnosticPresentation.js +3 -2
  34. package/dist/cjs/log/DiagnosticPresentation.js.map +1 -1
  35. package/dist/cjs/log/DiagnosticSource.d.ts +1 -1
  36. package/dist/cjs/log/DiagnosticSource.d.ts.map +1 -1
  37. package/dist/cjs/log/DiagnosticSource.js +5 -1
  38. package/dist/cjs/log/DiagnosticSource.js.map +1 -1
  39. package/dist/cjs/log/LogFormat.js +2 -2
  40. package/dist/cjs/log/LogFormat.js.map +1 -1
  41. package/dist/cjs/log/NodeJsStyleInspectable.js +1 -1
  42. package/dist/cjs/log/NodeJsStyleInspectable.js.map +1 -1
  43. package/dist/cjs/net/Channel.d.ts +1 -1
  44. package/dist/cjs/net/Channel.d.ts.map +1 -1
  45. package/dist/cjs/net/Channel.js +1 -1
  46. package/dist/cjs/net/Channel.js.map +1 -1
  47. package/dist/cjs/net/mock/MockUdpChannel.d.ts +1 -1
  48. package/dist/cjs/net/mock/MockUdpChannel.d.ts.map +1 -1
  49. package/dist/cjs/net/mock/NetworkSimulator.d.ts.map +1 -1
  50. package/dist/cjs/net/mock/NetworkSimulator.js +2 -1
  51. package/dist/cjs/net/mock/NetworkSimulator.js.map +1 -1
  52. package/dist/cjs/net/udp/UdpChannel.d.ts +5 -1
  53. package/dist/cjs/net/udp/UdpChannel.d.ts.map +1 -1
  54. package/dist/cjs/net/udp/UdpMulticastServer.d.ts +4 -6
  55. package/dist/cjs/net/udp/UdpMulticastServer.d.ts.map +1 -1
  56. package/dist/cjs/net/udp/UdpMulticastServer.js +114 -37
  57. package/dist/cjs/net/udp/UdpMulticastServer.js.map +1 -1
  58. package/dist/cjs/polyfills/disposable.js +2 -2
  59. package/dist/cjs/polyfills/disposable.js.map +1 -1
  60. package/dist/cjs/polyfills/metadata.js +1 -1
  61. package/dist/cjs/polyfills/metadata.js.map +1 -1
  62. package/dist/cjs/time/StandardTime.d.ts +38 -0
  63. package/dist/cjs/time/StandardTime.d.ts.map +1 -0
  64. package/dist/cjs/time/StandardTime.js +172 -0
  65. package/dist/cjs/time/StandardTime.js.map +6 -0
  66. package/dist/cjs/time/Time.d.ts +4 -23
  67. package/dist/cjs/time/Time.d.ts.map +1 -1
  68. package/dist/cjs/time/Time.js +12 -88
  69. package/dist/cjs/time/Time.js.map +1 -1
  70. package/dist/cjs/time/Timestamp.d.ts +5 -0
  71. package/dist/cjs/time/Timestamp.d.ts.map +1 -1
  72. package/dist/cjs/time/Timestamp.js +4 -0
  73. package/dist/cjs/time/Timestamp.js.map +1 -1
  74. package/dist/cjs/time/index.d.ts +1 -0
  75. package/dist/cjs/time/index.d.ts.map +1 -1
  76. package/dist/cjs/time/index.js +1 -0
  77. package/dist/cjs/time/index.js.map +1 -1
  78. package/dist/cjs/transaction/Resource.js +1 -1
  79. package/dist/cjs/transaction/Resource.js.map +1 -1
  80. package/dist/cjs/transaction/Transaction.d.ts +12 -4
  81. package/dist/cjs/transaction/Transaction.d.ts.map +1 -1
  82. package/dist/cjs/transaction/Transaction.js +4 -4
  83. package/dist/cjs/transaction/Transaction.js.map +1 -1
  84. package/dist/cjs/transaction/Tx.d.ts +2 -1
  85. package/dist/cjs/transaction/Tx.d.ts.map +1 -1
  86. package/dist/cjs/transaction/Tx.js +92 -6
  87. package/dist/cjs/transaction/Tx.js.map +1 -1
  88. package/dist/cjs/util/Abort.js +1 -1
  89. package/dist/cjs/util/Abort.js.map +1 -1
  90. package/dist/cjs/util/Construction.d.ts +2 -1
  91. package/dist/cjs/util/Construction.d.ts.map +1 -1
  92. package/dist/cjs/util/Construction.js +62 -18
  93. package/dist/cjs/util/Construction.js.map +2 -2
  94. package/dist/cjs/util/DataReadQueue.d.ts +1 -5
  95. package/dist/cjs/util/DataReadQueue.d.ts.map +1 -1
  96. package/dist/cjs/util/DataReadQueue.js +12 -11
  97. package/dist/cjs/util/DataReadQueue.js.map +1 -1
  98. package/dist/cjs/util/Decorator.js +1 -1
  99. package/dist/cjs/util/Decorator.js.map +1 -1
  100. package/dist/cjs/util/DeepEqual.js +1 -1
  101. package/dist/cjs/util/DeepEqual.js.map +1 -1
  102. package/dist/cjs/util/FormattedText.d.ts +1 -1
  103. package/dist/cjs/util/FormattedText.d.ts.map +1 -1
  104. package/dist/cjs/util/FormattedText.js +1 -3
  105. package/dist/cjs/util/FormattedText.js.map +1 -1
  106. package/dist/cjs/util/Lifetime.d.ts +97 -0
  107. package/dist/cjs/util/Lifetime.d.ts.map +1 -0
  108. package/dist/cjs/util/Lifetime.js +166 -0
  109. package/dist/cjs/util/Lifetime.js.map +6 -0
  110. package/dist/cjs/util/Multiplex.js +2 -2
  111. package/dist/cjs/util/Multiplex.js.map +1 -1
  112. package/dist/cjs/util/Observable.d.ts +27 -26
  113. package/dist/cjs/util/Observable.d.ts.map +1 -1
  114. package/dist/cjs/util/Observable.js +78 -37
  115. package/dist/cjs/util/Observable.js.map +2 -2
  116. package/dist/cjs/util/String.d.ts +5 -29
  117. package/dist/cjs/util/String.d.ts.map +1 -1
  118. package/dist/cjs/util/String.js +16 -158
  119. package/dist/cjs/util/String.js.map +2 -2
  120. package/dist/cjs/util/identifier-case.d.ts +19 -0
  121. package/dist/cjs/util/identifier-case.d.ts.map +1 -0
  122. package/dist/cjs/util/identifier-case.js +99 -0
  123. package/dist/cjs/util/identifier-case.js.map +6 -0
  124. package/dist/cjs/util/index.d.ts +3 -0
  125. package/dist/cjs/util/index.d.ts.map +1 -1
  126. package/dist/cjs/util/index.js +3 -0
  127. package/dist/cjs/util/index.js.map +1 -1
  128. package/dist/cjs/util/serialize.d.ts +25 -0
  129. package/dist/cjs/util/serialize.d.ts.map +1 -0
  130. package/dist/cjs/util/serialize.js +116 -0
  131. package/dist/cjs/util/serialize.js.map +6 -0
  132. package/dist/esm/MatterError.js +1 -1
  133. package/dist/esm/codec/DerTypes.d.ts.map +1 -1
  134. package/dist/esm/codec/DerTypes.js +2 -1
  135. package/dist/esm/codec/DerTypes.js.map +1 -1
  136. package/dist/esm/crypto/NodeJsStyleCrypto.d.ts +60 -3
  137. package/dist/esm/crypto/NodeJsStyleCrypto.d.ts.map +1 -1
  138. package/dist/esm/crypto/NodeJsStyleCrypto.js.map +1 -1
  139. package/dist/esm/environment/Environment.d.ts +4 -1
  140. package/dist/esm/environment/Environment.d.ts.map +1 -1
  141. package/dist/esm/environment/Environment.js +83 -3
  142. package/dist/esm/environment/Environment.js.map +1 -1
  143. package/dist/esm/environment/Environmental.js +1 -1
  144. package/dist/esm/environment/Environmental.js.map +1 -1
  145. package/dist/esm/environment/RuntimeService.d.ts +3 -44
  146. package/dist/esm/environment/RuntimeService.d.ts.map +1 -1
  147. package/dist/esm/environment/RuntimeService.js +65 -10
  148. package/dist/esm/environment/RuntimeService.js.map +2 -2
  149. package/dist/esm/environment/Worker.d.ts +56 -0
  150. package/dist/esm/environment/Worker.d.ts.map +1 -0
  151. package/dist/esm/environment/Worker.js +24 -0
  152. package/dist/esm/environment/Worker.js.map +6 -0
  153. package/dist/esm/environment/index.d.ts +1 -0
  154. package/dist/esm/environment/index.d.ts.map +1 -1
  155. package/dist/esm/environment/index.js +1 -0
  156. package/dist/esm/environment/index.js.map +1 -1
  157. package/dist/esm/log/Diagnostic.d.ts +11 -1
  158. package/dist/esm/log/Diagnostic.d.ts.map +1 -1
  159. package/dist/esm/log/Diagnostic.js +3 -0
  160. package/dist/esm/log/Diagnostic.js.map +1 -1
  161. package/dist/esm/log/DiagnosticPresentation.d.ts +4 -0
  162. package/dist/esm/log/DiagnosticPresentation.d.ts.map +1 -1
  163. package/dist/esm/log/DiagnosticPresentation.js +3 -2
  164. package/dist/esm/log/DiagnosticPresentation.js.map +1 -1
  165. package/dist/esm/log/DiagnosticSource.d.ts +1 -1
  166. package/dist/esm/log/DiagnosticSource.d.ts.map +1 -1
  167. package/dist/esm/log/DiagnosticSource.js +5 -1
  168. package/dist/esm/log/DiagnosticSource.js.map +1 -1
  169. package/dist/esm/log/LogFormat.js +1 -1
  170. package/dist/esm/log/LogFormat.js.map +1 -1
  171. package/dist/esm/log/NodeJsStyleInspectable.js +1 -1
  172. package/dist/esm/log/NodeJsStyleInspectable.js.map +1 -1
  173. package/dist/esm/net/Channel.d.ts +1 -1
  174. package/dist/esm/net/Channel.d.ts.map +1 -1
  175. package/dist/esm/net/Channel.js +1 -1
  176. package/dist/esm/net/Channel.js.map +1 -1
  177. package/dist/esm/net/mock/MockUdpChannel.d.ts +1 -1
  178. package/dist/esm/net/mock/MockUdpChannel.d.ts.map +1 -1
  179. package/dist/esm/net/mock/NetworkSimulator.d.ts.map +1 -1
  180. package/dist/esm/net/mock/NetworkSimulator.js +2 -1
  181. package/dist/esm/net/mock/NetworkSimulator.js.map +1 -1
  182. package/dist/esm/net/udp/UdpChannel.d.ts +5 -1
  183. package/dist/esm/net/udp/UdpChannel.d.ts.map +1 -1
  184. package/dist/esm/net/udp/UdpMulticastServer.d.ts +4 -6
  185. package/dist/esm/net/udp/UdpMulticastServer.d.ts.map +1 -1
  186. package/dist/esm/net/udp/UdpMulticastServer.js +114 -37
  187. package/dist/esm/net/udp/UdpMulticastServer.js.map +1 -1
  188. package/dist/esm/polyfills/disposable.js +2 -2
  189. package/dist/esm/polyfills/disposable.js.map +1 -1
  190. package/dist/esm/polyfills/metadata.js +1 -1
  191. package/dist/esm/polyfills/metadata.js.map +1 -1
  192. package/dist/esm/time/StandardTime.d.ts +38 -0
  193. package/dist/esm/time/StandardTime.d.ts.map +1 -0
  194. package/dist/esm/time/StandardTime.js +152 -0
  195. package/dist/esm/time/StandardTime.js.map +6 -0
  196. package/dist/esm/time/Time.d.ts +4 -23
  197. package/dist/esm/time/Time.d.ts.map +1 -1
  198. package/dist/esm/time/Time.js +12 -88
  199. package/dist/esm/time/Time.js.map +1 -1
  200. package/dist/esm/time/Timestamp.d.ts +5 -0
  201. package/dist/esm/time/Timestamp.d.ts.map +1 -1
  202. package/dist/esm/time/Timestamp.js +4 -0
  203. package/dist/esm/time/Timestamp.js.map +1 -1
  204. package/dist/esm/time/index.d.ts +1 -0
  205. package/dist/esm/time/index.d.ts.map +1 -1
  206. package/dist/esm/time/index.js +1 -0
  207. package/dist/esm/time/index.js.map +1 -1
  208. package/dist/esm/transaction/Resource.js +1 -1
  209. package/dist/esm/transaction/Resource.js.map +1 -1
  210. package/dist/esm/transaction/Transaction.d.ts +12 -4
  211. package/dist/esm/transaction/Transaction.d.ts.map +1 -1
  212. package/dist/esm/transaction/Transaction.js +4 -4
  213. package/dist/esm/transaction/Transaction.js.map +1 -1
  214. package/dist/esm/transaction/Tx.d.ts +2 -1
  215. package/dist/esm/transaction/Tx.d.ts.map +1 -1
  216. package/dist/esm/transaction/Tx.js +92 -6
  217. package/dist/esm/transaction/Tx.js.map +1 -1
  218. package/dist/esm/util/Abort.js +1 -1
  219. package/dist/esm/util/Abort.js.map +1 -1
  220. package/dist/esm/util/Construction.d.ts +2 -1
  221. package/dist/esm/util/Construction.d.ts.map +1 -1
  222. package/dist/esm/util/Construction.js +62 -18
  223. package/dist/esm/util/Construction.js.map +2 -2
  224. package/dist/esm/util/DataReadQueue.d.ts +1 -5
  225. package/dist/esm/util/DataReadQueue.d.ts.map +1 -1
  226. package/dist/esm/util/DataReadQueue.js +12 -11
  227. package/dist/esm/util/DataReadQueue.js.map +1 -1
  228. package/dist/esm/util/Decorator.js +1 -1
  229. package/dist/esm/util/Decorator.js.map +1 -1
  230. package/dist/esm/util/DeepEqual.js +1 -1
  231. package/dist/esm/util/DeepEqual.js.map +1 -1
  232. package/dist/esm/util/FormattedText.d.ts +1 -1
  233. package/dist/esm/util/FormattedText.d.ts.map +1 -1
  234. package/dist/esm/util/FormattedText.js +2 -4
  235. package/dist/esm/util/FormattedText.js.map +1 -1
  236. package/dist/esm/util/Lifetime.d.ts +97 -0
  237. package/dist/esm/util/Lifetime.d.ts.map +1 -0
  238. package/dist/esm/util/Lifetime.js +146 -0
  239. package/dist/esm/util/Lifetime.js.map +6 -0
  240. package/dist/esm/util/Multiplex.js +2 -2
  241. package/dist/esm/util/Multiplex.js.map +1 -1
  242. package/dist/esm/util/Observable.d.ts +27 -26
  243. package/dist/esm/util/Observable.d.ts.map +1 -1
  244. package/dist/esm/util/Observable.js +78 -37
  245. package/dist/esm/util/Observable.js.map +2 -2
  246. package/dist/esm/util/String.d.ts +5 -29
  247. package/dist/esm/util/String.d.ts.map +1 -1
  248. package/dist/esm/util/String.js +16 -158
  249. package/dist/esm/util/String.js.map +2 -2
  250. package/dist/esm/util/identifier-case.d.ts +19 -0
  251. package/dist/esm/util/identifier-case.d.ts.map +1 -0
  252. package/dist/esm/util/identifier-case.js +79 -0
  253. package/dist/esm/util/identifier-case.js.map +6 -0
  254. package/dist/esm/util/index.d.ts +3 -0
  255. package/dist/esm/util/index.d.ts.map +1 -1
  256. package/dist/esm/util/index.js +3 -0
  257. package/dist/esm/util/index.js.map +1 -1
  258. package/dist/esm/util/serialize.d.ts +25 -0
  259. package/dist/esm/util/serialize.d.ts.map +1 -0
  260. package/dist/esm/util/serialize.js +96 -0
  261. package/dist/esm/util/serialize.js.map +6 -0
  262. package/package.json +2 -2
  263. package/src/MatterError.ts +1 -1
  264. package/src/codec/DerTypes.ts +2 -1
  265. package/src/crypto/NodeJsStyleCrypto.ts +98 -6
  266. package/src/environment/Environment.ts +29 -4
  267. package/src/environment/RuntimeService.ts +19 -55
  268. package/src/environment/Worker.ts +75 -0
  269. package/src/environment/index.ts +1 -0
  270. package/src/log/Diagnostic.ts +15 -1
  271. package/src/log/DiagnosticPresentation.ts +7 -2
  272. package/src/log/DiagnosticSource.ts +5 -1
  273. package/src/log/LogFormat.ts +1 -1
  274. package/src/net/Channel.ts +2 -2
  275. package/src/net/mock/MockUdpChannel.ts +1 -1
  276. package/src/net/mock/NetworkSimulator.ts +2 -1
  277. package/src/net/udp/UdpChannel.ts +6 -1
  278. package/src/net/udp/UdpMulticastServer.ts +72 -34
  279. package/src/time/StandardTime.ts +122 -0
  280. package/src/time/Time.ts +13 -105
  281. package/src/time/Timestamp.ts +8 -0
  282. package/src/time/index.ts +1 -0
  283. package/src/transaction/Transaction.ts +19 -6
  284. package/src/transaction/Tx.ts +49 -2
  285. package/src/util/Abort.ts +1 -1
  286. package/src/util/Construction.ts +76 -18
  287. package/src/util/DataReadQueue.ts +14 -12
  288. package/src/util/FormattedText.ts +1 -1
  289. package/src/util/Lifetime.ts +284 -0
  290. package/src/util/Multiplex.ts +2 -2
  291. package/src/util/Observable.ts +133 -54
  292. package/src/util/String.ts +14 -215
  293. package/src/util/identifier-case.ts +101 -0
  294. package/src/util/index.ts +3 -0
  295. package/src/util/serialize.ts +129 -0
@@ -1,3 +1,48 @@
1
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
2
+ var __typeError = (msg) => {
3
+ throw TypeError(msg);
4
+ };
5
+ var __using = (stack, value, async) => {
6
+ if (value != null) {
7
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
8
+ var dispose, inner;
9
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
10
+ if (dispose === void 0) {
11
+ dispose = value[__knownSymbol("dispose")];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") __typeError("Object not disposable");
15
+ if (inner) dispose = function() {
16
+ try {
17
+ inner.call(this);
18
+ } catch (e) {
19
+ return Promise.reject(e);
20
+ }
21
+ };
22
+ stack.push([async, dispose, value]);
23
+ } else if (async) {
24
+ stack.push([async]);
25
+ }
26
+ return value;
27
+ };
28
+ var __callDispose = (stack, error, hasError) => {
29
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
30
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
31
+ };
32
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
33
+ var next = (it) => {
34
+ while (it = stack.pop()) {
35
+ try {
36
+ var result = it[1] && it[1].call(it[2]);
37
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
38
+ } catch (e) {
39
+ fail(e);
40
+ }
41
+ }
42
+ if (hasError) throw error;
43
+ };
44
+ return next();
45
+ };
1
46
  /**
2
47
  * @license
3
48
  * Copyright 2022-2025 Matter.js Authors
@@ -5,6 +50,7 @@
5
50
  */
6
51
  import { MatterAggregateError } from "#MatterError.js";
7
52
  import { Minutes } from "#time/TimeUnit.js";
53
+ import { Lifetime } from "#util/Lifetime.js";
8
54
  import { Logger } from "../../log/Logger.js";
9
55
  import { Cache } from "../../util/Cache.js";
10
56
  import { asError } from "../../util/Error.js";
@@ -12,46 +58,59 @@ import { isIPv4 } from "../../util/Ip.js";
12
58
  import { NoAddressAvailableError } from "../Network.js";
13
59
  const logger = Logger.get("UdpMulticastServer");
14
60
  class UdpMulticastServer {
15
- constructor(network, broadcastAddressIpv4, broadcastAddressIpv6, broadcastPort, serverIpv4, serverIpv6, netInterface) {
16
- this.network = network;
17
- this.broadcastAddressIpv4 = broadcastAddressIpv4;
18
- this.broadcastAddressIpv6 = broadcastAddressIpv6;
19
- this.broadcastPort = broadcastPort;
20
- this.serverIpv4 = serverIpv4;
21
- this.serverIpv6 = serverIpv6;
22
- this.netInterface = netInterface;
23
- }
61
+ #lifetime;
62
+ network;
63
+ netInterface;
64
+ #broadcastAddressIpv4;
65
+ #broadcastAddressIpv6;
66
+ #broadcastPort;
67
+ #serverIpv4;
68
+ #serverIpv6;
24
69
  static async create({
25
70
  netInterface,
26
71
  broadcastAddressIpv4,
27
72
  broadcastAddressIpv6,
28
73
  listeningPort,
29
- network
74
+ network,
75
+ lifetime: lifetimeOwner
30
76
  }) {
31
- let ipv4UdpChannel = void 0;
32
- if (broadcastAddressIpv4 !== void 0) {
77
+ const lifetime = (lifetimeOwner || Lifetime.process)?.join("multicast server");
78
+ try {
79
+ let ipv4UdpChannel = void 0;
80
+ if (broadcastAddressIpv4 !== void 0) {
81
+ try {
82
+ ipv4UdpChannel = await network.createUdpChannel({
83
+ lifetime,
84
+ type: "udp4",
85
+ netInterface,
86
+ listeningPort,
87
+ reuseAddress: true
88
+ });
89
+ await ipv4UdpChannel.addMembership(broadcastAddressIpv4);
90
+ } catch (error) {
91
+ NoAddressAvailableError.accept(error);
92
+ logger.info(
93
+ `IPv4 UDP channel not created because IPv4 is not available: ${asError(error).message}`
94
+ );
95
+ }
96
+ }
97
+ let ipv6UdpChannel;
33
98
  try {
34
- ipv4UdpChannel = await network.createUdpChannel({
35
- type: "udp4",
99
+ ipv6UdpChannel = await network.createUdpChannel({
100
+ lifetime,
101
+ type: "udp6",
36
102
  netInterface,
37
103
  listeningPort,
38
104
  reuseAddress: true
39
105
  });
40
- await ipv4UdpChannel.addMembership(broadcastAddressIpv4);
106
+ await ipv6UdpChannel.addMembership(broadcastAddressIpv6);
41
107
  } catch (error) {
42
108
  NoAddressAvailableError.accept(error);
43
- logger.info(`IPv4 UDP channel not created because IPv4 is not available: ${asError(error).message}`);
109
+ logger.info(`IPv6 UDP interface not created because IPv6 is not available, but required my Matter`);
110
+ throw error;
44
111
  }
45
- }
46
- try {
47
- const ipv6UdpChannel = await network.createUdpChannel({
48
- type: "udp6",
49
- netInterface,
50
- listeningPort,
51
- reuseAddress: true
52
- });
53
- await ipv6UdpChannel.addMembership(broadcastAddressIpv6);
54
112
  return new UdpMulticastServer(
113
+ lifetime,
55
114
  network,
56
115
  broadcastAddressIpv4,
57
116
  broadcastAddressIpv6,
@@ -61,8 +120,7 @@ class UdpMulticastServer {
61
120
  netInterface
62
121
  );
63
122
  } catch (error) {
64
- NoAddressAvailableError.accept(error);
65
- logger.info(`IPv6 UDP interface not created because IPv6 is not available, but required my Matter.`);
123
+ lifetime[Symbol.dispose]();
66
124
  throw error;
67
125
  }
68
126
  }
@@ -72,17 +130,27 @@ class UdpMulticastServer {
72
130
  Minutes(5),
73
131
  async (_netInterface, channel) => (await channel).close()
74
132
  );
133
+ constructor(lifetime, network, broadcastAddressIpv4, broadcastAddressIpv6, broadcastPort, serverIpv4, serverIpv6, netInterface) {
134
+ this.#lifetime = lifetime;
135
+ this.network = network;
136
+ this.#broadcastAddressIpv4 = broadcastAddressIpv4;
137
+ this.#broadcastAddressIpv6 = broadcastAddressIpv6;
138
+ this.#broadcastPort = broadcastPort;
139
+ this.#serverIpv4 = serverIpv4;
140
+ this.#serverIpv6 = serverIpv6;
141
+ this.netInterface = netInterface;
142
+ }
75
143
  get supportsIpv4() {
76
- return this.serverIpv4 !== void 0;
144
+ return this.#serverIpv4 !== void 0;
77
145
  }
78
146
  onMessage(listener) {
79
- this.serverIpv4?.onData((netInterface, peerAddress, _port, message) => {
147
+ this.#serverIpv4?.onData((netInterface, peerAddress, _port, message) => {
80
148
  if (netInterface === void 0) {
81
149
  return;
82
150
  }
83
151
  listener(message, peerAddress, netInterface);
84
152
  });
85
- this.serverIpv6.onData((netInterface, peerAddress, _port, message) => {
153
+ this.#serverIpv6.onData((netInterface, peerAddress, _port, message) => {
86
154
  if (netInterface === void 0) {
87
155
  return;
88
156
  }
@@ -93,7 +161,7 @@ class UdpMulticastServer {
93
161
  netInterface = netInterface ?? this.netInterface;
94
162
  if (uniCastTarget !== void 0 && netInterface !== void 0) {
95
163
  try {
96
- await (await this.broadcastChannels.get(netInterface, isIPv4(uniCastTarget))).send(uniCastTarget, this.broadcastPort, message);
164
+ await (await this.broadcastChannels.get(netInterface, isIPv4(uniCastTarget))).send(uniCastTarget, this.#broadcastPort, message);
97
165
  } catch (error) {
98
166
  logger.info(`${netInterface} ${uniCastTarget}: ${asError(error).message}`);
99
167
  }
@@ -110,12 +178,12 @@ class UdpMulticastServer {
110
178
  await MatterAggregateError.allSettled(
111
179
  ips.map(async (ip) => {
112
180
  const iPv4 = ipV4.includes(ip);
113
- const broadcastTarget = iPv4 ? this.broadcastAddressIpv4 : this.broadcastAddressIpv6;
181
+ const broadcastTarget = iPv4 ? this.#broadcastAddressIpv4 : this.#broadcastAddressIpv6;
114
182
  if (broadcastTarget === void 0) {
115
183
  return;
116
184
  }
117
185
  try {
118
- await (await this.broadcastChannels.get(netInterface2, iPv4)).send(broadcastTarget, this.broadcastPort, message);
186
+ await (await this.broadcastChannels.get(netInterface2, iPv4)).send(broadcastTarget, this.#broadcastPort, message);
119
187
  } catch (error) {
120
188
  logger.info(`${netInterface2}: ${asError(error).message}`);
121
189
  }
@@ -129,16 +197,25 @@ class UdpMulticastServer {
129
197
  }
130
198
  async createBroadcastChannel(netInterface, iPv4) {
131
199
  return await this.network.createUdpChannel({
200
+ lifetime: this.#lifetime,
132
201
  type: iPv4 ? "udp4" : "udp6",
133
- listeningPort: this.broadcastPort,
202
+ listeningPort: this.#broadcastPort,
134
203
  netInterface,
135
204
  reuseAddress: true
136
205
  });
137
206
  }
138
207
  async close() {
139
- await this.serverIpv4?.close();
140
- await this.serverIpv6.close();
141
- await this.broadcastChannels.close();
208
+ var _stack = [];
209
+ try {
210
+ const _closing = __using(_stack, this.#lifetime.closing());
211
+ await this.#serverIpv4?.close();
212
+ await this.#serverIpv6.close();
213
+ await this.broadcastChannels.close();
214
+ } catch (_) {
215
+ var _error = _, _hasError = true;
216
+ } finally {
217
+ __callDispose(_stack, _error, _hasError);
218
+ }
142
219
  }
143
220
  }
144
221
  export {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/net/udp/UdpMulticastServer.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["netInterface"]
6
6
  }
@@ -4,13 +4,13 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  if (typeof Symbol.dispose !== "symbol") {
7
- Symbol.dispose = Symbol("dispose");
7
+ Symbol.dispose = /* @__PURE__ */ Symbol("dispose");
8
8
  if (typeof Symbol.dispose !== "symbol") {
9
9
  throw new Error("Symbol.dispose is undefined and polyfill installation failed");
10
10
  }
11
11
  }
12
12
  if (typeof Symbol.asyncDispose !== "symbol") {
13
- Symbol.asyncDispose = Symbol("asyncDispose");
13
+ Symbol.asyncDispose = /* @__PURE__ */ Symbol("asyncDispose");
14
14
  if (typeof Symbol.asyncDispose !== "symbol") {
15
15
  throw new Error("Symbol.asyncDispose is undefined and polyfill installation failed");
16
16
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/polyfills/disposable.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,IAAI,OAAO,OAAO,YAAY,UAAU;AACpC,EAAC,OAA+B,UAAU,OAAO,SAAS;AAC1D,MAAI,OAAO,OAAO,YAAY,UAAU;AACpC,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAClF;AACJ;AAEA,IAAI,OAAO,OAAO,iBAAiB,UAAU;AACzC,EAAC,OAAoC,eAAe,OAAO,cAAc;AACzE,MAAI,OAAO,OAAO,iBAAiB,UAAU;AACzC,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACvF;AACJ;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,IAAI,OAAO,OAAO,YAAY,UAAU;AACpC,EAAC,OAA+B,UAAU,uBAAO,SAAS;AAC1D,MAAI,OAAO,OAAO,YAAY,UAAU;AACpC,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAClF;AACJ;AAEA,IAAI,OAAO,OAAO,iBAAiB,UAAU;AACzC,EAAC,OAAoC,eAAe,uBAAO,cAAc;AACzE,MAAI,OAAO,OAAO,iBAAiB,UAAU;AACzC,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACvF;AACJ;",
5
5
  "names": []
6
6
  }
@@ -4,6 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  if (!("metadata" in Symbol)) {
7
- Symbol.metadata = Symbol.for("Symbol.metadata");
7
+ Symbol.metadata = /* @__PURE__ */ Symbol.for("Symbol.metadata");
8
8
  }
9
9
  //# sourceMappingURL=metadata.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/polyfills/metadata.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA,IAAI,EAAG,cAAc,SAAiB;AAClC,EAAC,OAAgC,WAAW,OAAO,IAAI,iBAAiB;AAC5E;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA,IAAI,EAAG,cAAc,SAAiB;AAClC,EAAC,OAAgC,WAAW,uBAAO,IAAI,iBAAiB;AAC5E;",
5
5
  "names": []
6
6
  }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Duration } from "./Duration.js";
7
+ import { Time, Timer } from "./Time.js";
8
+ /**
9
+ * A {@link Timer} implementation that uses standard JavaScript timers.
10
+ */
11
+ export declare class StandardTime extends Time {
12
+ getTimer(name: string, duration: Duration, callback: Timer.Callback): StandardTimer;
13
+ getPeriodicTimer(name: string, duration: Duration, callback: Timer.Callback): StandardTimer;
14
+ }
15
+ /**
16
+ * A {@link Timer} implementation that uses standard JavaScript functions.
17
+ */
18
+ export declare class StandardTimer implements Timer {
19
+ #private;
20
+ readonly name: string;
21
+ private readonly callback;
22
+ readonly isPeriodic: boolean;
23
+ isRunning: boolean;
24
+ get systemId(): number;
25
+ constructor(name: string, duration: Duration, callback: Timer.Callback, isPeriodic: boolean);
26
+ /**
27
+ * The timer's interval.
28
+ *
29
+ * You can change this value but changes have no effect until the timer restarts.
30
+ */
31
+ set interval(interval: Duration);
32
+ get interval(): Duration;
33
+ get utility(): boolean;
34
+ set utility(utility: boolean);
35
+ start(): this;
36
+ stop(): this;
37
+ }
38
+ //# sourceMappingURL=StandardTime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StandardTime.d.ts","sourceRoot":"","sources":["../../../src/time/StandardTime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGxC;;GAEG;AACH,qBAAa,YAAa,SAAQ,IAAI;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;IAInE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;CAGvF;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,KAAK;;IAWnC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO;IAVhC,SAAS,UAAS;IAElB,IAAI,QAAQ,WAEX;gBAGY,IAAI,EAAE,MAAM,EACrB,QAAQ,EAAE,QAAQ,EACD,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAChC,UAAU,EAAE,OAAO;IAKhC;;;;OAIG;IACH,IAAI,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAO9B;IAED,IAAI,QAAQ,IATW,QAAQ,CAW9B;IAED,IAAI,OAAO,IAIU,OAAO,CAF3B;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,EAgB3B;IAED,KAAK;IAeL,IAAI;CAMP"}
@@ -0,0 +1,152 @@
1
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
2
+ var __typeError = (msg) => {
3
+ throw TypeError(msg);
4
+ };
5
+ var __using = (stack, value, async) => {
6
+ if (value != null) {
7
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
8
+ var dispose, inner;
9
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
10
+ if (dispose === void 0) {
11
+ dispose = value[__knownSymbol("dispose")];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") __typeError("Object not disposable");
15
+ if (inner) dispose = function() {
16
+ try {
17
+ inner.call(this);
18
+ } catch (e) {
19
+ return Promise.reject(e);
20
+ }
21
+ };
22
+ stack.push([async, dispose, value]);
23
+ } else if (async) {
24
+ stack.push([async]);
25
+ }
26
+ return value;
27
+ };
28
+ var __callDispose = (stack, error, hasError) => {
29
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
30
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
31
+ };
32
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
33
+ var next = (it) => {
34
+ while (it = stack.pop()) {
35
+ try {
36
+ var result = it[1] && it[1].call(it[2]);
37
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
38
+ } catch (e) {
39
+ fail(e);
40
+ }
41
+ }
42
+ if (hasError) throw error;
43
+ };
44
+ return next();
45
+ };
46
+ /**
47
+ * @license
48
+ * Copyright 2022-2025 Matter.js Authors
49
+ * SPDX-License-Identifier: Apache-2.0
50
+ */
51
+ import { ImplementationError } from "#MatterError.js";
52
+ import { Boot } from "#util/Boot.js";
53
+ import { decamelize } from "#util/identifier-case.js";
54
+ import { Lifetime } from "#util/Lifetime.js";
55
+ import { Time } from "./Time.js";
56
+ import { Instant } from "./TimeUnit.js";
57
+ class StandardTime extends Time {
58
+ getTimer(name, duration, callback) {
59
+ return new StandardTimer(name, duration, callback, false);
60
+ }
61
+ getPeriodicTimer(name, duration, callback) {
62
+ return new StandardTimer(name, duration, callback, true);
63
+ }
64
+ }
65
+ class StandardTimer {
66
+ constructor(name, duration, callback, isPeriodic) {
67
+ this.name = name;
68
+ this.callback = callback;
69
+ this.isPeriodic = isPeriodic;
70
+ this.interval = duration;
71
+ }
72
+ #timerId;
73
+ #utility = false;
74
+ #interval = Instant;
75
+ // Real value installed in constructor
76
+ isRunning = false;
77
+ get systemId() {
78
+ return Number(this.#timerId);
79
+ }
80
+ /**
81
+ * The timer's interval.
82
+ *
83
+ * You can change this value but changes have no effect until the timer restarts.
84
+ */
85
+ set interval(interval) {
86
+ if (interval < 0 || interval > 2147483647) {
87
+ throw new ImplementationError(
88
+ `Invalid intervalMs: ${interval}. The value must be between 0 and 32-bit maximum value (2147483647)`
89
+ );
90
+ }
91
+ this.#interval = interval;
92
+ }
93
+ get interval() {
94
+ return this.#interval;
95
+ }
96
+ get utility() {
97
+ return this.#utility;
98
+ }
99
+ set utility(utility) {
100
+ if (utility === this.#utility) {
101
+ return;
102
+ }
103
+ if (this.#timerId !== void 0) {
104
+ const timerId = this.#timerId;
105
+ if (utility) {
106
+ timerId.unref?.();
107
+ } else {
108
+ timerId.ref?.();
109
+ }
110
+ }
111
+ this.#utility = utility;
112
+ }
113
+ start() {
114
+ if (this.isRunning) this.stop();
115
+ Time.register(this);
116
+ this.isRunning = true;
117
+ this.#timerId = (this.isPeriodic ? setInterval : setTimeout)(() => {
118
+ var _stack = [];
119
+ try {
120
+ const lifetime = __using(_stack, Lifetime(decamelize(this.name, " ")));
121
+ if (!this.isPeriodic) {
122
+ Time.unregister(this);
123
+ this.isRunning = false;
124
+ }
125
+ this.callback(lifetime);
126
+ } catch (_) {
127
+ var _error = _, _hasError = true;
128
+ } finally {
129
+ __callDispose(_stack, _error, _hasError);
130
+ }
131
+ }, this.interval);
132
+ return this;
133
+ }
134
+ stop() {
135
+ (this.isPeriodic ? clearInterval : clearTimeout)(this.#timerId);
136
+ Time.unregister(this);
137
+ this.isRunning = false;
138
+ return this;
139
+ }
140
+ }
141
+ Boot.init(() => {
142
+ Time.default = new StandardTime();
143
+ Time.startup.systemMs = Time.startup.processMs = Time.nowMs;
144
+ if (typeof MatterHooks !== "undefined") {
145
+ MatterHooks?.timeSetup?.(Time);
146
+ }
147
+ });
148
+ export {
149
+ StandardTime,
150
+ StandardTimer
151
+ };
152
+ //# sourceMappingURL=StandardTime.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/time/StandardTime.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,2BAA2B;AACpC,SAAS,YAAY;AACrB,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AAEzB,SAAS,YAAmB;AAC5B,SAAS,eAAe;AAKjB,MAAM,qBAAqB,KAAK;AAAA,EAC1B,SAAS,MAAc,UAAoB,UAA0B;AAC1E,WAAO,IAAI,cAAc,MAAM,UAAU,UAAU,KAAK;AAAA,EAC5D;AAAA,EAES,iBAAiB,MAAc,UAAoB,UAA0B;AAClF,WAAO,IAAI,cAAc,MAAM,UAAU,UAAU,IAAI;AAAA,EAC3D;AACJ;AAKO,MAAM,cAA+B;AAAA,EAUxC,YACa,MACT,UACiB,UACR,YACX;AAJW;AAEQ;AACR;AAET,SAAK,WAAW;AAAA,EACpB;AAAA,EAhBA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA;AAAA,EACZ,YAAY;AAAA,EAEZ,IAAI,WAAW;AACX,WAAO,OAAO,KAAK,QAAQ;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,IAAI,SAAS,UAAoB;AAC7B,QAAI,WAAW,KAAK,WAAW,YAAY;AACvC,YAAM,IAAI;AAAA,QACN,uBAAuB,QAAQ;AAAA,MACnC;AAAA,IACJ;AACA,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,IAAI,WAAW;AACX,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,QAAQ,SAAkB;AAC1B,QAAI,YAAY,KAAK,UAAU;AAC3B;AAAA,IACJ;AAGA,QAAI,KAAK,aAAa,QAAW;AAC7B,YAAM,UAAU,KAAK;AACrB,UAAI,SAAS;AACT,gBAAQ,QAAQ;AAAA,MACpB,OAAO;AACH,gBAAQ,MAAM;AAAA,MAClB;AAAA,IACJ;AAEA,SAAK,WAAW;AAAA,EACpB;AAAA,EAEA,QAAQ;AACJ,QAAI,KAAK,UAAW,MAAK,KAAK;AAC9B,SAAK,SAAS,IAAI;AAClB,SAAK,YAAY;AACjB,SAAK,YAAY,KAAK,aAAa,cAAc,YAAY,MAAM;AAC/D;AAAA;AAAA,cAAM,WAAW,yBAAS,WAAW,KAAK,MAAM,GAAG,CAAC;AACpD,YAAI,CAAC,KAAK,YAAY;AAClB,eAAK,WAAW,IAAI;AACpB,eAAK,YAAY;AAAA,QACrB;AACA,aAAK,SAAS,QAAQ;AAAA,eALtB;AAAA;AAAA;AAAA;AAAA;AAAA,IAMJ,GAAG,KAAK,QAAQ;AAChB,WAAO;AAAA,EACX;AAAA,EAEA,OAAO;AACH,KAAC,KAAK,aAAa,gBAAgB,cAAc,KAAK,QAAyC;AAC/F,SAAK,WAAW,IAAI;AACpB,SAAK,YAAY;AACjB,WAAO;AAAA,EACX;AACJ;AAEA,KAAK,KAAK,MAAM;AACZ,OAAK,UAAU,IAAI,aAAa;AAEhC,OAAK,QAAQ,WAAW,KAAK,QAAQ,YAAY,KAAK;AAGtD,MAAI,OAAO,gBAAgB,aAAa;AACpC,iBAAa,YAAY,IAAI;AAAA,EACjC;AACJ,CAAC;",
5
+ "names": []
6
+ }
@@ -4,6 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { CancelablePromise } from "#util/Cancelable.js";
7
+ import type { Lifetime } from "#util/Lifetime.js";
7
8
  import { Diagnostic } from "../log/Diagnostic.js";
8
9
  import { Duration } from "./Duration.js";
9
10
  import type { Timestamp } from "./Timestamp.js";
@@ -28,12 +29,12 @@ export declare class Time {
28
29
  /**
29
30
  * Create a timer that will call callback after durationMs has passed.
30
31
  */
31
- getTimer(name: string, duration: Duration, callback: Timer.Callback): Timer;
32
+ getTimer(_name: string, _duration: Duration, _callback: Timer.Callback): Timer;
32
33
  static readonly getTimer: (name: string, duration: Duration, callback: Timer.Callback) => Timer;
33
34
  /**
34
35
  * Create a timer that will periodically call callback at intervalMs intervals.
35
36
  */
36
- getPeriodicTimer(name: string, duration: Duration, callback: Timer.Callback): Timer;
37
+ getPeriodicTimer(_name: string, _duration: Duration, _callback: Timer.Callback): Timer;
37
38
  static readonly getPeriodicTimer: (name: string, duration: Duration, callback: Timer.Callback) => Timer;
38
39
  /**
39
40
  * Create a promise that resolves after a specific interval or when canceled, whichever comes first.
@@ -65,26 +66,6 @@ export interface Timer {
65
66
  stop(): Timer;
66
67
  }
67
68
  export declare namespace Timer {
68
- type Callback = () => any;
69
- }
70
- export declare class StandardTimer implements Timer {
71
- #private;
72
- readonly name: string;
73
- private readonly callback;
74
- readonly isPeriodic: boolean;
75
- isRunning: boolean;
76
- get systemId(): number;
77
- constructor(name: string, duration: Duration, callback: Timer.Callback, isPeriodic: boolean);
78
- /**
79
- * The timer's interval.
80
- *
81
- * You can change this value but changes have no effect until the timer restarts.
82
- */
83
- set interval(interval: Duration);
84
- get interval(): Duration;
85
- get utility(): boolean;
86
- set utility(utility: boolean);
87
- start(): this;
88
- stop(): this;
69
+ type Callback = (lifetime: Lifetime) => any;
89
70
  }
90
71
  //# sourceMappingURL=Time.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Time.d.ts","sourceRoot":"","sources":["../../../src/time/Time.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Time.d.ts","sourceRoot":"","sources":["../../../src/time/Time.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD;;;;;GAKG;AACH,qBAAa,IAAI;IACb,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;IAErB,MAAM,CAAC,OAAO;kBACK,SAAS;mBACR,SAAS;MAC3B;IAEF,IAAI,GAAG,SAEN;IACD,MAAM,KAAK,GAAG,SAEb;IAED,IAAI,KAAK,WAER;IACD,MAAM,KAAK,KAAK,IACiB,SAAS,CACzC;IAED,IAAI,KAAK,IAC4D,SAAS,CAC7E;IACD,MAAM,KAAK,KAAK,cAEf;IAED;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK;IAG9E,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAI,MAAM,MAAM,EAAE,UAAU,QAAQ,EAAE,UAAU,KAAK,CAAC,QAAQ,KAAG,KAAK,CAC1C;IAEpD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK;IAGtF,MAAM,CAAC,QAAQ,CAAC,gBAAgB,GAAI,MAAM,MAAM,EAAE,UAAU,QAAQ,EAAE,UAAU,KAAK,CAAC,QAAQ,KAAG,KAAK,CAC1C;IAE5D;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,iBAAiB;IAgB1D,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAI7C,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAK5B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK;IAI9B,MAAM,KAAK,MAAM,eAEhB;CACJ;AAWD,MAAM,WAAW,KAAK;IAClB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,wEAAwE;IACxE,OAAO,EAAE,OAAO,CAAC;IAEjB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAElB,6BAA6B;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IAEnB,2CAA2C;IAC3C,UAAU,EAAE,OAAO,CAAC;IAEpB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC;IAE7B,wCAAwC;IACxC,SAAS,EAAE,OAAO,CAAC;IAEnB,oCAAoC;IACpC,KAAK,IAAI,KAAK,CAAC;IAEf,mCAAmC;IACnC,IAAI,IAAI,KAAK,CAAC;CACjB;AAED,yBAAiB,KAAK,CAAC;IACnB,KAAY,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,GAAG,CAAC;CACtD"}