@matter/general 0.16.0-alpha.0-20251001-7eb06da95 → 0.16.0-alpha.0-20251003-dc6d5523d

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 (153) hide show
  1. package/dist/cjs/MatterError.d.ts +2 -2
  2. package/dist/cjs/MatterError.d.ts.map +1 -1
  3. package/dist/cjs/MatterError.js +0 -1
  4. package/dist/cjs/MatterError.js.map +1 -1
  5. package/dist/cjs/environment/Environment.d.ts +12 -0
  6. package/dist/cjs/environment/Environment.d.ts.map +1 -1
  7. package/dist/cjs/environment/Environment.js +48 -7
  8. package/dist/cjs/environment/Environment.js.map +1 -1
  9. package/dist/cjs/environment/Environmental.d.ts +1 -1
  10. package/dist/cjs/environment/Environmental.d.ts.map +1 -1
  11. package/dist/cjs/environment/RuntimeService.d.ts +9 -2
  12. package/dist/cjs/environment/RuntimeService.d.ts.map +1 -1
  13. package/dist/cjs/environment/RuntimeService.js +10 -1
  14. package/dist/cjs/environment/RuntimeService.js.map +1 -1
  15. package/dist/cjs/net/AppAddress.d.ts +46 -0
  16. package/dist/cjs/net/AppAddress.d.ts.map +1 -0
  17. package/dist/cjs/net/AppAddress.js +117 -0
  18. package/dist/cjs/net/AppAddress.js.map +6 -0
  19. package/dist/cjs/net/Channel.d.ts +2 -2
  20. package/dist/cjs/net/Channel.d.ts.map +1 -1
  21. package/dist/cjs/net/{TransportInterface.d.ts → ConnectionlessTransport.d.ts} +9 -8
  22. package/dist/cjs/net/ConnectionlessTransport.d.ts.map +1 -0
  23. package/dist/cjs/net/{TransportInterface.js → ConnectionlessTransport.js} +9 -8
  24. package/dist/cjs/net/ConnectionlessTransport.js.map +6 -0
  25. package/dist/cjs/net/Network.d.ts +2 -2
  26. package/dist/cjs/net/Network.d.ts.map +1 -1
  27. package/dist/cjs/net/ServerAddress.d.ts +7 -2
  28. package/dist/cjs/net/ServerAddress.d.ts.map +1 -1
  29. package/dist/cjs/net/ServerAddress.js +20 -5
  30. package/dist/cjs/net/ServerAddress.js.map +1 -1
  31. package/dist/cjs/net/index.d.ts +3 -5
  32. package/dist/cjs/net/index.d.ts.map +1 -1
  33. package/dist/cjs/net/index.js +3 -5
  34. package/dist/cjs/net/index.js.map +1 -1
  35. package/dist/cjs/net/mock/MockNetwork.d.ts +1 -1
  36. package/dist/cjs/net/mock/MockNetwork.d.ts.map +1 -1
  37. package/dist/cjs/net/mock/MockUdpChannel.d.ts +1 -1
  38. package/dist/cjs/net/mock/MockUdpChannel.d.ts.map +1 -1
  39. package/dist/cjs/net/mock/MockUdpChannel.js +1 -1
  40. package/dist/{esm/net → cjs/net/udp}/UdpChannel.d.ts +3 -3
  41. package/dist/cjs/net/udp/UdpChannel.d.ts.map +1 -0
  42. package/dist/cjs/net/{UdpChannel.js.map → udp/UdpChannel.js.map} +1 -1
  43. package/dist/{esm/net → cjs/net/udp}/UdpInterface.d.ts +9 -10
  44. package/dist/cjs/net/udp/UdpInterface.d.ts.map +1 -0
  45. package/dist/cjs/net/{UdpInterface.js → udp/UdpInterface.js} +2 -2
  46. package/dist/cjs/net/{UdpInterface.js.map → udp/UdpInterface.js.map} +2 -2
  47. package/dist/{esm/net → cjs/net/udp}/UdpMulticastServer.d.ts +1 -1
  48. package/dist/cjs/net/udp/UdpMulticastServer.d.ts.map +1 -0
  49. package/dist/cjs/net/{UdpMulticastServer.js → udp/UdpMulticastServer.js} +5 -5
  50. package/dist/cjs/net/{UdpMulticastServer.js.map → udp/UdpMulticastServer.js.map} +1 -1
  51. package/dist/cjs/net/udp/index.d.ts +9 -0
  52. package/dist/cjs/net/udp/index.d.ts.map +1 -0
  53. package/dist/cjs/net/udp/index.js +26 -0
  54. package/dist/cjs/net/udp/index.js.map +6 -0
  55. package/dist/cjs/time/Duration.d.ts.map +1 -1
  56. package/dist/cjs/time/Duration.js +4 -1
  57. package/dist/cjs/time/Duration.js.map +1 -1
  58. package/dist/esm/MatterError.d.ts +2 -2
  59. package/dist/esm/MatterError.d.ts.map +1 -1
  60. package/dist/esm/MatterError.js +0 -1
  61. package/dist/esm/MatterError.js.map +1 -1
  62. package/dist/esm/environment/Environment.d.ts +12 -0
  63. package/dist/esm/environment/Environment.d.ts.map +1 -1
  64. package/dist/esm/environment/Environment.js +48 -7
  65. package/dist/esm/environment/Environment.js.map +1 -1
  66. package/dist/esm/environment/Environmental.d.ts +1 -1
  67. package/dist/esm/environment/Environmental.d.ts.map +1 -1
  68. package/dist/esm/environment/RuntimeService.d.ts +9 -2
  69. package/dist/esm/environment/RuntimeService.d.ts.map +1 -1
  70. package/dist/esm/environment/RuntimeService.js +10 -1
  71. package/dist/esm/environment/RuntimeService.js.map +1 -1
  72. package/dist/esm/net/AppAddress.d.ts +46 -0
  73. package/dist/esm/net/AppAddress.d.ts.map +1 -0
  74. package/dist/esm/net/AppAddress.js +97 -0
  75. package/dist/esm/net/AppAddress.js.map +6 -0
  76. package/dist/esm/net/Channel.d.ts +2 -2
  77. package/dist/esm/net/Channel.d.ts.map +1 -1
  78. package/dist/esm/net/{TransportInterface.d.ts → ConnectionlessTransport.d.ts} +9 -8
  79. package/dist/esm/net/ConnectionlessTransport.d.ts.map +1 -0
  80. package/dist/esm/net/{TransportInterface.js → ConnectionlessTransport.js} +6 -5
  81. package/dist/esm/net/ConnectionlessTransport.js.map +6 -0
  82. package/dist/esm/net/Network.d.ts +2 -2
  83. package/dist/esm/net/Network.d.ts.map +1 -1
  84. package/dist/esm/net/ServerAddress.d.ts +7 -2
  85. package/dist/esm/net/ServerAddress.d.ts.map +1 -1
  86. package/dist/esm/net/ServerAddress.js +20 -5
  87. package/dist/esm/net/ServerAddress.js.map +1 -1
  88. package/dist/esm/net/index.d.ts +3 -5
  89. package/dist/esm/net/index.d.ts.map +1 -1
  90. package/dist/esm/net/index.js +3 -5
  91. package/dist/esm/net/index.js.map +1 -1
  92. package/dist/esm/net/mock/MockNetwork.d.ts +1 -1
  93. package/dist/esm/net/mock/MockNetwork.d.ts.map +1 -1
  94. package/dist/esm/net/mock/MockUdpChannel.d.ts +1 -1
  95. package/dist/esm/net/mock/MockUdpChannel.d.ts.map +1 -1
  96. package/dist/esm/net/mock/MockUdpChannel.js +1 -1
  97. package/dist/{cjs/net → esm/net/udp}/UdpChannel.d.ts +3 -3
  98. package/dist/esm/net/udp/UdpChannel.d.ts.map +1 -0
  99. package/dist/esm/net/{UdpChannel.js.map → udp/UdpChannel.js.map} +1 -1
  100. package/dist/{cjs/net → esm/net/udp}/UdpInterface.d.ts +9 -10
  101. package/dist/esm/net/udp/UdpInterface.d.ts.map +1 -0
  102. package/dist/esm/net/{UdpInterface.js → udp/UdpInterface.js} +2 -2
  103. package/dist/esm/net/{UdpInterface.js.map → udp/UdpInterface.js.map} +2 -2
  104. package/dist/{cjs/net → esm/net/udp}/UdpMulticastServer.d.ts +1 -1
  105. package/dist/esm/net/udp/UdpMulticastServer.d.ts.map +1 -0
  106. package/dist/esm/net/{UdpMulticastServer.js → udp/UdpMulticastServer.js} +5 -5
  107. package/dist/esm/net/{UdpMulticastServer.js.map → udp/UdpMulticastServer.js.map} +1 -1
  108. package/dist/esm/net/udp/index.d.ts +9 -0
  109. package/dist/esm/net/udp/index.d.ts.map +1 -0
  110. package/dist/esm/net/udp/index.js +9 -0
  111. package/dist/esm/net/udp/index.js.map +6 -0
  112. package/dist/esm/time/Duration.d.ts.map +1 -1
  113. package/dist/esm/time/Duration.js +4 -1
  114. package/dist/esm/time/Duration.js.map +1 -1
  115. package/package.json +2 -2
  116. package/src/MatterError.ts +6 -3
  117. package/src/environment/Environment.ts +66 -8
  118. package/src/environment/Environmental.ts +1 -1
  119. package/src/environment/RuntimeService.ts +21 -2
  120. package/src/net/AppAddress.ts +136 -0
  121. package/src/net/Channel.ts +2 -2
  122. package/src/net/{TransportInterface.ts → ConnectionlessTransport.ts} +12 -8
  123. package/src/net/Network.ts +2 -2
  124. package/src/net/ServerAddress.ts +32 -7
  125. package/src/net/index.ts +3 -5
  126. package/src/net/mock/MockNetwork.ts +1 -1
  127. package/src/net/mock/MockUdpChannel.ts +1 -1
  128. package/src/net/{UdpChannel.ts → udp/UdpChannel.ts} +3 -3
  129. package/src/net/{UdpInterface.ts → udp/UdpInterface.ts} +7 -8
  130. package/src/net/{UdpMulticastServer.ts → udp/UdpMulticastServer.ts} +5 -5
  131. package/src/net/udp/index.ts +9 -0
  132. package/src/time/Duration.ts +8 -1
  133. package/dist/cjs/net/NetInterface.d.ts +0 -25
  134. package/dist/cjs/net/NetInterface.d.ts.map +0 -1
  135. package/dist/cjs/net/NetInterface.js +0 -42
  136. package/dist/cjs/net/NetInterface.js.map +0 -6
  137. package/dist/cjs/net/TransportInterface.d.ts.map +0 -1
  138. package/dist/cjs/net/TransportInterface.js.map +0 -6
  139. package/dist/cjs/net/UdpChannel.d.ts.map +0 -1
  140. package/dist/cjs/net/UdpInterface.d.ts.map +0 -1
  141. package/dist/cjs/net/UdpMulticastServer.d.ts.map +0 -1
  142. package/dist/esm/net/NetInterface.d.ts +0 -25
  143. package/dist/esm/net/NetInterface.d.ts.map +0 -1
  144. package/dist/esm/net/NetInterface.js +0 -22
  145. package/dist/esm/net/NetInterface.js.map +0 -6
  146. package/dist/esm/net/TransportInterface.d.ts.map +0 -1
  147. package/dist/esm/net/TransportInterface.js.map +0 -6
  148. package/dist/esm/net/UdpChannel.d.ts.map +0 -1
  149. package/dist/esm/net/UdpInterface.d.ts.map +0 -1
  150. package/dist/esm/net/UdpMulticastServer.d.ts.map +0 -1
  151. package/src/net/NetInterface.ts +0 -34
  152. /package/dist/cjs/net/{UdpChannel.js → udp/UdpChannel.js} +0 -0
  153. /package/dist/esm/net/{UdpChannel.js → udp/UdpChannel.js} +0 -0
@@ -3,14 +3,12 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ export * from "./AppAddress.js";
6
7
  export * from "./Channel.js";
8
+ export * from "./ConnectionlessTransport.js";
7
9
  export * from "./mock/index.js";
8
- export * from "./NetInterface.js";
9
10
  export * from "./Network.js";
10
11
  export * from "./RetrySchedule.js";
11
12
  export * from "./ServerAddress.js";
12
- export * from "./TransportInterface.js";
13
- export * from "./UdpChannel.js";
14
- export * from "./UdpInterface.js";
15
- export * from "./UdpMulticastServer.js";
13
+ export * from "./udp/index.js";
16
14
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/index.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
5
5
  "names": []
6
6
  }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { ChannelType } from "#net/Channel.js";
7
7
  import { Network, NetworkInterface, NetworkInterfaceDetails } from "../Network.js";
8
- import { UdpChannelOptions } from "../UdpChannel.js";
8
+ import { UdpChannelOptions } from "../udp/UdpChannel.js";
9
9
  import { MockRouter } from "./MockRouter.js";
10
10
  import { MockUdpChannel } from "./MockUdpChannel.js";
11
11
  import type { NetworkSimulator } from "./NetworkSimulator.js";
@@ -1 +1 @@
1
- {"version":3,"file":"MockNetwork.d.ts","sourceRoot":"","sources":["../../../../src/net/mock/MockNetwork.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAgB,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,qBAAa,WAAY,SAAQ,OAAO;;IACpC,QAAQ,CAAC,MAAM;;;;MAAgB;gBAInB,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IAWnE,IAAI,SAAS,qBAEZ;IAED,gBAAgB,IAAI,gBAAgB,EAAE;IAItC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB;IAOtC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB;IAIpD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM;IAI7B,KAAK;CAGvB"}
1
+ {"version":3,"file":"MockNetwork.d.ts","sourceRoot":"","sources":["../../../../src/net/mock/MockNetwork.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAgB,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,qBAAa,WAAY,SAAQ,OAAO;;IACpC,QAAQ,CAAC,MAAM;;;;MAAgB;gBAInB,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IAWnE,IAAI,SAAS,qBAEZ;IAED,gBAAgB,IAAI,gBAAgB,EAAE;IAItC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB;IAOtC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB;IAIpD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM;IAI7B,KAAK;CAGvB"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { ChannelType } from "#net/Channel.js";
7
7
  import { Bytes } from "#util/Bytes.js";
8
- import { UdpChannel, UdpChannelOptions } from "../UdpChannel.js";
8
+ import { UdpChannel, UdpChannelOptions } from "../udp/UdpChannel.js";
9
9
  import { MockNetwork } from "./MockNetwork.js";
10
10
  export declare class MockUdpChannel implements UdpChannel {
11
11
  #private;
@@ -1 +1 @@
1
- {"version":3,"file":"MockUdpChannel.d.ts","sourceRoot":"","sources":["../../../../src/net/mock/MockUdpChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAwB,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,cAAe,YAAW,UAAU;;IAM7C,QAAQ,CAAC,cAAc,SAAwB;gBAEnC,OAAO,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,iBAAiB;IAqB5G,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ;;;IAuB9B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;IAW/C,KAAK;IAIL,CAAC,MAAM,CAAC,YAAY,CAAC;IAI3B,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM;IAI5C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGxC"}
1
+ {"version":3,"file":"MockUdpChannel.d.ts","sourceRoot":"","sources":["../../../../src/net/mock/MockUdpChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAwB,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,cAAe,YAAW,UAAU;;IAM7C,QAAQ,CAAC,cAAc,SAAwB;gBAEnC,OAAO,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,iBAAiB;IAqB5G,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ;;;IAuB9B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;IAW/C,KAAK;IAIL,CAAC,MAAM,CAAC,YAAY,CAAC;IAI3B,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM;IAI5C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGxC"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { ChannelType } from "#net/Channel.js";
7
7
  import { NetworkError } from "../Network.js";
8
- import { MAX_UDP_MESSAGE_SIZE } from "../UdpChannel.js";
8
+ import { MAX_UDP_MESSAGE_SIZE } from "../udp/UdpChannel.js";
9
9
  import { MockRouter } from "./MockRouter.js";
10
10
  class MockUdpChannel {
11
11
  #host;
@@ -4,8 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { Bytes, MaybePromise } from "#util/index.js";
7
- import { ChannelType } from "./Channel.js";
8
- import { TransportInterface } from "./TransportInterface.js";
7
+ import { ChannelType } from "../Channel.js";
8
+ import { ConnectionlessTransport } from "../ConnectionlessTransport.js";
9
9
  /** @see {@link MatterSpecification.v12.Core} § 4.4.4 */
10
10
  export declare const MAX_UDP_MESSAGE_SIZE: number;
11
11
  export type UdpSocketType = "udp4" | "udp6";
@@ -19,7 +19,7 @@ export interface UdpChannel {
19
19
  maxPayloadSize: number;
20
20
  addMembership(address: string): MaybePromise<void>;
21
21
  dropMembership(address: string): MaybePromise<void>;
22
- onData(listener: UdpChannel.Callback): TransportInterface.Listener;
22
+ onData(listener: UdpChannel.Callback): ConnectionlessTransport.Listener;
23
23
  send(host: string, port: number, data: Bytes): Promise<void>;
24
24
  close(): Promise<void>;
25
25
  get port(): number;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UdpChannel.d.ts","sourceRoot":"","sources":["../../../../src/net/udp/UdpChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,wDAAwD;AACxD,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC;IACxE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1D;AAED,yBAAiB,UAAU,CAAC;IACxB,UAAiB,QAAQ;QACrB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;KAChG;CACJ"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/net/UdpChannel.ts"],
3
+ "sources": ["../../../../src/net/udp/UdpChannel.ts"],
4
4
  "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,MAAM,uBAAuB,OAAO;",
5
5
  "names": []
6
6
  }
@@ -3,25 +3,24 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { Channel, ChannelType, IpNetworkChannel } from "#net/Channel.js";
7
+ import { ConnectionlessTransport } from "#net/ConnectionlessTransport.js";
8
+ import { Network } from "#net/Network.js";
6
9
  import { Bytes } from "#util/Bytes.js";
7
- import { Channel, ChannelType, IpNetworkChannel } from "./Channel.js";
8
- import { NetInterface } from "./NetInterface.js";
9
- import { Network } from "./Network.js";
10
- import { ServerAddress, ServerAddressIp } from "./ServerAddress.js";
11
- import { TransportInterface } from "./TransportInterface.js";
10
+ import { ServerAddress, ServerAddressUdp } from "../ServerAddress.js";
12
11
  import { UdpChannel } from "./UdpChannel.js";
13
- export declare class UdpInterface implements NetInterface {
12
+ export declare class UdpInterface implements ConnectionlessTransport {
14
13
  #private;
15
14
  static create(network: Network, type: "udp4" | "udp6", port?: number, host?: string, netInterface?: string): Promise<UdpInterface>;
16
15
  constructor(server: UdpChannel);
17
16
  protected get server(): UdpChannel;
18
17
  supports(type: ChannelType, address: string): boolean;
19
18
  openChannel(address: ServerAddress): Promise<UdpConnection>;
20
- onData(listener: (channel: Channel<Bytes>, messageBytes: Bytes) => void): TransportInterface.Listener;
19
+ onData(listener: (channel: Channel<Bytes>, messageBytes: Bytes) => void): ConnectionlessTransport.Listener;
21
20
  get port(): number;
22
21
  close(): Promise<void>;
23
- addMembership(address: string): import("../index.js").MaybePromise<void>;
24
- dropMembership(address: string): import("../index.js").MaybePromise<void>;
22
+ addMembership(address: string): import("../../index.js").MaybePromise<void>;
23
+ dropMembership(address: string): import("../../index.js").MaybePromise<void>;
25
24
  }
26
25
  export declare class UdpConnection implements IpNetworkChannel<Bytes> {
27
26
  #private;
@@ -31,7 +30,7 @@ export declare class UdpConnection implements IpNetworkChannel<Bytes> {
31
30
  get maxPayloadSize(): number;
32
31
  send(data: Bytes): Promise<void>;
33
32
  get name(): string;
34
- get networkAddress(): ServerAddressIp;
33
+ get networkAddress(): ServerAddressUdp;
35
34
  close(): Promise<void>;
36
35
  }
37
36
  //# sourceMappingURL=UdpInterface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UdpInterface.d.ts","sourceRoot":"","sources":["../../../../src/net/udp/UdpInterface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAgB,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qBAAa,YAAa,YAAW,uBAAuB;;WAG3C,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;gBAMpG,MAAM,EAAE,UAAU;IAI9B,SAAS,KAAK,MAAM,eAEnB;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM;IAIrC,WAAW,CAAC,OAAO,EAAE,aAAa;IAQxC,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,KAAK,IAAI,GAAG,uBAAuB,CAAC,QAAQ;IAM1G,IAAI,IAAI,WAEP;IAED,KAAK;IAIL,aAAa,CAAC,OAAO,EAAE,MAAM;IAI7B,cAAc,CAAC,OAAO,EAAE,MAAM;CAGjC;AAED,qBAAa,aAAc,YAAW,gBAAgB,CAAC,KAAK,CAAC;;IACzD,QAAQ,CAAC,UAAU,SAAS;IAC5B,QAAQ,CAAC,IAAI,mBAAmB;gBAKpB,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAMrE,IAAI,cAAc,WAEjB;IAED,IAAI,CAAC,IAAI,EAAE,KAAK;IAIhB,IAAI,IAAI,WAEP;IAED,IAAI,cAAc,IAAI,gBAAgB,CAErC;IAEK,KAAK;CAGd"}
@@ -3,8 +3,8 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { ChannelType } from "./Channel.js";
7
- import { NetworkError } from "./Network.js";
6
+ import { ChannelType } from "#net/Channel.js";
7
+ import { NetworkError } from "#net/Network.js";
8
8
  class UdpInterface {
9
9
  #server;
10
10
  static async create(network, type, port, host, netInterface) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/net/UdpInterface.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAkB,mBAAqC;AAEvD,SAAkB,oBAAoB;AAK/B,MAAM,aAAqC;AAAA,EACrC;AAAA,EAET,aAAa,OAAO,SAAkB,MAAuB,MAAe,MAAe,cAAuB;AAC9G,WAAO,IAAI;AAAA,MACP,MAAM,QAAQ,iBAAiB,EAAE,eAAe,MAAM,MAAM,cAAc,kBAAkB,KAAK,CAAC;AAAA,IACtG;AAAA,EACJ;AAAA,EAEA,YAAY,QAAoB;AAC5B,SAAK,UAAU;AAAA,EACnB;AAAA,EAEA,IAAc,SAAS;AACnB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,SAAS,MAAmB,SAAiB;AACzC,WAAO,KAAK,QAAQ,SAAS,MAAM,OAAO;AAAA,EAC9C;AAAA,EAEA,MAAM,YAAY,SAAwB;AACtC,QAAI,QAAQ,SAAS,OAAO;AACxB,YAAM,IAAI,aAAa,4BAA4B,QAAQ,IAAI,EAAE;AAAA,IACrE;AACA,UAAM,EAAE,IAAI,KAAK,IAAI;AACrB,WAAO,QAAQ,QAAQ,IAAI,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC;AAAA,EACpE;AAAA,EAEA,OAAO,UAA+F;AAClG,WAAO,KAAK,QAAQ;AAAA,MAAO,CAAC,eAAe,UAAU,UAAU,SAC3D,SAAS,IAAI,cAAc,KAAK,SAAS,UAAU,QAAQ,GAAG,IAAI;AAAA,IACtE;AAAA,EACJ;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,QAAQ;AACJ,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAEA,cAAc,SAAiB;AAC3B,WAAO,KAAK,QAAQ,cAAc,OAAO;AAAA,EAC7C;AAAA,EAEA,eAAe,SAAiB;AAC5B,WAAO,KAAK,QAAQ,eAAe,OAAO;AAAA,EAC9C;AACJ;AAEO,MAAM,cAAiD;AAAA,EACjD,aAAa;AAAA,EACb,OAAO,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAoB,aAAqB,UAAkB;AACnE,SAAK,UAAU;AACf,SAAK,eAAe;AACpB,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,IAAI,iBAAiB;AACjB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,KAAK,MAAa;AACd,WAAO,KAAK,QAAQ,KAAK,KAAK,cAAc,KAAK,WAAW,IAAI;AAAA,EACpE;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,GAAG,KAAK,IAAI,OAAO,KAAK,YAAY,KAAK,KAAK,SAAS;AAAA,EAClE;AAAA,EAEA,IAAI,iBAAkC;AAClC,WAAO,EAAE,MAAM,OAAO,IAAI,KAAK,cAAc,MAAM,KAAK,UAAU;AAAA,EACtE;AAAA,EAEA,MAAM,QAAQ;AAAA,EAEd;AACJ;",
3
+ "sources": ["../../../../src/net/udp/UdpInterface.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAkB,mBAAqC;AAEvD,SAAkB,oBAAoB;AAK/B,MAAM,aAAgD;AAAA,EAChD;AAAA,EAET,aAAa,OAAO,SAAkB,MAAuB,MAAe,MAAe,cAAuB;AAC9G,WAAO,IAAI;AAAA,MACP,MAAM,QAAQ,iBAAiB,EAAE,eAAe,MAAM,MAAM,cAAc,kBAAkB,KAAK,CAAC;AAAA,IACtG;AAAA,EACJ;AAAA,EAEA,YAAY,QAAoB;AAC5B,SAAK,UAAU;AAAA,EACnB;AAAA,EAEA,IAAc,SAAS;AACnB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,SAAS,MAAmB,SAAiB;AACzC,WAAO,KAAK,QAAQ,SAAS,MAAM,OAAO;AAAA,EAC9C;AAAA,EAEA,MAAM,YAAY,SAAwB;AACtC,QAAI,QAAQ,SAAS,OAAO;AACxB,YAAM,IAAI,aAAa,4BAA4B,QAAQ,IAAI,EAAE;AAAA,IACrE;AACA,UAAM,EAAE,IAAI,KAAK,IAAI;AACrB,WAAO,QAAQ,QAAQ,IAAI,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC;AAAA,EACpE;AAAA,EAEA,OAAO,UAAoG;AACvG,WAAO,KAAK,QAAQ;AAAA,MAAO,CAAC,eAAe,UAAU,UAAU,SAC3D,SAAS,IAAI,cAAc,KAAK,SAAS,UAAU,QAAQ,GAAG,IAAI;AAAA,IACtE;AAAA,EACJ;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,QAAQ;AACJ,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAEA,cAAc,SAAiB;AAC3B,WAAO,KAAK,QAAQ,cAAc,OAAO;AAAA,EAC7C;AAAA,EAEA,eAAe,SAAiB;AAC5B,WAAO,KAAK,QAAQ,eAAe,OAAO;AAAA,EAC9C;AACJ;AAEO,MAAM,cAAiD;AAAA,EACjD,aAAa;AAAA,EACb,OAAO,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAoB,aAAqB,UAAkB;AACnE,SAAK,UAAU;AACf,SAAK,eAAe;AACpB,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,IAAI,iBAAiB;AACjB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,KAAK,MAAa;AACd,WAAO,KAAK,QAAQ,KAAK,KAAK,cAAc,KAAK,WAAW,IAAI;AAAA,EACpE;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,GAAG,KAAK,IAAI,OAAO,KAAK,YAAY,KAAK,KAAK,SAAS;AAAA,EAClE;AAAA,EAEA,IAAI,iBAAmC;AACnC,WAAO,EAAE,MAAM,OAAO,IAAI,KAAK,cAAc,MAAM,KAAK,UAAU;AAAA,EACtE;AAAA,EAEA,MAAM,QAAQ;AAAA,EAEd;AACJ;",
5
5
  "names": []
6
6
  }
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { Bytes } from "#util/Bytes.js";
7
- import { Network } from "./Network.js";
7
+ import { Network } from "../Network.js";
8
8
  export interface UdpMulticastServerOptions {
9
9
  network: Network;
10
10
  listeningPort: number;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UdpMulticastServer.d.ts","sourceRoot":"","sources":["../../../../src/net/udp/UdpMulticastServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,OAAO,EAAE,OAAO,EAA2B,MAAM,eAAe,CAAC;AAKjE,MAAM,WAAW,yBAAyB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAsDvB,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS;WA3DhC,MAAM,CAAC,EAChB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,OAAO,GACV,EAAE,yBAAyB;IAuC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAKhC;IAEF,OAAO;IAUP,IAAI,YAAY,YAEf;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI;IAiBjF,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;YA+C1D,sBAAsB;IAQ9B,KAAK;CAKd"}
@@ -5,11 +5,11 @@
5
5
  */
6
6
  import { MatterAggregateError } from "#MatterError.js";
7
7
  import { Minutes } from "#time/TimeUnit.js";
8
- import { Logger } from "../log/Logger.js";
9
- import { Cache } from "../util/Cache.js";
10
- import { asError } from "../util/Error.js";
11
- import { isIPv4 } from "../util/Ip.js";
12
- import { NoAddressAvailableError } from "./Network.js";
8
+ import { Logger } from "../../log/Logger.js";
9
+ import { Cache } from "../../util/Cache.js";
10
+ import { asError } from "../../util/Error.js";
11
+ import { isIPv4 } from "../../util/Ip.js";
12
+ import { NoAddressAvailableError } from "../Network.js";
13
13
  const logger = Logger.get("UdpMulticastServer");
14
14
  class UdpMulticastServer {
15
15
  constructor(network, broadcastAddressIpv4, broadcastAddressIpv6, broadcastPort, serverIpv4, serverIpv6, netInterface) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/net/UdpMulticastServer.ts"],
3
+ "sources": ["../../../../src/net/udp/UdpMulticastServer.ts"],
4
4
  "mappings": "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",
5
5
  "names": ["netInterface"]
6
6
  }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./UdpChannel.js";
7
+ export * from "./UdpInterface.js";
8
+ export * from "./UdpMulticastServer.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/net/udp/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./UdpChannel.js";
7
+ export * from "./UdpInterface.js";
8
+ export * from "./UdpMulticastServer.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/net/udp/index.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;",
5
+ "names": []
6
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"Duration.d.ts","sourceRoot":"","sources":["../../../src/time/Duration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;AAEvD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAazE;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;CAAG;AAE/D,yBAAiB,QAAQ,CAAC;IACtB;;OAEG;IACH,SAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,YAK3C;IAED;;OAEG;IACH,SAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,YAK3C;IAED;;OAEG;IACH,SAAgB,MAAM,CAAC,CAAC,SAAS,QAAQ,GAAG,SAAS,EACjD,QAAQ,EAAE,CAAC,GACZ,CAAC,SAAS,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAmDnD;IAED;;OAEG;IACH,SAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GA8CX,QAAQ,CAC9B;CACJ"}
1
+ {"version":3,"file":"Duration.d.ts","sourceRoot":"","sources":["../../../src/time/Duration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;AAEvD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAazE;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;CAAG;AAE/D,yBAAiB,QAAQ,CAAC;IACtB;;OAEG;IACH,SAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,YAK3C;IAED;;OAEG;IACH,SAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,YAK3C;IAED;;OAEG;IACH,SAAgB,MAAM,CAAC,CAAC,SAAS,QAAQ,GAAG,SAAS,EACjD,QAAQ,EAAE,CAAC,GACZ,CAAC,SAAS,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAsDnD;IAED;;OAEG;IACH,SAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GA8CX,QAAQ,CAC9B;CACJ"}
@@ -34,6 +34,9 @@ class DurationFormatError extends UnexpectedDataError {
34
34
  }
35
35
  Duration2.min = min;
36
36
  function format(duration) {
37
+ if (duration === void 0) {
38
+ return void 0;
39
+ }
37
40
  let ms = duration;
38
41
  if (typeof ms !== "number" || !Number.isFinite(ms)) {
39
42
  return "invalid";
@@ -116,7 +119,7 @@ class DurationFormatError extends UnexpectedDataError {
116
119
  Duration2.parse = parse;
117
120
  })(Duration || (Duration = {}));
118
121
  function toPrecision(number, precision) {
119
- return number.toPrecision(precision).replace(/\.?0+/, "");
122
+ return number.toPrecision(precision).replace(/(\.\d*?[1-9])0+$/, "$1").replace(/\.0+$/, "");
120
123
  }
121
124
  export {
122
125
  Duration,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/time/Duration.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["Duration"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/general",
3
- "version": "0.16.0-alpha.0-20251001-7eb06da95",
3
+ "version": "0.16.0-alpha.0-20251003-dc6d5523d",
4
4
  "description": "Non-Matter support for Matter.js",
5
5
  "keywords": [
6
6
  "iot",
@@ -36,7 +36,7 @@
36
36
  "@noble/curves": "^2.0.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@matter/testing": "0.16.0-alpha.0-20251001-7eb06da95"
39
+ "@matter/testing": "0.16.0-alpha.0-20251003-dc6d5523d"
40
40
  },
41
41
  "files": [
42
42
  "dist/**/*",
@@ -4,6 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import { MaybePromise } from "#util/Promises.js";
7
8
  import { decamelize } from "#util/String.js";
8
9
  import { errorOf } from "./util/Error.js";
9
10
 
@@ -232,16 +233,18 @@ export class MatterAggregateError extends AggregateError {
232
233
  /**
233
234
  * Wait for all promises to settle and throw an error if any of them reject as MatterAggregateError
234
235
  * (or extended class). Promise results are not returned.
235
- * TODO: Enhance the types between call and result to be better unwrapped
236
236
  */
237
- static async allSettled(promises: Iterable<unknown>, message = "Errors happened"): Promise<unknown[]> {
237
+ static async allSettled<T = unknown>(
238
+ promises: Iterable<MaybePromise<T>>,
239
+ message = "Errors happened",
240
+ ): Promise<T[]> {
238
241
  const results = await Promise.allSettled(promises);
239
242
  const errors = results.filter(result => result.status === "rejected").map(result => result.reason);
240
243
 
241
244
  if (errors.length) {
242
245
  throw new this(errors, message);
243
246
  }
244
- return (results as PromiseFulfilledResult<unknown>[]).map(result => result.value);
247
+ return (results as PromiseFulfilledResult<T>[]).map(result => result.value);
245
248
  }
246
249
  }
247
250
 
@@ -4,6 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import { InternalError } from "#MatterError.js";
7
8
  import { Instant } from "#time/TimeUnit.js";
8
9
  import { MaybePromise } from "#util/Promises.js";
9
10
  import { DiagnosticSource } from "../log/DiagnosticSource.js";
@@ -57,20 +58,39 @@ export class Environment {
57
58
  return mine !== undefined || (this.#parent?.has(type) ?? false);
58
59
  }
59
60
 
61
+ /**
62
+ * Determine if an environmental services is owned by this environment (not an ancestor).
63
+ */
64
+ owns(type: abstract new (...args: any[]) => any): boolean {
65
+ return !!this.#services?.get(type);
66
+ }
67
+
60
68
  /**
61
69
  * Access an environmental service.
62
70
  */
63
71
  get<T extends object>(type: abstract new (...args: any[]) => T): T {
64
- let instance = this.#services?.get(type) ?? this.#parent?.maybeGet(type);
72
+ const mine = this.#services?.get(type);
65
73
 
66
- if (instance !== undefined && instance !== null) {
67
- return instance as T;
74
+ if (mine !== undefined && mine !== null) {
75
+ return mine as T;
68
76
  }
69
77
 
70
- if (instance !== null) {
78
+ // When null then we do not have it and also do not want to inherit from parent
79
+ if (mine === undefined) {
80
+ let instance = this.#parent?.maybeGet(type);
81
+ if (instance !== undefined && instance !== null) {
82
+ // Parent has it, use it
83
+ return instance;
84
+ }
85
+
86
+ // ... otherwise try to create it
71
87
  if ((type as Environmental.Factory<T>)[Environmental.create]) {
72
- this.set(type, (instance = (type as any)[Environmental.create](this)));
73
- return instance as T;
88
+ instance = (type as any)[Environmental.create](this) as T;
89
+ if (!(instance instanceof type)) {
90
+ throw new InternalError(`Service creation did not produce instance of ${type.name}`);
91
+ }
92
+ this.set(type, instance);
93
+ return instance;
74
94
  }
75
95
  }
76
96
 
@@ -113,8 +133,17 @@ export class Environment {
113
133
  * @param type the class of the service to block
114
134
  */
115
135
  block(type: abstract new (...args: any[]) => any) {
116
- if (this.has(type)) {
117
- this.delete(type);
136
+ const instance = this.#services?.get(type);
137
+
138
+ if (instance !== undefined && instance !== null) {
139
+ this.#services?.delete(type);
140
+
141
+ this.#deleted.emit(type, instance);
142
+
143
+ const serviceEvents = this.#serviceEvents.get(type);
144
+ if (serviceEvents) {
145
+ serviceEvents.deleted.emit(instance);
146
+ }
118
147
  }
119
148
 
120
149
  this.#services?.set(type, null);
@@ -205,6 +234,35 @@ export class Environment {
205
234
  return events as Environmental.ServiceEvents<T>;
206
235
  }
207
236
 
237
+ /**
238
+ * Apply functions to a specific service type automatically.
239
+ *
240
+ * The environment invokes {@link added} immediately if the service is currently present. It then invokes
241
+ * {@link added} in the future if the service is added or replaced and/or {@link deleted} if the service is replaced
242
+ * or deleted.
243
+ */
244
+ applyTo<T extends Environmental.Factory<any>>(
245
+ type: T,
246
+ added?: (env: Environment, service: T) => MaybePromise<void>,
247
+ deleted?: (env: Environment, service: T) => MaybePromise<void>,
248
+ ) {
249
+ const events = this.eventsFor(type);
250
+
251
+ if (added) {
252
+ const existing = this.maybeGet(type);
253
+
254
+ if (existing) {
255
+ added(this, existing);
256
+ }
257
+
258
+ events.added.on(service => this.runtime.add(() => added(this, service)));
259
+ }
260
+
261
+ if (deleted) {
262
+ events.deleted.on(service => this.runtime.add(() => deleted(this, service)));
263
+ }
264
+ }
265
+
208
266
  /**
209
267
  * The default environment.
210
268
  *
@@ -27,7 +27,7 @@ export namespace Environmental {
27
27
  *
28
28
  * A "factory" is just a class with a static {@link create} method that performs instantiation.
29
29
  */
30
- export interface Factory<T extends object> {
30
+ export interface Factory<T extends object = object> {
31
31
  new (...args: any[]): T;
32
32
 
33
33
  /**
@@ -4,6 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import { asError } from "#util/Error.js";
7
8
  import { Diagnostic } from "../log/Diagnostic.js";
8
9
  import { DiagnosticSource } from "../log/DiagnosticSource.js";
9
10
  import { Logger } from "../log/Logger.js";
@@ -36,7 +37,7 @@ export class RuntimeService implements Multiplex {
36
37
  }
37
38
 
38
39
  /**
39
- * Add a {@link Worker}.
40
+ * Add a {@link Worker}, either directly or by invoking an {@link Initiator}.
40
41
  *
41
42
  * The runtime considers itself "active" if there are one or more workers installed.
42
43
  *
@@ -46,11 +47,20 @@ export class RuntimeService implements Multiplex {
46
47
  * Once added, the {@link worker} is owned by the RuntimeService until closed, resolved or removed via
47
48
  * {@link delete}.
48
49
  */
49
- add(worker: RuntimeService.Worker | void) {
50
+ add(worker: RuntimeService.NewWorker) {
50
51
  if (!worker) {
51
52
  return;
52
53
  }
53
54
 
55
+ if (typeof worker === "function") {
56
+ try {
57
+ this.add(worker(this.#env));
58
+ } catch (e) {
59
+ this.#crash(asError(e));
60
+ }
61
+ return;
62
+ }
63
+
54
64
  if (this.#workers.has(worker)) {
55
65
  return;
56
66
  }
@@ -303,4 +313,13 @@ export namespace RuntimeService {
303
313
  */
304
314
  [label]?: unknown;
305
315
  }
316
+
317
+ /**
318
+ * A function that initiates work.
319
+ */
320
+ export interface Initiator {
321
+ (env: Environment): NewWorker;
322
+ }
323
+
324
+ export type NewWorker = Worker | Initiator | void;
306
325
  }