yinzerflow 0.1.15 → 0.1.17

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.
@@ -77,6 +77,9 @@ export declare const ConnectionEvent: {
77
77
  readonly SERVER_STARTED: "server-started";
78
78
  readonly SERVER_STOPPED: "server-stopped";
79
79
  };
80
- export declare const DEFAULT_SOCKET_TIMEOUT = 120000;
80
+ export declare const DEFAULT_SOCKET_TIMEOUT = 30000;
81
+ export declare const DEFAULT_KEEP_ALIVE_TIMEOUT = 65000;
82
+ export declare const DEFAULT_HEADERS_TIMEOUT = 66000;
83
+ export declare const DEFAULT_GRACEFUL_SHUTDOWN_TIMEOUT = 30000;
81
84
 
82
85
  export {};
@@ -1,3 +1,3 @@
1
- var t={OK:"OK",CREATED:"Created",NO_CONTENT:"No Content",BAD_REQUEST:"Bad Request",UNAUTHORIZED:"Unauthorized",FORBIDDEN:"Forbidden",NOT_FOUND:"Not Found",METHOD_NOT_ALLOWED:"Method Not Allowed",CONFLICT:"Conflict",UNSUPPORTED_MEDIA_TYPE:"Unsupported Media Type",TOO_MANY_REQUESTS:"Too Many Requests",INTERNAL_SERVER_ERROR:"Internal Server Error"},r={OK:200,CREATED:201,NO_CONTENT:204,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,CONFLICT:409,UNSUPPORTED_MEDIA_TYPE:415,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500},a={DELETE:"DELETE",GET:"GET",POST:"POST",PUT:"PUT",PATCH:"PATCH",HEAD:"HEAD",OPTIONS:"OPTIONS"},o={JSON:"application/json",HTML:"text/html",FORM:"application/x-www-form-urlencoded",MULTIPART:"multipart/form-data",XML:"application/xml",TEXT:"text/plain",CSV:"text/csv",YAML_APPLICATION:"application/yaml",YAML_TEXT:"text/yaml",URL_ENCODED_JSON:"application/x-www-form-urlencoded+json"};var n={ROUTE_ADDED:"route:added",ROUTE_REMOVED:"route:removed",ROUTES_CHANGED:"routes:changed"};var e={BEFORE_ALL:"before:all",BEFORE_GROUP:"before:group",BEFORE_HANDLER:"before:handler",AFTER_HANDLER:"after:handler"},E={HOOK_ADDED:"hook:added",HOOK_EXECUTED:"hook:executed",BEFORE_ALL_EXECUTED:"hook:before:all:executed",BEFORE_GROUP_EXECUTED:"hook:before:group:executed",BEFORE_HANDLER_EXECUTED:"hook:before:handler:executed",AFTER_HANDLER_EXECUTED:"hook:after:handler:executed"},H={ALL_BUT_EXCLUDED:"allButExcluded"};var M={CONNECTION_ADDED:"connection-added",CONNECTION_CLOSED:"connection-closed",CONNECTION_ERROR:"connection-error",ALL_CONNECTIONS_CLOSED:"all-connections-closed",SERVER_STARTED:"server-started",SERVER_STOPPED:"server-stopped"},h=120000;export{n as RouteRegistryEvent,H as PathMatchingPattern,r as HttpStatusCode,t as HttpStatus,a as HttpMethod,e as HookPhase,E as HookManagerEvent,h as DEFAULT_SOCKET_TIMEOUT,o as ContentType,M as ConnectionEvent};
1
+ var t={OK:"OK",CREATED:"Created",NO_CONTENT:"No Content",BAD_REQUEST:"Bad Request",UNAUTHORIZED:"Unauthorized",FORBIDDEN:"Forbidden",NOT_FOUND:"Not Found",METHOD_NOT_ALLOWED:"Method Not Allowed",CONFLICT:"Conflict",UNSUPPORTED_MEDIA_TYPE:"Unsupported Media Type",TOO_MANY_REQUESTS:"Too Many Requests",INTERNAL_SERVER_ERROR:"Internal Server Error"},E={OK:200,CREATED:201,NO_CONTENT:204,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,CONFLICT:409,UNSUPPORTED_MEDIA_TYPE:415,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500},T={DELETE:"DELETE",GET:"GET",POST:"POST",PUT:"PUT",PATCH:"PATCH",HEAD:"HEAD",OPTIONS:"OPTIONS"},n={JSON:"application/json",HTML:"text/html",FORM:"application/x-www-form-urlencoded",MULTIPART:"multipart/form-data",XML:"application/xml",TEXT:"text/plain",CSV:"text/csv",YAML_APPLICATION:"application/yaml",YAML_TEXT:"text/yaml",URL_ENCODED_JSON:"application/x-www-form-urlencoded+json"};var r={ROUTE_ADDED:"route:added",ROUTE_REMOVED:"route:removed",ROUTES_CHANGED:"routes:changed"};var o={BEFORE_ALL:"before:all",BEFORE_GROUP:"before:group",BEFORE_HANDLER:"before:handler",AFTER_HANDLER:"after:handler"},a={HOOK_ADDED:"hook:added",HOOK_EXECUTED:"hook:executed",BEFORE_ALL_EXECUTED:"hook:before:all:executed",BEFORE_GROUP_EXECUTED:"hook:before:group:executed",BEFORE_HANDLER_EXECUTED:"hook:before:handler:executed",AFTER_HANDLER_EXECUTED:"hook:after:handler:executed"},U={ALL_BUT_EXCLUDED:"allButExcluded"};var _={CONNECTION_ADDED:"connection-added",CONNECTION_CLOSED:"connection-closed",CONNECTION_ERROR:"connection-error",ALL_CONNECTIONS_CLOSED:"all-connections-closed",SERVER_STARTED:"server-started",SERVER_STOPPED:"server-stopped"},i=30000,H=65000,M=66000,e=30000;export{r as RouteRegistryEvent,U as PathMatchingPattern,E as HttpStatusCode,t as HttpStatus,T as HttpMethod,o as HookPhase,a as HookManagerEvent,i as DEFAULT_SOCKET_TIMEOUT,H as DEFAULT_KEEP_ALIVE_TIMEOUT,M as DEFAULT_HEADERS_TIMEOUT,e as DEFAULT_GRACEFUL_SHUTDOWN_TIMEOUT,n as ContentType,_ as ConnectionEvent};
2
2
 
3
- //# debugId=66F79271584AD2AA64756E2164756E21
3
+ //# debugId=169C7F3B3258E64C64756E2164756E21
@@ -5,9 +5,9 @@
5
5
  "/**\n * HTTP Constants\n *\n * This file contains all HTTP-related constants used throughout the application.\n * Centralizing these constants makes them easier to maintain and ensures consistency.\n */\n\n/**\n * HTTP Status Text\n * Maps status codes to their standard text representations\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 CONFLICT: 'Conflict',\n UNSUPPORTED_MEDIA_TYPE: 'Unsupported Media Type',\n TOO_MANY_REQUESTS: 'Too Many Requests',\n INTERNAL_SERVER_ERROR: 'Internal Server Error',\n};\n\n/**\n * HTTP Status Codes\n * Standard HTTP status codes used in responses\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 CONFLICT: 409,\n UNSUPPORTED_MEDIA_TYPE: 415,\n TOO_MANY_REQUESTS: 429,\n INTERNAL_SERVER_ERROR: 500,\n};\n\n/**\n * HTTP Methods\n * Standard HTTP methods used in requests\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};\n\n/**\n * Common Content Types\n * Frequently used content types for HTTP communication\n */\nexport const ContentType = <const>{\n JSON: 'application/json',\n HTML: 'text/html',\n FORM: 'application/x-www-form-urlencoded',\n MULTIPART: 'multipart/form-data',\n XML: 'application/xml',\n TEXT: 'text/plain',\n CSV: 'text/csv',\n YAML_APPLICATION: 'application/yaml',\n YAML_TEXT: 'text/yaml',\n URL_ENCODED_JSON: 'application/x-www-form-urlencoded+json',\n};\n",
6
6
  "import type { Enum } from 'types/Common.ts';\n\n/**\n * Events emitted by RouteRegistry\n *\n * These constants are used for the event system in the routing components.\n * Using 'as const' provides better type safety than enums.\n */\nexport const RouteRegistryEvent = <const>{\n /** Emitted when a new route is added */\n ROUTE_ADDED: 'route:added',\n /** Emitted when a route is removed */\n ROUTE_REMOVED: 'route:removed',\n /** Emitted when any change is made to the routes collection */\n ROUTES_CHANGED: 'routes:changed',\n};\n\n/**\n * Type for RouteRegistryEvent values\n * This creates a union type of all the string literal values\n */\nexport type TRouteRegistryEvent = Enum<typeof RouteRegistryEvent>;\n",
7
7
  "import type { Enum } from 'types/Common.ts';\n\n/**\n * Hook execution phases\n *\n * These constants define the different phases of hook execution\n * in the request lifecycle.\n */\nexport const HookPhase = <const>{\n /** Executed before any route-specific hooks */\n BEFORE_ALL: 'before:all',\n /** Executed for routes in a specific group */\n BEFORE_GROUP: 'before:group',\n /** Executed before a specific route handler */\n BEFORE_HANDLER: 'before:handler',\n /** Executed after a specific route handler */\n AFTER_HANDLER: 'after:handler',\n};\n\n/**\n * Type for HookPhase values\n */\nexport type THookPhase = Enum<typeof HookPhase>;\n\n/**\n * Events emitted by HooksManager\n *\n * These constants are used for the event system in the hooks components.\n */\nexport const HookManagerEvent = <const>{\n /** Emitted when a hook is added */\n HOOK_ADDED: 'hook:added',\n /** Emitted when a hook is executed */\n HOOK_EXECUTED: 'hook:executed',\n /** Emitted when a hook is executed before all routes */\n BEFORE_ALL_EXECUTED: 'hook:before:all:executed',\n /** Emitted when a hook is executed before a group */\n BEFORE_GROUP_EXECUTED: 'hook:before:group:executed',\n /** Emitted when a hook is executed before a handler */\n BEFORE_HANDLER_EXECUTED: 'hook:before:handler:executed',\n /** Emitted when a hook is executed after a handler */\n AFTER_HANDLER_EXECUTED: 'hook:after:handler:executed',\n};\n\n/**\n * Type for HookManagerEvent values\n */\nexport type THookManagerEvent = Enum<typeof HookManagerEvent>;\n\n/**\n * Special path matching patterns\n */\nexport const PathMatchingPattern = <const>{\n /** Apply hooks to all paths except those explicitly excluded */\n ALL_BUT_EXCLUDED: 'allButExcluded',\n};\n",
8
- "/**\n * Connection-related constants\n *\n * This file contains constants related to connection management in YinzerFlow.\n */\n\n/**\n * Connection events emitted by the ConnectionManager\n */\nexport const ConnectionEvent = <const>{\n /** Emitted when a new connection is established */\n CONNECTION_ADDED: 'connection-added',\n /** Emitted when a connection is closed */\n CONNECTION_CLOSED: 'connection-closed',\n /** Emitted when a connection error occurs */\n CONNECTION_ERROR: 'connection-error',\n /** Emitted when all connections are closed */\n ALL_CONNECTIONS_CLOSED: 'all-connections-closed',\n /** Emitted when the server starts listening */\n SERVER_STARTED: 'server-started',\n /** Emitted when the server stops listening */\n SERVER_STOPPED: 'server-stopped',\n};\n\n/**\n * Default socket timeout in milliseconds (2 minutes)\n */\nexport const DEFAULT_SOCKET_TIMEOUT = 120000;\n"
8
+ "/**\n * Connection-related constants\n *\n * This file contains constants related to connection management in YinzerFlow.\n */\n\n/**\n * Connection events emitted by the ConnectionManager\n */\nexport const ConnectionEvent = <const>{\n /** Emitted when a new connection is established */\n CONNECTION_ADDED: 'connection-added',\n /** Emitted when a connection is closed */\n CONNECTION_CLOSED: 'connection-closed',\n /** Emitted when a connection error occurs */\n CONNECTION_ERROR: 'connection-error',\n /** Emitted when all connections are closed */\n ALL_CONNECTIONS_CLOSED: 'all-connections-closed',\n /** Emitted when the server starts listening */\n SERVER_STARTED: 'server-started',\n /** Emitted when the server stops listening */\n SERVER_STOPPED: 'server-stopped',\n};\n\n/**\n * Default socket timeout in milliseconds (30 seconds)\n *\n * Standard timeout for most socket connections.\n * It is long enough for slow clients but short enough to prevent idle connections from staying open indefinitely.\n */\nexport const DEFAULT_SOCKET_TIMEOUT = 30000;\n\n/**\n * Default keep-alive timeout in milliseconds (65 seconds)\n *\n * This is the maximum time a connection can be idle before the server will close it.\n * This is to allow for a connection to stay open for a period of time so subsequent requests can be handled without a new connection.\n * This is also to prevent a connection from staying open indefinitely.\n * This is also useful for load balancing and preventing a single server from being overwhelmed by a large number of connections.\n * AWS recommends a keep-alive timeout of 65 seconds because there idle timeout is 60 seconds.\n */\nexport const DEFAULT_KEEP_ALIVE_TIMEOUT = 65000;\n\n/**\n * Default headers timeout in milliseconds (66 seconds)\n *\n * This is the maximum time to wait for a header from the client.\n * This is to allow for a connection to stay open for a period of time so subsequent requests can be handled without a new connection.\n * This is also to prevent a connection from staying open indefinitely.\n * This is also useful for load balancing and preventing a single server from being overwhelmed by a large number of connections.\n * It is recommended to set this value to be greater than the keep-alive timeout to prevent the server from closing the connection prematurely\n * before the keep-alive timeout has expired.\n */\nexport const DEFAULT_HEADERS_TIMEOUT = 66000;\n\n/**\n * Default graceful shutdown timeout in milliseconds (30 seconds)\n *\n * This is the maximum time to wait for a connection to complete before the server will close it.\n */\nexport const DEFAULT_GRACEFUL_SHUTDOWN_TIMEOUT = 30000;\n\n/**\n * Default port for the server\n */\nexport const DEFAULT_PORT = 5000;\n"
9
9
  ],
10
- "mappings": "AAWO,IAAM,EAAoB,CAC/B,GAAI,KACJ,QAAS,UACT,WAAY,aACZ,YAAa,cACb,aAAc,eACd,UAAW,YACX,UAAW,YACX,mBAAoB,qBACpB,SAAU,WACV,uBAAwB,yBACxB,kBAAmB,oBACnB,sBAAuB,uBACzB,EAMa,EAAwB,CACnC,GAAI,IACJ,QAAS,IACT,WAAY,IACZ,YAAa,IACb,aAAc,IACd,UAAW,IACX,UAAW,IACX,mBAAoB,IACpB,SAAU,IACV,uBAAwB,IACxB,kBAAmB,IACnB,sBAAuB,GACzB,EAMa,EAAoB,CAC/B,OAAQ,SACR,IAAK,MACL,KAAM,OACN,IAAK,MACL,MAAO,QACP,KAAM,OACN,QAAS,SACX,EAMa,EAAqB,CAChC,KAAM,mBACN,KAAM,YACN,KAAM,oCACN,UAAW,sBACX,IAAK,kBACL,KAAM,aACN,IAAK,WACL,iBAAkB,mBAClB,UAAW,YACX,iBAAkB,wCACpB,EClEO,IAAM,EAA4B,CAEvC,YAAa,cAEb,cAAe,gBAEf,eAAgB,gBAClB,ECPO,IAAM,EAAmB,CAE9B,WAAY,aAEZ,aAAc,eAEd,eAAgB,iBAEhB,cAAe,eACjB,EAYa,EAA0B,CAErC,WAAY,aAEZ,cAAe,gBAEf,oBAAqB,2BAErB,sBAAuB,6BAEvB,wBAAyB,+BAEzB,uBAAwB,6BAC1B,EAUa,EAA6B,CAExC,iBAAkB,gBACpB,EC9CO,IAAM,EAAyB,CAEpC,iBAAkB,mBAElB,kBAAmB,oBAEnB,iBAAkB,mBAElB,uBAAwB,yBAExB,eAAgB,iBAEhB,eAAgB,gBAClB,EAKa,EAAyB",
11
- "debugId": "66F79271584AD2AA64756E2164756E21",
10
+ "mappings": "AAWO,IAAM,EAAoB,CAC/B,GAAI,KACJ,QAAS,UACT,WAAY,aACZ,YAAa,cACb,aAAc,eACd,UAAW,YACX,UAAW,YACX,mBAAoB,qBACpB,SAAU,WACV,uBAAwB,yBACxB,kBAAmB,oBACnB,sBAAuB,uBACzB,EAMa,EAAwB,CACnC,GAAI,IACJ,QAAS,IACT,WAAY,IACZ,YAAa,IACb,aAAc,IACd,UAAW,IACX,UAAW,IACX,mBAAoB,IACpB,SAAU,IACV,uBAAwB,IACxB,kBAAmB,IACnB,sBAAuB,GACzB,EAMa,EAAoB,CAC/B,OAAQ,SACR,IAAK,MACL,KAAM,OACN,IAAK,MACL,MAAO,QACP,KAAM,OACN,QAAS,SACX,EAMa,EAAqB,CAChC,KAAM,mBACN,KAAM,YACN,KAAM,oCACN,UAAW,sBACX,IAAK,kBACL,KAAM,aACN,IAAK,WACL,iBAAkB,mBAClB,UAAW,YACX,iBAAkB,wCACpB,EClEO,IAAM,EAA4B,CAEvC,YAAa,cAEb,cAAe,gBAEf,eAAgB,gBAClB,ECPO,IAAM,EAAmB,CAE9B,WAAY,aAEZ,aAAc,eAEd,eAAgB,iBAEhB,cAAe,eACjB,EAYa,EAA0B,CAErC,WAAY,aAEZ,cAAe,gBAEf,oBAAqB,2BAErB,sBAAuB,6BAEvB,wBAAyB,+BAEzB,uBAAwB,6BAC1B,EAUa,EAA6B,CAExC,iBAAkB,gBACpB,EC9CO,IAAM,EAAyB,CAEpC,iBAAkB,mBAElB,kBAAmB,oBAEnB,iBAAkB,mBAElB,uBAAwB,yBAExB,eAAgB,iBAEhB,eAAgB,gBAClB,EAQa,EAAyB,MAWzB,EAA6B,MAY7B,EAA0B,MAO1B,EAAoC",
11
+ "debugId": "169C7F3B3258E64C64756E2164756E21",
12
12
  "names": []
13
13
  }
package/example/index.ts CHANGED
@@ -21,8 +21,10 @@ interface ServerResponse {
21
21
  export const app = new YinzerFlow({
22
22
  port: 5000,
23
23
  connectionOptions: {
24
- socketTimeout: 10000,
24
+ socketTimeout: 30000,
25
25
  gracefulShutdownTimeout: 5000,
26
+ keepAliveTimeout: 10000,
27
+ headersTimeout: 30000,
26
28
  },
27
29
  parserOptions: {
28
30
  yaml: {
package/index.d.ts CHANGED
@@ -218,8 +218,10 @@ export interface IServerOptions {
218
218
  port?: number;
219
219
  errorHandler?: TErrorFunction;
220
220
  connectionOptions?: {
221
- socketTimeout?: number;
222
- gracefulShutdownTimeout?: number;
221
+ socketTimeout: number;
222
+ gracefulShutdownTimeout: number;
223
+ keepAliveTimeout: number;
224
+ headersTimeout: number;
223
225
  };
224
226
  parserOptions?: {
225
227
  json?: {
@@ -246,35 +248,16 @@ type TYamlData = Array<TYamlData> | boolean | number | string | {
246
248
  } | null;
247
249
  export type TJsonData<T = unknown> = Record<string, unknown> & T;
248
250
  export declare class ConfigManager {
249
- private readonly options;
251
+ readonly port: number;
252
+ readonly errorHandler: TErrorFunction;
253
+ readonly connectionOptions: Required<IServerOptions>["connectionOptions"];
254
+ readonly parserOptions: Required<IServerOptions>["parserOptions"];
250
255
  constructor(options?: IServerOptions);
251
- get parserOptions(): IServerOptions["parserOptions"];
252
- get connectionOptions(): IServerOptions["connectionOptions"];
253
- get errorHandler(): IServerOptions["errorHandler"];
254
- get port(): number | undefined;
255
- getOptions(): IServerOptions;
256
- }
257
- export export declare class RouteRegistry extends EventEmitter {
258
- private readonly _routes;
259
- getRoutes(): Map<string, IRoute>;
260
- hasRoute(method: string, path: string): boolean;
261
- getRoute(method: string, path: string): IRoute | undefined;
262
- private createRouteKey;
263
- private validatePath;
264
- addRoute(options: {
265
- path: IRoute["path"];
266
- handler: IRoute["handler"];
267
- method: IRoute["method"];
268
- beforeHandler?: IRoute["beforeHandler"];
269
- afterHandler?: IRoute["afterHandler"];
270
- }): IRoute;
271
- removeRoute(method: string, path: string): boolean;
272
- addGroup(prefix: IRoute["path"], routes: Array<IRoute>, options?: {
273
- beforeGroup: IRoute["beforeGroup"];
274
- }): void;
275
- addRoutes(routes: Array<IRoute>): void;
276
- clearRoutes(): void;
277
- get routeCount(): number;
256
+ private _setPort;
257
+ private _setErrorHandler;
258
+ private _setConnectionOptions;
259
+ private _normalizeTimeout;
260
+ private _setParserOptions;
278
261
  }
279
262
  export export declare class HooksManager extends EventEmitter {
280
263
  private readonly hooks;
@@ -302,10 +285,7 @@ export export declare class YinzerFlow {
302
285
  private readonly requestHandler;
303
286
  private readonly configManager;
304
287
  private readonly _ip;
305
- private readonly _port;
306
- private readonly _gracefulShutdownTimeout;
307
288
  get hooks(): HooksManager;
308
- get routes(): RouteRegistry;
309
289
  get config(): ConfigManager;
310
290
  constructor(options?: IServerOptions);
311
291
  get: (path: IRoute["path"], handler: IRoute["handler"], options?: IRouteOptions) => IRoute;
@@ -325,6 +305,28 @@ export export declare class YinzerFlow {
325
305
  ip: string;
326
306
  };
327
307
  }
308
+ export export declare class RouteRegistry extends EventEmitter {
309
+ private readonly _routes;
310
+ getRoutes(): Map<string, IRoute>;
311
+ hasRoute(method: string, path: string): boolean;
312
+ getRoute(method: string, path: string): IRoute | undefined;
313
+ private createRouteKey;
314
+ private validatePath;
315
+ addRoute(options: {
316
+ path: IRoute["path"];
317
+ handler: IRoute["handler"];
318
+ method: IRoute["method"];
319
+ beforeHandler?: IRoute["beforeHandler"];
320
+ afterHandler?: IRoute["afterHandler"];
321
+ }): IRoute;
322
+ removeRoute(method: string, path: string): boolean;
323
+ addGroup(prefix: IRoute["path"], routes: Array<IRoute>, options?: {
324
+ beforeGroup: IRoute["beforeGroup"];
325
+ }): void;
326
+ addRoutes(routes: Array<IRoute>): void;
327
+ clearRoutes(): void;
328
+ get routeCount(): number;
329
+ }
328
330
  export export declare class RouteFinder {
329
331
  private readonly routeRegistry;
330
332
  private readonly patternRouteCache;
@@ -343,7 +345,6 @@ export export declare class RequestHandler {
343
345
  private readonly configManager;
344
346
  constructor(routeFinder: RouteFinder, hooksManager: HooksManager, configManager: ConfigManager);
345
347
  handleSocketRequest(socket: Socket, buffer: Buffer): Promise<void>;
346
- private readonly _defaultErrorHandler;
347
348
  private _sendResponse;
348
349
  private _handleError;
349
350
  private _processRequest;
@@ -363,17 +364,17 @@ export export declare class ConnectionManager extends EventEmitter {
363
364
  private _startTime;
364
365
  private _totalConnections;
365
366
  private _connectionErrors;
366
- private readonly _socketTimeout;
367
- constructor(socketTimeout?: number);
367
+ private readonly _configManager;
368
+ constructor(configManager: ConfigManager);
368
369
  setServer(server: Server | null): void;
369
- addConnection(socket: Socket, timeout?: number): void;
370
+ addConnection(socket: Socket): void;
370
371
  getConnections(): Set<Socket>;
371
372
  getConnectionCount(): number;
372
373
  setListening(isListening: boolean): void;
373
374
  isListening(): boolean;
374
375
  getServer(): Server | null;
375
376
  getStats(): IConnectionStats;
376
- closeAllConnections(gracePeriod?: number): Promise<void>;
377
+ closeAllConnections(): Promise<void>;
377
378
  }
378
379
  export declare const addGetRoute: (registry: RouteRegistry) => (path: IRoute["path"], handler: IRoute["handler"], options?: IRouteOptions) => IRoute;
379
380
  export declare const addPostRoute: (registry: RouteRegistry) => (path: IRoute["path"], handler: IRoute["handler"], options?: IRouteOptions) => IRoute;
package/index.js CHANGED
@@ -1,23 +1,23 @@
1
- import{createRequire as e$}from"node:module";var r$=Object.create;var{getPrototypeOf:s$,defineProperty:V$,getOwnPropertyNames:a$}=Object;var t$=Object.prototype.hasOwnProperty;var E$=($,D,M)=>{M=$!=null?r$(s$($)):{};let _=D||!$||!$.__esModule?V$(M,"default",{value:$,enumerable:!0}):M;for(let R of a$($))if(!t$.call(_,R))V$(_,R,{get:()=>$[R],enumerable:!0});return _};var H$=($,D)=>()=>(D||$((D={exports:{}}).exports,D),D.exports);var N$=e$(import.meta.url);var C$=H$((g$)=>{var J=g$,{Buffer:W$}=N$("buffer"),$1=N$("os");J.toBuffer=function($,D,M){M=~~M;let _;if(this.isV4Format($))_=D||W$.alloc(M+4),$.split(/\./g).map((R)=>{_[M++]=parseInt(R,10)&255});else if(this.isV6Format($)){let R=$.split(":",8),W;for(W=0;W<R.length;W++){let Y=this.isV4Format(R[W]),Z;if(Y)Z=this.toBuffer(R[W]),R[W]=Z.slice(0,2).toString("hex");if(Z&&++W<8)R.splice(W,0,Z.slice(2,4).toString("hex"))}if(R[0]==="")while(R.length<8)R.unshift("0");else if(R[R.length-1]==="")while(R.length<8)R.push("0");else if(R.length<8){for(W=0;W<R.length&&R[W]!=="";W++);let Y=[W,1];for(W=9-R.length;W>0;W--)Y.push("0");R.splice(...Y)}_=D||W$.alloc(M+16);for(W=0;W<R.length;W++){let Y=parseInt(R[W],16);_[M++]=Y>>8&255,_[M++]=Y&255}}if(!_)throw Error(`Invalid ip address: ${$}`);return _};J.toString=function($,D,M){D=~~D,M=M||$.length-D;let _=[];if(M===4){for(let R=0;R<M;R++)_.push($[D+R]);_=_.join(".")}else if(M===16){for(let R=0;R<M;R+=2)_.push($.readUInt16BE(D+R).toString(16));_=_.join(":"),_=_.replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3"),_=_.replace(/:{3,4}/,"::")}return _};var D1=/^(\d{1,3}\.){3,3}\d{1,3}$/,M1=/^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i;J.isV4Format=function($){return D1.test($)};J.isV6Format=function($){return M1.test($)};function c($){if($===4)return"ipv4";if($===6)return"ipv6";return $?$.toLowerCase():"ipv4"}J.fromPrefixLen=function($,D){if($>32)D="ipv6";else D=c(D);let M=4;if(D==="ipv6")M=16;let _=W$.alloc(M);for(let R=0,W=_.length;R<W;++R){let Y=8;if($<8)Y=$;$-=Y,_[R]=~(255>>Y)&255}return J.toString(_)};J.mask=function($,D){$=J.toBuffer($),D=J.toBuffer(D);let M=W$.alloc(Math.max($.length,D.length)),_;if($.length===D.length)for(_=0;_<$.length;_++)M[_]=$[_]&D[_];else if(D.length===4)for(_=0;_<D.length;_++)M[_]=$[$.length-4+_]&D[_];else{for(_=0;_<M.length-6;_++)M[_]=0;M[10]=255,M[11]=255;for(_=0;_<$.length;_++)M[_+12]=$[_]&D[_+12];_+=12}for(;_<M.length;_++)M[_]=0;return J.toString(M)};J.cidr=function($){let D=$.split("/"),M=D[0];if(D.length!==2)throw new Error(`invalid CIDR subnet: ${M}`);let _=J.fromPrefixLen(parseInt(D[1],10));return J.mask(M,_)};J.subnet=function($,D){let M=J.toLong(J.mask($,D)),_=J.toBuffer(D),R=0;for(let Y=0;Y<_.length;Y++)if(_[Y]===255)R+=8;else{let Z=_[Y]&255;while(Z)Z=Z<<1&255,R++}let W=2**(32-R);return{networkAddress:J.fromLong(M),firstAddress:W<=2?J.fromLong(M):J.fromLong(M+1),lastAddress:W<=2?J.fromLong(M+W-1):J.fromLong(M+W-2),broadcastAddress:J.fromLong(M+W-1),subnetMask:D,subnetMaskLength:R,numHosts:W<=2?W:W-2,length:W,contains(Y){return M===J.toLong(J.mask(Y,D))}}};J.cidrSubnet=function($){let D=$.split("/"),M=D[0];if(D.length!==2)throw new Error(`invalid CIDR subnet: ${M}`);let _=J.fromPrefixLen(parseInt(D[1],10));return J.subnet(M,_)};J.not=function($){let D=J.toBuffer($);for(let M=0;M<D.length;M++)D[M]=255^D[M];return J.toString(D)};J.or=function($,D){if($=J.toBuffer($),D=J.toBuffer(D),$.length===D.length){for(let W=0;W<$.length;++W)$[W]|=D[W];return J.toString($)}let M=$,_=D;if(D.length>$.length)M=D,_=$;let R=M.length-_.length;for(let W=R;W<M.length;++W)M[W]|=_[W-R];return J.toString(M)};J.isEqual=function($,D){if($=J.toBuffer($),D=J.toBuffer(D),$.length===D.length){for(let _=0;_<$.length;_++)if($[_]!==D[_])return!1;return!0}if(D.length===4){let _=D;D=$,$=_}for(let _=0;_<10;_++)if(D[_]!==0)return!1;let M=D.readUInt16BE(10);if(M!==0&&M!==65535)return!1;for(let _=0;_<4;_++)if($[_]!==D[_+12])return!1;return!0};J.isPrivate=function($){if(J.isLoopback($))return!0;if(!J.isV6Format($)){let D=J.normalizeToLong($);if(D<0)throw new Error("invalid ipv4 address");$=J.fromLong(D)}return/^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test($)||/^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test($)||/^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i.test($)||/^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test($)||/^f[cd][0-9a-f]{2}:/i.test($)||/^fe80:/i.test($)||/^::1$/.test($)||/^::$/.test($)};J.isPublic=function($){return!J.isPrivate($)};J.isLoopback=function($){if(!/\./.test($)&&!/:/.test($))$=J.fromLong(Number($));return/^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/.test($)||/^0177\./.test($)||/^0x7f\./i.test($)||/^fe80::1$/i.test($)||/^::1$/.test($)||/^::$/.test($)};J.loopback=function($){if($=c($),$!=="ipv4"&&$!=="ipv6")throw new Error("family must be ipv4 or ipv6");return $==="ipv4"?"127.0.0.1":"fe80::1"};J.address=function($,D){let M=$1.networkInterfaces();if(D=c(D),$&&$!=="private"&&$!=="public"){let R=M[$].filter((W)=>{return c(W.family)===D});if(R.length===0)return;return R[0].address}let _=Object.keys(M).map((R)=>{let W=M[R].filter((Y)=>{if(Y.family=c(Y.family),Y.family!==D||J.isLoopback(Y.address))return!1;if(!$)return!0;return $==="public"?J.isPrivate(Y.address):J.isPublic(Y.address)});return W.length?W[0].address:void 0}).filter(Boolean);return!_.length?J.loopback(D):_[0]};J.toLong=function($){let D=0;return $.split(".").forEach((M)=>{D<<=8,D+=parseInt(M)}),D>>>0};J.fromLong=function($){return`${$>>>24}.${$>>16&255}.${$>>8&255}.${$&255}`};J.normalizeToLong=function($){let D=$.split(".").map((R)=>{if(R.startsWith("0x")||R.startsWith("0X"))return parseInt(R,16);else if(R.startsWith("0")&&R!=="0"&&/^[0-7]+$/.test(R))return parseInt(R,8);else if(/^[1-9]\d*$/.test(R)||R==="0")return parseInt(R,10);else return NaN});if(D.some(isNaN))return-1;let M=0;switch(D.length){case 1:M=D[0];break;case 2:if(D[0]>255||D[1]>16777215)return-1;M=D[0]<<24|D[1]&16777215;break;case 3:if(D[0]>255||D[1]>255||D[2]>65535)return-1;M=D[0]<<24|D[1]<<16|D[2]&65535;break;case 4:if(D.some((R)=>R>255))return-1;M=D[0]<<24|D[1]<<16|D[2]<<8|D[3];break;default:return-1}return M>>>0}});var k$=H$((j$,T$)=>{(function($,D){typeof j$=="object"&&typeof T$!="undefined"?T$.exports=D():typeof define=="function"&&define.amd?define(D):($=typeof globalThis!="undefined"?globalThis:$||self).dayjs=D()})(j$,function(){var $=1000,D=60000,M=3600000,_="millisecond",R="second",W="minute",Y="hour",Z="day",G="week",z="month",C="quarter",K="year",S="date",K$="Invalid Date",p$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,c$=/\[([^\]]+)]|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,n$={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(w){var X=["th","st","nd","rd"],O=w%100;return"["+w+(X[(O-20)%10]||X[O]||X[0])+"]"}},z$=function(w,X,O){var U=String(w);return!U||U.length>=X?w:""+Array(X+1-U.length).join(O)+w},o$={s:z$,z:function(w){var X=-w.utcOffset(),O=Math.abs(X),U=Math.floor(O/60),Q=O%60;return(X<=0?"+":"-")+z$(U,2,"0")+":"+z$(Q,2,"0")},m:function w(X,O){if(X.date()<O.date())return-w(O,X);var U=12*(O.year()-X.year())+(O.month()-X.month()),Q=X.clone().add(U,z),F=O-Q<0,B=X.clone().add(U+(F?-1:1),z);return+(-(U+(O-Q)/(F?Q-B:B-Q))||0)},a:function(w){return w<0?Math.ceil(w)||0:Math.floor(w)},p:function(w){return{M:z,y:K,w:G,d:Z,D:S,h:Y,m:W,s:R,ms:_,Q:C}[w]||String(w||"").toLowerCase().replace(/s$/,"")},u:function(w){return w===void 0}},i="en",v={};v[i]=n$;var A$="$isDayjsObject",w$=function(w){return w instanceof _$||!(!w||!w[A$])},M$=function w(X,O,U){var Q;if(!X)return i;if(typeof X=="string"){var F=X.toLowerCase();v[F]&&(Q=F),O&&(v[F]=O,Q=F);var B=X.split("-");if(!Q&&B.length>1)return w(B[0])}else{var T=X.name;v[T]=X,Q=T}return!U&&Q&&(i=Q),Q||!U&&i},P=function(w,X){if(w$(w))return w.clone();var O=typeof X=="object"?X:{};return O.date=w,O.args=arguments,new _$(O)},j=o$;j.l=M$,j.i=w$,j.w=function(w,X){return P(w,{locale:X.$L,utc:X.$u,x:X.$x,$offset:X.$offset})};var _$=function(){function w(O){this.$L=M$(O.locale,null,!0),this.parse(O),this.$x=this.$x||O.x||{},this[A$]=!0}var X=w.prototype;return X.parse=function(O){this.$d=function(U){var{date:Q,utc:F}=U;if(Q===null)return new Date(NaN);if(j.u(Q))return new Date;if(Q instanceof Date)return new Date(Q);if(typeof Q=="string"&&!/Z$/i.test(Q)){var B=Q.match(p$);if(B){var T=B[2]-1||0,A=(B[7]||"0").substring(0,3);return F?new Date(Date.UTC(B[1],T,B[3]||1,B[4]||0,B[5]||0,B[6]||0,A)):new Date(B[1],T,B[3]||1,B[4]||0,B[5]||0,B[6]||0,A)}}return new Date(Q)}(O),this.init()},X.init=function(){var O=this.$d;this.$y=O.getFullYear(),this.$M=O.getMonth(),this.$D=O.getDate(),this.$W=O.getDay(),this.$H=O.getHours(),this.$m=O.getMinutes(),this.$s=O.getSeconds(),this.$ms=O.getMilliseconds()},X.$utils=function(){return j},X.isValid=function(){return this.$d.toString()!==K$},X.isSame=function(O,U){var Q=P(O);return this.startOf(U)<=Q&&Q<=this.endOf(U)},X.isAfter=function(O,U){return P(O)<this.startOf(U)},X.isBefore=function(O,U){return this.endOf(U)<P(O)},X.$g=function(O,U,Q){return j.u(O)?this[U]:this.set(Q,O)},X.unix=function(){return Math.floor(this.valueOf()/1000)},X.valueOf=function(){return this.$d.getTime()},X.startOf=function(O,U){var Q=this,F=!!j.u(U)||U,B=j.p(O),T=function(y,H){var x=j.w(Q.$u?Date.UTC(Q.$y,H,y):new Date(Q.$y,H,y),Q);return F?x:x.endOf(Z)},A=function(y,H){return j.w(Q.toDate()[y].apply(Q.toDate("s"),(F?[0,0,0,0]:[23,59,59,999]).slice(H)),Q)},V=this.$W,E=this.$M,g=this.$D,k="set"+(this.$u?"UTC":"");switch(B){case K:return F?T(1,0):T(31,11);case z:return F?T(1,E):T(0,E+1);case G:var h=this.$locale().weekStart||0,l=(V<h?V+7:V)-h;return T(F?g-l:g+(6-l),E);case Z:case S:return A(k+"Hours",0);case Y:return A(k+"Minutes",1);case W:return A(k+"Seconds",2);case R:return A(k+"Milliseconds",3);default:return this.clone()}},X.endOf=function(O){return this.startOf(O,!1)},X.$set=function(O,U){var Q,F=j.p(O),B="set"+(this.$u?"UTC":""),T=(Q={},Q[Z]=B+"Date",Q[S]=B+"Date",Q[z]=B+"Month",Q[K]=B+"FullYear",Q[Y]=B+"Hours",Q[W]=B+"Minutes",Q[R]=B+"Seconds",Q[_]=B+"Milliseconds",Q)[F],A=F===Z?this.$D+(U-this.$W):U;if(F===z||F===K){var V=this.clone().set(S,1);V.$d[T](A),V.init(),this.$d=V.set(S,Math.min(this.$D,V.daysInMonth())).$d}else T&&this.$d[T](A);return this.init(),this},X.set=function(O,U){return this.clone().$set(O,U)},X.get=function(O){return this[j.p(O)]()},X.add=function(O,U){var Q,F=this;O=Number(O);var B=j.p(U),T=function(E){var g=P(F);return j.w(g.date(g.date()+Math.round(E*O)),F)};if(B===z)return this.set(z,this.$M+O);if(B===K)return this.set(K,this.$y+O);if(B===Z)return T(1);if(B===G)return T(7);var A=(Q={},Q[W]=D,Q[Y]=M,Q[R]=$,Q)[B]||1,V=this.$d.getTime()+O*A;return j.w(V,this)},X.subtract=function(O,U){return this.add(-1*O,U)},X.format=function(O){var U=this,Q=this.$locale();if(!this.isValid())return Q.invalidDate||K$;var F=O||"YYYY-MM-DDTHH:mm:ssZ",B=j.z(this),T=this.$H,A=this.$m,V=this.$M,E=Q.weekdays,g=Q.months,k=Q.meridiem,h=function(H,x,p,R$){return H&&(H[x]||H(U,F))||p[x].slice(0,R$)},l=function(H){return j.s(T%12||12,H,"0")},y=k||function(H,x,p){var R$=H<12?"AM":"PM";return p?R$.toLowerCase():R$};return F.replace(c$,function(H,x){return x||function(p){switch(p){case"YY":return String(U.$y).slice(-2);case"YYYY":return j.s(U.$y,4,"0");case"M":return V+1;case"MM":return j.s(V+1,2,"0");case"MMM":return h(Q.monthsShort,V,g,3);case"MMMM":return h(g,V);case"D":return U.$D;case"DD":return j.s(U.$D,2,"0");case"d":return String(U.$W);case"dd":return h(Q.weekdaysMin,U.$W,E,2);case"ddd":return h(Q.weekdaysShort,U.$W,E,3);case"dddd":return E[U.$W];case"H":return String(T);case"HH":return j.s(T,2,"0");case"h":return l(1);case"hh":return l(2);case"a":return y(T,A,!0);case"A":return y(T,A,!1);case"m":return String(A);case"mm":return j.s(A,2,"0");case"s":return String(U.$s);case"ss":return j.s(U.$s,2,"0");case"SSS":return j.s(U.$ms,3,"0");case"Z":return B}return null}(H)||B.replace(":","")})},X.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},X.diff=function(O,U,Q){var F,B=this,T=j.p(U),A=P(O),V=(A.utcOffset()-this.utcOffset())*D,E=this-A,g=function(){return j.m(B,A)};switch(T){case K:F=g()/12;break;case z:F=g();break;case C:F=g()/3;break;case G:F=(E-V)/604800000;break;case Z:F=(E-V)/86400000;break;case Y:F=E/M;break;case W:F=E/D;break;case R:F=E/$;break;default:F=E}return Q?F:j.a(F)},X.daysInMonth=function(){return this.endOf(z).$D},X.$locale=function(){return v[this.$L]},X.locale=function(O,U){if(!O)return this.$L;var Q=this.clone(),F=M$(O,U,!0);return F&&(Q.$L=F),Q},X.clone=function(){return j.w(this.$d,this)},X.toDate=function(){return new Date(this.valueOf())},X.toJSON=function(){return this.isValid()?this.toISOString():null},X.toISOString=function(){return this.$d.toISOString()},X.toString=function(){return this.$d.toUTCString()},w}(),P$=_$.prototype;return P.prototype=P$,[["$ms",_],["$s",R],["$m",W],["$H",Y],["$W",Z],["$M",z],["$y",K],["$D",S]].forEach(function(w){P$[w[1]]=function(X){return this.$g(X,w[0],w[1])}}),P.extend=function(w,X){return w.$i||(w(X,_$,P),w.$i=!0),P},P.locale=M$,P.isDayjs=w$,P.unix=function(w){return P(1000*w)},P.en=v[i],P.Ls=v,P.p={},P})});import{HttpMethod as U2,HttpStatus as G2,HttpStatusCode as z2,ContentType as w2}from "yinzerflow/constants/index.js";var l$=E$(C$(),1);import{createServer as x1}from"net";class F${options;constructor($){this.options=$??{}}get parserOptions(){return this.options.parserOptions}get connectionOptions(){return this.options.connectionOptions}get errorHandler(){return this.options.errorHandler}get port(){return this.options.port}getOptions(){return{...this.options}}}import{HttpMethod as _1}from "yinzerflow/constants/index.js";var n=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:_1.GET,..._});import{HttpMethod as R1}from "yinzerflow/constants/index.js";var o=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:R1.POST,..._});import{HttpMethod as W1}from "yinzerflow/constants/index.js";var r=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:W1.PUT,..._});import{HttpMethod as Y1}from "yinzerflow/constants/index.js";var s=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:Y1.DELETE,..._});import{HttpMethod as Z1}from "yinzerflow/constants/index.js";var a=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:Z1.PATCH,..._});import{EventEmitter as O1}from"events";import{RouteRegistryEvent as I}from "yinzerflow/constants/index.js";class t extends O1{_routes=new Map;getRoutes(){return this._routes}hasRoute($,D){let M=this.createRouteKey($,D);return this._routes.has(M)}getRoute($,D){let M=this.createRouteKey($,D);return this._routes.get(M)}createRouteKey($,D){return`${$}:${D}`}validatePath($){if(!$.startsWith("/"))throw new Error(`Route path must start with a slash: ${$}`);if($.includes("//"))throw new Error(`Route path must not contain consecutive slashes: ${$}`);let D=/:\w+/g,M=$.match(D)??[];for(let _ of M)if(_===":")throw new Error(`Route path parameter must have a name: ${$}`)}addRoute($){let{path:D,handler:M,method:_,beforeHandler:R,afterHandler:W}=$;this.validatePath(D);let Y={path:D,method:_,handler:M,beforeHandler:R??void 0,afterHandler:W??void 0},Z=this.createRouteKey(_,D);if(this._routes.has(Z))console.warn(`Route already exists and will be overwritten: ${_} ${D}`);return this._routes.set(Z,Y),this.emit(I.ROUTE_ADDED,Y),this.emit(I.ROUTES_CHANGED),Y}removeRoute($,D){let M=this.createRouteKey($,D),_=this._routes.get(M);if(!_)return!1;let R=this._routes.delete(M);if(R)this.emit(I.ROUTE_REMOVED,_),this.emit(I.ROUTES_CHANGED);return R}addGroup($,D,M){this.validatePath($);let _="";if($==="/")_="";else if($.endsWith("/"))_=$;else _=`${$}/`;for(let R of D){let W=R.path.startsWith("/")?R.path:`/${R.path}`,Y=`${_}${W.substring(1)}`,Z=this.createRouteKey(R.method,Y);this._routes.set(Z,{...R,path:Y,beforeGroup:M?.beforeGroup}),this.emit(I.ROUTE_ADDED,this._routes.get(Z))}this.emit(I.ROUTES_CHANGED)}addRoutes($){for(let D of $){this.validatePath(D.path);let M=this.createRouteKey(D.method,D.path);this._routes.set(M,D),this.emit(I.ROUTE_ADDED,D)}this.emit(I.ROUTES_CHANGED)}clearRoutes(){this._routes.clear(),this.emit(I.ROUTES_CHANGED)}get routeCount(){return this._routes.size}}import{RouteRegistryEvent as f1}from "yinzerflow/constants/index.js";class e{routeRegistry;patternRouteCache=new Map;constructor($){this.routeRegistry=$;this.buildPatternRouteCache()}buildPatternRouteCache(){let $=this.routeRegistry.getRoutes();this.patternRouteCache.clear();for(let[,D]of $)if(D.path.includes(":")){let{method:M}=D,_=this.patternRouteCache.get(M)??[],R=this.createRouteRegex(D.path);_.push({pattern:R,route:D}),this.patternRouteCache.set(M,_)}}createRouteRegex($){let D=$.replace(/:[^/]+/g,"([^/]+)").replace(/(?:[.+*?^$()[\]{}|])/g,"\\$&");return new RegExp(`^${D}$`)}findRoute($,D){return this.routeRegistry.getRoute($,D)}findRouteFromRequest($){let D=$.path!=="/"&&$.path.endsWith("/")?$.path.slice(0,-1):$.path,M=this.findRoute($.method,D);if(M)return M;let _=this.patternRouteCache.get($.method);if(!_)return;for(let{pattern:R,route:W}of _)if(R.test(D))return W;return}extractParamsFromPath($,D){let M={};if(!D.includes(":"))return M;let R=($.split("?")[0]??"").split("/").filter(Boolean),W=D.split("/").filter(Boolean);for(let Y=0;Y<W.length;Y++){let Z=W[Y];if(Z?.startsWith(":")){let G=Z.substring(1);if(Y<R.length){let z=R[Y];if(z)M[G]=decodeURIComponent(z)}}}return M}updatePatternRouteCache(){this.buildPatternRouteCache()}}import{ContentType as h$}from "yinzerflow/constants/index.js";var B$=($,D)=>{let M=$.indexOf(D);if(M===-1)return[$,""];let _=$.slice(0,M),R=$.slice(M+D.length);return[_,R]},Y$=($)=>new TextEncoder().encode($).length;var Z$=($)=>{try{return Q1($)}catch(D){throw new Error(`Invalid YAML: ${D instanceof Error?D.message:String(D)}`)}},Q1=($)=>{let D=Object.create(null),M=$.split(/\r?\n/),_=[{indent:-1,obj:D}],R={};for(let W=0;W<M.length;W++)try{let Y=M[W];if(Y!==void 0)q$(Y,_,W+1,R)}catch(Y){throw new Error(`Line ${W+1}: ${Y instanceof Error?Y.message:String(Y)}`)}return D},q$=($,D,M=0,_={})=>{if(!$||$.trim()===""||$.trim().startsWith("#"))return;let R=$.search(/\S/),W=$.trim();if(D[D.length-1]?.multilineKey){U1($,R,D);return}X1(W,R,D,M,_)},X1=($,D,M,_,R)=>{if($.startsWith("-"))z1($,D,M,_,R);else if($.includes(":"))f$($,D,M,_,R);else if($.startsWith("&"));else if($.startsWith("*"))J1($,M,R)},J1=($,D,M)=>{let _=$.substring(1).trim();if(!(_ in M))throw new Error(`Unknown alias: ${_}`);let R=M[_],W=D[D.length-1];if(!W)return;if(W.isArray&&Array.isArray(W.obj))W.obj.push(R)},U1=($,D,M)=>{let _=M[M.length-1];if(!_||!_.multilineKey)return;if(D<=_.indent){G1(_),q$($,M);return}let R=$.slice(_.indent+2);if(_.multilineValue)_.multilineValue+=`
2
- ${R}`;else _.multilineValue=R},G1=($)=>{if(typeof $.obj==="object"&&$.obj!==null&&!Array.isArray($.obj)&&$.multilineKey){let D=$.obj,M=$.multilineValue??"",_=$.multilineKey;if($.multilineType==="literal")D[_]=M;else D[_]=M.replace(/\n/g," ")}delete $.multilineKey,delete $.multilineValue,delete $.multilineType},z1=($,D,M,_=0,R={})=>{let W=$.substring(1).trim();v$(M,D);let Y=M[M.length-1];if(!Y)return;if(Y.isArray&&Array.isArray(Y.obj))I$({itemContent:W,indent:D,stack:M,array:Y.obj,lineNumber:_},R);else{if(typeof Y.obj==="object"&&Y.obj!==null&&!Array.isArray(Y.obj)){let{obj:Z,arrayKey:G}=Y;if(G&&G in Z){if(!Array.isArray(Z[G]))Z[G]=[];let z=Z[G];I$({itemContent:W,indent:D,stack:M,array:z,lineNumber:_},R),M.push({indent:D,obj:z,isArray:!0});return}}w1({itemContent:W,indent:D,stack:M,lastStackItem:Y,lineNumber:_},R)}},I$=($,D={})=>{let{itemContent:M,indent:_,stack:R,array:W,lineNumber:Y}=$;if(!W)return;let{processedContent:Z,anchorName:G}=S$(M);if(Z.includes(":")){let z=Object.create(null);if(W.push(z),G)D[G]=z;let[C,K]=Z.split(":",2);if(C)x$({key:C,value:K,indent:_,stack:R,obj:z,lineNumber:Y??0})}else{let z=O$(Z);if(W.push(z),G)D[G]=z}},S$=($)=>{let D=$,M=null;if($.startsWith("&")){let _=$.indexOf(" ");if(_>1)M=$.substring(1,_),D=$.substring(_+1)}return{processedContent:D,anchorName:M}},x$=($)=>{let{key:D,value:M,indent:_,stack:R,obj:W}=$;if(typeof W!=="object"||W===null||Array.isArray(W))return;let Y=W,Z=D.trim(),G=M?.trim()??"";if(G==="")Y[Z]=Object.create(null),R.push({indent:_+2,obj:Y[Z]});else if(G==="|"||G===">"){if(R.length>0){let z=R[R.length-1];if(z)z.multilineKey=Z,z.multilineType=G==="|"?"literal":"folded"}}else Y[Z]=O$(G)},w1=($,D={})=>{let{itemContent:M,indent:_,stack:R,lastStackItem:W}=$;if(!W)return;if(typeof W.obj==="object"&&W.obj!==null&&!Array.isArray(W.obj)){let Y=W.obj,Z=W.arrayKey??"items";Y[Z]=[];let G=Y[Z];F1(M,_,R,G,D)}},F1=($,D,M,_,R)=>{let{processedContent:W,anchorName:Y}=S$($);if(W.includes(":")){let Z=Object.create(null);if(_.push(Z),Y)R[Y]=Z;let[G,z]=W.split(":",2);if(G)x$({key:G,value:z,indent:D,stack:M,obj:Z,lineNumber:0})}else{let Z=O$(W);if(_.push(Z),Y)R[Y]=Z}M.push({indent:D,obj:_,isArray:!0})},f$=($,D,M,_=0,R={})=>{let{processedContent:W,key:Y,value:Z,anchorName:G}=B1($);if(!Y)return;let z=Y.trim(),C=Z?.trim()??"";v$(M,D);let K=M[M.length-1];if(!K)return;if(j1($,D,M,K,_,R))return;if(typeof K.obj!=="object"||K.obj===null||Array.isArray(K.obj))return;let S=K.obj;T1(z,C,W,D,M,S,K,G,R)},B1=($)=>{let D=$,M=null,_=$.indexOf(":");if(_!==-1){let Y=$.substring(0,_).trim(),Z=$.substring(_+1).trim();if(Z.startsWith("&")){let G=Z.indexOf(" ");if(G>1)M=Z.substring(1,G),Z=Z.substring(G+1),D=`${Y}: ${Z}`}}let[R,W]=D.split(":",2);return{processedContent:D,key:R,value:W,anchorName:M}},j1=($,D,M,_,R,W)=>{if(_.isArray)return M.pop(),f$($,D,M,R,W),!0;return!1},T1=($,D,M,_,R,W,Y,Z,G)=>{if(D==="")L1($,M,_,R,W,Z,G);else if(D==="|"||D===">")Y.multilineKey=$,Y.multilineType=D==="|"?"literal":"folded";else{let z=O$(D);if(W[$]=z,Z)G[Z]=z}},L1=($,D,M,_,R,W,Y)=>{if(D.endsWith(":")){if(R[$]=Object.create(null),W)Y[W]=R[$];_.push({indent:M,obj:R[$],arrayKey:$})}else{if(R[$]=Object.create(null),W)Y[W]=R[$];_.push({indent:M,obj:R[$]})}},v$=($,D)=>{while($.length>1){let M=$[$.length-1];if(M&&M.indent>=D)$.pop();else break}},O$=($)=>{if($.startsWith('"')&&$.endsWith('"')||$.startsWith("'")&&$.endsWith("'"))return $.slice(1,-1);if(K1($))return null;let D=A1($);if(D!==void 0)return D;let M=P1($);if(M!==void 0)return M;let _=V1($);if(_ instanceof Date)return _.toISOString();let R=E1($);if(R!==void 0)return R;return $},K1=($)=>$==="null"||$==="~"||$==="",A1=($)=>{let D=$.toLowerCase();if(D==="true")return!0;if(D==="false")return!1;return},P1=($)=>{if($===".inf"||$===".Inf"||$===".INF")return 1/0;if($==="-.inf"||$==="-.Inf"||$==="-.INF")return-1/0;if($===".nan"||$===".NaN"||$===".NAN")return NaN;return},V1=($)=>{if(/^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?$/.test($)){let M=new Date($);return isNaN(M.getTime())?$:M}return $},E1=($)=>{if(/^-?\d+(?:\.\d+)?$/.test($))return Number($);if(/^0x[0-9a-fA-F]+$/.test($))return parseInt($,16);if(/^0o[0-7]+$/.test($))return parseInt($.substring(2),8);return};var H1=($)=>{let M=$.split(`\r
3
- `).find((R)=>R.toLowerCase().startsWith("content-type:"));if(!M)return;return M.slice(M.indexOf(":")+1).trim()},N1=($)=>{let D={name:""},_=$.split(`\r
4
- `).find((Y)=>Y.toLowerCase().startsWith("content-disposition:"));if(!_)return D;let R=/name="(?<name>[^"]*)"/.exec(_),W=/filename="(?<filename>[^"]*)"/.exec(_);if(R?.groups?.name)D.name=R.groups.name;if(W?.groups?.filename)Object.assign(D,{filename:W.groups.filename});return D},g1=($)=>{let D=$.startsWith(`\r
1
+ import{createRequire as t$}from"node:module";var o$=Object.create;var{getPrototypeOf:r$,defineProperty:V$,getOwnPropertyNames:s$}=Object;var a$=Object.prototype.hasOwnProperty;var E$=($,D,M)=>{M=$!=null?o$(r$($)):{};let _=D||!$||!$.__esModule?V$(M,"default",{value:$,enumerable:!0}):M;for(let W of s$($))if(!a$.call(_,W))V$(_,W,{get:()=>$[W],enumerable:!0});return _};var H$=($,D)=>()=>(D||$((D={exports:{}}).exports,D),D.exports);var N$=t$(import.meta.url);var C$=H$((g$)=>{var G=g$,{Buffer:Y$}=N$("buffer"),e$=N$("os");G.toBuffer=function($,D,M){M=~~M;let _;if(this.isV4Format($))_=D||Y$.alloc(M+4),$.split(/\./g).map((W)=>{_[M++]=parseInt(W,10)&255});else if(this.isV6Format($)){let W=$.split(":",8),Y;for(Y=0;Y<W.length;Y++){let R=this.isV4Format(W[Y]),Z;if(R)Z=this.toBuffer(W[Y]),W[Y]=Z.slice(0,2).toString("hex");if(Z&&++Y<8)W.splice(Y,0,Z.slice(2,4).toString("hex"))}if(W[0]==="")while(W.length<8)W.unshift("0");else if(W[W.length-1]==="")while(W.length<8)W.push("0");else if(W.length<8){for(Y=0;Y<W.length&&W[Y]!=="";Y++);let R=[Y,1];for(Y=9-W.length;Y>0;Y--)R.push("0");W.splice(...R)}_=D||Y$.alloc(M+16);for(Y=0;Y<W.length;Y++){let R=parseInt(W[Y],16);_[M++]=R>>8&255,_[M++]=R&255}}if(!_)throw Error(`Invalid ip address: ${$}`);return _};G.toString=function($,D,M){D=~~D,M=M||$.length-D;let _=[];if(M===4){for(let W=0;W<M;W++)_.push($[D+W]);_=_.join(".")}else if(M===16){for(let W=0;W<M;W+=2)_.push($.readUInt16BE(D+W).toString(16));_=_.join(":"),_=_.replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3"),_=_.replace(/:{3,4}/,"::")}return _};var $1=/^(\d{1,3}\.){3,3}\d{1,3}$/,D1=/^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i;G.isV4Format=function($){return $1.test($)};G.isV6Format=function($){return D1.test($)};function l($){if($===4)return"ipv4";if($===6)return"ipv6";return $?$.toLowerCase():"ipv4"}G.fromPrefixLen=function($,D){if($>32)D="ipv6";else D=l(D);let M=4;if(D==="ipv6")M=16;let _=Y$.alloc(M);for(let W=0,Y=_.length;W<Y;++W){let R=8;if($<8)R=$;$-=R,_[W]=~(255>>R)&255}return G.toString(_)};G.mask=function($,D){$=G.toBuffer($),D=G.toBuffer(D);let M=Y$.alloc(Math.max($.length,D.length)),_;if($.length===D.length)for(_=0;_<$.length;_++)M[_]=$[_]&D[_];else if(D.length===4)for(_=0;_<D.length;_++)M[_]=$[$.length-4+_]&D[_];else{for(_=0;_<M.length-6;_++)M[_]=0;M[10]=255,M[11]=255;for(_=0;_<$.length;_++)M[_+12]=$[_]&D[_+12];_+=12}for(;_<M.length;_++)M[_]=0;return G.toString(M)};G.cidr=function($){let D=$.split("/"),M=D[0];if(D.length!==2)throw new Error(`invalid CIDR subnet: ${M}`);let _=G.fromPrefixLen(parseInt(D[1],10));return G.mask(M,_)};G.subnet=function($,D){let M=G.toLong(G.mask($,D)),_=G.toBuffer(D),W=0;for(let R=0;R<_.length;R++)if(_[R]===255)W+=8;else{let Z=_[R]&255;while(Z)Z=Z<<1&255,W++}let Y=2**(32-W);return{networkAddress:G.fromLong(M),firstAddress:Y<=2?G.fromLong(M):G.fromLong(M+1),lastAddress:Y<=2?G.fromLong(M+Y-1):G.fromLong(M+Y-2),broadcastAddress:G.fromLong(M+Y-1),subnetMask:D,subnetMaskLength:W,numHosts:Y<=2?Y:Y-2,length:Y,contains(R){return M===G.toLong(G.mask(R,D))}}};G.cidrSubnet=function($){let D=$.split("/"),M=D[0];if(D.length!==2)throw new Error(`invalid CIDR subnet: ${M}`);let _=G.fromPrefixLen(parseInt(D[1],10));return G.subnet(M,_)};G.not=function($){let D=G.toBuffer($);for(let M=0;M<D.length;M++)D[M]=255^D[M];return G.toString(D)};G.or=function($,D){if($=G.toBuffer($),D=G.toBuffer(D),$.length===D.length){for(let Y=0;Y<$.length;++Y)$[Y]|=D[Y];return G.toString($)}let M=$,_=D;if(D.length>$.length)M=D,_=$;let W=M.length-_.length;for(let Y=W;Y<M.length;++Y)M[Y]|=_[Y-W];return G.toString(M)};G.isEqual=function($,D){if($=G.toBuffer($),D=G.toBuffer(D),$.length===D.length){for(let _=0;_<$.length;_++)if($[_]!==D[_])return!1;return!0}if(D.length===4){let _=D;D=$,$=_}for(let _=0;_<10;_++)if(D[_]!==0)return!1;let M=D.readUInt16BE(10);if(M!==0&&M!==65535)return!1;for(let _=0;_<4;_++)if($[_]!==D[_+12])return!1;return!0};G.isPrivate=function($){if(G.isLoopback($))return!0;if(!G.isV6Format($)){let D=G.normalizeToLong($);if(D<0)throw new Error("invalid ipv4 address");$=G.fromLong(D)}return/^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test($)||/^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test($)||/^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i.test($)||/^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test($)||/^f[cd][0-9a-f]{2}:/i.test($)||/^fe80:/i.test($)||/^::1$/.test($)||/^::$/.test($)};G.isPublic=function($){return!G.isPrivate($)};G.isLoopback=function($){if(!/\./.test($)&&!/:/.test($))$=G.fromLong(Number($));return/^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/.test($)||/^0177\./.test($)||/^0x7f\./i.test($)||/^fe80::1$/i.test($)||/^::1$/.test($)||/^::$/.test($)};G.loopback=function($){if($=l($),$!=="ipv4"&&$!=="ipv6")throw new Error("family must be ipv4 or ipv6");return $==="ipv4"?"127.0.0.1":"fe80::1"};G.address=function($,D){let M=e$.networkInterfaces();if(D=l(D),$&&$!=="private"&&$!=="public"){let W=M[$].filter((Y)=>{return l(Y.family)===D});if(W.length===0)return;return W[0].address}let _=Object.keys(M).map((W)=>{let Y=M[W].filter((R)=>{if(R.family=l(R.family),R.family!==D||G.isLoopback(R.address))return!1;if(!$)return!0;return $==="public"?G.isPrivate(R.address):G.isPublic(R.address)});return Y.length?Y[0].address:void 0}).filter(Boolean);return!_.length?G.loopback(D):_[0]};G.toLong=function($){let D=0;return $.split(".").forEach((M)=>{D<<=8,D+=parseInt(M)}),D>>>0};G.fromLong=function($){return`${$>>>24}.${$>>16&255}.${$>>8&255}.${$&255}`};G.normalizeToLong=function($){let D=$.split(".").map((W)=>{if(W.startsWith("0x")||W.startsWith("0X"))return parseInt(W,16);else if(W.startsWith("0")&&W!=="0"&&/^[0-7]+$/.test(W))return parseInt(W,8);else if(/^[1-9]\d*$/.test(W)||W==="0")return parseInt(W,10);else return NaN});if(D.some(isNaN))return-1;let M=0;switch(D.length){case 1:M=D[0];break;case 2:if(D[0]>255||D[1]>16777215)return-1;M=D[0]<<24|D[1]&16777215;break;case 3:if(D[0]>255||D[1]>255||D[2]>65535)return-1;M=D[0]<<24|D[1]<<16|D[2]&65535;break;case 4:if(D.some((W)=>W>255))return-1;M=D[0]<<24|D[1]<<16|D[2]<<8|D[3];break;default:return-1}return M>>>0}});var m$=H$((z$,K$)=>{(function($,D){typeof z$=="object"&&typeof K$!="undefined"?K$.exports=D():typeof define=="function"&&define.amd?define(D):($=typeof globalThis!="undefined"?globalThis:$||self).dayjs=D()})(z$,function(){var $=1000,D=60000,M=3600000,_="millisecond",W="second",Y="minute",R="hour",Z="day",O="week",w="month",C="quarter",T="year",x="date",T$="Invalid Date",i$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p$=/\[([^\]]+)]|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,l$={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(j){var J=["th","st","nd","rd"],Q=j%100;return"["+j+(J[(Q-20)%10]||J[Q]||J[0])+"]"}},w$=function(j,J,Q){var U=String(j);return!U||U.length>=J?j:""+Array(J+1-U.length).join(Q)+j},n$={s:w$,z:function(j){var J=-j.utcOffset(),Q=Math.abs(J),U=Math.floor(Q/60),X=Q%60;return(J<=0?"+":"-")+w$(U,2,"0")+":"+w$(X,2,"0")},m:function j(J,Q){if(J.date()<Q.date())return-j(Q,J);var U=12*(Q.year()-J.year())+(Q.month()-J.month()),X=J.clone().add(U,w),B=Q-X<0,F=J.clone().add(U+(B?-1:1),w);return+(-(U+(Q-X)/(B?X-F:F-X))||0)},a:function(j){return j<0?Math.ceil(j)||0:Math.floor(j)},p:function(j){return{M:w,y:T,w:O,d:Z,D:x,h:R,m:Y,s:W,ms:_,Q:C}[j]||String(j||"").toLowerCase().replace(/s$/,"")},u:function(j){return j===void 0}},c="en",v={};v[c]=l$;var P$="$isDayjsObject",j$=function(j){return j instanceof _$||!(!j||!j[P$])},M$=function j(J,Q,U){var X;if(!J)return c;if(typeof J=="string"){var B=J.toLowerCase();v[B]&&(X=B),Q&&(v[B]=Q,X=B);var F=J.split("-");if(!X&&F.length>1)return j(F[0])}else{var K=J.name;v[K]=J,X=K}return!U&&X&&(c=X),X||!U&&c},A=function(j,J){if(j$(j))return j.clone();var Q=typeof J=="object"?J:{};return Q.date=j,Q.args=arguments,new _$(Q)},z=n$;z.l=M$,z.i=j$,z.w=function(j,J){return A(j,{locale:J.$L,utc:J.$u,x:J.$x,$offset:J.$offset})};var _$=function(){function j(Q){this.$L=M$(Q.locale,null,!0),this.parse(Q),this.$x=this.$x||Q.x||{},this[P$]=!0}var J=j.prototype;return J.parse=function(Q){this.$d=function(U){var{date:X,utc:B}=U;if(X===null)return new Date(NaN);if(z.u(X))return new Date;if(X instanceof Date)return new Date(X);if(typeof X=="string"&&!/Z$/i.test(X)){var F=X.match(i$);if(F){var K=F[2]-1||0,P=(F[7]||"0").substring(0,3);return B?new Date(Date.UTC(F[1],K,F[3]||1,F[4]||0,F[5]||0,F[6]||0,P)):new Date(F[1],K,F[3]||1,F[4]||0,F[5]||0,F[6]||0,P)}}return new Date(X)}(Q),this.init()},J.init=function(){var Q=this.$d;this.$y=Q.getFullYear(),this.$M=Q.getMonth(),this.$D=Q.getDate(),this.$W=Q.getDay(),this.$H=Q.getHours(),this.$m=Q.getMinutes(),this.$s=Q.getSeconds(),this.$ms=Q.getMilliseconds()},J.$utils=function(){return z},J.isValid=function(){return this.$d.toString()!==T$},J.isSame=function(Q,U){var X=A(Q);return this.startOf(U)<=X&&X<=this.endOf(U)},J.isAfter=function(Q,U){return A(Q)<this.startOf(U)},J.isBefore=function(Q,U){return this.endOf(U)<A(Q)},J.$g=function(Q,U,X){return z.u(Q)?this[U]:this.set(X,Q)},J.unix=function(){return Math.floor(this.valueOf()/1000)},J.valueOf=function(){return this.$d.getTime()},J.startOf=function(Q,U){var X=this,B=!!z.u(U)||U,F=z.p(Q),K=function(y,H){var S=z.w(X.$u?Date.UTC(X.$y,H,y):new Date(X.$y,H,y),X);return B?S:S.endOf(Z)},P=function(y,H){return z.w(X.toDate()[y].apply(X.toDate("s"),(B?[0,0,0,0]:[23,59,59,999]).slice(H)),X)},V=this.$W,E=this.$M,g=this.$D,m="set"+(this.$u?"UTC":"");switch(F){case T:return B?K(1,0):K(31,11);case w:return B?K(1,E):K(0,E+1);case O:var h=this.$locale().weekStart||0,i=(V<h?V+7:V)-h;return K(B?g-i:g+(6-i),E);case Z:case x:return P(m+"Hours",0);case R:return P(m+"Minutes",1);case Y:return P(m+"Seconds",2);case W:return P(m+"Milliseconds",3);default:return this.clone()}},J.endOf=function(Q){return this.startOf(Q,!1)},J.$set=function(Q,U){var X,B=z.p(Q),F="set"+(this.$u?"UTC":""),K=(X={},X[Z]=F+"Date",X[x]=F+"Date",X[w]=F+"Month",X[T]=F+"FullYear",X[R]=F+"Hours",X[Y]=F+"Minutes",X[W]=F+"Seconds",X[_]=F+"Milliseconds",X)[B],P=B===Z?this.$D+(U-this.$W):U;if(B===w||B===T){var V=this.clone().set(x,1);V.$d[K](P),V.init(),this.$d=V.set(x,Math.min(this.$D,V.daysInMonth())).$d}else K&&this.$d[K](P);return this.init(),this},J.set=function(Q,U){return this.clone().$set(Q,U)},J.get=function(Q){return this[z.p(Q)]()},J.add=function(Q,U){var X,B=this;Q=Number(Q);var F=z.p(U),K=function(E){var g=A(B);return z.w(g.date(g.date()+Math.round(E*Q)),B)};if(F===w)return this.set(w,this.$M+Q);if(F===T)return this.set(T,this.$y+Q);if(F===Z)return K(1);if(F===O)return K(7);var P=(X={},X[Y]=D,X[R]=M,X[W]=$,X)[F]||1,V=this.$d.getTime()+Q*P;return z.w(V,this)},J.subtract=function(Q,U){return this.add(-1*Q,U)},J.format=function(Q){var U=this,X=this.$locale();if(!this.isValid())return X.invalidDate||T$;var B=Q||"YYYY-MM-DDTHH:mm:ssZ",F=z.z(this),K=this.$H,P=this.$m,V=this.$M,E=X.weekdays,g=X.months,m=X.meridiem,h=function(H,S,p,W$){return H&&(H[S]||H(U,B))||p[S].slice(0,W$)},i=function(H){return z.s(K%12||12,H,"0")},y=m||function(H,S,p){var W$=H<12?"AM":"PM";return p?W$.toLowerCase():W$};return B.replace(p$,function(H,S){return S||function(p){switch(p){case"YY":return String(U.$y).slice(-2);case"YYYY":return z.s(U.$y,4,"0");case"M":return V+1;case"MM":return z.s(V+1,2,"0");case"MMM":return h(X.monthsShort,V,g,3);case"MMMM":return h(g,V);case"D":return U.$D;case"DD":return z.s(U.$D,2,"0");case"d":return String(U.$W);case"dd":return h(X.weekdaysMin,U.$W,E,2);case"ddd":return h(X.weekdaysShort,U.$W,E,3);case"dddd":return E[U.$W];case"H":return String(K);case"HH":return z.s(K,2,"0");case"h":return i(1);case"hh":return i(2);case"a":return y(K,P,!0);case"A":return y(K,P,!1);case"m":return String(P);case"mm":return z.s(P,2,"0");case"s":return String(U.$s);case"ss":return z.s(U.$s,2,"0");case"SSS":return z.s(U.$ms,3,"0");case"Z":return F}return null}(H)||F.replace(":","")})},J.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},J.diff=function(Q,U,X){var B,F=this,K=z.p(U),P=A(Q),V=(P.utcOffset()-this.utcOffset())*D,E=this-P,g=function(){return z.m(F,P)};switch(K){case T:B=g()/12;break;case w:B=g();break;case C:B=g()/3;break;case O:B=(E-V)/604800000;break;case Z:B=(E-V)/86400000;break;case R:B=E/M;break;case Y:B=E/D;break;case W:B=E/$;break;default:B=E}return X?B:z.a(B)},J.daysInMonth=function(){return this.endOf(w).$D},J.$locale=function(){return v[this.$L]},J.locale=function(Q,U){if(!Q)return this.$L;var X=this.clone(),B=M$(Q,U,!0);return B&&(X.$L=B),X},J.clone=function(){return z.w(this.$d,this)},J.toDate=function(){return new Date(this.valueOf())},J.toJSON=function(){return this.isValid()?this.toISOString():null},J.toISOString=function(){return this.$d.toISOString()},J.toString=function(){return this.$d.toUTCString()},j}(),A$=_$.prototype;return A.prototype=A$,[["$ms",_],["$s",W],["$m",Y],["$H",R],["$W",Z],["$M",w],["$y",T],["$D",x]].forEach(function(j){A$[j[1]]=function(J){return this.$g(J,j[0],j[1])}}),A.extend=function(j,J){return j.$i||(j(J,_$,A),j.$i=!0),A},A.locale=M$,A.isDayjs=j$,A.unix=function(j){return A(1000*j)},A.en=v[c],A.Ls=v,A.p={},A})});import{HttpMethod as K2,HttpStatus as L2,HttpStatusCode as T2,ContentType as P2}from "yinzerflow/constants/index.js";var c$=E$(C$(),1);import{createServer as b1}from"net";import{DEFAULT_GRACEFUL_SHUTDOWN_TIMEOUT as M1,DEFAULT_HEADERS_TIMEOUT as _1,DEFAULT_KEEP_ALIVE_TIMEOUT as W1,DEFAULT_PORT as Y1,DEFAULT_SOCKET_TIMEOUT as R1}from "yinzerflow/constants/index.js";import{HttpStatusCode as Z1}from "yinzerflow/constants/index.js";class B${port;errorHandler;connectionOptions;parserOptions;constructor($){this.port=this._setPort($?.port),this.errorHandler=this._setErrorHandler($?.errorHandler),this.connectionOptions=this._setConnectionOptions($?.connectionOptions),this.parserOptions=this._setParserOptions($?.parserOptions)}_setPort($){let D=typeof $==="string"?parseInt($,10):$??Y1;if(isNaN(D)||D<0||D>65535)throw new Error("Invalid port number");return D}_setErrorHandler($){if($&&typeof $!=="function")throw new Error("Error handler must be a function");return $??(({response:D},M)=>{if(console.error(`Server error:
2
+ `,M),D.setStatus(Z1.INTERNAL_SERVER_ERROR),M instanceof Error)return{success:!1,message:M.message};return{success:!1,message:"An unknown error occurred"}})}_setConnectionOptions($){let D={socketTimeout:this._normalizeTimeout($?.socketTimeout,R1),gracefulShutdownTimeout:this._normalizeTimeout($?.gracefulShutdownTimeout,M1),keepAliveTimeout:this._normalizeTimeout($?.keepAliveTimeout,W1),headersTimeout:this._normalizeTimeout($?.headersTimeout,_1)};if(D.headersTimeout<=D.keepAliveTimeout)throw new Error("headersTimeout must be greater than keepAliveTimeout");return D}_normalizeTimeout($,D){let M=typeof $==="string"?parseInt($,10):$??D;if(isNaN(M)||M<0)throw new Error("Timeout must be a positive number");return M}_setParserOptions($){let D=$??{};if(D.json?.raw!==void 0&&typeof D.json.raw!=="boolean")throw new Error("JSON parser raw option must be a boolean");if(D.yaml?.raw!==void 0&&typeof D.yaml.raw!=="boolean")throw new Error("YAML parser raw option must be a boolean");return D}}import{HttpMethod as Q1}from "yinzerflow/constants/index.js";var n=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:Q1.GET,..._});import{HttpMethod as X1}from "yinzerflow/constants/index.js";var o=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:X1.POST,..._});import{HttpMethod as J1}from "yinzerflow/constants/index.js";var r=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:J1.PUT,..._});import{HttpMethod as G1}from "yinzerflow/constants/index.js";var s=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:G1.DELETE,..._});import{HttpMethod as U1}from "yinzerflow/constants/index.js";var a=($)=>(D,M,_)=>$.addRoute({path:D,handler:M,method:U1.PATCH,..._});import{EventEmitter as O1}from"events";import{RouteRegistryEvent as q}from "yinzerflow/constants/index.js";class t extends O1{_routes=new Map;getRoutes(){return this._routes}hasRoute($,D){let M=this.createRouteKey($,D);return this._routes.has(M)}getRoute($,D){let M=this.createRouteKey($,D);return this._routes.get(M)}createRouteKey($,D){return`${$}:${D}`}validatePath($){if(!$.startsWith("/"))throw new Error(`Route path must start with a slash: ${$}`);if($.includes("//"))throw new Error(`Route path must not contain consecutive slashes: ${$}`);let D=/:\w+/g,M=$.match(D)??[];for(let _ of M)if(_===":")throw new Error(`Route path parameter must have a name: ${$}`)}addRoute($){let{path:D,handler:M,method:_,beforeHandler:W,afterHandler:Y}=$;this.validatePath(D);let R={path:D,method:_,handler:M,beforeHandler:W??void 0,afterHandler:Y??void 0},Z=this.createRouteKey(_,D);if(this._routes.has(Z))console.warn(`Route already exists and will be overwritten: ${_} ${D}`);return this._routes.set(Z,R),this.emit(q.ROUTE_ADDED,R),this.emit(q.ROUTES_CHANGED),R}removeRoute($,D){let M=this.createRouteKey($,D),_=this._routes.get(M);if(!_)return!1;let W=this._routes.delete(M);if(W)this.emit(q.ROUTE_REMOVED,_),this.emit(q.ROUTES_CHANGED);return W}addGroup($,D,M){this.validatePath($);let _="";if($==="/")_="";else if($.endsWith("/"))_=$;else _=`${$}/`;for(let W of D){let Y=W.path.startsWith("/")?W.path:`/${W.path}`,R=`${_}${Y.substring(1)}`,Z=this.createRouteKey(W.method,R);this._routes.set(Z,{...W,path:R,beforeGroup:M?.beforeGroup}),this.emit(q.ROUTE_ADDED,this._routes.get(Z))}this.emit(q.ROUTES_CHANGED)}addRoutes($){for(let D of $){this.validatePath(D.path);let M=this.createRouteKey(D.method,D.path);this._routes.set(M,D),this.emit(q.ROUTE_ADDED,D)}this.emit(q.ROUTES_CHANGED)}clearRoutes(){this._routes.clear(),this.emit(q.ROUTES_CHANGED)}get routeCount(){return this._routes.size}}import{RouteRegistryEvent as k1}from "yinzerflow/constants/index.js";class e{routeRegistry;patternRouteCache=new Map;constructor($){this.routeRegistry=$;this.buildPatternRouteCache()}buildPatternRouteCache(){let $=this.routeRegistry.getRoutes();this.patternRouteCache.clear();for(let[,D]of $)if(D.path.includes(":")){let{method:M}=D,_=this.patternRouteCache.get(M)??[],W=this.createRouteRegex(D.path);_.push({pattern:W,route:D}),this.patternRouteCache.set(M,_)}}createRouteRegex($){let D=$.replace(/:[^/]+/g,"([^/]+)").replace(/(?:[.+*?^$()[\]{}|])/g,"\\$&");return new RegExp(`^${D}$`)}findRoute($,D){return this.routeRegistry.getRoute($,D)}findRouteFromRequest($){let D=$.path!=="/"&&$.path.endsWith("/")?$.path.slice(0,-1):$.path,M=this.findRoute($.method,D);if(M)return M;let _=this.patternRouteCache.get($.method);if(!_)return;for(let{pattern:W,route:Y}of _)if(W.test(D))return Y;return}extractParamsFromPath($,D){let M={};if(!D.includes(":"))return M;let W=($.split("?")[0]??"").split("/").filter(Boolean),Y=D.split("/").filter(Boolean);for(let R=0;R<Y.length;R++){let Z=Y[R];if(Z?.startsWith(":")){let O=Z.substring(1);if(R<W.length){let w=W[R];if(w)M[O]=decodeURIComponent(w)}}}return M}updatePatternRouteCache(){this.buildPatternRouteCache()}}import{ContentType as h$}from "yinzerflow/constants/index.js";var F$=($,D)=>{let M=$.indexOf(D);if(M===-1)return[$,""];let _=$.slice(0,M),W=$.slice(M+D.length);return[_,W]},R$=($)=>new TextEncoder().encode($).length;var Z$=($)=>{try{return w1($)}catch(D){throw new Error(`Invalid YAML: ${D instanceof Error?D.message:String(D)}`)}},w1=($)=>{let D=Object.create(null),M=$.split(/\r?\n/),_=[{indent:-1,obj:D}],W={};for(let Y=0;Y<M.length;Y++)try{let R=M[Y];if(R!==void 0)I$(R,_,Y+1,W)}catch(R){throw new Error(`Line ${Y+1}: ${R instanceof Error?R.message:String(R)}`)}return D},I$=($,D,M=0,_={})=>{if(!$||$.trim()===""||$.trim().startsWith("#"))return;let W=$.search(/\S/),Y=$.trim();if(D[D.length-1]?.multilineKey){F1($,W,D);return}j1(Y,W,D,M,_)},j1=($,D,M,_,W)=>{if($.startsWith("-"))K1($,D,M,_,W);else if($.includes(":"))f$($,D,M,_,W);else if($.startsWith("&"));else if($.startsWith("*"))B1($,M,W)},B1=($,D,M)=>{let _=$.substring(1).trim();if(!(_ in M))throw new Error(`Unknown alias: ${_}`);let W=M[_],Y=D[D.length-1];if(!Y)return;if(Y.isArray&&Array.isArray(Y.obj))Y.obj.push(W)},F1=($,D,M)=>{let _=M[M.length-1];if(!_||!_.multilineKey)return;if(D<=_.indent){z1(_),I$($,M);return}let W=$.slice(_.indent+2);if(_.multilineValue)_.multilineValue+=`
3
+ ${W}`;else _.multilineValue=W},z1=($)=>{if(typeof $.obj==="object"&&$.obj!==null&&!Array.isArray($.obj)&&$.multilineKey){let D=$.obj,M=$.multilineValue??"",_=$.multilineKey;if($.multilineType==="literal")D[_]=M;else D[_]=M.replace(/\n/g," ")}delete $.multilineKey,delete $.multilineValue,delete $.multilineType},K1=($,D,M,_=0,W={})=>{let Y=$.substring(1).trim();v$(M,D);let R=M[M.length-1];if(!R)return;if(R.isArray&&Array.isArray(R.obj))q$({itemContent:Y,indent:D,stack:M,array:R.obj,lineNumber:_},W);else{if(typeof R.obj==="object"&&R.obj!==null&&!Array.isArray(R.obj)){let{obj:Z,arrayKey:O}=R;if(O&&O in Z){if(!Array.isArray(Z[O]))Z[O]=[];let w=Z[O];q$({itemContent:Y,indent:D,stack:M,array:w,lineNumber:_},W),M.push({indent:D,obj:w,isArray:!0});return}}L1({itemContent:Y,indent:D,stack:M,lastStackItem:R,lineNumber:_},W)}},q$=($,D={})=>{let{itemContent:M,indent:_,stack:W,array:Y,lineNumber:R}=$;if(!Y)return;let{processedContent:Z,anchorName:O}=x$(M);if(Z.includes(":")){let w=Object.create(null);if(Y.push(w),O)D[O]=w;let[C,T]=Z.split(":",2);if(C)S$({key:C,value:T,indent:_,stack:W,obj:w,lineNumber:R??0})}else{let w=Q$(Z);if(Y.push(w),O)D[O]=w}},x$=($)=>{let D=$,M=null;if($.startsWith("&")){let _=$.indexOf(" ");if(_>1)M=$.substring(1,_),D=$.substring(_+1)}return{processedContent:D,anchorName:M}},S$=($)=>{let{key:D,value:M,indent:_,stack:W,obj:Y}=$;if(typeof Y!=="object"||Y===null||Array.isArray(Y))return;let R=Y,Z=D.trim(),O=M?.trim()??"";if(O==="")R[Z]=Object.create(null),W.push({indent:_+2,obj:R[Z]});else if(O==="|"||O===">"){if(W.length>0){let w=W[W.length-1];if(w)w.multilineKey=Z,w.multilineType=O==="|"?"literal":"folded"}}else R[Z]=Q$(O)},L1=($,D={})=>{let{itemContent:M,indent:_,stack:W,lastStackItem:Y}=$;if(!Y)return;if(typeof Y.obj==="object"&&Y.obj!==null&&!Array.isArray(Y.obj)){let R=Y.obj,Z=Y.arrayKey??"items";R[Z]=[];let O=R[Z];T1(M,_,W,O,D)}},T1=($,D,M,_,W)=>{let{processedContent:Y,anchorName:R}=x$($);if(Y.includes(":")){let Z=Object.create(null);if(_.push(Z),R)W[R]=Z;let[O,w]=Y.split(":",2);if(O)S$({key:O,value:w,indent:D,stack:M,obj:Z,lineNumber:0})}else{let Z=Q$(Y);if(_.push(Z),R)W[R]=Z}M.push({indent:D,obj:_,isArray:!0})},f$=($,D,M,_=0,W={})=>{let{processedContent:Y,key:R,value:Z,anchorName:O}=P1($);if(!R)return;let w=R.trim(),C=Z?.trim()??"";v$(M,D);let T=M[M.length-1];if(!T)return;if(A1($,D,M,T,_,W))return;if(typeof T.obj!=="object"||T.obj===null||Array.isArray(T.obj))return;let x=T.obj;V1(w,C,Y,D,M,x,T,O,W)},P1=($)=>{let D=$,M=null,_=$.indexOf(":");if(_!==-1){let R=$.substring(0,_).trim(),Z=$.substring(_+1).trim();if(Z.startsWith("&")){let O=Z.indexOf(" ");if(O>1)M=Z.substring(1,O),Z=Z.substring(O+1),D=`${R}: ${Z}`}}let[W,Y]=D.split(":",2);return{processedContent:D,key:W,value:Y,anchorName:M}},A1=($,D,M,_,W,Y)=>{if(_.isArray)return M.pop(),f$($,D,M,W,Y),!0;return!1},V1=($,D,M,_,W,Y,R,Z,O)=>{if(D==="")E1($,M,_,W,Y,Z,O);else if(D==="|"||D===">")R.multilineKey=$,R.multilineType=D==="|"?"literal":"folded";else{let w=Q$(D);if(Y[$]=w,Z)O[Z]=w}},E1=($,D,M,_,W,Y,R)=>{if(D.endsWith(":")){if(W[$]=Object.create(null),Y)R[Y]=W[$];_.push({indent:M,obj:W[$],arrayKey:$})}else{if(W[$]=Object.create(null),Y)R[Y]=W[$];_.push({indent:M,obj:W[$]})}},v$=($,D)=>{while($.length>1){let M=$[$.length-1];if(M&&M.indent>=D)$.pop();else break}},Q$=($)=>{if($.startsWith('"')&&$.endsWith('"')||$.startsWith("'")&&$.endsWith("'"))return $.slice(1,-1);if(H1($))return null;let D=N1($);if(D!==void 0)return D;let M=g1($);if(M!==void 0)return M;let _=C1($);if(_ instanceof Date)return _.toISOString();let W=q1($);if(W!==void 0)return W;return $},H1=($)=>$==="null"||$==="~"||$==="",N1=($)=>{let D=$.toLowerCase();if(D==="true")return!0;if(D==="false")return!1;return},g1=($)=>{if($===".inf"||$===".Inf"||$===".INF")return 1/0;if($==="-.inf"||$==="-.Inf"||$==="-.INF")return-1/0;if($===".nan"||$===".NaN"||$===".NAN")return NaN;return},C1=($)=>{if(/^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?$/.test($)){let M=new Date($);return isNaN(M.getTime())?$:M}return $},q1=($)=>{if(/^-?\d+(?:\.\d+)?$/.test($))return Number($);if(/^0x[0-9a-fA-F]+$/.test($))return parseInt($,16);if(/^0o[0-7]+$/.test($))return parseInt($.substring(2),8);return};var I1=($)=>{let M=$.split(`\r
4
+ `).find((W)=>W.toLowerCase().startsWith("content-type:"));if(!M)return;return M.slice(M.indexOf(":")+1).trim()},x1=($)=>{let D={name:""},_=$.split(`\r
5
+ `).find((R)=>R.toLowerCase().startsWith("content-disposition:"));if(!_)return D;let W=/name="(?<name>[^"]*)"/.exec(_),Y=/filename="(?<filename>[^"]*)"/.exec(_);if(W?.groups?.name)D.name=W.groups.name;if(Y?.groups?.filename)Object.assign(D,{filename:Y.groups.filename});return D},S1=($)=>{let D=$.startsWith(`\r
5
6
  `)?$.slice(2):$,M=D.indexOf(`\r
6
7
  \r
7
- `);if(M===-1)return["",""];let _=D.slice(0,M),R=D.slice(M+4).trim();return[_,R]},Q$=($,D)=>{let M={fields:{},files:[]},R=/^--(?<boundary>[^\r\n]+)/.exec($)?.groups?.boundary??null;if(!R)throw new Error("Invalid multipart form data: missing boundary");let W=$.split(`--${R}`).slice(1);for(let Y of W){if(!Y||Y.trim()==="--")continue;let[Z,G]=g1(Y);if(!Z||!G)continue;let z=N1(Z);if(!z.name)continue;if(z.filename)M.files.push(C1({contentDisposition:z,contentSection:G,headersSection:Z,parserOptions:D}));else M.fields[z.name]=G}return M},C1=({contentDisposition:$,contentSection:D,headersSection:M,parserOptions:_})=>{let R=H1(M)??"application/octet-stream",W={filename:$.filename??"",contentType:R,size:Y$(D),content:D};if((R===h$.YAML_APPLICATION||R===h$.YAML_TEXT)&&typeof W.content==="string"){if(_?.yaml?.raw)return W;W.content=Z$(W.content)}return W};var X$=($)=>{try{return JSON.parse($)}catch(D){throw new Error(`Invalid JSON: ${D instanceof Error?D.message:String(D)}`)}};var J$=($)=>$!==null&&typeof $==="object"&&("fields"in $)&&("files"in $)&&Array.isArray($.files)&&typeof $.fields==="object";var y$=($)=>!J$($)&&typeof $==="object";import{ContentType as b$,HttpMethod as m$}from "yinzerflow/constants/index.js";class u{protocol;method;path;headers;body;query;params;constructor($,D){let{protocol:M,method:_,path:R,headers:W,body:Y,query:Z,params:G}=this._parseRequest($,D);this.protocol=M,this.method=_,this.path=R,this.headers=W,this.body=Y,this.query=Z,this.params=G}parseParams=($)=>{let D={};if(typeof $.path!=="string")return D;if(typeof this.path!=="string")return D;let M=$.path.match(/:[^/]+/g),_=M?M.map((Z)=>Z.slice(1)):[];if(_.length===0)return D;let R=$.path.replace(/:[^/]+/g,"([^/]+)"),W=new RegExp(`^${R}$`),Y=this.path.match(W);if(!Y)return D;for(let Z=0;Z<_.length;Z++){let G=Y[Z+1],z=_[Z];if(G&&z)D[z]=G}return D};_parseRequest=($,D)=>{if(!$)throw new Error("Invalid request");let[M,_]=B$($,`\r
8
- `),[R,W,Y]=M.split(" ",3),[Z,G]=B$(_,`\r
8
+ `);if(M===-1)return["",""];let _=D.slice(0,M),W=D.slice(M+4).trim();return[_,W]},X$=($,D)=>{let M={fields:{},files:[]},W=/^--(?<boundary>[^\r\n]+)/.exec($)?.groups?.boundary??null;if(!W)throw new Error("Invalid multipart form data: missing boundary");let Y=$.split(`--${W}`).slice(1);for(let R of Y){if(!R||R.trim()==="--")continue;let[Z,O]=S1(R);if(!Z||!O)continue;let w=x1(Z);if(!w.name)continue;if(w.filename)M.files.push(f1({contentDisposition:w,contentSection:O,headersSection:Z,parserOptions:D}));else M.fields[w.name]=O}return M},f1=({contentDisposition:$,contentSection:D,headersSection:M,parserOptions:_})=>{let W=I1(M)??"application/octet-stream",Y={filename:$.filename??"",contentType:W,size:R$(D),content:D};if((W===h$.YAML_APPLICATION||W===h$.YAML_TEXT)&&typeof Y.content==="string"){if(_?.yaml?.raw)return Y;Y.content=Z$(Y.content)}return Y};var J$=($)=>{try{return JSON.parse($)}catch(D){throw new Error(`Invalid JSON: ${D instanceof Error?D.message:String(D)}`)}};var G$=($)=>$!==null&&typeof $==="object"&&("fields"in $)&&("files"in $)&&Array.isArray($.files)&&typeof $.fields==="object";var y$=($)=>!G$($)&&typeof $==="object";import{ContentType as b$,HttpMethod as k$}from "yinzerflow/constants/index.js";class u{protocol;method;path;headers;body;query;params;constructor($,D){let{protocol:M,method:_,path:W,headers:Y,body:R,query:Z,params:O}=this._parseRequest($,D);this.protocol=M,this.method=_,this.path=W,this.headers=Y,this.body=R,this.query=Z,this.params=O}parseParams=($)=>{let D={};if(typeof $.path!=="string")return D;if(typeof this.path!=="string")return D;let M=$.path.match(/:[^/]+/g),_=M?M.map((Z)=>Z.slice(1)):[];if(_.length===0)return D;let W=$.path.replace(/:[^/]+/g,"([^/]+)"),Y=new RegExp(`^${W}$`),R=this.path.match(Y);if(!R)return D;for(let Z=0;Z<_.length;Z++){let O=R[Z+1],w=_[Z];if(O&&w)D[w]=O}return D};_parseRequest=($,D)=>{if(!$)throw new Error("Invalid request");let[M,_]=F$($,`\r
9
+ `),[W,Y,R]=M.split(" ",3),[Z,O]=F$(_,`\r
9
10
  \r
10
- `),z=this._parseHeaders(Z),C=this._parseQuery(W),K={};if(G&&R!==m$.GET&&R!==m$.HEAD)K=this._parseBody(z,G,D);return{protocol:Y,method:R,path:W,headers:z,body:K,query:C,params:{}}};_parseBody=($,D,M)=>{if(!$["Content-Type"])throw new Error("Missing Content-Type header");let _=$["Content-Type"];if(_===b$.JSON){if(M?.json?.raw)return D;return X$(D)}if(_.includes(b$.MULTIPART))return Q$(D,M);return D};_parseHeaders=($)=>{let D={};if(!$)return D;let _=$.replace(/\r\n|\r|\n/g,`
11
+ `),w=this._parseHeaders(Z),C=this._parseQuery(Y),T={};if(O&&W!==k$.GET&&W!==k$.HEAD)T=this._parseBody(w,O,D);return{protocol:R,method:W,path:Y,headers:w,body:T,query:C,params:{}}};_parseBody=($,D,M)=>{if(!$["Content-Type"])throw new Error("Missing Content-Type header");let _=$["Content-Type"];if(_===b$.JSON){if(M?.json?.raw)return D;return J$(D)}if(_.includes(b$.MULTIPART))return X$(D,M);return D};_parseHeaders=($)=>{let D={};if(!$)return D;let _=$.replace(/\r\n|\r|\n/g,`
11
12
  `).split(`
12
- `);for(let R of _){if(!R)continue;let W=R.indexOf(":");if(W===-1)continue;let Y=R.slice(0,W).trim(),Z=R.slice(W+1).trim();if(Y)D[Y]=Z}return D};_parseQuery=($)=>{if(!$)return{};if(!$.includes("?"))return{};let[,D]=$.split("?");if(!D)return{};let M={},_=D.split("&");for(let R of _){let[W,Y]=R.split("=");if(W)M[decodeURIComponent(W)]=Y?decodeURIComponent(Y):""}return M}}var d$=E$(k$(),1);import{ContentType as u$,HttpStatus as L,HttpStatusCode as N}from "yinzerflow/constants/index.js";class b{protocol;method;path;status;statusCode;statusText;headers={};body="";_formattedBody="";constructor($){this.method=$.method,this.path=$.path,this.protocol=$.protocol,this.statusCode=N.OK,this.status=L.OK,this.statusText=L.OK,this.headers={Date:d$.default().format("ddd, DD MMM YYYY HH:mm:ss [GMT]"),Connection:"keep-alive","Keep-Alive":"timeout=5, max=1000","Content-Type":u$.JSON,"Content-Length":"0"}}addHeaders($){for(let D of $)this.headers={...this.headers,...D}}removeHeaders($){for(let D of $)delete this.headers[D]}modifyHeader($,D){this.headers[$]=D}setStatus($){let D={[N.OK]:{status:L.OK,text:L.OK},[N.CREATED]:{status:L.CREATED,text:L.CREATED},[N.NO_CONTENT]:{status:L.NO_CONTENT,text:L.NO_CONTENT},[N.BAD_REQUEST]:{status:L.BAD_REQUEST,text:L.BAD_REQUEST},[N.UNAUTHORIZED]:{status:L.UNAUTHORIZED,text:L.UNAUTHORIZED},[N.FORBIDDEN]:{status:L.FORBIDDEN,text:L.FORBIDDEN},[N.NOT_FOUND]:{status:L.NOT_FOUND,text:L.NOT_FOUND},[N.METHOD_NOT_ALLOWED]:{status:L.METHOD_NOT_ALLOWED,text:L.METHOD_NOT_ALLOWED},[N.CONFLICT]:{status:L.CONFLICT,text:L.CONFLICT},[N.UNSUPPORTED_MEDIA_TYPE]:{status:L.UNSUPPORTED_MEDIA_TYPE,text:L.UNSUPPORTED_MEDIA_TYPE},[N.TOO_MANY_REQUESTS]:{status:L.TOO_MANY_REQUESTS,text:L.TOO_MANY_REQUESTS},[N.INTERNAL_SERVER_ERROR]:{status:L.INTERNAL_SERVER_ERROR,text:L.INTERNAL_SERVER_ERROR}},M=D[$]||D[N.OK];this.statusCode=$,this.status=M.status,this.statusText=M.text}setBody($){if(this.body=$,this._formattedBody=this._formatResponseBody($),!this.headers["Content-Type"])this.headers["Content-Type"]=u$.JSON;this.headers["Content-Length"]=String(Y$(this._formattedBody))}formatHttpResponse(){let $=`${this.protocol} ${this.statusCode} ${String(this.status)}`,D=Object.entries(this.headers).map(([M,_])=>`${M}: ${_}`).join(`\r
13
+ `);for(let W of _){if(!W)continue;let Y=W.indexOf(":");if(Y===-1)continue;let R=W.slice(0,Y).trim(),Z=W.slice(Y+1).trim();if(R)D[R]=Z}return D};_parseQuery=($)=>{if(!$)return{};if(!$.includes("?"))return{};let[,D]=$.split("?");if(!D)return{};let M={},_=D.split("&");for(let W of _){let[Y,R]=W.split("=");if(Y)M[decodeURIComponent(Y)]=R?decodeURIComponent(R):""}return M}}var d$=E$(m$(),1);import{ContentType as u$,HttpStatus as L,HttpStatusCode as N}from "yinzerflow/constants/index.js";class b{protocol;method;path;status;statusCode;statusText;headers={};body="";_formattedBody="";constructor($){this.method=$.method,this.path=$.path,this.protocol=$.protocol,this.statusCode=N.OK,this.status=L.OK,this.statusText=L.OK,this.headers={Date:d$.default().format("ddd, DD MMM YYYY HH:mm:ss [GMT]"),Connection:"keep-alive","Keep-Alive":"timeout=5, max=1000","Content-Type":u$.JSON,"Content-Length":"0"}}addHeaders($){for(let D of $)this.headers={...this.headers,...D}}removeHeaders($){for(let D of $)delete this.headers[D]}modifyHeader($,D){this.headers[$]=D}setStatus($){let D={[N.OK]:{status:L.OK,text:L.OK},[N.CREATED]:{status:L.CREATED,text:L.CREATED},[N.NO_CONTENT]:{status:L.NO_CONTENT,text:L.NO_CONTENT},[N.BAD_REQUEST]:{status:L.BAD_REQUEST,text:L.BAD_REQUEST},[N.UNAUTHORIZED]:{status:L.UNAUTHORIZED,text:L.UNAUTHORIZED},[N.FORBIDDEN]:{status:L.FORBIDDEN,text:L.FORBIDDEN},[N.NOT_FOUND]:{status:L.NOT_FOUND,text:L.NOT_FOUND},[N.METHOD_NOT_ALLOWED]:{status:L.METHOD_NOT_ALLOWED,text:L.METHOD_NOT_ALLOWED},[N.CONFLICT]:{status:L.CONFLICT,text:L.CONFLICT},[N.UNSUPPORTED_MEDIA_TYPE]:{status:L.UNSUPPORTED_MEDIA_TYPE,text:L.UNSUPPORTED_MEDIA_TYPE},[N.TOO_MANY_REQUESTS]:{status:L.TOO_MANY_REQUESTS,text:L.TOO_MANY_REQUESTS},[N.INTERNAL_SERVER_ERROR]:{status:L.INTERNAL_SERVER_ERROR,text:L.INTERNAL_SERVER_ERROR}},M=D[$]||D[N.OK];this.statusCode=$,this.status=M.status,this.statusText=M.text}setBody($){if(this.body=$,this._formattedBody=this._formatResponseBody($),!this.headers["Content-Type"])this.headers["Content-Type"]=u$.JSON;this.headers["Content-Length"]=String(R$(this._formattedBody))}formatHttpResponse(){let $=`${this.protocol} ${this.statusCode} ${String(this.status)}`,D=Object.entries(this.headers).map(([M,_])=>`${M}: ${_}`).join(`\r
13
14
  `);return`${$}\r
14
15
  ${D}\r
15
16
  \r
16
- ${this._formattedBody}`}_formatResponseBody($){if($===null)return"null";switch(typeof $){case"string":return $;case"object":return JSON.stringify($);default:return String($)}}}class m{request;response;constructor($,D){this.request=$,this.response=D}}import{HttpStatusCode as i$}from "yinzerflow/constants/index.js";class d{routeFinder;hooksManager;errorHandler;configManager;constructor($,D,M){this.routeFinder=$,this.hooksManager=D,this.configManager=M,this.errorHandler=M.errorHandler??this._defaultErrorHandler}async handleSocketRequest($,D){let M=new u(D.toString(),this.configManager.parserOptions);try{let _=this.routeFinder.findRouteFromRequest(M),R=_?(M.parseParams(_),await this._processRequest(M,_)):this._createNotFoundResponse(M);await this._sendResponse($,R)}catch(_){let R=await this._handleError(M,_);await this._sendResponse($,R)}}_defaultErrorHandler=({response:$},D)=>{return console.error(`Server error:
17
- `,D),$.setStatus(i$.INTERNAL_SERVER_ERROR),{success:!1,message:"Internal server error"}};async _sendResponse($,D){await new Promise((M)=>{$.write(D.formatHttpResponse(),()=>M()),$.end()})}async _handleError($,D){let M=new m($,new b($)),_=await Promise.resolve(this.errorHandler(M,D));return M.response.setBody(_),M.response}async _processRequest($,D){let M=new m($,new b($)),_=await this._processHooksChain(D,M);if(_)return _;let R=await Promise.resolve(D.handler(M));return await this.hooksManager.processAfterHandler(D,M),M.response.setBody(R),M.response}async _processHooksChain($,D){let M=await this.hooksManager.processBeforeAll($,D);if(M)return D.response.setBody(M),D.response;let _=await this.hooksManager.processBeforeGroup($,D);if(_)return D.response.setBody(_),D.response;let R=await this.hooksManager.processBeforeHandler($,D);if(R)return D.response.setBody(R),D.response;return}_createNotFoundResponse($){let D=new m($,new b($));return D.response.setStatus(i$.NOT_FOUND),D.response.setBody({success:!1,message:"Not found"}),D.response}}import{EventEmitter as I1}from"events";import{ConnectionEvent as f,DEFAULT_SOCKET_TIMEOUT as q1}from "yinzerflow/constants/index.js";class $$ extends I1{_connections=new Set;_server=null;_isListening=!1;_startTime=0;_totalConnections=0;_connectionErrors=0;_socketTimeout;constructor($){super();this._socketTimeout=$??q1}setServer($){if(this._server=$,$)this._totalConnections=0,this._connectionErrors=0}addConnection($,D){try{$.setTimeout(D??this._socketTimeout),this._connections.add($),this._totalConnections++,this.emit(f.CONNECTION_ADDED,$),$.on("close",()=>{this._connections.delete($),this.emit(f.CONNECTION_CLOSED,$)}),$.on("error",(M)=>{this._connectionErrors++,this.emit(f.CONNECTION_ERROR,$,M)}),$.on("timeout",()=>{$.end(`HTTP/1.1 408 Request Timeout\r
17
+ ${this._formattedBody}`}_formatResponseBody($){if($===null)return"null";switch(typeof $){case"string":return $;case"object":return JSON.stringify($);default:return String($)}}}class k{request;response;constructor($,D){this.request=$,this.response=D}}import{HttpStatusCode as v1}from "yinzerflow/constants/index.js";class d{routeFinder;hooksManager;errorHandler;configManager;constructor($,D,M){this.routeFinder=$,this.hooksManager=D,this.configManager=M,this.errorHandler=M.errorHandler}async handleSocketRequest($,D){let M=new u(D.toString(),this.configManager.parserOptions);try{let _=this.routeFinder.findRouteFromRequest(M),W=_?(M.parseParams(_),await this._processRequest(M,_)):this._createNotFoundResponse(M);await this._sendResponse($,W)}catch(_){let W=await this._handleError(M,_);await this._sendResponse($,W)}}async _sendResponse($,D){await new Promise((M)=>{$.write(D.formatHttpResponse(),()=>M()),$.end()})}async _handleError($,D){let M=new k($,new b($)),_=await Promise.resolve(this.errorHandler(M,D));return M.response.setBody(_),M.response}async _processRequest($,D){let M=new k($,new b($)),_=await this._processHooksChain(D,M);if(_)return _;let W=await Promise.resolve(D.handler(M));return await this.hooksManager.processAfterHandler(D,M),M.response.setBody(W),M.response}async _processHooksChain($,D){let M=await this.hooksManager.processBeforeAll($,D);if(M)return D.response.setBody(M),D.response;let _=await this.hooksManager.processBeforeGroup($,D);if(_)return D.response.setBody(_),D.response;let W=await this.hooksManager.processBeforeHandler($,D);if(W)return D.response.setBody(W),D.response;return}_createNotFoundResponse($){let D=new k($,new b($));return D.response.setStatus(v1.NOT_FOUND),D.response.setBody({success:!1,message:"Not found"}),D.response}}import{EventEmitter as h1}from"events";import{ConnectionEvent as f}from "yinzerflow/constants/index.js";class $$ extends h1{_connections=new Set;_server=null;_isListening=!1;_startTime=0;_totalConnections=0;_connectionErrors=0;_configManager;constructor($){super();this._configManager=$}setServer($){if(this._server=$,$)this._totalConnections=0,this._connectionErrors=0}addConnection($){try{let{socketTimeout:D,keepAliveTimeout:M}=this._configManager.connectionOptions;$.setTimeout(D),$.setKeepAlive(!0,M),this._connections.add($),this._totalConnections++,this.emit(f.CONNECTION_ADDED,$),$.on("close",()=>{this._connections.delete($),this.emit(f.CONNECTION_CLOSED,$)}),$.on("error",(_)=>{this._connectionErrors++,this.emit(f.CONNECTION_ERROR,$,_)}),$.on("timeout",()=>{$.end(`HTTP/1.1 408 Request Timeout\r
18
18
  \r
19
- `),$.destroy()})}catch(M){this._connectionErrors++,this.emit(f.CONNECTION_ERROR,$,M)}}getConnections(){return this._connections}getConnectionCount(){return this._connections.size}setListening($){let D=this._isListening;if(this._isListening=$,$&&!D)this._startTime=Date.now(),this.emit(f.SERVER_STARTED);else if(!$&&D)this.emit(f.SERVER_STOPPED)}isListening(){return this._isListening}getServer(){return this._server}getStats(){return{activeConnections:this._connections.size,totalConnections:this._totalConnections,connectionErrors:this._connectionErrors,uptime:this._isListening?Date.now()-this._startTime:0}}async closeAllConnections($){if(this._connections.size===0){this.emit(f.ALL_CONNECTIONS_CLOSED);return}let D=[...this._connections];if($!==void 0&&$>0){for(let M of D)try{M.end(`HTTP/1.1 503 Service Unavailable\r
19
+ `),$.destroy()})}catch(D){this._connectionErrors++,this.emit(f.CONNECTION_ERROR,$,D)}}getConnections(){return this._connections}getConnectionCount(){return this._connections.size}setListening($){let D=this._isListening;if(this._isListening=$,$&&!D)this._startTime=Date.now(),this.emit(f.SERVER_STARTED);else if(!$&&D)this.emit(f.SERVER_STOPPED)}isListening(){return this._isListening}getServer(){return this._server}getStats(){return{activeConnections:this._connections.size,totalConnections:this._totalConnections,connectionErrors:this._connectionErrors,uptime:this._isListening?Date.now()-this._startTime:0}}async closeAllConnections(){if(this._connections.size===0){this.emit(f.ALL_CONNECTIONS_CLOSED);return}let $=[...this._connections],{gracefulShutdownTimeout:D}=this._configManager.connectionOptions;if(D>0){for(let M of $)try{M.end(`HTTP/1.1 503 Service Unavailable\r
20
20
  \r
21
- `)}catch(_){}await new Promise((M)=>{setTimeout(()=>M(),$)})}for(let M of this._connections)try{M.destroy()}catch(_){}this._connections.clear(),this.emit(f.ALL_CONNECTIONS_CLOSED)}}import{EventEmitter as S1}from"events";import{HookManagerEvent as q,HookPhase as U$,PathMatchingPattern as G$}from "yinzerflow/constants/index.js";class D$ extends S1{hooks=[];pathMatchCache=new Map;add($,D){let M={paths:[],excluded:[],fn:$};if(!D);else if(D.paths===G$.ALL_BUT_EXCLUDED&&Array.isArray(D.excluded))M={paths:G$.ALL_BUT_EXCLUDED,excluded:D.excluded,fn:$};else if(Array.isArray(D.paths))M={paths:D.paths,excluded:D.excluded??[],fn:$};return this.hooks.push(M),this.clearPathMatchCache(),this.emit(q.HOOK_ADDED,M),this}clearPathMatchCache(){this.pathMatchCache.clear()}getHooksForPath($){if(this.pathMatchCache.has($))return this.pathMatchCache.get($)??[];let D=this.hooks.filter((M)=>{if(M.paths===G$.ALL_BUT_EXCLUDED)return!this.isPathExcluded($,M.excluded);if(Array.isArray(M.paths))return this.isPathIncluded($,M.paths)&&!this.isPathExcluded($,M.excluded);return!1});return this.pathMatchCache.set($,D),D}isPathIncluded($,D){if(D.length===0)return!0;return D.some((M)=>{if(M===$)return!0;if(M.endsWith("*")){let _=M.slice(0,-1);return $.startsWith(_)}return!1})}isPathExcluded($,D){return this.isPathIncluded($,D)}async processBeforeAll($,D){if(!this.hooks.length)return;let M=this.getHooksForPath($.path);for(let _ of M)try{let R=await Promise.resolve(_.fn(D));if(this.emit(q.HOOK_EXECUTED,{phase:U$.BEFORE_ALL,path:$.path,result:R?"short-circuit":"continue"}),this.emit(q.BEFORE_ALL_EXECUTED,D,_),R)return R}catch(R){throw console.error(`Hook error for path ${$.path}:`,R),R}return}async processBeforeGroup($,D){if(!$.beforeGroup)return;try{let M=await Promise.resolve($.beforeGroup(D));return this.emit(q.HOOK_EXECUTED,{phase:U$.BEFORE_GROUP,path:$.path,result:M?"short-circuit":"continue"}),this.emit(q.BEFORE_GROUP_EXECUTED,D,$.beforeGroup),M}catch(M){throw console.error(`BeforeGroup hook error for path ${$.path}:`,M),M}}async processBeforeHandler($,D){if(!$.beforeHandler)return;try{let M=await Promise.resolve($.beforeHandler(D));return this.emit(q.HOOK_EXECUTED,{phase:U$.BEFORE_HANDLER,path:$.path,result:M?"short-circuit":"continue"}),this.emit(q.BEFORE_HANDLER_EXECUTED,D,$.beforeHandler),M}catch(M){throw console.error(`BeforeHandler hook error for path ${$.path}:`,M),M}}async processAfterHandler($,D){if(!$.afterHandler)return;try{let M=await Promise.resolve($.afterHandler(D));return this.emit(q.HOOK_EXECUTED,{phase:U$.AFTER_HANDLER,path:$.path,result:M?"modified":"unmodified"}),this.emit(q.AFTER_HANDLER_EXECUTED,D,$.afterHandler),M}catch(M){throw console.error(`AfterHandler hook error for path ${$.path}:`,M),M}}clear(){while(this.hooks.length>0)this.hooks.pop();return this.clearPathMatchCache(),this}get hooksCount(){return this.hooks.length}}class L${routeRegistry=new t;routeFinder=new e(this.routeRegistry);hooksManager=new D$;connectionManager;requestHandler;configManager;_ip=l$.default.address();_port=5000;_gracefulShutdownTimeout=5000;get hooks(){return this.hooksManager}get routes(){return this.routeRegistry}get config(){return this.configManager}constructor($){if($?.port)this._port=$.port;if($?.connectionOptions?.gracefulShutdownTimeout)this._gracefulShutdownTimeout=$.connectionOptions.gracefulShutdownTimeout;this.configManager=new F$($),this.connectionManager=new $$($?.connectionOptions?.socketTimeout),this.requestHandler=new d(this.routeFinder,this.hooksManager,this.configManager),this.routeRegistry.on(f1.ROUTES_CHANGED,()=>{this.routeFinder.updatePatternRouteCache()})}get=n(this.routeRegistry);post=o(this.routeRegistry);put=r(this.routeRegistry);delete=s(this.routeRegistry);patch=a(this.routeRegistry);group($,D,M){this.routeRegistry.addGroup($,D,M)}beforeAll($,D){return this.hooksManager.add($,D),this}async listen(){return new Promise(($)=>{let D=x1().listen(this._port,this._ip);this.connectionManager.setServer(D),D.on("listening",()=>{this.connectionManager.setListening(!0),$()}),D.on("connection",(M)=>{this.connectionManager.addConnection(M),M.on("data",(_)=>{this.requestHandler.handleSocketRequest(M,_).catch((R)=>{console.error("Error handling request:",R)})}),M.on("error",(_)=>{console.error("An error occurred with yinzerflow. Please open an issue on GitHub.",_)})}),D.on("error",(M)=>{console.error("An error occurred with yinzerflow. Please open an issue on GitHub.",M)})})}async close(){if(!this.connectionManager.isListening()||!this.connectionManager.getServer())return;await this.connectionManager.closeAllConnections(this._gracefulShutdownTimeout);let $=this.connectionManager.getServer();if(!$)return;return new Promise((D)=>{$.close(()=>{this.connectionManager.setListening(!1),D()})})}getStatus(){return{isListening:this.connectionManager.isListening(),port:this._port,ip:this._ip}}}export{Z$ as parseYaml,Q$ as parseMultipartFormData,X$ as parseApplicationJson,J$ as isMultipartFormData,y$ as isJsonData,r as addPutRoute,o as addPostRoute,a as addPatchRoute,n as addGetRoute,s as addDeleteRoute,L$ as YinzerFlow,t as RouteRegistry,e as RouteFinder,b as Response,d as RequestHandler,u as Request,z2 as HttpStatusCode,G2 as HttpStatus,U2 as HttpMethod,D$ as HooksManager,m as Context,w2 as ContentType,$$ as ConnectionManager};
21
+ `)}catch(_){}await new Promise((M)=>{setTimeout(()=>M(),D)})}for(let M of this._connections)try{M.destroy()}catch(_){}this._connections.clear(),this.emit(f.ALL_CONNECTIONS_CLOSED)}}import{EventEmitter as y1}from"events";import{HookManagerEvent as I,HookPhase as U$,PathMatchingPattern as O$}from "yinzerflow/constants/index.js";class D$ extends y1{hooks=[];pathMatchCache=new Map;add($,D){let M={paths:[],excluded:[],fn:$};if(!D);else if(D.paths===O$.ALL_BUT_EXCLUDED&&Array.isArray(D.excluded))M={paths:O$.ALL_BUT_EXCLUDED,excluded:D.excluded,fn:$};else if(Array.isArray(D.paths))M={paths:D.paths,excluded:D.excluded??[],fn:$};return this.hooks.push(M),this.clearPathMatchCache(),this.emit(I.HOOK_ADDED,M),this}clearPathMatchCache(){this.pathMatchCache.clear()}getHooksForPath($){if(this.pathMatchCache.has($))return this.pathMatchCache.get($)??[];let D=this.hooks.filter((M)=>{if(M.paths===O$.ALL_BUT_EXCLUDED)return!this.isPathExcluded($,M.excluded);if(Array.isArray(M.paths))return this.isPathIncluded($,M.paths)&&!this.isPathExcluded($,M.excluded);return!1});return this.pathMatchCache.set($,D),D}isPathIncluded($,D){if(D.length===0)return!0;return D.some((M)=>{if(M===$)return!0;if(M.endsWith("*")){let _=M.slice(0,-1);return $.startsWith(_)}return!1})}isPathExcluded($,D){return this.isPathIncluded($,D)}async processBeforeAll($,D){if(!this.hooks.length)return;let M=this.getHooksForPath($.path);for(let _ of M)try{let W=await Promise.resolve(_.fn(D));if(this.emit(I.HOOK_EXECUTED,{phase:U$.BEFORE_ALL,path:$.path,result:W?"short-circuit":"continue"}),this.emit(I.BEFORE_ALL_EXECUTED,D,_),W)return W}catch(W){throw console.error(`Hook error for path ${$.path}:`,W),W}return}async processBeforeGroup($,D){if(!$.beforeGroup)return;try{let M=await Promise.resolve($.beforeGroup(D));return this.emit(I.HOOK_EXECUTED,{phase:U$.BEFORE_GROUP,path:$.path,result:M?"short-circuit":"continue"}),this.emit(I.BEFORE_GROUP_EXECUTED,D,$.beforeGroup),M}catch(M){throw console.error(`BeforeGroup hook error for path ${$.path}:`,M),M}}async processBeforeHandler($,D){if(!$.beforeHandler)return;try{let M=await Promise.resolve($.beforeHandler(D));return this.emit(I.HOOK_EXECUTED,{phase:U$.BEFORE_HANDLER,path:$.path,result:M?"short-circuit":"continue"}),this.emit(I.BEFORE_HANDLER_EXECUTED,D,$.beforeHandler),M}catch(M){throw console.error(`BeforeHandler hook error for path ${$.path}:`,M),M}}async processAfterHandler($,D){if(!$.afterHandler)return;try{let M=await Promise.resolve($.afterHandler(D));return this.emit(I.HOOK_EXECUTED,{phase:U$.AFTER_HANDLER,path:$.path,result:M?"modified":"unmodified"}),this.emit(I.AFTER_HANDLER_EXECUTED,D,$.afterHandler),M}catch(M){throw console.error(`AfterHandler hook error for path ${$.path}:`,M),M}}clear(){while(this.hooks.length>0)this.hooks.pop();return this.clearPathMatchCache(),this}get hooksCount(){return this.hooks.length}}class L${routeRegistry=new t;routeFinder=new e(this.routeRegistry);hooksManager=new D$;connectionManager;requestHandler;configManager;_ip=c$.default.address();get hooks(){return this.hooksManager}get config(){return this.configManager}constructor($){this.configManager=new B$($),this.connectionManager=new $$(this.configManager),this.requestHandler=new d(this.routeFinder,this.hooksManager,this.configManager),this.routeRegistry.on(k1.ROUTES_CHANGED,()=>{this.routeFinder.updatePatternRouteCache()})}get=n(this.routeRegistry);post=o(this.routeRegistry);put=r(this.routeRegistry);delete=s(this.routeRegistry);patch=a(this.routeRegistry);group($,D,M){this.routeRegistry.addGroup($,D,M)}beforeAll($,D){return this.hooksManager.add($,D),this}async listen(){return new Promise(($)=>{let{port:D}=this.configManager,M=b1();M.listen(D,this._ip),this.connectionManager.setServer(M),M.on("listening",()=>{this.connectionManager.setListening(!0),$()}),M.on("connection",(_)=>{this.connectionManager.addConnection(_),_.on("data",(W)=>{this.requestHandler.handleSocketRequest(_,W).catch((Y)=>{console.error("Error handling request:",Y)})}),_.on("error",(W)=>{console.error("An error occurred with yinzerflow. Please open an issue on GitHub.",W)})}),M.on("error",(_)=>{console.error("An error occurred with yinzerflow. Please open an issue on GitHub.",_)})})}async close(){if(!this.connectionManager.isListening()||!this.connectionManager.getServer())return;await this.connectionManager.closeAllConnections();let $=this.connectionManager.getServer();if(!$)return;return new Promise((D)=>{$.close(()=>{this.connectionManager.setListening(!1),D()})})}getStatus(){return{isListening:this.connectionManager.isListening(),port:this.configManager.port,ip:this._ip}}}export{Z$ as parseYaml,X$ as parseMultipartFormData,J$ as parseApplicationJson,G$ as isMultipartFormData,y$ as isJsonData,r as addPutRoute,o as addPostRoute,a as addPatchRoute,n as addGetRoute,s as addDeleteRoute,L$ as YinzerFlow,t as RouteRegistry,e as RouteFinder,b as Response,d as RequestHandler,u as Request,T2 as HttpStatusCode,L2 as HttpStatus,K2 as HttpMethod,D$ as HooksManager,k as Context,P2 as ContentType,$$ as ConnectionManager};
22
22
 
23
- //# debugId=9AC99442B758E3D664756E2164756E21
23
+ //# debugId=44C4E8D87004813F64756E2164756E21
package/index.js.map CHANGED
@@ -5,8 +5,8 @@
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
7
  "/**\n * YinzerFlow Main Barrel File\n *\n * This file uses named exports rather than wildcard exports\n * to ensure optimal tree shaking by bundlers.\n */\n\n// Constants exports\nexport { HttpMethod, HttpStatus, HttpStatusCode, ContentType } from 'constants/index.ts';\n\n// Types exports - using 'type' keyword for better tree shaking\nexport type { IRoute, TErrorFunction, THttpStatusCode, TResponseBody, TJsonData, IMultipartFormData, IServerOptions } from 'types/index.ts';\n\n// Core components - export selectively from the core barrel file\nexport { YinzerFlow, Context, Request, Response, RequestHandler, ConnectionManager, HooksManager } from 'core/index.ts';\n\n// Route components - export selectively from the route barrel file\nexport { RouteRegistry, RouteFinder } from 'core/Route/index.ts';\n\n// Route methods - export selectively from the route methods barrel file\nexport { addGetRoute, addPostRoute, addPutRoute, addDeleteRoute, addPatchRoute } from 'core/Route/methods/index.ts';\n\n// Request parsers - export selectively from the request parsers barrel file\nexport { parseMultipartFormData, parseApplicationJson, parseYaml } from 'core/Request/index.ts';\n\n// Request guards - export selectively from the request guards barrel file\nexport { isJsonData, isMultipartFormData } from 'core/Request/index.ts';\n\n\n",
8
- "import { createServer } from 'net';\nimport type { Socket } from 'net';\nimport ip from 'ip';\n\nimport { ConfigManager } from './ConfigManager.ts';\nimport { addDeleteRoute, addGetRoute, addPatchRoute, addPostRoute, addPutRoute } from 'core/Route/methods/index.ts';\nimport { RouteRegistry } from 'core/Route/RouteRegistry.ts';\nimport { RouteRegistryEvent } from 'constants/route.ts';\nimport { RouteFinder } from 'core/Route/RouteFinder.ts';\nimport type { IRoute } from 'types/Route.ts';\nimport { RequestHandler } from 'core/Request/RequestHandler.ts';\nimport { ConnectionManager } from 'core/ConnectionManager.ts';\nimport { HooksManager } from 'core/HooksManager.ts';\nimport type { IServerOptions } from 'types/Server.ts';\n\n/**\n * Main YinzerFlow server class\n *\n * This class orchestrates all the components of the server:\n * - Route management\n * - Middleware processing\n * - Request handling\n * - Connection management\n */\nexport class YinzerFlow {\n // === COMPONENT MANAGERS ===\n private readonly routeRegistry = new RouteRegistry();\n private readonly routeFinder = new RouteFinder(this.routeRegistry);\n private readonly hooksManager = new HooksManager();\n private readonly connectionManager: ConnectionManager;\n private readonly requestHandler: RequestHandler;\n private readonly configManager: ConfigManager;\n\n // === SERVER CONFIGURATION ===\n private readonly _ip: string = ip.address();\n private readonly _port: number = 5000;\n private readonly _gracefulShutdownTimeout: number = 5000;\n\n // === PUBLIC ACCESSORS ===\n\n /**\n * Get the hooks manager instance\n *\n * This allows direct access to the hooks manager for advanced use cases,\n * such as subscribing to hook events.\n */\n get hooks(): HooksManager {\n return this.hooksManager;\n }\n\n /**\n * Get the route registry instance\n *\n * This allows direct access to the route registry for advanced use cases,\n * such as subscribing to route events.\n */\n get routes(): RouteRegistry {\n return this.routeRegistry;\n }\n\n /**\n * Get the config manager instance\n *\n * This allows direct access to the configuration for advanced use cases.\n */\n get config(): ConfigManager {\n return this.configManager;\n }\n\n /**\n * Create a new YinzerFlow server instance\n */\n constructor(options?: IServerOptions) {\n if (options?.port) this._port = options.port;\n if (options?.connectionOptions?.gracefulShutdownTimeout) {\n this._gracefulShutdownTimeout = options.connectionOptions.gracefulShutdownTimeout;\n }\n\n // Initialize the config manager with all options\n this.configManager = new ConfigManager(options);\n\n // Initialize the connection manager with socket timeout\n this.connectionManager = new ConnectionManager(options?.connectionOptions?.socketTimeout);\n\n // Initialize the request handler with the managers\n this.requestHandler = new RequestHandler(this.routeFinder, this.hooksManager, this.configManager);\n\n // Set up event listeners for route changes\n this.routeRegistry.on(RouteRegistryEvent.ROUTES_CHANGED, () => {\n // Update the route finder's pattern cache when routes change\n this.routeFinder.updatePatternRouteCache();\n });\n }\n\n // === ROUTE DEFINITION METHODS ===\n /**\n * This tree shaking method is used to optimize the bundle size by including only the HTTP methods that are actually utilized.\n * Here's the process:\n * 1. User imports YinzerFlow: The main class is imported as before.\n * 2. YinzerFlow loads only what's needed: Only the HTTP methods actually used are included in the bundle.\n * 3. User API remains unchanged: Methods like app.get() and app.post() function as they did previously.\n *\n * Benefits to End Users:\n * - Smaller Bundle Size: Unused methods (e.g., PUT, DELETE) won't bloat the final bundle.\n * - Faster Startup: Less code leads to quicker parsing and execution.\n * - Lower Memory Usage: Only essential code is loaded into memory.\n * - Better Performance: Smaller bundles generally enhance overall performance.\n */\n\n /**\n * Register a GET route\n */\n get = addGetRoute(this.routeRegistry);\n\n /**\n * Register a POST route\n */\n post = addPostRoute(this.routeRegistry);\n\n /**\n * Register a PUT route\n */\n put = addPutRoute(this.routeRegistry);\n\n /**\n * Register a DELETE route\n */\n delete = addDeleteRoute(this.routeRegistry);\n\n /**\n * Register a PATCH route\n */\n patch = addPatchRoute(this.routeRegistry);\n\n /**\n * Register a group of routes with a common prefix\n */\n group(prefix: IRoute['path'], routes: Array<IRoute>, options?: { beforeGroup: IRoute['beforeGroup'] }): void {\n this.routeRegistry.addGroup(prefix, routes, options);\n }\n\n // === MIDDLEWARE METHODS ===\n\n /**\n * Register hooks to be executed before route handlers\n */\n beforeAll(fn: Parameters<HooksManager['add']>[0], options?: Parameters<HooksManager['add']>[1]): this {\n this.hooksManager.add(fn, options);\n return this;\n }\n\n // === SERVER LIFECYCLE METHODS ===\n\n /**\n * Start the server and listen for incoming connections\n */\n async listen(): Promise<void> {\n return new Promise((resolve) => {\n const server = createServer().listen(this._port, this._ip);\n this.connectionManager.setServer(server);\n\n server.on('listening', () => {\n this.connectionManager.setListening(true);\n resolve();\n });\n\n server.on('connection', (socket: Socket) => {\n this.connectionManager.addConnection(socket);\n\n socket.on('data', (buffer) => {\n this.requestHandler.handleSocketRequest(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 server.on('error', (error) => {\n console.error('An error occurred with yinzerflow. Please open an issue on GitHub.', error);\n });\n });\n }\n\n /**\n * Stop the server and close all connections\n */\n async close(): Promise<void> {\n // If not listening or no server, resolve immediately\n if (!this.connectionManager.isListening() || !this.connectionManager.getServer()) {\n return;\n }\n\n // Close all existing connections with the configured grace period\n await this.connectionManager.closeAllConnections(this._gracefulShutdownTimeout);\n\n // Close the server\n const server = this.connectionManager.getServer();\n if (!server) return;\n\n return new Promise((resolve) => {\n server.close(() => {\n this.connectionManager.setListening(false);\n resolve();\n });\n });\n }\n\n /**\n * Get the current server status\n */\n getStatus(): { isListening: boolean; port: number; ip: string } {\n return {\n isListening: this.connectionManager.isListening(),\n port: this._port,\n ip: this._ip,\n };\n }\n}\n",
9
- "import type { IServerOptions } from 'types/Server.ts';\n\n/**\n * Manages application configuration in a centralized way\n *\n * This class provides a single source of truth for all configuration options,\n * making it easier to access configuration throughout the application without\n * passing options through multiple layers.\n */\nexport class ConfigManager {\n private readonly options: IServerOptions;\n\n constructor(options?: IServerOptions) {\n this.options = options ?? {};\n }\n\n /**\n * Get parser options\n */\n get parserOptions(): IServerOptions['parserOptions'] {\n return this.options.parserOptions;\n }\n\n /**\n * Get connection options\n */\n get connectionOptions(): IServerOptions['connectionOptions'] {\n return this.options.connectionOptions;\n }\n\n /**\n * Get error handler\n */\n get errorHandler(): IServerOptions['errorHandler'] {\n return this.options.errorHandler;\n }\n\n /**\n * Get port\n */\n get port(): number | undefined {\n return this.options.port;\n }\n\n /**\n * Get the full options object\n */\n getOptions(): IServerOptions {\n return { ...this.options };\n }\n}\n",
8
+ "import { createServer } from 'net';\nimport type { Socket } from 'net';\nimport ip from 'ip';\n\nimport { ConfigManager } from './ConfigManager.ts';\nimport { addDeleteRoute, addGetRoute, addPatchRoute, addPostRoute, addPutRoute } from 'core/Route/methods/index.ts';\nimport { RouteRegistry } from 'core/Route/RouteRegistry.ts';\nimport { RouteRegistryEvent } from 'constants/route.ts';\nimport { RouteFinder } from 'core/Route/RouteFinder.ts';\nimport type { IRoute } from 'types/Route.ts';\nimport { RequestHandler } from 'core/Request/RequestHandler.ts';\nimport { ConnectionManager } from 'core/ConnectionManager.ts';\nimport { HooksManager } from 'core/HooksManager.ts';\nimport type { IServerOptions } from 'types/Server.ts';\n\n/**\n * Main YinzerFlow server class\n *\n * This class orchestrates all the components of the server:\n * - Route management\n * - Middleware processing\n * - Request handling\n * - Connection management\n */\nexport class YinzerFlow {\n // === COMPONENT MANAGERS ===\n private readonly routeRegistry = new RouteRegistry();\n private readonly routeFinder = new RouteFinder(this.routeRegistry);\n private readonly hooksManager = new HooksManager();\n private readonly connectionManager: ConnectionManager;\n private readonly requestHandler: RequestHandler;\n private readonly configManager: ConfigManager;\n\n // === SERVER CONFIGURATION ===\n private readonly _ip: string = ip.address();\n\n // === PUBLIC ACCESSORS ===\n\n /**\n * Get the hooks manager instance\n *\n * This allows direct access to the hooks manager for advanced use cases,\n * such as subscribing to hook events.\n */\n get hooks(): HooksManager {\n return this.hooksManager;\n }\n\n /**\n * Get the config manager instance\n *\n * This allows direct access to the configuration for advanced use cases.\n */\n get config(): ConfigManager {\n return this.configManager;\n }\n\n /**\n * Create a new YinzerFlow server instance\n */\n constructor(options?: IServerOptions) {\n // Initialize the config manager with all options\n this.configManager = new ConfigManager(options);\n\n // Initialize the connection manager with the config manager\n this.connectionManager = new ConnectionManager(this.configManager);\n\n // Initialize the request handler with the managers\n this.requestHandler = new RequestHandler(this.routeFinder, this.hooksManager, this.configManager);\n\n // Set up event listeners for route changes\n this.routeRegistry.on(RouteRegistryEvent.ROUTES_CHANGED, () => {\n // Update the route finder's pattern cache when routes change\n this.routeFinder.updatePatternRouteCache();\n });\n }\n\n // === ROUTE DEFINITION METHODS ===\n /**\n * This tree shaking method is used to optimize the bundle size by including only the HTTP methods that are actually utilized.\n * Here's the process:\n * 1. User imports YinzerFlow: The main class is imported as before.\n * 2. YinzerFlow loads only what's needed: Only the HTTP methods actually used are included in the bundle.\n * 3. User API remains unchanged: Methods like app.get() and app.post() function as they did previously.\n *\n * Benefits to End Users:\n * - Smaller Bundle Size: Unused methods (e.g., PUT, DELETE) won't bloat the final bundle.\n * - Faster Startup: Less code leads to quicker parsing and execution.\n * - Lower Memory Usage: Only essential code is loaded into memory.\n * - Better Performance: Smaller bundles generally enhance overall performance.\n */\n\n /**\n * Register a GET route\n */\n get = addGetRoute(this.routeRegistry);\n\n /**\n * Register a POST route\n */\n post = addPostRoute(this.routeRegistry);\n\n /**\n * Register a PUT route\n */\n put = addPutRoute(this.routeRegistry);\n\n /**\n * Register a DELETE route\n */\n delete = addDeleteRoute(this.routeRegistry);\n\n /**\n * Register a PATCH route\n */\n patch = addPatchRoute(this.routeRegistry);\n\n /**\n * Register a group of routes with a common prefix\n */\n group(prefix: IRoute['path'], routes: Array<IRoute>, options?: { beforeGroup: IRoute['beforeGroup'] }): void {\n this.routeRegistry.addGroup(prefix, routes, options);\n }\n\n // === MIDDLEWARE METHODS ===\n\n /**\n * Register hooks to be executed before route handlers\n */\n beforeAll(fn: Parameters<HooksManager['add']>[0], options?: Parameters<HooksManager['add']>[1]): this {\n this.hooksManager.add(fn, options);\n return this;\n }\n\n // === SERVER LIFECYCLE METHODS ===\n\n /**\n * Start the server and listen for incoming connections\n */\n async listen(): Promise<void> {\n return new Promise((resolve) => {\n const { port } = this.configManager;\n const server = createServer();\n\n // Start listening\n server.listen(port, this._ip);\n\n this.connectionManager.setServer(server);\n\n server.on('listening', () => {\n this.connectionManager.setListening(true);\n resolve();\n });\n\n server.on('connection', (socket: Socket) => {\n // Add the connection to the connection manager\n this.connectionManager.addConnection(socket);\n\n socket.on('data', (buffer) => {\n this.requestHandler.handleSocketRequest(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 server.on('error', (error) => {\n console.error('An error occurred with yinzerflow. Please open an issue on GitHub.', error);\n });\n });\n }\n\n /**\n * Stop the server and close all connections\n */\n async close(): Promise<void> {\n // If not listening or no server, resolve immediately\n if (!this.connectionManager.isListening() || !this.connectionManager.getServer()) {\n return;\n }\n\n // Close all existing connections with the configured grace period\n await this.connectionManager.closeAllConnections();\n\n // Close the server\n const server = this.connectionManager.getServer();\n if (!server) return;\n\n return new Promise((resolve) => {\n server.close(() => {\n this.connectionManager.setListening(false);\n resolve();\n });\n });\n }\n\n /**\n * Get the current server status\n */\n getStatus(): { isListening: boolean; port: number; ip: string } {\n return {\n isListening: this.connectionManager.isListening(),\n port: this.configManager.port,\n ip: this._ip,\n };\n }\n}\n",
9
+ "import type { IServerOptions } from 'types/Server.ts';\nimport type { TErrorFunction } from 'types/Response.ts';\nimport type { Context } from 'core/Context.ts';\nimport type { TResponseBody } from 'types/http/Response.ts';\nimport {\n DEFAULT_GRACEFUL_SHUTDOWN_TIMEOUT,\n DEFAULT_HEADERS_TIMEOUT,\n DEFAULT_KEEP_ALIVE_TIMEOUT,\n DEFAULT_PORT,\n DEFAULT_SOCKET_TIMEOUT,\n} from 'constants/connection.ts';\nimport { HttpStatusCode } from 'constants/http.ts';\n\n/**\n * Manages application configuration in a centralized way\n *\n * This class provides a single source of truth for all configuration options,\n * making it easier to access configuration throughout the application without\n * passing options through multiple layers.\n */\nexport class ConfigManager {\n readonly port: number;\n readonly errorHandler: TErrorFunction;\n readonly connectionOptions: Required<IServerOptions>['connectionOptions'];\n readonly parserOptions: Required<IServerOptions>['parserOptions'];\n\n constructor(options?: IServerOptions) {\n this.port = this._setPort(options?.port);\n this.errorHandler = this._setErrorHandler(options?.errorHandler);\n this.connectionOptions = this._setConnectionOptions(options?.connectionOptions);\n this.parserOptions = this._setParserOptions(options?.parserOptions);\n }\n\n /**\n * Sets the port number and normalizes it to a number\n */\n private _setPort(port?: number | string): number {\n const normalizedPort = typeof port === 'string' ? parseInt(port, 10) : (port ?? DEFAULT_PORT);\n if (isNaN(normalizedPort) || normalizedPort < 0 || normalizedPort > 65535) {\n throw new Error('Invalid port number');\n }\n return normalizedPort;\n }\n\n /**\n * Sets the error handler with validation\n */\n private _setErrorHandler(handler?: TErrorFunction): TErrorFunction {\n if (handler && typeof handler !== 'function') {\n throw new Error('Error handler must be a function');\n }\n return (\n handler ??\n (({ response }: Context, error: unknown): TResponseBody<unknown> => {\n console.error('Server error: \\n', error);\n response.setStatus(HttpStatusCode.INTERNAL_SERVER_ERROR);\n if (error instanceof Error) {\n return { success: false, message: error.message };\n }\n return { success: false, message: 'An unknown error occurred' };\n })\n );\n }\n\n /**\n * Sets and validates connection options\n */\n private _setConnectionOptions(options?: IServerOptions['connectionOptions']): Required<IServerOptions>['connectionOptions'] {\n const normalizedOptions = {\n socketTimeout: this._normalizeTimeout(options?.socketTimeout, DEFAULT_SOCKET_TIMEOUT),\n gracefulShutdownTimeout: this._normalizeTimeout(options?.gracefulShutdownTimeout, DEFAULT_GRACEFUL_SHUTDOWN_TIMEOUT),\n keepAliveTimeout: this._normalizeTimeout(options?.keepAliveTimeout, DEFAULT_KEEP_ALIVE_TIMEOUT),\n headersTimeout: this._normalizeTimeout(options?.headersTimeout, DEFAULT_HEADERS_TIMEOUT),\n };\n\n if (normalizedOptions.headersTimeout <= normalizedOptions.keepAliveTimeout) {\n throw new Error('headersTimeout must be greater than keepAliveTimeout');\n }\n\n return normalizedOptions;\n }\n\n /**\n * Normalizes a timeout value to a positive number\n */\n private _normalizeTimeout(value: number | string | undefined, defaultValue: number): number {\n const normalized = typeof value === 'string' ? parseInt(value, 10) : (value ?? defaultValue);\n if (isNaN(normalized) || normalized < 0) {\n throw new Error('Timeout must be a positive number');\n }\n return normalized;\n }\n\n /**\n * Sets and validates parser options\n */\n private _setParserOptions(options?: IServerOptions['parserOptions']): Required<IServerOptions>['parserOptions'] {\n const normalizedOptions = options ?? {};\n\n // Validate JSON parser options\n if (normalizedOptions.json?.raw !== undefined && typeof normalizedOptions.json.raw !== 'boolean') {\n throw new Error('JSON parser raw option must be a boolean');\n }\n\n // Validate YAML parser options\n if (normalizedOptions.yaml?.raw !== undefined && typeof normalizedOptions.yaml.raw !== 'boolean') {\n throw new Error('YAML parser raw option must be a boolean');\n }\n\n return normalizedOptions;\n }\n}\n",
10
10
  "import type { RouteRegistry } from '../RouteRegistry.ts';\nimport { HttpMethod } from 'constants/http.ts';\nimport type { IRoute, IRouteOptions } from 'types/Route.ts';\n\nexport const addGetRoute =\n (registry: RouteRegistry) =>\n (path: IRoute['path'], handler: IRoute['handler'], options?: IRouteOptions): IRoute =>\n registry.addRoute({ path, handler, method: HttpMethod.GET, ...options });\n",
11
11
  "import type { RouteRegistry } from '../RouteRegistry.ts';\nimport { HttpMethod } from 'constants/http.ts';\nimport type { IRoute, IRouteOptions } from 'types/Route.ts';\n\nexport const addPostRoute =\n (registry: RouteRegistry) =>\n (path: IRoute['path'], handler: IRoute['handler'], options?: IRouteOptions): IRoute =>\n registry.addRoute({ path, handler, method: HttpMethod.POST, ...options });\n",
12
12
  "import type { RouteRegistry } from '../RouteRegistry.ts';\nimport { HttpMethod } from 'constants/http.ts';\nimport type { IRoute, IRouteOptions } from 'types/Route.ts';\n\nexport const addPutRoute =\n (registry: RouteRegistry) =>\n (path: IRoute['path'], handler: IRoute['handler'], options?: IRouteOptions): IRoute =>\n registry.addRoute({ path, handler, method: HttpMethod.PUT, ...options });\n",
@@ -23,11 +23,11 @@
23
23
  "import { parseApplicationJson, parseMultipartFormData } from 'core/Request/index.ts';\nimport type { IRoute } from 'types/Route.ts';\nimport type { IRequest, THttpMethod, TRequestBody } from 'types/http/Request.ts';\nimport { ContentType, HttpMethod } from 'constants/http.ts';\nimport { divideString } from 'utils/string.utils.ts';\nimport type { IServerOptions } from 'types/Server.ts';\n/**\n * Handles HTTP request parsing and parameter extraction\n */\nexport class Request {\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\n params: IRequest['params'];\n\n constructor(request: string, parserOptions: IServerOptions['parserOptions']) {\n const { protocol, method, path, headers, body, query, params } = this._parseRequest(request, parserOptions);\n\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 /**\n * Parse URL parameters from route pattern\n *\n * @param route - Route object containing path pattern\n * @param path - Actual request path\n * @returns Object with parsed parameters\n */\n parseParams = (route: IRoute): Record<string, string> => {\n const params: Record<string, string> = {};\n\n // Early returns for invalid inputs\n if (typeof route.path !== 'string') return params;\n if (typeof this.path !== 'string') return params;\n\n // Extract parameter names from route pattern\n const paramMatches = route.path.match(/:[^/]+/g);\n const paramNames = paramMatches ? paramMatches.map((param) => param.slice(1)) : [];\n\n if (paramNames.length === 0) return params;\n\n // Convert route pattern to regex with capture groups\n const pattern = route.path.replace(/:[^/]+/g, '([^/]+)');\n const regex = new RegExp(`^${pattern}$`);\n\n // Extract parameter values from path\n const match = this.path.match(regex);\n if (!match) return params;\n\n // Map parameter names to values (skip first match which is the full string)\n for (let i = 0; i < paramNames.length; i++) {\n const value = match[i + 1];\n const paramName = paramNames[i];\n\n // Only add to params if both value and paramName are defined\n if (value && paramName) {\n params[paramName] = value;\n }\n }\n\n return params;\n };\n\n private readonly _parseRequest = (request: string, parserOptions: IServerOptions['parserOptions']): 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] = divideString(request, '\\r\\n');\n const [method, path, protocol] = <[THttpMethod, string, string]>firstLine.split(' ', 3);\n const [headersRaw, bodyRaw] = divideString(rest, '\\r\\n\\r\\n');\n\n const parsedHeaders = this._parseHeaders(headersRaw);\n const parsedQuery = this._parseQuery(path);\n\n let parsedBody: IRequest['body'] = {};\n if (bodyRaw && method !== HttpMethod.GET && method !== HttpMethod.HEAD) {\n parsedBody = this._parseBody(parsedHeaders, bodyRaw, parserOptions);\n }\n\n return {\n protocol,\n method,\n path,\n headers: parsedHeaders,\n body: parsedBody,\n query: parsedQuery,\n params: {},\n };\n };\n\n /**\n * Parse request body based on Content-Type\n *\n * @param headers - Request headers containing Content-Type\n * @param body - Raw request body string\n * @returns Parsed request body object\n * @throws Error if Content-Type is missing or body format is invalid\n */\n\n private readonly _parseBody = (headers: IRequest['headers'], body: string, parserOptions: IServerOptions['parserOptions']): TRequestBody => {\n if (!headers['Content-Type']) {\n throw new Error('Missing Content-Type header');\n }\n\n const contentType = headers['Content-Type'];\n\n // Use a more efficient approach with early returns\n if (contentType === ContentType.JSON) {\n if (parserOptions?.json?.raw) return body;\n return parseApplicationJson(body);\n }\n\n if (contentType.includes(ContentType.MULTIPART)) {\n return parseMultipartFormData(body, parserOptions);\n }\n\n // Default case - return raw body\n return body;\n };\n\n /**\n * Parse request headers\n *\n * @param rawHeaders - Raw header string\n * @returns Object with parsed headers\n */\n private readonly _parseHeaders = (rawHeaders: string): Record<string, string> => {\n const headers: Record<string, string> = {};\n if (!rawHeaders) return headers;\n\n // Normalize line endings and split\n const normalizedHeaders = rawHeaders.replace(/\\r\\n|\\r|\\n/g, '\\n');\n const headerLines = normalizedHeaders.split('\\n');\n\n for (const line of headerLines) {\n if (!line) continue;\n\n const colonIndex = line.indexOf(':');\n if (colonIndex === -1) continue;\n\n const key = line.slice(0, colonIndex).trim();\n const value = line.slice(colonIndex + 1).trim();\n\n if (key) {\n headers[key] = value;\n }\n }\n\n return headers;\n };\n\n /**\n * Parse query parameters from URL\n *\n * @param url - URL string potentially containing query parameters\n * @returns Object with parsed query parameters\n */\n private readonly _parseQuery = (url: string): Record<string, string> => {\n if (!url) return {};\n\n if (!url.includes('?')) return {};\n\n const [, queryString] = url.split('?');\n if (!queryString) return {};\n\n const params: Record<string, string> = {};\n const pairs = queryString.split('&');\n\n for (const pair of pairs) {\n const [key, value] = pair.split('=');\n if (key) {\n params[decodeURIComponent(key)] = value ? decodeURIComponent(value) : '';\n }\n }\n\n return params;\n };\n}\n",
24
24
  "import dayjs from 'dayjs';\nimport type { IHeaders, IResponse, THttpStatus, THttpStatusCode, TResponseBody } from 'types/http/Response.ts';\nimport { calculateContentLength } from 'utils/string.utils.ts';\nimport { ContentType, HttpStatus, HttpStatusCode } from 'constants/http.ts';\nimport type { Request } from 'core/Request/Request.ts';\n\n/**\n * Handles HTTP response creation, manipulation, and formatting\n */\nexport class Response {\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 statusText: string;\n protected headers: IResponse['headers'] = {};\n\n /**\n * Stores the original response body in its native format (object, string, etc.)\n *\n * This property preserves the original data structure and type information,\n * which is useful for:\n * 1. Maintaining type safety throughout the response lifecycle\n * 2. Allowing for potential modifications before final formatting\n * 3. Enabling different serialization strategies if needed\n * 4. Debugging and introspection of the original data\n */\n protected body: IResponse['body'] = '';\n\n /**\n * Stores the pre-formatted string representation of the body\n *\n * This property is essential for:\n * 1. Ensuring consistent string representation across the response\n * 2. Avoiding redundant formatting operations when the response is used multiple times\n * 3. Accurate Content-Length calculation based on the actual bytes to be sent\n * 4. Preventing type errors when using the body in string contexts (like template literals)\n *\n * The underscore prefix indicates this is an internal implementation detail\n * that should not be accessed directly from outside the class.\n */\n protected _formattedBody = '';\n\n // TODO - add cookie support\n\n /**\n * Default status is 200 OK\n *\n * Default headers are:\n * - Date: Current date in UTC\n * - Connection: keep-alive\n * - Keep-Alive: timeout=5, max=1000\n * - Content-Type: application/json (Default for API responses)\n * - Content-Length: 0 (Default for empty body)\n */\n constructor(request: Request) {\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.statusText = 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 'Content-Type': ContentType.JSON, // Default to JSON for API responses\n 'Content-Length': '0', // Default for empty body\n };\n }\n\n /**\n * Add multiple headers to the response\n */\n addHeaders(headers: Array<IResponse['headers']>): void {\n for (const header of headers) {\n this.headers = { ...this.headers, ...header };\n }\n }\n\n /**\n * Remove multiple headers from the response\n */\n removeHeaders(headers: Array<keyof IHeaders>): void {\n for (const header of headers) delete this.headers[header];\n }\n\n /**\n * Modify a single header in the response\n */\n modifyHeader(header: keyof IHeaders, value: string): void {\n this.headers[header] = value;\n }\n\n /**\n * Set the HTTP status code and corresponding status text\n */\n setStatus(status: THttpStatusCode): void {\n // Map of status codes to their corresponding status and text\n const statusMap: Record<THttpStatusCode, { status: THttpStatus; text: string }> = {\n [HttpStatusCode.OK]: { status: HttpStatus.OK, text: HttpStatus.OK },\n [HttpStatusCode.CREATED]: { status: HttpStatus.CREATED, text: HttpStatus.CREATED },\n [HttpStatusCode.NO_CONTENT]: { status: HttpStatus.NO_CONTENT, text: HttpStatus.NO_CONTENT },\n [HttpStatusCode.BAD_REQUEST]: { status: HttpStatus.BAD_REQUEST, text: HttpStatus.BAD_REQUEST },\n [HttpStatusCode.UNAUTHORIZED]: { status: HttpStatus.UNAUTHORIZED, text: HttpStatus.UNAUTHORIZED },\n [HttpStatusCode.FORBIDDEN]: { status: HttpStatus.FORBIDDEN, text: HttpStatus.FORBIDDEN },\n [HttpStatusCode.NOT_FOUND]: { status: HttpStatus.NOT_FOUND, text: HttpStatus.NOT_FOUND },\n [HttpStatusCode.METHOD_NOT_ALLOWED]: { status: HttpStatus.METHOD_NOT_ALLOWED, text: HttpStatus.METHOD_NOT_ALLOWED },\n [HttpStatusCode.CONFLICT]: { status: HttpStatus.CONFLICT, text: HttpStatus.CONFLICT },\n [HttpStatusCode.UNSUPPORTED_MEDIA_TYPE]: { status: HttpStatus.UNSUPPORTED_MEDIA_TYPE, text: HttpStatus.UNSUPPORTED_MEDIA_TYPE },\n [HttpStatusCode.TOO_MANY_REQUESTS]: { status: HttpStatus.TOO_MANY_REQUESTS, text: HttpStatus.TOO_MANY_REQUESTS },\n [HttpStatusCode.INTERNAL_SERVER_ERROR]: { status: HttpStatus.INTERNAL_SERVER_ERROR, text: HttpStatus.INTERNAL_SERVER_ERROR },\n };\n\n // Get the status and text from the map, or default to OK\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const statusInfo = statusMap[status] || statusMap[HttpStatusCode.OK];\n\n this.statusCode = status;\n this.status = statusInfo.status;\n this.statusText = statusInfo.text;\n }\n\n /**\n * Set the response body and update Content-Length header\n */\n setBody(body: TResponseBody<unknown>): void {\n // Store the original body\n this.body = body;\n\n // Format the body and store the formatted version\n this._formattedBody = this._formatResponseBody(body);\n\n // By default, we keep JSON as the Content-Type for all responses\n // The user can override this with text(), html(), etc. if needed\n if (!this.headers['Content-Type']) {\n this.headers['Content-Type'] = ContentType.JSON;\n }\n\n // Update Content-Length header\n this.headers['Content-Length'] = String(calculateContentLength(this._formattedBody));\n }\n\n /**\n * Format the complete HTTP response as a string\n */\n formatHttpResponse(): string {\n const statusLine = `${this.protocol} ${this.statusCode} ${String(this.status)}`;\n\n // Format headers\n const headerLines = Object.entries(this.headers)\n .map(([key, value]) => `${key}: ${value}`)\n .join('\\r\\n');\n\n // Return the complete response using the formatted body\n return `${statusLine}\\r\\n${headerLines}\\r\\n\\r\\n${this._formattedBody}`;\n }\n\n /**\n * Format a response body as a string\n * @private Internal method for formatting the response body\n */\n private _formatResponseBody(body: TResponseBody<unknown>): string {\n // Handle null explicitly\n if (body === null) return 'null';\n\n // Handle different types\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (typeof body) {\n case 'string':\n return body;\n case 'object':\n return JSON.stringify(body);\n default:\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return String(body);\n }\n }\n}\n",
25
25
  "import type { Request } from 'core/Request/Request.ts';\nimport type { Response } from 'core/Response.ts';\n\n/**\n * Request/response context\n *\n * This class encapsulates the request and response objects for a single HTTP request.\n * It is passed to hooks and route handlers to provide access to the request and response.\n */\nexport class Context {\n request: Request;\n response: Response;\n\n constructor(request: Request, response: Response) {\n this.request = request;\n this.response = response;\n }\n}\n",
26
- "import type { Socket } from 'net';\nimport { Request } from 'core/Request/Request.ts';\nimport { Response } from 'core/Response.ts';\nimport { Context as ContextClass } from 'core/Context.ts';\nimport type { HooksManager } from 'core/HooksManager.ts';\nimport type { RouteFinder } from 'core/Route/RouteFinder.ts';\nimport { HttpStatusCode } from 'constants/http.ts';\nimport type { TErrorFunction } from 'types/Response.ts';\nimport type { IRoute } from 'types/Route.ts';\nimport type { ConfigManager } from 'core/ConfigManager.ts';\n\n/**\n * Handles HTTP requests and routes them to the appropriate handler\n *\n * This class is responsible for:\n * 1. Receiving HTTP requests from a socket\n * 2. Finding the appropriate route\n * 3. Processing the request through hooks\n * 4. Executing the route handler\n * 5. Sending the response back to the client\n * 6. Handling any errors that occur during processing\n */\nexport class RequestHandler {\n private readonly routeFinder: RouteFinder;\n private readonly hooksManager: HooksManager;\n private readonly errorHandler: TErrorFunction;\n private readonly configManager: ConfigManager;\n\n constructor(routeFinder: RouteFinder, hooksManager: HooksManager, configManager: ConfigManager) {\n this.routeFinder = routeFinder;\n this.hooksManager = hooksManager;\n this.configManager = configManager;\n this.errorHandler = configManager.errorHandler ?? this._defaultErrorHandler;\n }\n\n /**\n * Main handler for incoming HTTP requests from a socket\n *\n * @param socket - The client socket connection\n * @param buffer - The raw request data\n */\n async handleSocketRequest(socket: Socket, buffer: Buffer): Promise<void> {\n const request = new Request(buffer.toString(), this.configManager.parserOptions);\n\n try {\n // Find the route for this request\n const route = this.routeFinder.findRouteFromRequest(request);\n\n // Process the request or return 404\n const response = route ? (request.parseParams(route), await this._processRequest(request, route)) : this._createNotFoundResponse(request);\n\n // Send the response\n await this._sendResponse(socket, response);\n } catch (error) {\n // Handle errors and send error response\n const errorResponse = await this._handleError(request, error);\n await this._sendResponse(socket, errorResponse);\n }\n }\n\n /**\n * Default error handler if none is provided\n */\n private readonly _defaultErrorHandler: TErrorFunction = ({ response }, error): 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 /**\n * Sends an HTTP response through the socket\n *\n * @param socket - The client socket connection\n * @param response - The HTTP response to send\n */\n private async _sendResponse(socket: Socket, response: Response): Promise<void> {\n await new Promise<void>((resolve) => {\n socket.write(response.formatHttpResponse(), () => resolve());\n socket.end();\n });\n }\n\n /**\n * Handles errors that occur during request processing\n *\n * @param request - The HTTP request\n * @param error - The error that occurred\n * @returns An HTTP response with error details\n */\n private async _handleError(request: Request, error: unknown): Promise<Response> {\n const context = new ContextClass(request, new Response(request));\n const errorResult = await Promise.resolve(this.errorHandler(context, error));\n context.response.setBody(errorResult);\n return context.response;\n }\n\n /**\n * Process a request through hooks and handlers\n *\n * @param request - The HTTP request\n * @param route - The matched route\n * @returns An HTTP response\n */\n private async _processRequest(request: Request, route: IRoute): Promise<Response> {\n const context = new ContextClass(request, new Response(request));\n\n // Process hooks chain\n const hooksResult = await this._processHooksChain(route, context);\n if (hooksResult) {\n return hooksResult;\n }\n\n // Process route handler\n const handlerResult = await Promise.resolve(route.handler(context));\n\n // Process afterHandler if defined\n await this.hooksManager.processAfterHandler(route, context);\n\n context.response.setBody(handlerResult);\n return context.response;\n }\n\n /**\n * Process the hooks chain (beforeAll, beforeGroup, beforeHandler)\n *\n * @param route - The matched route\n * @param context - The request context\n * @returns An HTTP response if a hook returns a result, otherwise undefined\n */\n private async _processHooksChain(route: IRoute, context: ContextClass): Promise<Response | undefined> {\n // Process global hooks\n const beforeAllResult = await this.hooksManager.processBeforeAll(route, context);\n if (beforeAllResult) {\n context.response.setBody(beforeAllResult);\n return context.response;\n }\n\n // Process group hooks\n const beforeGroupResult = await this.hooksManager.processBeforeGroup(route, context);\n if (beforeGroupResult) {\n context.response.setBody(beforeGroupResult);\n return context.response;\n }\n\n // Process handler-specific hooks\n const beforeHandlerResult = await this.hooksManager.processBeforeHandler(route, context);\n if (beforeHandlerResult) {\n context.response.setBody(beforeHandlerResult);\n return context.response;\n }\n\n return undefined;\n }\n\n /**\n * Creates a 404 Not Found response\n *\n * @param request - The HTTP request\n * @returns A 404 Not Found HTTP response\n */\n private _createNotFoundResponse(request: Request): Response {\n const context = new ContextClass(request, new Response(request));\n context.response.setStatus(HttpStatusCode.NOT_FOUND);\n context.response.setBody({ success: false, message: 'Not found' });\n return context.response;\n }\n}\n",
27
- "import type { Server, Socket } from 'net';\nimport { EventEmitter } from 'events';\nimport { ConnectionEvent, DEFAULT_SOCKET_TIMEOUT } from 'constants/connection.ts';\nimport type { IConnectionStats } from 'types/Connection.ts';\n\n/**\n * Manages socket connections to the server\n *\n * The ConnectionManager is responsible for:\n * - Tracking active socket connections\n * - Managing the server's listening state\n * - Providing connection statistics\n * - Gracefully closing connections when the server shuts down\n */\nexport class ConnectionManager extends EventEmitter {\n /** Active socket connections */\n private readonly _connections = new Set<Socket>();\n /** Server instance */\n private _server: Server | null = null;\n /** Server listening state */\n private _isListening = false;\n /** Server start time */\n private _startTime = 0;\n /** Total connections since server start */\n private _totalConnections = 0;\n /** Total connection errors */\n private _connectionErrors = 0;\n /** Default socket timeout in milliseconds */\n private readonly _socketTimeout: number;\n\n /**\n * Creates a new ConnectionManager instance\n *\n * @param socketTimeout Optional socket timeout in milliseconds (default: 2 minutes)\n */\n constructor(socketTimeout?: number) {\n super();\n this._socketTimeout = socketTimeout ?? DEFAULT_SOCKET_TIMEOUT;\n }\n\n /**\n * Sets the server instance and configures event listeners\n *\n * @param server The server instance to manage\n */\n setServer(server: Server | null): void {\n this._server = server;\n\n if (server) {\n // Reset statistics when a new server is set\n this._totalConnections = 0;\n this._connectionErrors = 0;\n }\n }\n\n /**\n * Adds a socket connection to the manager and sets up event listeners\n *\n * @param socket The client socket connection\n * @param timeout Optional timeout for this specific connection\n */\n addConnection(socket: Socket, timeout?: number): void {\n try {\n // Configure socket timeout\n socket.setTimeout(timeout ?? this._socketTimeout);\n\n // Add to active connections\n this._connections.add(socket);\n this._totalConnections++;\n\n // Emit connection added event\n this.emit(ConnectionEvent.CONNECTION_ADDED, socket);\n\n // Set up event listeners\n socket.on('close', () => {\n this._connections.delete(socket);\n this.emit(ConnectionEvent.CONNECTION_CLOSED, socket);\n });\n\n socket.on('error', (err) => {\n this._connectionErrors++;\n this.emit(ConnectionEvent.CONNECTION_ERROR, socket, err);\n });\n\n socket.on('timeout', () => {\n // Destroy the socket on timeout\n socket.end('HTTP/1.1 408 Request Timeout\\r\\n\\r\\n');\n socket.destroy();\n });\n } catch (err) {\n this._connectionErrors++;\n this.emit(ConnectionEvent.CONNECTION_ERROR, socket, err);\n }\n }\n\n /**\n * Gets all active socket connections\n *\n * @returns A set of active socket connections\n */\n getConnections(): Set<Socket> {\n return this._connections;\n }\n\n /**\n * Gets the current number of active connections\n *\n * @returns The number of active connections\n */\n getConnectionCount(): number {\n return this._connections.size;\n }\n\n /**\n * Sets the server's listening state\n *\n * @param isListening Whether the server is listening for connections\n */\n setListening(isListening: boolean): void {\n const wasListening = this._isListening;\n this._isListening = isListening;\n\n // Update start time and emit events when state changes\n if (isListening && !wasListening) {\n this._startTime = Date.now();\n this.emit(ConnectionEvent.SERVER_STARTED);\n } else if (!isListening && wasListening) {\n this.emit(ConnectionEvent.SERVER_STOPPED);\n }\n }\n\n /**\n * Checks if the server is currently listening\n *\n * @returns True if the server is listening, false otherwise\n */\n isListening(): boolean {\n return this._isListening;\n }\n\n /**\n * Gets the server instance\n *\n * @returns The server instance or null if not set\n */\n getServer(): Server | null {\n return this._server;\n }\n\n /**\n * Gets connection statistics\n *\n * @returns Connection statistics object\n */\n getStats(): IConnectionStats {\n return {\n activeConnections: this._connections.size,\n totalConnections: this._totalConnections,\n connectionErrors: this._connectionErrors,\n uptime: this._isListening ? Date.now() - this._startTime : 0,\n };\n }\n\n /**\n * Closes all active connections gracefully\n *\n * @param gracePeriod Optional grace period in milliseconds before forcefully closing connections\n * @returns Promise that resolves when all connections are closed\n */\n async closeAllConnections(gracePeriod?: number): Promise<void> {\n // If there are no connections, resolve immediately\n if (this._connections.size === 0) {\n this.emit(ConnectionEvent.ALL_CONNECTIONS_CLOSED);\n return;\n }\n\n // Create a copy of the connections to avoid modification during iteration\n const connections = [...this._connections];\n\n // If grace period is provided, attempt graceful shutdown\n if (gracePeriod !== undefined && gracePeriod > 0) {\n // End each connection with a proper HTTP response\n for (const socket of connections) {\n try {\n socket.end('HTTP/1.1 503 Service Unavailable\\r\\n\\r\\n');\n } catch (_err) {\n // Ignore errors during shutdown\n }\n }\n\n // Wait for the grace period\n await new Promise<void>((resolve) => {\n setTimeout(() => resolve(), gracePeriod);\n });\n }\n\n // Force close any remaining connections\n for (const socket of this._connections) {\n try {\n socket.destroy();\n } catch (_err) {\n // Ignore errors during shutdown\n }\n }\n\n // Clear the connections set\n this._connections.clear();\n\n // Emit the all connections closed event\n this.emit(ConnectionEvent.ALL_CONNECTIONS_CLOSED);\n }\n}\n",
26
+ "import type { Socket } from 'net';\nimport { Request } from 'core/Request/Request.ts';\nimport { Response } from 'core/Response.ts';\nimport { Context as ContextClass } from 'core/Context.ts';\nimport type { HooksManager } from 'core/HooksManager.ts';\nimport type { RouteFinder } from 'core/Route/RouteFinder.ts';\nimport { HttpStatusCode } from 'constants/http.ts';\nimport type { TErrorFunction } from 'types/Response.ts';\nimport type { IRoute } from 'types/Route.ts';\nimport type { ConfigManager } from 'core/ConfigManager.ts';\n\n/**\n * Handles HTTP requests and routes them to the appropriate handler\n *\n * This class is responsible for:\n * 1. Receiving HTTP requests from a socket\n * 2. Finding the appropriate route\n * 3. Processing the request through hooks\n * 4. Executing the route handler\n * 5. Sending the response back to the client\n * 6. Handling any errors that occur during processing\n */\nexport class RequestHandler {\n private readonly routeFinder: RouteFinder;\n private readonly hooksManager: HooksManager;\n private readonly errorHandler: TErrorFunction;\n private readonly configManager: ConfigManager;\n\n constructor(routeFinder: RouteFinder, hooksManager: HooksManager, configManager: ConfigManager) {\n this.routeFinder = routeFinder;\n this.hooksManager = hooksManager;\n this.configManager = configManager;\n this.errorHandler = configManager.errorHandler;\n }\n\n /**\n * Main handler for incoming HTTP requests from a socket\n *\n * @param socket - The client socket connection\n * @param buffer - The raw request data\n */\n async handleSocketRequest(socket: Socket, buffer: Buffer): Promise<void> {\n const request = new Request(buffer.toString(), this.configManager.parserOptions);\n\n try {\n // Find the route for this request\n const route = this.routeFinder.findRouteFromRequest(request);\n\n // Process the request or return 404\n const response = route ? (request.parseParams(route), await this._processRequest(request, route)) : this._createNotFoundResponse(request);\n\n // Send the response\n await this._sendResponse(socket, response);\n } catch (error) {\n // Handle errors and send error response\n const errorResponse = await this._handleError(request, error);\n await this._sendResponse(socket, errorResponse);\n }\n }\n\n\n\n /**\n * Sends an HTTP response through the socket\n *\n * @param socket - The client socket connection\n * @param response - The HTTP response to send\n */\n private async _sendResponse(socket: Socket, response: Response): Promise<void> {\n await new Promise<void>((resolve) => {\n socket.write(response.formatHttpResponse(), () => resolve());\n socket.end();\n });\n }\n\n /**\n * Handles errors that occur during request processing\n *\n * @param request - The HTTP request\n * @param error - The error that occurred\n * @returns An HTTP response with error details\n */\n private async _handleError(request: Request, error: unknown): Promise<Response> {\n const context = new ContextClass(request, new Response(request));\n const errorResult = await Promise.resolve(this.errorHandler(context, error));\n context.response.setBody(errorResult);\n return context.response;\n }\n\n /**\n * Process a request through hooks and handlers\n *\n * @param request - The HTTP request\n * @param route - The matched route\n * @returns An HTTP response\n */\n private async _processRequest(request: Request, route: IRoute): Promise<Response> {\n const context = new ContextClass(request, new Response(request));\n\n // Process hooks chain\n const hooksResult = await this._processHooksChain(route, context);\n if (hooksResult) {\n return hooksResult;\n }\n\n // Process route handler\n const handlerResult = await Promise.resolve(route.handler(context));\n\n // Process afterHandler if defined\n await this.hooksManager.processAfterHandler(route, context);\n\n context.response.setBody(handlerResult);\n return context.response;\n }\n\n /**\n * Process the hooks chain (beforeAll, beforeGroup, beforeHandler)\n *\n * @param route - The matched route\n * @param context - The request context\n * @returns An HTTP response if a hook returns a result, otherwise undefined\n */\n private async _processHooksChain(route: IRoute, context: ContextClass): Promise<Response | undefined> {\n // Process global hooks\n const beforeAllResult = await this.hooksManager.processBeforeAll(route, context);\n if (beforeAllResult) {\n context.response.setBody(beforeAllResult);\n return context.response;\n }\n\n // Process group hooks\n const beforeGroupResult = await this.hooksManager.processBeforeGroup(route, context);\n if (beforeGroupResult) {\n context.response.setBody(beforeGroupResult);\n return context.response;\n }\n\n // Process handler-specific hooks\n const beforeHandlerResult = await this.hooksManager.processBeforeHandler(route, context);\n if (beforeHandlerResult) {\n context.response.setBody(beforeHandlerResult);\n return context.response;\n }\n\n return undefined;\n }\n\n /**\n * Creates a 404 Not Found response\n *\n * @param request - The HTTP request\n * @returns A 404 Not Found HTTP response\n */\n private _createNotFoundResponse(request: Request): Response {\n const context = new ContextClass(request, new Response(request));\n context.response.setStatus(HttpStatusCode.NOT_FOUND);\n context.response.setBody({ success: false, message: 'Not found' });\n return context.response;\n }\n}\n",
27
+ "import type { Server, Socket } from 'net';\nimport { EventEmitter } from 'events';\nimport type { ConfigManager } from './ConfigManager.ts';\nimport { ConnectionEvent } from 'constants/connection.ts';\nimport type { IConnectionStats } from 'types/Connection.ts';\n\n/**\n * Manages socket connections to the server\n *\n * The ConnectionManager is responsible for:\n * - Tracking active socket connections\n * - Managing the server's listening state\n * - Providing connection statistics\n * - Gracefully closing connections when the server shuts down\n */\nexport class ConnectionManager extends EventEmitter {\n /** Active socket connections */\n private readonly _connections = new Set<Socket>();\n /** Server instance */\n private _server: Server | null = null;\n /** Server listening state */\n private _isListening = false;\n /** Server start time */\n private _startTime = 0;\n /** Total connections since server start */\n private _totalConnections = 0;\n /** Total connection errors */\n private _connectionErrors = 0;\n /** Config manager instance */\n private readonly _configManager: ConfigManager;\n\n /**\n * Creates a new ConnectionManager instance\n *\n * @param configManager The config manager instance\n */\n constructor(configManager: ConfigManager) {\n super();\n this._configManager = configManager;\n }\n\n /**\n * Sets the server instance and configures event listeners\n *\n * @param server The server instance to manage\n */\n setServer(server: Server | null): void {\n this._server = server;\n\n if (server) {\n // Reset statistics when a new server is set\n this._totalConnections = 0;\n this._connectionErrors = 0;\n }\n }\n\n /**\n * Adds a socket connection to the manager and sets up event listeners\n *\n * @param socket The client socket connection\n */\n addConnection(socket: Socket): void {\n try {\n // Get socket timeout from config\n const { socketTimeout, keepAliveTimeout } = this._configManager.connectionOptions;\n\n // Configure socket timeout\n socket.setTimeout(socketTimeout);\n\n // Enable TCP keepalive\n socket.setKeepAlive(true, keepAliveTimeout);\n\n // Add to active connections\n this._connections.add(socket);\n this._totalConnections++;\n\n // Emit connection added event\n this.emit(ConnectionEvent.CONNECTION_ADDED, socket);\n\n // Set up event listeners\n socket.on('close', () => {\n this._connections.delete(socket);\n this.emit(ConnectionEvent.CONNECTION_CLOSED, socket);\n });\n\n socket.on('error', (err) => {\n this._connectionErrors++;\n this.emit(ConnectionEvent.CONNECTION_ERROR, socket, err);\n });\n\n socket.on('timeout', () => {\n // Send HTTP timeout response before closing\n socket.end('HTTP/1.1 408 Request Timeout\\r\\n\\r\\n');\n socket.destroy();\n });\n } catch (err) {\n this._connectionErrors++;\n this.emit(ConnectionEvent.CONNECTION_ERROR, socket, err);\n }\n }\n\n /**\n * Gets all active socket connections\n *\n * @returns A set of active socket connections\n */\n getConnections(): Set<Socket> {\n return this._connections;\n }\n\n /**\n * Gets the current number of active connections\n *\n * @returns The number of active connections\n */\n getConnectionCount(): number {\n return this._connections.size;\n }\n\n /**\n * Sets the server's listening state\n *\n * @param isListening Whether the server is listening for connections\n */\n setListening(isListening: boolean): void {\n const wasListening = this._isListening;\n this._isListening = isListening;\n\n // Update start time and emit events when state changes\n if (isListening && !wasListening) {\n this._startTime = Date.now();\n this.emit(ConnectionEvent.SERVER_STARTED);\n } else if (!isListening && wasListening) {\n this.emit(ConnectionEvent.SERVER_STOPPED);\n }\n }\n\n /**\n * Checks if the server is currently listening\n *\n * @returns True if the server is listening, false otherwise\n */\n isListening(): boolean {\n return this._isListening;\n }\n\n /**\n * Gets the server instance\n *\n * @returns The server instance or null if not set\n */\n getServer(): Server | null {\n return this._server;\n }\n\n /**\n * Gets connection statistics\n *\n * @returns Connection statistics object\n */\n getStats(): IConnectionStats {\n return {\n activeConnections: this._connections.size,\n totalConnections: this._totalConnections,\n connectionErrors: this._connectionErrors,\n uptime: this._isListening ? Date.now() - this._startTime : 0,\n };\n }\n\n /**\n * Closes all active connections gracefully\n *\n * @returns Promise that resolves when all connections are closed\n */\n async closeAllConnections(): Promise<void> {\n // If there are no connections, resolve immediately\n if (this._connections.size === 0) {\n this.emit(ConnectionEvent.ALL_CONNECTIONS_CLOSED);\n return;\n }\n\n // Create a copy of the connections to avoid modification during iteration\n const connections = [...this._connections];\n\n // Get graceful shutdown timeout from config\n const { gracefulShutdownTimeout } = this._configManager.connectionOptions;\n\n // If grace period is provided, attempt graceful shutdown\n if (gracefulShutdownTimeout > 0) {\n // End each connection with a proper HTTP response\n for (const socket of connections) {\n try {\n socket.end('HTTP/1.1 503 Service Unavailable\\r\\n\\r\\n');\n } catch (_err) {\n // Ignore errors during shutdown\n }\n }\n\n // Wait for the grace period\n await new Promise<void>((resolve) => {\n setTimeout(() => resolve(), gracefulShutdownTimeout);\n });\n }\n\n // Force close any remaining connections\n for (const socket of this._connections) {\n try {\n socket.destroy();\n } catch (_err) {\n // Ignore errors during shutdown\n }\n }\n\n // Clear the connections set\n this._connections.clear();\n\n // Emit the all connections closed event\n this.emit(ConnectionEvent.ALL_CONNECTIONS_CLOSED);\n }\n}\n",
28
28
  "import { EventEmitter } from 'events';\nimport type { Context } from 'core/Context.ts';\nimport type { IRoute, TUndefinableResponseFunction } from 'types/Route.ts';\nimport { HookManagerEvent, HookPhase, PathMatchingPattern } from 'constants/hooks.ts';\nimport type { TResponseBody } from 'types/http/Response.ts';\nimport type { IExcludeHook, IIncludeHook, THook } from 'types/Hook.ts';\n\n/**\n * Manages hooks registration and execution\n *\n * This class is responsible for registering hook functions and\n * executing them at the appropriate points in the request lifecycle.\n */\nexport class HooksManager extends EventEmitter {\n private readonly hooks: Array<THook> = [];\n\n // Cache for path matching to improve performance\n private readonly pathMatchCache = new Map<string, Array<THook>>();\n\n /**\n * Add a hook to be executed at various points in the request lifecycle\n *\n * @param fn The hook function to execute\n * @param options Configuration options for the hook\n * @returns The hooks manager instance for chaining\n */\n add(\n fn: TUndefinableResponseFunction,\n options?: {\n paths?: Array<string> | typeof PathMatchingPattern.ALL_BUT_EXCLUDED;\n excluded?: Array<string>;\n },\n ): this {\n let hookConfig: THook = <IIncludeHook>{ paths: [], excluded: [], fn };\n\n if (!options) {\n // Global hook with no path restrictions\n // Use the default initialization\n } else if (options.paths === PathMatchingPattern.ALL_BUT_EXCLUDED && Array.isArray(options.excluded)) {\n // Hook that applies to all paths except those explicitly excluded\n const excludeHook: IExcludeHook = {\n paths: PathMatchingPattern.ALL_BUT_EXCLUDED,\n excluded: options.excluded,\n fn,\n };\n hookConfig = excludeHook;\n } else if (Array.isArray(options.paths)) {\n // Hook that only applies to specific paths\n const includeHook: IIncludeHook = {\n paths: options.paths,\n excluded: options.excluded ?? [],\n fn,\n };\n hookConfig = includeHook;\n }\n // else use the default initialization\n\n this.hooks.push(hookConfig);\n\n // Clear the path match cache when a hook is added\n this.clearPathMatchCache();\n\n // Emit event\n this.emit(HookManagerEvent.HOOK_ADDED, hookConfig);\n\n return this;\n }\n\n /**\n * Clear the path match cache\n * This should be called whenever hooks are added or removed\n */\n private clearPathMatchCache(): void {\n this.pathMatchCache.clear();\n }\n\n /**\n * Get hooks that apply to a specific path\n * Uses caching for better performance\n *\n * @param path The route path to match against\n * @returns Array of hooks that apply to the path\n */\n private getHooksForPath(path: string): Array<THook> {\n // Check cache first\n if (this.pathMatchCache.has(path)) {\n return this.pathMatchCache.get(path) ?? [];\n }\n\n // Find all hooks that apply to this path\n const matchingHooks = this.hooks.filter((hook) => {\n // Case 1: \"All but excluded\" hook\n if (hook.paths === PathMatchingPattern.ALL_BUT_EXCLUDED) {\n return !this.isPathExcluded(path, hook.excluded);\n }\n\n // Case 2: Path-specific hook with paths array\n if (Array.isArray(hook.paths)) {\n // Check if the path is included in the paths array and not excluded\n return this.isPathIncluded(path, hook.paths) && !this.isPathExcluded(path, hook.excluded);\n }\n\n // Case 3: Global hook (empty paths array)\n // This should never happen with the current type definitions, but included for safety\n return false;\n });\n\n // Cache the result\n this.pathMatchCache.set(path, matchingHooks);\n\n return matchingHooks;\n }\n\n /**\n * Check if a path is included in a list of path patterns\n * Supports exact matches and pattern matching with wildcards\n *\n * @param path The path to check\n * @param patterns Array of path patterns to match against\n * @returns True if the path matches any pattern\n */\n private isPathIncluded(path: string, patterns: Array<string>): boolean {\n if (patterns.length === 0) return true;\n\n return patterns.some((pattern) => {\n // Exact match\n if (pattern === path) return true;\n\n // Wildcard match (e.g., /api/* matches /api/users)\n if (pattern.endsWith('*')) {\n const prefix = pattern.slice(0, -1);\n return path.startsWith(prefix);\n }\n\n return false;\n });\n }\n\n /**\n * Check if a path is excluded by a list of path patterns\n *\n * @param path The path to check\n * @param patterns Array of path patterns to match against\n * @returns True if the path matches any exclusion pattern\n */\n private isPathExcluded(path: string, patterns: Array<string>): boolean {\n return this.isPathIncluded(path, patterns);\n }\n\n /**\n * Process beforeAll hooks for a route\n *\n * @param route The route to process hooks for\n * @param ctx The request context\n * @returns A response body if a hook short-circuits, undefined otherwise\n */\n async processBeforeAll(route: IRoute, ctx: Context): Promise<TResponseBody<unknown> | void> {\n if (!this.hooks.length) return;\n\n const matchingHooks = this.getHooksForPath(route.path);\n\n for (const hook of matchingHooks) {\n try {\n const result = await Promise.resolve(hook.fn(ctx));\n\n // Emit event for hook execution\n this.emit(HookManagerEvent.HOOK_EXECUTED, {\n phase: HookPhase.BEFORE_ALL,\n path: route.path,\n result: result ? 'short-circuit' : 'continue',\n });\n\n // Emit specific phase event\n this.emit(HookManagerEvent.BEFORE_ALL_EXECUTED, ctx, hook);\n\n // If hook returns a value, short-circuit the request\n if (result) {\n return result;\n }\n } catch (error) {\n // Log the error but continue processing\n console.error(`Hook error for path ${route.path}:`, error);\n // Re-throw to allow error handling hooks to catch it\n throw error;\n }\n }\n\n return undefined;\n }\n\n /**\n * Process beforeGroup hooks for a route\n *\n * @param route The route to process hooks for\n * @param ctx The request context\n * @returns A response body if a hook short-circuits, undefined otherwise\n */\n async processBeforeGroup(route: IRoute, ctx: Context): Promise<TResponseBody<unknown> | void> {\n if (!route.beforeGroup) return;\n\n try {\n const result = await Promise.resolve(route.beforeGroup(ctx));\n\n this.emit(HookManagerEvent.HOOK_EXECUTED, {\n phase: HookPhase.BEFORE_GROUP,\n path: route.path,\n result: result ? 'short-circuit' : 'continue',\n });\n\n // Emit specific phase event\n this.emit(HookManagerEvent.BEFORE_GROUP_EXECUTED, ctx, route.beforeGroup);\n\n return result;\n } catch (error) {\n console.error(`BeforeGroup hook error for path ${route.path}:`, error);\n throw error;\n }\n }\n\n /**\n * Process beforeHandler hooks for a route\n *\n * @param route The route to process hooks for\n * @param ctx The request context\n * @returns A response body if a hook short-circuits, undefined otherwise\n */\n async processBeforeHandler(route: IRoute, ctx: Context): Promise<TResponseBody<unknown> | void> {\n if (!route.beforeHandler) return;\n\n try {\n const result = await Promise.resolve(route.beforeHandler(ctx));\n\n this.emit(HookManagerEvent.HOOK_EXECUTED, {\n phase: HookPhase.BEFORE_HANDLER,\n path: route.path,\n result: result ? 'short-circuit' : 'continue',\n });\n\n // Emit specific phase event\n this.emit(HookManagerEvent.BEFORE_HANDLER_EXECUTED, ctx, route.beforeHandler);\n\n return result;\n } catch (error) {\n console.error(`BeforeHandler hook error for path ${route.path}:`, error);\n throw error;\n }\n }\n\n /**\n * Process afterHandler hooks for a route\n *\n * @param route The route to process hooks for\n * @param ctx The request context\n * @returns A response body if a hook short-circuits, undefined otherwise\n */\n async processAfterHandler(route: IRoute, ctx: Context): Promise<TResponseBody<unknown> | void> {\n if (!route.afterHandler) return;\n\n try {\n const result = await Promise.resolve(route.afterHandler(ctx));\n\n this.emit(HookManagerEvent.HOOK_EXECUTED, {\n phase: HookPhase.AFTER_HANDLER,\n path: route.path,\n result: result ? 'modified' : 'unmodified',\n });\n\n // Emit specific phase event\n this.emit(HookManagerEvent.AFTER_HANDLER_EXECUTED, ctx, route.afterHandler);\n\n return result;\n } catch (error) {\n console.error(`AfterHandler hook error for path ${route.path}:`, error);\n throw error;\n }\n }\n\n /**\n * Remove all hooks\n *\n * @returns The hooks manager instance for chaining\n */\n clear(): this {\n while (this.hooks.length > 0) {\n this.hooks.pop();\n }\n this.clearPathMatchCache();\n return this;\n }\n\n /**\n * Get the number of registered hook functions\n */\n get hooksCount(): number {\n return this.hooks.length;\n }\n}\n"
29
29
  ],
30
- "mappings": "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",
31
- "debugId": "9AC99442B758E3D664756E2164756E21",
30
+ "mappings": "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",
31
+ "debugId": "44C4E8D87004813F64756E2164756E21",
32
32
  "names": []
33
33
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yinzerflow",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "author": "Patrick Rizzardi <patrick@redact.digital> (https://redact.digital)",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/yinzers/YinzerFlow.git",
@@ -26,7 +26,7 @@
26
26
  "main": "index.js",
27
27
  "type": "module",
28
28
  "scripts": {
29
- "test": "bun test --watch --coverage --ignore-coverage-for-files=app/core/__mocks__",
29
+ "test": "bun test --watch",
30
30
  "test:production": "bun test --timeout 20 --rerun-each 10 --bail 10",
31
31
  "clean": "rm -rf lib && rm -rf storage && echo 'Done.'",
32
32
  "build": "bun clean; bun build.ts",