Skip to content

Commit ce743ac

Browse files
feat(runtime): add Service Worker with .ts/.tsx fetch interception
- Intercept requests ending in .ts or .tsx at the fetch event level - Transpile TypeScript source via transpiler module on the fly - Return transpiled JS with correct application/javascript MIME type - Pass through all non-TypeScript requests unchanged
1 parent 6ebdfc7 commit ce743ac

File tree

1 file changed

+22
-0
lines changed
  • packages/runtime/src

1 file changed

+22
-0
lines changed

packages/runtime/src/sw.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
declare const self: ServiceWorkerGlobalScope
2+
3+
import { transpile } from './transpiler.js'
4+
5+
async function handleFetch(event: FetchEvent): Promise<Response> {
6+
const url = new URL(event.request.url)
7+
8+
if (url.pathname.endsWith('.ts') || url.pathname.endsWith('.tsx')) {
9+
const response = await fetch(event.request)
10+
const source = await response.text()
11+
const transpiled = await transpile(source, url.pathname)
12+
return new Response(transpiled, {
13+
headers: { 'Content-Type': 'application/javascript' },
14+
})
15+
}
16+
17+
return fetch(event.request)
18+
}
19+
20+
self.addEventListener('fetch', (event: FetchEvent) => {
21+
event.respondWith(handleFetch(event))
22+
})

0 commit comments

Comments
 (0)