diff --git a/CHANGELOG.md b/CHANGELOG.md index e69de29bb..ac93c3fe2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -0,0 +1 @@ +- Add option to get named firestore instance for v2 firestore functions (#1550). diff --git a/src/common/providers/firestore.ts b/src/common/providers/firestore.ts index 0f2e8b621..c4e6d7821 100644 --- a/src/common/providers/firestore.ts +++ b/src/common/providers/firestore.ts @@ -52,9 +52,9 @@ function _getValueProto(data: any, resource: string, valueFieldName: string) { } /** @internal */ -export function createSnapshotFromProtobuf(data: Uint8Array, path: string) { +export function createSnapshotFromProtobuf(data: Uint8Array, path: string, databaseId: string) { if (!firestoreInstance) { - firestoreInstance = firestore.getFirestore(getApp()); + firestoreInstance = firestore.getFirestore(databaseId); } try { const dataBuffer = Buffer.from(data); @@ -68,9 +68,13 @@ export function createSnapshotFromProtobuf(data: Uint8Array, path: string) { } /** @internal */ -export function createBeforeSnapshotFromProtobuf(data: Uint8Array, path: string) { +export function createBeforeSnapshotFromProtobuf( + data: Uint8Array, + path: string, + databaseId: string +) { if (!firestoreInstance) { - firestoreInstance = firestore.getFirestore(getApp()); + firestoreInstance = firestore.getFirestore(databaseId); } try { const dataBuffer = Buffer.from(data); @@ -88,10 +92,13 @@ export function createSnapshotFromJson( data: any, source: string, createTime: string | undefined, - updateTime: string | undefined + updateTime: string | undefined, + databaseId?: string ) { if (!firestoreInstance) { - firestoreInstance = firestore.getFirestore(getApp()); + firestoreInstance = databaseId + ? firestore.getFirestore(databaseId) + : firestore.getFirestore(getApp()); } const valueProto = _getValueProto(data, source, "value"); let timeString = createTime || updateTime; @@ -110,11 +117,15 @@ export function createBeforeSnapshotFromJson( data: any, source: string, createTime: string | undefined, - updateTime: string | undefined + updateTime: string | undefined, + databaseId?: string ) { if (!firestoreInstance) { - firestoreInstance = firestore.getFirestore(getApp()); + firestoreInstance = databaseId + ? firestore.getFirestore(databaseId) + : firestore.getFirestore(getApp()); } + const oldValueProto = _getValueProto(data, source, "oldValue"); const oldReadTime = dateToTimestampProto(createTime || updateTime); return firestoreInstance.snapshot_(oldValueProto, oldReadTime, "json"); diff --git a/src/v2/providers/firestore.ts b/src/v2/providers/firestore.ts index 1d8b823a1..f351cc755 100644 --- a/src/v2/providers/firestore.ts +++ b/src/v2/providers/firestore.ts @@ -532,13 +532,14 @@ function getPath(event: RawFirestoreEvent): string { /** @internal */ export function createSnapshot(event: RawFirestoreEvent): QueryDocumentSnapshot { if (event.datacontenttype?.includes("application/protobuf") || Buffer.isBuffer(event.data)) { - return createSnapshotFromProtobuf(event.data as Uint8Array, getPath(event)); + return createSnapshotFromProtobuf(event.data as Uint8Array, getPath(event), event.database); } else if (event.datacontenttype?.includes("application/json")) { return createSnapshotFromJson( event.data, event.source, (event.data as RawFirestoreData).value?.createTime, - (event.data as RawFirestoreData).value?.updateTime + (event.data as RawFirestoreData).value?.updateTime, + event.database ); } else { logger.error( @@ -551,13 +552,18 @@ export function createSnapshot(event: RawFirestoreEvent): QueryDocumentSnapshot /** @internal */ export function createBeforeSnapshot(event: RawFirestoreEvent): QueryDocumentSnapshot { if (event.datacontenttype?.includes("application/protobuf") || Buffer.isBuffer(event.data)) { - return createBeforeSnapshotFromProtobuf(event.data as Uint8Array, getPath(event)); + return createBeforeSnapshotFromProtobuf( + event.data as Uint8Array, + getPath(event), + event.database + ); } else if (event.datacontenttype?.includes("application/json")) { return createBeforeSnapshotFromJson( event.data, event.source, (event.data as RawFirestoreData).oldValue?.createTime, - (event.data as RawFirestoreData).oldValue?.updateTime + (event.data as RawFirestoreData).oldValue?.updateTime, + event.database ); } else { logger.error(