Files
jacob-mathison 79d36c4e2d
Lint and Build Checks / Lint, Test, and Build (push) Failing after 364h2m28s
feat(deploy): run shared toolkit socket
2026-06-24 15:35:08 -05:00

107 lines
2.6 KiB
TypeScript

import path from 'node:path';
import type { ServerResponse } from 'node:http';
import react from '@vitejs/plugin-react';
import { defineConfig, loadEnv, type PluginOption } from 'vite';
import packageJson from './package.json';
const platformExtensions = [
'.web.tsx',
'.web.ts',
'.tsx',
'.ts',
'.web.jsx',
'.web.js',
'.jsx',
'.js',
'.json',
];
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,
},
};
});