This interface should be used for database integrations, or any other data store implementation that stores data in some external service. The SDK will take care of converting between its own internal data model and a serialized string form; the data store interacts only with the serialized form. The SDK will also provide its own caching layer on top of the persistent data store; the data store implementation should not provide caching, but simply do every query or update that the SDK tells it to do.

Conceptually, each item in the store is a SerializedItemDescriptor which always has a version number, and can represent either a serialized object or a placeholder (tombstone) for a deleted item. There are two approaches a persistent store implementation can use for persisting this data:

  1. Preferably, it should store the version number and the SerializedItemDescriptor#deleted state separately so that the object does not need to be fully deserialized to read them. In this case, deleted item placeholders can ignore the value of SerializedItemDescriptor#item on writes and can set it to undefined on reads. The store should never call DataKind#deserialize.

  2. If that isn't possible, then the store should simply persist the exact string from SerializedItemDescriptor#serializedItem on writes, and return the persisted string on reads (returning zero for the version and false for SerializedItemDescriptor#deleted). The string is guaranteed to provide the SDK with enough information to infer the version and the deleted state. On updates, the store must call PersistentStoreDataKind#deserialize in order to inspect the version number of the existing item if any.

Hierarchy

  • PersistentDataStore

Methods

  • Tests whether the store is initialized.

    "Initialized" means that the store has been populated with data, either by the client having called #init within this process, or by another process (if this is a shared database).

    Parameters

    • callback: ((isInitialized) => void)

      Will be called back with the boolean result.

        • (isInitialized): void
        • Parameters

          • isInitialized: boolean

          Returns void

    Returns void

  • Updates or inserts an item in the specified collection.

    If the given key already exists in that collection, the store must check the version number of the existing item (even if it is a deleted item placeholder); if that version is greater than or equal to the version of the new item, the update fails and the method returns false. If the store is not able to determine the version number of an existing item without fully deserializing the existing item, then it is allowed to call PersistentStoreDataKind#deserialize for that purpose.

    If the item's SerializedItemDescriptor#deleted method returns true, this is a deleted item placeholder. The store must persist this, rather than simply removing the key from the store. The SDK will provide a string in SerializedItemDescriptor#serializedItem which the store can persist for this purpose; or, if the store is capable of persisting the version number and deleted state without storing anything else, it should do so.

    Parameters

    • kind: PersistentStoreDataKind

      specifies which collection to use

    • key: string

      the unique key for the item within that collection

    • descriptor: SerializedItemDescriptor

      the item to insert or update

    • callback: ((err?, updatedDescriptor?) => void)

      will be called with true if the item was inserted, or false if the version was not newer than the existing item.

        • (err?, updatedDescriptor?): void
        • Parameters

          Returns void

    Returns void

Generated using TypeDoc