falcor-router
Version:
A router DataSource constructor for falcor that allows you to model all your cloud data sources as a single JSON resource.
65 lines (56 loc) • 1.81 kB
JavaScript
var Observable = require('../../RouterRx.js').Observable;
var isArray = Array.isArray;
var $$observable = require('symbol-observable').default;
/**
* For the router there are several return types from user
* functions. The standard set are: synchronous type (boolean or
* json graph) or an async type (observable or a thenable).
*/
module.exports = function outputToObservable(valueOrObservable) {
var value = valueOrObservable;
// if it's one of OUR observables, great.
if (value instanceof Observable) {
return value;
}
// falsy value
if (!value) {
return Observable.of(value);
}
// lowercase-o observables, 3rd party observables
if (value[$$observable]) {
return Observable.from(value);
}
// Rx4 and lower observables
if (value.subscribe) {
var oldObservable = value;
return Observable.create(function(observer) {
var oldObserver = {
onNext: function (v) {
this.observer.next(v);
},
onError: function (err) {
this.observer.error(err);
},
onCompleted: function () {
this.observer.complete();
},
observer: observer
};
var oldSubscription = oldObservable.subscribe(oldObserver);
return function () {
oldSubscription.dispose();
};
});
}
// promises
if (value.then) {
return Observable.from(value);
}
// from array of pathValues.
if (isArray(value)) {
return Observable.of(value);
}
// this will be jsong or pathValue at this point.
// NOTE: For the case of authorize this will be a boolean
return Observable.of(value);
};