@mojojs/core 0.26.0 → 0.29.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.
Files changed (74) hide show
  1. package/lib/app.d.ts +11 -7
  2. package/lib/app.js +22 -11
  3. package/lib/app.js.map +1 -1
  4. package/lib/body.d.ts +9 -5
  5. package/lib/body.js +14 -15
  6. package/lib/body.js.map +1 -1
  7. package/lib/cli/get.js +3 -25
  8. package/lib/cli/get.js.map +1 -1
  9. package/lib/cli/server.js +32 -9
  10. package/lib/cli/server.js.map +1 -1
  11. package/lib/context.d.ts +5 -5
  12. package/lib/context.js +4 -5
  13. package/lib/context.js.map +1 -1
  14. package/lib/headers.d.ts +34 -0
  15. package/lib/headers.js +97 -0
  16. package/lib/headers.js.map +1 -0
  17. package/lib/renderer.js +1 -1
  18. package/lib/renderer.js.map +1 -1
  19. package/lib/router/route.d.ts +4 -0
  20. package/lib/router/route.js +12 -1
  21. package/lib/router/route.js.map +1 -1
  22. package/lib/router.d.ts +5 -0
  23. package/lib/router.js +25 -17
  24. package/lib/router.js.map +1 -1
  25. package/lib/server/request.d.ts +24 -15
  26. package/lib/server/request.js +20 -29
  27. package/lib/server/request.js.map +1 -1
  28. package/lib/server/response.d.ts +23 -9
  29. package/lib/server/response.js +35 -48
  30. package/lib/server/response.js.map +1 -1
  31. package/lib/server.d.ts +22 -8
  32. package/lib/server.js +66 -6
  33. package/lib/server.js.map +1 -1
  34. package/lib/static.js +7 -7
  35. package/lib/static.js.map +1 -1
  36. package/lib/types.d.ts +18 -5
  37. package/lib/user-agent/mock.d.ts +3 -3
  38. package/lib/user-agent/mock.js +4 -4
  39. package/lib/user-agent/mock.js.map +1 -1
  40. package/lib/user-agent/response.d.ts +22 -11
  41. package/lib/user-agent/response.js +9 -21
  42. package/lib/user-agent/response.js.map +1 -1
  43. package/lib/user-agent/test.d.ts +2 -2
  44. package/lib/user-agent/test.js +5 -5
  45. package/lib/user-agent/test.js.map +1 -1
  46. package/lib/user-agent/transport/http.js +21 -1
  47. package/lib/user-agent/transport/http.js.map +1 -1
  48. package/lib/user-agent/transport/ws.js +11 -2
  49. package/lib/user-agent/transport/ws.js.map +1 -1
  50. package/lib/user-agent.js +5 -5
  51. package/lib/user-agent.js.map +1 -1
  52. package/lib/util.d.ts +4 -0
  53. package/lib/util.js +10 -0
  54. package/lib/util.js.map +1 -1
  55. package/lib/websocket.d.ts +1 -1
  56. package/lib/websocket.js +6 -6
  57. package/lib/websocket.js.map +1 -1
  58. package/package.json +1 -1
  59. package/vendor/views/mojo/debug.html.mt +3 -3
  60. package/lib/mock/request.d.ts +0 -9
  61. package/lib/mock/request.js +0 -13
  62. package/lib/mock/request.js.map +0 -1
  63. package/lib/mock/response.d.ts +0 -7
  64. package/lib/mock/response.js +0 -7
  65. package/lib/mock/response.js.map +0 -1
  66. package/lib/plugins/exception-helpers.d.ts +0 -5
  67. package/lib/plugins/exception-helpers.js +0 -101
  68. package/lib/plugins/exception-helpers.js.map +0 -1
  69. package/lib/plugins/header-conditions.d.ts +0 -5
  70. package/lib/plugins/header-conditions.js +0 -22
  71. package/lib/plugins/header-conditions.js.map +0 -1
  72. package/lib/plugins/view-helpers.d.ts +0 -5
  73. package/lib/plugins/view-helpers.js +0 -28
  74. package/lib/plugins/view-helpers.js.map +0 -1
@@ -1,52 +1,59 @@
1
- import { Stream } from 'stream';
1
+ import EventEmitter from 'events';
2
+ import { Headers } from '../headers.js';
2
3
  import { stringifyCookie } from './cookie.js';
3
4
  /**
4
5
  * Server response class.
5
6
  */
6
- export class ServerResponse {
7
- constructor(res, ctx) {
7
+ export class ServerResponse extends EventEmitter {
8
+ constructor(sendResponse) {
9
+ super();
10
+ /**
11
+ * Response headers.
12
+ */
13
+ this.headers = new Headers();
8
14
  /**
9
15
  * Response has already been sent.
10
16
  */
11
17
  this.isSent = false;
12
18
  /**
13
- * Response status.
19
+ * Response status code.
14
20
  */
15
21
  this.statusCode = 200;
16
- this._headers = {};
17
- this._ctx = new WeakRef(ctx);
18
- this._raw = res;
22
+ /**
23
+ * Response status message.
24
+ */
25
+ this.statusMessage = null;
26
+ this._ctx = undefined;
27
+ this._sendResponse = sendResponse;
19
28
  }
20
29
  /**
21
30
  * Append header value.
22
31
  */
23
32
  append(name, value) {
24
- const headers = this._headers;
25
- const old = headers[name];
26
- if (old === undefined) {
27
- headers[name] = value;
28
- }
29
- else if (Array.isArray(old)) {
30
- old.push(value);
31
- }
32
- else {
33
- headers[name] = [old, value];
34
- }
33
+ this.headers.append(name, value);
35
34
  return this;
36
35
  }
36
+ /**
37
+ * Bind context to response.
38
+ */
39
+ bindContext(ctx) {
40
+ this._ctx = new WeakRef(ctx);
41
+ }
37
42
  /**
38
43
  * Set response content length.
39
44
  */
40
45
  length(len) {
41
- this._headers['Content-Length'] = len.toString();
42
- return this;
46
+ return this.set('Content-Length', len.toString());
43
47
  }
44
48
  /**
45
49
  * Send response.
46
50
  */
47
51
  async send(body) {
48
52
  this.isSent = true;
49
- const ctx = this._ctx.deref();
53
+ const ctxRef = this._ctx;
54
+ if (ctxRef === undefined)
55
+ return;
56
+ const ctx = ctxRef.deref();
50
57
  if (ctx === undefined)
51
58
  return;
52
59
  const app = ctx.app;
@@ -55,55 +62,35 @@ export class ServerResponse {
55
62
  body = newBody;
56
63
  if (ctx.isSessionActive === true)
57
64
  await app.session.store(ctx, await ctx.session());
58
- const raw = this._raw;
59
- if (typeof body === 'string' || Buffer.isBuffer(body)) {
60
- this.length(Buffer.byteLength(body));
61
- raw.writeHead(this.statusCode, this._headers);
62
- raw.end(body);
63
- }
64
- else if (body instanceof Stream) {
65
- raw.writeHead(this.statusCode, this._headers);
66
- body.pipe(this._raw);
67
- }
68
- else {
69
- raw.writeHead(this.statusCode, this._headers);
70
- raw.end();
71
- }
65
+ this._sendResponse(this, body);
72
66
  }
73
67
  /**
74
68
  * Set HTTP header for response.
75
69
  */
76
70
  set(name, value) {
77
- if (this._headers[name] !== undefined && name === 'Set-Cookie') {
78
- let header = this._headers[name];
79
- if (typeof header === 'string')
80
- header = this._headers[name] = [header];
81
- header.push(value);
82
- }
83
- else {
84
- this._headers[name] = value;
85
- }
71
+ this.headers.set(name, value);
86
72
  return this;
87
73
  }
88
74
  /**
89
75
  * Set cookie value.
90
76
  */
91
77
  setCookie(name, value, options) {
92
- return this.set('Set-Cookie', stringifyCookie(name, value, options));
78
+ return this.append('Set-Cookie', stringifyCookie(name, value, options));
93
79
  }
94
80
  /**
95
81
  * Set response status.
96
82
  */
97
- status(code) {
83
+ status(code, message) {
98
84
  this.statusCode = code;
85
+ if (message !== undefined)
86
+ this.statusMessage = message;
99
87
  return this;
100
88
  }
101
89
  /**
102
90
  * Set response content type.
103
91
  */
104
92
  type(type) {
105
- this._headers['Content-Type'] = type;
106
- return this;
93
+ return this.set('Content-Type', type);
107
94
  }
108
95
  }
109
96
  //# sourceMappingURL=response.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/server/response.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/server/response.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAI5C;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IAqB9C,YAAY,YAA0B;QACpC,KAAK,EAAE,CAAC;QArBV;;WAEG;QACH,YAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB;;WAEG;QACH,WAAM,GAAG,KAAK,CAAC;QACf;;WAEG;QACH,eAAU,GAAG,GAAG,CAAC;QACjB;;WAEG;QACH,kBAAa,GAAkB,IAAI,CAAC;QAEpC,SAAI,GAAiC,SAAS,CAAC;QAK7C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,KAAa;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAY;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,IAA+B;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAE9B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,GAAG,OAAO,CAAC;QAE1C,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI;YAAE,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAEpF,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY,EAAE,KAAa;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,OAAsB;QAC3D,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,OAAgB;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;CACF"}
package/lib/server.d.ts CHANGED
@@ -1,18 +1,13 @@
1
1
  /// <reference types="node" />
2
2
  import type { App } from './app.js';
3
+ import type { ServerOptions } from './types.js';
3
4
  import type { Socket } from 'net';
4
5
  import http from 'http';
5
6
  import https from 'https';
6
7
  import { URL } from 'url';
8
+ import { ServerRequest } from './server/request.js';
7
9
  import { WebSocketServer } from 'ws';
8
10
  declare type ListenArgs = any[];
9
- interface ServerOptions {
10
- cluster?: boolean;
11
- listen?: string[];
12
- quiet?: boolean;
13
- reverseProxy?: boolean;
14
- workers?: number;
15
- }
16
11
  /**
17
12
  * Server class.
18
13
  */
@@ -21,6 +16,24 @@ export declare class Server {
21
16
  * Application this server handles.
22
17
  */
23
18
  app: App;
19
+ /**
20
+ * Limit the amount of time the parser will wait to receive the complete HTTP headers, defaults to `60000`
21
+ * (60 seconds).
22
+ */
23
+ headersTimeout: number | undefined;
24
+ /**
25
+ * Limit the amount of time of inactivity a server needs to wait for additional incoming data, after it has finished
26
+ * writing the last response, before a socket will be destroyed, defaults to `5000` (5 seconds).
27
+ */
28
+ keepAliveTimeout: number | undefined;
29
+ /**
30
+ * Maximum number of requests socket can handle before closing keep alive connection, defaults to `0`.
31
+ */
32
+ maxRequestsPerSocket: number | undefined;
33
+ /**
34
+ * Limit the amount of time for receiving the entire request from the client, defaults to `300000` (300 seconds).
35
+ */
36
+ requestTimeout: number | undefined;
24
37
  /**
25
38
  * Reverse proxy mode.
26
39
  */
@@ -48,7 +61,8 @@ export declare class Server {
48
61
  */
49
62
  stop(): Promise<void>;
50
63
  _createServer(location: string): Promise<void>;
51
- _handleRequest(req: http.IncomingMessage, res: http.ServerResponse): void;
64
+ _handleRequest(req: http.IncomingMessage, raw: http.ServerResponse): void;
52
65
  _handleUpgrade(wss: WebSocketServer, req: http.IncomingMessage, socket: Socket, head: Buffer): void;
66
+ _prepareRequest(req: http.IncomingMessage, socket: Socket, isWebSocket: boolean): ServerRequest;
53
67
  }
54
68
  export {};
package/lib/server.js CHANGED
@@ -2,7 +2,11 @@ import cluster from 'cluster';
2
2
  import http from 'http';
3
3
  import https from 'https';
4
4
  import os from 'os';
5
+ import { Stream } from 'stream';
5
6
  import { URL } from 'url';
7
+ import { ServerRequest } from './server/request.js';
8
+ import { ServerResponse } from './server/response.js';
9
+ import { termEscape } from './util.js';
6
10
  import { WebSocket } from './websocket.js';
7
11
  import Path from '@mojojs/path';
8
12
  import { WebSocketServer } from 'ws';
@@ -17,6 +21,10 @@ export class Server {
17
21
  this.urls = [];
18
22
  this._servers = [];
19
23
  this.app = app;
24
+ this.headersTimeout = options.headersTimeout;
25
+ this.keepAliveTimeout = options.keepAliveTimeout;
26
+ this.maxRequestsPerSocket = options.maxRequestsPerSocket;
27
+ this.requestTimeout = options.requestTimeout;
20
28
  this.reverseProxy = options.reverseProxy ?? false;
21
29
  this._cluster = options.cluster ?? false;
22
30
  this._listen = options.listen ?? ['http://*:3000'];
@@ -81,14 +89,22 @@ export class Server {
81
89
  const wss = new WebSocketServer({ noServer: true });
82
90
  const server = (isHttps ? https : http).createServer(options, this._handleRequest.bind(this));
83
91
  this._servers.push(server);
92
+ if (this.maxRequestsPerSocket !== undefined)
93
+ server.maxRequestsPerSocket = this.maxRequestsPerSocket;
94
+ if (this.headersTimeout !== undefined)
95
+ server.headersTimeout = this.headersTimeout;
96
+ if (this.keepAliveTimeout !== undefined)
97
+ server.keepAliveTimeout = this.keepAliveTimeout;
98
+ if (this.requestTimeout !== undefined)
99
+ server.requestTimeout = this.requestTimeout;
84
100
  server.on('upgrade', this._handleUpgrade.bind(this, wss));
85
101
  if (process.env.MOJO_SERVER_DEBUG === '1') {
86
- server.on('connection', socket => {
102
+ server.on('connection', (socket) => {
87
103
  const stderr = process.stderr;
88
- socket.on('data', (chunk) => stderr.write(`-- Server <<< Client\n${chunk}`));
104
+ socket.on('data', (chunk) => stderr.write(termEscape(`-- Server <<< Client\n${chunk}`)));
89
105
  const write = socket.write;
90
106
  socket.write = (chunk, cb) => {
91
- stderr.write(`-- Server >>> Client\n${chunk}`);
107
+ stderr.write(termEscape(`-- Server >>> Client\n${chunk}`));
92
108
  return write.apply(socket, [chunk, cb]);
93
109
  };
94
110
  });
@@ -113,14 +129,20 @@ export class Server {
113
129
  });
114
130
  });
115
131
  }
116
- _handleRequest(req, res) {
132
+ _handleRequest(req, raw) {
117
133
  const app = this.app;
118
- const ctx = app.newContext(req, res, { isWebSocket: false, reverseProxy: this.reverseProxy });
134
+ const socket = req.socket;
135
+ const ctx = app.newContext(this._prepareRequest(req, socket, false), new ServerResponse(function (res, body) {
136
+ _sendResponse(res, body, raw);
137
+ }));
138
+ raw.on('finish', () => ctx.emit('finish'));
119
139
  app.handleRequest(ctx).catch(error => ctx.exception(error));
120
140
  }
121
141
  _handleUpgrade(wss, req, socket, head) {
122
142
  const app = this.app;
123
- const ctx = app.newContext(req, new http.ServerResponse(req), { isWebSocket: true, reverseProxy: this.reverseProxy });
143
+ const ctx = app.newContext(this._prepareRequest(req, socket, true), new ServerResponse(function (res, body) {
144
+ _sendResponse(res, body, new http.ServerResponse(req));
145
+ }));
124
146
  app
125
147
  .handleRequest(ctx)
126
148
  .then(() => {
@@ -139,5 +161,43 @@ export class Server {
139
161
  return ctx.exception(error);
140
162
  });
141
163
  }
164
+ _prepareRequest(req, socket, isWebSocket) {
165
+ return new ServerRequest({
166
+ body: req,
167
+ headers: req.rawHeaders,
168
+ isSecure: socket.encrypted ?? false,
169
+ isWebSocket: isWebSocket,
170
+ method: req.method,
171
+ remoteAddress: socket.remoteAddress,
172
+ reverseProxy: this.reverseProxy,
173
+ url: req.url
174
+ });
175
+ }
176
+ }
177
+ function _sendHeaders(res, raw) {
178
+ const statusCode = res.statusCode;
179
+ const statusMessage = res.statusMessage;
180
+ const headers = res.headers.toArray();
181
+ if (statusMessage === null) {
182
+ raw.writeHead(statusCode, headers);
183
+ }
184
+ else {
185
+ raw.writeHead(statusCode, statusMessage, headers);
186
+ }
187
+ }
188
+ function _sendResponse(res, body, raw) {
189
+ if (typeof body === 'string' || Buffer.isBuffer(body)) {
190
+ res.length(Buffer.byteLength(body));
191
+ _sendHeaders(res, raw);
192
+ raw.end(body);
193
+ }
194
+ else if (body instanceof Stream) {
195
+ _sendHeaders(res, raw);
196
+ body.pipe(raw);
197
+ }
198
+ else {
199
+ _sendHeaders(res, raw);
200
+ raw.end();
201
+ }
142
202
  }
143
203
  //# sourceMappingURL=server.js.map
package/lib/server.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/lib/static.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import crypto from 'crypto';
2
- import path from 'path';
3
2
  import Path from '@mojojs/path';
4
3
  /**
5
4
  * Static file server class.
@@ -26,11 +25,12 @@ export class Static {
26
25
  const method = req.method;
27
26
  if (method !== 'GET' && method !== 'HEAD')
28
27
  return false;
29
- const relative = unsafePath.replace(this.prefix, '').split('/').join(path.sep);
30
- if (relative !== path.normalize(relative) || relative.startsWith('..'))
28
+ const relative = new Path(...unsafePath.replace(this.prefix, '').split('/'));
29
+ const relativePath = relative.toString();
30
+ if (relativePath !== relative.normalize().toString() || relativePath.startsWith('..'))
31
31
  return false;
32
32
  for (const dir of this.publicPaths) {
33
- const file = new Path(dir, relative);
33
+ const file = new Path(dir, relativePath);
34
34
  if ((await file.isReadable()) !== true || (await file.stat()).isDirectory() === true)
35
35
  continue;
36
36
  await this.serveFile(ctx, file);
@@ -61,7 +61,7 @@ export class Static {
61
61
  // If-None-Match
62
62
  const req = ctx.req;
63
63
  const ifNoneMatch = req.get('If-None-Match');
64
- if (etag !== undefined && ifNoneMatch !== undefined) {
64
+ if (etag !== undefined && ifNoneMatch !== null) {
65
65
  const etags = ifNoneMatch.split(/,\s+/).map(value => value.replaceAll('"', ''));
66
66
  for (const match of etags) {
67
67
  if (match === etag)
@@ -70,7 +70,7 @@ export class Static {
70
70
  }
71
71
  // If-Modified-Since
72
72
  const ifModifiedSince = req.get('If-Modified-Since');
73
- if (options.lastModified !== undefined && ifModifiedSince !== undefined) {
73
+ if (options.lastModified !== undefined && ifModifiedSince !== null) {
74
74
  const epoch = Date.parse(ifModifiedSince);
75
75
  if (isNaN(epoch))
76
76
  return false;
@@ -102,7 +102,7 @@ export class Static {
102
102
  return;
103
103
  }
104
104
  // Entire file
105
- if (range === undefined) {
105
+ if (range === null) {
106
106
  await res.status(200).length(length).type(type).send(file.createReadStream());
107
107
  return;
108
108
  }
package/lib/static.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -4,6 +4,7 @@ import type { App } from './app.js';
4
4
  import type { Context } from './context.js';
5
5
  import type { ValidatorResult } from './validator/result.js';
6
6
  import type { Agent } from 'http';
7
+ import type { Readable } from 'stream';
7
8
  import type { CookieJar } from 'tough-cookie';
8
9
  import type { URL } from 'url';
9
10
  export declare type Expand<T> = T extends infer O ? {
@@ -57,11 +58,6 @@ export interface CookieOptions {
57
58
  sameSite?: 'lax' | 'strict' | 'none';
58
59
  secure?: boolean;
59
60
  }
60
- export interface MockRequestOptions {
61
- headers?: Record<string, string>;
62
- method?: string;
63
- url?: string;
64
- }
65
61
  export interface RenderOptions {
66
62
  engine?: string;
67
63
  format?: string;
@@ -77,9 +73,26 @@ export interface RenderOptions {
77
73
  view?: string;
78
74
  [key: string]: any;
79
75
  }
76
+ export interface ServerOptions {
77
+ cluster?: boolean;
78
+ headersTimeout?: number;
79
+ keepAliveTimeout?: number;
80
+ listen?: string[];
81
+ maxRequestsPerSocket?: number;
82
+ quiet?: boolean;
83
+ requestTimeout?: number;
84
+ reverseProxy?: boolean;
85
+ workers?: number;
86
+ }
80
87
  export interface ServerRequestOptions {
88
+ body: Readable;
89
+ headers: string[];
90
+ isSecure: boolean;
81
91
  isWebSocket: boolean;
92
+ method?: string;
93
+ remoteAddress?: string;
82
94
  reverseProxy: boolean;
95
+ url?: string;
83
96
  }
84
97
  export interface UserAgentOptions {
85
98
  baseURL?: string | URL;
@@ -1,5 +1,5 @@
1
1
  import type { App } from '../app.js';
2
- import type { UserAgentOptions } from '../types.js';
2
+ import type { ServerOptions, UserAgentOptions } from '../types.js';
3
3
  import { Server } from '../server.js';
4
4
  import { UserAgent } from '../user-agent.js';
5
5
  /**
@@ -14,11 +14,11 @@ export declare class MockUserAgent extends UserAgent {
14
14
  /**
15
15
  * Create a new mock user agent.
16
16
  */
17
- static newMockUserAgent(app: App, options?: UserAgentOptions): Promise<MockUserAgent>;
17
+ static newMockUserAgent(app: App, options?: UserAgentOptions, serverOptions?: ServerOptions): Promise<MockUserAgent>;
18
18
  /**
19
19
  * Start mock server.
20
20
  */
21
- start(app: App): Promise<this>;
21
+ start(app: App, options?: ServerOptions): Promise<this>;
22
22
  /**
23
23
  * Stop mock server.
24
24
  */
@@ -15,14 +15,14 @@ export class MockUserAgent extends UserAgent {
15
15
  /**
16
16
  * Create a new mock user agent.
17
17
  */
18
- static async newMockUserAgent(app, options) {
19
- return await new MockUserAgent(options).start(app);
18
+ static async newMockUserAgent(app, options, serverOptions) {
19
+ return await new MockUserAgent(options).start(app, serverOptions);
20
20
  }
21
21
  /**
22
22
  * Start mock server.
23
23
  */
24
- async start(app) {
25
- const server = (this.server = new Server(app, { listen: ['http://*'], quiet: true }));
24
+ async start(app, options = {}) {
25
+ const server = (this.server = new Server(app, { ...options, listen: ['http://*'], quiet: true }));
26
26
  await server.start();
27
27
  if (this.baseURL === undefined)
28
28
  this.baseURL = server.urls[0];
@@ -1 +1 @@
1
- {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/user-agent/mock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IAM1C,YAAY,OAA0B;QACpC,KAAK,CAAC,OAAO,CAAC,CAAC;QANjB;;WAEG;QACH,WAAM,GAAuB,SAAS,CAAC;QAKrC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAQ,EAAE,OAA0B;QAChE,OAAO,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,GAAQ;QAClB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,EAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QACpF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACtC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/user-agent/mock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IAM1C,YAAY,OAA0B;QACpC,KAAK,CAAC,OAAO,CAAC,CAAC;QANjB;;WAEG;QACH,WAAM,GAAuB,SAAS,CAAC;QAKrC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,GAAQ,EACR,OAA0B,EAC1B,aAA6B;QAE7B,OAAO,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,GAAQ,EAAE,UAAyB,EAAE;QAC/C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,EAAC,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QAChG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACtC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;CACF"}
@@ -1,12 +1,30 @@
1
+ /// <reference types="node" />
2
+ import type { Readable } from 'stream';
1
3
  import { Body } from '../body.js';
4
+ interface UserAgentResponseOptions {
5
+ body: Readable;
6
+ headers: string[];
7
+ httpVersion: string;
8
+ statusCode: number;
9
+ statusMessage: string;
10
+ }
2
11
  /**
3
12
  * User agent response class.
4
13
  */
5
14
  export declare class UserAgentResponse extends Body {
6
15
  /**
7
- * Get HTTP version.
16
+ * HTTP version.
17
+ */
18
+ httpVersion: string;
19
+ /**
20
+ * Response status code.
21
+ */
22
+ statusCode: number;
23
+ /**
24
+ * Response status message.
8
25
  */
9
- get httpVersion(): string;
26
+ statusMessage: string;
27
+ constructor(options: UserAgentResponseOptions);
10
28
  /**
11
29
  * Check if response has a `4xx` response status code.
12
30
  */
@@ -27,16 +45,9 @@ export declare class UserAgentResponse extends Body {
27
45
  * Check if response has a `2xx` response status code.
28
46
  */
29
47
  get isSuccess(): boolean;
30
- /**
31
- * Response status code.
32
- */
33
- get status(): number;
34
- /**
35
- * Get response message.
36
- */
37
- get statusMessage(): string | undefined;
38
48
  /**
39
49
  * Get `Content-Type` header value.
40
50
  */
41
- get type(): string | undefined;
51
+ get type(): string | null;
42
52
  }
53
+ export {};
@@ -3,17 +3,17 @@ import { Body } from '../body.js';
3
3
  * User agent response class.
4
4
  */
5
5
  export class UserAgentResponse extends Body {
6
- /**
7
- * Get HTTP version.
8
- */
9
- get httpVersion() {
10
- return this._raw.httpVersion;
6
+ constructor(options) {
7
+ super(options.headers, options.body);
8
+ this.httpVersion = options.httpVersion;
9
+ this.statusCode = options.statusCode;
10
+ this.statusMessage = options.statusMessage;
11
11
  }
12
12
  /**
13
13
  * Check if response has a `4xx` response status code.
14
14
  */
15
15
  get isClientError() {
16
- const statusCode = this.status;
16
+ const statusCode = this.statusCode;
17
17
  return statusCode >= 400 && statusCode <= 499;
18
18
  }
19
19
  /**
@@ -26,35 +26,23 @@ export class UserAgentResponse extends Body {
26
26
  * Check if response has a `3xx` response status code.
27
27
  */
28
28
  get isRedirect() {
29
- const statusCode = this.status;
29
+ const statusCode = this.statusCode;
30
30
  return statusCode >= 300 && statusCode <= 399;
31
31
  }
32
32
  /**
33
33
  * Check if response has a `5xx` response status code.
34
34
  */
35
35
  get isServerError() {
36
- const statusCode = this.status;
36
+ const statusCode = this.statusCode;
37
37
  return statusCode >= 500 && statusCode <= 599;
38
38
  }
39
39
  /**
40
40
  * Check if response has a `2xx` response status code.
41
41
  */
42
42
  get isSuccess() {
43
- const statusCode = this.status;
43
+ const statusCode = this.statusCode;
44
44
  return statusCode >= 200 && statusCode <= 299;
45
45
  }
46
- /**
47
- * Response status code.
48
- */
49
- get status() {
50
- return this._raw.statusCode;
51
- }
52
- /**
53
- * Get response message.
54
- */
55
- get statusMessage() {
56
- return this._raw.statusMessage;
57
- }
58
46
  /**
59
47
  * Get `Content-Type` header value.
60
48
  */