{"version":3,"sources":["../../../src/shared/sockets/createSocketEpicContext.ts"],"names":["createSocketEpicContext","params","request","commands","binary","logger","buildDeps","closed","pipe","takeUntilClosed","stream","subscribe","publish","deps","id"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AAcO,SAASA,uBAAT,CACLC,MADK,EAEmB;AAAA;;AACxB,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,QAAX;AAAqBC,IAAAA,MAArB;AAA6BC,IAAAA,MAA7B;AAAqCC,IAAAA;AAArC,MAAmDL,MAAzD;AAEA,QAAMM,MAAM,GAAGJ,QAAQ,CAACK,IAAT,CAAc,mCAAd,CAAf;;AAEA,QAAMC,eAAe,GAAG,MAAUC,MAAJ,IAC5B,0BAAaH,MAAb,EAAqBG,MAArB,CADF;;AAGA,QAAMC,SAAS,GAAG,MAAM,8BAAeH,IAAf,CAAoBC,eAAe,EAAnC,CAAxB;;AAEA,QAAMG,OAAO,GAAG,MAAOF,MAAD,IACpBA,MAAM,CAACF,IAAP,CAAY,+BAAZ,CADF;;AAGA,QAAMK,IAAY,iBAAGP,SAAH,aAAGA,SAAH,uBAAGA,SAAS,EAAZ,mDAAoB,EAAtC;AAEA,SAAO,EACL,GAAGO,IADE;AAELC,IAAAA,EAAE,EAAEZ,OAAO,CAACY,EAFP;AAGLZ,IAAAA,OAHK;AAILE,IAAAA,MAJK;AAKLQ,IAAAA,OALK;AAMLD,IAAAA,SANK;AAOLN,IAAAA,MAPK;AAQLI,IAAAA;AARK,GAAP;AAUD","sourcesContent":["import { ISocketEpicContext } from '../kit';\nimport { IncomingMessage } from 'http';\nimport { Observable } from 'rxjs';\nimport { fromEventBus, pushToEventBus } from '../eventBus';\nimport { takeUntil } from 'rxjs/operators';\nimport { whenCompleted } from '../whenCompleted';\nimport { IAction } from '../action';\nimport { TaggedLogger } from '../logging';\n\nexport interface ICreateContextParams<D extends Record<string, unknown> = {}> {\n  request: IncomingMessage & {\n    id: string;\n  };\n  commands: Observable<IAction>;\n  binary: Observable<Buffer>;\n  logger: TaggedLogger;\n  buildDeps?: () => D;\n}\n\nexport function createSocketEpicContext<D extends Record<string, unknown> = {}>(\n  params: ICreateContextParams<D>\n): ISocketEpicContext & D {\n  const { request, commands, binary, logger, buildDeps } = params;\n\n  const closed = commands.pipe(whenCompleted());\n\n  const takeUntilClosed = () => <T>(stream: Observable<T>) =>\n    takeUntil<T>(closed)(stream);\n\n  const subscribe = () => fromEventBus().pipe(takeUntilClosed());\n\n  const publish = () => (stream: Observable<IAction>) =>\n    stream.pipe(pushToEventBus());\n\n  const deps: D | {} = buildDeps?.() ?? {};\n\n  return {\n    ...deps,\n    id: request.id,\n    request,\n    binary,\n    publish,\n    subscribe,\n    logger,\n    takeUntilClosed,\n  } as D & ISocketEpicContext;\n}\n"],"file":"createSocketEpicContext.js"}