gun-flint
Version:
Micro-framework for building Gun adapters
124 lines (90 loc) • 4.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _baseAdapter = require('./base-adapter');
var _baseAdapter2 = _interopRequireDefault(_baseAdapter);
var _util = require('./../util');
var _util2 = _interopRequireDefault(_util);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var KeyValAdapter = function (_BaseAdapter) {
(0, _inherits3.default)(KeyValAdapter, _BaseAdapter);
function KeyValAdapter() {
(0, _classCallCheck3.default)(this, KeyValAdapter);
return (0, _possibleConstructorReturn3.default)(this, (KeyValAdapter.__proto__ || (0, _getPrototypeOf2.default)(KeyValAdapter)).apply(this, arguments));
}
(0, _createClass3.default)(KeyValAdapter, [{
key: 'read',
/**
* @param {Array|Object} result - An array of objects (= records) like so
* {
* key: 'uuid for the node'
* nodeKey: 'node value's name'
* val: 'Value'
* rel: 'Relationship (if referring to another node)
* state: 'conflict resolution value'
* }
* @param {Function} callback - Call once read finished
* @return {void}
*/
value: function read(result, done) {
if (result) {
var key = result instanceof Array && result.length ? result[0].key : result.key;
result = _util2.default.gunify(key, result);
}
done(null, result);
}
/**
* @param {Object} delta - A delta for the current node
* @param {Function} callback - Called once write finished
* @return {void}
*/
}, {
key: 'write',
value: function write(delta, done) {
var _this2 = this;
var keys = (0, _keys2.default)(delta);
// Batch together key:val writes
var batch = [];
// Iterate through each node in the delta
keys.forEach(function (key) {
var nodeDelta = delta[key];
var conflictState = nodeDelta._['>'];
// Iterate through each field in the node delta
(0, _keys2.default)(nodeDelta).map(function (field) {
// Ignore meta info
if (field !== '_') {
var state = conflictState[field];
// base node
var node = { state: state, field: field, key: key };
// Add rel or val
if (_this2.Gun.obj.is(nodeDelta[field])) {
node.rel = nodeDelta[field]['#'];
} else {
node.val = nodeDelta[field];
}
batch.push(node);
}
});
}, this);
// Write batch
if (batch.length) {
this._put(batch, done);
}
}
}]);
return KeyValAdapter;
}(_baseAdapter2.default);
exports.default = KeyValAdapter;