@eggjs/koa 2.21.0 → 2.22.0
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/Readme.md +8 -8
- package/dist/commonjs/application.d.ts +12 -12
- package/dist/commonjs/application.js +60 -22
- package/dist/commonjs/context.d.ts +6 -10
- package/dist/commonjs/context.js +21 -10
- package/dist/commonjs/index.d.ts +1 -1
- package/dist/commonjs/index.js +1 -2
- package/dist/commonjs/request.d.ts +3 -2
- package/dist/commonjs/request.js +35 -64
- package/dist/commonjs/response.d.ts +3 -2
- package/dist/commonjs/response.js +26 -19
- package/dist/commonjs/types.d.ts +3 -2
- package/dist/esm/application.d.ts +12 -12
- package/dist/esm/application.js +25 -20
- package/dist/esm/context.d.ts +6 -10
- package/dist/esm/context.js +21 -10
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/request.d.ts +3 -2
- package/dist/esm/request.js +35 -64
- package/dist/esm/response.d.ts +3 -2
- package/dist/esm/response.js +26 -19
- package/dist/esm/types.d.ts +3 -2
- package/dist/package.json +1 -1
- package/package.json +18 -8
- package/src/application.ts +48 -30
- package/src/context.ts +73 -29
- package/src/index.ts +1 -1
- package/src/request.ts +73 -54
- package/src/response.ts +53 -27
- package/src/types.ts +4 -2
package/dist/esm/response.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import util from 'node:util';
|
|
2
2
|
import Stream from 'node:stream';
|
|
3
3
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
4
|
+
import { type Options as ContentDispositionOptions } from 'content-disposition';
|
|
4
5
|
import type { Application } from './application.js';
|
|
5
6
|
import type { Context } from './context.js';
|
|
6
7
|
import type { Request } from './request.js';
|
|
@@ -87,7 +88,7 @@ export declare class Response {
|
|
|
87
88
|
/**
|
|
88
89
|
* Set Content-Disposition header to "attachment" with optional `filename`.
|
|
89
90
|
*/
|
|
90
|
-
attachment(filename?: string, options?:
|
|
91
|
+
attachment(filename?: string, options?: ContentDispositionOptions): void;
|
|
91
92
|
/**
|
|
92
93
|
* Set Content-Type response header with `type` through `mime.lookup()`
|
|
93
94
|
* when it does not contain a charset.
|
|
@@ -173,7 +174,7 @@ export declare class Response {
|
|
|
173
174
|
* this.set('Accept', 'application/json');
|
|
174
175
|
* this.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });
|
|
175
176
|
*/
|
|
176
|
-
set(field: string | Record<string, string>, val?: string | number |
|
|
177
|
+
set(field: string | Record<string, string>, val?: string | number | unknown[]): void;
|
|
177
178
|
/**
|
|
178
179
|
* Append additional header `field` with value `val`.
|
|
179
180
|
*
|
package/dist/esm/response.js
CHANGED
|
@@ -58,17 +58,18 @@ export class Response {
|
|
|
58
58
|
assert(code >= 100 && code <= 999, `invalid status code: ${code}`);
|
|
59
59
|
this._explicitStatus = true;
|
|
60
60
|
this.res.statusCode = code;
|
|
61
|
-
if (this.req.httpVersionMajor < 2) {
|
|
61
|
+
if (this.req.httpVersionMajor < 2 && statuses.message[code]) {
|
|
62
62
|
this.res.statusMessage = statuses.message[code];
|
|
63
63
|
}
|
|
64
|
-
if (this.body && statuses.empty[code])
|
|
64
|
+
if (this.body && statuses.empty[code]) {
|
|
65
65
|
this.body = null;
|
|
66
|
+
}
|
|
66
67
|
}
|
|
67
68
|
/**
|
|
68
69
|
* Get response status message
|
|
69
70
|
*/
|
|
70
71
|
get message() {
|
|
71
|
-
return this.res.statusMessage
|
|
72
|
+
return this.res.statusMessage ?? statuses.message[this.status];
|
|
72
73
|
}
|
|
73
74
|
/**
|
|
74
75
|
* Set response status message
|
|
@@ -76,6 +77,7 @@ export class Response {
|
|
|
76
77
|
set message(msg) {
|
|
77
78
|
this.res.statusMessage = msg;
|
|
78
79
|
}
|
|
80
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
79
81
|
_body;
|
|
80
82
|
_explicitNullBody;
|
|
81
83
|
/**
|
|
@@ -91,11 +93,13 @@ export class Response {
|
|
|
91
93
|
const original = this._body;
|
|
92
94
|
this._body = val;
|
|
93
95
|
// no content
|
|
94
|
-
if (val
|
|
95
|
-
if (!statuses.empty[this.status])
|
|
96
|
+
if (val === null || val === undefined) {
|
|
97
|
+
if (!statuses.empty[this.status]) {
|
|
96
98
|
this.status = 204;
|
|
97
|
-
|
|
99
|
+
}
|
|
100
|
+
if (val === null) {
|
|
98
101
|
this._explicitNullBody = true;
|
|
102
|
+
}
|
|
99
103
|
this.remove('Content-Type');
|
|
100
104
|
this.remove('Content-Length');
|
|
101
105
|
this.remove('Transfer-Encoding');
|
|
@@ -123,15 +127,17 @@ export class Response {
|
|
|
123
127
|
// stream
|
|
124
128
|
if (val instanceof Stream) {
|
|
125
129
|
onFinish(this.res, destroy.bind(null, val));
|
|
126
|
-
//
|
|
130
|
+
// oxlint-disable-next-line eqeqeq
|
|
127
131
|
if (original != val) {
|
|
128
132
|
val.once('error', err => this.ctx.onerror(err));
|
|
129
133
|
// overwriting
|
|
130
|
-
if (original
|
|
134
|
+
if (original !== null && original !== undefined) {
|
|
131
135
|
this.remove('Content-Length');
|
|
136
|
+
}
|
|
132
137
|
}
|
|
133
|
-
if (setType)
|
|
138
|
+
if (setType) {
|
|
134
139
|
this.type = 'bin';
|
|
140
|
+
}
|
|
135
141
|
return;
|
|
136
142
|
}
|
|
137
143
|
// json
|
|
@@ -155,7 +161,7 @@ export class Response {
|
|
|
155
161
|
*/
|
|
156
162
|
get length() {
|
|
157
163
|
if (this.has('Content-Length')) {
|
|
158
|
-
return parseInt(this.get('Content-Length')
|
|
164
|
+
return Number.parseInt(this.get('Content-Length')) || 0;
|
|
159
165
|
}
|
|
160
166
|
const { body } = this;
|
|
161
167
|
if (!body || body instanceof Stream) {
|
|
@@ -268,8 +274,10 @@ export class Response {
|
|
|
268
274
|
* this.response.is('html', 'json')
|
|
269
275
|
*/
|
|
270
276
|
is(type, ...types) {
|
|
271
|
-
|
|
272
|
-
|
|
277
|
+
let testTypes = [];
|
|
278
|
+
if (type) {
|
|
279
|
+
testTypes = Array.isArray(type) ? type : [type];
|
|
280
|
+
}
|
|
273
281
|
return typeis(this.type, [...testTypes, ...types]);
|
|
274
282
|
}
|
|
275
283
|
/**
|
|
@@ -355,15 +363,16 @@ export class Response {
|
|
|
355
363
|
if (this.headerSent)
|
|
356
364
|
return;
|
|
357
365
|
if (typeof field === 'string') {
|
|
366
|
+
let value = val;
|
|
358
367
|
if (Array.isArray(val)) {
|
|
359
|
-
|
|
368
|
+
value = val.map(v => {
|
|
360
369
|
return typeof v === 'string' ? v : String(v);
|
|
361
370
|
});
|
|
362
371
|
}
|
|
363
372
|
else if (typeof val !== 'string') {
|
|
364
|
-
|
|
373
|
+
value = String(val);
|
|
365
374
|
}
|
|
366
|
-
this.res.setHeader(field,
|
|
375
|
+
this.res.setHeader(field, value);
|
|
367
376
|
}
|
|
368
377
|
else {
|
|
369
378
|
for (const key in field) {
|
|
@@ -385,9 +394,7 @@ export class Response {
|
|
|
385
394
|
const prev = this.get(field);
|
|
386
395
|
let value = val;
|
|
387
396
|
if (prev) {
|
|
388
|
-
value = Array.isArray(prev)
|
|
389
|
-
? prev.concat(value)
|
|
390
|
-
: [prev].concat(val);
|
|
397
|
+
value = Array.isArray(prev) ? prev.concat(value) : [prev].concat(val);
|
|
391
398
|
}
|
|
392
399
|
return this.set(field, value);
|
|
393
400
|
}
|
|
@@ -449,4 +456,4 @@ export class Response {
|
|
|
449
456
|
this.res.flushHeaders();
|
|
450
457
|
}
|
|
451
458
|
}
|
|
452
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLGtCQUFrQixNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUtsQyxNQUFNLE9BQU8sUUFBUTtJQUVuQixHQUFHLENBQWM7SUFDakIsR0FBRyxDQUFrQjtJQUNyQixHQUFHLENBQWlCO0lBQ3BCLEdBQUcsQ0FBVTtJQUNiLE9BQU8sQ0FBVTtJQUVqQixZQUFZLEdBQWdCLEVBQUUsR0FBWSxFQUFFLEdBQW9CLEVBQUUsR0FBbUI7UUFDbkYsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJ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
|
|
459
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUdqQyxPQUFPLGtCQUVOLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sUUFBUSxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBTWxDLE1BQU0sT0FBTyxRQUFRO0lBRW5CLEdBQUcsQ0FBYztJQUNqQixHQUFHLENBQWtCO0lBQ3JCLEdBQUcsQ0FBaUI7SUFDcEIsR0FBRyxDQUFVO0lBQ2IsT0FBTyxDQUFVO0lBRWpCLFlBQ0UsR0FBZ0IsRUFDaEIsR0FBWSxFQUNaLEdBQW9CLEVBQ3BCLEdBQW1CO1FBRW5CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFB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
|
package/dist/esm/types.d.ts
CHANGED
package/dist/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/koa",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.22.0",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">= 18.19.0"
|
|
6
6
|
},
|
|
@@ -14,9 +14,17 @@
|
|
|
14
14
|
"preci": "npm run lint",
|
|
15
15
|
"ci": "egg-bin cov",
|
|
16
16
|
"postci": "npm run prepublishOnly && attw --pack",
|
|
17
|
-
"lint": "
|
|
17
|
+
"lint": "oxlint",
|
|
18
18
|
"authors": "git log --format='%aN <%aE>' | sort -u > AUTHORS",
|
|
19
|
-
"prepublishOnly": "tshy && tshy-after"
|
|
19
|
+
"prepublishOnly": "tshy && tshy-after",
|
|
20
|
+
"prepare": "husky"
|
|
21
|
+
},
|
|
22
|
+
"lint-staged": {
|
|
23
|
+
"*": "prettier --write --ignore-unknown --cache",
|
|
24
|
+
"*.{ts,js,json,md,yml}": [
|
|
25
|
+
"prettier --ignore-unknown --write",
|
|
26
|
+
"oxlint --fix"
|
|
27
|
+
]
|
|
20
28
|
},
|
|
21
29
|
"repository": {
|
|
22
30
|
"type": "git",
|
|
@@ -33,6 +41,7 @@
|
|
|
33
41
|
],
|
|
34
42
|
"license": "MIT",
|
|
35
43
|
"dependencies": {
|
|
44
|
+
"@types/content-disposition": "^0.5.8",
|
|
36
45
|
"accepts": "^1.3.8",
|
|
37
46
|
"cache-content-type": "^2.0.0",
|
|
38
47
|
"content-disposition": "~0.5.4",
|
|
@@ -53,11 +62,10 @@
|
|
|
53
62
|
"vary": "^1.1.2"
|
|
54
63
|
},
|
|
55
64
|
"devDependencies": {
|
|
56
|
-
"@arethetypeswrong/cli": "^0.17.
|
|
65
|
+
"@arethetypeswrong/cli": "^0.17.4",
|
|
57
66
|
"@eggjs/bin": "^7.0.1",
|
|
58
|
-
"@eggjs/tsconfig": "
|
|
67
|
+
"@eggjs/tsconfig": "2",
|
|
59
68
|
"@types/accepts": "^1.3.7",
|
|
60
|
-
"@types/content-disposition": "^0.5.8",
|
|
61
69
|
"@types/content-type": "^1.1.8",
|
|
62
70
|
"@types/cookies": "^0.9.0",
|
|
63
71
|
"@types/destroy": "^1.0.3",
|
|
@@ -74,8 +82,10 @@
|
|
|
74
82
|
"@types/supertest": "^6.0.2",
|
|
75
83
|
"@types/type-is": "^1.6.6",
|
|
76
84
|
"@types/vary": "^1.1.3",
|
|
77
|
-
"
|
|
78
|
-
"
|
|
85
|
+
"husky": "9",
|
|
86
|
+
"lint-staged": "15",
|
|
87
|
+
"oxlint": "^0.16.2",
|
|
88
|
+
"prettier": "3",
|
|
79
89
|
"mm": "^4.0.1",
|
|
80
90
|
"supertest": "^3.1.0",
|
|
81
91
|
"tsd": "^0.31.0",
|
package/src/application.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { debuglog } from 'node:util';
|
|
1
|
+
import util, { debuglog } from 'node:util';
|
|
2
2
|
import Emitter from 'node:events';
|
|
3
|
-
import util from 'node:util';
|
|
4
3
|
import Stream from 'node:stream';
|
|
5
4
|
import http from 'node:http';
|
|
6
5
|
import type { AsyncLocalStorage } from 'node:async_hooks';
|
|
7
6
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
7
|
+
|
|
8
8
|
import { getAsyncLocalStorage } from 'gals';
|
|
9
9
|
import { isGeneratorFunction } from 'is-type-of';
|
|
10
10
|
import onFinished from 'on-finished';
|
|
11
11
|
import statuses from 'statuses';
|
|
12
12
|
import compose from 'koa-compose';
|
|
13
|
+
|
|
13
14
|
import { HttpError } from 'http-errors';
|
|
14
15
|
import { Context } from './context.js';
|
|
15
16
|
import { Request } from './request.js';
|
|
@@ -18,10 +19,13 @@ import type { CustomError, AnyProto } from './types.js';
|
|
|
18
19
|
|
|
19
20
|
const debug = debuglog('@eggjs/koa/application');
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
23
|
+
export type ProtoImplClass<T = object> = new (...args: any[]) => T;
|
|
22
24
|
export type Next = () => Promise<void>;
|
|
23
25
|
type _MiddlewareFunc<T> = (ctx: T, next: Next) => Promise<void> | void;
|
|
24
|
-
export type MiddlewareFunc<T = Context> = _MiddlewareFunc<T> & {
|
|
26
|
+
export type MiddlewareFunc<T extends Context = Context> = _MiddlewareFunc<T> & {
|
|
27
|
+
_name?: string;
|
|
28
|
+
};
|
|
25
29
|
|
|
26
30
|
/**
|
|
27
31
|
* Expose `Application` class.
|
|
@@ -53,15 +57,15 @@ export class Application extends Emitter {
|
|
|
53
57
|
|
|
54
58
|
/**
|
|
55
59
|
* Initialize a new `Application`.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
*
|
|
61
|
+
* @param {object} [options] Application options
|
|
62
|
+
* @param {string} [options.env] Environment, default is `development`
|
|
63
|
+
* @param {string[]} [options.keys] Signed cookie keys
|
|
64
|
+
* @param {boolean} [options.proxy] Trust proxy headers
|
|
65
|
+
* @param {number} [options.subdomainOffset] Subdomain offset
|
|
66
|
+
* @param {string} [options.proxyIpHeader] Proxy IP header, defaults to X-Forwarded-For
|
|
67
|
+
* @param {number} [options.maxIpsCount] Max IPs read from proxy IP header, default to 0 (means infinity)
|
|
68
|
+
*/
|
|
65
69
|
|
|
66
70
|
constructor(options?: {
|
|
67
71
|
proxy?: boolean;
|
|
@@ -84,11 +88,14 @@ export class Application extends Emitter {
|
|
|
84
88
|
this.middleware = [];
|
|
85
89
|
this.ctxStorage = getAsyncLocalStorage();
|
|
86
90
|
this.silent = false;
|
|
87
|
-
this.ContextClass =
|
|
91
|
+
this.ContextClass =
|
|
92
|
+
class ApplicationContext extends Context {} as ProtoImplClass<Context>;
|
|
88
93
|
this.context = this.ContextClass.prototype;
|
|
89
|
-
this.RequestClass =
|
|
94
|
+
this.RequestClass =
|
|
95
|
+
class ApplicationRequest extends Request {} as ProtoImplClass<Request>;
|
|
90
96
|
this.request = this.RequestClass.prototype;
|
|
91
|
-
this.ResponseClass =
|
|
97
|
+
this.ResponseClass =
|
|
98
|
+
class ApplicationResponse extends Response {} as ProtoImplClass<Response>;
|
|
92
99
|
this.response = this.ResponseClass.prototype;
|
|
93
100
|
}
|
|
94
101
|
|
|
@@ -119,6 +126,7 @@ export class Application extends Emitter {
|
|
|
119
126
|
*
|
|
120
127
|
* http.createServer(app.callback()).listen(...)
|
|
121
128
|
*/
|
|
129
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
122
130
|
listen(...args: any[]) {
|
|
123
131
|
debug('listen with args: %o', args);
|
|
124
132
|
const server = http.createServer(this.callback());
|
|
@@ -151,16 +159,19 @@ export class Application extends Emitter {
|
|
|
151
159
|
/**
|
|
152
160
|
* Use the given middleware `fn`.
|
|
153
161
|
*/
|
|
154
|
-
use(fn: MiddlewareFunc) {
|
|
155
|
-
if (typeof fn !== 'function')
|
|
162
|
+
use<T extends Context = Context>(fn: MiddlewareFunc<T>) {
|
|
163
|
+
if (typeof fn !== 'function')
|
|
164
|
+
throw new TypeError('middleware must be a function!');
|
|
156
165
|
const name = fn._name || fn.name || '-';
|
|
157
166
|
if (isGeneratorFunction(fn)) {
|
|
158
|
-
throw new TypeError(
|
|
159
|
-
|
|
160
|
-
|
|
167
|
+
throw new TypeError(
|
|
168
|
+
`Support for generators was removed, middleware: ${name}. ` +
|
|
169
|
+
'See the documentation for examples of how to convert old middleware ' +
|
|
170
|
+
'https://github.com/koajs/koa/blob/master/docs/migration.md'
|
|
171
|
+
);
|
|
161
172
|
}
|
|
162
173
|
debug('use %o #%d', name, this.middleware.length);
|
|
163
|
-
this.middleware.push(fn);
|
|
174
|
+
this.middleware.push(fn as MiddlewareFunc<Context>);
|
|
164
175
|
return this;
|
|
165
176
|
}
|
|
166
177
|
|
|
@@ -196,12 +207,16 @@ export class Application extends Emitter {
|
|
|
196
207
|
* Handle request in callback.
|
|
197
208
|
* @private
|
|
198
209
|
*/
|
|
199
|
-
protected async handleRequest(
|
|
210
|
+
protected async handleRequest(
|
|
211
|
+
ctx: Context,
|
|
212
|
+
fnMiddleware: (ctx: Context) => Promise<void>
|
|
213
|
+
) {
|
|
200
214
|
this.emit('request', ctx);
|
|
201
215
|
const res = ctx.res;
|
|
202
216
|
res.statusCode = 404;
|
|
203
|
-
const onerror = (err:
|
|
204
|
-
|
|
217
|
+
const onerror = (err: CustomError) => ctx.onerror(err);
|
|
218
|
+
// oxlint-disable-next-line promise/prefer-await-to-callbacks
|
|
219
|
+
onFinished(res, (err: CustomError | null) => {
|
|
205
220
|
if (err) {
|
|
206
221
|
onerror(err);
|
|
207
222
|
}
|
|
@@ -211,7 +226,7 @@ export class Application extends Emitter {
|
|
|
211
226
|
await fnMiddleware(ctx);
|
|
212
227
|
return this._respond(ctx);
|
|
213
228
|
} catch (err) {
|
|
214
|
-
return onerror(err);
|
|
229
|
+
return onerror(err as CustomError);
|
|
215
230
|
}
|
|
216
231
|
}
|
|
217
232
|
|
|
@@ -232,15 +247,18 @@ export class Application extends Emitter {
|
|
|
232
247
|
// When dealing with cross-globals a normal `instanceof` check doesn't work properly.
|
|
233
248
|
// See https://github.com/koajs/koa/issues/1466
|
|
234
249
|
// We can probably remove it once jest fixes https://github.com/facebook/jest/issues/2549.
|
|
235
|
-
const isNativeError =
|
|
250
|
+
const isNativeError =
|
|
251
|
+
err instanceof Error ||
|
|
236
252
|
Object.prototype.toString.call(err) === '[object Error]';
|
|
237
|
-
if (!isNativeError)
|
|
253
|
+
if (!isNativeError)
|
|
254
|
+
throw new TypeError(util.format('non-error thrown: %j', err));
|
|
238
255
|
|
|
239
256
|
if (err.status === 404 || err.expose) return;
|
|
240
257
|
if (this.silent) return;
|
|
241
258
|
|
|
242
259
|
const msg = err.stack || err.toString();
|
|
243
|
-
console
|
|
260
|
+
// oxlint-disable-next-line no-console
|
|
261
|
+
console.error(`\n${msg.replaceAll(/^/gm, ' ')}\n`);
|
|
244
262
|
}
|
|
245
263
|
|
|
246
264
|
/**
|
|
@@ -272,7 +290,7 @@ export class Application extends Emitter {
|
|
|
272
290
|
}
|
|
273
291
|
|
|
274
292
|
// status body
|
|
275
|
-
if (body
|
|
293
|
+
if (body === null || body === undefined) {
|
|
276
294
|
if (ctx.response._explicitNullBody) {
|
|
277
295
|
ctx.response.remove('Content-Type');
|
|
278
296
|
ctx.response.remove('Transfer-Encoding');
|
package/src/context.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import util from 'node:util';
|
|
2
2
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
3
|
-
import { ParsedUrlQuery } from 'node:querystring';
|
|
3
|
+
import type { ParsedUrlQuery } from 'node:querystring';
|
|
4
|
+
|
|
4
5
|
import createError from 'http-errors';
|
|
5
6
|
import statuses from 'statuses';
|
|
6
7
|
import Cookies from 'cookies';
|
|
7
|
-
import {
|
|
8
|
+
import type { Accepts } from 'accepts';
|
|
9
|
+
|
|
8
10
|
import type { Application } from './application.js';
|
|
9
11
|
import type { Request } from './request.js';
|
|
10
12
|
import type { Response } from './response.js';
|
|
@@ -19,6 +21,7 @@ export class Context {
|
|
|
19
21
|
response: Response & AnyProto;
|
|
20
22
|
originalUrl: string;
|
|
21
23
|
respond?: boolean;
|
|
24
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
22
25
|
#state: Record<string, any> = {};
|
|
23
26
|
|
|
24
27
|
constructor(app: Application, req: IncomingMessage, res: ServerResponse) {
|
|
@@ -26,10 +29,10 @@ export class Context {
|
|
|
26
29
|
this.req = req;
|
|
27
30
|
this.res = res;
|
|
28
31
|
this.request = new app.RequestClass(app, this, req, res);
|
|
29
|
-
this.response = new app.ResponseClass(app, this
|
|
32
|
+
this.response = new app.ResponseClass(app, this, req, res);
|
|
30
33
|
this.request.response = this.response;
|
|
31
34
|
this.response.request = this.request;
|
|
32
|
-
this.originalUrl = req.url
|
|
35
|
+
this.originalUrl = req.url ?? '/';
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
/**
|
|
@@ -74,15 +77,24 @@ export class Context {
|
|
|
74
77
|
* ```ts
|
|
75
78
|
* this.assert(this.user, 401, 'Please login!');
|
|
76
79
|
* ```
|
|
77
|
-
*
|
|
78
|
-
* @param {Mixed} value
|
|
79
|
-
* @param {Number} status
|
|
80
|
-
* @param {String} errorMessage
|
|
81
|
-
* @param {Object} errorProps
|
|
82
80
|
*/
|
|
83
|
-
assert(
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
assert(
|
|
82
|
+
value: unknown,
|
|
83
|
+
status?: number,
|
|
84
|
+
errorProps?: Record<string, unknown>
|
|
85
|
+
): void;
|
|
86
|
+
assert(
|
|
87
|
+
value: unknown,
|
|
88
|
+
status?: number,
|
|
89
|
+
errorMessage?: string,
|
|
90
|
+
errorProps?: Record<string, unknown>
|
|
91
|
+
): void;
|
|
92
|
+
assert(
|
|
93
|
+
value: unknown,
|
|
94
|
+
status?: number,
|
|
95
|
+
errorMessageOrProps?: string | Record<string, unknown>,
|
|
96
|
+
errorProps?: Record<string, unknown>
|
|
97
|
+
) {
|
|
86
98
|
if (value) {
|
|
87
99
|
return;
|
|
88
100
|
}
|
|
@@ -131,7 +143,12 @@ export class Context {
|
|
|
131
143
|
throw(error: Error, errorProps: object): void;
|
|
132
144
|
throw(error: Error, status: number): void;
|
|
133
145
|
throw(error: Error, status: number, errorProps: object): void;
|
|
134
|
-
throw(
|
|
146
|
+
throw(
|
|
147
|
+
arg1: number | string | Error,
|
|
148
|
+
arg2?: number | string | Error | object,
|
|
149
|
+
errorProps?: object
|
|
150
|
+
) {
|
|
151
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
135
152
|
const args: any[] = [];
|
|
136
153
|
if (typeof arg2 === 'number') {
|
|
137
154
|
// throw(error, status)
|
|
@@ -163,7 +180,8 @@ export class Context {
|
|
|
163
180
|
// When dealing with cross-globals a normal `instanceof` check doesn't work properly.
|
|
164
181
|
// See https://github.com/koajs/koa/issues/1466
|
|
165
182
|
// We can probably remove it once jest fixes https://github.com/facebook/jest/issues/2549.
|
|
166
|
-
const isNativeError =
|
|
183
|
+
const isNativeError =
|
|
184
|
+
err instanceof Error ||
|
|
167
185
|
Object.prototype.toString.call(err) === '[object Error]';
|
|
168
186
|
if (!isNativeError) {
|
|
169
187
|
err = new Error(util.format('non-error thrown: %j', err));
|
|
@@ -171,7 +189,8 @@ export class Context {
|
|
|
171
189
|
|
|
172
190
|
let headerSent = false;
|
|
173
191
|
if (this.response.headerSent || !this.response.writable) {
|
|
174
|
-
headerSent =
|
|
192
|
+
headerSent = true;
|
|
193
|
+
err.headerSent = true;
|
|
175
194
|
}
|
|
176
195
|
|
|
177
196
|
// delegate
|
|
@@ -187,10 +206,14 @@ export class Context {
|
|
|
187
206
|
const { res } = this;
|
|
188
207
|
|
|
189
208
|
// first unset all headers
|
|
190
|
-
|
|
209
|
+
for (const name of res.getHeaderNames()) {
|
|
210
|
+
res.removeHeader(name);
|
|
211
|
+
}
|
|
191
212
|
|
|
192
213
|
// then set those specified
|
|
193
|
-
if (err.headers)
|
|
214
|
+
if (err.headers) {
|
|
215
|
+
this.response.set(err.headers);
|
|
216
|
+
}
|
|
194
217
|
|
|
195
218
|
// force text/plain
|
|
196
219
|
this.response.type = 'text';
|
|
@@ -198,15 +221,20 @@ export class Context {
|
|
|
198
221
|
let statusCode = err.status || err.statusCode;
|
|
199
222
|
|
|
200
223
|
// ENOENT support
|
|
201
|
-
if (err.code === 'ENOENT')
|
|
224
|
+
if (err.code === 'ENOENT') {
|
|
225
|
+
statusCode = 404;
|
|
226
|
+
}
|
|
202
227
|
|
|
203
228
|
// default to 500
|
|
204
|
-
if (typeof statusCode !== 'number' || !statuses.message[statusCode])
|
|
229
|
+
if (typeof statusCode !== 'number' || !statuses.message[statusCode]) {
|
|
230
|
+
statusCode = 500;
|
|
231
|
+
}
|
|
205
232
|
|
|
206
233
|
// respond
|
|
207
234
|
const statusMessage = statuses.message[statusCode] as string;
|
|
208
235
|
const msg = err.expose ? err.message : statusMessage;
|
|
209
|
-
|
|
236
|
+
err.status = statusCode;
|
|
237
|
+
this.response.status = statusCode;
|
|
210
238
|
this.response.length = Buffer.byteLength(msg);
|
|
211
239
|
res.end(msg);
|
|
212
240
|
}
|
|
@@ -238,29 +266,43 @@ export class Context {
|
|
|
238
266
|
acceptsLanguages(): string[];
|
|
239
267
|
acceptsLanguages(languages: string[]): string | false;
|
|
240
268
|
acceptsLanguages(...languages: string[]): string | false;
|
|
241
|
-
acceptsLanguages(
|
|
242
|
-
|
|
269
|
+
acceptsLanguages(
|
|
270
|
+
languages?: string | string[],
|
|
271
|
+
...others: string[]
|
|
272
|
+
): string | string[] | false {
|
|
273
|
+
return this.request.acceptsLanguages(languages as string, ...others);
|
|
243
274
|
}
|
|
244
275
|
|
|
245
276
|
acceptsEncodings(): string[];
|
|
246
277
|
acceptsEncodings(encodings: string[]): string | false;
|
|
247
278
|
acceptsEncodings(...encodings: string[]): string | false;
|
|
248
|
-
acceptsEncodings(
|
|
249
|
-
|
|
279
|
+
acceptsEncodings(
|
|
280
|
+
encodings?: string | string[],
|
|
281
|
+
...others: string[]
|
|
282
|
+
): string[] | string | false {
|
|
283
|
+
return this.request.acceptsEncodings(encodings as string, ...others);
|
|
250
284
|
}
|
|
251
285
|
|
|
252
286
|
acceptsCharsets(): string[];
|
|
253
287
|
acceptsCharsets(charsets: string[]): string | false;
|
|
254
288
|
acceptsCharsets(...charsets: string[]): string | false;
|
|
255
|
-
acceptsCharsets(
|
|
256
|
-
|
|
289
|
+
acceptsCharsets(
|
|
290
|
+
charsets?: string | string[],
|
|
291
|
+
...others: string[]
|
|
292
|
+
): string[] | string | false {
|
|
293
|
+
return this.request.acceptsCharsets(charsets as string, ...others);
|
|
257
294
|
}
|
|
258
295
|
|
|
259
|
-
accepts(
|
|
260
|
-
|
|
296
|
+
accepts(args: string[]): string | string[] | false;
|
|
297
|
+
accepts(...args: string[]): string | string[] | false;
|
|
298
|
+
accepts(
|
|
299
|
+
args?: string | string[],
|
|
300
|
+
...others: string[]
|
|
301
|
+
): string | string[] | false {
|
|
302
|
+
return this.request.accepts(args as string, ...others);
|
|
261
303
|
}
|
|
262
304
|
|
|
263
|
-
get<T = string | string
|
|
305
|
+
get<T = string | string[]>(field: string): T {
|
|
264
306
|
return this.request.get(field);
|
|
265
307
|
}
|
|
266
308
|
|
|
@@ -440,10 +482,12 @@ export class Context {
|
|
|
440
482
|
this.response.message = msg;
|
|
441
483
|
}
|
|
442
484
|
|
|
485
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
443
486
|
get body(): any {
|
|
444
487
|
return this.response.body;
|
|
445
488
|
}
|
|
446
489
|
|
|
490
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
447
491
|
set body(val: any) {
|
|
448
492
|
this.response.body = val;
|
|
449
493
|
}
|