@eggjs/koa 3.1.0-beta.20 → 3.1.0-beta.22
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 +127 -0
- package/dist/application.js +274 -0
- package/dist/context.d.ts +225 -0
- package/dist/context.js +349 -0
- package/dist/index.d.ts +7 -918
- package/dist/index.js +7 -1369
- package/dist/request.d.ts +338 -0
- package/dist/request.js +521 -0
- package/dist/response.d.ts +225 -0
- package/dist/response.js +472 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.js +2 -0
- package/package.json +3 -3
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import util from 'node:util';
|
|
2
|
+
import Emitter from 'node:events';
|
|
3
|
+
import type { AsyncLocalStorage } from 'node:async_hooks';
|
|
4
|
+
import http, { type IncomingMessage, type ServerResponse } from 'node:http';
|
|
5
|
+
import { Context } from './context.ts';
|
|
6
|
+
import { Request } from './request.ts';
|
|
7
|
+
import { Response } from './response.ts';
|
|
8
|
+
import type { CustomError, AnyProto } from './types.ts';
|
|
9
|
+
export type ProtoImplClass<T = object> = new (...args: any[]) => T;
|
|
10
|
+
export type Next = () => Promise<void>;
|
|
11
|
+
type _MiddlewareFunc<T> = (ctx: T, next: Next) => Promise<void> | void;
|
|
12
|
+
export type MiddlewareFunc<T extends Context = Context> = _MiddlewareFunc<T> & {
|
|
13
|
+
_name?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Expose `Application` class.
|
|
17
|
+
* Inherits from `Emitter.prototype`.
|
|
18
|
+
*/
|
|
19
|
+
export declare class Application extends Emitter {
|
|
20
|
+
[key: symbol]: unknown;
|
|
21
|
+
/**
|
|
22
|
+
* Make HttpError available to consumers of the library so that consumers don't
|
|
23
|
+
* have a direct dependency upon `http-errors`
|
|
24
|
+
*/
|
|
25
|
+
static HttpError: import("http-errors").HttpErrorConstructor<number>;
|
|
26
|
+
protected _proxy: boolean;
|
|
27
|
+
protected _env: string;
|
|
28
|
+
subdomainOffset: number;
|
|
29
|
+
proxyIpHeader: string;
|
|
30
|
+
maxIpsCount: number;
|
|
31
|
+
protected _keys?: string[];
|
|
32
|
+
middleware: MiddlewareFunc<Context>[];
|
|
33
|
+
ctxStorage: AsyncLocalStorage<Context>;
|
|
34
|
+
silent: boolean;
|
|
35
|
+
ContextClass: ProtoImplClass<Context>;
|
|
36
|
+
context: AnyProto;
|
|
37
|
+
RequestClass: ProtoImplClass<Request>;
|
|
38
|
+
request: AnyProto;
|
|
39
|
+
ResponseClass: ProtoImplClass<Response>;
|
|
40
|
+
response: AnyProto;
|
|
41
|
+
/**
|
|
42
|
+
* Initialize a new `Application`.
|
|
43
|
+
*
|
|
44
|
+
* @param {object} [options] Application options
|
|
45
|
+
* @param {string} [options.env] Environment, default is `development`
|
|
46
|
+
* @param {string[]} [options.keys] Signed cookie keys
|
|
47
|
+
* @param {boolean} [options.proxy] Trust proxy headers
|
|
48
|
+
* @param {number} [options.subdomainOffset] Subdomain offset
|
|
49
|
+
* @param {string} [options.proxyIpHeader] Proxy IP header, defaults to X-Forwarded-For
|
|
50
|
+
* @param {number} [options.maxIpsCount] Max IPs read from proxy IP header, default to 0 (means infinity)
|
|
51
|
+
*/
|
|
52
|
+
constructor(options?: {
|
|
53
|
+
proxy?: boolean;
|
|
54
|
+
subdomainOffset?: number;
|
|
55
|
+
proxyIpHeader?: string;
|
|
56
|
+
maxIpsCount?: number;
|
|
57
|
+
env?: string;
|
|
58
|
+
keys?: string[];
|
|
59
|
+
});
|
|
60
|
+
get keys(): string[] | undefined;
|
|
61
|
+
set keys(value: string[] | undefined);
|
|
62
|
+
get env(): string;
|
|
63
|
+
set env(value: string);
|
|
64
|
+
get proxy(): boolean;
|
|
65
|
+
set proxy(value: boolean);
|
|
66
|
+
/**
|
|
67
|
+
* Shorthand for:
|
|
68
|
+
*
|
|
69
|
+
* http.createServer(app.callback()).listen(...)
|
|
70
|
+
*/
|
|
71
|
+
listen(...args: any[]): http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>;
|
|
72
|
+
/**
|
|
73
|
+
* Return JSON representation.
|
|
74
|
+
* We only bother showing settings.
|
|
75
|
+
*/
|
|
76
|
+
toJSON(): {
|
|
77
|
+
subdomainOffset: number;
|
|
78
|
+
proxy: boolean;
|
|
79
|
+
env: string;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Inspect implementation.
|
|
83
|
+
*/
|
|
84
|
+
inspect(): {
|
|
85
|
+
subdomainOffset: number;
|
|
86
|
+
proxy: boolean;
|
|
87
|
+
env: string;
|
|
88
|
+
};
|
|
89
|
+
[util.inspect.custom](): {
|
|
90
|
+
subdomainOffset: number;
|
|
91
|
+
proxy: boolean;
|
|
92
|
+
env: string;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Use the given middleware `fn`.
|
|
96
|
+
*/
|
|
97
|
+
use<T extends Context = Context>(fn: MiddlewareFunc<T>): this;
|
|
98
|
+
/**
|
|
99
|
+
* Return a request handler callback
|
|
100
|
+
* for node's native http server.
|
|
101
|
+
*/
|
|
102
|
+
callback(): (req: IncomingMessage, res: ServerResponse) => Promise<void | http.ServerResponse<http.IncomingMessage>>;
|
|
103
|
+
/**
|
|
104
|
+
* return current context from async local storage
|
|
105
|
+
*/
|
|
106
|
+
get currentContext(): Context | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Handle request in callback.
|
|
109
|
+
* @private
|
|
110
|
+
*/
|
|
111
|
+
protected handleRequest(ctx: Context, fnMiddleware: (ctx: Context) => Promise<void>): Promise<void | http.ServerResponse<http.IncomingMessage>>;
|
|
112
|
+
/**
|
|
113
|
+
* Initialize a new context.
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
createContext(req: IncomingMessage, res: ServerResponse): Context;
|
|
117
|
+
/**
|
|
118
|
+
* Default error handler.
|
|
119
|
+
* @private
|
|
120
|
+
*/
|
|
121
|
+
protected onerror(err: CustomError): void;
|
|
122
|
+
/**
|
|
123
|
+
* Response helper.
|
|
124
|
+
*/
|
|
125
|
+
protected _respond(ctx: Context): http.ServerResponse<http.IncomingMessage> | undefined;
|
|
126
|
+
}
|
|
127
|
+
export {};
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import util, { debuglog } from 'node:util';
|
|
2
|
+
import Emitter from 'node:events';
|
|
3
|
+
import Stream from 'node:stream';
|
|
4
|
+
import http, {} from 'node:http';
|
|
5
|
+
import { getAsyncLocalStorage } from 'gals';
|
|
6
|
+
import { isGeneratorFunction } from 'is-type-of';
|
|
7
|
+
import onFinished from 'on-finished';
|
|
8
|
+
import statuses from 'statuses';
|
|
9
|
+
import compose from 'koa-compose';
|
|
10
|
+
import { HttpError } from 'http-errors';
|
|
11
|
+
import { Context } from "./context.js";
|
|
12
|
+
import { Request } from "./request.js";
|
|
13
|
+
import { Response } from "./response.js";
|
|
14
|
+
const debug = debuglog('egg/koa/application');
|
|
15
|
+
/**
|
|
16
|
+
* Expose `Application` class.
|
|
17
|
+
* Inherits from `Emitter.prototype`.
|
|
18
|
+
*/
|
|
19
|
+
export class Application extends Emitter {
|
|
20
|
+
/**
|
|
21
|
+
* Make HttpError available to consumers of the library so that consumers don't
|
|
22
|
+
* have a direct dependency upon `http-errors`
|
|
23
|
+
*/
|
|
24
|
+
static HttpError = HttpError;
|
|
25
|
+
_proxy;
|
|
26
|
+
_env;
|
|
27
|
+
subdomainOffset;
|
|
28
|
+
proxyIpHeader;
|
|
29
|
+
maxIpsCount;
|
|
30
|
+
_keys;
|
|
31
|
+
middleware;
|
|
32
|
+
ctxStorage;
|
|
33
|
+
silent;
|
|
34
|
+
ContextClass;
|
|
35
|
+
context;
|
|
36
|
+
RequestClass;
|
|
37
|
+
request;
|
|
38
|
+
ResponseClass;
|
|
39
|
+
response;
|
|
40
|
+
/**
|
|
41
|
+
* Initialize a new `Application`.
|
|
42
|
+
*
|
|
43
|
+
* @param {object} [options] Application options
|
|
44
|
+
* @param {string} [options.env] Environment, default is `development`
|
|
45
|
+
* @param {string[]} [options.keys] Signed cookie keys
|
|
46
|
+
* @param {boolean} [options.proxy] Trust proxy headers
|
|
47
|
+
* @param {number} [options.subdomainOffset] Subdomain offset
|
|
48
|
+
* @param {string} [options.proxyIpHeader] Proxy IP header, defaults to X-Forwarded-For
|
|
49
|
+
* @param {number} [options.maxIpsCount] Max IPs read from proxy IP header, default to 0 (means infinity)
|
|
50
|
+
*/
|
|
51
|
+
constructor(options) {
|
|
52
|
+
super();
|
|
53
|
+
options = options || {};
|
|
54
|
+
this._proxy = options.proxy || false;
|
|
55
|
+
this.subdomainOffset = options.subdomainOffset || 2;
|
|
56
|
+
this.proxyIpHeader = options.proxyIpHeader || 'X-Forwarded-For';
|
|
57
|
+
this.maxIpsCount = options.maxIpsCount || 0;
|
|
58
|
+
this._env = options.env || process.env.NODE_ENV || 'development';
|
|
59
|
+
if (options.keys) {
|
|
60
|
+
this._keys = options.keys;
|
|
61
|
+
}
|
|
62
|
+
this.middleware = [];
|
|
63
|
+
this.ctxStorage = getAsyncLocalStorage();
|
|
64
|
+
this.silent = false;
|
|
65
|
+
this.ContextClass = class ApplicationContext extends Context {
|
|
66
|
+
};
|
|
67
|
+
this.context = this.ContextClass.prototype;
|
|
68
|
+
this.RequestClass = class ApplicationRequest extends Request {
|
|
69
|
+
};
|
|
70
|
+
this.request = this.RequestClass.prototype;
|
|
71
|
+
this.ResponseClass = class ApplicationResponse extends Response {
|
|
72
|
+
};
|
|
73
|
+
this.response = this.ResponseClass.prototype;
|
|
74
|
+
}
|
|
75
|
+
get keys() {
|
|
76
|
+
return this._keys;
|
|
77
|
+
}
|
|
78
|
+
set keys(value) {
|
|
79
|
+
this._keys = value;
|
|
80
|
+
}
|
|
81
|
+
get env() {
|
|
82
|
+
return this._env;
|
|
83
|
+
}
|
|
84
|
+
set env(value) {
|
|
85
|
+
this._env = value;
|
|
86
|
+
}
|
|
87
|
+
get proxy() {
|
|
88
|
+
return this._proxy;
|
|
89
|
+
}
|
|
90
|
+
set proxy(value) {
|
|
91
|
+
this._proxy = value;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Shorthand for:
|
|
95
|
+
*
|
|
96
|
+
* http.createServer(app.callback()).listen(...)
|
|
97
|
+
*/
|
|
98
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
99
|
+
listen(...args) {
|
|
100
|
+
debug('listen with args: %o', args);
|
|
101
|
+
const server = http.createServer(this.callback());
|
|
102
|
+
return server.listen(...args);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Return JSON representation.
|
|
106
|
+
* We only bother showing settings.
|
|
107
|
+
*/
|
|
108
|
+
toJSON() {
|
|
109
|
+
return {
|
|
110
|
+
subdomainOffset: this.subdomainOffset,
|
|
111
|
+
proxy: this.proxy,
|
|
112
|
+
env: this.env,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Inspect implementation.
|
|
117
|
+
*/
|
|
118
|
+
inspect() {
|
|
119
|
+
return this.toJSON();
|
|
120
|
+
}
|
|
121
|
+
[util.inspect.custom]() {
|
|
122
|
+
return this.inspect();
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Use the given middleware `fn`.
|
|
126
|
+
*/
|
|
127
|
+
use(fn) {
|
|
128
|
+
if (typeof fn !== 'function')
|
|
129
|
+
throw new TypeError('middleware must be a function!');
|
|
130
|
+
const name = fn._name || fn.name || '-';
|
|
131
|
+
if (isGeneratorFunction(fn)) {
|
|
132
|
+
throw new TypeError(`Support for generators was removed, middleware: ${name}. ` +
|
|
133
|
+
'See the documentation for examples of how to convert old middleware ' +
|
|
134
|
+
'https://github.com/koajs/koa/blob/master/docs/migration.md');
|
|
135
|
+
}
|
|
136
|
+
debug('use %o #%d', name, this.middleware.length);
|
|
137
|
+
this.middleware.push(fn);
|
|
138
|
+
return this;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Return a request handler callback
|
|
142
|
+
* for node's native http server.
|
|
143
|
+
*/
|
|
144
|
+
callback() {
|
|
145
|
+
const fn = compose(this.middleware);
|
|
146
|
+
if (!this.listenerCount('error')) {
|
|
147
|
+
this.on('error', this.onerror.bind(this));
|
|
148
|
+
}
|
|
149
|
+
const handleRequest = (req, res) => {
|
|
150
|
+
const ctx = this.createContext(req, res);
|
|
151
|
+
return this.ctxStorage.run(ctx, async () => {
|
|
152
|
+
return await this.handleRequest(ctx, fn);
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
return handleRequest;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* return current context from async local storage
|
|
159
|
+
*/
|
|
160
|
+
get currentContext() {
|
|
161
|
+
return this.ctxStorage.getStore();
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Handle request in callback.
|
|
165
|
+
* @private
|
|
166
|
+
*/
|
|
167
|
+
async handleRequest(ctx, fnMiddleware) {
|
|
168
|
+
this.emit('request', ctx);
|
|
169
|
+
const res = ctx.res;
|
|
170
|
+
res.statusCode = 404;
|
|
171
|
+
const onerror = (err) => ctx.onerror(err);
|
|
172
|
+
// oxlint-disable-next-line promise/prefer-await-to-callbacks
|
|
173
|
+
onFinished(res, (err) => {
|
|
174
|
+
if (err) {
|
|
175
|
+
onerror(err);
|
|
176
|
+
}
|
|
177
|
+
this.emit('response', ctx);
|
|
178
|
+
});
|
|
179
|
+
try {
|
|
180
|
+
await fnMiddleware(ctx);
|
|
181
|
+
return this._respond(ctx);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
return onerror(err);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Initialize a new context.
|
|
189
|
+
* @private
|
|
190
|
+
*/
|
|
191
|
+
createContext(req, res) {
|
|
192
|
+
const context = new this.ContextClass(this, req, res);
|
|
193
|
+
return context;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Default error handler.
|
|
197
|
+
* @private
|
|
198
|
+
*/
|
|
199
|
+
onerror(err) {
|
|
200
|
+
// When dealing with cross-globals a normal `instanceof` check doesn't work properly.
|
|
201
|
+
// See https://github.com/koajs/koa/issues/1466
|
|
202
|
+
// We can probably remove it once jest fixes https://github.com/facebook/jest/issues/2549.
|
|
203
|
+
const isNativeError = err instanceof Error || Object.prototype.toString.call(err) === '[object Error]';
|
|
204
|
+
if (!isNativeError)
|
|
205
|
+
throw new TypeError(util.format('non-error thrown: %j', err));
|
|
206
|
+
if (err.status === 404 || err.expose)
|
|
207
|
+
return;
|
|
208
|
+
if (this.silent)
|
|
209
|
+
return;
|
|
210
|
+
const msg = err.stack || err.toString();
|
|
211
|
+
// oxlint-disable-next-line no-console
|
|
212
|
+
console.error(`\n${msg.replaceAll(/^/gm, ' ')}\n`);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Response helper.
|
|
216
|
+
*/
|
|
217
|
+
_respond(ctx) {
|
|
218
|
+
// allow bypassing koa
|
|
219
|
+
if (ctx.respond === false)
|
|
220
|
+
return;
|
|
221
|
+
if (!ctx.writable)
|
|
222
|
+
return;
|
|
223
|
+
const res = ctx.res;
|
|
224
|
+
let body = ctx.body;
|
|
225
|
+
const code = ctx.status;
|
|
226
|
+
// ignore body
|
|
227
|
+
if (statuses.empty[code]) {
|
|
228
|
+
// strip headers
|
|
229
|
+
ctx.body = null;
|
|
230
|
+
return res.end();
|
|
231
|
+
}
|
|
232
|
+
if (ctx.method === 'HEAD') {
|
|
233
|
+
if (!res.headersSent && !ctx.response.has('Content-Length')) {
|
|
234
|
+
const { length } = ctx.response;
|
|
235
|
+
if (Number.isInteger(length))
|
|
236
|
+
ctx.length = length;
|
|
237
|
+
}
|
|
238
|
+
return res.end();
|
|
239
|
+
}
|
|
240
|
+
// status body
|
|
241
|
+
if (body === null || body === undefined) {
|
|
242
|
+
if (ctx.response._explicitNullBody) {
|
|
243
|
+
ctx.response.remove('Content-Type');
|
|
244
|
+
ctx.response.remove('Transfer-Encoding');
|
|
245
|
+
return res.end();
|
|
246
|
+
}
|
|
247
|
+
if (ctx.req.httpVersionMajor >= 2) {
|
|
248
|
+
body = String(code);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
body = ctx.message || String(code);
|
|
252
|
+
}
|
|
253
|
+
if (!res.headersSent) {
|
|
254
|
+
ctx.type = 'text';
|
|
255
|
+
ctx.length = Buffer.byteLength(body);
|
|
256
|
+
}
|
|
257
|
+
return res.end(body);
|
|
258
|
+
}
|
|
259
|
+
// responses
|
|
260
|
+
if (Buffer.isBuffer(body))
|
|
261
|
+
return res.end(body);
|
|
262
|
+
if (typeof body === 'string')
|
|
263
|
+
return res.end(body);
|
|
264
|
+
if (body instanceof Stream)
|
|
265
|
+
return body.pipe(res);
|
|
266
|
+
// body: json
|
|
267
|
+
body = JSON.stringify(body);
|
|
268
|
+
if (!res.headersSent) {
|
|
269
|
+
ctx.length = Buffer.byteLength(body);
|
|
270
|
+
}
|
|
271
|
+
res.end(body);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0MsT0FBTyxPQUFPLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLElBQUksRUFBRSxFQUE2QyxNQUFNLFdBQVcsQ0FBQztBQUU1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxPQUFPLE1BQU0sYUFBYSxDQUFDO0FBRWxDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHekMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFVOUM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFdBQVksU0FBUSxPQUFPO0lBRXRDOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBRW5CLE1BQU0sQ0FBVTtJQUNoQixJQUFJLENBQVM7SUFDdkIsZUFBZSxDQUFTO0lBQ3hCLGFBQWEsQ0FBUztJQUN0QixXQUFXLENBQVM7SUFDVixLQUFLLENBQVk7SUFDM0IsVUFBVSxDQUE0QjtJQUN0QyxVQUFVLENBQTZCO0lBQ3ZDLE1BQU0sQ0FBVTtJQUNoQixZ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
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import util from 'node:util';
|
|
2
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
3
|
+
import type { ParsedUrlQuery } from 'node:querystring';
|
|
4
|
+
import Cookies from 'cookies';
|
|
5
|
+
import type { Accepts } from 'accepts';
|
|
6
|
+
import type { Application } from './application.ts';
|
|
7
|
+
import type { Request } from './request.ts';
|
|
8
|
+
import type { Response } from './response.ts';
|
|
9
|
+
import type { CustomError, AnyProto } from './types.ts';
|
|
10
|
+
export declare class Context {
|
|
11
|
+
#private;
|
|
12
|
+
[key: symbol | string]: unknown;
|
|
13
|
+
app: Application;
|
|
14
|
+
req: IncomingMessage;
|
|
15
|
+
res: ServerResponse;
|
|
16
|
+
request: Request & AnyProto;
|
|
17
|
+
response: Response & AnyProto;
|
|
18
|
+
originalUrl: string;
|
|
19
|
+
respond?: boolean;
|
|
20
|
+
constructor(app: Application, req: IncomingMessage, res: ServerResponse);
|
|
21
|
+
/**
|
|
22
|
+
* util.inspect() implementation, which
|
|
23
|
+
* just returns the JSON output.
|
|
24
|
+
*/
|
|
25
|
+
inspect(): {
|
|
26
|
+
request: {
|
|
27
|
+
method: string;
|
|
28
|
+
url: string;
|
|
29
|
+
header: import("http").IncomingHttpHeaders;
|
|
30
|
+
};
|
|
31
|
+
response: {
|
|
32
|
+
status: number;
|
|
33
|
+
message: string;
|
|
34
|
+
header: import("http").OutgoingHttpHeaders;
|
|
35
|
+
};
|
|
36
|
+
app: {
|
|
37
|
+
subdomainOffset: number;
|
|
38
|
+
proxy: boolean;
|
|
39
|
+
env: string;
|
|
40
|
+
};
|
|
41
|
+
originalUrl: string;
|
|
42
|
+
req: string;
|
|
43
|
+
res: string;
|
|
44
|
+
socket: string;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Custom inspection implementation for newer Node.js versions.
|
|
48
|
+
*/
|
|
49
|
+
[util.inspect.custom](): {
|
|
50
|
+
request: {
|
|
51
|
+
method: string;
|
|
52
|
+
url: string;
|
|
53
|
+
header: import("http").IncomingHttpHeaders;
|
|
54
|
+
};
|
|
55
|
+
response: {
|
|
56
|
+
status: number;
|
|
57
|
+
message: string;
|
|
58
|
+
header: import("http").OutgoingHttpHeaders;
|
|
59
|
+
};
|
|
60
|
+
app: {
|
|
61
|
+
subdomainOffset: number;
|
|
62
|
+
proxy: boolean;
|
|
63
|
+
env: string;
|
|
64
|
+
};
|
|
65
|
+
originalUrl: string;
|
|
66
|
+
req: string;
|
|
67
|
+
res: string;
|
|
68
|
+
socket: string;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Return JSON representation.
|
|
72
|
+
*
|
|
73
|
+
* Here we explicitly invoke .toJSON() on each
|
|
74
|
+
* object, as iteration will otherwise fail due
|
|
75
|
+
* to the getters and cause utilities such as
|
|
76
|
+
* clone() to fail.
|
|
77
|
+
*/
|
|
78
|
+
toJSON(): {
|
|
79
|
+
request: {
|
|
80
|
+
method: string;
|
|
81
|
+
url: string;
|
|
82
|
+
header: import("http").IncomingHttpHeaders;
|
|
83
|
+
};
|
|
84
|
+
response: {
|
|
85
|
+
status: number;
|
|
86
|
+
message: string;
|
|
87
|
+
header: import("http").OutgoingHttpHeaders;
|
|
88
|
+
};
|
|
89
|
+
app: {
|
|
90
|
+
subdomainOffset: number;
|
|
91
|
+
proxy: boolean;
|
|
92
|
+
env: string;
|
|
93
|
+
};
|
|
94
|
+
originalUrl: string;
|
|
95
|
+
req: string;
|
|
96
|
+
res: string;
|
|
97
|
+
socket: string;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Similar to .throw(), adds assertion.
|
|
101
|
+
*
|
|
102
|
+
* ```ts
|
|
103
|
+
* this.assert(this.user, 401, 'Please login!');
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
assert(value: unknown, status?: number, errorProps?: Record<string, unknown>): void;
|
|
107
|
+
assert(value: unknown, status?: number, errorMessage?: string, errorProps?: Record<string, unknown>): void;
|
|
108
|
+
/**
|
|
109
|
+
* Throw an error with `status` (default 500) and
|
|
110
|
+
* `msg`. Note that these are user-level
|
|
111
|
+
* errors, and the message may be exposed to the client.
|
|
112
|
+
*
|
|
113
|
+
* this.throw(403)
|
|
114
|
+
* this.throw(400, 'name required')
|
|
115
|
+
* this.throw('something exploded')
|
|
116
|
+
* this.throw(new Error('invalid'))
|
|
117
|
+
* this.throw(400, new Error('invalid'))
|
|
118
|
+
* this.throw(400, new Error('invalid'), { foo: 'bar' })
|
|
119
|
+
* this.throw(new Error('invalid'), { foo: 'bar' })
|
|
120
|
+
*
|
|
121
|
+
* See: https://github.com/jshttp/http-errors
|
|
122
|
+
*
|
|
123
|
+
* Note: `status` should only be passed as the first parameter.
|
|
124
|
+
*
|
|
125
|
+
* @param {String|Number|Error} status error, msg or status
|
|
126
|
+
* @param {String|Number|Error|Object} [error] error, msg, status or errorProps
|
|
127
|
+
* @param {Object} [errorProps] error object properties
|
|
128
|
+
*/
|
|
129
|
+
throw(status: number): void;
|
|
130
|
+
throw(status: number, errorProps: object): void;
|
|
131
|
+
throw(status: number, errorMessage: string): void;
|
|
132
|
+
throw(status: number, errorMessage: string, errorProps: object): void;
|
|
133
|
+
throw(status: number, error: Error): void;
|
|
134
|
+
throw(status: number, error: Error, errorProps: object): void;
|
|
135
|
+
throw(errorMessage: string): void;
|
|
136
|
+
throw(errorMessage: string, errorProps: object): void;
|
|
137
|
+
throw(errorMessage: string, status: number): void;
|
|
138
|
+
throw(errorMessage: string, status: number, errorProps: object): void;
|
|
139
|
+
throw(error: Error): void;
|
|
140
|
+
throw(error: Error, errorProps: object): void;
|
|
141
|
+
throw(error: Error, status: number): void;
|
|
142
|
+
throw(error: Error, status: number, errorProps: object): void;
|
|
143
|
+
/**
|
|
144
|
+
* Default error handling.
|
|
145
|
+
* @private
|
|
146
|
+
*/
|
|
147
|
+
onerror(err: CustomError): void;
|
|
148
|
+
protected _cookies: Cookies | undefined;
|
|
149
|
+
get cookies(): Cookies;
|
|
150
|
+
set cookies(cookies: Cookies);
|
|
151
|
+
get state(): Record<string, any>;
|
|
152
|
+
/**
|
|
153
|
+
* Request delegation.
|
|
154
|
+
*/
|
|
155
|
+
acceptsLanguages(): string[];
|
|
156
|
+
acceptsLanguages(languages: string[]): string | false;
|
|
157
|
+
acceptsLanguages(...languages: string[]): string | false;
|
|
158
|
+
acceptsEncodings(): string[];
|
|
159
|
+
acceptsEncodings(encodings: string[]): string | false;
|
|
160
|
+
acceptsEncodings(...encodings: string[]): string | false;
|
|
161
|
+
acceptsCharsets(): string[];
|
|
162
|
+
acceptsCharsets(charsets: string[]): string | false;
|
|
163
|
+
acceptsCharsets(...charsets: string[]): string | false;
|
|
164
|
+
accepts(args: string[]): string | string[] | false;
|
|
165
|
+
accepts(...args: string[]): string | string[] | false;
|
|
166
|
+
get<T = string | string[]>(field: string): T;
|
|
167
|
+
is(type?: string | string[], ...types: string[]): string | false | null;
|
|
168
|
+
get querystring(): string;
|
|
169
|
+
set querystring(str: string);
|
|
170
|
+
get idempotent(): boolean;
|
|
171
|
+
get socket(): import("./request.ts").RequestSocket;
|
|
172
|
+
get search(): string;
|
|
173
|
+
set search(str: string);
|
|
174
|
+
get method(): string;
|
|
175
|
+
set method(method: string);
|
|
176
|
+
get query(): ParsedUrlQuery;
|
|
177
|
+
set query(obj: ParsedUrlQuery);
|
|
178
|
+
get path(): string;
|
|
179
|
+
set path(path: string);
|
|
180
|
+
get url(): string;
|
|
181
|
+
set url(url: string);
|
|
182
|
+
get accept(): Accepts;
|
|
183
|
+
set accept(accept: Accepts);
|
|
184
|
+
get origin(): string;
|
|
185
|
+
get href(): string;
|
|
186
|
+
get subdomains(): string[];
|
|
187
|
+
get protocol(): string;
|
|
188
|
+
get host(): string;
|
|
189
|
+
get hostname(): string;
|
|
190
|
+
get URL(): URL;
|
|
191
|
+
get header(): import("http").IncomingHttpHeaders;
|
|
192
|
+
get headers(): import("http").IncomingHttpHeaders;
|
|
193
|
+
get secure(): boolean;
|
|
194
|
+
get stale(): boolean;
|
|
195
|
+
get fresh(): boolean;
|
|
196
|
+
get ips(): string[];
|
|
197
|
+
get ip(): string;
|
|
198
|
+
/**
|
|
199
|
+
* Response delegation.
|
|
200
|
+
*/
|
|
201
|
+
attachment(...args: Parameters<Response['attachment']>): void;
|
|
202
|
+
redirect(...args: Parameters<Response['redirect']>): void;
|
|
203
|
+
remove(...args: Parameters<Response['remove']>): void;
|
|
204
|
+
vary(...args: Parameters<Response['vary']>): void;
|
|
205
|
+
has(...args: Parameters<Response['has']>): boolean;
|
|
206
|
+
set(...args: Parameters<Response['set']>): void;
|
|
207
|
+
append(...args: Parameters<Response['append']>): void;
|
|
208
|
+
flushHeaders(...args: Parameters<Response['flushHeaders']>): void;
|
|
209
|
+
get status(): number;
|
|
210
|
+
set status(status: number);
|
|
211
|
+
get message(): string;
|
|
212
|
+
set message(msg: string);
|
|
213
|
+
get body(): any;
|
|
214
|
+
set body(val: any);
|
|
215
|
+
get length(): number | undefined;
|
|
216
|
+
set length(n: number | string | undefined);
|
|
217
|
+
get type(): string;
|
|
218
|
+
set type(type: string | null | undefined);
|
|
219
|
+
get lastModified(): string | Date | undefined;
|
|
220
|
+
set lastModified(val: string | Date | undefined);
|
|
221
|
+
get etag(): string;
|
|
222
|
+
set etag(val: string);
|
|
223
|
+
get headerSent(): boolean;
|
|
224
|
+
get writable(): boolean;
|
|
225
|
+
}
|