@launchdarkly/js-client-sdk-common 1.3.0 → 1.4.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.4.0](https://github.com/launchdarkly/js-core/compare/js-client-sdk-common-v1.3.0...js-client-sdk-common-v1.4.0) (2024-08-15)
4
+
5
+
6
+ ### Features
7
+
8
+ * Remove event target shim. ([#545](https://github.com/launchdarkly/js-core/issues/545)) ([448ad67](https://github.com/launchdarkly/js-core/commit/448ad67815b9ec29abd322ed8483b2367147b146)), closes [#412](https://github.com/launchdarkly/js-core/issues/412)
9
+
3
10
  ## [1.3.0](https://github.com/launchdarkly/js-core/compare/js-client-sdk-common-v1.2.0...js-client-sdk-common-v1.3.0) (2024-08-12)
4
11
 
5
12
 
@@ -1,27 +1,9 @@
1
+ import { LDLogger } from '@launchdarkly/js-sdk-common';
1
2
  export type EventName = 'error' | 'change';
2
- /**
3
- * Native api usage: EventTarget.
4
- *
5
- * This is an event emitter using the standard built-in EventTarget web api.
6
- * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget
7
- *
8
- * In react-native use event-target-shim to polyfill EventTarget. This is safe
9
- * because the react-native repo uses it too.
10
- * https://github.com/mysticatea/event-target-shim
11
- */
12
3
  export default class LDEmitter {
13
- private et;
4
+ private logger?;
14
5
  private listeners;
15
- /**
16
- * Cache all listeners in a Map so we can remove them later
17
- * @param name string event name
18
- * @param originalListener pointer to the original function as specified by
19
- * the consumer
20
- * @param customListener pointer to the custom function based on original
21
- * listener. This is needed to allow for CustomEvents.
22
- * @private
23
- */
24
- private saveListener;
6
+ constructor(logger?: LDLogger | undefined);
25
7
  on(name: EventName, listener: Function): void;
26
8
  /**
27
9
  * Unsubscribe one or all events.
@@ -30,6 +12,7 @@ export default class LDEmitter {
30
12
  * @param listener Optional. If unspecified, all listeners for the event will be removed.
31
13
  */
32
14
  off(name: EventName, listener?: Function): void;
15
+ private invokeListener;
33
16
  emit(name: EventName, ...detail: any[]): void;
34
17
  eventNames(): string[];
35
18
  listenerCount(name: EventName): number;
@@ -1 +1 @@
1
- {"version":3,"file":"LDEmitter.d.ts","sourceRoot":"","sources":["../../src/api/LDEmitter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAM3C;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,OAAO,CAAC,EAAE,CAAkC;IAE5C,OAAO,CAAC,SAAS,CAAqD;IAEtE;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IASpB,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;IAWtC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ;IA2BxC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAItC,UAAU,IAAI,MAAM,EAAE;IAItB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;CAGvC"}
1
+ {"version":3,"file":"LDEmitter.d.ts","sourceRoot":"","sources":["../../src/api/LDEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3C,MAAM,CAAC,OAAO,OAAO,SAAS;IAGhB,OAAO,CAAC,MAAM,CAAC;IAF3B,OAAO,CAAC,SAAS,CAAyC;gBAEtC,MAAM,CAAC,sBAAU;IAErC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;IAQtC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAqBxC,OAAO,CAAC,cAAc;IAQtB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAKtC,UAAU,IAAI,MAAM,EAAE;IAItB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;CAGvC"}
@@ -1,32 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * Native api usage: EventTarget.
5
- *
6
- * This is an event emitter using the standard built-in EventTarget web api.
7
- * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget
8
- *
9
- * In react-native use event-target-shim to polyfill EventTarget. This is safe
10
- * because the react-native repo uses it too.
11
- * https://github.com/mysticatea/event-target-shim
12
- */
13
3
  class LDEmitter {
14
- constructor() {
15
- this.et = new EventTarget();
4
+ constructor(logger) {
5
+ this.logger = logger;
16
6
  this.listeners = new Map();
17
7
  }
18
- /**
19
- * Cache all listeners in a Map so we can remove them later
20
- * @param name string event name
21
- * @param originalListener pointer to the original function as specified by
22
- * the consumer
23
- * @param customListener pointer to the custom function based on original
24
- * listener. This is needed to allow for CustomEvents.
25
- * @private
26
- */
27
- saveListener(name, originalListener, customListener) {
8
+ on(name, listener) {
28
9
  var _a;
29
- const listener = { original: originalListener, custom: customListener };
30
10
  if (!this.listeners.has(name)) {
31
11
  this.listeners.set(name, [listener]);
32
12
  }
@@ -34,15 +14,6 @@ class LDEmitter {
34
14
  (_a = this.listeners.get(name)) === null || _a === void 0 ? void 0 : _a.push(listener);
35
15
  }
36
16
  }
37
- on(name, listener) {
38
- const customListener = (e) => {
39
- const { detail } = e;
40
- // invoke listener with args from CustomEvent
41
- listener(...detail);
42
- };
43
- this.saveListener(name, listener, customListener);
44
- this.et.addEventListener(name, customListener);
45
- }
46
17
  /**
47
18
  * Unsubscribe one or all events.
48
19
  *
@@ -55,10 +26,8 @@ class LDEmitter {
55
26
  return;
56
27
  }
57
28
  if (listener) {
58
- const toBeRemoved = existingListeners.find((c) => c.original === listener);
59
- this.et.removeEventListener(name, toBeRemoved === null || toBeRemoved === void 0 ? void 0 : toBeRemoved.custom);
60
29
  // remove from internal cache
61
- const updated = existingListeners.filter((l) => l.original !== listener);
30
+ const updated = existingListeners.filter((fn) => fn !== listener);
62
31
  if (updated.length === 0) {
63
32
  this.listeners.delete(name);
64
33
  }
@@ -67,14 +36,21 @@ class LDEmitter {
67
36
  }
68
37
  return;
69
38
  }
70
- // remove all listeners
71
- existingListeners.forEach((l) => {
72
- this.et.removeEventListener(name, l.custom);
73
- });
39
+ // listener was not specified, so remove them all for that event
74
40
  this.listeners.delete(name);
75
41
  }
42
+ invokeListener(listener, name, ...detail) {
43
+ var _a;
44
+ try {
45
+ listener(...detail);
46
+ }
47
+ catch (err) {
48
+ (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error(`Encountered error invoking handler for "${name}", detail: "${err}"`);
49
+ }
50
+ }
76
51
  emit(name, ...detail) {
77
- this.et.dispatchEvent(new CustomEvent(name, { detail }));
52
+ const listeners = this.listeners.get(name);
53
+ listeners === null || listeners === void 0 ? void 0 : listeners.forEach((listener) => this.invokeListener(listener, name, ...detail));
78
54
  }
79
55
  eventNames() {
80
56
  return [...this.listeners.keys()];
@@ -1 +1 @@
1
- {"version":3,"file":"LDEmitter.js","sourceRoot":"","sources":["../../src/api/LDEmitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LDEmitter.js","sourceRoot":"","sources":["../../src/api/LDEmitter.ts"],"names":[],"mappings":";;AAIA,MAAqB,SAAS;IAG5B,YAAoB,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;QAF7B,cAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;IAElB,CAAC;IAEzC,EAAE,CAAC,IAAe,EAAE,QAAkB;;QACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;SACtC;aAAM;YACL,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1C;IACH,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAAe,EAAE,QAAmB;QACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,iBAAiB,EAAE;YACtB,OAAO;SACR;QAED,IAAI,QAAQ,EAAE;YACZ,6BAA6B;YAC7B,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAC7B;iBAAM;gBACL,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aACnC;YACD,OAAO;SACR;QAED,gEAAgE;QAChE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEO,cAAc,CAAC,QAAkB,EAAE,IAAe,EAAE,GAAG,MAAa;;QAC1E,IAAI;YACF,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;SACrB;QAAC,OAAO,GAAG,EAAE;YACZ,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,2CAA2C,IAAI,eAAe,GAAG,GAAG,CAAC,CAAC;SAC1F;IACH,CAAC;IAED,IAAI,CAAC,IAAe,EAAE,GAAG,MAAa;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,IAAe;;QAC3B,OAAO,MAAA,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,MAAM,mCAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AA5DD,4BA4DC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@launchdarkly/js-client-sdk-common",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "type": "commonjs",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",