@@ -42,49 +42,59 @@ export function shouldRoute(event: FetchEvent): boolean {
4242}
4343
4444export async function route ( event : FetchEvent ) : Promise < Response > {
45- const url = new URL ( event . request . url ) ;
46- const tab = tabs . find ( ( tab ) => url . pathname . startsWith ( tab . prefix ) ) ! ;
47- const client = await clients . get ( event . clientId ) ;
45+ try {
46+ const url = new URL ( event . request . url ) ;
47+ const tab = tabs . find ( ( tab ) => url . pathname . startsWith ( tab . prefix ) ) ! ;
48+ const client = await clients . get ( event . clientId ) ;
4849
49- const bareheaders : BareHeaders = { } ;
50+ const bareheaders : BareHeaders = { } ;
5051
51- // @ts -expect-error for some reason it thinks headers.entries doesn't exist?
52- for ( const [ key , value ] of event . request . headers . entries ( ) ) {
53- bareheaders [ key ] = [ value ] ;
54- }
52+ // @ts -expect-error for some reason it thinks headers.entries doesn't exist?
53+ for ( const [ key , value ] of event . request . headers . entries ( ) ) {
54+ bareheaders [ key ] = [ value ] ;
55+ }
5556
56- const response = await tab . rpc . call (
57- "request" ,
58- {
59- rawUrl : event . request . url ,
60- destination : event . request . destination ,
61- mode : event . request . mode ,
62- referrer : event . request . referrer ,
63- method : event . request . method ,
64- body : event . request . body ,
65- cache : event . request . cache ,
66- forceCrossOriginIsolated : false ,
67- initialHeaders : bareheaders ,
68- rawClientUrl : client ? client . url : undefined ,
69- } ,
70- event . request . body instanceof ReadableStream ||
71- // @ts -expect-error the types for fetchevent are messed up
72- event . request . body instanceof ArrayBuffer
73- ? [ event . request . body ]
74- : undefined
75- ) ;
57+ const response = await tab . rpc . call (
58+ "request" ,
59+ {
60+ rawUrl : event . request . url ,
61+ destination : event . request . destination ,
62+ mode : event . request . mode ,
63+ referrer : event . request . referrer ,
64+ method : event . request . method ,
65+ body : event . request . body ,
66+ cache : event . request . cache ,
67+ forceCrossOriginIsolated : false ,
68+ initialHeaders : bareheaders ,
69+ rawClientUrl : client ? client . url : undefined ,
70+ } ,
71+ event . request . body instanceof ReadableStream ||
72+ // @ts -expect-error the types for fetchevent are messed up
73+ event . request . body instanceof ArrayBuffer
74+ ? [ event . request . body ]
75+ : undefined
76+ ) ;
7677
77- const realHeaders = new Headers ( ) ;
78- for ( const [ key , values ] of Object . entries ( response . headers ) ) {
79- let val = typeof values === "string" ? values : ( values ?. [ 0 ] ?? undefined ) ;
80- if ( val !== undefined ) {
81- realHeaders . set ( key , val ) ;
78+ const realHeaders = new Headers ( ) ;
79+ for ( const [ key , values ] of Object . entries ( response . headers ) ) {
80+ let val =
81+ typeof values === "string" ? values : ( values ?. [ 0 ] ?? undefined ) ;
82+ if ( val !== undefined ) {
83+ realHeaders . set ( key , val ) ;
84+ }
8285 }
83- }
8486
85- return new Response ( response . body , {
86- status : response . status ,
87- statusText : response . statusText ,
88- headers : realHeaders ,
89- } ) ;
87+ return new Response ( response . body , {
88+ status : response . status ,
89+ statusText : response . statusText ,
90+ headers : realHeaders ,
91+ } ) ;
92+ } catch ( e ) {
93+ return new Response (
94+ "Internal Service Worker Error: " + ( e as Error ) . message ,
95+ {
96+ status : 500 ,
97+ }
98+ ) ;
99+ }
90100}
0 commit comments