Skip to content

Commit 6c08c8f

Browse files
Merge pull request #36 from Wojtach/fix/engine-handling-events-ios
fix: engine can intialize with app NativeEventEmitter
2 parents 755cebf + d8073d9 commit 6c08c8f

File tree

6 files changed

+115
-100
lines changed

6 files changed

+115
-100
lines changed

expo-example/app/replication/status.tsx

+2-15
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,11 @@ import start from '@/service/replicator/start';
66
import stop from '@/service/replicator/stop';
77
import ReplicatorIdActionForm from '@/components/ReplicatorIdActionForm/ReplicatorIdActionForm';
88
import { useStyleScheme } from '@/components/Themed/Themed';
9-
import { NativeEventEmitter, NativeModules, SafeAreaView } from 'react-native';
9+
import { SafeAreaView } from 'react-native';
1010
import ResultListView from '@/components/ResultsListView/ResultsListView';
11-
import MessageQueue from 'react-native/Libraries/BatchedBridge/MessageQueue';
1211

13-
export default function ReplicatorStatusScreen() {
14-
//debug the message queue
15-
const spyMessageQueue = (message: any) => {
16-
if (
17-
message.type === 0 &&
18-
message.method === 'emit' &&
19-
message.module === 'RCTDeviceEventEmitter'
20-
) {
21-
console.log(`::MESSAGE-QUEUE:: ${message.args}`);
22-
}
23-
};
2412

13+
export default function ReplicatorStatusScreen() {
2514
const styles = useStyleScheme();
2615
const { statusChangeMessages, setStatusChangeMessages } = useContext(
2716
ReplicatorStatusChangeContext
@@ -40,8 +29,6 @@ export default function ReplicatorStatusScreen() {
4029
const replicatorId = replId.toString();
4130
setSelectedReplicatorId(replicatorId);
4231
try {
43-
//debug the message queue
44-
MessageQueue.spy(spyMessageQueue);
4532
const token = statusToken[replicatorId];
4633
if (token === undefined) {
4734
setInformationMessages((prev) => [

expo-example/ios/Podfile.lock

+67-67
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
PODS:
22
- boost (1.84.0)
3-
- cbl-reactnative (0.2.1):
3+
- cbl-reactnative (0.2.3):
44
- CouchbaseLite-Swift-Enterprise (= 3.2.1)
55
- DoubleConversion
66
- glog
@@ -2185,93 +2185,93 @@ EXTERNAL SOURCES:
21852185

21862186
SPEC CHECKSUMS:
21872187
boost: 1dca942403ed9342f98334bf4c3621f011aa7946
2188-
cbl-reactnative: dc6c2f40c22c456b3c26952f7cc7815a3ce34318
2188+
cbl-reactnative: aec81403856ac5f91d3792b18da6a67551402f76
21892189
CouchbaseLite-Swift-Enterprise: 6a1eddeed0b450d00d2336bcf60c9a71e228f0e4
21902190
DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385
2191-
EXConstants: dd2fe64c6cdb1383b694c309a63028a8e9f2be6d
2191+
EXConstants: 277129d9a42ba2cf1fad375e7eaa9939005c60be
21922192
EXJSONUtils: 01fc7492b66c234e395dcffdd5f53439c5c29c93
2193-
EXManifests: f30a0c5d3d6cad8db9c01bab579e0aa0df5d3cb2
2194-
Expo: 148aac4ce0da148c63447d09ae41ddb153f35506
2195-
expo-dev-client: 8c99b4979086a27f19e773e96ef10219102a5c4f
2196-
expo-dev-launcher: 6a9b0c2e95bcf9cff57a59f7b39bcd7d4b9fb0d1
2197-
expo-dev-menu: cba09bf0b6a97b8297434eb2cdc44106aaf51c11
2193+
EXManifests: 8de88191fe548cd5aeafa4228ed92283b483b923
2194+
Expo: 8948e8e417f699ed125a80389e150aabbae404bf
2195+
expo-dev-client: efd9785534d9facffebd23bb9d105e5eb71fd04f
2196+
expo-dev-launcher: 4f0e42fcb65ad340370ff2fe23df9791b22ec502
2197+
expo-dev-menu: 0755441fcaa71f7094cefd2cebab1c0de0dfad33
21982198
expo-dev-menu-interface: 4baf2f8b3b79ce37cf4b900e4b3ba6df3384f0a1
2199-
ExpoAsset: 8138f2a9ec55ae1ad7c3871448379f7d97692d15
2200-
ExpoFileSystem: dc2679a2b5d4c465ca881129074da95faee943d5
2201-
ExpoFont: 7522d869d84ee2ee8093ee997fef5b86f85d856b
2202-
ExpoHead: a623db43433938dcfbd6a38c27381055d01a0f3a
2203-
ExpoKeepAwake: 783e68647b969b210a786047c3daa7b753dcac1f
2204-
ExpoLinking: a8332a219379ba80f8e612d5a5de4a3da446886e
2205-
ExpoModulesCore: f71914f0725f2f4ca7a8d25dc551263e730d5d7f
2206-
ExpoRandom: 099ddce39b39ffb984b45118d031e8713e962a50
2207-
ExpoSplashScreen: 47a5c337586329223b70b5ef777d34c1f9edf412
2208-
ExpoSystemUI: 97ec8f20af5e8ca18d3191c5c72e8a04e6e2f02d
2209-
ExpoWebBrowser: f08aaf1c8a02af8a768d83793186cb6d2c69f529
2210-
EXUpdatesInterface: 1dcebac98ac5dad4289e6ff2bd5616822e894397
2199+
ExpoAsset: 6f7a8887cbb9fb39fdb0808e7f6f74ba0e1ae9b6
2200+
ExpoFileSystem: 83da9dbce2371cc72c3a3ef49e0df54a117310f1
2201+
ExpoFont: 12b0217e42ac97029d0f317f0486039a8508cf52
2202+
ExpoHead: 8f54ac800b3ef60095313aa49f091c9c94c7304e
2203+
ExpoKeepAwake: 22173f45d767c7d37403fdf48292726901d69ce7
2204+
ExpoLinking: 40e30b571ffb77b280a38bed137d89b21f46f2a0
2205+
ExpoModulesCore: aae34f5458cf6ce1632f17f00de0f10d8552d954
2206+
ExpoRandom: d1444df65007bdd4070009efd5dab18e20bf0f00
2207+
ExpoSplashScreen: a86597b744a79c9d26da9317a1f8d894b0bc846c
2208+
ExpoSystemUI: 018496c0221ae4993cfc56b14e723af8c9a5aa22
2209+
ExpoWebBrowser: b658ba8a9161f1b54afb279591cfce2cb73330fa
2210+
EXUpdatesInterface: 7c977640bdd8b85833c19e3959ba46145c5719db
22112211
FBLazyVector: be7314029d6ec6b90f0f75ce1195b8130ed9ac4f
22122212
fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be
22132213
glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a
22142214
hermes-engine: 0555a84ea495e8e3b4bde71b597cd87fbb382888
2215-
RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648
2215+
RCT-Folly: 84578c8756030547307e4572ab1947de1685c599
22162216
RCTDeprecation: 2c5e1000b04ab70b53956aa498bf7442c3c6e497
22172217
RCTRequired: 5f785a001cf68a551c5f5040fb4c415672dbb481
22182218
RCTTypeSafety: 6b98db8965005d32449605c0d005ecb4fee8a0f7
22192219
React: 8077bf7c185afb515be82518507e16f71a247a5e
22202220
React-callinvoker: 519eee9520727805e2867a6d8dad4ebbeed543db
2221-
React-Core: e364ceda7d086c7d14adeec0eb880a90073e3dde
2222-
React-CoreModules: 291be650024d9db086c95fd1d7e7d9607c6de62b
2223-
React-cxxreact: 5cf17d13ca0fc0734e1bb0ed9615d1d1fc45ef78
2221+
React-Core: 14708d0ebf0f961647347a7ae9cebcfaa75c99aa
2222+
React-CoreModules: 42b62e50cb4ac9a8ca92b48b263355cebcc1a523
2223+
React-cxxreact: 846f1d9eb37a3dec19738d195d313deb7e9ee36b
22242224
React-debug: 931ca94abd6b1bcab539e356e20df788afecae8f
2225-
React-defaultsnativemodule: fa1917ffdbb17e2a03f9a2b26e6f7342f59662c0
2226-
React-domnativemodule: c9dcbf0a872f3d02210f005c084d0fc1fdb83f2d
2227-
React-Fabric: e1774fe4b579e34c2c5721e9351c8ce869e7b5f0
2228-
React-FabricComponents: 528ff9f96d150379ed404221d70cc7019ca76865
2229-
React-FabricImage: 31680b7ddc740e040277176fbd6541fcf0fd44af
2225+
React-defaultsnativemodule: 6f56c95a8cd7b7fcfa6f983b19270753000c1a4e
2226+
React-domnativemodule: 42711869923d77713e8d090f489580c330ff2033
2227+
React-Fabric: 2709bcae28c5b567337b3bad4ec1aa8b81aa1241
2228+
React-FabricComponents: f35e150acf873109d244bd8c4535425d51f26672
2229+
React-FabricImage: 6dd7af0496dae7924553f8b3cd2b134d86256a48
22302230
React-featureflags: 7c7a74b65ee5a228f520b387ebfe0e8d9cecc622
2231-
React-featureflagsnativemodule: bc298d49634a5b2e0576b9bda6a0dc337ef158f8
2232-
React-graphics: 7f0d3e06d356e8476bd8ba95d90762fc01138ebc
2233-
React-hermes: f83fafe6a1c845dace7abad4a5d7366cbb42ab96
2234-
React-idlecallbacksnativemodule: 733deb5f645226868cf49a0eb798c62082a3fb34
2235-
React-ImageManager: 2b9274ea973f43597a554a182d7ef525836172c6
2236-
React-jserrorhandler: 3b521485275d295cfc6ec6bfa921a1d608693ecf
2237-
React-jsi: fd23c1d759feb709784fd4c835b510b90a94dd12
2238-
React-jsiexecutor: 74628d57accc03d4b5df53db813ef6dcd704c9ae
2239-
React-jsinspector: 89a1e27e97c762de81bd4b9cb1314750304bba38
2240-
React-jsitracing: 11b6646d7b2ecdc7a475f65b2cb12d3805964195
2241-
React-logger: 26155dc23db5c9038794db915f80bd2044512c2e
2242-
React-Mapbuffer: ad1ba0205205a16dbff11b8ade6d1b3959451658
2243-
React-microtasksnativemodule: 36e3a415c6a3a5c4784b5c6bad38013b8ca35be4
2244-
react-native-safe-area-context: 4532f1a0c5d34a46b9324ccaaedcb5582a302b7d
2231+
React-featureflagsnativemodule: 2e98d69110ccee1cf10acafad34041940457545c
2232+
React-graphics: ba13cb82b71ec2e0ad9dac2ae31867b5656d5a28
2233+
React-hermes: 4bfb5c90304c4d2aa36b3404ddd00df591dcae8a
2234+
React-idlecallbacksnativemodule: 4a77976e6b6d74ebe2008ade2e46c69484a69f45
2235+
React-ImageManager: 0464b2fac74d9d06d44abc3e85035424fc0d1a70
2236+
React-jserrorhandler: 4c8ee0547d89d1bfe9cd740ca83d229934cc94e4
2237+
React-jsi: 927e83b5aef299ca42842cd1ad696c4cf301d5eb
2238+
React-jsiexecutor: ba6b1fbaa388a99fcfb750529fed3ce65efbda4f
2239+
React-jsinspector: 1f9f161bf0961df50d2843802a431eb4fd4059cf
2240+
React-jsitracing: f6f65398e2d58bd24523ba210b277681e9cf2ee0
2241+
React-logger: 2736a90a3fdaed3dab1e2e9c5a5e9b3be00c287d
2242+
React-Mapbuffer: bd6a2ffbf401f11cfc8b5e8f38acab9fe117620c
2243+
React-microtasksnativemodule: e3e161b03573a22cf4e05434fe5309c7847ef197
2244+
react-native-safe-area-context: b13be9714d9771fbde0120bc519c963484de3a71
22452245
React-nativeconfig: aeed6e2a8ac02b2df54476afcc7c663416c12bf7
2246-
React-NativeModulesApple: c5b7813da94136f50ef084fa1ac077332dcfc658
2247-
React-perflogger: 6afb7eebf7d9521cc70481688ccddf212970e9d3
2248-
React-performancetimeline: 81884d35896b22d51832e7c8748c8330ec73c491
2246+
React-NativeModulesApple: c0783e5e21c71aa2764ac33120abc96208466fa6
2247+
React-perflogger: 2991d4258277af250eb7a2705980ebb3ef9ba85e
2248+
React-performancetimeline: 76a55d0be7293adfce8603eafb8dbae92234352d
22492249
React-RCTActionSheet: c940a35d71686941ac2b96dd07bde11ea0f0c34f
2250-
React-RCTAnimation: e1dbb4e530d6f58437ab2fae372de3788ecdffab
2251-
React-RCTAppDelegate: 3aa8a7b8bff5afcc00f947471c2fc93bd2093de5
2252-
React-RCTBlob: 9cdac4721a76e2d132fb1760eafd0a8f150d1c96
2253-
React-RCTFabric: b833ecb9bb715858731f658accae0804bd2f4a7b
2254-
React-RCTImage: f09f5165807e1a69a2bbac6c7168a8ed57ed4e26
2255-
React-RCTLinking: 4ea06b79cba7e15d8af4d86b1dcede6bd29a47fd
2256-
React-RCTNetwork: 43a38148c7a4a2380e76b08f07f02ee8eaac8965
2257-
React-RCTSettings: cc60bb6b38eed0683696b5ddf45b0a4a1441147b
2258-
React-RCTText: fbe5e6e886beefd5d432790bc50b7aa2b6504264
2259-
React-RCTVibration: 061dbf7a0a1e77bfc1c4672e7be6884dc12f18bf
2250+
React-RCTAnimation: db10ffa5b463794089b5319818f1df1e0b996422
2251+
React-RCTAppDelegate: c398e067ecde4909eab8b48adf06bf03783cd335
2252+
React-RCTBlob: 2ede907cfc8039c5f5da32b3ba9e144b663c3c98
2253+
React-RCTFabric: 9612452b193ce3daa3a05fdbeba4ffea756b17f8
2254+
React-RCTImage: 3d6b5cc404c62d2b2cd767061a56bd48b4300f5e
2255+
React-RCTLinking: 548cf5c3fe935f3d0c8df5dc3c234283df48cea6
2256+
React-RCTNetwork: 59f683fee79f9187b8ee4c270343b474ad37b42c
2257+
React-RCTSettings: b14bd94b2ac87c803375a0873746ef31c7b0eead
2258+
React-RCTText: 24e7a9b64341d6a1c98e1eabc5471b88c8bc61f1
2259+
React-RCTVibration: 2830b19dca45d23dc61b3c93c25fbc7b85979202
22602260
React-rendererconsistency: 52b471890a1946991f2db81aa6867b14d93f4ea5
2261-
React-rendererdebug: 3f63479f704e266a3bf104c897315a885c72859b
2261+
React-rendererdebug: c2496eb27c25d367b7e80a8a4a1babc21b6cc64b
22622262
React-rncore: 33ea67bfd2eeaa4f4a0c9e0e8bd55e9b7ccb9faa
2263-
React-RuntimeApple: bcd91a191637ab5895593135de74ac54bf88df5d
2264-
React-RuntimeCore: 3a42a7f12f5f6cc4cb0e22446540165d204d7a15
2263+
React-RuntimeApple: 28bcdbce4517b9428ab127d42d7b6bfeb27eb69c
2264+
React-RuntimeCore: d629b37225984a26c57803d857c8357c839f3fef
22652265
React-runtimeexecutor: db3f17084ee7b71ab84912c527d428cc3a137841
2266-
React-RuntimeHermes: 91bcd6aeec4bab20cebd33cb8984e3825ccdc77e
2267-
React-runtimescheduler: 92a5a092ded9a9aaac765ac940d26b52bac48901
2266+
React-RuntimeHermes: 5d857268954776a1c6f0e0ecff1f7860806bb43b
2267+
React-runtimescheduler: 00be5844aa2c7d72fd47293e0798bb41462ecfee
22682268
React-timing: 54693ad0872f64127f7cb41675b1be4fd28ea4dc
2269-
React-utils: 2bcaf4f4dfe361344bce2fae428603d518488630
2270-
ReactCodegen: ae99a130606068ed40d1d9c0d5f25fda142a0647
2271-
ReactCommon: 89c87b343deacc8610b099ac764848f0ce937e3e
2272-
RNReanimated: 365e7d6c1ed443cf8e1b7ba4f0b15dd9f82f052a
2273-
RNScreens: b03d696c70cc5235ce4587fcc27ae1a93a48f98c
2274-
RNSVG: 3d2bdcaef51c8071880a9c0072fe324f4423a3ba
2269+
React-utils: ee370a52b08a000963af1a60c31e6c87a70620a5
2270+
ReactCodegen: 5148a0102fc8f0a1f9b05d955da886b44447679d
2271+
ReactCommon: b8485556b596ef2f44f59bc586113bda138fb804
2272+
RNReanimated: 929c26a706dfe1af8feee9f2cf78004394e4dd04
2273+
RNScreens: e21c8d32fe97737ecc30f1f21e7b6f69f341a1f5
2274+
RNSVG: bb4bfcb8ec723a6f34b074a1b7cd40ee35246fe5
22752275
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
22762276
Yoga: 3deb2471faa9916c8a82dda2a22d3fba2620ad37
22772277

expo-example/ios/expoexample.xcodeproj/project.pbxproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@
367367
);
368368
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
369369
PRODUCT_BUNDLE_IDENTIFIER = "com.couchbase.rn.expo-example";
370-
PRODUCT_NAME = "expoexample";
370+
PRODUCT_NAME = expoexample;
371371
SWIFT_OBJC_BRIDGING_HEADER = "expoexample/expoexample-Bridging-Header.h";
372372
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
373373
SWIFT_VERSION = 5.0;
@@ -395,7 +395,7 @@
395395
);
396396
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
397397
PRODUCT_BUNDLE_IDENTIFIER = "com.couchbase.rn.expo-example";
398-
PRODUCT_NAME = "expoexample";
398+
PRODUCT_NAME = expoexample;
399399
SWIFT_OBJC_BRIDGING_HEADER = "expoexample/expoexample-Bridging-Header.h";
400400
SWIFT_VERSION = 5.0;
401401
TARGETED_DEVICE_FAMILY = "1,2";

expo-example/package-lock.json

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

expo-example/providers/DatabaseProvider.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@ import ReplicatorContext from '@/providers/ReplicatorContext';
55
import ReplicatorStatusChangeContext from '@/providers/ReplicatorStatusChangeContext';
66
import ReplicatorDocumentChangeContext from '@/providers/ReplicationDocumentChangeContext';
77
import ReplicatorStatusTokenContext from './ReplicatorStatusTokenContext';
8+
import { NativeEventEmitter, NativeModules } from 'react-native';
89
type DatabaseProviderProps = {
910
children: ReactNode;
1011
};
1112

13+
const eventEmitter = new NativeEventEmitter(NativeModules.CblReactnative);
14+
15+
const engine = new CblReactNativeEngine(eventEmitter);
16+
engine.debugConsole = true; //very noisy, only use for debugging
17+
1218
const DatabaseProvider: React.FC<DatabaseProviderProps> = ({ children }) => {
1319
// State to store for database, replication, and reporting
1420
const [databases, setDatabases] = useState<Record<string, Database>>({});
@@ -44,9 +50,6 @@ const DatabaseProvider: React.FC<DatabaseProviderProps> = ({ children }) => {
4450
[documentChangeMessages, setDocumentChangeMessages]
4551
);
4652

47-
const engine = new CblReactNativeEngine();
48-
engine.debugConsole = true; //very noisy, only use for debugging
49-
5053
return (
5154
<DatabaseContext.Provider value={databasesValue}>
5255
<ReplicatorContext.Provider value={replicatorIdsValue}>

src/CblReactNativeEngine.tsx

+37-13
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,18 @@ export class CblReactNativeEngine implements ICoreEngine {
9595
}
9696
);
9797

98-
_eventEmitter = new NativeEventEmitter(this.CblReactNative);
98+
_eventEmitter: NativeEventEmitter;
9999

100-
constructor() {
100+
constructor(customEventEmitter?: NativeEventEmitter) {
101101
EngineLocator.registerEngine(EngineLocator.key, this);
102+
103+
if (customEventEmitter) {
104+
this.debugLog('Using provided custom event emitter');
105+
this._eventEmitter = customEventEmitter;
106+
return;
107+
}
108+
109+
this._eventEmitter = new NativeEventEmitter(this.CblReactNative);
102110
}
103111

104112
//private logging function
@@ -430,13 +438,17 @@ export class CblReactNativeEngine implements ICoreEngine {
430438
});
431439
}
432440

433-
// eslint-disable-next-line
434-
collection_RemoveChangeListener(args: CollectionChangeListenerArgs): Promise<void> {
441+
collection_RemoveChangeListener(
442+
// eslint-disable-next-line
443+
args: CollectionChangeListenerArgs
444+
): Promise<void> {
435445
return Promise.resolve(undefined);
436446
}
437447

438-
// eslint-disable-next-line
439-
collection_RemoveDocumentChangeListener(args: CollectionChangeListenerArgs): Promise<void> {
448+
collection_RemoveDocumentChangeListener(
449+
// eslint-disable-next-line
450+
args: CollectionChangeListenerArgs
451+
): Promise<void> {
440452
return Promise.resolve(undefined);
441453
}
442454

@@ -830,12 +842,18 @@ export class CblReactNativeEngine implements ICoreEngine {
830842
}
831843

832844
// eslint-disable-next-line
833-
file_GetFileNamesInDirectory(args: { path: string; }): Promise<{ files: string[] }> {
845+
file_GetFileNamesInDirectory(args: {
846+
path: string;
847+
}): Promise<{ files: string[] }> {
834848
return Promise.resolve({ files: [] });
835849
}
836850

837-
// eslint-disable-next-line
838-
query_AddChangeListener( args: QueryChangeListenerArgs, lcb: ListenerCallback): Promise<void> {
851+
query_AddChangeListener(
852+
// eslint-disable-next-line
853+
args: QueryChangeListenerArgs,
854+
// eslint-disable-next-line
855+
lcb: ListenerCallback
856+
): Promise<void> {
839857
return Promise.resolve(undefined);
840858
}
841859

@@ -875,8 +893,10 @@ export class CblReactNativeEngine implements ICoreEngine {
875893
});
876894
}
877895

878-
// eslint-disable-next-line
879-
query_RemoveChangeListener( args: QueryRemoveChangeListenerArgs): Promise<void> {
896+
query_RemoveChangeListener(
897+
// eslint-disable-next-line
898+
args: QueryRemoveChangeListenerArgs
899+
): Promise<void> {
880900
return Promise.resolve(undefined);
881901
}
882902

@@ -954,8 +974,12 @@ export class CblReactNativeEngine implements ICoreEngine {
954974
});
955975
}
956976

957-
// eslint-disable-next-line
958-
replicator_AddDocumentChangeListener(args: ReplicationChangeListenerArgs, lcb: ListenerCallback): Promise<void> {
977+
replicator_AddDocumentChangeListener(
978+
// eslint-disable-next-line
979+
args: ReplicationChangeListenerArgs,
980+
// eslint-disable-next-line
981+
lcb: ListenerCallback
982+
): Promise<void> {
959983
return Promise.resolve(undefined);
960984
}
961985

0 commit comments

Comments
 (0)