amiddy
Version:
Middleware server with high configurability for development
1 lines • 1.51 kB
JavaScript
import file from"../file.js";import logger from"../logger.js";import proxyRegistry from"./registry.js";import proxyUtils from"./utils.js";const privateApi={};privateApi.getHeaders=(mock,options)=>{const headers=options&&options.headers||{},mockHeaders=mock.headers||{};return Object.keys(mockHeaders).forEach(header=>{headers[header]=mockHeaders[header]}),headers},privateApi.getResponse=mock=>{let response=mock.response||"";if(mock.fixture)try{const absPath=file.getAbsolutePath(mock.fixture);response=file.read(absPath)}catch(e){logger.error(e.message)}try{response=JSON.parse(response)}catch(e){}return response},privateApi.get=(dependency,url,method,options)=>{const mock=proxyUtils.getMock(dependency.mocks,url,method);if(mock){const headers=privateApi.getHeaders(mock,options),response=privateApi.getResponse(mock),status=mock.status||200;return{headers,response,status}}};const service={execute:(req,res,dependency,config)=>{if(!config.options.mock.enabled)return!1;const url=req.url,method=req.method,mock=privateApi.get(dependency,url,method,config.proxy.response);if(mock){const responseHeaders=mock.headers;responseHeaders&&Object.keys(responseHeaders).forEach(headerName=>{res.setHeader(headerName,responseHeaders[headerName])}),res.status(mock.status),res.send(mock.response);const data=proxyRegistry.generateEntry({method:method,path:url},{target:proxyUtils.buildUrlObject(dependency)});return logger.response(data,{statusCode:mock.status}),!0}return!1}};export{privateApi};export default service;