UNPKG

2.09 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.mergeWidgetBackends = mergeWidgetBackends;
7
8var _Observable = require('rxjs/Observable');
9
10var _debug = require('debug');
11
12var _debug2 = _interopRequireDefault(_debug);
13
14require('rxjs/add/observable/merge');
15
16require('rxjs/add/observable/from');
17
18require('rxjs/add/observable/timer');
19
20require('rxjs/add/operator/map');
21
22require('rxjs/add/operator/publishReplay');
23
24require('rxjs/add/operator/retryWhen');
25
26require('rxjs/add/operator/do');
27
28require('rxjs/add/operator/delay');
29
30require('rxjs/add/operator/switchMap');
31
32function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
34function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
35
36var debug = (0, _debug2.default)('cyboard.server');
37
38var handleRetry = function handleRetry(id) {
39 return function (errors) {
40 var timer = 1;
41 return errors.switchMap(function () {
42 var delay = 2 * timer;
43 timer += 1;
44 debug('widget backend ' + id + ' failed. Retry in ' + delay + ' seconds.');
45 return _Observable.Observable.timer(delay * 1000);
46 });
47 };
48};
49
50var wrapWidgetData = function wrapWidgetData(id) {
51 return function (data) {
52 return { id: id, data: data };
53 };
54};
55
56var wrapWidgetBackend = function wrapWidgetBackend(widget) {
57 return _Observable.Observable.from(widget.backend).map(wrapWidgetData(widget.id)).retryWhen(handleRetry(widget.id)).publishReplay(1).refCount();
58};
59
60function mergeWidgetBackends(config) {
61 var backends = Object.values(config).reduce(function (widgets, board) {
62 return widgets.concat(board.widgets);
63 }, []).filter(function (widget) {
64 return !!widget;
65 }).map(function (widget) {
66 return wrapWidgetBackend(widget);
67 });
68
69 return _Observable.Observable.merge.apply(_Observable.Observable, _toConsumableArray(backends));
70}
\No newline at end of file