@roots/bud-server
Version:
Development server for @roots/bud
50 lines (49 loc) • 3.61 kB
JavaScript
import filterUndefined from '@roots/bud-support/filter-undefined';
import { createProxyMiddleware } from '@roots/bud-support/http-proxy-middleware';
import * as responseInterceptor from './responseInterceptor.js';
/**
* Proxy middleware factory
*/
export const factory = (app) => createProxyMiddleware(makeOptions(app));
export const makeOptions = (app) => {
const url = {
dev: app.server.publicUrl,
proxy: app.server.proxyUrl,
publicProxy: app.server.publicProxyUrl,
};
return filterUndefined(app.hooks.filter(`dev.middleware.proxy.options`, {
agent: app.hooks.filter(`dev.middleware.proxy.options.agent`, undefined),
autoRewrite: app.hooks.filter(`dev.middleware.proxy.options.autoRewrite`, true),
buffer: app.hooks.filter(`dev.middleware.proxy.options.buffer`, undefined),
changeOrigin: app.hooks.filter(`dev.middleware.proxy.options.changeOrigin`, true),
cookieDomainRewrite: app.hooks.filter(`dev.middleware.proxy.options.cookieDomainRewrite`, url.dev?.host),
cookiePathRewrite: app.hooks.filter(`dev.middleware.proxy.options.cookiePathRewrite`, undefined),
ejectPlugins: app.hooks.filter(`dev.middleware.proxy.options.ejectPlugins`, undefined),
followRedirects: app.hooks.filter(`dev.middleware.proxy.options.followRedirects`, false),
headers: app.hooks.filter(`dev.middleware.proxy.options.headers`, undefined),
hostRewrite: app.hooks.filter(`dev.middleware.proxy.options.hostRewrite`, url.dev?.host),
ignorePath: app.hooks.filter(`dev.middleware.proxy.options.ignorePath`, undefined),
localAddress: app.hooks.filter(`dev.middleware.proxy.options.localAddress`, undefined),
logger: app.hooks.filter(`dev.middleware.proxy.options.logger`, app.server.logger?.scope(app.label, `proxy`) ?? console),
on: filterUndefined(app.hooks.filter(`dev.middleware.proxy.options.on`, {
proxyReq: app.hooks.filter(`dev.middleware.proxy.options.onProxyReq`, undefined),
proxyRes: app.hooks.filter(`dev.middleware.proxy.options.onProxyRes`, responseInterceptor.factory(app, url)),
})),
pathFilter: app.hooks.filter(`dev.middleware.proxy.options.pathFilter`, [`!/bud/hot/**`]),
pathRewrite: app.hooks.filter(`dev.middleware.proxy.options.pathRewrite`, undefined),
plugins: app.hooks.filter(`dev.middleware.proxy.options.plugins`, undefined),
prependPath: app.hooks.filter(`dev.middleware.proxy.options.prependPath`, undefined),
preserveHeaderKeyCase: app.hooks.filter(`dev.middleware.proxy.options.preserveHeaderKeyCase`, undefined),
protocolRewrite: app.hooks.filter(`dev.middleware.proxy.options.protocolRewrite`, url.publicProxy.protocol.startsWith(`https`) ? `https` : undefined),
proxyTimeout: app.hooks.filter(`dev.middleware.proxy.options.proxyTimeout`, undefined),
router: app.hooks.filter(`dev.middleware.proxy.options.router`, undefined),
secure: app.hooks.filter(`dev.middleware.proxy.options.secure`, false),
selfHandleResponse: app.hooks.filter(`dev.middleware.proxy.options.selfHandleResponse`, true),
ssl: app.hooks.filter(`dev.middleware.proxy.options.ssl`, undefined),
target: url.proxy,
timeout: app.hooks.filter(`dev.middleware.proxy.options.timeout`, undefined),
toProxy: app.hooks.filter(`dev.middleware.proxy.options.toProxy`, undefined),
ws: app.hooks.filter(`dev.middleware.proxy.options.ws`, undefined),
xfwd: app.hooks.filter(`dev.middleware.proxy.options.xfwd`, undefined),
}));
};