@rotorsoft/act 1.23.24 → 1.23.25

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/index.js CHANGED
@@ -2495,6 +2495,20 @@ var EMPTY_DRAIN = {
2495
2495
  acked: [],
2496
2496
  blocked: []
2497
2497
  };
2498
+ var contain = (logger, sink, fn) => {
2499
+ try {
2500
+ fn();
2501
+ } catch (error) {
2502
+ logger.error(error, `${sink} listener threw`);
2503
+ }
2504
+ };
2505
+ var contain_async = async (logger, sink, fn) => {
2506
+ try {
2507
+ await fn();
2508
+ } catch (error) {
2509
+ logger.error(error, `${sink} listener threw`);
2510
+ }
2511
+ };
2498
2512
  var DrainController = class {
2499
2513
  _armed = false;
2500
2514
  _locked = false;
@@ -2620,9 +2634,20 @@ var DrainController = class {
2620
2634
  if (next !== void 0) this._defer.set(h.lease.stream, next);
2621
2635
  }
2622
2636
  if (this._defer.size > 0) this._defer.schedule();
2623
- if (acked.length) this._deps.on_acked(acked);
2624
- if (blocked.length) this._deps.on_blocked(blocked);
2625
- if (closeable.length) await this._deps.on_close(closeable);
2637
+ if (acked.length)
2638
+ contain(this._deps.logger, "acked", () => this._deps.on_acked(acked));
2639
+ if (blocked.length)
2640
+ contain(
2641
+ this._deps.logger,
2642
+ "blocked",
2643
+ () => this._deps.on_blocked(blocked)
2644
+ );
2645
+ if (closeable.length)
2646
+ await contain_async(
2647
+ this._deps.logger,
2648
+ "close",
2649
+ () => this._deps.on_close(closeable)
2650
+ );
2626
2651
  const has_errors = handled.some(({ error }) => error);
2627
2652
  if (!acked.length && !blocked.length && !has_errors) this._armed = false;
2628
2653
  return { fetched, leased, acked, blocked };