diff --git a/demo/coi-serviceworker.js b/demo/coi-serviceworker.js deleted file mode 100644 index 16a63d12..00000000 --- a/demo/coi-serviceworker.js +++ /dev/null @@ -1,71 +0,0 @@ -// NOTE: This file creates a service worker that cross-origin-isolates the page (read more here: https://web.dev/coop-coep/) which allows us to use wasm threads. -// Normally you would set the COOP and COEP headers on the server to do this, but Github Pages doesn't allow this, so this is a hack to do that. - -/* Edited version of: coi-serviceworker v0.1.6 - Guido Zuidhof, licensed under MIT */ -// From here: https://github.com/gzuidhof/coi-serviceworker -if(typeof window === 'undefined') { - self.addEventListener("install", () => self.skipWaiting()); - self.addEventListener("activate", e => e.waitUntil(self.clients.claim())); - - async function handleFetch(request) { - if(request.cache === "only-if-cached" && request.mode !== "same-origin") { - return; - } - - if(request.mode === "no-cors") { // We need to set `credentials` to "omit" for no-cors requests, per this comment: https://bugs.chromium.org/p/chromium/issues/detail?id=1309901#c7 - request = new Request(request.url, { - cache: request.cache, - credentials: "omit", - headers: request.headers, - integrity: request.integrity, - destination: request.destination, - keepalive: request.keepalive, - method: request.method, - mode: request.mode, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - signal: request.signal, - }); - } - - let r = await fetch(request).catch(e => console.error(e)); - - if(r.status === 0) { - return r; - } - - const headers = new Headers(r.headers); - headers.set("Cross-Origin-Embedder-Policy", "credentialless"); - headers.set("Cross-Origin-Opener-Policy", "same-origin"); - - return new Response(r.body, { status: r.status, statusText: r.statusText, headers }); - } - - self.addEventListener("fetch", function(e) { - e.respondWith(handleFetch(e.request)); // respondWith must be executed synchonously (but can be passed a Promise) - }); - -} else { - (async function() { - if(window.crossOriginIsolated !== false) return; - - let registration = await navigator.serviceWorker.register(window.document.currentScript.src,{ - scope: './' - }).catch(e => console.error("COOP/COEP Service Worker failed to register:", e)); - if(registration) { - console.log("COOP/COEP Service Worker registered", registration.scope); - - registration.addEventListener("updatefound", () => { - console.log("Reloading page to make use of updated COOP/COEP Service Worker."); - window.location.reload(); - }); - - // If the registration is active, but it's not controlling the page - if(registration.active && !navigator.serviceWorker.controller) { - console.log("Reloading page to make use of COOP/COEP Service Worker."); - window.location.reload(); - } - } - })(); -} \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index bf92d773..1ddaea0a 100644 --- a/demo/index.html +++ b/demo/index.html @@ -6,7 +6,6 @@ monaco-vscode-api demo - diff --git a/demo/package.json b/demo/package.json index 844021f6..09618fe1 100644 --- a/demo/package.json +++ b/demo/package.json @@ -23,8 +23,7 @@ "@types/ws": "^8.5.10", "ts-node": "^10.9.2", "typescript": "~5.3.3", - "vite": "~5.1.5", - "vite-plugin-static-copy": "^1.0.1" + "vite": "~5.1.5" }, "dependencies": { "@codingame/monaco-vscode-accessibility-service-override": "file:../dist/service-override-accessibility", diff --git a/demo/vite.config.ts b/demo/vite.config.ts index 322cb41e..3588b8bf 100644 --- a/demo/vite.config.ts +++ b/demo/vite.config.ts @@ -1,6 +1,5 @@ import { defineConfig } from 'vite' import importMetaUrlPlugin from '@codingame/esbuild-import-meta-url-plugin' -import { viteStaticCopy } from 'vite-plugin-static-copy' import * as fs from 'fs' import path from 'path' import pkg from './package.json' assert { type: 'json' } @@ -11,14 +10,19 @@ export default defineConfig({ target: 'esnext' }, plugins: [ - viteStaticCopy({ - targets: [ - { - src: 'coi-serviceworker.js', - dest: './' - } - ] - }), + { + // For the *-language-features extensions which use SharedArrayBuffer + name: 'configure-response-headers', + apply: 'serve', + configureServer: server => { + server.middlewares.use((_req, res, next) => { + res.setHeader('Cross-Origin-Embedder-Policy', 'credentialless') + res.setHeader('Cross-Origin-Opener-Policy', 'same-origin') + res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin') + next() + }) + } + }, { name: 'force-prevent-transform-assets', apply: 'serve', diff --git a/demo/vite.github-page.config.ts b/demo/vite.github-page.config.ts index 82d53b42..8f193d23 100644 --- a/demo/vite.github-page.config.ts +++ b/demo/vite.github-page.config.ts @@ -1,5 +1,4 @@ import { defineConfig } from 'vite' -import { viteStaticCopy } from 'vite-plugin-static-copy' import pkg from './package.json' assert { type: 'json' } const localDependencies = Object.entries(pkg.dependencies).filter(([, version]) => version.startsWith('file:../')).map(([name]) => name) @@ -11,16 +10,6 @@ export default defineConfig({ worker: { format: 'es' }, - plugins: [ - viteStaticCopy({ - targets: [ - { - src: 'coi-serviceworker.js', - dest: './' - } - ] - }) - ], base: 'https://codingame.github.io/monaco-vscode-api', resolve: { dedupe: ['vscode', ...localDependencies]