@@ -18,6 +18,7 @@ import { nextTick } from "ext:deno_node/_next_tick.ts";
1818import {
1919 validateBoolean ,
2020 validateInteger ,
21+ validateObject ,
2122 validatePort ,
2223} from "ext:deno_node/internal/validators.mjs" ;
2324import {
@@ -1507,16 +1508,16 @@ export class IncomingMessageForServer extends NodeReadable {
15071508 }
15081509}
15091510
1510- type ServerHandler = (
1511+ export type ServerHandler = (
15111512 req : IncomingMessageForServer ,
15121513 res : ServerResponse ,
15131514) => void ;
15141515
1515- export function Server ( handler ?: ServerHandler ) : ServerImpl {
1516- return new ServerImpl ( handler ) ;
1516+ export function Server ( opts , requestListener ?: ServerHandler ) : ServerImpl {
1517+ return new ServerImpl ( opts , requestListener ) ;
15171518}
15181519
1519- class ServerImpl extends EventEmitter {
1520+ export class ServerImpl extends EventEmitter {
15201521 #httpConnections: Set < Deno . HttpConn > = new Set ( ) ;
15211522 #listener?: Deno . Listener ;
15221523
@@ -1528,12 +1529,24 @@ class ServerImpl extends EventEmitter {
15281529 #servePromise: Deferred < void > ;
15291530 listening = false ;
15301531
1531- constructor ( handler ?: ServerHandler ) {
1532+ constructor ( opts , requestListener ?: ServerHandler ) {
15321533 super ( ) ;
1534+
1535+ if ( typeof opts === "function" ) {
1536+ requestListener = opts ;
1537+ opts = kEmptyObject ;
1538+ } else if ( opts == null ) {
1539+ opts = kEmptyObject ;
1540+ } else {
1541+ validateObject ( opts , "options" ) ;
1542+ }
1543+
1544+ this . _opts = opts ;
1545+
15331546 this . #servePromise = deferred ( ) ;
15341547 this . #servePromise. then ( ( ) => this . emit ( "close" ) ) ;
1535- if ( handler !== undefined ) {
1536- this . on ( "request" , handler ) ;
1548+ if ( requestListener !== undefined ) {
1549+ this . on ( "request" , requestListener ) ;
15371550 }
15381551 }
15391552
@@ -1562,12 +1575,12 @@ class ServerImpl extends EventEmitter {
15621575 port,
15631576 } as Deno . NetAddr ;
15641577 this . listening = true ;
1565- nextTick ( ( ) => this . #serve ( ) ) ;
1578+ nextTick ( ( ) => this . _serve ( ) ) ;
15661579
15671580 return this ;
15681581 }
15691582
1570- #serve ( ) {
1583+ _serve ( ) {
15711584 const ac = new AbortController ( ) ;
15721585 const handler = ( request : Request , info : Deno . ServeHandlerInfo ) => {
15731586 const req = new IncomingMessageForServer ( request , info . remoteAddr ) ;
@@ -1600,6 +1613,7 @@ class ServerImpl extends EventEmitter {
16001613 this . #addr! . port = port ;
16011614 this . emit ( "listening" ) ;
16021615 } ,
1616+ ...this . _additionalServeOptions ?.( ) ,
16031617 } ,
16041618 ) ;
16051619 if ( this . #unref) {
@@ -1662,8 +1676,8 @@ class ServerImpl extends EventEmitter {
16621676
16631677Server . prototype = ServerImpl . prototype ;
16641678
1665- export function createServer ( handler ?: ServerHandler ) {
1666- return Server ( handler ) ;
1679+ export function createServer ( opts , requestListener ?: ServerHandler ) {
1680+ return Server ( opts , requestListener ) ;
16671681}
16681682
16691683/** Makes an HTTP request. */
0 commit comments