-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
63 lines (62 loc) · 1.47 KB
/
index.js
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
'use strict';
var M = require('@mfjs/core'), Rx = require('rx');
module.exports = function(opts) {
function ObservableWrap(inner) {
this.inner = inner;
}
var Observable = Rx.Observable, defs = {};
if (opts == null)
opts = {};
if (opts.control == null)
opts.control = "token";
if (opts.wrap === true)
opts.wrap = ObservableWrap;
Observable = Rx.Observable;
function coerce(v) {
if (Observable.isObservable(v))
return v;
if (Rx.helpers.isPromise(v))
return Observable.fromPromise(v);
return Observable["return"](v);
}
defs.pure = Observable["return"];
defs.coerce = coerce;
defs.apply = function(e, f) {
//TODO: eta
return coerce(e).map(function(v) {
return f(v);
});
};
defs.arr = Observable.combineLatest;
defs.empty = Observable.empty;
defs.alt = Observable.merge;
defs.bind = opts.latest
? function(v, f) {
return v.flatMapLatest(function(v) {
return f(v);
});
}
: function(v, f) {
return v.flatMap(function(v) {
return f(v);
});
};
if (opts.exceptions) {
defs.raise = Observable["throw"];
defs.handle = function(a, f) {
return a["catch"](function(v) {
return f(v);
});
};
defs["finally"] = function(a, f) {
return a["finally"](function(v) {
return f(v);
});
};
}
defs = M.defaults(defs,opts)
if (!opts.wrap) {
M.completePrototype(defs,Observable.prototype);
}
return defs;
};