Skip to content

Commit 253ca13

Browse files
committed
Stable
1 parent 8718cd0 commit 253ca13

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+745
-1576
lines changed

dist/Event/ErrorEvent.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ResponseAwareEvent } from './ResponseAwareEvent';
22
import { ServerError } from '../Exception/ServerError';
3-
import { Request } from '../Request';
3+
import { Request } from '../Request/Request';
44
export declare class ErrorEvent extends ResponseAwareEvent {
55
readonly error: ServerError | Error;
66
readonly request: Request;

dist/Event/RenderTemplateEvent.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Request } from '../Request';
1+
import { Request } from '../Request/Request';
22
import { Session } from '../Session/Session';
33
import { ResponseAwareEvent } from './ResponseAwareEvent';
44
export declare class RenderTemplateEvent extends ResponseAwareEvent {

dist/Event/RequestEvent.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ResponseAwareEvent } from './ResponseAwareEvent';
2-
import { Request } from '../Request';
2+
import { Request } from '../Request/Request';
33
import { IRoute } from '../Router/Router';
44
export declare class RequestEvent extends ResponseAwareEvent {
55
readonly request: Request;

dist/Event/ResponseEvent.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Request } from '../Request';
1+
import { Request } from '../Request/Request';
22
import { Response } from '../Response/Response';
33
import { IRoute } from '../Router/Router';
44
export declare class ResponseEvent {

dist/Event/StaticRequestEvent.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ResponseAwareEvent } from '../Event/ResponseAwareEvent';
2-
import { Request } from '../Request';
2+
import { Request } from '../Request/Request';
33
export declare class StaticRequestEvent extends ResponseAwareEvent {
44
readonly request: Request;
55
readonly fileName: string;

dist/Event/StaticResponseEvent.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Request } from '../Request';
1+
import { Request } from '../Request/Request';
22
import { Response } from '../Response/Response';
33
export declare class StaticResponseEvent {
44
readonly request: Request;

dist/Harmony.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export declare class Harmony {
1212
private readonly options;
1313
private readonly router;
1414
private readonly server;
15+
private readonly requestDecoder;
1516
private readonly sessionManager;
1617
private readonly staticAssetHandler;
1718
private readonly templateManager;
@@ -88,6 +89,13 @@ export interface IConstructorOptions {
8889
* Defaults to 8000.
8990
*/
9091
port?: number;
92+
/**
93+
* The maximum size of a request body in bytes.
94+
*
95+
* Make sure to keep this number relatively low to prevent flood attacks.
96+
* Defaults to 1MB.
97+
*/
98+
maxUploadSize?: number;
9199
static?: {
92100
/**
93101
* One or more directories to serve static assets from.

dist/Request.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ export declare class Request {
1111
private readonly _cookies;
1212
private readonly _query;
1313
private readonly _path;
14-
constructor(r: IncomingMessage);
14+
private readonly _body;
15+
constructor(r: IncomingMessage, body: Buffer);
1516
/**
1617
* Returns a value from one of the available bags in the following order:
1718
* - cookies

dist/Request/IUploadedFile.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference types="node" />
2+
export interface IUploadedFile {
3+
name: string;
4+
fileName: string;
5+
mimeType: string;
6+
data: Buffer;
7+
}

dist/Request/MultipartParser.d.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* Multipart Parser (Finite State Machine)
3+
* usage:
4+
* const multipart = require('./multipart.js');
5+
* const body = multipart.DemoData(); // raw body
6+
* const body = new Buffer(event['body-json'].toString(),'base64'); // AWS case
7+
* const boundary = multipart.getBoundary(event.params.header['content-type']);
8+
* const parts = multipart.Parse(body,boundary);
9+
* each part is:
10+
* { filename: 'A.txt', type: 'text/plain', data: <Buffer 41 41 41 41 42 42 42 42> }
11+
* or { name: 'key', data: <Buffer 41 41 41 41 42 42 42 42> }
12+
*/
13+
/// <reference types="node" />
14+
declare type Input = {
15+
filename?: string;
16+
name?: string;
17+
type: string;
18+
data: Buffer;
19+
};
20+
export declare function parse(multipartBodyBuffer: Buffer, boundary: string): Input[];
21+
export declare function getBoundary(header: string): string;
22+
export {};

dist/Request/Request.d.ts

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/// <reference types="node" />
2+
import { Bag } from '../Bag';
3+
import { IRoute } from '../Router/Router';
4+
import { IncomingMessage } from 'http';
5+
import { IUploadedFile } from './IUploadedFile';
6+
import { RequestBody } from './RequestBody';
7+
export declare class Request {
8+
private r;
9+
private readonly _clientIp;
10+
private readonly _method;
11+
private readonly _parameters;
12+
private readonly _headers;
13+
private readonly _cookies;
14+
private readonly _query;
15+
private readonly _path;
16+
private readonly _post;
17+
private readonly _files;
18+
private readonly _body;
19+
constructor(r: IncomingMessage, body: RequestBody);
20+
/**
21+
* Returns a value from one of the available bags in the following order:
22+
* - post fields
23+
* - files
24+
* - cookies
25+
* - headers
26+
* - parameters (derived from path)
27+
* - query parameters
28+
*
29+
* @param {string} name
30+
* @return {*}
31+
*/
32+
get(name: string): any;
33+
/**
34+
* Returns the IP address of the client.
35+
*
36+
* @return {string}
37+
*/
38+
get clientIp(): string;
39+
/**
40+
* Returns the request path.
41+
*
42+
* @return {string}
43+
*/
44+
get path(): string;
45+
/**
46+
* Returns the HTTP method in upper-case string representation.
47+
*
48+
* @return {string}
49+
*/
50+
get method(): string;
51+
/**
52+
* Returns the cookie bag.
53+
*
54+
* @return {Bag}
55+
*/
56+
get cookies(): Bag<string>;
57+
/**
58+
* Returns the headers bag.
59+
*
60+
* @return {Bag}
61+
*/
62+
get headers(): Bag<string>;
63+
/**
64+
* Returns the query parameters bag.
65+
*
66+
* @return {Bag}
67+
*/
68+
get query(): Bag<string | number>;
69+
/**
70+
* Returns the route parameters bag.
71+
*
72+
* @returns {Bag<string>}
73+
*/
74+
get parameters(): Bag<string>;
75+
/**
76+
* Returns the POST-fields bag.
77+
*
78+
* @returns {Bag<string | string[]>}
79+
*/
80+
get post(): Bag<string | string[]>;
81+
/**
82+
* Returns the files bag.
83+
*
84+
* @returns {Bag<IUploadedFile | IUploadedFile[]>}
85+
*/
86+
get files(): Bag<IUploadedFile | IUploadedFile[]>;
87+
/**
88+
* Returns the request body as parsed JSON content.
89+
*
90+
* @returns {any}
91+
*/
92+
get json(): any;
93+
/**
94+
* Returns true if the given route matches this request.
95+
*
96+
* @param {IRoute} route
97+
* @return {boolean}
98+
*/
99+
isMatchingRoute(route: IRoute): boolean;
100+
/**
101+
* @param {string} pattern
102+
* @return {{regExp: RegExp, namedParams: string[]}}
103+
* @private
104+
*/
105+
private _parsePattern;
106+
/**
107+
* Parses a cookie header into a key-value object.
108+
*
109+
* @param {string} cookieString
110+
* @returns {{[p: string]: string}}
111+
* @private
112+
*/
113+
private _parseCookies;
114+
}

dist/Request/RequestBody.d.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/// <reference types="node" />
2+
import { Bag } from '../Bag';
3+
import { IUploadedFile } from './IUploadedFile';
4+
export declare class RequestBody {
5+
readonly raw: Buffer;
6+
fields: Bag<string | string[]>;
7+
files: Bag<IUploadedFile | IUploadedFile[]>;
8+
constructor(raw: Buffer, parts: RequestBodyPart[]);
9+
private addPartToBag;
10+
}
11+
export declare type RequestBodyPart = {
12+
name: string;
13+
data: Buffer;
14+
type?: string;
15+
filename?: string;
16+
};

dist/Request/RequestBodyDecoder.d.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/// <reference types="node" />
2+
import { IncomingMessage, ServerResponse } from 'http';
3+
import { RequestBody } from './RequestBody';
4+
export declare class RequestBodyDecoder {
5+
private readonly maxUploadSize;
6+
constructor(maxUploadSize: number);
7+
/**
8+
* Attempts to deserialize the request body into data suitable for a Bag.
9+
*
10+
* If this process fails, the body is most likely uploaded content like
11+
* a binary file.
12+
*/
13+
decode(req: IncomingMessage, res: ServerResponse): Promise<RequestBody>;
14+
/**
15+
* Parses the given body as a multipart/form-data payload.
16+
*
17+
* @param {ServerResponse} res
18+
* @param {string} type
19+
* @param {Buffer} body
20+
* @private
21+
*/
22+
private parseMultipartFormData;
23+
/**
24+
* Parses the given body as a x-www-form-urlencoded payload.
25+
*
26+
* @param {ServerResponse} res
27+
* @param {Buffer} body
28+
* @returns {RequestBody}
29+
* @private
30+
*/
31+
private parseFormUrlEncoded;
32+
/**
33+
* Wait for the request to complete, then return the request body.
34+
*
35+
* Sends an HTTP 413 status back to the client if the request body exceeds
36+
* the maximum upload size.
37+
*
38+
* @param {IncomingMessage} req
39+
* @param {ServerResponse} res
40+
* @returns {Promise<Buffer>}
41+
* @private
42+
*/
43+
private getRequestBody;
44+
}

dist/Response/HtmlResponse.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import { HttpStatus, Response } from './Response';
22
export declare class HtmlResponse extends Response {
3-
constructor(html: string, statusCode?: HttpStatus, pretty?: boolean);
3+
constructor(html: string, statusCode?: HttpStatus);
44
}

dist/Response/RedirectResponse.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { HttpStatus, Response } from './Response';
2+
export declare class RedirectResponse extends Response {
3+
constructor(url: string, statusCode?: HttpStatus);
4+
}

dist/Router/Router.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Request } from '../Request';
1+
import { Request } from '../Request/Request';
22
export declare class Router {
33
private routes;
44
/**

dist/Session/SessionManager.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { RequestEvent } from '../Event/RequestEvent';
22
import { ResponseEvent } from '../Event/ResponseEvent';
3-
import { Request } from '../Request';
3+
import { Request } from '../Request/Request';
44
import { Session } from './Session';
55
import { ISessionStorage } from './ISessionStorage';
66
/**

dist/Templating/TemplateManager.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Request } from '../Request';
1+
import { Request } from '../Request/Request';
22
import { Response } from '../Response/Response';
33
import { RenderTemplateEventListener } from '../Harmony';
44
import { Session } from '../Session/Session';

dist/index.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
export * from './Bag';
22
export * from './Cookie/Cookie';
33
export * from './Cookie/CookieBag';
4+
export * from './Exception/AccessDeniedError';
5+
export * from './Exception/InternalServerError';
6+
export * from './Exception/NotFoundError';
7+
export * from './Exception/ServerError';
48
export * from './Event/ErrorEvent';
59
export * from './Event/RenderTemplateEvent';
610
export * from './Event/RequestEvent';
711
export * from './Event/ResponseEvent';
812
export * from './Event/StaticRequestEvent';
913
export * from './Event/StaticResponseEvent';
10-
export * from './Request';
14+
export * from './Request/Request';
1115
export * from './Response/HtmlResponse';
1216
export * from './Response/JsonResponse';
17+
export * from './Response/RedirectResponse';
1318
export * from './Response/Response';
1419
export * from './Router/Route';
1520
export * from './Router/Router';

0 commit comments

Comments
 (0)