Skip to content

Commit

Permalink
Add option to get named firestore instance for v2 firestore functions (
Browse files Browse the repository at this point in the history
…#1550)

* adding option to get named firestore instance for v2 firestore functions

* add changelog entry
  • Loading branch information
colerogers committed Apr 12, 2024
1 parent c89994f commit 6beaaeb
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 12 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
@@ -0,0 +1 @@
- Add option to get named firestore instance for v2 firestore functions (#1550).
27 changes: 19 additions & 8 deletions src/common/providers/firestore.ts
Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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;
Expand All @@ -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");
Expand Down
14 changes: 10 additions & 4 deletions src/v2/providers/firestore.ts
Expand Up @@ -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(
Expand All @@ -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(
Expand Down

0 comments on commit 6beaaeb

Please sign in to comment.