blaizejs 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/{chunk-VNJJ5PCH.js → chunk-AKDBR54N.js} +3 -3
  2. package/dist/{chunk-6K6GZLDJ.js → chunk-DPYJQIB7.js} +2 -2
  3. package/dist/chunk-DPYJQIB7.js.map +1 -0
  4. package/dist/{chunk-LL6TU2VN.js → chunk-F5H5OBHM.js} +3 -3
  5. package/dist/{chunk-DCZPGNAM.js → chunk-QJUGD43P.js} +3 -3
  6. package/dist/{chunk-PT3XLVQL.js → chunk-R3JL7ON5.js} +3 -3
  7. package/dist/index.cjs +15 -15
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +282 -69
  10. package/dist/index.d.ts +282 -69
  11. package/dist/index.js +16 -16
  12. package/dist/index.js.map +1 -1
  13. package/dist/{internal-server-error-SUR4JYIM.js → internal-server-error-7SEY7BZA.js} +3 -3
  14. package/dist/{payload-too-large-error-V5D4UEOE.js → payload-too-large-error-YH4HCBKH.js} +3 -3
  15. package/dist/{unsupported-media-type-error-Q2DH3CAM.js → unsupported-media-type-error-LT2YSXHC.js} +3 -3
  16. package/dist/{validation-error-QMX5LAON.js → validation-error-PDIQPFC7.js} +3 -3
  17. package/package.json +2 -2
  18. package/dist/chunk-6K6GZLDJ.js.map +0 -1
  19. /package/dist/{chunk-VNJJ5PCH.js.map → chunk-AKDBR54N.js.map} +0 -0
  20. /package/dist/{chunk-LL6TU2VN.js.map → chunk-F5H5OBHM.js.map} +0 -0
  21. /package/dist/{chunk-DCZPGNAM.js.map → chunk-QJUGD43P.js.map} +0 -0
  22. /package/dist/{chunk-PT3XLVQL.js.map → chunk-R3JL7ON5.js.map} +0 -0
  23. /package/dist/{internal-server-error-SUR4JYIM.js.map → internal-server-error-7SEY7BZA.js.map} +0 -0
  24. /package/dist/{payload-too-large-error-V5D4UEOE.js.map → payload-too-large-error-YH4HCBKH.js.map} +0 -0
  25. /package/dist/{unsupported-media-type-error-Q2DH3CAM.js.map → unsupported-media-type-error-LT2YSXHC.js.map} +0 -0
  26. /package/dist/{validation-error-QMX5LAON.js.map → validation-error-PDIQPFC7.js.map} +0 -0
package/dist/index.cjs CHANGED
@@ -1,34 +1,34 @@
1
1
 
2
2
  /**
3
- * blaizejs v0.9.0
3
+ * blaizejs v0.9.1
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) 2026 BlaizeJS Contributors
7
7
  * @license MIT
8
8
  */
9
9
 
10
- "use strict";var vn=Object.create;var Ce=Object.defineProperty;var wn=Object.getOwnPropertyDescriptor;var En=Object.getOwnPropertyNames;var Tn=Object.getPrototypeOf,bn=Object.prototype.hasOwnProperty;var te=(e,t)=>()=>(e&&(t=e(e=0)),t);var ce=(e,t)=>{for(var r in t)Ce(e,r,{get:t[r],enumerable:!0})},It=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of En(t))!bn.call(e,o)&&o!==r&&Ce(e,o,{get:()=>t[o],enumerable:!(n=wn(t,o))||n.enumerable});return e};var z=(e,t,r)=>(r=e!=null?vn(Tn(e)):{},It(t||!e||!e.__esModule?Ce(r,"default",{value:e,enumerable:!0}):r,e)),xn=e=>It(Ce({},"__esModule",{value:!0}),e);function zn(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`req_${e}_${t}`}function qt(e,t){Me={headerName:e||at.headerName,generator:t||at.generator}}function J(){return Me.headerName}function kn(){return Me.generator()}function h(){let e=Ut.getStore();return e&&e.trim()?e:"unknown"}function jt(e,t){return Ut.run(e,t)}function _e(e){let t=Me.headerName,r=e[t],n;return Array.isArray(r)?n=r[0]:typeof r=="string"&&(n=r),n&&n.trim()?n:kn()}var Ht,at,Me,Ut,R=te(()=>{"use strict";Ht=require("async_hooks"),at={headerName:"x-correlation-id",generator:zn},Me={...at},Ut=new Ht.AsyncLocalStorage});var M,Vt,w,P=te(()=>{"use strict";M=(E=>(E.VALIDATION_ERROR="VALIDATION_ERROR",E.NOT_FOUND="NOT_FOUND",E.UNAUTHORIZED="UNAUTHORIZED",E.FORBIDDEN="FORBIDDEN",E.SSE_NOT_ACCEPTABLE="SSE_NOT_ACCEPTABLE",E.CONFLICT="CONFLICT",E.RATE_LIMITED="RATE_LIMITED",E.INTERNAL_SERVER_ERROR="INTERNAL_SERVER_ERROR",E.PAYLOAD_TOO_LARGE="PAYLOAD_TOO_LARGE",E.UNSUPPORTED_MEDIA_TYPE="UNSUPPORTED_MEDIA_TYPE",E.UPLOAD_TIMEOUT="UPLOAD_TIMEOUT",E.UNPROCESSABLE_ENTITY="UNPROCESSABLE_ENTITY",E.NETWORK_ERROR="NETWORK_ERROR",E.TIMEOUT_ERROR="TIMEOUT_ERROR",E.PARSE_ERROR="PARSE_ERROR",E.HTTP_ERROR="HTTP_ERROR",E.SSE_CONNECTION_ERROR="SSE_CONNECTION_ERROR",E.SSE_BUFFER_OVERFLOW="SSE_BUFFER_OVERFLOW",E.SSE_STREAM_CLOSED="SSE_STREAM_CLOSED",E.SERVICE_UNAVAILABLE="SERVICE_UNAVAILABLE",E))(M||{}),Vt=(o=>(o.LOW="low",o.MEDIUM="medium",o.HIGH="high",o.CRITICAL="critical",o))(Vt||{}),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}]`}}});var Y={};ce(Y,{ValidationError:()=>_});var _,I=te(()=>{"use strict";P();R();_=class extends w{constructor(t,r=void 0,n=void 0){super("VALIDATION_ERROR",t,400,n??h(),r)}}});var yt={};ce(yt,{PayloadTooLargeError:()=>D});var D,ye=te(()=>{"use strict";P();R();D=class extends w{constructor(t,r,n){super("PAYLOAD_TOO_LARGE",t,413,n??h(),r)}}});var St={};ce(St,{UnsupportedMediaTypeError:()=>V});var V,Se=te(()=>{"use strict";P();R();V=class extends w{constructor(t,r,n){super("UNSUPPORTED_MEDIA_TYPE",t,415,n??h(),r)}}});var Tr={};ce(Tr,{InternalServerError:()=>q});var q,ve=te(()=>{"use strict";P();R();q=class extends w{constructor(t,r=void 0,n=void 0){super("INTERNAL_SERVER_ERROR",t,500,n??h(),r)}}});var Qi={};ce(Qi,{Blaize:()=>Wi,BlaizeError:()=>w,ConflictError:()=>et,ConsoleTransport:()=>$,ErrorSeverity:()=>Vt,ErrorType:()=>M,EventValidationError:()=>j,ForbiddenError:()=>oe,InternalServerError:()=>q,JSONTransport:()=>Z,Logger:()=>re,MemoryEventBus:()=>ne,MiddlewareAPI:()=>hn,NotFoundError:()=>W,NullTransport:()=>le,PayloadTooLargeError:()=>D,PluginsAPI:()=>yn,RateLimitError:()=>tt,RequestTimeoutError:()=>rt,RouterAPI:()=>gn,ServerAPI:()=>mn,ServiceNotAvailableError:()=>ot,UnauthorizedError:()=>Xe,UnprocessableEntityError:()=>nt,UnsupportedMediaTypeError:()=>V,VERSION:()=>fn,ValidationError:()=>_,asMiddlewareArray:()=>Ui,asPluginArray:()=>qi,buildUrl:()=>Ve,compilePathPattern:()=>ie,compose:()=>K,configureGlobalLogger:()=>ue,cors:()=>fe,createDeleteRoute:()=>He,createGetRoute:()=>Fe,createHeadRoute:()=>qe,createLogger:()=>k,createMatcher:()=>se,createMiddleware:()=>L,createMiddlewareArray:()=>ji,createOptionsRoute:()=>je,createPatchRoute:()=>Ue,createPlugin:()=>ke,createPluginArray:()=>Vi,createPostRoute:()=>Ne,createPutRoute:()=>$e,createRouteFactory:()=>ht,createServer:()=>Ye,createServiceMiddleware:()=>ze,createStateMiddleware:()=>Oe,createTypedEventBus:()=>de,extractParams:()=>ee,getCorrelationId:()=>h,inferContext:()=>Bt,isMiddleware:()=>$i,isPlugin:()=>Hi,logger:()=>C,paramsToQuery:()=>ge,requestLoggerMiddleware:()=>ft});module.exports=xn(Qi);var Dt={name:"blaizejs",version:"0.9.0",description:"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.",author:"J.Lea-Jones <jason@careymarcel.com>",repository:{type:"git",url:"https://github.com/jleajones/blaize.git"},homepage:"https://github.com/jleajones/blaize/tree/main/packages/blaize-core#readme",bugs:{url:"https://github.com/jleajones/blaize/issues"},publishConfig:{access:"public"},type:"module",main:"./dist/index.js",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.cjs"}},files:["dist"],scripts:{dev:"NODE_ENV=development tsx --watch src/examples/basic.ts",build:"NODE_ENV=production tsup --minify","build:watch":"NODE_ENV=production tsup --watch","type-check":"tsc --noEmit",test:"vitest run --typecheck","test:watch":"vitest","test:coverage":"vitest run --coverage",lint:"eslint .",clean:"rimraf dist"},dependencies:{zod:"^3.24.4"},devDependencies:{"@blaizejs/eslint-config":"workspace:*","@blaizejs/testing-utils":"workspace:*","@blaizejs/tsconfig":"workspace:*","@blaizejs/tsup-config":"workspace:*","@blaizejs/vitest-config":"workspace:*","@types/node":"^22.15.17","@types/selfsigned":"^2.1.0","@vitest/coverage-v8":"^3.1.3",chokidar:"^4.0.3",selfsigned:"^2.4.1",tsx:"^4.19.4",typescript:"^5.8.3","vite-tsconfig-paths":"^5.1.4",vitest:"^3.1.3"},keywords:["nodejs","framework","typescript","http","http2","server","file-based-routing","middleware","plugins","type-safe"],license:"MIT"};var ct=require("crypto");var Nt=require("util");function it(e){return e instanceof Error}function st(e){return{message:e.message,name:e.name,stack:e.stack}}function Pe(e){let t={};for(let[r,n]of Object.entries(e))if(it(n))t[r]=st(n);else if(Array.isArray(n))t[r]=n.map(o=>it(o)?st(o):o);else if(n instanceof Date)t[r]=n;else if(n&&typeof n=="object"){let o={};for(let[i,s]of Object.entries(n))it(s)?o[i]=st(s):o[i]=s;t[r]=o}else t[r]=n;return t}function Ft(){let e=new WeakSet;return(t,r)=>{if(typeof r=="object"&&r!==null){if(e.has(r))return"[Circular]";e.add(r)}return r}}var Cn={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m"},Pn="\x1B[0m",Mn="\x1B[1m",$=class{write(t,r,n){let o=Pe(n),a=`${`${Cn[t]}${Mn}[${t.toUpperCase()}]${Pn}`} ${r}`,l=Object.keys(o).length>0?`
10
+ "use strict";var Pn=Object.create;var ze=Object.defineProperty;var Mn=Object.getOwnPropertyDescriptor;var zn=Object.getOwnPropertyNames;var _n=Object.getPrototypeOf,kn=Object.prototype.hasOwnProperty;var re=(e,t)=>()=>(e&&(t=e(e=0)),t);var le=(e,t)=>{for(var r in t)ze(e,r,{get:t[r],enumerable:!0})},Ut=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of zn(t))!kn.call(e,o)&&o!==r&&ze(e,o,{get:()=>t[o],enumerable:!(n=Mn(t,o))||n.enumerable});return e};var k=(e,t,r)=>(r=e!=null?Pn(_n(e)):{},Ut(t||!e||!e.__esModule?ze(r,"default",{value:e,enumerable:!0}):r,e)),On=e=>Ut(ze({},"__esModule",{value:!0}),e);function Nn(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`req_${e}_${t}`}function Gt(e,t){ke={headerName:e||lt.headerName,generator:t||lt.generator}}function K(){return ke.headerName}function $n(){return ke.generator()}function h(){let e=Qt.getStore();return e&&e.trim()?e:"unknown"}function Zt(e,t){return Qt.run(e,t)}function Oe(e){let t=ke.headerName,r=e[t],n;return Array.isArray(r)?n=r[0]:typeof r=="string"&&(n=r),n&&n.trim()?n:$n()}var Wt,lt,ke,Qt,C=re(()=>{"use strict";Wt=require("async_hooks"),lt={headerName:"x-correlation-id",generator:Nn},ke={...lt},Qt=new Wt.AsyncLocalStorage});var z,Jt,v,M=re(()=>{"use strict";z=(E=>(E.VALIDATION_ERROR="VALIDATION_ERROR",E.NOT_FOUND="NOT_FOUND",E.UNAUTHORIZED="UNAUTHORIZED",E.FORBIDDEN="FORBIDDEN",E.SSE_NOT_ACCEPTABLE="SSE_NOT_ACCEPTABLE",E.CONFLICT="CONFLICT",E.RATE_LIMITED="RATE_LIMITED",E.INTERNAL_SERVER_ERROR="INTERNAL_SERVER_ERROR",E.PAYLOAD_TOO_LARGE="PAYLOAD_TOO_LARGE",E.UNSUPPORTED_MEDIA_TYPE="UNSUPPORTED_MEDIA_TYPE",E.UPLOAD_TIMEOUT="UPLOAD_TIMEOUT",E.UNPROCESSABLE_ENTITY="UNPROCESSABLE_ENTITY",E.NETWORK_ERROR="NETWORK_ERROR",E.TIMEOUT_ERROR="TIMEOUT_ERROR",E.PARSE_ERROR="PARSE_ERROR",E.HTTP_ERROR="HTTP_ERROR",E.SSE_CONNECTION_ERROR="SSE_CONNECTION_ERROR",E.SSE_BUFFER_OVERFLOW="SSE_BUFFER_OVERFLOW",E.SSE_STREAM_CLOSED="SSE_STREAM_CLOSED",E.SERVICE_UNAVAILABLE="SERVICE_UNAVAILABLE",E))(z||{}),Jt=(o=>(o.LOW="low",o.MEDIUM="medium",o.HIGH="high",o.CRITICAL="critical",o))(Jt||{}),v=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}]`}}});var X={};le(X,{ValidationError:()=>b});var b,A=re(()=>{"use strict";M();C();b=class extends v{constructor(t,r=void 0,n=void 0){super("VALIDATION_ERROR",t,400,n??h(),r)}}});var wt={};le(wt,{PayloadTooLargeError:()=>I});var I,Se=re(()=>{"use strict";M();C();I=class extends v{constructor(t,r,n){super("PAYLOAD_TOO_LARGE",t,413,n??h(),r)}}});var vt={};le(vt,{UnsupportedMediaTypeError:()=>V});var V,we=re(()=>{"use strict";M();C();V=class extends v{constructor(t,r,n){super("UNSUPPORTED_MEDIA_TYPE",t,415,n??h(),r)}}});var Pr={};le(Pr,{InternalServerError:()=>q});var q,ve=re(()=>{"use strict";M();C();q=class extends v{constructor(t,r=void 0,n=void 0){super("INTERNAL_SERVER_ERROR",t,500,n??h(),r)}}});var rs={};le(rs,{Blaize:()=>ts,BlaizeError:()=>v,ConflictError:()=>rt,ConsoleTransport:()=>$,ErrorSeverity:()=>Jt,ErrorType:()=>z,EventValidationError:()=>j,ForbiddenError:()=>ie,InternalServerError:()=>q,JSONTransport:()=>J,Logger:()=>ne,MemoryEventBus:()=>oe,MiddlewareAPI:()=>xn,NotFoundError:()=>W,NullTransport:()=>ue,PayloadTooLargeError:()=>I,PluginsAPI:()=>Rn,RateLimitError:()=>nt,RequestTimeoutError:()=>ot,RouterAPI:()=>bn,ServerAPI:()=>Tn,ServiceNotAvailableError:()=>st,UnauthorizedError:()=>tt,UnprocessableEntityError:()=>it,UnsupportedMediaTypeError:()=>V,VERSION:()=>En,ValidationError:()=>b,asMiddlewareArray:()=>Ki,asPluginArray:()=>Yi,buildUrl:()=>Ge,compilePathPattern:()=>se,compose:()=>Y,configureGlobalLogger:()=>de,cors:()=>me,createDeleteRoute:()=>je,createGetRoute:()=>Ue,createHeadRoute:()=>We,createLogger:()=>O,createMatcher:()=>ae,createMiddleware:()=>F,createMiddlewareArray:()=>Xi,createOptionsRoute:()=>Qe,createPatchRoute:()=>Ve,createPlugin:()=>Ae,createPluginArray:()=>es,createPostRoute:()=>He,createPutRoute:()=>qe,createRouteFactory:()=>St,createServer:()=>et,createServiceMiddleware:()=>Le,createStateMiddleware:()=>Fe,createTypedEventBus:()=>pe,extractParams:()=>te,file:()=>At,getCorrelationId:()=>h,inferContext:()=>$t,isMiddleware:()=>Zi,isPlugin:()=>Ji,logger:()=>P,paramsToQuery:()=>he,requestLoggerMiddleware:()=>gt});module.exports=On(rs);var Ht={name:"blaizejs",version:"0.9.1",description:"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.",author:"J.Lea-Jones <jason@careymarcel.com>",repository:{type:"git",url:"https://github.com/jleajones/blaize.git"},homepage:"https://github.com/jleajones/blaize/tree/main/packages/blaize-core#readme",bugs:{url:"https://github.com/jleajones/blaize/issues"},publishConfig:{access:"public"},type:"module",main:"./dist/index.js",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.cjs"}},files:["dist"],scripts:{dev:"NODE_ENV=development tsx --watch src/examples/basic.ts",build:"NODE_ENV=production tsup --minify","build:watch":"NODE_ENV=production tsup --watch","type-check":"tsc --noEmit",test:"vitest run --typecheck","test:watch":"vitest","test:coverage":"vitest run --coverage",lint:"eslint .",clean:"rimraf dist"},dependencies:{zod:"^3.24.4"},devDependencies:{"@blaizejs/eslint-config":"workspace:*","@blaizejs/testing-utils":"workspace:*","@blaizejs/tsconfig":"workspace:*","@blaizejs/tsup-config":"workspace:*","@blaizejs/vitest-config":"workspace:*","@types/node":"^22.15.17","@types/selfsigned":"^2.1.0","@vitest/coverage-v8":"^3.1.3",chokidar:"^4.0.3",selfsigned:"^2.4.1",tsx:"^4.19.4",typescript:"^5.8.3","vite-tsconfig-paths":"^5.1.4",vitest:"^3.1.3"},keywords:["nodejs","framework","typescript","http","http2","server","file-based-routing","middleware","plugins","type-safe"],license:"MIT"};var ut=require("crypto");var jt=require("util");function at(e){return e instanceof Error}function ct(e){return{message:e.message,name:e.name,stack:e.stack}}function _e(e){let t={};for(let[r,n]of Object.entries(e))if(at(n))t[r]=ct(n);else if(Array.isArray(n))t[r]=n.map(o=>at(o)?ct(o):o);else if(n instanceof Date)t[r]=n;else if(n&&typeof n=="object"){let o={};for(let[i,s]of Object.entries(n))at(s)?o[i]=ct(s):o[i]=s;t[r]=o}else t[r]=n;return t}function qt(){let e=new WeakSet;return(t,r)=>{if(typeof r=="object"&&r!==null){if(e.has(r))return"[Circular]";e.add(r)}return r}}var Ln={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m"},An="\x1B[0m",Bn="\x1B[1m",$=class{write(t,r,n){let o=_e(n),a=`${`${Ln[t]}${Bn}[${t.toUpperCase()}]${An}`} ${r}`,l=Object.keys(o).length>0?`
11
11
 
12
- ${(0,Nt.inspect)(o,{colors:!0,depth:3,compact:!1,breakLength:80})}`:"";switch(t){case"error":console.error(a+l);break;case"warn":console.warn(a+l);break;case"debug":case"info":default:console.log(a+l);break}}};var Z=class{write(t,r,n){let o=Pe(n),i={level:t,message:r,...o},s=JSON.stringify(i,Ft());console.log(s)}async flush(){return Promise.resolve()}};var $t={debug:0,info:1,warn:2,error:3},re=class e{config;inheritedMeta;minLevelPriority;constructor(t,r){this.config=t,this.inheritedMeta=Object.freeze(r?{...r}:{}),this.minLevelPriority=$t[t.level]}debug(t,r){this.log("debug",t,r)}info(t,r){this.log("info",t,r)}warn(t,r){this.log("warn",t,r)}error(t,r){this.log("error",t,r)}child(t){let r={...this.inheritedMeta,...t};return new e(this.config,r)}async flush(){await this.config.transport.flush?.()}log(t,r,n){if(!this.shouldLog(t))return;let o={...this.inheritedMeta,...n||{}},i=o;this.config.includeTimestamp&&(i={timestamp:new Date().toISOString(),...o});let s=this.redact(i);this.config.transport.write(t,r,s)}shouldLog(t){return $t[t]>=this.minLevelPriority}redact(t){if(this.config.redactKeys.length===0)return t;let r=new Set(this.config.redactKeys.map(o=>o.toLowerCase())),n={};for(let[o,i]of Object.entries(t))r.has(o.toLowerCase())?n[o]="[REDACTED]":n[o]=i;return n}};function _n(){return process.env.NODE_ENV!=="production"?new $:new Z}function k(e){let t=process.env.NODE_ENV!=="production",r={level:e?.level??(t?"debug":"info"),transport:e?.transport??_n(),redactKeys:e?.redactKeys??[],includeTimestamp:e?.includeTimestamp??!0};return new re(r)}var le=class{write(t,r,n){}async flush(){return Promise.resolve()}};var C=k({level:process.env.NODE_ENV==="development"?"debug":"info",transport:new $,includeTimestamp:!0,redactKeys:[]}),On=C;function ue(e){let t=k(e);On=t,Object.assign(C,t)}R();function Ln(e){if(e==="*")return/^.*$/;let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,"[^:]*");return new RegExp(`^${t}$`)}function An(e){if(e instanceof RegExp)return e;if(e.includes("*"))return Ln(e);let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`^${t}$`)}var ne=class{serverId;subscriptions=new Map;adapter;adapterUnsubscribe;logger;constructor(t,r){this.serverId=t||(0,ct.randomUUID)(),r?this.logger=r.child({component:"EventBus",serverId:this.serverId}):this.logger=k().child({component:"EventBus",serverId:this.serverId})}async publish(t,r){if(!t||t.trim()==="")throw new Error("Event type cannot be empty");let n={type:t,data:r,timestamp:Date.now(),serverId:this.serverId,correlationId:h()};if(await this.emitToSubscribers(n),this.adapter)try{await this.adapter.publish(n)}catch(o){this.logger.error("Adapter publish failed",{eventType:t,serverId:this.serverId,error:o instanceof Error?o.message:String(o)})}}subscribe(t,r){if(typeof t=="string"&&t.trim()==="")throw new Error("Pattern cannot be empty");let n=(0,ct.randomUUID)(),o=An(t),i={id:n,pattern:t,matcher:o,handler:r};this.subscriptions.set(n,i);let s=!1;return()=>{s||(this.subscriptions.delete(n),s=!0)}}async setAdapter(t){this.adapter&&await this.disconnectAdapter(),this.adapter=t,await t.connect(),this.adapterUnsubscribe=await t.subscribe("*",r=>{r.serverId!==this.serverId&&this.emitToSubscribers(r)}),this.logger.info("Adapter connected",{serverId:this.serverId,adapterType:t.constructor.name})}async disconnect(){this.adapter&&await this.disconnectAdapter(),this.subscriptions.clear(),this.logger.info("EventBus disconnected",{serverId:this.serverId})}async disconnectAdapter(){if(this.adapter){this.adapterUnsubscribe&&(this.adapterUnsubscribe(),this.adapterUnsubscribe=void 0);try{await this.adapter.disconnect()}catch(t){this.logger.error("Adapter disconnect failed",{serverId:this.serverId,error:t instanceof Error?t.message:String(t)})}this.adapter=void 0}}async emitToSubscribers(t){let r=[];for(let o of this.subscriptions.values())o.matcher.test(t.type)&&r.push(o.handler);let n=r.map(async o=>{try{await o(t)}catch(i){this.logger.error("Event handler error",{eventType:t.type,serverId:t.serverId,correlationId:t.correlationId,error:i instanceof Error?i.message:String(i),stack:i instanceof Error?i.stack:void 0})}});await Promise.all(n)}};var Wt=require("zod");P();var j=class extends w{constructor(t,r,n){super("VALIDATION_ERROR",t,400,n??crypto.randomUUID(),r),this.name="EventValidationError"}toJSON(){let t={type:this.type,title:this.title,status:this.status,correlationId:this.correlationId,timestamp:this.timestamp.toISOString()};if(this.details){let r={eventType:this.details.eventType,context:this.details.context};return this.details.zodError&&(r.errors=this.details.zodError.issues.map(n=>({path:n.path.join("."),message:n.message,code:n.code}))),this.details.data!==void 0&&(r.data=this.details.data),{...t,details:r}}return t}toString(){let t=this.details?.context?` during ${this.details.context}`:"",r=this.details?.eventType?` for '${this.details.eventType}'`:"";return`${this.name}: ${this.title}${r}${t} [${this.correlationId}]`}};var lt=class{base;schemas;options;logger;constructor(t,r,n){this.base=t,this.schemas=r.schemas,this.options={schemas:r.schemas,unknownEventBehavior:r.unknownEventBehavior??"warn",onValidationError:r.onValidationError},n?this.logger=n.child({component:"TypedEventBus",serverId:t.serverId}):this.logger=k().child({component:"TypedEventBus",serverId:t.serverId})}async publish(t,r){let n=this.validateEvent(t,r,"publish");await this.base.publish(t,n)}subscribe(t,r){return this.base.subscribe(t,async n=>{try{let o=this.validateEvent(n.type,n.data,"receive"),i={...n,data:o};await r(i)}catch(o){if(o instanceof j){this.logger.error("Receive validation failed, dropping event",{eventType:n.type,serverId:n.serverId,correlationId:n.correlationId,validationErrors:o.details?.zodError?.issues});return}throw this.logger.error("Handler error",{eventType:n.type,error:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0}),o}})}async setAdapter(t){await this.base.setAdapter(t)}async disconnect(){await this.base.disconnect()}get serverId(){return this.base.serverId}validateEvent(t,r,n){let o=this.schemas[t];if(!o)return this.handleUnknownEvent(t,r,n);try{return o.parse(r)}catch(i){let s=new j(`Event validation failed for "${t}"`,{eventType:t,context:n,zodError:i instanceof Wt.z.ZodError?i:void 0,data:r});throw this.options.onValidationError&&this.options.onValidationError(s),s}}handleUnknownEvent(t,r,n){let o=this.options.unknownEventBehavior;if(o==="error"){let i=new j(`Unknown event type: "${t}"`,{eventType:t,context:n,data:r});throw this.options.onValidationError&&this.options.onValidationError(i),i}return o==="warn"&&this.logger.warn("Unknown event type, allowing through",{eventType:t,context:n}),r}};function de(e,t,r){return new lt(e,t,r)}function Qt(e,t,r,n,o){if(!e||e.skip&&e.skip(t))return Promise.resolve(r());try{let i=e.execute({ctx:t,next:r,logger:n,eventBus:o});return i instanceof Promise?i:Promise.resolve(i)}catch(i){return Promise.reject(i)}}function K(e){return e.length===0?async({next:t})=>{await Promise.resolve(t())}:async function(t){let{ctx:r,next:n,logger:o,eventBus:i}=t,s=new Set,a=async c=>{if(c>=e.length)return Promise.resolve(n());let l=e[c],u=()=>{if(s.has(c))throw new Error("next() called multiple times");return s.add(c),a(c+1)},m=o.child({middleware:l?.name||"anonymous"});return Qt(l,r,u,m,i)};return a(0)}}P();R();var oe=class extends w{constructor(t,r=void 0,n=void 0){super("FORBIDDEN",t,403,n??h(),r)}};function L(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 Oe(e){return L({name:"state-middleware",handler:e})}function ze(e){return L({name:"service-middleware",handler:e})}var Bn={origin:!0,methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],credentials:!1,optionsSuccessStatus:204},In={origin:!1,methods:["GET","HEAD"],credentials:!1,optionsSuccessStatus:204};function Gt(e){return e===void 0&&(e=process.env.NODE_ENV!=="production"),e?{...Bn}:{...In}}function Dn(e=6e4,t=1e3){let r=new Map,n={ttl:e,maxSize:t},o=(m,T,b)=>`${m}:${T}:${b||"anonymous"}`,i=()=>{if(r.size===0)return;let m=null,T=1/0;for(let[b,d]of r.entries())d.lastAccessed<T&&(T=d.lastAccessed,m=b);m&&r.delete(m)};return{get:(m,T,b)=>{let d=o(m,T,b),g=r.get(d);if(!g)return null;let v=Date.now();return v>g.expiresAt?(r.delete(d),null):(g.lastAccessed=v,g.allowed)},set:(m,T,b,d)=>{let g=o(m,b,d),v=Date.now();if(r.has(g)){r.set(g,{allowed:T,expiresAt:v+n.ttl,lastAccessed:v});return}r.size>=n.maxSize&&i(),r.set(g,{allowed:T,expiresAt:v+n.ttl,lastAccessed:v})},clear:()=>{r.clear()},cleanExpired:()=>{let m=Date.now(),T=0;for(let[b,d]of r.entries())m>d.expiresAt&&(r.delete(b),T++);return T},getStats:()=>({size:r.size,maxSize:n.maxSize,ttl:n.ttl})}}var Zt=Dn();function Fn(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 Nn(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 $n(e,t){return t==="*"?!0:e===t}async function Hn(e,t){return t.test(e)}async function Un(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 Jt(e,t,r){let n=t.map(i=>ut(e,i,r));return(await Promise.all(n)).some(i=>i===!0)}async function ut(e,t,r){return typeof t=="string"?$n(e,t):t instanceof RegExp?Hn(e,t):typeof t=="function"?Un(e,t,r):(console.warn("Unknown CORS origin type:",typeof t),!1)}async function pe(e,t,r){if(t===!0)return!0;if(t===!1)return!1;if(Fn(t)){let o=r?.state?.user?.id||r?.state?.userId,i=Nn(t),s=Zt.get(e,i,o);if(s!==null)return s;let a;return Array.isArray(t)?a=await Jt(e,t,r):a=await ut(e,t,r),Zt.set(e,a,i,o),a}else return Array.isArray(t)?Jt(e,t,r):ut(e,t,r)}I();function qn(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 dt(e){return e.toUpperCase()}function jn(e,t){return t?(typeof t=="string"?t.split(",").map(n=>n.trim()):t).map(n=>dt(n)).includes(dt(e)):["GET","HEAD","PUT","PATCH","POST","DELETE"].includes(dt(e))}function Vn(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 Wn(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 Kt(e,t){let r=qn(e);if(!r.origin||!r.requestedMethod)throw e.response.status(403),new _("Invalid preflight request: missing required headers",{fields:[{field:r.origin?"Access-Control-Request-Method":"Origin",messages:["Required header is missing"]}],errorCount:1,section:"body"});let n=await pe(r.origin,t.origin||!1,e);if(!n)throw e.response.status(403),new _("CORS origin not allowed",{fields:[{field:"Origin",messages:[`Origin '${r.origin}' is not allowed`],rejectedValue:r.origin}],errorCount:1,section:"body"});if(!jn(r.requestedMethod,t.methods))throw e.response.status(403),new _("CORS method not allowed",{fields:[{field:"Access-Control-Request-Method",messages:[`Method '${r.requestedMethod}' is not allowed`],rejectedValue:r.requestedMethod,expectedType:typeof t.methods=="string"?t.methods:t.methods?.join(", ")}],errorCount:1,section:"body"});if(!Vn(r.requestedHeaders,t.allowedHeaders)){let i=r.requestedHeaders?.filter(s=>{let a=t.allowedHeaders;return a?!(typeof a=="string"?a.split(",").map(l=>l.trim().toLowerCase()):a.map(l=>l.toLowerCase())).includes(s.toLowerCase()):!1});throw e.response.status(403),new _("CORS headers not allowed",{fields:[{field:"Access-Control-Request-Headers",messages:[`Headers not allowed: ${i?.join(", ")}`],rejectedValue:i}],errorCount:1,section:"body"})}Wn(e,t,r.origin,n);let o=t.optionsSuccessStatus||204;e.response.status(o),t.preflightContinue||e.response.text("")}function pt(e){return e.request.method==="OPTIONS"&&!!(e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"))}var x=require("zod"),Qn=x.z.enum(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]),Gn=x.z.union([x.z.array(Qn),x.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),Yt=x.z.union([x.z.array(x.z.string()),x.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),Zn=x.z.custom(e=>typeof e=="function"&&e.length<=2,{message:"Origin validator must be a function accepting (origin, ctx?) parameters"}),Xt=x.z.union([x.z.string(),x.z.instanceof(RegExp),Zn]),Jn=x.z.union([x.z.boolean(),Xt,x.z.array(Xt)]),er=x.z.object({origin:Jn.optional(),methods:Gn,allowedHeaders:Yt,exposedHeaders:Yt,credentials:x.z.boolean().optional(),maxAge:x.z.number().int().optional(),preflightContinue:x.z.boolean().optional(),optionsSuccessStatus:x.z.number().int().min(200).max(299).optional()}).strict(),tr=x.z.union([x.z.boolean(),er]).optional();function rr(e){try{return typeof e=="boolean"?e===!1?{origin:!1}:{origin:!0}:er.parse(e)}catch(t){if(t instanceof x.z.ZodError){let r=Kn(t);throw new Error(`Invalid CORS options:
13
- ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function Kn(e){return e.errors.map(r=>` - ${r.path.join(".")||"root"}: ${r.message}`).join(`
14
- `)}function Yn(e){return Array.isArray(e)}function nr(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(Yn(e.origin)&&e.origin.some(r=>r==="*"))throw new Error("CORS security violation: Cannot include wildcard origin (*) in array when credentials are enabled.")}}function or(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 Xn(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 fe(e){let t=process.env.NODE_ENV==="development",r=Gt(t),n=or(e,r),o=rr(n);return nr(o),L({name:"cors",handler:async({ctx:i,next:s})=>{let a=i.request.header("origin")||i.request.header("Origin");if(pt(i)){if(await Kt(i,o),!o.preflightContinue)return}else{if(!a){await s();return}let c=await pe(a,o.origin||!1,i);if(!c)throw i.response.status(403),new oe("CORS validation failed",{reason:"origin_not_allowed",origin:a,allowedOrigins:o.origin});Xn(i,o,a,c)}await s()},debug:process.env.DEBUG?.includes("cors")})}P();var eo=["accept","content-type","user-agent","x-correlation-id"],to=["authorization","cookie","x-api-key","proxy-authorization"];function ro(e,t){let r={},n=new Set(t.map(i=>i.toLowerCase())),o=new Set(to.map(i=>i.toLowerCase()));for(let[i,s]of Object.entries(e)){let a=i.toLowerCase();n.has(a)&&(o.has(a)?r[i]="[REDACTED]":r[i]=s)}return r}function ft(e){return L({name:"requestLogger",handler:async({ctx:t,next:r,logger:n})=>{let o=Date.now(),i;"socket"in t.request.raw&&(i=t.request.raw.socket?.remoteAddress);let s={timestamp:new Date().toISOString()};if(i&&(s.ip=i),e?.includeHeaders){let c=e.headerWhitelist||eo,l=t.request.headers(),u=ro(l,c);Object.keys(u).length>0&&(s.headers=u)}if(e?.includeQuery){let c=t.request.query;c&&Object.keys(c).length>0&&(s.query=c)}n.info("Request started",s);let a;try{await r()}catch(c){a=c}finally{let c=Date.now()-o;if(a){let l={duration:c,timestamp:new Date().toISOString()};a instanceof w?l.error={type:a.type,title:a.title,status:a.status,message:a.message,details:a.details,...a.status>=500&&a.stack?{stack:a.stack}:{}}:a instanceof Error?l.error={message:a.message,name:a.name,stack:a.stack}:l.error=String(a),n.error("Request failed",l)}else{let l=t.response.statusCode||200;n.info("Request completed",{statusCode:l,duration:c,timestamp:new Date().toISOString()})}if(a)throw a}}})}function ke(e){if(!e.name||typeof e.name!="string")throw new Error("Plugin name must be a non-empty string");if(!e.version||typeof e.version!="string")throw new Error("Plugin version must be a non-empty string");if(typeof e.setup!="function")throw new Error("Plugin setup must be a function");return function(r){let n={...e.defaultConfig||{},...r||{}},o=k().child({plugin:e.name,version:e.version}),i=null,s=!1;return{name:e.name,version:e.version,register:async c=>{if(!s){if(i=e.setup({config:n,logger:o,eventBus:c.eventBus}),i===null||typeof i!="object")throw new Error(`Plugin "${e.name}" setup() must return an object with lifecycle hooks`);s=!0}i?.register?await i.register(c):o.debug("Plugin registered (no register hook)")},initialize:async c=>{if(!s)throw new Error(`Plugin "${e.name}" initialize() called before register(). Plugins must be registered to the server before initialization.`);i?.initialize&&await i.initialize(c)},onServerStart:async c=>{if(!s)throw new Error(`Plugin "${e.name}" onServerStart() called before register(). Plugins must be registered to the server before initialization.`);i?.onServerStart&&await i.onServerStart(c)},onServerStop:async c=>{s&&i?.onServerStop&&await i.onServerStop(c)},terminate:async c=>{s&&i?.terminate&&await i.terminate(c)}}}}var fr=require("url");var Le={};function ir(e){Le={...Le,...e}}function sr(){if(!Le.routesDir)throw new Error("Routes directory not configured. Make sure server is properly initialized.");return Le.routesDir}var ar=z(require("path"),1);function Ae(e,t){e.startsWith("file://")&&(e=e.replace("file://","")),t.startsWith("file://")&&(t=t.replace("file://",""));let r=e.replace(/\\/g,"/"),n=t.replace(/\\/g,"/"),o=n.endsWith("/")?n:`${n}/`,i=r;r.startsWith(o)?i=r.substring(o.length):r.startsWith(n)?(i=r.substring(n.length),i.startsWith("/")&&(i=i.substring(1))):i=ar.relative(n,r).replace(/\\/g,"/"),i=i.replace(/\.[^.]+$/,"");let s=i.split("/").filter(Boolean),a=[],c=s.map(u=>{if(u.startsWith("[")&&u.endsWith("]")){let m=u.slice(1,-1);return a.push(m),`:${m}`}return u}),l=c.length>0?`/${c.join("/")}`:"/";return l.endsWith("/index")&&(l=l.slice(0,-6)||"/"),{filePath:e,routePath:l,params:a}}var ur=require("events");var A=require("zod"),no=A.z.enum(["drop-oldest","drop-newest","close"]),oo=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"]}),io=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")}),cr=A.z.object({enabled:A.z.boolean().default(!0).describe("Enable backpressure management"),strategy:no.default("drop-oldest").describe("Strategy when buffer reaches high watermark"),watermarks:oo.default({low:100,high:1e3}).describe("Buffer watermark thresholds"),limits:io.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 so={maxConnections:1e4,maxConnectionsPerClient:100,inactiveTimeout:18e5,cleanupInterval:6e4};function ao(e){let t={...so,...e},r=new Map,n=new Map,o=null,i={},s=p=>{!o&&t.cleanupInterval>0&&(o=setInterval(()=>{p()},t.cleanupInterval),o.unref&&o.unref())},a=()=>{o&&(clearInterval(o),o=null)},c=(p,y)=>{if(!p)return;let E=(n.get(p)||0)+y;E<=0?n.delete(p):n.set(p,E)},l=(p,y,f)=>{if(r.has(p))throw new Error(`Connection with ID ${p} already exists`);if(r.size>=t.maxConnections)throw new Error(`Maximum connection limit reached (${t.maxConnections})`);if(f?.clientIp&&(n.get(f.clientIp)||0)>=t.maxConnectionsPerClient)throw new Error(`Maximum connections per client reached (${t.maxConnectionsPerClient})`);let E=Date.now();r.set(p,{stream:y,connectedAt:E,lastActivity:E,clientIp:f?.clientIp,userAgent:f?.userAgent}),c(f?.clientIp,1),r.size===1&&s(i.cleanup),y.onClose(()=>{u(p)})},u=p=>{let y=r.get(p);y&&(r.delete(p),c(y.clientIp,-1),r.size===0&&a())},m=()=>r.size,T=()=>{let p=Date.now(),y=[];r.forEach((f,E)=>{let N=p-f.lastActivity>t.inactiveTimeout,Sn=!f.stream||f.stream.state==="closed"||!f.stream.isWritable;if((N||Sn)&&(y.push(E),f.stream&&typeof f.stream.close=="function"))try{f.stream.close()}catch{}}),y.forEach(f=>u(f))},b=p=>r.get(p)?.stream,d=p=>r.has(p),g=()=>Array.from(r.keys()),v=()=>{a(),r.forEach(p=>{if(p.stream&&typeof p.stream.close=="function")try{p.stream.close()}catch{}}),r.clear(),n.clear()};return i.add=l,i.remove=u,i.count=m,i.cleanup=T,i.get=b,i.has=d,i.getIds=g,i.shutdown=v,i}var mt=null;function Be(e){return mt||(mt=ao(e)),mt}P();R();var me=class extends w{constructor(t,r,n=void 0){super("SSE_BUFFER_OVERFLOW",t,503,n??h(),r)}};P();R();var Ie=class extends w{constructor(t,r=void 0,n=void 0){super("SSE_STREAM_CLOSED",t,410,n??h(),r)}};R();var co={heartbeatInterval:3e4,maxEventSize:1024*1024,autoClose:!0,maxBufferSize:1e3,bufferStrategy:"drop-oldest"};function lr(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(`
12
+ ${(0,jt.inspect)(o,{colors:!0,depth:3,compact:!1,breakLength:80})}`:"";switch(t){case"error":console.error(a+l);break;case"warn":console.warn(a+l);break;case"debug":case"info":default:console.log(a+l);break}}};var J=class{write(t,r,n){let o=_e(n),i={level:t,message:r,...o},s=JSON.stringify(i,qt());console.log(s)}async flush(){return Promise.resolve()}};var Vt={debug:0,info:1,warn:2,error:3},ne=class e{config;inheritedMeta;minLevelPriority;constructor(t,r){this.config=t,this.inheritedMeta=Object.freeze(r?{...r}:{}),this.minLevelPriority=Vt[t.level]}debug(t,r){this.log("debug",t,r)}info(t,r){this.log("info",t,r)}warn(t,r){this.log("warn",t,r)}error(t,r){this.log("error",t,r)}child(t){let r={...this.inheritedMeta,...t};return new e(this.config,r)}async flush(){await this.config.transport.flush?.()}log(t,r,n){if(!this.shouldLog(t))return;let o={...this.inheritedMeta,...n||{}},i=o;this.config.includeTimestamp&&(i={timestamp:new Date().toISOString(),...o});let s=this.redact(i);this.config.transport.write(t,r,s)}shouldLog(t){return Vt[t]>=this.minLevelPriority}redact(t){if(this.config.redactKeys.length===0)return t;let r=new Set(this.config.redactKeys.map(o=>o.toLowerCase())),n={};for(let[o,i]of Object.entries(t))r.has(o.toLowerCase())?n[o]="[REDACTED]":n[o]=i;return n}};function In(){return process.env.NODE_ENV!=="production"?new $:new J}function O(e){let t=process.env.NODE_ENV!=="production",r={level:e?.level??(t?"debug":"info"),transport:e?.transport??In(),redactKeys:e?.redactKeys??[],includeTimestamp:e?.includeTimestamp??!0};return new ne(r)}var ue=class{write(t,r,n){}async flush(){return Promise.resolve()}};var P=O({level:process.env.NODE_ENV==="development"?"debug":"info",transport:new $,includeTimestamp:!0,redactKeys:[]}),Dn=P;function de(e){let t=O(e);Dn=t,Object.assign(P,t)}C();function Un(e){if(e==="*")return/^.*$/;let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,"[^:]*");return new RegExp(`^${t}$`)}function Hn(e){if(e instanceof RegExp)return e;if(e.includes("*"))return Un(e);let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`^${t}$`)}var oe=class{serverId;subscriptions=new Map;adapter;adapterUnsubscribe;logger;constructor(t,r){this.serverId=t||(0,ut.randomUUID)(),r?this.logger=r.child({component:"EventBus",serverId:this.serverId}):this.logger=O().child({component:"EventBus",serverId:this.serverId})}async publish(t,r){if(!t||t.trim()==="")throw new Error("Event type cannot be empty");let n={type:t,data:r,timestamp:Date.now(),serverId:this.serverId,correlationId:h()};if(await this.emitToSubscribers(n),this.adapter)try{await this.adapter.publish(n)}catch(o){this.logger.error("Adapter publish failed",{eventType:t,serverId:this.serverId,error:o instanceof Error?o.message:String(o)})}}subscribe(t,r){if(typeof t=="string"&&t.trim()==="")throw new Error("Pattern cannot be empty");let n=(0,ut.randomUUID)(),o=Hn(t),i={id:n,pattern:t,matcher:o,handler:r};this.subscriptions.set(n,i);let s=!1;return()=>{s||(this.subscriptions.delete(n),s=!0)}}async setAdapter(t){this.adapter&&await this.disconnectAdapter(),this.adapter=t,await t.connect(),this.adapterUnsubscribe=await t.subscribe("*",r=>{r.serverId!==this.serverId&&this.emitToSubscribers(r)}),this.logger.info("Adapter connected",{serverId:this.serverId,adapterType:t.constructor.name})}async disconnect(){this.adapter&&await this.disconnectAdapter(),this.subscriptions.clear(),this.logger.info("EventBus disconnected",{serverId:this.serverId})}async disconnectAdapter(){if(this.adapter){this.adapterUnsubscribe&&(this.adapterUnsubscribe(),this.adapterUnsubscribe=void 0);try{await this.adapter.disconnect()}catch(t){this.logger.error("Adapter disconnect failed",{serverId:this.serverId,error:t instanceof Error?t.message:String(t)})}this.adapter=void 0}}async emitToSubscribers(t){let r=[];for(let o of this.subscriptions.values())o.matcher.test(t.type)&&r.push(o.handler);let n=r.map(async o=>{try{await o(t)}catch(i){this.logger.error("Event handler error",{eventType:t.type,serverId:t.serverId,correlationId:t.correlationId,error:i instanceof Error?i.message:String(i),stack:i instanceof Error?i.stack:void 0})}});await Promise.all(n)}};var Kt=require("zod");M();var j=class extends v{constructor(t,r,n){super("VALIDATION_ERROR",t,400,n??crypto.randomUUID(),r),this.name="EventValidationError"}toJSON(){let t={type:this.type,title:this.title,status:this.status,correlationId:this.correlationId,timestamp:this.timestamp.toISOString()};if(this.details){let r={eventType:this.details.eventType,context:this.details.context};return this.details.zodError&&(r.errors=this.details.zodError.issues.map(n=>({path:n.path.join("."),message:n.message,code:n.code}))),this.details.data!==void 0&&(r.data=this.details.data),{...t,details:r}}return t}toString(){let t=this.details?.context?` during ${this.details.context}`:"",r=this.details?.eventType?` for '${this.details.eventType}'`:"";return`${this.name}: ${this.title}${r}${t} [${this.correlationId}]`}};var dt=class{base;schemas;options;logger;constructor(t,r,n){this.base=t,this.schemas=r.schemas,this.options={schemas:r.schemas,unknownEventBehavior:r.unknownEventBehavior??"warn",onValidationError:r.onValidationError},n?this.logger=n.child({component:"TypedEventBus",serverId:t.serverId}):this.logger=O().child({component:"TypedEventBus",serverId:t.serverId})}async publish(t,r){let n=this.validateEvent(t,r,"publish");await this.base.publish(t,n)}subscribe(t,r){return this.base.subscribe(t,async n=>{try{let o=this.validateEvent(n.type,n.data,"receive"),i={...n,data:o};await r(i)}catch(o){if(o instanceof j){this.logger.error("Receive validation failed, dropping event",{eventType:n.type,serverId:n.serverId,correlationId:n.correlationId,validationErrors:o.details?.zodError?.issues});return}throw this.logger.error("Handler error",{eventType:n.type,error:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0}),o}})}async setAdapter(t){await this.base.setAdapter(t)}async disconnect(){await this.base.disconnect()}get serverId(){return this.base.serverId}validateEvent(t,r,n){let o=this.schemas[t];if(!o)return this.handleUnknownEvent(t,r,n);try{return o.parse(r)}catch(i){let s=new j(`Event validation failed for "${t}"`,{eventType:t,context:n,zodError:i instanceof Kt.z.ZodError?i:void 0,data:r});throw this.options.onValidationError&&this.options.onValidationError(s),s}}handleUnknownEvent(t,r,n){let o=this.options.unknownEventBehavior;if(o==="error"){let i=new j(`Unknown event type: "${t}"`,{eventType:t,context:n,data:r});throw this.options.onValidationError&&this.options.onValidationError(i),i}return o==="warn"&&this.logger.warn("Unknown event type, allowing through",{eventType:t,context:n}),r}};function pe(e,t,r){return new dt(e,t,r)}function Yt(e,t,r,n,o){if(!e||e.skip&&e.skip(t))return Promise.resolve(r());try{let i=e.execute({ctx:t,next:r,logger:n,eventBus:o});return i instanceof Promise?i:Promise.resolve(i)}catch(i){return Promise.reject(i)}}function Y(e){return e.length===0?async({next:t})=>{await Promise.resolve(t())}:async function(t){let{ctx:r,next:n,logger:o,eventBus:i}=t,s=new Set,a=async c=>{if(c>=e.length)return Promise.resolve(n());let l=e[c],u=()=>{if(s.has(c))throw new Error("next() called multiple times");return s.add(c),a(c+1)},p=o.child({middleware:l?.name||"anonymous"});return Yt(l,r,u,p,i)};return a(0)}}M();C();var ie=class extends v{constructor(t,r=void 0,n=void 0){super("FORBIDDEN",t,403,n??h(),r)}};function F(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 Fe(e){return F({name:"state-middleware",handler:e})}function Le(e){return F({name:"service-middleware",handler:e})}var qn={origin:!0,methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],credentials:!1,optionsSuccessStatus:204},jn={origin:!1,methods:["GET","HEAD"],credentials:!1,optionsSuccessStatus:204};function Xt(e){return e===void 0&&(e=process.env.NODE_ENV!=="production"),e?{...qn}:{...jn}}function Vn(e=6e4,t=1e3){let r=new Map,n={ttl:e,maxSize:t},o=(p,T,x)=>`${p}:${T}:${x||"anonymous"}`,i=()=>{if(r.size===0)return;let p=null,T=1/0;for(let[x,d]of r.entries())d.lastAccessed<T&&(T=d.lastAccessed,p=x);p&&r.delete(p)};return{get:(p,T,x)=>{let d=o(p,T,x),g=r.get(d);if(!g)return null;let w=Date.now();return w>g.expiresAt?(r.delete(d),null):(g.lastAccessed=w,g.allowed)},set:(p,T,x,d)=>{let g=o(p,x,d),w=Date.now();if(r.has(g)){r.set(g,{allowed:T,expiresAt:w+n.ttl,lastAccessed:w});return}r.size>=n.maxSize&&i(),r.set(g,{allowed:T,expiresAt:w+n.ttl,lastAccessed:w})},clear:()=>{r.clear()},cleanExpired:()=>{let p=Date.now(),T=0;for(let[x,d]of r.entries())p>d.expiresAt&&(r.delete(x),T++);return T},getStats:()=>({size:r.size,maxSize:n.maxSize,ttl:n.ttl})}}var er=Vn();function Wn(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 Qn(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 Gn(e,t){return t==="*"?!0:e===t}async function Zn(e,t){return t.test(e)}async function Jn(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 tr(e,t,r){let n=t.map(i=>pt(e,i,r));return(await Promise.all(n)).some(i=>i===!0)}async function pt(e,t,r){return typeof t=="string"?Gn(e,t):t instanceof RegExp?Zn(e,t):typeof t=="function"?Jn(e,t,r):(console.warn("Unknown CORS origin type:",typeof t),!1)}async function fe(e,t,r){if(t===!0)return!0;if(t===!1)return!1;if(Wn(t)){let o=r?.state?.user?.id||r?.state?.userId,i=Qn(t),s=er.get(e,i,o);if(s!==null)return s;let a;return Array.isArray(t)?a=await tr(e,t,r):a=await pt(e,t,r),er.set(e,a,i,o),a}else return Array.isArray(t)?tr(e,t,r):pt(e,t,r)}A();function Kn(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 ft(e){return e.toUpperCase()}function Yn(e,t){return t?(typeof t=="string"?t.split(",").map(n=>n.trim()):t).map(n=>ft(n)).includes(ft(e)):["GET","HEAD","PUT","PATCH","POST","DELETE"].includes(ft(e))}function Xn(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 eo(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 rr(e,t){let r=Kn(e);if(!r.origin||!r.requestedMethod)throw e.response.status(403),new b("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 fe(r.origin,t.origin||!1,e);if(!n)throw e.response.status(403),new b("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 b("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(!Xn(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 b("CORS headers not allowed",{fields:[{field:"Access-Control-Request-Headers",messages:[`Headers not allowed: ${i?.join(", ")}`],rejectedValue:i}],errorCount:1,section:"body"})}eo(e,t,r.origin,n);let o=t.optionsSuccessStatus||204;e.response.status(o),t.preflightContinue||e.response.text("")}function mt(e){return e.request.method==="OPTIONS"&&!!(e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"))}var R=require("zod"),to=R.z.enum(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]),ro=R.z.union([R.z.array(to),R.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),nr=R.z.union([R.z.array(R.z.string()),R.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),no=R.z.custom(e=>typeof e=="function"&&e.length<=2,{message:"Origin validator must be a function accepting (origin, ctx?) parameters"}),or=R.z.union([R.z.string(),R.z.instanceof(RegExp),no]),oo=R.z.union([R.z.boolean(),or,R.z.array(or)]),ir=R.z.object({origin:oo.optional(),methods:ro,allowedHeaders:nr,exposedHeaders:nr,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(),sr=R.z.union([R.z.boolean(),ir]).optional();function ar(e){try{return typeof e=="boolean"?e===!1?{origin:!1}:{origin:!0}:ir.parse(e)}catch(t){if(t instanceof R.z.ZodError){let r=io(t);throw new Error(`Invalid CORS options:
13
+ ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function io(e){return e.errors.map(r=>` - ${r.path.join(".")||"root"}: ${r.message}`).join(`
14
+ `)}function so(e){return Array.isArray(e)}function cr(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(so(e.origin)&&e.origin.some(r=>r==="*"))throw new Error("CORS security violation: Cannot include wildcard origin (*) in array when credentials are enabled.")}}function lr(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 ao(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 me(e){let t=process.env.NODE_ENV==="development",r=Xt(t),n=lr(e,r),o=ar(n);return cr(o),F({name:"cors",handler:async({ctx:i,next:s})=>{let a=i.request.header("origin")||i.request.header("Origin");if(mt(i)){if(await rr(i,o),!o.preflightContinue)return}else{if(!a){await s();return}let c=await fe(a,o.origin||!1,i);if(!c)throw i.response.status(403),new ie("CORS validation failed",{reason:"origin_not_allowed",origin:a,allowedOrigins:o.origin});ao(i,o,a,c)}await s()},debug:process.env.DEBUG?.includes("cors")})}M();var co=["accept","content-type","user-agent","x-correlation-id"],lo=["authorization","cookie","x-api-key","proxy-authorization"];function uo(e,t){let r={},n=new Set(t.map(i=>i.toLowerCase())),o=new Set(lo.map(i=>i.toLowerCase()));for(let[i,s]of Object.entries(e)){let a=i.toLowerCase();n.has(a)&&(o.has(a)?r[i]="[REDACTED]":r[i]=s)}return r}function gt(e){return F({name:"requestLogger",handler:async({ctx:t,next:r,logger:n})=>{let o=Date.now(),i;"socket"in t.request.raw&&(i=t.request.raw.socket?.remoteAddress);let s={timestamp:new Date().toISOString()};if(i&&(s.ip=i),e?.includeHeaders){let c=e.headerWhitelist||co,l=t.request.headers(),u=uo(l,c);Object.keys(u).length>0&&(s.headers=u)}if(e?.includeQuery){let c=t.request.query;c&&Object.keys(c).length>0&&(s.query=c)}n.info("Request started",s);let a;try{await r()}catch(c){a=c}finally{let c=Date.now()-o;if(a){let l={duration:c,timestamp:new Date().toISOString()};a instanceof v?l.error={type:a.type,title:a.title,status:a.status,message:a.message,details:a.details,...a.status>=500&&a.stack?{stack:a.stack}:{}}:a instanceof Error?l.error={message:a.message,name:a.name,stack:a.stack}:l.error=String(a),n.error("Request failed",l)}else{let l=t.response.statusCode||200;n.info("Request completed",{statusCode:l,duration:c,timestamp:new Date().toISOString()})}if(a)throw a}}})}function Ae(e){if(!e.name||typeof e.name!="string")throw new Error("Plugin name must be a non-empty string");if(!e.version||typeof e.version!="string")throw new Error("Plugin version must be a non-empty string");if(typeof e.setup!="function")throw new Error("Plugin setup must be a function");return function(r){let n={...e.defaultConfig||{},...r||{}},o=O().child({plugin:e.name,version:e.version}),i=null,s=!1;return{name:e.name,version:e.version,register:async c=>{if(!s){if(i=e.setup({config:n,logger:o,eventBus:c.eventBus}),i===null||typeof i!="object")throw new Error(`Plugin "${e.name}" setup() must return an object with lifecycle hooks`);s=!0}i?.register?await i.register(c):o.debug("Plugin registered (no register hook)")},initialize:async c=>{if(!s)throw new Error(`Plugin "${e.name}" initialize() called before register(). Plugins must be registered to the server before initialization.`);i?.initialize&&await i.initialize(c)},onServerStart:async c=>{if(!s)throw new Error(`Plugin "${e.name}" onServerStart() called before register(). Plugins must be registered to the server before initialization.`);i?.onServerStart&&await i.onServerStart(c)},onServerStop:async c=>{s&&i?.onServerStop&&await i.onServerStop(c)},terminate:async c=>{s&&i?.terminate&&await i.terminate(c)}}}}var Sr=require("url");var Be={};function ur(e){Be={...Be,...e}}function dr(){if(!Be.routesDir)throw new Error("Routes directory not configured. Make sure server is properly initialized.");return Be.routesDir}var pr=k(require("path"),1);function Ie(e,t){e.startsWith("file://")&&(e=e.replace("file://","")),t.startsWith("file://")&&(t=t.replace("file://",""));let r=e.replace(/\\/g,"/"),n=t.replace(/\\/g,"/"),o=n.endsWith("/")?n:`${n}/`,i=r;r.startsWith(o)?i=r.substring(o.length):r.startsWith(n)?(i=r.substring(n.length),i.startsWith("/")&&(i=i.substring(1))):i=pr.relative(n,r).replace(/\\/g,"/"),i=i.replace(/\.[^.]+$/,"");let s=i.split("/").filter(Boolean),a=[],c=s.map(u=>{if(u.startsWith("[")&&u.endsWith("]")){let p=u.slice(1,-1);return a.push(p),`:${p}`}return u}),l=c.length>0?`/${c.join("/")}`:"/";return l.endsWith("/index")&&(l=l.slice(0,-6)||"/"),{filePath:e,routePath:l,params:a}}var gr=require("events");var L=require("zod"),po=L.z.enum(["drop-oldest","drop-newest","close"]),fo=L.z.object({low:L.z.number().int().positive().describe("Resume threshold in messages"),high:L.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"]}),mo=L.z.object({maxMessages:L.z.number().int().positive().max(1e5).describe("Maximum number of messages in buffer"),maxBytes:L.z.number().int().positive().max(100*1024*1024).optional().describe("Maximum buffer size in bytes"),messageTimeout:L.z.number().int().nonnegative().max(3e5).optional().describe("Message TTL in milliseconds")}),fr=L.z.object({enabled:L.z.boolean().default(!0).describe("Enable backpressure management"),strategy:po.default("drop-oldest").describe("Strategy when buffer reaches high watermark"),watermarks:fo.default({low:100,high:1e3}).describe("Buffer watermark thresholds"),limits:mo.default({maxMessages:1e4}).describe("Buffer size constraints"),metrics:L.z.object({enabled:L.z.boolean().default(!1),interval:L.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 go={maxConnections:1e4,maxConnectionsPerClient:100,inactiveTimeout:18e5,cleanupInterval:6e4};function ho(e){let t={...go,...e},r=new Map,n=new Map,o=null,i={},s=f=>{!o&&t.cleanupInterval>0&&(o=setInterval(()=>{f()},t.cleanupInterval),o.unref&&o.unref())},a=()=>{o&&(clearInterval(o),o=null)},c=(f,y)=>{if(!f)return;let E=(n.get(f)||0)+y;E<=0?n.delete(f):n.set(f,E)},l=(f,y,m)=>{if(r.has(f))throw new Error(`Connection with ID ${f} 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 E=Date.now();r.set(f,{stream:y,connectedAt:E,lastActivity:E,clientIp:m?.clientIp,userAgent:m?.userAgent}),c(m?.clientIp,1),r.size===1&&s(i.cleanup),y.onClose(()=>{u(f)})},u=f=>{let y=r.get(f);y&&(r.delete(f),c(y.clientIp,-1),r.size===0&&a())},p=()=>r.size,T=()=>{let f=Date.now(),y=[];r.forEach((m,E)=>{let N=f-m.lastActivity>t.inactiveTimeout,Cn=!m.stream||m.stream.state==="closed"||!m.stream.isWritable;if((N||Cn)&&(y.push(E),m.stream&&typeof m.stream.close=="function"))try{m.stream.close()}catch{}}),y.forEach(m=>u(m))},x=f=>r.get(f)?.stream,d=f=>r.has(f),g=()=>Array.from(r.keys()),w=()=>{a(),r.forEach(f=>{if(f.stream&&typeof f.stream.close=="function")try{f.stream.close()}catch{}}),r.clear(),n.clear()};return i.add=l,i.remove=u,i.count=p,i.cleanup=T,i.get=x,i.has=d,i.getIds=g,i.shutdown=w,i}var ht=null;function De(e){return ht||(ht=ho(e)),ht}M();C();var ge=class extends v{constructor(t,r,n=void 0){super("SSE_BUFFER_OVERFLOW",t,503,n??h(),r)}};M();C();var Ne=class extends v{constructor(t,r=void 0,n=void 0){super("SSE_STREAM_CLOSED",t,410,n??h(),r)}};C();var yo={heartbeatInterval:3e4,maxEventSize:1024*1024,autoClose:!0,maxBufferSize:1e3,bufferStrategy:"drop-oldest"};function mr(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(`
15
15
  `);for(let u of s)o.push(`data: ${u}`);o.push("");let a=o.join(`
16
16
  `)+`
17
17
  `,c=4096,l=Buffer.byteLength(a,"utf8");if(l<c){let u=c-l;a+=`: ${"\xB7".repeat(u)}
18
- `}return a}function lo(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`${e}-${t}`}function uo(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 po(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 gt=class{id;_state="connecting";_buffer=[];_closeCallbacks=[];_errorCallbacks=[];_emitter=new ur.EventEmitter;_metrics;_options;_response;_request;_writable=!0;_cleanupExecuted=!1;_eventCounter=0;_lastEventId=null;_heartbeatTimer;_backpressureConfig;_disconnectHandlers=null;constructor(t,r={}){if(this.id=`sse-${lo()}`,this._options={...co,...r},this._response=t.response,this._request=t.request,r.backpressure){let o=cr.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=Be(),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
18
+ `}return a}function So(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`${e}-${t}`}function wo(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 vo(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 yt=class{id;_state="connecting";_buffer=[];_closeCallbacks=[];_errorCallbacks=[];_emitter=new gr.EventEmitter;_metrics;_options;_response;_request;_writable=!0;_cleanupExecuted=!1;_eventCounter=0;_lastEventId=null;_heartbeatTimer;_backpressureConfig;_disconnectHandlers=null;constructor(t,r={}){if(this.id=`sse-${So()}`,this._options={...yo,...r},this._response=t.response,this._request=t.request,r.backpressure){let o=fr.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=De(),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
19
19
 
20
- `)}_registerConnection(){try{let t=Be(),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=lr(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{Be().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 Ie("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=uo(t,r),s=this._options.maxEventSize;if(i>s)throw new me("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 u=this._buffer.length;throw this.close(),new me("Buffer overflow - stream closed",{currentSize:u,maxSize:c,strategy:"close",clientId:this.id})}let l=po(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=lr("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}
20
+ `)}_registerConnection(){try{let t=De(),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=mr(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{De().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 Ne("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=wo(t,r),s=this._options.maxEventSize;if(i>s)throw new ge("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 u=this._buffer.length;throw this.close(),new ge("Buffer overflow - stream closed",{currentSize:u,maxSize:c,strategy:"close",clientId:this.id})}let l=vo(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=mr("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}
21
21
 
22
22
  `:`: ping
23
23
 
24
24
  `;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)}
25
25
 
26
- `)}}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 dr(e,t){return new gt(e,t)}P();R();var De=class extends w{constructor(t,r,n){super("SSE_NOT_ACCEPTABLE",t,406,n||h(),r)}};function fo(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 mo(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 pr=()=>e=>{fo(e);let t=H();return{GET:{handler:async({ctx:n,params:o,logger:i,eventBus:s})=>{let a=n.request.header("accept");if(a&&!a.includes("text/event-stream")&&!a.includes("*/*"))throw new De("This endpoint requires Server-Sent Events support",{acceptHeader:a,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(m){throw i.error("[SSE] Validation error:",{error:m}),m}let c=dr(n,e.options),l=i.child({streamId:c.id,streamState:"connected",eventStream:!0}),u=e.schema?.events&&typeof e.schema.events=="object"&&!e.schema.events._def?mo(c,e.schema.events):c;n.request.raw.on("close",()=>u.close());try{await e.handler({stream:u,ctx:n,params:o,logger:l,eventBus:s})}catch(m){throw l.error("[SSE] Handler error - THIS IS THE REAL ERROR:",{error:m}),l.error("[SSE] Stack trace:",{stack:m instanceof Error?m.stack:"No stack"}),u.isWritable&&u.sendError(m instanceof Error?m:new Error(String(m))),u.close(),m}},schema:e.schema?.params||e.schema?.query?{params:e.schema?.params,query:e.schema?.query}:void 0,middleware:e.middleware,options:e.options},SSE:{schema:{params:e.schema?.params,query:e.schema?.query,events:e.schema?.events}},path:t}};function go(){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,fr.fileURLToPath)(n):n}finally{Error.prepareStackTrace=e}}function H(){let e=go(),t=sr(),r=Ae(e,t);return console.log(`\u{1F50E} Parsed route path: ${r.routePath} from file: ${e}`),r.routePath}var Fe=()=>e=>{X("GET",e);let t=H();return{GET:e,path:t}},Ne=()=>e=>{X("POST",e);let t=H();return{POST:e,path:t}},$e=()=>e=>{X("PUT",e);let t=H();return{PUT:e,path:t}},He=()=>e=>{X("DELETE",e);let t=H();return{DELETE:e,path:t}},Ue=()=>e=>{X("PATCH",e);let t=H();return{PATCH:e,path:t}},qe=()=>e=>{X("HEAD",e);let t=H();return{HEAD:e,path:t}},je=()=>e=>{X("OPTIONS",e);let t=H();return{OPTIONS:e,path:t}};function X(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&&ho(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 ho(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 ht(){return{get:Fe(),post:Ne(),put:$e(),delete:He(),patch:Ue(),head:qe(),options:je(),sse:pr()}}function ee(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 ie(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 ge(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 Ve(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=ge(o);return s+a}function se(){let e=[];return{add(t,r,n){let{pattern:o,paramNames:i}=ie(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=ee(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:ee(t,r.pattern,r.paramNames)}))}}}var un=require("async_hooks"),dn=require("crypto"),pn=z(require("events"),1);var Et=z(require("fs"),1),Dr=z(require("http"),1),Fr=z(require("http2"),1);var U=z(require("fs"),1),We=z(require("path"),1),mr=z(require("selfsigned"),1);async function gr(){let e=We.join(process.cwd(),".blaizejs","certs"),t=We.join(e,"dev.key"),r=We.join(e,"dev.cert");if(U.existsSync(t)&&U.existsSync(r))return{keyFile:t,certFile:r};U.existsSync(e)||U.mkdirSync(e,{recursive:!0});let i=mr.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 U.writeFileSync(t,Buffer.from(i.private,"utf-8")),U.writeFileSync(r,Buffer.from(i.cert,"utf-8")),console.log(`
26
+ `)}}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 hr(e,t){return new yt(e,t)}M();C();var $e=class extends v{constructor(t,r,n){super("SSE_NOT_ACCEPTABLE",t,406,n||h(),r)}};function Eo(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 To(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 yr=()=>e=>{Eo(e);let t=U();return{GET:{handler:async({ctx:n,params:o,logger:i,eventBus:s})=>{let a=n.request.header("accept");if(a&&!a.includes("text/event-stream")&&!a.includes("*/*"))throw new $e("This endpoint requires Server-Sent Events support",{acceptHeader:a,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(p){throw i.error("[SSE] Validation error:",{error:p}),p}let c=hr(n,e.options),l=i.child({streamId:c.id,streamState:"connected",eventStream:!0}),u=e.schema?.events&&typeof e.schema.events=="object"&&!e.schema.events._def?To(c,e.schema.events):c;n.request.raw.on("close",()=>u.close());try{await e.handler({stream:u,ctx:n,params:o,logger:l,eventBus:s})}catch(p){throw l.error("[SSE] Handler error - THIS IS THE REAL ERROR:",{error:p}),l.error("[SSE] Stack trace:",{stack:p instanceof Error?p.stack:"No stack"}),u.isWritable&&u.sendError(p instanceof Error?p:new Error(String(p))),u.close(),p}},schema:e.schema?.params||e.schema?.query?{params:e.schema?.params,query:e.schema?.query}:void 0,middleware:e.middleware,options:e.options},SSE:{schema:{params:e.schema?.params,query:e.schema?.query,events:e.schema?.events}},path:t}};function bo(){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,Sr.fileURLToPath)(n):n}finally{Error.prepareStackTrace=e}}function U(){let e=bo(),t=dr(),r=Ie(e,t);return console.log(`\u{1F50E} Parsed route path: ${r.routePath} from file: ${e}`),r.routePath}var Ue=()=>e=>{ee("GET",e);let t=U();return{GET:e,path:t}},He=()=>e=>{ee("POST",e);let t=U();return{POST:e,path:t}},qe=()=>e=>{ee("PUT",e);let t=U();return{PUT:e,path:t}},je=()=>e=>{ee("DELETE",e);let t=U();return{DELETE:e,path:t}},Ve=()=>e=>{ee("PATCH",e);let t=U();return{PATCH:e,path:t}},We=()=>e=>{ee("HEAD",e);let t=U();return{HEAD:e,path:t}},Qe=()=>e=>{ee("OPTIONS",e);let t=U();return{OPTIONS:e,path:t}};function ee(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&&xo(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 xo(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 St(){return{get:Ue(),post:He(),put:qe(),delete:je(),patch:Ve(),head:We(),options:Qe(),sse:yr()}}function te(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 se(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 he(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 Ge(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=he(o);return s+a}function ae(){let e=[];return{add(t,r,n){let{pattern:o,paramNames:i}=se(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=te(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:te(t,r.pattern,r.paramNames)}))}}}var Sn=require("async_hooks"),wn=require("crypto"),vn=k(require("events"),1);var bt=k(require("fs"),1),Hr=k(require("http"),1),qr=k(require("http2"),1);var H=k(require("fs"),1),Ze=k(require("path"),1),wr=k(require("selfsigned"),1);async function vr(){let e=Ze.join(process.cwd(),".blaizejs","certs"),t=Ze.join(e,"dev.key"),r=Ze.join(e,"dev.cert");if(H.existsSync(t)&&H.existsSync(r))return{keyFile:t,certFile:r};H.existsSync(e)||H.mkdirSync(e,{recursive:!0});let i=wr.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 H.writeFileSync(t,Buffer.from(i.private,"utf-8")),H.writeFileSync(r,Buffer.from(i.cert,"utf-8")),console.log(`
27
27
  \u{1F512} Generated self-signed certificates for development at ${e}
28
- `),{keyFile:t,certFile:r}}var B=class extends Error{constructor(t="\u274C Response has already been sent"){super(t),this.name="ResponseSentError"}},he=class extends B{constructor(t="Cannot set header after response has been sent"){super(t)}},Qe=class extends B{constructor(t="Cannot set content type after response has been sent"){super(t)}},Ge=class extends B{constructor(t="Invalide URL"){super(t)}};var hr=require("async_hooks"),yo=new hr.AsyncLocalStorage;function yr(e,t){return yo.run(e,t)}ye();Se();I();R();var br=z(require("crypto"),1),xr=require("fs"),Rr=require("os"),Cr=require("path"),vt=require("stream");var So=/boundary=([^;]+)/i,vo=/Content-Disposition:\s*form-data;\s*name="([^"]+)"(?:;[\s\r\n]*filename="([^"]*)")?/i,wo=/Content-Type:\s*([^\r\n]+)/i,Eo=/multipart\/form-data/i;function Sr(e){let t=e.match(So);if(!t||!t[1])return null;let r=t[1].trim();return r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1)),r||null}function vr(e){let t=e.match(vo);return!t||!t[1]?null:{name:t[1],filename:t[2]!==void 0?t[2]:void 0}}function wr(e){let t=e.match(wo);return t&&t[1]?.trim()?t[1].trim():"application/octet-stream"}function Er(e){return Eo.test(e)}var To={maxFileSize:10*1024*1024,maxFiles:10,maxFieldSize:1*1024*1024,allowedMimeTypes:[],allowedExtensions:[],strategy:"stream",tempDir:(0,Rr.tmpdir)(),computeHash:!1};function bo(e,t={}){return{boundary:Buffer.from(`--${e}`),options:{...To,...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 xo(e,t){let r=Buffer.concat([e.buffer,t]),n={...e,buffer:r};for(;n.buffer.length>0&&!n.isFinished;){let o=await Ro(n);if(o===n)break;n=o}return n}async function Ro(e){switch(e.stage){case"boundary":return Co(e);case"headers":return Po(e);case"content":return Mo(e);default:{let{InternalServerError:t}=await Promise.resolve().then(()=>(ve(),Tr));throw new t("Invalid parser stage",{operation:e.stage})}}}function Co(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
29
- `))&&(n=n.subarray(2)),{...e,buffer:n,hasFoundValidBoundary:r,stage:"headers",currentHeaders:""})}async function Po(e){let t=e.buffer.indexOf(`\r
28
+ `),{keyFile:t,certFile:r}}var B=class extends Error{constructor(t="\u274C Response has already been sent"){super(t),this.name="ResponseSentError"}},ye=class extends B{constructor(t="Cannot set header after response has been sent"){super(t)}},Je=class extends B{constructor(t="Cannot set content type after response has been sent"){super(t)}},Ke=class extends B{constructor(t="Invalide URL"){super(t)}};var Er=require("async_hooks"),Ro=new Er.AsyncLocalStorage;function Tr(e,t){return Ro.run(e,t)}Se();we();A();C();var Mr=k(require("crypto"),1),zr=require("fs"),_r=require("os"),kr=require("path"),Et=require("stream");var Co=/boundary=([^;]+)/i,Po=/Content-Disposition:\s*form-data;\s*name="([^"]+)"(?:;[\s\r\n]*filename="([^"]*)")?/i,Mo=/Content-Type:\s*([^\r\n]+)/i,zo=/multipart\/form-data/i;function br(e){let t=e.match(Co);if(!t||!t[1])return null;let r=t[1].trim();return r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1)),r||null}function xr(e){let t=e.match(Po);return!t||!t[1]?null:{name:t[1],filename:t[2]!==void 0?t[2]:void 0}}function Rr(e){let t=e.match(Mo);return t&&t[1]?.trim()?t[1].trim():"application/octet-stream"}function Cr(e){return zo.test(e)}var _o={maxFileSize:10*1024*1024,maxFiles:10,maxFieldSize:1*1024*1024,allowedMimeTypes:[],allowedExtensions:[],strategy:"stream",tempDir:(0,_r.tmpdir)(),computeHash:!1};function ko(e,t={}){return{boundary:Buffer.from(`--${e}`),options:{..._o,...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 Oo(e,t){let r=Buffer.concat([e.buffer,t]),n={...e,buffer:r};for(;n.buffer.length>0&&!n.isFinished;){let o=await Fo(n);if(o===n)break;n=o}return n}async function Fo(e){switch(e.stage){case"boundary":return Lo(e);case"headers":return Ao(e);case"content":return Bo(e);default:{let{InternalServerError:t}=await Promise.resolve().then(()=>(ve(),Pr));throw new t("Invalid parser stage",{operation:e.stage})}}}function Lo(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
29
+ `))&&(n=n.subarray(2)),{...e,buffer:n,hasFoundValidBoundary:r,stage:"headers",currentHeaders:""})}async function Ao(e){let t=e.buffer.indexOf(`\r
30
30
  \r
31
- `);if(t===-1)return e;let r=e.buffer.subarray(0,t).toString("utf8"),n=e.buffer.subarray(t+4),o=vr(r);if(!o){let{ValidationError:a}=await Promise.resolve().then(()=>(I(),Y));throw new a("Missing or invalid Content-Disposition header")}let i=wr(r),s=o.filename!==void 0;if(s&&e.fileCount>=e.options.maxFiles){let{PayloadTooLargeError:a}=await Promise.resolve().then(()=>(ye(),yt));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(()=>(Se(),St));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 Mo(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 _o(i,r)),n&&(i=await ko(i),i={...i,stage:"boundary",hasProcessedAnyPart:!0}),i}async function _o(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(()=>(ye(),yt)),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?Oo(e,t,r):{...e,currentContentLength:r,currentBufferChunks:[...e.currentBufferChunks,t]}}async function Oo(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 Do(e.currentWriteStream,t),{...e,currentContentLength:r};default:{let{ValidationError:n}=await Promise.resolve().then(()=>(I(),Y));throw new n("Invalid parsing strategy")}}}async function zo(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,Cr.join)(e.options.tempDir,`upload-${br.randomUUID()}`),r=(0,xr.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(),Y));throw new t("Invalid file processing strategy")}}}async function ko(e){return e.currentField?e.currentFilename!==void 0?Lo(e):Ao(e):we(e)}async function Lo(e){if(!e.currentField||e.currentFilename===void 0)return we(e);let t,r,n;switch(e.options.strategy){case"memory":r=Buffer.concat(e.currentBufferChunks),t=vt.Readable.from(r);break;case"stream":e.streamController&&e.streamController.close(),t=e.currentStream;break;case"temp":e.currentWriteStream&&await Mr(e.currentWriteStream),n=e.currentTempPath,t=vt.Readable.from(Buffer.alloc(0));break;default:{let{ValidationError:s}=await Promise.resolve().then(()=>(I(),Y));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=Pr(e.files,e.currentField,o);return{...we(e),files:i}}function Ao(e){if(!e.currentField)return we(e);let t=Buffer.concat(e.currentBufferChunks).toString("utf8"),r=Pr(e.fields,e.currentField,t);return{...we(e),fields:r}}function we(e){return{...e,currentField:null,currentFilename:void 0,currentContentLength:0,currentBufferChunks:[],currentStream:null,streamController:null,currentTempPath:null,currentWriteStream:null}}function Pr(e,t,r){let n=new Map(e),o=n.get(t)||[];return n.set(t,[...o,r]),n}async function Bo(e){if(!e.hasFoundValidBoundary){let{ValidationError:n}=await Promise.resolve().then(()=>(I(),Y));throw new n("No valid multipart boundary found")}if(e.hasFoundValidBoundary&&!e.hasProcessedAnyPart){let{ValidationError:n}=await Promise.resolve().then(()=>(I(),Y));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 Io(e){await Promise.allSettled(e.cleanupTasks.map(t=>t())),e.streamController&&e.streamController.close(),e.currentWriteStream&&await Mr(e.currentWriteStream)}async function Do(e,t){return new Promise((r,n)=>{e.write(t,o=>{o?n(o):r()})})}async function Mr(e){return new Promise(t=>{e.end(()=>t())})}async function _r(e,t={}){let r=e.headers["content-type"]||"",n=Sr(r);if(!n){let{UnsupportedMediaTypeError:i}=await Promise.resolve().then(()=>(Se(),St));throw new i("Missing boundary in multipart content-type",{receivedContentType:r,expectedFormat:"multipart/form-data; boundary=..."})}let o=bo(n,t);o.currentFilename!==void 0&&(o=await zo(o));try{for await(let i of e)o=await xo(o,i);return Bo(o)}finally{await Io(o)}}var Ee="Content-Type";function Fo(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 Ge(`Invalid URL: ${o}`)}}function No(e){return"stream"in e||"httpVersionMajor"in e&&e.httpVersionMajor===2}function $o(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 Or(e,t,r){let{path:n,url:o,query:i}=Fo(e),s=e.method||"GET",a=No(e),c=$o(e),l={},u={...r.initialState||{}},m={...r.initialServices||{}},T={sent:!1},b={request:Ho(e,{path:n,url:o,query:i,params:l,method:s,isHttp2:a,protocol:c}),response:{},state:u,services:m};return b.response=qo(t,T,b),r.parseBody&&await Xo(e,b,r),b}function Ho(e,t){return{raw:e,...t,header:zr(e),headers:Uo(e),body:void 0}}function zr(e){return t=>{let r=e.headers[t.toLowerCase()];return Array.isArray(r)?r.join(", "):r||void 0}}function Uo(e){let t=zr(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 Te(e,t){if(t.correlationId){let r=J(),n=String(t.correlationId);e.setHeader(r,n)}}function qo(e,t,r){return{raw:e,get statusCode(){return e.statusCode||200},get sent(){return t.sent},status:jo(e,t,r),header:Vo(e,t,r),headers:Wo(e,t,r),type:Qo(e,t,r),json:Go(e,t,r.state),text:Zo(e,t,r.state),html:Jo(e,t,r.state),redirect:Ko(e,t,r.state),stream:Yo(e,t,r.state)}}function jo(e,t,r){return function(o){if(t.sent)throw new B;return e.statusCode=o,r.response}}function Vo(e,t,r){return function(o,i){if(t.sent)throw new he;return e.setHeader(o,i),r.response}}function Wo(e,t,r){return function(o){if(t.sent)throw new he;for(let[i,s]of Object.entries(o))e.setHeader(i,s);return r.response}}function Qo(e,t,r){return function(o){if(t.sent)throw new Qe;return e.setHeader(Ee,o),r.response}}function Go(e,t,r){return function(o,i){if(t.sent)throw new B;i!==void 0&&(e.statusCode=i),Te(e,r),e.setHeader(Ee,"application/json"),e.end(JSON.stringify(o)),t.sent=!0}}function Zo(e,t,r){return function(o,i){if(t.sent)throw new B;i!==void 0&&(e.statusCode=i),Te(e,r),e.setHeader(Ee,"text/plain"),e.end(o),t.sent=!0}}function Jo(e,t,r){return function(o,i){if(t.sent)throw new B;i!==void 0&&(e.statusCode=i),Te(e,r),e.setHeader(Ee,"text/html"),e.end(o),t.sent=!0}}function Ko(e,t,r){return function(o,i=302){if(t.sent)throw new B;Te(e,r),e.statusCode=i,e.setHeader("Location",o),e.end(),t.sent=!0}}function Yo(e,t,r){return function(o,i={}){if(t.sent)throw new B;if(i.status!==void 0&&(e.statusCode=i.status),Te(e,r),i.contentType&&e.setHeader(Ee,i.contentType),i.headers)for(let[s,a]of Object.entries(i.headers))e.setHeader(s,a);o.pipe(e),o.on("end",()=>{t.sent=!0}),o.on("error",s=>{console.error("Stream error:",s),t.sent||(e.statusCode=500,e.end("Stream error"),t.sent=!0)})}}async function Xo(e,t,r){if(ei(e.method))return;let n=e.headers["content-type"]||"",o=parseInt(e.headers["content-length"]||"0",10);if(o===0)return;let i=r.bodyLimits;if(n.includes("application/json")){if(o>i.json)throw new D("JSON body exceeds size limit",{currentSize:o,maxSize:i.json,contentType:"application/json"},h());await ti(e,t)}else if(n.includes("application/x-www-form-urlencoded")){if(o>i.form)throw new D("Form body exceeds size limit",{currentSize:o,maxSize:i.form,contentType:"application/x-www-form-urlencoded"},h());await ri(e,t)}else if(n.includes("text/")){if(o>i.text)throw new D("Text body exceeds size limit",{currentSize:o,maxSize:i.text,contentType:n},h());await oi(e,t)}else if(Er(n))await ii(e,t,i.multipart);else{if(o>i.raw)throw new D("Request body exceeds size limit",{currentSize:o,maxSize:i.raw,contentType:n||"unknown"},h());return}}function ei(e){return["GET","HEAD","OPTIONS"].includes(e||"GET")}async function ti(e,t){let r=await wt(e);if(!r){console.warn("Empty body, skipping JSON parsing");return}if(r.trim()==="null"){console.warn('Body is the string "null"'),t.request.body=null;return}try{let n=JSON.parse(r);t.request.body=n}catch(n){throw new _("Invalid JSON in request body",{fields:[{field:"body",messages:["Request body contains malformed JSON",n instanceof Error?n.message:"JSON parse failed"]}],errorCount:1,section:"body"},h())}}async function ri(e,t){let r=await wt(e);if(r)try{t.request.body=ni(r)}catch(n){throw new _("Request body contains malformed form data",{fields:[{field:"body",messages:["Invalid URL-encoded form data",n instanceof Error?n.message:"Form parse failed"]}],errorCount:1,section:"body"},h())}}function ni(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 oi(e,t){let r=await wt(e);r&&(t.request.body=r)}async function ii(e,t,r){try{let n=r,o=await _r(e,{strategy:"stream",maxFileSize:n.maxFileSize,maxFiles:n.maxFiles,maxFieldSize:n.maxFieldSize});t.request.multipart=o,t.request.files=o.files,t.request.body=o.fields}catch(n){throw n instanceof D||n instanceof V?n:new V("Failed to parse multipart/form-data",{receivedContentType:e.headers["content-type"],expectedFormat:"multipart/form-data; boundary=..."},h())}}async function wt(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)})})}P();R();var W=class extends w{constructor(t,r=void 0,n=void 0){super("NOT_FOUND",t,404,n??h(),r)}};P();ve();R();function si(e){return e instanceof w}function kr(e){if(si(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 q("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 Lr(e){let t=J(),r={[t]:e(t)};return _e(r)}function Ar(e,t){let r=J();e(r,t)}function Br(e={}){let{debug:t=!1}=e;return L({name:"ErrorBoundary",debug:t,handler:async({ctx:r,next:n,logger:o})=>{try{await n()}catch(i){if(r.response.sent){t&&o.error("Error occurred after response was sent:",{error:i});return}t&&o.error("Error boundary caught error:",{error:i});let s=Lr(r.request.header),a=kr(i);a.correlationId=s,Ar(r.response.header,s),r.response.status(a.status).json(a)}}})}R();function Ir(e){return async(t,r)=>{let n=_e(t.headers);try{await jt(n,async()=>{let o=await Or(t,r,{parseBody:!0,initialState:{correlationId:n},bodyLimits:e.bodyLimits}),i=e._logger.child({correlationId:n,method:o.request.method,path:o.request.path}),a=[Br()];"corsOptions"in e&&e.corsOptions!==!1&&a.push(fe(e.corsOptions)),a.push(...e.middleware);let c=K(a),l=async()=>{if(!o.response.sent&&(await e.router.handleRequest(o,i,e.eventBus),!r.headersSent&&!o.response.sent))throw new W(`Route not found: ${o.request.method} ${o.request.path}`)};await yr(o,async()=>{await c({ctx:o,next:l,logger:i,eventBus:e.eventBus})})})}catch(o){e._logger.error("Unhandled request error",{error:o,correlationId:n});let i=J();if(r.headersSent||r.stream?.headersSent){e._logger.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:"An unexpected error occurred while processing the request",correlationId:n}))):(r.setHeader(i,n),r.writeHead(500,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Internal Server Error",message:"An unexpected error occurred while processing the request",correlationId:n})))}}}async function ai(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 gr();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 ci(e,t){if(!e)return Dr.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 Fr.createSecureServer(r)}function li(e,t,r,n){return new Promise((o,i)=>{e.listen(t,r,()=>{let a=`${n?"https":"http"}://${r}:${t}`;C.info(`
31
+ `);if(t===-1)return e;let r=e.buffer.subarray(0,t).toString("utf8"),n=e.buffer.subarray(t+4),o=xr(r);if(!o){let{ValidationError:a}=await Promise.resolve().then(()=>(A(),X));throw new a("Missing or invalid Content-Disposition header")}let i=Rr(r),s=o.filename!==void 0;if(s&&e.fileCount>=e.options.maxFiles){let{PayloadTooLargeError:a}=await Promise.resolve().then(()=>(Se(),wt));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(()=>(we(),vt));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 Bo(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 Io(i,r)),n&&(i=await $o(i),i={...i,stage:"boundary",hasProcessedAnyPart:!0}),i}async function Io(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(()=>(Se(),wt)),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?Do(e,t,r):{...e,currentContentLength:r,currentBufferChunks:[...e.currentBufferChunks,t]}}async function Do(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 Vo(e.currentWriteStream,t),{...e,currentContentLength:r};default:{let{ValidationError:n}=await Promise.resolve().then(()=>(A(),X));throw new n("Invalid parsing strategy")}}}async function No(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,kr.join)(e.options.tempDir,`upload-${Mr.randomUUID()}`),r=(0,zr.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(()=>(A(),X));throw new t("Invalid file processing strategy")}}}async function $o(e){return e.currentField?e.currentFilename!==void 0?Uo(e):Ho(e):Ee(e)}async function Uo(e){if(!e.currentField||e.currentFilename===void 0)return Ee(e);let t,r,n;switch(e.options.strategy){case"memory":r=Buffer.concat(e.currentBufferChunks),t=Et.Readable.from(r);break;case"stream":e.streamController&&e.streamController.close(),t=e.currentStream;break;case"temp":e.currentWriteStream&&await Fr(e.currentWriteStream),n=e.currentTempPath,t=Et.Readable.from(Buffer.alloc(0));break;default:{let{ValidationError:s}=await Promise.resolve().then(()=>(A(),X));throw new s("Invalid file finalization strategy")}}let o={originalname:e.currentFilename,encoding:"7bit",fieldname:e.currentField,mimetype:e.currentMimetype,size:e.currentContentLength,stream:t,buffer:r,tempPath:n},i=Or(e.files,e.currentField,o);return{...Ee(e),files:i}}function Ho(e){if(!e.currentField)return Ee(e);let t=Buffer.concat(e.currentBufferChunks).toString("utf8"),r=Or(e.fields,e.currentField,t);return{...Ee(e),fields:r}}function Ee(e){return{...e,currentField:null,currentFilename:void 0,currentContentLength:0,currentBufferChunks:[],currentStream:null,streamController:null,currentTempPath:null,currentWriteStream:null}}function Or(e,t,r){let n=new Map(e),o=n.get(t)||[];return n.set(t,[...o,r]),n}async function qo(e){if(!e.hasFoundValidBoundary){let{ValidationError:n}=await Promise.resolve().then(()=>(A(),X));throw new n("No valid multipart boundary found")}if(e.hasFoundValidBoundary&&!e.hasProcessedAnyPart){let{ValidationError:n}=await Promise.resolve().then(()=>(A(),X));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 jo(e){await Promise.allSettled(e.cleanupTasks.map(t=>t())),e.streamController&&e.streamController.close(),e.currentWriteStream&&await Fr(e.currentWriteStream)}async function Vo(e,t){return new Promise((r,n)=>{e.write(t,o=>{o?n(o):r()})})}async function Fr(e){return new Promise(t=>{e.end(()=>t())})}async function Lr(e,t={}){let r=e.headers["content-type"]||"",n=br(r);if(!n){let{UnsupportedMediaTypeError:i}=await Promise.resolve().then(()=>(we(),vt));throw new i("Missing boundary in multipart content-type",{receivedContentType:r,expectedFormat:"multipart/form-data; boundary=..."})}let o=ko(n,t);o.currentFilename!==void 0&&(o=await No(o));try{for await(let i of e)o=await Oo(o,i);return qo(o)}finally{await jo(o)}}var Te="Content-Type";function Wo(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 Ke(`Invalid URL: ${o}`)}}function Qo(e){return"stream"in e||"httpVersionMajor"in e&&e.httpVersionMajor===2}function Go(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 Ar(e,t,r){let{path:n,url:o,query:i}=Wo(e),s=e.method||"GET",a=Qo(e),c=Go(e),l={},u={...r.initialState||{}},p={...r.initialServices||{}},T={sent:!1},x={request:Zo(e,{path:n,url:o,query:i,params:l,method:s,isHttp2:a,protocol:c}),response:{},state:u,services:p};return x.response=Ko(t,T,x),r.parseBody&&await ai(e,x,r),x}function Zo(e,t){return{raw:e,...t,header:Br(e),headers:Jo(e),body:void 0,files:void 0}}function Br(e){return t=>{let r=e.headers[t.toLowerCase()];return Array.isArray(r)?r.join(", "):r||void 0}}function Jo(e){let t=Br(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 be(e,t){if(t.correlationId){let r=K(),n=String(t.correlationId);e.setHeader(r,n)}}function Ko(e,t,r){return{raw:e,get statusCode(){return e.statusCode||200},get sent(){return t.sent},status:Yo(e,t,r),header:Xo(e,t,r),headers:ei(e,t,r),type:ti(e,t,r),json:ri(e,t,r.state),text:ni(e,t,r.state),html:oi(e,t,r.state),redirect:ii(e,t,r.state),stream:si(e,t,r.state)}}function Yo(e,t,r){return function(o){if(t.sent)throw new B;return e.statusCode=o,r.response}}function Xo(e,t,r){return function(o,i){if(t.sent)throw new ye;return e.setHeader(o,i),r.response}}function ei(e,t,r){return function(o){if(t.sent)throw new ye;for(let[i,s]of Object.entries(o))e.setHeader(i,s);return r.response}}function ti(e,t,r){return function(o){if(t.sent)throw new Je;return e.setHeader(Te,o),r.response}}function ri(e,t,r){return function(o,i){if(t.sent)throw new B;i!==void 0&&(e.statusCode=i),be(e,r),e.setHeader(Te,"application/json"),e.end(JSON.stringify(o)),t.sent=!0}}function ni(e,t,r){return function(o,i){if(t.sent)throw new B;i!==void 0&&(e.statusCode=i),be(e,r),e.setHeader(Te,"text/plain"),e.end(o),t.sent=!0}}function oi(e,t,r){return function(o,i){if(t.sent)throw new B;i!==void 0&&(e.statusCode=i),be(e,r),e.setHeader(Te,"text/html"),e.end(o),t.sent=!0}}function ii(e,t,r){return function(o,i=302){if(t.sent)throw new B;be(e,r),e.statusCode=i,e.setHeader("Location",o),e.end(),t.sent=!0}}function si(e,t,r){return function(o,i={}){if(t.sent)throw new B;if(i.status!==void 0&&(e.statusCode=i.status),be(e,r),i.contentType&&e.setHeader(Te,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 ai(e,t,r){if(ci(e.method))return;let n=e.headers["content-type"]||"",o=parseInt(e.headers["content-length"]||"0",10);if(o===0)return;let i=r.bodyLimits;if(n.includes("application/json")){if(o>i.json)throw new I("JSON body exceeds size limit",{currentSize:o,maxSize:i.json,contentType:"application/json"},h());await li(e,t)}else if(n.includes("application/x-www-form-urlencoded")){if(o>i.form)throw new I("Form body exceeds size limit",{currentSize:o,maxSize:i.form,contentType:"application/x-www-form-urlencoded"},h());await ui(e,t)}else if(n.includes("text/")){if(o>i.text)throw new I("Text body exceeds size limit",{currentSize:o,maxSize:i.text,contentType:n},h());await pi(e,t)}else if(Cr(n))await fi(e,t,i.multipart);else{if(o>i.raw)throw new I("Request body exceeds size limit",{currentSize:o,maxSize:i.raw,contentType:n||"unknown"},h());return}}function ci(e){return["GET","HEAD","OPTIONS"].includes(e||"GET")}async function li(e,t){let r=await Tt(e);if(!r){console.warn("Empty body, skipping JSON parsing");return}if(r.trim()==="null"){console.warn('Body is the string "null"'),t.request.body=null;return}try{let n=JSON.parse(r);t.request.body=n}catch(n){throw new b("Invalid JSON in request body",{fields:[{field:"body",messages:["Request body contains malformed JSON",n instanceof Error?n.message:"JSON parse failed"]}],errorCount:1,section:"body"},h())}}async function ui(e,t){let r=await Tt(e);if(r)try{t.request.body=di(r)}catch(n){throw new b("Request body contains malformed form data",{fields:[{field:"body",messages:["Invalid URL-encoded form data",n instanceof Error?n.message:"Form parse failed"]}],errorCount:1,section:"body"},h())}}function di(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 pi(e,t){let r=await Tt(e);r&&(t.request.body=r)}async function fi(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){throw n instanceof I||n instanceof V?n:new V("Failed to parse multipart/form-data",{receivedContentType:e.headers["content-type"],expectedFormat:"multipart/form-data; boundary=..."},h())}}async function Tt(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)})})}M();C();var W=class extends v{constructor(t,r=void 0,n=void 0){super("NOT_FOUND",t,404,n??h(),r)}};M();ve();C();function mi(e){return e instanceof v}function Ir(e){if(mi(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 q("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 Dr(e){let t=K(),r={[t]:e(t)};return Oe(r)}function Nr(e,t){let r=K();e(r,t)}function $r(e={}){let{debug:t=!1}=e;return F({name:"ErrorBoundary",debug:t,handler:async({ctx:r,next:n,logger:o})=>{try{await n()}catch(i){if(r.response.sent){t&&o.error("Error occurred after response was sent:",{error:i});return}t&&o.error("Error boundary caught error:",{error:i});let s=Dr(r.request.header),a=Ir(i);a.correlationId=s,Nr(r.response.header,s),r.response.status(a.status).json(a)}}})}C();function Ur(e){return async(t,r)=>{let n=Oe(t.headers);try{await Zt(n,async()=>{let o=await Ar(t,r,{parseBody:!0,initialState:{correlationId:n},bodyLimits:e.bodyLimits}),i=e._logger.child({correlationId:n,method:o.request.method,path:o.request.path}),a=[$r()];"corsOptions"in e&&e.corsOptions!==!1&&a.push(me(e.corsOptions)),a.push(...e.middleware);let c=Y(a),l=async()=>{if(!o.response.sent&&(await e.router.handleRequest(o,i,e.eventBus),!r.headersSent&&!o.response.sent))throw new W(`Route not found: ${o.request.method} ${o.request.path}`)};await Tr(o,async()=>{await c({ctx:o,next:l,logger:i,eventBus:e.eventBus})})})}catch(o){e._logger.error("Unhandled request error",{error:o,correlationId:n});let i=K();if(r.headersSent||r.stream?.headersSent){e._logger.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:"An unexpected error occurred while processing the request",correlationId:n}))):(r.setHeader(i,n),r.writeHead(500,{"Content-Type":"application/json"}),r.end(JSON.stringify({error:"Internal Server Error",message:"An unexpected error occurred while processing the request",correlationId:n})))}}}async function gi(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 vr();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 hi(e,t){if(!e)return Hr.createServer();let r={allowHTTP1:!0};try{t.keyFile&&(r.key=bt.readFileSync(t.keyFile)),t.certFile&&(r.cert=bt.readFileSync(t.certFile))}catch(n){throw new Error(`Failed to read certificate files: ${n instanceof Error?n.message:String(n)}`)}return qr.createSecureServer(r)}function yi(e,t,r,n){return new Promise((o,i)=>{e.listen(t,r,()=>{let a=`${n?"https":"http"}://${r}:${t}`;P.info(`
32
32
  \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}
33
33
 
34
34
  \u26A1 BlaizeJS DEVELOPMENT SERVER HOT AND READY \u26A1
@@ -40,8 +40,8 @@ ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function Kn(e){ret
40
40
  Time to build something amazing! \u{1F680}
41
41
 
42
42
  \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}
43
- `),o()}),e.on("error",s=>{C.error("Server error:",{error:s,host:r,port:t}),i(s)})})}async function ui(e){for(let t of e.plugins)typeof t.initialize=="function"&&await t.initialize(e)}async function Nr(e,t){if(!e.server)try{let r=t.port,n=t.host;await ui(e);let o=t.http2||{enabled:!0},i=!!o.enabled,s=await ai(o);t.http2&&s.keyFile&&s.certFile&&(t.http2.keyFile=s.keyFile,t.http2.certFile=s.certFile);let a=ci(i,s);e.server=a,e.port=r,e.host=n;let c=Ir(e);a.on("request",c),await li(a,r,n,i)}catch(r){throw C.error("Failed to start server:",{error:r}),r}}var Ze=!1;async function $r(e,t={}){let r=e.server,n=e.events;if(Ze){console.log("\u26A0\uFE0F Shutdown already in progress, ignoring duplicate shutdown request");return}if(!r)return;Ze=!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)}if(e.eventBus){console.log("\u{1F50C} Disconnecting EventBus...");try{await Promise.race([e.eventBus.disconnect(),new Promise((a,c)=>setTimeout(()=>c(new Error("EventBus disconnect timeout")),2e3))]),console.log("\u2705 EventBus disconnected")}catch(a){console.error("\u274C Error disconnecting EventBus:",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"),Ze=!1}catch(i){throw Ze=!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 Hr(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 S=require("zod");var di=S.z.custom(e=>e!==null&&typeof e=="object"&&"execute"in e&&typeof e.execute=="function",{message:"Expected middleware to have an execute function"}),pi=S.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"}),fi=S.z.object({enabled:S.z.boolean().optional().default(!0),keyFile:S.z.string().optional(),certFile:S.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"}),mi=S.z.object({headerName:S.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:S.z.function().args().returns(S.z.string()).optional()}).optional(),gi=S.z.object({maxFileSize:S.z.number().positive().default(50*1024*1024),maxTotalSize:S.z.number().positive().default(100*1024*1024),maxFiles:S.z.number().positive().int().default(10),maxFieldSize:S.z.number().positive().default(1024*1024)}),hi=S.z.object({json:S.z.number().positive().default(512*1024),form:S.z.number().positive().default(1024*1024),text:S.z.number().positive().default(5*1024*1024),raw:S.z.number().positive().default(10*1024*1024),multipart:gi}),yi=S.z.object({includeHeaders:S.z.boolean().optional(),headerWhitelist:S.z.array(S.z.string().min(1)).optional(),includeQuery:S.z.boolean().optional()}).optional(),Si=S.z.object({level:S.z.enum(["debug","info","warn","error"]).optional(),transport:S.z.any().optional(),redactKeys:S.z.array(S.z.string().min(1)).optional(),includeTimestamp:S.z.boolean().optional(),requestLogging:S.z.boolean().optional(),requestLoggerOptions:yi}).optional(),vi=S.z.object({port:S.z.number().int().positive().optional().default(3e3),host:S.z.string().optional().default("localhost"),routesDir:S.z.string().optional().default("./routes"),http2:fi.optional().default({enabled:!0}),eventSchemas:S.z.record(S.z.any()).optional().default({}),middleware:S.z.array(di).optional().default([]),plugins:S.z.array(pi).optional().default([]),correlation:mi,cors:tr,bodyLimits:hi,logging:Si,serverId:S.z.string().min(1).optional()});function Ur(e){try{return vi.parse(e)}catch(t){if(t instanceof S.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 qr(e={}){let{continueOnError:t=!0,onError:r}=e;function n(o,i,s){let a=`Plugin ${o.name} failed during ${i}: ${s.message}`;if(r?r(o,i,s):C.error(`[PluginLifecycle] ${a}`,{plugin:o.name,phase:i,error:{message:s.message,stack:s.stack,name:s.name}}),!t)throw new Error(a)}return{async initializePlugins(o){C.debug("[PluginLifecycle] Initializing plugins",{count:o.plugins.length});for(let i of o.plugins)if(i.initialize)try{C.debug("[PluginLifecycle] Initializing plugin",{plugin:i.name}),await i.initialize(o)}catch(s){n(i,"initialize",s)}C.info("[PluginLifecycle] Plugins initialized",{count:o.plugins.length,plugins:o.plugins.map(i=>i.name)})},async terminatePlugins(o){C.debug("[PluginLifecycle] Terminating plugins",{count:o.plugins.length});let i=[...o.plugins].reverse();for(let s of i)if(s.terminate)try{C.debug("[PluginLifecycle] Terminating plugin",{plugin:s.name}),await s.terminate(o)}catch(a){n(s,"terminate",a)}C.info("[PluginLifecycle] Plugins terminated",{count:i.length})},async onServerStart(o,i){C.debug("[PluginLifecycle] Notifying plugins of server start");for(let s of o.plugins)if(s.onServerStart)try{C.debug("[PluginLifecycle] Notifying plugin of server start",{plugin:s.name}),await s.onServerStart(i)}catch(a){n(s,"onServerStart",a)}},async onServerStop(o,i){C.debug("[PluginLifecycle] Notifying plugins of server stop...");let s=[...o.plugins].reverse();for(let a of s)if(a.onServerStop)try{C.debug(`[PluginLifecycle] Notifying plugin of server stop: ${a.name}`),await a.onServerStop(i)}catch(c){n(a,"onServerStop",c)}}}}var F=class extends Error{constructor(r,n){super(`Plugin validation error${r?` for "${r}"`:""}: ${n}`);this.pluginName=r;this.name="PluginValidationError"}};var wi=new Set(["core","server","router","middleware","context","blaize","blaizejs"]),Ei=/^[a-z]([a-z0-9-]*[a-z0-9])?$/,Ti=/^\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 F("","Plugin must be an object");let i=e;if(!i.name||typeof i.name!="string")throw new F("","Plugin must have a name (string)");if(n&&!Ei.test(i.name))throw new F(i.name,"Plugin name must be lowercase letters, numbers, and hyphens only");if(o&&wi.has(i.name.toLowerCase()))throw new F(i.name,`Plugin name "${i.name}" is reserved`);if(r){if(!i.version||typeof i.version!="string")throw new F(i.name,"Plugin must have a version (string)");if(!Ti.test(i.version))throw new F(i.name,'Plugin version must follow semantic versioning (e.g., "1.0.0")')}if(!i.register||typeof i.register!="function")throw new F(i.name,"Plugin must have a register method (function)");let s=["initialize","terminate","onServerStart","onServerStop"];for(let a of s)if(i[a]&&typeof i[a]!="function")throw new F(i.name,`Plugin ${a} must be a function if provided`)}var Vr=z(require("crypto"),1),Wr=z(require("fs/promises"),1);async function bi(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 jr(e,t){try{let r=Ae(e,t),n=await bi(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(xi(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 xi(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 be=new Map;async function xe(e,t,r=!0){let o=(await Wr.stat(e)).mtime.getTime(),i=be.get(e);if(r&&i&&i.timestamp===o)return i.routes;let s=await jr(e,t);if(r){let a=Gr(s);be.set(e,{routes:s,timestamp:o,hash:a})}return s}function Qr(e,t){let r=be.get(e);if(!r)return!0;let n=Gr(t);return r.hash!==n}function bt(e){e?be.delete(e):be.clear()}function Gr(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 Jr=z(require("os"),1);var Je=z(require("fs/promises"),1),ae=z(require("path"),1);async function Zr(e,t={}){let r=ae.isAbsolute(e)?e:ae.resolve(process.cwd(),e);console.log("Creating router with routes directory:",r);try{if(!(await Je.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 Je.readdir(s,{withFileTypes:!0});for(let c of a){let l=ae.join(s,c.name);c.isDirectory()&&o.includes(c.name)||(c.isDirectory()?await i(l):Ri(c.name)&&n.push(l))}}return await i(r),n}function Ri(e){return!e.startsWith("_")&&(e.endsWith(".ts")||e.endsWith(".js"))}async function Ci(e,t,r=Math.max(1,Math.floor(Jr.cpus().length/2))){let n=Pi(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 Kr(e){let t=await Zr(e);return(await Ci(t,n=>xe(n,e))).flat()}function Pi(e,t){let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}var Q={fileChanges:0,totalReloadTime:0,averageReloadTime:0,slowReloads:[]};function Yr(e,t){let r=Date.now()-t;if(Q.fileChanges++,Q.totalReloadTime+=r,Q.averageReloadTime=Q.totalReloadTime/Q.fileChanges,r>100&&(Q.slowReloads.push({file:e,time:r}),Q.slowReloads.length>10&&Q.slowReloads.shift()),process.env.NODE_ENV==="development"){let n=r<50?"\u26A1":r<100?"\u{1F504}":"\u{1F40C}";console.log(`${n} Route reload: ${e} (${r}ms)`)}}function xt(e,t){return console.log(`Tracking performance for: ${t}`),async(...r)=>{let n=Date.now();try{let o=await e(...r);return Yr(t,n),o}catch(o){throw Yr(t,n),o}}}var Rt=z(require("path"),1),Xr=require("chokidar");function Ct(e,t={}){let r=t.debounceMs||16,n=new Map;function o(u,m){return(...T)=>{let b=n.get(m);b&&clearTimeout(b);let d=setTimeout(()=>{u(...T),n.delete(m)},r);n.set(m,d)}}let i=new Map;async function s(u){try{let m=i.get(u),T=await xe(u,e,!1);if(!T||T.length===0||m&&!Qr(u,T))return;await xe(u,e,!0);let b=Rt.normalize(u);m?(i.set(u,T),t.onRouteChanged&&t.onRouteChanged(b,T)):(i.set(u,T),t.onRouteAdded&&t.onRouteAdded(b,T))}catch(m){console.log(`\u26A0\uFE0F Error processing file ${u}:`,m),c(m)}}function a(u){let m=Rt.normalize(u),T=i.get(m);T&&T.length>0&&t.onRouteRemoved&&t.onRouteRemoved(m,T),i.delete(m)}function c(u){t.onError&&u instanceof Error?t.onError(u):console.error("\u26A0\uFE0F Route watcher error:",u)}let l=(0,Xr.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",u=>{o(s,u)(u)}).on("change",u=>{o(s,u)(u)}).on("unlink",u=>{o(a,u)(u)}).on("error",c),{close:()=>(n.forEach(u=>clearTimeout(u)),n.clear(),l.close()),getRoutes:()=>{let u=[];for(let m of i.values())u.push(...m);return u},getRoutesByFile:()=>new Map(i)}}var on=require("zod");var en=require("zod");function Pt(e,t){return t instanceof en.z.ZodObject?t.strict().parse(e):t.parse(e)}var tn=require("zod");function Mt(e,t){return t instanceof tn.z.ZodObject?t.strict().parse(e):t.parse(e)}var rn=require("zod");function _t(e,t){return t instanceof rn.z.ZodObject?t.strict().parse(e):t.parse(e)}var nn=require("zod");function Ot(e,t){return t instanceof nn.z.ZodObject?t.strict().parse(e):t.parse(e)}ve();I();function zt(e,t=!1){return L({name:"RequestValidator",debug:t,handler:async({ctx:r,next:n})=>{if(e.params&&r.request.params)try{r.request.params=Mt(r.request.params,e.params)}catch(o){let i=Ke(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new _("Request validation failed",{fields:i,errorCount:s,section:"params"})}if(e.query&&r.request.query)try{r.request.query=_t(r.request.query,e.query)}catch(o){let i=Ke(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new _("Request validation failed",{fields:i,errorCount:s,section:"query"})}if(e.body)try{r.request.body=Pt(r.request.body,e.body)}catch(o){let i=Ke(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new _("Request validation failed",{fields:i,errorCount:s,section:"body"})}await n()}})}function Mi(e){return e!==null&&typeof e=="object"&&"type"in e&&"status"in e&&"correlationId"in e&&"timestamp"in e}function kt(e){return L({name:"ResponseValidator",handler:async({ctx:t,next:r})=>{let n=t.response.json,o=!0;t.response.json=(i,s)=>{if(!o||Mi(i))return n.call(t.response,i,s);try{let a=Ot(i,e);return n.call(t.response,a,s)}catch(a){throw o=!1,new q("Response validation failed",{validationError:Ke(a),hint:"The handler returned data that does not match the response schema"})}};try{await r()}catch(i){throw o=!1,t.response.json=n,i}finally{t.response.json=n}}})}function Ke(e){if(e instanceof on.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 Lt(e,t,r,n,o){let i=[...t.middleware||[]];t.schema&&((t.schema.params||t.schema.query||t.schema.body)&&i.unshift(zt(t.schema)),t.schema.response&&i.push(kt(t.schema.response))),await K([...i])({ctx:e,next:async()=>{let a=n.child({route:e.request.path,method:e.request.method}),c=await t.handler({ctx:e,params:r,logger:a,eventBus:o});!e.response.sent&&c!==void 0&&e.response.json(c)},logger:n,eventBus:o})}function sn(){return{routesByPath:new Map,routesByFile:new Map,pathToFile:new Map}}function G(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 u=e.routesByPath.get(l.path);return!u||!Oi(u,l)});return _i(e,t,{added:i,removed:s,changed:c}),{added:i,removed:s,changed:c}}function an(e){return Array.from(e.routesByPath.values())}function _i(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 Oi(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 At(e,t){Object.entries(e).forEach(([r,n])=>{r==="path"||!n||t.add(e.path,r,n)})}function Re(e,t){"remove"in t&&typeof t.remove=="function"?t.remove(e):console.warn("Matcher does not support selective removal, consider adding remove() method")}function cn(e,t){Re(e.path,t),At(e,t)}var zi={routesDir:"./routes",basePath:"/",watchMode:process.env.NODE_ENV==="development"};function ln(e){let t={...zi,...e};e.basePath&&!e.basePath.startsWith("/")&&console.warn("Base path does nothing");let r=sn(),n=se(),o=!1,i=null,s=null,a=new Set([t.routesDir]);function c(d){console.log(`
44
- \u{1F527} APPLYING MATCHER CHANGES:`),console.log(` Adding ${d.added.length} routes`),console.log(` Removing ${d.removed.length} routes`),console.log(` Updating ${d.changed.length} routes`),d.removed.forEach(g=>{console.log(` \u2796 Removing: ${g}`),Re(g,n)}),d.added.forEach(g=>{let v=Object.keys(g).filter(p=>p!=="path");console.log(` \u2795 Adding: ${g.path} [${v.join(", ")}]`),At(g,n)}),d.changed.forEach(g=>{let v=Object.keys(g).filter(p=>p!=="path");console.log(` \u{1F504} Updating: ${g.path} [${v.join(", ")}]`),cn(g,n)}),console.log(`\u2705 Matcher changes applied
45
- `)}function l(d,g){try{let v=G(r,g,d);return c(v),v}catch(v){throw console.error(`\u26A0\uFE0F Route conflicts from ${g}:`,v),v}}async function u(d,g,v){try{let p=await Kr(d),y=p.map(E=>v?{...E,path:`${v}${E.path}`}:E),f=l(y,g);console.log(`Loaded ${p.length} routes from ${g}${v?` with prefix ${v}`:""} (${f.added.length} added, ${f.changed.length} changed, ${f.removed.length} removed)`)}catch(p){throw console.error(`\u26A0\uFE0F Failed to load routes from ${g}:`,p),p}}async function m(){return o||i||(i=(async()=>{try{await Promise.all(Array.from(a).map(d=>u(d,d))),t.watchMode&&T(),o=!0}catch(d){throw console.error("\u26A0\uFE0F Failed to initialize router:",d),d}})()),i}function T(){s||(s=new Map);for(let d of a)if(!s.has(d)){let g=Ct(d,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(v,p)=>{try{let y=G(r,v,p);c(y)}catch(y){console.error(`Error adding routes from ${d}:`,y)}},onRouteChanged:xt(async(v,p)=>{try{console.log(`Processing changes for ${v}`);let y=G(r,v,p);console.log(`Changes detected: ${y.added.length} added, ${y.changed.length} changed, ${y.removed.length} removed`),c(y),console.log(`Route changes applied: ${y.added.length} added, ${y.changed.length} changed, ${y.removed.length} removed`)}catch(y){console.error(`\u26A0\uFE0F Error updating routes from ${d}:`,y)}},d),onRouteRemoved:(v,p)=>{console.log(`File removed: ${v} with ${p.length} routes`);try{p.forEach(y=>{Re(y.path,n)}),bt(v)}catch(y){console.error(`\u26A0\uFE0F Error removing routes from ${v}:`,y)}},onError:v=>{console.error(`\u26A0\uFE0F Route watcher error for ${d}:`,v)}});s.set(d,g)}}function b(d,g){s||(s=new Map);let v=Ct(d,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(p,y)=>{try{let f=y.map(N=>g?{...N,path:`${g}${N.path}`}:N),E=G(r,p,f);c(E)}catch(f){console.error(`\u26A0\uFE0F Error adding routes from ${d}:`,f)}},onRouteChanged:xt(async(p,y)=>{try{let f=y.map(N=>g?{...N,path:`${g}${N.path}`}:N),E=G(r,p,f);c(E)}catch(f){console.error(`\u26A0\uFE0F Error updating routes from ${d}:`,f)}},d),onRouteRemoved:(p,y)=>{try{y.forEach(f=>{let E=g?`${g}${f.path}`:f.path;Re(E,n)}),bt(p)}catch(f){console.error(`Error removing routes from ${p}:`,f)}},onError:p=>{console.error(`\u26A0\uFE0F Route watcher error for ${d}:`,p)}});return s.set(d,v),v}return m().catch(d=>{console.error("\u26A0\uFE0F Failed to initialize router on creation:",d)}),{async handleRequest(d,g,v){o||(console.log("\u{1F504} Router not initialized, initializing..."),await m());let{method:p,path:y}=d.request;console.log(`
46
- \u{1F4E5} Handling request: ${p} ${y}`);let f=n.match(y,p);if(!f)throw console.log(`\u274C No match found for: ${p} ${y}`),new W("Not found");if(console.log(`\u2705 Route matched: ${p} ${y}`),console.log(` Params: ${JSON.stringify(f.params)}`),f.methodNotAllowed){d.response.status(405).json({error:"\u274C Method Not Allowed",allowed:f.allowedMethods}),f.allowedMethods&&f.allowedMethods.length>0&&d.response.header("Allow",f.allowedMethods.join(", "));return}d.request.params=f.params,await Lt(d,f.route,f.params,g,v)},getRoutes(){return an(r)},addRoute(d){let g=G(r,"programmatic",[d]);c(g)},addRoutes(d){let g=G(r,"programmatic",d);return c(g),g},async addRouteDirectory(d,g={}){if(a.has(d)){console.warn(`Route directory ${d} already registered`);return}a.add(d),o&&(await u(d,d,g.prefix),t.watchMode&&b(d,g.prefix))},getRouteConflicts(){return[]},async close(){if(s){for(let d of s.values())await d.close();s.clear()}}}}R();var O={port:3e3,host:"localhost",routesDir:"./routes",http2:{enabled:!0},eventSchemas:{},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 ki(e={}){let t={port:e.port??O.port,host:e.host??O.host,routesDir:e.routesDir??O.routesDir,http2:{enabled:e.http2?.enabled??O.http2.enabled,keyFile:e.http2?.keyFile,certFile:e.http2?.certFile},eventSchemas:e.eventSchemas||O.eventSchemas,middleware:e.middleware??O.middleware,plugins:e.plugins??O.plugins,correlation:e.correlation,cors:e.cors,bodyLimits:e.bodyLimits?{json:e.bodyLimits.json??O.bodyLimits.json,form:e.bodyLimits.form??O.bodyLimits.form,text:e.bodyLimits.text??O.bodyLimits.text,raw:e.bodyLimits.raw??O.bodyLimits.raw,multipart:{maxFileSize:e.bodyLimits.multipart?.maxFileSize??O.bodyLimits.multipart.maxFileSize,maxTotalSize:e.bodyLimits.multipart?.maxTotalSize??O.bodyLimits.multipart.maxTotalSize,maxFiles:e.bodyLimits.multipart?.maxFiles??O.bodyLimits.multipart.maxFiles,maxFieldSize:e.bodyLimits.multipart?.maxFieldSize??O.bodyLimits.multipart.maxFieldSize}}:O.bodyLimits,logging:e.logging||O.logging,serverId:e.serverId};try{let r=Ur(t);return ir({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 Li(e){e.correlation&&qt(e.correlation.headerName,e.correlation.generator)}function Ai(e,t){return async()=>(Li(t),await Bi(e),await e.pluginManager.initializePlugins(e),await Nr(e,t),await e.pluginManager.onServerStart(e,e.server),Ii(e),e)}async function Bi(e){for(let t of e.plugins)await t.register(e)}function Ii(e){let t=Hr(()=>e.close());e._signalHandlers=t,e.events.emit("started")}function Di(e){return async t=>{if(!e.server)return;let r={...t};e._signalHandlers&&(e._signalHandlers.unregister(),delete e._signalHandlers),await $r(e,r)}}function Fi(e){return t=>{let r=Array.isArray(t)?t:[t];return e.middleware.push(...r),e}}function Ni(e){return async t=>{if(Array.isArray(t))for(let r of t)Tt(r),e.plugins.push(r),await r.register(e);else Tt(t),e.plugins.push(t),await t.register(e);return e}}function Ye(e={}){let t=ki(e),{port:r,host:n,middleware:o,plugins:i,cors:s,bodyLimits:a,serverId:c}=t,l=c||(0,dn.randomUUID)(),u=k(t.logging||{});ue(t.logging||{});let m=Array.isArray(o)?[...o]:[],T=Array.isArray(i)?[...i]:[],b=new un.AsyncLocalStorage,d=ln({routesDir:t.routesDir,watchMode:process.env.NODE_ENV==="development"}),g=qr({continueOnError:!0}),v=new pn.default,p=new ne(l,u),y=de(p,{schemas:t.eventSchemas},u),f={server:null,port:r,host:n,context:b,events:v,plugins:[...T],middleware:[...m],corsOptions:s,bodyLimits:a,_signalHandlers:{unregister:()=>{}},_logger:u,use:()=>f,register:async()=>f,listen:async()=>f,close:async()=>{},router:d,pluginManager:g,eventBus:y,serverId:l};return f.listen=Ai(f,t),f.close=Di(f),f.use=Fi(f),f.register=Ni(f),f}R();function Bt(e){return{}}function $i(e){return typeof e=="object"&&e!==null&&"name"in e&&"execute"in e&&typeof e.name=="string"&&typeof e.execute=="function"}function Hi(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 Ui(e){return e}function qi(e){return e}function ji(...e){return e}function Vi(...e){return e}P();I();P();R();var Xe=class extends w{constructor(t,r=void 0,n=void 0){super("UNAUTHORIZED",t,401,n??h(),r)}};P();R();var et=class extends w{constructor(t,r=void 0,n=void 0){super("CONFLICT",t,409,n??h(),r)}};P();R();var tt=class extends w{constructor(t,r=void 0,n=void 0){super("RATE_LIMITED",t,429,n??h(),r)}};ve();ye();P();R();var rt=class extends w{constructor(t,r,n){super("UPLOAD_TIMEOUT",t,408,n??h(),r)}};P();R();var nt=class extends w{constructor(t,r,n){super("UNPROCESSABLE_ENTITY",t,422,n??h(),r)}};Se();P();R();var ot=class extends w{constructor(t,r=void 0,n=void 0){super("SERVICE_UNAVAILABLE",t,503,n??h(),r)}};var fn=Dt.version,mn={createServer:Ye,inferContext:Bt},gn={createDeleteRoute:He,createGetRoute:Fe,createHeadRoute:qe,createOptionsRoute:je,createPatchRoute:Ue,createPostRoute:Ne,createPutRoute:$e,createRouteFactory:ht,createMatcher:se,extractParams:ee,compilePathPattern:ie,paramsToQuery:ge,buildUrl:Ve},hn={createMiddleware:L,createServiceMiddleware:ze,createStateMiddleware:Oe,compose:K,cors:fe,requestLoggerMiddleware:ft},yn={createPlugin:ke},Wi={createTypedEventBus:de,createServer:Ye,createMiddleware:L,createServiceMiddleware:ze,createStateMiddleware:Oe,createPlugin:ke,getCorrelationId:h,configureGlobalLogger:ue,createLogger:k,logger:C,Server:mn,Router:gn,Middleware:hn,Plugins:yn,VERSION:fn};0&&(module.exports={Blaize,BlaizeError,ConflictError,ConsoleTransport,ErrorSeverity,ErrorType,EventValidationError,ForbiddenError,InternalServerError,JSONTransport,Logger,MemoryEventBus,MiddlewareAPI,NotFoundError,NullTransport,PayloadTooLargeError,PluginsAPI,RateLimitError,RequestTimeoutError,RouterAPI,ServerAPI,ServiceNotAvailableError,UnauthorizedError,UnprocessableEntityError,UnsupportedMediaTypeError,VERSION,ValidationError,asMiddlewareArray,asPluginArray,buildUrl,compilePathPattern,compose,configureGlobalLogger,cors,createDeleteRoute,createGetRoute,createHeadRoute,createLogger,createMatcher,createMiddleware,createMiddlewareArray,createOptionsRoute,createPatchRoute,createPlugin,createPluginArray,createPostRoute,createPutRoute,createRouteFactory,createServer,createServiceMiddleware,createStateMiddleware,createTypedEventBus,extractParams,getCorrelationId,inferContext,isMiddleware,isPlugin,logger,paramsToQuery,requestLoggerMiddleware});
43
+ `),o()}),e.on("error",s=>{P.error("Server error:",{error:s,host:r,port:t}),i(s)})})}async function Si(e){for(let t of e.plugins)typeof t.initialize=="function"&&await t.initialize(e)}async function jr(e,t){if(!e.server)try{let r=t.port,n=t.host;await Si(e);let o=t.http2||{enabled:!0},i=!!o.enabled,s=await gi(o);t.http2&&s.keyFile&&s.certFile&&(t.http2.keyFile=s.keyFile,t.http2.certFile=s.certFile);let a=hi(i,s);e.server=a,e.port=r,e.host=n;let c=Ur(e);a.on("request",c),await yi(a,r,n,i)}catch(r){throw P.error("Failed to start server:",{error:r}),r}}var Ye=!1;async function Vr(e,t={}){let r=e.server,n=e.events;if(Ye){console.log("\u26A0\uFE0F Shutdown already in progress, ignoring duplicate shutdown request");return}if(!r)return;Ye=!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)}if(e.eventBus){console.log("\u{1F50C} Disconnecting EventBus...");try{await Promise.race([e.eventBus.disconnect(),new Promise((a,c)=>setTimeout(()=>c(new Error("EventBus disconnect timeout")),2e3))]),console.log("\u2705 EventBus disconnected")}catch(a){console.error("\u274C Error disconnecting EventBus:",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"),Ye=!1}catch(i){throw Ye=!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 Wr(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 S=require("zod");var wi=S.z.custom(e=>e!==null&&typeof e=="object"&&"execute"in e&&typeof e.execute=="function",{message:"Expected middleware to have an execute function"}),vi=S.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"}),Ei=S.z.object({enabled:S.z.boolean().optional().default(!0),keyFile:S.z.string().optional(),certFile:S.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"}),Ti=S.z.object({headerName:S.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:S.z.function().args().returns(S.z.string()).optional()}).optional(),bi=S.z.object({maxFileSize:S.z.number().positive().default(50*1024*1024),maxTotalSize:S.z.number().positive().default(100*1024*1024),maxFiles:S.z.number().positive().int().default(10),maxFieldSize:S.z.number().positive().default(1024*1024)}),xi=S.z.object({json:S.z.number().positive().default(512*1024),form:S.z.number().positive().default(1024*1024),text:S.z.number().positive().default(5*1024*1024),raw:S.z.number().positive().default(10*1024*1024),multipart:bi}),Ri=S.z.object({includeHeaders:S.z.boolean().optional(),headerWhitelist:S.z.array(S.z.string().min(1)).optional(),includeQuery:S.z.boolean().optional()}).optional(),Ci=S.z.object({level:S.z.enum(["debug","info","warn","error"]).optional(),transport:S.z.any().optional(),redactKeys:S.z.array(S.z.string().min(1)).optional(),includeTimestamp:S.z.boolean().optional(),requestLogging:S.z.boolean().optional(),requestLoggerOptions:Ri}).optional(),Pi=S.z.object({port:S.z.number().int().positive().optional().default(3e3),host:S.z.string().optional().default("localhost"),routesDir:S.z.string().optional().default("./routes"),http2:Ei.optional().default({enabled:!0}),eventSchemas:S.z.record(S.z.any()).optional().default({}),middleware:S.z.array(wi).optional().default([]),plugins:S.z.array(vi).optional().default([]),correlation:Ti,cors:sr,bodyLimits:xi,logging:Ci,serverId:S.z.string().min(1).optional()});function Qr(e){try{return Pi.parse(e)}catch(t){if(t instanceof S.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 Gr(e={}){let{continueOnError:t=!0,onError:r}=e;function n(o,i,s){let a=`Plugin ${o.name} failed during ${i}: ${s.message}`;if(r?r(o,i,s):P.error(`[PluginLifecycle] ${a}`,{plugin:o.name,phase:i,error:{message:s.message,stack:s.stack,name:s.name}}),!t)throw new Error(a)}return{async initializePlugins(o){P.debug("[PluginLifecycle] Initializing plugins",{count:o.plugins.length});for(let i of o.plugins)if(i.initialize)try{P.debug("[PluginLifecycle] Initializing plugin",{plugin:i.name}),await i.initialize(o)}catch(s){n(i,"initialize",s)}P.info("[PluginLifecycle] Plugins initialized",{count:o.plugins.length,plugins:o.plugins.map(i=>i.name)})},async terminatePlugins(o){P.debug("[PluginLifecycle] Terminating plugins",{count:o.plugins.length});let i=[...o.plugins].reverse();for(let s of i)if(s.terminate)try{P.debug("[PluginLifecycle] Terminating plugin",{plugin:s.name}),await s.terminate(o)}catch(a){n(s,"terminate",a)}P.info("[PluginLifecycle] Plugins terminated",{count:i.length})},async onServerStart(o,i){P.debug("[PluginLifecycle] Notifying plugins of server start");for(let s of o.plugins)if(s.onServerStart)try{P.debug("[PluginLifecycle] Notifying plugin of server start",{plugin:s.name}),await s.onServerStart(i)}catch(a){n(s,"onServerStart",a)}},async onServerStop(o,i){P.debug("[PluginLifecycle] Notifying plugins of server stop...");let s=[...o.plugins].reverse();for(let a of s)if(a.onServerStop)try{P.debug(`[PluginLifecycle] Notifying plugin of server stop: ${a.name}`),await a.onServerStop(i)}catch(c){n(a,"onServerStop",c)}}}}var D=class extends Error{constructor(r,n){super(`Plugin validation error${r?` for "${r}"`:""}: ${n}`);this.pluginName=r;this.name="PluginValidationError"}};var Mi=new Set(["core","server","router","middleware","context","blaize","blaizejs"]),zi=/^[a-z]([a-z0-9-]*[a-z0-9])?$/,_i=/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9-.]+)?(?:\+[a-zA-Z0-9-.]+)?$/;function xt(e,t={}){let{requireVersion:r=!0,validateNameFormat:n=!0,checkReservedNames:o=!0}=t;if(!e||typeof e!="object")throw new D("","Plugin must be an object");let i=e;if(!i.name||typeof i.name!="string")throw new D("","Plugin must have a name (string)");if(n&&!zi.test(i.name))throw new D(i.name,"Plugin name must be lowercase letters, numbers, and hyphens only");if(o&&Mi.has(i.name.toLowerCase()))throw new D(i.name,`Plugin name "${i.name}" is reserved`);if(r){if(!i.version||typeof i.version!="string")throw new D(i.name,"Plugin must have a version (string)");if(!_i.test(i.version))throw new D(i.name,'Plugin version must follow semantic versioning (e.g., "1.0.0")')}if(!i.register||typeof i.register!="function")throw new D(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 D(i.name,`Plugin ${a} must be a function if provided`)}var Jr=k(require("crypto"),1),Kr=k(require("fs/promises"),1);async function ki(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 Zr(e,t){try{let r=Ie(e,t),n=await ki(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(Oi(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 Oi(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 xe=new Map;async function Re(e,t,r=!0){let o=(await Kr.stat(e)).mtime.getTime(),i=xe.get(e);if(r&&i&&i.timestamp===o)return i.routes;let s=await Zr(e,t);if(r){let a=Xr(s);xe.set(e,{routes:s,timestamp:o,hash:a})}return s}function Yr(e,t){let r=xe.get(e);if(!r)return!0;let n=Xr(t);return r.hash!==n}function Rt(e){e?xe.delete(e):xe.clear()}function Xr(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 Jr.createHash("md5").update(r).digest("hex")}var tn=k(require("os"),1);var Xe=k(require("fs/promises"),1),ce=k(require("path"),1);async function en(e,t={}){let r=ce.isAbsolute(e)?e:ce.resolve(process.cwd(),e);console.log("Creating router with routes directory:",r);try{if(!(await Xe.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 Xe.readdir(s,{withFileTypes:!0});for(let c of a){let l=ce.join(s,c.name);c.isDirectory()&&o.includes(c.name)||(c.isDirectory()?await i(l):Fi(c.name)&&n.push(l))}}return await i(r),n}function Fi(e){return!e.startsWith("_")&&(e.endsWith(".ts")||e.endsWith(".js"))}async function Li(e,t,r=Math.max(1,Math.floor(tn.cpus().length/2))){let n=Ai(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 rn(e){let t=await en(e);return(await Li(t,n=>Re(n,e))).flat()}function Ai(e,t){let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}var Q={fileChanges:0,totalReloadTime:0,averageReloadTime:0,slowReloads:[]};function nn(e,t){let r=Date.now()-t;if(Q.fileChanges++,Q.totalReloadTime+=r,Q.averageReloadTime=Q.totalReloadTime/Q.fileChanges,r>100&&(Q.slowReloads.push({file:e,time:r}),Q.slowReloads.length>10&&Q.slowReloads.shift()),process.env.NODE_ENV==="development"){let n=r<50?"\u26A1":r<100?"\u{1F504}":"\u{1F40C}";console.log(`${n} Route reload: ${e} (${r}ms)`)}}function Ct(e,t){return console.log(`Tracking performance for: ${t}`),async(...r)=>{let n=Date.now();try{let o=await e(...r);return nn(t,n),o}catch(o){throw nn(t,n),o}}}var Pt=k(require("path"),1),on=require("chokidar");function Mt(e,t={}){let r=t.debounceMs||16,n=new Map;function o(u,p){return(...T)=>{let x=n.get(p);x&&clearTimeout(x);let d=setTimeout(()=>{u(...T),n.delete(p)},r);n.set(p,d)}}let i=new Map;async function s(u){try{let p=i.get(u),T=await Re(u,e,!1);if(!T||T.length===0||p&&!Yr(u,T))return;await Re(u,e,!0);let x=Pt.normalize(u);p?(i.set(u,T),t.onRouteChanged&&t.onRouteChanged(x,T)):(i.set(u,T),t.onRouteAdded&&t.onRouteAdded(x,T))}catch(p){console.log(`\u26A0\uFE0F Error processing file ${u}:`,p),c(p)}}function a(u){let p=Pt.normalize(u),T=i.get(p);T&&T.length>0&&t.onRouteRemoved&&t.onRouteRemoved(p,T),i.delete(p)}function c(u){t.onError&&u instanceof Error?t.onError(u):console.error("\u26A0\uFE0F Route watcher error:",u)}let l=(0,on.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",u=>{o(s,u)(u)}).on("change",u=>{o(s,u)(u)}).on("unlink",u=>{o(a,u)(u)}).on("error",c),{close:()=>(n.forEach(u=>clearTimeout(u)),n.clear(),l.close()),getRoutes:()=>{let u=[];for(let p of i.values())u.push(...p);return u},getRoutesByFile:()=>new Map(i)}}var fn=require("zod");var sn=require("zod");function zt(e,t){return t instanceof sn.z.ZodObject?t.strict().parse(e):t.parse(e)}var an=require("zod");function cn(e,t){return t instanceof an.z.ZodObject?t.strict().parse(e):t.parse(e)}var ln=require("zod");function _t(e,t){return t instanceof ln.z.ZodObject?t.strict().parse(e):t.parse(e)}var un=require("zod");function kt(e,t){return t instanceof un.z.ZodObject?t.strict().parse(e):t.parse(e)}var dn=require("zod");function Ot(e,t){return t instanceof dn.z.ZodObject?t.strict().parse(e):t.parse(e)}ve();A();var G=require("zod");A();var Ft={B:1,KB:1024,MB:1024**2,GB:1024**3,TB:1024**4,KiB:1024,MiB:1024**2,GiB:1024**3,TiB:1024**4};function Lt(e){if(typeof e=="number"){if(isNaN(e))throw new b("Invalid size format: NaN is not a valid size");if(!isFinite(e))throw new b("Size cannot be Infinity");if(e<0)throw new b("Size cannot be negative");return Math.round(e)}let t=e.trim();if(!t)throw new b("Invalid size format: empty string");let r=/^(-?[\d.]+)\s*([A-Za-z]+)?$/,n=t.match(r);if(!n)throw new b(`Invalid size format: "${e}"`);let[,o,i]=n,s=parseFloat(o);if(isNaN(s))throw new b(`Invalid size format: "${e}" contains invalid number`);if(!isFinite(s))throw new b("Size cannot be Infinity");if(s<0)throw new b("Size cannot be negative");if(!i)return Math.round(s);let a=i.replace(/^([kmgt])(i)?b$/i,(u,p,T)=>`${p.toUpperCase()}${T?"i":""}B`);if(!(a in Ft))throw new b(`Invalid size unit: ${i}. Supported units: ${Object.keys(Ft).join(", ")}`);let c=Ft[a],l=s*c;return Math.round(l)}function Ce(e,t=2){if(e===0)return"0 B";let r=e<0,n=Math.abs(e),o=["B","KB","MB","GB","TB"],i=0,s=n;for(;s>=1024&&i<o.length-1;)s/=1024,i++;let a=s%1===0?s.toString():s.toFixed(t).replace(/\.?0+$/,"");return`${r?"-":""}${a} ${o[i]}`}function Bi(e,t){if(e===t)return!0;if(t.endsWith("/*")){let r=t.slice(0,-2);return e.split("/")[0]===r}return!1}function pn(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.fieldname=="string"&&typeof t.originalname=="string"&&typeof t.encoding=="string"&&typeof t.mimetype=="string"&&typeof t.size=="number"&&(t.buffer===void 0||Buffer.isBuffer(t.buffer))}function At(e){let t=e?.maxSize!==void 0?typeof e.maxSize=="number"?e.maxSize:Lt(e.maxSize):void 0,r=e?.minSize!==void 0?typeof e.minSize=="number"?e.minSize:Lt(e.minSize):void 0,o=G.z.custom(i=>pn(i),{message:"Expected an uploaded file object"}).superRefine((i,s)=>{if(!pn(i)){s.addIssue({code:G.z.ZodIssueCode.custom,message:"Expected an uploaded file object"});return}let a=i;e?.accept&&e.accept.length>0&&(e.accept.some(l=>Bi(a.mimetype,l))||s.addIssue({code:G.z.ZodIssueCode.custom,message:`Invalid file type "${a.mimetype}". Accepted types: ${e.accept.join(", ")}`})),r!==void 0&&a.size<r&&s.addIssue({code:G.z.ZodIssueCode.custom,message:`File size ${Ce(a.size)} is below minimum ${Ce(r)}`}),t!==void 0&&a.size>t&&s.addIssue({code:G.z.ZodIssueCode.custom,message:`File size ${Ce(a.size)} exceeds maximum ${Ce(t)}`}),a.size<0&&s.addIssue({code:G.z.ZodIssueCode.custom,message:"File size cannot be negative"}),(!a.mimetype||a.mimetype.trim()==="")&&s.addIssue({code:G.z.ZodIssueCode.custom,message:"File must have a MIME type"})});return o._isFileSchema=!0,o}function Bt(e,t=!1){return F({name:"RequestValidator",debug:t,handler:async({ctx:r,next:n})=>{if(e.params&&r.request.params)try{r.request.params=_t(r.request.params,e.params)}catch(o){let i=Pe(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new b("Request validation failed",{fields:i,errorCount:s,section:"params"})}if(e.query&&r.request.query)try{r.request.query=kt(r.request.query,e.query)}catch(o){let i=Pe(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new b("Request validation failed",{fields:i,errorCount:s,section:"query"})}if(e.body)try{r.request.body=zt(r.request.body,e.body)}catch(o){let i=Pe(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new b("Request validation failed",{fields:i,errorCount:s,section:"body"})}if(e.files)try{r.request.files=cn(r.request.files,e.files)}catch(o){let i=Pe(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new b("Request validation failed",{fields:i,errorCount:s,section:"files"})}await n()}})}function Ii(e){return e!==null&&typeof e=="object"&&"type"in e&&"status"in e&&"correlationId"in e&&"timestamp"in e}function It(e){return F({name:"ResponseValidator",handler:async({ctx:t,next:r})=>{let n=t.response.json,o=!0;t.response.json=(i,s)=>{if(!o||Ii(i))return n.call(t.response,i,s);try{let a=Ot(i,e);return n.call(t.response,a,s)}catch(a){throw o=!1,new q("Response validation failed",{validationError:Pe(a),hint:"The handler returned data that does not match the response schema"})}};try{await r()}catch(i){throw o=!1,t.response.json=n,i}finally{t.response.json=n}}})}function Pe(e){if(e instanceof fn.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 Dt(e,t,r,n,o){let i=[...t.middleware||[]];t.schema&&((t.schema.params||t.schema.query||t.schema.body)&&i.unshift(Bt(t.schema)),t.schema.response&&i.push(It(t.schema.response))),await Y([...i])({ctx:e,next:async()=>{let a=n.child({route:e.request.path,method:e.request.method}),c=await t.handler({ctx:e,params:r,logger:a,eventBus:o});!e.response.sent&&c!==void 0&&e.response.json(c)},logger:n,eventBus:o})}function mn(){return{routesByPath:new Map,routesByFile:new Map,pathToFile:new Map}}function Z(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 u=e.routesByPath.get(l.path);return!u||!Ni(u,l)});return Di(e,t,{added:i,removed:s,changed:c}),{added:i,removed:s,changed:c}}function gn(e){return Array.from(e.routesByPath.values())}function Di(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 Ni(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 Nt(e,t){Object.entries(e).forEach(([r,n])=>{r==="path"||!n||t.add(e.path,r,n)})}function Me(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 hn(e,t){Me(e.path,t),Nt(e,t)}var $i={routesDir:"./routes",basePath:"/",watchMode:process.env.NODE_ENV==="development"};function yn(e){let t={...$i,...e};e.basePath&&!e.basePath.startsWith("/")&&console.warn("Base path does nothing");let r=mn(),n=ae(),o=!1,i=null,s=null,a=new Set([t.routesDir]);function c(d){console.log(`
44
+ \u{1F527} APPLYING MATCHER CHANGES:`),console.log(` Adding ${d.added.length} routes`),console.log(` Removing ${d.removed.length} routes`),console.log(` Updating ${d.changed.length} routes`),d.removed.forEach(g=>{console.log(` \u2796 Removing: ${g}`),Me(g,n)}),d.added.forEach(g=>{let w=Object.keys(g).filter(f=>f!=="path");console.log(` \u2795 Adding: ${g.path} [${w.join(", ")}]`),Nt(g,n)}),d.changed.forEach(g=>{let w=Object.keys(g).filter(f=>f!=="path");console.log(` \u{1F504} Updating: ${g.path} [${w.join(", ")}]`),hn(g,n)}),console.log(`\u2705 Matcher changes applied
45
+ `)}function l(d,g){try{let w=Z(r,g,d);return c(w),w}catch(w){throw console.error(`\u26A0\uFE0F Route conflicts from ${g}:`,w),w}}async function u(d,g,w){try{let f=await rn(d),y=f.map(E=>w?{...E,path:`${w}${E.path}`}:E),m=l(y,g);console.log(`Loaded ${f.length} routes from ${g}${w?` with prefix ${w}`:""} (${m.added.length} added, ${m.changed.length} changed, ${m.removed.length} removed)`)}catch(f){throw console.error(`\u26A0\uFE0F Failed to load routes from ${g}:`,f),f}}async function p(){return o||i||(i=(async()=>{try{await Promise.all(Array.from(a).map(d=>u(d,d))),t.watchMode&&T(),o=!0}catch(d){throw console.error("\u26A0\uFE0F Failed to initialize router:",d),d}})()),i}function T(){s||(s=new Map);for(let d of a)if(!s.has(d)){let g=Mt(d,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(w,f)=>{try{let y=Z(r,w,f);c(y)}catch(y){console.error(`Error adding routes from ${d}:`,y)}},onRouteChanged:Ct(async(w,f)=>{try{console.log(`Processing changes for ${w}`);let y=Z(r,w,f);console.log(`Changes detected: ${y.added.length} added, ${y.changed.length} changed, ${y.removed.length} removed`),c(y),console.log(`Route changes applied: ${y.added.length} added, ${y.changed.length} changed, ${y.removed.length} removed`)}catch(y){console.error(`\u26A0\uFE0F Error updating routes from ${d}:`,y)}},d),onRouteRemoved:(w,f)=>{console.log(`File removed: ${w} with ${f.length} routes`);try{f.forEach(y=>{Me(y.path,n)}),Rt(w)}catch(y){console.error(`\u26A0\uFE0F Error removing routes from ${w}:`,y)}},onError:w=>{console.error(`\u26A0\uFE0F Route watcher error for ${d}:`,w)}});s.set(d,g)}}function x(d,g){s||(s=new Map);let w=Mt(d,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(f,y)=>{try{let m=y.map(N=>g?{...N,path:`${g}${N.path}`}:N),E=Z(r,f,m);c(E)}catch(m){console.error(`\u26A0\uFE0F Error adding routes from ${d}:`,m)}},onRouteChanged:Ct(async(f,y)=>{try{let m=y.map(N=>g?{...N,path:`${g}${N.path}`}:N),E=Z(r,f,m);c(E)}catch(m){console.error(`\u26A0\uFE0F Error updating routes from ${d}:`,m)}},d),onRouteRemoved:(f,y)=>{try{y.forEach(m=>{let E=g?`${g}${m.path}`:m.path;Me(E,n)}),Rt(f)}catch(m){console.error(`Error removing routes from ${f}:`,m)}},onError:f=>{console.error(`\u26A0\uFE0F Route watcher error for ${d}:`,f)}});return s.set(d,w),w}return p().catch(d=>{console.error("\u26A0\uFE0F Failed to initialize router on creation:",d)}),{async handleRequest(d,g,w){o||(console.log("\u{1F504} Router not initialized, initializing..."),await p());let{method:f,path:y}=d.request;console.log(`
46
+ \u{1F4E5} Handling request: ${f} ${y}`);let m=n.match(y,f);if(!m)throw console.log(`\u274C No match found for: ${f} ${y}`),new W("Not found");if(console.log(`\u2705 Route matched: ${f} ${y}`),console.log(` Params: ${JSON.stringify(m.params)}`),m.methodNotAllowed){d.response.status(405).json({error:"\u274C Method Not Allowed",allowed:m.allowedMethods}),m.allowedMethods&&m.allowedMethods.length>0&&d.response.header("Allow",m.allowedMethods.join(", "));return}d.request.params=m.params,await Dt(d,m.route,m.params,g,w)},getRoutes(){return gn(r)},addRoute(d){let g=Z(r,"programmatic",[d]);c(g)},addRoutes(d){let g=Z(r,"programmatic",d);return c(g),g},async addRouteDirectory(d,g={}){if(a.has(d)){console.warn(`Route directory ${d} already registered`);return}a.add(d),o&&(await u(d,d,g.prefix),t.watchMode&&x(d,g.prefix))},getRouteConflicts(){return[]},async close(){if(s){for(let d of s.values())await d.close();s.clear()}}}}C();var _={port:3e3,host:"localhost",routesDir:"./routes",http2:{enabled:!0},eventSchemas:{},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 Ui(e={}){let t={port:e.port??_.port,host:e.host??_.host,routesDir:e.routesDir??_.routesDir,http2:{enabled:e.http2?.enabled??_.http2.enabled,keyFile:e.http2?.keyFile,certFile:e.http2?.certFile},eventSchemas:e.eventSchemas||_.eventSchemas,middleware:e.middleware??_.middleware,plugins:e.plugins??_.plugins,correlation:e.correlation,cors:e.cors,bodyLimits:e.bodyLimits?{json:e.bodyLimits.json??_.bodyLimits.json,form:e.bodyLimits.form??_.bodyLimits.form,text:e.bodyLimits.text??_.bodyLimits.text,raw:e.bodyLimits.raw??_.bodyLimits.raw,multipart:{maxFileSize:e.bodyLimits.multipart?.maxFileSize??_.bodyLimits.multipart.maxFileSize,maxTotalSize:e.bodyLimits.multipart?.maxTotalSize??_.bodyLimits.multipart.maxTotalSize,maxFiles:e.bodyLimits.multipart?.maxFiles??_.bodyLimits.multipart.maxFiles,maxFieldSize:e.bodyLimits.multipart?.maxFieldSize??_.bodyLimits.multipart.maxFieldSize}}:_.bodyLimits,logging:e.logging||_.logging,serverId:e.serverId};try{let r=Qr(t);return ur({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 Hi(e){e.correlation&&Gt(e.correlation.headerName,e.correlation.generator)}function qi(e,t){return async()=>(Hi(t),await ji(e),await e.pluginManager.initializePlugins(e),await jr(e,t),await e.pluginManager.onServerStart(e,e.server),Vi(e),e)}async function ji(e){for(let t of e.plugins)await t.register(e)}function Vi(e){let t=Wr(()=>e.close());e._signalHandlers=t,e.events.emit("started")}function Wi(e){return async t=>{if(!e.server)return;let r={...t};e._signalHandlers&&(e._signalHandlers.unregister(),delete e._signalHandlers),await Vr(e,r)}}function Qi(e){return t=>{let r=Array.isArray(t)?t:[t];return e.middleware.push(...r),e}}function Gi(e){return async t=>{if(Array.isArray(t))for(let r of t)xt(r),e.plugins.push(r),await r.register(e);else xt(t),e.plugins.push(t),await t.register(e);return e}}function et(e={}){let t=Ui(e),{port:r,host:n,middleware:o,plugins:i,cors:s,bodyLimits:a,serverId:c}=t,l=c||(0,wn.randomUUID)(),u=O(t.logging||{});de(t.logging||{});let p=Array.isArray(o)?[...o]:[],T=Array.isArray(i)?[...i]:[],x=new Sn.AsyncLocalStorage,d=yn({routesDir:t.routesDir,watchMode:process.env.NODE_ENV==="development"}),g=Gr({continueOnError:!0}),w=new vn.default,f=new oe(l,u),y=pe(f,{schemas:t.eventSchemas},u),m={server:null,port:r,host:n,context:x,events:w,plugins:[...T],middleware:[...p],corsOptions:s,bodyLimits:a,_signalHandlers:{unregister:()=>{}},_logger:u,use:()=>m,register:async()=>m,listen:async()=>m,close:async()=>{},router:d,pluginManager:g,eventBus:y,serverId:l};return m.listen=qi(m,t),m.close=Wi(m),m.use=Qi(m),m.register=Gi(m),m}C();function $t(e){return{}}function Zi(e){return typeof e=="object"&&e!==null&&"name"in e&&"execute"in e&&typeof e.name=="string"&&typeof e.execute=="function"}function Ji(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 Ki(e){return e}function Yi(e){return e}function Xi(...e){return e}function es(...e){return e}M();A();M();C();var tt=class extends v{constructor(t,r=void 0,n=void 0){super("UNAUTHORIZED",t,401,n??h(),r)}};M();C();var rt=class extends v{constructor(t,r=void 0,n=void 0){super("CONFLICT",t,409,n??h(),r)}};M();C();var nt=class extends v{constructor(t,r=void 0,n=void 0){super("RATE_LIMITED",t,429,n??h(),r)}};ve();Se();M();C();var ot=class extends v{constructor(t,r,n){super("UPLOAD_TIMEOUT",t,408,n??h(),r)}};M();C();var it=class extends v{constructor(t,r,n){super("UNPROCESSABLE_ENTITY",t,422,n??h(),r)}};we();M();C();var st=class extends v{constructor(t,r=void 0,n=void 0){super("SERVICE_UNAVAILABLE",t,503,n??h(),r)}};var En=Ht.version,Tn={createServer:et,inferContext:$t},bn={createDeleteRoute:je,createGetRoute:Ue,createHeadRoute:We,createOptionsRoute:Qe,createPatchRoute:Ve,createPostRoute:He,createPutRoute:qe,createRouteFactory:St,createMatcher:ae,extractParams:te,compilePathPattern:se,paramsToQuery:he,buildUrl:Ge},xn={createMiddleware:F,createServiceMiddleware:Le,createStateMiddleware:Fe,compose:Y,cors:me,requestLoggerMiddleware:gt},Rn={createPlugin:Ae},ts={createTypedEventBus:pe,createServer:et,createMiddleware:F,createServiceMiddleware:Le,createStateMiddleware:Fe,createPlugin:Ae,getCorrelationId:h,configureGlobalLogger:de,createLogger:O,logger:P,file:At,Server:Tn,Router:bn,Middleware:xn,Plugins:Rn,VERSION:En};0&&(module.exports={Blaize,BlaizeError,ConflictError,ConsoleTransport,ErrorSeverity,ErrorType,EventValidationError,ForbiddenError,InternalServerError,JSONTransport,Logger,MemoryEventBus,MiddlewareAPI,NotFoundError,NullTransport,PayloadTooLargeError,PluginsAPI,RateLimitError,RequestTimeoutError,RouterAPI,ServerAPI,ServiceNotAvailableError,UnauthorizedError,UnprocessableEntityError,UnsupportedMediaTypeError,VERSION,ValidationError,asMiddlewareArray,asPluginArray,buildUrl,compilePathPattern,compose,configureGlobalLogger,cors,createDeleteRoute,createGetRoute,createHeadRoute,createLogger,createMatcher,createMiddleware,createMiddlewareArray,createOptionsRoute,createPatchRoute,createPlugin,createPluginArray,createPostRoute,createPutRoute,createRouteFactory,createServer,createServiceMiddleware,createStateMiddleware,createTypedEventBus,extractParams,file,getCorrelationId,inferContext,isMiddleware,isPlugin,logger,paramsToQuery,requestLoggerMiddleware});
47
47
  //# sourceMappingURL=index.cjs.map