1616#import < ReactCommon/RCTTurboModule.h>
1717
1818#import < jsi/jsi.h>
19+ #import < react/bridging/Function.h>
1920
2021#import < NativeAppleLLM/NativeAppleLLM.h>
2122
@@ -25,6 +26,7 @@ @interface AppleTranscription : NativeAppleTranscriptionSpecBase <NativeAppleTra
2526
2627using namespace facebook ;
2728using namespace JS ::NativeAppleLLM;
29+ using namespace react ;
2830
2931@implementation AppleTranscription
3032
@@ -45,19 +47,15 @@ + (NSString *)moduleName {
4547- (void )installTranscribeFunc : (std::shared_ptr<facebook::react::CallInvoker>)jsInvoker {
4648 AppleTranscriptionImpl *transcriptionModule = _transcription;
4749
48- auto runOnJS = [jsInvoker](std::function<void ()>&& f) {
49- jsInvoker->invokeAsync (std::move (f));
50- };
51-
52- jsInvoker->invokeAsync ([transcriptionModule, runOnJS](jsi::Runtime& rt) {
50+ jsInvoker->invokeAsync ([transcriptionModule, jsInvoker](jsi::Runtime& rt) {
5351 @try {
5452 auto global = rt.global ();
5553
5654 auto transcribeFunc = jsi::Function::createFromHostFunction (
5755 rt,
5856 jsi::PropNameID::forAscii (rt, " transcribe" ),
5957 2 ,
60- [transcriptionModule, runOnJS ](jsi::Runtime& rt, const jsi::Value& thisVal, const jsi::Value* args, size_t count) -> jsi::Value {
58+ [transcriptionModule, jsInvoker ](jsi::Runtime& rt, const jsi::Value& thisVal, const jsi::Value* args, size_t count) -> jsi::Value {
6159 auto arrayBuffer = args[0 ].asObject (rt);
6260 if (!arrayBuffer.isArrayBuffer (rt)) {
6361 throw jsi::JSError (rt, " First argument must be an ArrayBuffer" );
@@ -75,23 +73,24 @@ - (void)installTranscribeFunc:(std::shared_ptr<facebook::react::CallInvoker>)jsI
7573 rt,
7674 jsi::PropNameID::forAscii (rt, " executor" ),
7775 2 ,
78- [transcriptionModule, audioData, language, runOnJS](jsi::Runtime& rt, const jsi::Value& thisVal, const jsi::Value* args, size_t count) -> jsi::Value {
79- auto resolve = std::make_shared<jsi::Function>(args[0 ].asObject (rt).asFunction (rt));
80- auto reject = std::make_shared<jsi::Function>(args[1 ].asObject (rt).asFunction (rt));
76+ [transcriptionModule, audioData, language, jsInvoker](jsi::Runtime& rt, const jsi::Value& thisVal, const jsi::Value* args, size_t count) -> jsi::Value {
77+ using ResolveCallback = facebook::react::AsyncCallback<>;
78+ using RejectCallback = facebook::react::AsyncCallback<NSString *, NSString *, NSError *>;
79+
80+ auto resolve = ResolveCallback (rt, args[0 ].asObject (rt).asFunction (rt), jsInvoker);
81+ auto reject = RejectCallback (rt, args[1 ].asObject (rt).asFunction (rt), jsInvoker);
8182
82- [transcriptionModule transcribe: audioData
83- language: language
84- resolve: ^(id result) {
85- runOnJS ([resolve, result, &rt]() {
86- auto jsResult = react::TurboModuleConvertUtils::convertObjCObjectToJSIValue (rt, result);
87- resolve->call (rt, jsResult);
88- });
89- } reject: ^(NSString *code, NSString *message, NSError *error) {
90- runOnJS ([reject, message, &rt]() {
91- auto jsError = jsi::String::createFromUtf8 (rt, [message UTF8String ]);
92- reject->call (rt, jsError);
93- });
94- }];
83+ [transcriptionModule transcribe: audioData language: language resolve: ^(id result) {
84+ resolve.call ([result](jsi::Runtime& rt, jsi::Function& resolveFunc) {
85+ auto jsResult = react::TurboModuleConvertUtils::convertObjCObjectToJSIValue (rt, result);
86+ resolveFunc.call (rt, jsResult);
87+ });
88+ } reject: ^(NSString *code, NSString *message, NSError *error) {
89+ reject.call ([message](jsi::Runtime& rt, jsi::Function& rejectFunc) {
90+ auto jsError = jsi::String::createFromUtf8 (rt, [message UTF8String ]);
91+ rejectFunc.call (rt, jsError);
92+ });
93+ }];
9594
9695 return jsi::Value::undefined ();
9796 }
0 commit comments