blaizejs 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/{chunk-NA2GUVHF.js → chunk-BOFAGA5B.js} +3 -3
  2. package/dist/chunk-JMYOXYX4.js +11 -0
  3. package/dist/{chunk-VAD7G4RR.js.map → chunk-JMYOXYX4.js.map} +1 -1
  4. package/dist/{chunk-6G464Q37.js → chunk-NXPSLUP5.js} +3 -3
  5. package/dist/{chunk-Y7KAZMOI.js → chunk-VVEKNV22.js} +3 -3
  6. package/dist/{chunk-XZOKQ5VF.js → chunk-ZBJU7ZOM.js} +3 -3
  7. package/dist/index.cjs +14 -14
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +1417 -1433
  10. package/dist/index.d.ts +1417 -1433
  11. package/dist/index.js +15 -15
  12. package/dist/index.js.map +1 -1
  13. package/dist/{internal-server-error-4S64KATC.js → internal-server-error-MIWZOL6G.js} +3 -3
  14. package/dist/{payload-too-large-error-BC6YVP2R.js → payload-too-large-error-INCZ2WM7.js} +3 -3
  15. package/dist/{unsupported-media-type-error-FV554WCH.js → unsupported-media-type-error-BVGBPGOM.js} +3 -3
  16. package/dist/{validation-error-ZLDRDHW5.js → validation-error-BQK2BTX6.js} +3 -3
  17. package/package.json +2 -2
  18. package/dist/chunk-VAD7G4RR.js +0 -11
  19. /package/dist/{chunk-NA2GUVHF.js.map → chunk-BOFAGA5B.js.map} +0 -0
  20. /package/dist/{chunk-6G464Q37.js.map → chunk-NXPSLUP5.js.map} +0 -0
  21. /package/dist/{chunk-Y7KAZMOI.js.map → chunk-VVEKNV22.js.map} +0 -0
  22. /package/dist/{chunk-XZOKQ5VF.js.map → chunk-ZBJU7ZOM.js.map} +0 -0
  23. /package/dist/{internal-server-error-4S64KATC.js.map → internal-server-error-MIWZOL6G.js.map} +0 -0
  24. /package/dist/{payload-too-large-error-BC6YVP2R.js.map → payload-too-large-error-INCZ2WM7.js.map} +0 -0
  25. /package/dist/{unsupported-media-type-error-FV554WCH.js.map → unsupported-media-type-error-BVGBPGOM.js.map} +0 -0
  26. /package/dist/{validation-error-ZLDRDHW5.js.map → validation-error-BQK2BTX6.js.map} +0 -0
package/dist/index.cjs CHANGED
@@ -1,31 +1,31 @@
1
1
 
2
2
  /**
3
- * blaizejs v0.5.1
3
+ * blaizejs v0.5.3
4
4
  * A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.
5
5
  *
6
6
  * Copyright (c) 2025 BlaizeJS Contributors
7
7
  * @license MIT
8
8
  */
9
9
 
10
- "use strict";var Yr=Object.create;var me=Object.defineProperty;var Kr=Object.getOwnPropertyDescriptor;var Xr=Object.getOwnPropertyNames;var en=Object.getPrototypeOf,tn=Object.prototype.hasOwnProperty;var G=(e,t)=>()=>(e&&(t=e(e=0)),t);var X=(e,t)=>{for(var r in t)me(e,r,{get:t[r],enumerable:!0})},Et=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Xr(t))!tn.call(e,o)&&o!==r&&me(e,o,{get:()=>t[o],enumerable:!(n=Kr(t,o))||n.enumerable});return e};var _=(e,t,r)=>(r=e!=null?Yr(en(e)):{},Et(t||!e||!e.__esModule?me(r,"default",{value:e,enumerable:!0}):r,e)),rn=e=>Et(me({},"__esModule",{value:!0}),e);function nn(e){return typeof e=="object"&&e!==null&&"type"in e&&"message"in e&&"error"in e&&typeof e.type=="string"&&typeof e.message=="string"}var P,Tt,w,b=G(()=>{"use strict";P=(h=>(h.VALIDATION_ERROR="VALIDATION_ERROR",h.NOT_FOUND="NOT_FOUND",h.UNAUTHORIZED="UNAUTHORIZED",h.FORBIDDEN="FORBIDDEN",h.SSE_NOT_ACCEPTABLE="SSE_NOT_ACCEPTABLE",h.CONFLICT="CONFLICT",h.RATE_LIMITED="RATE_LIMITED",h.INTERNAL_SERVER_ERROR="INTERNAL_SERVER_ERROR",h.PAYLOAD_TOO_LARGE="PAYLOAD_TOO_LARGE",h.UNSUPPORTED_MEDIA_TYPE="UNSUPPORTED_MEDIA_TYPE",h.UPLOAD_TIMEOUT="UPLOAD_TIMEOUT",h.UNPROCESSABLE_ENTITY="UNPROCESSABLE_ENTITY",h.NETWORK_ERROR="NETWORK_ERROR",h.TIMEOUT_ERROR="TIMEOUT_ERROR",h.PARSE_ERROR="PARSE_ERROR",h.HTTP_ERROR="HTTP_ERROR",h.SSE_CONNECTION_ERROR="SSE_CONNECTION_ERROR",h.SSE_BUFFER_OVERFLOW="SSE_BUFFER_OVERFLOW",h.SSE_STREAM_CLOSED="SSE_STREAM_CLOSED",h.SERVICE_UNAVAILABLE="SERVICE_UNAVAILABLE",h))(P||{}),Tt=(o=>(o.LOW="low",o.MEDIUM="medium",o.HIGH="high",o.CRITICAL="critical",o))(Tt||{}),w=class extends Error{type;title;status;correlationId;timestamp;details;constructor(t,r,n,o,i){super(r),this.name=this.constructor.name,this.type=t,this.title=r,this.status=n,this.correlationId=o,this.timestamp=new Date,this.details=i,Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){let t={type:this.type,title:this.title,status:this.status,correlationId:this.correlationId,timestamp:this.timestamp.toISOString()};return this.details!==void 0?{...t,details:this.details}:t}toString(){return`${this.name}: ${this.title} [${this.correlationId}]`}}});function on(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`req_${e}_${t}`}function Ct(e,t){ge={headerName:e||Ze.headerName,generator:t||Ze.generator}}function j(){return ge.headerName}function sn(){return ge.generator()}function y(){let e=bt.getStore();return e&&e.trim()?e:"unknown"}function Pt(e,t){return bt.run(e,t)}function he(e){let t=ge.headerName,r=e[t],n;return Array.isArray(r)?n=r[0]:typeof r=="string"&&(n=r),n&&n.trim()?n:sn()}var Rt,Ze,ge,bt,R=G(()=>{"use strict";Rt=require("async_hooks"),Ze={headerName:"x-correlation-id",generator:on},ge={...Ze},bt=new Rt.AsyncLocalStorage});var V={};X(V,{ValidationError:()=>M});var M,I=G(()=>{"use strict";b();R();M=class extends w{constructor(t,r=void 0,n=void 0){super("VALIDATION_ERROR",t,400,n??y(),r)}}});var rr={};X(rr,{InternalServerError:()=>N});var N,ie=G(()=>{"use strict";b();R();N=class extends w{constructor(t,r=void 0,n=void 0){super("INTERNAL_SERVER_ERROR",t,500,n??y(),r)}}});var rt={};X(rt,{PayloadTooLargeError:()=>se});var se,ze=G(()=>{"use strict";b();R();se=class extends w{constructor(t,r,n){super("PAYLOAD_TOO_LARGE",t,413,n??y(),r)}}});var nt={};X(nt,{UnsupportedMediaTypeError:()=>ae});var ae,Ne=G(()=>{"use strict";b();R();ae=class extends w{constructor(t,r,n){super("UNSUPPORTED_MEDIA_TYPE",t,415,n??y(),r)}}});var pi={};X(pi,{Blaize:()=>di,BlaizeError:()=>w,ConflictError:()=>je,ErrorSeverity:()=>Tt,ErrorType:()=>P,ForbiddenError:()=>Z,InternalServerError:()=>N,MiddlewareAPI:()=>Gr,NotFoundError:()=>H,PayloadTooLargeError:()=>se,PluginsAPI:()=>Zr,RateLimitError:()=>Ve,RequestTimeoutError:()=>We,RouterAPI:()=>Qr,ServerAPI:()=>Wr,ServiceNotAvailableError:()=>Ge,UnauthorizedError:()=>Le,UnprocessableEntityError:()=>Qe,UnsupportedMediaTypeError:()=>ae,VERSION:()=>Vr,ValidationError:()=>M,asMiddlewareArray:()=>ai,asPluginArray:()=>ci,buildUrl:()=>Fe,compilePathPattern:()=>J,compose:()=>L,cors:()=>te,createDeleteRoute:()=>_e,createGetRoute:()=>be,createHeadRoute:()=>Oe,createMatcher:()=>Y,createMiddleware:()=>$,createMiddlewareArray:()=>li,createOptionsRoute:()=>Ae,createPatchRoute:()=>Me,createPlugin:()=>we,createPluginArray:()=>ui,createPostRoute:()=>Ce,createPutRoute:()=>Pe,createRouteFactory:()=>tt,createServer:()=>qe,createServiceMiddleware:()=>Se,createStateMiddleware:()=>ye,extractParams:()=>Q,getCorrelationId:()=>y,inferContext:()=>xt,isBodyParseError:()=>nn,isMiddleware:()=>ii,isPlugin:()=>si,paramsToQuery:()=>ne});module.exports=rn(pi);function vt(e,t,r){if(!e||e.skip&&e.skip(t))return Promise.resolve(r());try{let n=e.execute(t,r);return n instanceof Promise?n:Promise.resolve(n)}catch(n){return Promise.reject(n)}}function L(e){return e.length===0?async(t,r)=>{await Promise.resolve(r())}:async function(t,r){let n=new Set,o=async i=>{if(i>=e.length)return Promise.resolve(r());let s=e[i];return vt(s,t,()=>{if(n.has(i))throw new Error("next() called multiple times");return n.add(i),o(i+1)})};return o(0)}}b();R();var Z=class extends w{constructor(t,r=void 0,n=void 0){super("FORBIDDEN",t,403,n??y(),r)}};function $(e){if(typeof e=="function")return{name:"anonymous",execute:e,debug:!1};let{name:t="anonymous",handler:r,skip:n,debug:o=!1}=e;return{name:t,execute:r,debug:o,...n!==void 0&&{skip:n}}}function ye(e){return $({name:"state-middleware",handler:e})}function Se(e){return $({name:"service-middleware",handler:e})}var an={origin:!0,methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],credentials:!1,optionsSuccessStatus:204},cn={origin:!1,methods:["GET","HEAD"],credentials:!1,optionsSuccessStatus:204};function _t(e){return e===void 0&&(e=process.env.NODE_ENV!=="production"),e?{...an}:{...cn}}function ln(e=6e4,t=1e3){let r=new Map,n={ttl:e,maxSize:t},o=(g,x,v)=>`${g}:${x}:${v||"anonymous"}`,i=()=>{if(r.size===0)return;let g=null,x=1/0;for(let[v,u]of r.entries())u.lastAccessed<x&&(x=u.lastAccessed,g=v);g&&r.delete(g)};return{get:(g,x,v)=>{let u=o(g,x,v),f=r.get(u);if(!f)return null;let m=Date.now();return m>f.expiresAt?(r.delete(u),null):(f.lastAccessed=m,f.allowed)},set:(g,x,v,u)=>{let f=o(g,v,u),m=Date.now();if(r.has(f)){r.set(f,{allowed:x,expiresAt:m+n.ttl,lastAccessed:m});return}r.size>=n.maxSize&&i(),r.set(f,{allowed:x,expiresAt:m+n.ttl,lastAccessed:m})},clear:()=>{r.clear()},cleanExpired:()=>{let g=Date.now(),x=0;for(let[v,u]of r.entries())g>u.expiresAt&&(r.delete(v),x++);return x},getStats:()=>({size:r.size,maxSize:n.maxSize,ttl:n.ttl})}}var Mt=ln();function un(e){return typeof e=="boolean"||typeof e=="function"?!1:Array.isArray(e)?e.every(t=>typeof t=="string"||t instanceof RegExp):typeof e=="string"||e instanceof RegExp}function dn(e){return typeof e=="string"?`str:${e}`:e instanceof RegExp?`regex:${e.source}:${e.flags}`:Array.isArray(e)?`array:[${e.map(t=>typeof t=="string"?`str:${t}`:t instanceof RegExp?`regex:${t.source}:${t.flags}`:"unknown").join(",")}]`:"unknown"}async function pn(e,t){return t==="*"?!0:e===t}async function fn(e,t){return t.test(e)}async function mn(e,t,r,n=100){let o;try{let i=new Promise(a=>{o=setTimeout(()=>{a({timedOut:!0})},n)}),s=await Promise.race([Promise.resolve(t(e,r)).then(a=>({result:a})),i]);return o&&clearTimeout(o),"timedOut"in s?(console.warn(`CORS origin validation function timed out after ${n}ms for origin: ${e}`),!1):s.result}catch(i){return o&&clearTimeout(o),console.error("CORS origin validation function error:",i),!1}}async function Ot(e,t,r){let n=t.map(i=>Je(e,i,r));return(await Promise.all(n)).some(i=>i===!0)}async function Je(e,t,r){return typeof t=="string"?pn(e,t):t instanceof RegExp?fn(e,t):typeof t=="function"?mn(e,t,r):(console.warn("Unknown CORS origin type:",typeof t),!1)}async function ee(e,t,r){if(t===!0)return!0;if(t===!1)return!1;if(un(t)){let o=r?.state?.user?.id||r?.state?.userId,i=dn(t),s=Mt.get(e,i,o);if(s!==null)return s;let a;return Array.isArray(t)?a=await Ot(e,t,r):a=await Je(e,t,r),Mt.set(e,a,i,o),a}else return Array.isArray(t)?Ot(e,t,r):Je(e,t,r)}I();function gn(e){let t=e.request.header("origin")||e.request.header("Origin"),r=e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"),n=e.request.header("access-control-request-headers")||e.request.header("Access-Control-Request-Headers"),o=n?n.split(",").map(i=>i.trim().toLowerCase()):void 0;return{origin:t,requestedMethod:r,requestedHeaders:o}}function Ye(e){return e.toUpperCase()}function hn(e,t){return t?(typeof t=="string"?t.split(",").map(n=>n.trim()):t).map(n=>Ye(n)).includes(Ye(e)):["GET","HEAD","PUT","PATCH","POST","DELETE"].includes(Ye(e))}function yn(e,t){if(!e||e.length===0||t===void 0)return!0;let r=typeof t=="string"?t.split(",").map(n=>n.trim().toLowerCase()):t.map(n=>n.toLowerCase());return e.every(n=>r.includes(n.toLowerCase()))}function Sn(e,t,r,n){n&&(t.origin===!0&&!t.credentials?e.response.header("Access-Control-Allow-Origin","*"):(e.response.header("Access-Control-Allow-Origin",r),e.response.header("Vary","Origin"))),t.credentials&&n&&e.response.header("Access-Control-Allow-Credentials","true");let o=t.methods||["GET","HEAD","PUT","PATCH","POST","DELETE"],i=typeof o=="string"?o:o.join(", ");if(e.response.header("Access-Control-Allow-Methods",i),t.allowedHeaders){let s=typeof t.allowedHeaders=="string"?t.allowedHeaders:t.allowedHeaders.join(", ");e.response.header("Access-Control-Allow-Headers",s)}else{let s=e.request.header("access-control-request-headers")||e.request.header("Access-Control-Request-Headers");s&&e.response.header("Access-Control-Allow-Headers",s)}t.maxAge!==void 0&&t.maxAge>=0&&e.response.header("Access-Control-Max-Age",String(t.maxAge))}async function At(e,t){let r=gn(e);if(!r.origin||!r.requestedMethod)throw e.response.status(403),new M("Invalid preflight request: missing required headers",{fields:[{field:r.origin?"Access-Control-Request-Method":"Origin",messages:["Required header is missing"]}],errorCount:1,section:"body"});let n=await ee(r.origin,t.origin||!1,e);if(!n)throw e.response.status(403),new M("CORS origin not allowed",{fields:[{field:"Origin",messages:[`Origin '${r.origin}' is not allowed`],rejectedValue:r.origin}],errorCount:1,section:"body"});if(!hn(r.requestedMethod,t.methods))throw e.response.status(403),new M("CORS method not allowed",{fields:[{field:"Access-Control-Request-Method",messages:[`Method '${r.requestedMethod}' is not allowed`],rejectedValue:r.requestedMethod,expectedType:typeof t.methods=="string"?t.methods:t.methods?.join(", ")}],errorCount:1,section:"body"});if(!yn(r.requestedHeaders,t.allowedHeaders)){let i=r.requestedHeaders?.filter(s=>{let a=t.allowedHeaders;return a?!(typeof a=="string"?a.split(",").map(l=>l.trim().toLowerCase()):a.map(l=>l.toLowerCase())).includes(s.toLowerCase()):!1});throw e.response.status(403),new M("CORS headers not allowed",{fields:[{field:"Access-Control-Request-Headers",messages:[`Headers not allowed: ${i?.join(", ")}`],rejectedValue:i}],errorCount:1,section:"body"})}Sn(e,t,r.origin,n);let o=t.optionsSuccessStatus||204;e.response.status(o),t.preflightContinue||e.response.text("")}function Ke(e){return e.request.method==="OPTIONS"&&!!(e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"))}var T=require("zod"),wn=T.z.enum(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]),xn=T.z.union([T.z.array(wn),T.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),Ft=T.z.union([T.z.array(T.z.string()),T.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),En=T.z.custom(e=>typeof e=="function"&&e.length<=2,{message:"Origin validator must be a function accepting (origin, ctx?) parameters"}),kt=T.z.union([T.z.string(),T.z.instanceof(RegExp),En]),vn=T.z.union([T.z.boolean(),kt,T.z.array(kt)]),It=T.z.object({origin:vn.optional(),methods:xn,allowedHeaders:Ft,exposedHeaders:Ft,credentials:T.z.boolean().optional(),maxAge:T.z.number().int().optional(),preflightContinue:T.z.boolean().optional(),optionsSuccessStatus:T.z.number().int().min(200).max(299).optional()}).strict(),Dt=T.z.union([T.z.boolean(),It]).optional();function zt(e){try{return typeof e=="boolean"?e===!1?{origin:!1}:{origin:!0}:It.parse(e)}catch(t){if(t instanceof T.z.ZodError){let r=Tn(t);throw new Error(`Invalid CORS options:
11
- ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function Tn(e){return e.errors.map(r=>` - ${r.path.join(".")||"root"}: ${r.message}`).join(`
12
- `)}function Rn(e){return Array.isArray(e)}function Nt(e){if(e.credentials===!0&&e.origin!==void 0){if(e.origin===!0||e.origin==="*")throw new Error("CORS security violation: Cannot use wildcard origin (*) with credentials. When credentials are enabled, you must specify explicit origins.");if(Rn(e.origin)&&e.origin.some(r=>r==="*"))throw new Error("CORS security violation: Cannot include wildcard origin (*) in array when credentials are enabled.")}}function Bt(e,t){return e===!0?{...t,origin:!0}:e===!1?{origin:!1}:e?{...t,...e,methods:e.methods??t.methods,allowedHeaders:e.allowedHeaders??t.allowedHeaders,exposedHeaders:e.exposedHeaders??t.exposedHeaders}:t}function bn(e,t,r,n){if(!(!n||!r)&&(t.origin===!0&&!t.credentials?e.response.header("Access-Control-Allow-Origin","*"):(e.response.header("Access-Control-Allow-Origin",r),e.response.header("Vary","Origin")),t.credentials&&e.response.header("Access-Control-Allow-Credentials","true"),t.exposedHeaders)){let o=typeof t.exposedHeaders=="string"?t.exposedHeaders:t.exposedHeaders.join(", ");e.response.header("Access-Control-Expose-Headers",o)}}function te(e){let t=process.env.NODE_ENV==="development",r=_t(t),n=Bt(e,r),o=zt(n);return Nt(o),$({name:"cors",handler:async(i,s)=>{let a=i.request.header("origin")||i.request.header("Origin");if(Ke(i)){if(await At(i,o),!o.preflightContinue)return}else{if(!a){await s();return}let c=await ee(a,o.origin||!1,i);if(!c)throw i.response.status(403),new Z("CORS validation failed",{reason:"origin_not_allowed",origin:a,allowedOrigins:o.origin});bn(i,o,a,c)}await s()},debug:process.env.DEBUG?.includes("cors")})}function we(e,t,r,n={}){if(!e||typeof e!="string")throw new Error("Plugin name must be a non-empty string");if(!t||typeof t!="string")throw new Error("Plugin version must be a non-empty string");if(typeof r!="function")throw new Error("Plugin setup must be a function");return function(i){let s={...n,...i},a={name:e,version:t,register:async c=>{let l=await r(c,s);l&&typeof l=="object"&&Object.assign(a,l)}};return a}}var Qt=require("url");var xe={};function $t(e){xe={...xe,...e}}function Ht(){if(!xe.routesDir)throw new Error("Routes directory not configured. Make sure server is properly initialized.");return xe.routesDir}var Ut=_(require("path"),1);function Ee(e,t){e.startsWith("file://")&&(e=e.replace("file://","")),t.startsWith("file://")&&(t=t.replace("file://",""));let r=e.replace(/\\/g,"/"),n=t.replace(/\\/g,"/"),o=n.endsWith("/")?n:`${n}/`,i=r;r.startsWith(o)?i=r.substring(o.length):r.startsWith(n)?(i=r.substring(n.length),i.startsWith("/")&&(i=i.substring(1))):i=Ut.relative(n,r).replace(/\\/g,"/"),i=i.replace(/\.[^.]+$/,"");let s=i.split("/").filter(Boolean),a=[],c=s.map(p=>{if(p.startsWith("[")&&p.endsWith("]")){let g=p.slice(1,-1);return a.push(g),`:${g}`}return p}),l=c.length>0?`/${c.join("/")}`:"/";return l.endsWith("/index")&&(l=l.slice(0,-6)||"/"),{filePath:e,routePath:l,params:a}}var jt=require("events");var O=require("zod"),Cn=O.z.enum(["drop-oldest","drop-newest","close"]),Pn=O.z.object({low:O.z.number().int().positive().describe("Resume threshold in messages"),high:O.z.number().int().positive().describe("Trigger threshold in messages")}).refine(e=>e.low<e.high,{message:"Low watermark must be less than high watermark",path:["low"]}),_n=O.z.object({maxMessages:O.z.number().int().positive().max(1e5).describe("Maximum number of messages in buffer"),maxBytes:O.z.number().int().positive().max(100*1024*1024).optional().describe("Maximum buffer size in bytes"),messageTimeout:O.z.number().int().nonnegative().max(3e5).optional().describe("Message TTL in milliseconds")}),qt=O.z.object({enabled:O.z.boolean().default(!0).describe("Enable backpressure management"),strategy:Cn.default("drop-oldest").describe("Strategy when buffer reaches high watermark"),watermarks:Pn.default({low:100,high:1e3}).describe("Buffer watermark thresholds"),limits:_n.default({maxMessages:1e4}).describe("Buffer size constraints"),metrics:O.z.object({enabled:O.z.boolean().default(!1),interval:O.z.number().int().positive().default(5e3)}).optional().describe("Metrics collection configuration")}).refine(e=>e.watermarks.high<=e.limits.maxMessages,{message:"High watermark cannot exceed maxMessages limit",path:["watermarks","high"]});var Mn={maxConnections:1e4,maxConnectionsPerClient:100,inactiveTimeout:18e5,cleanupInterval:6e4};function On(e){let t={...Mn,...e},r=new Map,n=new Map,o=null,i={},s=d=>{!o&&t.cleanupInterval>0&&(o=setInterval(()=>{d()},t.cleanupInterval),o.unref&&o.unref())},a=()=>{o&&(clearInterval(o),o=null)},c=(d,S)=>{if(!d)return;let h=(n.get(d)||0)+S;h<=0?n.delete(d):n.set(d,h)},l=(d,S,E)=>{if(r.has(d))throw new Error(`Connection with ID ${d} already exists`);if(r.size>=t.maxConnections)throw new Error(`Maximum connection limit reached (${t.maxConnections})`);if(E?.clientIp&&(n.get(E.clientIp)||0)>=t.maxConnectionsPerClient)throw new Error(`Maximum connections per client reached (${t.maxConnectionsPerClient})`);let h=Date.now();r.set(d,{stream:S,connectedAt:h,lastActivity:h,clientIp:E?.clientIp,userAgent:E?.userAgent}),c(E?.clientIp,1),r.size===1&&s(i.cleanup),S.onClose(()=>{p(d)})},p=d=>{let S=r.get(d);S&&(r.delete(d),c(S.clientIp,-1),r.size===0&&a())},g=()=>r.size,x=()=>{let d=Date.now(),S=[];r.forEach((E,h)=>{let k=d-E.lastActivity>t.inactiveTimeout,Jr=!E.stream||E.stream.state==="closed"||!E.stream.isWritable;if((k||Jr)&&(S.push(h),E.stream&&typeof E.stream.close=="function"))try{E.stream.close()}catch{}}),S.forEach(E=>p(E))},v=d=>r.get(d)?.stream,u=d=>r.has(d),f=()=>Array.from(r.keys()),m=()=>{a(),r.forEach(d=>{if(d.stream&&typeof d.stream.close=="function")try{d.stream.close()}catch{}}),r.clear(),n.clear()};return i.add=l,i.remove=p,i.count=g,i.cleanup=x,i.get=v,i.has=u,i.getIds=f,i.shutdown=m,i}var Xe=null;function ve(e){return Xe||(Xe=On(e)),Xe}b();R();var re=class extends w{constructor(t,r,n=void 0){super("SSE_BUFFER_OVERFLOW",t,503,n??y(),r)}};b();R();var Te=class extends w{constructor(t,r=void 0,n=void 0){super("SSE_STREAM_CLOSED",t,410,n??y(),r)}};R();var An={heartbeatInterval:3e4,maxEventSize:1024*1024,autoClose:!0,maxBufferSize:1e3,bufferStrategy:"drop-oldest"};function Lt(e,t,r,n){let o=[];r&&o.push(`id: ${r}`),n!==void 0&&o.push(`retry: ${n}`),o.push(`event: ${e}`);let s=(t===null?"null":t===void 0?"undefined":typeof t=="string"?t:JSON.stringify(t)).split(`
10
+ "use strict";var Jr=Object.create;var he=Object.defineProperty;var Yr=Object.getOwnPropertyDescriptor;var Kr=Object.getOwnPropertyNames;var Xr=Object.getPrototypeOf,en=Object.prototype.hasOwnProperty;var J=(e,t)=>()=>(e&&(t=e(e=0)),t);var te=(e,t)=>{for(var r in t)he(e,r,{get:t[r],enumerable:!0})},xt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Kr(t))!en.call(e,o)&&o!==r&&he(e,o,{get:()=>t[o],enumerable:!(n=Yr(t,o))||n.enumerable});return e};var M=(e,t,r)=>(r=e!=null?Jr(Xr(e)):{},xt(t||!e||!e.__esModule?he(r,"default",{value:e,enumerable:!0}):r,e)),tn=e=>xt(he({},"__esModule",{value:!0}),e);var P,Et,w,C=J(()=>{"use strict";P=(y=>(y.VALIDATION_ERROR="VALIDATION_ERROR",y.NOT_FOUND="NOT_FOUND",y.UNAUTHORIZED="UNAUTHORIZED",y.FORBIDDEN="FORBIDDEN",y.SSE_NOT_ACCEPTABLE="SSE_NOT_ACCEPTABLE",y.CONFLICT="CONFLICT",y.RATE_LIMITED="RATE_LIMITED",y.INTERNAL_SERVER_ERROR="INTERNAL_SERVER_ERROR",y.PAYLOAD_TOO_LARGE="PAYLOAD_TOO_LARGE",y.UNSUPPORTED_MEDIA_TYPE="UNSUPPORTED_MEDIA_TYPE",y.UPLOAD_TIMEOUT="UPLOAD_TIMEOUT",y.UNPROCESSABLE_ENTITY="UNPROCESSABLE_ENTITY",y.NETWORK_ERROR="NETWORK_ERROR",y.TIMEOUT_ERROR="TIMEOUT_ERROR",y.PARSE_ERROR="PARSE_ERROR",y.HTTP_ERROR="HTTP_ERROR",y.SSE_CONNECTION_ERROR="SSE_CONNECTION_ERROR",y.SSE_BUFFER_OVERFLOW="SSE_BUFFER_OVERFLOW",y.SSE_STREAM_CLOSED="SSE_STREAM_CLOSED",y.SERVICE_UNAVAILABLE="SERVICE_UNAVAILABLE",y))(P||{}),Et=(o=>(o.LOW="low",o.MEDIUM="medium",o.HIGH="high",o.CRITICAL="critical",o))(Et||{}),w=class extends Error{type;title;status;correlationId;timestamp;details;constructor(t,r,n,o,i){super(r),this.name=this.constructor.name,this.type=t,this.title=r,this.status=n,this.correlationId=o,this.timestamp=new Date,this.details=i,Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){let t={type:this.type,title:this.title,status:this.status,correlationId:this.correlationId,timestamp:this.timestamp.toISOString()};return this.details!==void 0?{...t,details:this.details}:t}toString(){return`${this.name}: ${this.title} [${this.correlationId}]`}}});function rn(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`req_${e}_${t}`}function bt(e,t){ye={headerName:e||Ge.headerName,generator:t||Ge.generator}}function W(){return ye.headerName}function nn(){return ye.generator()}function m(){let e=Rt.getStore();return e&&e.trim()?e:"unknown"}function Ct(e,t){return Rt.run(e,t)}function Se(e){let t=ye.headerName,r=e[t],n;return Array.isArray(r)?n=r[0]:typeof r=="string"&&(n=r),n&&n.trim()?n:nn()}var Tt,Ge,ye,Rt,b=J(()=>{"use strict";Tt=require("async_hooks"),Ge={headerName:"x-correlation-id",generator:rn},ye={...Ge},Rt=new Tt.AsyncLocalStorage});var Q={};te(Q,{ValidationError:()=>_});var _,k=J(()=>{"use strict";C();b();_=class extends w{constructor(t,r=void 0,n=void 0){super("VALIDATION_ERROR",t,400,n??m(),r)}}});var tt={};te(tt,{PayloadTooLargeError:()=>I});var I,ae=J(()=>{"use strict";C();b();I=class extends w{constructor(t,r,n){super("PAYLOAD_TOO_LARGE",t,413,n??m(),r)}}});var rt={};te(rt,{UnsupportedMediaTypeError:()=>L});var L,ce=J(()=>{"use strict";C();b();L=class extends w{constructor(t,r,n){super("UNSUPPORTED_MEDIA_TYPE",t,415,n??m(),r)}}});var tr={};te(tr,{InternalServerError:()=>H});var H,le=J(()=>{"use strict";C();b();H=class extends w{constructor(t,r=void 0,n=void 0){super("INTERNAL_SERVER_ERROR",t,500,n??m(),r)}}});var pi={};te(pi,{Blaize:()=>di,BlaizeError:()=>w,ConflictError:()=>qe,ErrorSeverity:()=>Et,ErrorType:()=>P,ForbiddenError:()=>Y,InternalServerError:()=>H,MiddlewareAPI:()=>Qr,NotFoundError:()=>U,PayloadTooLargeError:()=>I,PluginsAPI:()=>Gr,RateLimitError:()=>je,RequestTimeoutError:()=>Ve,RouterAPI:()=>Wr,ServerAPI:()=>Vr,ServiceNotAvailableError:()=>Qe,UnauthorizedError:()=>Ue,UnprocessableEntityError:()=>We,UnsupportedMediaTypeError:()=>L,VERSION:()=>jr,ValidationError:()=>_,asMiddlewareArray:()=>ai,asPluginArray:()=>ci,buildUrl:()=>Ie,compilePathPattern:()=>K,compose:()=>V,cors:()=>ne,createDeleteRoute:()=>Oe,createGetRoute:()=>Pe,createHeadRoute:()=>Fe,createMatcher:()=>X,createMiddleware:()=>$,createMiddlewareArray:()=>li,createOptionsRoute:()=>ke,createPatchRoute:()=>Ae,createPlugin:()=>ve,createPluginArray:()=>ui,createPostRoute:()=>_e,createPutRoute:()=>Me,createRouteFactory:()=>et,createServer:()=>Le,createServiceMiddleware:()=>xe,createStateMiddleware:()=>we,extractParams:()=>Z,getCorrelationId:()=>m,inferContext:()=>wt,isMiddleware:()=>ii,isPlugin:()=>si,paramsToQuery:()=>ie});module.exports=tn(pi);function vt(e,t,r){if(!e||e.skip&&e.skip(t))return Promise.resolve(r());try{let n=e.execute(t,r);return n instanceof Promise?n:Promise.resolve(n)}catch(n){return Promise.reject(n)}}function V(e){return e.length===0?async(t,r)=>{await Promise.resolve(r())}:async function(t,r){let n=new Set,o=async i=>{if(i>=e.length)return Promise.resolve(r());let s=e[i];return vt(s,t,()=>{if(n.has(i))throw new Error("next() called multiple times");return n.add(i),o(i+1)})};return o(0)}}C();b();var Y=class extends w{constructor(t,r=void 0,n=void 0){super("FORBIDDEN",t,403,n??m(),r)}};function $(e){if(typeof e=="function")return{name:"anonymous",execute:e,debug:!1};let{name:t="anonymous",handler:r,skip:n,debug:o=!1}=e;return{name:t,execute:r,debug:o,...n!==void 0&&{skip:n}}}function we(e){return $({name:"state-middleware",handler:e})}function xe(e){return $({name:"service-middleware",handler:e})}var on={origin:!0,methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],credentials:!1,optionsSuccessStatus:204},sn={origin:!1,methods:["GET","HEAD"],credentials:!1,optionsSuccessStatus:204};function Pt(e){return e===void 0&&(e=process.env.NODE_ENV!=="production"),e?{...on}:{...sn}}function an(e=6e4,t=1e3){let r=new Map,n={ttl:e,maxSize:t},o=(h,x,T)=>`${h}:${x}:${T||"anonymous"}`,i=()=>{if(r.size===0)return;let h=null,x=1/0;for(let[T,u]of r.entries())u.lastAccessed<x&&(x=u.lastAccessed,h=T);h&&r.delete(h)};return{get:(h,x,T)=>{let u=o(h,x,T),f=r.get(u);if(!f)return null;let g=Date.now();return g>f.expiresAt?(r.delete(u),null):(f.lastAccessed=g,f.allowed)},set:(h,x,T,u)=>{let f=o(h,T,u),g=Date.now();if(r.has(f)){r.set(f,{allowed:x,expiresAt:g+n.ttl,lastAccessed:g});return}r.size>=n.maxSize&&i(),r.set(f,{allowed:x,expiresAt:g+n.ttl,lastAccessed:g})},clear:()=>{r.clear()},cleanExpired:()=>{let h=Date.now(),x=0;for(let[T,u]of r.entries())h>u.expiresAt&&(r.delete(T),x++);return x},getStats:()=>({size:r.size,maxSize:n.maxSize,ttl:n.ttl})}}var _t=an();function cn(e){return typeof e=="boolean"||typeof e=="function"?!1:Array.isArray(e)?e.every(t=>typeof t=="string"||t instanceof RegExp):typeof e=="string"||e instanceof RegExp}function ln(e){return typeof e=="string"?`str:${e}`:e instanceof RegExp?`regex:${e.source}:${e.flags}`:Array.isArray(e)?`array:[${e.map(t=>typeof t=="string"?`str:${t}`:t instanceof RegExp?`regex:${t.source}:${t.flags}`:"unknown").join(",")}]`:"unknown"}async function un(e,t){return t==="*"?!0:e===t}async function dn(e,t){return t.test(e)}async function pn(e,t,r,n=100){let o;try{let i=new Promise(a=>{o=setTimeout(()=>{a({timedOut:!0})},n)}),s=await Promise.race([Promise.resolve(t(e,r)).then(a=>({result:a})),i]);return o&&clearTimeout(o),"timedOut"in s?(console.warn(`CORS origin validation function timed out after ${n}ms for origin: ${e}`),!1):s.result}catch(i){return o&&clearTimeout(o),console.error("CORS origin validation function error:",i),!1}}async function Mt(e,t,r){let n=t.map(i=>Ze(e,i,r));return(await Promise.all(n)).some(i=>i===!0)}async function Ze(e,t,r){return typeof t=="string"?un(e,t):t instanceof RegExp?dn(e,t):typeof t=="function"?pn(e,t,r):(console.warn("Unknown CORS origin type:",typeof t),!1)}async function re(e,t,r){if(t===!0)return!0;if(t===!1)return!1;if(cn(t)){let o=r?.state?.user?.id||r?.state?.userId,i=ln(t),s=_t.get(e,i,o);if(s!==null)return s;let a;return Array.isArray(t)?a=await Mt(e,t,r):a=await Ze(e,t,r),_t.set(e,a,i,o),a}else return Array.isArray(t)?Mt(e,t,r):Ze(e,t,r)}k();function fn(e){let t=e.request.header("origin")||e.request.header("Origin"),r=e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"),n=e.request.header("access-control-request-headers")||e.request.header("Access-Control-Request-Headers"),o=n?n.split(",").map(i=>i.trim().toLowerCase()):void 0;return{origin:t,requestedMethod:r,requestedHeaders:o}}function Je(e){return e.toUpperCase()}function mn(e,t){return t?(typeof t=="string"?t.split(",").map(n=>n.trim()):t).map(n=>Je(n)).includes(Je(e)):["GET","HEAD","PUT","PATCH","POST","DELETE"].includes(Je(e))}function gn(e,t){if(!e||e.length===0||t===void 0)return!0;let r=typeof t=="string"?t.split(",").map(n=>n.trim().toLowerCase()):t.map(n=>n.toLowerCase());return e.every(n=>r.includes(n.toLowerCase()))}function hn(e,t,r,n){n&&(t.origin===!0&&!t.credentials?e.response.header("Access-Control-Allow-Origin","*"):(e.response.header("Access-Control-Allow-Origin",r),e.response.header("Vary","Origin"))),t.credentials&&n&&e.response.header("Access-Control-Allow-Credentials","true");let o=t.methods||["GET","HEAD","PUT","PATCH","POST","DELETE"],i=typeof o=="string"?o:o.join(", ");if(e.response.header("Access-Control-Allow-Methods",i),t.allowedHeaders){let s=typeof t.allowedHeaders=="string"?t.allowedHeaders:t.allowedHeaders.join(", ");e.response.header("Access-Control-Allow-Headers",s)}else{let s=e.request.header("access-control-request-headers")||e.request.header("Access-Control-Request-Headers");s&&e.response.header("Access-Control-Allow-Headers",s)}t.maxAge!==void 0&&t.maxAge>=0&&e.response.header("Access-Control-Max-Age",String(t.maxAge))}async function Ot(e,t){let r=fn(e);if(!r.origin||!r.requestedMethod)throw e.response.status(403),new _("Invalid preflight request: missing required headers",{fields:[{field:r.origin?"Access-Control-Request-Method":"Origin",messages:["Required header is missing"]}],errorCount:1,section:"body"});let n=await re(r.origin,t.origin||!1,e);if(!n)throw e.response.status(403),new _("CORS origin not allowed",{fields:[{field:"Origin",messages:[`Origin '${r.origin}' is not allowed`],rejectedValue:r.origin}],errorCount:1,section:"body"});if(!mn(r.requestedMethod,t.methods))throw e.response.status(403),new _("CORS method not allowed",{fields:[{field:"Access-Control-Request-Method",messages:[`Method '${r.requestedMethod}' is not allowed`],rejectedValue:r.requestedMethod,expectedType:typeof t.methods=="string"?t.methods:t.methods?.join(", ")}],errorCount:1,section:"body"});if(!gn(r.requestedHeaders,t.allowedHeaders)){let i=r.requestedHeaders?.filter(s=>{let a=t.allowedHeaders;return a?!(typeof a=="string"?a.split(",").map(l=>l.trim().toLowerCase()):a.map(l=>l.toLowerCase())).includes(s.toLowerCase()):!1});throw e.response.status(403),new _("CORS headers not allowed",{fields:[{field:"Access-Control-Request-Headers",messages:[`Headers not allowed: ${i?.join(", ")}`],rejectedValue:i}],errorCount:1,section:"body"})}hn(e,t,r.origin,n);let o=t.optionsSuccessStatus||204;e.response.status(o),t.preflightContinue||e.response.text("")}function Ye(e){return e.request.method==="OPTIONS"&&!!(e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"))}var R=require("zod"),yn=R.z.enum(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]),Sn=R.z.union([R.z.array(yn),R.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),At=R.z.union([R.z.array(R.z.string()),R.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),wn=R.z.custom(e=>typeof e=="function"&&e.length<=2,{message:"Origin validator must be a function accepting (origin, ctx?) parameters"}),Ft=R.z.union([R.z.string(),R.z.instanceof(RegExp),wn]),xn=R.z.union([R.z.boolean(),Ft,R.z.array(Ft)]),kt=R.z.object({origin:xn.optional(),methods:Sn,allowedHeaders:At,exposedHeaders:At,credentials:R.z.boolean().optional(),maxAge:R.z.number().int().optional(),preflightContinue:R.z.boolean().optional(),optionsSuccessStatus:R.z.number().int().min(200).max(299).optional()}).strict(),It=R.z.union([R.z.boolean(),kt]).optional();function zt(e){try{return typeof e=="boolean"?e===!1?{origin:!1}:{origin:!0}:kt.parse(e)}catch(t){if(t instanceof R.z.ZodError){let r=vn(t);throw new Error(`Invalid CORS options:
11
+ ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function vn(e){return e.errors.map(r=>` - ${r.path.join(".")||"root"}: ${r.message}`).join(`
12
+ `)}function En(e){return Array.isArray(e)}function Dt(e){if(e.credentials===!0&&e.origin!==void 0){if(e.origin===!0||e.origin==="*")throw new Error("CORS security violation: Cannot use wildcard origin (*) with credentials. When credentials are enabled, you must specify explicit origins.");if(En(e.origin)&&e.origin.some(r=>r==="*"))throw new Error("CORS security violation: Cannot include wildcard origin (*) in array when credentials are enabled.")}}function Nt(e,t){return e===!0?{...t,origin:!0}:e===!1?{origin:!1}:e?{...t,...e,methods:e.methods??t.methods,allowedHeaders:e.allowedHeaders??t.allowedHeaders,exposedHeaders:e.exposedHeaders??t.exposedHeaders}:t}function Tn(e,t,r,n){if(!(!n||!r)&&(t.origin===!0&&!t.credentials?e.response.header("Access-Control-Allow-Origin","*"):(e.response.header("Access-Control-Allow-Origin",r),e.response.header("Vary","Origin")),t.credentials&&e.response.header("Access-Control-Allow-Credentials","true"),t.exposedHeaders)){let o=typeof t.exposedHeaders=="string"?t.exposedHeaders:t.exposedHeaders.join(", ");e.response.header("Access-Control-Expose-Headers",o)}}function ne(e){let t=process.env.NODE_ENV==="development",r=Pt(t),n=Nt(e,r),o=zt(n);return Dt(o),$({name:"cors",handler:async(i,s)=>{let a=i.request.header("origin")||i.request.header("Origin");if(Ye(i)){if(await Ot(i,o),!o.preflightContinue)return}else{if(!a){await s();return}let c=await re(a,o.origin||!1,i);if(!c)throw i.response.status(403),new Y("CORS validation failed",{reason:"origin_not_allowed",origin:a,allowedOrigins:o.origin});Tn(i,o,a,c)}await s()},debug:process.env.DEBUG?.includes("cors")})}function ve(e,t,r,n={}){if(!e||typeof e!="string")throw new Error("Plugin name must be a non-empty string");if(!t||typeof t!="string")throw new Error("Plugin version must be a non-empty string");if(typeof r!="function")throw new Error("Plugin setup must be a function");return function(i){let s={...n,...i},a={name:e,version:t,register:async c=>{let l=await r(c,s);l&&typeof l=="object"&&Object.assign(a,l)}};return a}}var Wt=require("url");var Ee={};function Bt(e){Ee={...Ee,...e}}function Ht(){if(!Ee.routesDir)throw new Error("Routes directory not configured. Make sure server is properly initialized.");return Ee.routesDir}var $t=M(require("path"),1);function Te(e,t){e.startsWith("file://")&&(e=e.replace("file://","")),t.startsWith("file://")&&(t=t.replace("file://",""));let r=e.replace(/\\/g,"/"),n=t.replace(/\\/g,"/"),o=n.endsWith("/")?n:`${n}/`,i=r;r.startsWith(o)?i=r.substring(o.length):r.startsWith(n)?(i=r.substring(n.length),i.startsWith("/")&&(i=i.substring(1))):i=$t.relative(n,r).replace(/\\/g,"/"),i=i.replace(/\.[^.]+$/,"");let s=i.split("/").filter(Boolean),a=[],c=s.map(p=>{if(p.startsWith("[")&&p.endsWith("]")){let h=p.slice(1,-1);return a.push(h),`:${h}`}return p}),l=c.length>0?`/${c.join("/")}`:"/";return l.endsWith("/index")&&(l=l.slice(0,-6)||"/"),{filePath:e,routePath:l,params:a}}var qt=require("events");var A=require("zod"),Rn=A.z.enum(["drop-oldest","drop-newest","close"]),bn=A.z.object({low:A.z.number().int().positive().describe("Resume threshold in messages"),high:A.z.number().int().positive().describe("Trigger threshold in messages")}).refine(e=>e.low<e.high,{message:"Low watermark must be less than high watermark",path:["low"]}),Cn=A.z.object({maxMessages:A.z.number().int().positive().max(1e5).describe("Maximum number of messages in buffer"),maxBytes:A.z.number().int().positive().max(100*1024*1024).optional().describe("Maximum buffer size in bytes"),messageTimeout:A.z.number().int().nonnegative().max(3e5).optional().describe("Message TTL in milliseconds")}),Lt=A.z.object({enabled:A.z.boolean().default(!0).describe("Enable backpressure management"),strategy:Rn.default("drop-oldest").describe("Strategy when buffer reaches high watermark"),watermarks:bn.default({low:100,high:1e3}).describe("Buffer watermark thresholds"),limits:Cn.default({maxMessages:1e4}).describe("Buffer size constraints"),metrics:A.z.object({enabled:A.z.boolean().default(!1),interval:A.z.number().int().positive().default(5e3)}).optional().describe("Metrics collection configuration")}).refine(e=>e.watermarks.high<=e.limits.maxMessages,{message:"High watermark cannot exceed maxMessages limit",path:["watermarks","high"]});var Pn={maxConnections:1e4,maxConnectionsPerClient:100,inactiveTimeout:18e5,cleanupInterval:6e4};function _n(e){let t={...Pn,...e},r=new Map,n=new Map,o=null,i={},s=d=>{!o&&t.cleanupInterval>0&&(o=setInterval(()=>{d()},t.cleanupInterval),o.unref&&o.unref())},a=()=>{o&&(clearInterval(o),o=null)},c=(d,S)=>{if(!d)return;let y=(n.get(d)||0)+S;y<=0?n.delete(d):n.set(d,y)},l=(d,S,v)=>{if(r.has(d))throw new Error(`Connection with ID ${d} already exists`);if(r.size>=t.maxConnections)throw new Error(`Maximum connection limit reached (${t.maxConnections})`);if(v?.clientIp&&(n.get(v.clientIp)||0)>=t.maxConnectionsPerClient)throw new Error(`Maximum connections per client reached (${t.maxConnectionsPerClient})`);let y=Date.now();r.set(d,{stream:S,connectedAt:y,lastActivity:y,clientIp:v?.clientIp,userAgent:v?.userAgent}),c(v?.clientIp,1),r.size===1&&s(i.cleanup),S.onClose(()=>{p(d)})},p=d=>{let S=r.get(d);S&&(r.delete(d),c(S.clientIp,-1),r.size===0&&a())},h=()=>r.size,x=()=>{let d=Date.now(),S=[];r.forEach((v,y)=>{let D=d-v.lastActivity>t.inactiveTimeout,Zr=!v.stream||v.stream.state==="closed"||!v.stream.isWritable;if((D||Zr)&&(S.push(y),v.stream&&typeof v.stream.close=="function"))try{v.stream.close()}catch{}}),S.forEach(v=>p(v))},T=d=>r.get(d)?.stream,u=d=>r.has(d),f=()=>Array.from(r.keys()),g=()=>{a(),r.forEach(d=>{if(d.stream&&typeof d.stream.close=="function")try{d.stream.close()}catch{}}),r.clear(),n.clear()};return i.add=l,i.remove=p,i.count=h,i.cleanup=x,i.get=T,i.has=u,i.getIds=f,i.shutdown=g,i}var Ke=null;function Re(e){return Ke||(Ke=_n(e)),Ke}C();b();var oe=class extends w{constructor(t,r,n=void 0){super("SSE_BUFFER_OVERFLOW",t,503,n??m(),r)}};C();b();var be=class extends w{constructor(t,r=void 0,n=void 0){super("SSE_STREAM_CLOSED",t,410,n??m(),r)}};b();var Mn={heartbeatInterval:3e4,maxEventSize:1024*1024,autoClose:!0,maxBufferSize:1e3,bufferStrategy:"drop-oldest"};function Ut(e,t,r,n){let o=[];r&&o.push(`id: ${r}`),n!==void 0&&o.push(`retry: ${n}`),o.push(`event: ${e}`);let s=(t===null?"null":t===void 0?"undefined":typeof t=="string"?t:JSON.stringify(t)).split(`
13
13
  `);for(let a of s)o.push(`data: ${a}`);return o.push(""),o.join(`
14
14
  `)+`
15
- `}function Fn(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`${e}-${t}`}function kn(e,t){let r=t===null?"null":t===void 0?"undefined":typeof t=="string"?t:JSON.stringify(t);return e.length+r.length+50}function In(e,t,r,n){let o=0;switch(t){case"drop-oldest":{for(;e.length>=n&&e.length>0;)e.shift(),o++;e.push(r);break}case"drop-newest":{e.length>=n?o=1:e.push(r);break}case"close":break;default:for(;e.length>=n&&e.length>0;)e.shift(),o++;e.push(r)}return{buffer:e,dropped:o}}var et=class{id;_state="connecting";_buffer=[];_closeCallbacks=[];_errorCallbacks=[];_emitter=new jt.EventEmitter;_metrics;_options;_response;_request;_writable=!0;_cleanupExecuted=!1;_eventCounter=0;_lastEventId=null;_heartbeatTimer;_backpressureConfig;_disconnectHandlers=null;constructor(t,r={}){if(this.id=`sse-${Fn()}`,this._options={...An,...r},this._response=t.response,this._request=t.request,r.backpressure){let o=qt.safeParse(r.backpressure);o.success&&(this._backpressureConfig=o.data,this._options.maxBufferSize=o.data.limits.maxMessages,this._options.bufferStrategy=o.data.strategy)}let n=t.request.header("last-event-id");n&&(this._eventCounter=parseInt(n)||0,this._lastEventId=n),this._metrics={eventsSent:0,eventsDropped:0,bytesWritten:0,bufferHighWatermark:0,lastEventTime:Date.now()};try{let o=ve(),i={clientIp:this._request.header("x-forwarded-for")||this._request.header("x-real-ip")||this._request.raw.socket?.remoteAddress,userAgent:this._request.header("user-agent")};o.add(this.id,this,i)}catch(o){throw this._state="closed",this._writable=!1,console.error("[SSE] Failed to register connection:",o),o}this._setupDisconnectHandling(),this._response.status(200).header("Content-Type","text/event-stream").header("Cache-Control","no-cache").header("X-Accel-Buffering","no"),(!this._request.raw.httpVersionMajor||this._request.raw.httpVersionMajor<2)&&this._response.header("Connection","keep-alive"),this._options.heartbeatInterval&&this._options.heartbeatInterval>0&&this._setupHeartbeat(this._options.heartbeatInterval),this._state="connected",this._writeRaw(`: SSE connection established
15
+ `}function On(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`${e}-${t}`}function An(e,t){let r=t===null?"null":t===void 0?"undefined":typeof t=="string"?t:JSON.stringify(t);return e.length+r.length+50}function Fn(e,t,r,n){let o=0;switch(t){case"drop-oldest":{for(;e.length>=n&&e.length>0;)e.shift(),o++;e.push(r);break}case"drop-newest":{e.length>=n?o=1:e.push(r);break}case"close":break;default:for(;e.length>=n&&e.length>0;)e.shift(),o++;e.push(r)}return{buffer:e,dropped:o}}var Xe=class{id;_state="connecting";_buffer=[];_closeCallbacks=[];_errorCallbacks=[];_emitter=new qt.EventEmitter;_metrics;_options;_response;_request;_writable=!0;_cleanupExecuted=!1;_eventCounter=0;_lastEventId=null;_heartbeatTimer;_backpressureConfig;_disconnectHandlers=null;constructor(t,r={}){if(this.id=`sse-${On()}`,this._options={...Mn,...r},this._response=t.response,this._request=t.request,r.backpressure){let o=Lt.safeParse(r.backpressure);o.success&&(this._backpressureConfig=o.data,this._options.maxBufferSize=o.data.limits.maxMessages,this._options.bufferStrategy=o.data.strategy)}let n=t.request.header("last-event-id");n&&(this._eventCounter=parseInt(n)||0,this._lastEventId=n),this._metrics={eventsSent:0,eventsDropped:0,bytesWritten:0,bufferHighWatermark:0,lastEventTime:Date.now()};try{let o=Re(),i={clientIp:this._request.header("x-forwarded-for")||this._request.header("x-real-ip")||this._request.raw.socket?.remoteAddress,userAgent:this._request.header("user-agent")};o.add(this.id,this,i)}catch(o){throw this._state="closed",this._writable=!1,console.error("[SSE] Failed to register connection:",o),o}this._setupDisconnectHandling(),this._response.status(200).header("Content-Type","text/event-stream").header("Cache-Control","no-cache").header("X-Accel-Buffering","no"),(!this._request.raw.httpVersionMajor||this._request.raw.httpVersionMajor<2)&&this._response.header("Connection","keep-alive"),this._options.heartbeatInterval&&this._options.heartbeatInterval>0&&this._setupHeartbeat(this._options.heartbeatInterval),this._state="connected",this._writeRaw(`: SSE connection established
16
16
 
17
- `)}_registerConnection(){try{let t=ve(),r={clientIp:this._request.header("x-forwarded-for")||this._request.header("x-real-ip")||this._request.raw.socket?.remoteAddress,userAgent:this._request.header("user-agent")};t.add(this.id,this,r)}catch(t){throw this._state="closed",this._writable=!1,t}}_setupHeartbeat(t){this._heartbeatTimer=global.setInterval(()=>{this.isWritable&&Date.now()-this._metrics.lastEventTime>t*.9&&this.ping(`heartbeat ${new Date().toISOString()}`)},t),this._heartbeatTimer.unref&&this._heartbeatTimer.unref()}_setupDisconnectHandling(){let t=this._request.raw,r=this._response.raw,n=()=>{this._options.autoClose&&this._state!=="closed"&&this.close()};this._disconnectHandlers={req:{close:n,error:n},res:{close:n,error:n}},t.on("close",this._disconnectHandlers.req.close),t.on("error",this._disconnectHandlers.req.error),r.on("close",this._disconnectHandlers.res.close),r.on("error",this._disconnectHandlers.res.error)}_writeRaw(t){if(!this._writable||this._state==="closed")return!1;try{let r=this._response.raw,n;if("write"in r&&typeof r.write=="function")n=r.write(t);else throw new Error("Response stream does not support write operation");return n&&(this._metrics.bytesWritten+=Buffer.byteLength(t)),n}catch(r){return this._writable=!1,this._handleError(r),!1}}async _flushBuffer(){for(;this._buffer.length>0&&this._writable;){let t=this._buffer.shift();if(!t)break;let r=Lt(t.event,t.data,t.id);this._writeRaw(r)?(this._metrics.eventsSent++,this._metrics.lastEventTime=Date.now()):(this._buffer.unshift(t),await this._waitForDrain())}}_waitForDrain(){return new Promise(t=>{this._response.raw.once("drain",t)})}_handleError(t){this._errorCallbacks.forEach(r=>{try{r(t)}catch(n){console.error("Error in error callback:",n)}}),this._writable&&this.sendError(t)}_executeCleanup(){if(this._cleanupExecuted)return;if(this._cleanupExecuted=!0,this._heartbeatTimer&&(global.clearInterval(this._heartbeatTimer),this._heartbeatTimer=void 0),this._disconnectHandlers){let r=this._request.raw,n=this._response.raw;r.removeListener("close",this._disconnectHandlers.req.close),r.removeListener("error",this._disconnectHandlers.req.error),n.removeListener("close",this._disconnectHandlers.res.close),n.removeListener("error",this._disconnectHandlers.res.error),this._disconnectHandlers=null}try{ve().remove(this.id)}catch(r){console.error("Registry cleanup error:",r)}let t=[...this._closeCallbacks];for(let r of t)try{let n=r();n&&typeof n.then=="function"&&n.catch(o=>{console.error("Error in async close callback:",o)})}catch(n){console.error("Error in close callback:",n)}this._closeCallbacks=[],this._errorCallbacks=[],this._buffer=[],this._emitter.removeAllListeners()}get state(){return this._state}get bufferSize(){return this._buffer.length}get isWritable(){return this._writable&&this._state==="connected"}send(t,r){if(!this.isWritable)throw new Te("Cannot send event to closed stream",{clientId:this.id,closedAt:new Date().toISOString(),closeReason:"server-close",canReconnect:!1});let n=String(++this._eventCounter);this._lastEventId=n;let o=y(),i=kn(t,r),s=this._options.maxEventSize;if(i>s)throw new re("Event size exceeds maximum allowed",{currentSize:i,maxSize:s,strategy:"close",clientId:this.id,eventsDropped:0,triggeringEvent:t});let a={id:n,event:t,data:r,size:i,timestamp:Date.now(),correlationId:o},c=this._backpressureConfig?this._backpressureConfig.watermarks.high:this._options.maxBufferSize;if(this._buffer.length>=c){if(this._options.bufferStrategy==="close"){let p=this._buffer.length;throw this.close(),new re("Buffer overflow - stream closed",{currentSize:p,maxSize:c,strategy:"close",clientId:this.id})}let l=In(this._buffer,this._options.bufferStrategy,a,c);this._buffer=l.buffer,this._metrics.eventsDropped+=l.dropped,l.dropped>0&&console.warn(`SSE stream ${this.id}: Dropped ${l.dropped} events due to buffer overflow`)}else this._buffer.push(a);this._metrics.bufferHighWatermark=Math.max(this._metrics.bufferHighWatermark,this._buffer.length),this._emitter.emit("event"),this._flushBuffer().catch(l=>{this._handleError(l)})}sendError(t){if(!this.isWritable)return;let r={message:t.message,name:t.name,correlationId:y(),timestamp:new Date().toISOString(),stack:process.env.NODE_ENV==="development"?t.stack:void 0};try{this.send("error",r)}catch(n){console.error("Failed to send error event:",n)}}close(){if(this._state!=="closed"){this._state="closed",this._writable=!1,this._emitter.emit("close");try{let t=Lt("close",{reason:"stream-closed",reconnect:!1}),r=this._response.raw;"write"in r&&typeof r.write=="function"&&r.write(t)}catch{}try{let t=this._response.raw;!t.writableEnded&&typeof t.end=="function"&&t.end()}catch(t){console.error("Error ending response:",t)}this._executeCleanup()}}onClose(t){if(this._state==="closed")try{let r=t();r&&typeof r.then=="function"&&r.catch(n=>{console.error("Error in close callback:",n)})}catch(r){console.error("Error in close callback:",r)}else this._closeCallbacks.push(t)}ping(t){if(!this.isWritable)return;let r=t?`: ${t}
17
+ `)}_registerConnection(){try{let t=Re(),r={clientIp:this._request.header("x-forwarded-for")||this._request.header("x-real-ip")||this._request.raw.socket?.remoteAddress,userAgent:this._request.header("user-agent")};t.add(this.id,this,r)}catch(t){throw this._state="closed",this._writable=!1,t}}_setupHeartbeat(t){this._heartbeatTimer=global.setInterval(()=>{this.isWritable&&Date.now()-this._metrics.lastEventTime>t*.9&&this.ping(`heartbeat ${new Date().toISOString()}`)},t),this._heartbeatTimer.unref&&this._heartbeatTimer.unref()}_setupDisconnectHandling(){let t=this._request.raw,r=this._response.raw,n=()=>{this._options.autoClose&&this._state!=="closed"&&this.close()};this._disconnectHandlers={req:{close:n,error:n},res:{close:n,error:n}},t.on("close",this._disconnectHandlers.req.close),t.on("error",this._disconnectHandlers.req.error),r.on("close",this._disconnectHandlers.res.close),r.on("error",this._disconnectHandlers.res.error)}_writeRaw(t){if(!this._writable||this._state==="closed")return!1;try{let r=this._response.raw,n;if("write"in r&&typeof r.write=="function")n=r.write(t);else throw new Error("Response stream does not support write operation");return n&&(this._metrics.bytesWritten+=Buffer.byteLength(t)),n}catch(r){return this._writable=!1,this._handleError(r),!1}}async _flushBuffer(){for(;this._buffer.length>0&&this._writable;){let t=this._buffer.shift();if(!t)break;let r=Ut(t.event,t.data,t.id);this._writeRaw(r)?(this._metrics.eventsSent++,this._metrics.lastEventTime=Date.now()):(this._buffer.unshift(t),await this._waitForDrain())}}_waitForDrain(){return new Promise(t=>{this._response.raw.once("drain",t)})}_handleError(t){this._errorCallbacks.forEach(r=>{try{r(t)}catch(n){console.error("Error in error callback:",n)}}),this._writable&&this.sendError(t)}_executeCleanup(){if(this._cleanupExecuted)return;if(this._cleanupExecuted=!0,this._heartbeatTimer&&(global.clearInterval(this._heartbeatTimer),this._heartbeatTimer=void 0),this._disconnectHandlers){let r=this._request.raw,n=this._response.raw;r.removeListener("close",this._disconnectHandlers.req.close),r.removeListener("error",this._disconnectHandlers.req.error),n.removeListener("close",this._disconnectHandlers.res.close),n.removeListener("error",this._disconnectHandlers.res.error),this._disconnectHandlers=null}try{Re().remove(this.id)}catch(r){console.error("Registry cleanup error:",r)}let t=[...this._closeCallbacks];for(let r of t)try{let n=r();n&&typeof n.then=="function"&&n.catch(o=>{console.error("Error in async close callback:",o)})}catch(n){console.error("Error in close callback:",n)}this._closeCallbacks=[],this._errorCallbacks=[],this._buffer=[],this._emitter.removeAllListeners()}get state(){return this._state}get bufferSize(){return this._buffer.length}get isWritable(){return this._writable&&this._state==="connected"}send(t,r){if(!this.isWritable)throw new be("Cannot send event to closed stream",{clientId:this.id,closedAt:new Date().toISOString(),closeReason:"server-close",canReconnect:!1});let n=String(++this._eventCounter);this._lastEventId=n;let o=m(),i=An(t,r),s=this._options.maxEventSize;if(i>s)throw new oe("Event size exceeds maximum allowed",{currentSize:i,maxSize:s,strategy:"close",clientId:this.id,eventsDropped:0,triggeringEvent:t});let a={id:n,event:t,data:r,size:i,timestamp:Date.now(),correlationId:o},c=this._backpressureConfig?this._backpressureConfig.watermarks.high:this._options.maxBufferSize;if(this._buffer.length>=c){if(this._options.bufferStrategy==="close"){let p=this._buffer.length;throw this.close(),new oe("Buffer overflow - stream closed",{currentSize:p,maxSize:c,strategy:"close",clientId:this.id})}let l=Fn(this._buffer,this._options.bufferStrategy,a,c);this._buffer=l.buffer,this._metrics.eventsDropped+=l.dropped,l.dropped>0&&console.warn(`SSE stream ${this.id}: Dropped ${l.dropped} events due to buffer overflow`)}else this._buffer.push(a);this._metrics.bufferHighWatermark=Math.max(this._metrics.bufferHighWatermark,this._buffer.length),this._emitter.emit("event"),this._flushBuffer().catch(l=>{this._handleError(l)})}sendError(t){if(!this.isWritable)return;let r={message:t.message,name:t.name,correlationId:m(),timestamp:new Date().toISOString(),stack:process.env.NODE_ENV==="development"?t.stack:void 0};try{this.send("error",r)}catch(n){console.error("Failed to send error event:",n)}}close(){if(this._state!=="closed"){this._state="closed",this._writable=!1,this._emitter.emit("close");try{let t=Ut("close",{reason:"stream-closed",reconnect:!1}),r=this._response.raw;"write"in r&&typeof r.write=="function"&&r.write(t)}catch{}try{let t=this._response.raw;!t.writableEnded&&typeof t.end=="function"&&t.end()}catch(t){console.error("Error ending response:",t)}this._executeCleanup()}}onClose(t){if(this._state==="closed")try{let r=t();r&&typeof r.then=="function"&&r.catch(n=>{console.error("Error in close callback:",n)})}catch(r){console.error("Error in close callback:",r)}else this._closeCallbacks.push(t)}ping(t){if(!this.isWritable)return;let r=t?`: ${t}
18
18
 
19
19
  `:`: ping
20
20
 
21
21
  `;this._writeRaw(r)}setRetry(t){if(this.isWritable){if(t<0||!Number.isFinite(t))throw new Error("Retry interval must be a positive number");this._writeRaw(`retry: ${Math.floor(t)}
22
22
 
23
- `)}}flush(){this.isWritable&&this._flushBuffer().catch(t=>{this._handleError(t)})}getMetrics(){return{...this._metrics}}async*[Symbol.asyncIterator](){for(;this.isWritable;){for(;this._buffer.length>0;){let t=this._buffer.shift();t&&(yield t)}await new Promise(t=>{let r=()=>{(this._buffer.length>0||!this.isWritable)&&(this._emitter.off("event",r),this._emitter.off("close",r),t())};this._emitter.on("event",r),this._emitter.on("close",r)})}}};function Vt(e,t){return new et(e,t)}b();R();var Re=class extends w{constructor(t,r,n){super("SSE_NOT_ACCEPTABLE",t,406,n||y(),r)}};function Dn(e){if(!e.handler||typeof e.handler!="function")throw new Error("SSE route handler must be a function");if(e.middleware&&!Array.isArray(e.middleware))throw new Error("Middleware for SSE route must be an array");if(e.schema){let{params:t,query:r,events:n}=e.schema;if(t&&(!t._def||typeof t.parse!="function"))throw new Error("Params schema for SSE must be a valid Zod schema");if(r&&(!r._def||typeof r.parse!="function"))throw new Error("Query schema for SSE must be a valid Zod schema");if(n){if(typeof n=="object"&&!n._def){for(let[o,i]of Object.entries(n))if(!i||typeof i!="object"||!i._def||typeof i.parse!="function")throw new Error(`Event schema for '${o}' must be a valid Zod schema`)}else if(!(n._def&&typeof n.parse=="function"))throw new Error("Events schema for SSE must be a valid Zod schema or event map")}}}function zn(e,t){let r=Object.create(e),n=e.send.bind(e);return r.send=function(o,i){let s=t[o];if(s)try{let a=s.parse(i);n(o,a)}catch(a){e.sendError(new Error(`Event '${o}' validation failed: ${a instanceof Error?a.message:String(a)}`))}else n(o,i)},r}var Wt=()=>e=>{Dn(e);let t=D();return{GET:{handler:async(n,o)=>{let i=n.request.header("accept");if(i&&!i.includes("text/event-stream")&&!i.includes("*/*"))throw new Re("This endpoint requires Server-Sent Events support",{acceptHeader:i,requiredHeader:"text/event-stream",endpoint:n.request.path});if(e.schema)try{e.schema.params&&(o=e.schema.params.parse(o)),e.schema.query&&(n.request.query=e.schema.query.parse(n.request.query))}catch(c){throw console.error("[SSE] Validation error:",c),c}let s=Vt(n,e.options),a=e.schema?.events&&typeof e.schema.events=="object"&&!e.schema.events._def?zn(s,e.schema.events):s;n.request.raw.on("close",()=>a.close());try{await e.handler(a,n,o)}catch(c){throw console.error("[SSE] Handler error - THIS IS THE REAL ERROR:",c),console.error("[SSE] Stack trace:",c instanceof Error?c.stack:"No stack"),a.isWritable&&a.sendError(c instanceof Error?c:new Error(String(c))),a.close(),c}},schema:e.schema?.params||e.schema?.query?{params:e.schema?.params,query:e.schema?.query}:void 0,middleware:e.middleware,options:e.options},path:t}};function Nn(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(o,i)=>i;let r=new Error().stack[3];if(!r||typeof r.getFileName!="function")throw new Error("Unable to determine caller file frame");let n=r.getFileName();if(!n)throw new Error("Unable to determine caller file name");return n.startsWith("file://")?(0,Qt.fileURLToPath)(n):n}finally{Error.prepareStackTrace=e}}function D(){let e=Nn(),t=Ht(),r=Ee(e,t);return console.log(`\u{1F50E} Parsed route path: ${r.routePath} from file: ${e}`),r.routePath}var be=()=>e=>{W("GET",e);let t=D();return{GET:e,path:t}},Ce=()=>e=>{W("POST",e);let t=D();return{POST:e,path:t}},Pe=()=>e=>{W("PUT",e);let t=D();return{PUT:e,path:t}},_e=()=>e=>{W("DELETE",e);let t=D();return{DELETE:e,path:t}},Me=()=>e=>{W("PATCH",e);let t=D();return{PATCH:e,path:t}},Oe=()=>e=>{W("HEAD",e);let t=D();return{HEAD:e,path:t}},Ae=()=>e=>{W("OPTIONS",e);let t=D();return{OPTIONS:e,path:t}};function W(e,t){if(!t.handler||typeof t.handler!="function")throw new Error(`Handler for method ${e} must be a function`);if(t.middleware&&!Array.isArray(t.middleware))throw new Error(`Middleware for method ${e} must be an array`);switch(t.schema&&Bn(e,t.schema),e){case"GET":case"HEAD":case"DELETE":t.schema?.body&&console.warn(`Warning: ${e} requests typically don't have request bodies`);break}}function Bn(e,t){let{params:r,query:n,body:o,response:i}=t;if(r&&(!r._def||typeof r.parse!="function"))throw new Error(`Params schema for ${e} must be a valid Zod schema`);if(n&&(!n._def||typeof n.parse!="function"))throw new Error(`Query schema for ${e} must be a valid Zod schema`);if(o&&(!o._def||typeof o.parse!="function"))throw new Error(`Body schema for ${e} must be a valid Zod schema`);if(i&&(!i._def||typeof i.parse!="function"))throw new Error(`Response schema for ${e} must be a valid Zod schema`)}function tt(){return{get:be(),post:Ce(),put:Pe(),delete:_e(),patch:Me(),head:Oe(),options:Ae(),sse:Wt()}}function Q(e,t,r){let n=t.exec(e);if(!n)return{};let o={};for(let i=0;i<r.length;i++)o[r[i]]=n[i+1]||"";return o}function J(e){let t=[];if(e==="/")return{pattern:/^\/$/,paramNames:[]};let r=e.replace(/([.+*?^$(){}|\\])/g,"\\$1");return r=r.replace(/\/:([^/]+)/g,(o,i)=>(t.push(i),"/([^/]+)")).replace(/\/\[([^\]]+)\]/g,(o,i)=>(t.push(i),"/([^/]+)")),r=`${r}(?:/)?`,{pattern:new RegExp(`^${r}$`),paramNames:t}}function ne(e){let t=[];for(let[r,n]of Object.entries(e))if(n!=null){let o=encodeURIComponent(r),i=encodeURIComponent(String(n));t.push(`${o}=${i}`)}return t.length>0?`?${t.join("&")}`:""}function Fe(e,t={},r={}){let n={},o={...r},i=[];e.replace(/\/:([^/]+)/g,(c,l)=>(i.push(l),"/"));for(let[c,l]of Object.entries(t))i.includes(c)?n[c]=l:o[c]=l;let s=e;for(let[c,l]of Object.entries(n))s=s.replace(`:${c}`,encodeURIComponent(String(l)));let a=ne(o);return s+a}function Y(){let e=[];return{add(t,r,n){let{pattern:o,paramNames:i}=J(t),s={path:t,method:r,pattern:o,paramNames:i,routeOptions:n},a=e.findIndex(c=>i.length<c.paramNames.length);a===-1?e.push(s):e.splice(a,0,s)},remove(t){for(let r=e.length-1;r>=0;r--)e[r].path===t&&e.splice(r,1)},clear(){e.length=0},match(t,r){let n=t.split("?")[0];if(!n)return null;for(let i of e){if(i.method!==r)continue;if(i.pattern.exec(n)){let a=Q(t,i.pattern,i.paramNames);return{route:i.routeOptions,params:a}}}return e.find(i=>i.method!==r&&i.pattern.test(t))?{route:null,params:{},methodNotAllowed:!0,allowedMethods:e.filter(i=>i.pattern.test(t)).map(i=>i.method)}:null},getRoutes(){return e.map(t=>({path:t.path,method:t.method}))},findRoutes(t){return e.filter(r=>r.pattern.test(t)).map(r=>({path:r.path,method:r.method,params:Q(t,r.pattern,r.paramNames)}))}}}var Lr=require("async_hooks"),jr=_(require("events"),1);var st=_(require("fs"),1),yr=_(require("http"),1),Sr=_(require("http2"),1);var z=_(require("fs"),1),ke=_(require("path"),1),Gt=_(require("selfsigned"),1);async function Zt(){let e=ke.join(process.cwd(),".blaizejs","certs"),t=ke.join(e,"dev.key"),r=ke.join(e,"dev.cert");if(z.existsSync(t)&&z.existsSync(r))return{keyFile:t,certFile:r};z.existsSync(e)||z.mkdirSync(e,{recursive:!0});let i=Gt.generate([{name:"commonName",value:"localhost"}],{days:365,algorithm:"sha256",keySize:2048,extensions:[{name:"basicConstraints",cA:!0},{name:"keyUsage",keyCertSign:!0,digitalSignature:!0,nonRepudiation:!0,keyEncipherment:!0,dataEncipherment:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:"localhost"},{type:7,ip:"127.0.0.1"}]}]});return z.writeFileSync(t,Buffer.from(i.private,"utf-8")),z.writeFileSync(r,Buffer.from(i.cert,"utf-8")),console.log(`
23
+ `)}}flush(){this.isWritable&&this._flushBuffer().catch(t=>{this._handleError(t)})}getMetrics(){return{...this._metrics}}async*[Symbol.asyncIterator](){for(;this.isWritable;){for(;this._buffer.length>0;){let t=this._buffer.shift();t&&(yield t)}await new Promise(t=>{let r=()=>{(this._buffer.length>0||!this.isWritable)&&(this._emitter.off("event",r),this._emitter.off("close",r),t())};this._emitter.on("event",r),this._emitter.on("close",r)})}}};function jt(e,t){return new Xe(e,t)}C();b();var Ce=class extends w{constructor(t,r,n){super("SSE_NOT_ACCEPTABLE",t,406,n||m(),r)}};function kn(e){if(!e.handler||typeof e.handler!="function")throw new Error("SSE route handler must be a function");if(e.middleware&&!Array.isArray(e.middleware))throw new Error("Middleware for SSE route must be an array");if(e.schema){let{params:t,query:r,events:n}=e.schema;if(t&&(!t._def||typeof t.parse!="function"))throw new Error("Params schema for SSE must be a valid Zod schema");if(r&&(!r._def||typeof r.parse!="function"))throw new Error("Query schema for SSE must be a valid Zod schema");if(n){if(typeof n=="object"&&!n._def){for(let[o,i]of Object.entries(n))if(!i||typeof i!="object"||!i._def||typeof i.parse!="function")throw new Error(`Event schema for '${o}' must be a valid Zod schema`)}else if(!(n._def&&typeof n.parse=="function"))throw new Error("Events schema for SSE must be a valid Zod schema or event map")}}}function In(e,t){let r=Object.create(e),n=e.send.bind(e);return r.send=function(o,i){let s=t[o];if(s)try{let a=s.parse(i);n(o,a)}catch(a){e.sendError(new Error(`Event '${o}' validation failed: ${a instanceof Error?a.message:String(a)}`))}else n(o,i)},r}var Vt=()=>e=>{kn(e);let t=N();return{GET:{handler:async(n,o)=>{let i=n.request.header("accept");if(i&&!i.includes("text/event-stream")&&!i.includes("*/*"))throw new Ce("This endpoint requires Server-Sent Events support",{acceptHeader:i,requiredHeader:"text/event-stream",endpoint:n.request.path});if(e.schema)try{e.schema.params&&(o=e.schema.params.parse(o)),e.schema.query&&(n.request.query=e.schema.query.parse(n.request.query))}catch(c){throw console.error("[SSE] Validation error:",c),c}let s=jt(n,e.options),a=e.schema?.events&&typeof e.schema.events=="object"&&!e.schema.events._def?In(s,e.schema.events):s;n.request.raw.on("close",()=>a.close());try{await e.handler(a,n,o)}catch(c){throw console.error("[SSE] Handler error - THIS IS THE REAL ERROR:",c),console.error("[SSE] Stack trace:",c instanceof Error?c.stack:"No stack"),a.isWritable&&a.sendError(c instanceof Error?c:new Error(String(c))),a.close(),c}},schema:e.schema?.params||e.schema?.query?{params:e.schema?.params,query:e.schema?.query}:void 0,middleware:e.middleware,options:e.options},path:t}};function zn(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(o,i)=>i;let r=new Error().stack[3];if(!r||typeof r.getFileName!="function")throw new Error("Unable to determine caller file frame");let n=r.getFileName();if(!n)throw new Error("Unable to determine caller file name");return n.startsWith("file://")?(0,Wt.fileURLToPath)(n):n}finally{Error.prepareStackTrace=e}}function N(){let e=zn(),t=Ht(),r=Te(e,t);return console.log(`\u{1F50E} Parsed route path: ${r.routePath} from file: ${e}`),r.routePath}var Pe=()=>e=>{G("GET",e);let t=N();return{GET:e,path:t}},_e=()=>e=>{G("POST",e);let t=N();return{POST:e,path:t}},Me=()=>e=>{G("PUT",e);let t=N();return{PUT:e,path:t}},Oe=()=>e=>{G("DELETE",e);let t=N();return{DELETE:e,path:t}},Ae=()=>e=>{G("PATCH",e);let t=N();return{PATCH:e,path:t}},Fe=()=>e=>{G("HEAD",e);let t=N();return{HEAD:e,path:t}},ke=()=>e=>{G("OPTIONS",e);let t=N();return{OPTIONS:e,path:t}};function G(e,t){if(!t.handler||typeof t.handler!="function")throw new Error(`Handler for method ${e} must be a function`);if(t.middleware&&!Array.isArray(t.middleware))throw new Error(`Middleware for method ${e} must be an array`);switch(t.schema&&Dn(e,t.schema),e){case"GET":case"HEAD":case"DELETE":t.schema?.body&&console.warn(`Warning: ${e} requests typically don't have request bodies`);break}}function Dn(e,t){let{params:r,query:n,body:o,response:i}=t;if(r&&(!r._def||typeof r.parse!="function"))throw new Error(`Params schema for ${e} must be a valid Zod schema`);if(n&&(!n._def||typeof n.parse!="function"))throw new Error(`Query schema for ${e} must be a valid Zod schema`);if(o&&(!o._def||typeof o.parse!="function"))throw new Error(`Body schema for ${e} must be a valid Zod schema`);if(i&&(!i._def||typeof i.parse!="function"))throw new Error(`Response schema for ${e} must be a valid Zod schema`)}function et(){return{get:Pe(),post:_e(),put:Me(),delete:Oe(),patch:Ae(),head:Fe(),options:ke(),sse:Vt()}}function Z(e,t,r){let n=t.exec(e);if(!n)return{};let o={};for(let i=0;i<r.length;i++)o[r[i]]=n[i+1]||"";return o}function K(e){let t=[];if(e==="/")return{pattern:/^\/$/,paramNames:[]};let r=e.replace(/([.+*?^$(){}|\\])/g,"\\$1");return r=r.replace(/\/:([^/]+)/g,(o,i)=>(t.push(i),"/([^/]+)")).replace(/\/\[([^\]]+)\]/g,(o,i)=>(t.push(i),"/([^/]+)")),r=`${r}(?:/)?`,{pattern:new RegExp(`^${r}$`),paramNames:t}}function ie(e){let t=[];for(let[r,n]of Object.entries(e))if(n!=null){let o=encodeURIComponent(r),i=encodeURIComponent(String(n));t.push(`${o}=${i}`)}return t.length>0?`?${t.join("&")}`:""}function Ie(e,t={},r={}){let n={},o={...r},i=[];e.replace(/\/:([^/]+)/g,(c,l)=>(i.push(l),"/"));for(let[c,l]of Object.entries(t))i.includes(c)?n[c]=l:o[c]=l;let s=e;for(let[c,l]of Object.entries(n))s=s.replace(`:${c}`,encodeURIComponent(String(l)));let a=ie(o);return s+a}function X(){let e=[];return{add(t,r,n){let{pattern:o,paramNames:i}=K(t),s={path:t,method:r,pattern:o,paramNames:i,routeOptions:n},a=e.findIndex(c=>i.length<c.paramNames.length);a===-1?e.push(s):e.splice(a,0,s)},remove(t){for(let r=e.length-1;r>=0;r--)e[r].path===t&&e.splice(r,1)},clear(){e.length=0},match(t,r){let n=t.split("?")[0];if(!n)return null;for(let i of e){if(i.method!==r)continue;if(i.pattern.exec(n)){let a=Z(t,i.pattern,i.paramNames);return{route:i.routeOptions,params:a}}}return e.find(i=>i.method!==r&&i.pattern.test(t))?{route:null,params:{},methodNotAllowed:!0,allowedMethods:e.filter(i=>i.pattern.test(t)).map(i=>i.method)}:null},getRoutes(){return e.map(t=>({path:t.path,method:t.method}))},findRoutes(t){return e.filter(r=>r.pattern.test(t)).map(r=>({path:r.path,method:r.method,params:Z(t,r.pattern,r.paramNames)}))}}}var Ur=require("async_hooks"),qr=M(require("events"),1);var it=M(require("fs"),1),hr=M(require("http"),1),yr=M(require("http2"),1);var B=M(require("fs"),1),ze=M(require("path"),1),Qt=M(require("selfsigned"),1);async function Gt(){let e=ze.join(process.cwd(),".blaizejs","certs"),t=ze.join(e,"dev.key"),r=ze.join(e,"dev.cert");if(B.existsSync(t)&&B.existsSync(r))return{keyFile:t,certFile:r};B.existsSync(e)||B.mkdirSync(e,{recursive:!0});let i=Qt.generate([{name:"commonName",value:"localhost"}],{days:365,algorithm:"sha256",keySize:2048,extensions:[{name:"basicConstraints",cA:!0},{name:"keyUsage",keyCertSign:!0,digitalSignature:!0,nonRepudiation:!0,keyEncipherment:!0,dataEncipherment:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:"localhost"},{type:7,ip:"127.0.0.1"}]}]});return B.writeFileSync(t,Buffer.from(i.private,"utf-8")),B.writeFileSync(r,Buffer.from(i.cert,"utf-8")),console.log(`
24
24
  \u{1F512} Generated self-signed certificates for development at ${e}
25
- `),{keyFile:t,certFile:r}}var A=class extends Error{constructor(t="\u274C Response has already been sent"){super(t),this.name="ResponseSentError"}},oe=class extends A{constructor(t="Cannot set header after response has been sent"){super(t)}},Ie=class extends A{constructor(t="Cannot set content type after response has been sent"){super(t)}},De=class extends A{constructor(t="Invalide URL"){super(t)}};var Jt=require("async_hooks"),$n=new Jt.AsyncLocalStorage;function Yt(e,t){return $n.run(e,t)}R();var nr=_(require("crypto"),1),or=require("fs"),ir=require("os"),sr=require("path"),ot=require("stream");var Hn=/boundary=([^;]+)/i,Un=/Content-Disposition:\s*form-data;\s*name="([^"]+)"(?:;[\s\r\n]*filename="([^"]*)")?/i,qn=/Content-Type:\s*([^\r\n]+)/i,Ln=/multipart\/form-data/i;function Kt(e){let t=e.match(Hn);if(!t||!t[1])return null;let r=t[1].trim();return r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1)),r||null}function Xt(e){let t=e.match(Un);return!t||!t[1]?null:{name:t[1],filename:t[2]!==void 0?t[2]:void 0}}function er(e){let t=e.match(qn);return t&&t[1]?.trim()?t[1].trim():"application/octet-stream"}function tr(e){return Ln.test(e)}var jn={maxFileSize:10*1024*1024,maxFiles:10,maxFieldSize:1*1024*1024,allowedMimeTypes:[],allowedExtensions:[],strategy:"stream",tempDir:(0,ir.tmpdir)(),computeHash:!1};function Vn(e,t={}){return{boundary:Buffer.from(`--${e}`),options:{...jn,...t},fields:new Map,files:new Map,buffer:Buffer.alloc(0),stage:"boundary",currentHeaders:"",currentField:null,currentFilename:void 0,currentMimetype:"application/octet-stream",currentContentLength:0,fileCount:0,fieldCount:0,currentBufferChunks:[],currentStream:null,currentTempPath:null,currentWriteStream:null,streamController:null,cleanupTasks:[],hasFoundValidBoundary:!1,hasProcessedAnyPart:!1,isFinished:!1}}async function Wn(e,t){let r=Buffer.concat([e.buffer,t]),n={...e,buffer:r};for(;n.buffer.length>0&&!n.isFinished;){let o=await Qn(n);if(o===n)break;n=o}return n}async function Qn(e){switch(e.stage){case"boundary":return Gn(e);case"headers":return Zn(e);case"content":return Jn(e);default:{let{InternalServerError:t}=await Promise.resolve().then(()=>(ie(),rr));throw new t("Invalid parser stage",{operation:e.stage})}}}function Gn(e){let t=e.buffer.indexOf(e.boundary);if(t===-1)return e;let r=!0,n=e.buffer.subarray(t+e.boundary.length);return n.length>=2&&n.subarray(0,2).equals(Buffer.from("--"))?{...e,buffer:n,hasFoundValidBoundary:r,isFinished:!0,stage:"boundary"}:(n.length>=2&&n.subarray(0,2).equals(Buffer.from(`\r
26
- `))&&(n=n.subarray(2)),{...e,buffer:n,hasFoundValidBoundary:r,stage:"headers",currentHeaders:""})}async function Zn(e){let t=e.buffer.indexOf(`\r
25
+ `),{keyFile:t,certFile:r}}var F=class extends Error{constructor(t="\u274C Response has already been sent"){super(t),this.name="ResponseSentError"}},se=class extends F{constructor(t="Cannot set header after response has been sent"){super(t)}},De=class extends F{constructor(t="Cannot set content type after response has been sent"){super(t)}},Ne=class extends F{constructor(t="Invalide URL"){super(t)}};var Zt=require("async_hooks"),Nn=new Zt.AsyncLocalStorage;function Jt(e,t){return Nn.run(e,t)}ae();ce();k();b();var rr=M(require("crypto"),1),nr=require("fs"),or=require("os"),ir=require("path"),nt=require("stream");var Bn=/boundary=([^;]+)/i,Hn=/Content-Disposition:\s*form-data;\s*name="([^"]+)"(?:;[\s\r\n]*filename="([^"]*)")?/i,$n=/Content-Type:\s*([^\r\n]+)/i,Ln=/multipart\/form-data/i;function Yt(e){let t=e.match(Bn);if(!t||!t[1])return null;let r=t[1].trim();return r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1)),r||null}function Kt(e){let t=e.match(Hn);return!t||!t[1]?null:{name:t[1],filename:t[2]!==void 0?t[2]:void 0}}function Xt(e){let t=e.match($n);return t&&t[1]?.trim()?t[1].trim():"application/octet-stream"}function er(e){return Ln.test(e)}var Un={maxFileSize:10*1024*1024,maxFiles:10,maxFieldSize:1*1024*1024,allowedMimeTypes:[],allowedExtensions:[],strategy:"stream",tempDir:(0,or.tmpdir)(),computeHash:!1};function qn(e,t={}){return{boundary:Buffer.from(`--${e}`),options:{...Un,...t},fields:new Map,files:new Map,buffer:Buffer.alloc(0),stage:"boundary",currentHeaders:"",currentField:null,currentFilename:void 0,currentMimetype:"application/octet-stream",currentContentLength:0,fileCount:0,fieldCount:0,currentBufferChunks:[],currentStream:null,currentTempPath:null,currentWriteStream:null,streamController:null,cleanupTasks:[],hasFoundValidBoundary:!1,hasProcessedAnyPart:!1,isFinished:!1}}async function jn(e,t){let r=Buffer.concat([e.buffer,t]),n={...e,buffer:r};for(;n.buffer.length>0&&!n.isFinished;){let o=await Vn(n);if(o===n)break;n=o}return n}async function Vn(e){switch(e.stage){case"boundary":return Wn(e);case"headers":return Qn(e);case"content":return Gn(e);default:{let{InternalServerError:t}=await Promise.resolve().then(()=>(le(),tr));throw new t("Invalid parser stage",{operation:e.stage})}}}function Wn(e){let t=e.buffer.indexOf(e.boundary);if(t===-1)return e;let r=!0,n=e.buffer.subarray(t+e.boundary.length);return n.length>=2&&n.subarray(0,2).equals(Buffer.from("--"))?{...e,buffer:n,hasFoundValidBoundary:r,isFinished:!0,stage:"boundary"}:(n.length>=2&&n.subarray(0,2).equals(Buffer.from(`\r
26
+ `))&&(n=n.subarray(2)),{...e,buffer:n,hasFoundValidBoundary:r,stage:"headers",currentHeaders:""})}async function Qn(e){let t=e.buffer.indexOf(`\r
27
27
  \r
28
- `);if(t===-1)return e;let r=e.buffer.subarray(0,t).toString("utf8"),n=e.buffer.subarray(t+4),o=Xt(r);if(!o){let{ValidationError:a}=await Promise.resolve().then(()=>(I(),V));throw new a("Missing or invalid Content-Disposition header")}let i=er(r),s=o.filename!==void 0;if(s&&e.fileCount>=e.options.maxFiles){let{PayloadTooLargeError:a}=await Promise.resolve().then(()=>(ze(),rt));throw new a("Too many files in upload",{fileCount:e.fileCount+1,maxFiles:e.options.maxFiles,filename:o.filename})}if(s&&e.options.allowedMimeTypes.length>0&&!e.options.allowedMimeTypes.includes(i)){let{UnsupportedMediaTypeError:a}=await Promise.resolve().then(()=>(Ne(),nt));throw new a("File type not allowed",{receivedMimeType:i,allowedMimeTypes:e.options.allowedMimeTypes,filename:o.filename})}return{...e,buffer:n,stage:"content",currentHeaders:r,currentField:o.name,currentFilename:o.filename,currentMimetype:i,currentContentLength:0,fileCount:s?e.fileCount+1:e.fileCount,fieldCount:s?e.fieldCount:e.fieldCount+1,currentBufferChunks:[]}}async function Jn(e){let t=e.buffer.indexOf(e.boundary),r,n=!1,o=e.buffer;if(t===-1){let s=Math.max(0,e.buffer.length-e.boundary.length);if(s===0)return e;r=e.buffer.subarray(0,s),o=e.buffer.subarray(s)}else{let s=Math.max(0,t-2);r=e.buffer.subarray(0,s),o=e.buffer.subarray(t),n=!0}let i={...e,buffer:o};return r.length>0&&(i=await Yn(i,r)),n&&(i=await eo(i),i={...i,stage:"boundary",hasProcessedAnyPart:!0}),i}async function Yn(e,t){let r=e.currentContentLength+t.length,n=e.currentFilename!==void 0?e.options.maxFileSize:e.options.maxFieldSize;if(r>n){let o=e.currentFilename!==void 0,{PayloadTooLargeError:i}=await Promise.resolve().then(()=>(ze(),rt)),s=e.currentField?{contentType:o?"file":"field",currentSize:r,maxSize:n,field:e.currentField,filename:e.currentFilename}:{contentType:o?"file":"field",currentSize:r,maxSize:n,filename:e.currentFilename};throw new i(`${o?"File":"Field"} size exceeds limit`,s)}return e.currentFilename!==void 0?Kn(e,t,r):{...e,currentContentLength:r,currentBufferChunks:[...e.currentBufferChunks,t]}}async function Kn(e,t,r){switch(e.options.strategy){case"memory":return{...e,currentContentLength:r,currentBufferChunks:[...e.currentBufferChunks,t]};case"stream":return e.streamController&&e.streamController.enqueue(t),{...e,currentContentLength:r};case"temp":return e.currentWriteStream&&await io(e.currentWriteStream,t),{...e,currentContentLength:r};default:{let{ValidationError:n}=await Promise.resolve().then(()=>(I(),V));throw new n("Invalid parsing strategy")}}}async function Xn(e){if(e.currentFilename===void 0)return e;switch(e.options.strategy){case"memory":return{...e,currentBufferChunks:[]};case"stream":{let t=null,r=new ReadableStream({start:n=>{t=n}});return{...e,currentStream:r,streamController:t}}case"temp":{let t=(0,sr.join)(e.options.tempDir,`upload-${nr.randomUUID()}`),r=(0,or.createWriteStream)(t),n=async()=>{try{let{unlink:o}=await import("fs/promises");await o(t)}catch(o){console.warn(`Failed to cleanup temp file: ${t}`,o)}};return{...e,currentTempPath:t,currentWriteStream:r,cleanupTasks:[...e.cleanupTasks,n]}}default:{let{ValidationError:t}=await Promise.resolve().then(()=>(I(),V));throw new t("Invalid file processing strategy")}}}async function eo(e){return e.currentField?e.currentFilename!==void 0?to(e):ro(e):ce(e)}async function to(e){if(!e.currentField||e.currentFilename===void 0)return ce(e);let t,r,n;switch(e.options.strategy){case"memory":r=Buffer.concat(e.currentBufferChunks),t=ot.Readable.from(r);break;case"stream":e.streamController&&e.streamController.close(),t=e.currentStream;break;case"temp":e.currentWriteStream&&await cr(e.currentWriteStream),n=e.currentTempPath,t=ot.Readable.from(Buffer.alloc(0));break;default:{let{ValidationError:s}=await Promise.resolve().then(()=>(I(),V));throw new s("Invalid file finalization strategy")}}let o={filename:e.currentFilename,fieldname:e.currentField,mimetype:e.currentMimetype,size:e.currentContentLength,stream:t,buffer:r,tempPath:n},i=ar(e.files,e.currentField,o);return{...ce(e),files:i}}function ro(e){if(!e.currentField)return ce(e);let t=Buffer.concat(e.currentBufferChunks).toString("utf8"),r=ar(e.fields,e.currentField,t);return{...ce(e),fields:r}}function ce(e){return{...e,currentField:null,currentFilename:void 0,currentContentLength:0,currentBufferChunks:[],currentStream:null,streamController:null,currentTempPath:null,currentWriteStream:null}}function ar(e,t,r){let n=new Map(e),o=n.get(t)||[];return n.set(t,[...o,r]),n}async function no(e){if(!e.hasFoundValidBoundary){let{ValidationError:n}=await Promise.resolve().then(()=>(I(),V));throw new n("No valid multipart boundary found")}if(e.hasFoundValidBoundary&&!e.hasProcessedAnyPart){let{ValidationError:n}=await Promise.resolve().then(()=>(I(),V));throw new n("Empty multipart request")}let t={};for(let[n,o]of e.fields.entries())t[n]=o.length===1?o[0]:o;let r={};for(let[n,o]of e.files.entries())r[n]=o.length===1?o[0]:o;return{fields:t,files:r}}async function oo(e){await Promise.allSettled(e.cleanupTasks.map(t=>t())),e.streamController&&e.streamController.close(),e.currentWriteStream&&await cr(e.currentWriteStream)}async function io(e,t){return new Promise((r,n)=>{e.write(t,o=>{o?n(o):r()})})}async function cr(e){return new Promise(t=>{e.end(()=>t())})}async function lr(e,t={}){let r=e.headers["content-type"]||"",n=Kt(r);if(!n){let{UnsupportedMediaTypeError:i}=await Promise.resolve().then(()=>(Ne(),nt));throw new i("Missing boundary in multipart content-type",{receivedContentType:r,expectedFormat:"multipart/form-data; boundary=..."})}let o=Vn(n,t);o.currentFilename!==void 0&&(o=await Xn(o));try{for await(let i of e)o=await Wn(o,i);return no(o)}finally{await oo(o)}}var le="Content-Type",B={json:512*1024,form:1024*1024,text:5*1024*1024,multipart:{maxFileSize:50*1024*1024,maxTotalSize:100*1024*1024,maxFiles:10,maxFieldSize:1024*1024},raw:10*1024*1024};function so(e){let t=e.url||"/",r=e.headers.host||"localhost",o=`${e.socket&&e.socket.encrypted?"https":"http"}://${r}${t.startsWith("/")?"":"/"}${t}`;try{let i=new URL(o),s=i.pathname,a={};return i.searchParams.forEach((c,l)=>{a[l]!==void 0?Array.isArray(a[l])?a[l].push(c):a[l]=[a[l],c]:a[l]=c}),{path:s,url:i,query:a}}catch(i){throw console.warn(`Invalid URL: ${o}`,i),new De(`Invalid URL: ${o}`)}}function ao(e){return"stream"in e||"httpVersionMajor"in e&&e.httpVersionMajor===2}function co(e){let t=e.socket&&e.socket.encrypted,r=e.headers["x-forwarded-proto"];return r?Array.isArray(r)?r[0]?.split(",")[0]?.trim()||"http":r.split(",")[0]?.trim()||"http":t?"https":"http"}async function ur(e,t,r={}){let{path:n,url:o,query:i}=so(e),s=e.method||"GET",a=ao(e),c=co(e),l={},p={...r.initialState||{}},g={...r.initialServices||{}},x={sent:!1},v={request:lo(e,{path:n,url:o,query:i,params:l,method:s,isHttp2:a,protocol:c}),response:{},state:p,services:g};return v.response=po(t,x,v),r.parseBody&&await vo(e,v,r),v}function lo(e,t){return{raw:e,...t,header:dr(e),headers:uo(e),body:void 0}}function dr(e){return t=>{let r=e.headers[t.toLowerCase()];return Array.isArray(r)?r.join(", "):r||void 0}}function uo(e){let t=dr(e);return r=>r&&Array.isArray(r)&&r.length>0?r.reduce((n,o)=>(n[o]=t(o),n),{}):Object.entries(e.headers).reduce((n,[o,i])=>(n[o]=Array.isArray(i)?i.join(", "):i||void 0,n),{})}function ue(e,t){if(t.correlationId){let r=j(),n=String(t.correlationId);e.setHeader(r,n)}}function po(e,t,r){return{raw:e,get statusCode(){return e.statusCode||200},get sent(){return t.sent},status:fo(e,t,r),header:mo(e,t,r),headers:go(e,t,r),type:ho(e,t,r),json:yo(e,t,r.state),text:So(e,t,r.state),html:wo(e,t,r.state),redirect:xo(e,t,r.state),stream:Eo(e,t,r.state)}}function fo(e,t,r){return function(o){if(t.sent)throw new A;return e.statusCode=o,r.response}}function mo(e,t,r){return function(o,i){if(t.sent)throw new oe;return e.setHeader(o,i),r.response}}function go(e,t,r){return function(o){if(t.sent)throw new oe;for(let[i,s]of Object.entries(o))e.setHeader(i,s);return r.response}}function ho(e,t,r){return function(o){if(t.sent)throw new Ie;return e.setHeader(le,o),r.response}}function yo(e,t,r){return function(o,i){if(t.sent)throw new A;i!==void 0&&(e.statusCode=i),ue(e,r),e.setHeader(le,"application/json"),e.end(JSON.stringify(o)),t.sent=!0}}function So(e,t,r){return function(o,i){if(t.sent)throw new A;i!==void 0&&(e.statusCode=i),ue(e,r),e.setHeader(le,"text/plain"),e.end(o),t.sent=!0}}function wo(e,t,r){return function(o,i){if(t.sent)throw new A;i!==void 0&&(e.statusCode=i),ue(e,r),e.setHeader(le,"text/html"),e.end(o),t.sent=!0}}function xo(e,t,r){return function(o,i=302){if(t.sent)throw new A;ue(e,r),e.statusCode=i,e.setHeader("Location",o),e.end(),t.sent=!0}}function Eo(e,t,r){return function(o,i={}){if(t.sent)throw new A;if(i.status!==void 0&&(e.statusCode=i.status),ue(e,r),i.contentType&&e.setHeader(le,i.contentType),i.headers)for(let[s,a]of Object.entries(i.headers))e.setHeader(s,a);o.pipe(e),o.on("end",()=>{t.sent=!0}),o.on("error",s=>{console.error("Stream error:",s),t.sent||(e.statusCode=500,e.end("Stream error"),t.sent=!0)})}}async function vo(e,t,r={}){if(To(e.method))return;let n=e.headers["content-type"]||"",o=parseInt(e.headers["content-length"]||"0",10);if(o===0)return;let i={json:r.bodyLimits?.json??B.json,form:r.bodyLimits?.form??B.form,text:r.bodyLimits?.text??B.text,raw:r.bodyLimits?.raw??B.raw,multipart:{maxFileSize:r.bodyLimits?.multipart?.maxFileSize??B.multipart.maxFileSize,maxFiles:r.bodyLimits?.multipart?.maxFiles??B.multipart.maxFiles,maxFieldSize:r.bodyLimits?.multipart?.maxFieldSize??B.multipart.maxFieldSize,maxTotalSize:r.bodyLimits?.multipart?.maxTotalSize??B.multipart.maxTotalSize}};try{if(n.includes("application/json")){if(o>i.json)throw new Error(`JSON body too large: ${o} > ${i.json} bytes`);await Ro(e,t)}else if(n.includes("application/x-www-form-urlencoded")){if(o>i.form)throw new Error(`Form body too large: ${o} > ${i.form} bytes`);await bo(e,t)}else if(n.includes("text/")){if(o>i.text)throw new Error(`Text body too large: ${o} > ${i.text} bytes`);await Po(e,t)}else if(tr(n))await _o(e,t,i.multipart);else{if(o>i.raw)throw new Error(`Request body too large: ${o} > ${i.raw} bytes`);return}}catch(s){let a=n.includes("multipart")?"multipart_parse_error":"body_read_error";Be(t,a,"Error reading request body",s)}}function To(e){return["GET","HEAD","OPTIONS"].includes(e||"GET")}async function Ro(e,t){let r=await it(e);if(!r){console.warn("Empty body, skipping JSON parsing");return}if(r.trim()==="null"){console.warn('Body is the string "null"'),t.request.body=null;return}try{let n=JSON.parse(r);t.request.body=n}catch(n){t.request.body=null,Be(t,"json_parse_error","Invalid JSON in request body",n)}}async function bo(e,t){let r=await it(e);if(r)try{t.request.body=Co(r)}catch(n){t.request.body=null,Be(t,"form_parse_error","Invalid form data in request body",n)}}function Co(e){let t=new URLSearchParams(e),r={};return t.forEach((n,o)=>{r[o]!==void 0?Array.isArray(r[o])?r[o].push(n):r[o]=[r[o],n]:r[o]=n}),r}async function Po(e,t){let r=await it(e);r&&(t.request.body=r)}async function _o(e,t,r){try{let n=r||B.multipart,o=await lr(e,{strategy:"stream",maxFileSize:n.maxFileSize,maxFiles:n.maxFiles,maxFieldSize:n.maxFieldSize});t.request.multipart=o,t.request.files=o.files,t.request.body=o.fields}catch(n){t.request.body=null,Be(t,"multipart_parse_error","Failed to parse multipart data",n)}}function Be(e,t,r,n){let o={type:t,message:r,error:n};e.state._bodyError=o}async function it(e){return new Promise((t,r)=>{let n=[];e.on("data",o=>{n.push(Buffer.isBuffer(o)?o:Buffer.from(o))}),e.on("end",()=>{t(Buffer.concat(n).toString("utf8"))}),e.on("error",o=>{r(o)})})}b();R();var H=class extends w{constructor(t,r=void 0,n=void 0){super("NOT_FOUND",t,404,n??y(),r)}};b();ie();R();function Mo(e){return e instanceof w}function pr(e){if(Mo(e))return{type:e.type,title:e.title,status:e.status,correlationId:e.correlationId,timestamp:e.timestamp.toISOString(),details:e.details};let t=y(),r;e instanceof Error?r=e.message:e==null?r="Unknown error occurred":r=String(e);let n=new N("Internal Server Error",{originalMessage:r},t);return{type:n.type,title:n.title,status:n.status,correlationId:n.correlationId,timestamp:n.timestamp.toISOString(),details:n.details}}function fr(e){let t=j(),r={[t]:e(t)};return he(r)}function mr(e,t){let r=j();e(r,t)}function gr(e={}){let{debug:t=!1}=e;return{name:"ErrorBoundary",execute:async(n,o)=>{try{await o()}catch(i){if(n.response.sent){t&&console.error("Error occurred after response was sent:",i);return}t&&console.error("Error boundary caught error:",i);let s=fr(n.request.header),a=pr(i);a.correlationId=s,mr(n.response.header,s),n.response.status(a.status).json(a)}},debug:t}}R();function hr(e){return async(t,r)=>{let n=he(t.headers);try{await Pt(n,async()=>{let o=await ur(t,r,{parseBody:!0,initialState:{correlationId:n}}),s=[gr()];"corsOptions"in e&&e.corsOptions!==!1&&s.push(te(e.corsOptions)),s.push(...e.middleware);let a=L(s);await Yt(o,async()=>{await a(o,async()=>{if(!o.response.sent&&(await e.router.handleRequest(o),!r.headersSent&&!o.response.sent))throw new H(`Route not found: ${o.request.method} ${o.request.path}`)})})})}catch(o){console.error("Error creating context:",o);let i=j();if(r.headersSent||r.stream?.headersSent){console.error("Headers already sent, cannot send error response");return}"stream"in r&&typeof r.stream?.respond=="function"?(r.stream.respond({":status":500,"content-type":"application/json",[i.toLowerCase()]:n}),r.stream.end(JSON.stringify({error:"Internal Server Error",message:"Failed to process request",correlationId:n}))):(r.setHeader(i,n),r.writeHead(500,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Internal Server Error",message:"Failed to process request",correlationId:n})))}}}async function Oo(e){if(!e.enabled)return{};let{keyFile:t,certFile:r}=e,n=process.env.NODE_ENV==="development",o=!t||!r;if(o&&n)return await Zt();if(o)throw new Error("HTTP/2 requires SSL certificates. Provide keyFile and certFile in http2 options. In development, set NODE_ENV=development to generate them automatically.");return{keyFile:t,certFile:r}}function Ao(e,t){if(!e)return yr.createServer();let r={allowHTTP1:!0};try{t.keyFile&&(r.key=st.readFileSync(t.keyFile)),t.certFile&&(r.cert=st.readFileSync(t.certFile))}catch(n){throw new Error(`Failed to read certificate files: ${n instanceof Error?n.message:String(n)}`)}return Sr.createSecureServer(r)}function Fo(e,t,r,n){return new Promise((o,i)=>{e.listen(t,r,()=>{let a=`${n?"https":"http"}://${r}:${t}`;console.log(`
28
+ `);if(t===-1)return e;let r=e.buffer.subarray(0,t).toString("utf8"),n=e.buffer.subarray(t+4),o=Kt(r);if(!o){let{ValidationError:a}=await Promise.resolve().then(()=>(k(),Q));throw new a("Missing or invalid Content-Disposition header")}let i=Xt(r),s=o.filename!==void 0;if(s&&e.fileCount>=e.options.maxFiles){let{PayloadTooLargeError:a}=await Promise.resolve().then(()=>(ae(),tt));throw new a("Too many files in upload",{fileCount:e.fileCount+1,maxFiles:e.options.maxFiles,filename:o.filename})}if(s&&e.options.allowedMimeTypes.length>0&&!e.options.allowedMimeTypes.includes(i)){let{UnsupportedMediaTypeError:a}=await Promise.resolve().then(()=>(ce(),rt));throw new a("File type not allowed",{receivedMimeType:i,allowedMimeTypes:e.options.allowedMimeTypes,filename:o.filename})}return{...e,buffer:n,stage:"content",currentHeaders:r,currentField:o.name,currentFilename:o.filename,currentMimetype:i,currentContentLength:0,fileCount:s?e.fileCount+1:e.fileCount,fieldCount:s?e.fieldCount:e.fieldCount+1,currentBufferChunks:[]}}async function Gn(e){let t=e.buffer.indexOf(e.boundary),r,n=!1,o=e.buffer;if(t===-1){let s=Math.max(0,e.buffer.length-e.boundary.length);if(s===0)return e;r=e.buffer.subarray(0,s),o=e.buffer.subarray(s)}else{let s=Math.max(0,t-2);r=e.buffer.subarray(0,s),o=e.buffer.subarray(t),n=!0}let i={...e,buffer:o};return r.length>0&&(i=await Zn(i,r)),n&&(i=await Kn(i),i={...i,stage:"boundary",hasProcessedAnyPart:!0}),i}async function Zn(e,t){let r=e.currentContentLength+t.length,n=e.currentFilename!==void 0?e.options.maxFileSize:e.options.maxFieldSize;if(r>n){let o=e.currentFilename!==void 0,{PayloadTooLargeError:i}=await Promise.resolve().then(()=>(ae(),tt)),s=e.currentField?{contentType:o?"file":"field",currentSize:r,maxSize:n,field:e.currentField,filename:e.currentFilename}:{contentType:o?"file":"field",currentSize:r,maxSize:n,filename:e.currentFilename};throw new i(`${o?"File":"Field"} size exceeds limit`,s)}return e.currentFilename!==void 0?Jn(e,t,r):{...e,currentContentLength:r,currentBufferChunks:[...e.currentBufferChunks,t]}}async function Jn(e,t,r){switch(e.options.strategy){case"memory":return{...e,currentContentLength:r,currentBufferChunks:[...e.currentBufferChunks,t]};case"stream":return e.streamController&&e.streamController.enqueue(t),{...e,currentContentLength:r};case"temp":return e.currentWriteStream&&await no(e.currentWriteStream,t),{...e,currentContentLength:r};default:{let{ValidationError:n}=await Promise.resolve().then(()=>(k(),Q));throw new n("Invalid parsing strategy")}}}async function Yn(e){if(e.currentFilename===void 0)return e;switch(e.options.strategy){case"memory":return{...e,currentBufferChunks:[]};case"stream":{let t=null,r=new ReadableStream({start:n=>{t=n}});return{...e,currentStream:r,streamController:t}}case"temp":{let t=(0,ir.join)(e.options.tempDir,`upload-${rr.randomUUID()}`),r=(0,nr.createWriteStream)(t),n=async()=>{try{let{unlink:o}=await import("fs/promises");await o(t)}catch(o){console.warn(`Failed to cleanup temp file: ${t}`,o)}};return{...e,currentTempPath:t,currentWriteStream:r,cleanupTasks:[...e.cleanupTasks,n]}}default:{let{ValidationError:t}=await Promise.resolve().then(()=>(k(),Q));throw new t("Invalid file processing strategy")}}}async function Kn(e){return e.currentField?e.currentFilename!==void 0?Xn(e):eo(e):ue(e)}async function Xn(e){if(!e.currentField||e.currentFilename===void 0)return ue(e);let t,r,n;switch(e.options.strategy){case"memory":r=Buffer.concat(e.currentBufferChunks),t=nt.Readable.from(r);break;case"stream":e.streamController&&e.streamController.close(),t=e.currentStream;break;case"temp":e.currentWriteStream&&await ar(e.currentWriteStream),n=e.currentTempPath,t=nt.Readable.from(Buffer.alloc(0));break;default:{let{ValidationError:s}=await Promise.resolve().then(()=>(k(),Q));throw new s("Invalid file finalization strategy")}}let o={filename:e.currentFilename,fieldname:e.currentField,mimetype:e.currentMimetype,size:e.currentContentLength,stream:t,buffer:r,tempPath:n},i=sr(e.files,e.currentField,o);return{...ue(e),files:i}}function eo(e){if(!e.currentField)return ue(e);let t=Buffer.concat(e.currentBufferChunks).toString("utf8"),r=sr(e.fields,e.currentField,t);return{...ue(e),fields:r}}function ue(e){return{...e,currentField:null,currentFilename:void 0,currentContentLength:0,currentBufferChunks:[],currentStream:null,streamController:null,currentTempPath:null,currentWriteStream:null}}function sr(e,t,r){let n=new Map(e),o=n.get(t)||[];return n.set(t,[...o,r]),n}async function to(e){if(!e.hasFoundValidBoundary){let{ValidationError:n}=await Promise.resolve().then(()=>(k(),Q));throw new n("No valid multipart boundary found")}if(e.hasFoundValidBoundary&&!e.hasProcessedAnyPart){let{ValidationError:n}=await Promise.resolve().then(()=>(k(),Q));throw new n("Empty multipart request")}let t={};for(let[n,o]of e.fields.entries())t[n]=o.length===1?o[0]:o;let r={};for(let[n,o]of e.files.entries())r[n]=o.length===1?o[0]:o;return{fields:t,files:r}}async function ro(e){await Promise.allSettled(e.cleanupTasks.map(t=>t())),e.streamController&&e.streamController.close(),e.currentWriteStream&&await ar(e.currentWriteStream)}async function no(e,t){return new Promise((r,n)=>{e.write(t,o=>{o?n(o):r()})})}async function ar(e){return new Promise(t=>{e.end(()=>t())})}async function cr(e,t={}){let r=e.headers["content-type"]||"",n=Yt(r);if(!n){let{UnsupportedMediaTypeError:i}=await Promise.resolve().then(()=>(ce(),rt));throw new i("Missing boundary in multipart content-type",{receivedContentType:r,expectedFormat:"multipart/form-data; boundary=..."})}let o=qn(n,t);o.currentFilename!==void 0&&(o=await Yn(o));try{for await(let i of e)o=await jn(o,i);return to(o)}finally{await ro(o)}}var de="Content-Type";function oo(e){let t=e.url||"/",r=e.headers.host||"localhost",o=`${e.socket&&e.socket.encrypted?"https":"http"}://${r}${t.startsWith("/")?"":"/"}${t}`;try{let i=new URL(o),s=i.pathname,a={};return i.searchParams.forEach((c,l)=>{a[l]!==void 0?Array.isArray(a[l])?a[l].push(c):a[l]=[a[l],c]:a[l]=c}),{path:s,url:i,query:a}}catch(i){throw console.warn(`Invalid URL: ${o}`,i),new Ne(`Invalid URL: ${o}`)}}function io(e){return"stream"in e||"httpVersionMajor"in e&&e.httpVersionMajor===2}function so(e){let t=e.socket&&e.socket.encrypted,r=e.headers["x-forwarded-proto"];return r?Array.isArray(r)?r[0]?.split(",")[0]?.trim()||"http":r.split(",")[0]?.trim()||"http":t?"https":"http"}async function lr(e,t,r){let{path:n,url:o,query:i}=oo(e),s=e.method||"GET",a=io(e),c=so(e),l={},p={...r.initialState||{}},h={...r.initialServices||{}},x={sent:!1},T={request:ao(e,{path:n,url:o,query:i,params:l,method:s,isHttp2:a,protocol:c}),response:{},state:p,services:h};return T.response=lo(t,x,T),r.parseBody&&await xo(e,T,r),T}function ao(e,t){return{raw:e,...t,header:ur(e),headers:co(e),body:void 0}}function ur(e){return t=>{let r=e.headers[t.toLowerCase()];return Array.isArray(r)?r.join(", "):r||void 0}}function co(e){let t=ur(e);return r=>r&&Array.isArray(r)&&r.length>0?r.reduce((n,o)=>(n[o]=t(o),n),{}):Object.entries(e.headers).reduce((n,[o,i])=>(n[o]=Array.isArray(i)?i.join(", "):i||void 0,n),{})}function pe(e,t){if(t.correlationId){let r=W(),n=String(t.correlationId);e.setHeader(r,n)}}function lo(e,t,r){return{raw:e,get statusCode(){return e.statusCode||200},get sent(){return t.sent},status:uo(e,t,r),header:po(e,t,r),headers:fo(e,t,r),type:mo(e,t,r),json:go(e,t,r.state),text:ho(e,t,r.state),html:yo(e,t,r.state),redirect:So(e,t,r.state),stream:wo(e,t,r.state)}}function uo(e,t,r){return function(o){if(t.sent)throw new F;return e.statusCode=o,r.response}}function po(e,t,r){return function(o,i){if(t.sent)throw new se;return e.setHeader(o,i),r.response}}function fo(e,t,r){return function(o){if(t.sent)throw new se;for(let[i,s]of Object.entries(o))e.setHeader(i,s);return r.response}}function mo(e,t,r){return function(o){if(t.sent)throw new De;return e.setHeader(de,o),r.response}}function go(e,t,r){return function(o,i){if(t.sent)throw new F;i!==void 0&&(e.statusCode=i),pe(e,r),e.setHeader(de,"application/json"),e.end(JSON.stringify(o)),t.sent=!0}}function ho(e,t,r){return function(o,i){if(t.sent)throw new F;i!==void 0&&(e.statusCode=i),pe(e,r),e.setHeader(de,"text/plain"),e.end(o),t.sent=!0}}function yo(e,t,r){return function(o,i){if(t.sent)throw new F;i!==void 0&&(e.statusCode=i),pe(e,r),e.setHeader(de,"text/html"),e.end(o),t.sent=!0}}function So(e,t,r){return function(o,i=302){if(t.sent)throw new F;pe(e,r),e.statusCode=i,e.setHeader("Location",o),e.end(),t.sent=!0}}function wo(e,t,r){return function(o,i={}){if(t.sent)throw new F;if(i.status!==void 0&&(e.statusCode=i.status),pe(e,r),i.contentType&&e.setHeader(de,i.contentType),i.headers)for(let[s,a]of Object.entries(i.headers))e.setHeader(s,a);o.pipe(e),o.on("end",()=>{t.sent=!0}),o.on("error",s=>{console.error("Stream error:",s),t.sent||(e.statusCode=500,e.end("Stream error"),t.sent=!0)})}}async function xo(e,t,r){if(vo(e.method))return;let n=e.headers["content-type"]||"",o=parseInt(e.headers["content-length"]||"0",10);if(o===0)return;let i=r.bodyLimits;if(n.includes("application/json")){if(o>i.json)throw new I("JSON body exceeds size limit",{currentSize:o,maxSize:i.json,contentType:"application/json"},m());await Eo(e,t)}else if(n.includes("application/x-www-form-urlencoded")){if(o>i.form)throw new I("Form body exceeds size limit",{currentSize:o,maxSize:i.form,contentType:"application/x-www-form-urlencoded"},m());await To(e,t)}else if(n.includes("text/")){if(o>i.text)throw new I("Text body exceeds size limit",{currentSize:o,maxSize:i.text,contentType:n},m());await bo(e,t)}else if(er(n))await Co(e,t,i.multipart);else{if(o>i.raw)throw new I("Request body exceeds size limit",{currentSize:o,maxSize:i.raw,contentType:n||"unknown"},m());return}}function vo(e){return["GET","HEAD","OPTIONS"].includes(e||"GET")}async function Eo(e,t){let r=await ot(e);if(!r){console.warn("Empty body, skipping JSON parsing");return}if(r.trim()==="null"){console.warn('Body is the string "null"'),t.request.body=null;return}try{let n=JSON.parse(r);t.request.body=n}catch(n){throw new _("Invalid JSON in request body",{fields:[{field:"body",messages:["Request body contains malformed JSON",n instanceof Error?n.message:"JSON parse failed"]}],errorCount:1,section:"body"},m())}}async function To(e,t){let r=await ot(e);if(r)try{t.request.body=Ro(r)}catch(n){throw new _("Request body contains malformed form data",{fields:[{field:"body",messages:["Invalid URL-encoded form data",n instanceof Error?n.message:"Form parse failed"]}],errorCount:1,section:"body"},m())}}function Ro(e){let t=new URLSearchParams(e),r={};return t.forEach((n,o)=>{r[o]!==void 0?Array.isArray(r[o])?r[o].push(n):r[o]=[r[o],n]:r[o]=n}),r}async function bo(e,t){let r=await ot(e);r&&(t.request.body=r)}async function Co(e,t,r){try{let n=r,o=await cr(e,{strategy:"stream",maxFileSize:n.maxFileSize,maxFiles:n.maxFiles,maxFieldSize:n.maxFieldSize});t.request.multipart=o,t.request.files=o.files,t.request.body=o.fields}catch(n){throw n instanceof I||n instanceof L?n:new L("Failed to parse multipart/form-data",{receivedContentType:e.headers["content-type"],expectedFormat:"multipart/form-data; boundary=..."},m())}}async function ot(e){return new Promise((t,r)=>{let n=[];e.on("data",o=>{n.push(Buffer.isBuffer(o)?o:Buffer.from(o))}),e.on("end",()=>{t(Buffer.concat(n).toString("utf8"))}),e.on("error",o=>{r(o)})})}C();b();var U=class extends w{constructor(t,r=void 0,n=void 0){super("NOT_FOUND",t,404,n??m(),r)}};C();le();b();function Po(e){return e instanceof w}function dr(e){if(Po(e))return{type:e.type,title:e.title,status:e.status,correlationId:e.correlationId,timestamp:e.timestamp.toISOString(),details:e.details};let t=m(),r;e instanceof Error?r=e.message:e==null?r="Unknown error occurred":r=String(e);let n=new H("Internal Server Error",{originalMessage:r},t);return{type:n.type,title:n.title,status:n.status,correlationId:n.correlationId,timestamp:n.timestamp.toISOString(),details:n.details}}function pr(e){let t=W(),r={[t]:e(t)};return Se(r)}function fr(e,t){let r=W();e(r,t)}function mr(e={}){let{debug:t=!1}=e;return{name:"ErrorBoundary",execute:async(n,o)=>{try{await o()}catch(i){if(n.response.sent){t&&console.error("Error occurred after response was sent:",i);return}t&&console.error("Error boundary caught error:",i);let s=pr(n.request.header),a=dr(i);a.correlationId=s,fr(n.response.header,s),n.response.status(a.status).json(a)}},debug:t}}b();function gr(e){return async(t,r)=>{let n=Se(t.headers);try{await Ct(n,async()=>{let o=await lr(t,r,{parseBody:!0,initialState:{correlationId:n},bodyLimits:e.bodyLimits}),s=[mr()];"corsOptions"in e&&e.corsOptions!==!1&&s.push(ne(e.corsOptions)),s.push(...e.middleware);let a=V(s);await Jt(o,async()=>{await a(o,async()=>{if(!o.response.sent&&(await e.router.handleRequest(o),!r.headersSent&&!o.response.sent))throw new U(`Route not found: ${o.request.method} ${o.request.path}`)})})})}catch(o){console.error("Error creating context:",o);let i=W();if(r.headersSent||r.stream?.headersSent){console.error("Headers already sent, cannot send error response");return}"stream"in r&&typeof r.stream?.respond=="function"?(r.stream.respond({":status":500,"content-type":"application/json",[i.toLowerCase()]:n}),r.stream.end(JSON.stringify({error:"Internal Server Error",message:"Failed to process request",correlationId:n}))):(r.setHeader(i,n),r.writeHead(500,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Internal Server Error",message:"Failed to process request",correlationId:n})))}}}async function _o(e){if(!e.enabled)return{};let{keyFile:t,certFile:r}=e,n=process.env.NODE_ENV==="development",o=!t||!r;if(o&&n)return await Gt();if(o)throw new Error("HTTP/2 requires SSL certificates. Provide keyFile and certFile in http2 options. In development, set NODE_ENV=development to generate them automatically.");return{keyFile:t,certFile:r}}function Mo(e,t){if(!e)return hr.createServer();let r={allowHTTP1:!0};try{t.keyFile&&(r.key=it.readFileSync(t.keyFile)),t.certFile&&(r.cert=it.readFileSync(t.certFile))}catch(n){throw new Error(`Failed to read certificate files: ${n instanceof Error?n.message:String(n)}`)}return yr.createSecureServer(r)}function Oo(e,t,r,n){return new Promise((o,i)=>{e.listen(t,r,()=>{let a=`${n?"https":"http"}://${r}:${t}`;console.log(`
29
29
  \u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}
30
30
 
31
31
  \u26A1 BlaizeJS DEVELOPMENT SERVER HOT AND READY \u26A1
@@ -37,8 +37,8 @@ ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function Tn(e){ret
37
37
  Time to build something amazing! \u{1F680}
38
38
 
39
39
  \u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}
40
- `),o()}),e.on("error",s=>{console.error("Server error:",s),i(s)})})}async function ko(e){for(let t of e.plugins)typeof t.initialize=="function"&&await t.initialize(e)}async function wr(e,t){if(!e.server)try{let r=t.port,n=t.host;await ko(e);let o=t.http2||{enabled:!0},i=!!o.enabled,s=await Oo(o);t.http2&&s.keyFile&&s.certFile&&(t.http2.keyFile=s.keyFile,t.http2.certFile=s.certFile);let a=Ao(i,s);e.server=a,e.port=r,e.host=n;let c=hr(e);a.on("request",c),await Fo(a,r,n,i)}catch(r){throw console.error("Failed to start server:",r),r}}var $e=!1;async function xr(e,t={}){let r=e.server,n=e.events;if($e){console.log("\u26A0\uFE0F Shutdown already in progress, ignoring duplicate shutdown request");return}if(!r)return;$e=!0;let o=t.timeout||5e3;try{if(t.onStopping&&await t.onStopping(),n.emit("stopping"),e.router&&typeof e.router.close=="function"){console.log("\u{1F50C} Closing router watchers...");try{await Promise.race([e.router.close(),new Promise((a,c)=>setTimeout(()=>c(new Error("Router close timeout")),2e3))]),console.log("\u2705 Router watchers closed")}catch(a){console.error("\u274C Error closing router watchers:",a)}}try{await Promise.race([e.pluginManager.onServerStop(e,r),new Promise((a,c)=>setTimeout(()=>c(new Error("Plugin stop timeout")),2e3))])}catch(a){console.error("\u274C Plugin stop timeout:",a)}let i=new Promise((a,c)=>{r.close(l=>{if(l)return c(l);a()})}),s=new Promise((a,c)=>{setTimeout(()=>{c(new Error("Server shutdown timeout"))},o)});await Promise.race([i,s]);try{await Promise.race([e.pluginManager.terminatePlugins(e),new Promise((a,c)=>setTimeout(()=>c(new Error("Plugin terminate timeout")),1e3))])}catch(a){console.error("\u274C Plugin terminate timeout:",a)}t.onStopped&&await t.onStopped(),n.emit("stopped"),e.server=null,console.log("\u2705 Graceful shutdown completed"),$e=!1}catch(i){throw $e=!1,console.error("\u26A0\uFE0F Shutdown error (forcing exit):",i),r&&typeof r.close=="function"&&r.close(),process.env.NODE_ENV==="development"&&(console.log("\u{1F504} Forcing exit for development restart..."),process.exit(0)),n.emit("error",i),i}}function Er(e){if(process.env.NODE_ENV==="development"){let r=()=>{console.log("\u{1F4E4} SIGINT received, forcing exit for development restart..."),process.exit(0)},n=()=>{console.log("\u{1F4E4} SIGTERM received, forcing exit for development restart..."),process.exit(0)};return process.on("SIGINT",r),process.on("SIGTERM",n),{unregister:()=>{process.removeListener("SIGINT",r),process.removeListener("SIGTERM",n)}}}else{let r=()=>{console.log("\u{1F4E4} SIGINT received, starting graceful shutdown..."),e().catch(console.error)},n=()=>{console.log("\u{1F4E4} SIGTERM received, starting graceful shutdown..."),e().catch(console.error)};return process.on("SIGINT",r),process.on("SIGTERM",n),{unregister:()=>{process.removeListener("SIGINT",r),process.removeListener("SIGTERM",n)}}}}var C=require("zod");var Io=C.z.custom(e=>e!==null&&typeof e=="object"&&"execute"in e&&typeof e.execute=="function",{message:"Expected middleware to have an execute function"}),Do=C.z.custom(e=>e!==null&&typeof e=="object"&&"register"in e&&typeof e.register=="function",{message:"Expected a valid plugin object with a register method"}),zo=C.z.object({enabled:C.z.boolean().optional().default(!0),keyFile:C.z.string().optional(),certFile:C.z.string().optional()}).refine(e=>e.enabled&&process.env.NODE_ENV==="production"?e.keyFile&&e.certFile:!0,{message:"When HTTP/2 is enabled (outside of development mode), both keyFile and certFile must be provided"}),No=C.z.object({headerName:C.z.string().regex(/^[a-z][a-z0-9-]*$/,{message:"Header name must start with a letter and contain only lowercase letters, numbers, and hyphens"}).optional(),generator:C.z.function().args().returns(C.z.string()).optional()}).optional(),Bo=C.z.object({port:C.z.number().int().positive().optional().default(3e3),host:C.z.string().optional().default("localhost"),routesDir:C.z.string().optional().default("./routes"),http2:zo.optional().default({enabled:!0}),middleware:C.z.array(Io).optional().default([]),plugins:C.z.array(Do).optional().default([]),correlation:No,cors:Dt});function vr(e){try{return Bo.parse(e)}catch(t){if(t instanceof C.z.ZodError){let r=t.format();throw new Error(`Invalid server options: ${JSON.stringify(r,null,2)}`)}throw new Error(`Invalid server options: ${String(t)}`)}}function Tr(e={}){let{continueOnError:t=!0,debug:r=!1,onError:n}=e;function o(s,...a){r&&console.log(`[PluginLifecycle] ${s}`,...a)}function i(s,a,c){let l=`Plugin ${s.name} failed during ${a}: ${c.message}`;if(n?n(s,a,c):console.error(l,c),!t)throw new Error(l)}return{async initializePlugins(s){o("Initializing plugins...");for(let a of s.plugins)if(a.initialize)try{o(`Initializing plugin: ${a.name}`),await a.initialize(s)}catch(c){i(a,"initialize",c)}o(`Initialized ${s.plugins.length} plugins`)},async terminatePlugins(s){o("Terminating plugins...");let a=[...s.plugins].reverse();for(let c of a)if(c.terminate)try{o(`Terminating plugin: ${c.name}`),await c.terminate(s)}catch(l){i(c,"terminate",l)}o(`Terminated ${a.length} plugins`)},async onServerStart(s,a){o("Notifying plugins of server start...");for(let c of s.plugins)if(c.onServerStart)try{o(`Notifying plugin of server start: ${c.name}`),await c.onServerStart(a)}catch(l){i(c,"onServerStart",l)}},async onServerStop(s,a){o("Notifying plugins of server stop...");let c=[...s.plugins].reverse();for(let l of c)if(l.onServerStop)try{o(`Notifying plugin of server stop: ${l.name}`),await l.onServerStop(a)}catch(p){i(l,"onServerStop",p)}}}}var F=class extends Error{constructor(r,n){super(`Plugin validation error${r?` for "${r}"`:""}: ${n}`);this.pluginName=r;this.name="PluginValidationError"}};var $o=new Set(["core","server","router","middleware","context","blaize","blaizejs"]),Ho=/^[a-z]([a-z0-9-]*[a-z0-9])?$/,Uo=/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9-.]+)?(?:\+[a-zA-Z0-9-.]+)?$/;function at(e,t={}){let{requireVersion:r=!0,validateNameFormat:n=!0,checkReservedNames:o=!0}=t;if(!e||typeof e!="object")throw new F("","Plugin must be an object");let i=e;if(!i.name||typeof i.name!="string")throw new F("","Plugin must have a name (string)");if(n&&!Ho.test(i.name))throw new F(i.name,"Plugin name must be lowercase letters, numbers, and hyphens only");if(o&&$o.has(i.name.toLowerCase()))throw new F(i.name,`Plugin name "${i.name}" is reserved`);if(r){if(!i.version||typeof i.version!="string")throw new F(i.name,"Plugin must have a version (string)");if(!Uo.test(i.version))throw new F(i.name,'Plugin version must follow semantic versioning (e.g., "1.0.0")')}if(!i.register||typeof i.register!="function")throw new F(i.name,"Plugin must have a register method (function)");let s=["initialize","terminate","onServerStart","onServerStop"];for(let a of s)if(i[a]&&typeof i[a]!="function")throw new F(i.name,`Plugin ${a} must be a function if provided`)}var br=_(require("crypto"),1),Cr=_(require("fs/promises"),1);async function qo(e){let t=`?t=${Date.now()}`,r=e+t;try{let n=await import(r);return console.log("\u2705 Successfully imported module"),n}catch(n){let o=n instanceof Error?n.message:String(n);return console.log("\u26A0\uFE0F Error importing with cache buster, trying original path:",o),import(e)}}async function Rr(e,t){try{let r=Ee(e,t),n=await qo(e);console.log("\u{1F4E6} Module exports:",Object.keys(n));let o=[];if(n.default&&typeof n.default=="object"){let i={...n.default,path:r.routePath};o.push(i)}return Object.entries(n).forEach(([i,s])=>{if(i==="default"||!s||typeof s!="object")return;let a=s;if(Lo(a)){let c={...a,path:r.routePath};o.push(c)}}),o.length===0?(console.warn(`Route file ${e} does not export any valid route definitions`),[]):(console.log(`\u2705 Successfully Loaded ${o.length} route(s)`),o)}catch(r){return console.error(`Failed to load route module ${e}:`,r),[]}}function Lo(e){return!e||typeof e!="object"?!1:["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"].some(n=>e[n]&&typeof e[n]=="object"&&e[n].handler)}var de=new Map;async function pe(e,t,r=!0){let o=(await Cr.stat(e)).mtime.getTime(),i=de.get(e);if(r&&i&&i.timestamp===o)return i.routes;let s=await Rr(e,t);if(r){let a=_r(s);de.set(e,{routes:s,timestamp:o,hash:a})}return s}function Pr(e,t){let r=de.get(e);if(!r)return!0;let n=_r(t);return r.hash!==n}function ct(e){e?de.delete(e):de.clear()}function _r(e){let t=e.map(o=>({path:o.path,methods:Object.keys(o).filter(i=>i!=="path").sort().map(i=>{let s=o[i],a=s?.handler?s.handler.toString():null;return{method:i,handler:a,middleware:s?.middleware?s.middleware.length:0,hasSchema:!!s?.schema,schemaKeys:s?.schema?Object.keys(s.schema).sort():[]}})})),r=JSON.stringify(t);return br.createHash("md5").update(r).digest("hex")}var Or=_(require("os"),1);var He=_(require("fs/promises"),1),K=_(require("path"),1);async function Mr(e,t={}){let r=K.isAbsolute(e)?e:K.resolve(process.cwd(),e);console.log("Creating router with routes directory:",r);try{if(!(await He.stat(r)).isDirectory())throw new Error(`Route directory is not a directory: ${r}`)}catch(s){throw s.code==="ENOENT"?new Error(`Route directory not found: ${r}`):s}let n=[],o=t.ignore||["node_modules",".git"];async function i(s){let a=await He.readdir(s,{withFileTypes:!0});for(let c of a){let l=K.join(s,c.name);c.isDirectory()&&o.includes(c.name)||(c.isDirectory()?await i(l):jo(c.name)&&n.push(l))}}return await i(r),n}function jo(e){return!e.startsWith("_")&&(e.endsWith(".ts")||e.endsWith(".js"))}async function Vo(e,t,r=Math.max(1,Math.floor(Or.cpus().length/2))){let n=Wo(e,r),o=[];for(let i of n){let a=(await Promise.allSettled(i.map(c=>t(c)))).filter(c=>c.status==="fulfilled").map(c=>c.value);o.push(...a)}return o}async function Ar(e){let t=await Mr(e);return(await Vo(t,n=>pe(n,e))).flat()}function Wo(e,t){let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}var U={fileChanges:0,totalReloadTime:0,averageReloadTime:0,slowReloads:[]};function Fr(e,t){let r=Date.now()-t;if(U.fileChanges++,U.totalReloadTime+=r,U.averageReloadTime=U.totalReloadTime/U.fileChanges,r>100&&(U.slowReloads.push({file:e,time:r}),U.slowReloads.length>10&&U.slowReloads.shift()),process.env.NODE_ENV==="development"){let n=r<50?"\u26A1":r<100?"\u{1F504}":"\u{1F40C}";console.log(`${n} Route reload: ${e} (${r}ms)`)}}function lt(e,t){return console.log(`Tracking performance for: ${t}`),async(...r)=>{let n=Date.now();try{let o=await e(...r);return Fr(t,n),o}catch(o){throw Fr(t,n),o}}}var ut=_(require("path"),1),kr=require("chokidar");function dt(e,t={}){let r=t.debounceMs||16,n=new Map;function o(p,g){return(...x)=>{let v=n.get(g);v&&clearTimeout(v);let u=setTimeout(()=>{p(...x),n.delete(g)},r);n.set(g,u)}}let i=new Map;async function s(p){try{let g=i.get(p),x=await pe(p,e,!1);if(!x||x.length===0||g&&!Pr(p,x))return;await pe(p,e,!0);let v=ut.normalize(p);g?(i.set(p,x),t.onRouteChanged&&t.onRouteChanged(v,x)):(i.set(p,x),t.onRouteAdded&&t.onRouteAdded(v,x))}catch(g){console.log(`\u26A0\uFE0F Error processing file ${p}:`,g),c(g)}}function a(p){let g=ut.normalize(p),x=i.get(g);x&&x.length>0&&t.onRouteRemoved&&t.onRouteRemoved(g,x),i.delete(g)}function c(p){t.onError&&p instanceof Error?t.onError(p):console.error("\u26A0\uFE0F Route watcher error:",p)}let l=(0,kr.watch)(e,{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:50,pollInterval:10},usePolling:!1,atomic:!0,followSymlinks:!1,depth:10,ignored:[/(^|[/\\])\../,/node_modules/,/\.git/,/\.DS_Store/,/Thumbs\.db/,/\.(test|spec)\.(ts|js)$/,/\.d\.ts$/,/\.map$/,/~$/,...t.ignore||[]]});return l.on("add",p=>{o(s,p)(p)}).on("change",p=>{o(s,p)(p)}).on("unlink",p=>{o(a,p)(p)}).on("error",c),{close:()=>(n.forEach(p=>clearTimeout(p)),n.clear(),l.close()),getRoutes:()=>{let p=[];for(let g of i.values())p.push(...g);return p},getRoutesByFile:()=>new Map(i)}}var Br=require("zod");var Ir=require("zod");function pt(e,t){return t instanceof Ir.z.ZodObject?t.strict().parse(e):t.parse(e)}var Dr=require("zod");function ft(e,t){return t instanceof Dr.z.ZodObject?t.strict().parse(e):t.parse(e)}var zr=require("zod");function mt(e,t){return t instanceof zr.z.ZodObject?t.strict().parse(e):t.parse(e)}var Nr=require("zod");function gt(e,t){return t instanceof Nr.z.ZodObject?t.strict().parse(e):t.parse(e)}ie();I();function ht(e,t=!1){return{name:"RequestValidator",execute:async(n,o)=>{if(e.params&&n.request.params)try{n.request.params=ft(n.request.params,e.params)}catch(i){let s=Ue(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new M("Request validation failed",{fields:s,errorCount:a,section:"params"})}if(e.query&&n.request.query)try{n.request.query=mt(n.request.query,e.query)}catch(i){let s=Ue(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new M("Request validation failed",{fields:s,errorCount:a,section:"query"})}if(e.body)try{n.request.body=pt(n.request.body,e.body)}catch(i){let s=Ue(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new M("Request validation failed",{fields:s,errorCount:a,section:"body"})}await o()},debug:t}}function yt(e,t=!1){return{name:"ResponseValidator",execute:async(n,o)=>{let i=n.response.json;n.response.json=(s,a)=>{try{let c=gt(s,e);return n.response.json=i,i.call(n.response,c,a)}catch(c){throw n.response.json=i,new N("Response validation failed",{responseSchema:e.description||"Unknown schema",validationError:Ue(c),originalResponse:s})}},await o()},debug:t}}function Ue(e){if(e instanceof Br.z.ZodError){let t=new Map;for(let r of e.issues){let n=r.path.length>0?r.path.join("."):"root";t.has(n)||t.set(n,[]),t.get(n).push(r.message)}return Array.from(t.entries()).map(([r,n])=>({field:r,messages:n}))}return e instanceof Error?[{field:"unknown",messages:[e.message]}]:[{field:"unknown",messages:[String(e)]}]}async function St(e,t,r){let n=[...t.middleware||[]];t.schema&&((t.schema.params||t.schema.query||t.schema.body)&&n.unshift(ht(t.schema)),t.schema.response&&n.push(yt(t.schema.response))),await L([...n])(e,async()=>{let i=await t.handler(e,r);!e.response.sent&&i!==void 0&&e.response.json(i)})}function $r(){return{routesByPath:new Map,routesByFile:new Map,pathToFile:new Map}}function q(e,t,r){console.log(`Updating routes from file: ${t}`);let n=e.routesByFile.get(t)||new Set,o=new Set(r.map(l=>l.path)),i=r.filter(l=>!n.has(l.path)),s=Array.from(n).filter(l=>!o.has(l)),c=r.filter(l=>n.has(l.path)).filter(l=>{let p=e.routesByPath.get(l.path);return!p||!Go(p,l)});return Qo(e,t,{added:i,removed:s,changed:c}),{added:i,removed:s,changed:c}}function Hr(e){return Array.from(e.routesByPath.values())}function Qo(e,t,r){let{added:n,removed:o,changed:i}=r;o.forEach(a=>{e.routesByPath.delete(a),e.pathToFile.delete(a)}),[...n,...i].forEach(a=>{e.routesByPath.set(a.path,a),e.pathToFile.set(a.path,t)});let s=new Set([...n.map(a=>a.path),...i.map(a=>a.path),...Array.from(e.routesByFile.get(t)||[]).filter(a=>!o.includes(a))]);s.size>0?e.routesByFile.set(t,s):e.routesByFile.delete(t)}function Go(e,t){if(e.path!==t.path)return!1;let r=Object.keys(e).filter(o=>o!=="path").sort(),n=Object.keys(t).filter(o=>o!=="path").sort();return r.length!==n.length?!1:r.every(o=>{let i=e[o],s=t[o];return typeof i==typeof s})}function wt(e,t){Object.entries(e).forEach(([r,n])=>{r==="path"||!n||t.add(e.path,r,n)})}function fe(e,t){"remove"in t&&typeof t.remove=="function"?t.remove(e):console.warn("Matcher does not support selective removal, consider adding remove() method")}function Ur(e,t){fe(e.path,t),wt(e,t)}var Zo={routesDir:"./routes",basePath:"/",watchMode:process.env.NODE_ENV==="development"};function qr(e){let t={...Zo,...e};e.basePath&&!e.basePath.startsWith("/")&&console.warn("Base path does nothing");let r=$r(),n=Y(),o=!1,i=null,s=null,a=new Set([t.routesDir]);function c(u){console.log(`
41
- \u{1F527} APPLYING MATCHER CHANGES:`),console.log(` Adding ${u.added.length} routes`),console.log(` Removing ${u.removed.length} routes`),console.log(` Updating ${u.changed.length} routes`),u.removed.forEach(f=>{console.log(` \u2796 Removing: ${f}`),fe(f,n)}),u.added.forEach(f=>{let m=Object.keys(f).filter(d=>d!=="path");console.log(` \u2795 Adding: ${f.path} [${m.join(", ")}]`),wt(f,n)}),u.changed.forEach(f=>{let m=Object.keys(f).filter(d=>d!=="path");console.log(` \u{1F504} Updating: ${f.path} [${m.join(", ")}]`),Ur(f,n)}),console.log(`\u2705 Matcher changes applied
42
- `)}function l(u,f){try{let m=q(r,f,u);return c(m),m}catch(m){throw console.error(`\u26A0\uFE0F Route conflicts from ${f}:`,m),m}}async function p(u,f,m){try{let d=await Ar(u),S=d.map(h=>m?{...h,path:`${m}${h.path}`}:h),E=l(S,f);console.log(`Loaded ${d.length} routes from ${f}${m?` with prefix ${m}`:""} (${E.added.length} added, ${E.changed.length} changed, ${E.removed.length} removed)`)}catch(d){throw console.error(`\u26A0\uFE0F Failed to load routes from ${f}:`,d),d}}async function g(){return o||i||(i=(async()=>{try{await Promise.all(Array.from(a).map(u=>p(u,u))),t.watchMode&&x(),o=!0}catch(u){throw console.error("\u26A0\uFE0F Failed to initialize router:",u),u}})()),i}function x(){s||(s=new Map);for(let u of a)if(!s.has(u)){let f=dt(u,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(m,d)=>{try{let S=q(r,m,d);c(S)}catch(S){console.error(`Error adding routes from ${u}:`,S)}},onRouteChanged:lt(async(m,d)=>{try{console.log(`Processing changes for ${m}`);let S=q(r,m,d);console.log(`Changes detected: ${S.added.length} added, ${S.changed.length} changed, ${S.removed.length} removed`),c(S),console.log(`Route changes applied: ${S.added.length} added, ${S.changed.length} changed, ${S.removed.length} removed`)}catch(S){console.error(`\u26A0\uFE0F Error updating routes from ${u}:`,S)}},u),onRouteRemoved:(m,d)=>{console.log(`File removed: ${m} with ${d.length} routes`);try{d.forEach(S=>{fe(S.path,n)}),ct(m)}catch(S){console.error(`\u26A0\uFE0F Error removing routes from ${m}:`,S)}},onError:m=>{console.error(`\u26A0\uFE0F Route watcher error for ${u}:`,m)}});s.set(u,f)}}function v(u,f){s||(s=new Map);let m=dt(u,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(d,S)=>{try{let E=S.map(k=>f?{...k,path:`${f}${k.path}`}:k),h=q(r,d,E);c(h)}catch(E){console.error(`\u26A0\uFE0F Error adding routes from ${u}:`,E)}},onRouteChanged:lt(async(d,S)=>{try{let E=S.map(k=>f?{...k,path:`${f}${k.path}`}:k),h=q(r,d,E);c(h)}catch(E){console.error(`\u26A0\uFE0F Error updating routes from ${u}:`,E)}},u),onRouteRemoved:(d,S)=>{try{S.forEach(E=>{let h=f?`${f}${E.path}`:E.path;fe(h,n)}),ct(d)}catch(E){console.error(`Error removing routes from ${d}:`,E)}},onError:d=>{console.error(`\u26A0\uFE0F Route watcher error for ${u}:`,d)}});return s.set(u,m),m}return g().catch(u=>{console.error("\u26A0\uFE0F Failed to initialize router on creation:",u)}),{async handleRequest(u){o||(console.log("\u{1F504} Router not initialized, initializing..."),await g());let{method:f,path:m}=u.request;console.log(`
43
- \u{1F4E5} Handling request: ${f} ${m}`);let d=n.match(m,f);if(!d)throw console.log(`\u274C No match found for: ${f} ${m}`),new H("Not found");if(console.log(`\u2705 Route matched: ${f} ${m}`),console.log(` Params: ${JSON.stringify(d.params)}`),d.methodNotAllowed){u.response.status(405).json({error:"\u274C Method Not Allowed",allowed:d.allowedMethods}),d.allowedMethods&&d.allowedMethods.length>0&&u.response.header("Allow",d.allowedMethods.join(", "));return}u.request.params=d.params,await St(u,d.route,d.params)},getRoutes(){return Hr(r)},addRoute(u){let f=q(r,"programmatic",[u]);c(f)},addRoutes(u){let f=q(r,"programmatic",u);return c(f),f},async addRouteDirectory(u,f={}){if(a.has(u)){console.warn(`Route directory ${u} already registered`);return}a.add(u),o&&(await p(u,u,f.prefix),t.watchMode&&v(u,f.prefix))},getRouteConflicts(){return[]},async close(){if(s){for(let u of s.values())await u.close();s.clear()}}}}R();var Jo={port:3e3,host:"localhost",routesDir:"./routes",http2:{enabled:!0},middleware:[],plugins:[]};function Yo(e={}){let t={...Jo};return $t({routesDir:e.routesDir||t.routesDir}),{port:e.port??t.port,host:e.host??t.host,routesDir:e.routesDir??t.routesDir,http2:{enabled:e.http2?.enabled??t.http2?.enabled,keyFile:e.http2?.keyFile??t.http2?.keyFile,certFile:e.http2?.certFile??t.http2?.certFile},middleware:[...t.middleware||[],...e.middleware||[]],plugins:[...t.plugins||[],...e.plugins||[]],correlation:e.correlation,cors:e.cors}}function Ko(e){e.correlation&&Ct(e.correlation.headerName,e.correlation.generator)}function Xo(e,t){return async()=>(Ko(t),await ei(e),await e.pluginManager.initializePlugins(e),await wr(e,t),await e.pluginManager.onServerStart(e,e.server),ti(e),e)}async function ei(e){for(let t of e.plugins)await t.register(e)}function ti(e){let t=Er(()=>e.close());e._signalHandlers=t,e.events.emit("started")}function ri(e){return async t=>{if(!e.server)return;let r={...t};e._signalHandlers&&(e._signalHandlers.unregister(),delete e._signalHandlers),await xr(e,r)}}function ni(e){return t=>{let r=Array.isArray(t)?t:[t];return e.middleware.push(...r),e}}function oi(e){return async t=>{if(Array.isArray(t))for(let r of t)at(r),e.plugins.push(r),await r.register(e);else at(t),e.plugins.push(t),await t.register(e);return e}}function qe(e={}){let t=Yo(e),r;try{r=vr(t)}catch(f){throw f instanceof Error?new Error(`Failed to create server: ${f.message}`):new Error(`Failed to create server: ${String(f)}`)}let{port:n,host:o,middleware:i,plugins:s,cors:a}=r,c=Array.isArray(i)?[...i]:[],l=Array.isArray(s)?[...s]:[],p=new Lr.AsyncLocalStorage,g=qr({routesDir:r.routesDir,watchMode:process.env.NODE_ENV==="development"}),x=Tr({debug:process.env.NODE_ENV==="development",continueOnError:!0}),v=new jr.default,u={server:null,port:n,host:o,context:p,events:v,plugins:[...l],middleware:[...c],corsOptions:a,_signalHandlers:{unregister:()=>{}},use:()=>u,register:async()=>u,listen:async()=>u,close:async()=>{},router:g,pluginManager:x};return u.listen=Xo(u,r),u.close=ri(u),u.use=ni(u),u.register=oi(u),u}function xt(e){return{}}R();function ii(e){return typeof e=="object"&&e!==null&&"name"in e&&"execute"in e&&typeof e.name=="string"&&typeof e.execute=="function"}function si(e){return typeof e=="object"&&e!==null&&"name"in e&&"version"in e&&"register"in e&&typeof e.name=="string"&&typeof e.version=="string"&&typeof e.register=="function"}function ai(e){return e}function ci(e){return e}function li(...e){return e}function ui(...e){return e}b();I();b();R();var Le=class extends w{constructor(t,r=void 0,n=void 0){super("UNAUTHORIZED",t,401,n??y(),r)}};b();R();var je=class extends w{constructor(t,r=void 0,n=void 0){super("CONFLICT",t,409,n??y(),r)}};b();R();var Ve=class extends w{constructor(t,r=void 0,n=void 0){super("RATE_LIMITED",t,429,n??y(),r)}};ie();ze();b();R();var We=class extends w{constructor(t,r,n){super("UPLOAD_TIMEOUT",t,408,n??y(),r)}};b();R();var Qe=class extends w{constructor(t,r,n){super("UNPROCESSABLE_ENTITY",t,422,n??y(),r)}};Ne();b();R();var Ge=class extends w{constructor(t,r=void 0,n=void 0){super("SERVICE_UNAVAILABLE",t,503,n??y(),r)}};var Vr="0.1.0",Wr={createServer:qe,inferContext:xt},Qr={createDeleteRoute:_e,createGetRoute:be,createHeadRoute:Oe,createOptionsRoute:Ae,createPatchRoute:Me,createPostRoute:Ce,createPutRoute:Pe,createRouteFactory:tt,createMatcher:Y,extractParams:Q,compilePathPattern:J,paramsToQuery:ne,buildUrl:Fe},Gr={createMiddleware:$,createServiceMiddleware:Se,createStateMiddleware:ye,compose:L,cors:te},Zr={createPlugin:we},di={createServer:qe,createMiddleware:$,createServiceMiddleware:Se,createStateMiddleware:ye,createPlugin:we,getCorrelationId:y,Server:Wr,Router:Qr,Middleware:Gr,Plugins:Zr,VERSION:Vr};0&&(module.exports={Blaize,BlaizeError,ConflictError,ErrorSeverity,ErrorType,ForbiddenError,InternalServerError,MiddlewareAPI,NotFoundError,PayloadTooLargeError,PluginsAPI,RateLimitError,RequestTimeoutError,RouterAPI,ServerAPI,ServiceNotAvailableError,UnauthorizedError,UnprocessableEntityError,UnsupportedMediaTypeError,VERSION,ValidationError,asMiddlewareArray,asPluginArray,buildUrl,compilePathPattern,compose,cors,createDeleteRoute,createGetRoute,createHeadRoute,createMatcher,createMiddleware,createMiddlewareArray,createOptionsRoute,createPatchRoute,createPlugin,createPluginArray,createPostRoute,createPutRoute,createRouteFactory,createServer,createServiceMiddleware,createStateMiddleware,extractParams,getCorrelationId,inferContext,isBodyParseError,isMiddleware,isPlugin,paramsToQuery});
40
+ `),o()}),e.on("error",s=>{console.error("Server error:",s),i(s)})})}async function Ao(e){for(let t of e.plugins)typeof t.initialize=="function"&&await t.initialize(e)}async function Sr(e,t){if(!e.server)try{let r=t.port,n=t.host;await Ao(e);let o=t.http2||{enabled:!0},i=!!o.enabled,s=await _o(o);t.http2&&s.keyFile&&s.certFile&&(t.http2.keyFile=s.keyFile,t.http2.certFile=s.certFile);let a=Mo(i,s);e.server=a,e.port=r,e.host=n;let c=gr(e);a.on("request",c),await Oo(a,r,n,i)}catch(r){throw console.error("Failed to start server:",r),r}}var Be=!1;async function wr(e,t={}){let r=e.server,n=e.events;if(Be){console.log("\u26A0\uFE0F Shutdown already in progress, ignoring duplicate shutdown request");return}if(!r)return;Be=!0;let o=t.timeout||5e3;try{if(t.onStopping&&await t.onStopping(),n.emit("stopping"),e.router&&typeof e.router.close=="function"){console.log("\u{1F50C} Closing router watchers...");try{await Promise.race([e.router.close(),new Promise((a,c)=>setTimeout(()=>c(new Error("Router close timeout")),2e3))]),console.log("\u2705 Router watchers closed")}catch(a){console.error("\u274C Error closing router watchers:",a)}}try{await Promise.race([e.pluginManager.onServerStop(e,r),new Promise((a,c)=>setTimeout(()=>c(new Error("Plugin stop timeout")),2e3))])}catch(a){console.error("\u274C Plugin stop timeout:",a)}let i=new Promise((a,c)=>{r.close(l=>{if(l)return c(l);a()})}),s=new Promise((a,c)=>{setTimeout(()=>{c(new Error("Server shutdown timeout"))},o)});await Promise.race([i,s]);try{await Promise.race([e.pluginManager.terminatePlugins(e),new Promise((a,c)=>setTimeout(()=>c(new Error("Plugin terminate timeout")),1e3))])}catch(a){console.error("\u274C Plugin terminate timeout:",a)}t.onStopped&&await t.onStopped(),n.emit("stopped"),e.server=null,console.log("\u2705 Graceful shutdown completed"),Be=!1}catch(i){throw Be=!1,console.error("\u26A0\uFE0F Shutdown error (forcing exit):",i),r&&typeof r.close=="function"&&r.close(),process.env.NODE_ENV==="development"&&(console.log("\u{1F504} Forcing exit for development restart..."),process.exit(0)),n.emit("error",i),i}}function xr(e){if(process.env.NODE_ENV==="development"){let r=()=>{console.log("\u{1F4E4} SIGINT received, forcing exit for development restart..."),process.exit(0)},n=()=>{console.log("\u{1F4E4} SIGTERM received, forcing exit for development restart..."),process.exit(0)};return process.on("SIGINT",r),process.on("SIGTERM",n),{unregister:()=>{process.removeListener("SIGINT",r),process.removeListener("SIGTERM",n)}}}else{let r=()=>{console.log("\u{1F4E4} SIGINT received, starting graceful shutdown..."),e().catch(console.error)},n=()=>{console.log("\u{1F4E4} SIGTERM received, starting graceful shutdown..."),e().catch(console.error)};return process.on("SIGINT",r),process.on("SIGTERM",n),{unregister:()=>{process.removeListener("SIGINT",r),process.removeListener("SIGTERM",n)}}}}var E=require("zod");var Fo=E.z.custom(e=>e!==null&&typeof e=="object"&&"execute"in e&&typeof e.execute=="function",{message:"Expected middleware to have an execute function"}),ko=E.z.custom(e=>e!==null&&typeof e=="object"&&"register"in e&&typeof e.register=="function",{message:"Expected a valid plugin object with a register method"}),Io=E.z.object({enabled:E.z.boolean().optional().default(!0),keyFile:E.z.string().optional(),certFile:E.z.string().optional()}).refine(e=>e.enabled&&process.env.NODE_ENV==="production"?e.keyFile&&e.certFile:!0,{message:"When HTTP/2 is enabled (outside of development mode), both keyFile and certFile must be provided"}),zo=E.z.object({headerName:E.z.string().regex(/^[a-z][a-z0-9-]*$/,{message:"Header name must start with a letter and contain only lowercase letters, numbers, and hyphens"}).optional(),generator:E.z.function().args().returns(E.z.string()).optional()}).optional(),Do=E.z.object({maxFileSize:E.z.number().positive().default(50*1024*1024),maxTotalSize:E.z.number().positive().default(100*1024*1024),maxFiles:E.z.number().positive().int().default(10),maxFieldSize:E.z.number().positive().default(1024*1024)}),No=E.z.object({json:E.z.number().positive().default(512*1024),form:E.z.number().positive().default(1024*1024),text:E.z.number().positive().default(5*1024*1024),raw:E.z.number().positive().default(10*1024*1024),multipart:Do}),Bo=E.z.object({port:E.z.number().int().positive().optional().default(3e3),host:E.z.string().optional().default("localhost"),routesDir:E.z.string().optional().default("./routes"),http2:Io.optional().default({enabled:!0}),middleware:E.z.array(Fo).optional().default([]),plugins:E.z.array(ko).optional().default([]),correlation:zo,cors:It,bodyLimits:No});function vr(e){try{return Bo.parse(e)}catch(t){if(t instanceof E.z.ZodError){let r=t.format();throw new Error(`Invalid server options: ${JSON.stringify(r,null,2)}`)}throw new Error(`Invalid server options: ${String(t)}`)}}function Er(e={}){let{continueOnError:t=!0,debug:r=!1,onError:n}=e;function o(s,...a){r&&console.log(`[PluginLifecycle] ${s}`,...a)}function i(s,a,c){let l=`Plugin ${s.name} failed during ${a}: ${c.message}`;if(n?n(s,a,c):console.error(l,c),!t)throw new Error(l)}return{async initializePlugins(s){o("Initializing plugins...");for(let a of s.plugins)if(a.initialize)try{o(`Initializing plugin: ${a.name}`),await a.initialize(s)}catch(c){i(a,"initialize",c)}o(`Initialized ${s.plugins.length} plugins`)},async terminatePlugins(s){o("Terminating plugins...");let a=[...s.plugins].reverse();for(let c of a)if(c.terminate)try{o(`Terminating plugin: ${c.name}`),await c.terminate(s)}catch(l){i(c,"terminate",l)}o(`Terminated ${a.length} plugins`)},async onServerStart(s,a){o("Notifying plugins of server start...");for(let c of s.plugins)if(c.onServerStart)try{o(`Notifying plugin of server start: ${c.name}`),await c.onServerStart(a)}catch(l){i(c,"onServerStart",l)}},async onServerStop(s,a){o("Notifying plugins of server stop...");let c=[...s.plugins].reverse();for(let l of c)if(l.onServerStop)try{o(`Notifying plugin of server stop: ${l.name}`),await l.onServerStop(a)}catch(p){i(l,"onServerStop",p)}}}}var z=class extends Error{constructor(r,n){super(`Plugin validation error${r?` for "${r}"`:""}: ${n}`);this.pluginName=r;this.name="PluginValidationError"}};var Ho=new Set(["core","server","router","middleware","context","blaize","blaizejs"]),$o=/^[a-z]([a-z0-9-]*[a-z0-9])?$/,Lo=/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9-.]+)?(?:\+[a-zA-Z0-9-.]+)?$/;function st(e,t={}){let{requireVersion:r=!0,validateNameFormat:n=!0,checkReservedNames:o=!0}=t;if(!e||typeof e!="object")throw new z("","Plugin must be an object");let i=e;if(!i.name||typeof i.name!="string")throw new z("","Plugin must have a name (string)");if(n&&!$o.test(i.name))throw new z(i.name,"Plugin name must be lowercase letters, numbers, and hyphens only");if(o&&Ho.has(i.name.toLowerCase()))throw new z(i.name,`Plugin name "${i.name}" is reserved`);if(r){if(!i.version||typeof i.version!="string")throw new z(i.name,"Plugin must have a version (string)");if(!Lo.test(i.version))throw new z(i.name,'Plugin version must follow semantic versioning (e.g., "1.0.0")')}if(!i.register||typeof i.register!="function")throw new z(i.name,"Plugin must have a register method (function)");let s=["initialize","terminate","onServerStart","onServerStop"];for(let a of s)if(i[a]&&typeof i[a]!="function")throw new z(i.name,`Plugin ${a} must be a function if provided`)}var Rr=M(require("crypto"),1),br=M(require("fs/promises"),1);async function Uo(e){let t=`?t=${Date.now()}`,r=e+t;try{let n=await import(r);return console.log("\u2705 Successfully imported module"),n}catch(n){let o=n instanceof Error?n.message:String(n);return console.log("\u26A0\uFE0F Error importing with cache buster, trying original path:",o),import(e)}}async function Tr(e,t){try{let r=Te(e,t),n=await Uo(e);console.log("\u{1F4E6} Module exports:",Object.keys(n));let o=[];if(n.default&&typeof n.default=="object"){let i={...n.default,path:r.routePath};o.push(i)}return Object.entries(n).forEach(([i,s])=>{if(i==="default"||!s||typeof s!="object")return;let a=s;if(qo(a)){let c={...a,path:r.routePath};o.push(c)}}),o.length===0?(console.warn(`Route file ${e} does not export any valid route definitions`),[]):(console.log(`\u2705 Successfully Loaded ${o.length} route(s)`),o)}catch(r){return console.error(`Failed to load route module ${e}:`,r),[]}}function qo(e){return!e||typeof e!="object"?!1:["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"].some(n=>e[n]&&typeof e[n]=="object"&&e[n].handler)}var fe=new Map;async function me(e,t,r=!0){let o=(await br.stat(e)).mtime.getTime(),i=fe.get(e);if(r&&i&&i.timestamp===o)return i.routes;let s=await Tr(e,t);if(r){let a=Pr(s);fe.set(e,{routes:s,timestamp:o,hash:a})}return s}function Cr(e,t){let r=fe.get(e);if(!r)return!0;let n=Pr(t);return r.hash!==n}function at(e){e?fe.delete(e):fe.clear()}function Pr(e){let t=e.map(o=>({path:o.path,methods:Object.keys(o).filter(i=>i!=="path").sort().map(i=>{let s=o[i],a=s?.handler?s.handler.toString():null;return{method:i,handler:a,middleware:s?.middleware?s.middleware.length:0,hasSchema:!!s?.schema,schemaKeys:s?.schema?Object.keys(s.schema).sort():[]}})})),r=JSON.stringify(t);return Rr.createHash("md5").update(r).digest("hex")}var Mr=M(require("os"),1);var He=M(require("fs/promises"),1),ee=M(require("path"),1);async function _r(e,t={}){let r=ee.isAbsolute(e)?e:ee.resolve(process.cwd(),e);console.log("Creating router with routes directory:",r);try{if(!(await He.stat(r)).isDirectory())throw new Error(`Route directory is not a directory: ${r}`)}catch(s){throw s.code==="ENOENT"?new Error(`Route directory not found: ${r}`):s}let n=[],o=t.ignore||["node_modules",".git"];async function i(s){let a=await He.readdir(s,{withFileTypes:!0});for(let c of a){let l=ee.join(s,c.name);c.isDirectory()&&o.includes(c.name)||(c.isDirectory()?await i(l):jo(c.name)&&n.push(l))}}return await i(r),n}function jo(e){return!e.startsWith("_")&&(e.endsWith(".ts")||e.endsWith(".js"))}async function Vo(e,t,r=Math.max(1,Math.floor(Mr.cpus().length/2))){let n=Wo(e,r),o=[];for(let i of n){let a=(await Promise.allSettled(i.map(c=>t(c)))).filter(c=>c.status==="fulfilled").map(c=>c.value);o.push(...a)}return o}async function Or(e){let t=await _r(e);return(await Vo(t,n=>me(n,e))).flat()}function Wo(e,t){let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}var q={fileChanges:0,totalReloadTime:0,averageReloadTime:0,slowReloads:[]};function Ar(e,t){let r=Date.now()-t;if(q.fileChanges++,q.totalReloadTime+=r,q.averageReloadTime=q.totalReloadTime/q.fileChanges,r>100&&(q.slowReloads.push({file:e,time:r}),q.slowReloads.length>10&&q.slowReloads.shift()),process.env.NODE_ENV==="development"){let n=r<50?"\u26A1":r<100?"\u{1F504}":"\u{1F40C}";console.log(`${n} Route reload: ${e} (${r}ms)`)}}function ct(e,t){return console.log(`Tracking performance for: ${t}`),async(...r)=>{let n=Date.now();try{let o=await e(...r);return Ar(t,n),o}catch(o){throw Ar(t,n),o}}}var lt=M(require("path"),1),Fr=require("chokidar");function ut(e,t={}){let r=t.debounceMs||16,n=new Map;function o(p,h){return(...x)=>{let T=n.get(h);T&&clearTimeout(T);let u=setTimeout(()=>{p(...x),n.delete(h)},r);n.set(h,u)}}let i=new Map;async function s(p){try{let h=i.get(p),x=await me(p,e,!1);if(!x||x.length===0||h&&!Cr(p,x))return;await me(p,e,!0);let T=lt.normalize(p);h?(i.set(p,x),t.onRouteChanged&&t.onRouteChanged(T,x)):(i.set(p,x),t.onRouteAdded&&t.onRouteAdded(T,x))}catch(h){console.log(`\u26A0\uFE0F Error processing file ${p}:`,h),c(h)}}function a(p){let h=lt.normalize(p),x=i.get(h);x&&x.length>0&&t.onRouteRemoved&&t.onRouteRemoved(h,x),i.delete(h)}function c(p){t.onError&&p instanceof Error?t.onError(p):console.error("\u26A0\uFE0F Route watcher error:",p)}let l=(0,Fr.watch)(e,{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:50,pollInterval:10},usePolling:!1,atomic:!0,followSymlinks:!1,depth:10,ignored:[/(^|[/\\])\../,/node_modules/,/\.git/,/\.DS_Store/,/Thumbs\.db/,/\.(test|spec)\.(ts|js)$/,/\.d\.ts$/,/\.map$/,/~$/,...t.ignore||[]]});return l.on("add",p=>{o(s,p)(p)}).on("change",p=>{o(s,p)(p)}).on("unlink",p=>{o(a,p)(p)}).on("error",c),{close:()=>(n.forEach(p=>clearTimeout(p)),n.clear(),l.close()),getRoutes:()=>{let p=[];for(let h of i.values())p.push(...h);return p},getRoutesByFile:()=>new Map(i)}}var Nr=require("zod");var kr=require("zod");function dt(e,t){return t instanceof kr.z.ZodObject?t.strict().parse(e):t.parse(e)}var Ir=require("zod");function pt(e,t){return t instanceof Ir.z.ZodObject?t.strict().parse(e):t.parse(e)}var zr=require("zod");function ft(e,t){return t instanceof zr.z.ZodObject?t.strict().parse(e):t.parse(e)}var Dr=require("zod");function mt(e,t){return t instanceof Dr.z.ZodObject?t.strict().parse(e):t.parse(e)}le();k();function gt(e,t=!1){return{name:"RequestValidator",execute:async(n,o)=>{if(e.params&&n.request.params)try{n.request.params=pt(n.request.params,e.params)}catch(i){let s=$e(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new _("Request validation failed",{fields:s,errorCount:a,section:"params"})}if(e.query&&n.request.query)try{n.request.query=ft(n.request.query,e.query)}catch(i){let s=$e(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new _("Request validation failed",{fields:s,errorCount:a,section:"query"})}if(e.body)try{n.request.body=dt(n.request.body,e.body)}catch(i){let s=$e(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new _("Request validation failed",{fields:s,errorCount:a,section:"body"})}await o()},debug:t}}function Qo(e){return e!==null&&typeof e=="object"&&"type"in e&&"status"in e&&"correlationId"in e&&"timestamp"in e}function ht(e,t=!1){return{name:"ResponseValidator",execute:async(n,o)=>{let i=n.response.json,s=!0;n.response.json=(a,c)=>{if(!s||Qo(a))return i.call(n.response,a,c);try{let l=mt(a,e);return i.call(n.response,l,c)}catch(l){throw s=!1,new H("Response validation failed",{validationError:$e(l),hint:"The handler returned data that does not match the response schema"})}};try{await o()}catch(a){throw s=!1,n.response.json=i,a}finally{n.response.json=i}},debug:t}}function $e(e){if(e instanceof Nr.z.ZodError){let t=new Map;for(let r of e.issues){let n=r.path.length>0?r.path.join("."):"root";t.has(n)||t.set(n,[]),t.get(n).push(r.message)}return Array.from(t.entries()).map(([r,n])=>({field:r,messages:n}))}return e instanceof Error?[{field:"unknown",messages:[e.message]}]:[{field:"unknown",messages:[String(e)]}]}async function yt(e,t,r){let n=[...t.middleware||[]];t.schema&&((t.schema.params||t.schema.query||t.schema.body)&&n.unshift(gt(t.schema)),t.schema.response&&n.push(ht(t.schema.response))),await V([...n])(e,async()=>{let i=await t.handler(e,r);!e.response.sent&&i!==void 0&&e.response.json(i)})}function Br(){return{routesByPath:new Map,routesByFile:new Map,pathToFile:new Map}}function j(e,t,r){console.log(`Updating routes from file: ${t}`);let n=e.routesByFile.get(t)||new Set,o=new Set(r.map(l=>l.path)),i=r.filter(l=>!n.has(l.path)),s=Array.from(n).filter(l=>!o.has(l)),c=r.filter(l=>n.has(l.path)).filter(l=>{let p=e.routesByPath.get(l.path);return!p||!Zo(p,l)});return Go(e,t,{added:i,removed:s,changed:c}),{added:i,removed:s,changed:c}}function Hr(e){return Array.from(e.routesByPath.values())}function Go(e,t,r){let{added:n,removed:o,changed:i}=r;o.forEach(a=>{e.routesByPath.delete(a),e.pathToFile.delete(a)}),[...n,...i].forEach(a=>{e.routesByPath.set(a.path,a),e.pathToFile.set(a.path,t)});let s=new Set([...n.map(a=>a.path),...i.map(a=>a.path),...Array.from(e.routesByFile.get(t)||[]).filter(a=>!o.includes(a))]);s.size>0?e.routesByFile.set(t,s):e.routesByFile.delete(t)}function Zo(e,t){if(e.path!==t.path)return!1;let r=Object.keys(e).filter(o=>o!=="path").sort(),n=Object.keys(t).filter(o=>o!=="path").sort();return r.length!==n.length?!1:r.every(o=>{let i=e[o],s=t[o];return typeof i==typeof s})}function St(e,t){Object.entries(e).forEach(([r,n])=>{r==="path"||!n||t.add(e.path,r,n)})}function ge(e,t){"remove"in t&&typeof t.remove=="function"?t.remove(e):console.warn("Matcher does not support selective removal, consider adding remove() method")}function $r(e,t){ge(e.path,t),St(e,t)}var Jo={routesDir:"./routes",basePath:"/",watchMode:process.env.NODE_ENV==="development"};function Lr(e){let t={...Jo,...e};e.basePath&&!e.basePath.startsWith("/")&&console.warn("Base path does nothing");let r=Br(),n=X(),o=!1,i=null,s=null,a=new Set([t.routesDir]);function c(u){console.log(`
41
+ \u{1F527} APPLYING MATCHER CHANGES:`),console.log(` Adding ${u.added.length} routes`),console.log(` Removing ${u.removed.length} routes`),console.log(` Updating ${u.changed.length} routes`),u.removed.forEach(f=>{console.log(` \u2796 Removing: ${f}`),ge(f,n)}),u.added.forEach(f=>{let g=Object.keys(f).filter(d=>d!=="path");console.log(` \u2795 Adding: ${f.path} [${g.join(", ")}]`),St(f,n)}),u.changed.forEach(f=>{let g=Object.keys(f).filter(d=>d!=="path");console.log(` \u{1F504} Updating: ${f.path} [${g.join(", ")}]`),$r(f,n)}),console.log(`\u2705 Matcher changes applied
42
+ `)}function l(u,f){try{let g=j(r,f,u);return c(g),g}catch(g){throw console.error(`\u26A0\uFE0F Route conflicts from ${f}:`,g),g}}async function p(u,f,g){try{let d=await Or(u),S=d.map(y=>g?{...y,path:`${g}${y.path}`}:y),v=l(S,f);console.log(`Loaded ${d.length} routes from ${f}${g?` with prefix ${g}`:""} (${v.added.length} added, ${v.changed.length} changed, ${v.removed.length} removed)`)}catch(d){throw console.error(`\u26A0\uFE0F Failed to load routes from ${f}:`,d),d}}async function h(){return o||i||(i=(async()=>{try{await Promise.all(Array.from(a).map(u=>p(u,u))),t.watchMode&&x(),o=!0}catch(u){throw console.error("\u26A0\uFE0F Failed to initialize router:",u),u}})()),i}function x(){s||(s=new Map);for(let u of a)if(!s.has(u)){let f=ut(u,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(g,d)=>{try{let S=j(r,g,d);c(S)}catch(S){console.error(`Error adding routes from ${u}:`,S)}},onRouteChanged:ct(async(g,d)=>{try{console.log(`Processing changes for ${g}`);let S=j(r,g,d);console.log(`Changes detected: ${S.added.length} added, ${S.changed.length} changed, ${S.removed.length} removed`),c(S),console.log(`Route changes applied: ${S.added.length} added, ${S.changed.length} changed, ${S.removed.length} removed`)}catch(S){console.error(`\u26A0\uFE0F Error updating routes from ${u}:`,S)}},u),onRouteRemoved:(g,d)=>{console.log(`File removed: ${g} with ${d.length} routes`);try{d.forEach(S=>{ge(S.path,n)}),at(g)}catch(S){console.error(`\u26A0\uFE0F Error removing routes from ${g}:`,S)}},onError:g=>{console.error(`\u26A0\uFE0F Route watcher error for ${u}:`,g)}});s.set(u,f)}}function T(u,f){s||(s=new Map);let g=ut(u,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(d,S)=>{try{let v=S.map(D=>f?{...D,path:`${f}${D.path}`}:D),y=j(r,d,v);c(y)}catch(v){console.error(`\u26A0\uFE0F Error adding routes from ${u}:`,v)}},onRouteChanged:ct(async(d,S)=>{try{let v=S.map(D=>f?{...D,path:`${f}${D.path}`}:D),y=j(r,d,v);c(y)}catch(v){console.error(`\u26A0\uFE0F Error updating routes from ${u}:`,v)}},u),onRouteRemoved:(d,S)=>{try{S.forEach(v=>{let y=f?`${f}${v.path}`:v.path;ge(y,n)}),at(d)}catch(v){console.error(`Error removing routes from ${d}:`,v)}},onError:d=>{console.error(`\u26A0\uFE0F Route watcher error for ${u}:`,d)}});return s.set(u,g),g}return h().catch(u=>{console.error("\u26A0\uFE0F Failed to initialize router on creation:",u)}),{async handleRequest(u){o||(console.log("\u{1F504} Router not initialized, initializing..."),await h());let{method:f,path:g}=u.request;console.log(`
43
+ \u{1F4E5} Handling request: ${f} ${g}`);let d=n.match(g,f);if(!d)throw console.log(`\u274C No match found for: ${f} ${g}`),new U("Not found");if(console.log(`\u2705 Route matched: ${f} ${g}`),console.log(` Params: ${JSON.stringify(d.params)}`),d.methodNotAllowed){u.response.status(405).json({error:"\u274C Method Not Allowed",allowed:d.allowedMethods}),d.allowedMethods&&d.allowedMethods.length>0&&u.response.header("Allow",d.allowedMethods.join(", "));return}u.request.params=d.params,await yt(u,d.route,d.params)},getRoutes(){return Hr(r)},addRoute(u){let f=j(r,"programmatic",[u]);c(f)},addRoutes(u){let f=j(r,"programmatic",u);return c(f),f},async addRouteDirectory(u,f={}){if(a.has(u)){console.warn(`Route directory ${u} already registered`);return}a.add(u),o&&(await p(u,u,f.prefix),t.watchMode&&T(u,f.prefix))},getRouteConflicts(){return[]},async close(){if(s){for(let u of s.values())await u.close();s.clear()}}}}b();var O={port:3e3,host:"localhost",routesDir:"./routes",http2:{enabled:!0},middleware:[],plugins:[],bodyLimits:{json:512*1024,form:1024*1024,text:5*1024*1024,raw:10*1024*1024,multipart:{maxFileSize:50*1024*1024,maxTotalSize:100*1024*1024,maxFiles:10,maxFieldSize:1024*1024}}};function Yo(e={}){let t={port:e.port??O.port,host:e.host??O.host,routesDir:e.routesDir??O.routesDir,http2:{enabled:e.http2?.enabled??O.http2.enabled,keyFile:e.http2?.keyFile,certFile:e.http2?.certFile},middleware:e.middleware??O.middleware,plugins:e.plugins??O.plugins,correlation:e.correlation,cors:e.cors,bodyLimits:e.bodyLimits?{json:e.bodyLimits.json??O.bodyLimits.json,form:e.bodyLimits.form??O.bodyLimits.form,text:e.bodyLimits.text??O.bodyLimits.text,raw:e.bodyLimits.raw??O.bodyLimits.raw,multipart:{maxFileSize:e.bodyLimits.multipart?.maxFileSize??O.bodyLimits.multipart.maxFileSize,maxTotalSize:e.bodyLimits.multipart?.maxTotalSize??O.bodyLimits.multipart.maxTotalSize,maxFiles:e.bodyLimits.multipart?.maxFiles??O.bodyLimits.multipart.maxFiles,maxFieldSize:e.bodyLimits.multipart?.maxFieldSize??O.bodyLimits.multipart.maxFieldSize}}:O.bodyLimits};try{let r=vr(t);return Bt({routesDir:r.routesDir}),r}catch(r){throw r instanceof Error?new Error(`Failed to create server: ${r.message}`):new Error(`Failed to create server: ${String(r)}`)}}function Ko(e){e.correlation&&bt(e.correlation.headerName,e.correlation.generator)}function Xo(e,t){return async()=>(Ko(t),await ei(e),await e.pluginManager.initializePlugins(e),await Sr(e,t),await e.pluginManager.onServerStart(e,e.server),ti(e),e)}async function ei(e){for(let t of e.plugins)await t.register(e)}function ti(e){let t=xr(()=>e.close());e._signalHandlers=t,e.events.emit("started")}function ri(e){return async t=>{if(!e.server)return;let r={...t};e._signalHandlers&&(e._signalHandlers.unregister(),delete e._signalHandlers),await wr(e,r)}}function ni(e){return t=>{let r=Array.isArray(t)?t:[t];return e.middleware.push(...r),e}}function oi(e){return async t=>{if(Array.isArray(t))for(let r of t)st(r),e.plugins.push(r),await r.register(e);else st(t),e.plugins.push(t),await t.register(e);return e}}function Le(e={}){let t=Yo(e),{port:r,host:n,middleware:o,plugins:i,cors:s,bodyLimits:a}=t,c=Array.isArray(o)?[...o]:[],l=Array.isArray(i)?[...i]:[],p=new Ur.AsyncLocalStorage,h=Lr({routesDir:t.routesDir,watchMode:process.env.NODE_ENV==="development"}),x=Er({debug:process.env.NODE_ENV==="development",continueOnError:!0}),T=new qr.default,u={server:null,port:r,host:n,context:p,events:T,plugins:[...l],middleware:[...c],corsOptions:s,bodyLimits:a,_signalHandlers:{unregister:()=>{}},use:()=>u,register:async()=>u,listen:async()=>u,close:async()=>{},router:h,pluginManager:x};return u.listen=Xo(u,t),u.close=ri(u),u.use=ni(u),u.register=oi(u),u}function wt(e){return{}}b();function ii(e){return typeof e=="object"&&e!==null&&"name"in e&&"execute"in e&&typeof e.name=="string"&&typeof e.execute=="function"}function si(e){return typeof e=="object"&&e!==null&&"name"in e&&"version"in e&&"register"in e&&typeof e.name=="string"&&typeof e.version=="string"&&typeof e.register=="function"}function ai(e){return e}function ci(e){return e}function li(...e){return e}function ui(...e){return e}C();k();C();b();var Ue=class extends w{constructor(t,r=void 0,n=void 0){super("UNAUTHORIZED",t,401,n??m(),r)}};C();b();var qe=class extends w{constructor(t,r=void 0,n=void 0){super("CONFLICT",t,409,n??m(),r)}};C();b();var je=class extends w{constructor(t,r=void 0,n=void 0){super("RATE_LIMITED",t,429,n??m(),r)}};le();ae();C();b();var Ve=class extends w{constructor(t,r,n){super("UPLOAD_TIMEOUT",t,408,n??m(),r)}};C();b();var We=class extends w{constructor(t,r,n){super("UNPROCESSABLE_ENTITY",t,422,n??m(),r)}};ce();C();b();var Qe=class extends w{constructor(t,r=void 0,n=void 0){super("SERVICE_UNAVAILABLE",t,503,n??m(),r)}};var jr="0.1.0",Vr={createServer:Le,inferContext:wt},Wr={createDeleteRoute:Oe,createGetRoute:Pe,createHeadRoute:Fe,createOptionsRoute:ke,createPatchRoute:Ae,createPostRoute:_e,createPutRoute:Me,createRouteFactory:et,createMatcher:X,extractParams:Z,compilePathPattern:K,paramsToQuery:ie,buildUrl:Ie},Qr={createMiddleware:$,createServiceMiddleware:xe,createStateMiddleware:we,compose:V,cors:ne},Gr={createPlugin:ve},di={createServer:Le,createMiddleware:$,createServiceMiddleware:xe,createStateMiddleware:we,createPlugin:ve,getCorrelationId:m,Server:Vr,Router:Wr,Middleware:Qr,Plugins:Gr,VERSION:jr};0&&(module.exports={Blaize,BlaizeError,ConflictError,ErrorSeverity,ErrorType,ForbiddenError,InternalServerError,MiddlewareAPI,NotFoundError,PayloadTooLargeError,PluginsAPI,RateLimitError,RequestTimeoutError,RouterAPI,ServerAPI,ServiceNotAvailableError,UnauthorizedError,UnprocessableEntityError,UnsupportedMediaTypeError,VERSION,ValidationError,asMiddlewareArray,asPluginArray,buildUrl,compilePathPattern,compose,cors,createDeleteRoute,createGetRoute,createHeadRoute,createMatcher,createMiddleware,createMiddlewareArray,createOptionsRoute,createPatchRoute,createPlugin,createPluginArray,createPostRoute,createPutRoute,createRouteFactory,createServer,createServiceMiddleware,createStateMiddleware,extractParams,getCorrelationId,inferContext,isMiddleware,isPlugin,paramsToQuery});
44
44
  //# sourceMappingURL=index.cjs.map