import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; import * as fs from 'fs'; import { resolve } from 'path'; // Utility function to get all .svelte files from a directory recursively function getRecursiveSvelteFiles(dir) { const dirents = fs.readdirSync(dir, { withFileTypes: true }); const files = Array.from(dirents).flatMap((dirent) => { const res = resolve(dir, dirent.name); if (dirent.isDirectory()) { return getRecursiveSvelteFiles(res); } else if (res.endsWith('.svelte')) { return [res]; } else { return []; } }); return files; } function getRecursiveServiceFiles(dir) { const dirents = fs.readdirSync(dir, { withFileTypes: true }); const files = Array.from(dirents).flatMap((dirent) => { const res = resolve(dir, dirent.name); if (dirent.isDirectory()) { return getRecursiveServiceFiles(res); } else if (res.endsWith('.ts')) { return [res]; } else { return []; } }); return files; } export default defineConfig({ plugins: [ sveltekit(), { name: 'components-resolver', resolveId(source) { if (source === 'virtual:components-list') return source; return null; }, load(id) { if (id === 'virtual:components-list') { const componentsDir = resolve(__dirname, 'src/lib/components'); const componentsFiles = getRecursiveSvelteFiles(componentsDir); const components = componentsFiles.map(file => file .replace(componentsDir, '') .replace(/\.svelte$/, '') .replace(/\\/g, '/') // Fix Windows path separators .slice(1) // Remove leading "/" ); return `export default ${JSON.stringify(components)};`; } return null; } }, { name: 'services-resolver', resolveId(source) { if (source === 'virtual:services-list') return source; return null; }, load(id) { if (id === 'virtual:services-list') { const servicesDir = resolve(__dirname, 'src/lib/services'); const serviceFiles = getRecursiveServiceFiles(servicesDir); const services = serviceFiles.map(file => file .replace(servicesDir, '') .replace(/\.ts$/, '') .replace(/\\/g, '/') // Fix Windows path separators .slice(1) // Remove leading "/" ); return `export default ${JSON.stringify(services)};`; } return null; } } ], test: { include: ['src/**/*.{test,spec}.{js,ts}'] } });