UNPKG

apollo-datasource-firestore

Version:
58 lines 2.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FirestoreConverter = exports.isFirestoreCollection = void 0; exports.reviverFactory = reviverFactory; exports.replacer = replacer; const firestore_1 = require("@google-cloud/firestore"); const isFirestoreCollection = (maybeCollection) => { return (maybeCollection.id && maybeCollection.path && maybeCollection.firestore && maybeCollection.doc); }; exports.isFirestoreCollection = isFirestoreCollection; const FirestoreConverter = () => ({ toFirestore: ({ id, collection, createdAt, updatedAt, ...data }) => data, fromFirestore: (snap) => ({ ...snap.data(), id: snap.id, collection: snap.ref.parent.id, createdAt: snap.createTime, updatedAt: snap.updateTime, }), }); exports.FirestoreConverter = FirestoreConverter; const symbolMatch = /^\$\$(Timestamp|GeoPoint|DocumentReference)\$\$:/; function reviverFactory(collection) { return function reviver(key, value) { if (typeof value === 'string' && symbolMatch.test(value)) { const split = value.split(':'); switch (split[0]) { case '$$Timestamp$$': return new firestore_1.Timestamp(parseInt(split[1], 10), parseInt(split[2], 10)); case '$$DocumentReference$$': return collection.firestore.doc(split[1]); case '$$GeoPoint$$': return new firestore_1.GeoPoint(parseFloat(split[1]), parseFloat(split[2])); default: return value; } } else return value; }; } function replacer(key, value) { if (value instanceof firestore_1.Timestamp) { return `$$Timestamp$$:${value.seconds}:${value.nanoseconds}`; } else if (value instanceof firestore_1.DocumentReference) { return `$$DocumentReference$$:${value.path}`; } else if (value instanceof firestore_1.GeoPoint) { return `$$GeoPoint$$:${value.latitude}:${value.longitude}`; } else return value; } //# sourceMappingURL=helpers.js.map