2026-06-10 15:01:09 -05:00
|
|
|
import path from 'node:path';
|
2026-06-24 15:35:08 -05:00
|
|
|
import type { ServerResponse } from 'node:http';
|
2026-06-10 15:01:09 -05:00
|
|
|
|
|
|
|
|
import react from '@vitejs/plugin-react';
|
2026-06-24 15:35:08 -05:00
|
|
|
import { defineConfig, loadEnv, type PluginOption } from 'vite';
|
2026-06-10 15:01:09 -05:00
|
|
|
|
2026-06-12 08:19:40 -05:00
|
|
|
import packageJson from './package.json';
|
|
|
|
|
|
2026-06-10 15:01:09 -05:00
|
|
|
const platformExtensions = [
|
|
|
|
|
'.web.tsx',
|
|
|
|
|
'.web.ts',
|
|
|
|
|
'.tsx',
|
|
|
|
|
'.ts',
|
|
|
|
|
'.web.jsx',
|
|
|
|
|
'.web.js',
|
|
|
|
|
'.jsx',
|
|
|
|
|
'.js',
|
|
|
|
|
'.json',
|
|
|
|
|
];
|
|
|
|
|
|
2026-06-24 15:35:08 -05:00
|
|
|
const frontendHealthStartedAt = Date.now();
|
|
|
|
|
const frontendHealthStartedAtIso = new Date(
|
|
|
|
|
frontendHealthStartedAt,
|
|
|
|
|
).toISOString();
|
|
|
|
|
|
|
|
|
|
function createFrontendHealthPayload() {
|
|
|
|
|
return {
|
|
|
|
|
ok: true,
|
|
|
|
|
service: 'blb-frontend',
|
|
|
|
|
version: packageJson.version,
|
|
|
|
|
startedAt: frontendHealthStartedAtIso,
|
|
|
|
|
timestamp: new Date().toISOString(),
|
|
|
|
|
uptimeSeconds: Math.max(
|
|
|
|
|
0,
|
|
|
|
|
Math.round((Date.now() - frontendHealthStartedAt) / 1000),
|
|
|
|
|
),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function writeJsonResponse(
|
|
|
|
|
response: ServerResponse,
|
|
|
|
|
statusCode: number,
|
|
|
|
|
body: object,
|
|
|
|
|
) {
|
|
|
|
|
response.writeHead(statusCode, {
|
|
|
|
|
'Cache-Control': 'no-store',
|
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
|
});
|
|
|
|
|
response.end(`${JSON.stringify(body)}\n`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function frontendHealthPlugin(): PluginOption {
|
|
|
|
|
return {
|
|
|
|
|
name: 'blb-frontend-health',
|
|
|
|
|
configurePreviewServer(server) {
|
|
|
|
|
server.middlewares.use((request, response, next) => {
|
|
|
|
|
if (request.url?.split('?')[0] !== '/health') {
|
|
|
|
|
next();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
writeJsonResponse(response, 200, createFrontendHealthPayload());
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
configureServer(server) {
|
|
|
|
|
server.middlewares.use((request, response, next) => {
|
|
|
|
|
if (request.url?.split('?')[0] !== '/health') {
|
|
|
|
|
next();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
writeJsonResponse(response, 200, createFrontendHealthPayload());
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default defineConfig(({ mode }) => {
|
|
|
|
|
const env = loadEnv(mode, __dirname, '');
|
|
|
|
|
const toolkitSocketUrl =
|
|
|
|
|
env.VITE_TOOLKIT_SOCKET_URL ?? env.TOOLKIT_SOCKET_URL ?? '';
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
define: {
|
|
|
|
|
__TOOLKIT_SOCKET_URL__: JSON.stringify(toolkitSocketUrl),
|
|
|
|
|
'import.meta.env.VITE_APP_VERSION': JSON.stringify(packageJson.version),
|
|
|
|
|
},
|
|
|
|
|
plugins: [frontendHealthPlugin(), react()],
|
|
|
|
|
resolve: {
|
|
|
|
|
alias: [{ find: /^react-native$/, replacement: 'react-native-web' }],
|
|
|
|
|
dedupe: ['react', 'react-dom', 'react-native-web'],
|
|
|
|
|
extensions: platformExtensions,
|
|
|
|
|
},
|
|
|
|
|
optimizeDeps: {
|
|
|
|
|
exclude: ['react-native-safe-area-context'],
|
|
|
|
|
},
|
|
|
|
|
build: {
|
|
|
|
|
outDir: path.resolve(__dirname, 'dist/renderer'),
|
|
|
|
|
emptyOutDir: true,
|
|
|
|
|
},
|
|
|
|
|
server: {
|
|
|
|
|
host: '127.0.0.1',
|
|
|
|
|
port: 5173,
|
|
|
|
|
},
|
|
|
|
|
};
|
2026-06-10 15:01:09 -05:00
|
|
|
});
|