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