@openfin/node-adapter 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.
@@ -84,7 +84,7 @@ var __classPrivateFieldGet$e = (commonjsGlobal && commonjsGlobal.__classPrivateF
84
84
  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");
85
85
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
86
86
  };
87
- var _EmitterBase_emitterAccessor;
87
+ var _EmitterBase_emitterAccessor, _EmitterBase_deregisterOnceListeners;
88
88
  Object.defineProperty(base, "__esModule", { value: true });
89
89
  base.Reply = base.EmitterBase = base.Base = void 0;
90
90
  const promises_1 = promises;
@@ -156,6 +156,7 @@ class EmitterBase extends Base {
156
156
  super(wire);
157
157
  this.topic = topic;
158
158
  _EmitterBase_emitterAccessor.set(this, void 0);
159
+ _EmitterBase_deregisterOnceListeners.set(this, void 0);
159
160
  this.eventNames = () => (this.hasEmitter() ? this.getOrCreateEmitter().eventNames() : []);
160
161
  /**
161
162
  * @internal
@@ -164,7 +165,28 @@ class EmitterBase extends Base {
164
165
  return this.hasEmitter() ? this.getOrCreateEmitter().emit(eventType, payload, ...args) : false;
165
166
  };
166
167
  this.hasEmitter = () => this.wire.eventAggregator.has(__classPrivateFieldGet$e(this, _EmitterBase_emitterAccessor, "f"));
167
- this.getOrCreateEmitter = () => this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$e(this, _EmitterBase_emitterAccessor, "f"));
168
+ /**
169
+ * Cleans up after removal of a listener, e.g. deleting any lingering deregistration handlers for a
170
+ * `once` subscription.
171
+ *
172
+ * @remarks Implementing this as a `removeListener` handler ensures that direct removal of a listener
173
+ * on the base emitter will not leak additional core handlers. We could do this in the forwarding method,
174
+ * which would involve less "magic," but would be more-vulnerable to accidental re-introduction of a leak.
175
+ */
176
+ this.cleanUpRemovedListener = (eventType, listener) => {
177
+ const deregister = __classPrivateFieldGet$e(this, _EmitterBase_deregisterOnceListeners, "f").get(listener);
178
+ if (deregister) {
179
+ const emitter = this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$e(this, _EmitterBase_emitterAccessor, "f"));
180
+ emitter.removeListener(eventType, deregister);
181
+ }
182
+ };
183
+ this.getOrCreateEmitter = () => {
184
+ const emitter = this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$e(this, _EmitterBase_emitterAccessor, "f"));
185
+ if (!emitter.listeners('removeListener').includes(this.cleanUpRemovedListener)) {
186
+ emitter.on('removeListener', this.cleanUpRemovedListener);
187
+ }
188
+ return emitter;
189
+ };
168
190
  this.listeners = (type) => this.hasEmitter() ? this.getOrCreateEmitter().listeners(type) : [];
169
191
  this.listenerCount = (type) => this.hasEmitter() ? this.getOrCreateEmitter().listenerCount(type) : 0;
170
192
  this.registerEventListener = async (eventType, options = {}, applySubscription, undoSubscription) => {
@@ -196,13 +218,13 @@ class EmitterBase extends Base {
196
218
  type: eventType
197
219
  };
198
220
  await this.wire.sendAction('unsubscribe-to-desktop-event', runtimeEvent).catch(() => null);
199
- const emitter = this.getOrCreateEmitter();
200
- return emitter;
221
+ return this.getOrCreateEmitter();
201
222
  }
202
223
  // This will only be reached if unsubscribe from event that does not exist but do not want to error here
203
224
  return Promise.resolve();
204
225
  };
205
226
  __classPrivateFieldSet$d(this, _EmitterBase_emitterAccessor, [topic, ...additionalAccessors], "f");
227
+ __classPrivateFieldSet$d(this, _EmitterBase_deregisterOnceListeners, new WeakMap(), "f");
206
228
  this.listeners = (event) => this.hasEmitter() ? this.getOrCreateEmitter().listeners(event) : [];
207
229
  }
208
230
  /**
@@ -231,6 +253,7 @@ class EmitterBase extends Base {
231
253
  */
232
254
  async once(eventType, listener, options) {
233
255
  const deregister = () => this.deregisterEventListener(eventType);
256
+ __classPrivateFieldGet$e(this, _EmitterBase_deregisterOnceListeners, "f").set(listener, deregister);
234
257
  await this.registerEventListener(eventType, options, (emitter) => {
235
258
  emitter.once(eventType, deregister);
236
259
  emitter.once(eventType, listener);
@@ -261,6 +284,7 @@ class EmitterBase extends Base {
261
284
  */
262
285
  async prependOnceListener(eventType, listener, options) {
263
286
  const deregister = () => this.deregisterEventListener(eventType);
287
+ __classPrivateFieldGet$e(this, _EmitterBase_deregisterOnceListeners, "f").set(listener, deregister);
264
288
  await this.registerEventListener(eventType, options, (emitter) => {
265
289
  emitter.prependOnceListener(eventType, listener);
266
290
  emitter.once(eventType, deregister);
@@ -319,13 +343,13 @@ class EmitterBase extends Base {
319
343
  return this;
320
344
  }
321
345
  deleteEmitterIfNothingRegistered(emitter) {
322
- if (emitter.eventNames().length === 0) {
346
+ if (emitter.eventNames().every((type) => type === 'removeListener')) {
323
347
  this.wire.eventAggregator.delete(__classPrivateFieldGet$e(this, _EmitterBase_emitterAccessor, "f"));
324
348
  }
325
349
  }
326
350
  }
327
351
  base.EmitterBase = EmitterBase;
328
- _EmitterBase_emitterAccessor = new WeakMap();
352
+ _EmitterBase_emitterAccessor = new WeakMap(), _EmitterBase_deregisterOnceListeners = new WeakMap();
329
353
  class Reply {
330
354
  }
331
355
  base.Reply = Reply;
@@ -17762,7 +17786,7 @@ class NodeEnvironment extends BaseEnvironment_1 {
17762
17786
  };
17763
17787
  }
17764
17788
  getAdapterVersionSync() {
17765
- return "40.102.1";
17789
+ return "40.102.2";
17766
17790
  }
17767
17791
  observeBounds(element, onChange) {
17768
17792
  throw new Error('Method not implemented.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfin/node-adapter",
3
- "version": "40.102.1",
3
+ "version": "40.102.2",
4
4
  "description": "See README.md",
5
5
  "main": "out/node-adapter.js",
6
6
  "types": "out/node-adapter.d.ts",
@@ -24,7 +24,7 @@
24
24
  "author": "OpenFin",
25
25
  "dependencies": {
26
26
  "@types/node": "^20.14.2",
27
- "@openfin/core": "40.102.1",
27
+ "@openfin/core": "40.102.2",
28
28
  "lodash": "^4.17.21",
29
29
  "ws": "^7.3.0"
30
30
  }