// // JSConsoleHelper.mm // VisionCamera // // Created by Marc Rousavy on 02.06.21. // Copyright © 2021 mrousavy. All rights reserved. // #import #import "JSConsoleHelper.h" #import #import #import #import #import "RCTBridge+runOnJS.h" @implementation JSConsoleHelper + (const char *) getLogFunctionNameForLogLevel:(RCTLogLevel)level { switch (level) { case RCTLogLevelTrace: return "trace"; case RCTLogLevelInfo: return "log"; case RCTLogLevelWarning: return "warn"; case RCTLogLevelError: case RCTLogLevelFatal: return "error"; } } + (ConsoleLogFunction) getLogFunctionForBridge:(RCTBridge*)bridge { RCTCxxBridge *cxxBridge = (RCTCxxBridge *)bridge; if (!cxxBridge.runtime) { return nil; } jsi::Runtime* jsiRuntime = (jsi::Runtime*)cxxBridge.runtime; return ^(RCTLogLevel level, NSString* message) { [bridge runOnJS:^{ if (jsiRuntime != nullptr) { jsi::Runtime& runtime = *jsiRuntime; auto logFunctionName = [JSConsoleHelper getLogFunctionNameForLogLevel:level]; try { auto console = runtime.global().getPropertyAsObject(runtime, "console"); auto log = console.getPropertyAsFunction(runtime, logFunctionName); log.call(runtime, jsi::String::createFromAscii(runtime, [message UTF8String])); } catch (jsi::JSError& jsError) { NSLog(@"%@", message); NSLog(@"Failed to call `console.%s`: %s", logFunctionName, jsError.getMessage().c_str()); } } }]; }; } @end