{"version":3,"sources":["../../src/shared/notifications.ts"],"names":["executeOnNotifications","notifications","cb","logger","stream","length","Observable","subscriber","observables","filter","isObservable","includes","notification","shared","lastValue","add","subscribe","next","value","error","_err","complete","err","log","connect"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAkCO,SAASA,sBAAT,CACLC,aADK,EAELC,EAFK,EAGLC,MAAmB,GAAG,kCAHjB,EAIL;AACA,SAAqBC,MAAd,IAAwC;AAC7C,QAAIH,aAAa,CAACI,MAAd,KAAyB,CAA7B,EAAgC;AAC9B,aAAOD,MAAP;AACD;;AAED,WAAO,IAAIE,gBAAJ,CAAmBC,UAAD,IAAgB;AACvC,YAAMC,WAAW,GAAGP,aAAa,CAACQ,MAAd,CAAqBC,kBAArB,CAApB;;AAEA,UAAIT,aAAa,CAACU,QAAd,CAAuB,WAAvB,CAAJ,EAAyC;AACvCT,QAAAA,EAAE,CAAC;AAAEU,UAAAA,YAAY,EAAE;AAAhB,SAAD,CAAF;AACD;;AAED,YAAMC,MAAM,GAAG,kCAAcT,MAAd,CAAf;AAEA,UAAIU,SAAJ;AAEAP,MAAAA,UAAU,CAACQ,GAAX,CACEF,MAAM,CAACG,SAAP,CAAiB;AACfC,QAAAA,IAAI,EAAGC,KAAD,IAAW;AACfJ,UAAAA,SAAS,GAAGI,KAAZ;AACD,SAHc;AAIfC,QAAAA,KAAK,EAAGC,IAAD,IAAU;AACf;AACA;AACA;AACA;AACA;AACD,SAVc;AAWf,YAAInB,aAAa,CAACU,QAAd,CAAuB,MAAvB,KAAkC;AACpCM,UAAAA,IAAI,EAAGC,KAAD,IAAW;AACfJ,YAAAA,SAAS,GAAGI,KAAZ;AACAhB,YAAAA,EAAE,CAAC;AAAEU,cAAAA,YAAY,EAAE,MAAhB;AAAwBM,cAAAA;AAAxB,aAAD,CAAF;AACD;AAJmC,SAAtC,CAXe;AAiBf,YAAIjB,aAAa,CAACU,QAAd,CAAuB,UAAvB,KAAsC;AACxCU,UAAAA,QAAQ,EAAE,MAAMnB,EAAE,CAAC;AAAEU,YAAAA,YAAY,EAAE,UAAhB;AAA4BE,YAAAA;AAA5B,WAAD;AADsB,SAA1C,CAjBe;AAoBf,YAAIb,aAAa,CAACU,QAAd,CAAuB,OAAvB,KAAmC;AACrCQ,UAAAA,KAAK,EAAGA,KAAD,IAAoBjB,EAAE,CAAC;AAAEU,YAAAA,YAAY,EAAE,OAAhB;AAAyBO,YAAAA;AAAzB,WAAD;AADQ,SAAvC;AApBe,OAAjB,CADF;;AA2BA,UAAIX,WAAW,CAACH,MAAZ,GAAqB,CAAzB,EAA4B;AAC1BE,QAAAA,UAAU,CAACQ,GAAX,CACE,iBAAM,GAAGP,WAAT,EAAsBQ,SAAtB,CAAgC;AAC9BC,UAAAA,IAAI,EAAGL,YAAD,IAAsC;AAC1CV,YAAAA,EAAE,CAAC;AAAEU,cAAAA,YAAF;AAAgBE,cAAAA;AAAhB,aAAD,CAAF;AACD,WAH6B;AAI9BK,UAAAA,KAAK,EAAGG,GAAD,IAAS;AACd,8CAAcA,GAAd;AACAnB,YAAAA,MAAM,CAACoB,GAAP,CAAW,8CAAX,EAA2DD,GAA3D;AACD;AAP6B,SAAhC,CADF;AAWD;;AAEDf,MAAAA,UAAU,CAACQ,GAAX,CAAeF,MAAM,CAACG,SAAP,CAAiBT,UAAjB,CAAf;AAEAA,MAAAA,UAAU,CAACQ,GAAX,CAAeF,MAAM,CAACW,OAAP,EAAf;;AAEA,UAAIvB,aAAa,CAACU,QAAd,CAAuB,aAAvB,CAAJ,EAA2C;AACzCJ,QAAAA,UAAU,CAACQ,GAAX,CAAe,MAAM;AACnBb,UAAAA,EAAE,CAAC;AAAEU,YAAAA,YAAY,EAAE,aAAhB;AAA+BE,YAAAA;AAA/B,WAAD,CAAF;AACD,SAFD;AAGD;AACF,KA7DM,CAAP;AA8DD,GAnED;AAoED","sourcesContent":["import { Observable, isObservable, merge, ObservedValueOf } from 'rxjs';\nimport { publishStream } from './publishStream';\nimport { registerError } from './registerError';\nimport { defaultBasicLogger, BasicLogger } from './logging';\n\nexport type TagNotification =\n  | 'next'\n  | 'error'\n  | 'complete'\n  | 'subscribe'\n  | 'unsubscribe';\n\nexport type NotificationInfo<T, K = void> =\n  | {\n      notification: 'next';\n      value: T;\n    }\n  | {\n      notification: 'error';\n      error: unknown;\n    }\n  | {\n      notification: 'complete';\n      lastValue?: T;\n    }\n  | {\n      notification: 'subscribe';\n    }\n  | {\n      notification: 'unsubscribe';\n      lastValue?: T;\n    }\n  | {\n      notification: K;\n      lastValue?: T;\n    };\n\nexport function executeOnNotifications<T, O extends Observable<unknown>>(\n  notifications: Array<TagNotification | O>,\n  cb: (info: NotificationInfo<T, ObservedValueOf<O>>) => void,\n  logger: BasicLogger = defaultBasicLogger()\n) {\n  return <X extends T>(stream: Observable<X>) => {\n    if (notifications.length === 0) {\n      return stream;\n    }\n\n    return new Observable<X>((subscriber) => {\n      const observables = notifications.filter(isObservable) as O[];\n\n      if (notifications.includes('subscribe')) {\n        cb({ notification: 'subscribe' });\n      }\n\n      const shared = publishStream(stream);\n\n      let lastValue: X | undefined;\n\n      subscriber.add(\n        shared.subscribe({\n          next: (value) => {\n            lastValue = value;\n          },\n          error: (_err) => {\n            // we can simply ignore the error because it\n            // goes to the subscriber below anyway, however,\n            // we cannot remove this handler otherwise the\n            // error bubbles up to the process.onUnhandled\n            return;\n          },\n          ...(notifications.includes('next') && {\n            next: (value) => {\n              lastValue = value;\n              cb({ notification: 'next', value });\n            },\n          }),\n          ...(notifications.includes('complete') && {\n            complete: () => cb({ notification: 'complete', lastValue }),\n          }),\n          ...(notifications.includes('error') && {\n            error: (error: unknown) => cb({ notification: 'error', error }),\n          }),\n        })\n      );\n\n      if (observables.length > 0) {\n        subscriber.add(\n          merge(...observables).subscribe({\n            next: (notification: ObservedValueOf<O>) => {\n              cb({ notification, lastValue });\n            },\n            error: (err) => {\n              registerError(err);\n              logger.log('💥  Logging notifications generated an error', err);\n            },\n          })\n        );\n      }\n\n      subscriber.add(shared.subscribe(subscriber));\n\n      subscriber.add(shared.connect());\n\n      if (notifications.includes('unsubscribe')) {\n        subscriber.add(() => {\n          cb({ notification: 'unsubscribe', lastValue });\n        });\n      }\n    });\n  };\n}\n"],"file":"notifications.js"}