1380376eaSBartłomiej Klocek import Foundation
2380376eaSBartłomiej Klocek 
3380376eaSBartłomiej Klocek public class NativeModulesProxyModule: Module {
4380376eaSBartłomiej Klocek   public static let moduleName = "NativeModulesProxy"
5380376eaSBartłomiej Klocek 
definitionnull6380376eaSBartłomiej Klocek   public func definition() -> ModuleDefinition {
7380376eaSBartłomiej Klocek     Name(Self.moduleName)
8380376eaSBartłomiej Klocek 
9380376eaSBartłomiej Klocek     Constants { () -> [String: Any?] in
10380376eaSBartłomiej Klocek       guard let config = self.appContext?.legacyModulesProxy?.nativeModulesConfig else {
11380376eaSBartłomiej Klocek         // TODO: Throw, but what?
12380376eaSBartłomiej Klocek         return [:]
13380376eaSBartłomiej Klocek       }
14380376eaSBartłomiej Klocek       return config.toDictionary()
15380376eaSBartłomiej Klocek     }
16370e2621STomasz Sapeta 
17370e2621STomasz Sapeta     AsyncFunction("callMethod") { (moduleName: String, methodName: String, arguments: [Any], promise: Promise) in
18370e2621STomasz Sapeta       guard let appContext = self.appContext else {
19*7921b28aSTomasz Sapeta         return promise.reject(Exceptions.AppContextLost())
20370e2621STomasz Sapeta       }
21370e2621STomasz Sapeta 
22370e2621STomasz Sapeta       // Call a method on the new module if exists
23370e2621STomasz Sapeta       if appContext.hasModule(moduleName) {
24370e2621STomasz Sapeta         appContext.callFunction(methodName, onModule: moduleName, withArgs: arguments, resolve: promise.resolver, reject: promise.legacyRejecter)
25370e2621STomasz Sapeta         return
26370e2621STomasz Sapeta       }
27370e2621STomasz Sapeta 
28370e2621STomasz Sapeta       // Call a method on the legacy module
29370e2621STomasz Sapeta       guard let legacyModule = appContext.legacyModuleRegistry?.getExportedModule(forName: moduleName) else {
30370e2621STomasz Sapeta         return promise.reject(ModuleHolder.ModuleNotFoundException(moduleName))
31370e2621STomasz Sapeta       }
32370e2621STomasz Sapeta       legacyModule.methodQueue().async {
33370e2621STomasz Sapeta         legacyModule.callExportedMethod(methodName, withArguments: arguments, resolver: promise.resolver, rejecter: promise.legacyRejecter)
34370e2621STomasz Sapeta       }
35370e2621STomasz Sapeta     }
36380376eaSBartłomiej Klocek   }
37380376eaSBartłomiej Klocek }
38