Skip to content

Commit 40248c8

Browse files
committed
Merge branch 'development'
2 parents 023013d + 55b091b commit 40248c8

File tree

7 files changed

+69
-46
lines changed

7 files changed

+69
-46
lines changed

src/Node/Http/IncomingMessage.purs

+4
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ foreign import defaultDestroy
4444
destroy_ :: forall message. IncomingMessage message => message -> Effect Unit
4545
destroy_ = destroy undefined
4646

47+
error :: forall message. IncomingMessage message =>
48+
Event message (Error -> Effect Unit)
49+
error = Event "error"
50+
4751
aborted :: forall message. IncomingMessage message =>
4852
Event message (Effect Unit)
4953
aborted = Event "aborted"

src/Node/Http/Server.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
var http = require("http")
44

5-
exports.create = function (requestListener) {
5+
exports.createImpl = function (requestListener) {
66
return function () {
77
return http.createServer(function (request, response) {
88
requestListener(request)(response)()

src/Node/Http/Server.purs

+25-10
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,43 @@
11
module Node.Http.Server
22
( HttpServer
3-
, Request
4-
, Response
53
, create
64
) where
75

86
import Prelude
97

108
import Effect (Effect)
9+
import Node.Errors (Error)
10+
import Node.Events.EventEmitter (class EventEmitter, on)
1111
import Node.Events.EventEmitter as EventEmitter
12-
import Node.Events.EventEmitter (class EventEmitter)
13-
import Node.Http.ServerRequest (ServerRequest)
14-
import Node.Http.ServerResponse (ServerResponse)
12+
import Node.Events.EventListener (toEventListener)
13+
import Node.Http.IncomingMessage as IncomingMessage
14+
import Node.Http.Server.Request (Request)
15+
import Node.Http.Server.Response (Response)
16+
import Node.Http.Server.Response as Response
1517
import Node.Server (class Server, defaultListen)
1618

1719
foreign import data HttpServer :: Type
1820

19-
type Request = ServerRequest
20-
21-
type Response = ServerResponse
22-
23-
foreign import create ::
21+
foreign import createImpl ::
2422
(Request -> Response -> Effect Unit) -> Effect HttpServer
2523

24+
create
25+
:: (Error -> Effect Unit)
26+
-> (Error -> Effect Unit)
27+
-> (Request -> Response -> Effect Unit)
28+
-> Effect HttpServer
29+
create requestErrorListener responseErrorListener callback =
30+
createImpl \request response -> let
31+
requestErrorListener' = toEventListener requestErrorListener
32+
responseErrorListener' = toEventListener responseErrorListener
33+
in do
34+
request # on IncomingMessage.error requestErrorListener' # void
35+
response # on Response.error responseErrorListener' # void
36+
callback request response
37+
38+
create_ :: (Request -> Response -> Effect Unit) -> Effect HttpServer
39+
create_ callback = create (const $ pure unit) (const $ pure unit) callback
40+
2641
instance eventEmitterHttpServer :: EventEmitter HttpServer where
2742
on = EventEmitter.defaultOn
2843
once = EventEmitter.defaultOnce
File renamed without changes.

src/Node/Http/ServerRequest.purs src/Node/Http/Server/Request.purs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module Node.Http.ServerRequest where
1+
module Node.Http.Server.Request where
22

33
import Node.Events.EventEmitter (class EventEmitter)
44
import Node.Events.EventEmitter as EventEmitter
@@ -7,9 +7,9 @@ import Node.Http.IncomingMessage as IncomingMessage
77
import Node.Stream.Readable (class Readable)
88
import Node.Stream.Readable as Readable
99

10-
foreign import data ServerRequest :: Type
10+
foreign import data Request :: Type
1111

12-
instance eventEmitterServerResponse :: EventEmitter ServerRequest where
12+
instance eventEmitterServerResponse :: EventEmitter Request where
1313
on = EventEmitter.defaultOn
1414
once = EventEmitter.defaultOnce
1515
prependListener = EventEmitter.defaultPrependListener
@@ -23,7 +23,7 @@ instance eventEmitterServerResponse :: EventEmitter ServerRequest where
2323
setMaxListeners = EventEmitter.defaultSetMaxListeners
2424
eventNames = EventEmitter.defaultEventNames
2525

26-
instance readableServerRequest :: Readable ServerRequest where
26+
instance readableRequest :: Readable Request where
2727
readableHighWaterMark = Readable.defaultReadableHighWaterMark
2828
readableLength = Readable.defaultReadableLength
2929
isPaused = Readable.defaultIsPaused
@@ -36,14 +36,14 @@ instance readableServerRequest :: Readable ServerRequest where
3636
unshift = Readable.defaultUnshift
3737
destroy = Readable.defaultDestroy
3838

39-
instance incomingMessageServerRequest :: IncomingMessage ServerRequest where
39+
instance incomingMessageRequest :: IncomingMessage Request where
4040
httpVersion = IncomingMessage.defaultHttpVersion
4141
rawHeaders = IncomingMessage.defaultRawHeaders
4242
headers = IncomingMessage.defaultHeaders
4343
trailers = IncomingMessage.defaultTrailers
4444
setTimeout = IncomingMessage.defaultSetTimeout
4545
destroy = IncomingMessage.defaultDestroy
4646

47-
foreign import method :: ServerRequest -> String
47+
foreign import method :: Request -> String
4848

49-
foreign import url :: ServerRequest -> String
49+
foreign import url :: Request -> String
File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
module Node.Http.ServerResponse where
1+
module Node.Http.Server.Response where
22

33
import Prelude
44

55
import Data.Foreign (Foreign)
66
import Data.Nullable (Nullable)
77
import Effect (Effect)
8+
import Node.Errors (Error)
89
import Node.Events.Event (Event(..))
910
import Node.Events.EventEmitter (class EventEmitter)
1011
import Node.Events.EventEmitter as EventEmitter
@@ -13,9 +14,9 @@ import Node.Stream.Writable as Writable
1314
import Undefined (undefined)
1415
import Unsafe.Coerce (unsafeCoerce)
1516

16-
foreign import data ServerResponse :: Type
17+
foreign import data Response :: Type
1718

18-
instance eventEmitterServerResponse :: EventEmitter ServerResponse where
19+
instance eventEmitterResponse :: EventEmitter Response where
1920
on = EventEmitter.defaultOn
2021
once = EventEmitter.defaultOnce
2122
prependListener = EventEmitter.defaultPrependListener
@@ -29,7 +30,7 @@ instance eventEmitterServerResponse :: EventEmitter ServerResponse where
2930
setMaxListeners = EventEmitter.defaultSetMaxListeners
3031
eventNames = EventEmitter.defaultEventNames
3132

32-
instance writableServerResponse :: Writable ServerResponse where
33+
instance writableResponse :: Writable Response where
3334
writableHighWaterMark = Writable.defaultWritableHighWaterMark
3435
writableLength = Writable.defaultWritableLength
3536
cork = Writable.defaultCork
@@ -39,76 +40,79 @@ instance writableServerResponse :: Writable ServerResponse where
3940
destroy = Writable.defaultDestroy
4041

4142
foreign import addTrailers ::
42-
Foreign -> ServerResponse -> Effect Unit
43+
Foreign -> Response -> Effect Unit
4344

4445
foreign import finished ::
45-
ServerResponse -> Effect Boolean
46+
Response -> Effect Boolean
4647

4748
foreign import getHeader ::
48-
String -> ServerResponse -> Effect String
49+
String -> Response -> Effect String
4950

5051
foreign import getHeaderNames ::
51-
ServerResponse -> Effect (Array String)
52+
Response -> Effect (Array String)
5253

5354
foreign import getHeaders ::
54-
ServerResponse -> Effect Foreign
55+
Response -> Effect Foreign
5556

5657
foreign import hasHeader ::
57-
String -> ServerResponse -> Effect Boolean
58+
String -> Response -> Effect Boolean
5859

5960
foreign import headersSent ::
60-
ServerResponse -> Effect Boolean
61+
Response -> Effect Boolean
6162

6263
foreign import removeHeader ::
63-
String -> ServerResponse -> Effect Unit
64+
String -> Response -> Effect Unit
6465

6566
foreign import getSendDate ::
66-
ServerResponse -> Effect Boolean
67+
Response -> Effect Boolean
6768

6869
foreign import setSendDate ::
69-
Boolean -> ServerResponse -> Effect Unit
70+
Boolean -> Response -> Effect Unit
7071

7172
foreign import setHeader ::
72-
String -> String -> ServerResponse -> Effect Unit
73+
String -> String -> Response -> Effect Unit
7374

7475
foreign import setHeader' ::
75-
String -> Array String -> ServerResponse -> Effect Unit
76+
String -> Array String -> Response -> Effect Unit
7677

7778
foreign import defaultSetTimeout ::
78-
Int -> Effect Unit -> ServerResponse -> Effect ServerResponse
79+
Int -> Effect Unit -> Response -> Effect Response
7980

8081
foreign import getStatusCode ::
81-
ServerResponse -> Effect Int
82+
Response -> Effect Int
8283

8384
foreign import setStatusCode ::
84-
Int -> ServerResponse -> Effect Unit
85+
Int -> Response -> Effect Unit
8586

8687
foreign import getStatusMessage ::
87-
ServerResponse -> Effect (Nullable String)
88+
Response -> Effect (Nullable String)
8889

8990
foreign import setStatusMessage ::
90-
String -> ServerResponse -> Effect Unit
91+
String -> Response -> Effect Unit
9192

9293
foreign import writeContinue ::
93-
ServerResponse -> Effect Unit
94+
Response -> Effect Unit
9495

9596
foreign import writeHead ::
96-
Int -> String -> Foreign -> ServerResponse -> Effect Unit
97+
Int -> String -> Foreign -> Response -> Effect Unit
9798

98-
writeHead_ :: Int -> Foreign -> ServerResponse -> Effect Unit
99+
writeHead_ :: Int -> Foreign -> Response -> Effect Unit
99100
writeHead_ statusCode headers =
100101
writeHead statusCode (unsafeCoerce headers) undefined
101102

102-
writeHead_' :: Int -> String -> ServerResponse -> Effect Unit
103+
writeHead_' :: Int -> String -> Response -> Effect Unit
103104
writeHead_' statusCode statusMessage =
104105
writeHead statusCode statusMessage undefined
105106

106-
writeHead__ :: Int -> ServerResponse -> Effect Unit
107+
writeHead__ :: Int -> Response -> Effect Unit
107108
writeHead__ statusCode =
108109
writeHead statusCode undefined undefined
109110

110-
close :: Event ServerResponse (Effect Unit)
111+
error :: Event Response (Error -> Effect Unit)
112+
error = Event "error"
113+
114+
close :: Event Response (Effect Unit)
111115
close = Event "close"
112116

113-
finish :: Event ServerResponse (Effect Unit)
117+
finish :: Event Response (Effect Unit)
114118
finish = Event "finish"

0 commit comments

Comments
 (0)