import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vitest/config'; import GithubActionsReporter from 'vitest-github-actions-reporter'; import * as fs from 'fs'; import * as path from 'path'; const doRewrap = ({ cssClass }) => { try { if (fs.existsSync(path.resolve(__dirname, 'dist/bundle.js'))) { return; } } catch { // do nothing } console.log('\nStart re-wrapping...'); fs.readFile(path.resolve(__dirname, 'dist/bundle.html'), 'utf8', function (err, data) { if (!data) { console.log( `[Error]: No bundle.html generated, check svelte.config.js -> config.kit.adapter -> fallback: "bundle.html"` ); return; } const matchData = data.match(/(?<=<script\b[^>]*>)([\s\S]*?)(?=<\/script>)/gm); if (matchData) { const cleanData = matchData[0] .trim() .replace( `document.querySelector('[data-sveltekit-hydrate="45h"]').parentNode`, `document.querySelector(".${cssClass}")` ); fs.writeFile(path.resolve(__dirname, 'dist/bundle.js'), cleanData, (err) => { if (err) console.log(err); else { try { fs.rename( path.resolve(__dirname, 'dist/index.page'), path.resolve(__dirname, 'dist/index.html'), () => {} ); } catch { // do nothing } try { fs.unlinkSync(path.resolve(__dirname, 'dist/bundle.html')); } catch { // do nothing } console.log('Finished: bundle.js + index.html have been regenerated.\n'); } }); } else console.log(`[Error]: No proper <script> tag found in bundle.html`); }); }; export default defineConfig({ plugins: [ sveltekit(), { name: 'postbuild-command', closeBundle: { order: 'post', handler() { setTimeout(() => doRewrap({ cssClass: 'overlay' }), Math.random() * 500 + 500); } } } ], build: { minify: true, cssCodeSplit: false, rollupOptions: { output: { manualChunks: () => 'app', assetFileNames: '[name][extname]' } } }, css: { preprocessorOptions: { scss: { quietDeps: true, silenceDeprecations: ['import'] } } }, test: { include: ['src/**/*.{test,spec}.{js,ts}'], globals: true, environment: 'jsdom', reporters: process.env.GITHUB_ACTIONS ? ['default', new GithubActionsReporter()] : 'default' } });