@matter/general 0.16.1 → 0.16.2-alpha.0-20260114-b38c6b796
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.
- package/dist/cjs/net/Network.d.ts +2 -0
- package/dist/cjs/net/Network.d.ts.map +1 -1
- package/dist/cjs/net/Network.js +3 -0
- package/dist/cjs/net/Network.js.map +1 -1
- package/dist/cjs/net/RetrySchedule.d.ts +1 -1
- package/dist/cjs/net/ServerAddress.d.ts +52 -14
- package/dist/cjs/net/ServerAddress.d.ts.map +1 -1
- package/dist/cjs/net/ServerAddress.js +41 -6
- package/dist/cjs/net/ServerAddress.js.map +2 -2
- package/dist/cjs/net/ServerAddressSet.d.ts +65 -0
- package/dist/cjs/net/ServerAddressSet.d.ts.map +1 -0
- package/dist/cjs/net/ServerAddressSet.js +144 -0
- package/dist/cjs/net/ServerAddressSet.js.map +6 -0
- package/dist/cjs/net/dns-sd/MdnsSocket.d.ts +40 -0
- package/dist/cjs/net/dns-sd/MdnsSocket.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/MdnsSocket.js +164 -0
- package/dist/cjs/net/dns-sd/MdnsSocket.js.map +6 -0
- package/dist/cjs/net/dns-sd/index.d.ts +7 -0
- package/dist/cjs/net/dns-sd/index.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/index.js +24 -0
- package/dist/cjs/net/dns-sd/index.js.map +6 -0
- package/dist/cjs/net/index.d.ts +2 -0
- package/dist/cjs/net/index.d.ts.map +1 -1
- package/dist/cjs/net/index.js +2 -0
- package/dist/cjs/net/index.js.map +1 -1
- package/dist/cjs/time/TimeUnit.d.ts +4 -0
- package/dist/cjs/time/TimeUnit.d.ts.map +1 -1
- package/dist/cjs/time/TimeUnit.js +2 -0
- package/dist/cjs/time/TimeUnit.js.map +1 -1
- package/dist/cjs/time/Timestamp.d.ts +1 -1
- package/dist/cjs/time/Timestamp.d.ts.map +1 -1
- package/dist/cjs/time/Timestamp.js +1 -1
- package/dist/cjs/time/Timestamp.js.map +1 -1
- package/dist/cjs/util/Abort.d.ts +9 -0
- package/dist/cjs/util/Abort.d.ts.map +1 -1
- package/dist/cjs/util/Abort.js +20 -0
- package/dist/cjs/util/Abort.js.map +1 -1
- package/dist/cjs/util/Heap.d.ts +84 -0
- package/dist/cjs/util/Heap.d.ts.map +1 -0
- package/dist/cjs/util/Heap.js +286 -0
- package/dist/cjs/util/Heap.js.map +6 -0
- package/dist/cjs/util/Observable.d.ts +29 -6
- package/dist/cjs/util/Observable.d.ts.map +1 -1
- package/dist/cjs/util/Observable.js +40 -6
- package/dist/cjs/util/Observable.js.map +1 -1
- package/dist/cjs/util/Promises.d.ts +3 -0
- package/dist/cjs/util/Promises.d.ts.map +1 -1
- package/dist/cjs/util/Promises.js +33 -3
- package/dist/cjs/util/Promises.js.map +2 -2
- package/dist/cjs/util/Scheduler.d.ts +68 -0
- package/dist/cjs/util/Scheduler.d.ts.map +1 -0
- package/dist/cjs/util/Scheduler.js +207 -0
- package/dist/cjs/util/Scheduler.js.map +6 -0
- package/dist/cjs/util/Semaphore.d.ts +0 -4
- package/dist/cjs/util/Semaphore.d.ts.map +1 -1
- package/dist/cjs/util/Semaphore.js.map +1 -1
- package/dist/cjs/util/Set.d.ts.map +1 -1
- package/dist/cjs/util/Set.js +14 -8
- package/dist/cjs/util/Set.js.map +1 -1
- package/dist/cjs/util/index.d.ts +2 -0
- package/dist/cjs/util/index.d.ts.map +1 -1
- package/dist/cjs/util/index.js +2 -0
- package/dist/cjs/util/index.js.map +1 -1
- package/dist/esm/net/Network.d.ts +2 -0
- package/dist/esm/net/Network.d.ts.map +1 -1
- package/dist/esm/net/Network.js +3 -0
- package/dist/esm/net/Network.js.map +1 -1
- package/dist/esm/net/RetrySchedule.d.ts +1 -1
- package/dist/esm/net/ServerAddress.d.ts +52 -14
- package/dist/esm/net/ServerAddress.d.ts.map +1 -1
- package/dist/esm/net/ServerAddress.js +41 -6
- package/dist/esm/net/ServerAddress.js.map +2 -2
- package/dist/esm/net/ServerAddressSet.d.ts +65 -0
- package/dist/esm/net/ServerAddressSet.d.ts.map +1 -0
- package/dist/esm/net/ServerAddressSet.js +124 -0
- package/dist/esm/net/ServerAddressSet.js.map +6 -0
- package/dist/esm/net/dns-sd/MdnsSocket.d.ts +40 -0
- package/dist/esm/net/dns-sd/MdnsSocket.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/MdnsSocket.js +149 -0
- package/dist/esm/net/dns-sd/MdnsSocket.js.map +6 -0
- package/dist/esm/net/dns-sd/index.d.ts +7 -0
- package/dist/esm/net/dns-sd/index.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/index.js +7 -0
- package/dist/esm/net/dns-sd/index.js.map +6 -0
- package/dist/esm/net/index.d.ts +2 -0
- package/dist/esm/net/index.d.ts.map +1 -1
- package/dist/esm/net/index.js +2 -0
- package/dist/esm/net/index.js.map +1 -1
- package/dist/esm/time/TimeUnit.d.ts +4 -0
- package/dist/esm/time/TimeUnit.d.ts.map +1 -1
- package/dist/esm/time/TimeUnit.js +2 -0
- package/dist/esm/time/TimeUnit.js.map +1 -1
- package/dist/esm/time/Timestamp.d.ts +1 -1
- package/dist/esm/time/Timestamp.d.ts.map +1 -1
- package/dist/esm/time/Timestamp.js +1 -1
- package/dist/esm/time/Timestamp.js.map +1 -1
- package/dist/esm/util/Abort.d.ts +9 -0
- package/dist/esm/util/Abort.d.ts.map +1 -1
- package/dist/esm/util/Abort.js +20 -0
- package/dist/esm/util/Abort.js.map +1 -1
- package/dist/esm/util/Heap.d.ts +84 -0
- package/dist/esm/util/Heap.d.ts.map +1 -0
- package/dist/esm/util/Heap.js +266 -0
- package/dist/esm/util/Heap.js.map +6 -0
- package/dist/esm/util/Observable.d.ts +29 -6
- package/dist/esm/util/Observable.d.ts.map +1 -1
- package/dist/esm/util/Observable.js +40 -6
- package/dist/esm/util/Observable.js.map +1 -1
- package/dist/esm/util/Promises.d.ts +3 -0
- package/dist/esm/util/Promises.d.ts.map +1 -1
- package/dist/esm/util/Promises.js +33 -3
- package/dist/esm/util/Promises.js.map +2 -2
- package/dist/esm/util/Scheduler.d.ts +68 -0
- package/dist/esm/util/Scheduler.d.ts.map +1 -0
- package/dist/esm/util/Scheduler.js +187 -0
- package/dist/esm/util/Scheduler.js.map +6 -0
- package/dist/esm/util/Semaphore.d.ts +0 -4
- package/dist/esm/util/Semaphore.d.ts.map +1 -1
- package/dist/esm/util/Semaphore.js.map +1 -1
- package/dist/esm/util/Set.d.ts.map +1 -1
- package/dist/esm/util/Set.js +14 -8
- package/dist/esm/util/Set.js.map +1 -1
- package/dist/esm/util/index.d.ts +2 -0
- package/dist/esm/util/index.d.ts.map +1 -1
- package/dist/esm/util/index.js +2 -0
- package/dist/esm/util/index.js.map +1 -1
- package/package.json +2 -2
- package/src/net/Network.ts +2 -0
- package/src/net/RetrySchedule.ts +1 -1
- package/src/net/ServerAddress.ts +93 -19
- package/src/net/ServerAddressSet.ts +225 -0
- package/src/net/dns-sd/MdnsSocket.ts +203 -0
- package/src/net/dns-sd/index.ts +7 -0
- package/src/net/index.ts +2 -0
- package/src/time/TimeUnit.ts +5 -0
- package/src/time/Timestamp.ts +1 -1
- package/src/util/Abort.ts +25 -0
- package/src/util/Heap.ts +332 -0
- package/src/util/Observable.ts +74 -10
- package/src/util/Promises.ts +61 -4
- package/src/util/Scheduler.ts +185 -0
- package/src/util/Semaphore.ts +0 -5
- package/src/util/Set.ts +15 -8
- package/src/util/index.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Set.d.ts","sourceRoot":"","sources":["../../../src/util/Set.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC3B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAChD,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;IACtB,IAAI,IAAI,IAAI,MAAM,CAAC;IACnB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACpC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC;IACjE,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC;IACnC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC;IAC/B,KAAK,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC5B,IAAI,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,KAAK,IAAI,eAAe,CAAC;CAChC;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAE7D;;OAEG;IACH,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACpD;AAED;;;;GAIG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;;gBAYnG,GAAG,YAAY,EAAE,IAAI,EAAE;IAMnC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAIjB,IAAI,IAAI,WAEP;IAED,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IAI7B,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,SAAS;IAQhD,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,SAAS;IAUlD,GAAG,CAAC,IAAI,EAAE,CAAC;IAIX,GAAG,CAAC,IAAI,EAAE,IAAI;IAgCd,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Set.d.ts","sourceRoot":"","sources":["../../../src/util/Set.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/util/Set.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { ImplementationError } from "#MatterError.js";
|
|
7
7
|
import { Observable, ObservableValue } from "./Observable.js";
|
|
8
8
|
class BasicSet {
|
|
9
|
-
#entries
|
|
9
|
+
#entries;
|
|
10
10
|
#added;
|
|
11
11
|
#deleted;
|
|
12
12
|
#empty;
|
|
@@ -18,10 +18,10 @@ class BasicSet {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
[Symbol.iterator]() {
|
|
21
|
-
return this.#
|
|
21
|
+
return this.#definedEntries[Symbol.iterator]();
|
|
22
22
|
}
|
|
23
23
|
get size() {
|
|
24
|
-
return this.#entries
|
|
24
|
+
return this.#entries?.size ?? 0;
|
|
25
25
|
}
|
|
26
26
|
map(mapper) {
|
|
27
27
|
return [...this].map(mapper);
|
|
@@ -43,14 +43,14 @@ class BasicSet {
|
|
|
43
43
|
return result;
|
|
44
44
|
}
|
|
45
45
|
has(item) {
|
|
46
|
-
return this.#entries
|
|
46
|
+
return this.#entries?.has(item) ?? false;
|
|
47
47
|
}
|
|
48
48
|
add(item) {
|
|
49
49
|
const created = this.create(item);
|
|
50
|
-
if (this.#
|
|
50
|
+
if (this.#definedEntries.has(item)) {
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
|
-
this.#
|
|
53
|
+
this.#definedEntries.add(item);
|
|
54
54
|
if (this.#indices) {
|
|
55
55
|
for (const field in this.#indices) {
|
|
56
56
|
const value = created[field];
|
|
@@ -72,6 +72,12 @@ class BasicSet {
|
|
|
72
72
|
get(field, value) {
|
|
73
73
|
return this.#indexOf(field).get(value);
|
|
74
74
|
}
|
|
75
|
+
get #definedEntries() {
|
|
76
|
+
if (this.#entries === void 0) {
|
|
77
|
+
this.#entries = /* @__PURE__ */ new Set();
|
|
78
|
+
}
|
|
79
|
+
return this.#entries;
|
|
80
|
+
}
|
|
75
81
|
#indexOf(field) {
|
|
76
82
|
if (!this.#indices) {
|
|
77
83
|
this.#indices = {};
|
|
@@ -116,7 +122,7 @@ class BasicSet {
|
|
|
116
122
|
return false;
|
|
117
123
|
}
|
|
118
124
|
}
|
|
119
|
-
if (!this.#entries
|
|
125
|
+
if (!this.#entries?.delete(item)) {
|
|
120
126
|
return false;
|
|
121
127
|
}
|
|
122
128
|
if (this.#indices) {
|
|
@@ -156,7 +162,7 @@ class BasicSet {
|
|
|
156
162
|
}
|
|
157
163
|
get empty() {
|
|
158
164
|
if (this.#empty === void 0) {
|
|
159
|
-
this.#empty = ObservableValue(!this.#entries
|
|
165
|
+
this.#empty = ObservableValue(!this.#entries?.size);
|
|
160
166
|
}
|
|
161
167
|
return this.#empty;
|
|
162
168
|
}
|
package/dist/esm/util/Set.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/Set.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,2BAA2B;AACpC,SAAS,YAAY,uBAAuB;AAuDrC,MAAM,SAAuG;AAAA,EAChH
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["value", "MapOfIndexedSet"]
|
|
6
6
|
}
|
package/dist/esm/util/index.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export * from "./FormattedText.js";
|
|
|
22
22
|
export * from "./Function.js";
|
|
23
23
|
export * from "./GeneratedClass.js";
|
|
24
24
|
export * from "./Github.js";
|
|
25
|
+
export * from "./Heap.js";
|
|
25
26
|
export * from "./identifier-case.js";
|
|
26
27
|
export * from "./Ip.js";
|
|
27
28
|
export * from "./Lifecycle.js";
|
|
@@ -34,6 +35,7 @@ export * from "./NamedHandler.js";
|
|
|
34
35
|
export * from "./Number.js";
|
|
35
36
|
export * from "./Observable.js";
|
|
36
37
|
export * from "./Promises.js";
|
|
38
|
+
export * from "./Scheduler.js";
|
|
37
39
|
export * from "./Semaphore.js";
|
|
38
40
|
export * from "./serialize.js";
|
|
39
41
|
export * from "./Set.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
package/dist/esm/util/index.js
CHANGED
|
@@ -22,6 +22,7 @@ export * from "./FormattedText.js";
|
|
|
22
22
|
export * from "./Function.js";
|
|
23
23
|
export * from "./GeneratedClass.js";
|
|
24
24
|
export * from "./Github.js";
|
|
25
|
+
export * from "./Heap.js";
|
|
25
26
|
export * from "./identifier-case.js";
|
|
26
27
|
export * from "./Ip.js";
|
|
27
28
|
export * from "./Lifecycle.js";
|
|
@@ -34,6 +35,7 @@ export * from "./NamedHandler.js";
|
|
|
34
35
|
export * from "./Number.js";
|
|
35
36
|
export * from "./Observable.js";
|
|
36
37
|
export * from "./Promises.js";
|
|
38
|
+
export * from "./Scheduler.js";
|
|
37
39
|
export * from "./Semaphore.js";
|
|
38
40
|
export * from "./serialize.js";
|
|
39
41
|
export * from "./Set.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/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;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,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;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/general",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.2-alpha.0-20260114-b38c6b796",
|
|
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.
|
|
39
|
+
"@matter/testing": "0.16.2-alpha.0-20260114-b38c6b796"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"dist/**/*",
|
package/src/net/Network.ts
CHANGED
package/src/net/RetrySchedule.ts
CHANGED
package/src/net/ServerAddress.ts
CHANGED
|
@@ -7,40 +7,69 @@
|
|
|
7
7
|
import { Diagnostic } from "#log/Diagnostic.js";
|
|
8
8
|
import { Duration } from "#time/Duration.js";
|
|
9
9
|
import { Timestamp } from "#time/Timestamp.js";
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
export interface AddressLifespan {
|
|
12
|
+
/**
|
|
13
|
+
* Beginning of lifespan
|
|
14
|
+
*/
|
|
15
|
+
discoveredAt: Timestamp;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Length of lifespan, if known
|
|
19
|
+
*/
|
|
20
|
+
ttl: Duration;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface AddressStatus extends Partial<AddressLifespan> {
|
|
24
|
+
/**
|
|
25
|
+
* Time of last successful access.
|
|
26
|
+
*/
|
|
27
|
+
healthyAt?: Timestamp;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Time of last unsuccessful access.
|
|
31
|
+
*/
|
|
32
|
+
unhealthyAt?: Timestamp;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* DNS priority.
|
|
36
|
+
*/
|
|
37
|
+
priority?: number;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* DNS weight.
|
|
41
|
+
*/
|
|
42
|
+
weight?: number;
|
|
43
|
+
}
|
|
11
44
|
|
|
12
45
|
export type ServerAddressUdp = {
|
|
13
46
|
type: "udp";
|
|
14
47
|
ip: string;
|
|
15
48
|
port: number;
|
|
16
|
-
};
|
|
49
|
+
} & AddressStatus;
|
|
17
50
|
|
|
18
51
|
export type ServerAddressTcp = {
|
|
19
52
|
type: "tcp";
|
|
20
53
|
ip: string;
|
|
21
54
|
port: number;
|
|
22
|
-
};
|
|
55
|
+
} & AddressStatus;
|
|
23
56
|
|
|
24
57
|
export type ServerAddressBle = {
|
|
25
58
|
type: "ble";
|
|
26
59
|
peripheralAddress: string;
|
|
27
|
-
};
|
|
60
|
+
} & AddressStatus;
|
|
28
61
|
|
|
29
|
-
export
|
|
30
|
-
/** Beginning of lifespan (system time in milliseconds) */
|
|
31
|
-
discoveredAt: Timestamp;
|
|
32
|
-
|
|
33
|
-
/** Length of lifespan, if known (seconds) */
|
|
34
|
-
ttl: Duration;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export type ServerAddress = (ServerAddressUdp | ServerAddressTcp | ServerAddressBle) & Partial<Lifespan>;
|
|
62
|
+
export type ServerAddress = ServerAddressUdp | ServerAddressTcp | ServerAddressBle;
|
|
38
63
|
|
|
39
|
-
export function ServerAddress(definition: ServerAddress
|
|
64
|
+
export function ServerAddress(definition: ServerAddress) {
|
|
40
65
|
return {
|
|
66
|
+
ttl: undefined,
|
|
41
67
|
discoveredAt: undefined,
|
|
68
|
+
healthyAt: undefined,
|
|
69
|
+
unhealthyAt: undefined,
|
|
70
|
+
priority: undefined,
|
|
71
|
+
weight: undefined,
|
|
42
72
|
...definition,
|
|
43
|
-
ttl: Seconds(definition.ttl),
|
|
44
73
|
} as ServerAddress;
|
|
45
74
|
}
|
|
46
75
|
|
|
@@ -100,11 +129,56 @@ export namespace ServerAddress {
|
|
|
100
129
|
return false;
|
|
101
130
|
}
|
|
102
131
|
|
|
103
|
-
|
|
104
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Compute logical health of an address.
|
|
134
|
+
*
|
|
135
|
+
* This returns heathyAt/unhealthyAt values with unhealthyAt set to undefined if the address was more recently
|
|
136
|
+
* healthy.
|
|
137
|
+
*/
|
|
138
|
+
export function healthOf(health: AddressStatus): AddressStatus {
|
|
139
|
+
if (health.unhealthyAt === undefined) {
|
|
140
|
+
return health;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (health.healthyAt !== undefined && health.healthyAt > health.unhealthyAt) {
|
|
144
|
+
return {
|
|
145
|
+
healthyAt: health.healthyAt,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return health;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Network address desirability from a Matter communication perspective.
|
|
154
|
+
*
|
|
155
|
+
* Lower values indicate higher preference. This is not a standard "happy eyeballs" ranking but works similarly.
|
|
156
|
+
*/
|
|
157
|
+
export enum SelectionPreference {
|
|
158
|
+
IPV6_ULA,
|
|
159
|
+
IPV6_LINK_LOCAL,
|
|
160
|
+
IPV6,
|
|
161
|
+
IPV4,
|
|
162
|
+
NOT_IP = 3,
|
|
105
163
|
}
|
|
106
164
|
|
|
107
|
-
export
|
|
108
|
-
|
|
165
|
+
export function selectionPreferenceOf(address: ServerAddress) {
|
|
166
|
+
if (!("ip" in address)) {
|
|
167
|
+
return SelectionPreference.NOT_IP;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (address.ip.startsWith("fd")) {
|
|
171
|
+
return SelectionPreference.IPV6_ULA;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (address.ip.startsWith("fe00")) {
|
|
175
|
+
return SelectionPreference.IPV6_LINK_LOCAL;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (address.ip.includes(":")) {
|
|
179
|
+
return SelectionPreference.IPV6;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return SelectionPreference.IPV4;
|
|
109
183
|
}
|
|
110
184
|
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { AddressStatus, ServerAddress } from "./ServerAddress.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A set of server addresses ordered by a comparator.
|
|
11
|
+
*/
|
|
12
|
+
export interface ServerAddressSet<T extends ServerAddress> {
|
|
13
|
+
/**
|
|
14
|
+
* Add an address.
|
|
15
|
+
*
|
|
16
|
+
* If the address alreay exists, returns the existing address to facilitate comparison by value. If not, returns
|
|
17
|
+
* the input address.
|
|
18
|
+
*/
|
|
19
|
+
add(address: T): T;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Delete an address.
|
|
23
|
+
*/
|
|
24
|
+
delete(address: T): boolean;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Replace the stored addresses.
|
|
28
|
+
*/
|
|
29
|
+
replace(newAddresses: Iterable<T>): void;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Test for existence of address.
|
|
33
|
+
*/
|
|
34
|
+
has(address: T): boolean;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The number of addresses.
|
|
38
|
+
*/
|
|
39
|
+
size: number;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Iterate.
|
|
43
|
+
*
|
|
44
|
+
* If you replace addresses during iteration only addresses not already produced will be covered by remaining
|
|
45
|
+
* iterations.
|
|
46
|
+
*/
|
|
47
|
+
[Symbol.iterator](): Iterator<T>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Create a new {@link ServerAddressSet}.
|
|
52
|
+
*/
|
|
53
|
+
export function ServerAddressSet<T extends ServerAddress>(
|
|
54
|
+
initial?: Iterable<T>,
|
|
55
|
+
comparator = ServerAddressSet.compareDesirability,
|
|
56
|
+
) {
|
|
57
|
+
let version = 0;
|
|
58
|
+
let addresses: undefined | Map<string, T>;
|
|
59
|
+
|
|
60
|
+
const set: ServerAddressSet<T> = {
|
|
61
|
+
add(address: T) {
|
|
62
|
+
version++;
|
|
63
|
+
const key = ServerAddress.urlFor(address);
|
|
64
|
+
const existing = addresses?.get(key);
|
|
65
|
+
if (existing) {
|
|
66
|
+
return existing;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (!addresses) {
|
|
70
|
+
addresses = new Map();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
addresses.set(key, address);
|
|
74
|
+
return address;
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
delete(address: T) {
|
|
78
|
+
version++;
|
|
79
|
+
return addresses?.delete(ServerAddress.urlFor(address)) ?? false;
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
has(address: T) {
|
|
83
|
+
return addresses?.has(ServerAddress.urlFor(address)) ?? false;
|
|
84
|
+
},
|
|
85
|
+
|
|
86
|
+
replace(newAddresses) {
|
|
87
|
+
version++;
|
|
88
|
+
const oldAddresses = addresses;
|
|
89
|
+
addresses = new Map();
|
|
90
|
+
for (const address of newAddresses) {
|
|
91
|
+
const key = ServerAddress.urlFor(address);
|
|
92
|
+
addresses.set(key, oldAddresses?.get(key) ?? address);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
get size() {
|
|
97
|
+
return addresses?.size ?? 0;
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
*[Symbol.iterator]() {
|
|
101
|
+
const tried = new Set<string>();
|
|
102
|
+
|
|
103
|
+
all: while (true) {
|
|
104
|
+
const currentVersion = version;
|
|
105
|
+
const ordered = addresses
|
|
106
|
+
? [...addresses.entries()].map(([, address]) => address).sort(comparator)
|
|
107
|
+
: [];
|
|
108
|
+
|
|
109
|
+
for (const address of ordered) {
|
|
110
|
+
// Skip duplicates or addresses we've tried with previous sets
|
|
111
|
+
const key = ServerAddress.urlFor(address);
|
|
112
|
+
if (tried.has(key)) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
yield address;
|
|
117
|
+
|
|
118
|
+
// Restart iteration if the underlying address set changed
|
|
119
|
+
if (currentVersion !== version) {
|
|
120
|
+
continue all;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
if (initial) {
|
|
130
|
+
set.replace(initial);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return set;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export namespace ServerAddressSet {
|
|
137
|
+
export interface Comparator<T extends ServerAddress = ServerAddress> {
|
|
138
|
+
(addr1: T, addr2: T): number;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Update a list of addresses with health information from another list.
|
|
143
|
+
*/
|
|
144
|
+
export function copyHealth<T extends ServerAddress>(targetAddresses: Iterable<T>, sourceAddresses: Iterable<T>) {
|
|
145
|
+
const output = [...targetAddresses];
|
|
146
|
+
|
|
147
|
+
nextTarget: for (let i = 0; i < output.length; i++) {
|
|
148
|
+
const target = output[i];
|
|
149
|
+
for (const source of sourceAddresses) {
|
|
150
|
+
if (ServerAddress.isEqual(target, source)) {
|
|
151
|
+
if (source.healthyAt !== undefined || source.unhealthyAt !== undefined) {
|
|
152
|
+
output[i] = { ...target, healthyAt: source.healthyAt, unhealthyAt: source.unhealthyAt };
|
|
153
|
+
}
|
|
154
|
+
continue nextTarget;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return output;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Compare the "desirability" of two addresses for communication.
|
|
164
|
+
*/
|
|
165
|
+
export function compareDesirability(a: ServerAddress, b: ServerAddress) {
|
|
166
|
+
const value = ServerAddress.selectionPreferenceOf(a) - ServerAddress.selectionPreferenceOf(b);
|
|
167
|
+
|
|
168
|
+
if (value) {
|
|
169
|
+
return value;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Compare health
|
|
173
|
+
const relativeHealth = compareHealth(a, b);
|
|
174
|
+
if (relativeHealth) {
|
|
175
|
+
return relativeHealth;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Compare priority if known for both addresses
|
|
179
|
+
if (a.priority !== undefined && b.priority !== undefined) {
|
|
180
|
+
return b.priority - a.priority;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return 0;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Compare the health of two addresses.
|
|
188
|
+
*
|
|
189
|
+
* Returns a negative number if a is healthier, positive if b is healthier and 0 if assessment is neutral.
|
|
190
|
+
*/
|
|
191
|
+
export function compareHealth(a: AddressStatus, b: AddressStatus) {
|
|
192
|
+
const ha = ServerAddress.healthOf(a);
|
|
193
|
+
const hb = ServerAddress.healthOf(b);
|
|
194
|
+
|
|
195
|
+
// If a is unhealthy, check b's unhealth
|
|
196
|
+
if (ha.unhealthyAt) {
|
|
197
|
+
if (hb.unhealthyAt) {
|
|
198
|
+
// Prefer smaller "unhealthy at" value
|
|
199
|
+
return ha.unhealthyAt - hb.unhealthyAt;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Prefer b as it is healthy or unused
|
|
203
|
+
return 1;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// If b is unhealthy and a is not; prefer b
|
|
207
|
+
if (hb.unhealthyAt) {
|
|
208
|
+
return -1;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// If a is known healthy, check b's health
|
|
212
|
+
if (ha.healthyAt) {
|
|
213
|
+
if (hb.healthyAt) {
|
|
214
|
+
// Prefer greater health value
|
|
215
|
+
return hb.healthyAt - ha.healthyAt;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Prefer a as b has not been used
|
|
219
|
+
return -1;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// No preference
|
|
223
|
+
return 0;
|
|
224
|
+
}
|
|
225
|
+
}
|