react-native-firestore-serializers
TypeScript icon, indicating that this package has built-in type declarations

0.1.2 • Public • Published

React Native firestore-serializers

Coverage Status Unit tests

An automatic JavaScript serialization/deserialization system for React Native Firestore

Features

  • Simple to use – just pass a string to deserialize, or a DocumentSnapshot to serialize

  • Also supports QuerySnapshot serialization and deserialization

  • Can serialize/deserialize cyclical Firestore structured (i.e. DocumentReference) automatically

  • Deep serialization/deserialization, including array members

  • Comes with full TypeScript type definitions

  • Tested with high code coverage

Why?

Firestore provides offline support, but it's fairly primitive: if your device doesn't have an internet connection, it uses the cached data, but otherwise it uses live data. So when you're on a slow connection, it often takes ages to query data.

A fix for this is to manually store Firestore data in your own caching system (e.g. React Native's AsyncStorage). However, this often presents challenges because Firestore documents can contain non-serializable values.

This library does the heavy lifting for you, by converting special Firestore types (e.g. GeoPoint or DocumentReference) in your documents to serializable values, and vice-versa.

Installation

yarn add react-native-firestore-serializers

or

npm install react-native-firestore-serializers

Usage

import firestore from "@react-native-firebase/firestore";
import {
  serializeDocumentSnapshot,
  serializeQuerySnapshot,
  deserializeDocumentSnapshot,
  deserializeDocumentSnapshotArray,
} from "react-native-firestore-serializers";

const doc = await firestore()
    .collection('my-collection')
    .doc('abc')
    .get();

const collection = await firestore()
    .collection('my-collection')
    .get();

// stringify document (returns string)
const serializedDoc = serializeDocumentSnapshot(doc);
 
// stringify query snapshot (returns string)
const serializedCollection = serializeQuerySnapshot(collection);

/*
returns DocumentSnapshot-like object
This matches the actual DocumentSnapshot class in behavior and properties,
but is NOT an instance of the DocumentSnapshot class.
*/
deserializeDocumentSnapshot(serializedDoc);

/*
returns an array of DocumentSnapshot-like objects, like the ones above.
Does NOT return a QuerySnapshot.
Think of it as returning the contents of the 'docs' property of a QuerySnapshot
*/
deserializeDocumentSnapshotArray(serializedCollection);

License

Licensed under the MIT license. Copyright Pal Kerecsenyi.

Package Sidebar

Install

npm i react-native-firestore-serializers

Weekly Downloads

1

Version

0.1.2

License

MIT

Unpacked Size

21.9 kB

Total Files

19

Last publish

Collaborators

  • nush