atagen

malice

public
Star0
Watch0
973f8fbdaf80e2ef6679dd071233fe6b853344b2
2
ssh://brewery@pls.lobotomise.me:33/atagen/malice.git

Blame: web/vite.config.ts

973f8fbdaf80atagen2026-09-28 09:10 UTC1
import { defineConfig } from 'vite';
973f8fbdaf80atagen2026-09-28 09:10 UTC2
import { svelte, vitePreprocess } from '@sveltejs/vite-plugin-svelte';
973f8fbdaf80atagen2026-09-28 09:10 UTC3
973f8fbdaf80atagen2026-09-28 09:10 UTC4
/**
973f8fbdaf80atagen2026-09-28 09:10 UTC5
 * The page isn't SW-controlled on first launch, so the worker chunk and the
973f8fbdaf80atagen2026-09-28 09:10 UTC6
 * wasm can bypass fetch interception entirely and never get cached. Instead
973f8fbdaf80atagen2026-09-28 09:10 UTC7
 * of relying on runtime fetches, prepend the full list of emitted files
973f8fbdaf80atagen2026-09-28 09:10 UTC8
 * (chunks, assets, wasm) to sw.js as a global so install() can precache all
973f8fbdaf80atagen2026-09-28 09:10 UTC9
 * of it directly, no separate request needed.
973f8fbdaf80atagen2026-09-28 09:10 UTC10
 */
973f8fbdaf80atagen2026-09-28 09:10 UTC11
function precacheManifestPlugin(): import('vite').Plugin {
973f8fbdaf80atagen2026-09-28 09:10 UTC12
  return {
973f8fbdaf80atagen2026-09-28 09:10 UTC13
    name: 'malice-sw-precache-manifest',
973f8fbdaf80atagen2026-09-28 09:10 UTC14
    generateBundle(_options, bundle) {
973f8fbdaf80atagen2026-09-28 09:10 UTC15
      const urls = Object.keys(bundle)
973f8fbdaf80atagen2026-09-28 09:10 UTC16
        .filter((fileName) => fileName !== 'sw.js' && fileName !== '.vite/manifest.json')
973f8fbdaf80atagen2026-09-28 09:10 UTC17
        .map((fileName) => `/${fileName}`);
973f8fbdaf80atagen2026-09-28 09:10 UTC18
      const swChunk = bundle['sw.js'];
973f8fbdaf80atagen2026-09-28 09:10 UTC19
      if (swChunk && swChunk.type === 'chunk') {
973f8fbdaf80atagen2026-09-28 09:10 UTC20
        swChunk.code = `self.__MALICE_PRECACHE__=${JSON.stringify(urls)};\n${swChunk.code}`;
973f8fbdaf80atagen2026-09-28 09:10 UTC21
      }
973f8fbdaf80atagen2026-09-28 09:10 UTC22
    }
973f8fbdaf80atagen2026-09-28 09:10 UTC23
  };
973f8fbdaf80atagen2026-09-28 09:10 UTC24
}
973f8fbdaf80atagen2026-09-28 09:10 UTC25
973f8fbdaf80atagen2026-09-28 09:10 UTC26
export default defineConfig(({ mode }) => {
973f8fbdaf80atagen2026-09-28 09:10 UTC27
  const device = mode === 'device';
973f8fbdaf80atagen2026-09-28 09:10 UTC28
  return {
973f8fbdaf80atagen2026-09-28 09:10 UTC29
    plugins: [svelte({ preprocess: vitePreprocess() }), ...(device ? [precacheManifestPlugin()] : [])],
973f8fbdaf80atagen2026-09-28 09:10 UTC30
    assetsInclude: ['**/*.wasm'],
973f8fbdaf80atagen2026-09-28 09:10 UTC31
    resolve: {
973f8fbdaf80atagen2026-09-28 09:10 UTC32
      alias: {
973f8fbdaf80atagen2026-09-28 09:10 UTC33
        'malice:device-transport': device ? '/src/lib/device-transport.ts' : '/src/lib/device-transport.stub.ts'
973f8fbdaf80atagen2026-09-28 09:10 UTC34
      }
973f8fbdaf80atagen2026-09-28 09:10 UTC35
    },
973f8fbdaf80atagen2026-09-28 09:10 UTC36
    server: {
973f8fbdaf80atagen2026-09-28 09:10 UTC37
      host: '127.0.0.1',
973f8fbdaf80atagen2026-09-28 09:10 UTC38
      port: 5173,
973f8fbdaf80atagen2026-09-28 09:10 UTC39
      proxy: {
973f8fbdaf80atagen2026-09-28 09:10 UTC40
        '/api': 'http://localhost:3000'
973f8fbdaf80atagen2026-09-28 09:10 UTC41
      }
973f8fbdaf80atagen2026-09-28 09:10 UTC42
    },
973f8fbdaf80atagen2026-09-28 09:10 UTC43
    preview: {
973f8fbdaf80atagen2026-09-28 09:10 UTC44
      host: '127.0.0.1',
973f8fbdaf80atagen2026-09-28 09:10 UTC45
      port: 4173,
973f8fbdaf80atagen2026-09-28 09:10 UTC46
      proxy: {
973f8fbdaf80atagen2026-09-28 09:10 UTC47
        '/api': 'http://localhost:3000'
973f8fbdaf80atagen2026-09-28 09:10 UTC48
      }
973f8fbdaf80atagen2026-09-28 09:10 UTC49
    },
973f8fbdaf80atagen2026-09-28 09:10 UTC50
    build: device
973f8fbdaf80atagen2026-09-28 09:10 UTC51
      ? {
973f8fbdaf80atagen2026-09-28 09:10 UTC52
          outDir: 'dist-device',
973f8fbdaf80atagen2026-09-28 09:10 UTC53
          emptyOutDir: true,
973f8fbdaf80atagen2026-09-28 09:10 UTC54
          manifest: true,
973f8fbdaf80atagen2026-09-28 09:10 UTC55
          rollupOptions: {
973f8fbdaf80atagen2026-09-28 09:10 UTC56
            input: {
973f8fbdaf80atagen2026-09-28 09:10 UTC57
              main: 'index.html',
973f8fbdaf80atagen2026-09-28 09:10 UTC58
              sw: 'src/sw.ts'
973f8fbdaf80atagen2026-09-28 09:10 UTC59
            },
973f8fbdaf80atagen2026-09-28 09:10 UTC60
            output: {
973f8fbdaf80atagen2026-09-28 09:10 UTC61
              entryFileNames: (chunk) => (chunk.name === 'sw' ? 'sw.js' : 'assets/[name]-[hash].js')
973f8fbdaf80atagen2026-09-28 09:10 UTC62
            }
973f8fbdaf80atagen2026-09-28 09:10 UTC63
          }
973f8fbdaf80atagen2026-09-28 09:10 UTC64
        }
973f8fbdaf80atagen2026-09-28 09:10 UTC65
      : {
973f8fbdaf80atagen2026-09-28 09:10 UTC66
          outDir: 'dist',
973f8fbdaf80atagen2026-09-28 09:10 UTC67
          emptyOutDir: true
973f8fbdaf80atagen2026-09-28 09:10 UTC68
        }
973f8fbdaf80atagen2026-09-28 09:10 UTC69
  };
973f8fbdaf80atagen2026-09-28 09:10 UTC70
});