All files / Api/Utils createService.js

100% Statements 15/15
75% Branches 6/8
100% Functions 4/4
100% Lines 13/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 581x           1x         1x 1x   8x         1x           2x   78x 39x   39x   39x       4x                           39x              
import {
    map,
    share,
    switchMap,
    withLatestFrom,
} from 'rxjs/operators';
import {
    Subject,
    of,
} from 'rxjs';
 
import createServiceResponseStream from './createServiceResponseStream';
import defaultServiceProxy from '../../Shared/Utils/mapDataToCamelCase';
 
const serviceUrlMapper = (serviceType, [requestData, latestConfig]) => ({
    requestData,
    serviceUrl: latestConfig.serviceUrls[serviceType],
});
 
const createService = (
    serviceType,
    configStoreUpdate$,
    serviceRequest,
    handleServiceError,
    retries,
    interceptResponseWithStream = response => of(response),
    serviceProxy = defaultServiceProxy,
) => {
    const mapRequestToServiceUrl = serviceUrlMapper.bind(null, serviceType);
 
    const request$ = new Subject();
 
    const response$ = request$
        .pipe(
            withLatestFrom(configStoreUpdate$),
            map(mapRequestToServiceUrl),
            switchMap(({ requestData, serviceUrl }) =>
                createServiceResponseStream(
                    serviceUrl,
                    serviceRequest,
                    serviceProxy,
                    requestData,
                    handleServiceError,
                    retries,
                )
            ),
            switchMap(interceptResponseWithStream),
            share(),
        );
 
    return {
        request$,
        response$,
    };
};
 
export default createService;