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