All files index.js

66.66% Statements 22/33
54.54% Branches 6/11
50% Functions 2/4
68.75% Lines 22/32

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 58 59 60 61 62 63 64 65 66 67 68 69 701x 1x 1x 1x 1x 1x 1x                   1x 1x 1x   1x       1x           1x     1x                       1x 1x 1x   1x                     1x 1x 1x           1x  
const express = require('express');
const { createHttpTerminator } = require('http-terminator');
const { OPTIONS } = require('./global');
const { logger } = require('./logger');
const { setupDocs } = require('./apidocBuild');
const { buildRequestHeaders, buildResponse } = require('./buildApiResponse');
const CACHE = { app: null, httpTerminator: null };
 
/**
 * Build api responses
 *
 * @param {Array} apiJson
 * @param {object} options
 * @param {number} options.port
 * @returns {*}
 */
const setupResponse = (apiJson = [], { port } = OPTIONS) => {
  const { routesLoaded, appResponses } = buildResponse(apiJson);
  let httpTerminator = null;
 
  appResponses.forEach(response => {
    CACHE.app[response.type](response.url, response.callback);
  });
 
  Iif (routesLoaded) {
    const server = CACHE.app.listen(port, () => logger.info(`listening\t:${port}`));
    httpTerminator = createHttpTerminator({
      server
    });
  } else {
    logger.info('waiting');
  }
 
  return httpTerminator;
};
 
/**
 * ApiDocMock
 *
 * @param {object} options
 * @param {number} options.port
 * @param {string|string[]} options.watchPath
 * @param {string} options.docsPath
 * @returns {*}
 */
const apiDocMock = async ({ port, watchPath, docsPath } = OPTIONS) => {
  const apiJson = setupDocs();
  let httpTerminator = null;
 
  Iif (apiJson.length) {
    if (CACHE?.httpTerminator?.terminate) {
      await CACHE.httpTerminator.terminate();
    }
 
    CACHE.app = express();
    CACHE.app.use(`/docs`, express.static(docsPath));
    CACHE.app.use(buildRequestHeaders);
    CACHE.httpTerminator = httpTerminator = setupResponse(apiJson);
  }
 
  Eif (httpTerminator === null) {
    logger.error(`Error, confirm settings:\nport=${port}\nwatch=${watchPath}\ndocs=${docsPath}`);
    throw new Error('Server failed to load');
  }
 
  return httpTerminator;
};
 
module.exports = { apiDocMock, setupDocs, setupResponse, OPTIONS };