nuclear-entity-cache
Version:
A simple nuclear.js cache module that can be used as a centralized cache for entities.
70 lines (53 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.load = load;
exports.remove = remove;
var _invariant = require('invariant');
var _invariant2 = _interopRequireDefault(_invariant);
var _lodash = require('lodash.isobject');
var _lodash2 = _interopRequireDefault(_lodash);
var _EntityInterface = require('./interfaces/EntityInterface');
var _EntityInterface2 = _interopRequireDefault(_EntityInterface);
var _actionTypes = require('./actionTypes');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Action to cache entity data.
*
* @public
* @param {Nuclear.Reactor} reactor
* @param {string} entityName
* @param {object|array} data
*/
function load(reactor, entityName, data) {
(0, _invariant2.default)(entityName, 'EntityCache.actions.load: expected an entity name provided.');
if (!Array.isArray(data)) {
data = [data];
}
data.forEach(function (entity) {
(0, _invariant2.default)(_EntityInterface2.default.isInstance(entity), 'EntityCache.actions.load: expected entity like to satisfy ' + _EntityInterface2.default.toString() + '; got %s instead', entity.constructor.name);
});
reactor.dispatch(_actionTypes.ENTITY_CACHE_LOAD, {
name: entityName,
data: data
});
}
/**
* Action to remove entities.
*
* @public
* @param {Nuclear.Reactor} reactor
* @param {string} entityName
* @param {array} selectors
* @returns {Immutable.Map}
*/
function remove(reactor, entityName, selectors) {
(0, _invariant2.default)(entityName, 'EntityCache.actions.remove: expected an entity name provided.');
if (!Array.isArray(selectors)) {
selectors = [selectors];
}
reactor.dispatch(_actionTypes.ENTITY_CACHE_REMOVE, {
entityName: entityName, selectors: selectors
});
}