diff --git a/firebase-firestore/api/android/firebase-firestore.api b/firebase-firestore/api/android/firebase-firestore.api index 8a0aa2e9a..3e0bf4cd7 100644 --- a/firebase-firestore/api/android/firebase-firestore.api +++ b/firebase-firestore/api/android/firebase-firestore.api @@ -730,7 +730,8 @@ public final class dev/gitlive/firebase/firestore/_encodersKt { } public final class dev/gitlive/firebase/firestore/android { - public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;)Ldev/gitlive/firebase/firestore/FirebaseFirestore; + public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;)Ldev/gitlive/firebase/firestore/FirebaseFirestore; + public static synthetic fun firestore$default (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestore; public static final fun firestoreSettings (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings; public static synthetic fun firestoreSettings$default (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings; public static final fun getAndroid (Ldev/gitlive/firebase/firestore/CollectionReference;)Lcom/google/firebase/firestore/CollectionReference; diff --git a/firebase-firestore/api/jvm/firebase-firestore.api b/firebase-firestore/api/jvm/firebase-firestore.api index 33a64aef7..bab3a265e 100644 --- a/firebase-firestore/api/jvm/firebase-firestore.api +++ b/firebase-firestore/api/jvm/firebase-firestore.api @@ -730,7 +730,8 @@ public final class dev/gitlive/firebase/firestore/_encodersKt { } public final class dev/gitlive/firebase/firestore/android { - public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;)Ldev/gitlive/firebase/firestore/FirebaseFirestore; + public static final fun firestore (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;)Ldev/gitlive/firebase/firestore/FirebaseFirestore; + public static synthetic fun firestore$default (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;Ljava/lang/String;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestore; public static final fun firestoreSettings (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings; public static synthetic fun firestoreSettings$default (Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/gitlive/firebase/firestore/FirebaseFirestoreSettings; public static final fun getAndroid (Ldev/gitlive/firebase/firestore/CollectionReference;)Lcom/google/firebase/firestore/CollectionReference; diff --git a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt index 01106caae..30fbc7ed6 100644 --- a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt +++ b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt @@ -36,8 +36,8 @@ public val FirebaseFirestore.android: AndroidFirebaseFirestore get() = AndroidFi public actual val Firebase.firestore: FirebaseFirestore get() = FirebaseFirestore(AndroidFirebaseFirestore.getInstance()) -public actual fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore = - FirebaseFirestore(AndroidFirebaseFirestore.getInstance(app.android)) +public actual fun Firebase.firestore(app: FirebaseApp, databaseId: String?): FirebaseFirestore = + FirebaseFirestore(databaseId?.let { AndroidFirebaseFirestore.getInstance(app.android, databaseId) } ?: AndroidFirebaseFirestore.getInstance(app.android)) public val LocalCacheSettings.android: AndroidLocalCacheSettings get() = when (this) { is LocalCacheSettings.Persistent -> androidPersistentCacheSettings { diff --git a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt index c3f08216a..78e0ffd50 100644 --- a/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt +++ b/firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt @@ -8,7 +8,7 @@ import dev.gitlive.firebase.firestore.android import kotlinx.coroutines.runBlocking import kotlinx.coroutines.tasks.await -internal actual class NativeFirebaseFirestoreWrapper actual constructor(actual val native: NativeFirebaseFirestore) { +internal actual class NativeFirebaseFirestoreWrapper actual constructor(actual val native: NativeFirebaseFirestore, actual val databaseId: String?) { actual fun collection(collectionPath: String) = native.collection(collectionPath) diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt index bf4723e49..736e413f3 100644 --- a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt +++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt @@ -32,7 +32,7 @@ import kotlin.jvm.JvmName public expect val Firebase.firestore: FirebaseFirestore /** Returns the [FirebaseFirestore] instance of a given [FirebaseApp]. */ -public expect fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore +public expect fun Firebase.firestore(app: FirebaseApp, databaseId: String? = null): FirebaseFirestore internal expect class NativeFirebaseFirestore diff --git a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt index b617deb45..fcc236c61 100644 --- a/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt +++ b/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt @@ -7,8 +7,9 @@ import dev.gitlive.firebase.firestore.NativeQuery import dev.gitlive.firebase.firestore.NativeTransaction import dev.gitlive.firebase.firestore.NativeWriteBatch -internal expect class NativeFirebaseFirestoreWrapper internal constructor(native: NativeFirebaseFirestore) { +internal expect class NativeFirebaseFirestoreWrapper internal constructor(native: NativeFirebaseFirestore, databaseId: String? = null) { val native: NativeFirebaseFirestore + val databaseId: String? fun collection(collectionPath: String): NativeCollectionReference fun collectionGroup(collectionId: String): NativeQuery diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt b/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt index 605281ec0..1740ec26e 100644 --- a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt +++ b/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt @@ -25,8 +25,8 @@ public val FirebaseFirestore.ios: FIRFirestore get() = FIRFirestore.firestore() public actual val Firebase.firestore: FirebaseFirestore get() = FirebaseFirestore(FIRFirestore.firestore()) -public actual fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore = FirebaseFirestore( - FIRFirestore.firestoreForApp(app.ios as objcnames.classes.FIRApp), +public actual fun Firebase.firestore(app: FirebaseApp, databaseId: String?): FirebaseFirestore = FirebaseFirestore( + databaseId?.let { FIRFirestore.firestoreForApp(app.ios as objcnames.classes.FIRApp, it) } ?: FIRFirestore.firestoreForApp(app.ios as objcnames.classes.FIRApp), ) public val LocalCacheSettings.ios: FIRLocalCacheSettingsProtocol get() = when (this) { diff --git a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt b/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt index 50e59c0ad..e3d9d269e 100644 --- a/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt +++ b/firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt @@ -9,7 +9,7 @@ import dev.gitlive.firebase.firestore.awaitResult import kotlinx.coroutines.runBlocking @Suppress("UNCHECKED_CAST") -internal actual class NativeFirebaseFirestoreWrapper internal actual constructor(actual val native: NativeFirebaseFirestore) { +internal actual class NativeFirebaseFirestoreWrapper internal actual constructor(actual val native: NativeFirebaseFirestore, actual val databaseId: String?) { actual fun collection(collectionPath: String) = native.collectionWithPath(collectionPath) diff --git a/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/externals/firestore.kt b/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/externals/firestore.kt index 31c110099..00d8de655 100644 --- a/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/externals/firestore.kt +++ b/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/externals/firestore.kt @@ -81,7 +81,7 @@ public external fun getDocsFromCache(query: Query): Promise public external fun getDocsFromServer(query: Query): Promise -public external fun getFirestore(app: FirebaseApp? = definedExternally): Firestore +public external fun getFirestore(app: FirebaseApp? = definedExternally, databaseId: String? = definedExternally): Firestore public external fun increment(n: Int): FieldValue diff --git a/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt b/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt index 752e53a3c..17c1b3b43 100644 --- a/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt +++ b/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt @@ -33,10 +33,10 @@ import dev.gitlive.firebase.firestore.externals.WriteBatch as JsWriteBatch import dev.gitlive.firebase.firestore.externals.documentId as jsDocumentId public actual val Firebase.firestore: FirebaseFirestore get() = - rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(getApp())) } + rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(getApp(), null)) } -public actual fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore = - rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(app.js)) } +public actual fun Firebase.firestore(app: FirebaseApp, databaseId: String?): FirebaseFirestore = + rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(app.js, databaseId)) } internal actual data class NativeFirebaseFirestore(val js: JsFirestore) diff --git a/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt b/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt index c8c1a31ae..224725946 100644 --- a/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt +++ b/firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt @@ -23,27 +23,30 @@ import kotlinx.coroutines.promise internal actual class NativeFirebaseFirestoreWrapper internal constructor( private val createNative: NativeFirebaseFirestoreWrapper.(FirebaseFirestoreSettings?) -> NativeFirebaseFirestore, + actual val databaseId: String?, ) { - internal actual constructor(native: NativeFirebaseFirestore) : this( + internal actual constructor(native: NativeFirebaseFirestore, databaseId: String?) : this( { settings -> settings?.let { - NativeFirebaseFirestore(initializeFirestore(native.js.app, settings)) + NativeFirebaseFirestore(initializeFirestore(native.js.app, settings, databaseId)) } ?: native }, + databaseId, ) - internal constructor(app: FirebaseApp) : this( + internal constructor(app: FirebaseApp, databaseId: String?) : this( { settings -> NativeFirebaseFirestore( settings?.let { - initializeFirestore(app, it.js).also { + initializeFirestore(app, it.js, databaseId).also { emulatorSettings?.run { connectFirestoreEmulator(it, host, port) } } - } ?: getFirestore(app), + } ?: getFirestore(app, databaseId), ) }, + databaseId, ) private data class EmulatorSettings(val host: String, val port: Int)