From 68b00b3c2647fe686b5a1667ff29bd796ff21a67 Mon Sep 17 00:00:00 2001 From: Artur Gubaidullin Date: Tue, 23 May 2023 01:53:18 +0400 Subject: [PATCH] feat(firestore): add adapter constructor --- packages/firestore/src/adapter.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 packages/firestore/src/adapter.ts diff --git a/packages/firestore/src/adapter.ts b/packages/firestore/src/adapter.ts new file mode 100644 index 00000000..35c380f7 --- /dev/null +++ b/packages/firestore/src/adapter.ts @@ -0,0 +1,31 @@ +import { CollectionReference } from './collection-reference'; +import { Document, createDocument, getDocumentValue } from './document'; +import { Encoder } from './encoder'; +import { Storage } from './storage'; + +export const createAdapter = + (encoder: Encoder) => + (collection: CollectionReference>): Storage => { + return { + read: async (key: string) => { + const snapshot = await collection.doc(key).get(); + const document = snapshot.data(); + if (!document) { + return undefined; + } + const encoded = getDocumentValue(document); + if (!encoded) { + return undefined; + } + return encoder.decode(encoded); + }, + write: async (key: string, value: A) => { + const encoded = encoder.encode(value); + const doc: Document = createDocument(encoded); + await collection.doc(key).set(doc); + }, + delete: async (key: string) => { + await collection.doc(key).delete(); + }, + }; + };