Files
actual/packages/loot-core/vite.config.ts
2025-11-12 19:32:44 +00:00

118 lines
2.9 KiB
TypeScript

import path from 'path';
import { visualizer } from 'rollup-plugin-visualizer';
import { defineConfig } from 'vite';
import { nodePolyfills } from 'vite-plugin-node-polyfills';
import peggyLoader from 'vite-plugin-peggy-loader';
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
const isDev = mode === 'development';
const outDir = path.resolve(__dirname, 'lib-dist/browser');
const crdtDir = path.resolve(__dirname, '../crdt');
return {
mode,
base: '/kcab/',
build: {
target: 'es2020',
outDir,
emptyOutDir: true,
lib: {
entry: path.resolve(__dirname, 'src/server/main.ts'),
name: 'backend',
formats: ['iife'],
fileName: () =>
isDev ? 'kcab.worker.dev.js' : `kcab.worker.[hash].js`,
},
rollupOptions: {
onwarn(warning, warn) {
// Suppress sourcemap warnings from peggy-loader
if (
warning.plugin === 'peggy-loader' &&
warning.message?.includes('Sourcemap')
) {
return;
}
// Use default warning handler for other warnings
warn(warning);
},
output: {
chunkFileNames: isDev
? '[name].kcab.worker.dev.js'
: '[id].[name].kcab.worker.[hash].js',
format: 'iife',
name: 'backend',
globals: {
buffer: 'Buffer',
'process/browser': 'process',
},
},
external: [],
},
sourcemap: true,
minify: isDev ? false : 'terser',
terserOptions: {
compress: {
drop_debugger: false,
},
mangle: false,
},
},
resolve: {
extensions: [
'.web.js',
'.web.ts',
'.web.tsx',
'.js',
'.ts',
'.tsx',
'.json',
],
alias: [
{
find: /^@actual-app\/crdt(\/.*)?$/,
replacement: path.resolve(crdtDir, 'src') + '$1',
},
],
},
define: {
'process.env': '{}',
'process.env.IS_DEV': JSON.stringify(isDev),
'process.env.PUBLIC_URL': JSON.stringify(process.env.PUBLIC_URL || '/'),
'process.env.ACTUAL_DATA_DIR': JSON.stringify('/'),
'process.env.ACTUAL_DOCUMENT_DIR': JSON.stringify('/documents'),
},
plugins: [
peggyLoader(),
nodePolyfills({
include: [
'process',
'stream',
'path',
'zlib',
'fs',
'assert',
'buffer',
],
globals: {
process: true,
global: true,
},
}),
visualizer({ template: 'raw-data', filename: `${outDir}/stats.json` }),
],
optimizeDeps: {
include: [
'buffer',
'process',
'assert',
'path-browserify',
'stream-browserify',
'browserify-zlib',
],
},
};
});