Skip to content

Firestore: support for specifying databaseId #698

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion firebase-firestore/api/android/firebase-firestore.api
Original file line number Diff line number Diff line change
@@ -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;
3 changes: 2 additions & 1 deletion firebase-firestore/api/jvm/firebase-firestore.api
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
@@ -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 {
Original file line number Diff line number Diff line change
@@ -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)

Original file line number Diff line number Diff line change
@@ -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

Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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) {
Original file line number Diff line number Diff line change
@@ -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)

Original file line number Diff line number Diff line change
@@ -81,7 +81,7 @@ public external fun getDocsFromCache(query: Query): Promise<QuerySnapshot>

public external fun getDocsFromServer(query: Query): Promise<QuerySnapshot>

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

Original file line number Diff line number Diff line change
@@ -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)

Original file line number Diff line number Diff line change
@@ -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)