mirror of
https://github.com/SlimeVR/SlimeVR-Server.git
synced 2026-04-06 02:01:58 +02:00
83 lines
2.1 KiB
TypeScript
83 lines
2.1 KiB
TypeScript
import { sentryVitePlugin } from '@sentry/vite-plugin';
|
|
import react from '@vitejs/plugin-react';
|
|
import { defineConfig, PluginOption } from 'vite';
|
|
import { execSync } from 'child_process';
|
|
import path from 'path';
|
|
import { visualizer } from 'rollup-plugin-visualizer';
|
|
import jotaiReactRefresh from 'jotai/babel/plugin-react-refresh';
|
|
|
|
const commitHash = execSync('git rev-parse --verify --short HEAD').toString().trim();
|
|
const versionTag = execSync('git --no-pager tag --sort -taggerdate --points-at HEAD')
|
|
.toString()
|
|
.split('\n')[0]
|
|
.trim();
|
|
// If not empty then it's not clean
|
|
const gitCleanString = execSync('git status --porcelain').toString();
|
|
const gitClean = gitCleanString ? false : true;
|
|
if (!gitClean) console.log('Git is dirty because of:\n' + gitCleanString);
|
|
|
|
console.log(`version is ${versionTag || commitHash}${gitClean ? '' : '-dirty'}`);
|
|
|
|
// Detect fluent file changes
|
|
export function i18nHotReload(): PluginOption {
|
|
return {
|
|
name: 'i18n-hot-reload',
|
|
handleHotUpdate({ file, server }) {
|
|
if (file.endsWith('.ftl')) {
|
|
console.log('Fluent files updated');
|
|
server.hot.send({
|
|
type: 'custom',
|
|
event: 'locales-update',
|
|
});
|
|
}
|
|
},
|
|
};
|
|
}
|
|
|
|
// https://vitejs.dev/config/
|
|
export default defineConfig({
|
|
define: {
|
|
__COMMIT_HASH__: JSON.stringify(commitHash),
|
|
__VERSION_TAG__: JSON.stringify(versionTag),
|
|
__GIT_CLEAN__: gitClean,
|
|
},
|
|
plugins: [
|
|
react({ babel: { plugins: [jotaiReactRefresh] } }),
|
|
i18nHotReload(),
|
|
visualizer() as PluginOption,
|
|
sentryVitePlugin({
|
|
org: 'slimevr',
|
|
project: 'slimevr-server-gui-react',
|
|
}),
|
|
],
|
|
build: {
|
|
target: 'es2022',
|
|
emptyOutDir: true,
|
|
|
|
commonjsOptions: {
|
|
include: [/solarxr-protocol/, /node_modules/],
|
|
},
|
|
|
|
sourcemap: true,
|
|
},
|
|
optimizeDeps: {
|
|
esbuildOptions: {
|
|
target: 'es2022',
|
|
},
|
|
needsInterop: ['solarxr-protocol'],
|
|
include: ['solarxr-protocol'],
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
'@': path.resolve(__dirname, 'src'),
|
|
},
|
|
},
|
|
css: {
|
|
preprocessorOptions: {
|
|
scss: {
|
|
api: 'modern',
|
|
},
|
|
},
|
|
},
|
|
});
|