@100mslive/react-native-hms 1.9.9 → 1.9.10

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.
Files changed (205) hide show
  1. package/android/local.properties +8 -1
  2. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +2 -0
  3. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +61 -2
  4. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +10 -3
  5. package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSInteractivityDecoder.kt +328 -0
  6. package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSInteractivityHelper.kt +352 -0
  7. package/android/src/main/java/com/reactnativehmssdk/Interactivity/HMSRNInteractivityCenter.kt +184 -0
  8. package/ios/HMSConstants.swift +1 -0
  9. package/ios/HMSDecoder.swift +3 -1
  10. package/ios/HMSInteractivityDecoder.swift +223 -0
  11. package/ios/HMSInteractivityHelper.swift +169 -0
  12. package/ios/HMSManager.m +17 -0
  13. package/ios/HMSManager.swift +30 -1
  14. package/ios/HMSRNInteractivityCenter.swift +89 -0
  15. package/ios/HMSRNSDK.swift +10 -4
  16. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  17. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  18. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  19. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  20. package/lib/commonjs/classes/HMSInteractivityCenter.js +93 -0
  21. package/lib/commonjs/classes/HMSInteractivityCenter.js.map +1 -0
  22. package/lib/commonjs/classes/HMSInteractivityEncoder.js +33 -0
  23. package/lib/commonjs/classes/HMSInteractivityEncoder.js.map +1 -0
  24. package/lib/commonjs/classes/HMSPermissions.js +4 -0
  25. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  26. package/lib/commonjs/classes/HMSPollsListenerActions.js +11 -0
  27. package/lib/commonjs/classes/HMSPollsListenerActions.js.map +1 -0
  28. package/lib/commonjs/classes/HMSSDK.js +8 -0
  29. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  30. package/lib/commonjs/classes/polls/HMSPoll.js +6 -0
  31. package/lib/commonjs/classes/polls/HMSPoll.js.map +1 -0
  32. package/lib/commonjs/classes/polls/HMSPollCategory.js +12 -0
  33. package/lib/commonjs/classes/polls/HMSPollCategory.js.map +1 -0
  34. package/lib/commonjs/classes/polls/HMSPollCreateParams.js +6 -0
  35. package/lib/commonjs/classes/polls/HMSPollCreateParams.js.map +1 -0
  36. package/lib/commonjs/classes/polls/HMSPollQuestion.js +6 -0
  37. package/lib/commonjs/classes/polls/HMSPollQuestion.js.map +1 -0
  38. package/lib/commonjs/classes/polls/HMSPollQuestionAnswer.js +2 -0
  39. package/lib/commonjs/classes/polls/HMSPollQuestionAnswer.js.map +1 -0
  40. package/lib/commonjs/classes/polls/HMSPollQuestionCreateParams.js +6 -0
  41. package/lib/commonjs/classes/polls/HMSPollQuestionCreateParams.js.map +1 -0
  42. package/lib/commonjs/classes/polls/HMSPollQuestionOption.js +2 -0
  43. package/lib/commonjs/classes/polls/HMSPollQuestionOption.js.map +1 -0
  44. package/lib/commonjs/classes/polls/HMSPollQuestionOptionCreateParams.js +6 -0
  45. package/lib/commonjs/classes/polls/HMSPollQuestionOptionCreateParams.js.map +1 -0
  46. package/lib/commonjs/classes/polls/HMSPollQuestionQuizOptionCreateParams.js +6 -0
  47. package/lib/commonjs/classes/polls/HMSPollQuestionQuizOptionCreateParams.js.map +1 -0
  48. package/lib/commonjs/classes/polls/HMSPollQuestionResponse.js +6 -0
  49. package/lib/commonjs/classes/polls/HMSPollQuestionResponse.js.map +1 -0
  50. package/lib/commonjs/classes/polls/HMSPollQuestionResponseCreateParams.js +6 -0
  51. package/lib/commonjs/classes/polls/HMSPollQuestionResponseCreateParams.js.map +1 -0
  52. package/lib/commonjs/classes/polls/HMSPollQuestionResponseResult.js +2 -0
  53. package/lib/commonjs/classes/polls/HMSPollQuestionResponseResult.js.map +1 -0
  54. package/lib/commonjs/classes/polls/HMSPollQuestionResult.js +2 -0
  55. package/lib/commonjs/classes/polls/HMSPollQuestionResult.js.map +1 -0
  56. package/lib/commonjs/classes/polls/HMSPollQuestionType.js +14 -0
  57. package/lib/commonjs/classes/polls/HMSPollQuestionType.js.map +1 -0
  58. package/lib/commonjs/classes/polls/HMSPollResponsePeerInfo.js +2 -0
  59. package/lib/commonjs/classes/polls/HMSPollResponsePeerInfo.js.map +1 -0
  60. package/lib/commonjs/classes/polls/HMSPollResult.js +6 -0
  61. package/lib/commonjs/classes/polls/HMSPollResult.js.map +1 -0
  62. package/lib/commonjs/classes/polls/HMSPollState.js +13 -0
  63. package/lib/commonjs/classes/polls/HMSPollState.js.map +1 -0
  64. package/lib/commonjs/classes/polls/HMSPollType.js +12 -0
  65. package/lib/commonjs/classes/polls/HMSPollType.js.map +1 -0
  66. package/lib/commonjs/classes/polls/HMSPollUpdateType.js +13 -0
  67. package/lib/commonjs/classes/polls/HMSPollUpdateType.js.map +1 -0
  68. package/lib/commonjs/classes/polls/HMSPollUserTrackingMode.js +13 -0
  69. package/lib/commonjs/classes/polls/HMSPollUserTrackingMode.js.map +1 -0
  70. package/lib/commonjs/hooks/polls.js +17 -0
  71. package/lib/commonjs/hooks/polls.js.map +1 -0
  72. package/lib/commonjs/index.js +56 -0
  73. package/lib/commonjs/index.js.map +1 -1
  74. package/lib/commonjs/stores/hms-interactivity-store.js +21 -0
  75. package/lib/commonjs/stores/hms-interactivity-store.js.map +1 -0
  76. package/lib/commonjs/stores/hms-polls-slice.js +19 -0
  77. package/lib/commonjs/stores/hms-polls-slice.js.map +1 -0
  78. package/lib/commonjs/stores/types.js.map +1 -1
  79. package/lib/commonjs/utils/emitter/EventEmitter.js +19 -0
  80. package/lib/commonjs/utils/emitter/EventEmitter.js.map +1 -1
  81. package/lib/module/classes/HMSInteractivityCenter.js +85 -0
  82. package/lib/module/classes/HMSInteractivityCenter.js.map +1 -0
  83. package/lib/module/classes/HMSInteractivityEncoder.js +26 -0
  84. package/lib/module/classes/HMSInteractivityEncoder.js.map +1 -0
  85. package/lib/module/classes/HMSPermissions.js +4 -0
  86. package/lib/module/classes/HMSPermissions.js.map +1 -1
  87. package/lib/module/classes/HMSPollsListenerActions.js +5 -0
  88. package/lib/module/classes/HMSPollsListenerActions.js.map +1 -0
  89. package/lib/module/classes/HMSSDK.js +8 -0
  90. package/lib/module/classes/HMSSDK.js.map +1 -1
  91. package/lib/module/classes/polls/HMSPoll.js +2 -0
  92. package/lib/module/classes/polls/HMSPoll.js.map +1 -0
  93. package/lib/module/classes/polls/HMSPollCategory.js +6 -0
  94. package/lib/module/classes/polls/HMSPollCategory.js.map +1 -0
  95. package/lib/module/classes/polls/HMSPollCreateParams.js +2 -0
  96. package/lib/module/classes/polls/HMSPollCreateParams.js.map +1 -0
  97. package/lib/module/classes/polls/HMSPollQuestion.js +2 -0
  98. package/lib/module/classes/polls/HMSPollQuestion.js.map +1 -0
  99. package/lib/module/classes/polls/HMSPollQuestionAnswer.js +2 -0
  100. package/lib/module/classes/polls/HMSPollQuestionAnswer.js.map +1 -0
  101. package/lib/module/classes/polls/HMSPollQuestionCreateParams.js +2 -0
  102. package/lib/module/classes/polls/HMSPollQuestionCreateParams.js.map +1 -0
  103. package/lib/module/classes/polls/HMSPollQuestionOption.js +2 -0
  104. package/lib/module/classes/polls/HMSPollQuestionOption.js.map +1 -0
  105. package/lib/module/classes/polls/HMSPollQuestionOptionCreateParams.js +2 -0
  106. package/lib/module/classes/polls/HMSPollQuestionOptionCreateParams.js.map +1 -0
  107. package/lib/module/classes/polls/HMSPollQuestionQuizOptionCreateParams.js +2 -0
  108. package/lib/module/classes/polls/HMSPollQuestionQuizOptionCreateParams.js.map +1 -0
  109. package/lib/module/classes/polls/HMSPollQuestionResponse.js +2 -0
  110. package/lib/module/classes/polls/HMSPollQuestionResponse.js.map +1 -0
  111. package/lib/module/classes/polls/HMSPollQuestionResponseCreateParams.js +2 -0
  112. package/lib/module/classes/polls/HMSPollQuestionResponseCreateParams.js.map +1 -0
  113. package/lib/module/classes/polls/HMSPollQuestionResponseResult.js +2 -0
  114. package/lib/module/classes/polls/HMSPollQuestionResponseResult.js.map +1 -0
  115. package/lib/module/classes/polls/HMSPollQuestionResult.js +2 -0
  116. package/lib/module/classes/polls/HMSPollQuestionResult.js.map +1 -0
  117. package/lib/module/classes/polls/HMSPollQuestionType.js +8 -0
  118. package/lib/module/classes/polls/HMSPollQuestionType.js.map +1 -0
  119. package/lib/module/classes/polls/HMSPollResponsePeerInfo.js +2 -0
  120. package/lib/module/classes/polls/HMSPollResponsePeerInfo.js.map +1 -0
  121. package/lib/module/classes/polls/HMSPollResult.js +2 -0
  122. package/lib/module/classes/polls/HMSPollResult.js.map +1 -0
  123. package/lib/module/classes/polls/HMSPollState.js +7 -0
  124. package/lib/module/classes/polls/HMSPollState.js.map +1 -0
  125. package/lib/module/classes/polls/HMSPollType.js +6 -0
  126. package/lib/module/classes/polls/HMSPollType.js.map +1 -0
  127. package/lib/module/classes/polls/HMSPollUpdateType.js +7 -0
  128. package/lib/module/classes/polls/HMSPollUpdateType.js.map +1 -0
  129. package/lib/module/classes/polls/HMSPollUserTrackingMode.js +7 -0
  130. package/lib/module/classes/polls/HMSPollUserTrackingMode.js.map +1 -0
  131. package/lib/module/hooks/polls.js +12 -0
  132. package/lib/module/hooks/polls.js.map +1 -0
  133. package/lib/module/index.js +7 -0
  134. package/lib/module/index.js.map +1 -1
  135. package/lib/module/stores/hms-interactivity-store.js +15 -0
  136. package/lib/module/stores/hms-interactivity-store.js.map +1 -0
  137. package/lib/module/stores/hms-polls-slice.js +12 -0
  138. package/lib/module/stores/hms-polls-slice.js.map +1 -0
  139. package/lib/module/stores/types.js.map +1 -1
  140. package/lib/module/utils/emitter/EventEmitter.js +19 -0
  141. package/lib/module/utils/emitter/EventEmitter.js.map +1 -1
  142. package/lib/typescript/classes/HMSInteractivityCenter.d.ts +35 -0
  143. package/lib/typescript/classes/HMSInteractivityEncoder.d.ts +4 -0
  144. package/lib/typescript/classes/HMSPermissions.d.ts +4 -0
  145. package/lib/typescript/classes/HMSPollsListenerActions.d.ts +3 -0
  146. package/lib/typescript/classes/HMSSDK.d.ts +3 -0
  147. package/lib/typescript/classes/polls/HMSPoll.d.ts +81 -0
  148. package/lib/typescript/classes/polls/HMSPollCategory.d.ts +10 -0
  149. package/lib/typescript/classes/polls/HMSPollCreateParams.d.ts +6 -0
  150. package/lib/typescript/classes/polls/HMSPollQuestion.d.ts +61 -0
  151. package/lib/typescript/classes/polls/HMSPollQuestionAnswer.d.ts +17 -0
  152. package/lib/typescript/classes/polls/HMSPollQuestionCreateParams.d.ts +25 -0
  153. package/lib/typescript/classes/polls/HMSPollQuestionOption.d.ts +21 -0
  154. package/lib/typescript/classes/polls/HMSPollQuestionOptionCreateParams.d.ts +3 -0
  155. package/lib/typescript/classes/polls/HMSPollQuestionQuizOptionCreateParams.d.ts +4 -0
  156. package/lib/typescript/classes/polls/HMSPollQuestionResponse.d.ts +47 -0
  157. package/lib/typescript/classes/polls/HMSPollQuestionResponseCreateParams.d.ts +2 -0
  158. package/lib/typescript/classes/polls/HMSPollQuestionResponseResult.d.ts +17 -0
  159. package/lib/typescript/classes/polls/HMSPollQuestionResult.d.ts +29 -0
  160. package/lib/typescript/classes/polls/HMSPollQuestionType.d.ts +18 -0
  161. package/lib/typescript/classes/polls/HMSPollResponsePeerInfo.d.ts +21 -0
  162. package/lib/typescript/classes/polls/HMSPollResult.d.ts +22 -0
  163. package/lib/typescript/classes/polls/HMSPollState.d.ts +14 -0
  164. package/lib/typescript/classes/polls/HMSPollType.d.ts +4 -0
  165. package/lib/typescript/classes/polls/HMSPollUpdateType.d.ts +5 -0
  166. package/lib/typescript/classes/polls/HMSPollUserTrackingMode.d.ts +14 -0
  167. package/lib/typescript/hooks/polls.d.ts +3 -0
  168. package/lib/typescript/index.d.ts +8 -0
  169. package/lib/typescript/stores/hms-interactivity-store.d.ts +9 -0
  170. package/lib/typescript/stores/hms-polls-slice.d.ts +5 -0
  171. package/lib/typescript/stores/types.d.ts +6 -0
  172. package/lib/typescript/utils/emitter/EventEmitter.d.ts +7 -0
  173. package/package.json +1 -1
  174. package/sdk-versions.json +2 -2
  175. package/src/classes/HMSInteractivityCenter.ts +126 -0
  176. package/src/classes/HMSInteractivityEncoder.ts +29 -0
  177. package/src/classes/HMSPermissions.ts +6 -0
  178. package/src/classes/HMSPollsListenerActions.ts +3 -0
  179. package/src/classes/HMSSDK.tsx +10 -0
  180. package/src/classes/polls/HMSPoll.ts +108 -0
  181. package/src/classes/polls/HMSPollCategory.ts +11 -0
  182. package/src/classes/polls/HMSPollCreateParams.ts +19 -0
  183. package/src/classes/polls/HMSPollQuestion.ts +92 -0
  184. package/src/classes/polls/HMSPollQuestionAnswer.ts +29 -0
  185. package/src/classes/polls/HMSPollQuestionCreateParams.ts +36 -0
  186. package/src/classes/polls/HMSPollQuestionOption.ts +24 -0
  187. package/src/classes/polls/HMSPollQuestionOptionCreateParams.ts +8 -0
  188. package/src/classes/polls/HMSPollQuestionQuizOptionCreateParams.ts +6 -0
  189. package/src/classes/polls/HMSPollQuestionResponse.ts +72 -0
  190. package/src/classes/polls/HMSPollQuestionResponseCreateParams.ts +6 -0
  191. package/src/classes/polls/HMSPollQuestionResponseResult.ts +19 -0
  192. package/src/classes/polls/HMSPollQuestionResult.ts +41 -0
  193. package/src/classes/polls/HMSPollQuestionType.ts +21 -0
  194. package/src/classes/polls/HMSPollResponsePeerInfo.ts +24 -0
  195. package/src/classes/polls/HMSPollResult.ts +26 -0
  196. package/src/classes/polls/HMSPollState.ts +16 -0
  197. package/src/classes/polls/HMSPollType.ts +4 -0
  198. package/src/classes/polls/HMSPollUpdateType.ts +5 -0
  199. package/src/classes/polls/HMSPollUserTrackingMode.ts +16 -0
  200. package/src/hooks/polls.ts +14 -0
  201. package/src/index.ts +9 -0
  202. package/src/stores/hms-interactivity-store.ts +18 -0
  203. package/src/stores/hms-polls-slice.ts +20 -0
  204. package/src/stores/types.ts +20 -3
  205. package/src/utils/emitter/EventEmitter.ts +26 -0
@@ -0,0 +1,16 @@
1
+ export enum HMSPollUserTrackingMode {
2
+ /**
3
+ User tracking is based on the peer ID.
4
+ */
5
+ peerID,
6
+
7
+ /**
8
+ User tracking is based on the customer ID.
9
+ */
10
+ customerUserID,
11
+
12
+ /**
13
+ User tracking is based on the username.
14
+ */
15
+ userName,
16
+ }
@@ -0,0 +1,14 @@
1
+ import type { HMSPoll } from '../classes/polls/HMSPoll';
2
+ import { useHMSInteractivityStore } from '../stores/hms-interactivity-store';
3
+
4
+ // use latest state (with component rerender)
5
+
6
+ export const usePollsState = (pollId?: HMSPoll['pollId']) => {
7
+ return useHMSInteractivityStore((state) =>
8
+ pollId ? state.polls[pollId] : state.polls
9
+ );
10
+ };
11
+
12
+ // state setters
13
+
14
+ export const setPollsState = useHMSInteractivityStore.getState().setPolls;
package/src/index.ts CHANGED
@@ -95,6 +95,15 @@ export type {
95
95
  } from './classes/HmsView';
96
96
  export type { HMSPIPConfig } from './classes/HMSPIPConfig';
97
97
  export { HMSRecordingState } from './classes/HMSRecordingState';
98
+ export type { HMSPoll } from './classes/polls/HMSPoll';
99
+
100
+ export { HMSPollQuestionType } from './classes/polls/HMSPollQuestionType';
101
+ export { HMSPollType } from './classes/polls/HMSPollType';
102
+ export { HMSPollUserTrackingMode } from './classes/polls/HMSPollUserTrackingMode';
103
+ export { HMSPollUpdateType } from './classes/polls/HMSPollUpdateType';
104
+ export { HMSPollState } from './classes/polls/HMSPollState';
105
+ export { HMSPollQuestion } from './classes/polls/HMSPollQuestion';
106
+ export { HMSPollQuestionOption } from './classes/polls/HMSPollQuestionOption';
98
107
 
99
108
  import { HMSSDK as HmsManager } from './classes/HMSSDK';
100
109
 
@@ -0,0 +1,18 @@
1
+ import { create } from 'zustand';
2
+ import { subscribeWithSelector } from 'zustand/middleware';
3
+ // import { immer } from 'zustand/middleware/immer';
4
+
5
+ import { createHMSPollsSlice } from './hms-polls-slice';
6
+ import type { HMSInteractivityStore } from './types';
7
+
8
+ export const useHMSInteractivityStore = create<HMSInteractivityStore>()(
9
+ // [['zustand/subscribeWithSelector', never], ['zustand/immer', never]]
10
+ subscribeWithSelector(
11
+ // immer((...a) => ({
12
+ // ...createHMSPollsSlice(...a),
13
+ // }))
14
+ (...a) => ({
15
+ ...createHMSPollsSlice(...a),
16
+ })
17
+ )
18
+ );
@@ -0,0 +1,20 @@
1
+ import type { StateCreator } from 'zustand';
2
+ import type { HMSInteractivityStore, HMSPollsSlice } from './types';
3
+ import type { HMSPoll } from '../classes/polls/HMSPoll';
4
+
5
+ export const createHMSPollsSlice: StateCreator<
6
+ HMSInteractivityStore,
7
+ [],
8
+ [],
9
+ HMSPollsSlice
10
+ > = (set) => ({
11
+ polls: {},
12
+ setPolls: (poll: HMSPoll) => {
13
+ set((state) => {
14
+ state.polls[poll.pollId] = poll;
15
+ return state; // TODO: remove when use immer
16
+ });
17
+ },
18
+ // cue: undefined,
19
+ // setCue: (cue: HMSHLSPlayerPlaybackCue) => set({ cue }),
20
+ });
@@ -1,5 +1,6 @@
1
1
  // Stores
2
2
 
3
+ import type { HMSPoll } from '../classes/polls/HMSPoll';
3
4
  import type {
4
5
  HMSHLSPlayerPlaybackState,
5
6
  HMSHLSPlayerPlaybackCueEventData,
@@ -11,8 +12,9 @@ import type {
11
12
 
12
13
  export type HMSStore = HMSHLSPlayerPlaybackSlice & HMSViewsSlice;
13
14
  export type HMSHLSPlayerStatsStore = HMSHLSPlayerStatsSlice;
15
+ export type HMSInteractivityStore = HMSPollsSlice;
14
16
 
15
- // HMSViews Slice
17
+ //#region HMSViews Slice
16
18
 
17
19
  export type TrackId = string;
18
20
 
@@ -26,7 +28,9 @@ export interface HMSViewsSlice {
26
28
  setHmsviewsResolutions(trackId: TrackId, resolution: Resolution): void;
27
29
  }
28
30
 
29
- // HLS Player Playback Slice
31
+ //#endregion HMSViews Slice
32
+
33
+ //#region HLS Player Playback Slice
30
34
 
31
35
  export interface HMSHLSPlayerPlaybackCue
32
36
  extends Omit<HMSHLSPlayerPlaybackCueEventData, 'endDate' | 'startDate'> {
@@ -55,7 +59,9 @@ export interface HMSHLSPlayerPlaybackSlice {
55
59
  setPlaybackError(error: HMSHLSPlayerPlaybackError): void;
56
60
  }
57
61
 
58
- // HLS Player Stats Slice
62
+ //#endregion HLS Player Playback Slice
63
+
64
+ //#region HLS Player Stats Slice
59
65
 
60
66
  export type HMSHLSPlayerStats = HMSHLSPlayerStatsUpdateEventData;
61
67
  export type HMSHLSPlayerStatsError =
@@ -68,3 +74,14 @@ export interface HMSHLSPlayerStatsSlice {
68
74
  changeStats(stats: HMSHLSPlayerStats): void;
69
75
  setError(error: HMSHLSPlayerStatsError): void;
70
76
  }
77
+
78
+ //#endregion HLS Player Stats Slice
79
+
80
+ //#region Polls Slice
81
+
82
+ export type HMSPollsSlice = {
83
+ polls: Record<string, HMSPoll>;
84
+ setPolls(poll: HMSPoll): void;
85
+ };
86
+
87
+ //#endregion Polls Slice
@@ -20,6 +20,10 @@ export { EmitterSubscription } from './_EmitterSubscription';
20
20
  */
21
21
  export class EventEmitter {
22
22
  _subscriber: EventSubscriptionVendor;
23
+ _onAllListenersRemoved:
24
+ | ((eventType: string | 'all') => void)
25
+ | null
26
+ | undefined;
23
27
 
24
28
  /**
25
29
  * @constructor
@@ -31,6 +35,17 @@ export class EventEmitter {
31
35
  this._subscriber = subscriber || new EventSubscriptionVendor();
32
36
  }
33
37
 
38
+ /**
39
+ * Registers a listener to be invoked when all event listeners have been removed
40
+ * Given listener is invoked with event type or `all` when all listeners are removed
41
+ * @param onAllListenersRemoved
42
+ */
43
+ registerOnAllListenersRemoved(
44
+ onAllListenersRemoved: (eventType: string | 'all') => void
45
+ ) {
46
+ this._onAllListenersRemoved = onAllListenersRemoved;
47
+ }
48
+
34
49
  /**
35
50
  * Adds a listener to be invoked when events of the specified type are
36
51
  * emitted. An optional calling context may be provided. The data arguments
@@ -65,6 +80,7 @@ export class EventEmitter {
65
80
  */
66
81
  removeAllListeners(eventType: string | undefined | null) {
67
82
  this._subscriber.removeAllSubscriptions(eventType);
83
+ this._onAllListenersRemoved?.(eventType || 'all');
68
84
  }
69
85
 
70
86
  /**
@@ -77,7 +93,17 @@ export class EventEmitter {
77
93
  return;
78
94
  }
79
95
 
96
+ const eventType = subscription.eventType;
80
97
  this._subscriber.removeSubscription(subscription);
98
+
99
+ // check if all subscriptions are removed for the event type
100
+ if (
101
+ typeof this._onAllListenersRemoved === 'function' &&
102
+ this.listenerCount(eventType) === 0
103
+ ) {
104
+ // invoke passed cleanup function if any for the event type
105
+ this._onAllListenersRemoved(eventType);
106
+ }
81
107
  }
82
108
 
83
109
  /**