@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
1 lines • 5.45 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/shared/profiler/send.ts"],"names":["sendOne","params","timestamp","version","name","data","event","appName","source","traceKey","PubSub","publish","optionalFilter","predicate","stream","pipe","defaultTransform","action","filter","_","transform","__","logParams","type","sendActions","deps","input","shared","err","logger","error","sendAllTimings","timing","toUpperCase","timeTook","time","details"],"mappings":";;;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AASA;;AACA;;;;;;AAUO,MAAMA,OAAO,GAAG,MAAOC,MAAP,IAA+B;AACpD,QAAMC,SAAS,GAAG,MAAM,iBAAxB;AACA,QAAMC,OAAO,GAAG,MAAM,sBAAtB;AACA,QAAMC,IAAI,GAAG,MAAM,mBAAnB;AACA,QAAMC,IAAqB,GAAG;AAC5BC,IAAAA,KAAK,EAAEL,MAAM,CAACK,KADc;AAE5BD,IAAAA,IAAI,EAAE;AACJF,MAAAA,OADI;AAEJI,MAAAA,OAAO,EAAEH,IAFL;AAGJ,SAAGH,MAAM,CAACI;AAHN,KAFsB;AAO5BG,IAAAA,MAAM,EAAE,QAPoB;AAQ5BN,IAAAA,SAR4B;AAS5B,QAAID,MAAM,CAACQ,QAAP,IAAmB;AACrBA,MAAAA,QAAQ,EAAER,MAAM,CAACQ;AADI,KAAvB;AAT4B,GAA9B;AAaA,SAAOC,MAAM,CAACC,OAAP,CAAe,UAAf,EAA2BN,IAA3B,CAAP;AACD,CAlBM;;;;AAoBP,SAASO,cAAT,CACEC,SADF,EAEE;AACA,SAAQC,MAAD,IAA2B;AAChC,QAAID,SAAJ,EAAe;AACb,aAAOC,MAAM,CAACC,IAAP,CAAY,uBAAOF,SAAP,CAAZ,CAAP;AACD,KAFD,MAEO;AACL,aAAOC,MAAP;AACD;AACF,GAND;AAOD;;AAUD,SAASE,gBAAT,CACEC,MADF,EAEEhB,MAFF,EAGe;AACb,QAAM;AAAEiB,IAAAA,MAAM,EAAEC,CAAV;AAAaC,IAAAA,SAAS,EAAEC,EAAxB;AAA4B,OAAGC;AAA/B,MAA6CrB,MAAM,IAAI,EAA7D;AACA,SAAO;AACLK,IAAAA,KAAK,EAAEW,MAAM,CAACM,IADT;AAELlB,IAAAA,IAAI,EAAGY,MAFF;AAGL,OAAGK;AAHE,GAAP;AAKD;;AAEM,MAAME,WAAW,GAAG,CACzBvB,MADyB,EAEzBwB,IAAI,GAAG;AACLzB,EAAAA;AADK,CAFkB,KAKrB0B,KAAD,IACHA,KAAK,CAACX,IAAN,CACE,wBAAQY,MAAM,IACZ,iBACEA,MADF,EAEEA,MAAM,CAACZ,IAAP,CACEH,cAAc,CAACX,MAAM,IAAIA,MAAM,CAACiB,MAAlB,CADhB,EAEE,yBAASD,MAAM,IACb,iBAAM,MACJQ,IAAI,CAACzB,OAAL,CACE,CAAEC,MAAM,IAAIA,MAAM,CAACmB,SAAlB,IAAgCJ,gBAAjC,EACEC,MADF,EAEEhB,MAFF,CADF,CADF,EAOEc,IAPF,CAQE,2BAAWa,GAAG,IAAI;AAAA;;AAChB,qBAAC3B,MAAD,aAACA,MAAD,uBAACA,MAAM,CAAE4B,MAAT,2DAAmB,kCAAnB,EAAyCC,KAAzC,CACE,qCADF,EAEEF,GAFF;AAIA,SAAO,kBAAP;AACD,CAND,CARF,CADF,CAFF,EAoBE,gCApBF,CAFF,CADF,CADF,CANK;;;;AAoCA,SAASG,cAAT,GAA0B;AAC/B,SAAO,gCAAkBhB,IAAlB,CACL,oBAAIiB,MAAM,KAAK;AACbT,IAAAA,IAAI,EAAG,YAAWS,MAAM,CAAC5B,IAAP,CAAY6B,WAAZ,EAA0B,EAD/B;AAEbC,IAAAA,QAAQ,EAAEF,MAAM,CAACG,IAFJ;AAGb,OAAGH,MAAM,CAACI;AAHG,GAAL,CAAV,CADK,EAMLZ,WAAW,EANN,EAOL,gCAPK,CAAP;AASD","sourcesContent":["import { Logs } from '@aimee-blue/ab-contracts';\nimport { time } from '../time';\nimport * as PubSub from '../pubsub';\nimport { appVersion, appName } from '../app';\nimport { Observable, merge, empty, defer } from 'rxjs';\nimport {\n ignoreElements,\n catchError,\n filter,\n publish,\n mergeMap,\n map,\n} from 'rxjs/operators';\nimport { IAction } from '../action';\nimport { timesRegistered } from './streams';\nimport { BasicLogger, defaultBasicLogger } from '../logging';\n\ninterface ISendParams {\n event: string;\n traceKey?: string;\n data?: {\n [key: string]: unknown;\n };\n}\n\nexport const sendOne = async (params: ISendParams) => {\n const timestamp = await time();\n const version = await appVersion();\n const name = await appName();\n const data: Logs.ILogParams = {\n event: params.event,\n data: {\n version,\n appName: name,\n ...params.data,\n },\n source: 'server',\n timestamp,\n ...(params.traceKey && {\n traceKey: params.traceKey,\n }),\n };\n return PubSub.publish('profiler', data);\n};\n\nfunction optionalFilter<A extends IAction, AOut extends A = A>(\n predicate?: (action: A) => action is AOut\n) {\n return (stream: Observable<A>) => {\n if (predicate) {\n return stream.pipe(filter(predicate));\n } else {\n return stream;\n }\n };\n}\n\nexport interface ISendActionsParams<A extends IAction, AOut extends A = A> {\n event?: string;\n traceKey?: string;\n filter?: (action: A) => action is AOut;\n transform?: (action: A, params?: ISendActionsParams<A, AOut>) => ISendParams;\n logger?: BasicLogger;\n}\n\nfunction defaultTransform(\n action: IAction,\n params?: ISendActionsParams<IAction>\n): ISendParams {\n const { filter: _, transform: __, ...logParams } = params || {};\n return {\n event: action.type,\n data: (action as unknown) as { [key: string]: unknown },\n ...logParams,\n };\n}\n\nexport const sendActions = <A extends IAction, AOut extends A = A>(\n params?: ISendActionsParams<A, AOut>,\n deps = {\n sendOne,\n }\n) => (input: Observable<A>) =>\n input.pipe(\n publish(shared =>\n merge(\n shared,\n shared.pipe(\n optionalFilter(params && params.filter),\n mergeMap(action =>\n defer(() =>\n deps.sendOne(\n ((params && params.transform) || defaultTransform)(\n action,\n params\n )\n )\n ).pipe(\n catchError(err => {\n (params?.logger ?? defaultBasicLogger()).error(\n '💥 An error when profiling actions',\n err\n );\n return empty();\n })\n )\n ),\n ignoreElements()\n )\n )\n )\n );\n\nexport function sendAllTimings() {\n return timesRegistered().pipe(\n map(timing => ({\n type: `PROFILER/${timing.name.toUpperCase()}`,\n timeTook: timing.time,\n ...timing.details,\n })),\n sendActions(),\n ignoreElements()\n );\n}\n"],"file":"send.js"}