UNPKG

state-trooper

Version:
133 lines (95 loc) • 3.88 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _underscore = require('underscore'); var _convert_to_native = require('./convert_to_native'); var _convert_to_native2 = _interopRequireDefault(_convert_to_native); var _immutable = require('immutable'); var _immutable2 = _interopRequireDefault(_immutable); var _put_on_chan = require('./put_on_chan'); var _put_on_chan2 = _interopRequireDefault(_put_on_chan); function hasSameValue(valueA, cursorB) { return isEqual(valueA, _immutable2['default'].fromJS(cursorB.deref())); } function isEqual(valueA, valueB) { if (valueA) { return _immutable2['default'].is(valueA, valueB); } else { return valueA === valueB; } } function deref(value) { return value; } var derefJS = (0, _underscore.memoize)(_convert_to_native2['default'], function (value) { return (0, _underscore.isEmpty)(value) || typeof value.hashCode !== 'function' ? value : value.hashCode(); }); // mutations and data store interactions function replace(ch, path, value) { var callback = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; update(ch, { path: path, value: _immutable2['default'].fromJS(value), action: 'replace', callback: callback }); } function set(ch, path, value) { var callback = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; update(ch, { path: path, value: _immutable2['default'].fromJS(value), action: 'set', callback: callback }); } function add(ch, path, value) { var callback = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; update(ch, { path: path, value: _immutable2['default'].fromJS(value), action: 'add', callback: callback }); } function remove(ch, path, value) { var callback = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; update(ch, { path: path, value: value, action: 'remove', callback: callback }); } function persist(ch, path) { update(ch, { path: path, value: null, action: 'persist' }); } function fetch(ch, path) { update(ch, { path: path, value: null, action: 'fetch' }); } function update(ch, change) { (0, _put_on_chan2['default'])(ch, change); } // refining function refine(value, updateCh, oldPath, newPath) { var newPathArr = (0, _underscore.isArray)(newPath) ? newPath : newPath.toString().split('.'); var refinedValue = value.getIn(newPathArr); var refinedPath = oldPath.concat(newPathArr); return cursor(refinedValue, refinedPath, updateCh); } // array helpers function cMap(value, mapper) { return value.map(function (v, i) { return mapper(cursor.refine(i), i); }); } var cursor = function cursor(value, path, updateCh) { var imVal = _immutable2['default'].fromJS(value); var o = { deref: (0, _underscore.partial)(deref, imVal), derefJS: (0, _underscore.partial)(derefJS, imVal), path: path, replace: (0, _underscore.partial)(replace, updateCh, path), remove: (0, _underscore.partial)(remove, updateCh, path, imVal), refine: (0, _underscore.partial)(refine, imVal, updateCh, path), persist: (0, _underscore.partial)(persist, updateCh, path), fetch: (0, _underscore.partial)(fetch, updateCh, path), hasSameValue: (0, _underscore.partial)(hasSameValue, imVal) }; Object.defineProperty(o, "value", { get: (0, _underscore.partial)(derefJS, imVal) }); if (_immutable2['default'].List.isList(imVal)) { // array specific operations o.map = (0, _underscore.partial)(cMap, imVal); o.add = (0, _underscore.partial)(add, updateCh, path); } if (_immutable2['default'].Map.isMap(imVal)) { o.set = (0, _underscore.partial)(set, updateCh, path); } return o; }; exports['default'] = cursor; module.exports = exports['default'];