Files

84 lines
2.5 KiB
TypeScript

/// <reference types="vitest/config" />
import tailwindcss from "@tailwindcss/vite";
import react from "@vitejs/plugin-react";
import path from "node:path";
import { defineConfig } from "vite";
import { fileURLToPath } from 'node:url';
import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
import { playwright } from '@vitest/browser-playwright';
const dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));
// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon
export default defineConfig({
plugins: [react(), tailwindcss()],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src")
}
},
build: {
rollupOptions: {
output: {
manualChunks(id) {
if (/[\\/]node_modules[\\/]\.pnpm[\\/](react|react-dom|react-router|react-router-dom)@/.test(id)) {
return "react";
}
if (/[\\/]node_modules[\\/]\.pnpm[\\/]@base-ui\+react@/.test(id)) {
return "base-ui";
}
if (/[\\/]node_modules[\\/]\.pnpm[\\/]@tanstack\+react-query@/.test(id)) {
return "query";
}
if (/[\\/]node_modules[\\/]\.pnpm[\\/](i18next|react-i18next)@/.test(id)) {
return "i18n";
}
}
}
}
},
server: {
proxy: {
"/api": "http://localhost:8080",
"/api-docs": "http://localhost:8080",
"/health": "http://localhost:8080"
}
},
test: {
projects: [{
extends: true,
test: {
environment: "jsdom",
// The CI runner is heavily resource-constrained; lazy-loaded chunks
// (e.g. the object-detail drawer) can exceed the 5s default.
testTimeout: 20000,
globals: true,
setupFiles: ["./src/test/setup.ts"],
environmentOptions: {
jsdom: {
url: "http://localhost"
}
}
}
}, {
extends: true,
plugins: [
// The plugin will run tests for the stories defined in your Storybook config
// See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest
storybookTest({
configDir: path.join(dirname, '.storybook')
})],
test: {
name: 'storybook',
testTimeout: 20000,
browser: {
enabled: true,
headless: true,
provider: playwright(),
instances: [{
browser: 'chromium'
}]
}
}
}]
}
});