@@ -18,6 +18,7 @@ import { nextTick } from "ext:deno_node/_next_tick.ts";
18
18
import {
19
19
validateBoolean ,
20
20
validateInteger ,
21
+ validateObject ,
21
22
validatePort ,
22
23
} from "ext:deno_node/internal/validators.mjs" ;
23
24
import {
@@ -1507,16 +1508,16 @@ export class IncomingMessageForServer extends NodeReadable {
1507
1508
}
1508
1509
}
1509
1510
1510
- type ServerHandler = (
1511
+ export type ServerHandler = (
1511
1512
req : IncomingMessageForServer ,
1512
1513
res : ServerResponse ,
1513
1514
) => void ;
1514
1515
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 ) ;
1517
1518
}
1518
1519
1519
- class ServerImpl extends EventEmitter {
1520
+ export class ServerImpl extends EventEmitter {
1520
1521
#httpConnections: Set < Deno . HttpConn > = new Set ( ) ;
1521
1522
#listener?: Deno . Listener ;
1522
1523
@@ -1528,12 +1529,24 @@ class ServerImpl extends EventEmitter {
1528
1529
#servePromise: Deferred < void > ;
1529
1530
listening = false ;
1530
1531
1531
- constructor ( handler ?: ServerHandler ) {
1532
+ constructor ( opts , requestListener ?: ServerHandler ) {
1532
1533
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
+
1533
1546
this . #servePromise = deferred ( ) ;
1534
1547
this . #servePromise. then ( ( ) => this . emit ( "close" ) ) ;
1535
- if ( handler !== undefined ) {
1536
- this . on ( "request" , handler ) ;
1548
+ if ( requestListener !== undefined ) {
1549
+ this . on ( "request" , requestListener ) ;
1537
1550
}
1538
1551
}
1539
1552
@@ -1562,12 +1575,12 @@ class ServerImpl extends EventEmitter {
1562
1575
port,
1563
1576
} as Deno . NetAddr ;
1564
1577
this . listening = true ;
1565
- nextTick ( ( ) => this . #serve ( ) ) ;
1578
+ nextTick ( ( ) => this . _serve ( ) ) ;
1566
1579
1567
1580
return this ;
1568
1581
}
1569
1582
1570
- #serve ( ) {
1583
+ _serve ( ) {
1571
1584
const ac = new AbortController ( ) ;
1572
1585
const handler = ( request : Request , info : Deno . ServeHandlerInfo ) => {
1573
1586
const req = new IncomingMessageForServer ( request , info . remoteAddr ) ;
@@ -1600,6 +1613,7 @@ class ServerImpl extends EventEmitter {
1600
1613
this . #addr! . port = port ;
1601
1614
this . emit ( "listening" ) ;
1602
1615
} ,
1616
+ ...this . _additionalServeOptions ?.( ) ,
1603
1617
} ,
1604
1618
) ;
1605
1619
if ( this . #unref) {
@@ -1662,8 +1676,8 @@ class ServerImpl extends EventEmitter {
1662
1676
1663
1677
Server . prototype = ServerImpl . prototype ;
1664
1678
1665
- export function createServer ( handler ?: ServerHandler ) {
1666
- return Server ( handler ) ;
1679
+ export function createServer ( opts , requestListener ?: ServerHandler ) {
1680
+ return Server ( opts , requestListener ) ;
1667
1681
}
1668
1682
1669
1683
/** Makes an HTTP request. */
0 commit comments