concept-collection / numbl-web-ide
numbl-web-ide / vite.config.ts
30 lines · 1.1 KBBlameHistoryRaw
1import { defineConfig, mergeConfig } from 'vite';
2import { minwebide } from 'minwebide/vite';
4// Cross-origin isolation makes SharedArrayBuffer available (numbl uses it
5// for pause()/sleep timing). Dev/preview get it from plain response headers —
6// no service worker involved. Production builds are for GitHub Pages, which
7// can't set headers, so only there the coi-serviceworker is injected (the
8// same approach numbl.org uses).
9const coiHeaders = {
10 'Cross-Origin-Embedder-Policy': 'require-corp',
11 'Cross-Origin-Opener-Policy': 'same-origin',
12};
14const injectCoiServiceWorker = {
15 name: 'inject-coi-serviceworker',
16 apply: 'build' as const,
17 transformIndexHtml() {
18 // relative src so it resolves under the DEPLOY_BASE sub-path
19 return [{ tag: 'script', attrs: { src: 'coi-serviceworker.js' }, injectTo: 'head' as const }];
20 },
21};
23// DEPLOY_BASE is set by CI when building for GitHub Pages
24// (the site is served from /numbl-web-ide/, not the domain root).
25export default defineConfig(mergeConfig(minwebide(), {
26 base: process.env.DEPLOY_BASE ?? '/',
27 plugins: [injectCoiServiceWorker],
28 server: { headers: coiHeaders },
29 preview: { headers: coiHeaders },
30}));