12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import type { HttpProxy, ProxyOptions } from 'vite';
- import { bgRed, bgYellow, green, lightBlue } from 'kolorist';
- import { consola } from 'consola';
- import { createServiceConfig } from '../../src/utils/service';
- /**
- * Set http proxy
- *
- * @param env - The current env
- * @param enable - If enable http proxy
- */
- export function createViteProxy(env: Env.ImportMeta, enable: boolean) {
- const isEnableHttpProxy = enable && env.VITE_HTTP_PROXY === 'Y';
- if (!isEnableHttpProxy) return undefined;
- const isEnableProxyLog = env.VITE_PROXY_LOG === 'Y';
- const { baseURL, proxyPattern, other } = createServiceConfig(env);
- const proxy: Record<string, ProxyOptions> = createProxyItem({ baseURL, proxyPattern }, isEnableProxyLog);
- other.forEach(item => {
- Object.assign(proxy, createProxyItem(item, isEnableProxyLog));
- });
- return proxy;
- }
- function createProxyItem(item: App.Service.ServiceConfigItem, enableLog: boolean) {
- const proxy: Record<string, ProxyOptions> = {};
- proxy[item.proxyPattern] = {
- target: item.baseURL,
- changeOrigin: true,
- configure: (_proxy: HttpProxy.Server, options: ProxyOptions) => {
- _proxy.on('proxyReq', (_proxyReq, req, _res) => {
- if (!enableLog) return;
- const requestUrl = `${lightBlue('[proxy url]')}: ${bgYellow(` ${req.method} `)} ${green(`${item.proxyPattern}${req.url}`)}`;
- const proxyUrl = `${lightBlue('[real request url]')}: ${green(`${options.target}${req.url}`)}`;
- consola.log(`${requestUrl}\n${proxyUrl}`);
- });
- _proxy.on('error', (_err, req, _res) => {
- if (!enableLog) return;
- consola.log(bgRed(`Error: ${req.method} `), green(`${options.target}${req.url}`));
- });
- },
- rewrite: path => path.replace(new RegExp(`^${item.proxyPattern}`), '')
- };
- return proxy;
- }
|