All files / thirstieapi/utils apirequest.js

35.29% Statements 6/17
37.5% Branches 3/8
50% Functions 1/2
35.29% Lines 6/17

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  2x 2x 1x 1x     2x   2x                                                                          
export function buildURL (baseUrl, endpointUrl, params = null) {
  let queryString = '';
  if (params) {
    const searchParams = new URLSearchParams(params);
    queryString = '?' + searchParams.toString();
  }
 
  const requestUrl = `${baseUrl}${endpointUrl}${queryString}`;
 
  return { requestUrl, queryString };
}
 
export async function apiRequest (url, requestConfig) {
  const apiResponse = {
    ok: null,
    status: null,
    statusText: null,
    data: {}
  };
  try {
    const response = await fetch(url, requestConfig);
 
    let responseBody = {};
    const headers = response.headers;
    const hasBody = headers && headers.get('content-type')?.indexOf('application/json') > -1 && parseInt(headers.get('content-length')) > 0;
    if (hasBody) {
      responseBody = await response.json();
    }
    return Object.assign(apiResponse, {
      ok: response.ok,
      status: response.status,
      statusText: response.statusText,
      data: responseBody,
      url
    });
  } catch (error) {
    console.error('apiRequest error: ', error);
    return Object.assign(apiResponse, {
      ok: false,
      status: 500,
      statusText: 'ERROR',
      data: { message: 'Network error', error },
      url
    });
  }
}