yinzerflow 0.1.5 → 0.1.6

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 +19 -11
  2. package/index.js +128 -100
  3. package/index.js.map +9 -5
  4. package/package.json +2 -3
package/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { Socket } from 'net';
2
+
1
3
  declare const HttpStatus: {
2
4
  readonly OK: "OK";
3
5
  readonly CREATED: "Created";
@@ -174,9 +176,9 @@ export declare class Context {
174
176
  constructor(request: HttpRequest, response: HttpResponse);
175
177
  }
176
178
  export type Enum<T> = T[keyof T];
177
- export type TResponseFunction = (ctx: Context) => TResponseBody<unknown>;
178
- export type TUndefinableResponseFunction = TResponseFunction | ((ctx: Context) => void);
179
- export type TErrorFunction = ((ctx: Context, error: unknown) => TResponseBody<unknown>) | ((ctx: Context, error: unknown) => void);
179
+ export type TResponseFunction = (ctx: Context) => Promise<TResponseBody<unknown>> | TResponseBody<unknown>;
180
+ export type TUndefinableResponseFunction = TResponseFunction | ((ctx: Context) => Promise<void> | void);
181
+ export type TErrorFunction = ((ctx: Context, error: unknown) => Promise<TResponseBody<unknown>> | TResponseBody<unknown>) | ((ctx: Context, error: unknown) => Promise<void> | void);
180
182
  export interface IRoute {
181
183
  path: string;
182
184
  method: THttpMethod;
@@ -186,7 +188,7 @@ export interface IRoute {
186
188
  beforeGroup?: TResponseFunction | TUndefinableResponseFunction | undefined;
187
189
  }
188
190
  export interface IMiddleware {
189
- fn: TResponseFunction | ((ctx: Context) => void);
191
+ fn: TUndefinableResponseFunction;
190
192
  }
191
193
  export interface IExcludeMiddleware extends IMiddleware {
192
194
  paths: "allButExcluded";
@@ -199,19 +201,19 @@ export interface IIncludeMiddleware extends IMiddleware {
199
201
  }
200
202
  export type TMiddleware = IExcludeMiddleware | IIncludeMiddleware;
201
203
  export export declare class YinzerFlow {
202
- private readonly backlog;
203
- private readonly ip;
204
- private readonly port;
204
+ private readonly _backlog;
205
+ private readonly _ip;
206
+ private readonly _port;
207
+ private _isListening;
205
208
  private readonly _routes;
206
209
  private readonly middleware;
207
- private readonly errorHandler;
208
210
  constructor(options?: {
209
211
  port?: number;
210
212
  errorHandler?: TErrorFunction;
211
213
  });
212
- protected _handleMiddleware(route: IRoute, ctx: Context): TResponseBody<unknown> | void;
213
- protected _handleRoute(route: IRoute, ctx: Context): TResponseBody<unknown>;
214
- protected _handleRequest(request: HttpRequest, route: IRoute): HttpResponse;
214
+ private readonly _errorHandler;
215
+ protected _handleRequest(request: HttpRequest, route: IRoute): Promise<HttpResponse>;
216
+ protected _mainHandler(socket: Socket, buffer: Buffer): Promise<void>;
215
217
  protected _route(path: IRoute["path"], handler: IRoute["handler"], options?: {
216
218
  method: IRoute["method"];
217
219
  beforeHandler?: IRoute["beforeHandler"];
@@ -249,6 +251,12 @@ export export declare class YinzerFlow {
249
251
  excluded: IIncludeMiddleware["excluded"];
250
252
  }): void;
251
253
  listen(): void;
254
+ close(): void;
255
+ getStatus(): {
256
+ isListening: boolean;
257
+ port: number;
258
+ ip: string;
259
+ };
252
260
  }
253
261
 
254
262
  export {};
package/index.js CHANGED
@@ -967,81 +967,134 @@ class Context {
967
967
  }
968
968
  }
969
969
 
970
+ // app/utils/executeBeforeGroupFunctions.utils.ts
971
+ var executeBeforeGroupFunctions_utils_default = async (route, ctx) => {
972
+ if (route.beforeGroup)
973
+ return Promise.resolve(route.beforeGroup(ctx));
974
+ return;
975
+ };
976
+
977
+ // app/utils/executeBeforeHandlerFunctions.utils.ts
978
+ var executeBeforeHandlerFunctions_utils_default = async (route, ctx) => {
979
+ if (route.beforeHandler)
980
+ return Promise.resolve(route.beforeHandler(ctx));
981
+ return;
982
+ };
983
+
984
+ // app/utils/executeMiddlewareFunctions.utils.ts
985
+ var executeMiddlewareFunctions_utils_default = async (route, ctx, middlewares) => {
986
+ let result = undefined;
987
+ if (middlewares.length) {
988
+ for (const middleware of middlewares) {
989
+ if (middleware.paths === "allButExcluded" && !middleware.excluded.includes(route.path)) {
990
+ result = await Promise.resolve(middleware.fn(ctx));
991
+ if (result) {
992
+ if (typeof result === "object")
993
+ result = JSON.stringify(result);
994
+ return result;
995
+ }
996
+ }
997
+ if (middleware.paths.includes(route.path)) {
998
+ result = await Promise.resolve(middleware.fn(ctx));
999
+ if (result) {
1000
+ if (typeof result === "object")
1001
+ result = JSON.stringify(result);
1002
+ return result;
1003
+ }
1004
+ }
1005
+ }
1006
+ }
1007
+ return;
1008
+ };
1009
+
1010
+ // app/utils/findRoute.utils.ts
1011
+ var findRoute_utils_default = (request, routes) => {
1012
+ const route = routes.find((r) => r.path === request.path && r.method === request.method);
1013
+ if (route)
1014
+ return route;
1015
+ return routes.find((r) => {
1016
+ const pathParts = r.path.split("/");
1017
+ const requestPathParts = request.path.split("/");
1018
+ if (pathParts.length !== requestPathParts.length)
1019
+ return false;
1020
+ for (let i = 0;i < pathParts.length; i++) {
1021
+ if (pathParts[i]?.startsWith(":"))
1022
+ continue;
1023
+ if (pathParts[i] !== requestPathParts[i])
1024
+ return false;
1025
+ }
1026
+ return true;
1027
+ });
1028
+ };
1029
+
970
1030
  // app/index.ts
971
1031
  class YinzerFlow {
972
- backlog = 511;
973
- ip = import_ip.default.address();
974
- port = 5000;
1032
+ _backlog = 511;
1033
+ _ip = import_ip.default.address();
1034
+ _port = 5000;
1035
+ _isListening = false;
975
1036
  _routes = [];
976
1037
  middleware = [];
977
- errorHandler = ({ response }, error) => {
978
- console.error("Server error: \n", error);
979
- response.setStatus(HttpStatusCode.INTERNAL_SERVER_ERROR);
980
- return { success: false, message: "Internal server error" };
981
- };
982
1038
  constructor(options) {
983
1039
  if (options) {
984
1040
  if (options.port)
985
- this.port = options.port;
1041
+ this._port = options.port;
986
1042
  if (options.errorHandler) {
987
- this.errorHandler = options.errorHandler;
1043
+ this._errorHandler = options.errorHandler;
988
1044
  }
989
1045
  }
990
1046
  }
991
- _handleMiddleware(route, ctx) {
1047
+ _errorHandler = ({ response }, error) => {
1048
+ console.error("Server error: \n", error);
1049
+ response.setStatus(HttpStatusCode.INTERNAL_SERVER_ERROR);
1050
+ return { success: false, message: "Internal server error" };
1051
+ };
1052
+ async _handleRequest(request, route) {
1053
+ const createContext = new Context(request, new HttpResponse(request));
992
1054
  let result = undefined;
993
- if (this.middleware.length) {
994
- for (const middleware of this.middleware) {
995
- if (middleware.paths === "allButExcluded" && !middleware.excluded.includes(route.path)) {
996
- result = middleware.fn(ctx);
997
- if (result) {
998
- if (typeof result === "object")
999
- result = JSON.stringify(result);
1000
- return result;
1001
- }
1002
- }
1003
- if (middleware.paths.includes(route.path)) {
1004
- result = middleware.fn(ctx);
1005
- if (result) {
1006
- if (typeof result === "object")
1007
- result = JSON.stringify(result);
1008
- return result;
1009
- }
1010
- }
1011
- }
1055
+ result = await Promise.resolve(executeMiddlewareFunctions_utils_default(route, createContext, this.middleware));
1056
+ if (result) {
1057
+ createContext.response.setBody(result);
1058
+ return createContext.response;
1012
1059
  }
1013
- return;
1014
- }
1015
- _handleRoute(route, ctx) {
1016
- let result = undefined;
1017
- if (route.beforeGroup) {
1018
- result = route.beforeGroup(ctx);
1019
- if (result) {
1020
- return result;
1021
- }
1060
+ result = await Promise.resolve(executeBeforeGroupFunctions_utils_default(route, createContext));
1061
+ if (result) {
1062
+ createContext.response.setBody(result);
1063
+ return createContext.response;
1022
1064
  }
1023
- if (route.beforeHandler) {
1024
- result = route.beforeHandler(ctx);
1025
- if (result) {
1026
- return result;
1027
- }
1065
+ result = await Promise.resolve(executeBeforeHandlerFunctions_utils_default(route, createContext));
1066
+ if (result) {
1067
+ createContext.response.setBody(result);
1068
+ return createContext.response;
1028
1069
  }
1029
- result = route.handler(ctx);
1070
+ result = await Promise.resolve(route.handler(createContext));
1030
1071
  if (route.afterHandler)
1031
- route.afterHandler(ctx);
1032
- return result;
1072
+ await Promise.resolve(route.afterHandler(createContext));
1073
+ createContext.response.setBody(result);
1074
+ return createContext.response;
1033
1075
  }
1034
- _handleRequest(request, route) {
1035
- const ctx = new Context(request, new HttpResponse(request));
1036
- let result = undefined;
1037
- result = this._handleMiddleware(route, ctx);
1038
- if (result) {
1039
- ctx.response.setBody(result);
1040
- return ctx.response;
1076
+ async _mainHandler(socket, buffer) {
1077
+ const createRequest = new HttpRequest(buffer.toString());
1078
+ try {
1079
+ const findRouteBasedOnRequest = findRoute_utils_default(createRequest, this._routes);
1080
+ if (!findRouteBasedOnRequest) {
1081
+ const ctx = new Context(createRequest, new HttpResponse(createRequest));
1082
+ ctx.response.setStatus(HttpStatusCode.NOT_FOUND);
1083
+ ctx.response.setBody({ success: false, message: "Not found" });
1084
+ socket.write(ctx.response.formatHttpResponse());
1085
+ socket.end();
1086
+ return;
1087
+ }
1088
+ createRequest.parseParams(findRouteBasedOnRequest);
1089
+ const createResponse = await this._handleRequest(createRequest, findRouteBasedOnRequest);
1090
+ socket.write(createResponse.formatHttpResponse());
1091
+ socket.end();
1092
+ } catch (error) {
1093
+ const createContext = new Context(createRequest, new HttpResponse(createRequest));
1094
+ createContext.response.setBody(this._errorHandler(createContext, error));
1095
+ socket.write(createContext.response.formatHttpResponse());
1096
+ socket.end();
1041
1097
  }
1042
- result = this._handleRoute(route, ctx);
1043
- ctx.response.setBody(result ?? "Server Error");
1044
- return ctx.response;
1045
1098
  }
1046
1099
  _route(path, handler, options = {
1047
1100
  method: HttpMethod.GET
@@ -1095,33 +1148,13 @@ class YinzerFlow {
1095
1148
  }
1096
1149
  }
1097
1150
  listen() {
1098
- const server = createServer().listen(this.port, this.ip, this.backlog);
1151
+ const server = createServer().listen(this._port, this._ip, this._backlog);
1099
1152
  server.on("listening", () => {
1100
- console.log(`Server listening on ${this.ip}:${this.port}`);
1153
+ this._isListening = true;
1101
1154
  });
1102
1155
  server.on("connection", (socket) => {
1103
- socket.on("data", (buffer) => {
1104
- const request = new HttpRequest(buffer.toString());
1105
- try {
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);
1117
- socket.write(response.formatHttpResponse());
1118
- socket.end();
1119
- } catch (error) {
1120
- const ctx = new Context(request, new HttpResponse(request));
1121
- ctx.response.setBody(this.errorHandler(ctx, error));
1122
- socket.write(ctx.response.formatHttpResponse());
1123
- socket.end();
1124
- }
1156
+ socket.on("data", async (buffer) => {
1157
+ await this._mainHandler(socket, buffer);
1125
1158
  });
1126
1159
  socket.on("error", (error) => {
1127
1160
  console.error("An error occurred with yinzerflow. Please open an issue on GitHub.", error);
@@ -1131,29 +1164,24 @@ class YinzerFlow {
1131
1164
  console.error("An error occurred with yinzerflow. Please open an issue on GitHub.", error);
1132
1165
  });
1133
1166
  }
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;
1167
+ close() {
1168
+ if (this._isListening) {
1169
+ createServer().close();
1170
+ this._isListening = false;
1149
1171
  }
1150
- return true;
1151
- });
1152
- };
1172
+ }
1173
+ getStatus() {
1174
+ return {
1175
+ isListening: this._isListening,
1176
+ port: this._port,
1177
+ ip: this._ip
1178
+ };
1179
+ }
1180
+ }
1153
1181
  export {
1154
1182
  YinzerFlow,
1155
1183
  HttpStatusCode,
1156
1184
  HttpMethod
1157
1185
  };
1158
1186
 
1159
- //# debugId=CA4381AA642912E964756E2164756E21
1187
+ //# debugId=D29F3E7D307DEC4564756E2164756E21
package/index.js.map CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "version": 3,
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"],
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", "../app/utils/executeBeforeGroupFunctions.utils.ts", "../app/utils/executeBeforeHandlerFunctions.utils.ts", "../app/utils/executeMiddlewareFunctions.utils.ts", "../app/utils/findRoute.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\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",
7
+ "import { createServer } from 'net';\nimport type { Socket } 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';\nimport executeBeforeGroupFunctionsUtils from 'utils/executeBeforeGroupFunctions.utils.ts';\nimport executeBeforeHandlerFunctionsUtils from 'utils/executeBeforeHandlerFunctions.utils.ts';\nimport executeMiddlewareFunctionsUtils from 'utils/executeMiddlewareFunctions.utils.ts';\nimport findRouteUtils from 'utils/findRoute.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) => Promise<TResponseBody<unknown>> | TResponseBody<unknown>;\ntype TUndefinableResponseFunction = TResponseFunction | ((ctx: Context) => Promise<void> | void);\n\ntype TErrorFunction =\n | ((ctx: Context, error: unknown) => Promise<TResponseBody<unknown>> | TResponseBody<unknown>)\n | ((ctx: Context, error: unknown) => Promise<void> | 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: TUndefinableResponseFunction;\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\nexport type 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 private _isListening = false;\n private readonly _routes: Array<IRoute> = [];\n private readonly middleware: Array<TMiddleware> = [];\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 private readonly _errorHandler: TErrorFunction = ({ response }, error): TResponseBody<unknown> => {\n /* eslint-disable-next-line no-console */\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 protected async _handleRequest(request: HttpRequest, route: IRoute): Promise<HttpResponse> {\n const createContext = new Context(request, new HttpResponse(request));\n\n let result = undefined;\n\n result = await Promise.resolve(executeMiddlewareFunctionsUtils(route, createContext, this.middleware));\n\n if (result) {\n createContext.response.setBody(result);\n return createContext.response;\n }\n\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 result = await Promise.resolve(executeBeforeGroupFunctionsUtils(route, createContext));\n\n if (result) {\n createContext.response.setBody(result);\n return createContext.response;\n }\n\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 result = await Promise.resolve(executeBeforeHandlerFunctionsUtils(route, createContext));\n\n if (result) {\n createContext.response.setBody(result);\n return createContext.response;\n }\n\n /**\n * We are not returning the results of the route handler until after the afterHandler has been called.\n * This is just in case the afterHandler needs to modify the response in some way.\n */\n result = await Promise.resolve(route.handler(createContext));\n\n if (route.afterHandler) await Promise.resolve(route.afterHandler(createContext));\n\n createContext.response.setBody(result);\n return createContext.response;\n }\n\n protected async _mainHandler(socket: Socket, buffer: Buffer): Promise<void> {\n const createRequest = new HttpRequest(buffer.toString());\n try {\n const findRouteBasedOnRequest = findRouteUtils(createRequest, this._routes);\n\n if (!findRouteBasedOnRequest) {\n // TODO - Allow for a custom 404 handler to be defined\n const ctx = new Context(createRequest, new HttpResponse(createRequest));\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 createRequest.parseParams(findRouteBasedOnRequest);\n\n const createResponse = await this._handleRequest(createRequest, findRouteBasedOnRequest);\n\n socket.write(createResponse.formatHttpResponse());\n socket.end();\n } catch (error) {\n const createContext = new Context(createRequest, new HttpResponse(createRequest));\n createContext.response.setBody(this._errorHandler(createContext, error));\n socket.write(createContext.response.formatHttpResponse());\n socket.end();\n }\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 this._isListening = true;\n });\n\n server.on('connection', (socket) => {\n /* eslint-disable-next-line @typescript-eslint/no-misused-promises */\n socket.on('data', async (buffer) => {\n await this._mainHandler(socket, buffer);\n });\n\n socket.on('error', (error) => {\n /* eslint-disable-next-line no-console */\n console.error('An error occurred with yinzerflow. Please open an issue on GitHub.', error);\n });\n });\n\n server.on('error', (error) => {\n /* eslint-disable-next-line no-console */\n console.error('An error occurred with yinzerflow. Please open an issue on GitHub.', error);\n });\n }\n\n close(): void {\n if (this._isListening) {\n createServer().close();\n this._isListening = false;\n }\n }\n\n getStatus(): { isListening: boolean; port: number; ip: string } {\n return {\n isListening: this._isListening,\n port: this._port,\n ip: this._ip,\n };\n }\n}\n\nexport { YinzerFlow, HttpStatusCode, HttpMethod };\n",
8
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
9
  "import type { IRequest, TRequestBody } from 'root/HttpRequest.ts';\n\nexport default (headers: IRequest['headers'], body: string): TRequestBody => {\n if (!headers['Content-Type']) throw new Error('Missing Content-Type header');\n\n let parsedBody: TRequestBody = {};\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): TRequestBody => {\n try {\n return <TRequestBody>JSON.parse(body);\n } catch (_error) {\n throw new Error('Invalid body');\n }\n};\n\nconst handleXwwwFormUrlencoded = (body: string): TRequestBody => {\n const parsedBody: TRequestBody<Record<string, unknown>> = {};\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): TRequestBody => {\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
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",
@@ -13,9 +13,13 @@
13
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> = T;\nexport type TRequestQuery<T = unknown> = T;\nexport type TRequestParams<T = unknown> = 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
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",
15
15
  "export default function calculateContentLength(body: string): number {\n return Buffer.byteLength(body);\n}\n",
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"
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",
17
+ "import type { Context } from 'root/Context.utils.ts';\nimport type { TResponseBody } from 'root/HttpResponse.ts';\nimport type { IRoute } from 'root/index.ts';\n\n// TODO - Write tests for this function\nexport default async (route: IRoute, ctx: Context): Promise<TResponseBody<unknown> | void> => {\n if (route.beforeGroup) return Promise.resolve(route.beforeGroup(ctx));\n return void 0;\n};\n",
18
+ "import type { Context } from 'root/Context.utils.ts';\nimport type { TResponseBody } from 'root/HttpResponse.ts';\nimport type { IRoute } from 'root/index.ts';\n\n// TODO - Write tests for this function\n\nexport default async (route: IRoute, ctx: Context): Promise<TResponseBody<unknown> | void> => {\n if (route.beforeHandler) return Promise.resolve(route.beforeHandler(ctx));\n return void 0;\n};\n",
19
+ "import type { Context } from 'root/Context.utils.ts';\nimport type { TResponseBody } from 'root/HttpResponse.ts';\nimport type { IRoute, TMiddleware } from 'root/index.ts';\n\n// TODO - Write tests for this function\n\nexport default async (route: IRoute, ctx: Context, middlewares: Array<TMiddleware>): Promise<TResponseBody<unknown> | void> => {\n let result = undefined;\n if (middlewares.length) {\n for (const middleware of middlewares) {\n if (middleware.paths === 'allButExcluded' && !middleware.excluded.includes(route.path)) {\n result = await Promise.resolve(middleware.fn(ctx));\n\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 = await Promise.resolve(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",
20
+ "import type HttpRequest from 'root/HttpRequest.ts';\nimport type { IRoute } from 'root/index.ts';\n\nexport default (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"
17
21
  ],
18
- "mappings": "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",
19
- "debugId": "CA4381AA642912E964756E2164756E21",
22
+ "mappings": "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",
23
+ "debugId": "D29F3E7D307DEC4564756E2164756E21",
20
24
  "names": []
21
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yinzerflow",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "author": "Patrick Rizzardi <patrick@redact.digital> (https://redact.digital)",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/yinzers/YinzerFlow.git",
@@ -54,8 +54,7 @@
54
54
  "gzip-size-cli": "^5.1.0",
55
55
  "prettier": "^3.3.3",
56
56
  "typescript": "^5.1.6",
57
- "typescript-eslint": "^8.0.1",
58
- "yinzerflow": "^0.1.4"
57
+ "typescript-eslint": "^8.0.1"
59
58
  },
60
59
  "peerDependencies": {
61
60
  "typescript": "^5.0.0"