yinzerflow 0.1.0 → 0.1.2
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 +78 -43
- package/index.d.ts +5 -3
- package/index.js +34 -10
- package/index.js.map +4 -4
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -1,13 +1,37 @@
|
|
|
1
1
|
# YinzerJS Documentation
|
|
2
2
|
|
|
3
|
+
## Table of Contents
|
|
4
|
+
|
|
5
|
+
1. [Overview](#overview)
|
|
6
|
+
2. [Installation](#installation)
|
|
7
|
+
- [Using npm](#using-npm)
|
|
8
|
+
- [Using Bun](#using-bun)
|
|
9
|
+
- [Using Yarn](#using-yarn)
|
|
10
|
+
- [Using pnpm](#using-pnpm)
|
|
11
|
+
3. [Getting Started](#getting-started)
|
|
12
|
+
- [Importing YinzerFlow](#importing-yinzerflow)
|
|
13
|
+
- [Creating an Application Instance](#creating-an-application-instance)
|
|
14
|
+
- [Defining Routes](#defining-routes)
|
|
15
|
+
4. [Route Groups](#route-groups)
|
|
16
|
+
5. [Response Handling](#response-handling)
|
|
17
|
+
6. [Middleware](#middleware)
|
|
18
|
+
- [Global Middleware](#global-middleware)
|
|
19
|
+
- [Route-specific Middleware](#route-specific-middleware)
|
|
20
|
+
7. [Starting the Server](#starting-the-server)
|
|
21
|
+
8. [Request Handling Flow](#request-handling-flow)
|
|
22
|
+
9. [Error Handling](#error-handling)
|
|
23
|
+
10. [Examples](#examples)
|
|
24
|
+
11. [Contribution](#contribution)
|
|
25
|
+
12. [Conclusion](#conclusion)
|
|
26
|
+
|
|
3
27
|
## Overview
|
|
4
28
|
|
|
5
|
-
|
|
29
|
+
YinzerFlow is a lightweight HTTP server framework built for Node.js, designed with TypeScript in mind. It leverages TypeScript's powerful type system to provide enhanced type safety and autocompletion, making it easier for developers to build robust web applications. With YinzerFlow, you can enjoy a flexible routing system, middleware support, and a straightforward interface to handle incoming requests and responses—all while benefiting from TypeScript's clear typing and error-checking capabilities. This combination allows for a smoother development experience, reducing runtime errors and improving code maintainability.
|
|
6
30
|
|
|
7
31
|
```typescript
|
|
8
|
-
import {
|
|
32
|
+
import { YinzerFlow } from 'yinzerflow';
|
|
9
33
|
|
|
10
|
-
export const app = new
|
|
34
|
+
export const app = new YinzerFlow({
|
|
11
35
|
port: 5000,
|
|
12
36
|
});
|
|
13
37
|
|
|
@@ -19,68 +43,54 @@ app.post('/example-route', (ctx) => {
|
|
|
19
43
|
app.listen();
|
|
20
44
|
```
|
|
21
45
|
|
|
22
|
-
Sure! Here’s an expanded version of the installation section for YinzJS, providing more context and options for users:
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
46
|
## Installation
|
|
27
47
|
|
|
28
|
-
To get started with
|
|
48
|
+
To get started with YinzerFlow, simply install it using your preferred package manager. YinzerFlow is available via npm, as well as other popular package managers such as Bun, Yarn, and pnpm. Follow the instructions below based on the package manager you are using:
|
|
29
49
|
|
|
30
50
|
### Using npm
|
|
31
51
|
|
|
32
52
|
If you are using npm, run the following command in your terminal:
|
|
33
53
|
|
|
34
54
|
```bash
|
|
35
|
-
npm install
|
|
55
|
+
npm install yinzerflow
|
|
36
56
|
```
|
|
37
57
|
|
|
38
|
-
This command will download and install YinzJS along with its dependencies into your project's `node_modules` folder.
|
|
39
|
-
|
|
40
58
|
### Using Bun
|
|
41
59
|
|
|
42
|
-
For those who prefer Bun, you can add
|
|
60
|
+
For those who prefer Bun, you can add YinzerFlow to your project with the following command:
|
|
43
61
|
|
|
44
62
|
```bash
|
|
45
|
-
bun add
|
|
63
|
+
bun add yinzerflow
|
|
46
64
|
```
|
|
47
65
|
|
|
48
|
-
Bun is known for its speed and efficiency, making it a great choice for modern JavaScript development.
|
|
49
|
-
|
|
50
66
|
### Using Yarn
|
|
51
67
|
|
|
52
|
-
If you're a Yarn user, you can easily install
|
|
68
|
+
If you're a Yarn user, you can easily install YinzerFlow by running:
|
|
53
69
|
|
|
54
70
|
```bash
|
|
55
|
-
yarn add
|
|
71
|
+
yarn add yinzerflow
|
|
56
72
|
```
|
|
57
73
|
|
|
58
|
-
Yarn provides a fast and reliable way to manage your project's dependencies.
|
|
59
|
-
|
|
60
74
|
### Using pnpm
|
|
61
75
|
|
|
62
|
-
For developers who utilize pnpm, you can install
|
|
76
|
+
For developers who utilize pnpm, you can install YinzerFlow with:
|
|
63
77
|
|
|
64
78
|
```bash
|
|
65
|
-
pnpm add
|
|
79
|
+
pnpm add yinzerflow
|
|
66
80
|
```
|
|
67
81
|
|
|
68
|
-
pnpm is an efficient package manager that saves disk space and speeds up installation times.
|
|
69
|
-
|
|
70
82
|
## Getting Started
|
|
71
83
|
|
|
72
|
-
### Importing
|
|
84
|
+
### Importing YinzerFlow
|
|
73
85
|
|
|
74
86
|
```typescript
|
|
75
|
-
import {
|
|
87
|
+
import { YinzerFlow } from 'yinzerflow';
|
|
76
88
|
```
|
|
77
89
|
|
|
78
90
|
### Creating an Application Instance
|
|
79
91
|
|
|
80
|
-
You can create an instance of YinzJS by specifying the desired port:
|
|
81
|
-
|
|
82
92
|
```typescript
|
|
83
|
-
const app = new
|
|
93
|
+
const app = new YinzerFlow({ port: 5000 });
|
|
84
94
|
```
|
|
85
95
|
|
|
86
96
|
### Defining Routes
|
|
@@ -112,7 +122,7 @@ The after handler can be used for post-processing tasks like logging, modifying
|
|
|
112
122
|
|
|
113
123
|
### Additional Route Methods and Parameters
|
|
114
124
|
|
|
115
|
-
|
|
125
|
+
YinzerFlow supports various HTTP methods such as `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, and `OPTIONS`. You can use these methods to define routes for specific HTTP requests.
|
|
116
126
|
|
|
117
127
|
```typescript
|
|
118
128
|
app.get('/example-route', ({ request, response }) => {
|
|
@@ -149,7 +159,7 @@ app.get('/search?location=pittsburgh', ({ request, response }) => {
|
|
|
149
159
|
});
|
|
150
160
|
```
|
|
151
161
|
|
|
152
|
-
|
|
162
|
+
## Route Groups
|
|
153
163
|
|
|
154
164
|
You can group routes using the `group` method. This is useful for applying middleware to multiple routes at once or for organizing related routes.
|
|
155
165
|
|
|
@@ -182,7 +192,7 @@ app.group(
|
|
|
182
192
|
);
|
|
183
193
|
```
|
|
184
194
|
|
|
185
|
-
|
|
195
|
+
## Response Handling
|
|
186
196
|
|
|
187
197
|
The route handlers, before handlers, and middleware functions can return a response in the form of an object or a string. The headers and status code can be set using the `response` object as well. The return headers and status code will be assumed if they are not specified.
|
|
188
198
|
|
|
@@ -204,7 +214,7 @@ app.post('/example-route', ({ response }) => {
|
|
|
204
214
|
});
|
|
205
215
|
```
|
|
206
216
|
|
|
207
|
-
|
|
217
|
+
For more strict control over the response, you can use the `TResponseBody` type parameter to specify the response body type:
|
|
208
218
|
|
|
209
219
|
```typescript
|
|
210
220
|
app.get('/example-route', (): TResponseBody<{ success: boolean; message: string }> => {
|
|
@@ -229,7 +239,7 @@ app.get('/example-route', ({ response }) => {
|
|
|
229
239
|
});
|
|
230
240
|
```
|
|
231
241
|
|
|
232
|
-
|
|
242
|
+
## Route Validation (Coming Soon)
|
|
233
243
|
|
|
234
244
|
You can validate routes using the `validate` method. This method takes a schema object and validates the request body, query parameters, or route parameters against it.
|
|
235
245
|
|
|
@@ -254,11 +264,11 @@ app.post(
|
|
|
254
264
|
);
|
|
255
265
|
```
|
|
256
266
|
|
|
257
|
-
|
|
267
|
+
## Middleware
|
|
258
268
|
|
|
259
|
-
|
|
269
|
+
YinzerFlow supports middleware that can be applied globally or to specific routes. Middleware can manipulate the request and also return a response. This is useful for tasks such as authentication and throttling.
|
|
260
270
|
|
|
261
|
-
|
|
271
|
+
### Global Middleware
|
|
262
272
|
|
|
263
273
|
To apply middleware before all routes:
|
|
264
274
|
|
|
@@ -296,7 +306,7 @@ app.beforeAll(
|
|
|
296
306
|
);
|
|
297
307
|
```
|
|
298
308
|
|
|
299
|
-
|
|
309
|
+
### Route-specific Middleware
|
|
300
310
|
|
|
301
311
|
To apply middleware to specific routes:
|
|
302
312
|
|
|
@@ -306,7 +316,7 @@ app.use({ paths: ['/route1', '/route2'] }, (ctx) => {
|
|
|
306
316
|
});
|
|
307
317
|
```
|
|
308
318
|
|
|
309
|
-
|
|
319
|
+
## Starting the Server
|
|
310
320
|
|
|
311
321
|
To start the server, call the `listen` method:
|
|
312
322
|
|
|
@@ -327,14 +337,39 @@ The request handling process follows this sequence:
|
|
|
327
337
|
7. After route middleware
|
|
328
338
|
8. Response sent
|
|
329
339
|
|
|
340
|
+
## Error Handling
|
|
341
|
+
|
|
342
|
+
### Why Use Built-in Error Handling?
|
|
343
|
+
|
|
344
|
+
1. **Enhanced User Experience**: Custom error handlers provide meaningful and consistent error messages to users.
|
|
345
|
+
2. **Simplified Debugging**: Built-in logging capabilities make identifying and fixing errors easier.
|
|
346
|
+
3. **Improved Reliability**: Effectively catching and managing errors prevents unexpected crashes, ensuring smoother operation.
|
|
347
|
+
|
|
348
|
+
### How to Set Up a Custom Error Handler
|
|
349
|
+
|
|
350
|
+
Set up a custom error handler by defining it in the `errorHandler` method when creating a new instance of YinzerFlow.
|
|
351
|
+
|
|
352
|
+
#### Example Usage
|
|
353
|
+
|
|
354
|
+
```typescript
|
|
355
|
+
const app = new YinzerFlow({
|
|
356
|
+
port: 5000,
|
|
357
|
+
errorHandler: ({ response }, error): TResponseBody<unknown> => {
|
|
358
|
+
console.error('Server error: \n', error);
|
|
359
|
+
response.setStatus(<THttpStatusCode>HttpStatusCode.TOO_MANY_REQUESTS);
|
|
360
|
+
return { success: false, message: 'Internal server error' };
|
|
361
|
+
},
|
|
362
|
+
});
|
|
363
|
+
```
|
|
364
|
+
|
|
330
365
|
## Examples
|
|
331
366
|
|
|
332
|
-
Refer to the examples folder in the
|
|
367
|
+
Refer to the examples folder in the YinzerFlow repository for more detailed usage examples.
|
|
333
368
|
|
|
334
|
-
##
|
|
369
|
+
## Contribution
|
|
335
370
|
|
|
336
|
-
|
|
371
|
+
Guidelines coming soon. For now, feel free to open an issue or submit a pull request.
|
|
337
372
|
|
|
338
|
-
|
|
373
|
+
## Conclusion
|
|
339
374
|
|
|
340
|
-
|
|
375
|
+
YinzerFlow provides a straightforward way to build HTTP servers in Node.js, with support for routing and middleware. For more advanced features, consider extending the framework or integrating with other libraries.
|
package/index.d.ts
CHANGED
|
@@ -168,7 +168,7 @@ export declare class Context {
|
|
|
168
168
|
}
|
|
169
169
|
export type Enum<T> = T[keyof T];
|
|
170
170
|
export type TResponseFunction = (ctx: Context) => TResponseBody<unknown>;
|
|
171
|
-
export type TUndefinableResponseFunction = TResponseFunction |
|
|
171
|
+
export type TUndefinableResponseFunction = TResponseFunction | ((ctx: Context) => void);
|
|
172
172
|
export interface IRoute {
|
|
173
173
|
path: string;
|
|
174
174
|
method: THttpMethod;
|
|
@@ -190,14 +190,16 @@ export interface IIncludeMiddleware extends IMiddleware {
|
|
|
190
190
|
];
|
|
191
191
|
}
|
|
192
192
|
export type TMiddleware = IExcludeMiddleware | IIncludeMiddleware;
|
|
193
|
-
export export declare class
|
|
193
|
+
export export declare class YinzerFlow {
|
|
194
194
|
private readonly backlog;
|
|
195
195
|
private readonly ip;
|
|
196
196
|
private readonly port;
|
|
197
197
|
private readonly _routes;
|
|
198
198
|
private readonly middleware;
|
|
199
|
+
private readonly errorHandler;
|
|
199
200
|
constructor(options?: {
|
|
200
|
-
port
|
|
201
|
+
port?: number;
|
|
202
|
+
errorHandler?: TUndefinableResponseFunction;
|
|
201
203
|
});
|
|
202
204
|
protected _handleMiddleware(route: IRoute, ctx: Context): TResponseBody<unknown> | void;
|
|
203
205
|
protected _handleRoute(route: IRoute, ctx: Context): TResponseBody<unknown>;
|
package/index.js
CHANGED
|
@@ -767,7 +767,11 @@ class HttpResponse {
|
|
|
767
767
|
this.protocol = request.protocol;
|
|
768
768
|
this.statusCode = HttpStatusCode.OK;
|
|
769
769
|
this.status = HttpStatus.OK;
|
|
770
|
-
this.headers = {
|
|
770
|
+
this.headers = {
|
|
771
|
+
Date: import_dayjs.default().format("ddd, DD MMM YYYY HH:mm:ss [GMT]"),
|
|
772
|
+
Connection: "keep-alive",
|
|
773
|
+
"Keep-Alive": "timeout=5, max=1000"
|
|
774
|
+
};
|
|
771
775
|
}
|
|
772
776
|
addHeaders(headers) {
|
|
773
777
|
for (const header of headers) {
|
|
@@ -827,6 +831,7 @@ class HttpResponse {
|
|
|
827
831
|
}
|
|
828
832
|
if (typeof body === "string" && body.includes("<html>")) {
|
|
829
833
|
this.addHeaders([{ "Content-Type": "text/html", "Content-Length": String(calculateContentLength(body)) }]);
|
|
834
|
+
return;
|
|
830
835
|
}
|
|
831
836
|
if (typeof body === "string") {
|
|
832
837
|
this.addHeaders([{ "Content-Type": "text/plain", "Content-Length": String(calculateContentLength(body)) }]);
|
|
@@ -852,15 +857,24 @@ class Context {
|
|
|
852
857
|
}
|
|
853
858
|
|
|
854
859
|
// app/index.ts
|
|
855
|
-
class
|
|
860
|
+
class YinzerFlow {
|
|
856
861
|
backlog = 511;
|
|
857
862
|
ip = import_ip.default.address();
|
|
858
863
|
port = 5000;
|
|
859
864
|
_routes = [];
|
|
860
865
|
middleware = [];
|
|
866
|
+
errorHandler = ({ response }) => {
|
|
867
|
+
response.setStatus(HttpStatusCode.INTERNAL_SERVER_ERROR);
|
|
868
|
+
return { success: false, message: "Internal server error" };
|
|
869
|
+
};
|
|
861
870
|
constructor(options) {
|
|
862
|
-
if (options
|
|
863
|
-
|
|
871
|
+
if (options) {
|
|
872
|
+
if (options.port)
|
|
873
|
+
this.port = options.port;
|
|
874
|
+
if (options.errorHandler) {
|
|
875
|
+
this.errorHandler = options.errorHandler;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
864
878
|
}
|
|
865
879
|
_handleMiddleware(route, ctx) {
|
|
866
880
|
let result = undefined;
|
|
@@ -983,20 +997,30 @@ class YinzJS {
|
|
|
983
997
|
server.on("connection", (socket) => {
|
|
984
998
|
socket.on("data", (buffer) => {
|
|
985
999
|
const request = new HttpRequest(buffer.toString());
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
1000
|
+
try {
|
|
1001
|
+
const response = this._handleRequest(request);
|
|
1002
|
+
socket.write(response.formatHttpResponse());
|
|
1003
|
+
socket.end();
|
|
1004
|
+
} catch (error) {
|
|
1005
|
+
const ctx = new Context(request, new HttpResponse(request));
|
|
1006
|
+
ctx.response.setBody(this.errorHandler(ctx, error));
|
|
1007
|
+
socket.write(ctx.response.formatHttpResponse());
|
|
1008
|
+
socket.end();
|
|
1009
|
+
}
|
|
1010
|
+
});
|
|
1011
|
+
socket.on("error", (error) => {
|
|
1012
|
+
console.error("An error occurred with yinzerflow. Please open an issue on GitHub.", error);
|
|
989
1013
|
});
|
|
990
1014
|
});
|
|
991
1015
|
server.on("error", (error) => {
|
|
992
|
-
console.error(error);
|
|
1016
|
+
console.error("An error occurred with yinzerflow. Please open an issue on GitHub.", error);
|
|
993
1017
|
});
|
|
994
1018
|
}
|
|
995
1019
|
}
|
|
996
1020
|
export {
|
|
997
|
-
|
|
1021
|
+
YinzerFlow,
|
|
998
1022
|
HttpStatusCode,
|
|
999
1023
|
HttpMethod
|
|
1000
1024
|
};
|
|
1001
1025
|
|
|
1002
|
-
//# debugId=
|
|
1026
|
+
//# debugId=AA3886141584200964756E2164756E21
|
package/index.js.map
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"const ip = exports;\nconst { Buffer } = require('buffer');\nconst os = require('os');\n\nip.toBuffer = function (ip, buff, offset) {\n offset = ~~offset;\n\n let result;\n\n if (this.isV4Format(ip)) {\n result = buff || Buffer.alloc(offset + 4);\n ip.split(/\\./g).map((byte) => {\n result[offset++] = parseInt(byte, 10) & 0xff;\n });\n } else if (this.isV6Format(ip)) {\n const sections = ip.split(':', 8);\n\n let i;\n for (i = 0; i < sections.length; i++) {\n const isv4 = this.isV4Format(sections[i]);\n let v4Buffer;\n\n if (isv4) {\n v4Buffer = this.toBuffer(sections[i]);\n sections[i] = v4Buffer.slice(0, 2).toString('hex');\n }\n\n if (v4Buffer && ++i < 8) {\n sections.splice(i, 0, v4Buffer.slice(2, 4).toString('hex'));\n }\n }\n\n if (sections[0] === '') {\n while (sections.length < 8) sections.unshift('0');\n } else if (sections[sections.length - 1] === '') {\n while (sections.length < 8) sections.push('0');\n } else if (sections.length < 8) {\n for (i = 0; i < sections.length && sections[i] !== ''; i++);\n const argv = [i, 1];\n for (i = 9 - sections.length; i > 0; i--) {\n argv.push('0');\n }\n sections.splice(...argv);\n }\n\n result = buff || Buffer.alloc(offset + 16);\n for (i = 0; i < sections.length; i++) {\n const word = parseInt(sections[i], 16);\n result[offset++] = (word >> 8) & 0xff;\n result[offset++] = word & 0xff;\n }\n }\n\n if (!result) {\n throw Error(`Invalid ip address: ${ip}`);\n }\n\n return result;\n};\n\nip.toString = function (buff, offset, length) {\n offset = ~~offset;\n length = length || (buff.length - offset);\n\n let result = [];\n if (length === 4) {\n // IPv4\n for (let i = 0; i < length; i++) {\n result.push(buff[offset + i]);\n }\n result = result.join('.');\n } else if (length === 16) {\n // IPv6\n for (let i = 0; i < length; i += 2) {\n result.push(buff.readUInt16BE(offset + i).toString(16));\n }\n result = result.join(':');\n result = result.replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3');\n result = result.replace(/:{3,4}/, '::');\n }\n\n return result;\n};\n\nconst ipv4Regex = /^(\\d{1,3}\\.){3,3}\\d{1,3}$/;\nconst ipv6Regex = /^(::)?(((\\d{1,3}\\.){3}(\\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i;\n\nip.isV4Format = function (ip) {\n return ipv4Regex.test(ip);\n};\n\nip.isV6Format = function (ip) {\n return ipv6Regex.test(ip);\n};\n\nfunction _normalizeFamily(family) {\n if (family === 4) {\n return 'ipv4';\n }\n if (family === 6) {\n return 'ipv6';\n }\n return family ? family.toLowerCase() : 'ipv4';\n}\n\nip.fromPrefixLen = function (prefixlen, family) {\n if (prefixlen > 32) {\n family = 'ipv6';\n } else {\n family = _normalizeFamily(family);\n }\n\n let len = 4;\n if (family === 'ipv6') {\n len = 16;\n }\n const buff = Buffer.alloc(len);\n\n for (let i = 0, n = buff.length; i < n; ++i) {\n let bits = 8;\n if (prefixlen < 8) {\n bits = prefixlen;\n }\n prefixlen -= bits;\n\n buff[i] = ~(0xff >> bits) & 0xff;\n }\n\n return ip.toString(buff);\n};\n\nip.mask = function (addr, mask) {\n addr = ip.toBuffer(addr);\n mask = ip.toBuffer(mask);\n\n const result = Buffer.alloc(Math.max(addr.length, mask.length));\n\n // Same protocol - do bitwise and\n let i;\n if (addr.length === mask.length) {\n for (i = 0; i < addr.length; i++) {\n result[i] = addr[i] & mask[i];\n }\n } else if (mask.length === 4) {\n // IPv6 address and IPv4 mask\n // (Mask low bits)\n for (i = 0; i < mask.length; i++) {\n result[i] = addr[addr.length - 4 + i] & mask[i];\n }\n } else {\n // IPv6 mask and IPv4 addr\n for (i = 0; i < result.length - 6; i++) {\n result[i] = 0;\n }\n\n // ::ffff:ipv4\n result[10] = 0xff;\n result[11] = 0xff;\n for (i = 0; i < addr.length; i++) {\n result[i + 12] = addr[i] & mask[i + 12];\n }\n i += 12;\n }\n for (; i < result.length; i++) {\n result[i] = 0;\n }\n\n return ip.toString(result);\n};\n\nip.cidr = function (cidrString) {\n const cidrParts = cidrString.split('/');\n\n const addr = cidrParts[0];\n if (cidrParts.length !== 2) {\n throw new Error(`invalid CIDR subnet: ${addr}`);\n }\n\n const mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10));\n\n return ip.mask(addr, mask);\n};\n\nip.subnet = function (addr, mask) {\n const networkAddress = ip.toLong(ip.mask(addr, mask));\n\n // Calculate the mask's length.\n const maskBuffer = ip.toBuffer(mask);\n let maskLength = 0;\n\n for (let i = 0; i < maskBuffer.length; i++) {\n if (maskBuffer[i] === 0xff) {\n maskLength += 8;\n } else {\n let octet = maskBuffer[i] & 0xff;\n while (octet) {\n octet = (octet << 1) & 0xff;\n maskLength++;\n }\n }\n }\n\n const numberOfAddresses = 2 ** (32 - maskLength);\n\n return {\n networkAddress: ip.fromLong(networkAddress),\n firstAddress: numberOfAddresses <= 2\n ? ip.fromLong(networkAddress)\n : ip.fromLong(networkAddress + 1),\n lastAddress: numberOfAddresses <= 2\n ? ip.fromLong(networkAddress + numberOfAddresses - 1)\n : ip.fromLong(networkAddress + numberOfAddresses - 2),\n broadcastAddress: ip.fromLong(networkAddress + numberOfAddresses - 1),\n subnetMask: mask,\n subnetMaskLength: maskLength,\n numHosts: numberOfAddresses <= 2\n ? numberOfAddresses : numberOfAddresses - 2,\n length: numberOfAddresses,\n contains(other) {\n return networkAddress === ip.toLong(ip.mask(other, mask));\n },\n };\n};\n\nip.cidrSubnet = function (cidrString) {\n const cidrParts = cidrString.split('/');\n\n const addr = cidrParts[0];\n if (cidrParts.length !== 2) {\n throw new Error(`invalid CIDR subnet: ${addr}`);\n }\n\n const mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10));\n\n return ip.subnet(addr, mask);\n};\n\nip.not = function (addr) {\n const buff = ip.toBuffer(addr);\n for (let i = 0; i < buff.length; i++) {\n buff[i] = 0xff ^ buff[i];\n }\n return ip.toString(buff);\n};\n\nip.or = function (a, b) {\n a = ip.toBuffer(a);\n b = ip.toBuffer(b);\n\n // same protocol\n if (a.length === b.length) {\n for (let i = 0; i < a.length; ++i) {\n a[i] |= b[i];\n }\n return ip.toString(a);\n\n // mixed protocols\n }\n let buff = a;\n let other = b;\n if (b.length > a.length) {\n buff = b;\n other = a;\n }\n\n const offset = buff.length - other.length;\n for (let i = offset; i < buff.length; ++i) {\n buff[i] |= other[i - offset];\n }\n\n return ip.toString(buff);\n};\n\nip.isEqual = function (a, b) {\n a = ip.toBuffer(a);\n b = ip.toBuffer(b);\n\n // Same protocol\n if (a.length === b.length) {\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n\n // Swap\n if (b.length === 4) {\n const t = b;\n b = a;\n a = t;\n }\n\n // a - IPv4, b - IPv6\n for (let i = 0; i < 10; i++) {\n if (b[i] !== 0) return false;\n }\n\n const word = b.readUInt16BE(10);\n if (word !== 0 && word !== 0xffff) return false;\n\n for (let i = 0; i < 4; i++) {\n if (a[i] !== b[i + 12]) return false;\n }\n\n return true;\n};\n\nip.isPrivate = function (addr) {\n // check loopback addresses first\n if (ip.isLoopback(addr)) {\n return true;\n }\n\n // ensure the ipv4 address is valid\n if (!ip.isV6Format(addr)) {\n const ipl = ip.normalizeToLong(addr);\n if (ipl < 0) {\n throw new Error('invalid ipv4 address');\n }\n // normalize the address for the private range checks that follow\n addr = ip.fromLong(ipl);\n }\n\n // check private ranges\n return /^(::f{4}:)?10\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$/i.test(addr)\n || /^(::f{4}:)?192\\.168\\.([0-9]{1,3})\\.([0-9]{1,3})$/i.test(addr)\n || /^(::f{4}:)?172\\.(1[6-9]|2\\d|30|31)\\.([0-9]{1,3})\\.([0-9]{1,3})$/i\n .test(addr)\n || /^(::f{4}:)?169\\.254\\.([0-9]{1,3})\\.([0-9]{1,3})$/i.test(addr)\n || /^f[cd][0-9a-f]{2}:/i.test(addr)\n || /^fe80:/i.test(addr)\n || /^::1$/.test(addr)\n || /^::$/.test(addr);\n};\n\nip.isPublic = function (addr) {\n return !ip.isPrivate(addr);\n};\n\nip.isLoopback = function (addr) {\n // If addr is an IPv4 address in long integer form (no dots and no colons), convert it\n if (!/\\./.test(addr) && !/:/.test(addr)) {\n addr = ip.fromLong(Number(addr));\n }\n\n return /^(::f{4}:)?127\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})/\n .test(addr)\n || /^0177\\./.test(addr)\n || /^0x7f\\./i.test(addr)\n || /^fe80::1$/i.test(addr)\n || /^::1$/.test(addr)\n || /^::$/.test(addr);\n};\n\nip.loopback = function (family) {\n //\n // Default to `ipv4`\n //\n family = _normalizeFamily(family);\n\n if (family !== 'ipv4' && family !== 'ipv6') {\n throw new Error('family must be ipv4 or ipv6');\n }\n\n return family === 'ipv4' ? '127.0.0.1' : 'fe80::1';\n};\n\n//\n// ### function address (name, family)\n// #### @name {string|'public'|'private'} **Optional** Name or security\n// of the network interface.\n// #### @family {ipv4|ipv6} **Optional** IP family of the address (defaults\n// to ipv4).\n//\n// Returns the address for the network interface on the current system with\n// the specified `name`:\n// * String: First `family` address of the interface.\n// If not found see `undefined`.\n// * 'public': the first public ip address of family.\n// * 'private': the first private ip address of family.\n// * undefined: First address with `ipv4` or loopback address `127.0.0.1`.\n//\nip.address = function (name, family) {\n const interfaces = os.networkInterfaces();\n\n //\n // Default to `ipv4`\n //\n family = _normalizeFamily(family);\n\n //\n // If a specific network interface has been named,\n // return the address.\n //\n if (name && name !== 'private' && name !== 'public') {\n const res = interfaces[name].filter((details) => {\n const itemFamily = _normalizeFamily(details.family);\n return itemFamily === family;\n });\n if (res.length === 0) {\n return undefined;\n }\n return res[0].address;\n }\n\n const all = Object.keys(interfaces).map((nic) => {\n //\n // Note: name will only be `public` or `private`\n // when this is called.\n //\n const addresses = interfaces[nic].filter((details) => {\n details.family = _normalizeFamily(details.family);\n if (details.family !== family || ip.isLoopback(details.address)) {\n return false;\n } if (!name) {\n return true;\n }\n\n return name === 'public' ? ip.isPrivate(details.address)\n : ip.isPublic(details.address);\n });\n\n return addresses.length ? addresses[0].address : undefined;\n }).filter(Boolean);\n\n return !all.length ? ip.loopback(family) : all[0];\n};\n\nip.toLong = function (ip) {\n let ipl = 0;\n ip.split('.').forEach((octet) => {\n ipl <<= 8;\n ipl += parseInt(octet);\n });\n return (ipl >>> 0);\n};\n\nip.fromLong = function (ipl) {\n return (`${ipl >>> 24}.${\n ipl >> 16 & 255}.${\n ipl >> 8 & 255}.${\n ipl & 255}`);\n};\n\nip.normalizeToLong = function (addr) {\n const parts = addr.split('.').map(part => {\n // Handle hexadecimal format\n if (part.startsWith('0x') || part.startsWith('0X')) {\n return parseInt(part, 16);\n }\n // Handle octal format (strictly digits 0-7 after a leading zero)\n else if (part.startsWith('0') && part !== '0' && /^[0-7]+$/.test(part)) {\n return parseInt(part, 8);\n }\n // Handle decimal format, reject invalid leading zeros\n else if (/^[1-9]\\d*$/.test(part) || part === '0') {\n return parseInt(part, 10);\n }\n // Return NaN for invalid formats to indicate parsing failure\n else {\n return NaN;\n }\n });\n\n if (parts.some(isNaN)) return -1; // Indicate error with -1\n\n let val = 0;\n const n = parts.length;\n\n switch (n) {\n case 1:\n val = parts[0];\n break;\n case 2:\n if (parts[0] > 0xff || parts[1] > 0xffffff) return -1;\n val = (parts[0] << 24) | (parts[1] & 0xffffff);\n break;\n case 3:\n if (parts[0] > 0xff || parts[1] > 0xff || parts[2] > 0xffff) return -1;\n val = (parts[0] << 24) | (parts[1] << 16) | (parts[2] & 0xffff);\n break;\n case 4:\n if (parts.some(part => part > 0xff)) return -1;\n val = (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8) | parts[3];\n break;\n default:\n return -1; // Error case\n }\n\n return val >>> 0;\n};\n",
|
|
6
6
|
"!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));",
|
|
7
|
-
"import { createServer } from 'net';\nimport ip from 'ip';\nimport type { THttpMethod } from 'root/HttpRequest.ts';\nimport HttpRequest, { HttpMethod } from 'root/HttpRequest.ts';\nimport type { TResponseBody } from 'root/HttpResponse.ts';\nimport HttpResponse, { HttpStatusCode } from 'root/HttpResponse.ts';\nimport { Context } from 'root/Context.utils.ts';\n\nexport type Enum<T> = T[keyof T];\n\ntype TResponseFunction = (ctx: Context) => TResponseBody<unknown>;\ntype TUndefinableResponseFunction = TResponseFunction |
|
|
7
|
+
"import { createServer } from 'net';\nimport ip from 'ip';\nimport type { THttpMethod } from 'root/HttpRequest.ts';\nimport HttpRequest, { HttpMethod } from 'root/HttpRequest.ts';\nimport type { TResponseBody } from 'root/HttpResponse.ts';\nimport HttpResponse, { HttpStatusCode } from 'root/HttpResponse.ts';\nimport { Context } from 'root/Context.utils.ts';\n\nexport type Enum<T> = T[keyof T];\n\ntype TResponseFunction = (ctx: Context) => TResponseBody<unknown>;\ntype TUndefinableResponseFunction = TResponseFunction | ((ctx: Context) => void);\n\ntype TErrorFunction = ((ctx: Context, error: unknown) => TResponseBody<unknown>) | ((ctx: Context, error: unknown) => void);\n\nexport interface IRoute {\n path: string;\n method: THttpMethod;\n handler: TResponseFunction;\n beforeHandler?: TResponseFunction | TUndefinableResponseFunction | undefined;\n afterHandler?: TUndefinableResponseFunction | undefined;\n beforeGroup?: TResponseFunction | TUndefinableResponseFunction | undefined;\n}\n\ninterface IMiddleware {\n fn: TResponseFunction | ((ctx: Context) => void);\n}\n\ninterface IExcludeMiddleware extends IMiddleware {\n paths: 'allButExcluded';\n excluded: Array<string>;\n}\n\ninterface IIncludeMiddleware extends IMiddleware {\n paths: Array<string>;\n excluded: [];\n}\n\ntype TMiddleware = IExcludeMiddleware | IIncludeMiddleware;\n\n/**\n *\n * incoming request -> route validation -> global middleware -> before route middleware -> route handler -> after route middleware -> response\n */\nclass YinzerFlow {\n private readonly backlog: number = 511;\n private readonly ip: string = ip.address();\n private readonly port: number = 5000;\n\n private readonly _routes: Array<IRoute> = [];\n\n private readonly middleware: Array<TMiddleware> = [];\n\n private readonly errorHandler: TErrorFunction = ({ response }: Context): TResponseBody<unknown> => {\n response.setStatus(HttpStatusCode.INTERNAL_SERVER_ERROR);\n return { success: false, message: 'Internal server error' };\n };\n\n constructor(options?: { port?: number; errorHandler?: TUndefinableResponseFunction }) {\n if (options) {\n if (options.port) this.port = options.port;\n if (options.errorHandler) {\n this.errorHandler = options.errorHandler;\n }\n }\n }\n\n /* eslint-disable-next-line @typescript-eslint/no-invalid-void-type */\n protected _handleMiddleware(route: IRoute, ctx: Context): TResponseBody<unknown> | void {\n let result = undefined;\n if (this.middleware.length) {\n for (const middleware of this.middleware) {\n if (middleware.paths === 'allButExcluded' && !middleware.excluded.includes(route.path)) {\n result = middleware.fn(ctx);\n if (result) {\n if (typeof result === 'object') result = JSON.stringify(result);\n return result;\n }\n }\n\n if (middleware.paths.includes(route.path)) {\n result = middleware.fn(ctx);\n if (result) {\n if (typeof result === 'object') result = JSON.stringify(result);\n\n return result;\n }\n }\n }\n }\n\n return void 0;\n }\n\n protected _handleRoute(route: IRoute, ctx: Context): TResponseBody<unknown> {\n let result = undefined;\n\n if (route.beforeGroup) {\n result = route.beforeGroup(ctx);\n if (result) {\n /**\n * If the beforeGroup returns a result we are going to return it and not continue with the route handler.\n * This is useful for things like authentication or throttling an entire group of routes.\n */\n return result;\n }\n }\n\n if (route.beforeHandler) {\n console.log('beforeHandler', route);\n result = route.beforeHandler(ctx);\n if (result) {\n /**\n * If the beforeHandler returns a result we are going to return it and not continue with the route handler.\n * This is useful for things like authentication or validation.\n */\n return result;\n }\n }\n\n /**\n * We aren't going to return the result of the route handler here because we want to allow for afterHandler to run,\n * just in case we need to modify the response in some way or something in the afterHandler function.\n */\n result = route.handler(ctx);\n\n if (route.afterHandler) route.afterHandler(ctx);\n\n return result;\n }\n\n protected _handleRequest(request: HttpRequest): HttpResponse {\n const ctx = new Context(request, new HttpResponse(request));\n\n /**\n * To speed up the response time we are going to ensure the route exists before worrying about any other logic.\n */\n const route = this._routes.find((r) => r.path === ctx.request.path && r.method === ctx.request.method);\n\n if (!route) {\n ctx.response.setStatus(HttpStatusCode.NOT_FOUND);\n ctx.response.setBody('404 Not Found');\n return ctx.response;\n }\n\n let result = undefined;\n\n result = this._handleMiddleware(route, ctx);\n\n if (result) {\n ctx.response.setBody(result);\n return ctx.response;\n }\n\n result = this._handleRoute(route, ctx);\n\n ctx.response.setBody(result ?? 'Server Error');\n return ctx.response;\n }\n\n protected _route(\n path: IRoute['path'],\n handler: IRoute['handler'],\n options: {\n method: IRoute['method'];\n beforeHandler?: IRoute['beforeHandler'];\n afterHandler?: IRoute['afterHandler'];\n } = {\n method: HttpMethod.GET,\n },\n ): IRoute {\n const { beforeHandler, afterHandler } = options;\n const route = {\n path,\n method: options.method,\n handler,\n beforeHandler: beforeHandler ?? undefined,\n afterHandler: afterHandler ?? undefined,\n };\n this._routes.push(route);\n return route;\n }\n\n get(path: IRoute['path'], handler: IRoute['handler'], options?: { beforeHandler?: IRoute['beforeHandler']; afterHandler?: IRoute['afterHandler'] }): IRoute {\n return this._route(path, handler, { method: HttpMethod.GET, ...options });\n }\n\n post(path: IRoute['path'], handler: IRoute['handler'], options?: { beforeHandler?: IRoute['beforeHandler']; afterHandler?: IRoute['afterHandler'] }): IRoute {\n return this._route(path, handler, { method: HttpMethod.POST, ...options });\n }\n\n put(path: IRoute['path'], handler: IRoute['handler'], options?: { beforeHandler?: IRoute['beforeHandler']; afterHandler?: IRoute['afterHandler'] }): IRoute {\n return this._route(path, handler, { method: HttpMethod.PUT, ...options });\n }\n\n delete(\n path: IRoute['path'],\n handler: IRoute['handler'],\n options?: { beforeHandler?: IRoute['beforeHandler']; afterHandler?: IRoute['afterHandler'] },\n ): IRoute {\n return this._route(path, handler, { method: HttpMethod.DELETE, ...options });\n }\n\n patch(\n path: IRoute['path'],\n handler: IRoute['handler'],\n options?: { beforeHandler?: IRoute['beforeHandler']; afterHandler?: IRoute['afterHandler'] },\n ): IRoute {\n return this._route(path, handler, { method: HttpMethod.PATCH, ...options });\n }\n\n group(prefix: IRoute['path'], routes: Array<IRoute>, options?: { beforeGroup: IRoute['beforeGroup'] }): void {\n for (const route of routes) this._routes.push({ ...route, path: `${prefix}${route.path}`, beforeGroup: options?.beforeGroup });\n }\n\n routes(routes: Array<IRoute>): void {\n for (const route of routes) this._routes.push(route);\n }\n\n beforeAll(\n fn: TMiddleware['fn'],\n options?:\n | { paths: IExcludeMiddleware['paths']; excluded: IExcludeMiddleware['excluded'] }\n | { paths: IIncludeMiddleware['paths']; excluded: IIncludeMiddleware['excluded'] },\n ): void {\n if (!options) {\n this.middleware.push({ paths: [], excluded: [], fn });\n return void 0;\n }\n\n if ('excluded' in options && Array.isArray(options.excluded)) {\n this.middleware.push({ paths: 'allButExcluded', excluded: options.excluded, fn });\n return void 0;\n }\n\n if ('paths' in options && Array.isArray(options.paths)) {\n this.middleware.push({ paths: options.paths, excluded: [], fn });\n return void 0;\n }\n }\n\n /**\n * This should be the last method called in the application. It will start the server and listen for incoming requests,\n * if you call this method before defining any routes or middleware those routes and middleware will not be defined.\n */\n listen(): void {\n const server = createServer().listen(this.port, this.ip, this.backlog);\n\n server.on('listening', () => {\n console.log(`Server listening on ${this.ip}:${this.port}`);\n });\n\n server.on('connection', (socket) => {\n socket.on('data', (buffer) => {\n const request = new HttpRequest(buffer.toString());\n try {\n const response = this._handleRequest(request);\n\n socket.write(response.formatHttpResponse());\n socket.end();\n } catch (error) {\n const ctx = new Context(request, new HttpResponse(request));\n ctx.response.setBody(this.errorHandler(ctx, error));\n socket.write(ctx.response.formatHttpResponse());\n socket.end();\n }\n });\n\n socket.on('error', (error) => {\n console.error('An error occurred with yinzerflow. Please open an issue on GitHub.', error);\n });\n });\n\n server.on('error', (error) => {\n console.error('An error occurred with yinzerflow. Please open an issue on GitHub.', error);\n });\n }\n}\n\nexport { YinzerFlow, HttpStatusCode, HttpMethod };\n",
|
|
8
8
|
"import type { Enum } from 'root/index.ts';\n\nexport const HttpMethod = <const>{\n DELETE: 'DELETE',\n GET: 'GET',\n POST: 'POST',\n PUT: 'PUT',\n PATCH: 'PATCH',\n HEAD: 'HEAD',\n OPTIONS: 'OPTIONS',\n};\nexport type THttpMethod = Enum<typeof HttpMethod>;\n\ninterface IRequest {\n protocol: string;\n method: THttpMethod;\n path: string;\n headers: Array<Record<string, string>>;\n body?: string;\n}\n\nexport default class HttpRequest {\n readonly protocol: IRequest['protocol'];\n readonly method: IRequest['method'];\n readonly path: IRequest['path'];\n readonly headers: IRequest['headers'];\n readonly body: IRequest['body'];\n\n constructor(request: string) {\n const { protocol, method, path, headers, body } = this._parseRequest(request);\n this.protocol = protocol;\n this.method = method;\n this.path = path;\n this.headers = headers;\n this.body = body;\n }\n\n private _parseRequest(request: string): IRequest {\n /**\n * Validate the request\n */\n if (!request) throw new Error('Invalid request');\n\n /**\n * The request is a string that contains the following information:\n * - The first line contains the request method, path, and protocol\n * - The headers are separated from the body by two newlines\n */\n const [firstLine, rest] = this._divideStringOn(request, '\\r\\n');\n const [method, path, protocol] = <[THttpMethod, string, string]>firstLine.split(' ', 3);\n /* eslint-disable-next-line prefer-const */\n let [headers, body] = this._divideStringOn(rest, '\\r\\n\\r\\n');\n\n const parsedHeaders = [];\n for (const header of headers.split('\\r\\n')) {\n if (!header.includes(': ')) throw new Error('Invalid header');\n const [key, value] = this._divideStringOn(header, ': ');\n if (!key || !value) throw new Error('Invalid header');\n parsedHeaders.push({ key, value });\n }\n\n /**\n * If the request method is GET or HEAD, the request body is empty\n * This is because GET and HEAD requests are used to retrieve information from the server\n * but do not send any data to the server\n */\n if (method === HttpMethod.GET || method === HttpMethod.HEAD) return { protocol, method, path, headers: parsedHeaders };\n return { protocol, method, path, headers: parsedHeaders, body };\n }\n\n private _divideStringOn(s: string, search: string): [string, string] {\n const index = s.indexOf(search);\n const first = s.slice(0, index);\n const rest = s.slice(index + search.length);\n return [first, rest];\n }\n}\n",
|
|
9
|
-
"import dayjs from 'dayjs';\nimport type { THttpMethod } from 'root/HttpRequest.ts';\nimport type HttpRequest from 'root/HttpRequest.ts';\nimport type { Enum } from 'root/index.ts';\nimport calculateContentLength from 'utils/calculateContentLength.utils.ts';\n\nexport const HttpStatus = <const>{\n OK: 'OK',\n CREATED: 'Created',\n NO_CONTENT: 'No Content',\n BAD_REQUEST: 'Bad Request',\n UNAUTHORIZED: 'Unauthorized',\n FORBIDDEN: 'Forbidden',\n NOT_FOUND: 'Not Found',\n METHOD_NOT_ALLOWED: 'Method Not Allowed',\n TOO_MANY_REQUESTS: 'Too Many Requests',\n INTERNAL_SERVER_ERROR: 'Internal Server Error',\n};\n\nexport type THttpStatus = Enum<typeof HttpStatus>;\n\nexport const HttpStatusCode = <const>{\n OK: 200,\n CREATED: 201,\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n METHOD_NOT_ALLOWED: 405,\n TOO_MANY_REQUESTS: 429,\n INTERNAL_SERVER_ERROR: 500,\n};\n\nexport type THttpStatusCode = Enum<typeof HttpStatusCode>;\n\ninterface IHeaders {\n /* eslint-disable @typescript-eslint/naming-convention */\n /** ======================================== Authentication ============================================ */\n /**\n * Contains the credentials to authenticate a user-agent with a server.\n */\n Authorization?: string;\n /**\n * Contains the credentials to authenticate a user-agent with a proxy server.\n */\n Proxy_Authorization?: string;\n /**\n * Defines the authentication method that should be used to access a resource.\n */\n 'WWW-Authenticate'?: string;\n /** ======================================== Caching ============================================ */\n /**\n * The time, in seconds, that the object has been in a proxy cache.\n */\n Age?: string;\n /**\n * Specifies directives for caching mechanisms in both requests and responses.\n */\n 'Cache-Control'?: string;\n /**\n * Clears browsing data (e.g. cookies, storage, cache) associated with the requesting website.\n */\n 'Clear-Site-Data'?: string;\n /**\n * The date/time after which the response is considered stale.\n */\n Expires?: string;\n /**\n * Specifies a set of rules that define how a URL's query parameters will affect cache matching.\n * These rules dictate whether the same URL with different URL parameters should be saved as separate browser cache entries.\n */\n 'No-Vary-Search'?: string;\n /** ======================================== Conditionals ============================================ */\n 'Last-Modified'?: string;\n ETag?: string;\n 'If-Match'?: string;\n 'If-None-Match'?: string;\n 'If-Modified-Since'?: string;\n 'If-Unmodified-Since'?: string;\n Vary?: string;\n /** ======================================== Connection management ============================================ */\n Connection?: string;\n 'Keep-Alive'?: string;\n /** ======================================== Content negotiation ============================================ */\n Accept?: string;\n 'Accept-Encoding'?: string;\n 'Accept-Language'?: string;\n /** ======================================== Controls ============================================ */\n Expect?: string;\n 'Max-Forwards'?: string;\n /** ======================================== Cookies ============================================ */\n Cookie?: string;\n 'Set-Cookie'?: string;\n /** ======================================== CORS ============================================ */\n 'Access-Control-Allow-Credentials'?: string;\n 'Access-Control-Allow-Methods'?: string;\n 'Access-Control-Allow-Headers'?: string;\n 'Access-Control-Allow-Origin'?: string;\n 'Access-Control-Expose-Headers'?: string;\n 'Access-Control-Max-Age'?: string;\n 'Access-Control-Request-Headers'?: string;\n 'Access-Control-Request-Method'?: string;\n Origin?: string;\n 'Timing-Allow-Origin'?: string;\n /** ======================================== Downloads ============================================ */\n 'Content-Disposition'?: string;\n /** ======================================== Message body information ============================================ */\n 'Content-Length'?: string;\n 'Content-Type'?: string | 'application/json' | 'text/html' | 'text/plain';\n 'Content-Encoding'?: string;\n 'Content-Language'?: string;\n 'Content-Location'?: string;\n /** ======================================== Proxies ============================================ */\n Forwarded?: string;\n Via?: string;\n /** ======================================== Redirects ============================================ */\n Location?: string;\n Refresh?: string;\n /** ======================================== Request context ============================================ */\n From?: string;\n Host?: string;\n Referer?: string;\n 'Referrer-Policy'?: string;\n 'User-Agent'?: string;\n /** ======================================== Response context ============================================ */\n Allow?: string;\n Server?: string;\n /** ======================================== Range requests ============================================ */\n Range?: string;\n 'Accept-Ranges'?: string;\n 'Content-Range'?: string;\n 'If-Range'?: string;\n /** ======================================== Security ============================================ */\n 'Cross-Origin-Embedder-Policy'?: string;\n 'Cross-Origin-Opener-Policy'?: string;\n 'Cross-Origin-Resource-Policy'?: string;\n 'Content-Security-Policy'?: string;\n 'Content-Security-Policy-Report-Only'?: string;\n 'Permissions-Policy'?: string;\n 'Strict-Transport-Security'?: string;\n 'Upgrade-Insecure-Requests'?: string;\n 'X-Content-Type-Options'?: string;\n 'X-Frames-Options'?: string;\n 'X-Permitted-Cross-Domain-Policies'?: string;\n 'X-Powered-By'?: string;\n 'X-XSS-Protection'?: string;\n /** ======================================== Server-sent events ============================================ */\n 'Report-To'?: string;\n /** ======================================== Transfer coding ============================================ */\n TE?: string;\n Trailer?: string;\n 'Transfer-Encoding'?: string;\n /** ======================================== Other ================================= */\n 'Alt-Svc'?: string;\n 'Alt-Used'?: string;\n Date?: string;\n Link?: string;\n 'Retry-After'?: string;\n 'Server-Timing'?: string;\n 'Service-Worker-Allowed'?: string;\n SourceMap?: string;\n Upgrade?: string;\n Priority?: string;\n /** ======================================== Privacy ================================= */\n /**\n * Indicates whether the user consents to a website or service selling or sharing their personal information with third parties.\n */\n 'Sec-GPC'?: string;\n /* eslint-enable @typescript-eslint/naming-convention */\n}\nexport type TResponseBody<T> = T;\n\ninterface IResponse {\n status: THttpStatus;\n statusCode: THttpStatusCode;\n protocol: string;\n method: THttpMethod;\n path: string;\n headers: IHeaders;\n body: TResponseBody<unknown>;\n}\n\nexport default class HttpResponse {\n protected readonly protocol: IResponse['protocol'];\n protected readonly method: IResponse['method'];\n protected readonly path: IResponse['path'];\n protected status: IResponse['status'];\n protected statusCode: IResponse['statusCode'];\n protected headers: IResponse['headers'] = {};\n protected body: IResponse['body'] = '';\n\n /**\n * Default status is 200 OK\n *\n * Default headers are:\n * - Server: YinzJS\n * - Content-Type: text/plain (If the content is an object, it will be stringified and the Content-Type will be application/json)\n * - Date: Current date in UTC\n * - Connection: keep-alive\n * - Keep-Alive: timeout=5, max=1000\n */\n constructor(request: HttpRequest) {\n this.method = request.method;\n this.path = request.path;\n this.protocol = request.protocol;\n this.statusCode = HttpStatusCode.OK;\n this.status = HttpStatus.OK;\n this.headers = { Server: 'YinzJS', Date: dayjs().format('ddd, DD MMM YYYY HH:mm:ss [GMT]'), Connection: 'keep-alive', 'Keep-Alive': 'timeout=5, max=1000' };\n }\n\n addHeaders(headers: Array<IResponse['headers']>): void {\n for (const header of headers) {\n this.headers = { ...this.headers, ...header };\n }\n }\n removeHeaders(headers: Array<keyof IHeaders>): void {\n for (const header of headers) delete this.headers[header];\n }\n setStatus(status: THttpStatusCode): void {\n switch (status) {\n case HttpStatusCode.OK:\n this.statusCode = HttpStatusCode.OK;\n this.status = HttpStatus.OK;\n break;\n case HttpStatusCode.CREATED:\n this.statusCode = HttpStatusCode.CREATED;\n this.status = HttpStatus.CREATED;\n break;\n case HttpStatusCode.BAD_REQUEST:\n this.statusCode = HttpStatusCode.BAD_REQUEST;\n this.status = HttpStatus.BAD_REQUEST;\n break;\n case HttpStatusCode.UNAUTHORIZED:\n this.statusCode = HttpStatusCode.UNAUTHORIZED;\n this.status = HttpStatus.UNAUTHORIZED;\n break;\n case HttpStatusCode.FORBIDDEN:\n this.statusCode = HttpStatusCode.FORBIDDEN;\n this.status = HttpStatus.FORBIDDEN;\n break;\n case HttpStatusCode.NOT_FOUND:\n this.statusCode = HttpStatusCode.NOT_FOUND;\n this.status = HttpStatus.NOT_FOUND;\n break;\n case HttpStatusCode.METHOD_NOT_ALLOWED:\n this.statusCode = HttpStatusCode.METHOD_NOT_ALLOWED;\n this.status = HttpStatus.METHOD_NOT_ALLOWED;\n break;\n case HttpStatusCode.TOO_MANY_REQUESTS:\n this.statusCode = HttpStatusCode.TOO_MANY_REQUESTS;\n this.status = HttpStatus.TOO_MANY_REQUESTS;\n break;\n case HttpStatusCode.INTERNAL_SERVER_ERROR:\n this.statusCode = HttpStatusCode.INTERNAL_SERVER_ERROR;\n this.status = HttpStatus.INTERNAL_SERVER_ERROR;\n break;\n default:\n throw new Error('Invalid status or status argument not set');\n }\n }\n\n setBody(body: TResponseBody<unknown>): void {\n this.body = body;\n\n if (typeof body === 'object') {\n this.addHeaders([{ 'Content-Type': 'application/json', 'Content-Length': String(calculateContentLength(JSON.stringify(body))) }]);\n }\n\n if (typeof body === 'string' && body.includes('<html>')) {\n this.addHeaders([{ 'Content-Type': 'text/html', 'Content-Length': String(calculateContentLength(body)) }]);\n }\n\n if (typeof body === 'string') {\n this.addHeaders([{ 'Content-Type': 'text/plain', 'Content-Length': String(calculateContentLength(body)) }]);\n }\n }\n\n formatHttpResponse(): string {\n let { body } = this;\n if (typeof body === 'object') body = JSON.stringify(this.body);\n\n const formattedHeaders = Object.entries(this.headers)\n .map(([key, value]) => `${key}: ${value}`)\n .join('\\r\\n');\n\n return `HTTP/1.1 ${this.statusCode} ${this.status}\\r\\n${formattedHeaders}\\r\\n\\r\\n${String(body)}`;\n }\n}\n",
|
|
9
|
+
"import dayjs from 'dayjs';\nimport type { THttpMethod } from 'root/HttpRequest.ts';\nimport type HttpRequest from 'root/HttpRequest.ts';\nimport type { Enum } from 'root/index.ts';\nimport calculateContentLength from 'utils/calculateContentLength.utils.ts';\n\nexport const HttpStatus = <const>{\n OK: 'OK',\n CREATED: 'Created',\n NO_CONTENT: 'No Content',\n BAD_REQUEST: 'Bad Request',\n UNAUTHORIZED: 'Unauthorized',\n FORBIDDEN: 'Forbidden',\n NOT_FOUND: 'Not Found',\n METHOD_NOT_ALLOWED: 'Method Not Allowed',\n TOO_MANY_REQUESTS: 'Too Many Requests',\n INTERNAL_SERVER_ERROR: 'Internal Server Error',\n};\n\nexport type THttpStatus = Enum<typeof HttpStatus>;\n\nexport const HttpStatusCode = <const>{\n OK: 200,\n CREATED: 201,\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n METHOD_NOT_ALLOWED: 405,\n TOO_MANY_REQUESTS: 429,\n INTERNAL_SERVER_ERROR: 500,\n};\n\nexport type THttpStatusCode = Enum<typeof HttpStatusCode>;\n\ninterface IHeaders {\n /* eslint-disable @typescript-eslint/naming-convention */\n /** ======================================== Authentication ============================================ */\n /**\n * Contains the credentials to authenticate a user-agent with a server.\n */\n Authorization?: string;\n /**\n * Contains the credentials to authenticate a user-agent with a proxy server.\n */\n Proxy_Authorization?: string;\n /**\n * Defines the authentication method that should be used to access a resource.\n */\n 'WWW-Authenticate'?: string;\n /** ======================================== Caching ============================================ */\n /**\n * The time, in seconds, that the object has been in a proxy cache.\n */\n Age?: string;\n /**\n * Specifies directives for caching mechanisms in both requests and responses.\n */\n 'Cache-Control'?: string;\n /**\n * Clears browsing data (e.g. cookies, storage, cache) associated with the requesting website.\n */\n 'Clear-Site-Data'?: string;\n /**\n * The date/time after which the response is considered stale.\n */\n Expires?: string;\n /**\n * Specifies a set of rules that define how a URL's query parameters will affect cache matching.\n * These rules dictate whether the same URL with different URL parameters should be saved as separate browser cache entries.\n */\n 'No-Vary-Search'?: string;\n /** ======================================== Conditionals ============================================ */\n 'Last-Modified'?: string;\n ETag?: string;\n 'If-Match'?: string;\n 'If-None-Match'?: string;\n 'If-Modified-Since'?: string;\n 'If-Unmodified-Since'?: string;\n Vary?: string;\n /** ======================================== Connection management ============================================ */\n Connection?: string;\n 'Keep-Alive'?: string;\n /** ======================================== Content negotiation ============================================ */\n Accept?: string;\n 'Accept-Encoding'?: string;\n 'Accept-Language'?: string;\n /** ======================================== Controls ============================================ */\n Expect?: string;\n 'Max-Forwards'?: string;\n /** ======================================== Cookies ============================================ */\n Cookie?: string;\n 'Set-Cookie'?: string;\n /** ======================================== CORS ============================================ */\n 'Access-Control-Allow-Credentials'?: string;\n 'Access-Control-Allow-Methods'?: string;\n 'Access-Control-Allow-Headers'?: string;\n 'Access-Control-Allow-Origin'?: string;\n 'Access-Control-Expose-Headers'?: string;\n 'Access-Control-Max-Age'?: string;\n 'Access-Control-Request-Headers'?: string;\n 'Access-Control-Request-Method'?: string;\n Origin?: string;\n 'Timing-Allow-Origin'?: string;\n /** ======================================== Downloads ============================================ */\n 'Content-Disposition'?: string;\n /** ======================================== Message body information ============================================ */\n 'Content-Length'?: string;\n 'Content-Type'?: string | 'application/json' | 'text/html' | 'text/plain';\n 'Content-Encoding'?: string;\n 'Content-Language'?: string;\n 'Content-Location'?: string;\n /** ======================================== Proxies ============================================ */\n Forwarded?: string;\n Via?: string;\n /** ======================================== Redirects ============================================ */\n Location?: string;\n Refresh?: string;\n /** ======================================== Request context ============================================ */\n From?: string;\n Host?: string;\n Referer?: string;\n 'Referrer-Policy'?: string;\n 'User-Agent'?: string;\n /** ======================================== Response context ============================================ */\n Allow?: string;\n Server?: string;\n /** ======================================== Range requests ============================================ */\n Range?: string;\n 'Accept-Ranges'?: string;\n 'Content-Range'?: string;\n 'If-Range'?: string;\n /** ======================================== Security ============================================ */\n 'Cross-Origin-Embedder-Policy'?: string;\n 'Cross-Origin-Opener-Policy'?: string;\n 'Cross-Origin-Resource-Policy'?: string;\n 'Content-Security-Policy'?: string;\n 'Content-Security-Policy-Report-Only'?: string;\n 'Permissions-Policy'?: string;\n 'Strict-Transport-Security'?: string;\n 'Upgrade-Insecure-Requests'?: string;\n 'X-Content-Type-Options'?: string;\n 'X-Frames-Options'?: string;\n 'X-Permitted-Cross-Domain-Policies'?: string;\n 'X-Powered-By'?: string;\n 'X-XSS-Protection'?: string;\n /** ======================================== Server-sent events ============================================ */\n 'Report-To'?: string;\n /** ======================================== Transfer coding ============================================ */\n TE?: string;\n Trailer?: string;\n 'Transfer-Encoding'?: string;\n /** ======================================== Other ================================= */\n 'Alt-Svc'?: string;\n 'Alt-Used'?: string;\n Date?: string;\n Link?: string;\n 'Retry-After'?: string;\n 'Server-Timing'?: string;\n 'Service-Worker-Allowed'?: string;\n SourceMap?: string;\n Upgrade?: string;\n Priority?: string;\n /** ======================================== Privacy ================================= */\n /**\n * Indicates whether the user consents to a website or service selling or sharing their personal information with third parties.\n */\n 'Sec-GPC'?: string;\n /* eslint-enable @typescript-eslint/naming-convention */\n}\nexport type TResponseBody<T> = T;\n\ninterface IResponse {\n status: THttpStatus;\n statusCode: THttpStatusCode;\n protocol: string;\n method: THttpMethod;\n path: string;\n headers: IHeaders;\n body: TResponseBody<unknown>;\n}\n\nexport default class HttpResponse {\n protected readonly protocol: IResponse['protocol'];\n protected readonly method: IResponse['method'];\n protected readonly path: IResponse['path'];\n protected status: IResponse['status'];\n protected statusCode: IResponse['statusCode'];\n protected headers: IResponse['headers'] = {};\n protected body: IResponse['body'] = '';\n\n /**\n * Default status is 200 OK\n *\n * Default headers are:\n * - Server: YinzerFlow\n * - Content-Type: text/plain (If the content is an object, it will be stringified and the Content-Type will be application/json)\n * - Date: Current date in UTC\n * - Connection: keep-alive\n * - Keep-Alive: timeout=5, max=1000\n */\n constructor(request: HttpRequest) {\n this.method = request.method;\n this.path = request.path;\n this.protocol = request.protocol;\n this.statusCode = HttpStatusCode.OK;\n this.status = HttpStatus.OK;\n this.headers = {\n Date: dayjs().format('ddd, DD MMM YYYY HH:mm:ss [GMT]'),\n Connection: 'keep-alive',\n 'Keep-Alive': 'timeout=5, max=1000',\n };\n }\n\n addHeaders(headers: Array<IResponse['headers']>): void {\n for (const header of headers) {\n this.headers = { ...this.headers, ...header };\n }\n }\n removeHeaders(headers: Array<keyof IHeaders>): void {\n for (const header of headers) delete this.headers[header];\n }\n setStatus(status: THttpStatusCode): void {\n switch (status) {\n case HttpStatusCode.OK:\n this.statusCode = HttpStatusCode.OK;\n this.status = HttpStatus.OK;\n break;\n case HttpStatusCode.CREATED:\n this.statusCode = HttpStatusCode.CREATED;\n this.status = HttpStatus.CREATED;\n break;\n case HttpStatusCode.BAD_REQUEST:\n this.statusCode = HttpStatusCode.BAD_REQUEST;\n this.status = HttpStatus.BAD_REQUEST;\n break;\n case HttpStatusCode.UNAUTHORIZED:\n this.statusCode = HttpStatusCode.UNAUTHORIZED;\n this.status = HttpStatus.UNAUTHORIZED;\n break;\n case HttpStatusCode.FORBIDDEN:\n this.statusCode = HttpStatusCode.FORBIDDEN;\n this.status = HttpStatus.FORBIDDEN;\n break;\n case HttpStatusCode.NOT_FOUND:\n this.statusCode = HttpStatusCode.NOT_FOUND;\n this.status = HttpStatus.NOT_FOUND;\n break;\n case HttpStatusCode.METHOD_NOT_ALLOWED:\n this.statusCode = HttpStatusCode.METHOD_NOT_ALLOWED;\n this.status = HttpStatus.METHOD_NOT_ALLOWED;\n break;\n case HttpStatusCode.TOO_MANY_REQUESTS:\n this.statusCode = HttpStatusCode.TOO_MANY_REQUESTS;\n this.status = HttpStatus.TOO_MANY_REQUESTS;\n break;\n case HttpStatusCode.INTERNAL_SERVER_ERROR:\n this.statusCode = HttpStatusCode.INTERNAL_SERVER_ERROR;\n this.status = HttpStatus.INTERNAL_SERVER_ERROR;\n break;\n default:\n throw new Error('Invalid status or status argument not set');\n }\n }\n\n setBody(body: TResponseBody<unknown>): void {\n this.body = body;\n\n if (typeof body === 'object') {\n this.addHeaders([{ 'Content-Type': 'application/json', 'Content-Length': String(calculateContentLength(JSON.stringify(body))) }]);\n }\n\n if (typeof body === 'string' && body.includes('<html>')) {\n this.addHeaders([{ 'Content-Type': 'text/html', 'Content-Length': String(calculateContentLength(body)) }]);\n return void 0;\n }\n\n if (typeof body === 'string') {\n this.addHeaders([{ 'Content-Type': 'text/plain', 'Content-Length': String(calculateContentLength(body)) }]);\n }\n }\n\n formatHttpResponse(): string {\n let { body } = this;\n if (typeof body === 'object') body = JSON.stringify(this.body);\n\n const formattedHeaders = Object.entries(this.headers)\n .map(([key, value]) => `${key}: ${value}`)\n .join('\\r\\n');\n\n return `HTTP/1.1 ${this.statusCode} ${this.status}\\r\\n${formattedHeaders}\\r\\n\\r\\n${String(body)}`;\n }\n}\n",
|
|
10
10
|
"export default function calculateContentLength(body: string): number {\n return Buffer.byteLength(body);\n}\n",
|
|
11
11
|
"import type HttpRequest from 'root/HttpRequest.ts';\nimport type HttpResponse from 'root/HttpResponse.ts';\n\nexport type TRequestBody<T> = Record<string, T>;\n\nexport class Context {\n request: HttpRequest;\n response: HttpResponse;\n\n constructor(request: HttpRequest, response: HttpResponse) {\n this.request = request;\n this.response = response;\n }\n}\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": "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",
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "AA3886141584200964756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yinzerflow",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"author": "Patrick Rizzardi <patrick@redact.digital> (https://redact.digital)",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"homepage": "https://github.com/
|
|
6
|
+
"homepage": "https://github.com/yinzers/YinzerFlow.git",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/
|
|
9
|
+
"url": "git+https://github.com/yinzers/YinzerFlow.git"
|
|
10
10
|
},
|
|
11
11
|
"description": "A simple, fast, and lightweight web framework for Node and Bun",
|
|
12
12
|
"keywords": [
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"framework",
|
|
21
21
|
"node",
|
|
22
22
|
"bun",
|
|
23
|
-
"
|
|
23
|
+
"yinzerflow"
|
|
24
24
|
],
|
|
25
25
|
"types": "index.d.ts",
|
|
26
26
|
"main": "index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"test:production": "bun test --timeout 20 --rerun-each 10 --bail 10",
|
|
31
31
|
"clean": "rm -rf lib && rm -rf storage && echo 'Done.'",
|
|
32
32
|
"build": "bun clean; bun build.ts",
|
|
33
|
-
"start": "bun --watch
|
|
33
|
+
"start": "bun --watch local/index.ts",
|
|
34
34
|
"lint": "eslint . --fix --quiet --color --cache",
|
|
35
35
|
"lint:format": "prettier --check .",
|
|
36
36
|
"lint:spelling": "cspell . --no-progress --unique",
|
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@eslint/compat": "^1.1.1",
|
|
46
46
|
"@types/ip": "^1.1.3",
|
|
47
|
-
"@yinzjs/yinzjs": "^0.1.0",
|
|
48
47
|
"bun-plugin-dts": "^0.2.3",
|
|
49
48
|
"bun-types": "^1.0.3",
|
|
50
49
|
"cspell": "^6.31.2",
|
|
@@ -55,7 +54,8 @@
|
|
|
55
54
|
"gzip-size-cli": "^5.1.0",
|
|
56
55
|
"prettier": "^3.0.0",
|
|
57
56
|
"typescript": "^5.1.6",
|
|
58
|
-
"typescript-eslint": "^7.16.0"
|
|
57
|
+
"typescript-eslint": "^7.16.0",
|
|
58
|
+
"yinzerflow": "^0.1.0"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
61
|
"typescript": "^5.0.0"
|