@@ -496,21 +496,36 @@ class EleventyDevServer {
496
496
return res . end ( result ) ;
497
497
}
498
498
499
- if ( isPlainObject ( result ) ) {
499
+ if ( isPlainObject ( result ) || result instanceof Response ) {
500
500
if ( typeof result . status === "number" ) {
501
501
res . statusCode = result . status ;
502
502
}
503
503
504
- if ( isPlainObject ( result . headers ) ) {
505
- for ( let name in result . headers ) {
506
- res . setHeader ( name , result . headers [ name ] ) ;
504
+ if ( result . headers instanceof Headers ) {
505
+ for ( let [ key , value ] of result . headers . entries ( ) ) {
506
+ res . setHeader ( key , value ) ;
507
507
}
508
+ } else if ( isPlainObject ( result . headers ) ) {
509
+ for ( let key of Object . keys ( result . headers ) ) {
510
+ res . setHeader ( key , result . headers [ key ] ) ;
511
+ }
512
+ }
513
+
514
+ if ( result instanceof Response ) {
515
+ // no gzip/br compression here, uncompressed from fetch https://github.com/w3c/ServiceWorker/issues/339
516
+ res . removeHeader ( "content-encoding" ) ;
517
+
518
+ let arrayBuffer = await result . arrayBuffer ( ) ;
519
+ res . setHeader ( "content-length" , arrayBuffer . byteLength ) ;
520
+
521
+ let buffer = Buffer . from ( arrayBuffer ) ;
522
+ return res . end ( buffer ) ;
508
523
}
509
524
510
525
return res . end ( result . body || "" ) ;
511
526
}
512
527
513
- throw new Error ( `Invalid return type from \`onRequest\` pattern for ${ urlPatternString } : expected string or object .` ) ;
528
+ throw new Error ( `Invalid return type from \`onRequest\` pattern for ${ urlPatternString } : expected string, object literal, or Response instance .` ) ;
514
529
}
515
530
}
516
531
0 commit comments