@@ -13,118 +13,11 @@ const escapeHtml = require("./escapeHtml");
13
13
14
14
/**
15
15
* @typedef {Object } ExpectedResponse
16
- * @property {(name: string) => string | string[] | undefined } get
17
- * @property {(name: string, value: number | string | string[]) => void } set
18
- * @property {(status: number) => void } status
19
- * @property {(data: any) => void } send
16
+ * @property {(status: number) => void } [status]
17
+ * @property {(data: any) => void } [send]
20
18
* @property {(data: any) => void } [pipeInto]
21
19
*/
22
20
23
- /**
24
- * @template {ServerResponse} Response
25
- * @param {Response } res
26
- * @returns {string[] }
27
- */
28
- function getHeaderNames ( res ) {
29
- // Pseudo API, TODO?
30
- if ( typeof res . getHeaderNames !== "function" ) {
31
- // @ts -ignore
32
- // eslint-disable-next-line no-underscore-dangle
33
- return Object . keys ( res . _headers || { } ) ;
34
- }
35
-
36
- // Node.js API
37
- return res . getHeaderNames ( ) ;
38
- }
39
-
40
- /**
41
- * @template {IncomingMessage} Request
42
- * @param {Request } req
43
- * @param {string } name
44
- * @returns {string | string[] | undefined }
45
- */
46
- function getHeaderFromRequest ( req , name ) {
47
- // Express API
48
- if (
49
- typeof ( /** @type {Request & ExpectedRequest } */ ( req ) . get ) === "function"
50
- ) {
51
- return /** @type {Request & ExpectedRequest } */ ( req ) . get ( name ) ;
52
- }
53
-
54
- // Node.js API
55
- return req . headers [ name ] ;
56
- }
57
-
58
- /**
59
- * @template {ServerResponse} Response
60
- * @param {Response } res
61
- * @param {string } name
62
- * @returns {number | string | string[] | undefined }
63
- */
64
- function getHeaderFromResponse ( res , name ) {
65
- // Express API
66
- if (
67
- typeof ( /** @type {Response & ExpectedResponse } */ ( res ) . get ) === "function"
68
- ) {
69
- return /** @type {Response & ExpectedResponse } */ ( res ) . get ( name ) ;
70
- }
71
-
72
- // Node.js API
73
- return res . getHeader ( name ) ;
74
- }
75
-
76
- /**
77
- * @template {ServerResponse} Response
78
- * @param {Response } res
79
- * @param {string } name
80
- * @param {number | string | string[] } value
81
- * @returns {void }
82
- */
83
- function setHeaderForResponse ( res , name , value ) {
84
- // Express API
85
- if (
86
- typeof ( /** @type {Response & ExpectedResponse } */ ( res ) . set ) === "function"
87
- ) {
88
- /** @type {Response & ExpectedResponse } */
89
- ( res ) . set ( name , typeof value === "number" ? String ( value ) : value ) ;
90
-
91
- return ;
92
- }
93
-
94
- // Node.js API
95
- res . setHeader ( name , value ) ;
96
- }
97
-
98
- /**
99
- * @template {ServerResponse} Response
100
- * @param {Response } res
101
- * @param {Record<string, number | string | string[] | undefined> } headers
102
- */
103
- function setHeadersForResponse ( res , headers ) {
104
- const keys = Object . keys ( headers ) ;
105
-
106
- for ( let i = 0 ; i < keys . length ; i ++ ) {
107
- const key = keys [ i ] ;
108
- const value = headers [ key ] ;
109
-
110
- if ( typeof value !== "undefined" ) {
111
- setHeaderForResponse ( res , key , value ) ;
112
- }
113
- }
114
- }
115
-
116
- /**
117
- * @template {ServerResponse} Response
118
- * @param {Response } res
119
- */
120
- function clearHeadersForResponse ( res ) {
121
- const headers = getHeaderNames ( res ) ;
122
-
123
- for ( let i = 0 ; i < headers . length ; i ++ ) {
124
- res . removeHeader ( headers [ i ] ) ;
125
- }
126
- }
127
-
128
21
/**
129
22
* @template {ServerResponse} Response
130
23
* @param {Response } res
@@ -212,17 +105,30 @@ function sendError(req, res, status, options) {
212
105
</html>` ;
213
106
214
107
// Clear existing headers
215
- clearHeadersForResponse ( res ) ;
108
+ const headers = res . getHeaderNames ( ) ;
109
+
110
+ for ( let i = 0 ; i < headers . length ; i ++ ) {
111
+ res . removeHeader ( headers [ i ] ) ;
112
+ }
216
113
217
114
if ( options && options . headers ) {
218
- setHeadersForResponse ( res , options . headers ) ;
115
+ const keys = Object . keys ( options . headers ) ;
116
+
117
+ for ( let i = 0 ; i < keys . length ; i ++ ) {
118
+ const key = keys [ i ] ;
119
+ const value = options . headers [ key ] ;
120
+
121
+ if ( typeof value !== "undefined" ) {
122
+ res . setHeader ( key , value ) ;
123
+ }
124
+ }
219
125
}
220
126
221
127
// Send basic response
222
128
setStatusCode ( res , status ) ;
223
- setHeaderForResponse ( res , "Content-Type" , "text/html; charset=utf-8" ) ;
224
- setHeaderForResponse ( res , "Content-Security-Policy" , "default-src 'none'" ) ;
225
- setHeaderForResponse ( res , "X-Content-Type-Options" , "nosniff" ) ;
129
+ res . setHeader ( "Content-Type" , "text/html; charset=utf-8" ) ;
130
+ res . setHeader ( "Content-Security-Policy" , "default-src 'none'" ) ;
131
+ res . setHeader ( "X-Content-Type-Options" , "nosniff" ) ;
226
132
227
133
let byteLength = Buffer . byteLength ( document ) ;
228
134
@@ -232,7 +138,7 @@ function sendError(req, res, status, options) {
232
138
( options . modifyResponseData ( req , res , document , byteLength ) ) ) ;
233
139
}
234
140
235
- setHeaderForResponse ( res , "Content-Length" , byteLength ) ;
141
+ res . setHeader ( "Content-Length" , byteLength ) ;
236
142
237
143
res . end ( document ) ;
238
144
}
@@ -328,7 +234,7 @@ async function send(req, res, filename, start, end, goNext, options) {
328
234
}
329
235
} ) ;
330
236
331
- setHeaderForResponse ( res , "Content-Length" , byteLength ) ;
237
+ res . setHeader ( "Content-Length" , byteLength ) ;
332
238
333
239
// Pseudo API and Koa API
334
240
if (
@@ -377,10 +283,6 @@ async function send(req, res, filename, start, end, goNext, options) {
377
283
}
378
284
379
285
module . exports = {
380
- getHeaderNames,
381
- getHeaderFromRequest,
382
- getHeaderFromResponse,
383
- setHeaderForResponse,
384
286
setStatusCode,
385
287
send,
386
288
sendError,
0 commit comments