2024-04-03 11:25:54 +00:00
|
|
|
import { defineConfig } from 'vite';
|
|
|
|
import react from '@vitejs/plugin-react';
|
|
|
|
import svgr from 'vite-plugin-svgr';
|
2024-04-08 12:09:15 +00:00
|
|
|
import { visualizer } from 'rollup-plugin-visualizer';
|
|
|
|
import usePluginImport from 'vite-plugin-importer';
|
|
|
|
import { totalBundleSize } from 'vite-plugin-total-bundle-size';
|
2024-05-17 10:23:29 +00:00
|
|
|
import path from 'path';
|
2024-06-03 03:20:45 +00:00
|
|
|
import istanbul from 'vite-plugin-istanbul';
|
2024-04-03 11:25:54 +00:00
|
|
|
|
2024-05-17 10:23:29 +00:00
|
|
|
const resourcesPath = path.resolve(__dirname, '../resources');
|
2024-04-08 12:09:15 +00:00
|
|
|
const isDev = process.env.NODE_ENV === 'development';
|
2024-04-03 11:25:54 +00:00
|
|
|
// https://vitejs.dev/config/
|
|
|
|
export default defineConfig({
|
|
|
|
plugins: [
|
|
|
|
react(),
|
|
|
|
svgr({
|
|
|
|
svgrOptions: {
|
|
|
|
prettier: false,
|
|
|
|
plugins: ['@svgr/plugin-svgo', '@svgr/plugin-jsx'],
|
|
|
|
icon: true,
|
|
|
|
svgoConfig: {
|
|
|
|
multipass: true,
|
|
|
|
plugins: [
|
|
|
|
{
|
|
|
|
name: 'preset-default',
|
|
|
|
params: {
|
|
|
|
overrides: {
|
|
|
|
removeViewBox: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2024-08-27 02:59:31 +00:00
|
|
|
{
|
|
|
|
name: 'prefixIds',
|
|
|
|
params: {
|
|
|
|
prefix: (node, { path }) => {
|
|
|
|
const fileName = path?.split('/').pop()?.split('.')[0];
|
|
|
|
return `${fileName}-`;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2024-04-03 11:25:54 +00:00
|
|
|
],
|
|
|
|
},
|
|
|
|
svgProps: {
|
|
|
|
role: 'img',
|
|
|
|
},
|
|
|
|
replaceAttrValues: {
|
|
|
|
'#333': 'currentColor',
|
2024-08-27 02:59:31 +00:00
|
|
|
'black': 'currentColor',
|
2024-04-03 11:25:54 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
}),
|
2024-06-03 03:20:45 +00:00
|
|
|
istanbul({
|
|
|
|
cypress: true,
|
|
|
|
requireEnv: false,
|
2024-06-06 09:48:58 +00:00
|
|
|
include: ['src/**/*'],
|
|
|
|
exclude: [
|
|
|
|
'**/__tests__/**/*',
|
|
|
|
'cypress/**/*',
|
|
|
|
'node_modules/**/*',
|
|
|
|
'src/application/services/tauri-services/**/*',
|
|
|
|
],
|
2024-06-03 03:20:45 +00:00
|
|
|
}),
|
2024-04-08 12:09:15 +00:00
|
|
|
usePluginImport({
|
|
|
|
libraryName: '@mui/icons-material',
|
|
|
|
libraryDirectory: '',
|
|
|
|
camel2DashComponentName: false,
|
|
|
|
style: false,
|
|
|
|
}),
|
2024-04-29 06:32:14 +00:00
|
|
|
process.env.ANALYZE_MODE
|
|
|
|
? visualizer({
|
2024-08-27 02:59:31 +00:00
|
|
|
emitFile: true,
|
|
|
|
})
|
2024-04-29 06:32:14 +00:00
|
|
|
: undefined,
|
|
|
|
process.env.ANALYZE_MODE
|
|
|
|
? totalBundleSize({
|
2024-08-27 02:59:31 +00:00
|
|
|
fileNameRegex: /\.(js|css)$/,
|
|
|
|
calculateGzip: false,
|
|
|
|
})
|
2024-04-29 06:32:14 +00:00
|
|
|
: undefined,
|
2024-04-03 11:25:54 +00:00
|
|
|
],
|
|
|
|
// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
|
|
|
|
// prevent vite from obscuring rust errors
|
|
|
|
clearScreen: false,
|
|
|
|
// tauri expects a fixed port, fail if that port is not available
|
|
|
|
server: {
|
2024-04-29 06:32:14 +00:00
|
|
|
port: !!process.env.TAURI_PLATFORM ? 5173 : process.env.PORT ? parseInt(process.env.PORT) : 3000,
|
2024-04-03 11:25:54 +00:00
|
|
|
strictPort: true,
|
|
|
|
watch: {
|
2024-06-06 11:47:14 +00:00
|
|
|
ignored: ['node_modules'],
|
2024-04-03 11:25:54 +00:00
|
|
|
},
|
2024-04-08 12:09:15 +00:00
|
|
|
cors: false,
|
2024-04-03 11:25:54 +00:00
|
|
|
},
|
|
|
|
envPrefix: ['AF', 'TAURI_'],
|
2024-05-23 08:35:45 +00:00
|
|
|
esbuild: {
|
2024-06-03 03:20:45 +00:00
|
|
|
pure: !isDev ? ['console.log', 'console.debug', 'console.info', 'console.trace'] : [],
|
2024-05-23 08:35:45 +00:00
|
|
|
},
|
2024-04-29 06:32:14 +00:00
|
|
|
build: !!process.env.TAURI_PLATFORM
|
2024-04-03 11:25:54 +00:00
|
|
|
? {
|
2024-08-27 02:59:31 +00:00
|
|
|
// Tauri supports es2021
|
|
|
|
target: process.env.TAURI_PLATFORM === 'windows' ? 'chrome105' : 'safari13',
|
|
|
|
// don't minify for debug builds
|
|
|
|
minify: !process.env.TAURI_DEBUG ? 'esbuild' : false,
|
|
|
|
// produce sourcemaps for debug builds
|
|
|
|
sourcemap: !!process.env.TAURI_DEBUG,
|
|
|
|
}
|
2024-04-03 11:25:54 +00:00
|
|
|
: {
|
2024-08-27 02:59:31 +00:00
|
|
|
target: `esnext`,
|
|
|
|
reportCompressedSize: true,
|
|
|
|
sourcemap: isDev,
|
|
|
|
rollupOptions: !isDev
|
|
|
|
? {
|
|
|
|
output: {
|
|
|
|
chunkFileNames: 'static/js/[name]-[hash].js',
|
|
|
|
entryFileNames: 'static/js/[name]-[hash].js',
|
|
|
|
assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
|
|
|
|
manualChunks (id) {
|
|
|
|
if (
|
|
|
|
id.includes('/react@') ||
|
|
|
|
id.includes('/react-dom@') ||
|
|
|
|
id.includes('/react-is@') ||
|
|
|
|
id.includes('/yjs@') ||
|
|
|
|
id.includes('/y-indexeddb@') ||
|
|
|
|
id.includes('/dexie') ||
|
|
|
|
id.includes('/redux') ||
|
|
|
|
id.includes('/react-custom-scrollbars') ||
|
|
|
|
id.includes('/dayjs') ||
|
|
|
|
id.includes('/smooth-scroll-into-view-if-needed') ||
|
|
|
|
id.includes('/react-virtualized-auto-sizer') ||
|
|
|
|
id.includes('/react-window')
|
|
|
|
) {
|
|
|
|
return 'common';
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
: {},
|
|
|
|
},
|
2024-04-03 11:25:54 +00:00
|
|
|
resolve: {
|
|
|
|
alias: [
|
|
|
|
{ find: 'src/', replacement: `${__dirname}/src/` },
|
|
|
|
{ find: '@/', replacement: `${__dirname}/src/` },
|
|
|
|
{
|
|
|
|
find: '$client-services',
|
2024-04-29 06:32:14 +00:00
|
|
|
replacement: !!process.env.TAURI_PLATFORM
|
2024-04-03 11:25:54 +00:00
|
|
|
? `${__dirname}/src/application/services/tauri-services`
|
|
|
|
: `${__dirname}/src/application/services/js-services`,
|
|
|
|
},
|
2024-05-17 10:23:29 +00:00
|
|
|
{ find: '$icons', replacement: `${resourcesPath}/flowy_icons/` },
|
2024-04-03 11:25:54 +00:00
|
|
|
],
|
|
|
|
},
|
|
|
|
|
|
|
|
optimizeDeps: {
|
2024-08-02 04:19:32 +00:00
|
|
|
include: ['react', 'react-dom', 'react-katex'],
|
2024-04-03 11:25:54 +00:00
|
|
|
},
|
|
|
|
});
|