blaizejs 0.9.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +302 -1031
- package/dist/{chunk-I5FNWSJS.js → chunk-4UKXEMYU.js} +3 -3
- package/dist/chunk-4UKXEMYU.js.map +1 -0
- package/dist/{chunk-3ICDFF57.js → chunk-IPU6LCPL.js} +3 -3
- package/dist/{chunk-XIPQPFN5.js → chunk-JY6NZIG2.js} +3 -3
- package/dist/{chunk-GIZW5W7C.js → chunk-PGUWVOHK.js} +3 -3
- package/dist/{chunk-ULIQB554.js → chunk-VEQ5CZZF.js} +3 -3
- package/dist/index.cjs +14 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +15 -15
- package/dist/index.js.map +1 -1
- package/dist/{internal-server-error-DVVTTWHD.js → internal-server-error-VJDQ4MEY.js} +3 -3
- package/dist/{payload-too-large-error-QGRSATV5.js → payload-too-large-error-GVRSZNQ3.js} +3 -3
- package/dist/{unsupported-media-type-error-VAT4HTL4.js → unsupported-media-type-error-XA32IKKD.js} +3 -3
- package/dist/{validation-error-N57OM7AM.js → validation-error-FY37VOK2.js} +3 -3
- package/package.json +2 -2
- package/dist/chunk-I5FNWSJS.js.map +0 -1
- /package/dist/{chunk-3ICDFF57.js.map → chunk-IPU6LCPL.js.map} +0 -0
- /package/dist/{chunk-XIPQPFN5.js.map → chunk-JY6NZIG2.js.map} +0 -0
- /package/dist/{chunk-GIZW5W7C.js.map → chunk-PGUWVOHK.js.map} +0 -0
- /package/dist/{chunk-ULIQB554.js.map → chunk-VEQ5CZZF.js.map} +0 -0
- /package/dist/{internal-server-error-DVVTTWHD.js.map → internal-server-error-VJDQ4MEY.js.map} +0 -0
- /package/dist/{payload-too-large-error-QGRSATV5.js.map → payload-too-large-error-GVRSZNQ3.js.map} +0 -0
- /package/dist/{unsupported-media-type-error-VAT4HTL4.js.map → unsupported-media-type-error-XA32IKKD.js.map} +0 -0
- /package/dist/{validation-error-N57OM7AM.js.map → validation-error-FY37VOK2.js.map} +0 -0
package/dist/index.cjs
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
|
-
* blaizejs v0.
|
|
3
|
+
* blaizejs v0.10.0
|
|
4
4
|
* A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.
|
|
5
5
|
*
|
|
6
6
|
* Copyright (c) 2026 BlaizeJS Contributors
|
|
7
7
|
* @license MIT
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
"use strict";var
|
|
10
|
+
"use strict";var Mn=Object.create;var _e=Object.defineProperty;var zn=Object.getOwnPropertyDescriptor;var On=Object.getOwnPropertyNames;var _n=Object.getPrototypeOf,kn=Object.prototype.hasOwnProperty;var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var de=(e,t)=>{for(var r in t)_e(e,r,{get:t[r],enumerable:!0})},qt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of On(t))!kn.call(e,o)&&o!==r&&_e(e,o,{get:()=>t[o],enumerable:!(n=zn(t,o))||n.enumerable});return e};var _=(e,t,r)=>(r=e!=null?Mn(_n(e)):{},qt(t||!e||!e.__esModule?_e(r,"default",{value:e,enumerable:!0}):r,e)),Ln=e=>qt(_e({},"__esModule",{value:!0}),e);function $n(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`req_${e}_${t}`}function Jt(e,t){Le={headerName:e||dt.headerName,generator:t||dt.generator}}function X(){return Le.headerName}function Un(){return Le.generator()}function h(){let e=Zt.getStore();return e&&e.trim()?e:"unknown"}function Kt(e,t){return Zt.run(e,t)}function Fe(e){let t=Le.headerName,r=e[t],n;return Array.isArray(r)?n=r[0]:typeof r=="string"&&(n=r),n&&n.trim()?n:Un()}var Qt,dt,Le,Zt,C=oe(()=>{"use strict";Qt=require("async_hooks"),dt={headerName:"x-correlation-id",generator:$n},Le={...dt},Zt=new Qt.AsyncLocalStorage});var z,Yt,w,P=oe(()=>{"use strict";z=(g=>(g.VALIDATION_ERROR="VALIDATION_ERROR",g.NOT_FOUND="NOT_FOUND",g.UNAUTHORIZED="UNAUTHORIZED",g.FORBIDDEN="FORBIDDEN",g.SSE_NOT_ACCEPTABLE="SSE_NOT_ACCEPTABLE",g.CONFLICT="CONFLICT",g.RATE_LIMITED="RATE_LIMITED",g.INTERNAL_SERVER_ERROR="INTERNAL_SERVER_ERROR",g.PAYLOAD_TOO_LARGE="PAYLOAD_TOO_LARGE",g.UNSUPPORTED_MEDIA_TYPE="UNSUPPORTED_MEDIA_TYPE",g.UPLOAD_TIMEOUT="UPLOAD_TIMEOUT",g.UNPROCESSABLE_ENTITY="UNPROCESSABLE_ENTITY",g.NETWORK_ERROR="NETWORK_ERROR",g.TIMEOUT_ERROR="TIMEOUT_ERROR",g.PARSE_ERROR="PARSE_ERROR",g.HTTP_ERROR="HTTP_ERROR",g.SSE_CONNECTION_ERROR="SSE_CONNECTION_ERROR",g.SSE_BUFFER_OVERFLOW="SSE_BUFFER_OVERFLOW",g.SSE_STREAM_CLOSED="SSE_STREAM_CLOSED",g.SERVICE_UNAVAILABLE="SERVICE_UNAVAILABLE",g.COMPRESSION_CONFIGURATION_ERROR="COMPRESSION_CONFIGURATION_ERROR",g))(z||{}),Yt=(o=>(o.LOW="low",o.MEDIUM="medium",o.HIGH="high",o.CRITICAL="critical",o))(Yt||{}),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 te={};de(te,{ValidationError:()=>T});var T,A=oe(()=>{"use strict";P();C();T=class extends w{constructor(t,r=void 0,n=void 0){super("VALIDATION_ERROR",t,400,n??h(),r)}}});var Et={};de(Et,{PayloadTooLargeError:()=>N});var N,ve=oe(()=>{"use strict";P();C();N=class extends w{constructor(t,r,n){super("PAYLOAD_TOO_LARGE",t,413,n??h(),r)}}});var Tt={};de(Tt,{UnsupportedMediaTypeError:()=>W});var W,Ee=oe(()=>{"use strict";P();C();W=class extends w{constructor(t,r,n){super("UNSUPPORTED_MEDIA_TYPE",t,415,n??h(),r)}}});var zr={};de(zr,{InternalServerError:()=>j});var j,Te=oe(()=>{"use strict";P();C();j=class extends w{constructor(t,r=void 0,n=void 0){super("INTERNAL_SERVER_ERROR",t,500,n??h(),r)}}});var ts={};de(ts,{Blaize:()=>es,BlaizeError:()=>w,ConflictError:()=>ot,ConsoleTransport:()=>U,ErrorSeverity:()=>Yt,ErrorType:()=>z,EventValidationError:()=>V,ForbiddenError:()=>ae,InternalServerError:()=>j,JSONTransport:()=>Y,Logger:()=>ie,MemoryEventBus:()=>se,MiddlewareAPI:()=>Cn,NotFoundError:()=>G,NullTransport:()=>pe,PayloadTooLargeError:()=>N,PluginsAPI:()=>Pn,RateLimitError:()=>it,RequestTimeoutError:()=>st,RouterAPI:()=>Rn,ServerAPI:()=>xn,ServiceNotAvailableError:()=>ct,UnauthorizedError:()=>nt,UnprocessableEntityError:()=>at,UnsupportedMediaTypeError:()=>W,VERSION:()=>bn,ValidationError:()=>T,asMiddlewareArray:()=>Ji,asPluginArray:()=>Ki,buildUrl:()=>Je,compilePathPattern:()=>ce,compose:()=>ee,configureGlobalLogger:()=>fe,cors:()=>he,createDeleteRoute:()=>We,createGetRoute:()=>qe,createHeadRoute:()=>Qe,createLogger:()=>k,createMatcher:()=>le,createMiddleware:()=>L,createMiddlewareArray:()=>Yi,createOptionsRoute:()=>Ze,createPatchRoute:()=>Ge,createPlugin:()=>Be,createPluginArray:()=>Xi,createPostRoute:()=>je,createPutRoute:()=>Ve,createRouteFactory:()=>vt,createServer:()=>rt,createServiceMiddleware:()=>Ae,createStateMiddleware:()=>Ie,createTypedEventBus:()=>me,extractParams:()=>ne,file:()=>Bt,getCorrelationId:()=>h,inferContext:()=>Ht,isMiddleware:()=>Qi,isPlugin:()=>Zi,logger:()=>x,paramsToQuery:()=>Se,requestLoggerMiddleware:()=>yt});module.exports=Ln(ts);var jt={name:"blaizejs",version:"0.10.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 pt=require("crypto");var Wt=require("util");function lt(e){return e instanceof Error}function ut(e){return{message:e.message,name:e.name,stack:e.stack}}function ke(e){let t={};for(let[r,n]of Object.entries(e))if(lt(n))t[r]=ut(n);else if(Array.isArray(n))t[r]=n.map(o=>lt(o)?ut(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))lt(s)?o[i]=ut(s):o[i]=s;t[r]=o}else t[r]=n;return t}function Vt(){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 In={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m"},An="\x1B[0m",Bn="\x1B[1m",U=class{write(t,r,n){let o=ke(n),a=`${`${In[t]}${Bn}[${t.toUpperCase()}]${An}`} ${r}`,l=Object.keys(o).length>0?`
|
|
11
11
|
|
|
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
|
|
14
|
-
`)}function
|
|
12
|
+
${(0,Wt.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 Y=class{write(t,r,n){let o=ke(n),i={level:t,message:r,...o},s=JSON.stringify(i,Vt());console.log(s)}async flush(){return Promise.resolve()}};var Gt={debug:0,info:1,warn:2,error:3},ie=class e{config;inheritedMeta;minLevelPriority;constructor(t,r){this.config=t,this.inheritedMeta=Object.freeze(r?{...r}:{}),this.minLevelPriority=Gt[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 Gt[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 Dn(){return process.env.NODE_ENV!=="production"?new U:new Y}function k(e){let t=process.env.NODE_ENV!=="production",r={level:e?.level??(t?"debug":"info"),transport:e?.transport??Dn(),redactKeys:e?.redactKeys??[],includeTimestamp:e?.includeTimestamp??!0};return new ie(r)}var pe=class{write(t,r,n){}async flush(){return Promise.resolve()}};var x=k({level:process.env.NODE_ENV==="development"?"debug":"info",transport:new U,includeTimestamp:!0,redactKeys:[]}),Nn=x;function fe(e){let t=k(e);Nn=t,Object.assign(x,t)}C();function Hn(e){if(e==="*")return/^.*$/;let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,"[^:]*");return new RegExp(`^${t}$`)}function qn(e){if(e instanceof RegExp)return e;if(e.includes("*"))return Hn(e);let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`^${t}$`)}var se=class{serverId;subscriptions=new Map;adapter;adapterUnsubscribe;logger;constructor(t,r){this.serverId=t||(0,pt.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,pt.randomUUID)(),o=qn(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 Xt=require("zod");P();var V=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 ft=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 V){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 V(`Event validation failed for "${t}"`,{eventType:t,context:n,zodError:i instanceof Xt.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 V(`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 me(e,t,r){return new ft(e,t,r)}function er(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 ee(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 er(l,r,u,m,i)};return a(0)}}P();C();var ae=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 Ie(e){return L({name:"state-middleware",handler:e})}function Ae(e){return L({name:"service-middleware",handler:e})}var jn={origin:!0,methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],credentials:!1,optionsSuccessStatus:204},Vn={origin:!1,methods:["GET","HEAD"],credentials:!1,optionsSuccessStatus:204};function tr(e){return e===void 0&&(e=process.env.NODE_ENV!=="production"),e?{...jn}:{...Vn}}function Wn(e=6e4,t=1e3){let r=new Map,n={ttl:e,maxSize:t},o=(m,E,b)=>`${m}:${E}:${b||"anonymous"}`,i=()=>{if(r.size===0)return;let m=null,E=1/0;for(let[b,M]of r.entries())M.lastAccessed<E&&(E=M.lastAccessed,m=b);m&&r.delete(m)};return{get:(m,E,b)=>{let M=o(m,E,b),I=r.get(M);if(!I)return null;let d=Date.now();return d>I.expiresAt?(r.delete(M),null):(I.lastAccessed=d,I.allowed)},set:(m,E,b,M)=>{let I=o(m,b,M),d=Date.now();if(r.has(I)){r.set(I,{allowed:E,expiresAt:d+n.ttl,lastAccessed:d});return}r.size>=n.maxSize&&i(),r.set(I,{allowed:E,expiresAt:d+n.ttl,lastAccessed:d})},clear:()=>{r.clear()},cleanExpired:()=>{let m=Date.now(),E=0;for(let[b,M]of r.entries())m>M.expiresAt&&(r.delete(b),E++);return E},getStats:()=>({size:r.size,maxSize:n.maxSize,ttl:n.ttl})}}var rr=Wn();function Gn(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 Zn(e,t){return t==="*"?!0:e===t}async function Jn(e,t){return t.test(e)}async function Kn(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 nr(e,t,r){let n=t.map(i=>mt(e,i,r));return(await Promise.all(n)).some(i=>i===!0)}async function mt(e,t,r){return typeof t=="string"?Zn(e,t):t instanceof RegExp?Jn(e,t):typeof t=="function"?Kn(e,t,r):(console.warn("Unknown CORS origin type:",typeof t),!1)}async function ge(e,t,r){if(t===!0)return!0;if(t===!1)return!1;if(Gn(t)){let o=r?.state?.user?.id||r?.state?.userId,i=Qn(t),s=rr.get(e,i,o);if(s!==null)return s;let a;return Array.isArray(t)?a=await nr(e,t,r):a=await mt(e,t,r),rr.set(e,a,i,o),a}else return Array.isArray(t)?nr(e,t,r):mt(e,t,r)}A();function Yn(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 gt(e){return e.toUpperCase()}function Xn(e,t){return t?(typeof t=="string"?t.split(",").map(n=>n.trim()):t).map(n=>gt(n)).includes(gt(e)):["GET","HEAD","PUT","PATCH","POST","DELETE"].includes(gt(e))}function eo(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 to(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 or(e,t){let r=Yn(e);if(!r.origin||!r.requestedMethod)throw e.response.status(403),new T("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 ge(r.origin,t.origin||!1,e);if(!n)throw e.response.status(403),new T("CORS origin not allowed",{fields:[{field:"Origin",messages:[`Origin '${r.origin}' is not allowed`],rejectedValue:r.origin}],errorCount:1,section:"body"});if(!Xn(r.requestedMethod,t.methods))throw e.response.status(403),new T("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(!eo(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 T("CORS headers not allowed",{fields:[{field:"Access-Control-Request-Headers",messages:[`Headers not allowed: ${i?.join(", ")}`],rejectedValue:i}],errorCount:1,section:"body"})}to(e,t,r.origin,n);let o=t.optionsSuccessStatus||204;e.response.status(o),t.preflightContinue||e.response.text("")}function ht(e){return e.request.method==="OPTIONS"&&!!(e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"))}var R=require("zod"),ro=R.z.enum(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]),no=R.z.union([R.z.array(ro),R.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),ir=R.z.union([R.z.array(R.z.string()),R.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),oo=R.z.custom(e=>typeof e=="function"&&e.length<=2,{message:"Origin validator must be a function accepting (origin, ctx?) parameters"}),sr=R.z.union([R.z.string(),R.z.instanceof(RegExp),oo]),io=R.z.union([R.z.boolean(),sr,R.z.array(sr)]),ar=R.z.object({origin:io.optional(),methods:no,allowedHeaders:ir,exposedHeaders:ir,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(),cr=R.z.union([R.z.boolean(),ar]).optional();function lr(e){try{return typeof e=="boolean"?e===!1?{origin:!1}:{origin:!0}:ar.parse(e)}catch(t){if(t instanceof R.z.ZodError){let r=so(t);throw new Error(`Invalid CORS options:
|
|
13
|
+
${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function so(e){return e.errors.map(r=>` - ${r.path.join(".")||"root"}: ${r.message}`).join(`
|
|
14
|
+
`)}function ao(e){return Array.isArray(e)}function ur(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(ao(e.origin)&&e.origin.some(r=>r==="*"))throw new Error("CORS security violation: Cannot include wildcard origin (*) in array when credentials are enabled.")}}function dr(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 co(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 he(e){let t=process.env.NODE_ENV==="development",r=tr(t),n=dr(e,r),o=lr(n);return ur(o),L({name:"cors",handler:async({ctx:i,next:s})=>{let a=i.request.header("origin")||i.request.header("Origin");if(ht(i)){if(await or(i,o),!o.preflightContinue)return}else{if(!a){await s();return}let c=await ge(a,o.origin||!1,i);if(!c)throw i.response.status(403),new ae("CORS validation failed",{reason:"origin_not_allowed",origin:a,allowedOrigins:o.origin});co(i,o,a,c)}await s()},debug:process.env.DEBUG?.includes("cors")})}P();var lo=["accept","content-type","user-agent","x-correlation-id"],uo=["authorization","cookie","x-api-key","proxy-authorization"];function po(e,t){let r={},n=new Set(t.map(i=>i.toLowerCase())),o=new Set(uo.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 yt(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||lo,l=t.request.headers(),u=po(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 Be(e){if(!e.name||typeof e.name!="string")throw new Error("Plugin name must be a non-empty string");if(!e.version||typeof e.version!="string")throw new Error("Plugin version must be a non-empty string");if(typeof e.setup!="function")throw new Error("Plugin setup must be a function");return function(r){let n={...e.defaultConfig||{},...r||{}},o=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 vr=require("url");var De={};function pr(e){De={...De,...e}}function fr(){if(!De.routesDir)throw new Error("Routes directory not configured. Make sure server is properly initialized.");return De.routesDir}var mr=_(require("path"),1);function Ne(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=mr.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 yr=require("events");var F=require("zod"),fo=F.z.enum(["drop-oldest","drop-newest","close"]),mo=F.z.object({low:F.z.number().int().positive().describe("Resume threshold in messages"),high:F.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"]}),go=F.z.object({maxMessages:F.z.number().int().positive().max(1e5).describe("Maximum number of messages in buffer"),maxBytes:F.z.number().int().positive().max(100*1024*1024).optional().describe("Maximum buffer size in bytes"),messageTimeout:F.z.number().int().nonnegative().max(3e5).optional().describe("Message TTL in milliseconds")}),gr=F.z.object({enabled:F.z.boolean().default(!0).describe("Enable backpressure management"),strategy:fo.default("drop-oldest").describe("Strategy when buffer reaches high watermark"),watermarks:mo.default({low:100,high:1e3}).describe("Buffer watermark thresholds"),limits:go.default({maxMessages:1e4}).describe("Buffer size constraints"),metrics:F.z.object({enabled:F.z.boolean().default(!1),interval:F.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 ho={maxConnections:1e4,maxConnectionsPerClient:100,inactiveTimeout:18e5,cleanupInterval:6e4};function yo(e){let t={...ho,...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 v=(n.get(p)||0)+y;v<=0?n.delete(p):n.set(p,v)},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 v=Date.now();r.set(p,{stream:y,connectedAt:v,lastActivity:v,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,E=()=>{let p=Date.now(),y=[];r.forEach((f,v)=>{let g=p-f.lastActivity>t.inactiveTimeout,D=!f.stream||f.stream.state==="closed"||!f.stream.isWritable;if((g||D)&&(y.push(v),f.stream&&typeof f.stream.close=="function"))try{f.stream.close()}catch{}}),y.forEach(f=>u(f))},b=p=>r.get(p)?.stream,M=p=>r.has(p),I=()=>Array.from(r.keys()),d=()=>{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=E,i.get=b,i.has=M,i.getIds=I,i.shutdown=d,i}var St=null;function $e(e){return St||(St=yo(e)),St}P();C();var ye=class extends w{constructor(t,r,n=void 0){super("SSE_BUFFER_OVERFLOW",t,503,n??h(),r)}};P();C();var Ue=class extends w{constructor(t,r=void 0,n=void 0){super("SSE_STREAM_CLOSED",t,410,n??h(),r)}};C();var So={heartbeatInterval:3e4,maxEventSize:1024*1024,autoClose:!0,maxBufferSize:1e3,bufferStrategy:"drop-oldest"};function hr(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
|
|
18
|
+
`}return a}function wo(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`${e}-${t}`}function vo(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 Eo(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 wt=class{id;_state="connecting";_buffer=[];_closeCallbacks=[];_errorCallbacks=[];_emitter=new yr.EventEmitter;_metrics;_options;_response;_request;_writable=!0;_cleanupExecuted=!1;_eventCounter=0;_lastEventId=null;_heartbeatTimer;_backpressureConfig;_disconnectHandlers=null;constructor(t,r={}){if(this.id=`sse-${wo()}`,this._options={...So,...r},this._response=t.response,this._request=t.request,r.backpressure){let o=gr.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=$e(),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
|
|
20
|
+
`)}_registerConnection(){try{let t=$e(),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=hr(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{$e().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 Ue("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=vo(t,r),s=this._options.maxEventSize;if(i>s)throw new ye("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 ye("Buffer overflow - stream closed",{currentSize:u,maxSize:c,strategy:"close",clientId:this.id})}let l=Eo(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=hr("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
|
|
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 Sr(e,t){return new wt(e,t)}P();C();var He=class extends w{constructor(t,r,n){super("SSE_NOT_ACCEPTABLE",t,406,n||h(),r)}};function To(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 bo(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 wr=()=>e=>{To(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 He("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=Sr(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?bo(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 xo(){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,vr.fileURLToPath)(n):n}finally{Error.prepareStackTrace=e}}function H(){let e=xo(),t=fr(),r=Ne(e,t);return console.log(`\u{1F50E} Parsed route path: ${r.routePath} from file: ${e}`),r.routePath}var qe=()=>e=>{re("GET",e);let t=H();return{GET:e,path:t}},je=()=>e=>{re("POST",e);let t=H();return{POST:e,path:t}},Ve=()=>e=>{re("PUT",e);let t=H();return{PUT:e,path:t}},We=()=>e=>{re("DELETE",e);let t=H();return{DELETE:e,path:t}},Ge=()=>e=>{re("PATCH",e);let t=H();return{PATCH:e,path:t}},Qe=()=>e=>{re("HEAD",e);let t=H();return{HEAD:e,path:t}},Ze=()=>e=>{re("OPTIONS",e);let t=H();return{OPTIONS:e,path:t}};function re(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&&Ro(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 Ro(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 vt(){return{get:qe(),post:je(),put:Ve(),delete:We(),patch:Ge(),head:Qe(),options:Ze(),sse:wr()}}function ne(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 ce(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 Se(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 Je(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=Se(o);return s+a}function le(){let e=[];return{add(t,r,n){let{pattern:o,paramNames:i}=ce(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=ne(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:ne(t,r.pattern,r.paramNames)}))}}}var vn=require("async_hooks"),En=require("crypto"),Tn=_(require("events"),1);var Rt=_(require("fs"),1),jr=_(require("http"),1),Vr=_(require("http2"),1);var q=_(require("fs"),1),Ke=_(require("path"),1),Er=_(require("selfsigned"),1);async function Tr(){let e=Ke.join(process.cwd(),".blaizejs","certs"),t=Ke.join(e,"dev.key"),r=Ke.join(e,"dev.cert");if(q.existsSync(t)&&q.existsSync(r))return{keyFile:t,certFile:r};q.existsSync(e)||q.mkdirSync(e,{recursive:!0});let i=Er.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 q.writeFileSync(t,Buffer.from(i.private,"utf-8")),q.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"}},
|
|
28
|
+
`),{keyFile:t,certFile:r}}var B=class extends Error{constructor(t="\u274C Response has already been sent"){super(t),this.name="ResponseSentError"}},we=class extends B{constructor(t="Cannot set header after response has been sent"){super(t)}},Ye=class extends B{constructor(t="Cannot set content type after response has been sent"){super(t)}},Xe=class extends B{constructor(t="Invalide URL"){super(t)}};var br=require("async_hooks"),Co=new br.AsyncLocalStorage;function xr(e,t){return Co.run(e,t)}ve();Ee();A();C();var Or=_(require("crypto"),1),_r=require("fs"),kr=require("os"),Lr=require("path"),bt=require("stream");var Po=/boundary=([^;]+)/i,Mo=/Content-Disposition:\s*form-data;\s*name="([^"]+)"(?:;[\s\r\n]*filename="([^"]*)")?/i,zo=/Content-Type:\s*([^\r\n]+)/i,Oo=/multipart\/form-data/i;function Rr(e){let t=e.match(Po);if(!t||!t[1])return null;let r=t[1].trim();return r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1)),r||null}function Cr(e){let t=e.match(Mo);return!t||!t[1]?null:{name:t[1],filename:t[2]!==void 0?t[2]:void 0}}function Pr(e){let t=e.match(zo);return t&&t[1]?.trim()?t[1].trim():"application/octet-stream"}function Mr(e){return Oo.test(e)}var _o={maxFileSize:10*1024*1024,maxFiles:10,maxFieldSize:1*1024*1024,allowedMimeTypes:[],allowedExtensions:[],strategy:"stream",tempDir:(0,kr.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 Lo(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 Io(e);case"headers":return Ao(e);case"content":return Bo(e);default:{let{InternalServerError:t}=await Promise.resolve().then(()=>(Te(),zr));throw new t("Invalid parser stage",{operation:e.stage})}}}function Io(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
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=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(`
|
|
31
|
+
`);if(t===-1)return e;let r=e.buffer.subarray(0,t).toString("utf8"),n=e.buffer.subarray(t+4),o=Cr(r);if(!o){let{ValidationError:a}=await Promise.resolve().then(()=>(A(),te));throw new a("Missing or invalid Content-Disposition header")}let i=Pr(r),s=o.filename!==void 0;if(s&&e.fileCount>=e.options.maxFiles){let{PayloadTooLargeError:a}=await Promise.resolve().then(()=>(ve(),Et));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(()=>(Ee(),Tt));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 Do(i,r)),n&&(i=await Uo(i),i={...i,stage:"boundary",hasProcessedAnyPart:!0}),i}async function Do(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(()=>(ve(),Et)),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?No(e,t,r):{...e,currentContentLength:r,currentBufferChunks:[...e.currentBufferChunks,t]}}async function No(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 Wo(e.currentWriteStream,t),{...e,currentContentLength:r};default:{let{ValidationError:n}=await Promise.resolve().then(()=>(A(),te));throw new n("Invalid parsing strategy")}}}async function $o(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,Lr.join)(e.options.tempDir,`upload-${Or.randomUUID()}`),r=(0,_r.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(),te));throw new t("Invalid file processing strategy")}}}async function Uo(e){return e.currentField?e.currentFilename!==void 0?Ho(e):qo(e):be(e)}async function Ho(e){if(!e.currentField||e.currentFilename===void 0)return be(e);let t,r,n;switch(e.options.strategy){case"memory":r=Buffer.concat(e.currentBufferChunks),t=bt.Readable.from(r);break;case"stream":e.streamController&&e.streamController.close(),t=e.currentStream;break;case"temp":e.currentWriteStream&&await Ir(e.currentWriteStream),n=e.currentTempPath,t=bt.Readable.from(Buffer.alloc(0));break;default:{let{ValidationError:s}=await Promise.resolve().then(()=>(A(),te));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=Fr(e.files,e.currentField,o);return{...be(e),files:i}}function qo(e){if(!e.currentField)return be(e);let t=Buffer.concat(e.currentBufferChunks).toString("utf8"),r=Fr(e.fields,e.currentField,t);return{...be(e),fields:r}}function be(e){return{...e,currentField:null,currentFilename:void 0,currentContentLength:0,currentBufferChunks:[],currentStream:null,streamController:null,currentTempPath:null,currentWriteStream:null}}function Fr(e,t,r){let n=new Map(e),o=n.get(t)||[];return n.set(t,[...o,r]),n}async function jo(e){if(!e.hasFoundValidBoundary){let{ValidationError:n}=await Promise.resolve().then(()=>(A(),te));throw new n("No valid multipart boundary found")}if(e.hasFoundValidBoundary&&!e.hasProcessedAnyPart){let{ValidationError:n}=await Promise.resolve().then(()=>(A(),te));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 Vo(e){await Promise.allSettled(e.cleanupTasks.map(t=>t())),e.streamController&&e.streamController.close(),e.currentWriteStream&&await Ir(e.currentWriteStream)}async function Wo(e,t){return new Promise((r,n)=>{e.write(t,o=>{o?n(o):r()})})}async function Ir(e){return new Promise(t=>{e.end(()=>t())})}async function Ar(e,t={}){let r=e.headers["content-type"]||"",n=Rr(r);if(!n){let{UnsupportedMediaTypeError:i}=await Promise.resolve().then(()=>(Ee(),Tt));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 $o(o));try{for await(let i of e)o=await Lo(o,i);return jo(o)}finally{await Vo(o)}}var xe="Content-Type";function Go(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 Xe(`Invalid URL: ${o}`)}}function Qo(e){return"stream"in e||"httpVersionMajor"in e&&e.httpVersionMajor===2}function Zo(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 Br(e,t,r){let{path:n,url:o,query:i}=Go(e),s=e.method||"GET",a=Qo(e),c=Zo(e),l={},u={...r.initialState||{}},m={...r.initialServices||{}},E={sent:!1},b={request:Jo(e,{path:n,url:o,query:i,params:l,method:s,isHttp2:a,protocol:c}),response:{},state:u,services:m};return b.response=Yo(t,E,b),r.parseBody&&await ci(e,b,r),b}function Jo(e,t){return{raw:e,...t,header:Dr(e),headers:Ko(e),body:void 0,files:void 0}}function Dr(e){return t=>{let r=e.headers[t.toLowerCase()];return Array.isArray(r)?r.join(", "):r||void 0}}function Ko(e){let t=Dr(e);return r=>r&&Array.isArray(r)&&r.length>0?r.reduce((n,o)=>(n[o]=t(o),n),{}):Object.entries(e.headers).reduce((n,[o,i])=>(n[o]=Array.isArray(i)?i.join(", "):i||void 0,n),{})}function Re(e,t){if(t.correlationId){let r=X(),n=String(t.correlationId);e.setHeader(r,n)}}function Yo(e,t,r){return{raw:e,get statusCode(){return e.statusCode||200},get sent(){return t.sent},status:Xo(e,t,r),header:ei(e,t,r),headers:ti(e,t,r),type:ri(e,t,r),json:ni(e,t,r.state),text:oi(e,t,r.state),html:ii(e,t,r.state),redirect:si(e,t,r.state),stream:ai(e,t,r.state)}}function Xo(e,t,r){return function(o){if(t.sent)throw new B;return e.statusCode=o,r.response}}function ei(e,t,r){return function(o,i){if(t.sent)throw new we;return e.setHeader(o,i),r.response}}function ti(e,t,r){return function(o){if(t.sent)throw new we;for(let[i,s]of Object.entries(o))e.setHeader(i,s);return r.response}}function ri(e,t,r){return function(o){if(t.sent)throw new Ye;return e.setHeader(xe,o),r.response}}function ni(e,t,r){return function(o,i){if(t.sent)throw new B;i!==void 0&&(e.statusCode=i),Re(e,r),e.setHeader(xe,"application/json"),e.end(JSON.stringify(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),Re(e,r),e.setHeader(xe,"text/plain"),e.end(o),t.sent=!0}}function ii(e,t,r){return function(o,i){if(t.sent)throw new B;i!==void 0&&(e.statusCode=i),Re(e,r),e.setHeader(xe,"text/html"),e.end(o),t.sent=!0}}function si(e,t,r){return function(o,i=302){if(t.sent)throw new B;Re(e,r),e.statusCode=i,e.setHeader("Location",o),e.end(),t.sent=!0}}function ai(e,t,r){return function(o,i={}){if(t.sent)throw new B;if(i.status!==void 0&&(e.statusCode=i.status),Re(e,r),i.contentType&&e.setHeader(xe,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 ci(e,t,r){if(li(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 N("JSON body exceeds size limit",{currentSize:o,maxSize:i.json,contentType:"application/json"},h());await ui(e,t)}else if(n.includes("application/x-www-form-urlencoded")){if(o>i.form)throw new N("Form body exceeds size limit",{currentSize:o,maxSize:i.form,contentType:"application/x-www-form-urlencoded"},h());await di(e,t)}else if(n.includes("text/")){if(o>i.text)throw new N("Text body exceeds size limit",{currentSize:o,maxSize:i.text,contentType:n},h());await fi(e,t)}else if(Mr(n))await mi(e,t,i.multipart);else{if(o>i.raw)throw new N("Request body exceeds size limit",{currentSize:o,maxSize:i.raw,contentType:n||"unknown"},h());return}}function li(e){return["GET","HEAD","OPTIONS"].includes(e||"GET")}async function ui(e,t){let r=await xt(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 T("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 di(e,t){let r=await xt(e);if(r)try{t.request.body=pi(r)}catch(n){throw new T("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 pi(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 fi(e,t){let r=await xt(e);r&&(t.request.body=r)}async function mi(e,t,r){try{let n=r,o=await Ar(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 N||n instanceof W?n:new W("Failed to parse multipart/form-data",{receivedContentType:e.headers["content-type"],expectedFormat:"multipart/form-data; boundary=..."},h())}}async function xt(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();C();var G=class extends w{constructor(t,r=void 0,n=void 0){super("NOT_FOUND",t,404,n??h(),r)}};P();Te();C();function gi(e){return e instanceof w}function Nr(e){if(gi(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 j("Internal Server Error",{originalMessage:r},t);return{type:n.type,title:n.title,status:n.status,correlationId:n.correlationId,timestamp:n.timestamp.toISOString(),details:n.details}}function $r(e){let t=X(),r={[t]:e(t)};return Fe(r)}function Ur(e,t){let r=X();e(r,t)}function Hr(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=$r(r.request.header),a=Nr(i);a.correlationId=s,Ur(r.response.header,s),r.response.status(a.status).json(a)}}})}C();function qr(e){return async(t,r)=>{let n=Fe(t.headers);try{await Kt(n,async()=>{let o=await Br(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=[Hr()];"corsOptions"in e&&e.corsOptions!==!1&&a.push(he(e.corsOptions)),a.push(...e.middleware);let c=ee(a),l=async()=>{if(!o.response.sent&&(await e.router.handleRequest(o,i,e.eventBus),!r.headersSent&&!o.response.sent))throw new G(`Route not found: ${o.request.method} ${o.request.path}`)};await xr(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=X();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 hi(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 Tr();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 yi(e,t){if(!e)return jr.createServer();let r={allowHTTP1:!0};try{t.keyFile&&(r.key=Rt.readFileSync(t.keyFile)),t.certFile&&(r.cert=Rt.readFileSync(t.certFile))}catch(n){throw new Error(`Failed to read certificate files: ${n instanceof Error?n.message:String(n)}`)}return Vr.createSecureServer(r)}function Si(e,t,r,n){return new Promise((o,i)=>{e.listen(t,r,()=>{let a=`${n?"https":"http"}://${r}:${t}`;x.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 io(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=>{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(
|
|
45
|
-
`)}function l(d,
|
|
46
|
-
\u{1F4E5} Handling request: ${f} ${
|
|
43
|
+
`),o()}),e.on("error",s=>{x.error("Server error:",{error:s,host:r,port:t}),i(s)})})}async function Wr(e,t){if(!e.server)try{let r=t.port,n=t.host,o=t.http2||{enabled:!0},i=!!o.enabled,s=await hi(o);t.http2&&s.keyFile&&s.certFile&&(t.http2.keyFile=s.keyFile,t.http2.certFile=s.certFile);let a=yi(i,s);e.server=a,e.port=r,e.host=n;let c=qr(e);a.on("request",c),await Si(a,r,n,i)}catch(r){throw x.error("Failed to start server:",{error:r}),r}}var et=!1;async function Gr(e,t={}){let r=e.server,n=e.events;if(et){console.log("\u26A0\uFE0F Shutdown already in progress, ignoring duplicate shutdown request");return}if(!r)return;et=!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"),et=!1}catch(i){throw et=!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 Qr(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:cr,bodyLimits:xi,logging:Ci,serverId:S.z.string().min(1).optional()});function Zr(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 Jr(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):x.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 registerPlugins(o){x.debug("[PluginLifecycle] Registering plugins",{count:o.plugins.length});for(let i of o.plugins)try{x.debug("[PluginLifecycle] Registering plugin",{plugin:i.name}),await i.register(o)}catch(s){throw n(i,"register",s),s}x.info("[PluginLifecycle] Plugins registered",{count:o.plugins.length,plugins:o.plugins.map(i=>i.name)})},async initializePlugins(o){x.debug("[PluginLifecycle] Initializing plugins",{count:o.plugins.length});for(let i of o.plugins)if(i.initialize)try{x.debug("[PluginLifecycle] Initializing plugin",{plugin:i.name}),await i.initialize(o)}catch(s){n(i,"initialize",s)}x.info("[PluginLifecycle] Plugins initialized",{count:o.plugins.length,plugins:o.plugins.map(i=>i.name)})},async terminatePlugins(o){x.debug("[PluginLifecycle] Terminating plugins",{count:o.plugins.length});let i=[...o.plugins].reverse();for(let s of i)if(s.terminate)try{x.debug("[PluginLifecycle] Terminating plugin",{plugin:s.name}),await s.terminate(o)}catch(a){n(s,"terminate",a)}x.info("[PluginLifecycle] Plugins terminated",{count:i.length})},async onServerStart(o,i){x.debug("[PluginLifecycle] Notifying plugins of server start");for(let s of o.plugins)if(s.onServerStart)try{x.debug("[PluginLifecycle] Notifying plugin of server start",{plugin:s.name}),await s.onServerStart(i)}catch(a){n(s,"onServerStart",a)}},async onServerStop(o,i){x.debug("[PluginLifecycle] Notifying plugins of server stop...");let s=[...o.plugins].reverse();for(let a of s)if(a.onServerStop)try{x.debug(`[PluginLifecycle] Notifying plugin of server stop: ${a.name}`),await a.onServerStop(i)}catch(c){n(a,"onServerStop",c)}}}}var $=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])?$/,Oi=/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9-.]+)?(?:\+[a-zA-Z0-9-.]+)?$/;function Ct(e,t={}){let{requireVersion:r=!0,validateNameFormat:n=!0,checkReservedNames:o=!0}=t;if(!e||typeof e!="object")throw new $("","Plugin must be an object");let i=e;if(!i.name||typeof i.name!="string")throw new $("","Plugin must have a name (string)");if(n&&!zi.test(i.name))throw new $(i.name,"Plugin name must be lowercase letters, numbers, and hyphens only");if(o&&Mi.has(i.name.toLowerCase()))throw new $(i.name,`Plugin name "${i.name}" is reserved`);if(r){if(!i.version||typeof i.version!="string")throw new $(i.name,"Plugin must have a version (string)");if(!Oi.test(i.version))throw new $(i.name,'Plugin version must follow semantic versioning (e.g., "1.0.0")')}if(!i.register||typeof i.register!="function")throw new $(i.name,"Plugin must have a register method (function)");let s=["initialize","terminate","onServerStart","onServerStop"];for(let a of s)if(i[a]&&typeof i[a]!="function")throw new $(i.name,`Plugin ${a} must be a function if provided`)}var Yr=_(require("crypto"),1),Xr=_(require("fs/promises"),1);async function _i(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 Kr(e,t){try{let r=Ne(e,t),n=await _i(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(ki(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 ki(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 Ce=new Map;async function Pe(e,t,r=!0){let o=(await Xr.stat(e)).mtime.getTime(),i=Ce.get(e);if(r&&i&&i.timestamp===o)return i.routes;let s=await Kr(e,t);if(r){let a=tn(s);Ce.set(e,{routes:s,timestamp:o,hash:a})}return s}function en(e,t){let r=Ce.get(e);if(!r)return!0;let n=tn(t);return r.hash!==n}function Pt(e){e?Ce.delete(e):Ce.clear()}function tn(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 Yr.createHash("md5").update(r).digest("hex")}var nn=_(require("os"),1);var tt=_(require("fs/promises"),1),ue=_(require("path"),1);async function rn(e,t={}){let r=ue.isAbsolute(e)?e:ue.resolve(process.cwd(),e);console.log("Creating router with routes directory:",r);try{if(!(await tt.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 tt.readdir(s,{withFileTypes:!0});for(let c of a){let l=ue.join(s,c.name);c.isDirectory()&&o.includes(c.name)||(c.isDirectory()?await i(l):Li(c.name)&&n.push(l))}}return await i(r),n}function Li(e){return!e.startsWith("_")&&(e.endsWith(".ts")||e.endsWith(".js"))}async function Fi(e,t,r=Math.max(1,Math.floor(nn.cpus().length/2))){let n=Ii(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 on(e){let t=await rn(e);return(await Fi(t,n=>Pe(n,e))).flat()}function Ii(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 sn(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 Mt(e,t){return console.log(`Tracking performance for: ${t}`),async(...r)=>{let n=Date.now();try{let o=await e(...r);return sn(t,n),o}catch(o){throw sn(t,n),o}}}var zt=_(require("path"),1),an=require("chokidar");function Ot(e,t={}){let r=t.debounceMs||16,n=new Map;function o(u,m){return(...E)=>{let b=n.get(m);b&&clearTimeout(b);let M=setTimeout(()=>{u(...E),n.delete(m)},r);n.set(m,M)}}let i=new Map;async function s(u){try{let m=i.get(u),E=await Pe(u,e,!1);if(!E||E.length===0||m&&!en(u,E))return;await Pe(u,e,!0);let b=zt.normalize(u);m?(i.set(u,E),t.onRouteChanged&&t.onRouteChanged(b,E)):(i.set(u,E),t.onRouteAdded&&t.onRouteAdded(b,E))}catch(m){console.log(`\u26A0\uFE0F Error processing file ${u}:`,m),c(m)}}function a(u){let m=zt.normalize(u),E=i.get(m);E&&E.length>0&&t.onRouteRemoved&&t.onRouteRemoved(m,E),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,an.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 gn=require("zod");var cn=require("zod");function _t(e,t){return t instanceof cn.z.ZodObject?t.strict().parse(e):t.parse(e)}var ln=require("zod");function un(e,t){return t instanceof ln.z.ZodObject?t.strict().parse(e):t.parse(e)}var dn=require("zod");function kt(e,t){return t instanceof dn.z.ZodObject?t.strict().parse(e):t.parse(e)}var pn=require("zod");function Lt(e,t){return t instanceof pn.z.ZodObject?t.strict().parse(e):t.parse(e)}var fn=require("zod");function Ft(e,t){return t instanceof fn.z.ZodObject?t.strict().parse(e):t.parse(e)}Te();A();var Z=require("zod");A();var It={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 At(e){if(typeof e=="number"){if(isNaN(e))throw new T("Invalid size format: NaN is not a valid size");if(!isFinite(e))throw new T("Size cannot be Infinity");if(e<0)throw new T("Size cannot be negative");return Math.round(e)}let t=e.trim();if(!t)throw new T("Invalid size format: empty string");let r=/^(-?[\d.]+)\s*([A-Za-z]+)?$/,n=t.match(r);if(!n)throw new T(`Invalid size format: "${e}"`);let[,o,i]=n,s=parseFloat(o);if(isNaN(s))throw new T(`Invalid size format: "${e}" contains invalid number`);if(!isFinite(s))throw new T("Size cannot be Infinity");if(s<0)throw new T("Size cannot be negative");if(!i)return Math.round(s);let a=i.replace(/^([kmgt])(i)?b$/i,(u,m,E)=>`${m.toUpperCase()}${E?"i":""}B`);if(!(a in It))throw new T(`Invalid size unit: ${i}. Supported units: ${Object.keys(It).join(", ")}`);let c=It[a],l=s*c;return Math.round(l)}function Me(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 Ai(e,t){if(e===t)return!0;if(t.endsWith("/*")){let r=t.slice(0,-2);return e.split("/")[0]===r}return!1}function mn(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 Bt(e){let t=e?.maxSize!==void 0?typeof e.maxSize=="number"?e.maxSize:At(e.maxSize):void 0,r=e?.minSize!==void 0?typeof e.minSize=="number"?e.minSize:At(e.minSize):void 0,o=Z.z.custom(i=>mn(i),{message:"Expected an uploaded file object"}).superRefine((i,s)=>{if(!mn(i)){s.addIssue({code:Z.z.ZodIssueCode.custom,message:"Expected an uploaded file object"});return}let a=i;e?.accept&&e.accept.length>0&&(e.accept.some(l=>Ai(a.mimetype,l))||s.addIssue({code:Z.z.ZodIssueCode.custom,message:`Invalid file type "${a.mimetype}". Accepted types: ${e.accept.join(", ")}`})),r!==void 0&&a.size<r&&s.addIssue({code:Z.z.ZodIssueCode.custom,message:`File size ${Me(a.size)} is below minimum ${Me(r)}`}),t!==void 0&&a.size>t&&s.addIssue({code:Z.z.ZodIssueCode.custom,message:`File size ${Me(a.size)} exceeds maximum ${Me(t)}`}),a.size<0&&s.addIssue({code:Z.z.ZodIssueCode.custom,message:"File size cannot be negative"}),(!a.mimetype||a.mimetype.trim()==="")&&s.addIssue({code:Z.z.ZodIssueCode.custom,message:"File must have a MIME type"})});return o._isFileSchema=!0,o}function Dt(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=kt(r.request.params,e.params)}catch(o){let i=ze(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new T("Request validation failed",{fields:i,errorCount:s,section:"params"})}if(e.query&&r.request.query)try{r.request.query=Lt(r.request.query,e.query)}catch(o){let i=ze(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new T("Request validation failed",{fields:i,errorCount:s,section:"query"})}if(e.body)try{r.request.body=_t(r.request.body,e.body)}catch(o){let i=ze(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new T("Request validation failed",{fields:i,errorCount:s,section:"body"})}if(e.files)try{r.request.files=un(r.request.files,e.files)}catch(o){let i=ze(o),s=i.reduce((a,c)=>a+c.messages.length,0);throw new T("Request validation failed",{fields:i,errorCount:s,section:"files"})}await n()}})}function Bi(e){return e!==null&&typeof e=="object"&&"type"in e&&"status"in e&&"correlationId"in e&&"timestamp"in e}function Nt(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||Bi(i))return n.call(t.response,i,s);try{let a=Ft(i,e);return n.call(t.response,a,s)}catch(a){throw o=!1,new j("Response validation failed",{validationError:ze(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 ze(e){if(e instanceof gn.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 $t(e,t,r,n,o){let i=[...t.middleware||[]];t.schema&&((t.schema.params||t.schema.query||t.schema.body)&&i.unshift(Dt(t.schema)),t.schema.response&&i.push(Nt(t.schema.response))),await ee([...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 hn(){return{routesByPath:new Map,routesByFile:new Map,pathToFile:new Map}}function J(e,t,r){console.log(`Updating routes from file: ${t}`);let n=e.routesByFile.get(t)||new Set,o=new Set(r.map(l=>l.path)),i=r.filter(l=>!n.has(l.path)),s=Array.from(n).filter(l=>!o.has(l)),c=r.filter(l=>n.has(l.path)).filter(l=>{let 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 yn(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 Ut(e,t){Object.entries(e).forEach(([r,n])=>{r==="path"||!n||t.add(e.path,r,n)})}function Oe(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 Sn(e,t){Oe(e.path,t),Ut(e,t)}var $i={routesDir:"./routes",basePath:"/",watchMode:process.env.NODE_ENV==="development"};function wn(e){let t={...$i,...e};e.basePath&&!e.basePath.startsWith("/")&&console.warn("Base path does nothing");let r=hn(),n=le(),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(p=>{console.log(` \u2796 Removing: ${p}`),Oe(p,n)}),d.added.forEach(p=>{let y=Object.keys(p).filter(f=>f!=="path");console.log(` \u2795 Adding: ${p.path} [${y.join(", ")}]`),Ut(p,n)}),d.changed.forEach(p=>{let y=Object.keys(p).filter(f=>f!=="path");console.log(` \u{1F504} Updating: ${p.path} [${y.join(", ")}]`),Sn(p,n)}),console.log(`\u2705 Matcher changes applied
|
|
45
|
+
`)}function l(d,p){try{let y=J(r,p,d);return c(y),y}catch(y){throw console.error(`\u26A0\uFE0F Route conflicts from ${p}:`,y),y}}async function u(d,p,y){try{let f=await on(d),v=f.map(D=>y?{...D,path:`${y}${D.path}`}:D),g=l(v,p);console.log(`Loaded ${f.length} routes from ${p}${y?` with prefix ${y}`:""} (${g.added.length} added, ${g.changed.length} changed, ${g.removed.length} removed)`)}catch(f){throw console.error(`\u26A0\uFE0F Failed to load routes from ${p}:`,f),f}}async function m(){return o||i||(i=(async()=>{try{await Promise.all(Array.from(a).map(d=>u(d,d))),t.watchMode&&E(),o=!0}catch(d){throw console.error("\u26A0\uFE0F Failed to initialize router:",d),d}})()),i}function E(){s||(s=new Map);for(let d of a)if(!s.has(d)){let p=Ot(d,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(y,f)=>{try{let v=J(r,y,f);c(v)}catch(v){console.error(`Error adding routes from ${d}:`,v)}},onRouteChanged:Mt(async(y,f)=>{try{console.log(`Processing changes for ${y}`);let v=J(r,y,f);console.log(`Changes detected: ${v.added.length} added, ${v.changed.length} changed, ${v.removed.length} removed`),c(v),console.log(`Route changes applied: ${v.added.length} added, ${v.changed.length} changed, ${v.removed.length} removed`)}catch(v){console.error(`\u26A0\uFE0F Error updating routes from ${d}:`,v)}},d),onRouteRemoved:(y,f)=>{console.log(`File removed: ${y} with ${f.length} routes`);try{f.forEach(v=>{Oe(v.path,n)}),Pt(y)}catch(v){console.error(`\u26A0\uFE0F Error removing routes from ${y}:`,v)}},onError:y=>{console.error(`\u26A0\uFE0F Route watcher error for ${d}:`,y)}});s.set(d,p)}}function b(d,p){s||(s=new Map);let y=Ot(d,{debounceMs:16,ignore:["node_modules",".git"],onRouteAdded:(f,v)=>{try{let g=v.map(K=>p?{...K,path:`${p}${K.path}`}:K),D=J(r,f,g);c(D)}catch(g){console.error(`\u26A0\uFE0F Error adding routes from ${d}:`,g)}},onRouteChanged:Mt(async(f,v)=>{try{let g=v.map(K=>p?{...K,path:`${p}${K.path}`}:K),D=J(r,f,g);c(D)}catch(g){console.error(`\u26A0\uFE0F Error updating routes from ${d}:`,g)}},d),onRouteRemoved:(f,v)=>{try{v.forEach(g=>{let D=p?`${p}${g.path}`:g.path;Oe(D,n)}),Pt(f)}catch(g){console.error(`Error removing routes from ${f}:`,g)}},onError:f=>{console.error(`\u26A0\uFE0F Route watcher error for ${d}:`,f)}});return s.set(d,y),y}let M=m();return M.catch(()=>{}),{ready:M,async handleRequest(d,p,y){await i;let{method:f,path:v}=d.request;console.log(`
|
|
46
|
+
\u{1F4E5} Handling request: ${f} ${v}`);let g=n.match(v,f);if(!g)throw console.log(`\u274C No match found for: ${f} ${v}`),new G("Not found");if(console.log(`\u2705 Route matched: ${f} ${v}`),console.log(` Params: ${JSON.stringify(g.params)}`),g.methodNotAllowed){d.response.status(405).json({error:"\u274C Method Not Allowed",allowed:g.allowedMethods}),g.allowedMethods&&g.allowedMethods.length>0&&d.response.header("Allow",g.allowedMethods.join(", "));return}d.request.params=g.params,await $t(d,g.route,g.params,p,y)},getRoutes(){return yn(r)},addRoute(d){let p=J(r,"programmatic",[d]);c(p)},addRoutes(d){let p=J(r,"programmatic",d);return c(p),p},async addRouteDirectory(d,p={}){if(a.has(d)){console.warn(`Route directory ${d} already registered`);return}a.add(d),o&&(await u(d,d,p.prefix),t.watchMode&&b(d,p.prefix))},getRouteConflicts(){return[]},async close(){if(s){for(let d of s.values())await d.close();s.clear()}}}}C();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 Ui(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=Zr(t);return pr({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&&Jt(e.correlation.headerName,e.correlation.generator)}function qi(e,t){return async()=>(Hi(t),await e.pluginManager.registerPlugins(e),await e.pluginManager.initializePlugins(e),await Wr(e,t),await e.pluginManager.onServerStart(e,e.server),ji(e),e)}function ji(e){let t=Qr(()=>e.close());e._signalHandlers=t,e.events.emit("started")}function Vi(e){return async t=>{if(!e.server)return;let r={...t};e._signalHandlers&&(e._signalHandlers.unregister(),delete e._signalHandlers),await Gr(e,r)}}function Wi(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)Ct(r),e.plugins.push(r);else Ct(t),e.plugins.push(t);return e}}function rt(e={}){let t=Ui(e),{port:r,host:n,middleware:o,plugins:i,cors:s,bodyLimits:a,serverId:c}=t,l=c||(0,En.randomUUID)(),u=k(t.logging||{});fe(t.logging||{});let m=Array.isArray(o)?[...o]:[],E=Array.isArray(i)?[...i]:[],b=new vn.AsyncLocalStorage,M=wn({routesDir:t.routesDir,watchMode:process.env.NODE_ENV==="development"}),I=Jr({continueOnError:!0}),d=new Tn.default,p=new se(l,u),y=me(p,{schemas:t.eventSchemas},u),f={server:null,port:r,host:n,context:b,events:d,plugins:[...E],middleware:[...m],corsOptions:s,bodyLimits:a,_signalHandlers:{unregister:()=>{}},_logger:u,use:()=>f,register:async()=>f,listen:async()=>f,close:async()=>{},router:M,pluginManager:I,eventBus:y,serverId:l};return f.listen=qi(f,t),f.close=Vi(f),f.use=Wi(f),f.register=Gi(f),f}C();function Ht(e){return{}}function Qi(e){return typeof e=="object"&&e!==null&&"name"in e&&"execute"in e&&typeof e.name=="string"&&typeof e.execute=="function"}function Zi(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 Ji(e){return e}function Ki(e){return e}function Yi(...e){return e}function Xi(...e){return e}P();A();P();C();var nt=class extends w{constructor(t,r=void 0,n=void 0){super("UNAUTHORIZED",t,401,n??h(),r)}};P();C();var ot=class extends w{constructor(t,r=void 0,n=void 0){super("CONFLICT",t,409,n??h(),r)}};P();C();var it=class extends w{constructor(t,r=void 0,n=void 0){super("RATE_LIMITED",t,429,n??h(),r)}};Te();ve();P();C();var st=class extends w{constructor(t,r,n){super("UPLOAD_TIMEOUT",t,408,n??h(),r)}};P();C();var at=class extends w{constructor(t,r,n){super("UNPROCESSABLE_ENTITY",t,422,n??h(),r)}};Ee();P();C();var ct=class extends w{constructor(t,r=void 0,n=void 0){super("SERVICE_UNAVAILABLE",t,503,n??h(),r)}};var bn=jt.version,xn={createServer:rt,inferContext:Ht},Rn={createDeleteRoute:We,createGetRoute:qe,createHeadRoute:Qe,createOptionsRoute:Ze,createPatchRoute:Ge,createPostRoute:je,createPutRoute:Ve,createRouteFactory:vt,createMatcher:le,extractParams:ne,compilePathPattern:ce,paramsToQuery:Se,buildUrl:Je},Cn={createMiddleware:L,createServiceMiddleware:Ae,createStateMiddleware:Ie,compose:ee,cors:he,requestLoggerMiddleware:yt},Pn={createPlugin:Be},es={createTypedEventBus:me,createServer:rt,createMiddleware:L,createServiceMiddleware:Ae,createStateMiddleware:Ie,createPlugin:Be,getCorrelationId:h,configureGlobalLogger:fe,createLogger:k,logger:x,file:Bt,Server:xn,Router:Rn,Middleware:Cn,Plugins:Pn,VERSION:bn};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
|