Files
openapi-ui/vite.config.ts
2025-07-21 22:44:21 +03:00

161 lines
5.1 KiB
TypeScript

import path from 'path'
import dotenv from 'dotenv'
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import federation from '@originjs/vite-plugin-federation'
import { nodePolyfills } from 'vite-plugin-node-polyfills'
// const { VITE_BASEPREFIX } = process.env
const { parsed: options } = dotenv.config({ path: './.env.options' })
// https://vitejs.dev/config/
export default defineConfig({
root: './',
// base: VITE_BASEPREFIX || '/openapi-ui',
build: {
outDir: 'build',
modulePreload: false,
target: 'esnext',
minify: false,
cssCodeSplit: false,
rollupOptions: {
output: {
entryFileNames: `[name]-react.js`,
chunkFileNames: `[name]-react.js`,
assetFileNames: `[name].[ext]`,
},
},
},
publicDir: 'public',
plugins: [
react(),
federation({
name: 'openapi-ui',
filename: 'remoteEntry.js',
exposes: {
'./App': './src/federation.tsx',
},
shared: ['react', 'react-dom', 'react-redux', 'react-router-dom', 'antd', '@tanstack/react-query'],
}),
nodePolyfills({
include: ['buffer', 'process', 'path'],
globals: {
Buffer: true, // can also be 'build', 'dev', or false
global: true,
process: true,
},
}),
],
resolve: {
alias: {
api: path.resolve(__dirname, './src/api'),
components: path.resolve(__dirname, './src/components'),
constants: path.resolve(__dirname, './src/constants'),
localTypes: path.resolve(__dirname, './src/localTypes'),
mocks: path.resolve(__dirname, './src/mocks'),
pages: path.resolve(__dirname, './src/pages'),
store: path.resolve(__dirname, './src/store'),
templates: path.resolve(__dirname, './src/templates'),
utils: path.resolve(__dirname, './src/utils'),
hooks: path.resolve(__dirname, './src/hooks'),
},
},
server: {
host: '0.0.0.0',
port: 4000,
open: '/openapi-ui',
proxy: {
'^/api/clusters/.*/k8s/': {
// '/api': {
target: `${options?.KUBE_API_URL}/api/clusters`,
changeOrigin: true,
secure: false,
ws: true,
rewrite: path => path.replace(/^\/api\/clusters\//, '/'),
// bypass: function (req, res, proxyOptions) {
// const url = req.url || ''
// if (/^\/api\/clusters\/[^/]+\/k8s\//.test(url)) {
// req.url = url.replace(/^\/api\/clusters\//, '/')
// proxyOptions.target = `${options?.KUBE_API_URL}/api/clusters`
// } else if (/^\/api\/clusters\/[^/]+\/openapi-bff/.test(url)) {
// console.log(req.url)
// proxyOptions.target = options?.BFF_URL
// }
// return null // continue proxy
// },
// configure: (proxy, _options) => {
// proxy.on('error', (err, _req, _res) => {
// console.log('proxy error', err)
// })
// proxy.on('proxyReq', (proxyReq, req, _res) => {
// console.log(
// 'Sending Request:',
// req.method,
// req.url,
// ' => TO THE TARGET => ',
// proxyReq.method,
// proxyReq.protocol,
// proxyReq.host,
// proxyReq.path,
// JSON.stringify(proxyReq.getHeaders()),
// )
// })
// proxy.on('proxyRes', (proxyRes, req, _res) => {
// console.log(
// 'Received Response from the Target:',
// proxyRes.statusCode,
// req.url,
// JSON.stringify(proxyRes.headers),
// )
// })
// },
},
'/clusterlist': {
target: `${options?.KUBE_API_URL}/clusterlist`,
changeOrigin: true,
secure: false,
rewrite: path => path.replace(/^\/clusterlist/, ''),
},
'^/api/clusters/.*/openapi-bff': {
target: options?.BFF_URL,
changeOrigin: true,
secure: false,
// rewrite: path => path.replace(/^\/bff/, ''),
// configure: (proxy, _options) => {
// proxy.on('error', (err, _req, _res) => {
// console.log('proxy error', err)
// })
// proxy.on('proxyReq', (proxyReq, req, _res) => {
// console.log(
// 'Sending Request:',
// req.method,
// req.url,
// ' => TO THE TARGET => ',
// proxyReq.method,
// proxyReq.protocol,
// proxyReq.host,
// proxyReq.path,
// JSON.stringify(proxyReq.getHeaders()),
// )
// })
// proxy.on('proxyRes', (proxyRes, req, _res) => {
// console.log(
// 'Received Response from the Target:',
// proxyRes.statusCode,
// req.url,
// JSON.stringify(proxyRes.headers),
// )
// })
// },
},
'^/api/clusters/.*/openapi-bff-ws': {
target: options?.BFF_URL,
changeOrigin: true,
secure: false,
ws: true,
},
},
},
})