/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import "ShimRCTInstance.h" #import #import "RCTSwizzleHelpers.h" static __weak ShimRCTInstance *weakShim = nil; @implementation ShimRCTInstance - (instancetype)init { if (self = [super init]) { _initCount = 0; RCTSwizzleInstanceSelector( [RCTInstance class], [ShimRCTInstance class], @selector (initWithDelegate: jsRuntimeFactory:bundleManager:turboModuleManagerDelegate:moduleRegistry:parentInspectorTarget:launchOptions :devMenuConfiguration:)); RCTSwizzleInstanceSelector([RCTInstance class], [ShimRCTInstance class], @selector(invalidate)); RCTSwizzleInstanceSelector( [RCTInstance class], [ShimRCTInstance class], @selector(callFunctionOnJSModule:method:args:)); weakShim = self; } return self; } - (void)reset { RCTSwizzleInstanceSelector( [RCTInstance class], [ShimRCTInstance class], @selector (initWithDelegate: jsRuntimeFactory:bundleManager:turboModuleManagerDelegate:moduleRegistry:parentInspectorTarget:launchOptions :devMenuConfiguration:)); RCTSwizzleInstanceSelector([RCTInstance class], [ShimRCTInstance class], @selector(invalidate)); RCTSwizzleInstanceSelector( [RCTInstance class], [ShimRCTInstance class], @selector(callFunctionOnJSModule:method:args:)); _initCount = 0; _invalidateCount = 0; } - (instancetype)initWithDelegate:(id)delegate jsRuntimeFactory:(std::shared_ptr)jsRuntimeFactory bundleManager:(RCTBundleManager *)bundleManager turboModuleManagerDelegate:(id)tmmDelegate moduleRegistry:(RCTModuleRegistry *)moduleRegistry parentInspectorTarget:(facebook::react::jsinspector_modern::HostTarget *)parentInspectorTarget launchOptions:(NSDictionary *)launchOptions devMenuConfiguration:(RCTDevMenuConfiguration *)devMenuConfiguration { weakShim.initCount++; return self; } - (void)invalidate { weakShim.invalidateCount++; } - (void)callFunctionOnJSModule:(NSString *)moduleName method:(NSString *)method args:(NSArray *)args { weakShim.jsModuleName = moduleName; weakShim.method = method; weakShim.args = [args copy]; } @end