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 70 71 | 1x 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 };
|