guardia-messenger/node_modules/expo-modules-core/ios/JSI/EXJSIInstaller.mm
DESKTOP-TKLFCPRython f29f525c77 refactor: 101.79.17.164 → zioinfo.co.kr 전체 도메인 변환 + Manager UI 배포
- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스)
- Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포
- 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 10:09:17 +09:00

112 lines
3.8 KiB
Plaintext

// Copyright 2018-present 650 Industries. All rights reserved.
#if __has_include(<ReactCommon/RCTRuntimeExecutor.h>)
#import <ReactCommon/RCTRuntimeExecutor.h>
#endif // React Native >=0.74
#import <ExpoModulesCore/EXJSIInstaller.h>
#import <ExpoModulesCore/EXJavaScriptRuntime.h>
#import <ExpoModulesCore/ExpoModulesHostObject.h>
#import <ExpoModulesCore/BridgelessJSCallInvoker.h>
#import <ExpoModulesCore/LazyObject.h>
#import <ExpoModulesCore/SharedObject.h>
#import <ExpoModulesCore/EventEmitter.h>
#import <ExpoModulesCore/NativeModule.h>
#import <ExpoModulesCore/Swift.h>
namespace jsi = facebook::jsi;
/**
Property name of the core object in the global scope of the Expo JS runtime.
*/
NSString *const EXGlobalCoreObjectPropertyName = @"expo";
/**
Property name used to define the modules host object in the main object of the Expo JS runtime.
*/
static NSString *modulesHostObjectPropertyName = @"modules";
@interface RCTBridge (ExpoBridgeWithRuntime)
- (void *)runtime;
- (std::shared_ptr<facebook::react::CallInvoker>)jsCallInvoker;
@end
@implementation EXJavaScriptRuntimeManager
+ (nullable EXRuntime *)runtimeFromBridge:(nonnull RCTBridge *)bridge
{
jsi::Runtime *jsiRuntime = reinterpret_cast<jsi::Runtime *>(bridge.runtime);
return jsiRuntime ? [[EXRuntime alloc] initWithRuntime:jsiRuntime callInvoker:bridge.jsCallInvoker] : nil;
}
#if __has_include(<ReactCommon/RCTRuntimeExecutor.h>)
+ (nullable EXRuntime *)runtimeFromBridge:(nonnull RCTBridge *)bridge withExecutor:(nonnull RCTRuntimeExecutor *)executor
{
jsi::Runtime *jsiRuntime = reinterpret_cast<jsi::Runtime *>(bridge.runtime);
// Create a call invoker based on the given runtime executor.
auto callInvoker = std::make_shared<expo::BridgelessJSCallInvoker>([executor](std::function<void(jsi::Runtime &runtime)> &&callback) {
// Convert to Objective-C block so it can be captured properly.
__block auto callbackBlock = callback;
[executor execute:^(jsi::Runtime &runtime) {
callbackBlock(runtime);
}];
});
return jsiRuntime ? [[EXRuntime alloc] initWithRuntime:jsiRuntime callInvoker:callInvoker] : nil;
}
#endif // React Native >=0.74
#pragma mark - Installing JSI bindings
+ (BOOL)installExpoModulesHostObject:(nonnull EXAppContext *)appContext
{
EXRuntime *runtime = [appContext _runtime];
// The runtime may be unavailable, e.g. remote debugger is enabled or it hasn't been set yet.
if (!runtime) {
return false;
}
EXJavaScriptObject *global = [runtime global];
EXJavaScriptValue *coreProperty = [global getProperty:EXGlobalCoreObjectPropertyName];
NSAssert([coreProperty isObject], @"The global core property should be an object");
EXJavaScriptObject *coreObject = [coreProperty getObject];
if ([coreObject hasProperty:modulesHostObjectPropertyName]) {
return false;
}
std::shared_ptr<expo::ExpoModulesHostObject> modulesHostObjectPtr = std::make_shared<expo::ExpoModulesHostObject>(appContext);
EXJavaScriptObject *modulesHostObject = [runtime createHostObject:modulesHostObjectPtr];
// Define the `global.expo.modules` object as a non-configurable, read-only and enumerable property.
[coreObject defineProperty:modulesHostObjectPropertyName
value:modulesHostObject
options:EXJavaScriptObjectPropertyDescriptorEnumerable];
return true;
}
+ (void)installSharedObjectClass:(nonnull EXRuntime *)runtime releaser:(void(^)(long))releaser
{
expo::SharedObject::installBaseClass(*[runtime get], [releaser](expo::SharedObject::ObjectId objectId) {
releaser(objectId);
});
}
+ (void)installEventEmitterClass:(nonnull EXRuntime *)runtime
{
expo::EventEmitter::installClass(*[runtime get]);
}
+ (void)installNativeModuleClass:(nonnull EXRuntime *)runtime
{
expo::NativeModule::installClass(*[runtime get]);
}
@end