amiddy
Version:
Middleware server with high configurability for development
1 lines • 1.34 kB
JavaScript
import httpProxy from"http-proxy";import vhost from"vhost";import proxyMock from"./mock.js";import proxyListen from"./listen.js";import proxyUtils from"./utils.js";const privateApi={getResponseOptions:config=>{const options={headers:{}},proxyResponseOptions=config&&config.proxy&&config.proxy.response||{},proxyResponseHeaders=proxyResponseOptions.headers;return proxyResponseHeaders&&"object"==typeof proxyResponseHeaders&&(options.headers=proxyResponseHeaders),options},vhostCb:(proxy,ssl,config)=>{const source=config.source,vhostConf=config.vhost,proxyConf=config.proxy,proxyOptions=proxyConf.options,deps=config.deps;return(req,res)=>{const dependency=proxyUtils.getDependency(deps,req.url),mockedResponse=proxyMock.execute(req,res,dependency||source,config);if(!mockedResponse){const useProxyOptions={...proxyOptions,headers:{...proxyOptions.headers,host:vhostConf.name},target:proxyUtils.buildUrl(source)};proxyUtils.extendOptions(useProxyOptions,ssl,dependency),proxy.proxyRequest(req,res,useProxyOptions)}}}},service={};service.create=(config,ssl)=>{const proxy=httpProxy.createProxyServer();return proxy.on("proxyReq",proxyListen.request),proxy.on("proxyRes",proxyListen.response(config)),proxy.on("error",proxyListen.error),vhost(config.vhost.name,privateApi.vhostCb(proxy,ssl,config))};export{privateApi};export default service;