File size: 1,679 Bytes
39371ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { defineConfig } from 'vite';
import { cpSync, mkdirSync, readdirSync, createReadStream, statSync } from 'node:fs';
import { resolve } from 'node:path';
import { collectLicenses } from './scripts/licenses.mjs';
import { piBrowser } from './scripts/pi-browser.mjs';

export default defineConfig({
  base: './',
  worker: { format: 'es' },
  optimizeDeps: { exclude: ['@earendil-works/pi-tui'], include: ['events', 'buffer'] },
  resolve: { alias: { '@huggingface/transformers': resolve('node_modules/@huggingface/transformers/dist/transformers.web.js') } },
  server: { proxy: { '/models': 'http://127.0.0.1:8765' } },
  preview: { proxy: { '/models': 'http://127.0.0.1:8765' } },
  plugins: [piBrowser(), {
    name: 'local-ort-runtime',
    configureServer(server) {
      server.middlewares.use('/runtime', (req, res, next) => {
        const name = req.url.split('?')[0];
        if (!/^\/ort-wasm-[\w.-]+\.(wasm|mjs)$/.test(name)) return next();
        const file = resolve('node_modules/onnxruntime-web/dist', name.slice(1));
        try {
          res.setHeader('Content-Type', name.endsWith('.wasm') ? 'application/wasm' : 'text/javascript');
          res.setHeader('Content-Length', statSync(file).size);
          createReadStream(file).pipe(res);
        } catch { res.statusCode = 404; res.end(); }
      });
    },
    async closeBundle() {
      mkdirSync('dist/runtime', { recursive: true });
      for (const file of readdirSync('node_modules/onnxruntime-web/dist')) {
        if (/^ort-wasm-.*\.(wasm|mjs)$/.test(file)) cpSync('node_modules/onnxruntime-web/dist/' + file, 'dist/runtime/' + file);
      }
      await collectLicenses();
    },
  }],
});