blaizejs 0.5.2 → 0.6.0

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-EB3TZGU4.js → chunk-5C4WI3A7.js} +3 -3
  2. package/dist/chunk-EOCNAQ76.js +11 -0
  3. package/dist/{chunk-DN5WHXRA.js.map → chunk-EOCNAQ76.js.map} +1 -1
  4. package/dist/{chunk-QYXAQD7H.js → chunk-GNLJMVOB.js} +3 -3
  5. package/dist/{chunk-RUCGYLJ6.js → chunk-WTCIDURS.js} +3 -3
  6. package/dist/{chunk-4QEX5ARZ.js → chunk-YE7LYWE6.js} +3 -3
  7. package/dist/index.cjs +14 -14
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +1663 -1467
  10. package/dist/index.d.ts +1663 -1467
  11. package/dist/index.js +14 -14
  12. package/dist/index.js.map +1 -1
  13. package/dist/{internal-server-error-I43ZDXIR.js → internal-server-error-MFDGHZTW.js} +3 -3
  14. package/dist/{payload-too-large-error-OQEOP3U2.js → payload-too-large-error-JESAYGED.js} +3 -3
  15. package/dist/{unsupported-media-type-error-7UF4VYIN.js → unsupported-media-type-error-ZDQCGXCO.js} +3 -3
  16. package/dist/{validation-error-ZPBPCFKL.js → validation-error-KGPRZ5X7.js} +3 -3
  17. package/package.json +2 -2
  18. package/dist/chunk-DN5WHXRA.js +0 -11
  19. /package/dist/{chunk-EB3TZGU4.js.map → chunk-5C4WI3A7.js.map} +0 -0
  20. /package/dist/{chunk-QYXAQD7H.js.map → chunk-GNLJMVOB.js.map} +0 -0
  21. /package/dist/{chunk-RUCGYLJ6.js.map → chunk-WTCIDURS.js.map} +0 -0
  22. /package/dist/{chunk-4QEX5ARZ.js.map → chunk-YE7LYWE6.js.map} +0 -0
  23. /package/dist/{internal-server-error-I43ZDXIR.js.map → internal-server-error-MFDGHZTW.js.map} +0 -0
  24. /package/dist/{payload-too-large-error-OQEOP3U2.js.map → payload-too-large-error-JESAYGED.js.map} +0 -0
  25. /package/dist/{unsupported-media-type-error-7UF4VYIN.js.map → unsupported-media-type-error-ZDQCGXCO.js.map} +0 -0
  26. /package/dist/{validation-error-ZPBPCFKL.js.map → validation-error-KGPRZ5X7.js.map} +0 -0
package/dist/index.js CHANGED
@@ -1,31 +1,31 @@
1
1
 
2
2
  /**
3
- * blaizejs v0.5.2
3
+ * blaizejs v0.6.0
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
- import{a as A}from"./chunk-EB3TZGU4.js";import{a as L}from"./chunk-RUCGYLJ6.js";import{a as ur}from"./chunk-QYXAQD7H.js";import{a as dr}from"./chunk-4QEX5ARZ.js";import{a as M,b as Ao,c as T,d as ko,e as tt,f as $,g as w,h as rt,i as re}from"./chunk-DN5WHXRA.js";function nt(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 I(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 nt(s,t,()=>{if(n.has(i))throw new Error("next() called multiple times");return n.add(i),o(i+1)})};return o(0)}}var j=class extends T{constructor(t,r=void 0,n=void 0){super("FORBIDDEN",t,403,n??w(),r)}};function D(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 ge(e){return D({name:"state-middleware",handler:e})}function Se(e){return D({name:"service-middleware",handler:e})}var pr={origin:!0,methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],credentials:!1,optionsSuccessStatus:204},fr={origin:!1,methods:["GET","HEAD"],credentials:!1,optionsSuccessStatus:204};function ot(e){return e===void 0&&(e=process.env.NODE_ENV!=="production"),e?{...pr}:{...fr}}function mr(e=6e4,t=1e3){let r=new Map,n={ttl:e,maxSize:t},o=(y,g,x)=>`${y}:${g}:${x||"anonymous"}`,i=()=>{if(r.size===0)return;let y=null,g=1/0;for(let[x,u]of r.entries())u.lastAccessed<g&&(g=u.lastAccessed,y=x);y&&r.delete(y)};return{get:(y,g,x)=>{let u=o(y,g,x),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:(y,g,x,u)=>{let f=o(y,x,u),m=Date.now();if(r.has(f)){r.set(f,{allowed:g,expiresAt:m+n.ttl,lastAccessed:m});return}r.size>=n.maxSize&&i(),r.set(f,{allowed:g,expiresAt:m+n.ttl,lastAccessed:m})},clear:()=>{r.clear()},cleanExpired:()=>{let y=Date.now(),g=0;for(let[x,u]of r.entries())y>u.expiresAt&&(r.delete(x),g++);return g},getStats:()=>({size:r.size,maxSize:n.maxSize,ttl:n.ttl})}}var it=mr();function yr(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 hr(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 gr(e,t){return t==="*"?!0:e===t}async function Sr(e,t){return t.test(e)}async function wr(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 st(e,t,r){let n=t.map(i=>we(e,i,r));return(await Promise.all(n)).some(i=>i===!0)}async function we(e,t,r){return typeof t=="string"?gr(e,t):t instanceof RegExp?Sr(e,t):typeof t=="function"?wr(e,t,r):(console.warn("Unknown CORS origin type:",typeof t),!1)}async function W(e,t,r){if(t===!0)return!0;if(t===!1)return!1;if(yr(t)){let o=r?.state?.user?.id||r?.state?.userId,i=hr(t),s=it.get(e,i,o);if(s!==null)return s;let a;return Array.isArray(t)?a=await st(e,t,r):a=await we(e,t,r),it.set(e,a,i,o),a}else return Array.isArray(t)?st(e,t,r):we(e,t,r)}function vr(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 ve(e){return e.toUpperCase()}function xr(e,t){return t?(typeof t=="string"?t.split(",").map(n=>n.trim()):t).map(n=>ve(n)).includes(ve(e)):["GET","HEAD","PUT","PATCH","POST","DELETE"].includes(ve(e))}function Tr(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 br(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=vr(e);if(!r.origin||!r.requestedMethod)throw e.response.status(403),new A("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 W(r.origin,t.origin||!1,e);if(!n)throw e.response.status(403),new A("CORS origin not allowed",{fields:[{field:"Origin",messages:[`Origin '${r.origin}' is not allowed`],rejectedValue:r.origin}],errorCount:1,section:"body"});if(!xr(r.requestedMethod,t.methods))throw e.response.status(403),new A("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(!Tr(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 A("CORS headers not allowed",{fields:[{field:"Access-Control-Request-Headers",messages:[`Headers not allowed: ${i?.join(", ")}`],rejectedValue:i}],errorCount:1,section:"body"})}br(e,t,r.origin,n);let o=t.optionsSuccessStatus||204;e.response.status(o),t.preflightContinue||e.response.text("")}function xe(e){return e.request.method==="OPTIONS"&&!!(e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"))}import{z as b}from"zod";var Er=b.enum(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]),Rr=b.union([b.array(Er),b.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),ct=b.union([b.array(b.string()),b.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),Cr=b.custom(e=>typeof e=="function"&&e.length<=2,{message:"Origin validator must be a function accepting (origin, ctx?) parameters"}),lt=b.union([b.string(),b.instanceof(RegExp),Cr]),Pr=b.union([b.boolean(),lt,b.array(lt)]),ut=b.object({origin:Pr.optional(),methods:Rr,allowedHeaders:ct,exposedHeaders:ct,credentials:b.boolean().optional(),maxAge:b.number().int().optional(),preflightContinue:b.boolean().optional(),optionsSuccessStatus:b.number().int().min(200).max(299).optional()}).strict(),dt=b.union([b.boolean(),ut]).optional();function pt(e){try{return typeof e=="boolean"?e===!1?{origin:!1}:{origin:!0}:ut.parse(e)}catch(t){if(t instanceof b.ZodError){let r=Mr(t);throw new Error(`Invalid CORS options:
11
- ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function Mr(e){return e.errors.map(r=>` - ${r.path.join(".")||"root"}: ${r.message}`).join(`
12
- `)}function Fr(e){return Array.isArray(e)}function ft(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(Fr(e.origin)&&e.origin.some(r=>r==="*"))throw new Error("CORS security violation: Cannot include wildcard origin (*) in array when credentials are enabled.")}}function mt(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 _r(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=ot(t),n=mt(e,r),o=pt(n);return ft(o),D({name:"cors",handler:async(i,s)=>{let a=i.request.header("origin")||i.request.header("Origin");if(xe(i)){if(await at(i,o),!o.preflightContinue)return}else{if(!a){await s();return}let c=await W(a,o.origin||!1,i);if(!c)throw i.response.status(403),new j("CORS validation failed",{reason:"origin_not_allowed",origin:a,allowedOrigins:o.origin});_r(i,o,a,c)}await s()},debug:process.env.DEBUG?.includes("cors")})}function Te(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}}import{fileURLToPath as Lr}from"node:url";var oe={};function yt(e){oe={...oe,...e}}function ht(){if(!oe.routesDir)throw new Error("Routes directory not configured. Make sure server is properly initialized.");return oe.routesDir}import*as gt from"node:path";function ie(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=gt.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 y=p.slice(1,-1);return a.push(y),`:${y}`}return p}),l=c.length>0?`/${c.join("/")}`:"/";return l.endsWith("/index")&&(l=l.slice(0,-6)||"/"),{filePath:e,routePath:l,params:a}}import{EventEmitter as $r}from"node:events";import{z as C}from"zod";var Ar=C.enum(["drop-oldest","drop-newest","close"]),kr=C.object({low:C.number().int().positive().describe("Resume threshold in messages"),high:C.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"]}),Or=C.object({maxMessages:C.number().int().positive().max(1e5).describe("Maximum number of messages in buffer"),maxBytes:C.number().int().positive().max(100*1024*1024).optional().describe("Maximum buffer size in bytes"),messageTimeout:C.number().int().nonnegative().max(3e5).optional().describe("Message TTL in milliseconds")}),St=C.object({enabled:C.boolean().default(!0).describe("Enable backpressure management"),strategy:Ar.default("drop-oldest").describe("Strategy when buffer reaches high watermark"),watermarks:kr.default({low:100,high:1e3}).describe("Buffer watermark thresholds"),limits:Or.default({maxMessages:1e4}).describe("Buffer size constraints"),metrics:C.object({enabled:C.boolean().default(!1),interval:C.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 zr={maxConnections:1e4,maxConnectionsPerClient:100,inactiveTimeout:18e5,cleanupInterval:6e4};function Br(e){let t={...zr,...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,h)=>{if(!d)return;let E=(n.get(d)||0)+h;E<=0?n.delete(d):n.set(d,E)},l=(d,h,S)=>{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(S?.clientIp&&(n.get(S.clientIp)||0)>=t.maxConnectionsPerClient)throw new Error(`Maximum connections per client reached (${t.maxConnectionsPerClient})`);let E=Date.now();r.set(d,{stream:h,connectedAt:E,lastActivity:E,clientIp:S?.clientIp,userAgent:S?.userAgent}),c(S?.clientIp,1),r.size===1&&s(i.cleanup),h.onClose(()=>{p(d)})},p=d=>{let h=r.get(d);h&&(r.delete(d),c(h.clientIp,-1),r.size===0&&a())},y=()=>r.size,g=()=>{let d=Date.now(),h=[];r.forEach((S,E)=>{let _=d-S.lastActivity>t.inactiveTimeout,lr=!S.stream||S.stream.state==="closed"||!S.stream.isWritable;if((_||lr)&&(h.push(E),S.stream&&typeof S.stream.close=="function"))try{S.stream.close()}catch{}}),h.forEach(S=>p(S))},x=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=y,i.cleanup=g,i.get=x,i.has=u,i.getIds=f,i.shutdown=m,i}var be=null;function se(e){return be||(be=Br(e)),be}var V=class extends T{constructor(t,r,n=void 0){super("SSE_BUFFER_OVERFLOW",t,503,n??w(),r)}};var ae=class extends T{constructor(t,r=void 0,n=void 0){super("SSE_STREAM_CLOSED",t,410,n??w(),r)}};var Dr={heartbeatInterval:3e4,maxEventSize:1024*1024,autoClose:!0,maxBufferSize:1e3,bufferStrategy:"drop-oldest"};function wt(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
+ import{a as C}from"./chunk-5C4WI3A7.js";import{a as D}from"./chunk-GNLJMVOB.js";import{a as oe}from"./chunk-YE7LYWE6.js";import{a as j}from"./chunk-WTCIDURS.js";import{a as F,b as Ao,c as T,d as rt,e as $,f as y,g as nt,h as ne}from"./chunk-EOCNAQ76.js";function ot(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 q(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 ot(s,t,()=>{if(n.has(i))throw new Error("next() called multiple times");return n.add(i),o(i+1)})};return o(0)}}var W=class extends T{constructor(t,r=void 0,n=void 0){super("FORBIDDEN",t,403,n??y(),r)}};function N(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 Se(e){return N({name:"state-middleware",handler:e})}function we(e){return N({name:"service-middleware",handler:e})}var dr={origin:!0,methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],credentials:!1,optionsSuccessStatus:204},pr={origin:!1,methods:["GET","HEAD"],credentials:!1,optionsSuccessStatus:204};function it(e){return e===void 0&&(e=process.env.NODE_ENV!=="production"),e?{...dr}:{...pr}}function fr(e=6e4,t=1e3){let r=new Map,n={ttl:e,maxSize:t},o=(h,S,x)=>`${h}:${S}:${x||"anonymous"}`,i=()=>{if(r.size===0)return;let h=null,S=1/0;for(let[x,u]of r.entries())u.lastAccessed<S&&(S=u.lastAccessed,h=x);h&&r.delete(h)};return{get:(h,S,x)=>{let u=o(h,S,x),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:(h,S,x,u)=>{let f=o(h,x,u),m=Date.now();if(r.has(f)){r.set(f,{allowed:S,expiresAt:m+n.ttl,lastAccessed:m});return}r.size>=n.maxSize&&i(),r.set(f,{allowed:S,expiresAt:m+n.ttl,lastAccessed:m})},clear:()=>{r.clear()},cleanExpired:()=>{let h=Date.now(),S=0;for(let[x,u]of r.entries())h>u.expiresAt&&(r.delete(x),S++);return S},getStats:()=>({size:r.size,maxSize:n.maxSize,ttl:n.ttl})}}var st=fr();function mr(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 hr(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 gr(e,t){return t==="*"?!0:e===t}async function yr(e,t){return t.test(e)}async function Sr(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 at(e,t,r){let n=t.map(i=>ve(e,i,r));return(await Promise.all(n)).some(i=>i===!0)}async function ve(e,t,r){return typeof t=="string"?gr(e,t):t instanceof RegExp?yr(e,t):typeof t=="function"?Sr(e,t,r):(console.warn("Unknown CORS origin type:",typeof t),!1)}async function V(e,t,r){if(t===!0)return!0;if(t===!1)return!1;if(mr(t)){let o=r?.state?.user?.id||r?.state?.userId,i=hr(t),s=st.get(e,i,o);if(s!==null)return s;let a;return Array.isArray(t)?a=await at(e,t,r):a=await ve(e,t,r),st.set(e,a,i,o),a}else return Array.isArray(t)?at(e,t,r):ve(e,t,r)}function wr(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 xe(e){return e.toUpperCase()}function vr(e,t){return t?(typeof t=="string"?t.split(",").map(n=>n.trim()):t).map(n=>xe(n)).includes(xe(e)):["GET","HEAD","PUT","PATCH","POST","DELETE"].includes(xe(e))}function xr(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 Tr(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 ct(e,t){let r=wr(e);if(!r.origin||!r.requestedMethod)throw e.response.status(403),new C("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 V(r.origin,t.origin||!1,e);if(!n)throw e.response.status(403),new C("CORS origin not allowed",{fields:[{field:"Origin",messages:[`Origin '${r.origin}' is not allowed`],rejectedValue:r.origin}],errorCount:1,section:"body"});if(!vr(r.requestedMethod,t.methods))throw e.response.status(403),new C("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(!xr(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 C("CORS headers not allowed",{fields:[{field:"Access-Control-Request-Headers",messages:[`Headers not allowed: ${i?.join(", ")}`],rejectedValue:i}],errorCount:1,section:"body"})}Tr(e,t,r.origin,n);let o=t.optionsSuccessStatus||204;e.response.status(o),t.preflightContinue||e.response.text("")}function Te(e){return e.request.method==="OPTIONS"&&!!(e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"))}import{z as b}from"zod";var br=b.enum(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]),Er=b.union([b.array(br),b.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),lt=b.union([b.array(b.string()),b.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),Rr=b.custom(e=>typeof e=="function"&&e.length<=2,{message:"Origin validator must be a function accepting (origin, ctx?) parameters"}),ut=b.union([b.string(),b.instanceof(RegExp),Rr]),Cr=b.union([b.boolean(),ut,b.array(ut)]),dt=b.object({origin:Cr.optional(),methods:Er,allowedHeaders:lt,exposedHeaders:lt,credentials:b.boolean().optional(),maxAge:b.number().int().optional(),preflightContinue:b.boolean().optional(),optionsSuccessStatus:b.number().int().min(200).max(299).optional()}).strict(),pt=b.union([b.boolean(),dt]).optional();function ft(e){try{return typeof e=="boolean"?e===!1?{origin:!1}:{origin:!0}:dt.parse(e)}catch(t){if(t instanceof b.ZodError){let r=Pr(t);throw new Error(`Invalid CORS options:
11
+ ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function Pr(e){return e.errors.map(r=>` - ${r.path.join(".")||"root"}: ${r.message}`).join(`
12
+ `)}function Mr(e){return Array.isArray(e)}function mt(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(Mr(e.origin)&&e.origin.some(r=>r==="*"))throw new Error("CORS security violation: Cannot include wildcard origin (*) in array when credentials are enabled.")}}function ht(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 Fr(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 ie(e){let t=process.env.NODE_ENV==="development",r=it(t),n=ht(e,r),o=ft(n);return mt(o),N({name:"cors",handler:async(i,s)=>{let a=i.request.header("origin")||i.request.header("Origin");if(Te(i)){if(await ct(i,o),!o.preflightContinue)return}else{if(!a){await s();return}let c=await V(a,o.origin||!1,i);if(!c)throw i.response.status(403),new W("CORS validation failed",{reason:"origin_not_allowed",origin:a,allowedOrigins:o.origin});Fr(i,o,a,c)}await s()},debug:process.env.DEBUG?.includes("cors")})}function be(e){if(!e.name||typeof e.name!="string")throw new Error("Plugin name must be a non-empty string");if(!e.version||typeof e.version!="string")throw new Error("Plugin version must be a non-empty string");if(typeof e.setup!="function")throw new Error("Plugin setup must be a function");return function(r){let n={...e.defaultConfig||{},...r||{}},o=e.setup(n);if(o===null||typeof o!="object")throw new Error(`Plugin "${e.name}" setup() must return an object with lifecycle hooks`);return{name:e.name,version:e.version,register:o.register||(async()=>{}),initialize:o.initialize,onServerStart:o.onServerStart,onServerStop:o.onServerStop,terminate:o.terminate}}}import{fileURLToPath as Ur}from"node:url";var se={};function gt(e){se={...se,...e}}function yt(){if(!se.routesDir)throw new Error("Routes directory not configured. Make sure server is properly initialized.");return se.routesDir}import*as St from"node:path";function ae(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=St.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}}import{EventEmitter as Br}from"node:events";import{z as P}from"zod";var _r=P.enum(["drop-oldest","drop-newest","close"]),Ar=P.object({low:P.number().int().positive().describe("Resume threshold in messages"),high:P.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"]}),Or=P.object({maxMessages:P.number().int().positive().max(1e5).describe("Maximum number of messages in buffer"),maxBytes:P.number().int().positive().max(100*1024*1024).optional().describe("Maximum buffer size in bytes"),messageTimeout:P.number().int().nonnegative().max(3e5).optional().describe("Message TTL in milliseconds")}),wt=P.object({enabled:P.boolean().default(!0).describe("Enable backpressure management"),strategy:_r.default("drop-oldest").describe("Strategy when buffer reaches high watermark"),watermarks:Ar.default({low:100,high:1e3}).describe("Buffer watermark thresholds"),limits:Or.default({maxMessages:1e4}).describe("Buffer size constraints"),metrics:P.object({enabled:P.boolean().default(!1),interval:P.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 kr={maxConnections:1e4,maxConnectionsPerClient:100,inactiveTimeout:18e5,cleanupInterval:6e4};function zr(e){let t={...kr,...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,g)=>{if(!d)return;let E=(n.get(d)||0)+g;E<=0?n.delete(d):n.set(d,E)},l=(d,g,w)=>{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(w?.clientIp&&(n.get(w.clientIp)||0)>=t.maxConnectionsPerClient)throw new Error(`Maximum connections per client reached (${t.maxConnectionsPerClient})`);let E=Date.now();r.set(d,{stream:g,connectedAt:E,lastActivity:E,clientIp:w?.clientIp,userAgent:w?.userAgent}),c(w?.clientIp,1),r.size===1&&s(i.cleanup),g.onClose(()=>{p(d)})},p=d=>{let g=r.get(d);g&&(r.delete(d),c(g.clientIp,-1),r.size===0&&a())},h=()=>r.size,S=()=>{let d=Date.now(),g=[];r.forEach((w,E)=>{let A=d-w.lastActivity>t.inactiveTimeout,ur=!w.stream||w.stream.state==="closed"||!w.stream.isWritable;if((A||ur)&&(g.push(E),w.stream&&typeof w.stream.close=="function"))try{w.stream.close()}catch{}}),g.forEach(w=>p(w))},x=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=h,i.cleanup=S,i.get=x,i.has=u,i.getIds=f,i.shutdown=m,i}var Ee=null;function ce(e){return Ee||(Ee=zr(e)),Ee}var Q=class extends T{constructor(t,r,n=void 0){super("SSE_BUFFER_OVERFLOW",t,503,n??y(),r)}};var le=class extends T{constructor(t,r=void 0,n=void 0){super("SSE_STREAM_CLOSED",t,410,n??y(),r)}};var $r={heartbeatInterval:3e4,maxEventSize:1024*1024,autoClose:!0,maxBufferSize:1e3,bufferStrategy:"drop-oldest"};function vt(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 Hr(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`${e}-${t}`}function Nr(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 Ir(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 Ee=class{id;_state="connecting";_buffer=[];_closeCallbacks=[];_errorCallbacks=[];_emitter=new $r;_metrics;_options;_response;_request;_writable=!0;_cleanupExecuted=!1;_eventCounter=0;_lastEventId=null;_heartbeatTimer;_backpressureConfig;_disconnectHandlers=null;constructor(t,r={}){if(this.id=`sse-${Hr()}`,this._options={...Dr,...r},this._response=t.response,this._request=t.request,r.backpressure){let o=St.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=se(),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 Dr(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`${e}-${t}`}function Nr(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 Ir(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 Re=class{id;_state="connecting";_buffer=[];_closeCallbacks=[];_errorCallbacks=[];_emitter=new Br;_metrics;_options;_response;_request;_writable=!0;_cleanupExecuted=!1;_eventCounter=0;_lastEventId=null;_heartbeatTimer;_backpressureConfig;_disconnectHandlers=null;constructor(t,r={}){if(this.id=`sse-${Dr()}`,this._options={...$r,...r},this._response=t.response,this._request=t.request,r.backpressure){let o=wt.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=ce(),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=se(),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=wt(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{se().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 ae("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=w(),i=Nr(t,r),s=this._options.maxEventSize;if(i>s)throw new V("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 V("Buffer overflow - stream closed",{currentSize:p,maxSize:c,strategy:"close",clientId:this.id})}let l=Ir(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:w(),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=wt("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=ce(),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=vt(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{ce().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 le("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=Nr(t,r),s=this._options.maxEventSize;if(i>s)throw new Q("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 Q("Buffer overflow - stream closed",{currentSize:p,maxSize:c,strategy:"close",clientId:this.id})}let l=Ir(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=vt("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 Ee(e,t)}var ce=class extends T{constructor(t,r,n){super("SSE_NOT_ACCEPTABLE",t,406,n||w(),r)}};function qr(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 Ur(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 xt=()=>e=>{qr(e);let t=k();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=vt(n,e.options),a=e.schema?.events&&typeof e.schema.events=="object"&&!e.schema.events._def?Ur(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 jr(){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://")?Lr(n):n}finally{Error.prepareStackTrace=e}}function k(){let e=jr(),t=ht(),r=ie(e,t);return console.log(`\u{1F50E} Parsed route path: ${r.routePath} from file: ${e}`),r.routePath}var Re=()=>e=>{H("GET",e);let t=k();return{GET:e,path:t}},Ce=()=>e=>{H("POST",e);let t=k();return{POST:e,path:t}},Pe=()=>e=>{H("PUT",e);let t=k();return{PUT:e,path:t}},Me=()=>e=>{H("DELETE",e);let t=k();return{DELETE:e,path:t}},Fe=()=>e=>{H("PATCH",e);let t=k();return{PATCH:e,path:t}},_e=()=>e=>{H("HEAD",e);let t=k();return{HEAD:e,path:t}},Ae=()=>e=>{H("OPTIONS",e);let t=k();return{OPTIONS:e,path:t}};function H(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&&Wr(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 Wr(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:Re(),post:Ce(),put:Pe(),delete:Me(),patch:Fe(),head:_e(),options:Ae(),sse:xt()}}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 Q(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 le(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 ke(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=le(o);return s+a}function G(){let e=[];return{add(t,r,n){let{pattern:o,paramNames:i}=Q(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)}))}}}import{AsyncLocalStorage as ho}from"node:async_hooks";import go from"node:events";import*as ze from"node:fs";import*as Ut from"node:http";import*as Lt from"node:http2";import*as O from"node:fs";import*as ue from"node:path";import*as bt from"selfsigned";async function Et(){let e=ue.join(process.cwd(),".blaizejs","certs"),t=ue.join(e,"dev.key"),r=ue.join(e,"dev.cert");if(O.existsSync(t)&&O.existsSync(r))return{keyFile:t,certFile:r};O.existsSync(e)||O.mkdirSync(e,{recursive:!0});let i=bt.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 O.writeFileSync(t,Buffer.from(i.private,"utf-8")),O.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 xt(e,t){return new Re(e,t)}var ue=class extends T{constructor(t,r,n){super("SSE_NOT_ACCEPTABLE",t,406,n||y(),r)}};function Hr(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 qr(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 Tt=()=>e=>{Hr(e);let t=O();return{GET:{handler:async(n,o)=>{let i=n.request.header("accept");if(i&&!i.includes("text/event-stream")&&!i.includes("*/*"))throw new ue("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=xt(n,e.options),a=e.schema?.events&&typeof e.schema.events=="object"&&!e.schema.events._def?qr(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 Lr(){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://")?Ur(n):n}finally{Error.prepareStackTrace=e}}function O(){let e=Lr(),t=yt(),r=ae(e,t);return console.log(`\u{1F50E} Parsed route path: ${r.routePath} from file: ${e}`),r.routePath}var Ce=()=>e=>{I("GET",e);let t=O();return{GET:e,path:t}},Pe=()=>e=>{I("POST",e);let t=O();return{POST:e,path:t}},Me=()=>e=>{I("PUT",e);let t=O();return{PUT:e,path:t}},Fe=()=>e=>{I("DELETE",e);let t=O();return{DELETE:e,path:t}},_e=()=>e=>{I("PATCH",e);let t=O();return{PATCH:e,path:t}},Ae=()=>e=>{I("HEAD",e);let t=O();return{HEAD:e,path:t}},Oe=()=>e=>{I("OPTIONS",e);let t=O();return{OPTIONS:e,path:t}};function I(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&&jr(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 jr(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 bt(){return{get:Ce(),post:Pe(),put:Me(),delete:Fe(),patch:_e(),head:Ae(),options:Oe(),sse:Tt()}}function U(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 G(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 de(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 ke(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=de(o);return s+a}function Z(){let e=[];return{add(t,r,n){let{pattern:o,paramNames:i}=G(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=U(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:U(t,r.pattern,r.paramNames)}))}}}import{AsyncLocalStorage as go}from"node:async_hooks";import yo from"node:events";import*as Be from"node:fs";import*as Lt from"node:http";import*as jt from"node:http2";import*as k from"node:fs";import*as pe from"node:path";import*as Et from"selfsigned";async function Rt(){let e=pe.join(process.cwd(),".blaizejs","certs"),t=pe.join(e,"dev.key"),r=pe.join(e,"dev.cert");if(k.existsSync(t)&&k.existsSync(r))return{keyFile:t,certFile:r};k.existsSync(e)||k.mkdirSync(e,{recursive:!0});let i=Et.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 k.writeFileSync(t,Buffer.from(i.private,"utf-8")),k.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 P=class extends Error{constructor(t="\u274C Response has already been sent"){super(t),this.name="ResponseSentError"}},Z=class extends P{constructor(t="Cannot set header after response has been sent"){super(t)}},de=class extends P{constructor(t="Cannot set content type after response has been sent"){super(t)}},pe=class extends P{constructor(t="Invalide URL"){super(t)}};import{AsyncLocalStorage as Vr}from"node:async_hooks";var Qr=new Vr;function Rt(e,t){return Qr.run(e,t)}import*as At from"node:crypto";import{createWriteStream as Kr}from"node:fs";import{tmpdir as Xr}from"node:os";import{join as en}from"node:path";import{Readable as _t}from"node:stream";var Gr=/boundary=([^;]+)/i,Zr=/Content-Disposition:\s*form-data;\s*name="([^"]+)"(?:;[\s\r\n]*filename="([^"]*)")?/i,Jr=/Content-Type:\s*([^\r\n]+)/i,Yr=/multipart\/form-data/i;function Ct(e){let t=e.match(Gr);if(!t||!t[1])return null;let r=t[1].trim();return r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1)),r||null}function Pt(e){let t=e.match(Zr);return!t||!t[1]?null:{name:t[1],filename:t[2]!==void 0?t[2]:void 0}}function Mt(e){let t=e.match(Jr);return t&&t[1]?.trim()?t[1].trim():"application/octet-stream"}function Ft(e){return Yr.test(e)}var tn={maxFileSize:10*1024*1024,maxFiles:10,maxFieldSize:1*1024*1024,allowedMimeTypes:[],allowedExtensions:[],strategy:"stream",tempDir:Xr(),computeHash:!1};function rn(e,t={}){return{boundary:Buffer.from(`--${e}`),options:{...tn,...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 nn(e,t){let r=Buffer.concat([e.buffer,t]),n={...e,buffer:r};for(;n.buffer.length>0&&!n.isFinished;){let o=await on(n);if(o===n)break;n=o}return n}async function on(e){switch(e.stage){case"boundary":return sn(e);case"headers":return an(e);case"content":return cn(e);default:{let{InternalServerError:t}=await import("./internal-server-error-I43ZDXIR.js");throw new t("Invalid parser stage",{operation:e.stage})}}}function sn(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 an(e){let t=e.buffer.indexOf(`\r
25
+ `),{keyFile:t,certFile:r}}var M=class extends Error{constructor(t="\u274C Response has already been sent"){super(t),this.name="ResponseSentError"}},J=class extends M{constructor(t="Cannot set header after response has been sent"){super(t)}},fe=class extends M{constructor(t="Cannot set content type after response has been sent"){super(t)}},me=class extends M{constructor(t="Invalide URL"){super(t)}};import{AsyncLocalStorage as Wr}from"node:async_hooks";var Vr=new Wr;function Ct(e,t){return Vr.run(e,t)}import*as Ot from"node:crypto";import{createWriteStream as Yr}from"node:fs";import{tmpdir as Kr}from"node:os";import{join as Xr}from"node:path";import{Readable as At}from"node:stream";var Qr=/boundary=([^;]+)/i,Gr=/Content-Disposition:\s*form-data;\s*name="([^"]+)"(?:;[\s\r\n]*filename="([^"]*)")?/i,Zr=/Content-Type:\s*([^\r\n]+)/i,Jr=/multipart\/form-data/i;function Pt(e){let t=e.match(Qr);if(!t||!t[1])return null;let r=t[1].trim();return r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1)),r||null}function Mt(e){let t=e.match(Gr);return!t||!t[1]?null:{name:t[1],filename:t[2]!==void 0?t[2]:void 0}}function Ft(e){let t=e.match(Zr);return t&&t[1]?.trim()?t[1].trim():"application/octet-stream"}function _t(e){return Jr.test(e)}var en={maxFileSize:10*1024*1024,maxFiles:10,maxFieldSize:1*1024*1024,allowedMimeTypes:[],allowedExtensions:[],strategy:"stream",tempDir:Kr(),computeHash:!1};function tn(e,t={}){return{boundary:Buffer.from(`--${e}`),options:{...en,...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 rn(e,t){let r=Buffer.concat([e.buffer,t]),n={...e,buffer:r};for(;n.buffer.length>0&&!n.isFinished;){let o=await nn(n);if(o===n)break;n=o}return n}async function nn(e){switch(e.stage){case"boundary":return on(e);case"headers":return sn(e);case"content":return an(e);default:{let{InternalServerError:t}=await import("./internal-server-error-MFDGHZTW.js");throw new t("Invalid parser stage",{operation:e.stage})}}}function on(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 sn(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=Pt(r);if(!o){let{ValidationError:a}=await import("./validation-error-ZPBPCFKL.js");throw new a("Missing or invalid Content-Disposition header")}let i=Mt(r),s=o.filename!==void 0;if(s&&e.fileCount>=e.options.maxFiles){let{PayloadTooLargeError:a}=await import("./payload-too-large-error-OQEOP3U2.js");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 import("./unsupported-media-type-error-7UF4VYIN.js");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 cn(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 ln(i,r)),n&&(i=await pn(i),i={...i,stage:"boundary",hasProcessedAnyPart:!0}),i}async function ln(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 import("./payload-too-large-error-OQEOP3U2.js"),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?un(e,t,r):{...e,currentContentLength:r,currentBufferChunks:[...e.currentBufferChunks,t]}}async function un(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 gn(e.currentWriteStream,t),{...e,currentContentLength:r};default:{let{ValidationError:n}=await import("./validation-error-ZPBPCFKL.js");throw new n("Invalid parsing strategy")}}}async function dn(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=en(e.options.tempDir,`upload-${At.randomUUID()}`),r=Kr(t),n=async()=>{try{let{unlink:o}=await import("node: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 import("./validation-error-ZPBPCFKL.js");throw new t("Invalid file processing strategy")}}}async function pn(e){return e.currentField?e.currentFilename!==void 0?fn(e):mn(e):J(e)}async function fn(e){if(!e.currentField||e.currentFilename===void 0)return J(e);let t,r,n;switch(e.options.strategy){case"memory":r=Buffer.concat(e.currentBufferChunks),t=_t.from(r);break;case"stream":e.streamController&&e.streamController.close(),t=e.currentStream;break;case"temp":e.currentWriteStream&&await Ot(e.currentWriteStream),n=e.currentTempPath,t=_t.from(Buffer.alloc(0));break;default:{let{ValidationError:s}=await import("./validation-error-ZPBPCFKL.js");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=kt(e.files,e.currentField,o);return{...J(e),files:i}}function mn(e){if(!e.currentField)return J(e);let t=Buffer.concat(e.currentBufferChunks).toString("utf8"),r=kt(e.fields,e.currentField,t);return{...J(e),fields:r}}function J(e){return{...e,currentField:null,currentFilename:void 0,currentContentLength:0,currentBufferChunks:[],currentStream:null,streamController:null,currentTempPath:null,currentWriteStream:null}}function kt(e,t,r){let n=new Map(e),o=n.get(t)||[];return n.set(t,[...o,r]),n}async function yn(e){if(!e.hasFoundValidBoundary){let{ValidationError:n}=await import("./validation-error-ZPBPCFKL.js");throw new n("No valid multipart boundary found")}if(e.hasFoundValidBoundary&&!e.hasProcessedAnyPart){let{ValidationError:n}=await import("./validation-error-ZPBPCFKL.js");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 hn(e){await Promise.allSettled(e.cleanupTasks.map(t=>t())),e.streamController&&e.streamController.close(),e.currentWriteStream&&await Ot(e.currentWriteStream)}async function gn(e,t){return new Promise((r,n)=>{e.write(t,o=>{o?n(o):r()})})}async function Ot(e){return new Promise(t=>{e.end(()=>t())})}async function zt(e,t={}){let r=e.headers["content-type"]||"",n=Ct(r);if(!n){let{UnsupportedMediaTypeError:i}=await import("./unsupported-media-type-error-7UF4VYIN.js");throw new i("Missing boundary in multipart content-type",{receivedContentType:r,expectedFormat:"multipart/form-data; boundary=..."})}let o=rn(n,t);o.currentFilename!==void 0&&(o=await dn(o));try{for await(let i of e)o=await nn(o,i);return yn(o)}finally{await hn(o)}}var Y="Content-Type";function Sn(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 pe(`Invalid URL: ${o}`)}}function wn(e){return"stream"in e||"httpVersionMajor"in e&&e.httpVersionMajor===2}function vn(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 Bt(e,t,r){let{path:n,url:o,query:i}=Sn(e),s=e.method||"GET",a=wn(e),c=vn(e),l={},p={...r.initialState||{}},y={...r.initialServices||{}},g={sent:!1},x={request:xn(e,{path:n,url:o,query:i,params:l,method:s,isHttp2:a,protocol:c}),response:{},state:p,services:y};return x.response=bn(t,g,x),r.parseBody&&await On(e,x,r),x}function xn(e,t){return{raw:e,...t,header:$t(e),headers:Tn(e),body:void 0}}function $t(e){return t=>{let r=e.headers[t.toLowerCase()];return Array.isArray(r)?r.join(", "):r||void 0}}function Tn(e){let t=$t(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 K(e,t){if(t.correlationId){let r=$(),n=String(t.correlationId);e.setHeader(r,n)}}function bn(e,t,r){return{raw:e,get statusCode(){return e.statusCode||200},get sent(){return t.sent},status:En(e,t,r),header:Rn(e,t,r),headers:Cn(e,t,r),type:Pn(e,t,r),json:Mn(e,t,r.state),text:Fn(e,t,r.state),html:_n(e,t,r.state),redirect:An(e,t,r.state),stream:kn(e,t,r.state)}}function En(e,t,r){return function(o){if(t.sent)throw new P;return e.statusCode=o,r.response}}function Rn(e,t,r){return function(o,i){if(t.sent)throw new Z;return e.setHeader(o,i),r.response}}function Cn(e,t,r){return function(o){if(t.sent)throw new Z;for(let[i,s]of Object.entries(o))e.setHeader(i,s);return r.response}}function Pn(e,t,r){return function(o){if(t.sent)throw new de;return e.setHeader(Y,o),r.response}}function Mn(e,t,r){return function(o,i){if(t.sent)throw new P;i!==void 0&&(e.statusCode=i),K(e,r),e.setHeader(Y,"application/json"),e.end(JSON.stringify(o)),t.sent=!0}}function Fn(e,t,r){return function(o,i){if(t.sent)throw new P;i!==void 0&&(e.statusCode=i),K(e,r),e.setHeader(Y,"text/plain"),e.end(o),t.sent=!0}}function _n(e,t,r){return function(o,i){if(t.sent)throw new P;i!==void 0&&(e.statusCode=i),K(e,r),e.setHeader(Y,"text/html"),e.end(o),t.sent=!0}}function An(e,t,r){return function(o,i=302){if(t.sent)throw new P;K(e,r),e.statusCode=i,e.setHeader("Location",o),e.end(),t.sent=!0}}function kn(e,t,r){return function(o,i={}){if(t.sent)throw new P;if(i.status!==void 0&&(e.statusCode=i.status),K(e,r),i.contentType&&e.setHeader(Y,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 On(e,t,r){if(zn(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;try{if(n.includes("application/json")){if(o>i.json)throw new Error(`JSON body too large: ${o} > ${i.json} bytes`);await Bn(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 $n(e,t)}else if(n.includes("text/")){if(o>i.text)throw new Error(`Text body too large: ${o} > ${i.text} bytes`);await Hn(e,t)}else if(Ft(n))await Nn(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";fe(t,a,"Error reading request body",s)}}function zn(e){return["GET","HEAD","OPTIONS"].includes(e||"GET")}async function Bn(e,t){let r=await Oe(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,fe(t,"json_parse_error","Invalid JSON in request body",n)}}async function $n(e,t){let r=await Oe(e);if(r)try{t.request.body=Dn(r)}catch(n){t.request.body=null,fe(t,"form_parse_error","Invalid form data in request body",n)}}function Dn(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 Hn(e,t){let r=await Oe(e);r&&(t.request.body=r)}async function Nn(e,t,r){try{let n=r,o=await zt(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,fe(t,"multipart_parse_error","Failed to parse multipart data",n)}}function fe(e,t,r,n){let o={type:t,message:r,error:n};e.state._bodyError=o}async function Oe(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)})})}var N=class extends T{constructor(t,r=void 0,n=void 0){super("NOT_FOUND",t,404,n??w(),r)}};function In(e){return e instanceof T}function Dt(e){if(In(e))return{type:e.type,title:e.title,status:e.status,correlationId:e.correlationId,timestamp:e.timestamp.toISOString(),details:e.details};let t=w(),r;e instanceof Error?r=e.message:e==null?r="Unknown error occurred":r=String(e);let n=new L("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 Ht(e){let t=$(),r={[t]:e(t)};return re(r)}function Nt(e,t){let r=$();e(r,t)}function It(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=Ht(n.request.header),a=Dt(i);a.correlationId=s,Nt(n.response.header,s),n.response.status(a.status).json(a)}},debug:t}}function qt(e){return async(t,r)=>{let n=re(t.headers);try{await rt(n,async()=>{let o=await Bt(t,r,{parseBody:!0,initialState:{correlationId:n},bodyLimits:e.bodyLimits}),s=[It()];"corsOptions"in e&&e.corsOptions!==!1&&s.push(ne(e.corsOptions)),s.push(...e.middleware);let a=I(s);await Rt(o,async()=>{await a(o,async()=>{if(!o.response.sent&&(await e.router.handleRequest(o),!r.headersSent&&!o.response.sent))throw new N(`Route not found: ${o.request.method} ${o.request.path}`)})})})}catch(o){console.error("Error creating context:",o);let i=$();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 qn(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 Et();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 Un(e,t){if(!e)return Ut.createServer();let r={allowHTTP1:!0};try{t.keyFile&&(r.key=ze.readFileSync(t.keyFile)),t.certFile&&(r.cert=ze.readFileSync(t.certFile))}catch(n){throw new Error(`Failed to read certificate files: ${n instanceof Error?n.message:String(n)}`)}return Lt.createSecureServer(r)}function Ln(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=Mt(r);if(!o){let{ValidationError:a}=await import("./validation-error-KGPRZ5X7.js");throw new a("Missing or invalid Content-Disposition header")}let i=Ft(r),s=o.filename!==void 0;if(s&&e.fileCount>=e.options.maxFiles){let{PayloadTooLargeError:a}=await import("./payload-too-large-error-JESAYGED.js");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 import("./unsupported-media-type-error-ZDQCGXCO.js");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 an(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 cn(i,r)),n&&(i=await dn(i),i={...i,stage:"boundary",hasProcessedAnyPart:!0}),i}async function cn(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 import("./payload-too-large-error-JESAYGED.js"),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?ln(e,t,r):{...e,currentContentLength:r,currentBufferChunks:[...e.currentBufferChunks,t]}}async function ln(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 gn(e.currentWriteStream,t),{...e,currentContentLength:r};default:{let{ValidationError:n}=await import("./validation-error-KGPRZ5X7.js");throw new n("Invalid parsing strategy")}}}async function un(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=Xr(e.options.tempDir,`upload-${Ot.randomUUID()}`),r=Yr(t),n=async()=>{try{let{unlink:o}=await import("node: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 import("./validation-error-KGPRZ5X7.js");throw new t("Invalid file processing strategy")}}}async function dn(e){return e.currentField?e.currentFilename!==void 0?pn(e):fn(e):Y(e)}async function pn(e){if(!e.currentField||e.currentFilename===void 0)return Y(e);let t,r,n;switch(e.options.strategy){case"memory":r=Buffer.concat(e.currentBufferChunks),t=At.from(r);break;case"stream":e.streamController&&e.streamController.close(),t=e.currentStream;break;case"temp":e.currentWriteStream&&await zt(e.currentWriteStream),n=e.currentTempPath,t=At.from(Buffer.alloc(0));break;default:{let{ValidationError:s}=await import("./validation-error-KGPRZ5X7.js");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=kt(e.files,e.currentField,o);return{...Y(e),files:i}}function fn(e){if(!e.currentField)return Y(e);let t=Buffer.concat(e.currentBufferChunks).toString("utf8"),r=kt(e.fields,e.currentField,t);return{...Y(e),fields:r}}function Y(e){return{...e,currentField:null,currentFilename:void 0,currentContentLength:0,currentBufferChunks:[],currentStream:null,streamController:null,currentTempPath:null,currentWriteStream:null}}function kt(e,t,r){let n=new Map(e),o=n.get(t)||[];return n.set(t,[...o,r]),n}async function mn(e){if(!e.hasFoundValidBoundary){let{ValidationError:n}=await import("./validation-error-KGPRZ5X7.js");throw new n("No valid multipart boundary found")}if(e.hasFoundValidBoundary&&!e.hasProcessedAnyPart){let{ValidationError:n}=await import("./validation-error-KGPRZ5X7.js");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 hn(e){await Promise.allSettled(e.cleanupTasks.map(t=>t())),e.streamController&&e.streamController.close(),e.currentWriteStream&&await zt(e.currentWriteStream)}async function gn(e,t){return new Promise((r,n)=>{e.write(t,o=>{o?n(o):r()})})}async function zt(e){return new Promise(t=>{e.end(()=>t())})}async function Bt(e,t={}){let r=e.headers["content-type"]||"",n=Pt(r);if(!n){let{UnsupportedMediaTypeError:i}=await import("./unsupported-media-type-error-ZDQCGXCO.js");throw new i("Missing boundary in multipart content-type",{receivedContentType:r,expectedFormat:"multipart/form-data; boundary=..."})}let o=tn(n,t);o.currentFilename!==void 0&&(o=await un(o));try{for await(let i of e)o=await rn(o,i);return mn(o)}finally{await hn(o)}}var K="Content-Type";function yn(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 me(`Invalid URL: ${o}`)}}function Sn(e){return"stream"in e||"httpVersionMajor"in e&&e.httpVersionMajor===2}function wn(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 $t(e,t,r){let{path:n,url:o,query:i}=yn(e),s=e.method||"GET",a=Sn(e),c=wn(e),l={},p={...r.initialState||{}},h={...r.initialServices||{}},S={sent:!1},x={request:vn(e,{path:n,url:o,query:i,params:l,method:s,isHttp2:a,protocol:c}),response:{},state:p,services:h};return x.response=Tn(t,S,x),r.parseBody&&await On(e,x,r),x}function vn(e,t){return{raw:e,...t,header:Dt(e),headers:xn(e),body:void 0}}function Dt(e){return t=>{let r=e.headers[t.toLowerCase()];return Array.isArray(r)?r.join(", "):r||void 0}}function xn(e){let t=Dt(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 X(e,t){if(t.correlationId){let r=$(),n=String(t.correlationId);e.setHeader(r,n)}}function Tn(e,t,r){return{raw:e,get statusCode(){return e.statusCode||200},get sent(){return t.sent},status:bn(e,t,r),header:En(e,t,r),headers:Rn(e,t,r),type:Cn(e,t,r),json:Pn(e,t,r.state),text:Mn(e,t,r.state),html:Fn(e,t,r.state),redirect:_n(e,t,r.state),stream:An(e,t,r.state)}}function bn(e,t,r){return function(o){if(t.sent)throw new M;return e.statusCode=o,r.response}}function En(e,t,r){return function(o,i){if(t.sent)throw new J;return e.setHeader(o,i),r.response}}function Rn(e,t,r){return function(o){if(t.sent)throw new J;for(let[i,s]of Object.entries(o))e.setHeader(i,s);return r.response}}function Cn(e,t,r){return function(o){if(t.sent)throw new fe;return e.setHeader(K,o),r.response}}function Pn(e,t,r){return function(o,i){if(t.sent)throw new M;i!==void 0&&(e.statusCode=i),X(e,r),e.setHeader(K,"application/json"),e.end(JSON.stringify(o)),t.sent=!0}}function Mn(e,t,r){return function(o,i){if(t.sent)throw new M;i!==void 0&&(e.statusCode=i),X(e,r),e.setHeader(K,"text/plain"),e.end(o),t.sent=!0}}function Fn(e,t,r){return function(o,i){if(t.sent)throw new M;i!==void 0&&(e.statusCode=i),X(e,r),e.setHeader(K,"text/html"),e.end(o),t.sent=!0}}function _n(e,t,r){return function(o,i=302){if(t.sent)throw new M;X(e,r),e.statusCode=i,e.setHeader("Location",o),e.end(),t.sent=!0}}function An(e,t,r){return function(o,i={}){if(t.sent)throw new M;if(i.status!==void 0&&(e.statusCode=i.status),X(e,r),i.contentType&&e.setHeader(K,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 On(e,t,r){if(kn(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 D("JSON body exceeds size limit",{currentSize:o,maxSize:i.json,contentType:"application/json"},y());await zn(e,t)}else if(n.includes("application/x-www-form-urlencoded")){if(o>i.form)throw new D("Form body exceeds size limit",{currentSize:o,maxSize:i.form,contentType:"application/x-www-form-urlencoded"},y());await Bn(e,t)}else if(n.includes("text/")){if(o>i.text)throw new D("Text body exceeds size limit",{currentSize:o,maxSize:i.text,contentType:n},y());await Dn(e,t)}else if(_t(n))await Nn(e,t,i.multipart);else{if(o>i.raw)throw new D("Request body exceeds size limit",{currentSize:o,maxSize:i.raw,contentType:n||"unknown"},y());return}}function kn(e){return["GET","HEAD","OPTIONS"].includes(e||"GET")}async function zn(e,t){let r=await ze(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 C("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"},y())}}async function Bn(e,t){let r=await ze(e);if(r)try{t.request.body=$n(r)}catch(n){throw new C("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"},y())}}function $n(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 Dn(e,t){let r=await ze(e);r&&(t.request.body=r)}async function Nn(e,t,r){try{let n=r,o=await Bt(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 D||n instanceof oe?n:new oe("Failed to parse multipart/form-data",{receivedContentType:e.headers["content-type"],expectedFormat:"multipart/form-data; boundary=..."},y())}}async function ze(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)})})}var H=class extends T{constructor(t,r=void 0,n=void 0){super("NOT_FOUND",t,404,n??y(),r)}};function In(e){return e instanceof T}function Nt(e){if(In(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 j("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 It(e){let t=$(),r={[t]:e(t)};return ne(r)}function Ht(e,t){let r=$();e(r,t)}function qt(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=It(n.request.header),a=Nt(i);a.correlationId=s,Ht(n.response.header,s),n.response.status(a.status).json(a)}},debug:t}}function Ut(e){return async(t,r)=>{let n=ne(t.headers);try{await nt(n,async()=>{let o=await $t(t,r,{parseBody:!0,initialState:{correlationId:n},bodyLimits:e.bodyLimits}),s=[qt()];"corsOptions"in e&&e.corsOptions!==!1&&s.push(ie(e.corsOptions)),s.push(...e.middleware);let a=q(s);await Ct(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=$();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 Hn(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 Rt();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 qn(e,t){if(!e)return Lt.createServer();let r={allowHTTP1:!0};try{t.keyFile&&(r.key=Be.readFileSync(t.keyFile)),t.certFile&&(r.cert=Be.readFileSync(t.certFile))}catch(n){throw new Error(`Failed to read certificate files: ${n instanceof Error?n.message:String(n)}`)}return jt.createSecureServer(r)}function Un(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 Mr(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 jn(e){for(let t of e.plugins)typeof t.initialize=="function"&&await t.initialize(e)}async function jt(e,t){if(!e.server)try{let r=t.port,n=t.host;await jn(e);let o=t.http2||{enabled:!0},i=!!o.enabled,s=await qn(o);t.http2&&s.keyFile&&s.certFile&&(t.http2.keyFile=s.keyFile,t.http2.certFile=s.certFile);let a=Un(i,s);e.server=a,e.port=r,e.host=n;let c=qt(e);a.on("request",c),await Ln(a,r,n,i)}catch(r){throw console.error("Failed to start server:",r),r}}var me=!1;async function Wt(e,t={}){let r=e.server,n=e.events;if(me){console.log("\u26A0\uFE0F Shutdown already in progress, ignoring duplicate shutdown request");return}if(!r)return;me=!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"),me=!1}catch(i){throw me=!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 Vt(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)}}}}import{z as v}from"zod";var Wn=v.custom(e=>e!==null&&typeof e=="object"&&"execute"in e&&typeof e.execute=="function",{message:"Expected middleware to have an execute function"}),Vn=v.custom(e=>e!==null&&typeof e=="object"&&"register"in e&&typeof e.register=="function",{message:"Expected a valid plugin object with a register method"}),Qn=v.object({enabled:v.boolean().optional().default(!0),keyFile:v.string().optional(),certFile:v.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"}),Gn=v.object({headerName:v.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:v.function().args().returns(v.string()).optional()}).optional(),Zn=v.object({maxFileSize:v.number().positive().default(50*1024*1024),maxTotalSize:v.number().positive().default(100*1024*1024),maxFiles:v.number().positive().int().default(10),maxFieldSize:v.number().positive().default(1024*1024)}),Jn=v.object({json:v.number().positive().default(512*1024),form:v.number().positive().default(1024*1024),text:v.number().positive().default(5*1024*1024),raw:v.number().positive().default(10*1024*1024),multipart:Zn}),Yn=v.object({port:v.number().int().positive().optional().default(3e3),host:v.string().optional().default("localhost"),routesDir:v.string().optional().default("./routes"),http2:Qn.optional().default({enabled:!0}),middleware:v.array(Wn).optional().default([]),plugins:v.array(Vn).optional().default([]),correlation:Gn,cors:dt,bodyLimits:Jn});function Qt(e){try{return Yn.parse(e)}catch(t){if(t instanceof v.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 Gt(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 Kn=new Set(["core","server","router","middleware","context","blaize","blaizejs"]),Xn=/^[a-z]([a-z0-9-]*[a-z0-9])?$/,eo=/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9-.]+)?(?:\+[a-zA-Z0-9-.]+)?$/;function Be(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&&!Xn.test(i.name))throw new F(i.name,"Plugin name must be lowercase letters, numbers, and hyphens only");if(o&&Kn.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(!eo.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`)}import*as Jt from"node:crypto";import*as Yt from"node:fs/promises";async function to(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 Zt(e,t){try{let r=ie(e,t),n=await to(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(ro(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 ro(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 X=new Map;async function ee(e,t,r=!0){let o=(await Yt.stat(e)).mtime.getTime(),i=X.get(e);if(r&&i&&i.timestamp===o)return i.routes;let s=await Zt(e,t);if(r){let a=Xt(s);X.set(e,{routes:s,timestamp:o,hash:a})}return s}function Kt(e,t){let r=X.get(e);if(!r)return!0;let n=Xt(t);return r.hash!==n}function $e(e){e?X.delete(e):X.clear()}function Xt(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 Jt.createHash("md5").update(r).digest("hex")}import*as tr from"node:os";import*as ye from"node:fs/promises";import*as U from"node:path";async function er(e,t={}){let r=U.isAbsolute(e)?e:U.resolve(process.cwd(),e);console.log("Creating router with routes directory:",r);try{if(!(await ye.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 ye.readdir(s,{withFileTypes:!0});for(let c of a){let l=U.join(s,c.name);c.isDirectory()&&o.includes(c.name)||(c.isDirectory()?await i(l):no(c.name)&&n.push(l))}}return await i(r),n}function no(e){return!e.startsWith("_")&&(e.endsWith(".ts")||e.endsWith(".js"))}async function oo(e,t,r=Math.max(1,Math.floor(tr.cpus().length/2))){let n=io(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 rr(e){let t=await er(e);return(await oo(t,n=>ee(n,e))).flat()}function io(e,t){let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}var z={fileChanges:0,totalReloadTime:0,averageReloadTime:0,slowReloads:[]};function nr(e,t){let r=Date.now()-t;if(z.fileChanges++,z.totalReloadTime+=r,z.averageReloadTime=z.totalReloadTime/z.fileChanges,r>100&&(z.slowReloads.push({file:e,time:r}),z.slowReloads.length>10&&z.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 De(e,t){return console.log(`Tracking performance for: ${t}`),async(...r)=>{let n=Date.now();try{let o=await e(...r);return nr(t,n),o}catch(o){throw nr(t,n),o}}}import*as He from"node:path";import{watch as so}from"chokidar";function Ne(e,t={}){let r=t.debounceMs||16,n=new Map;function o(p,y){return(...g)=>{let x=n.get(y);x&&clearTimeout(x);let u=setTimeout(()=>{p(...g),n.delete(y)},r);n.set(y,u)}}let i=new Map;async function s(p){try{let y=i.get(p),g=await ee(p,e,!1);if(!g||g.length===0||y&&!Kt(p,g))return;await ee(p,e,!0);let x=He.normalize(p);y?(i.set(p,g),t.onRouteChanged&&t.onRouteChanged(x,g)):(i.set(p,g),t.onRouteAdded&&t.onRouteAdded(x,g))}catch(y){console.log(`\u26A0\uFE0F Error processing file ${p}:`,y),c(y)}}function a(p){let y=He.normalize(p),g=i.get(y);g&&g.length>0&&t.onRouteRemoved&&t.onRouteRemoved(y,g),i.delete(y)}function c(p){t.onError&&p instanceof Error?t.onError(p):console.error("\u26A0\uFE0F Route watcher error:",p)}let l=so(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 y of i.values())p.push(...y);return p},getRoutesByFile:()=>new Map(i)}}import{z as po}from"zod";import{z as ao}from"zod";function Ie(e,t){return t instanceof ao.ZodObject?t.strict().parse(e):t.parse(e)}import{z as co}from"zod";function qe(e,t){return t instanceof co.ZodObject?t.strict().parse(e):t.parse(e)}import{z as lo}from"zod";function Ue(e,t){return t instanceof lo.ZodObject?t.strict().parse(e):t.parse(e)}import{z as uo}from"zod";function Le(e,t){return t instanceof uo.ZodObject?t.strict().parse(e):t.parse(e)}function je(e,t=!1){return{name:"RequestValidator",execute:async(n,o)=>{if(e.params&&n.request.params)try{n.request.params=qe(n.request.params,e.params)}catch(i){let s=he(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new A("Request validation failed",{fields:s,errorCount:a,section:"params"})}if(e.query&&n.request.query)try{n.request.query=Ue(n.request.query,e.query)}catch(i){let s=he(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new A("Request validation failed",{fields:s,errorCount:a,section:"query"})}if(e.body)try{n.request.body=Ie(n.request.body,e.body)}catch(i){let s=he(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new A("Request validation failed",{fields:s,errorCount:a,section:"body"})}await o()},debug:t}}function We(e,t=!1){return{name:"ResponseValidator",execute:async(n,o)=>{let i=n.response.json;n.response.json=(s,a)=>{try{let c=Le(s,e);return n.response.json=i,i.call(n.response,c,a)}catch(c){throw n.response.json=i,new L("Response validation failed",{responseSchema:e.description||"Unknown schema",validationError:he(c),originalResponse:s})}},await o()},debug:t}}function he(e){if(e instanceof po.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 Ve(e,t,r){let n=[...t.middleware||[]];t.schema&&((t.schema.params||t.schema.query||t.schema.body)&&n.unshift(je(t.schema)),t.schema.response&&n.push(We(t.schema.response))),await I([...n])(e,async()=>{let i=await t.handler(e,r);!e.response.sent&&i!==void 0&&e.response.json(i)})}function or(){return{routesByPath:new Map,routesByFile:new Map,pathToFile:new Map}}function B(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||!mo(p,l)});return fo(e,t,{added:i,removed:s,changed:c}),{added:i,removed:s,changed:c}}function ir(e){return Array.from(e.routesByPath.values())}function fo(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 mo(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 Qe(e,t){Object.entries(e).forEach(([r,n])=>{r==="path"||!n||t.add(e.path,r,n)})}function te(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 sr(e,t){te(e.path,t),Qe(e,t)}var yo={routesDir:"./routes",basePath:"/",watchMode:process.env.NODE_ENV==="development"};function ar(e){let t={...yo,...e};e.basePath&&!e.basePath.startsWith("/")&&console.warn("Base path does nothing");let r=or(),n=G(),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}`),te(f,n)}),u.added.forEach(f=>{let m=Object.keys(f).filter(d=>d!=="path");console.log(` \u2795 Adding: ${f.path} [${m.join(", ")}]`),Qe(f,n)}),u.changed.forEach(f=>{let m=Object.keys(f).filter(d=>d!=="path");console.log(` \u{1F504} Updating: ${f.path} [${m.join(", ")}]`),sr(f,n)}),console.log(`\u2705 Matcher changes applied
42
- `)}function l(u,f){try{let m=B(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 rr(u),h=d.map(E=>m?{...E,path:`${m}${E.path}`}:E),S=l(h,f);console.log(`Loaded ${d.length} routes from ${f}${m?` with prefix ${m}`:""} (${S.added.length} added, ${S.changed.length} changed, ${S.removed.length} removed)`)}catch(d){throw console.error(`\u26A0\uFE0F Failed to load routes from ${f}:`,d),d}}async function y(){return o||i||(i=(async()=>{try{await Promise.all(Array.from(a).map(u=>p(u,u))),t.watchMode&&g(),o=!0}catch(u){throw console.error("\u26A0\uFE0F Failed to initialize router:",u),u}})()),i}function g(){s||(s=new Map);for(let u of a)if(!s.has(u)){let f=Ne(u,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(m,d)=>{try{let h=B(r,m,d);c(h)}catch(h){console.error(`Error adding routes from ${u}:`,h)}},onRouteChanged:De(async(m,d)=>{try{console.log(`Processing changes for ${m}`);let h=B(r,m,d);console.log(`Changes detected: ${h.added.length} added, ${h.changed.length} changed, ${h.removed.length} removed`),c(h),console.log(`Route changes applied: ${h.added.length} added, ${h.changed.length} changed, ${h.removed.length} removed`)}catch(h){console.error(`\u26A0\uFE0F Error updating routes from ${u}:`,h)}},u),onRouteRemoved:(m,d)=>{console.log(`File removed: ${m} with ${d.length} routes`);try{d.forEach(h=>{te(h.path,n)}),$e(m)}catch(h){console.error(`\u26A0\uFE0F Error removing routes from ${m}:`,h)}},onError:m=>{console.error(`\u26A0\uFE0F Route watcher error for ${u}:`,m)}});s.set(u,f)}}function x(u,f){s||(s=new Map);let m=Ne(u,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(d,h)=>{try{let S=h.map(_=>f?{..._,path:`${f}${_.path}`}:_),E=B(r,d,S);c(E)}catch(S){console.error(`\u26A0\uFE0F Error adding routes from ${u}:`,S)}},onRouteChanged:De(async(d,h)=>{try{let S=h.map(_=>f?{..._,path:`${f}${_.path}`}:_),E=B(r,d,S);c(E)}catch(S){console.error(`\u26A0\uFE0F Error updating routes from ${u}:`,S)}},u),onRouteRemoved:(d,h)=>{try{h.forEach(S=>{let E=f?`${f}${S.path}`:S.path;te(E,n)}),$e(d)}catch(S){console.error(`Error removing routes from ${d}:`,S)}},onError:d=>{console.error(`\u26A0\uFE0F Route watcher error for ${u}:`,d)}});return s.set(u,m),m}return y().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 y());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 N("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 Ve(u,d.route,d.params)},getRoutes(){return ir(r)},addRoute(u){let f=B(r,"programmatic",[u]);c(f)},addRoutes(u){let f=B(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&&x(u,f.prefix))},getRouteConflicts(){return[]},async close(){if(s){for(let u of s.values())await u.close();s.clear()}}}}var R={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 So(e={}){let t={port:e.port??R.port,host:e.host??R.host,routesDir:e.routesDir??R.routesDir,http2:{enabled:e.http2?.enabled??R.http2.enabled,keyFile:e.http2?.keyFile,certFile:e.http2?.certFile},middleware:e.middleware??R.middleware,plugins:e.plugins??R.plugins,correlation:e.correlation,cors:e.cors,bodyLimits:e.bodyLimits?{json:e.bodyLimits.json??R.bodyLimits.json,form:e.bodyLimits.form??R.bodyLimits.form,text:e.bodyLimits.text??R.bodyLimits.text,raw:e.bodyLimits.raw??R.bodyLimits.raw,multipart:{maxFileSize:e.bodyLimits.multipart?.maxFileSize??R.bodyLimits.multipart.maxFileSize,maxTotalSize:e.bodyLimits.multipart?.maxTotalSize??R.bodyLimits.multipart.maxTotalSize,maxFiles:e.bodyLimits.multipart?.maxFiles??R.bodyLimits.multipart.maxFiles,maxFieldSize:e.bodyLimits.multipart?.maxFieldSize??R.bodyLimits.multipart.maxFieldSize}}:R.bodyLimits};try{let r=Qt(t);return yt({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 wo(e){e.correlation&&tt(e.correlation.headerName,e.correlation.generator)}function vo(e,t){return async()=>(wo(t),await xo(e),await e.pluginManager.initializePlugins(e),await jt(e,t),await e.pluginManager.onServerStart(e,e.server),To(e),e)}async function xo(e){for(let t of e.plugins)await t.register(e)}function To(e){let t=Vt(()=>e.close());e._signalHandlers=t,e.events.emit("started")}function bo(e){return async t=>{if(!e.server)return;let r={...t};e._signalHandlers&&(e._signalHandlers.unregister(),delete e._signalHandlers),await Wt(e,r)}}function Eo(e){return t=>{let r=Array.isArray(t)?t:[t];return e.middleware.push(...r),e}}function Ro(e){return async t=>{if(Array.isArray(t))for(let r of t)Be(r),e.plugins.push(r),await r.register(e);else Be(t),e.plugins.push(t),await t.register(e);return e}}function Ge(e={}){let t=So(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 ho,y=ar({routesDir:t.routesDir,watchMode:process.env.NODE_ENV==="development"}),g=Gt({debug:process.env.NODE_ENV==="development",continueOnError:!0}),x=new go,u={server:null,port:r,host:n,context:p,events:x,plugins:[...l],middleware:[...c],corsOptions:s,bodyLimits:a,_signalHandlers:{unregister:()=>{}},use:()=>u,register:async()=>u,listen:async()=>u,close:async()=>{},router:y,pluginManager:g};return u.listen=vo(u,t),u.close=bo(u),u.use=Eo(u),u.register=Ro(u),u}function cr(e){return{}}function ja(e){return typeof e=="object"&&e!==null&&"name"in e&&"execute"in e&&typeof e.name=="string"&&typeof e.execute=="function"}function Wa(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 Va(e){return e}function Qa(e){return e}function Ga(...e){return e}function Za(...e){return e}var Ze=class extends T{constructor(t,r=void 0,n=void 0){super("UNAUTHORIZED",t,401,n??w(),r)}};var Je=class extends T{constructor(t,r=void 0,n=void 0){super("CONFLICT",t,409,n??w(),r)}};var Ye=class extends T{constructor(t,r=void 0,n=void 0){super("RATE_LIMITED",t,429,n??w(),r)}};var Ke=class extends T{constructor(t,r,n){super("UPLOAD_TIMEOUT",t,408,n??w(),r)}};var Xe=class extends T{constructor(t,r,n){super("UNPROCESSABLE_ENTITY",t,422,n??w(),r)}};var et=class extends T{constructor(t,r=void 0,n=void 0){super("SERVICE_UNAVAILABLE",t,503,n??w(),r)}};var Co="0.1.0",Po={createServer:Ge,inferContext:cr},Mo={createDeleteRoute:Me,createGetRoute:Re,createHeadRoute:_e,createOptionsRoute:Ae,createPatchRoute:Fe,createPostRoute:Ce,createPutRoute:Pe,createRouteFactory:Tt,createMatcher:G,extractParams:q,compilePathPattern:Q,paramsToQuery:le,buildUrl:ke},Fo={createMiddleware:D,createServiceMiddleware:Se,createStateMiddleware:ge,compose:I,cors:ne},_o={createPlugin:Te},Nc={createServer:Ge,createMiddleware:D,createServiceMiddleware:Se,createStateMiddleware:ge,createPlugin:Te,getCorrelationId:w,Server:Po,Router:Mo,Middleware:Fo,Plugins:_o,VERSION:Co};export{Nc as Blaize,T as BlaizeError,Je as ConflictError,Ao as ErrorSeverity,M as ErrorType,j as ForbiddenError,L as InternalServerError,Fo as MiddlewareAPI,N as NotFoundError,ur as PayloadTooLargeError,_o as PluginsAPI,Ye as RateLimitError,Ke as RequestTimeoutError,Mo as RouterAPI,Po as ServerAPI,et as ServiceNotAvailableError,Ze as UnauthorizedError,Xe as UnprocessableEntityError,dr as UnsupportedMediaTypeError,Co as VERSION,A as ValidationError,Va as asMiddlewareArray,Qa as asPluginArray,ke as buildUrl,Q as compilePathPattern,I as compose,ne as cors,Me as createDeleteRoute,Re as createGetRoute,_e as createHeadRoute,G as createMatcher,D as createMiddleware,Ga as createMiddlewareArray,Ae as createOptionsRoute,Fe as createPatchRoute,Te as createPlugin,Za as createPluginArray,Ce as createPostRoute,Pe as createPutRoute,Tt as createRouteFactory,Ge as createServer,Se as createServiceMiddleware,ge as createStateMiddleware,q as extractParams,w as getCorrelationId,cr as inferContext,ko as isBodyParseError,ja as isMiddleware,Wa as isPlugin,le as paramsToQuery};
40
+ `),o()}),e.on("error",s=>{console.error("Server error:",s),i(s)})})}async function Ln(e){for(let t of e.plugins)typeof t.initialize=="function"&&await t.initialize(e)}async function Wt(e,t){if(!e.server)try{let r=t.port,n=t.host;await Ln(e);let o=t.http2||{enabled:!0},i=!!o.enabled,s=await Hn(o);t.http2&&s.keyFile&&s.certFile&&(t.http2.keyFile=s.keyFile,t.http2.certFile=s.certFile);let a=qn(i,s);e.server=a,e.port=r,e.host=n;let c=Ut(e);a.on("request",c),await Un(a,r,n,i)}catch(r){throw console.error("Failed to start server:",r),r}}var he=!1;async function Vt(e,t={}){let r=e.server,n=e.events;if(he){console.log("\u26A0\uFE0F Shutdown already in progress, ignoring duplicate shutdown request");return}if(!r)return;he=!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"),he=!1}catch(i){throw he=!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 Qt(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)}}}}import{z as v}from"zod";var jn=v.custom(e=>e!==null&&typeof e=="object"&&"execute"in e&&typeof e.execute=="function",{message:"Expected middleware to have an execute function"}),Wn=v.custom(e=>e!==null&&typeof e=="object"&&"register"in e&&typeof e.register=="function",{message:"Expected a valid plugin object with a register method"}),Vn=v.object({enabled:v.boolean().optional().default(!0),keyFile:v.string().optional(),certFile:v.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"}),Qn=v.object({headerName:v.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:v.function().args().returns(v.string()).optional()}).optional(),Gn=v.object({maxFileSize:v.number().positive().default(50*1024*1024),maxTotalSize:v.number().positive().default(100*1024*1024),maxFiles:v.number().positive().int().default(10),maxFieldSize:v.number().positive().default(1024*1024)}),Zn=v.object({json:v.number().positive().default(512*1024),form:v.number().positive().default(1024*1024),text:v.number().positive().default(5*1024*1024),raw:v.number().positive().default(10*1024*1024),multipart:Gn}),Jn=v.object({port:v.number().int().positive().optional().default(3e3),host:v.string().optional().default("localhost"),routesDir:v.string().optional().default("./routes"),http2:Vn.optional().default({enabled:!0}),middleware:v.array(jn).optional().default([]),plugins:v.array(Wn).optional().default([]),correlation:Qn,cors:pt,bodyLimits:Zn});function Gt(e){try{return Jn.parse(e)}catch(t){if(t instanceof v.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 Zt(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 _=class extends Error{constructor(r,n){super(`Plugin validation error${r?` for "${r}"`:""}: ${n}`);this.pluginName=r;this.name="PluginValidationError"}};var Yn=new Set(["core","server","router","middleware","context","blaize","blaizejs"]),Kn=/^[a-z]([a-z0-9-]*[a-z0-9])?$/,Xn=/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9-.]+)?(?:\+[a-zA-Z0-9-.]+)?$/;function $e(e,t={}){let{requireVersion:r=!0,validateNameFormat:n=!0,checkReservedNames:o=!0}=t;if(!e||typeof e!="object")throw new _("","Plugin must be an object");let i=e;if(!i.name||typeof i.name!="string")throw new _("","Plugin must have a name (string)");if(n&&!Kn.test(i.name))throw new _(i.name,"Plugin name must be lowercase letters, numbers, and hyphens only");if(o&&Yn.has(i.name.toLowerCase()))throw new _(i.name,`Plugin name "${i.name}" is reserved`);if(r){if(!i.version||typeof i.version!="string")throw new _(i.name,"Plugin must have a version (string)");if(!Xn.test(i.version))throw new _(i.name,'Plugin version must follow semantic versioning (e.g., "1.0.0")')}if(!i.register||typeof i.register!="function")throw new _(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 _(i.name,`Plugin ${a} must be a function if provided`)}import*as Yt from"node:crypto";import*as Kt from"node:fs/promises";async function eo(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 Jt(e,t){try{let r=ae(e,t),n=await eo(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(to(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 to(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 ee=new Map;async function te(e,t,r=!0){let o=(await Kt.stat(e)).mtime.getTime(),i=ee.get(e);if(r&&i&&i.timestamp===o)return i.routes;let s=await Jt(e,t);if(r){let a=er(s);ee.set(e,{routes:s,timestamp:o,hash:a})}return s}function Xt(e,t){let r=ee.get(e);if(!r)return!0;let n=er(t);return r.hash!==n}function De(e){e?ee.delete(e):ee.clear()}function er(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 Yt.createHash("md5").update(r).digest("hex")}import*as rr from"node:os";import*as ge from"node:fs/promises";import*as L from"node:path";async function tr(e,t={}){let r=L.isAbsolute(e)?e:L.resolve(process.cwd(),e);console.log("Creating router with routes directory:",r);try{if(!(await ge.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 ge.readdir(s,{withFileTypes:!0});for(let c of a){let l=L.join(s,c.name);c.isDirectory()&&o.includes(c.name)||(c.isDirectory()?await i(l):ro(c.name)&&n.push(l))}}return await i(r),n}function ro(e){return!e.startsWith("_")&&(e.endsWith(".ts")||e.endsWith(".js"))}async function no(e,t,r=Math.max(1,Math.floor(rr.cpus().length/2))){let n=oo(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 nr(e){let t=await tr(e);return(await no(t,n=>te(n,e))).flat()}function oo(e,t){let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}var z={fileChanges:0,totalReloadTime:0,averageReloadTime:0,slowReloads:[]};function or(e,t){let r=Date.now()-t;if(z.fileChanges++,z.totalReloadTime+=r,z.averageReloadTime=z.totalReloadTime/z.fileChanges,r>100&&(z.slowReloads.push({file:e,time:r}),z.slowReloads.length>10&&z.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 Ne(e,t){return console.log(`Tracking performance for: ${t}`),async(...r)=>{let n=Date.now();try{let o=await e(...r);return or(t,n),o}catch(o){throw or(t,n),o}}}import*as Ie from"node:path";import{watch as io}from"chokidar";function He(e,t={}){let r=t.debounceMs||16,n=new Map;function o(p,h){return(...S)=>{let x=n.get(h);x&&clearTimeout(x);let u=setTimeout(()=>{p(...S),n.delete(h)},r);n.set(h,u)}}let i=new Map;async function s(p){try{let h=i.get(p),S=await te(p,e,!1);if(!S||S.length===0||h&&!Xt(p,S))return;await te(p,e,!0);let x=Ie.normalize(p);h?(i.set(p,S),t.onRouteChanged&&t.onRouteChanged(x,S)):(i.set(p,S),t.onRouteAdded&&t.onRouteAdded(x,S))}catch(h){console.log(`\u26A0\uFE0F Error processing file ${p}:`,h),c(h)}}function a(p){let h=Ie.normalize(p),S=i.get(h);S&&S.length>0&&t.onRouteRemoved&&t.onRouteRemoved(h,S),i.delete(h)}function c(p){t.onError&&p instanceof Error?t.onError(p):console.error("\u26A0\uFE0F Route watcher error:",p)}let l=io(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)}}import{z as uo}from"zod";import{z as so}from"zod";function qe(e,t){return t instanceof so.ZodObject?t.strict().parse(e):t.parse(e)}import{z as ao}from"zod";function Ue(e,t){return t instanceof ao.ZodObject?t.strict().parse(e):t.parse(e)}import{z as co}from"zod";function Le(e,t){return t instanceof co.ZodObject?t.strict().parse(e):t.parse(e)}import{z as lo}from"zod";function je(e,t){return t instanceof lo.ZodObject?t.strict().parse(e):t.parse(e)}function We(e,t=!1){return{name:"RequestValidator",execute:async(n,o)=>{if(e.params&&n.request.params)try{n.request.params=Ue(n.request.params,e.params)}catch(i){let s=ye(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new C("Request validation failed",{fields:s,errorCount:a,section:"params"})}if(e.query&&n.request.query)try{n.request.query=Le(n.request.query,e.query)}catch(i){let s=ye(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new C("Request validation failed",{fields:s,errorCount:a,section:"query"})}if(e.body)try{n.request.body=qe(n.request.body,e.body)}catch(i){let s=ye(i),a=s.reduce((c,l)=>c+l.messages.length,0);throw new C("Request validation failed",{fields:s,errorCount:a,section:"body"})}await o()},debug:t}}function po(e){return e!==null&&typeof e=="object"&&"type"in e&&"status"in e&&"correlationId"in e&&"timestamp"in e}function Ve(e,t=!1){return{name:"ResponseValidator",execute:async(n,o)=>{let i=n.response.json,s=!0;n.response.json=(a,c)=>{if(!s||po(a))return i.call(n.response,a,c);try{let l=je(a,e);return i.call(n.response,l,c)}catch(l){throw s=!1,new j("Response validation failed",{validationError:ye(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 ye(e){if(e instanceof uo.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 Qe(e,t,r){let n=[...t.middleware||[]];t.schema&&((t.schema.params||t.schema.query||t.schema.body)&&n.unshift(We(t.schema)),t.schema.response&&n.push(Ve(t.schema.response))),await q([...n])(e,async()=>{let i=await t.handler(e,r);!e.response.sent&&i!==void 0&&e.response.json(i)})}function ir(){return{routesByPath:new Map,routesByFile:new Map,pathToFile:new Map}}function B(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||!mo(p,l)});return fo(e,t,{added:i,removed:s,changed:c}),{added:i,removed:s,changed:c}}function sr(e){return Array.from(e.routesByPath.values())}function fo(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 mo(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 Ge(e,t){Object.entries(e).forEach(([r,n])=>{r==="path"||!n||t.add(e.path,r,n)})}function re(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 ar(e,t){re(e.path,t),Ge(e,t)}var ho={routesDir:"./routes",basePath:"/",watchMode:process.env.NODE_ENV==="development"};function cr(e){let t={...ho,...e};e.basePath&&!e.basePath.startsWith("/")&&console.warn("Base path does nothing");let r=ir(),n=Z(),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}`),re(f,n)}),u.added.forEach(f=>{let m=Object.keys(f).filter(d=>d!=="path");console.log(` \u2795 Adding: ${f.path} [${m.join(", ")}]`),Ge(f,n)}),u.changed.forEach(f=>{let m=Object.keys(f).filter(d=>d!=="path");console.log(` \u{1F504} Updating: ${f.path} [${m.join(", ")}]`),ar(f,n)}),console.log(`\u2705 Matcher changes applied
42
+ `)}function l(u,f){try{let m=B(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 nr(u),g=d.map(E=>m?{...E,path:`${m}${E.path}`}:E),w=l(g,f);console.log(`Loaded ${d.length} routes from ${f}${m?` with prefix ${m}`:""} (${w.added.length} added, ${w.changed.length} changed, ${w.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&&S(),o=!0}catch(u){throw console.error("\u26A0\uFE0F Failed to initialize router:",u),u}})()),i}function S(){s||(s=new Map);for(let u of a)if(!s.has(u)){let f=He(u,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(m,d)=>{try{let g=B(r,m,d);c(g)}catch(g){console.error(`Error adding routes from ${u}:`,g)}},onRouteChanged:Ne(async(m,d)=>{try{console.log(`Processing changes for ${m}`);let g=B(r,m,d);console.log(`Changes detected: ${g.added.length} added, ${g.changed.length} changed, ${g.removed.length} removed`),c(g),console.log(`Route changes applied: ${g.added.length} added, ${g.changed.length} changed, ${g.removed.length} removed`)}catch(g){console.error(`\u26A0\uFE0F Error updating routes from ${u}:`,g)}},u),onRouteRemoved:(m,d)=>{console.log(`File removed: ${m} with ${d.length} routes`);try{d.forEach(g=>{re(g.path,n)}),De(m)}catch(g){console.error(`\u26A0\uFE0F Error removing routes from ${m}:`,g)}},onError:m=>{console.error(`\u26A0\uFE0F Route watcher error for ${u}:`,m)}});s.set(u,f)}}function x(u,f){s||(s=new Map);let m=He(u,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(d,g)=>{try{let w=g.map(A=>f?{...A,path:`${f}${A.path}`}:A),E=B(r,d,w);c(E)}catch(w){console.error(`\u26A0\uFE0F Error adding routes from ${u}:`,w)}},onRouteChanged:Ne(async(d,g)=>{try{let w=g.map(A=>f?{...A,path:`${f}${A.path}`}:A),E=B(r,d,w);c(E)}catch(w){console.error(`\u26A0\uFE0F Error updating routes from ${u}:`,w)}},u),onRouteRemoved:(d,g)=>{try{g.forEach(w=>{let E=f?`${f}${w.path}`:w.path;re(E,n)}),De(d)}catch(w){console.error(`Error removing routes from ${d}:`,w)}},onError:d=>{console.error(`\u26A0\uFE0F Route watcher error for ${u}:`,d)}});return s.set(u,m),m}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: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 Qe(u,d.route,d.params)},getRoutes(){return sr(r)},addRoute(u){let f=B(r,"programmatic",[u]);c(f)},addRoutes(u){let f=B(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&&x(u,f.prefix))},getRouteConflicts(){return[]},async close(){if(s){for(let u of s.values())await u.close();s.clear()}}}}var R={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 So(e={}){let t={port:e.port??R.port,host:e.host??R.host,routesDir:e.routesDir??R.routesDir,http2:{enabled:e.http2?.enabled??R.http2.enabled,keyFile:e.http2?.keyFile,certFile:e.http2?.certFile},middleware:e.middleware??R.middleware,plugins:e.plugins??R.plugins,correlation:e.correlation,cors:e.cors,bodyLimits:e.bodyLimits?{json:e.bodyLimits.json??R.bodyLimits.json,form:e.bodyLimits.form??R.bodyLimits.form,text:e.bodyLimits.text??R.bodyLimits.text,raw:e.bodyLimits.raw??R.bodyLimits.raw,multipart:{maxFileSize:e.bodyLimits.multipart?.maxFileSize??R.bodyLimits.multipart.maxFileSize,maxTotalSize:e.bodyLimits.multipart?.maxTotalSize??R.bodyLimits.multipart.maxTotalSize,maxFiles:e.bodyLimits.multipart?.maxFiles??R.bodyLimits.multipart.maxFiles,maxFieldSize:e.bodyLimits.multipart?.maxFieldSize??R.bodyLimits.multipart.maxFieldSize}}:R.bodyLimits};try{let r=Gt(t);return gt({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 wo(e){e.correlation&&rt(e.correlation.headerName,e.correlation.generator)}function vo(e,t){return async()=>(wo(t),await xo(e),await e.pluginManager.initializePlugins(e),await Wt(e,t),await e.pluginManager.onServerStart(e,e.server),To(e),e)}async function xo(e){for(let t of e.plugins)await t.register(e)}function To(e){let t=Qt(()=>e.close());e._signalHandlers=t,e.events.emit("started")}function bo(e){return async t=>{if(!e.server)return;let r={...t};e._signalHandlers&&(e._signalHandlers.unregister(),delete e._signalHandlers),await Vt(e,r)}}function Eo(e){return t=>{let r=Array.isArray(t)?t:[t];return e.middleware.push(...r),e}}function Ro(e){return async t=>{if(Array.isArray(t))for(let r of t)$e(r),e.plugins.push(r),await r.register(e);else $e(t),e.plugins.push(t),await t.register(e);return e}}function Ze(e={}){let t=So(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 go,h=cr({routesDir:t.routesDir,watchMode:process.env.NODE_ENV==="development"}),S=Zt({debug:process.env.NODE_ENV==="development",continueOnError:!0}),x=new yo,u={server:null,port:r,host:n,context:p,events:x,plugins:[...l],middleware:[...c],corsOptions:s,bodyLimits:a,_signalHandlers:{unregister:()=>{}},use:()=>u,register:async()=>u,listen:async()=>u,close:async()=>{},router:h,pluginManager:S};return u.listen=vo(u,t),u.close=bo(u),u.use=Eo(u),u.register=Ro(u),u}function lr(e){return{}}function Va(e){return typeof e=="object"&&e!==null&&"name"in e&&"execute"in e&&typeof e.name=="string"&&typeof e.execute=="function"}function Qa(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 Ga(e){return e}function Za(e){return e}function Ja(...e){return e}function Ya(...e){return e}var Je=class extends T{constructor(t,r=void 0,n=void 0){super("UNAUTHORIZED",t,401,n??y(),r)}};var Ye=class extends T{constructor(t,r=void 0,n=void 0){super("CONFLICT",t,409,n??y(),r)}};var Ke=class extends T{constructor(t,r=void 0,n=void 0){super("RATE_LIMITED",t,429,n??y(),r)}};var Xe=class extends T{constructor(t,r,n){super("UPLOAD_TIMEOUT",t,408,n??y(),r)}};var et=class extends T{constructor(t,r,n){super("UNPROCESSABLE_ENTITY",t,422,n??y(),r)}};var tt=class extends T{constructor(t,r=void 0,n=void 0){super("SERVICE_UNAVAILABLE",t,503,n??y(),r)}};var Co="0.1.0",Po={createServer:Ze,inferContext:lr},Mo={createDeleteRoute:Fe,createGetRoute:Ce,createHeadRoute:Ae,createOptionsRoute:Oe,createPatchRoute:_e,createPostRoute:Pe,createPutRoute:Me,createRouteFactory:bt,createMatcher:Z,extractParams:U,compilePathPattern:G,paramsToQuery:de,buildUrl:ke},Fo={createMiddleware:N,createServiceMiddleware:we,createStateMiddleware:Se,compose:q,cors:ie},_o={createPlugin:be},qc={createServer:Ze,createMiddleware:N,createServiceMiddleware:we,createStateMiddleware:Se,createPlugin:be,getCorrelationId:y,Server:Po,Router:Mo,Middleware:Fo,Plugins:_o,VERSION:Co};export{qc as Blaize,T as BlaizeError,Ye as ConflictError,Ao as ErrorSeverity,F as ErrorType,W as ForbiddenError,j as InternalServerError,Fo as MiddlewareAPI,H as NotFoundError,D as PayloadTooLargeError,_o as PluginsAPI,Ke as RateLimitError,Xe as RequestTimeoutError,Mo as RouterAPI,Po as ServerAPI,tt as ServiceNotAvailableError,Je as UnauthorizedError,et as UnprocessableEntityError,oe as UnsupportedMediaTypeError,Co as VERSION,C as ValidationError,Ga as asMiddlewareArray,Za as asPluginArray,ke as buildUrl,G as compilePathPattern,q as compose,ie as cors,Fe as createDeleteRoute,Ce as createGetRoute,Ae as createHeadRoute,Z as createMatcher,N as createMiddleware,Ja as createMiddlewareArray,Oe as createOptionsRoute,_e as createPatchRoute,be as createPlugin,Ya as createPluginArray,Pe as createPostRoute,Me as createPutRoute,bt as createRouteFactory,Ze as createServer,we as createServiceMiddleware,Se as createStateMiddleware,U as extractParams,y as getCorrelationId,lr as inferContext,Va as isMiddleware,Qa as isPlugin,de as paramsToQuery};
44
44
  //# sourceMappingURL=index.js.map