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