UNPKG

reflux-core

Version:

A simple library for uni-directional dataflow application architecture inspired by ReactJS Flux

86 lines (62 loc) 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createStore = createStore; var _utils = require("./utils"); var _ = _interopRequireWildcard(_utils); var _Keep = require("./Keep"); var Keep = _interopRequireWildcard(_Keep); var _mixer = require("./mixer"); var _bindMethods = require("./bindMethods"); var _StoreMethods = require("./StoreMethods"); var StoreMethods = _interopRequireWildcard(_StoreMethods); var _PublisherMethods = require("./PublisherMethods"); var PublisherMethods = _interopRequireWildcard(_PublisherMethods); var _ListenerMethods = require("./ListenerMethods"); var ListenerMethods = _interopRequireWildcard(_ListenerMethods); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } var allowed = { preEmit: 1, shouldEmit: 1 }; /** * Creates an event emitting Data Store. It is mixed in with functions * from the `ListenerMethods` and `PublisherMethods` mixins. `preEmit` * and `shouldEmit` may be overridden in the definition object. * * @param {Object} definition The data store object definition * @returns {Store} A data store instance */ function createStore(definition) { definition = definition || {}; for (var a in StoreMethods) { if (!allowed[a] && (PublisherMethods[a] || ListenerMethods[a])) { throw new Error("Cannot override API method " + a + " in Reflux.StoreMethods. Use another method name or override it on Reflux.PublisherMethods / Reflux.ListenerMethods instead."); } } for (var d in definition) { if (!allowed[d] && (PublisherMethods[d] || ListenerMethods[d])) { throw new Error("Cannot override API method " + d + " in store creation. Use another method name or override it on Reflux.PublisherMethods / Reflux.ListenerMethods instead."); } } definition = (0, _mixer.mix)(definition); function Store() { var i = 0, arr; this.subscriptions = []; this.emitter = new _.EventEmitter(); this.eventLabel = "change"; (0, _bindMethods.bindMethods)(this, definition); if (this.init && _.isFunction(this.init)) { this.init(); } if (this.listenables) { arr = [].concat(this.listenables); for (; i < arr.length; i++) { this.listenToMany(arr[i]); } } } _.extend(Store.prototype, ListenerMethods, PublisherMethods, StoreMethods, definition); var store = new Store(); Keep.addStore(store); return store; }