UNPKG

@dillonkearns/elm-graphql

Version:

<img src="https://cdn.jsdelivr.net/gh/martimatix/logo-graphqelm/logo.svg" alt="dillonearns/elm-graphql logo" width="40%" align="right">

52 lines (42 loc) 1.3 kB
// @flow import Observable from "zen-observable"; import observe from "./observe"; import type {AbsintheSocket, Notifier, Observer} from "./types"; type Options<Result> = { unsubscribe: () => void, onError: $PropertyType<Observer<Result>, "onError">, onStart: $PropertyType<Observer<Result>, "onStart"> }; const onResult = (notifier, observer) => result => { observer.next(result); if (notifier.operationType !== "subscription") { observer.complete(); } }; /** * Creates an Observable that will follow the given notifier * * @param {AbsintheSocket} absintheSocket * @param {Notifier<Result>} notifier * @param {Object} [options] * @param {function(error: Error): undefined} [options.onError] * @param {function(notifier: Notifier<Result>): undefined} [options.onStart] * @param {function(): undefined} [options.unsubscribe] * * @return {Observable} */ const toObservable = <Result>( absintheSocket: AbsintheSocket, notifier: Notifier<Result>, {onError, onStart, unsubscribe}: $Shape<Options<Result>> = {} ) => new Observable(observer => { observe(absintheSocket, notifier, { onError, onStart, onAbort: observer.error, onResult: onResult(notifier, observer) }); return unsubscribe; }); export default toObservable;