@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
1 lines • 5.4 kB
Source Map (JSON)
{"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"}