@openfin/fdc3-api 43.101.2 → 44.100.1

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/out/fdc3-api.js CHANGED
@@ -495,6 +495,35 @@ var InteropClient$1 = {};
495
495
 
496
496
  var base = {};
497
497
 
498
+ var promises = {};
499
+
500
+ Object.defineProperty(promises, "__esModule", { value: true });
501
+ promises.promiseMapSerial = promises.serial = promises.promiseMap = promises.promisify = void 0;
502
+ function promisify(func) {
503
+ return (...args) => new Promise((resolve, reject) => {
504
+ func(...args, (err, val) => (err ? reject(err) : resolve(val)));
505
+ });
506
+ }
507
+ promises.promisify = promisify;
508
+ async function promiseMap(arr, asyncF) {
509
+ return Promise.all(arr.map(asyncF));
510
+ }
511
+ promises.promiseMap = promiseMap;
512
+ async function serial(arr) {
513
+ const ret = [];
514
+ for (const func of arr) {
515
+ // eslint-disable-next-line no-await-in-loop
516
+ const next = await func();
517
+ ret.push(next);
518
+ }
519
+ return ret;
520
+ }
521
+ promises.serial = serial;
522
+ async function promiseMapSerial(arr, func) {
523
+ return serial(arr.map((value, index, array) => () => func(value, index, array)));
524
+ }
525
+ promises.promiseMapSerial = promiseMapSerial;
526
+
498
527
  var __classPrivateFieldSet$3 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
499
528
  if (kind === "m") throw new TypeError("Private method is not writable");
500
529
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
@@ -509,6 +538,7 @@ var __classPrivateFieldGet$3 = (commonjsGlobal && commonjsGlobal.__classPrivateF
509
538
  var _EmitterBase_emitterAccessor, _EmitterBase_deregisterOnceListeners;
510
539
  Object.defineProperty(base, "__esModule", { value: true });
511
540
  base.Reply = base.EmitterBase = base.Base = void 0;
541
+ const promises_1 = promises;
512
542
  class Base {
513
543
  /**
514
544
  * @internal
@@ -586,8 +616,27 @@ class EmitterBase extends Base {
586
616
  return this.hasEmitter() ? this.getOrCreateEmitter().emit(eventType, payload, ...args) : false;
587
617
  };
588
618
  this.hasEmitter = () => this.wire.eventAggregator.has(__classPrivateFieldGet$3(this, _EmitterBase_emitterAccessor, "f"));
619
+ /**
620
+ * Cleans up after removal of a listener, e.g. deleting any lingering deregistration handlers for a
621
+ * `once` subscription.
622
+ *
623
+ * @remarks Implementing this as a `removeListener` handler ensures that direct removal of a listener
624
+ * on the base emitter will not leak additional core handlers. We could do this in the forwarding method,
625
+ * which would involve less "magic," but would be more-vulnerable to accidental re-introduction of a leak.
626
+ */
627
+ this.cleanUpRemovedListener = (eventType, listener) => {
628
+ const deregister = __classPrivateFieldGet$3(this, _EmitterBase_deregisterOnceListeners, "f").get(listener);
629
+ if (deregister) {
630
+ const emitter = this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$3(this, _EmitterBase_emitterAccessor, "f"));
631
+ emitter.removeListener(eventType, deregister);
632
+ }
633
+ };
589
634
  this.getOrCreateEmitter = () => {
590
- return this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$3(this, _EmitterBase_emitterAccessor, "f"));
635
+ const emitter = this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$3(this, _EmitterBase_emitterAccessor, "f"));
636
+ if (!emitter.listeners('removeListener').includes(this.cleanUpRemovedListener)) {
637
+ emitter.on('removeListener', this.cleanUpRemovedListener);
638
+ }
639
+ return emitter;
591
640
  };
592
641
  this.listeners = (type) => this.hasEmitter() ? this.getOrCreateEmitter().listeners(type) : [];
593
642
  this.listenerCount = (type) => this.hasEmitter() ? this.getOrCreateEmitter().listenerCount(type) : 0;
@@ -627,6 +676,7 @@ class EmitterBase extends Base {
627
676
  };
628
677
  __classPrivateFieldSet$3(this, _EmitterBase_emitterAccessor, [topic, ...additionalAccessors], "f");
629
678
  __classPrivateFieldSet$3(this, _EmitterBase_deregisterOnceListeners, new WeakMap(), "f");
679
+ this.listeners = (event) => this.hasEmitter() ? this.getOrCreateEmitter().listeners(event) : [];
630
680
  }
631
681
  /**
632
682
  * Adds a listener to the end of the listeners array for the specified event.
@@ -704,10 +754,6 @@ class EmitterBase extends Base {
704
754
  const emitter = await this.deregisterEventListener(eventType, options);
705
755
  if (emitter) {
706
756
  emitter.removeListener(eventType, listener);
707
- const deregister = __classPrivateFieldGet$3(this, _EmitterBase_deregisterOnceListeners, "f").get(listener);
708
- if (deregister) {
709
- emitter.removeListener(eventType, deregister);
710
- }
711
757
  this.deleteEmitterIfNothingRegistered(emitter);
712
758
  }
713
759
  return this;
@@ -743,13 +789,12 @@ class EmitterBase extends Base {
743
789
  }
744
790
  else if (this.hasEmitter()) {
745
791
  const events = this.getOrCreateEmitter().eventNames();
746
- await Promise.all(events.map(removeByEvent));
792
+ await (0, promises_1.promiseMap)(events, removeByEvent);
747
793
  }
748
794
  return this;
749
795
  }
750
796
  deleteEmitterIfNothingRegistered(emitter) {
751
- // TODO: maybe emitterMap should clean up itself..
752
- if (emitter.eventNames().length === 0) {
797
+ if (emitter.eventNames().every((type) => type === 'removeListener')) {
753
798
  this.wire.eventAggregator.delete(__classPrivateFieldGet$3(this, _EmitterBase_emitterAccessor, "f"));
754
799
  }
755
800
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfin/fdc3-api",
3
- "version": "43.101.2",
3
+ "version": "44.100.1",
4
4
  "description": "OpenFin fdc3 module utilities and types.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "private": false,