import { inject, Reader } from 'readuz'; import { ArgumentNullError } from './ArgumentNullError'; import { DIReader } from './common'; import { isArgumentNullError } from './helpers'; export type App = () => void; export const app: DIReader = inject( env => env.subscribeToCxf, env => env.log, env => env.logError, ( subscribeCxf, log, logError, ) => () => { try { log('App has started'); subscribeCxf(); } catch (e) { if (isArgumentNullError(e)) { logError(e); } } }, ); export type SubscribeToCxf = Reader; export const subscribeToCxf: DIReader = inject( env => env.cxfProvider, env => env.onTrack, env => env.config, env => env.tryCatch, ( cxfProvider, onTrack, { CXF_TRACK_MSG }, tryCatch, ) => () => { const cxf = cxfProvider.get(); if (!cxf) { throw new ArgumentNullError('cxf', cxf); } cxf.on(CXF_TRACK_MSG, tryCatch(onTrack)); }, );