@matter/general 0.13.0-alpha.0-20250318-c1aa38b08 → 0.13.0-alpha.0-20250322-f085fa576

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 (65) hide show
  1. package/dist/cjs/codec/DnsCodec.js +1 -1
  2. package/dist/cjs/codec/DnsCodec.js.map +1 -1
  3. package/dist/cjs/log/Logger.d.ts +11 -6
  4. package/dist/cjs/log/Logger.d.ts.map +1 -1
  5. package/dist/cjs/log/Logger.js +19 -8
  6. package/dist/cjs/log/Logger.js.map +1 -1
  7. package/dist/cjs/time/Time.d.ts +1 -0
  8. package/dist/cjs/time/Time.d.ts.map +1 -1
  9. package/dist/cjs/time/Time.js +3 -0
  10. package/dist/cjs/time/Time.js.map +1 -1
  11. package/dist/cjs/transaction/Participant.d.ts +3 -3
  12. package/dist/cjs/transaction/Participant.d.ts.map +1 -1
  13. package/dist/cjs/transaction/Transaction.d.ts +20 -20
  14. package/dist/cjs/transaction/Tx.js +3 -3
  15. package/dist/cjs/transaction/Tx.js.map +1 -1
  16. package/dist/cjs/util/Construction.js +2 -2
  17. package/dist/cjs/util/Construction.js.map +1 -1
  18. package/dist/cjs/util/DataReadQueue.d.ts +4 -0
  19. package/dist/cjs/util/DataReadQueue.d.ts.map +1 -1
  20. package/dist/cjs/util/DataReadQueue.js +6 -0
  21. package/dist/cjs/util/DataReadQueue.js.map +1 -1
  22. package/dist/cjs/util/FormattedText.js +4 -2
  23. package/dist/cjs/util/FormattedText.js.map +1 -1
  24. package/dist/cjs/util/Observable.d.ts +137 -12
  25. package/dist/cjs/util/Observable.d.ts.map +1 -1
  26. package/dist/cjs/util/Observable.js +297 -35
  27. package/dist/cjs/util/Observable.js.map +2 -2
  28. package/dist/esm/codec/DnsCodec.js +1 -1
  29. package/dist/esm/codec/DnsCodec.js.map +1 -1
  30. package/dist/esm/log/Logger.d.ts +11 -6
  31. package/dist/esm/log/Logger.d.ts.map +1 -1
  32. package/dist/esm/log/Logger.js +19 -8
  33. package/dist/esm/log/Logger.js.map +1 -1
  34. package/dist/esm/time/Time.d.ts +1 -0
  35. package/dist/esm/time/Time.d.ts.map +1 -1
  36. package/dist/esm/time/Time.js +3 -0
  37. package/dist/esm/time/Time.js.map +1 -1
  38. package/dist/esm/transaction/Participant.d.ts +3 -3
  39. package/dist/esm/transaction/Participant.d.ts.map +1 -1
  40. package/dist/esm/transaction/Transaction.d.ts +20 -20
  41. package/dist/esm/transaction/Tx.js +3 -3
  42. package/dist/esm/transaction/Tx.js.map +1 -1
  43. package/dist/esm/util/Construction.js +2 -2
  44. package/dist/esm/util/Construction.js.map +1 -1
  45. package/dist/esm/util/DataReadQueue.d.ts +4 -0
  46. package/dist/esm/util/DataReadQueue.d.ts.map +1 -1
  47. package/dist/esm/util/DataReadQueue.js +6 -0
  48. package/dist/esm/util/DataReadQueue.js.map +1 -1
  49. package/dist/esm/util/FormattedText.js +4 -2
  50. package/dist/esm/util/FormattedText.js.map +1 -1
  51. package/dist/esm/util/Observable.d.ts +137 -12
  52. package/dist/esm/util/Observable.d.ts.map +1 -1
  53. package/dist/esm/util/Observable.js +297 -35
  54. package/dist/esm/util/Observable.js.map +2 -2
  55. package/package.json +2 -2
  56. package/src/codec/DnsCodec.ts +1 -1
  57. package/src/log/Logger.ts +26 -11
  58. package/src/time/Time.ts +4 -0
  59. package/src/transaction/Participant.ts +3 -3
  60. package/src/transaction/Transaction.ts +1 -1
  61. package/src/transaction/Tx.ts +3 -3
  62. package/src/util/Construction.ts +2 -2
  63. package/src/util/DataReadQueue.ts +7 -0
  64. package/src/util/FormattedText.ts +4 -2
  65. package/src/util/Observable.ts +453 -47
@@ -3,6 +3,7 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { Time } from "#time/Time.js";
6
7
  import { ImplementationError } from "../MatterError.js";
7
8
  import { Logger } from "../log/Logger.js";
8
9
  import "../polyfills/disposable.js";
@@ -14,26 +15,63 @@ function defaultErrorHandler(error) {
14
15
  throw error;
15
16
  }
16
17
  class BasicObservable {
17
- #errorHandler;
18
+ #handleError;
19
+ #isAsync;
20
+ #handlePromise;
18
21
  #observers;
19
22
  #once;
20
- #isAsync;
21
23
  #joinIteration;
22
24
  #removeIterator;
23
25
  #stopIteration;
24
- constructor(errorHandler, isAsync) {
25
- this.#errorHandler = errorHandler ?? defaultErrorHandler;
26
- this.#isAsync = isAsync;
26
+ constructor(handleError, asyncConfig) {
27
+ this.handleError = handleError ?? defaultErrorHandler;
28
+ if (typeof asyncConfig === "function") {
29
+ this.handlePromise = asyncConfig;
30
+ } else {
31
+ this.isAsync = asyncConfig ?? false;
32
+ }
27
33
  }
28
34
  [Symbol.dispose]() {
29
35
  this.#observers = this.#once = void 0;
30
36
  this.#stopIteration?.();
31
37
  }
32
- get isAsync() {
33
- return this.#isAsync;
38
+ set handleError(handleError) {
39
+ this.#handleError = handleError;
40
+ }
41
+ get handleError() {
42
+ return this.#handleError;
34
43
  }
35
44
  set isAsync(isAsync) {
36
45
  this.#isAsync = isAsync;
46
+ if (isAsync) {
47
+ this.#handlePromise = (promise) => promise;
48
+ } else {
49
+ this.#handlePromise = (promise, observer) => {
50
+ promise.catch((error) => {
51
+ let identity;
52
+ if (observer.name) {
53
+ identity = ` "${observer.name}"`;
54
+ } else {
55
+ identity = "";
56
+ }
57
+ if (this.#handleError === defaultErrorHandler) {
58
+ logger.error(`Unhandled error in async observer${identity}:`, error);
59
+ } else {
60
+ this.#handleError(error, observer);
61
+ }
62
+ });
63
+ };
64
+ }
65
+ }
66
+ get isAsync() {
67
+ return this.#isAsync;
68
+ }
69
+ set handlePromise(handlePromise) {
70
+ this.isAsync = true;
71
+ this.#handlePromise = handlePromise;
72
+ }
73
+ get handlePromise() {
74
+ return this.#handlePromise;
37
75
  }
38
76
  get isObserved() {
39
77
  if (this.#observers) {
@@ -70,7 +108,7 @@ class BasicObservable {
70
108
  try {
71
109
  result = observer(...payload);
72
110
  } catch (e) {
73
- this.#errorHandler(asError(e), observer);
111
+ this.#handleError(asError(e), observer);
74
112
  }
75
113
  if (this.#once?.has(observer)) {
76
114
  this.#once.delete(observer);
@@ -80,25 +118,18 @@ class BasicObservable {
80
118
  continue;
81
119
  }
82
120
  if (MaybePromise.is(result)) {
83
- if (!this.isAsync) {
84
- let identity;
85
- if (observer.name) {
86
- identity = ` "${observer.name}"`;
87
- } else {
88
- identity = "";
89
- }
90
- result.then(
91
- void 0,
92
- (error) => logger.error(`Unhandled error in async observer${identity}:`, error)
93
- );
121
+ result = this.#handlePromise(Promise.resolve(result), observer);
122
+ if (MaybePromise.is(result)) {
123
+ return result.then((result2) => {
124
+ if (result2 === void 0) {
125
+ return emitNext();
126
+ }
127
+ return result2;
128
+ });
129
+ }
130
+ if (result === void 0) {
94
131
  continue;
95
132
  }
96
- return result.then((result2) => {
97
- if (result2 === void 0) {
98
- return emitNext();
99
- }
100
- return result2;
101
- });
102
133
  }
103
134
  return result;
104
135
  }
@@ -175,12 +206,12 @@ class BasicObservable {
175
206
  };
176
207
  }
177
208
  }
178
- function constructObservable(errorHandler) {
179
- return new BasicObservable(errorHandler);
209
+ function constructObservable(handleError) {
210
+ return new BasicObservable(handleError);
180
211
  }
181
212
  const Observable = constructObservable;
182
- function constructAsyncObservable(errorHandler) {
183
- return new BasicObservable(errorHandler, true);
213
+ function constructAsyncObservable(handleError) {
214
+ return new BasicObservable(handleError, true);
184
215
  }
185
216
  const AsyncObservable = constructAsyncObservable;
186
217
  function event(emitter, name) {
@@ -191,6 +222,8 @@ function event(emitter, name) {
191
222
  return observer;
192
223
  }
193
224
  class EventEmitter {
225
+ // True private screws up TS types
226
+ events;
194
227
  emit(name, ...payload) {
195
228
  event(this, name).emit(...payload);
196
229
  }
@@ -200,13 +233,32 @@ class EventEmitter {
200
233
  removeListener(name, handler) {
201
234
  event(this, name).off(handler);
202
235
  }
236
+ addEvent(name, event2) {
237
+ if (!this.events) {
238
+ this.events = {};
239
+ }
240
+ this.events[name] = event2;
241
+ }
242
+ getEvent(name) {
243
+ if (!this.events || !(name in this.events)) {
244
+ throw new ImplementationError(`No such event ${name}`);
245
+ }
246
+ return this.events[name] ?? (this.events[name] = Observable());
247
+ }
248
+ hasEvent(name, onlyIfInitialized = false) {
249
+ return this.events && (onlyIfInitialized ? this.events[name] : name in this.events);
250
+ }
203
251
  get eventNames() {
204
- return Object.keys(this).filter((k) => typeof this[k]?.on === "function");
252
+ return this.events ? Object.keys(this.events) : [];
205
253
  }
206
254
  [Symbol.dispose]() {
207
- for (const name of this.eventNames) {
208
- this[name][Symbol.dispose]?.();
255
+ if (!this.events) {
256
+ return;
257
+ }
258
+ for (const event2 of Object.values(this.events)) {
259
+ event2?.[Symbol.dispose]?.();
209
260
  }
261
+ this.events = void 0;
210
262
  }
211
263
  }
212
264
  class ObservableProxy extends BasicObservable {
@@ -227,13 +279,13 @@ class ObservableProxy extends BasicObservable {
227
279
  this.#target.off(this.#emitter);
228
280
  super[Symbol.dispose]();
229
281
  }
230
- get isAsync() {
231
- return this.#target.isAsync;
232
- }
233
282
  get isObserved() {
234
283
  return this.#target.isObserved;
235
284
  }
236
285
  emit;
286
+ get target() {
287
+ return this.#target;
288
+ }
237
289
  }
238
290
  class ObserverGroup {
239
291
  #defaultTarget;
@@ -305,6 +357,215 @@ class ObserverGroup {
305
357
  this.#boundObservers.clear();
306
358
  }
307
359
  }
360
+ class QuietObservable extends BasicObservable {
361
+ #emitAutomatically = QuietObservable.defaults.emitAutomatically;
362
+ #suppressionEnabled = QuietObservable.defaults.suppressionEnabled;
363
+ #minimumEmitIntervalMs = QuietObservable.defaults.minimumEmitIntervalMs;
364
+ #shouldEmit;
365
+ #source;
366
+ #sink;
367
+ #sourceObserver;
368
+ #sinkObserver;
369
+ #deferredPayload;
370
+ #lastEmitAt;
371
+ #emitTimer;
372
+ constructor(config) {
373
+ super();
374
+ if (config) {
375
+ this.config = config;
376
+ }
377
+ }
378
+ get config() {
379
+ return this;
380
+ }
381
+ set config(config) {
382
+ const { suppressionEnabled, minimumEmitIntervalMs, emitAutomatically } = config;
383
+ if (emitAutomatically !== void 0) {
384
+ this.emitAutomatically = emitAutomatically;
385
+ }
386
+ if (suppressionEnabled !== void 0) {
387
+ this.suppressionEnabled = suppressionEnabled;
388
+ }
389
+ if (minimumEmitIntervalMs !== void 0) {
390
+ this.minimumEmitIntervalMs = minimumEmitIntervalMs;
391
+ }
392
+ if ("shouldEmit" in config) {
393
+ this.shouldEmit = config.shouldEmit;
394
+ }
395
+ if ("source" in config) {
396
+ this.source = config.source;
397
+ }
398
+ if ("sink" in config) {
399
+ this.sink = config.sink;
400
+ }
401
+ if ("handleError" in config) {
402
+ this.handleError = config.handleError ?? defaultErrorHandler;
403
+ }
404
+ if ("handlePromise" in config && config.handlePromise) {
405
+ this.handlePromise = config.handlePromise;
406
+ } else {
407
+ this.isAsync = config.isAsync ?? false;
408
+ }
409
+ }
410
+ get emitAutomatically() {
411
+ return this.#emitAutomatically;
412
+ }
413
+ set emitAutomatically(value) {
414
+ this.#emitAutomatically = value;
415
+ if (value) {
416
+ this.emitSoon();
417
+ } else if (this.#emitTimer) {
418
+ this.#stop();
419
+ }
420
+ }
421
+ get suppressionEnabled() {
422
+ return this.#suppressionEnabled;
423
+ }
424
+ set suppressionEnabled(value) {
425
+ this.#suppressionEnabled = value;
426
+ }
427
+ get minimumEmitIntervalMs() {
428
+ return this.#minimumEmitIntervalMs;
429
+ }
430
+ set minimumEmitIntervalMs(value) {
431
+ if (this.#minimumEmitIntervalMs === value) {
432
+ return;
433
+ }
434
+ const needStart = this.#emitTimer !== void 0;
435
+ if (needStart) {
436
+ this.#stop();
437
+ }
438
+ this.#minimumEmitIntervalMs = value;
439
+ if (needStart) {
440
+ this.#start();
441
+ }
442
+ }
443
+ get source() {
444
+ return this.#source;
445
+ }
446
+ set source(source) {
447
+ if (this.#source === source) {
448
+ return;
449
+ }
450
+ if (this.#source && this.#sourceObserver) {
451
+ this.#source.off(this.#sourceObserver);
452
+ } else if (this.#sourceObserver === void 0) {
453
+ this.#sourceObserver = (...payload) => this.emit(...payload);
454
+ }
455
+ this.#source = source;
456
+ if (source) {
457
+ source.on(this.#sourceObserver);
458
+ }
459
+ }
460
+ get sink() {
461
+ return this.#sink;
462
+ }
463
+ set sink(sink) {
464
+ if (this.#sink === sink) {
465
+ return;
466
+ }
467
+ if (this.#sink && this.#sinkObserver) {
468
+ this.off(this.#sinkObserver);
469
+ }
470
+ this.#sink = sink;
471
+ if (sink) {
472
+ this.#sinkObserver = (...payload) => sink.emit(...payload);
473
+ this.#sinkObserver[observant] = false;
474
+ this.on(this.#sinkObserver);
475
+ }
476
+ }
477
+ get shouldEmit() {
478
+ return this.#shouldEmit;
479
+ }
480
+ set shouldEmit(shouldEmit) {
481
+ this.#shouldEmit = shouldEmit;
482
+ if (this.#deferredPayload && shouldEmit?.(...this.#deferredPayload) === false) {
483
+ this.#deferredPayload = void 0;
484
+ this.#stop();
485
+ }
486
+ }
487
+ get isObserved() {
488
+ return super.isObserved || this.#sink?.isObserved || false;
489
+ }
490
+ isObservedBy(observer) {
491
+ return this.#sink?.isObservedBy(observer) || this.isObservedBy(observer) || false;
492
+ }
493
+ emit(...payload) {
494
+ const shouldEmit = this.#shouldEmit?.(...payload);
495
+ if (shouldEmit === false) {
496
+ return;
497
+ }
498
+ const immediate = shouldEmit === "now";
499
+ if (!immediate && !this.#emitAutomatically) {
500
+ this.#deferredPayload = payload;
501
+ return;
502
+ }
503
+ const now = Time.nowMs();
504
+ if (immediate || !this.#suppressionEnabled || this.#lastEmitAt === void 0 || this.#lastEmitAt + this.#minimumEmitIntervalMs < now) {
505
+ return this.#emit(payload, now);
506
+ }
507
+ this.#deferredPayload = payload;
508
+ this.#start(now);
509
+ }
510
+ /**
511
+ * Emit immediately, regardless of suppression configuration.
512
+ */
513
+ emitNow() {
514
+ this.#stop();
515
+ if (this.#deferredPayload) {
516
+ this.#emit(this.#deferredPayload);
517
+ this.#deferredPayload = void 0;
518
+ }
519
+ }
520
+ /**
521
+ * Emit as soon as allowed by suppression.
522
+ */
523
+ emitSoon() {
524
+ if (this.#deferredPayload && this.#emitTimer === void 0) {
525
+ this.#start();
526
+ }
527
+ }
528
+ [Symbol.dispose]() {
529
+ this.#stop();
530
+ }
531
+ #emit(payload, now) {
532
+ this.#deferredPayload = void 0;
533
+ this.#lastEmitAt = now ?? Time.nowMs();
534
+ this.#stop();
535
+ super.emit(...payload);
536
+ }
537
+ #start(now) {
538
+ if (this.#emitTimer || this.#deferredPayload === void 0) {
539
+ return;
540
+ }
541
+ let timeout;
542
+ if (this.#lastEmitAt === void 0) {
543
+ timeout = 0;
544
+ } else {
545
+ timeout = this.#minimumEmitIntervalMs - ((now ?? Time.nowMs()) - this.#lastEmitAt);
546
+ }
547
+ if (timeout <= 0) {
548
+ this.emitNow();
549
+ } else {
550
+ this.#emitTimer = Time.getTimer("delayed emit", timeout, this.emitNow.bind(this));
551
+ this.#emitTimer.start();
552
+ }
553
+ }
554
+ #stop() {
555
+ if (this.#emitTimer) {
556
+ this.#emitTimer.stop();
557
+ this.#emitTimer = void 0;
558
+ }
559
+ }
560
+ }
561
+ ((QuietObservable2) => {
562
+ QuietObservable2.now = "now";
563
+ QuietObservable2.defaults = {
564
+ emitAutomatically: true,
565
+ suppressionEnabled: true,
566
+ minimumEmitIntervalMs: 1e3
567
+ };
568
+ })(QuietObservable || (QuietObservable = {}));
308
569
  export {
309
570
  AsyncObservable,
310
571
  BasicObservable,
@@ -312,6 +573,7 @@ export {
312
573
  Observable,
313
574
  ObservableProxy,
314
575
  ObserverGroup,
576
+ QuietObservable,
315
577
  observant
316
578
  };
317
579
  //# sourceMappingURL=Observable.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/util/Observable.ts"],
4
- "mappings": "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",
5
- "names": ["result", "observers"]
4
+ "mappings": "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",
5
+ "names": ["result", "event", "observers", "QuietObservable"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/general",
3
- "version": "0.13.0-alpha.0-20250318-c1aa38b08",
3
+ "version": "0.13.0-alpha.0-20250322-f085fa576",
4
4
  "description": "Non-Matter support for Matter.js",
5
5
  "keywords": [
6
6
  "iot",
@@ -36,7 +36,7 @@
36
36
  "@noble/curves": "^1.8.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@matter/testing": "0.13.0-alpha.0-20250318-c1aa38b08"
39
+ "@matter/testing": "0.13.0-alpha.0-20250322-f085fa576"
40
40
  },
41
41
  "files": [
42
42
  "dist/**/*",
@@ -411,7 +411,7 @@ export class DnsCodec {
411
411
 
412
412
  static encodeQName(qname: string) {
413
413
  const writer = new DataWriter(Endian.Big);
414
- if (qname.length > 0) {
414
+ if (qname !== undefined && qname.length > 0) {
415
415
  // TODO: Implement compression
416
416
  qname.split(".").forEach(label => {
417
417
  const labelData = Bytes.fromString(label);
package/src/log/Logger.ts CHANGED
@@ -16,7 +16,7 @@ import { LogLevel } from "./LogLevel.js";
16
16
  /**
17
17
  * Log messages to the console. This is the default logging mechanism.
18
18
  */
19
- export function consoleLogger(level: LogLevel, formattedLog: string) {
19
+ export function consoleLogger(level: LogLevel, formattedLog: string, _facility?: string) {
20
20
  const console = (<any>consoleLogger).console;
21
21
  switch (level) {
22
22
  case LogLevel.DEBUG:
@@ -65,7 +65,7 @@ function logFormatterFor(formatName: string): LoggerDefinition["logFormatter"] {
65
65
  type LoggerDefinition = {
66
66
  logIdentifier: string;
67
67
  logFormatter: (now: Date, level: LogLevel, facility: string, prefix: string, ...values: any[]) => string;
68
- log: (level: LogLevel, formattedLog: string) => void;
68
+ log: (level: LogLevel, formattedLog: string, facility?: string) => void;
69
69
  defaultLogLevel: LogLevel;
70
70
  logLevels: { [facility: string]: LogLevel };
71
71
  context?: Diagnostic.Context;
@@ -130,11 +130,19 @@ export class Logger {
130
130
  Logger.logger.splice(index, 1);
131
131
  }
132
132
 
133
+ /**
134
+ * Check if a logger with the matching identifier exists.
135
+ * @param identifier The identifier of the logger
136
+ */
137
+ public static hasLoggerForIdentifier(identifier: string) {
138
+ return Logger.logger.some(logger => logger.logIdentifier === identifier);
139
+ }
140
+
133
141
  /**
134
142
  * Get the logger with the matching identifier.
135
143
  * @param identifier The identifier of the logger
136
144
  */
137
- public static getLoggerforIdentifier(identifier: string) {
145
+ public static getLoggerForIdentifier(identifier: string) {
138
146
  const logger = Logger.logger.find(logger => logger.logIdentifier === identifier);
139
147
  if (logger === undefined) {
140
148
  throw new NotImplementedError(`Unknown logger "${identifier}"`);
@@ -192,7 +200,7 @@ export class Logger {
192
200
  * Get facility loglevels for the default logger.
193
201
  */
194
202
  public static get logLevels() {
195
- return Logger.getLoggerforIdentifier("default").logLevels;
203
+ return Logger.getLoggerForIdentifier("default").logLevels;
196
204
  }
197
205
 
198
206
  /**
@@ -208,7 +216,7 @@ export class Logger {
208
216
  * Get default loglevel for the default logger.
209
217
  */
210
218
  public static get defaultLogLevel() {
211
- return Logger.getLoggerforIdentifier("default").defaultLogLevel;
219
+ return Logger.getLoggerForIdentifier("default").defaultLogLevel;
212
220
  }
213
221
 
214
222
  /**
@@ -216,7 +224,7 @@ export class Logger {
216
224
  *
217
225
  * @param log The log function to set
218
226
  */
219
- public static set log(log: (level: LogLevel, formattedLog: string) => void) {
227
+ public static set log(log: (level: LogLevel, formattedLog: string, facility?: string) => void) {
220
228
  Logger.setLogger("default", log);
221
229
  }
222
230
 
@@ -224,7 +232,7 @@ export class Logger {
224
232
  * Get the log function for the default logger.
225
233
  */
226
234
  public static get log() {
227
- return Logger.getLoggerforIdentifier("default").log;
235
+ return Logger.getLoggerForIdentifier("default").log;
228
236
  }
229
237
 
230
238
  /**
@@ -242,7 +250,7 @@ export class Logger {
242
250
  * Get the log formatter for the default logger.
243
251
  */
244
252
  public static get logFormatter() {
245
- return Logger.getLoggerforIdentifier("default").logFormatter;
253
+ return Logger.getLoggerForIdentifier("default").logFormatter;
246
254
  }
247
255
 
248
256
  /**
@@ -296,7 +304,10 @@ export class Logger {
296
304
  * @param identifier The identifier of the logger
297
305
  * @param log The log function to set
298
306
  */
299
- public static setLogger(identifier: string, log: (level: LogLevel, formattedLog: string) => void) {
307
+ public static setLogger(
308
+ identifier: string,
309
+ log: (level: LogLevel, formattedLog: string, facility?: string) => void,
310
+ ) {
300
311
  const logger = Logger.logger.find(logger => logger.logIdentifier === identifier);
301
312
  if (logger) {
302
313
  logger.log = log;
@@ -415,7 +426,7 @@ export class Logger {
415
426
  if (!Logger) {
416
427
  throw new Error("No logger loaded, cannot capture logs");
417
428
  }
418
- const logger = Logger.getLoggerforIdentifier(fromLogger);
429
+ const logger = Logger.getLoggerForIdentifier(fromLogger);
419
430
  const actualLogSettings = {
420
431
  logFormatter: logger.logFormatter,
421
432
  log: logger.log,
@@ -465,7 +476,11 @@ export class Logger {
465
476
  }
466
477
 
467
478
  logger.context.run(() =>
468
- logger.log(level, logger.logFormatter(Time.now(), level, this.#name, nestingPrefix(), values)),
479
+ logger.log(
480
+ level,
481
+ logger.logFormatter(Time.now(), level, this.#name, nestingPrefix(), values),
482
+ this.#name,
483
+ ),
469
484
  );
470
485
  }
471
486
  }
package/src/time/Time.ts CHANGED
@@ -85,6 +85,10 @@ export class Time {
85
85
  static unregister(timer: Timer) {
86
86
  registry.delete(timer);
87
87
  }
88
+
89
+ static get timers() {
90
+ return registry;
91
+ }
88
92
  }
89
93
 
90
94
  const time = new Time();
@@ -35,12 +35,12 @@ export interface Participant {
35
35
  /**
36
36
  * Commit phase one.
37
37
  */
38
- commit1(): MaybePromise;
38
+ commit1?: () => MaybePromise;
39
39
 
40
40
  /**
41
41
  * Commit phase two.
42
42
  */
43
- commit2(): MaybePromise;
43
+ commit2?: () => MaybePromise;
44
44
 
45
45
  /**
46
46
  * Post-commit logic.
@@ -50,5 +50,5 @@ export interface Participant {
50
50
  /**
51
51
  * Drop isolated writes and revert to original canonical source.
52
52
  */
53
- rollback(): MaybePromise;
53
+ rollback?: () => MaybePromise;
54
54
  }
@@ -55,7 +55,7 @@ export interface Transaction {
55
55
  readonly waitingOn: Iterable<Transaction> | undefined;
56
56
 
57
57
  /**
58
- * Listen for transaction commit or roll back. This may occur more than once for a given.
58
+ * Listen for transaction commit or roll back. This may occur more than once for a given transaction.
59
59
  */
60
60
  onShared(actor: () => void, once?: boolean): void;
61
61
 
@@ -564,7 +564,7 @@ class Tx implements Transaction {
564
564
  };
565
565
 
566
566
  try {
567
- const result = participant.commit1();
567
+ const result = participant.commit1?.();
568
568
  if (MaybePromise.is(result)) {
569
569
  if (!asyncCommits) {
570
570
  asyncCommits = [];
@@ -605,7 +605,7 @@ class Tx implements Transaction {
605
605
  let ongoing: undefined | Array<Promise<void>>;
606
606
  for (const participant of this.participants) {
607
607
  const promise = MaybePromise.then(
608
- () => participant.commit2(),
608
+ () => participant.commit2?.(),
609
609
  undefined,
610
610
  error => {
611
611
  logger.error(`Error committing (phase two) ${participant}, state inconsistency possible:`, error);
@@ -671,7 +671,7 @@ class Tx implements Transaction {
671
671
  for (const participant of this.participants) {
672
672
  // Perform rollback
673
673
  const promise = MaybePromise.then(
674
- () => participant.rollback(),
674
+ () => participant.rollback?.(),
675
675
  undefined,
676
676
  error => {
677
677
  logger.error(`Error rolling back ${participant}, state inconsistency possible:`, error);