4
4
// deno-lint-ignore-file prefer-primordials
5
5
6
6
import { core } from "ext:core/mod.js" ;
7
+ import { createDeferredPromise } from "ext:deno_node/internal/util.mjs" ;
7
8
import {
8
9
op_fetch_response_upgrade ,
9
10
op_fetch_send ,
@@ -1572,10 +1573,10 @@ export class ServerImpl extends EventEmitter {
1572
1573
1573
1574
#addr: Deno . NetAddr ;
1574
1575
#hasClosed = false ;
1575
- #server: Deno . HttpServer ;
1576
+ #server: Deno . Server ;
1576
1577
#unref = false ;
1577
1578
#ac?: AbortController ;
1578
- #serveDeferred: ReturnType < typeof Promise . withResolvers < void > > ;
1579
+ #servePromise: any ;
1579
1580
listening = false ;
1580
1581
1581
1582
constructor ( opts , requestListener ?: ServerHandler ) {
@@ -1592,15 +1593,14 @@ export class ServerImpl extends EventEmitter {
1592
1593
1593
1594
this . _opts = opts ;
1594
1595
1595
- this . #serveDeferred = Promise . withResolvers < void > ( ) ;
1596
- this . #serveDeferred . promise . then ( ( ) => this . emit ( "close" ) ) ;
1596
+ this . #servePromise = createDeferredPromise ( ) ;
1597
+ this . #servePromise . promise . finally ( ( ) => this . emit ( "close" ) ) ;
1597
1598
if ( requestListener !== undefined ) {
1598
1599
this . on ( "request" , requestListener ) ;
1599
1600
}
1600
1601
}
1601
1602
1602
1603
listen ( ...args : unknown [ ] ) : this {
1603
- // TODO(bnoordhuis) Delegate to net.Server#listen().
1604
1604
const normalized = _normalizeArgs ( args ) ;
1605
1605
const options = normalized [ 0 ] as Partial < ListenOptions > ;
1606
1606
const cb = normalized [ 1 ] ;
@@ -1624,7 +1624,7 @@ export class ServerImpl extends EventEmitter {
1624
1624
port,
1625
1625
} as Deno . NetAddr ;
1626
1626
this . listening = true ;
1627
- nextTick ( ( ) => this . _serve ( ) ) ;
1627
+ this . _serve ( ) ;
1628
1628
1629
1629
return this ;
1630
1630
}
@@ -1643,8 +1643,6 @@ export class ServerImpl extends EventEmitter {
1643
1643
const socket = new Socket ( {
1644
1644
handle : new TCP ( constants . SERVER , conn ) ,
1645
1645
} ) ;
1646
- // Update socket held by `req`.
1647
- req . socket = socket ;
1648
1646
this . emit ( "upgrade" , req , socket , Buffer . from ( [ ] ) ) ;
1649
1647
return response ;
1650
1648
} else {
@@ -1659,29 +1657,33 @@ export class ServerImpl extends EventEmitter {
1659
1657
return ;
1660
1658
}
1661
1659
this . #ac = ac ;
1662
- try {
1663
- this . #server = serve (
1664
- {
1665
- handler : handler as Deno . ServeHandler ,
1666
- ...this . #addr,
1667
- signal : ac . signal ,
1668
- // @ts -ignore Might be any without `--unstable` flag
1669
- onListen : ( { port } ) => {
1670
- this . #addr! . port = port ;
1671
- this . emit ( "listening" ) ;
1672
- } ,
1673
- ...this . _additionalServeOptions ?.( ) ,
1674
- } ,
1675
- ) ;
1676
- } catch ( e ) {
1677
- this . emit ( "error" , e ) ;
1678
- return ;
1679
- }
1680
1660
1661
+ this . #server = Deno . serve ( ( req ) => {
1662
+ return handler ( req , {
1663
+ remoteAddr : {
1664
+ hostname : "0.0.0.0" ,
1665
+ port : 9999
1666
+ }
1667
+ } ) ;
1668
+ } ) ;
1669
+ //
1670
+ // this.#server = serve(
1671
+ // {
1672
+ // handler: handler as Deno.ServeHandler,
1673
+ // ...this.#addr,
1674
+ // signal: ac.signal,
1675
+ // // @ts -ignore Might be any without `--unstable` flag
1676
+ // onListen: ({ port }) => {
1677
+ // this.#addr!.port = port;
1678
+ // this.emit("listening");
1679
+ // },
1680
+ // ...this._additionalServeOptions?.(),
1681
+ // },
1682
+ // );
1681
1683
if ( this . #unref) {
1682
1684
this . #server. unref ( ) ;
1683
1685
}
1684
- this . #server. finished . then ( ( ) => this . #serveDeferred ! . resolve ( ) ) ;
1686
+ this . #server. then ( ( p ) => p . finished . then ( ( ) => this . #servePromise ! . resolve ( ) ) ) ;
1685
1687
}
1686
1688
1687
1689
setTimeout ( ) {
@@ -1721,7 +1723,7 @@ export class ServerImpl extends EventEmitter {
1721
1723
this . #ac. abort ( ) ;
1722
1724
this . #ac = undefined ;
1723
1725
} else {
1724
- this . #serveDeferred ! . resolve ( ) ;
1726
+ this . #servePromise ! . resolve ( ) ;
1725
1727
}
1726
1728
1727
1729
this . #server = undefined ;
@@ -1736,6 +1738,7 @@ export class ServerImpl extends EventEmitter {
1736
1738
}
1737
1739
}
1738
1740
1741
+
1739
1742
Server . prototype = ServerImpl . prototype ;
1740
1743
1741
1744
export function createServer ( opts , requestListener ?: ServerHandler ) {
0 commit comments