UNPKG

2.01 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.createEpicMiddleware = createEpicMiddleware;
7
8var _Subject = require('rxjs/Subject');
9
10var _map = require('rxjs/operator/map');
11
12var _switchMap = require('rxjs/operator/switchMap');
13
14var _ActionsObservable = require('./ActionsObservable');
15
16var _EPIC_END = require('./EPIC_END');
17
18var defaultAdapter = {
19 input: function input(action$) {
20 return action$;
21 },
22 output: function output(action$) {
23 return action$;
24 }
25};
26
27var defaultOptions = {
28 adapter: defaultAdapter
29};
30
31function createEpicMiddleware(epic) {
32 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;
33
34 var _ref$adapter = _ref.adapter;
35 var adapter = _ref$adapter === undefined ? defaultAdapter : _ref$adapter;
36
37 if (typeof epic !== 'function') {
38 throw new TypeError('You must provide a root Epic to createEpicMiddleware');
39 }
40
41 var input$ = new _Subject.Subject();
42 var action$ = adapter.input(new _ActionsObservable.ActionsObservable(input$));
43 var epic$ = new _Subject.Subject();
44 var store = void 0;
45
46 var epicMiddleware = function epicMiddleware(_store) {
47 store = _store;
48
49 return function (next) {
50 var _context;
51
52 (_context = _map.map.call(epic$, function (epic) {
53 return epic(action$, store);
54 }), _switchMap.switchMap).call(_context, function (action$) {
55 return adapter.output(action$);
56 }).subscribe(store.dispatch);
57
58 // Setup initial root epic
59 epic$.next(epic);
60
61 return function (action) {
62 var result = next(action);
63 input$.next(action);
64 return result;
65 };
66 };
67 };
68
69 epicMiddleware.replaceEpic = function (epic) {
70 // gives the previous root Epic a last chance
71 // to do some clean up
72 store.dispatch({ type: _EPIC_END.EPIC_END });
73 // switches to the new root Epic, synchronously terminating
74 // the previous one
75 epic$.next(epic);
76 };
77
78 return epicMiddleware;
79}
\No newline at end of file