falcor-router
Version:
A router DataSource constructor for falcor that allows you to model all your cloud data sources as a single JSON resource.
79 lines (68 loc) • 1.9 kB
JavaScript
;
function noop() {
// do nothing
}
var disposeNoop = { dispose: noop };
function disposable(dispose) {
if (typeof dispose === "function") {
return { dispose: dispose };
}
if (typeof dispose === "undefined" || dispose === null) {
return disposeNoop;
}
return dispose;
}
function functionsObserver(onNext, onError, onCompleted) {
return {
onNext: typeof onNext === "function" ? onNext : noop,
onError: typeof onError === "function" ? onError : noop,
onCompleted: typeof onCompleted === "function" ? onCompleted : noop
};
}
function partialObserver(partial) {
return {
onNext: typeof partial.onNext === "function"
? partial.onNext.bind(partial)
: noop,
onError: function onError(e) {
if (typeof partial.onError === "function") {
partial.onError(e);
}
},
onCompleted: function onCompleted() {
if (typeof partial.onCompleted === "function") {
partial.onCompleted();
}
}
};
}
function observer(observerOrOnNext, onError, onCompleted) {
return typeof observerOrOnNext === "object" && observerOrOnNext !== null
? partialObserver(observerOrOnNext)
: functionsObserver(observerOrOnNext, onError, onCompleted);
}
function create(subscribe) {
return {
subscribe: function(observerOrOnNext, onError, onCompleted) {
return disposable(
subscribe(observer(observerOrOnNext, onError, onCompleted))
);
}
};
}
function empty() {
return create(function(obs) {
obs.onCompleted();
});
}
function of(value) {
return create(function(obs) {
obs.onNext(value);
obs.onCompleted();
});
}
module.exports = {
create: create,
empty: empty,
of: of
};