{"mappings":";;;AAMO,MAAM,4CAAa,CACxB,eACA,UACA;IAEA,IAAI,CAAC,cAAc,MAAM,EACvB,cAAc,MAAM,GAAG,IAAM,QAAQ,OAAO,CAAC;YAC3C,MAAM;YACN,OAAO;QACT;IAGF,MAAM,cAAc,cAAc,MAAM,CAAC,IAAI,CAAC;IAC9C,cAAc,MAAM,GAAG;QACrB,SAAS;QACT,OAAO;IACT;IAEA,OAAO;AACT;AAEO,MAAM,kDAA8B,CAAA,GAAA,aAAK;IACtC,iBAAoB,QAA0B,EAAE,eAAiC,EAA4C;QACnI,OAAO;YACL,CAAC,OAAO,aAAa,CAAC;gBAA+B,OAAO,IAAI;YAAC;YACjE,oBAAoB;YACpB,MAAK,KAAW;gBACd,IAAI,IAAI,CAAC,kBAAkB,EACzB,OAAO,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,SAAE,KAAK,QAAE,IAAI,EAAqB,GAAyB,CAAA;8BAC3F;+BACA;oBACF,CAAA;qBAEA,OAAO,kBAAkB,IAAI,CAAC,CAAC;oBAC7B,IAAI,CAAC,kBAAkB,GAAG;oBAC1B,OAAO;wBAAE,MAAM;+BAAO;oBAAM;gBAC9B;YAEJ;YACA,QAAO,KAAW;gBAChB,OAAO,SAAS,MAAM,CAAE;YAC1B;YACA,OAAM,KAAW;gBACf,OAAO,SAAS,KAAK,CAAE;YACzB;QACF;IACF;IAEO,8BAAiC,KAAwB,EAAE,cAAgC,EAA4C;QAC5I,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAI,QAAQ,IAAkB;IACvF;IAEO,WAAiB,aAA2C,EAAE,QAA4B,EAAE,IAAQ,EAAoC;QAC7I,OAAO,0CAAiB,eAAe,UAAU;IACnD;AACF","sources":["src/index.ts"],"sourcesContent":["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":"graphql-pub-sub-with-initial-value.mjs.map","sourceRoot":"../"}