Skip to content

Latest commit

 

History

History
56 lines (49 loc) · 2.01 KB

DELTA_ADAPTER.MD

File metadata and controls

56 lines (49 loc) · 2.01 KB

Delta Adapter

The Delta adapter provides the lowest level functionality and greatest flexibility. Puts are sent as deltas of the current node. Ensure that you properly handle merging in the delta received during write so that you don't overwrite existing node data.

import {Flint, DeltaAdapter} from 'gun-flint';

Flint.register(new DeltaAdapter({

    /**
     * Send data back into Gun. Return as a valid Gun object
     *
     * You can do anything you like with the delta for storage purposes, 
     * but you must return to data to gun in the format that Gun recognizes.
     *
     * NOTE: the second parameter `field`, if supplied, indicates that a specific node
     *       field is requested; if empty, then an entire node is requested.
     *
     * @param {string}   key     The UUID for the node to retrieve
     * @param {string}   [field] If supplied, a specific field to retrieve; if not supplied, get full node
     * @param {callback} done    Callback after retrieval is finished
     */
    get: function(key, field, done) {
        retrieveData(key, field).then((err, node) => {
            done(err, node);
        });
    },

    /**
     * Write data into storage/service from Gun.
     *
     * Note that the delta parameter is NOT a full node but
     * only a diff that is produced at time of `put` request.
     * 
     * !Warning! Treating the delta as a full node can result in data loss!!
     * 
     * @param {string}   key    The UUID for the node request
     * @param {object}   delta  Node with metadata (required)
     * @param {function} done   Call after operation finishes
     */
    put: function(key, delta, done) {
        writeData(key, delta, done).then(err => {
            done(err);
        });
    },

    /**
     * @param {object}   context   The Gun database context
     * @param {object}   opt       Any options passed when initializing Gun or calling `gun.opt`
     */
    opt: function(context, opt) {
        // Initialize the adapter; e.g., create database connection
    }
}))