| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219 |
2
1
1
87
1
1
1
1
87
87
87
87
1
1
90
40
3
3
40
30
30
10
10
10
10
15
6
6
9
9
6
4
2
53
53
1
52
3
3
3
9
9
9
5
4
3
1
42
42
42
42
42
42
42
42
10
5
2
5
2
2
1
3
2
3
35
35
39
41
39
39
39
39
39
39
29
29
39
39
39
1
1
1
56
| "use strict";
var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
var _prototypeProperties = function (child, staticProps, instanceProps) { Eif (staticProps) Object.defineProperties(child, staticProps); Eif (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
var _inherits = function (subClass, superClass) { Iif (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); Eif (superClass) subClass.__proto__ = superClass; };
var _classCallCheck = function (instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
/**
* Store
*
* Stores hold application state. They respond to actions sent by the dispatcher
* and broadcast change events to listeners, so they can grab the latest data.
* The key thing to remember is that the only way stores receive information
* from the outside world is via the dispatcher.
*/
var EventEmitter = _interopRequire(require("eventemitter3"));
var assign = _interopRequire(require("object-assign"));
var Store = (function (EventEmitter) {
/**
* Stores are initialized with a reference
* @type {Object}
*/
function Store() {
_classCallCheck(this, Store);
this.state = null;
this._handlers = {};
this._asyncHandlers = {};
}
_inherits(Store, EventEmitter);
_prototypeProperties(Store, {
assignState: {
value: function assignState(oldState, newState) {
return assign({}, oldState, newState);
},
writable: true,
configurable: true
}
}, {
setState: {
value: function setState(newState) {
// Do a transactional state update if a function is passed
if (typeof newState === "function") {
var prevState = this._isHandlingDispatch ? this._pendingState : this.state;
newState = newState(prevState);
}
if (this._isHandlingDispatch) {
this._pendingState = this.constructor.assignState(this._pendingState, newState);
this._emitChangeAfterHandlingDispatch = true;
} else {
Eif (process.env.NODE_ENV !== "production") {
console.warn("Store#setState() called from outside an action handler. This is likely " + "a mistake. Flux stores should manage their own state.");
}
this.state = this.constructor.assignState(this.state, newState);
this.emit("change");
}
},
writable: true,
configurable: true
},
replaceState: {
value: function replaceState(newState) {
if (this._isHandlingDispatch) {
this._pendingState = this.constructor.assignState(undefined, newState);
this._emitChangeAfterHandlingDispatch = true;
} else {
this.state = this.constructor.assignState(undefined, newState);
this.emit("change");
}
},
writable: true,
configurable: true
},
forceUpdate: {
value: function forceUpdate() {
if (this._isHandlingDispatch) {
this._emitChangeAfterHandlingDispatch = true;
} else {
this.emit("change");
}
},
writable: true,
configurable: true
},
register: {
value: function register(actionId, handler) {
actionId = ensureActionId(actionId);
if (typeof handler !== "function") {
return;
}this._handlers[actionId] = handler.bind(this);
},
writable: true,
configurable: true
},
registerAsync: {
value: function registerAsync(actionId, beginHandler, successHandler, failureHandler) {
actionId = ensureActionId(actionId);
var asyncHandlers = {
begin: beginHandler,
success: successHandler,
failure: failureHandler };
for (var key in asyncHandlers) {
Iif (!asyncHandlers.hasOwnProperty(key)) continue;
var handler = asyncHandlers[key];
if (typeof handler === "function") {
asyncHandlers[key] = handler.bind(this);
} else {
delete asyncHandlers[key];
}
}
this._asyncHandlers[actionId] = asyncHandlers;
},
writable: true,
configurable: true
},
waitFor: {
value: function waitFor(tokensOrStores) {
this._waitFor(tokensOrStores);
},
writable: true,
configurable: true
},
handler: {
value: function handler(payload) {
var body = payload.body;
var actionId = payload.actionId;
var _async = payload.async;
var actionArgs = payload.actionArgs;
var error = payload.error;
var _handler = this._handlers[actionId];
var _asyncHandler = this._asyncHandlers[actionId] && this._asyncHandlers[actionId][_async];
if (_async) {
switch (_async) {
case "begin":
if (typeof _asyncHandler === "function") {
this._performHandler.apply(this, [_asyncHandler].concat(actionArgs));
}
return;
case "failure":
Eif (typeof _asyncHandler === "function") {
this._performHandler(_asyncHandler, error);
}
return;
case "success":
if (typeof _asyncHandler === "function") {
_handler = _asyncHandler;
}
break;
default:
return;
}
}
Iif (typeof _handler !== "function") {
return;
}this._performHandler(_handler, body);
},
writable: true,
configurable: true
},
_performHandler: {
value: function _performHandler(_handler) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
this._isHandlingDispatch = true;
this._pendingState = this.constructor.assignState(undefined, this.state);
this._emitChangeAfterHandlingDispatch = false;
try {
_handler.apply(this, args);
} finally {
if (this._emitChangeAfterHandlingDispatch) {
this.state = this._pendingState;
this.emit("change");
}
this._isHandlingDispatch = false;
this._pendingState = undefined;
this._emitChangeAfterHandlingDispatch = false;
}
},
writable: true,
configurable: true
}
});
return Store;
})(EventEmitter);
module.exports = Store;
function ensureActionId(actionOrActionId) {
return typeof actionOrActionId === "function" ? actionOrActionId._id : actionOrActionId;
}
//# sourceMappingURL=data:application/json;base64,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LEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUIsU0FBUztBQUNSLGNBQUksSUFBSSxDQUFDLGdDQUFnQyxFQUFFO0FBQ3pDLGdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDaEMsZ0JBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7V0FDckI7O0FBRUQsY0FBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztBQUNqQyxjQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUMvQixjQUFJLENBQUMsZ0NBQWdDLEdBQUcsS0FBSyxDQUFDO1NBQy9DO09BQ0Y7Ozs7OztTQXpKa0IsS0FBSztHQUFTLFlBQVk7O2lCQUExQixLQUFLOzs7QUE0SjFCLFNBQVMsY0FBYyxDQUFDLGdCQUFnQixFQUFFO0FBQ3hDLFNBQU8sT0FBTyxnQkFBZ0IsS0FBSyxVQUFVLEdBQ3pDLGdCQUFnQixDQUFDLEdBQUcsR0FDcEIsZ0JBQWdCLENBQUM7Q0FDdEIiLCJmaWxlIjoibGliL1N0b3JlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdG9yZVxuICpcbiAqIFN0b3JlcyBob2xkIGFwcGxpY2F0aW9uIHN0YXRlLiBUaGV5IHJlc3BvbmQgdG8gYWN0aW9ucyBzZW50IGJ5IHRoZSBkaXNwYXRjaGVyXG4gKiBhbmQgYnJvYWRjYXN0IGNoYW5nZSBldmVudHMgdG8gbGlzdGVuZXJzLCBzbyB0aGV5IGNhbiBncmFiIHRoZSBsYXRlc3QgZGF0YS5cbiAqIFRoZSBrZXkgdGhpbmcgdG8gcmVtZW1iZXIgaXMgdGhhdCB0aGUgb25seSB3YXkgc3RvcmVzIHJlY2VpdmUgaW5mb3JtYXRpb25cbiAqIGZyb20gdGhlIG91dHNpZGUgd29ybGQgaXMgdmlhIHRoZSBkaXNwYXRjaGVyLlxuICovXG5cbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5pbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdG9yZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBhIHJlZmVyZW5jZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IG51bGw7XG5cbiAgICB0aGlzLl9oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuX2FzeW5jSGFuZGxlcnMgPSB7fTtcbiAgfVxuXG4gIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgLy8gRG8gYSB0cmFuc2FjdGlvbmFsIHN0YXRlIHVwZGF0ZSBpZiBhIGZ1bmN0aW9uIGlzIHBhc3NlZFxuICAgIGlmICh0eXBlb2YgbmV3U3RhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuX2lzSGFuZGxpbmdEaXNwYXRjaFxuICAgICAgICA/IHRoaXMuX3BlbmRpbmdTdGF0ZVxuICAgICAgICA6IHRoaXMuc3RhdGU7XG5cbiAgICAgIG5ld1N0YXRlID0gbmV3U3RhdGUocHJldlN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNIYW5kbGluZ0Rpc3BhdGNoKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nU3RhdGUgPSB0aGlzLmNvbnN0cnVjdG9yLmFzc2lnblN0YXRlKHRoaXMuX3BlbmRpbmdTdGF0ZSwgbmV3U3RhdGUpO1xuICAgICAgdGhpcy5fZW1pdENoYW5nZUFmdGVySGFuZGxpbmdEaXNwYXRjaCA9IHRydWU7XG4gICAgfSBlbHNlIHtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdTdG9yZSNzZXRTdGF0ZSgpIGNhbGxlZCBmcm9tIG91dHNpZGUgYW4gYWN0aW9uIGhhbmRsZXIuIFRoaXMgaXMgbGlrZWx5ICdcbiAgICAgICAgKyAnYSBtaXN0YWtlLiBGbHV4IHN0b3JlcyBzaG91bGQgbWFuYWdlIHRoZWlyIG93biBzdGF0ZS4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlID0gdGhpcy5jb25zdHJ1Y3Rvci5hc3NpZ25TdGF0ZSh0aGlzLnN0YXRlLCBuZXdTdGF0ZSk7XG4gICAgICB0aGlzLmVtaXQoJ2NoYW5nZScpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VTdGF0ZShuZXdTdGF0ZSkge1xuICAgIGlmICh0aGlzLl9pc0hhbmRsaW5nRGlzcGF0Y2gpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdTdGF0ZSA9IHRoaXMuY29uc3RydWN0b3IuYXNzaWduU3RhdGUodW5kZWZpbmVkLCBuZXdTdGF0ZSk7XG4gICAgICB0aGlzLl9lbWl0Q2hhbmdlQWZ0ZXJIYW5kbGluZ0Rpc3BhdGNoID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuY29uc3RydWN0b3IuYXNzaWduU3RhdGUodW5kZWZpbmVkLCBuZXdTdGF0ZSk7XG4gICAgICB0aGlzLmVtaXQoJ2NoYW5nZScpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3NpZ25TdGF0ZShvbGRTdGF0ZSwgbmV3U3RhdGUpIHtcbiAgICByZXR1cm4gYXNzaWduKHt9LCBvbGRTdGF0ZSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgZm9yY2VVcGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzSGFuZGxpbmdEaXNwYXRjaCkge1xuICAgICAgdGhpcy5fZW1pdENoYW5nZUFmdGVySGFuZGxpbmdEaXNwYXRjaCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdCgnY2hhbmdlJyk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXIoYWN0aW9uSWQsIGhhbmRsZXIpIHtcbiAgICBhY3Rpb25JZCA9IGVuc3VyZUFjdGlvbklkKGFjdGlvbklkKTtcblxuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuXG4gICAgdGhpcy5faGFuZGxlcnNbYWN0aW9uSWRdID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgcmVnaXN0ZXJBc3luYyhhY3Rpb25JZCwgYmVnaW5IYW5kbGVyLCBzdWNjZXNzSGFuZGxlciwgZmFpbHVyZUhhbmRsZXIpIHtcbiAgICBhY3Rpb25JZCA9IGVuc3VyZUFjdGlvbklkKGFjdGlvbklkKTtcblxuICAgIGxldCBhc3luY0hhbmRsZXJzID0ge1xuICAgICAgYmVnaW46IGJlZ2luSGFuZGxlcixcbiAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NIYW5kbGVyLFxuICAgICAgZmFpbHVyZTogZmFpbHVyZUhhbmRsZXIsXG4gICAgfTtcblxuICAgIGZvciAobGV0IGtleSBpbiBhc3luY0hhbmRsZXJzKSB7XG4gICAgICBpZiAoIWFzeW5jSGFuZGxlcnMuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWU7XG5cbiAgICAgIGxldCBoYW5kbGVyID0gYXN5bmNIYW5kbGVyc1trZXldO1xuXG4gICAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXN5bmNIYW5kbGVyc1trZXldID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGFzeW5jSGFuZGxlcnNba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9hc3luY0hhbmRsZXJzW2FjdGlvbklkXSA9IGFzeW5jSGFuZGxlcnM7XG4gIH1cblxuICB3YWl0Rm9yKHRva2Vuc09yU3RvcmVzKSB7XG4gICAgdGhpcy5fd2FpdEZvcih0b2tlbnNPclN0b3Jlcyk7XG4gIH1cblxuICBoYW5kbGVyKHBheWxvYWQpIHtcbiAgICBsZXQge1xuICAgICAgYm9keSxcbiAgICAgIGFjdGlvbklkLFxuICAgICAgYXN5bmM6IF9hc3luYyxcbiAgICAgIGFjdGlvbkFyZ3MsXG4gICAgICBlcnJvclxuICAgIH0gPSBwYXlsb2FkO1xuXG4gICAgbGV0IF9oYW5kbGVyID0gdGhpcy5faGFuZGxlcnNbYWN0aW9uSWRdO1xuICAgIGxldCBfYXN5bmNIYW5kbGVyID0gdGhpcy5fYXN5bmNIYW5kbGVyc1thY3Rpb25JZF1cbiAgICAgICYmIHRoaXMuX2FzeW5jSGFuZGxlcnNbYWN0aW9uSWRdW19hc3luY107XG5cbiAgICBpZiAoX2FzeW5jKSB7XG4gICAgICBzd2l0Y2ggKF9hc3luYykge1xuICAgICAgICBjYXNlICdiZWdpbic6XG4gICAgICAgICAgaWYgKHR5cGVvZiBfYXN5bmNIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZXJmb3JtSGFuZGxlci5hcHBseSh0aGlzLCBbX2FzeW5jSGFuZGxlcl0uY29uY2F0KGFjdGlvbkFyZ3MpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdmYWlsdXJlJzpcbiAgICAgICAgICBpZiAodHlwZW9mIF9hc3luY0hhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlcmZvcm1IYW5kbGVyKF9hc3luY0hhbmRsZXIsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgICBpZiAodHlwZW9mIF9hc3luY0hhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIF9oYW5kbGVyID0gX2FzeW5jSGFuZGxlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgX2hhbmRsZXIgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICB0aGlzLl9wZXJmb3JtSGFuZGxlcihfaGFuZGxlciwgYm9keSk7XG4gIH1cblxuICBfcGVyZm9ybUhhbmRsZXIoX2hhbmRsZXIsIC4uLmFyZ3MpIHtcbiAgICB0aGlzLl9pc0hhbmRsaW5nRGlzcGF0Y2ggPSB0cnVlO1xuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZSA9IHRoaXMuY29uc3RydWN0b3IuYXNzaWduU3RhdGUodW5kZWZpbmVkLCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLl9lbWl0Q2hhbmdlQWZ0ZXJIYW5kbGluZ0Rpc3BhdGNoID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgX2hhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLl9lbWl0Q2hhbmdlQWZ0ZXJIYW5kbGluZ0Rpc3BhdGNoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLl9wZW5kaW5nU3RhdGU7XG4gICAgICAgIHRoaXMuZW1pdCgnY2hhbmdlJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzSGFuZGxpbmdEaXNwYXRjaCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcGVuZGluZ1N0YXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZW1pdENoYW5nZUFmdGVySGFuZGxpbmdEaXNwYXRjaCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVBY3Rpb25JZChhY3Rpb25PckFjdGlvbklkKSB7XG4gIHJldHVybiB0eXBlb2YgYWN0aW9uT3JBY3Rpb25JZCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gYWN0aW9uT3JBY3Rpb25JZC5faWRcbiAgICA6IGFjdGlvbk9yQWN0aW9uSWQ7XG59XG4iXX0= |