{"mappings":";AAEA,uDAAuD,CAAC,CAAE,SAAQ,qBAAqB,CAAC,CAAC,CAAC;IACxF,kBAAkB,EAAE,OAAO,CAAA;CAC5B;AAED,OAAO,MAAM,aAAc,CAAC,EAAE,CAAC,EAC7B,eAAe,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,EAC3C,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAC5B,OAAO,CAAC,KACP,aAAa,CAAC,CAAC,GAAG,SAAS,CAe7B,CAAA;AAED,kCAAmC,SAAQ,MAAM;IA2BxC,6BAA6B,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,sCAAsC,CAAC,CAAC;eAI3H,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC;CAG/I","sources":["src/src/index.ts","src/index.ts"],"sourcesContent":[null,"import { PubSub } from 'graphql-subscriptions'\n\nexport interface AsyncIterableIteratorWithInitialState<T> extends AsyncIterableIterator<T> {\n  initialValuePushed: boolean\n}\n\nexport const withCancel = <T, P>(\n  asyncIterator: AsyncIterator<T | undefined>,\n  onCancel: (args?: P) => void,\n  args?: P\n): AsyncIterator<T | undefined> => {\n  if (!asyncIterator.return) {\n    asyncIterator.return = () => Promise.resolve({\n      done: true,\n      value: undefined\n    })\n  }\n\n  const savedReturn = asyncIterator.return.bind(asyncIterator)\n  asyncIterator.return = () => {\n    onCancel(args)\n    return savedReturn()\n  }\n\n  return asyncIterator\n}\n\nexport class PubSubWithIntialValue extends PubSub {\n  private withInitialValue<T>(iterator: AsyncIterator<T>, getInitialValue: () => Promise<T>): AsyncIterableIteratorWithInitialState<T> {\n    return {\n      [Symbol.asyncIterator](): AsyncIterableIterator<T> { return this },\n      initialValuePushed: false,\n      next(value?: any): Promise<IteratorResult<T>> {\n        if (this.initialValuePushed) {\n          return iterator.next(value).then(({ value, done }: IteratorResult<T>): IteratorResult<T> => ({\n            done,\n            value\n          }))\n        } else {\n          return getInitialValue().then((value: T): IteratorResult<T> => {\n            this.initialValuePushed = true\n            return { done: false, value }\n          })\n        }\n      },\n      return(value?: any): Promise<IteratorResult<T>> {\n        return iterator.return!(value)\n      },\n      throw(value?: any): Promise<IteratorResult<T>> {\n        return iterator.throw!(value)\n      }\n    }\n  }\n\n  public asyncIteratorWithInitialValue<T>(topic: string | string[], initialValueFn: () => Promise<T>): AsyncIterableIteratorWithInitialState<T> {\n    return this.withInitialValue(this.asyncIterableIterator<T>(topic), (): Promise<T> => initialValueFn())\n  }\n\n  public withCancel<T, P>(asyncIterator: AsyncIterator<T | undefined>, onCancel: (args?: P) => void, args?: P): AsyncIterator<T, any, undefined> {\n    return withCancel<T, P>(asyncIterator, onCancel, args)\n  }\n}\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../../"}