Skip to content

Commit f7cd8c4

Browse files
yungstersmeta-codesync[bot]
authored andcommitted
RN: Export EventEmitter in Public API (#55190)
Summary: Pull Request resolved: #55190 Makes `EventEmitter` (and the related `IEventEmitter` interface type) available as part of React Native's Public API. This allows product logic using React Native to also leverage the same abstraction. Currently, code outside of React Native that wants to use `EventEmitter` must resort to deep imports (which is discouraged). Changelog: [General][Added] - Added `EventEmitter` to `react-native` exports. Reviewed By: huntie Differential Revision: D90786781 fbshipit-source-id: ad06124c96fcba35b8b5fc8170bfb15c17884a0a
1 parent 6241e61 commit f7cd8c4

3 files changed

Lines changed: 40 additions & 9 deletions

File tree

packages/react-native/ReactNativeApi.d.ts

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<9504863966549f8efbbe4e13d7f74eaf>>
7+
* @generated SignedSource<<532b4c9c3a1d7ea9cbfce8c8e8ff3d87>>
88
*
99
* This file was generated by scripts/js-api/build-types/index.js.
1010
*/
@@ -1865,7 +1865,7 @@ declare namespace CodegenTypes {
18651865
UnsafeMixed,
18661866
DefaultTypes,
18671867
WithDefault,
1868-
EventEmitter,
1868+
EventEmitter_2 as EventEmitter,
18691869
}
18701870
}
18711871
declare type ColorListenerCallback = (value: ColorValue) => unknown
@@ -2229,7 +2229,28 @@ declare type EventConfig<T> = {
22292229
platformConfig?: PlatformConfig
22302230
useNativeDriver: boolean
22312231
}
2232-
declare type EventEmitter<T> = (
2232+
declare class EventEmitter<
2233+
TEventToArgsMap extends Readonly<
2234+
Record<string, ReadonlyArray<UnsafeEventObject>>
2235+
> = Readonly<Record<string, ReadonlyArray<UnsafeEventObject>>>,
2236+
> implements IEventEmitter<TEventToArgsMap>
2237+
{
2238+
addListener<TEvent extends keyof TEventToArgsMap>(
2239+
eventType: TEvent,
2240+
listener: (...args: TEventToArgsMap[TEvent]) => unknown,
2241+
context: unknown,
2242+
): EventSubscription
2243+
constructor()
2244+
emit<TEvent extends keyof TEventToArgsMap>(
2245+
eventType: TEvent,
2246+
...args: TEventToArgsMap[TEvent]
2247+
): void
2248+
listenerCount<TEvent extends keyof TEventToArgsMap>(eventType: TEvent): number
2249+
removeAllListeners<TEvent extends keyof TEventToArgsMap>(
2250+
eventType?: null | TEvent | undefined,
2251+
): void
2252+
}
2253+
declare type EventEmitter_2<T> = (
22332254
handler: ($$PARAM_0$$: T) => Promise<void> | void,
22342255
) => EventSubscription
22352256
declare type EventName = (() => string) | string
@@ -5988,15 +6009,15 @@ export {
59886009
Button, // ef82aed4
59896010
ButtonProps, // 3c081e75
59906011
Clipboard, // 41addb89
5991-
CodegenTypes, // 030a94b8
6012+
CodegenTypes, // adbc477c
59926013
ColorSchemeName, // 31a4350e
59936014
ColorValue, // 98989a8f
59946015
ComponentProvider, // b5c60ddd
59956016
ComponentProviderInstrumentationHook, // 9f640048
59966017
CursorValue, // 26522595
59976018
DevMenu, // 21b8b7a9
59986019
DevSettings, // e55b91dc
5999-
DeviceEventEmitter, // 650e6394
6020+
DeviceEventEmitter, // bdbdd014
60006021
DeviceInfo, // 521bfb71
60016022
DeviceInfoConstants, // 279e7858
60026023
DimensionValue, // b163a381
@@ -6016,6 +6037,7 @@ export {
60166037
EmitterSubscription, // de50c359
60176038
EnterKeyHintTypeOptions, // 8314de78
60186039
ErrorUtils, // 38fb909e
6040+
EventEmitter, // 2a2ea995
60196041
EventSubscription, // b8d084aa
60206042
ExtendedExceptionData, // 5a6ccf5a
60216043
FilterFunction, // bf24c0e3
@@ -6029,6 +6051,7 @@ export {
60296051
HostComponent, // 5e13ff5a
60306052
HostInstance, // 489cbe7f
60316053
I18nManager, // f9870e00
6054+
IEventEmitter, // fbef6131
60326055
IOSKeyboardEvent, // e67bfe3a
60336056
IgnorePattern, // ec6f6ece
60346057
Image, // 957b3726
@@ -6074,7 +6097,7 @@ export {
60746097
LayoutChangeEvent, // c674f902
60756098
LayoutConformanceProps, // 055f03b8
60766099
LayoutRectangle, // 6601b294
6077-
Linking, // b5645d2b
6100+
Linking, // 9a6a174d
60786101
ListRenderItem, // b5353fd8
60796102
ListRenderItemInfo, // e8595b03
60806103
ListViewToken, // 833d3481
@@ -6090,11 +6113,11 @@ export {
60906113
ModalPropsIOS, // 4fbcedf6
60916114
ModeChangeEvent, // 16790307
60926115
MouseEvent, // 53ede3db
6093-
NativeAppEventEmitter, // e1340a0a
6116+
NativeAppEventEmitter, // 08d4c47d
60946117
NativeColorValue, // d2094c29
60956118
NativeComponentRegistry, // 7fd99ba6
60966119
NativeDialogManagerAndroid, // 5be8497e
6097-
NativeEventEmitter, // d72906cc
6120+
NativeEventEmitter, // 27f97c1a
60986121
NativeEventSubscription, // de3942e7
60996122
NativeMethods, // 03dc51c5
61006123
NativeMethodsMixin, // 4b061b7e

packages/react-native/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ module.exports = {
4242
return require('./Libraries/Components/DrawerAndroid/DrawerLayoutAndroid')
4343
.default;
4444
},
45+
get EventEmitter() {
46+
return require('./Libraries/vendor/emitter/EventEmitter').default;
47+
},
4548
get FlatList() {
4649
return require('./Libraries/Lists/FlatList').default;
4750
},

packages/react-native/index.js.flow

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,6 @@ export * as NativeComponentRegistry from './Libraries/NativeComponent/NativeComp
320320
export {default as NativeDialogManagerAndroid} from './Libraries/NativeModules/specs/NativeDialogManagerAndroid';
321321

322322
export type {
323-
EventSubscription,
324323
EmitterSubscription,
325324
NativeEventSubscription,
326325
} from './Libraries/EventEmitter/NativeEventEmitter';
@@ -463,6 +462,12 @@ export type {
463462
PublicTextInstance,
464463
} from './Libraries/ReactPrivate/ReactNativePrivateInterface';
465464

465+
export type {
466+
EventSubscription,
467+
IEventEmitter,
468+
} from './Libraries/vendor/emitter/EventEmitter';
469+
export {default as EventEmitter} from './Libraries/vendor/emitter/EventEmitter';
470+
466471
export {
467472
default as unstable_VirtualView,
468473
VirtualViewMode,

0 commit comments

Comments
 (0)