yinzerflow 0.1.2 → 0.1.4

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 (4) hide show
  1. package/index.d.ts +37 -29
  2. package/index.js +163 -30
  3. package/index.js.map +11 -6
  4. package/package.json +4 -4
package/index.d.ts CHANGED
@@ -1,30 +1,3 @@
1
- export declare const HttpMethod: {
2
- readonly DELETE: "DELETE";
3
- readonly GET: "GET";
4
- readonly POST: "POST";
5
- readonly PUT: "PUT";
6
- readonly PATCH: "PATCH";
7
- readonly HEAD: "HEAD";
8
- readonly OPTIONS: "OPTIONS";
9
- };
10
- export type THttpMethod = Enum<typeof HttpMethod>;
11
- export interface IRequest {
12
- protocol: string;
13
- method: THttpMethod;
14
- path: string;
15
- headers: Array<Record<string, string>>;
16
- body?: string;
17
- }
18
- export declare class HttpRequest {
19
- readonly protocol: IRequest["protocol"];
20
- readonly method: IRequest["method"];
21
- readonly path: IRequest["path"];
22
- readonly headers: IRequest["headers"];
23
- readonly body: IRequest["body"];
24
- constructor(request: string);
25
- private _parseRequest;
26
- private _divideStringOn;
27
- }
28
1
  declare const HttpStatus: {
29
2
  readonly OK: "OK";
30
3
  readonly CREATED: "Created";
@@ -161,6 +134,40 @@ export declare class HttpResponse {
161
134
  setBody(body: TResponseBody<unknown>): void;
162
135
  formatHttpResponse(): string;
163
136
  }
137
+ export declare const HttpMethod: {
138
+ readonly DELETE: "DELETE";
139
+ readonly GET: "GET";
140
+ readonly POST: "POST";
141
+ readonly PUT: "PUT";
142
+ readonly PATCH: "PATCH";
143
+ readonly HEAD: "HEAD";
144
+ readonly OPTIONS: "OPTIONS";
145
+ };
146
+ export type THttpMethod = Enum<typeof HttpMethod>;
147
+ export type TRequestBody<T = unknown> = Record<string, T>;
148
+ export type TRequestQuery<T = unknown> = Record<string, T>;
149
+ export type TRequestParams<T = unknown> = Record<string, T>;
150
+ export interface IRequest {
151
+ protocol: string;
152
+ method: THttpMethod;
153
+ path: string;
154
+ headers: IHeaders;
155
+ body: TRequestBody | object;
156
+ query: TRequestQuery | object;
157
+ params: TRequestParams | object;
158
+ }
159
+ export declare class HttpRequest {
160
+ readonly protocol: IRequest["protocol"];
161
+ readonly method: IRequest["method"];
162
+ readonly path: IRequest["path"];
163
+ readonly headers: IRequest["headers"];
164
+ readonly body: IRequest["body"];
165
+ readonly query: IRequest["query"];
166
+ params: IRequest["params"];
167
+ constructor(request: string);
168
+ private _parseRequest;
169
+ parseParams(route: IRoute): void;
170
+ }
164
171
  export declare class Context {
165
172
  request: HttpRequest;
166
173
  response: HttpResponse;
@@ -169,6 +176,7 @@ export declare class Context {
169
176
  export type Enum<T> = T[keyof T];
170
177
  export type TResponseFunction = (ctx: Context) => TResponseBody<unknown>;
171
178
  export type TUndefinableResponseFunction = TResponseFunction | ((ctx: Context) => void);
179
+ export type TErrorFunction = ((ctx: Context, error: unknown) => TResponseBody<unknown>) | ((ctx: Context, error: unknown) => void);
172
180
  export interface IRoute {
173
181
  path: string;
174
182
  method: THttpMethod;
@@ -199,11 +207,11 @@ export export declare class YinzerFlow {
199
207
  private readonly errorHandler;
200
208
  constructor(options?: {
201
209
  port?: number;
202
- errorHandler?: TUndefinableResponseFunction;
210
+ errorHandler?: TErrorFunction;
203
211
  });
204
212
  protected _handleMiddleware(route: IRoute, ctx: Context): TResponseBody<unknown> | void;
205
213
  protected _handleRoute(route: IRoute, ctx: Context): TResponseBody<unknown>;
206
- protected _handleRequest(request: HttpRequest): HttpResponse;
214
+ protected _handleRequest(request: HttpRequest, route: IRoute): HttpResponse;
207
215
  protected _route(path: IRoute["path"], handler: IRoute["handler"], options?: {
208
216
  method: IRoute["method"];
209
217
  beforeHandler?: IRoute["beforeHandler"];
package/index.js CHANGED
@@ -667,6 +667,119 @@ var require_dayjs_min = __commonJS((exports, module) => {
667
667
  var import_ip = __toESM(require_ip(), 1);
668
668
  import {createServer} from "net";
669
669
 
670
+ // app/utils/divideString.utils.ts
671
+ var divideString_utils_default = (str, separator) => {
672
+ const index = str.indexOf(separator);
673
+ const first = str.slice(0, index);
674
+ const rest = str.slice(index + separator.length);
675
+ return [first, rest];
676
+ };
677
+
678
+ // app/utils/parseRequestBody.utils.ts
679
+ var parseRequestBody_utils_default = (headers, body) => {
680
+ if (!headers["Content-Type"])
681
+ throw new Error("Missing Content-Type header");
682
+ let parsedBody = {};
683
+ if (headers["Content-Type"] === "application/json")
684
+ parsedBody = handleApplicationJson(body);
685
+ if (headers["Content-Type"] === "application/x-www-form-urlencoded")
686
+ parsedBody = handleXwwwFormUrlencoded(body);
687
+ if (headers["Content-Type"].includes("multipart/form-data"))
688
+ parsedBody = handleMultipartFormData(body);
689
+ return parsedBody;
690
+ };
691
+ var handleApplicationJson = (body) => {
692
+ try {
693
+ return JSON.parse(body);
694
+ } catch (_error) {
695
+ throw new Error("Invalid body");
696
+ }
697
+ };
698
+ var handleXwwwFormUrlencoded = (body) => {
699
+ const parsedBody = {};
700
+ for (const pair of body.split("&")) {
701
+ if (!pair)
702
+ continue;
703
+ const [key, value] = pair.split("=", 2);
704
+ if (!key || !value)
705
+ continue;
706
+ Object.assign(parsedBody, { [key]: value });
707
+ }
708
+ return parsedBody;
709
+ };
710
+ var handleMultipartFormData = (body) => {
711
+ const parsedBody = {};
712
+ if (body.includes("Content-Type"))
713
+ throw new Error("Body type not supported yet");
714
+ const parts = body.split("Content-Disposition: form-data;");
715
+ for (const part of parts) {
716
+ if (!part || !part.includes("name"))
717
+ continue;
718
+ let [, key] = part.split('name="', 2);
719
+ if (!key)
720
+ continue;
721
+ [key] = key.split('"', 1);
722
+ if (!key)
723
+ continue;
724
+ let [, value] = part.split("\r\n\r\n", 2);
725
+ if (!value)
726
+ continue;
727
+ value = value.slice(0, value.indexOf("\r\n"));
728
+ Object.assign(parsedBody, { [key]: value });
729
+ }
730
+ return parsedBody;
731
+ };
732
+
733
+ // app/utils/parseRequestHeaders.utils.ts
734
+ var parseRequestHeaders_utils_default = (headers) => {
735
+ const parsedHeaders = {};
736
+ for (const header of headers.split("\r\n")) {
737
+ if (!header.includes(": "))
738
+ throw new Error("Invalid header");
739
+ const [key, value] = divideString_utils_default(header, ": ");
740
+ if (!key || !value)
741
+ throw new Error("Invalid header");
742
+ Object.assign(parsedHeaders, { [key]: value });
743
+ }
744
+ return parsedHeaders;
745
+ };
746
+
747
+ // app/utils/parseRequestParams.utils.ts
748
+ var parseRequestParams_utils_default = (path, route) => {
749
+ const parsedParams = {};
750
+ const pathParts = path.split("/");
751
+ const routeParts = route.path.split("/");
752
+ for (let i = 0;i < routeParts.length; i++) {
753
+ if (routeParts[i]?.startsWith(":")) {
754
+ const key = routeParts[i]?.substring(1);
755
+ const value = pathParts[i];
756
+ if (!key || !value)
757
+ continue;
758
+ parsedParams[key] = value;
759
+ }
760
+ }
761
+ return parsedParams;
762
+ };
763
+
764
+ // app/utils/parseRequestQuery.utils.ts
765
+ var parseRequestQuery_utils_default = (path) => {
766
+ const parsedQuery = {};
767
+ const queryIndex = path.indexOf("?");
768
+ if (queryIndex === -1)
769
+ return parsedQuery;
770
+ const queryString = path.slice(queryIndex + 1);
771
+ const queryParts = queryString.split("&");
772
+ for (const queryPart of queryParts) {
773
+ if (!queryPart.includes("="))
774
+ throw new Error("Invalid query");
775
+ const [key, value] = queryPart.split("=");
776
+ if (!key || !value)
777
+ throw new Error("Invalid query");
778
+ Object.assign(parsedQuery, { [key]: value });
779
+ }
780
+ return parsedQuery;
781
+ };
782
+
670
783
  // app/HttpRequest.ts
671
784
  var HttpMethod = {
672
785
  DELETE: "DELETE",
@@ -684,38 +797,36 @@ class HttpRequest {
684
797
  path;
685
798
  headers;
686
799
  body;
800
+ query;
801
+ params;
687
802
  constructor(request) {
688
- const { protocol, method, path, headers, body } = this._parseRequest(request);
803
+ const { protocol, method, path, headers, body, query, params } = this._parseRequest(request);
689
804
  this.protocol = protocol;
690
805
  this.method = method;
691
806
  this.path = path;
692
807
  this.headers = headers;
693
808
  this.body = body;
809
+ this.query = query;
810
+ this.params = params;
694
811
  }
695
812
  _parseRequest(request) {
696
813
  if (!request)
697
814
  throw new Error("Invalid request");
698
- const [firstLine, rest] = this._divideStringOn(request, "\r\n");
815
+ const [firstLine, rest] = divideString_utils_default(request, "\r\n");
699
816
  const [method, path, protocol] = firstLine.split(" ", 3);
700
- let [headers, body] = this._divideStringOn(rest, "\r\n\r\n");
701
- const parsedHeaders = [];
702
- for (const header of headers.split("\r\n")) {
703
- if (!header.includes(": "))
704
- throw new Error("Invalid header");
705
- const [key, value] = this._divideStringOn(header, ": ");
706
- if (!key || !value)
707
- throw new Error("Invalid header");
708
- parsedHeaders.push({ key, value });
817
+ const [headers, body] = divideString_utils_default(rest, "\r\n\r\n");
818
+ const parsedHeaders = parseRequestHeaders_utils_default(headers);
819
+ const parsedQuery = parseRequestQuery_utils_default(path);
820
+ let parsedBody = {};
821
+ if (body)
822
+ parsedBody = parseRequestBody_utils_default(parsedHeaders, body);
823
+ if (method === HttpMethod.GET || method === HttpMethod.HEAD) {
824
+ return { protocol, method, path, headers: parsedHeaders, query: parsedQuery, params: {}, body: {} };
709
825
  }
710
- if (method === HttpMethod.GET || method === HttpMethod.HEAD)
711
- return { protocol, method, path, headers: parsedHeaders };
712
- return { protocol, method, path, headers: parsedHeaders, body };
826
+ return { protocol, method, path, headers: parsedHeaders, body: parsedBody, query: parsedQuery, params: {} };
713
827
  }
714
- _divideStringOn(s, search) {
715
- const index = s.indexOf(search);
716
- const first = s.slice(0, index);
717
- const rest = s.slice(index + search.length);
718
- return [first, rest];
828
+ parseParams(route) {
829
+ this.params = parseRequestParams_utils_default(this.path, route);
719
830
  }
720
831
  }
721
832
 
@@ -863,7 +974,8 @@ class YinzerFlow {
863
974
  port = 5000;
864
975
  _routes = [];
865
976
  middleware = [];
866
- errorHandler = ({ response }) => {
977
+ errorHandler = ({ response }, error) => {
978
+ console.error("Server error: \n", error);
867
979
  response.setStatus(HttpStatusCode.INTERNAL_SERVER_ERROR);
868
980
  return { success: false, message: "Internal server error" };
869
981
  };
@@ -909,7 +1021,6 @@ class YinzerFlow {
909
1021
  }
910
1022
  }
911
1023
  if (route.beforeHandler) {
912
- console.log("beforeHandler", route);
913
1024
  result = route.beforeHandler(ctx);
914
1025
  if (result) {
915
1026
  return result;
@@ -920,14 +1031,8 @@ class YinzerFlow {
920
1031
  route.afterHandler(ctx);
921
1032
  return result;
922
1033
  }
923
- _handleRequest(request) {
1034
+ _handleRequest(request, route) {
924
1035
  const ctx = new Context(request, new HttpResponse(request));
925
- const route = this._routes.find((r) => r.path === ctx.request.path && r.method === ctx.request.method);
926
- if (!route) {
927
- ctx.response.setStatus(HttpStatusCode.NOT_FOUND);
928
- ctx.response.setBody("404 Not Found");
929
- return ctx.response;
930
- }
931
1036
  let result = undefined;
932
1037
  result = this._handleMiddleware(route, ctx);
933
1038
  if (result) {
@@ -998,7 +1103,17 @@ class YinzerFlow {
998
1103
  socket.on("data", (buffer) => {
999
1104
  const request = new HttpRequest(buffer.toString());
1000
1105
  try {
1001
- const response = this._handleRequest(request);
1106
+ const route = findRoute(request, this._routes);
1107
+ if (!route) {
1108
+ const ctx = new Context(request, new HttpResponse(request));
1109
+ ctx.response.setStatus(HttpStatusCode.NOT_FOUND);
1110
+ ctx.response.setBody({ success: false, message: "Not found" });
1111
+ socket.write(ctx.response.formatHttpResponse());
1112
+ socket.end();
1113
+ return;
1114
+ }
1115
+ request.parseParams(route);
1116
+ const response = this._handleRequest(request, route);
1002
1117
  socket.write(response.formatHttpResponse());
1003
1118
  socket.end();
1004
1119
  } catch (error) {
@@ -1017,10 +1132,28 @@ class YinzerFlow {
1017
1132
  });
1018
1133
  }
1019
1134
  }
1135
+ var findRoute = (request, routes) => {
1136
+ const route = routes.find((r) => r.path === request.path && r.method === request.method);
1137
+ if (route)
1138
+ return route;
1139
+ return routes.find((r) => {
1140
+ const pathParts = r.path.split("/");
1141
+ const requestPathParts = request.path.split("/");
1142
+ if (pathParts.length !== requestPathParts.length)
1143
+ return false;
1144
+ for (let i = 0;i < pathParts.length; i++) {
1145
+ if (pathParts[i]?.startsWith(":"))
1146
+ continue;
1147
+ if (pathParts[i] !== requestPathParts[i])
1148
+ return false;
1149
+ }
1150
+ return true;
1151
+ });
1152
+ };
1020
1153
  export {
1021
1154
  YinzerFlow,
1022
1155
  HttpStatusCode,
1023
1156
  HttpMethod
1024
1157
  };
1025
1158
 
1026
- //# debugId=AA3886141584200964756E2164756E21
1159
+ //# debugId=CA4381AA642912E964756E2164756E21
package/index.js.map CHANGED
@@ -1,16 +1,21 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/ip/lib/ip.js", "../node_modules/dayjs/dayjs.min.js", "../app/index.ts", "../app/HttpRequest.ts", "../app/HttpResponse.ts", "../app/utils/calculateContentLength.utils.ts", "../app/Context.utils.ts"],
3
+ "sources": ["../node_modules/ip/lib/ip.js", "../node_modules/dayjs/dayjs.min.js", "../app/index.ts", "../app/utils/divideString.utils.ts", "../app/utils/parseRequestBody.utils.ts", "../app/utils/parseRequestHeaders.utils.ts", "../app/utils/parseRequestParams.utils.ts", "../app/utils/parseRequestQuery.utils.ts", "../app/HttpRequest.ts", "../app/HttpResponse.ts", "../app/utils/calculateContentLength.utils.ts", "../app/Context.utils.ts"],
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 | ((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
- "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: 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",
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\n// TODO - Write tests for this file\n\n// TODO - Write automation to ensure the version is updated in the package.json file before publishing\n// TODO - Write automation to publish to npm and also create a release in GitHub\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 }, error): TResponseBody<unknown> => {\n console.error('Server error: \\n', error);\n response.setStatus(HttpStatusCode.INTERNAL_SERVER_ERROR);\n return { success: false, message: 'Internal server error' };\n };\n\n constructor(options?: { port?: number; errorHandler?: TErrorFunction }) {\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 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, route: IRoute): HttpResponse {\n const ctx = new Context(request, new HttpResponse(request));\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 route = findRoute(request, this._routes);\n\n if (!route) {\n // TODO - Allow for a custom 404 handler to be defined\n const ctx = new Context(request, new HttpResponse(request));\n ctx.response.setStatus(HttpStatusCode.NOT_FOUND);\n ctx.response.setBody({ success: false, message: 'Not found' });\n socket.write(ctx.response.formatHttpResponse());\n socket.end();\n return;\n }\n\n request.parseParams(route);\n\n const response = this._handleRequest(request, route);\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\nconst findRoute = (request: HttpRequest, routes: Array<IRoute>): IRoute | undefined => {\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 = routes.find((r) => r.path === request.path && r.method === request.method);\n if (route) return route;\n\n /**\n * To save time we will only check for params if we don't find a route that matches exactly.\n *\n * It is possible for the route not to match exactly if the route has params in it.\n * So we are going to check for that here and if we don't find a route we will return undefined\n * and handle a 404 response in the listen method.\n */\n return routes.find((r) => {\n const pathParts = r.path.split('/');\n const requestPathParts = request.path.split('/');\n if (pathParts.length !== requestPathParts.length) return false;\n for (let i = 0; i < pathParts.length; i++) {\n if (pathParts[i]?.startsWith(':')) continue;\n if (pathParts[i] !== requestPathParts[i]) return false;\n }\n return true;\n });\n};\n",
8
+ "export default (str: string, separator: string): [string, string] => {\n const index = str.indexOf(separator);\n const first = str.slice(0, index);\n const rest = str.slice(index + separator.length);\n return [first, rest];\n};\n",
9
+ "import type { IRequest } from 'root/HttpRequest.ts';\n\nexport default (headers: IRequest['headers'], body: string): IRequest['body'] => {\n if (!headers['Content-Type']) throw new Error('Missing Content-Type header');\n\n let parsedBody: IRequest['body'] = {};\n if (headers['Content-Type'] === 'application/json') parsedBody = handleApplicationJson(body);\n\n if (headers['Content-Type'] === 'application/x-www-form-urlencoded') parsedBody = handleXwwwFormUrlencoded(body);\n\n if (headers['Content-Type'].includes('multipart/form-data')) parsedBody = handleMultipartFormData(body);\n\n return parsedBody;\n};\n\nconst handleApplicationJson = (body: string): IRequest['body'] => {\n try {\n return <IRequest['body']>JSON.parse(body);\n } catch (_error) {\n throw new Error('Invalid body');\n }\n};\n\nconst handleXwwwFormUrlencoded = (body: string): IRequest['body'] => {\n const parsedBody: IRequest['body'] = {};\n\n for (const pair of body.split('&')) {\n if (!pair) continue;\n const [key, value] = pair.split('=', 2);\n if (!key || !value) continue;\n Object.assign(parsedBody, { [key]: value });\n }\n\n return parsedBody;\n};\n\nconst handleMultipartFormData = (body: string): IRequest['body'] => {\n const parsedBody = {};\n\n if (body.includes('Content-Type')) throw new Error('Body type not supported yet');\n\n const parts = body.split('Content-Disposition: form-data;');\n for (const part of parts) {\n if (!part || !part.includes('name')) continue;\n let [, key] = part.split('name=\"', 2);\n if (!key) continue;\n [key] = key.split('\"', 1);\n if (!key) continue;\n\n let [, value] = part.split('\\r\\n\\r\\n', 2);\n if (!value) continue;\n value = value.slice(0, value.indexOf('\\r\\n'));\n\n Object.assign(parsedBody, { [key]: value });\n }\n\n return parsedBody;\n};\n",
10
+ "import type { IRequest } from 'root/HttpRequest.ts';\nimport divideStringUtils from 'utils/divideString.utils.ts';\n\nexport default (headers: string): IRequest['headers'] => {\n const parsedHeaders: IRequest['headers'] = {};\n\n for (const header of headers.split('\\r\\n')) {\n if (!header.includes(': ')) throw new Error('Invalid header');\n const [key, value] = divideStringUtils(header, ': ');\n if (!key || !value) throw new Error('Invalid header');\n\n Object.assign(parsedHeaders, { [key]: value });\n }\n\n return parsedHeaders;\n};\n",
11
+ "import type { IRequest } from 'root/HttpRequest.ts';\nimport type { IRoute } from 'root/index.ts';\n\n/**\n * path = /users/1\n * route.path: /users/:id\n */\nexport default (path: IRequest['path'], route: IRoute): IRequest['params'] => {\n const parsedParams: IRequest['params'] = {};\n const pathParts = path.split('/');\n const routeParts = route.path.split('/');\n\n for (let i = 0; i < routeParts.length; i++) {\n if (routeParts[i]?.startsWith(':')) {\n const key = routeParts[i]?.substring(1);\n const value = pathParts[i];\n if (!key || !value) continue;\n\n // @ts-expect-error - This is a valid assignment\n parsedParams[key] = value;\n }\n }\n\n return parsedParams;\n};\n",
12
+ "import type { IRequest } from 'root/HttpRequest.ts';\n\nexport default (path: IRequest['path']): IRequest['query'] => {\n const parsedQuery: IRequest['query'] = {};\n const queryIndex = path.indexOf('?');\n\n if (queryIndex === -1) return parsedQuery;\n\n const queryString = path.slice(queryIndex + 1);\n const queryParts = queryString.split('&');\n\n for (const queryPart of queryParts) {\n if (!queryPart.includes('=')) throw new Error('Invalid query');\n const [key, value] = queryPart.split('=');\n if (!key || !value) throw new Error('Invalid query');\n\n Object.assign(parsedQuery, { [key]: value });\n }\n\n return parsedQuery;\n};\n",
13
+ "import type { IHeaders } from 'root/HttpResponse.ts';\nimport type { Enum, IRoute } from 'root/index.ts';\nimport divideStringUtils from 'utils/divideString.utils.ts';\nimport parseRequestBodyUtils from 'utils/parseRequestBody.utils.ts';\nimport parseRequestHeadersUtils from 'utils/parseRequestHeaders.utils.ts';\nimport parseRequestParamsUtils from 'utils/parseRequestParams.utils.ts';\nimport parseRequestQueryUtils from 'utils/parseRequestQuery.utils.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\nexport type TRequestBody<T = unknown> = Record<string, T>;\nexport type TRequestQuery<T = unknown> = Record<string, T>;\nexport type TRequestParams<T = unknown> = Record<string, T>;\n\nexport interface IRequest {\n protocol: string;\n method: THttpMethod;\n path: string;\n headers: IHeaders;\n body: TRequestBody | object;\n\n query: TRequestQuery | object;\n\n params: TRequestParams | object;\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 readonly query: IRequest['query'];\n params: IRequest['params'];\n\n constructor(request: string) {\n const { protocol, method, path, headers, body, query, params } = this._parseRequest(request);\n this.protocol = protocol;\n this.method = method;\n this.path = path;\n this.headers = headers;\n this.body = body;\n this.query = query;\n this.params = params;\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] = divideStringUtils(request, '\\r\\n');\n const [method, path, protocol] = <[THttpMethod, string, string]>firstLine.split(' ', 3);\n const [headers, body] = divideStringUtils(rest, '\\r\\n\\r\\n');\n\n const parsedHeaders: IRequest['headers'] = parseRequestHeadersUtils(headers);\n const parsedQuery: IRequest['query'] = parseRequestQueryUtils(path);\n\n let parsedBody: IRequest['body'] = {};\n if (body) parsedBody = parseRequestBodyUtils(parsedHeaders, body);\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) {\n return { protocol, method, path, headers: parsedHeaders, query: parsedQuery, params: {}, body: {} };\n }\n return { protocol, method, path, headers: parsedHeaders, body: parsedBody, query: parsedQuery, params: {} };\n }\n\n parseParams(route: IRoute): void {\n this.params = parseRequestParamsUtils(this.path, route);\n }\n}\n",
14
+ "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\nexport interface 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
15
  "export default function calculateContentLength(body: string): number {\n return Buffer.byteLength(body);\n}\n",
11
16
  "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
17
  ],
13
- "mappings": "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",
14
- "debugId": "AA3886141584200964756E2164756E21",
18
+ "mappings": "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",
19
+ "debugId": "CA4381AA642912E964756E2164756E21",
15
20
  "names": []
16
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yinzerflow",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "author": "Patrick Rizzardi <patrick@redact.digital> (https://redact.digital)",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/yinzers/YinzerFlow.git",
@@ -46,15 +46,15 @@
46
46
  "@types/ip": "^1.1.3",
47
47
  "bun-plugin-dts": "^0.2.3",
48
48
  "bun-types": "^1.0.3",
49
- "cspell": "^6.31.2",
49
+ "cspell": "^8.13.2",
50
50
  "eslint": "^9.6.0",
51
51
  "eslint-import-resolver-typescript": "^3.6.1",
52
52
  "eslint-plugin-import": "^2.29.1",
53
53
  "globals": "^15.8.0",
54
54
  "gzip-size-cli": "^5.1.0",
55
- "prettier": "^3.0.0",
55
+ "prettier": "^3.3.3",
56
56
  "typescript": "^5.1.6",
57
- "typescript-eslint": "^7.16.0",
57
+ "typescript-eslint": "^8.0.1",
58
58
  "yinzerflow": "^0.1.0"
59
59
  },
60
60
  "peerDependencies": {