@eggjs/koa 3.1.0-beta.35 → 3.1.0-beta.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/application.d.ts +113 -110
- package/dist/application.js +240 -281
- package/dist/context.d.ts +163 -159
- package/dist/context.js +296 -346
- package/dist/index.d.ts +6 -7
- package/dist/index.js +9 -6
- package/dist/request.d.ts +323 -319
- package/dist/request.js +451 -514
- package/dist/response.d.ts +214 -210
- package/dist/response.js +384 -468
- package/dist/types.d.ts +12 -9
- package/package.json +31 -36
- package/dist/types.js +0 -2
package/dist/request.js
CHANGED
|
@@ -1,517 +1,454 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import accepts
|
|
6
|
-
import contentType from
|
|
7
|
-
import fresh from
|
|
8
|
-
import parse from
|
|
9
|
-
import typeis from
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
testTypes = Array.isArray(type) ? type : [type];
|
|
442
|
-
}
|
|
443
|
-
return typeis(this.req, [...testTypes, ...types]);
|
|
444
|
-
}
|
|
445
|
-
/**
|
|
446
|
-
* Return the request mime type void of
|
|
447
|
-
* parameters such as "charset".
|
|
448
|
-
*/
|
|
449
|
-
get type() {
|
|
450
|
-
const type = this.get('Content-Type');
|
|
451
|
-
if (!type)
|
|
452
|
-
return '';
|
|
453
|
-
return type.split(';')[0];
|
|
454
|
-
}
|
|
455
|
-
/**
|
|
456
|
-
* Return request header.
|
|
457
|
-
*
|
|
458
|
-
* The `Referrer` header field is special-cased,
|
|
459
|
-
* both `Referrer` and `Referer` are interchangeable.
|
|
460
|
-
*
|
|
461
|
-
* Examples:
|
|
462
|
-
*
|
|
463
|
-
* this.get('Content-Type');
|
|
464
|
-
* // => "text/plain"
|
|
465
|
-
*
|
|
466
|
-
* this.get('content-type');
|
|
467
|
-
* // => "text/plain"
|
|
468
|
-
*
|
|
469
|
-
* this.get('Something');
|
|
470
|
-
* // => ''
|
|
471
|
-
*/
|
|
472
|
-
get(field) {
|
|
473
|
-
const req = this.req;
|
|
474
|
-
switch ((field = field.toLowerCase())) {
|
|
475
|
-
case 'referer':
|
|
476
|
-
case 'referrer': {
|
|
477
|
-
return (req.headers.referrer || req.headers.referer || '');
|
|
478
|
-
}
|
|
479
|
-
default: {
|
|
480
|
-
return (req.headers[field] || '');
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* Inspect implementation.
|
|
486
|
-
*/
|
|
487
|
-
inspect() {
|
|
488
|
-
if (!this.req)
|
|
489
|
-
return;
|
|
490
|
-
return this.toJSON();
|
|
491
|
-
}
|
|
492
|
-
/**
|
|
493
|
-
* Return JSON representation.
|
|
494
|
-
*/
|
|
495
|
-
toJSON() {
|
|
496
|
-
return {
|
|
497
|
-
method: this.method,
|
|
498
|
-
url: this.url,
|
|
499
|
-
header: this.header,
|
|
500
|
-
};
|
|
501
|
-
}
|
|
502
|
-
}
|
|
1
|
+
import util from "node:util";
|
|
2
|
+
import net from "node:net";
|
|
3
|
+
import qs from "node:querystring";
|
|
4
|
+
import { format } from "node:url";
|
|
5
|
+
import accepts from "accepts";
|
|
6
|
+
import contentType from "content-type";
|
|
7
|
+
import fresh from "fresh";
|
|
8
|
+
import parse from "parseurl";
|
|
9
|
+
import typeis from "type-is";
|
|
10
|
+
|
|
11
|
+
//#region src/request.ts
|
|
12
|
+
var Request = class {
|
|
13
|
+
app;
|
|
14
|
+
req;
|
|
15
|
+
res;
|
|
16
|
+
ctx;
|
|
17
|
+
response;
|
|
18
|
+
originalUrl;
|
|
19
|
+
constructor(app, ctx, req, res) {
|
|
20
|
+
this.app = app;
|
|
21
|
+
this.req = req;
|
|
22
|
+
this.res = res;
|
|
23
|
+
this.ctx = ctx;
|
|
24
|
+
this.originalUrl = req.url ?? "/";
|
|
25
|
+
this[util.inspect.custom] = this.inspect.bind(this);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Return request header.
|
|
29
|
+
*/
|
|
30
|
+
get header() {
|
|
31
|
+
return this.req.headers;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Set request header.
|
|
35
|
+
*/
|
|
36
|
+
set header(val) {
|
|
37
|
+
this.req.headers = val;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Return request header, alias as request.header
|
|
41
|
+
*/
|
|
42
|
+
get headers() {
|
|
43
|
+
return this.req.headers;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Set request header, alias as request.header
|
|
47
|
+
*/
|
|
48
|
+
set headers(val) {
|
|
49
|
+
this.req.headers = val;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get request URL.
|
|
53
|
+
*/
|
|
54
|
+
get url() {
|
|
55
|
+
return this.req.url ?? "/";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Set request URL.
|
|
59
|
+
*/
|
|
60
|
+
set url(val) {
|
|
61
|
+
this.req.url = val;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get origin of URL.
|
|
65
|
+
*/
|
|
66
|
+
get origin() {
|
|
67
|
+
return `${this.protocol}://${this.host}`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get full request URL.
|
|
71
|
+
*/
|
|
72
|
+
get href() {
|
|
73
|
+
if (/^https?:\/\//i.test(this.originalUrl)) return this.originalUrl;
|
|
74
|
+
return this.origin + this.originalUrl;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get request method.
|
|
78
|
+
*/
|
|
79
|
+
get method() {
|
|
80
|
+
return this.req.method ?? "GET";
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Set request method.
|
|
84
|
+
*/
|
|
85
|
+
set method(val) {
|
|
86
|
+
this.req.method = val;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get request pathname.
|
|
90
|
+
*/
|
|
91
|
+
get path() {
|
|
92
|
+
return parse(this.req)?.pathname ?? "";
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Set pathname, retaining the query string when present.
|
|
96
|
+
*/
|
|
97
|
+
set path(pathname) {
|
|
98
|
+
const url = parse(this.req);
|
|
99
|
+
if (!url) return;
|
|
100
|
+
if (url.pathname === pathname) return;
|
|
101
|
+
url.pathname = pathname;
|
|
102
|
+
url.path = null;
|
|
103
|
+
this.url = format(url);
|
|
104
|
+
}
|
|
105
|
+
_parsedUrlQueryCache;
|
|
106
|
+
/**
|
|
107
|
+
* Get parsed query string.
|
|
108
|
+
*/
|
|
109
|
+
get query() {
|
|
110
|
+
const str = this.querystring;
|
|
111
|
+
if (!this._parsedUrlQueryCache) this._parsedUrlQueryCache = {};
|
|
112
|
+
let parsedUrlQuery = this._parsedUrlQueryCache[str];
|
|
113
|
+
if (!parsedUrlQuery) {
|
|
114
|
+
parsedUrlQuery = qs.parse(str);
|
|
115
|
+
this._parsedUrlQueryCache[str] = parsedUrlQuery;
|
|
116
|
+
}
|
|
117
|
+
return parsedUrlQuery;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Set query string as an object.
|
|
121
|
+
*/
|
|
122
|
+
set query(obj) {
|
|
123
|
+
this.querystring = qs.stringify(obj);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get query string.
|
|
127
|
+
*/
|
|
128
|
+
get querystring() {
|
|
129
|
+
if (!this.req) return "";
|
|
130
|
+
return parse(this.req)?.query ?? "";
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Set query string.
|
|
134
|
+
*/
|
|
135
|
+
set querystring(str) {
|
|
136
|
+
const url = parse(this.req);
|
|
137
|
+
if (!url) return;
|
|
138
|
+
if (url.search === `?${str}`) return;
|
|
139
|
+
url.search = str;
|
|
140
|
+
url.path = null;
|
|
141
|
+
this.url = format(url);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get the search string. Same as the query string
|
|
145
|
+
* except it includes the leading ?.
|
|
146
|
+
*/
|
|
147
|
+
get search() {
|
|
148
|
+
const querystring = this.querystring;
|
|
149
|
+
if (!querystring) return "";
|
|
150
|
+
return `?${querystring}`;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Set the search string. Same as
|
|
154
|
+
* request.querystring= but included for ubiquity.
|
|
155
|
+
*/
|
|
156
|
+
set search(str) {
|
|
157
|
+
this.querystring = str;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Parse the "Host" header field host
|
|
161
|
+
* and support X-Forwarded-Host when a
|
|
162
|
+
* proxy is enabled.
|
|
163
|
+
* return `hostname:port` format
|
|
164
|
+
*/
|
|
165
|
+
get host() {
|
|
166
|
+
let host = this.app.proxy ? this.get("X-Forwarded-Host") : "";
|
|
167
|
+
if (host) host = splitCommaSeparatedValues(host, 1)[0];
|
|
168
|
+
if (!host) {
|
|
169
|
+
if (this.req.httpVersionMajor >= 2) host = this.get(":authority");
|
|
170
|
+
if (!host) host = this.get("Host");
|
|
171
|
+
}
|
|
172
|
+
return host;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Parse the "Host" header field hostname
|
|
176
|
+
* and support X-Forwarded-Host when a
|
|
177
|
+
* proxy is enabled.
|
|
178
|
+
*/
|
|
179
|
+
get hostname() {
|
|
180
|
+
const host = this.host;
|
|
181
|
+
if (!host) return "";
|
|
182
|
+
if (host[0] === "[") return this.URL.hostname || "";
|
|
183
|
+
return host.split(":", 1)[0];
|
|
184
|
+
}
|
|
185
|
+
_memoizedURL;
|
|
186
|
+
/**
|
|
187
|
+
* Get WHATWG parsed URL.
|
|
188
|
+
* Lazily memoized.
|
|
189
|
+
*/
|
|
190
|
+
get URL() {
|
|
191
|
+
if (!this._memoizedURL) {
|
|
192
|
+
const originalUrl = this.originalUrl || "";
|
|
193
|
+
try {
|
|
194
|
+
this._memoizedURL = new URL(`${this.origin}${originalUrl}`);
|
|
195
|
+
} catch {
|
|
196
|
+
this._memoizedURL = Object.create(null);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return this._memoizedURL;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Check if the request is fresh, aka
|
|
203
|
+
* Last-Modified and/or the ETag
|
|
204
|
+
* still match.
|
|
205
|
+
*/
|
|
206
|
+
get fresh() {
|
|
207
|
+
const method = this.method;
|
|
208
|
+
const status = this.response.status;
|
|
209
|
+
if (method !== "GET" && method !== "HEAD") return false;
|
|
210
|
+
if (status >= 200 && status < 300 || status === 304) return fresh(this.header, this.response.header);
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Check if the request is stale, aka
|
|
215
|
+
* "Last-Modified" and / or the "ETag" for the
|
|
216
|
+
* resource has changed.
|
|
217
|
+
*/
|
|
218
|
+
get stale() {
|
|
219
|
+
return !this.fresh;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Check if the request is idempotent.
|
|
223
|
+
*/
|
|
224
|
+
get idempotent() {
|
|
225
|
+
return [
|
|
226
|
+
"GET",
|
|
227
|
+
"HEAD",
|
|
228
|
+
"PUT",
|
|
229
|
+
"DELETE",
|
|
230
|
+
"OPTIONS",
|
|
231
|
+
"TRACE"
|
|
232
|
+
].includes(this.method);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Return the request socket.
|
|
236
|
+
*/
|
|
237
|
+
get socket() {
|
|
238
|
+
return this.req.socket;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get the charset when present or undefined.
|
|
242
|
+
*/
|
|
243
|
+
get charset() {
|
|
244
|
+
try {
|
|
245
|
+
const { parameters } = contentType.parse(this.req);
|
|
246
|
+
return parameters.charset || "";
|
|
247
|
+
} catch {
|
|
248
|
+
return "";
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Return parsed Content-Length when present.
|
|
253
|
+
*/
|
|
254
|
+
get length() {
|
|
255
|
+
const len = this.get("Content-Length");
|
|
256
|
+
if (len === "") return;
|
|
257
|
+
return Number.parseInt(len);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Return the protocol string "http" or "https"
|
|
261
|
+
* when requested with TLS. When the proxy setting
|
|
262
|
+
* is enabled the "X-Forwarded-Proto" header
|
|
263
|
+
* field will be trusted. If you're running behind
|
|
264
|
+
* a reverse proxy that supplies https for you this
|
|
265
|
+
* may be enabled.
|
|
266
|
+
*/
|
|
267
|
+
get protocol() {
|
|
268
|
+
if (this.socket.encrypted) return "https";
|
|
269
|
+
if (!this.app.proxy) return "http";
|
|
270
|
+
let proto = this.get("X-Forwarded-Proto");
|
|
271
|
+
if (proto) proto = splitCommaSeparatedValues(proto, 1)[0];
|
|
272
|
+
return proto || "http";
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Shorthand for:
|
|
276
|
+
*
|
|
277
|
+
* this.protocol == 'https'
|
|
278
|
+
*/
|
|
279
|
+
get secure() {
|
|
280
|
+
return this.protocol === "https";
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* When `app.proxy` is `true`, parse
|
|
284
|
+
* the "X-Forwarded-For" ip address list.
|
|
285
|
+
*
|
|
286
|
+
* For example if the value was "client, proxy1, proxy2"
|
|
287
|
+
* you would receive the array `["client", "proxy1", "proxy2"]`
|
|
288
|
+
* where "proxy2" is the furthest down-stream.
|
|
289
|
+
*/
|
|
290
|
+
get ips() {
|
|
291
|
+
const proxy = this.app.proxy;
|
|
292
|
+
const val = this.get(this.app.proxyIpHeader);
|
|
293
|
+
let ips = proxy && val ? splitCommaSeparatedValues(val) : [];
|
|
294
|
+
if (this.app.maxIpsCount > 0) ips = ips.slice(-this.app.maxIpsCount);
|
|
295
|
+
return ips;
|
|
296
|
+
}
|
|
297
|
+
_ip;
|
|
298
|
+
/**
|
|
299
|
+
* Return request's remote address
|
|
300
|
+
* When `app.proxy` is `true`, parse
|
|
301
|
+
* the "X-Forwarded-For" ip address list and return the first one
|
|
302
|
+
*/
|
|
303
|
+
get ip() {
|
|
304
|
+
if (!this._ip) this._ip = this.ips[0] || this.socket.remoteAddress || "";
|
|
305
|
+
return this._ip;
|
|
306
|
+
}
|
|
307
|
+
set ip(ip) {
|
|
308
|
+
this._ip = ip;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Return subdomains as an array.
|
|
312
|
+
*
|
|
313
|
+
* Subdomains are the dot-separated parts of the host before the main domain
|
|
314
|
+
* of the app. By default, the domain of the app is assumed to be the last two
|
|
315
|
+
* parts of the host. This can be changed by setting `app.subdomainOffset`.
|
|
316
|
+
*
|
|
317
|
+
* For example, if the domain is "tobi.ferrets.example.com":
|
|
318
|
+
* If `app.subdomainOffset` is not set, this.subdomains is
|
|
319
|
+
* `["ferrets", "tobi"]`.
|
|
320
|
+
* If `app.subdomainOffset` is 3, this.subdomains is `["tobi"]`.
|
|
321
|
+
*/
|
|
322
|
+
get subdomains() {
|
|
323
|
+
const offset = this.app.subdomainOffset;
|
|
324
|
+
const hostname = this.hostname;
|
|
325
|
+
if (net.isIP(hostname)) return [];
|
|
326
|
+
return hostname.split(".").reverse().slice(offset);
|
|
327
|
+
}
|
|
328
|
+
_accept;
|
|
329
|
+
/**
|
|
330
|
+
* Get accept object.
|
|
331
|
+
* Lazily memoized.
|
|
332
|
+
*/
|
|
333
|
+
get accept() {
|
|
334
|
+
return this._accept || (this._accept = accepts(this.req));
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Set accept object.
|
|
338
|
+
*/
|
|
339
|
+
set accept(obj) {
|
|
340
|
+
this._accept = obj;
|
|
341
|
+
}
|
|
342
|
+
accepts(args, ...others) {
|
|
343
|
+
return this.accept.types(args, ...others);
|
|
344
|
+
}
|
|
345
|
+
acceptsEncodings(encodings, ...others) {
|
|
346
|
+
if (!encodings) return this.accept.encodings();
|
|
347
|
+
if (Array.isArray(encodings)) encodings = [...encodings, ...others];
|
|
348
|
+
else encodings = [encodings, ...others];
|
|
349
|
+
return this.accept.encodings(...encodings);
|
|
350
|
+
}
|
|
351
|
+
acceptsCharsets(charsets, ...others) {
|
|
352
|
+
if (!charsets) return this.accept.charsets();
|
|
353
|
+
if (Array.isArray(charsets)) charsets = [...charsets, ...others];
|
|
354
|
+
else charsets = [charsets, ...others];
|
|
355
|
+
return this.accept.charsets(...charsets);
|
|
356
|
+
}
|
|
357
|
+
acceptsLanguages(languages, ...others) {
|
|
358
|
+
if (!languages) return this.accept.languages();
|
|
359
|
+
if (Array.isArray(languages)) languages = [...languages, ...others];
|
|
360
|
+
else languages = [languages, ...others];
|
|
361
|
+
return this.accept.languages(...languages);
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Check if the incoming request contains the "Content-Type"
|
|
365
|
+
* header field and if it contains any of the given mime `type`s.
|
|
366
|
+
* If there is no request body, `null` is returned.
|
|
367
|
+
* If there is no content type, `false` is returned.
|
|
368
|
+
* Otherwise, it returns the first `type` that matches.
|
|
369
|
+
*
|
|
370
|
+
* Examples:
|
|
371
|
+
*
|
|
372
|
+
* // With Content-Type: text/html; charset=utf-8
|
|
373
|
+
* this.is('html'); // => 'html'
|
|
374
|
+
* this.is('text/html'); // => 'text/html'
|
|
375
|
+
* this.is('text/*', 'application/json'); // => 'text/html'
|
|
376
|
+
*
|
|
377
|
+
* // When Content-Type is application/json
|
|
378
|
+
* this.is('json', 'urlencoded'); // => 'json'
|
|
379
|
+
* this.is('application/json'); // => 'application/json'
|
|
380
|
+
* this.is('html', 'application/*'); // => 'application/json'
|
|
381
|
+
*
|
|
382
|
+
* this.is('html'); // => false
|
|
383
|
+
*/
|
|
384
|
+
is(type, ...types) {
|
|
385
|
+
let testTypes = [];
|
|
386
|
+
if (type) testTypes = Array.isArray(type) ? type : [type];
|
|
387
|
+
return typeis(this.req, [...testTypes, ...types]);
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Return the request mime type void of
|
|
391
|
+
* parameters such as "charset".
|
|
392
|
+
*/
|
|
393
|
+
get type() {
|
|
394
|
+
const type = this.get("Content-Type");
|
|
395
|
+
if (!type) return "";
|
|
396
|
+
return type.split(";")[0];
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Return request header.
|
|
400
|
+
*
|
|
401
|
+
* The `Referrer` header field is special-cased,
|
|
402
|
+
* both `Referrer` and `Referer` are interchangeable.
|
|
403
|
+
*
|
|
404
|
+
* Examples:
|
|
405
|
+
*
|
|
406
|
+
* this.get('Content-Type');
|
|
407
|
+
* // => "text/plain"
|
|
408
|
+
*
|
|
409
|
+
* this.get('content-type');
|
|
410
|
+
* // => "text/plain"
|
|
411
|
+
*
|
|
412
|
+
* this.get('Something');
|
|
413
|
+
* // => ''
|
|
414
|
+
*/
|
|
415
|
+
get(field) {
|
|
416
|
+
const req = this.req;
|
|
417
|
+
switch (field = field.toLowerCase()) {
|
|
418
|
+
case "referer":
|
|
419
|
+
case "referrer": return req.headers.referrer || req.headers.referer || "";
|
|
420
|
+
default: return req.headers[field] || "";
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Inspect implementation.
|
|
425
|
+
*/
|
|
426
|
+
inspect() {
|
|
427
|
+
if (!this.req) return;
|
|
428
|
+
return this.toJSON();
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Return JSON representation.
|
|
432
|
+
*/
|
|
433
|
+
toJSON() {
|
|
434
|
+
return {
|
|
435
|
+
method: this.method,
|
|
436
|
+
url: this.url,
|
|
437
|
+
header: this.header
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
};
|
|
503
441
|
/**
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
442
|
+
* Split a comma-separated value string into an array of values, with an optional limit.
|
|
443
|
+
* All the values are trimmed of whitespace and filtered out empty values.
|
|
444
|
+
*
|
|
445
|
+
* @param {string} value - The comma-separated value string to split.
|
|
446
|
+
* @param {number} [limit] - The maximum number of values to return.
|
|
447
|
+
* @returns {string[]} An array of values from the comma-separated string.
|
|
448
|
+
*/
|
|
511
449
|
function splitCommaSeparatedValues(value, limit) {
|
|
512
|
-
|
|
513
|
-
.split(',', limit)
|
|
514
|
-
.map((v) => v.trim())
|
|
515
|
-
.filter((v) => v.length > 0);
|
|
450
|
+
return value.split(",", limit).map((v) => v.trim()).filter((v) => v.length > 0);
|
|
516
451
|
}
|
|
517
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sR0FBRyxFQUFFLEVBQWUsTUFBTSxVQUFVLENBQUM7QUFDNUMsT0FBTyxFQUFFLEVBQUUsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxPQUFPLEVBQUUsRUFBZ0IsTUFBTSxTQUFTLENBQUM7QUFDaEQsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxVQUFVLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBVTdCLE1BQU0sT0FBTyxPQUFPO0lBRWxCLEdBQUcsQ0FBYztJQUNqQixHQUFHLENBQWtCO0lBQ3JCLEdBQUcsQ0FBaUI7SUFDcEIsR0FBRyxDQUFVO0lBQ2IsUUFBUSxDQUFXO0lBQ25CLFdBQVcsQ0FBUztJQUVwQixZQUFZLEdBQWdCLEVBQUUsR0FBWSxFQUFFLEdBQW9CLEVBQUUsR0FBbUI7UUFDbkYsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO1FBQ2xDLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENB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
|
|
452
|
+
|
|
453
|
+
//#endregion
|
|
454
|
+
export { Request };
|