@openfin/fdc3-api 40.102.1 → 40.102.2

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.
@@ -4598,6 +4598,15 @@ declare class EmitterBase<EmitterEvent extends BaseEvent, EmitterEventType exten
4598
4598
  eventNames: () => (string | symbol)[];
4599
4599
  /* Excluded from this release type: emit */
4600
4600
  private hasEmitter;
4601
+ /**
4602
+ * Cleans up after removal of a listener, e.g. deleting any lingering deregistration handlers for a
4603
+ * `once` subscription.
4604
+ *
4605
+ * @remarks Implementing this as a `removeListener` handler ensures that direct removal of a listener
4606
+ * on the base emitter will not leak additional core handlers. We could do this in the forwarding method,
4607
+ * which would involve less "magic," but would be more-vulnerable to accidental re-introduction of a leak.
4608
+ */
4609
+ private cleanUpRemovedListener;
4601
4610
  private getOrCreateEmitter;
4602
4611
  listeners: (type: string | symbol) => Function[];
4603
4612
  listenerCount: (type: string | symbol) => number;
@@ -4598,6 +4598,15 @@ declare class EmitterBase<EmitterEvent extends BaseEvent, EmitterEventType exten
4598
4598
  eventNames: () => (string | symbol)[];
4599
4599
  /* Excluded from this release type: emit */
4600
4600
  private hasEmitter;
4601
+ /**
4602
+ * Cleans up after removal of a listener, e.g. deleting any lingering deregistration handlers for a
4603
+ * `once` subscription.
4604
+ *
4605
+ * @remarks Implementing this as a `removeListener` handler ensures that direct removal of a listener
4606
+ * on the base emitter will not leak additional core handlers. We could do this in the forwarding method,
4607
+ * which would involve less "magic," but would be more-vulnerable to accidental re-introduction of a leak.
4608
+ */
4609
+ private cleanUpRemovedListener;
4601
4610
  private getOrCreateEmitter;
4602
4611
  listeners: (type: string | symbol) => Function[];
4603
4612
  listenerCount: (type: string | symbol) => number;
@@ -4598,6 +4598,15 @@ declare class EmitterBase<EmitterEvent extends BaseEvent, EmitterEventType exten
4598
4598
  eventNames: () => (string | symbol)[];
4599
4599
  /* Excluded from this release type: emit */
4600
4600
  private hasEmitter;
4601
+ /**
4602
+ * Cleans up after removal of a listener, e.g. deleting any lingering deregistration handlers for a
4603
+ * `once` subscription.
4604
+ *
4605
+ * @remarks Implementing this as a `removeListener` handler ensures that direct removal of a listener
4606
+ * on the base emitter will not leak additional core handlers. We could do this in the forwarding method,
4607
+ * which would involve less "magic," but would be more-vulnerable to accidental re-introduction of a leak.
4608
+ */
4609
+ private cleanUpRemovedListener;
4601
4610
  private getOrCreateEmitter;
4602
4611
  listeners: (type: string | symbol) => Function[];
4603
4612
  listenerCount: (type: string | symbol) => number;
package/out/fdc3-api.d.ts CHANGED
@@ -4662,6 +4662,15 @@ declare class EmitterBase<EmitterEvent extends BaseEvent, EmitterEventType exten
4662
4662
  type: EventType;
4663
4663
  }>, ...args: any[]) => boolean;
4664
4664
  private hasEmitter;
4665
+ /**
4666
+ * Cleans up after removal of a listener, e.g. deleting any lingering deregistration handlers for a
4667
+ * `once` subscription.
4668
+ *
4669
+ * @remarks Implementing this as a `removeListener` handler ensures that direct removal of a listener
4670
+ * on the base emitter will not leak additional core handlers. We could do this in the forwarding method,
4671
+ * which would involve less "magic," but would be more-vulnerable to accidental re-introduction of a leak.
4672
+ */
4673
+ private cleanUpRemovedListener;
4665
4674
  private getOrCreateEmitter;
4666
4675
  listeners: (type: string | symbol) => Function[];
4667
4676
  listenerCount: (type: string | symbol) => number;
package/out/fdc3-api.js CHANGED
@@ -476,7 +476,7 @@ var __classPrivateFieldGet$1 = (commonjsGlobal && commonjsGlobal.__classPrivateF
476
476
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
477
477
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
478
478
  };
479
- var _EmitterBase_emitterAccessor;
479
+ var _EmitterBase_emitterAccessor, _EmitterBase_deregisterOnceListeners;
480
480
  Object.defineProperty(base, "__esModule", { value: true });
481
481
  base.Reply = base.EmitterBase = base.Base = void 0;
482
482
  const promises_1 = promises;
@@ -548,6 +548,7 @@ class EmitterBase extends Base {
548
548
  super(wire);
549
549
  this.topic = topic;
550
550
  _EmitterBase_emitterAccessor.set(this, void 0);
551
+ _EmitterBase_deregisterOnceListeners.set(this, void 0);
551
552
  this.eventNames = () => (this.hasEmitter() ? this.getOrCreateEmitter().eventNames() : []);
552
553
  /**
553
554
  * @internal
@@ -556,7 +557,28 @@ class EmitterBase extends Base {
556
557
  return this.hasEmitter() ? this.getOrCreateEmitter().emit(eventType, payload, ...args) : false;
557
558
  };
558
559
  this.hasEmitter = () => this.wire.eventAggregator.has(__classPrivateFieldGet$1(this, _EmitterBase_emitterAccessor, "f"));
559
- this.getOrCreateEmitter = () => this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$1(this, _EmitterBase_emitterAccessor, "f"));
560
+ /**
561
+ * Cleans up after removal of a listener, e.g. deleting any lingering deregistration handlers for a
562
+ * `once` subscription.
563
+ *
564
+ * @remarks Implementing this as a `removeListener` handler ensures that direct removal of a listener
565
+ * on the base emitter will not leak additional core handlers. We could do this in the forwarding method,
566
+ * which would involve less "magic," but would be more-vulnerable to accidental re-introduction of a leak.
567
+ */
568
+ this.cleanUpRemovedListener = (eventType, listener) => {
569
+ const deregister = __classPrivateFieldGet$1(this, _EmitterBase_deregisterOnceListeners, "f").get(listener);
570
+ if (deregister) {
571
+ const emitter = this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$1(this, _EmitterBase_emitterAccessor, "f"));
572
+ emitter.removeListener(eventType, deregister);
573
+ }
574
+ };
575
+ this.getOrCreateEmitter = () => {
576
+ const emitter = this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$1(this, _EmitterBase_emitterAccessor, "f"));
577
+ if (!emitter.listeners('removeListener').includes(this.cleanUpRemovedListener)) {
578
+ emitter.on('removeListener', this.cleanUpRemovedListener);
579
+ }
580
+ return emitter;
581
+ };
560
582
  this.listeners = (type) => this.hasEmitter() ? this.getOrCreateEmitter().listeners(type) : [];
561
583
  this.listenerCount = (type) => this.hasEmitter() ? this.getOrCreateEmitter().listenerCount(type) : 0;
562
584
  this.registerEventListener = async (eventType, options = {}, applySubscription, undoSubscription) => {
@@ -588,13 +610,13 @@ class EmitterBase extends Base {
588
610
  type: eventType
589
611
  };
590
612
  await this.wire.sendAction('unsubscribe-to-desktop-event', runtimeEvent).catch(() => null);
591
- const emitter = this.getOrCreateEmitter();
592
- return emitter;
613
+ return this.getOrCreateEmitter();
593
614
  }
594
615
  // This will only be reached if unsubscribe from event that does not exist but do not want to error here
595
616
  return Promise.resolve();
596
617
  };
597
618
  __classPrivateFieldSet$1(this, _EmitterBase_emitterAccessor, [topic, ...additionalAccessors], "f");
619
+ __classPrivateFieldSet$1(this, _EmitterBase_deregisterOnceListeners, new WeakMap(), "f");
598
620
  this.listeners = (event) => this.hasEmitter() ? this.getOrCreateEmitter().listeners(event) : [];
599
621
  }
600
622
  /**
@@ -623,6 +645,7 @@ class EmitterBase extends Base {
623
645
  */
624
646
  async once(eventType, listener, options) {
625
647
  const deregister = () => this.deregisterEventListener(eventType);
648
+ __classPrivateFieldGet$1(this, _EmitterBase_deregisterOnceListeners, "f").set(listener, deregister);
626
649
  await this.registerEventListener(eventType, options, (emitter) => {
627
650
  emitter.once(eventType, deregister);
628
651
  emitter.once(eventType, listener);
@@ -653,6 +676,7 @@ class EmitterBase extends Base {
653
676
  */
654
677
  async prependOnceListener(eventType, listener, options) {
655
678
  const deregister = () => this.deregisterEventListener(eventType);
679
+ __classPrivateFieldGet$1(this, _EmitterBase_deregisterOnceListeners, "f").set(listener, deregister);
656
680
  await this.registerEventListener(eventType, options, (emitter) => {
657
681
  emitter.prependOnceListener(eventType, listener);
658
682
  emitter.once(eventType, deregister);
@@ -711,13 +735,13 @@ class EmitterBase extends Base {
711
735
  return this;
712
736
  }
713
737
  deleteEmitterIfNothingRegistered(emitter) {
714
- if (emitter.eventNames().length === 0) {
738
+ if (emitter.eventNames().every((type) => type === 'removeListener')) {
715
739
  this.wire.eventAggregator.delete(__classPrivateFieldGet$1(this, _EmitterBase_emitterAccessor, "f"));
716
740
  }
717
741
  }
718
742
  }
719
743
  base.EmitterBase = EmitterBase;
720
- _EmitterBase_emitterAccessor = new WeakMap();
744
+ _EmitterBase_emitterAccessor = new WeakMap(), _EmitterBase_deregisterOnceListeners = new WeakMap();
721
745
  class Reply {
722
746
  }
723
747
  base.Reply = Reply;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfin/fdc3-api",
3
- "version": "40.102.1",
3
+ "version": "40.102.2",
4
4
  "description": "OpenFin fdc3 module utilities and types.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "private": false,