@mojojs/core 0.24.0 → 0.27.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.
- package/README.md +6 -3
- package/lib/app.d.ts +9 -5
- package/lib/app.js +20 -13
- package/lib/app.js.map +1 -1
- package/lib/body.d.ts +10 -13
- package/lib/body.js +19 -26
- package/lib/body.js.map +1 -1
- package/lib/cli/get.js +2 -24
- package/lib/cli/get.js.map +1 -1
- package/lib/context.d.ts +5 -5
- package/lib/context.js +5 -6
- package/lib/context.js.map +1 -1
- package/lib/headers.d.ts +34 -0
- package/lib/headers.js +97 -0
- package/lib/headers.js.map +1 -0
- package/lib/mock/request.js +0 -1
- package/lib/mock/request.js.map +1 -1
- package/lib/plugins/default-conditions.d.ts +5 -0
- package/lib/plugins/{header-conditions.js → default-conditions.js} +3 -3
- package/lib/plugins/default-conditions.js.map +1 -0
- package/lib/plugins/default-helpers.js +122 -0
- package/lib/plugins/default-helpers.js.map +1 -1
- package/lib/renderer.js +1 -1
- package/lib/renderer.js.map +1 -1
- package/lib/server/request.d.ts +44 -4
- package/lib/server/request.js +40 -15
- package/lib/server/request.js.map +1 -1
- package/lib/server/response.d.ts +47 -7
- package/lib/server/response.js +57 -46
- package/lib/server/response.js.map +1 -1
- package/lib/server.d.ts +3 -1
- package/lib/server.js +39 -3
- package/lib/server.js.map +1 -1
- package/lib/static.js +7 -7
- package/lib/static.js.map +1 -1
- package/lib/types.d.ts +7 -5
- package/lib/user-agent/response.d.ts +23 -9
- package/lib/user-agent/response.js +7 -13
- package/lib/user-agent/response.js.map +1 -1
- package/lib/user-agent/test.js +2 -2
- package/lib/user-agent/test.js.map +1 -1
- package/lib/user-agent/transport/http.js +8 -1
- package/lib/user-agent/transport/http.js.map +1 -1
- package/lib/user-agent/transport/ws.js +10 -2
- package/lib/user-agent/transport/ws.js.map +1 -1
- package/lib/user-agent.js +3 -3
- package/lib/user-agent.js.map +1 -1
- package/lib/websocket.d.ts +1 -1
- package/lib/websocket.js +6 -6
- package/lib/websocket.js.map +1 -1
- package/package.json +1 -1
- package/vendor/views/mojo/debug.html.mt +5 -4
- package/lib/plugins/exception-helpers.d.ts +0 -5
- package/lib/plugins/exception-helpers.js +0 -101
- package/lib/plugins/exception-helpers.js.map +0 -1
- package/lib/plugins/header-conditions.d.ts +0 -5
- package/lib/plugins/header-conditions.js.map +0 -1
- package/lib/plugins/view-helpers.d.ts +0 -5
- package/lib/plugins/view-helpers.js +0 -33
- package/lib/plugins/view-helpers.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<a href="https://mojojs.org">
|
|
3
|
-
<
|
|
3
|
+
<picture>
|
|
4
|
+
<source srcset="https://github.com/mojolicious/mojo.js/blob/main/docs/images/logo-dark.png?raw=true" media="(prefers-color-scheme: dark)">
|
|
5
|
+
<img src="https://github.com/mojolicious/mojo.js/blob/main/docs/images/logo.png?raw=true" style="margin: 0 auto;">
|
|
6
|
+
</picture>
|
|
4
7
|
</a>
|
|
5
8
|
</p>
|
|
6
9
|
|
|
@@ -10,8 +13,8 @@
|
|
|
10
13
|
The [Mojolicious](https://mojolicious.org) real-time web framework for [Node.js](https://nodejs.org/). Written in
|
|
11
14
|
TypeScript. Meticulously designed for high performance backend web services using bleeding edge JavaScript features.
|
|
12
15
|
|
|
13
|
-
If you want to stay up to date on the latest developments join us on [
|
|
14
|
-
(
|
|
16
|
+
If you want to stay up to date on the latest developments join us on [Matrix](https://matrix.to/#/#mojo:matrix.org) or
|
|
17
|
+
[IRC](https://web.libera.chat/#mojo).
|
|
15
18
|
|
|
16
19
|
## Features
|
|
17
20
|
|
package/lib/app.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import type { Route } from './router/route.js';
|
|
3
|
-
import type { AnyArguments, AppOptions, UserAgentOptions,
|
|
4
|
-
import type { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
+
import type { AnyArguments, AppOptions, UserAgentOptions, MojoAction, MojoContext, RouteArguments, TestUserAgentOptions } from './types.js';
|
|
5
3
|
import { CLI } from './cli.js';
|
|
6
4
|
import { Hooks } from './hooks.js';
|
|
7
5
|
import { Logger } from './logger.js';
|
|
8
6
|
import { Mime } from './mime.js';
|
|
9
7
|
import { Renderer } from './renderer.js';
|
|
10
8
|
import { Router } from './router.js';
|
|
9
|
+
import { ServerRequest } from './server/request.js';
|
|
10
|
+
import { ServerResponse } from './server/response.js';
|
|
11
11
|
import { Session } from './session.js';
|
|
12
12
|
import { Static } from './static.js';
|
|
13
13
|
import { UserAgent } from './user-agent.js';
|
|
@@ -136,11 +136,15 @@ export declare class App {
|
|
|
136
136
|
/**
|
|
137
137
|
* Create a context for application.
|
|
138
138
|
*/
|
|
139
|
-
newContext(req:
|
|
139
|
+
newContext(req: ServerRequest, res: ServerResponse): MojoContext;
|
|
140
140
|
/**
|
|
141
141
|
* Create a mock context for application. Very useful for testing helpers.
|
|
142
142
|
*/
|
|
143
|
-
newMockContext(options?:
|
|
143
|
+
newMockContext(options?: {
|
|
144
|
+
headers?: string[];
|
|
145
|
+
method?: string;
|
|
146
|
+
url?: string;
|
|
147
|
+
}): MojoContext;
|
|
144
148
|
/**
|
|
145
149
|
* Create a new mock user agent for application.
|
|
146
150
|
*/
|
package/lib/app.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
+
import { Readable } from 'stream';
|
|
1
2
|
import { CLI } from './cli.js';
|
|
2
3
|
import { Context } from './context.js';
|
|
3
4
|
import { Hooks } from './hooks.js';
|
|
4
5
|
import { Logger } from './logger.js';
|
|
5
6
|
import { Mime } from './mime.js';
|
|
6
|
-
import
|
|
7
|
-
import { MockResponse } from './mock/response.js';
|
|
7
|
+
import defaultConditionsPlugin from './plugins/default-conditions.js';
|
|
8
8
|
import defaultHelpersPlugin from './plugins/default-helpers.js';
|
|
9
|
-
import exceptionHelpersPlugin from './plugins/exception-helpers.js';
|
|
10
|
-
import headerConditionsPlugin from './plugins/header-conditions.js';
|
|
11
9
|
import mtEnginePlugin from './plugins/mt-engine.js';
|
|
12
|
-
import viewHelpersPlugin from './plugins/view-helpers.js';
|
|
13
10
|
import { Renderer } from './renderer.js';
|
|
14
11
|
import { Router } from './router.js';
|
|
12
|
+
import { ServerRequest } from './server/request.js';
|
|
13
|
+
import { ServerResponse } from './server/response.js';
|
|
15
14
|
import { Session } from './session.js';
|
|
16
15
|
import { Static } from './static.js';
|
|
17
16
|
import { UserAgent } from './user-agent.js';
|
|
@@ -84,10 +83,8 @@ export class App {
|
|
|
84
83
|
const isDev = this._mode === 'development';
|
|
85
84
|
this.log = new Logger({ historySize: isDev ? 10 : 0, level: isDev ? 'trace' : 'info' });
|
|
86
85
|
this.plugin(defaultHelpersPlugin);
|
|
87
|
-
this.plugin(
|
|
88
|
-
this.plugin(headerConditionsPlugin);
|
|
86
|
+
this.plugin(defaultConditionsPlugin);
|
|
89
87
|
this.plugin(mtEnginePlugin);
|
|
90
|
-
this.plugin(viewHelpersPlugin);
|
|
91
88
|
}
|
|
92
89
|
/**
|
|
93
90
|
* Add an application hook.
|
|
@@ -169,17 +166,27 @@ export class App {
|
|
|
169
166
|
/**
|
|
170
167
|
* Create a context for application.
|
|
171
168
|
*/
|
|
172
|
-
newContext(req, res
|
|
173
|
-
const ctx = new this._contextClass(this, req, res
|
|
169
|
+
newContext(req, res) {
|
|
170
|
+
const ctx = new this._contextClass(this, req, res);
|
|
174
171
|
Object.assign(ctx.stash, this.defaults);
|
|
175
172
|
return ctx;
|
|
176
173
|
}
|
|
177
174
|
/**
|
|
178
175
|
* Create a mock context for application. Very useful for testing helpers.
|
|
179
176
|
*/
|
|
180
|
-
newMockContext(options) {
|
|
181
|
-
const
|
|
182
|
-
|
|
177
|
+
newMockContext(options = {}) {
|
|
178
|
+
const ctx = new this._contextClass(this, new ServerRequest({
|
|
179
|
+
body: new Readable(),
|
|
180
|
+
headers: options.headers ?? [],
|
|
181
|
+
isSecure: false,
|
|
182
|
+
isWebSocket: false,
|
|
183
|
+
method: options.method ?? 'GET',
|
|
184
|
+
remoteAddress: '127.0.0.1',
|
|
185
|
+
reverseProxy: false,
|
|
186
|
+
url: options.url ?? '/'
|
|
187
|
+
}), new ServerResponse(() => {
|
|
188
|
+
// Do nothing
|
|
189
|
+
}));
|
|
183
190
|
Object.assign(ctx.stash, this.defaults);
|
|
184
191
|
return ctx;
|
|
185
192
|
}
|
package/lib/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/lib/body.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { JSONValue } from './types.js';
|
|
3
|
-
import type { IncomingHttpHeaders, IncomingMessage } from 'http';
|
|
4
3
|
import type { Readable, Writable } from 'stream';
|
|
5
4
|
import { Params } from './body/params.js';
|
|
5
|
+
import { Headers } from './headers.js';
|
|
6
6
|
import DOM from '@mojojs/dom';
|
|
7
7
|
interface UploadOptions {
|
|
8
8
|
limits?: {
|
|
@@ -31,11 +31,12 @@ export declare class Body {
|
|
|
31
31
|
*/
|
|
32
32
|
autoDecompress: boolean;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* HTTP headers.
|
|
35
35
|
*/
|
|
36
|
-
|
|
36
|
+
headers: Headers;
|
|
37
37
|
_form: Params | undefined;
|
|
38
|
-
|
|
38
|
+
_stream: Readable;
|
|
39
|
+
constructor(headers: string[], stream: Readable);
|
|
39
40
|
[Symbol.asyncIterator](): AsyncIterable<Buffer>;
|
|
40
41
|
/**
|
|
41
42
|
* Get message body as `Buffer` object.
|
|
@@ -56,19 +57,11 @@ export declare class Body {
|
|
|
56
57
|
/**
|
|
57
58
|
* Get HTTP header from message.
|
|
58
59
|
*/
|
|
59
|
-
get(name: string): string |
|
|
60
|
-
/**
|
|
61
|
-
* Get HTTP headers from message.
|
|
62
|
-
*/
|
|
63
|
-
get headers(): IncomingHttpHeaders;
|
|
60
|
+
get(name: string): string | null;
|
|
64
61
|
/**
|
|
65
62
|
* Get HTML message body as `@mojojs/dom` object.
|
|
66
63
|
*/
|
|
67
64
|
html(): Promise<DOM>;
|
|
68
|
-
/**
|
|
69
|
-
* Check if underlying socket was encrypted with TLS.
|
|
70
|
-
*/
|
|
71
|
-
get isSecure(): boolean;
|
|
72
65
|
/**
|
|
73
66
|
* Get JSON message body as parsed data structure.
|
|
74
67
|
*/
|
|
@@ -77,6 +70,10 @@ export declare class Body {
|
|
|
77
70
|
* Pipe message body to writable stream.
|
|
78
71
|
*/
|
|
79
72
|
pipe(writer: Writable): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Set HTTP header for message.
|
|
75
|
+
*/
|
|
76
|
+
set(name: string, value: string): this;
|
|
80
77
|
/**
|
|
81
78
|
* Get message body as string.
|
|
82
79
|
*/
|
package/lib/body.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { on } from 'events';
|
|
2
2
|
import zlib from 'zlib';
|
|
3
3
|
import { Params } from './body/params.js';
|
|
4
|
+
import { Headers } from './headers.js';
|
|
4
5
|
import DOM from '@mojojs/dom';
|
|
5
6
|
import busboy from 'busboy';
|
|
6
7
|
import yaml from 'js-yaml';
|
|
@@ -8,13 +9,14 @@ import yaml from 'js-yaml';
|
|
|
8
9
|
* HTTP message body base class.
|
|
9
10
|
*/
|
|
10
11
|
export class Body {
|
|
11
|
-
constructor(stream) {
|
|
12
|
+
constructor(headers, stream) {
|
|
12
13
|
/**
|
|
13
14
|
* Automatically decompress message body if necessary.
|
|
14
15
|
*/
|
|
15
16
|
this.autoDecompress = true;
|
|
16
17
|
this._form = undefined;
|
|
17
|
-
this.
|
|
18
|
+
this._stream = stream;
|
|
19
|
+
this.headers = new Headers(headers);
|
|
18
20
|
}
|
|
19
21
|
async *[Symbol.asyncIterator]() {
|
|
20
22
|
yield* this.createReadStream();
|
|
@@ -30,9 +32,9 @@ export class Body {
|
|
|
30
32
|
*/
|
|
31
33
|
createReadStream() {
|
|
32
34
|
if (this.autoDecompress !== true || this.get('content-encoding') !== 'gzip')
|
|
33
|
-
return this.
|
|
35
|
+
return this._stream;
|
|
34
36
|
const gunzip = zlib.createGunzip();
|
|
35
|
-
this.
|
|
37
|
+
this._stream.pipe(gunzip);
|
|
36
38
|
return gunzip;
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
@@ -68,14 +70,7 @@ export class Body {
|
|
|
68
70
|
* Get HTTP header from message.
|
|
69
71
|
*/
|
|
70
72
|
get(name) {
|
|
71
|
-
|
|
72
|
-
return Array.isArray(header) ? header.join(',') : header;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Get HTTP headers from message.
|
|
76
|
-
*/
|
|
77
|
-
get headers() {
|
|
78
|
-
return this.raw.headers;
|
|
73
|
+
return this.headers.get(name);
|
|
79
74
|
}
|
|
80
75
|
/**
|
|
81
76
|
* Get HTML message body as `@mojojs/dom` object.
|
|
@@ -83,13 +78,6 @@ export class Body {
|
|
|
83
78
|
async html() {
|
|
84
79
|
return new DOM(await this.text());
|
|
85
80
|
}
|
|
86
|
-
/**
|
|
87
|
-
* Check if underlying socket was encrypted with TLS.
|
|
88
|
-
*/
|
|
89
|
-
get isSecure() {
|
|
90
|
-
const socket = this.raw.socket;
|
|
91
|
-
return socket.encrypted ?? false;
|
|
92
|
-
}
|
|
93
81
|
/**
|
|
94
82
|
* Get JSON message body as parsed data structure.
|
|
95
83
|
*/
|
|
@@ -104,6 +92,13 @@ export class Body {
|
|
|
104
92
|
this.createReadStream().on('error', reject).pipe(writer).on('unpipe', resolve);
|
|
105
93
|
});
|
|
106
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Set HTTP header for message.
|
|
97
|
+
*/
|
|
98
|
+
set(name, value) {
|
|
99
|
+
this.headers.set(name, value);
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
107
102
|
/**
|
|
108
103
|
* Get message body as string.
|
|
109
104
|
*/
|
|
@@ -133,20 +128,18 @@ export class Body {
|
|
|
133
128
|
}
|
|
134
129
|
_formIterator(options) {
|
|
135
130
|
const ac = new AbortController();
|
|
136
|
-
const
|
|
137
|
-
const headers = raw.headers;
|
|
138
|
-
const type = headers['content-type'] ?? '';
|
|
131
|
+
const type = this.get('Content-Type') ?? '';
|
|
139
132
|
const params = this._params;
|
|
140
|
-
const bb = busboy({ headers: { 'content-type': type, ...headers }, ...options });
|
|
133
|
+
const bb = busboy({ headers: { 'content-type': type, ...this.headers.toObject() }, ...options });
|
|
141
134
|
bb.on('field', (fieldname, val) => params.append(fieldname, val));
|
|
142
135
|
bb.on('end', () => ac.abort()).on('close', () => ac.abort());
|
|
143
136
|
const files = on(bb, 'file', { signal: ac.signal });
|
|
144
|
-
|
|
137
|
+
this._stream.pipe(bb);
|
|
145
138
|
return files;
|
|
146
139
|
}
|
|
147
140
|
_isForm() {
|
|
148
|
-
const type = this.
|
|
149
|
-
if (type ===
|
|
141
|
+
const type = this.get('Content-Type');
|
|
142
|
+
if (type === null)
|
|
150
143
|
return false;
|
|
151
144
|
return type.startsWith('application/x-www-form-urlencoded') || type.startsWith('multipart/form-data');
|
|
152
145
|
}
|
package/lib/body.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body.js","sourceRoot":"","sources":["../src/body.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"body.js","sourceRoot":"","sources":["../src/body.ts"],"names":[],"mappings":"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"}
|
package/lib/cli/get.js
CHANGED
|
@@ -17,17 +17,11 @@ export default async function getCommand(app, args) {
|
|
|
17
17
|
const res = await ua.request(request);
|
|
18
18
|
if (parsed.verbose === true) {
|
|
19
19
|
const stderr = process.stderr;
|
|
20
|
-
const
|
|
21
|
-
const req = raw.req;
|
|
22
|
-
const method = chalk.blue(req.method);
|
|
23
|
-
const reqVersion = chalk.blue('HTTP') + '/' + chalk.blue('1.1');
|
|
24
|
-
stderr.write(`${method} ${req.path} ${reqVersion}\n`);
|
|
25
|
-
writeHeaders(getHeaders(req));
|
|
26
|
-
const resVersion = chalk.blue('HTTP') + '/' + chalk.blue(raw.httpVersion);
|
|
20
|
+
const resVersion = chalk.blue('HTTP') + '/' + chalk.blue(res.httpVersion);
|
|
27
21
|
const status = res.status;
|
|
28
22
|
const statusMessage = chalk.blue(res.statusMessage);
|
|
29
23
|
stderr.write(`${resVersion} ${status} ${statusMessage}\n`);
|
|
30
|
-
writeHeaders(
|
|
24
|
+
writeHeaders(res.headers.toArray());
|
|
31
25
|
}
|
|
32
26
|
if (argv.remain[1] !== undefined) {
|
|
33
27
|
const html = await res.html();
|
|
@@ -60,22 +54,6 @@ Options:
|
|
|
60
54
|
-X, --method <method> HTTP method to use, defaults to "GET"
|
|
61
55
|
-v, --verbose Print response headers to STDERR
|
|
62
56
|
`;
|
|
63
|
-
function getHeaders(req) {
|
|
64
|
-
const headers = [];
|
|
65
|
-
for (const name of req.getRawHeaderNames()) {
|
|
66
|
-
const header = req.getHeader(name);
|
|
67
|
-
if (typeof header === 'string') {
|
|
68
|
-
headers.push(name, header);
|
|
69
|
-
}
|
|
70
|
-
else if (typeof header === 'number') {
|
|
71
|
-
headers.push(name, header.toString());
|
|
72
|
-
}
|
|
73
|
-
else if (Array.isArray(header)) {
|
|
74
|
-
header.forEach(value => headers.push(name, value));
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return headers;
|
|
78
|
-
}
|
|
79
57
|
function parseHeaders(list = []) {
|
|
80
58
|
const headers = {};
|
|
81
59
|
for (const pair of list) {
|
package/lib/cli/get.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/cli/get.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/cli/get.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,IAAc;IACnE,MAAM,MAAM,GAAG,IAAI,CACjB,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAC,EAC/G,EAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAC,EAC7F,IAAI,EACJ,CAAC,CACF,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;QAC9B,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG;KAC3B,CAAC;IAEF,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,EAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;IACzF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,MAAM,IAAI,aAAa,IAAI,CAAC,CAAC;QAC3D,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;KACrC;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;QAChC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI;aACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACpB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;aACxB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAClB,CAAC;KACH;SAAM;QACL,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KAChC;IAED,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC;AAED,UAAU,CAAC,WAAW,GAAG,sBAAsB,CAAC;AAChD,UAAU,CAAC,KAAK,GAAG;;;;;;;;;;;;;;;;;CAiBlB,CAAC;AAEF,SAAS,YAAY,CAAC,OAAiB,EAAE;IACvC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;KAChC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,OAAiB;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;KAChE;IACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
|
package/lib/context.d.ts
CHANGED
|
@@ -2,17 +2,16 @@
|
|
|
2
2
|
import type { App } from './app.js';
|
|
3
3
|
import type { ChildLogger } from './logger.js';
|
|
4
4
|
import type { Plan } from './router/plan.js';
|
|
5
|
+
import type { ServerRequest } from './server/request.js';
|
|
6
|
+
import type { ServerResponse } from './server/response.js';
|
|
5
7
|
import type { SessionData } from './types.js';
|
|
6
|
-
import type { MojoAction, RenderOptions,
|
|
8
|
+
import type { MojoAction, RenderOptions, ValidatorFunction } from './types.js';
|
|
7
9
|
import type { UserAgent } from './user-agent.js';
|
|
8
10
|
import type { WebSocket } from './websocket.js';
|
|
9
11
|
import type Path from '@mojojs/path';
|
|
10
12
|
import type { BusboyConfig } from 'busboy';
|
|
11
|
-
import type http from 'http';
|
|
12
13
|
import EventEmitter from 'events';
|
|
13
14
|
import { Params } from './body/params.js';
|
|
14
|
-
import { ServerRequest } from './server/request.js';
|
|
15
|
-
import { ServerResponse } from './server/response.js';
|
|
16
15
|
import { SafeString } from './util.js';
|
|
17
16
|
declare type URLOptions = {
|
|
18
17
|
query?: Record<string, string>;
|
|
@@ -20,6 +19,7 @@ declare type URLOptions = {
|
|
|
20
19
|
declare type WebSocketHandler = (ws: WebSocket) => void | Promise<void>;
|
|
21
20
|
interface ContextEvents {
|
|
22
21
|
connection: (ws: WebSocket) => void;
|
|
22
|
+
finish: () => void;
|
|
23
23
|
}
|
|
24
24
|
declare interface Context {
|
|
25
25
|
on: <T extends keyof ContextEvents>(event: T, listener: ContextEvents[T]) => this;
|
|
@@ -69,7 +69,7 @@ declare class Context extends EventEmitter {
|
|
|
69
69
|
_params: Params | undefined;
|
|
70
70
|
_session: Record<string, any> | undefined;
|
|
71
71
|
_ws: WeakRef<WebSocket> | null;
|
|
72
|
-
constructor(app: App, req:
|
|
72
|
+
constructor(app: App, req: ServerRequest, res: ServerResponse);
|
|
73
73
|
[EventEmitter.captureRejectionSymbol](error: Error): void;
|
|
74
74
|
/**
|
|
75
75
|
* Select best possible representation for resource.
|
package/lib/context.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import EventEmitter from 'events';
|
|
2
2
|
import { Params } from './body/params.js';
|
|
3
|
-
import { ServerRequest } from './server/request.js';
|
|
4
|
-
import { ServerResponse } from './server/response.js';
|
|
5
3
|
import { SafeString } from './util.js';
|
|
6
4
|
const ABSOLUTE = /^[a-zA-Z][a-zA-Z0-9]*:\/\//;
|
|
7
5
|
/**
|
|
8
6
|
* Context class.
|
|
9
7
|
*/
|
|
10
8
|
class Context extends EventEmitter {
|
|
11
|
-
constructor(app, req, res
|
|
9
|
+
constructor(app, req, res) {
|
|
12
10
|
super({ captureRejections: true });
|
|
13
11
|
/**
|
|
14
12
|
* Partial content.
|
|
@@ -36,8 +34,9 @@ class Context extends EventEmitter {
|
|
|
36
34
|
this._ws = null;
|
|
37
35
|
this.app = app;
|
|
38
36
|
this.exceptionFormat = app.exceptionFormat;
|
|
39
|
-
this.req =
|
|
40
|
-
this.res =
|
|
37
|
+
this.req = req;
|
|
38
|
+
this.res = res;
|
|
39
|
+
this.res.bindContext(this);
|
|
41
40
|
this.log = app.log.child({ requestId: this.req.requestId });
|
|
42
41
|
}
|
|
43
42
|
[EventEmitter.captureRejectionSymbol](error) {
|
|
@@ -47,7 +46,7 @@ class Context extends EventEmitter {
|
|
|
47
46
|
* Select best possible representation for resource.
|
|
48
47
|
*/
|
|
49
48
|
accepts(allowed) {
|
|
50
|
-
const formats = this.app.mime.detect(this.req.
|
|
49
|
+
const formats = this.app.mime.detect(this.req.get('Accept') ?? '');
|
|
51
50
|
const stash = this.stash;
|
|
52
51
|
if (typeof stash.ext === 'string')
|
|
53
52
|
formats.unshift(stash.ext);
|
package/lib/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/lib/headers.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP header class.
|
|
3
|
+
*/
|
|
4
|
+
export declare class Headers {
|
|
5
|
+
_headers?: Record<string, string[]>;
|
|
6
|
+
_init: string[];
|
|
7
|
+
_normalCase: Record<string, string>;
|
|
8
|
+
constructor(init?: string[]);
|
|
9
|
+
/**
|
|
10
|
+
* Append header value.
|
|
11
|
+
*/
|
|
12
|
+
append(name: string, value: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Get header value.
|
|
15
|
+
*/
|
|
16
|
+
get(name: string): string | null;
|
|
17
|
+
/**
|
|
18
|
+
* Get all headers values individually.
|
|
19
|
+
*/
|
|
20
|
+
getAll(name: string): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Set header value.
|
|
23
|
+
*/
|
|
24
|
+
set(name: string, value: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Convert headers into a plain array of name/value pairs.
|
|
27
|
+
*/
|
|
28
|
+
toArray(): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Convert headers into a plain object.
|
|
31
|
+
*/
|
|
32
|
+
toObject(): Record<string, string>;
|
|
33
|
+
_getHeaders(): Record<string, string[]>;
|
|
34
|
+
}
|
package/lib/headers.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP header class.
|
|
3
|
+
*/
|
|
4
|
+
export class Headers {
|
|
5
|
+
constructor(init = []) {
|
|
6
|
+
this._normalCase = {};
|
|
7
|
+
this._init = init;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Append header value.
|
|
11
|
+
*/
|
|
12
|
+
append(name, value) {
|
|
13
|
+
const lowerCase = name.toLowerCase();
|
|
14
|
+
const headers = this._getHeaders();
|
|
15
|
+
if (headers[lowerCase] === undefined)
|
|
16
|
+
return this.set(name, value);
|
|
17
|
+
if (lowerCase === 'set-cookie') {
|
|
18
|
+
headers[lowerCase].push(value);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
headers[lowerCase] = [[...headers[lowerCase], value].join(', ')];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get header value.
|
|
26
|
+
*/
|
|
27
|
+
get(name) {
|
|
28
|
+
const values = this._getHeaders()[name.toLowerCase()];
|
|
29
|
+
if (values === undefined)
|
|
30
|
+
return null;
|
|
31
|
+
return values.join(', ');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get all headers values individually.
|
|
35
|
+
*/
|
|
36
|
+
getAll(name) {
|
|
37
|
+
const values = this._getHeaders()[name.toLowerCase()] ?? [];
|
|
38
|
+
return [...values];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Set header value.
|
|
42
|
+
*/
|
|
43
|
+
set(name, value) {
|
|
44
|
+
const lowerCase = name.toLowerCase();
|
|
45
|
+
if (this._normalCase[lowerCase] === undefined)
|
|
46
|
+
this._normalCase[lowerCase] = name;
|
|
47
|
+
this._getHeaders()[lowerCase] = [value];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Convert headers into a plain array of name/value pairs.
|
|
51
|
+
*/
|
|
52
|
+
toArray() {
|
|
53
|
+
const array = [];
|
|
54
|
+
const headers = this._getHeaders();
|
|
55
|
+
const normalCase = this._normalCase;
|
|
56
|
+
for (const [name, values] of Object.entries(headers)) {
|
|
57
|
+
const normal = normalCase[name];
|
|
58
|
+
for (const value of values) {
|
|
59
|
+
array.push(normal, value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return array;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Convert headers into a plain object.
|
|
66
|
+
*/
|
|
67
|
+
toObject() {
|
|
68
|
+
const object = {};
|
|
69
|
+
const headers = this._getHeaders();
|
|
70
|
+
const normalCase = this._normalCase;
|
|
71
|
+
for (const [name, values] of Object.entries(headers)) {
|
|
72
|
+
object[normalCase[name]] = values.join(', ');
|
|
73
|
+
}
|
|
74
|
+
return object;
|
|
75
|
+
}
|
|
76
|
+
_getHeaders() {
|
|
77
|
+
if (this._headers === undefined) {
|
|
78
|
+
const headers = (this._headers = {});
|
|
79
|
+
const normalCase = this._normalCase;
|
|
80
|
+
const init = this._init;
|
|
81
|
+
for (let i = 0; i < init.length; i += 2) {
|
|
82
|
+
const name = init[i];
|
|
83
|
+
const value = init[i + 1];
|
|
84
|
+
const lowerCase = name.toLowerCase();
|
|
85
|
+
normalCase[lowerCase] = name;
|
|
86
|
+
if (headers[lowerCase] === undefined) {
|
|
87
|
+
headers[lowerCase] = [value];
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
headers[lowerCase].push(value);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return this._headers;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=headers.js.map
|