1 | import { NativeModules } from 'react-native';
|
2 | const NativeProxy = NativeModules.NativeUnimoduleProxy;
|
3 | const modulesConstantsKey = 'modulesConstants';
|
4 | const exportedMethodsKey = 'exportedMethods';
|
5 | const NativeModulesProxy = {};
|
6 | if (NativeProxy) {
|
7 | Object.keys(NativeProxy[exportedMethodsKey]).forEach(moduleName => {
|
8 | NativeModulesProxy[moduleName] = NativeProxy[modulesConstantsKey][moduleName] || {};
|
9 | NativeProxy[exportedMethodsKey][moduleName].forEach(methodInfo => {
|
10 | NativeModulesProxy[moduleName][methodInfo.name] = (...args) => {
|
11 | const { key, argumentsCount } = methodInfo;
|
12 | if (argumentsCount !== args.length) {
|
13 | return Promise.reject(new Error(`Native method ${moduleName}.${methodInfo.name} expects ${argumentsCount} ${argumentsCount === 1 ? 'argument' : 'arguments'} but received ${args.length}`));
|
14 | }
|
15 | return NativeProxy.callMethod(moduleName, key, args);
|
16 | };
|
17 | });
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 | NativeModulesProxy[moduleName].addListener = (...args) => NativeModules.UMReactNativeEventEmitter.addProxiedListener(moduleName, ...args);
|
24 | NativeModulesProxy[moduleName].removeListeners = (...args) => NativeModules.UMReactNativeEventEmitter.removeProxiedListeners(moduleName, ...args);
|
25 | });
|
26 | }
|
27 | else {
|
28 | console.warn(`The "UMNativeModulesProxy" native module is not exported through NativeModules; verify that @unimodules/react-native-adapter's native code is linked properly`);
|
29 | }
|
30 | export default NativeModulesProxy;
|
31 |
|
\ | No newline at end of file |