@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.
@@ -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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