1 package expo.modules.devlauncher.koin
2 
3 import expo.modules.devlauncher.helpers.DevLauncherInstallationIDHelper
4 import expo.modules.devlauncher.launcher.DevLauncherIntentRegistry
5 import expo.modules.devlauncher.launcher.DevLauncherIntentRegistryInterface
6 import expo.modules.devlauncher.launcher.DevLauncherLifecycle
7 import expo.modules.devlauncher.launcher.loaders.DevLauncherAppLoaderFactory
8 import expo.modules.devlauncher.launcher.loaders.DevLauncherAppLoaderFactoryInterface
9 import expo.modules.devlauncher.tests.DevLauncherDisabledTestInterceptor
10 import expo.modules.devlauncher.tests.DevLauncherTestInterceptor
11 import okhttp3.OkHttpClient
12 import org.koin.core.KoinApplication
13 import org.koin.dsl.koinApplication
14 import org.koin.dsl.module
15 
<lambda>null16 val DevLauncherTestModule = module {
17   single<DevLauncherTestInterceptor> { DevLauncherDisabledTestInterceptor() }
18 }
19 
<lambda>null20 val DevLauncherBaseModule = module {
21   single<DevLauncherIntentRegistryInterface> { DevLauncherIntentRegistry() }
22   single { OkHttpClient() }
23   single { DevLauncherLifecycle() }
24   single { DevLauncherInstallationIDHelper() }
25   factory<DevLauncherAppLoaderFactoryInterface> { DevLauncherAppLoaderFactory() }
26 }
27 
<lambda>null28 private val koinAppFactory = {
29   koinApplication {
30     modules(DevLauncherBaseModule, DevLauncherTestModule)
31   }
32 }
33 
34 object DevLauncherKoinContext {
35   private var internalApp: KoinApplication = koinAppFactory()
36 
reinitializenull37   fun reinitialize() {
38     internalApp.close()
39     internalApp = koinAppFactory()
40   }
41 
42   val app: KoinApplication
43     get() = internalApp
44 }
45 
devLauncherKoinnull46 fun devLauncherKoin() = DevLauncherKoinContext.app.koin
47