expo-modules-core 1.1.1 → 1.2.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 +18 -0
- package/android/CMakeLists.txt +9 -25
- package/android/ExpoModulesCorePlugin.gradle +0 -1
- package/android/build.gradle +13 -22
- package/android/legacy/CMakeLists.txt +2 -0
- package/android/src/fabric/CMakeLists.txt +12 -9
- package/android/src/main/cpp/JavaReferencesCache.cpp +6 -0
- package/android/src/main/cpp/JavaReferencesCache.h +20 -6
- package/android/src/main/cpp/JavaScriptModuleObject.cpp +9 -9
- package/android/src/main/cpp/JavaScriptModuleObject.h +5 -3
- package/android/src/main/cpp/JavaScriptRuntime.cpp +4 -0
- package/android/src/main/cpp/MethodMetadata.cpp +13 -2
- package/android/src/main/cpp/types/CppType.h +12 -11
- package/android/src/main/cpp/types/FrontendConverter.cpp +23 -0
- package/android/src/main/cpp/types/FrontendConverter.h +15 -0
- package/android/src/main/cpp/types/FrontendConverterProvider.cpp +1 -0
- package/android/src/main/java/expo/modules/kotlin/DynamicExtenstions.kt +3 -0
- package/android/src/main/java/expo/modules/kotlin/exception/CodedException.kt +8 -2
- package/android/src/main/java/expo/modules/kotlin/functions/AnyFunction.kt +35 -24
- package/android/src/main/java/expo/modules/kotlin/jni/CppType.kt +1 -0
- package/android/src/main/java/expo/modules/kotlin/jni/JavaScriptValue.kt +4 -0
- package/android/src/main/java/expo/modules/kotlin/modules/ModuleDefinitionData.kt +1 -4
- package/android/src/main/java/expo/modules/kotlin/objects/ObjectDefinitionBuilder.kt +30 -0
- package/android/src/main/java/expo/modules/kotlin/objects/ObjectDefinitionData.kt +5 -1
- package/android/src/main/java/expo/modules/kotlin/types/JSTypeConverter.kt +1 -0
- package/android/src/main/java/expo/modules/kotlin/types/TypeConverterProvider.kt +6 -0
- package/android/src/main/java/expo/modules/kotlin/views/AnyViewProp.kt +2 -0
- package/android/src/main/java/expo/modules/kotlin/views/ConcreteViewProp.kt +2 -0
- package/android/src/main/java/expo/modules/kotlin/views/ViewDefinitionBuilder.kt +56 -6
- package/android/src/main/java/expo/modules/kotlin/views/ViewGroupDefinitionBuilder.kt +73 -1
- package/android/src/main/java/expo/modules/kotlin/views/ViewManagerDefinition.kt +20 -16
- package/android/src/main/java/expo/modules/kotlin/views/ViewManagerDefinitionBuilder.kt +2 -2
- package/build/NativeViewManagerAdapter.native.d.ts.map +1 -1
- package/build/NativeViewManagerAdapter.native.js +19 -1
- package/build/NativeViewManagerAdapter.native.js.map +1 -1
- package/build/SyntheticPlatformEmitter.d.ts +1 -1
- package/build/SyntheticPlatformEmitter.d.ts.map +1 -1
- package/build/SyntheticPlatformEmitter.js +1 -1
- package/build/SyntheticPlatformEmitter.js.map +1 -1
- package/ios/Fabric/ExpoFabricView.swift +6 -6
- package/ios/Fabric/ExpoFabricViewObjC.h +1 -1
- package/ios/Fabric/ExpoFabricViewObjC.mm +3 -9
- package/ios/Swift/ExpoBridgeModule.swift +23 -2
- package/ios/Swift/Views/ViewModuleWrapper.swift +7 -9
- package/package.json +2 -2
- package/src/NativeViewManagerAdapter.native.tsx +23 -2
- package/src/SyntheticPlatformEmitter.ts +1 -1
- package/build/SyntheticPlatformEmitter.web.d.ts +0 -6
- package/build/SyntheticPlatformEmitter.web.d.ts.map +0 -1
- package/build/SyntheticPlatformEmitter.web.js +0 -6
- package/build/SyntheticPlatformEmitter.web.js.map +0 -1
- package/src/SyntheticPlatformEmitter.web.ts +0 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { NativeModules, requireNativeComponent } from 'react-native';
|
|
2
|
+
import { NativeModules, requireNativeComponent, HostComponent } from 'react-native';
|
|
3
3
|
|
|
4
4
|
// To make the transition from React Native's `requireNativeComponent` to Expo's
|
|
5
5
|
// `requireNativeViewManager` as easy as possible, `requireNativeViewManager` is a drop-in
|
|
@@ -14,6 +14,27 @@ type NativeExpoComponentProps = {
|
|
|
14
14
|
proxiedProperties: object;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* A map that caches registered native components.
|
|
19
|
+
*/
|
|
20
|
+
const nativeComponentsCache = new Map<string, HostComponent<any>>();
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Requires a React Native component from cache if possible. This prevents
|
|
24
|
+
* "Tried to register two views with the same name" errors on fast refresh, but
|
|
25
|
+
* also when there are multiple versions of the same package with native component.
|
|
26
|
+
*/
|
|
27
|
+
function requireCachedNativeComponent<Props>(viewName: string): HostComponent<Props> {
|
|
28
|
+
const cachedNativeComponent = nativeComponentsCache.get(viewName);
|
|
29
|
+
|
|
30
|
+
if (!cachedNativeComponent) {
|
|
31
|
+
const nativeComponent = requireNativeComponent<Props>(viewName);
|
|
32
|
+
nativeComponentsCache.set(viewName, nativeComponent);
|
|
33
|
+
return nativeComponent;
|
|
34
|
+
}
|
|
35
|
+
return cachedNativeComponent;
|
|
36
|
+
}
|
|
37
|
+
|
|
17
38
|
/**
|
|
18
39
|
* A drop-in replacement for `requireNativeComponent`.
|
|
19
40
|
*/
|
|
@@ -32,7 +53,7 @@ export function requireNativeViewManager<P>(viewName: string): React.ComponentTy
|
|
|
32
53
|
// manager
|
|
33
54
|
const reactNativeViewName = `ViewManagerAdapter_${viewName}`;
|
|
34
55
|
const ReactNativeComponent =
|
|
35
|
-
|
|
56
|
+
requireCachedNativeComponent<NativeExpoComponentProps>(reactNativeViewName);
|
|
36
57
|
const proxiedPropsNames = viewManagerConfig?.propsNames ?? [];
|
|
37
58
|
|
|
38
59
|
// Define a component for universal-module authors to access their native view manager
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* This emitter is used for sending synthetic native events to listeners
|
|
3
3
|
* registered in the API layer with `NativeEventEmitter`.
|
|
4
4
|
*/
|
|
5
|
-
export { default } from 'react-native
|
|
5
|
+
export { DeviceEventEmitter as default } from 'react-native';
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This emitter is used for sending synthetic native events to listeners
|
|
3
|
-
* registered in the API layer with `NativeEventEmitter`.
|
|
4
|
-
*/
|
|
5
|
-
export { default } from 'react-native-web/dist/vendor/react-native/NativeEventEmitter/RCTDeviceEventEmitter';
|
|
6
|
-
//# sourceMappingURL=SyntheticPlatformEmitter.web.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SyntheticPlatformEmitter.web.d.ts","sourceRoot":"","sources":["../src/SyntheticPlatformEmitter.web.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,oFAAoF,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This emitter is used for sending synthetic native events to listeners
|
|
3
|
-
* registered in the API layer with `NativeEventEmitter`.
|
|
4
|
-
*/
|
|
5
|
-
export { default } from 'react-native-web/dist/vendor/react-native/NativeEventEmitter/RCTDeviceEventEmitter';
|
|
6
|
-
//# sourceMappingURL=SyntheticPlatformEmitter.web.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SyntheticPlatformEmitter.web.js","sourceRoot":"","sources":["../src/SyntheticPlatformEmitter.web.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,oFAAoF,CAAC","sourcesContent":["/**\n * This emitter is used for sending synthetic native events to listeners\n * registered in the API layer with `NativeEventEmitter`.\n */\nexport { default } from 'react-native-web/dist/vendor/react-native/NativeEventEmitter/RCTDeviceEventEmitter';\n"]}
|