@eggjs/koa 3.1.0-beta.3 → 3.1.0-beta.31

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/context.js CHANGED
@@ -1,304 +1,346 @@
1
- import util from "node:util";
2
- import statuses from "statuses";
3
- import createError from "http-errors";
4
- import Cookies from "cookies";
5
-
6
- //#region src/context.ts
7
- var Context = class {
8
- app;
9
- req;
10
- res;
11
- request;
12
- response;
13
- originalUrl;
14
- respond;
15
- #state = {};
16
- constructor(app, req, res) {
17
- this.app = app;
18
- this.req = req;
19
- this.res = res;
20
- this.request = new app.RequestClass(app, this, req, res);
21
- this.response = new app.ResponseClass(app, this, req, res);
22
- this.request.response = this.response;
23
- this.response.request = this.request;
24
- this.originalUrl = req.url ?? "/";
25
- }
26
- /**
27
- * util.inspect() implementation, which
28
- * just returns the JSON output.
29
- */
30
- inspect() {
31
- return this.toJSON();
32
- }
33
- /**
34
- * Custom inspection implementation for newer Node.js versions.
35
- */
36
- [util.inspect.custom]() {
37
- return this.inspect();
38
- }
39
- /**
40
- * Return JSON representation.
41
- *
42
- * Here we explicitly invoke .toJSON() on each
43
- * object, as iteration will otherwise fail due
44
- * to the getters and cause utilities such as
45
- * clone() to fail.
46
- */
47
- toJSON() {
48
- return {
49
- request: this.request.toJSON(),
50
- response: this.response.toJSON(),
51
- app: this.app.toJSON(),
52
- originalUrl: this.originalUrl,
53
- req: "<original node req>",
54
- res: "<original node res>",
55
- socket: "<original node socket>"
56
- };
57
- }
58
- assert(value, status, errorMessageOrProps, errorProps) {
59
- if (value) return;
60
- status = status ?? 500;
61
- if (typeof errorMessageOrProps === "string") throw createError(status, errorMessageOrProps, errorProps ?? {});
62
- throw createError(status, errorMessageOrProps ?? {});
63
- }
64
- throw(arg1, arg2, errorProps) {
65
- const args = [];
66
- if (typeof arg2 === "number") {
67
- args.push(arg2);
68
- args.push(arg1);
69
- } else {
70
- args.push(arg1);
71
- if (arg2) args.push(arg2);
72
- }
73
- if (errorProps) args.push(errorProps);
74
- throw createError(...args);
75
- }
76
- /**
77
- * Default error handling.
78
- * @private
79
- */
80
- onerror(err) {
81
- if (err === null || err === void 0) return;
82
- if (!(err instanceof Error || Object.prototype.toString.call(err) === "[object Error]")) err = new Error(util.format("non-error thrown: %j", err));
83
- let headerSent = false;
84
- if (this.response.headerSent || !this.response.writable) {
85
- headerSent = true;
86
- err.headerSent = true;
87
- }
88
- this.app.emit("error", err, this);
89
- if (headerSent) return;
90
- const res = this.res;
91
- for (const name of res.getHeaderNames()) res.removeHeader(name);
92
- if (err.headers) this.response.set(err.headers);
93
- this.response.type = "text";
94
- let statusCode = err.status || err.statusCode;
95
- if (err.code === "ENOENT") statusCode = 404;
96
- if (typeof statusCode !== "number" || !statuses.message[statusCode]) statusCode = 500;
97
- const statusMessage = statuses.message[statusCode];
98
- const msg = err.expose ? err.message : statusMessage;
99
- err.status = statusCode;
100
- this.response.status = statusCode;
101
- this.response.length = Buffer.byteLength(msg);
102
- res.end(msg);
103
- }
104
- _cookies;
105
- get cookies() {
106
- if (!this._cookies) this._cookies = new Cookies(this.req, this.res, {
107
- keys: this.app.keys,
108
- secure: this.request.secure
109
- });
110
- return this._cookies;
111
- }
112
- set cookies(cookies) {
113
- this._cookies = cookies;
114
- }
115
- get state() {
116
- return this.#state;
117
- }
118
- acceptsLanguages(languages, ...others) {
119
- return this.request.acceptsLanguages(languages, ...others);
120
- }
121
- acceptsEncodings(encodings, ...others) {
122
- return this.request.acceptsEncodings(encodings, ...others);
123
- }
124
- acceptsCharsets(charsets, ...others) {
125
- return this.request.acceptsCharsets(charsets, ...others);
126
- }
127
- accepts(args, ...others) {
128
- return this.request.accepts(args, ...others);
129
- }
130
- get(field) {
131
- return this.request.get(field);
132
- }
133
- is(type, ...types) {
134
- return this.request.is(type, ...types);
135
- }
136
- get querystring() {
137
- return this.request.querystring;
138
- }
139
- set querystring(str) {
140
- this.request.querystring = str;
141
- }
142
- get idempotent() {
143
- return this.request.idempotent;
144
- }
145
- get socket() {
146
- return this.request.socket;
147
- }
148
- get search() {
149
- return this.request.search;
150
- }
151
- set search(str) {
152
- this.request.search = str;
153
- }
154
- get method() {
155
- return this.request.method;
156
- }
157
- set method(method) {
158
- this.request.method = method;
159
- }
160
- get query() {
161
- return this.request.query;
162
- }
163
- set query(obj) {
164
- this.request.query = obj;
165
- }
166
- get path() {
167
- return this.request.path;
168
- }
169
- set path(path) {
170
- this.request.path = path;
171
- }
172
- get url() {
173
- return this.request.url;
174
- }
175
- set url(url) {
176
- this.request.url = url;
177
- }
178
- get accept() {
179
- return this.request.accept;
180
- }
181
- set accept(accept) {
182
- this.request.accept = accept;
183
- }
184
- get origin() {
185
- return this.request.origin;
186
- }
187
- get href() {
188
- return this.request.href;
189
- }
190
- get subdomains() {
191
- return this.request.subdomains;
192
- }
193
- get protocol() {
194
- return this.request.protocol;
195
- }
196
- get host() {
197
- return this.request.host;
198
- }
199
- get hostname() {
200
- return this.request.hostname;
201
- }
202
- get URL() {
203
- return this.request.URL;
204
- }
205
- get header() {
206
- return this.request.header;
207
- }
208
- get headers() {
209
- return this.request.headers;
210
- }
211
- get secure() {
212
- return this.request.secure;
213
- }
214
- get stale() {
215
- return this.request.stale;
216
- }
217
- get fresh() {
218
- return this.request.fresh;
219
- }
220
- get ips() {
221
- return this.request.ips;
222
- }
223
- get ip() {
224
- return this.request.ip;
225
- }
226
- /**
227
- * Response delegation.
228
- */
229
- attachment(...args) {
230
- return this.response.attachment(...args);
231
- }
232
- redirect(...args) {
233
- return this.response.redirect(...args);
234
- }
235
- remove(...args) {
236
- return this.response.remove(...args);
237
- }
238
- vary(...args) {
239
- return this.response.vary(...args);
240
- }
241
- has(...args) {
242
- return this.response.has(...args);
243
- }
244
- set(...args) {
245
- return this.response.set(...args);
246
- }
247
- append(...args) {
248
- return this.response.append(...args);
249
- }
250
- flushHeaders(...args) {
251
- return this.response.flushHeaders(...args);
252
- }
253
- get status() {
254
- return this.response.status;
255
- }
256
- set status(status) {
257
- this.response.status = status;
258
- }
259
- get message() {
260
- return this.response.message;
261
- }
262
- set message(msg) {
263
- this.response.message = msg;
264
- }
265
- get body() {
266
- return this.response.body;
267
- }
268
- set body(val) {
269
- this.response.body = val;
270
- }
271
- get length() {
272
- return this.response.length;
273
- }
274
- set length(n) {
275
- this.response.length = n;
276
- }
277
- get type() {
278
- return this.response.type;
279
- }
280
- set type(type) {
281
- this.response.type = type;
282
- }
283
- get lastModified() {
284
- return this.response.lastModified;
285
- }
286
- set lastModified(val) {
287
- this.response.lastModified = val;
288
- }
289
- get etag() {
290
- return this.response.etag;
291
- }
292
- set etag(val) {
293
- this.response.etag = val;
294
- }
295
- get headerSent() {
296
- return this.response.headerSent;
297
- }
298
- get writable() {
299
- return this.response.writable;
300
- }
301
- };
302
-
303
- //#endregion
304
- export { Context };
1
+ import util from 'node:util';
2
+ import createError from 'http-errors';
3
+ import statuses from 'statuses';
4
+ import Cookies from 'cookies';
5
+ export class Context {
6
+ app;
7
+ req;
8
+ res;
9
+ request;
10
+ response;
11
+ originalUrl;
12
+ respond;
13
+ // oxlint-disable-next-line typescript/no-explicit-any
14
+ #state = {};
15
+ constructor(app, req, res) {
16
+ this.app = app;
17
+ this.req = req;
18
+ this.res = res;
19
+ this.request = new app.RequestClass(app, this, req, res);
20
+ this.response = new app.ResponseClass(app, this, req, res);
21
+ this.request.response = this.response;
22
+ this.response.request = this.request;
23
+ this.originalUrl = req.url ?? '/';
24
+ // Set up custom inspect
25
+ this[util.inspect.custom] = this.inspect.bind(this);
26
+ }
27
+ /**
28
+ * util.inspect() implementation, which
29
+ * just returns the JSON output.
30
+ */
31
+ inspect() {
32
+ return this.toJSON();
33
+ }
34
+ /**
35
+ * Return JSON representation.
36
+ *
37
+ * Here we explicitly invoke .toJSON() on each
38
+ * object, as iteration will otherwise fail due
39
+ * to the getters and cause utilities such as
40
+ * clone() to fail.
41
+ */
42
+ toJSON() {
43
+ return {
44
+ request: this.request.toJSON(),
45
+ response: this.response.toJSON(),
46
+ app: this.app.toJSON(),
47
+ originalUrl: this.originalUrl,
48
+ req: '<original node req>',
49
+ res: '<original node res>',
50
+ socket: '<original node socket>',
51
+ };
52
+ }
53
+ assert(value, status, errorMessageOrProps, errorProps) {
54
+ if (value) {
55
+ return;
56
+ }
57
+ status = status ?? 500;
58
+ if (typeof errorMessageOrProps === 'string') {
59
+ // assert(value, status, errorMessage, errorProps?)
60
+ throw createError(status, errorMessageOrProps, errorProps ?? {});
61
+ }
62
+ // assert(value, status, errorProps?)
63
+ throw createError(status, errorMessageOrProps ?? {});
64
+ }
65
+ throw(arg1, arg2, errorProps) {
66
+ // oxlint-disable-next-line typescript/no-explicit-any
67
+ const args = [];
68
+ if (typeof arg2 === 'number') {
69
+ // throw(error, status)
70
+ args.push(arg2);
71
+ args.push(arg1);
72
+ }
73
+ else {
74
+ // throw(status, error?)
75
+ args.push(arg1);
76
+ if (arg2) {
77
+ args.push(arg2);
78
+ }
79
+ }
80
+ if (errorProps) {
81
+ args.push(errorProps);
82
+ }
83
+ throw createError(...args);
84
+ }
85
+ /**
86
+ * Default error handling.
87
+ * @private
88
+ */
89
+ onerror(err) {
90
+ // don't do anything if there is no error.
91
+ // this allows you to pass `this.onerror`
92
+ // to node-style callbacks.
93
+ if (err === null || err === undefined)
94
+ return;
95
+ // When dealing with cross-globals a normal `instanceof` check doesn't work properly.
96
+ // See https://github.com/koajs/koa/issues/1466
97
+ // We can probably remove it once jest fixes https://github.com/facebook/jest/issues/2549.
98
+ const isNativeError = err instanceof Error || Object.prototype.toString.call(err) === '[object Error]';
99
+ if (!isNativeError) {
100
+ err = new Error(util.format('non-error thrown: %j', err));
101
+ }
102
+ let headerSent = false;
103
+ if (this.response.headerSent || !this.response.writable) {
104
+ headerSent = true;
105
+ err.headerSent = true;
106
+ }
107
+ // delegate
108
+ this.app.emit('error', err, this);
109
+ // nothing we can do here other
110
+ // than delegate to the app-level
111
+ // handler and log.
112
+ if (headerSent) {
113
+ return;
114
+ }
115
+ const res = this.res;
116
+ // first unset all headers
117
+ for (const name of res.getHeaderNames()) {
118
+ res.removeHeader(name);
119
+ }
120
+ // then set those specified
121
+ if (err.headers) {
122
+ this.response.set(err.headers);
123
+ }
124
+ // force text/plain
125
+ this.response.type = 'text';
126
+ let statusCode = err.status || err.statusCode;
127
+ // ENOENT support
128
+ if (err.code === 'ENOENT') {
129
+ statusCode = 404;
130
+ }
131
+ // default to 500
132
+ if (typeof statusCode !== 'number' || !statuses.message[statusCode]) {
133
+ statusCode = 500;
134
+ }
135
+ // respond
136
+ const statusMessage = statuses.message[statusCode];
137
+ const msg = err.expose ? err.message : statusMessage;
138
+ err.status = statusCode;
139
+ this.response.status = statusCode;
140
+ this.response.length = Buffer.byteLength(msg);
141
+ res.end(msg);
142
+ }
143
+ _cookies;
144
+ get cookies() {
145
+ if (!this._cookies) {
146
+ this._cookies = new Cookies(this.req, this.res, {
147
+ keys: this.app.keys,
148
+ secure: this.request.secure,
149
+ });
150
+ }
151
+ return this._cookies;
152
+ }
153
+ set cookies(cookies) {
154
+ this._cookies = cookies;
155
+ }
156
+ // oxlint-disable-next-line typescript/no-explicit-any
157
+ get state() {
158
+ return this.#state;
159
+ }
160
+ acceptsLanguages(languages, ...others) {
161
+ return this.request.acceptsLanguages(languages, ...others);
162
+ }
163
+ acceptsEncodings(encodings, ...others) {
164
+ return this.request.acceptsEncodings(encodings, ...others);
165
+ }
166
+ acceptsCharsets(charsets, ...others) {
167
+ return this.request.acceptsCharsets(charsets, ...others);
168
+ }
169
+ accepts(args, ...others) {
170
+ return this.request.accepts(args, ...others);
171
+ }
172
+ get(field) {
173
+ return this.request.get(field);
174
+ }
175
+ is(type, ...types) {
176
+ return this.request.is(type, ...types);
177
+ }
178
+ get querystring() {
179
+ return this.request.querystring;
180
+ }
181
+ set querystring(str) {
182
+ this.request.querystring = str;
183
+ }
184
+ get idempotent() {
185
+ return this.request.idempotent;
186
+ }
187
+ get socket() {
188
+ return this.request.socket;
189
+ }
190
+ get search() {
191
+ return this.request.search;
192
+ }
193
+ set search(str) {
194
+ this.request.search = str;
195
+ }
196
+ get method() {
197
+ return this.request.method;
198
+ }
199
+ set method(method) {
200
+ this.request.method = method;
201
+ }
202
+ get query() {
203
+ return this.request.query;
204
+ }
205
+ set query(obj) {
206
+ this.request.query = obj;
207
+ }
208
+ get path() {
209
+ return this.request.path;
210
+ }
211
+ set path(path) {
212
+ this.request.path = path;
213
+ }
214
+ get url() {
215
+ return this.request.url;
216
+ }
217
+ set url(url) {
218
+ this.request.url = url;
219
+ }
220
+ get accept() {
221
+ return this.request.accept;
222
+ }
223
+ set accept(accept) {
224
+ this.request.accept = accept;
225
+ }
226
+ get origin() {
227
+ return this.request.origin;
228
+ }
229
+ get href() {
230
+ return this.request.href;
231
+ }
232
+ get subdomains() {
233
+ return this.request.subdomains;
234
+ }
235
+ get protocol() {
236
+ return this.request.protocol;
237
+ }
238
+ get host() {
239
+ return this.request.host;
240
+ }
241
+ get hostname() {
242
+ return this.request.hostname;
243
+ }
244
+ get URL() {
245
+ return this.request.URL;
246
+ }
247
+ get header() {
248
+ return this.request.header;
249
+ }
250
+ get headers() {
251
+ return this.request.headers;
252
+ }
253
+ get secure() {
254
+ return this.request.secure;
255
+ }
256
+ get stale() {
257
+ return this.request.stale;
258
+ }
259
+ get fresh() {
260
+ return this.request.fresh;
261
+ }
262
+ get ips() {
263
+ return this.request.ips;
264
+ }
265
+ get ip() {
266
+ return this.request.ip;
267
+ }
268
+ /**
269
+ * Response delegation.
270
+ */
271
+ attachment(...args) {
272
+ return this.response.attachment(...args);
273
+ }
274
+ redirect(...args) {
275
+ return this.response.redirect(...args);
276
+ }
277
+ remove(...args) {
278
+ return this.response.remove(...args);
279
+ }
280
+ vary(...args) {
281
+ return this.response.vary(...args);
282
+ }
283
+ has(...args) {
284
+ return this.response.has(...args);
285
+ }
286
+ set(...args) {
287
+ return this.response.set(...args);
288
+ }
289
+ append(...args) {
290
+ return this.response.append(...args);
291
+ }
292
+ flushHeaders(...args) {
293
+ return this.response.flushHeaders(...args);
294
+ }
295
+ get status() {
296
+ return this.response.status;
297
+ }
298
+ set status(status) {
299
+ this.response.status = status;
300
+ }
301
+ get message() {
302
+ return this.response.message;
303
+ }
304
+ set message(msg) {
305
+ this.response.message = msg;
306
+ }
307
+ // oxlint-disable-next-line typescript/no-explicit-any
308
+ get body() {
309
+ return this.response.body;
310
+ }
311
+ // oxlint-disable-next-line typescript/no-explicit-any
312
+ set body(val) {
313
+ this.response.body = val;
314
+ }
315
+ get length() {
316
+ return this.response.length;
317
+ }
318
+ set length(n) {
319
+ this.response.length = n;
320
+ }
321
+ get type() {
322
+ return this.response.type;
323
+ }
324
+ set type(type) {
325
+ this.response.type = type;
326
+ }
327
+ get lastModified() {
328
+ return this.response.lastModified;
329
+ }
330
+ set lastModified(val) {
331
+ this.response.lastModified = val;
332
+ }
333
+ get etag() {
334
+ return this.response.etag;
335
+ }
336
+ set etag(val) {
337
+ this.response.etag = val;
338
+ }
339
+ get headerSent() {
340
+ return this.response.headerSent;
341
+ }
342
+ get writable() {
343
+ return this.response.writable;
344
+ }
345
+ }
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUk3QixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQVE5QixNQUFNLE9BQU8sT0FBTztJQUVsQixHQUFHLENBQWM7SUFDakIsR0FBRyxDQUFrQjtJQUNyQixHQUFHLENBQWlCO0lBQ3BCLE9BQU8sQ0FBcUI7SUFDNUIsUUFBUSxDQUFzQjtJQUM5QixXQUFXLENBQVM7SUFDcEIsT0FBTyxDQUFXO0lBQ2xCLHNEQUFzRDtJQUN0RCxNQUFNLEdBQXdCLEVBQUUsQ0FBQztJQUVqQyxZQUFZLEdBQWdCLEVBQUUsR0FBb0IsRUFBRSxHQUFtQjtRQUNyRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdB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RCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLEVBQUU7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMs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