yinzerflow 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -201,12 +201,13 @@ export interface IIncludeMiddleware extends IMiddleware {
201
201
  }
202
202
  export type TMiddleware = IExcludeMiddleware | IIncludeMiddleware;
203
203
  export export declare class YinzerFlow {
204
- private readonly _backlog;
205
204
  private readonly _ip;
206
205
  private readonly _port;
207
206
  private _isListening;
208
207
  private readonly _routes;
209
208
  private readonly middleware;
209
+ private _server;
210
+ private readonly _connections;
210
211
  constructor(options?: {
211
212
  port?: number;
212
213
  errorHandler?: TErrorFunction;
@@ -250,8 +251,8 @@ export export declare class YinzerFlow {
250
251
  paths: IIncludeMiddleware["paths"];
251
252
  excluded: IIncludeMiddleware["excluded"];
252
253
  }): void;
253
- listen(): void;
254
- close(): void;
254
+ listen(): Promise<void>;
255
+ close(): Promise<void>;
255
256
  getStatus(): {
256
257
  isListening: boolean;
257
258
  port: number;
package/index.js CHANGED
@@ -810,6 +810,7 @@ class HttpRequest {
810
810
  this.params = params;
811
811
  }
812
812
  _parseRequest(request) {
813
+ console.log("request", request);
813
814
  if (!request)
814
815
  throw new Error("Invalid request");
815
816
  const [firstLine, rest] = divideString_utils_default(request, "\r\n");
@@ -1008,33 +1009,33 @@ var executeMiddlewareFunctions_utils_default = async (route, ctx, middlewares) =
1008
1009
  };
1009
1010
 
1010
1011
  // 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
- };
1012
+ function findRouteUtils(request, routes) {
1013
+ const exactKey = `${request.method}:${request.path}`;
1014
+ console.log(exactKey);
1015
+ const exactMatch = routes.get(exactKey);
1016
+ if (exactMatch)
1017
+ return exactMatch;
1018
+ for (const [, route] of routes) {
1019
+ if (route.method !== request.method)
1020
+ continue;
1021
+ const pattern = route.path.replace(/:[^/]+/g, "([^/]+)");
1022
+ const regex = new RegExp(`^${pattern}\$`);
1023
+ if (regex.test(request.path))
1024
+ return route;
1025
+ }
1026
+ console.log(request);
1027
+ return;
1028
+ }
1029
1029
 
1030
1030
  // app/index.ts
1031
1031
  class YinzerFlow {
1032
- _backlog = 511;
1033
1032
  _ip = import_ip.default.address();
1034
1033
  _port = 5000;
1035
1034
  _isListening = false;
1036
- _routes = [];
1035
+ _routes = new Map;
1037
1036
  middleware = [];
1037
+ _server = null;
1038
+ _connections = new Set;
1038
1039
  constructor(options) {
1039
1040
  if (options) {
1040
1041
  if (options.port)
@@ -1076,24 +1077,30 @@ class YinzerFlow {
1076
1077
  async _mainHandler(socket, buffer) {
1077
1078
  const createRequest = new HttpRequest(buffer.toString());
1078
1079
  try {
1079
- const findRouteBasedOnRequest = findRoute_utils_default(createRequest, this._routes);
1080
+ const findRouteBasedOnRequest = findRouteUtils(createRequest, this._routes);
1080
1081
  if (!findRouteBasedOnRequest) {
1081
1082
  const ctx = new Context(createRequest, new HttpResponse(createRequest));
1082
1083
  ctx.response.setStatus(HttpStatusCode.NOT_FOUND);
1083
1084
  ctx.response.setBody({ success: false, message: "Not found" });
1084
- socket.write(ctx.response.formatHttpResponse());
1085
- socket.end();
1085
+ await new Promise((resolve) => {
1086
+ socket.write(ctx.response.formatHttpResponse(), () => resolve());
1087
+ socket.end();
1088
+ });
1086
1089
  return;
1087
1090
  }
1088
1091
  createRequest.parseParams(findRouteBasedOnRequest);
1089
1092
  const createResponse = await this._handleRequest(createRequest, findRouteBasedOnRequest);
1090
- socket.write(createResponse.formatHttpResponse());
1091
- socket.end();
1093
+ await new Promise((resolve) => {
1094
+ socket.write(createResponse.formatHttpResponse(), () => resolve());
1095
+ socket.end();
1096
+ });
1092
1097
  } catch (error) {
1093
1098
  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();
1099
+ createContext.response.setBody(await Promise.resolve(this._errorHandler(createContext, error)));
1100
+ await new Promise((resolve) => {
1101
+ socket.write(createContext.response.formatHttpResponse(), () => resolve());
1102
+ socket.end();
1103
+ });
1097
1104
  }
1098
1105
  }
1099
1106
  _route(path, handler, options = {
@@ -1107,7 +1114,8 @@ class YinzerFlow {
1107
1114
  beforeHandler: beforeHandler ?? undefined,
1108
1115
  afterHandler: afterHandler ?? undefined
1109
1116
  };
1110
- this._routes.push(route);
1117
+ const routeKey = `${options.method}:${path}`;
1118
+ this._routes.set(routeKey, route);
1111
1119
  return route;
1112
1120
  }
1113
1121
  get(path, handler, options) {
@@ -1126,12 +1134,20 @@ class YinzerFlow {
1126
1134
  return this._route(path, handler, { method: HttpMethod.PATCH, ...options });
1127
1135
  }
1128
1136
  group(prefix, routes, options) {
1129
- for (const route of routes)
1130
- this._routes.push({ ...route, path: `${prefix}${route.path}`, beforeGroup: options?.beforeGroup });
1137
+ for (const route of routes) {
1138
+ const routeKey = `${route.method}:${prefix}${route.path}`;
1139
+ this._routes.set(routeKey, {
1140
+ ...route,
1141
+ path: `${prefix}${route.path}`,
1142
+ beforeGroup: options?.beforeGroup
1143
+ });
1144
+ }
1131
1145
  }
1132
1146
  routes(routes) {
1133
- for (const route of routes)
1134
- this._routes.push(route);
1147
+ for (const route of routes) {
1148
+ const routeKey = `${route.method}:${route.path}`;
1149
+ this._routes.set(routeKey, route);
1150
+ }
1135
1151
  }
1136
1152
  beforeAll(fn, options) {
1137
1153
  if (!options) {
@@ -1147,28 +1163,48 @@ class YinzerFlow {
1147
1163
  return;
1148
1164
  }
1149
1165
  }
1150
- listen() {
1151
- const server = createServer().listen(this._port, this._ip, this._backlog);
1152
- server.on("listening", () => {
1153
- this._isListening = true;
1154
- });
1155
- server.on("connection", (socket) => {
1156
- socket.on("data", async (buffer) => {
1157
- await this._mainHandler(socket, buffer);
1166
+ async listen() {
1167
+ return new Promise((resolve) => {
1168
+ this._server = createServer().listen(this._port, this._ip);
1169
+ this._server.on("listening", () => {
1170
+ this._isListening = true;
1171
+ resolve();
1172
+ });
1173
+ this._server.on("connection", (socket) => {
1174
+ this._connections.add(socket);
1175
+ socket.on("close", () => {
1176
+ this._connections.delete(socket);
1177
+ });
1178
+ socket.on("data", (buffer) => {
1179
+ this._mainHandler(socket, buffer).catch((err) => {
1180
+ console.error("Error handling request:", err);
1181
+ });
1182
+ });
1183
+ socket.on("error", (error) => {
1184
+ console.error("An error occurred with yinzerflow. Please open an issue on GitHub.", error);
1185
+ });
1158
1186
  });
1159
- socket.on("error", (error) => {
1187
+ this._server.on("error", (error) => {
1160
1188
  console.error("An error occurred with yinzerflow. Please open an issue on GitHub.", error);
1161
1189
  });
1162
1190
  });
1163
- server.on("error", (error) => {
1164
- console.error("An error occurred with yinzerflow. Please open an issue on GitHub.", error);
1165
- });
1166
1191
  }
1167
- close() {
1168
- if (this._isListening) {
1169
- createServer().close();
1170
- this._isListening = false;
1171
- }
1192
+ async close() {
1193
+ return new Promise((resolve) => {
1194
+ if (!this._isListening || !this._server) {
1195
+ resolve();
1196
+ return;
1197
+ }
1198
+ for (const socket of this._connections) {
1199
+ socket.destroy();
1200
+ }
1201
+ this._connections.clear();
1202
+ this._server.close(() => {
1203
+ this._isListening = false;
1204
+ this._server = null;
1205
+ resolve();
1206
+ });
1207
+ });
1172
1208
  }
1173
1209
  getStatus() {
1174
1210
  return {
@@ -1184,4 +1220,4 @@ export {
1184
1220
  HttpMethod
1185
1221
  };
1186
1222
 
1187
- //# debugId=D29F3E7D307DEC4564756E2164756E21
1223
+ //# debugId=2D8726E6DB4DDCC964756E2164756E21
package/index.js.map CHANGED
@@ -4,22 +4,22 @@
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 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",
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 /**\n * Removing backlog as it is not needed for the server to listen for incoming requests\n * For some reason it throws an error if it is set\n */\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 = new Map<string, IRoute>();\n private readonly middleware: Array<TMiddleware> = [];\n private _server: ReturnType<typeof createServer> | null = null;\n private readonly _connections = new Set<Socket>();\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 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 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 await new Promise<void>((resolve) => {\n socket.write(ctx.response.formatHttpResponse(), () => resolve());\n socket.end();\n });\n return;\n }\n\n createRequest.parseParams(findRouteBasedOnRequest);\n\n const createResponse = await this._handleRequest(createRequest, findRouteBasedOnRequest);\n\n await new Promise<void>((resolve) => {\n socket.write(createResponse.formatHttpResponse(), () => resolve());\n socket.end();\n });\n } catch (error) {\n const createContext = new Context(createRequest, new HttpResponse(createRequest));\n createContext.response.setBody(await Promise.resolve(this._errorHandler(createContext, error)));\n await new Promise<void>((resolve) => {\n socket.write(createContext.response.formatHttpResponse(), () => resolve());\n socket.end();\n });\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 // Create unique key combining method and path\n const routeKey = `${options.method}:${path}`;\n this._routes.set(routeKey, 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) {\n const routeKey = `${route.method}:${prefix}${route.path}`;\n this._routes.set(routeKey, {\n ...route,\n path: `${prefix}${route.path}`,\n beforeGroup: options?.beforeGroup,\n });\n }\n }\n\n routes(routes: Array<IRoute>): void {\n for (const route of routes) {\n const routeKey = `${route.method}:${route.path}`;\n this._routes.set(routeKey, route);\n }\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 async listen(): Promise<void> {\n return new Promise((resolve) => {\n this._server = createServer().listen(this._port, this._ip);\n\n this._server.on('listening', () => {\n this._isListening = true;\n resolve();\n });\n\n this._server.on('connection', (socket) => {\n this._connections.add(socket);\n\n socket.on('close', () => {\n this._connections.delete(socket);\n });\n\n socket.on('data', (buffer) => {\n this._mainHandler(socket, buffer).catch((err) => {\n console.error('Error handling request:', err);\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 this._server.on('error', (error) => {\n console.error('An error occurred with yinzerflow. Please open an issue on GitHub.', error);\n });\n });\n }\n\n async close(): Promise<void> {\n return new Promise((resolve) => {\n if (!this._isListening || !this._server) {\n resolve();\n return;\n }\n\n // Close all existing connections\n for (const socket of this._connections) {\n socket.destroy();\n }\n this._connections.clear();\n\n this._server.close(() => {\n this._isListening = false;\n this._server = null;\n resolve();\n });\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",
11
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
12
  "import type { IRequest, TRequestBody } from 'root/HttpRequest.ts';\n\nexport default (path: IRequest['path']): TRequestBody => {\n const parsedQuery: TRequestBody<Record<string, unknown>> = {};\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> = 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",
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 console.log('request', request);\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
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
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
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
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"
20
+ "import type HttpRequest from 'root/HttpRequest.ts';\nimport type { IRoute } from 'root/index.ts';\n\nexport default function findRouteUtils(request: HttpRequest, routes: Map<string, IRoute>): IRoute | undefined {\n // First try exact match\n const exactKey = `${request.method}:${request.path}`;\n console.log(exactKey);\n const exactMatch = routes.get(exactKey);\n if (exactMatch) return exactMatch;\n\n // If no exact match, look for pattern matches\n for (const [, route] of routes) {\n if (route.method !== request.method) continue;\n\n // Convert route pattern to regex\n const pattern = route.path.replace(/:[^/]+/g, '([^/]+)');\n const regex = new RegExp(`^${pattern}$`);\n\n if (regex.test(request.path)) return route;\n }\n\n console.log(request);\n\n return undefined;\n}\n\n"
21
21
  ],
22
- "mappings": "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",
23
- "debugId": "D29F3E7D307DEC4564756E2164756E21",
22
+ "mappings": "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",
23
+ "debugId": "2D8726E6DB4DDCC964756E2164756E21",
24
24
  "names": []
25
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yinzerflow",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "author": "Patrick Rizzardi <patrick@redact.digital> (https://redact.digital)",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/yinzers/YinzerFlow.git",