balda 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import {glob}from'glob';import Et from'pino';import Be from'path';import {Ajv,ValidationError}from'ajv';import Ke from'fs';import {execSync}from'child_process';import*as Bt from'readline';import {AsyncLocalStorage}from'async_hooks';import {gzipSync}from'zlib';import {z as z$1}from'zod';import {createServer}from'http';import {createServer as createServer$1,createSecureServer}from'http2';import {createServer as createServer$2}from'https';import {Readable}from'stream';var jt=Object.defineProperty;var $r=(s,e)=>()=>(s&&(e=s(s=0)),e);var Hr=(s,e)=>{for(var t in e)jt(s,t,{get:e[t],enumerable:true});};var w=(s,e,t,r)=>{for(var o=void 0,n=s.length-1,i;n>=0;n--)(i=s[n])&&(o=(i(e,t,o))||o);return o&&jt(e,t,o),o};var Mt={};Hr(Mt,{runtime:()=>S});var ct,S,H=$r(()=>{ct=class{type;constructor(){this.type=this.getRunTime();}getRunTime(){if(typeof Bun<"u")return "bun";if(typeof Deno<"u")return "deno";if(typeof process<"u")return "node";throw new Error("No environment detected")}},S=new ct;});var x=class extends Error{constructor(e){super(e);}};var Nr=()=>Et({level:"info",formatters:{level:e=>({level:e})}}),y=Nr(),Ls=s=>{y=Et(s);};H();var dt=class{getCwd(){switch(S.type){case "node":case "bun":return process.cwd();case "deno":return Deno.cwd();default:throw new Error("Unsupported runtime")}}},M=new dt;var be=class{static scheduledJobs=[];static register(e,...t){t[2]={name:e,...t[2]},this.scheduledJobs.push({name:e,args:t});}static async run(){let e=(await import('node-cron').catch(()=>{throw new x("node-cron not installed as a dependency, it is required in order to run cron jobs with the @cron decorator")})).default;if(y.info("Scheduling cron jobs"),!this.scheduledJobs.length){y.info("No cron jobs to schedule");return}for(let{name:t,args:r}of this.scheduledJobs)y.info(`Scheduling cron job: ${t}`),e.schedule(...r).on("execution:failed",n=>this.globalErrorHandler(n));y.info("Cron jobs scheduled");}static globalErrorHandler(e){y.error(e.execution?.error);}static async massiveImportCronJobs(e){let t=[];for(let r of e){let o=await glob(r,{absolute:true,cwd:M.getCwd()});t.push(...o);}await Promise.all(t.map(async r=>{await import(r).catch(o=>{y.error(`Error importing cron job: ${r}`),y.error(o);});}));}},Gs=s=>{be.globalErrorHandler=s.bind(be);};var Vs=(s,e)=>function(t,r,o){let n=o.value,i=async(...a)=>{let p=new t.constructor;return await n.apply(p,a)};return be.register(`${t.constructor.name}.${r}`,s,i,e),o};H();var lt=class{getCliArgs(){switch(S.type){case "bun":return this.getBunArgs();case "node":return this.getNodeArgs();case "deno":return Deno.args;default:throw new Error("Unsupported runtime")}}getCliCaller(){switch(S.type){case "bun":return "bun";case "node":return process.argv[0];case "deno":return "deno";default:throw new Error("Unsupported runtime")}}getBunArgs(){let e=Bun.argv,t=this.findScriptIndex(e);return e.slice(t+1)}getNodeArgs(){let e=process.argv,t=this.findScriptIndex(e);return e.slice(t+1)}findScriptIndex(e){if(e.length>=3&&e[1].includes(".bin/"))return 1;for(let t=0;t<e.length;t++){let r=e[t],o=r.split("/").pop()||r;if(!r.startsWith("-")){if(o==="yarn"&&t+1<e.length&&e[t+1]==="run"||o==="npx"&&t+1<e.length)return t+1;if(o==="yarn"||o==="pnpm")return t;if(o==="npm"&&t+1<e.length&&e[t+1]==="run"||o==="bun"&&t+1<e.length&&e[t+1]==="run")return t+1;if(/\.(js|ts|mjs|cjs)$/.test(r))return t;if(/^(tsx|ts-node|node|bun)$/.test(o)){for(let n=t+1;n<e.length;n++)if(!e[n].startsWith("-")&&/\.(js|ts|mjs|cjs)$/.test(e[n]))return n;return t}}}for(let t=e.length-1;t>=0;t--)if(!e[t].startsWith("-"))return t;return 1}},ut=new lt;var Le=s=>s.toLowerCase().replace(/[-_.]/g,"_").replace(/([A-Z])/g,"_$1").replace(/^_+/,"").replace(/_+$/,"").toLowerCase(),De=s=>s.split(/[-_.]/g).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(""),At=s=>s.split(/[-_.]/g).map(e=>e.toLowerCase()).join("-");var Se=(s,e)=>{if(!s||typeof s!="string")return e;let t=s.toLowerCase().trim(),r=t.match(/^(\d+(?:\.\d+)?)kb$/),o=t.match(/^(\d+(?:\.\d+)?)mb$/);if(r){let n=Number.parseFloat(r[1]);return Number.isNaN(n)||n<0?e:Math.floor(n*1024)}if(o){let n=Number.parseFloat(o[1]);return Number.isNaN(n)||n<0?e:Math.floor(n*1024*1024)}return e};var Lr=s=>{if(!s||s==="-"||s==="--")return null;let e=s.indexOf("=");if(e>0){let t=s.substring(0,e),r=s.substring(e+1);return {name:t,value:qt(r)}}return {name:s,value:true}},qt=s=>{if(s.toLowerCase()==="true")return true;if(s.toLowerCase()==="false")return false;let e=Number(s);return !Number.isNaN(e)&&Number.isFinite(e)?e:s},ie=()=>{let s=ut.getCliArgs(),e=[],t={};if(!s||!s.length)return {args:e,flags:t};for(let r=0;r<s.length;r++){let o=s[r];if(!(!o||typeof o!="string")){if(o.startsWith("-")){let n=Lr(o);if(n){if(n.value===true&&r+1<s.length){let i=s[r+1];i&&typeof i=="string"&&!i.startsWith("-")&&(n.value=qt(i),r++);}if(n.name in t){let i=t[n.name];Array.isArray(i)?i.push(n.value):t[n.name]=[i,n.value];}else t[n.name]=n.value;}continue}e.push(o);}}return {args:e,flags:t}};var Fe=()=>ut.getCliArgs()[0]||null;var v=class{static metadata=new WeakMap;static set(e,t,r){this.metadata.has(e)||this.metadata.set(e,new Map),this.metadata.get(e).set(t,r);}static get(e,t){return this.metadata.get(e)?.get(t)}static getAll(e){return this.metadata.get(e)||new Map}static delete(e,t){this.metadata.get(e)?.delete(t.toString());}static clear(e){this.metadata.delete(e);}};var ae="VALIDATION_ERROR",ao="ARG",kt=ie().args.slice(1),A=s=>(e,t)=>{let r=Fe();if(!r||r!==e.commandName)return;let o=t;v.set(e,t,{type:"arg",name:o,description:s.description});let n=kt.length?kt.shift():s.defaultValue;if(s.required&&!n){let i=v.get(e,ae);v.set(e,ae,[...i||[],{type:"arg",name:o,message:"Required argument not provided"}]);return}s.parse&&n&&(n=s.parse(n)),Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true});};var K=s=>(e,t)=>{let r=Fe();if(!r||r!==e.commandName)return;let o=s.name||t,n=ie().flags,i=s.aliases||[],a=[o,...i],p=s.defaultValue;for(let c of a){let d=[c,`-${c}`,`--${c}`];for(let l of d)if(l in n){let h=n[l];s.type==="list"?p=(Array.isArray(h)?h:[h]).map(g=>{let b=String(g);return s.parse?s.parse(b):b}):(p=h,s.type==="boolean"?p=!!p:s.type==="number"&&(p=Number(p)),s.parse&&(p=s.parse(p)));break}if(p!==s.defaultValue)break}if(v.set(e,t,{type:"flag",name:o,aliases:i||[],description:s.description}),s.required&&(s.type==="list"?!p||Array.isArray(p)&&p.length===0:!p)){let d=v.get(e,ae);v.set(e,ae,[...d||[],{type:"flag",name:o,message:"Required flag not provided"}]);return}Object.defineProperty(e,t,{value:p,enumerable:true,configurable:true,writable:true});};K.boolean=s=>K({...s,type:"boolean"});K.string=s=>K({...s,type:"string"});K.number=s=>K({...s,type:"number"});K.list=s=>K({...s,type:"list"});var T=K;H();var mt=class{basename(e){switch(S.type){case "node":case "bun":case "deno":return Be.basename(e);default:throw new Error("Unsupported runtime")}}join(...e){switch(S.type){case "node":case "bun":case "deno":return Be.join(...e);default:throw new Error("Unsupported runtime")}}extName(e){switch(S.type){case "bun":case "node":case "deno":return Be.extname(e);default:throw new Error("Unsupported runtime")}}resolve(...e){switch(S.type){case "bun":case "node":case "deno":return Be.resolve(...e);default:throw new Error("Unsupported runtime")}}},f=new mt;var xe=class{staticChildren;paramChild;wildcardChild;middleware;handler;constructor(){this.staticChildren=new Map,this.paramChild=null,this.wildcardChild=null,this.middleware=null,this.handler=null;}},ht=class s{trees;routes;middlewares;basePath;constructor(e="",t=[]){this.trees=new Map,this.routes=[],this.middlewares=t,this.basePath=this.normalizeBasePath(e);}getRoutes(){return this.routes.slice()}addOrUpdate(e,t,r,o,n){e=e.toUpperCase();let i=this.trees.get(e);i||(i=new xe,this.trees.set(e,i));let p=t.split("?")[0].replace(/^\/+|\/+$/g,""),c=p.length===0?[]:p.split("/"),d=i;for(let h of c){if(h==="*"){d.wildcardChild||(d.wildcardChild=new xe),d=d.wildcardChild;break}if(h.startsWith(":")){let u=h.slice(1);d.paramChild||(d.paramChild={node:new xe,name:u}),d=d.paramChild.node;continue}d.staticChildren.has(h)||d.staticChildren.set(h,new xe),d=d.staticChildren.get(h);}d.middleware=r,d.handler=o;let l=this.routes.findIndex(h=>h.method===e&&h.path===t);if(l!==-1){this.routes[l].middleware=r,this.routes[l].handler=o;return}this.routes.push({method:e,path:t,middleware:r,handler:o,swaggerOptions:n});}find(e,t){e=e.toUpperCase();let r=this.trees.get(e);if(!r)return null;let n=t.split("?")[0].replace(/^\/+|\/+$/g,""),i=n.length===0?[]:n.split("/"),a={},p=r;for(let c=0;c<i.length;c++){let d=i[c];if(p.staticChildren.has(d)){p=p.staticChildren.get(d);continue}if(p.paramChild){a[p.paramChild.name]=d,p=p.paramChild.node;continue}if(p.wildcardChild){a["*"]=i.slice(c).join("/"),p=p.wildcardChild;break}return null}return !p.handler||!p.middleware?null:{middleware:p.middleware,handler:p.handler,params:a}}get(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("GET",n,c,a,d);}post(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("POST",n,c,a,d);}patch(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("PATCH",n,c,a,d);}put(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("PUT",n,c,a,d);}delete(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("DELETE",n,c,a,d);}options(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("OPTIONS",n,c,a,d);}head(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("HEAD",n,c,a,d);}group(e,t,r){let o=Array.isArray(t)?t:typeof t=="function"?[]:t?[t]:[],n=Array.isArray(t)?r:typeof t=="function"?t:void 0,i=this.joinPath(e),a=new s(i,[...this.middlewares,...o]);n?.(a);for(let p of a.getRoutes())this.addOrUpdate(p.method,p.path,p.middleware,p.handler,p.swaggerOptions);}applyGlobalMiddlewaresToAllRoutes(e){for(let t of this.routes)this.addOrUpdate(t.method,t.path,[...e,...t.middleware||[]],t.handler);}normalizeBasePath(e){if(!e)return "";let t=e.replace(/\s+/g,"");return t=t.replace(/\/+/g,"/"),t.startsWith("/")||(t="/"+t),t.length>1&&(t=t.replace(/\/+$/g,"")),t}joinPath(e){let r=[this.basePath,e].filter(o=>typeof o=="string"&&o.length>0).join("/");return r=r.replace(/\/+/g,"/"),r.startsWith("/")||(r="/"+r),r.length>1&&(r=r.replace(/\/+$/g,"")),r}},C=new ht;var Dr=s=>async(e,t,r)=>{for(let o of s)if(!await o.manager.canAccess(o.scope,o.handler,e))return t.unauthorized({error:"Unauthorized"});return r()},So=(s,e)=>t=>{let r=v.get(t.prototype,"__class__"),o=r?.middlewares||[],n=r?.policies||[],i=v.getAll(t.prototype),a=new t;for(let[p,c]of i.entries()){if(!c.route)continue;let d=t.prototype[p].bind(a),l=s?f.join(s,c.route.path):c.route.path,h=[...n,...c.policies||[]],u=h.length>0?[Dr(h)]:[],g=[...o,...u,...c.middlewares||[]];C.addOrUpdate(c.route.method,l,g,d,{service:t.name.replace(/Controller$/,""),...e,...c.documentation});}v.clear(t.prototype);};var To=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"DELETE"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"DELETE"},v.set(t,r,n),o};var Po=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"GET"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"GET"},v.set(t,r,n),o};var Mo=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"PATCH"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"PATCH"},v.set(t,r,n),o};var ko=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"POST"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"POST"},v.set(t,r,n),o};var No=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"PUT"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"PUT"},v.set(t,r,n),o};var Do=s=>(e,t,r)=>{if(typeof t>"u"){let n=v.get(e.prototype,"__class__");if(n||(n={middlewares:[]}),n.middlewares||(n.middlewares=[]),!s)throw new Error(`Middleware ${String(s)} not found, are you sure you defined it before using it?`);return Array.isArray(s)||(s=[s]),n.middlewares.push(...s),v.set(e.prototype,"__class__",n),e}let o=v.get(e,t);return o||(o={middlewares:[]}),o.middlewares||(o.middlewares=[]),Array.isArray(s)||(s=[s]),o.middlewares.push(...s),v.set(e,t,o),r};var N=class{static ajv=new Ajv({validateSchema:false,strict:false});static{this.ajv.addFormat("email",/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/),this.ajv.addFormat("url",/^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/),this.ajv.addFormat("date",/^\d{4}-\d{2}-\d{2}$/),this.ajv.addFormat("datetime",/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})$/),this.ajv.addFormat("time",/^\d{2}:\d{2}:\d{2}$/),this.ajv.addFormat("binary",/^(?:[0-9a-fA-F]{2})+$/),this.ajv.addFormat("base64",/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/),this.ajv.addFormat("uuid",/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);}static setGlobalInstance(e){this.ajv=e,this.ajv.opts.strict=false,this.ajv.opts.validateSchema=false;}};var q=new Map;var D=(s,e,t=false)=>{if(!s(e)){if(t)return e;throw new ValidationError(s.errors||[])}return e};var Z=class{static zodModule=null;static loadPromise=null;static async load(){return this.zodModule?this.zodModule:this.loadPromise?this.loadPromise:(this.loadPromise=(async()=>{try{return this.zodModule=await import('zod'),this.zodModule}catch{throw new Error(`Zod is not installed. Install it with: npm install zod
2
- Zod is a peer dependency required when using Zod schemas for validation.`)}})(),this.loadPromise)}static get(){if(!this.zodModule)throw new Error("Zod has not been loaded yet. Call ZodLoader.load() first.");return this.zodModule}static isZodSchema(e){let t=typeof e=="object"&&e!==null&&"_def"in e&&typeof e.parse=="function"&&typeof e.safeParse=="function";if(t&&!("toJSONSchema"in e))throw new Error("Zod4 is required with the toJSONSchema() method in order to work. Install it with: npm install zod with minimum version 4.0.0");return t}};var $t=Symbol("serializeWrapped"),Re=Symbol("serializeMetadata"),Ie=new WeakMap,Yo=(s,e)=>(t,r,o)=>{let n=v.get(t,r)||{middlewares:[],route:{}};n.documentation||(n.documentation={}),n.documentation.responses||(n.documentation.responses={}),n.serializeOptions||(n.serializeOptions={});let i=Number(e?.status??200);if(n.documentation.responses[i]=s,n.serializeOptions[i]=e?.safe??true,v.set(t,r,n),o.value[Re]||(o.value[Re]={}),o.value[Re][i]={name:r,schema:s,safe:e?.safe??true},!o.value[$t]){let a=o.value,p=async function(...c){let d=c[1];await a.apply(this,c);let l=d.responseStatus,h=p[Re],u=h?.[l]?.schema,g=h?.[l]?.safe??true;if(u&&!g){let b=d.getBody();try{let j;if(Z.isZodSchema(u)){let R=Ie.get(u);R||(R=Symbol("serialize_zod_schema"),Ie.set(u,R));let E=q.get(R);if(!E){let J=u.toJSONSchema();E=N.ajv.compile(J),q.set(R,E);}await D(E,b,g),d.send(b);}else if(typeof u=="object"&&u!==null){let R=Ie.get(u);R||(R=Symbol("serialize_json_schema"),Ie.set(u,R));let E=q.get(R);E||(E=N.ajv.compile(u),q.set(R,E)),await D(E,b,g),d.send(b);}else {j=JSON.stringify(u);let R=q.get(j);R||(R=N.ajv.compile(u),q.set(j,R)),await D(R,b,g),d.send(b);}}catch(j){let R=await Z.load();if(j instanceof R.ZodError){d.internalServerError({received:b,schema:u,error:j});return}throw j}}};p[$t]=true,p[Re]=a[Re],o.value=p;}};var pe=s=>(e,t,r)=>{let o=r.value,n=v.get(e,t);return n||(n={middlewares:[],route:{}}),n.documentation||(n.documentation={}),s.body&&(n.documentation.requestBody=s.body),s.query&&(n.documentation.query=s.query),s.all&&(n.documentation.requestBody=s.body,n.documentation.query=s.query),v.set(e,t,n),r.value=async function(...i){let a=i[0],p=i[1];try{let c,d,l;s.body&&(c=a.validate(s.body,s.safe)),s.query&&(d=a.validateQuery(s.query,s.safe)),s.all&&(l=a.validateAll(s.all,s.safe));let h=[...i];return c!==void 0&&h.push(c),d!==void 0&&h.push(d),l!==void 0&&h.push(l),o.apply(this,h)}catch(c){let d=await Z.load();if(!(c instanceof d.ZodError))throw c;return s.customError?p.status(s.customError.status||400).json({received:a.body,schema:s.body,error:c}):p.badRequest(c)}},r};pe.query=(s,e)=>pe({query:s,customError:e});pe.body=(s,e)=>pe({body:s,customError:e});pe.all=(s,e)=>pe({all:s,customError:e});var rn=pe;var Ht=class{logger=y.child({scope:this.constructor.name})};var ce=class{static options={connection:{}}},Nt=s=>{ce.options=s??{connection:{}};};var I=class extends x{constructor(...e){super(`Library not installed: ${e.join(", ")}, try run npm install ${e.join(" ")}`);}};var ft=class{randomUUID(){return crypto.randomUUID()}},Y=new ft;var Ue=class{queues=new Map;workers=new Map;async publish(e,t,r){let o=await this.getQueue(e),n=Y.randomUUID();return await o.add(e,t,{jobId:n,...ce.options?.defaultJobOptions,...r}),{id:n}}async subscribe(e,t){if(this.workers.has(e))throw new Error(`[BullMQ] Already subscribed to topic "${e}"`);let{errorHandler:r,...o}=ce.options??{},n=await this.getBullMQClient(),i=new n.Worker(e,async a=>{try{await t(a.data);}catch(p){await r?.(a,p)??Promise.reject(p);}},{...o});this.workers.set(e,i);}async getQueue(e){if(!this.queues.has(e)){let t=await import('bullmq').catch(()=>{throw new I("bullmq","ioredis")}),r=new t.Queue(e,{...ce.options||{connection:{}}});this.queues.set(e,r);}return this.queues.get(e)}async getBullMQClient(){return this.bullmqClient||(this.bullmqClient=await import('bullmq').catch(()=>{throw new I("bullmq","ioredis")})),this.bullmqClient}};var X=class{static options={}},_t=s=>{X.options=s??{};};var Qe=class{createdQueues=new Set;async publish(e,t,r){let o=await this.getBoss();await this.ensureQueue(String(e));let n=r||{},i=await o.send(String(e),t,n);return {id:String(i??"")}}async subscribe(e,t){let r=await this.getBoss();await this.ensureQueue(String(e));let o=X.options;o.errorHandler&&r.on("error",o.errorHandler),await r.work(String(e),async n=>{let i=Array.isArray(n)?n:[n];for(let a of i)await t(a.data);});}async getBoss(){if(this.boss)return this.boss;let e=await import('pg-boss').catch(()=>{throw new I("pg-boss","pg")}),r=e.default??e,{connectionString:o,boss:n}=X.options,i=o??n,a=new r(i);return X.options?.errorHandler&&a.on("error",X.options.errorHandler),await a.start(),this.boss=a,this.boss}async ensureQueue(e){if(this.createdQueues.has(e))return;let t=await this.getBoss();typeof t.createQueue=="function"&&await t.createQueue(e),this.createdQueues.add(e);}};var de=class{static options={}},Lt=s=>{de.options=s??{};};var ze=class{consumers=new Map;client;async publish(e,t,r){let{...o}=r??{},n=await this.getClient(),{SendMessageCommand:i}=await this.getSqsLib(),a=await this.resolveQueueUrl(String(e));if(!a)throw new Error(`[SQS] Queue url not configured for topic "${String(e)}"`);let p=new i({MessageBody:JSON.stringify(t),MessageAttributes:{topic:{DataType:"String",StringValue:String(e)}},...o,QueueUrl:a});return {id:(await n.send(p)).MessageId??""}}async subscribe(e,t){if(this.consumers.has(String(e)))throw new Error(`[SQS] Already subscribed to topic "${String(e)}"`);let r=de.options,o=await this.getSqsConsumerLib(),n={...r.consumer||{},sqs:await this.getClient(),queueUrl:await this.resolveQueueUrl(String(e)),handleMessage:async p=>{let c=JSON.parse(p.Body||"{}");await t(c);}},i=o.Consumer.create(n),a=r.errorHandler;a&&(i.on("error",a),i.on("processing_error",a)),i.start(),this.consumers.set(String(e),i);}async getClient(){if(this.client)return this.client;let{SQSClient:e}=await this.getSqsLib(),t=de.options.client;return this.client=new e(t??{}),this.client}async getSqsLib(){return this.sqsLib||(this.sqsLib=await import('@aws-sdk/client-sqs').catch(()=>{throw new I("@aws-sdk/client-sqs","sqs-consumer")})),this.sqsLib}async getSqsConsumerLib(){return this.sqsConsumerLib||(this.sqsConsumerLib=await import('sqs-consumer').catch(()=>{throw new I("sqs-consumer")})),this.sqsConsumerLib}async resolveQueueUrl(e){let r=de.options.consumer?.queueUrlMap?.[e];if(!r)throw new Error(`[SQS] Queue url not configured for topic "${e}"`);return r}};var ee=class{static map=new Map;static{this.map.set("bullmq",new Ue),this.map.set("sqs",new ze),this.map.set("pgboss",new Qe);}static getProvider(e){if(!this.map.has(e))throw new Error(`[QueueSubscriber] Provider ${e} not found`);return this.map.get(e)}static setProvider(e,t){this.map.set(e,t);}};var Ge=class{static scheduledSubscribers=[];static register(e,t,r,o){this.scheduledSubscribers.push({name:e,topic:t,handler:r,provider:o?.provider??"bullmq"});}static async run(){if(y.info("Subscribing queue handlers"),!this.scheduledSubscribers.length){y.info("No queue handlers to subscribe");return}for(let{topic:e,handler:t,provider:r}of this.scheduledSubscribers)y.info(`Subscribing to queue: ${String(e)}`),await ee.getProvider(r).subscribe(e,t);y.info("Queue handlers subscribed");}static async massiveImportQueues(e){let t=[];for(let r of e){let o=await glob(r,{absolute:true,cwd:M.getCwd()});t.push(...o);}await Promise.all(t.map(async r=>{await import(r).catch(o=>{y.error(`Error importing queue handler: ${r}`),y.error(o);});}));}};var Te=(s,e)=>function(t,r,o){let n=o.value,i=async a=>{let p=new t.constructor;return n.apply(p,[a])};return Ge.register(`${t.constructor.name}.${r}`,e,i,{provider:s}),o};Te.bullmq=s=>Te("bullmq",s);Te.sqs=s=>Te("sqs",s);Te.pgboss=s=>Te("pgboss",s);var Dt=class{logger=y.child({scope:this.constructor.name})};var Qr=s=>{if(!Buffer.isBuffer(s))return s;let e=s.toString();if(!e.length)return e;try{let t=JSON.parse(e);return typeof t=="object"&&t!==null?t:e}catch{return e}},$e=class s{static subscriptions=[];static client=null;static connectionOptions={};static register(e,t,r,o){this.subscriptions.push({name:e,topic:t,handler:r,options:o});}static async connect(e={}){let t=await import('mqtt').catch(()=>{throw new x("mqtt not installed as a dependency, it is required in order to use MQTT subscriptions with the @mqtt decorator")});this.connectionOptions=e,y.info("Starting MQTT client"),this.subscriptions.length||y.info("No MQTT subscriptions to register");let{host:r="localhost",port:o=1883,protocol:n="mqtt",...i}=e,a=`${n}://${r}:${o}`;this.client=await t.connectAsync(a,i),y.info("MQTT client connected"),this.client.on("error",async p=>{await this.globalErrorHandler(p);}),this.client.on("message",(p,c)=>{this.handleMessage(p,c);}),this.client.on("disconnect",()=>{y.info("MQTT client disconnected");}),this.client.on("reconnect",async()=>{await this.globalErrorHandler(new Error("MQTT client reconnecting"));}),this.subscribeToTopics();}static subscribeToTopics(){if(this.client)for(let{name:e,topic:t,options:r}of this.subscriptions)y.info(`Subscribing to MQTT topic: ${t} (${e})`),this.client.subscribe(t,r||{},o=>{if(o){y.error(`Failed to subscribe to topic ${t}: ${o.message}`);return}y.info(`Successfully subscribed to topic: ${t}`);});}static async handleMessage(e,t){let r=this.subscriptions.filter(o=>{if(o.topic===e)return true;if(!e||typeof e!="string")return false;let n=o.topic.replace(/\+/g,"[^/]+").replace(/#$/,".*");return new RegExp(`^${n}$`).test(e)});for(let o of r)try{await o.handler(e,t);}catch(n){y.error(`Error handling MQTT message for topic ${e} in ${o.name}`),this.globalErrorHandler(n);}}static globalErrorHandler(e){y.error(e);}static setOnDisconnectHandler(e){this.client?.on("disconnect",e);}static setOnReconnectHandler(e){this.client?.on("reconnect",e);}static async massiveImportMqttHandlers(e){let t=[];for(let r of e){let o=await glob(r,{absolute:true,cwd:M.getCwd()});t.push(...o);}await Promise.all(t.map(async r=>{await import(r).catch(o=>{y.error(`Error importing MQTT handler: ${r}`),y.error(o);});}));}subscribe(e,t){return function(r,o,n){let i=n.value;if(!i)return n;let a=async(p,c)=>{let d=new r.constructor,l=Qr(c);if(i.length===1){await i.call(d,l);return}await i.call(d,p,l);};return s.register(`${r.constructor.name}.${o}`,e,a,t),n}}async publish(e,t,r){if(!s.client)throw new x("MQTT client is not connected. Call MqttService.connect() first.");if(!s.client.connected)throw new x("MQTT client is not connected. Call MqttService.connect() first.");let o;Buffer.isBuffer(t)?o=t:typeof t=="object"?o=JSON.stringify(t):o=String(t);try{await s.client.publishAsync(e,o,r||{}),y.debug(`Published message to topic: ${String(e)}`);}catch(n){throw y.error(`Failed to publish to topic ${String(e)}: ${n.message}`),n}}static async disconnect(){if(this.client)return new Promise(e=>{this.client?.end(false,{},()=>{y.info("MQTT client disconnected gracefully"),this.client=null,e();});})}},Fn=s=>{$e.globalErrorHandler=s.bind($e);},Bn=new $e;var Ft=class{logger=y.child({scope:this.constructor.name})};var le=async(s,e,t,r)=>ee.getProvider(s).publish(e,t,r??{});le.bullmq=async(s,e,t)=>le("bullmq",s,e,t);le.sqs=async(s,e,t)=>le("sqs",s,e,t);le.pgboss=async(s,e,t)=>le("pgboss",s,e,t);var Gn=le;var Yn=s=>{let e=["bullmq","pgboss","sqs"];s.bullmq&&Nt(s.bullmq),s.pgboss&&_t(s.pgboss),s.sqs&&Lt(s.sqs);for(let t of Object.keys(s)){let r=t;e.includes(r)||ee.setProvider(r,s[r]);}};H();var gt=class{exit(e){switch(S.type){case "bun":case "node":process.exit(e);case "deno":Deno.exit(e);default:throw new Error("Unsupported runtime")}}},yt=new gt;var O=class{static commandName=this.name;static calledBy=this.name;static description="";static help=[];static options={keepAlive:false};static args=ie().args.slice(1);static flags=ie().flags;static logger=y;static handle(){throw new Error(`Handle method not implemented in command class ${this.name}`)}static handleHelpFlag(e){let t=["-h","--help"];if(!Object.keys(e).some(c=>t.includes(c)))return;let o=this.commandName,n=this.description||"No description available",i=this.help||[],a=this.options,p=this.generateHelpOutput({name:o,description:n,helpText:i,options:a,args:this.args,flags:this.flags},this);console.log(p),yt.exit(0);}static generateHelpOutput=(e,t)=>{let{name:r,description:o,helpText:n,options:i,args:a,flags:p}=e,c={title:"\x1B[1;36m",subtitle:"\x1B[1;33m",description:"\x1B[0;37m",code:"\x1B[0;32m",flag:"\x1B[0;35m",reset:"\x1B[0m",error:"\x1B[0;31m",success:"\x1B[0;32m",info:"\x1B[0;34m"},d=[`${c.title}${r}${c.reset}`,`${c.description}${o}${c.reset}`,"",`${c.subtitle}Usage:${c.reset}`,` ${c.code}${r}${c.reset} [options] [arguments]`,"",`${c.subtitle}Options:${c.reset}`,` ${c.flag}-h, --help${c.reset} Show this help message`,"",`${c.subtitle}Command Options:${c.reset}`,` ${c.flag}keepAlive${c.reset} ${i?.keepAlive??false?c.success+"Enabled"+c.reset:c.error+"Disabled"+c.reset}`,""];if(n){let g=Array.isArray(n)?n:[n];d.push(`${c.subtitle}Help:${c.reset}`),g.forEach(b=>{d.push(` ${c.description}${b}${c.reset}`);}),d.push("");}let l=v.getAll(t),h=Array.from(l.values()).filter(g=>g.type==="arg"),u=Array.from(l.values()).filter(g=>g.type==="flag");return h.length&&(d.push(`${c.subtitle}Available Arguments:${c.reset}`),h.forEach(g=>{let b=g.required?` ${c.error}(required)${c.reset}`:"",j=g.description?` ${c.description}${g.description}${c.reset}`:"";d.push(` ${c.code}${g.name}${c.reset}${b}${j}`);}),d.push("")),u.length&&(d.push(`${c.subtitle}Available Flags:${c.reset}`),u.forEach(g=>{g.aliases&&!Array.isArray(g.aliases)&&(g.aliases=[g.aliases]);let b=g.aliases.length?` ${c.flag}(${g.aliases.join(", ")})${c.reset}`:"",j=g.required?` ${c.error}(required)${c.reset}`:"",R=g.description?` ${c.description}${g.description}${c.reset}`:"";d.push(` ${c.flag}--${g.name}${b}${c.reset}${j}${R}`);}),d.push("")),((a?.length??0)>0||p&&Object.keys(p).length>0)&&(d.push(`${c.subtitle}Current Context:${c.reset}`),a?.length&&d.push(` ${c.info}Provided Arguments:${c.reset} ${c.code}${a.join(" ")}${c.reset}`),p&&Object.keys(p).length>0&&(d.push(` ${c.info}Provided Flags:${c.reset}`),Object.keys(p).forEach(g=>{let b=p[g],j=b!=null?` = ${c.code}${b}${c.reset}`:"";d.push(` ${c.flag}${g}${c.reset}${j}`);})),d.push("")),n&&(Array.isArray(n)?n.some(g=>g.includes("example")):n.includes("example"))&&(d.push(`${c.subtitle}Examples:${c.reset}`),(Array.isArray(n)?n.filter(b=>b.includes("example")):[n.split("example")[1].trim()]).forEach(b=>{d.push(` ${c.code}${b}${c.reset}`);}),d.push("")),d.join(`
3
- `)};static validateContext=e=>{let t=Array.from(v.get(e,ae)||[]);if(t.length){let r={error:"\x1B[0;31m",title:"\x1B[1;31m",reset:"\x1B[0m",info:"\x1B[0;34m",code:"\x1B[0;32m"};console.error(`${r.title}\u274C Validation Errors:${r.reset}`),console.error(""),t.forEach((o,n)=>{let i=`${r.info}${n+1}.${r.reset}`,a=`${r.error}${o.type.toUpperCase()}${r.reset}`,p=`${r.code}${o.name}${r.reset}`;console.error(` ${i} ${a} ${p}: ${r.error}${o.message}${r.reset}`);}),console.error(""),console.error(`${r.info}\u{1F4A1} Tip: Use --help for usage information${r.reset}`),yt.exit(1);}}};H();var vt=class{async mkdir(e,t){switch(S.type){case "bun":case "node":await(await import('fs/promises')).mkdir(e,{recursive:t?.recursive??false,mode:t?.mode});break;case "deno":typeof t?.mode=="string"&&(t.mode=Number.parseInt(t.mode)),await Deno.mkdir(e,{recursive:t?.recursive??false,mode:t?.mode});break}}async exists(e){switch(S.type){case "node":return (await import('fs')).existsSync(e);case "bun":return (await import('fs')).existsSync(e);case "deno":return Deno.stat(e).then(()=>true).catch(()=>false);default:throw new Error("Unsupported runtime")}}async readFile(e,t){switch(S.type){case "node":let o=await(await import('fs/promises')).readFile(e,{encoding:t?.encoding??null});return t?.encoding==="utf8"?o:new Uint8Array(o);case "bun":let n=Bun.file(e);return t?.encoding==="utf8"?n.text():new Uint8Array(await n.arrayBuffer());case "deno":let i=await Deno.readFile(e);return t?.encoding==="utf8"?new TextDecoder().decode(i):new Uint8Array(i)}}async writeFile(e,t){switch(S.type){case "node":await(await import('fs/promises')).writeFile(e,t);break;case "bun":await Bun.write(e,t);break;case "deno":await Deno.writeFile(e,t);break}}async stat(e){switch(S.type){case "node":let r=await(await import('fs/promises')).stat(e);return {isDirectory:r.isDirectory(),isFile:r.isFile(),isSymbolicLink:r.isSymbolicLink(),size:r.size};case "bun":let n=await(await import('fs/promises')).stat(e);return {isDirectory:n.isDirectory(),isFile:n.isFile(),isSymbolicLink:n.isSymbolicLink(),size:n.size};case "deno":let i=await Deno.stat(e);return {isDirectory:i.isDirectory,isFile:i.isFile,isSymbolicLink:false,size:i.size}}}async unlink(e){switch(S.type){case "node":await(await import('fs/promises')).unlink(e);break;case "bun":await Bun.file(e).delete();break;case "deno":await Deno.remove(e);break;default:throw new Error("Unsupported runtime")}}async streamFile(e){switch(S.type){case "node":let t=await import('fs'),{Readable:r}=await import('stream'),o=t.createReadStream(e);return r.toWeb(o);case "bun":return Bun.file(e).stream();case "deno":return (await Deno.open(e)).readable;default:throw new Error("Unsupported runtime")}}async readdir(e){switch(S.type){case "bun":case "node":return (await import('fs/promises')).readdir(e);case "deno":let r=[];for await(let o of Deno.readDir(e))r.push(o.name);return r;default:throw new Error("Unsupported runtime")}}},m=new vt;var Ce=async s=>{let e=f.join(process.cwd(),"node_modules");if(!await m.exists(e))return s;let r=[];for(let o of s){let n=f.join(e,o);await m.exists(n)||r.push(o);}return r},U=async()=>await m.exists(f.join(process.cwd(),"yarn.lock"))?["yarn","add","-D"]:await m.exists(f.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add","-D"]:await m.exists(f.join(process.cwd(),"package-lock.json"))?["npm","install","-D"]:await m.exists(f.join(process.cwd(),"bun.lockb"))?["bun","add","-D"]:await m.exists(f.join(process.cwd(),"deno.lock"))?["deno","add","-D"]:["npm","install","-D"],_=async(s,e,t,r,o=true)=>{let n=Bt.createInterface({input:process.stdin,output:process.stdout}),i=t.join(", "),a=`Do you want to install the following ${o?"dev":""} dependencies using ${e}?
1
+ import {glob}from'glob';import Et from'pino';import Fe from'path';import {Ajv,ValidationError}from'ajv';import Ke from'fs';import {execSync}from'child_process';import*as Ft from'readline';import {AsyncLocalStorage}from'async_hooks';import {gzipSync}from'zlib';import {z as z$1}from'zod';import {createServer}from'http';import {createServer as createServer$1,createSecureServer}from'http2';import {createServer as createServer$2}from'https';import {Readable}from'stream';var jt=Object.defineProperty;var $r=(s,e)=>()=>(s&&(e=s(s=0)),e);var Hr=(s,e)=>{for(var t in e)jt(s,t,{get:e[t],enumerable:true});};var w=(s,e,t,r)=>{for(var o=void 0,n=s.length-1,i;n>=0;n--)(i=s[n])&&(o=(i(e,t,o))||o);return o&&jt(e,t,o),o};var Mt={};Hr(Mt,{runtime:()=>S});var ct,S,H=$r(()=>{ct=class{type;constructor(){this.type=this.getRunTime();}getRunTime(){if(typeof Bun<"u")return "bun";if(typeof Deno<"u")return "deno";if(typeof process<"u")return "node";throw new Error("No environment detected")}},S=new ct;});var x=class extends Error{constructor(e){super(e);}};var Nr=()=>Et({level:"info",formatters:{level:e=>({level:e})}}),y=Nr(),Ls=s=>{y=Et(s);};H();var dt=class{getCwd(){switch(S.type){case "node":case "bun":return process.cwd();case "deno":return Deno.cwd();default:throw new Error("Unsupported runtime")}}},M=new dt;var be=class{static scheduledJobs=[];static register(e,...t){t[2]={name:e,...t[2]},this.scheduledJobs.push({name:e,args:t});}static async run(){let e=(await import('node-cron').catch(()=>{throw new x("node-cron not installed as a dependency, it is required in order to run cron jobs with the @cron decorator")})).default;if(y.info("Scheduling cron jobs"),!this.scheduledJobs.length){y.info("No cron jobs to schedule");return}for(let{name:t,args:r}of this.scheduledJobs)y.info(`Scheduling cron job: ${t}`),e.schedule(...r).on("execution:failed",n=>this.globalErrorHandler(n));y.info("Cron jobs scheduled");}static globalErrorHandler(e){y.error(e.execution?.error);}static async massiveImportCronJobs(e){let t=[];for(let r of e){let o=await glob(r,{absolute:true,cwd:M.getCwd()});t.push(...o);}await Promise.all(t.map(async r=>{await import(r).catch(o=>{y.error(`Error importing cron job: ${r}`),y.error(o);});}));}},Gs=s=>{be.globalErrorHandler=s.bind(be);};var Vs=(s,e)=>function(t,r,o){let n=o.value,i=async(...a)=>{let p=new t.constructor;return await n.apply(p,a)};return be.register(`${t.constructor.name}.${r}`,s,i,e),o};H();var lt=class{getCliArgs(){switch(S.type){case "bun":return this.getBunArgs();case "node":return this.getNodeArgs();case "deno":return Deno.args;default:throw new Error("Unsupported runtime")}}getCliCaller(){switch(S.type){case "bun":return "bun";case "node":return process.argv[0];case "deno":return "deno";default:throw new Error("Unsupported runtime")}}getBunArgs(){let e=Bun.argv,t=this.findScriptIndex(e);return e.slice(t+1)}getNodeArgs(){let e=process.argv,t=this.findScriptIndex(e);return e.slice(t+1)}findScriptIndex(e){if(e.length>=3&&e[1].includes(".bin/"))return 1;for(let t=0;t<e.length;t++){let r=e[t],o=r.split("/").pop()||r;if(!r.startsWith("-")){if(o==="yarn"&&t+1<e.length&&e[t+1]==="run"||o==="npx"&&t+1<e.length)return t+1;if(o==="yarn"||o==="pnpm")return t;if(o==="npm"&&t+1<e.length&&e[t+1]==="run"||o==="bun"&&t+1<e.length&&e[t+1]==="run")return t+1;if(/\.(js|ts|mjs|cjs)$/.test(r))return t;if(/^(tsx|ts-node|node|bun)$/.test(o)){for(let n=t+1;n<e.length;n++)if(!e[n].startsWith("-")&&/\.(js|ts|mjs|cjs)$/.test(e[n]))return n;return t}}}for(let t=e.length-1;t>=0;t--)if(!e[t].startsWith("-"))return t;return 1}},ut=new lt;var Le=s=>s.toLowerCase().replace(/[-_.]/g,"_").replace(/([A-Z])/g,"_$1").replace(/^_+/,"").replace(/_+$/,"").toLowerCase(),Be=s=>s.split(/[-_.]/g).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(""),At=s=>s.split(/[-_.]/g).map(e=>e.toLowerCase()).join("-");var Se=(s,e)=>{if(!s||typeof s!="string")return e;let t=s.toLowerCase().trim(),r=t.match(/^(\d+(?:\.\d+)?)kb$/),o=t.match(/^(\d+(?:\.\d+)?)mb$/);if(r){let n=Number.parseFloat(r[1]);return Number.isNaN(n)||n<0?e:Math.floor(n*1024)}if(o){let n=Number.parseFloat(o[1]);return Number.isNaN(n)||n<0?e:Math.floor(n*1024*1024)}return e};var Lr=s=>{if(!s||s==="-"||s==="--")return null;let e=s.indexOf("=");if(e>0){let t=s.substring(0,e),r=s.substring(e+1);return {name:t,value:qt(r)}}return {name:s,value:true}},qt=s=>{if(s.toLowerCase()==="true")return true;if(s.toLowerCase()==="false")return false;let e=Number(s);return !Number.isNaN(e)&&Number.isFinite(e)?e:s},ie=()=>{let s=ut.getCliArgs(),e=[],t={};if(!s||!s.length)return {args:e,flags:t};for(let r=0;r<s.length;r++){let o=s[r];if(!(!o||typeof o!="string")){if(o.startsWith("-")){let n=Lr(o);if(n){if(n.value===true&&r+1<s.length){let i=s[r+1];i&&typeof i=="string"&&!i.startsWith("-")&&(n.value=qt(i),r++);}if(n.name in t){let i=t[n.name];Array.isArray(i)?i.push(n.value):t[n.name]=[i,n.value];}else t[n.name]=n.value;}continue}e.push(o);}}return {args:e,flags:t}};var De=()=>ut.getCliArgs()[0]||null;var v=class{static metadata=new WeakMap;static set(e,t,r){this.metadata.has(e)||this.metadata.set(e,new Map),this.metadata.get(e).set(t,r);}static get(e,t){return this.metadata.get(e)?.get(t)}static getAll(e){return this.metadata.get(e)||new Map}static delete(e,t){this.metadata.get(e)?.delete(t.toString());}static clear(e){this.metadata.delete(e);}};var ae="VALIDATION_ERROR",ao="ARG",kt=ie().args.slice(1),A=s=>(e,t)=>{let r=De();if(!r||r!==e.commandName)return;let o=t;v.set(e,t,{type:"arg",name:o,description:s.description});let n=kt.length?kt.shift():s.defaultValue;if(s.required&&!n){let i=v.get(e,ae);v.set(e,ae,[...i||[],{type:"arg",name:o,message:"Required argument not provided"}]);return}s.parse&&n&&(n=s.parse(n)),Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true});};var K=s=>(e,t)=>{let r=De();if(!r||r!==e.commandName)return;let o=s.name||t,n=ie().flags,i=s.aliases||[],a=[o,...i],p=s.defaultValue;for(let c of a){let d=[c,`-${c}`,`--${c}`];for(let l of d)if(l in n){let h=n[l];s.type==="list"?p=(Array.isArray(h)?h:[h]).map(g=>{let b=String(g);return s.parse?s.parse(b):b}):(p=h,s.type==="boolean"?p=!!p:s.type==="number"&&(p=Number(p)),s.parse&&(p=s.parse(p)));break}if(p!==s.defaultValue)break}if(v.set(e,t,{type:"flag",name:o,aliases:i||[],description:s.description}),s.required&&(s.type==="list"?!p||Array.isArray(p)&&p.length===0:!p)){let d=v.get(e,ae);v.set(e,ae,[...d||[],{type:"flag",name:o,message:"Required flag not provided"}]);return}Object.defineProperty(e,t,{value:p,enumerable:true,configurable:true,writable:true});};K.boolean=s=>K({...s,type:"boolean"});K.string=s=>K({...s,type:"string"});K.number=s=>K({...s,type:"number"});K.list=s=>K({...s,type:"list"});var T=K;H();var mt=class{basename(e){switch(S.type){case "node":case "bun":case "deno":return Fe.basename(e);default:throw new Error("Unsupported runtime")}}join(...e){switch(S.type){case "node":case "bun":case "deno":return Fe.join(...e);default:throw new Error("Unsupported runtime")}}extName(e){switch(S.type){case "bun":case "node":case "deno":return Fe.extname(e);default:throw new Error("Unsupported runtime")}}resolve(...e){switch(S.type){case "bun":case "node":case "deno":return Fe.resolve(...e);default:throw new Error("Unsupported runtime")}}},f=new mt;var xe=class{staticChildren;paramChild;wildcardChild;middleware;handler;constructor(){this.staticChildren=new Map,this.paramChild=null,this.wildcardChild=null,this.middleware=null,this.handler=null;}},ht=class s{trees;routes;middlewares;basePath;constructor(e="",t=[]){this.trees=new Map,this.routes=[],this.middlewares=t,this.basePath=this.normalizeBasePath(e);}getRoutes(){return this.routes.slice()}addOrUpdate(e,t,r,o,n){e=e.toUpperCase();let i=this.trees.get(e);i||(i=new xe,this.trees.set(e,i));let p=t.split("?")[0].replace(/^\/+|\/+$/g,""),c=p.length===0?[]:p.split("/"),d=i;for(let h of c){if(h==="*"){d.wildcardChild||(d.wildcardChild=new xe),d=d.wildcardChild;break}if(h.startsWith(":")){let u=h.slice(1);d.paramChild||(d.paramChild={node:new xe,name:u}),d=d.paramChild.node;continue}d.staticChildren.has(h)||d.staticChildren.set(h,new xe),d=d.staticChildren.get(h);}d.middleware=r,d.handler=o;let l=this.routes.findIndex(h=>h.method===e&&h.path===t);if(l!==-1){this.routes[l].middleware=r,this.routes[l].handler=o;return}this.routes.push({method:e,path:t,middleware:r,handler:o,swaggerOptions:n});}find(e,t){e=e.toUpperCase();let r=this.trees.get(e);if(!r)return null;let n=t.split("?")[0].replace(/^\/+|\/+$/g,""),i=n.length===0?[]:n.split("/"),a={},p=r;for(let c=0;c<i.length;c++){let d=i[c];if(p.staticChildren.has(d)){p=p.staticChildren.get(d);continue}if(p.paramChild){a[p.paramChild.name]=d,p=p.paramChild.node;continue}if(p.wildcardChild){a["*"]=i.slice(c).join("/"),p=p.wildcardChild;break}return null}return !p.handler||!p.middleware?null:{middleware:p.middleware,handler:p.handler,params:a}}get(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("GET",n,c,a,d);}post(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("POST",n,c,a,d);}patch(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("PATCH",n,c,a,d);}put(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("PUT",n,c,a,d);}delete(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("DELETE",n,c,a,d);}options(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("OPTIONS",n,c,a,d);}head(e,t,r,o){let n=this.joinPath(e),i=typeof t=="function"&&t.length!==3,a=i?t:r,p=i?[]:Array.isArray(t)?t:[t],c=[...this.middlewares,...p],d=i?r:o;this.addOrUpdate("HEAD",n,c,a,d);}group(e,t,r){let o=Array.isArray(t)?t:typeof t=="function"?[]:t?[t]:[],n=Array.isArray(t)?r:typeof t=="function"?t:void 0,i=this.joinPath(e),a=new s(i,[...this.middlewares,...o]);n?.(a);for(let p of a.getRoutes())this.addOrUpdate(p.method,p.path,p.middleware,p.handler,p.swaggerOptions);}applyGlobalMiddlewaresToAllRoutes(e){for(let t of this.routes)this.addOrUpdate(t.method,t.path,[...e,...t.middleware||[]],t.handler);}normalizeBasePath(e){if(!e)return "";let t=e.replace(/\s+/g,"");return t=t.replace(/\/+/g,"/"),t.startsWith("/")||(t="/"+t),t.length>1&&(t=t.replace(/\/+$/g,"")),t}joinPath(e){let r=[this.basePath,e].filter(o=>typeof o=="string"&&o.length>0).join("/");return r=r.replace(/\/+/g,"/"),r.startsWith("/")||(r="/"+r),r.length>1&&(r=r.replace(/\/+$/g,"")),r}},C=new ht;var Br=s=>async(e,t,r)=>{for(let o of s)if(!await o.manager.canAccess(o.scope,o.handler,e))return t.unauthorized({error:"Unauthorized"});return r()},So=(s,e)=>t=>{let r=v.get(t.prototype,"__class__"),o=r?.middlewares||[],n=r?.policies||[],i=v.getAll(t.prototype),a=new t;for(let[p,c]of i.entries()){if(!c.route)continue;let d=t.prototype[p].bind(a),l=s?f.join(s,c.route.path):c.route.path,h=[...n,...c.policies||[]],u=h.length>0?[Br(h)]:[],g=[...o,...u,...c.middlewares||[]];C.addOrUpdate(c.route.method,l,g,d,{service:t.name.replace(/Controller$/,""),...e,...c.documentation});}v.clear(t.prototype);};var To=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"DELETE"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"DELETE"},v.set(t,r,n),o};var Po=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"GET"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"GET"},v.set(t,r,n),o};var Mo=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"PATCH"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"PATCH"},v.set(t,r,n),o};var ko=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"POST"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"POST"},v.set(t,r,n),o};var No=(s,e)=>(t,r,o)=>{let n=v.get(t,r);return n||(n={middlewares:[],route:{path:s,method:"PUT"}}),n.documentation={...n.documentation||{},name:r,...e},n.route={path:s,method:"PUT"},v.set(t,r,n),o};var Bo=s=>(e,t,r)=>{if(typeof t>"u"){let n=v.get(e.prototype,"__class__");if(n||(n={middlewares:[]}),n.middlewares||(n.middlewares=[]),!s)throw new Error(`Middleware ${String(s)} not found, are you sure you defined it before using it?`);return Array.isArray(s)||(s=[s]),n.middlewares.push(...s),v.set(e.prototype,"__class__",n),e}let o=v.get(e,t);return o||(o={middlewares:[]}),o.middlewares||(o.middlewares=[]),Array.isArray(s)||(s=[s]),o.middlewares.push(...s),v.set(e,t,o),r};var N=class{static ajv=new Ajv({validateSchema:false,strict:false});static{this.ajv.addFormat("email",/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/),this.ajv.addFormat("url",/^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/),this.ajv.addFormat("date",/^\d{4}-\d{2}-\d{2}$/),this.ajv.addFormat("datetime",/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})$/),this.ajv.addFormat("time",/^\d{2}:\d{2}:\d{2}$/),this.ajv.addFormat("binary",/^(?:[0-9a-fA-F]{2})+$/),this.ajv.addFormat("base64",/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/),this.ajv.addFormat("uuid",/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);}static setGlobalInstance(e){this.ajv=e,this.ajv.opts.strict=false,this.ajv.opts.validateSchema=false;}};var q=new Map;var B=(s,e,t=false)=>{if(!s(e)){if(t)return e;throw new ValidationError(s.errors||[])}return e};var Z=class{static zodModule=null;static loadPromise=null;static async load(){return this.zodModule?this.zodModule:this.loadPromise?this.loadPromise:(this.loadPromise=(async()=>{try{return this.zodModule=await import('zod'),this.zodModule}catch{throw new Error(`Zod is not installed. Install it with: npm install zod
2
+ Zod is a peer dependency required when using Zod schemas for validation.`)}})(),this.loadPromise)}static get(){if(!this.zodModule)throw new Error("Zod has not been loaded yet. Call ZodLoader.load() first.");return this.zodModule}static isZodSchema(e){let t=typeof e=="object"&&e!==null&&"_def"in e&&typeof e.parse=="function"&&typeof e.safeParse=="function";if(t&&!("toJSONSchema"in e))throw new Error("Zod4 is required with the toJSONSchema() method in order to work. Install it with: npm install zod with minimum version 4.0.0");return t}};var $t=Symbol("serializeWrapped"),Re=Symbol("serializeMetadata"),Ie=new WeakMap,Yo=(s,e)=>(t,r,o)=>{let n=v.get(t,r)||{middlewares:[],route:{}};n.documentation||(n.documentation={}),n.documentation.responses||(n.documentation.responses={}),n.serializeOptions||(n.serializeOptions={});let i=Number(e?.status??200);if(n.documentation.responses[i]=s,n.serializeOptions[i]=e?.safe??true,v.set(t,r,n),o.value[Re]||(o.value[Re]={}),o.value[Re][i]={name:r,schema:s,safe:e?.safe??true},!o.value[$t]){let a=o.value,p=async function(...c){let d=c[1];await a.apply(this,c);let l=d.responseStatus,h=p[Re],u=h?.[l]?.schema,g=h?.[l]?.safe??true;if(u&&!g){let b=d.getBody();try{let j;if(Z.isZodSchema(u)){let R=Ie.get(u);R||(R=Symbol("serialize_zod_schema"),Ie.set(u,R));let E=q.get(R);if(!E){let J=u.toJSONSchema();E=N.ajv.compile(J),q.set(R,E);}await B(E,b,g),d.send(b);}else if(typeof u=="object"&&u!==null){let R=Ie.get(u);R||(R=Symbol("serialize_json_schema"),Ie.set(u,R));let E=q.get(R);E||(E=N.ajv.compile(u),q.set(R,E)),await B(E,b,g),d.send(b);}else {j=JSON.stringify(u);let R=q.get(j);R||(R=N.ajv.compile(u),q.set(j,R)),await B(R,b,g),d.send(b);}}catch(j){let R=await Z.load();if(j instanceof R.ZodError){d.internalServerError({received:b,schema:u,error:j});return}throw j}}};p[$t]=true,p[Re]=a[Re],o.value=p;}};var pe=s=>(e,t,r)=>{let o=r.value,n=v.get(e,t);return n||(n={middlewares:[],route:{}}),n.documentation||(n.documentation={}),s.body&&(n.documentation.requestBody=s.body),s.query&&(n.documentation.query=s.query),s.all&&(n.documentation.requestBody=s.body,n.documentation.query=s.query),v.set(e,t,n),r.value=async function(...i){let a=i[0],p=i[1];try{let c,d,l;s.body&&(c=a.validate(s.body,s.safe)),s.query&&(d=a.validateQuery(s.query,s.safe)),s.all&&(l=a.validateAll(s.all,s.safe));let h=[...i];return c!==void 0&&h.push(c),d!==void 0&&h.push(d),l!==void 0&&h.push(l),o.apply(this,h)}catch(c){let d=await Z.load();if(!(c instanceof d.ZodError))throw c;return s.customError?p.status(s.customError.status||400).json({received:a.body,schema:s.body,error:c}):p.badRequest(c)}},r};pe.query=(s,e)=>pe({query:s,customError:e});pe.body=(s,e)=>pe({body:s,customError:e});pe.all=(s,e)=>pe({all:s,customError:e});var rn=pe;var Ht=class{logger=y.child({scope:this.constructor.name})};var ce=class{static options={connection:{}}},Nt=s=>{ce.options=s??{connection:{}};};var I=class extends x{constructor(...e){super(`Library not installed: ${e.join(", ")}, try run npm install ${e.join(" ")}`);}};var ft=class{randomUUID(){return crypto.randomUUID()}},Y=new ft;var Ue=class{queues=new Map;workers=new Map;async publish(e,t,r){let o=await this.getQueue(e),n=Y.randomUUID();return await o.add(e,t,{jobId:n,...ce.options?.defaultJobOptions,...r}),{id:n}}async subscribe(e,t){if(this.workers.has(e))throw new Error(`[BullMQ] Already subscribed to topic "${e}"`);let{errorHandler:r,...o}=ce.options??{},n=await this.getBullMQClient(),i=new n.Worker(e,async a=>{try{await t(a.data);}catch(p){await r?.(a,p)??Promise.reject(p);}},{...o});this.workers.set(e,i);}async getQueue(e){if(!this.queues.has(e)){let t=await import('bullmq').catch(()=>{throw new I("bullmq","ioredis")}),r=new t.Queue(e,{...ce.options||{connection:{}}});this.queues.set(e,r);}return this.queues.get(e)}async getBullMQClient(){return this.bullmqClient||(this.bullmqClient=await import('bullmq').catch(()=>{throw new I("bullmq","ioredis")})),this.bullmqClient}};var X=class{static options={}},_t=s=>{X.options=s??{};};var Qe=class{createdQueues=new Set;async publish(e,t,r){let o=await this.getBoss();await this.ensureQueue(String(e));let n=r||{},i=await o.send(String(e),t,n);return {id:String(i??"")}}async subscribe(e,t){let r=await this.getBoss();await this.ensureQueue(String(e));let o=X.options;o.errorHandler&&r.on("error",o.errorHandler),await r.work(String(e),async n=>{let i=Array.isArray(n)?n:[n];for(let a of i)await t(a.data);});}async getBoss(){if(this.boss)return this.boss;let e=await import('pg-boss').catch(()=>{throw new I("pg-boss","pg")}),r=e.PgBoss.default??e.PgBoss,{connectionString:o,boss:n}=X.options,i=o??n,a=new r(i);return X.options?.errorHandler&&a.on("error",X.options.errorHandler),await a.start(),this.boss=a,this.boss}async ensureQueue(e){if(this.createdQueues.has(e))return;let t=await this.getBoss();typeof t.createQueue=="function"&&await t.createQueue(e),this.createdQueues.add(e);}};var de=class{static options={}},Lt=s=>{de.options=s??{};};var ze=class{consumers=new Map;client;async publish(e,t,r){let{...o}=r??{},n=await this.getClient(),{SendMessageCommand:i}=await this.getSqsLib(),a=await this.resolveQueueUrl(String(e));if(!a)throw new Error(`[SQS] Queue url not configured for topic "${String(e)}"`);let p=new i({MessageBody:JSON.stringify(t),MessageAttributes:{topic:{DataType:"String",StringValue:String(e)}},...o,QueueUrl:a});return {id:(await n.send(p)).MessageId??""}}async subscribe(e,t){if(this.consumers.has(String(e)))throw new Error(`[SQS] Already subscribed to topic "${String(e)}"`);let r=de.options,o=await this.getSqsConsumerLib(),n={...r.consumer||{},sqs:await this.getClient(),queueUrl:await this.resolveQueueUrl(String(e)),handleMessage:async p=>{let c=JSON.parse(p.Body||"{}");await t(c);}},i=o.Consumer.create(n),a=r.errorHandler;a&&(i.on("error",a),i.on("processing_error",a)),i.start(),this.consumers.set(String(e),i);}async getClient(){if(this.client)return this.client;let{SQSClient:e}=await this.getSqsLib(),t=de.options.client;return this.client=new e(t??{}),this.client}async getSqsLib(){return this.sqsLib||(this.sqsLib=await import('@aws-sdk/client-sqs').catch(()=>{throw new I("@aws-sdk/client-sqs","sqs-consumer")})),this.sqsLib}async getSqsConsumerLib(){return this.sqsConsumerLib||(this.sqsConsumerLib=await import('sqs-consumer').catch(()=>{throw new I("sqs-consumer")})),this.sqsConsumerLib}async resolveQueueUrl(e){let r=de.options.consumer?.queueUrlMap?.[e];if(!r)throw new Error(`[SQS] Queue url not configured for topic "${e}"`);return r}};var ee=class{static map=new Map;static{this.map.set("bullmq",new Ue),this.map.set("sqs",new ze),this.map.set("pgboss",new Qe);}static getProvider(e){if(!this.map.has(e))throw new Error(`[QueueSubscriber] Provider ${e} not found`);return this.map.get(e)}static setProvider(e,t){this.map.set(e,t);}};var Ge=class{static scheduledSubscribers=[];static register(e,t,r,o){this.scheduledSubscribers.push({name:e,topic:t,handler:r,provider:o?.provider??"bullmq"});}static async run(){if(y.info("Subscribing queue handlers"),!this.scheduledSubscribers.length){y.info("No queue handlers to subscribe");return}for(let{topic:e,handler:t,provider:r}of this.scheduledSubscribers)y.info(`Subscribing to queue: ${String(e)}`),await ee.getProvider(r).subscribe(e,t);y.info("Queue handlers subscribed");}static async massiveImportQueues(e){let t=[];for(let r of e){let o=await glob(r,{absolute:true,cwd:M.getCwd()});t.push(...o);}await Promise.all(t.map(async r=>{await import(r).catch(o=>{y.error(`Error importing queue handler: ${r}`),y.error(o);});}));}};var Te=(s,e)=>function(t,r,o){let n=o.value,i=async a=>{let p=new t.constructor;return n.apply(p,[a])};return Ge.register(`${t.constructor.name}.${r}`,e,i,{provider:s}),o};Te.bullmq=s=>Te("bullmq",s);Te.sqs=s=>Te("sqs",s);Te.pgboss=s=>Te("pgboss",s);var Bt=class{logger=y.child({scope:this.constructor.name})};var Qr=s=>{if(!Buffer.isBuffer(s))return s;let e=s.toString();if(!e.length)return e;try{let t=JSON.parse(e);return typeof t=="object"&&t!==null?t:e}catch{return e}},$e=class s{static subscriptions=[];static client=null;static connectionOptions={};static register(e,t,r,o){this.subscriptions.push({name:e,topic:t,handler:r,options:o});}static async connect(e={}){let t=await import('mqtt').catch(()=>{throw new x("mqtt not installed as a dependency, it is required in order to use MQTT subscriptions with the @mqtt decorator")});this.connectionOptions=e,y.info("Starting MQTT client"),this.subscriptions.length||y.info("No MQTT subscriptions to register");let{host:r="localhost",port:o=1883,protocol:n="mqtt",...i}=e,a=`${n}://${r}:${o}`;this.client=await t.connectAsync(a,i),y.info("MQTT client connected"),this.client.on("error",async p=>{await this.globalErrorHandler(p);}),this.client.on("message",(p,c)=>{this.handleMessage(p,c);}),this.client.on("disconnect",()=>{y.info("MQTT client disconnected");}),this.client.on("reconnect",async()=>{await this.globalErrorHandler(new Error("MQTT client reconnecting"));}),this.subscribeToTopics();}static subscribeToTopics(){if(this.client)for(let{name:e,topic:t,options:r}of this.subscriptions)y.info(`Subscribing to MQTT topic: ${t} (${e})`),this.client.subscribe(t,r||{},o=>{if(o){y.error(`Failed to subscribe to topic ${t}: ${o.message}`);return}y.info(`Successfully subscribed to topic: ${t}`);});}static async handleMessage(e,t){let r=this.subscriptions.filter(o=>{if(o.topic===e)return true;if(!e||typeof e!="string")return false;let n=o.topic.replace(/\+/g,"[^/]+").replace(/#$/,".*");return new RegExp(`^${n}$`).test(e)});for(let o of r)try{await o.handler(e,t);}catch(n){y.error(`Error handling MQTT message for topic ${e} in ${o.name}`),this.globalErrorHandler(n);}}static globalErrorHandler(e){y.error(e);}static setOnDisconnectHandler(e){this.client?.on("disconnect",e);}static setOnReconnectHandler(e){this.client?.on("reconnect",e);}static async massiveImportMqttHandlers(e){let t=[];for(let r of e){let o=await glob(r,{absolute:true,cwd:M.getCwd()});t.push(...o);}await Promise.all(t.map(async r=>{await import(r).catch(o=>{y.error(`Error importing MQTT handler: ${r}`),y.error(o);});}));}subscribe(e,t){return function(r,o,n){let i=n.value;if(!i)return n;let a=async(p,c)=>{let d=new r.constructor,l=Qr(c);if(i.length===1){await i.call(d,l);return}await i.call(d,p,l);};return s.register(`${r.constructor.name}.${o}`,e,a,t),n}}async publish(e,t,r){if(!s.client)throw new x("MQTT client is not connected. Call MqttService.connect() first.");if(!s.client.connected)throw new x("MQTT client is not connected. Call MqttService.connect() first.");let o;Buffer.isBuffer(t)?o=t:typeof t=="object"?o=JSON.stringify(t):o=String(t);try{await s.client.publishAsync(e,o,r||{}),y.debug(`Published message to topic: ${String(e)}`);}catch(n){throw y.error(`Failed to publish to topic ${String(e)}: ${n.message}`),n}}static async disconnect(){if(this.client)return new Promise(e=>{this.client?.end(false,{},()=>{y.info("MQTT client disconnected gracefully"),this.client=null,e();});})}},Dn=s=>{$e.globalErrorHandler=s.bind($e);},Fn=new $e;var Dt=class{logger=y.child({scope:this.constructor.name})};var le=async(s,e,t,r)=>ee.getProvider(s).publish(e,t,r??{});le.bullmq=async(s,e,t)=>le("bullmq",s,e,t);le.sqs=async(s,e,t)=>le("sqs",s,e,t);le.pgboss=async(s,e,t)=>le("pgboss",s,e,t);var Gn=le;var Yn=s=>{let e=["bullmq","pgboss","sqs"];s.bullmq&&Nt(s.bullmq),s.pgboss&&_t(s.pgboss),s.sqs&&Lt(s.sqs);for(let t of Object.keys(s)){let r=t;e.includes(r)||ee.setProvider(r,s[r]);}};H();var gt=class{exit(e){switch(S.type){case "bun":case "node":process.exit(e);case "deno":Deno.exit(e);default:throw new Error("Unsupported runtime")}}},yt=new gt;var O=class{static commandName=this.name;static calledBy=this.name;static description="";static help=[];static options={keepAlive:false};static args=ie().args.slice(1);static flags=ie().flags;static logger=y;static handle(){throw new Error(`Handle method not implemented in command class ${this.name}`)}static handleHelpFlag(e){let t=["-h","--help"];if(!Object.keys(e).some(c=>t.includes(c)))return;let o=this.commandName,n=this.description||"No description available",i=this.help||[],a=this.options,p=this.generateHelpOutput({name:o,description:n,helpText:i,options:a,args:this.args,flags:this.flags},this);console.log(p),yt.exit(0);}static generateHelpOutput=(e,t)=>{let{name:r,description:o,helpText:n,options:i,args:a,flags:p}=e,c={title:"\x1B[1;36m",subtitle:"\x1B[1;33m",description:"\x1B[0;37m",code:"\x1B[0;32m",flag:"\x1B[0;35m",reset:"\x1B[0m",error:"\x1B[0;31m",success:"\x1B[0;32m",info:"\x1B[0;34m"},d=[`${c.title}${r}${c.reset}`,`${c.description}${o}${c.reset}`,"",`${c.subtitle}Usage:${c.reset}`,` ${c.code}${r}${c.reset} [options] [arguments]`,"",`${c.subtitle}Options:${c.reset}`,` ${c.flag}-h, --help${c.reset} Show this help message`,"",`${c.subtitle}Command Options:${c.reset}`,` ${c.flag}keepAlive${c.reset} ${i?.keepAlive??false?c.success+"Enabled"+c.reset:c.error+"Disabled"+c.reset}`,""];if(n){let g=Array.isArray(n)?n:[n];d.push(`${c.subtitle}Help:${c.reset}`),g.forEach(b=>{d.push(` ${c.description}${b}${c.reset}`);}),d.push("");}let l=v.getAll(t),h=Array.from(l.values()).filter(g=>g.type==="arg"),u=Array.from(l.values()).filter(g=>g.type==="flag");return h.length&&(d.push(`${c.subtitle}Available Arguments:${c.reset}`),h.forEach(g=>{let b=g.required?` ${c.error}(required)${c.reset}`:"",j=g.description?` ${c.description}${g.description}${c.reset}`:"";d.push(` ${c.code}${g.name}${c.reset}${b}${j}`);}),d.push("")),u.length&&(d.push(`${c.subtitle}Available Flags:${c.reset}`),u.forEach(g=>{g.aliases&&!Array.isArray(g.aliases)&&(g.aliases=[g.aliases]);let b=g.aliases.length?` ${c.flag}(${g.aliases.join(", ")})${c.reset}`:"",j=g.required?` ${c.error}(required)${c.reset}`:"",R=g.description?` ${c.description}${g.description}${c.reset}`:"";d.push(` ${c.flag}--${g.name}${b}${c.reset}${j}${R}`);}),d.push("")),((a?.length??0)>0||p&&Object.keys(p).length>0)&&(d.push(`${c.subtitle}Current Context:${c.reset}`),a?.length&&d.push(` ${c.info}Provided Arguments:${c.reset} ${c.code}${a.join(" ")}${c.reset}`),p&&Object.keys(p).length>0&&(d.push(` ${c.info}Provided Flags:${c.reset}`),Object.keys(p).forEach(g=>{let b=p[g],j=b!=null?` = ${c.code}${b}${c.reset}`:"";d.push(` ${c.flag}${g}${c.reset}${j}`);})),d.push("")),n&&(Array.isArray(n)?n.some(g=>g.includes("example")):n.includes("example"))&&(d.push(`${c.subtitle}Examples:${c.reset}`),(Array.isArray(n)?n.filter(b=>b.includes("example")):[n.split("example")[1].trim()]).forEach(b=>{d.push(` ${c.code}${b}${c.reset}`);}),d.push("")),d.join(`
3
+ `)};static validateContext=e=>{let t=Array.from(v.get(e,ae)||[]);if(t.length){let r={error:"\x1B[0;31m",title:"\x1B[1;31m",reset:"\x1B[0m",info:"\x1B[0;34m",code:"\x1B[0;32m"};console.error(`${r.title}\u274C Validation Errors:${r.reset}`),console.error(""),t.forEach((o,n)=>{let i=`${r.info}${n+1}.${r.reset}`,a=`${r.error}${o.type.toUpperCase()}${r.reset}`,p=`${r.code}${o.name}${r.reset}`;console.error(` ${i} ${a} ${p}: ${r.error}${o.message}${r.reset}`);}),console.error(""),console.error(`${r.info}\u{1F4A1} Tip: Use --help for usage information${r.reset}`),yt.exit(1);}}};H();var vt=class{async mkdir(e,t){switch(S.type){case "bun":case "node":await(await import('fs/promises')).mkdir(e,{recursive:t?.recursive??false,mode:t?.mode});break;case "deno":typeof t?.mode=="string"&&(t.mode=Number.parseInt(t.mode)),await Deno.mkdir(e,{recursive:t?.recursive??false,mode:t?.mode});break}}async exists(e){switch(S.type){case "node":return (await import('fs')).existsSync(e);case "bun":return (await import('fs')).existsSync(e);case "deno":return Deno.stat(e).then(()=>true).catch(()=>false);default:throw new Error("Unsupported runtime")}}async readFile(e,t){switch(S.type){case "node":let o=await(await import('fs/promises')).readFile(e,{encoding:t?.encoding??null});return t?.encoding==="utf8"?o:new Uint8Array(o);case "bun":let n=Bun.file(e);return t?.encoding==="utf8"?n.text():new Uint8Array(await n.arrayBuffer());case "deno":let i=await Deno.readFile(e);return t?.encoding==="utf8"?new TextDecoder().decode(i):new Uint8Array(i)}}async writeFile(e,t){switch(S.type){case "node":await(await import('fs/promises')).writeFile(e,t);break;case "bun":await Bun.write(e,t);break;case "deno":await Deno.writeFile(e,t);break}}async stat(e){switch(S.type){case "node":let r=await(await import('fs/promises')).stat(e);return {isDirectory:r.isDirectory(),isFile:r.isFile(),isSymbolicLink:r.isSymbolicLink(),size:r.size};case "bun":let n=await(await import('fs/promises')).stat(e);return {isDirectory:n.isDirectory(),isFile:n.isFile(),isSymbolicLink:n.isSymbolicLink(),size:n.size};case "deno":let i=await Deno.stat(e);return {isDirectory:i.isDirectory,isFile:i.isFile,isSymbolicLink:false,size:i.size}}}async unlink(e){switch(S.type){case "node":await(await import('fs/promises')).unlink(e);break;case "bun":await Bun.file(e).delete();break;case "deno":await Deno.remove(e);break;default:throw new Error("Unsupported runtime")}}async streamFile(e){switch(S.type){case "node":let t=await import('fs'),{Readable:r}=await import('stream'),o=t.createReadStream(e);return r.toWeb(o);case "bun":return Bun.file(e).stream();case "deno":return (await Deno.open(e)).readable;default:throw new Error("Unsupported runtime")}}async readdir(e){switch(S.type){case "bun":case "node":return (await import('fs/promises')).readdir(e);case "deno":let r=[];for await(let o of Deno.readDir(e))r.push(o.name);return r;default:throw new Error("Unsupported runtime")}}},m=new vt;var Ce=async s=>{let e=f.join(process.cwd(),"node_modules");if(!await m.exists(e))return s;let r=[];for(let o of s){let n=f.join(e,o);await m.exists(n)||r.push(o);}return r},U=async()=>await m.exists(f.join(process.cwd(),"yarn.lock"))?["yarn","add","-D"]:await m.exists(f.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add","-D"]:await m.exists(f.join(process.cwd(),"package-lock.json"))?["npm","install","-D"]:await m.exists(f.join(process.cwd(),"bun.lockb"))?["bun","add","-D"]:await m.exists(f.join(process.cwd(),"deno.lock"))?["deno","add","-D"]:["npm","install","-D"],_=async(s,e,t,r,o=true)=>{let n=Ft.createInterface({input:process.stdin,output:process.stdout}),i=t.join(", "),a=`Do you want to install the following ${o?"dev":""} dependencies using ${e}?
4
4
  ${i}
5
- (y/n): `;return new Promise(p=>{n.question(a,c=>{if(n.close(),c.toLowerCase()==="y"||c.toLowerCase()==="yes"){execSync(s,r),p(true);return}p(false);});})};var $=class extends O{static commandName="build";static description="Build the project for production, node.js only";static help=["Build the project for production, node.js only","It will create a production build of the project in the dist directory","Must have a tsconfig.json file in the root of the project","Must have esbuild installed as a dependency while running the command","Must have esbuild-plugin-copy installed as a dependency while running the command if you want to copy assets to the output directory","Example: npx balda build -t ./tsconfig.json -a ./assets"];static clearDist;static entry;static output;static tsconfig;static assets;static format;static packages;static sourcemap;static async handle(){if(typeof process===void 0&&(this.logger.error("Build command is only supported in node.js"),process.exit(1)),["esm","cjs"].includes(this.format)||(this.logger.error("Invalid format, must be 'esm' or 'cjs'"),process.exit(1)),["bundle","external"].includes(this.packages)||(this.logger.error("Invalid packages, must be 'bundle' or 'external'"),process.exit(1)),!await import('esbuild').then(a=>true).catch(()=>false)){let[a,p,c]=await U();await _(`${a} ${p} esbuild ${c}`,a,["esbuild"],{stdio:"inherit"})||(this.logger.warn("User chose to not continue with the installation of esbuild, exiting..."),process.exit(0));}let t=await import('esbuild').catch(a=>{throw this.logger.error("esbuild is not installed, please install it with `npm install -D esbuild` to use the build command"),new Error("esbuild is not installed")}),r=Be.join(this.output,"assets"),o=[];if(this.assets){let{copy:a}=await import('esbuild-plugin-copy').catch(p=>{throw this.logger.error("esbuild-plugin-copy is not installed, please install it with `npm install -D esbuild-plugin-copy` to use the build command"),new Error("esbuild-plugin-copy is not installed")});Ke.existsSync(r)||Ke.mkdirSync(r,{recursive:true}),o.push(a({assets:{from:this.assets,to:r}}));}this.clearDist&&Ke.existsSync(this.output)&&(this.logger.info("Clearing dist directory..."),Ke.rmSync(this.output,{recursive:true})),this.logger.info("Building project...");let n=Be.join(this.output,"server.js"),i=await t.build({tsconfig:this.tsconfig,entryPoints:[this.entry],bundle:true,platform:"node",outfile:n,minify:true,sourcemap:this.sourcemap,plugins:o,format:this.format,packages:this.packages});i.errors.length&&(this.logger.error(JSON.stringify({message:"Failed to build the project",errors:i.errors},null,2)),process.exit(1)),i.warnings.length&&this.logger.warn(JSON.stringify({message:"Failed to build the project",warnings:i.warnings},null,2)),this.logger.info(JSON.stringify({message:`Project built successfully in ${n}`,output:n,assets:!!this.assets},null,2)),process.exit(0);}};w([T({type:"boolean",aliases:["c"],name:"clear-dist",required:false,defaultValue:false,description:"Whether to clear the dist directory before building the project"})],$,"clearDist"),w([T({type:"string",aliases:["e"],name:"entry",required:false,defaultValue:"./src/index.ts",description:"The entry point of the project, default is ./src/index.ts"})],$,"entry"),w([T({type:"string",aliases:["o"],name:"output",required:false,defaultValue:"./dist",description:"The path to the output directory, default is ./dist"})],$,"output"),w([T({type:"string",aliases:["t"],name:"tsconfig",required:false,defaultValue:"./tsconfig.json",description:"The path to the tsconfig.json file, default is ./tsconfig.json"})],$,"tsconfig"),w([T({type:"string",aliases:["a"],name:"assets",required:false,description:"The path to the assets directory that will be loaded in the production build"})],$,"assets"),w([T({type:"string",aliases:["f"],name:"format",required:false,defaultValue:"esm",description:"The format to build the project, default is esm, can be 'esm' or 'cjs'"})],$,"format"),w([T({type:"string",aliases:["p"],name:"packages",required:false,defaultValue:"external",description:"Weather to bundle node_modules or not, default is external, can be 'bundle' or 'external'"})],$,"packages"),w([T({type:"boolean",aliases:["s"],name:"sourcemap",required:false,defaultValue:true,description:"Whether to generate sourcemaps or not, default is true"})],$,"sourcemap");var Oe=class extends O{static commandName="generate-command";static description="Generate a new command in the specified path";static help=["Generate a new cli command in the specified path","Example: npx balda generate-command my-command -p src/commands"];static path="src/commands";static name;static async handle(){if(Pe.getCommand(this.name)){let o=Pe.isBuiltInCommand(this.name)?"built-in":"user-defined";this.logger.error({commandName:this.name,type:o},`Command "${this.name}" already exists as a ${o} command. Cannot override existing commands.`);return}let t=this.getCommandTemplate();this.path=f.join(this.path,`${this.name}.ts`),await m.exists(f.join(process.cwd(),this.path))||await m.mkdir(f.join(process.cwd(),this.path.split("/").slice(0,-1).join("/")),{recursive:true}),await m.writeFile(this.path,new TextEncoder().encode(t)),this.logger.info(`Command ${this.name} created successfully at ${this.path}`);}static getCommandTemplate(){return `import { Command, CommandOptions } from "balda";
5
+ (y/n): `;return new Promise(p=>{n.question(a,c=>{if(n.close(),c.toLowerCase()==="y"||c.toLowerCase()==="yes"){execSync(s,r),p(true);return}p(false);});})};var $=class extends O{static commandName="build";static description="Build the project for production, node.js only";static help=["Build the project for production, node.js only","It will create a production build of the project in the dist directory","Must have a tsconfig.json file in the root of the project","Must have esbuild installed as a dependency while running the command","Must have esbuild-plugin-copy installed as a dependency while running the command if you want to copy assets to the output directory","Example: npx balda build -t ./tsconfig.json -a ./assets"];static clearDist;static entry;static output;static tsconfig;static assets;static format;static packages;static sourcemap;static async handle(){if(typeof process===void 0&&(this.logger.error("Build command is only supported in node.js"),process.exit(1)),["esm","cjs"].includes(this.format)||(this.logger.error("Invalid format, must be 'esm' or 'cjs'"),process.exit(1)),["bundle","external"].includes(this.packages)||(this.logger.error("Invalid packages, must be 'bundle' or 'external'"),process.exit(1)),!await import('esbuild').then(a=>true).catch(()=>false)){let[a,p,c]=await U();await _(`${a} ${p} esbuild ${c}`,a,["esbuild"],{stdio:"inherit"})||(this.logger.warn("User chose to not continue with the installation of esbuild, exiting..."),process.exit(0));}let t=await import('esbuild').catch(a=>{throw this.logger.error("esbuild is not installed, please install it with `npm install -D esbuild` to use the build command"),new Error("esbuild is not installed")}),r=Fe.join(this.output,"assets"),o=[];if(this.assets){let{copy:a}=await import('esbuild-plugin-copy').catch(p=>{throw this.logger.error("esbuild-plugin-copy is not installed, please install it with `npm install -D esbuild-plugin-copy` to use the build command"),new Error("esbuild-plugin-copy is not installed")});Ke.existsSync(r)||Ke.mkdirSync(r,{recursive:true}),o.push(a({assets:{from:this.assets,to:r}}));}this.clearDist&&Ke.existsSync(this.output)&&(this.logger.info("Clearing dist directory..."),Ke.rmSync(this.output,{recursive:true})),this.logger.info("Building project...");let n=Fe.join(this.output,"server.js"),i=await t.build({tsconfig:this.tsconfig,entryPoints:[this.entry],bundle:true,platform:"node",outfile:n,minify:true,sourcemap:this.sourcemap,plugins:o,format:this.format,packages:this.packages});i.errors.length&&(this.logger.error(JSON.stringify({message:"Failed to build the project",errors:i.errors},null,2)),process.exit(1)),i.warnings.length&&this.logger.warn(JSON.stringify({message:"Failed to build the project",warnings:i.warnings},null,2)),this.logger.info(JSON.stringify({message:`Project built successfully in ${n}`,output:n,assets:!!this.assets},null,2)),process.exit(0);}};w([T({type:"boolean",aliases:["c"],name:"clear-dist",required:false,defaultValue:false,description:"Whether to clear the dist directory before building the project"})],$,"clearDist"),w([T({type:"string",aliases:["e"],name:"entry",required:false,defaultValue:"./src/index.ts",description:"The entry point of the project, default is ./src/index.ts"})],$,"entry"),w([T({type:"string",aliases:["o"],name:"output",required:false,defaultValue:"./dist",description:"The path to the output directory, default is ./dist"})],$,"output"),w([T({type:"string",aliases:["t"],name:"tsconfig",required:false,defaultValue:"./tsconfig.json",description:"The path to the tsconfig.json file, default is ./tsconfig.json"})],$,"tsconfig"),w([T({type:"string",aliases:["a"],name:"assets",required:false,description:"The path to the assets directory that will be loaded in the production build"})],$,"assets"),w([T({type:"string",aliases:["f"],name:"format",required:false,defaultValue:"esm",description:"The format to build the project, default is esm, can be 'esm' or 'cjs'"})],$,"format"),w([T({type:"string",aliases:["p"],name:"packages",required:false,defaultValue:"external",description:"Weather to bundle node_modules or not, default is external, can be 'bundle' or 'external'"})],$,"packages"),w([T({type:"boolean",aliases:["s"],name:"sourcemap",required:false,defaultValue:true,description:"Whether to generate sourcemaps or not, default is true"})],$,"sourcemap");var Oe=class extends O{static commandName="generate-command";static description="Generate a new command in the specified path";static help=["Generate a new cli command in the specified path","Example: npx balda generate-command my-command -p src/commands"];static path="src/commands";static name;static async handle(){if(Pe.getCommand(this.name)){let o=Pe.isBuiltInCommand(this.name)?"built-in":"user-defined";this.logger.error({commandName:this.name,type:o},`Command "${this.name}" already exists as a ${o} command. Cannot override existing commands.`);return}let t=this.getCommandTemplate();this.path=f.join(this.path,`${this.name}.ts`),await m.exists(f.join(process.cwd(),this.path))||await m.mkdir(f.join(process.cwd(),this.path.split("/").slice(0,-1).join("/")),{recursive:true}),await m.writeFile(this.path,new TextEncoder().encode(t)),this.logger.info(`Command ${this.name} created successfully at ${this.path}`);}static getCommandTemplate(){return `import { Command, CommandOptions } from "balda";
6
6
 
7
7
  export default class extends Command {
8
8
  static commandName = "${this.name}";
@@ -16,7 +16,7 @@ export default class extends Command {
16
16
  static async handle(): Promise<void> {
17
17
  // Implement your command logic here
18
18
  }
19
- }`}};w([A({description:"The name of the command to generate",required:true})],Oe,"name");var ue=class extends O{static commandName="generate-controller";static description="Generate a new controller in the specified path";static help=["Generate a new controller in the specified path","Example: npx balda generate-controller user -p src/controllers"];static controllerName;static path;static async handle(){let e=this.getControllerTemplate(),t=`${this.controllerName.toLowerCase()}.ts`;this.path=f.join(this.path,t),await m.exists(f.join(process.cwd(),this.path))||await m.mkdir(f.join(process.cwd(),this.path.split("/").slice(0,-1).join("/")),{recursive:true}),await m.writeFile(this.path,new TextEncoder().encode(e)),this.logger.info(`Controller ${this.controllerName} created successfully at ${this.path}`);}static getControllerTemplate(){let e=De(this.controllerName);return `import { controller, get, post, put, del, Request, Response } from "balda";
19
+ }`}};w([A({description:"The name of the command to generate",required:true})],Oe,"name");var ue=class extends O{static commandName="generate-controller";static description="Generate a new controller in the specified path";static help=["Generate a new controller in the specified path","Example: npx balda generate-controller user -p src/controllers"];static controllerName;static path;static async handle(){let e=this.getControllerTemplate(),t=`${this.controllerName.toLowerCase()}.ts`;this.path=f.join(this.path,t),await m.exists(f.join(process.cwd(),this.path))||await m.mkdir(f.join(process.cwd(),this.path.split("/").slice(0,-1).join("/")),{recursive:true}),await m.writeFile(this.path,new TextEncoder().encode(e)),this.logger.info(`Controller ${this.controllerName} created successfully at ${this.path}`);}static getControllerTemplate(){let e=Be(this.controllerName);return `import { controller, get, post, put, del, Request, Response } from "balda";
20
20
 
21
21
  @controller("/${At(this.controllerName)}")
22
22
  export default class ${e}Controller {
@@ -52,7 +52,7 @@ export default class extends BaseCron {
52
52
  this.logger.info("Running cron job");
53
53
  // Implement your cron job logic here
54
54
  }
55
- }`}};w([A({description:"The name of the cron job file to generate",required:true})],me,"fileName"),w([T({description:"The path to the cron job to generate, default is src/cron",type:"string",aliases:"p",name:"path",required:false,defaultValue:"src/cron"})],me,"path");var he=class extends O{static commandName="generate-middleware";static description="Generate a new middleware in the specified path";static help=["Generate a new middleware in the specified path","Example: npx balda generate-middleware auth -p src/middlewares"];static middlewareName;static path;static async handle(){let e=this.getMiddlewareTemplate(),t=`${this.middlewareName.toLowerCase()}.ts`;this.path=f.join(this.path,t),await m.exists(f.join(process.cwd(),this.path))||await m.mkdir(f.join(process.cwd(),this.path.split("/").slice(0,-1).join("/")),{recursive:true}),await m.writeFile(this.path,new TextEncoder().encode(e)),this.logger.info(`Middleware ${this.middlewareName} created successfully at ${this.path}`);}static getMiddlewareTemplate(){let e=De(this.middlewareName);return `import type { Request, Response, NextFunction, ServerRouteMiddleware } from "balda";
55
+ }`}};w([A({description:"The name of the cron job file to generate",required:true})],me,"fileName"),w([T({description:"The path to the cron job to generate, default is src/cron",type:"string",aliases:"p",name:"path",required:false,defaultValue:"src/cron"})],me,"path");var he=class extends O{static commandName="generate-middleware";static description="Generate a new middleware in the specified path";static help=["Generate a new middleware in the specified path","Example: npx balda generate-middleware auth -p src/middlewares"];static middlewareName;static path;static async handle(){let e=this.getMiddlewareTemplate(),t=`${this.middlewareName.toLowerCase()}.ts`;this.path=f.join(this.path,t),await m.exists(f.join(process.cwd(),this.path))||await m.mkdir(f.join(process.cwd(),this.path.split("/").slice(0,-1).join("/")),{recursive:true}),await m.writeFile(this.path,new TextEncoder().encode(e)),this.logger.info(`Middleware ${this.middlewareName} created successfully at ${this.path}`);}static getMiddlewareTemplate(){let e=Be(this.middlewareName);return `import type { Request, Response, NextFunction, ServerRouteMiddleware } from "balda";
56
56
 
57
57
  /**
58
58
  * ${e} middleware
@@ -295,16 +295,16 @@ export const storage = new Storage(
295
295
  defaultProvider: "local",
296
296
  },
297
297
  );
298
- `}[e]||""}};w([T({description:"Storage provider type (s3, azure, local)",type:"string",aliases:["t"],name:"type",required:true})],we,"storageType"),w([T({description:"Output directory for storage setup",type:"string",aliases:["o"],name:"output",required:false,defaultValue:"src/storage/"})],we,"outputPath");var Zr=[ge,Oe,me,fe,te,ue,he,V,ye,He,$,ve,we],bt=class s{commands;builtInCommands;static commandsPattern="src/commands/**/*.{ts,js}";static logger=y;constructor(){this.commands=new Map,this.builtInCommands=new Set;}static getInstance(){return new s}static setCommandsPattern(e){this.commandsPattern=e;}getCommand(e){return this.commands.get(e)??null}getCommands(){return Array.from(this.commands.values())}getBuiltInCommands(){return Array.from(this.commands.values()).filter(e=>this.builtInCommands.has(e.commandName))}getUserDefinedCommands(){return Array.from(this.commands.values()).filter(e=>!this.builtInCommands.has(e.commandName))}isBuiltInCommand(e){return this.builtInCommands.has(e)}async loadCommands(e){s.logger.info(`Loading commands from ${e}`);let t=await glob(e,{absolute:true,cwd:M.getCwd()});if(t.some(r=>r.endsWith(".ts")))try{let{register:r}=await import('module');r("ts-node/esm",import.meta.url);}catch{s.logger.error("Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\ntry running: `npm install -D ts-node`"),process.exit(1);}for(let r of t){let o=await import(r).then(n=>n.default?n.default:n).catch(n=>(s.logger.error(`Error loading command ${r}: ${n}`),null));o&&this.commands.set(o.commandName,o);}for(let r of Zr)this.commands.set(r.commandName,r),this.builtInCommands.add(r.commandName);}},Pe=bt.getInstance();var Ze=class extends Request{};var Ve=new WeakMap,Q=class s extends Ze{static fromRequest(e){return new s(e.url,{method:e.method,body:e.body,headers:e.headers})}static compileAndValidate(e,t,r){let o,n;if(Z.isZodSchema(e)){let c=e,d=Ve.get(c);d||(d=Symbol("zod_schema"),Ve.set(c,d));let l=q.get(d);if(l)return D(l,t,r);o=c.toJSONSchema();let h=N.ajv.compile(o);return q.set(d,h),D(h,t,r)}let i=e;if(typeof i=="object"&&i!==null){let c=Ve.get(i);c||(c=Symbol("json_schema"),Ve.set(i,c));let d=q.get(c);if(d)return D(d,t,r);let l=N.ajv.compile(i);return q.set(c,l),D(l,t,r)}n=JSON.stringify(i);let a=q.get(n);if(a)return D(a,t,r);let p=N.ajv.compile(i);return q.set(n,p),D(p,t,r)}static enrichRequest(e){return e.validate=(t,r=false)=>s.compileAndValidate(t,e.body||{},r),e.validateQuery=(t,r=false)=>s.compileAndValidate(t,e.query||{},r),e.validateAll=(t,r=false)=>s.compileAndValidate(t,{...e.body?{body:e.body}:{},...e.query?{query:e.query}:{}},r),e.file=t=>e.files.find(r=>r.formName===t)??null,e.files=[],e.saveSession=async()=>{},e.destroySession=async()=>{},e.session={},e.cookies={},e.cookie=t=>e.cookies[t],e}ctx={};file=e=>this.files.find(t=>t.formName===e)??null;cookies={};cookie=e=>this.cookies[e];timeout;session=void 0;saveSession=async()=>{};destroySession=async()=>{};ip;files=[];params={};query={};get id(){return this._id||(this._id=Y.randomUUID()),this._id}set id(e){this._id=e;}body;validate(e,t=false){return s.compileAndValidate(e,this.body||{},t)}validateQuery(e,t=false){return s.compileAndValidate(e,this.query||{},t)}validateAll(e,t=false){return s.compileAndValidate(e,{...this.body??{},...this.query??{}},t)}};H();var je=class{get(e){switch(S.type){case "node":case "bun":case "deno":return process.env[e]??"";default:throw new Error(`Unsupported runtime: ${S.type}`)}}getEnvironment(){switch(S.type){case "node":case "deno":case "bun":return Object.fromEntries(Object.entries(process.env).filter(([e,t])=>t!==void 0))}}};var Vr=new je,P=s=>{let e=Vr.get("NODE_ENV")!=="production";return {code:s.name||"INTERNAL_ERROR",message:s.message,...e&&{stack:s.stack,cause:s.cause}}};var Ee=class extends x{constructor(e,t){super(`METHOD_NOT_ALLOWED: Cannot ${t} ${e}`);}};var k=class extends x{constructor(e,t){super(`ROUTE_NOT_FOUND: Cannot ${t} ${e}`);}};H();var St=class{file(e,t){switch(S.type){case "bun":case "node":return Ke.readFileSync(e,t);case "deno":return Deno.readFileSync(e);default:throw new Error("Unsupported runtime")}}},We=new St;var Ut=new Map([[".html","text/html"],[".htm","text/html"],[".css","text/css"],[".js","application/javascript"],[".mjs","application/javascript"],[".cjs","application/javascript"],[".ts","application/typescript"],[".jsx","text/jsx"],[".tsx","text/tsx"],[".json","application/json"],[".xml","application/xml"],[".yaml","application/yaml"],[".yml","application/yaml"],[".csv","text/csv"],[".txt","text/plain"],[".md","text/markdown"],[".markdown","text/markdown"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".gif","image/gif"],[".svg","image/svg+xml"],[".ico","image/x-icon"],[".webp","image/webp"],[".avif","image/avif"],[".bmp","image/bmp"],[".tiff","image/tiff"],[".tif","image/tiff"],[".heic","image/heic"],[".heif","image/heif"],[".mp4","video/mp4"],[".webm","video/webm"],[".avi","video/x-msvideo"],[".mov","video/quicktime"],[".mkv","video/x-matroska"],[".wmv","video/x-ms-wmv"],[".flv","video/x-flv"],[".m4v","video/x-m4v"],[".mpeg","video/mpeg"],[".mpg","video/mpeg"],[".3gp","video/3gpp"],[".mp3","audio/mpeg"],[".wav","audio/wav"],[".ogg","audio/ogg"],[".flac","audio/flac"],[".aac","audio/aac"],[".m4a","audio/mp4"],[".wma","audio/x-ms-wma"],[".opus","audio/opus"],[".mid","audio/midi"],[".midi","audio/midi"],[".woff","font/woff"],[".woff2","font/woff2"],[".ttf","font/ttf"],[".otf","font/otf"],[".eot","application/vnd.ms-fontobject"],[".pdf","application/pdf"],[".doc","application/msword"],[".docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],[".xls","application/vnd.ms-excel"],[".xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],[".ppt","application/vnd.ms-powerpoint"],[".pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],[".odt","application/vnd.oasis.opendocument.text"],[".ods","application/vnd.oasis.opendocument.spreadsheet"],[".odp","application/vnd.oasis.opendocument.presentation"],[".rtf","application/rtf"],[".epub","application/epub+zip"],[".zip","application/zip"],[".tar","application/x-tar"],[".gz","application/gzip"],[".gzip","application/gzip"],[".bz2","application/x-bzip2"],[".xz","application/x-xz"],[".rar","application/vnd.rar"],[".7z","application/x-7z-compressed"],[".wasm","application/wasm"],[".map","application/json"],[".webmanifest","application/manifest+json"],[".ics","text/calendar"],[".vcf","text/vcard"],[".sql","application/sql"],[".sh","application/x-sh"],[".bat","application/x-msdos-program"],[".exe","application/x-msdownload"],[".dll","application/x-msdownload"],[".bin","application/octet-stream"],[".iso","application/x-iso9660-image"],[".dmg","application/x-apple-diskimage"],[".apk","application/vnd.android.package-archive"],[".jar","application/java-archive"],[".swf","application/x-shockwave-flash"]]);var Qt=(s,e)=>{let{source:t,path:r}=s,o=r;return o.startsWith("/")||(o="/"+o),o!=="/"&&o.endsWith("/")&&(o=o.slice(0,-1)),C.addOrUpdate("GET",`${o}/*`,[],async(n,i)=>Jr(n,i,t),{service:"StaticFiles",...e}),async(n,i,a)=>a()};async function Jr(s,e,t){if(s.method!=="GET"&&s.method!=="HEAD")return e.status(405).json({...P(new Ee(s.url,s.method))});let r=s.params["*"]||"",o=f.join(t,r),n=f.resolve(M.getCwd(),o),i=f.resolve(M.getCwd(),t);if(!n.startsWith(i))return e.notFound({...P(new k(s.url,s.method))});try{if(!(await m.stat(n)).isFile)return e.notFound({...P(new k(s.url,s.method))})}catch(c){if(c.code==="ENOENT")return e.notFound({...P(new k(s.url,s.method))});throw c}let a=xt(f.extName(n));e.setHeader("Content-Type",a);let p=We.file(n);e.raw(p);}function xt(s){return Ut.get(s)||"application/octet-stream"}var W=class{responseStatus;headers;body;constructor(e=200){this.responseStatus=e,this.headers={};}setHeader(e,t){return this.headers[e]=t,this}status(e){return this.responseStatus=e,this}send(e){if(e==null)return this.text("");if(typeof e=="string")return this.text(e);if(typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return this.raw(e);if(typeof Buffer<"u"&&e instanceof Buffer)return this.download(new Uint8Array(e));if(e instanceof ArrayBuffer||e instanceof Uint8Array)return this.download(new Uint8Array(e));if(typeof e=="object"&&e!==null)try{return this.json(e)}catch{return this.text(String(e))}if(typeof e=="symbol")return this.text(e.toString());this.body=e;}raw(e){this.body=e;}text(e){this.body=e,this.headers={...this.headers,"Content-Type":"text/plain"};}json(e){this.body=e,this.headers={...this.headers,"Content-Type":"application/json"};}html(e){this.body=e,this.headers={...this.headers,"Content-Type":"text/html"};}xml(e){this.body=e,this.headers={...this.headers,"Content-Type":"application/xml"};}download(e){this.body=e,this.headers={...this.headers,"Content-Type":"application/octet-stream"};}file(e,t){let r=f.extName(e),o=xt(r);this.body=We.file(e,t),this.headers={...this.headers,"Content-Type":o};}ok(e){this.status(200).send(e);}created(e){this.status(201).send(e);}accepted(e){this.status(202).send(e);}noContent(){this.status(204).send("");}partialContent(e){this.status(206).send(e);}multipleChoices(e){this.status(300).setHeader("Location",e);}redirect(e){this.status(302).setHeader("Location",e);}movedPermanently(e){this.status(301).setHeader("Location",e);}found(e){this.status(302).setHeader("Location",e);}seeOther(e){this.status(303).setHeader("Location",e);}notModified(){this.status(304).send("");}temporaryRedirect(e){this.status(307).setHeader("Location",e);}permanentRedirect(e){this.status(308).setHeader("Location",e);}badRequest(e){this.status(400).send(e);}unauthorized(e){this.status(401).send(e);}forbidden(e){this.status(403).send(e);}notFound(e){this.status(404).send(e);}methodNotAllowed(e){this.status(405).send(e);}notAcceptable(e){this.status(406).send(e);}conflict(e){this.status(409).send(e);}gone(e){this.status(410).send(e);}payloadTooLarge(e){this.status(413).send(e);}unsupportedMediaType(e){this.status(415).send(e);}unprocessableEntity(e){this.status(422).send(e);}tooManyRequests(e){this.status(429).send(e);}internalServerError(e){this.status(500).send(e);}notImplemented(e){this.status(501).send(e);}badGateway(e){this.status(502).send(e);}serviceUnavailable(e){this.status(503).send(e);}gatewayTimeout(e){this.status(504).send(e);}httpVersionNotSupported(e){this.status(505).send(e);}stream(e,t){if(this.headers={...this.headers,"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive",...t?.customHeaders},e instanceof ReadableStream){this.body=e;return}this.body=new ReadableStream({async start(r){for await(let o of e)r.enqueue(new TextEncoder().encode(o));r.close();}});}getBody(){return this.body}};var z=class{schemaOptions;yogaOptions;isEnabled;constructor(e){let t=this.initializeConfiguration(e);this.schemaOptions=t.schemaOptions,this.yogaOptions=t.yogaOptions,this.isEnabled=t.isEnabled;}getSchema(e){return e(this.schemaOptions)}getYogaOptions(){return this.yogaOptions}addTypeDef(e){if(typeof e=="function"){this.addTypeDef(e());return}if(Array.isArray(e)){this.addTypeDefArray(e);return}this.ensureTypeDefsArray(),this.schemaOptions.typeDefs.push(e);}addResolver(e,t){if(typeof e=="string"&&t){this.addResolverByType(e,t);return}this.addFullResolver(e);}initializeConfiguration(e){return e?this.createEnabledConfiguration(e):this.createDisabledConfiguration()}createDisabledConfiguration(){return {schemaOptions:{typeDefs:"",resolvers:{}},yogaOptions:{},isEnabled:false}}createEnabledConfiguration(e){return {schemaOptions:this.resolveSchemaOptions(e.schema),yogaOptions:this.resolveYogaOptions(e.yogaOptions),isEnabled:true}}resolveSchemaOptions(e){return e!==void 0?e:{typeDefs:"",resolvers:{}}}resolveYogaOptions(e){return e!==void 0?e:{}}addResolverByType(e,t){if(this.ensureResolversInitialized(),Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers.push({[e]:t});return}this.mergeResolverIntoObject(e,t);}ensureResolversInitialized(){!this.schemaOptions.resolvers&&(this.schemaOptions.resolvers={});}mergeResolverIntoObject(e,t){let r=this.schemaOptions.resolvers,o=r[e];if(o&&typeof o=="object"){r[e]={...o,...t};return}r[e]=t;}addFullResolver(e){if(this.ensureResolversInitialized(),Array.isArray(e)){this.addResolverArray(e);return}if(typeof e=="object"&&e!==null){this.addResolverObject(e);return}this.schemaOptions.resolvers=e;}addResolverArray(e){if(Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers=[...this.schemaOptions.resolvers,...e];return}this.schemaOptions.resolvers=[this.schemaOptions.resolvers,...e];}addResolverObject(e){if(Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers=[...this.schemaOptions.resolvers,e];return}this.schemaOptions.resolvers={...this.schemaOptions.resolvers,...e};}addTypeDefArray(e){for(let t of e)this.addTypeDef(t);}ensureTypeDefsArray(){if(Array.isArray(this.schemaOptions.typeDefs))return;if(this.schemaOptions.typeDefs!==void 0){this.schemaOptions.typeDefs=[this.schemaOptions.typeDefs];return}this.schemaOptions.typeDefs=[];}};var Me=class{constructor(e){this.response=e;}body(){return this.response.getBody()}statusCode(){return this.response.responseStatus}headers(){return this.response.headers}assertStatus(e){if(this.response.responseStatus!==e)throw new Error(`Expected status ${e}, but got ${this.response.responseStatus}`);return this}assertHeader(e,t){if(this.response.headers[e]!==t)throw new Error(`Expected header ${e} to be ${t}, but got ${this.response.headers[e]}`);return this}assertHeaderExists(e){if(!(e in this.response.headers))throw new Error(`Expected header ${e} to exist, but it was not found`);return this}assertHeaderNotExists(e){if(e in this.response.headers)throw new Error(`Expected header ${e} to not exist, but it was found with value: ${this.response.headers[e]}`);return this}assertBodySubset(e){return this.assertSubset(this.body(),e,"body"),this}assertBodyDeepEqual(e){return this.assertDeepEqual(this.body(),e,"body"),this}assertBodyNotSubset(e){return this.assertNotSubset(this.body(),e,"body"),this}assertBodyNotDeepEqual(e){return this.assertNotDeepEqual(this.body(),e,"body"),this}assertCustom(e){return e(this.response),this}assertSubset(e,t,r){for(let o in t){let n=r===""?o:`${r}.${o}`,i=e[o],a=t[o];if(!(o in e))throw new Error(`Expected ${r} to have key ${o}, but it was not found`);if(this.isObject(a)&&this.isObject(i))this.assertSubset(i,a,n);else if(Array.isArray(a)&&Array.isArray(i))this.assertArraySubset(i,a,n);else if(i!==a)throw new Error(`Expected ${n} to be ${a}, but got ${i}`)}}assertDeepEqual(e,t,r){if(this.isObject(e)&&this.isObject(t)){let o=Object.keys(e),n=Object.keys(t);if(o.length!==n.length)throw new Error(`Expected ${r} to have ${n.length} keys, but got ${o.length}`);for(let i of n){let a=r==="body"?i:`${r}.${i}`;this.assertDeepEqual(e[i],t[i],a);}}else if(Array.isArray(e)&&Array.isArray(t))this.assertArrayDeepEqual(e,t,r);else if(e!==t)throw new Error(`Expected ${r} to be ${t}, but got ${e}`)}assertNotSubset(e,t,r){try{throw this.assertSubset(e,t,r),new Error(`Expected ${r} to NOT contain the subset, but it does`)}catch(o){if(o instanceof Error&&o.message.includes("Expected"))return;throw o}}assertNotDeepEqual(e,t,r){try{throw this.assertDeepEqual(e,t,r),new Error(`Expected ${r} to NOT be deeply equal, but it is`)}catch(o){if(o instanceof Error&&o.message.includes("Expected"))return;throw o}}assertArraySubset(e,t,r){if(t.length>e.length)throw new Error(`Expected ${r} to have at least ${t.length} elements, but got ${e.length}`);for(let o=0;o<t.length;o++){let n=`${r}[${o}]`,i=e[o],a=t[o];if(this.isObject(a)&&this.isObject(i))this.assertSubset(i,a,n);else if(Array.isArray(a)&&Array.isArray(i))this.assertArraySubset(i,a,n);else if(i!==a)throw new Error(`Expected ${n} to be ${a}, but got ${i}`)}}assertArrayDeepEqual(e,t,r){if(e.length!==t.length)throw new Error(`Expected ${r} to have ${t.length} elements, but got ${e.length}`);for(let o=0;o<t.length;o++){let n=`${r}[${o}]`;this.assertDeepEqual(e[o],t[o],n);}}isObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}};var re=async(s,e,t,r=new W)=>{let o=0;if(!s.length)return await e(t,r),r;let n=async()=>{if(o++,o>=s.length){await e(t,r);return}let a=s[o];await a(t,r,n);},i=s[0];return await i(t,r,n),r},se=s=>s?["post","put","patch","delete"].includes(s.toLowerCase()):true,Ae=s=>{let e=null,t=false,r=async()=>{for(;t;)await new Promise(n=>setTimeout(n,10));},o=async()=>{try{let{createYoga:n,createSchema:i}=await import('graphql-yoga'),a=s.getSchema(i),p=s.getYogaOptions();return n({graphqlEndpoint:"/graphql",...p,schema:a})}catch(n){throw n instanceof Error&&(n.message.includes("Cannot find module")||n.message.includes("Cannot find package"))?new Error("GraphQL is enabled but 'graphql-yoga' is not installed. Install it with: npm install graphql graphql-yoga"):n}};return async()=>{if(!s.isEnabled)return null;if(e!==null)return e;if(t)return await r(),e;t=true;try{return e=o(),await e}catch(p){throw e=null,p}finally{t=false;}}};var Je=class{server;constructor(e){this.server=e;}async request(e,t,r={}){let{headers:o={},query:n={},cookies:i={},ip:a}=r;this.validateOptions(r);let p=C.find(e.toUpperCase(),t);if(!p){let u=new W(404);return u.json({caller:"MockServer",error:"Route not found",path:t,method:e}),new Me(u)}let c=r.body,d="application/json";if(c&&typeof c=="object"&&!(c instanceof Uint8Array)&&!(c instanceof ArrayBuffer)&&(c=JSON.stringify(c)),r.formData){let u=`----WebKitFormBoundary${Math.random().toString(36).substring(2)}`;d=`multipart/form-data; boundary=${u}`,c=await this.formDataToMultipart(r.formData,u);}r.urlencoded&&(d="application/x-www-form-urlencoded",c=new URLSearchParams(r.urlencoded).toString());let l=new URL(`http://${this.server.host}:${this.server.port}${t}`);l.search=new URLSearchParams(n).toString();let h=new Q(l.toString(),{method:e.toUpperCase(),body:se(e)?c:void 0,headers:{"content-type":d,...o}});h.query={...Object.fromEntries(l.searchParams.entries()),...n},h.params=p.params,h.cookies=i,h.ip=a;try{let u=await re(p.middleware,p.handler,h);return new Me(u)}catch(u){y.error({error:u},`Error processing mock request ${e} ${t}:`);let g=new W(500);return g.json({error:"Internal server error",message:u instanceof Error?u.message:String(u)}),new Me(g)}}async get(e,t){return this.request("GET",e,t)}async post(e,t){return this.request("POST",e,t)}async put(e,t){return this.request("PUT",e,t)}async patch(e,t){return this.request("PATCH",e,t)}async delete(e,t){return this.request("DELETE",e,t)}async formDataToMultipart(e,t){let r=new TextEncoder,o=[];for(let[p,c]of e.entries()){o.push(r.encode(`--${t}\r
298
+ `}[e]||""}};w([T({description:"Storage provider type (s3, azure, local)",type:"string",aliases:["t"],name:"type",required:true})],we,"storageType"),w([T({description:"Output directory for storage setup",type:"string",aliases:["o"],name:"output",required:false,defaultValue:"src/storage/"})],we,"outputPath");var Zr=[ge,Oe,me,fe,te,ue,he,V,ye,He,$,ve,we],bt=class s{commands;builtInCommands;static commandsPattern="src/commands/**/*.{ts,js}";static logger=y;constructor(){this.commands=new Map,this.builtInCommands=new Set;}static getInstance(){return new s}static setCommandsPattern(e){this.commandsPattern=e;}getCommand(e){return this.commands.get(e)??null}getCommands(){return Array.from(this.commands.values())}getBuiltInCommands(){return Array.from(this.commands.values()).filter(e=>this.builtInCommands.has(e.commandName))}getUserDefinedCommands(){return Array.from(this.commands.values()).filter(e=>!this.builtInCommands.has(e.commandName))}isBuiltInCommand(e){return this.builtInCommands.has(e)}async loadCommands(e){s.logger.info(`Loading commands from ${e}`);let t=await glob(e,{absolute:true,cwd:M.getCwd()});if(t.some(r=>r.endsWith(".ts")))try{let{register:r}=await import('module');r("ts-node/esm",import.meta.url);}catch{s.logger.error("Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\ntry running: `npm install -D ts-node`"),process.exit(1);}for(let r of t){let o=await import(r).then(n=>n.default?n.default:n).catch(n=>(s.logger.error(`Error loading command ${r}: ${n}`),null));o&&this.commands.set(o.commandName,o);}for(let r of Zr)this.commands.set(r.commandName,r),this.builtInCommands.add(r.commandName);}},Pe=bt.getInstance();var Ze=class extends Request{};var Ve=new WeakMap,Q=class s extends Ze{static fromRequest(e){return new s(e.url,{method:e.method,body:e.body,headers:e.headers})}static compileAndValidate(e,t,r){let o,n;if(Z.isZodSchema(e)){let c=e,d=Ve.get(c);d||(d=Symbol("zod_schema"),Ve.set(c,d));let l=q.get(d);if(l)return B(l,t,r);o=c.toJSONSchema();let h=N.ajv.compile(o);return q.set(d,h),B(h,t,r)}let i=e;if(typeof i=="object"&&i!==null){let c=Ve.get(i);c||(c=Symbol("json_schema"),Ve.set(i,c));let d=q.get(c);if(d)return B(d,t,r);let l=N.ajv.compile(i);return q.set(c,l),B(l,t,r)}n=JSON.stringify(i);let a=q.get(n);if(a)return B(a,t,r);let p=N.ajv.compile(i);return q.set(n,p),B(p,t,r)}static enrichRequest(e){return e.validate=(t,r=false)=>s.compileAndValidate(t,e.body||{},r),e.validateQuery=(t,r=false)=>s.compileAndValidate(t,e.query||{},r),e.validateAll=(t,r=false)=>s.compileAndValidate(t,{...e.body?{body:e.body}:{},...e.query?{query:e.query}:{}},r),e.file=t=>e.files.find(r=>r.formName===t)??null,e.files=[],e.saveSession=async()=>{},e.destroySession=async()=>{},e.session={},e.cookies={},e.cookie=t=>e.cookies[t],e}ctx={};file=e=>this.files.find(t=>t.formName===e)??null;cookies={};cookie=e=>this.cookies[e];timeout;session=void 0;saveSession=async()=>{};destroySession=async()=>{};ip;files=[];params={};query={};get id(){return this._id||(this._id=Y.randomUUID()),this._id}set id(e){this._id=e;}body;validate(e,t=false){return s.compileAndValidate(e,this.body||{},t)}validateQuery(e,t=false){return s.compileAndValidate(e,this.query||{},t)}validateAll(e,t=false){return s.compileAndValidate(e,{...this.body??{},...this.query??{}},t)}};H();var je=class{get(e){switch(S.type){case "node":case "bun":case "deno":return process.env[e]??"";default:throw new Error(`Unsupported runtime: ${S.type}`)}}getEnvironment(){switch(S.type){case "node":case "deno":case "bun":return Object.fromEntries(Object.entries(process.env).filter(([e,t])=>t!==void 0))}}};var Vr=new je,P=s=>{let e=Vr.get("NODE_ENV")!=="production";return {code:s.name||"INTERNAL_ERROR",message:s.message,...e&&{stack:s.stack,cause:s.cause}}};var Ee=class extends x{constructor(e,t){super(`METHOD_NOT_ALLOWED: Cannot ${t} ${e}`);}};var k=class extends x{constructor(e,t){super(`ROUTE_NOT_FOUND: Cannot ${t} ${e}`);}};H();var St=class{file(e,t){switch(S.type){case "bun":case "node":return Ke.readFileSync(e,t);case "deno":return Deno.readFileSync(e);default:throw new Error("Unsupported runtime")}}},We=new St;var Ut=new Map([[".html","text/html"],[".htm","text/html"],[".css","text/css"],[".js","application/javascript"],[".mjs","application/javascript"],[".cjs","application/javascript"],[".ts","application/typescript"],[".jsx","text/jsx"],[".tsx","text/tsx"],[".json","application/json"],[".xml","application/xml"],[".yaml","application/yaml"],[".yml","application/yaml"],[".csv","text/csv"],[".txt","text/plain"],[".md","text/markdown"],[".markdown","text/markdown"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".gif","image/gif"],[".svg","image/svg+xml"],[".ico","image/x-icon"],[".webp","image/webp"],[".avif","image/avif"],[".bmp","image/bmp"],[".tiff","image/tiff"],[".tif","image/tiff"],[".heic","image/heic"],[".heif","image/heif"],[".mp4","video/mp4"],[".webm","video/webm"],[".avi","video/x-msvideo"],[".mov","video/quicktime"],[".mkv","video/x-matroska"],[".wmv","video/x-ms-wmv"],[".flv","video/x-flv"],[".m4v","video/x-m4v"],[".mpeg","video/mpeg"],[".mpg","video/mpeg"],[".3gp","video/3gpp"],[".mp3","audio/mpeg"],[".wav","audio/wav"],[".ogg","audio/ogg"],[".flac","audio/flac"],[".aac","audio/aac"],[".m4a","audio/mp4"],[".wma","audio/x-ms-wma"],[".opus","audio/opus"],[".mid","audio/midi"],[".midi","audio/midi"],[".woff","font/woff"],[".woff2","font/woff2"],[".ttf","font/ttf"],[".otf","font/otf"],[".eot","application/vnd.ms-fontobject"],[".pdf","application/pdf"],[".doc","application/msword"],[".docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],[".xls","application/vnd.ms-excel"],[".xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],[".ppt","application/vnd.ms-powerpoint"],[".pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],[".odt","application/vnd.oasis.opendocument.text"],[".ods","application/vnd.oasis.opendocument.spreadsheet"],[".odp","application/vnd.oasis.opendocument.presentation"],[".rtf","application/rtf"],[".epub","application/epub+zip"],[".zip","application/zip"],[".tar","application/x-tar"],[".gz","application/gzip"],[".gzip","application/gzip"],[".bz2","application/x-bzip2"],[".xz","application/x-xz"],[".rar","application/vnd.rar"],[".7z","application/x-7z-compressed"],[".wasm","application/wasm"],[".map","application/json"],[".webmanifest","application/manifest+json"],[".ics","text/calendar"],[".vcf","text/vcard"],[".sql","application/sql"],[".sh","application/x-sh"],[".bat","application/x-msdos-program"],[".exe","application/x-msdownload"],[".dll","application/x-msdownload"],[".bin","application/octet-stream"],[".iso","application/x-iso9660-image"],[".dmg","application/x-apple-diskimage"],[".apk","application/vnd.android.package-archive"],[".jar","application/java-archive"],[".swf","application/x-shockwave-flash"]]);var Qt=(s,e)=>{let{source:t,path:r}=s,o=r;return o.startsWith("/")||(o="/"+o),o!=="/"&&o.endsWith("/")&&(o=o.slice(0,-1)),C.addOrUpdate("GET",`${o}/*`,[],async(n,i)=>Jr(n,i,t),{service:"StaticFiles",...e}),async(n,i,a)=>a()};async function Jr(s,e,t){if(s.method!=="GET"&&s.method!=="HEAD")return e.status(405).json({...P(new Ee(s.url,s.method))});let r=s.params["*"]||"",o=f.join(t,r),n=f.resolve(M.getCwd(),o),i=f.resolve(M.getCwd(),t);if(!n.startsWith(i))return e.notFound({...P(new k(s.url,s.method))});try{if(!(await m.stat(n)).isFile)return e.notFound({...P(new k(s.url,s.method))})}catch(c){if(c.code==="ENOENT")return e.notFound({...P(new k(s.url,s.method))});throw c}let a=xt(f.extName(n));e.setHeader("Content-Type",a);let p=We.file(n);e.raw(p);}function xt(s){return Ut.get(s)||"application/octet-stream"}var W=class{responseStatus;headers;body;constructor(e=200){this.responseStatus=e,this.headers={};}setHeader(e,t){return this.headers[e]=t,this}status(e){return this.responseStatus=e,this}send(e){if(e==null)return this.text("");if(typeof e=="string")return this.text(e);if(typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return this.raw(e);if(typeof Buffer<"u"&&e instanceof Buffer)return this.download(new Uint8Array(e));if(e instanceof ArrayBuffer||e instanceof Uint8Array)return this.download(new Uint8Array(e));if(typeof e=="object"&&e!==null)try{return this.json(e)}catch{return this.text(String(e))}if(typeof e=="symbol")return this.text(e.toString());this.body=e;}raw(e){this.body=e;}text(e){this.body=e,this.headers={...this.headers,"Content-Type":"text/plain"};}json(e){this.body=e,this.headers={...this.headers,"Content-Type":"application/json"};}html(e){this.body=e,this.headers={...this.headers,"Content-Type":"text/html"};}xml(e){this.body=e,this.headers={...this.headers,"Content-Type":"application/xml"};}download(e){this.body=e,this.headers={...this.headers,"Content-Type":"application/octet-stream"};}file(e,t){let r=f.extName(e),o=xt(r);this.body=We.file(e,t),this.headers={...this.headers,"Content-Type":o};}ok(e){this.status(200).send(e);}created(e){this.status(201).send(e);}accepted(e){this.status(202).send(e);}noContent(){this.status(204).send("");}partialContent(e){this.status(206).send(e);}multipleChoices(e){this.status(300).setHeader("Location",e);}redirect(e){this.status(302).setHeader("Location",e);}movedPermanently(e){this.status(301).setHeader("Location",e);}found(e){this.status(302).setHeader("Location",e);}seeOther(e){this.status(303).setHeader("Location",e);}notModified(){this.status(304).send("");}temporaryRedirect(e){this.status(307).setHeader("Location",e);}permanentRedirect(e){this.status(308).setHeader("Location",e);}badRequest(e){this.status(400).send(e);}unauthorized(e){this.status(401).send(e);}forbidden(e){this.status(403).send(e);}notFound(e){this.status(404).send(e);}methodNotAllowed(e){this.status(405).send(e);}notAcceptable(e){this.status(406).send(e);}conflict(e){this.status(409).send(e);}gone(e){this.status(410).send(e);}payloadTooLarge(e){this.status(413).send(e);}unsupportedMediaType(e){this.status(415).send(e);}unprocessableEntity(e){this.status(422).send(e);}tooManyRequests(e){this.status(429).send(e);}internalServerError(e){this.status(500).send(e);}notImplemented(e){this.status(501).send(e);}badGateway(e){this.status(502).send(e);}serviceUnavailable(e){this.status(503).send(e);}gatewayTimeout(e){this.status(504).send(e);}httpVersionNotSupported(e){this.status(505).send(e);}stream(e,t){if(this.headers={...this.headers,"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive",...t?.customHeaders},e instanceof ReadableStream){this.body=e;return}this.body=new ReadableStream({async start(r){for await(let o of e)r.enqueue(new TextEncoder().encode(o));r.close();}});}getBody(){return this.body}};var z=class{schemaOptions;yogaOptions;isEnabled;constructor(e){let t=this.initializeConfiguration(e);this.schemaOptions=t.schemaOptions,this.yogaOptions=t.yogaOptions,this.isEnabled=t.isEnabled;}getSchema(e){return e(this.schemaOptions)}getYogaOptions(){return this.yogaOptions}addTypeDef(e){if(typeof e=="function"){this.addTypeDef(e());return}if(Array.isArray(e)){this.addTypeDefArray(e);return}this.ensureTypeDefsArray(),this.schemaOptions.typeDefs.push(e);}addResolver(e,t){if(typeof e=="string"&&t){this.addResolverByType(e,t);return}this.addFullResolver(e);}initializeConfiguration(e){return e?this.createEnabledConfiguration(e):this.createDisabledConfiguration()}createDisabledConfiguration(){return {schemaOptions:{typeDefs:"",resolvers:{}},yogaOptions:{},isEnabled:false}}createEnabledConfiguration(e){return {schemaOptions:this.resolveSchemaOptions(e.schema),yogaOptions:this.resolveYogaOptions(e.yogaOptions),isEnabled:true}}resolveSchemaOptions(e){return e!==void 0?e:{typeDefs:"",resolvers:{}}}resolveYogaOptions(e){return e!==void 0?e:{}}addResolverByType(e,t){if(this.ensureResolversInitialized(),Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers.push({[e]:t});return}this.mergeResolverIntoObject(e,t);}ensureResolversInitialized(){!this.schemaOptions.resolvers&&(this.schemaOptions.resolvers={});}mergeResolverIntoObject(e,t){let r=this.schemaOptions.resolvers,o=r[e];if(o&&typeof o=="object"){r[e]={...o,...t};return}r[e]=t;}addFullResolver(e){if(this.ensureResolversInitialized(),Array.isArray(e)){this.addResolverArray(e);return}if(typeof e=="object"&&e!==null){this.addResolverObject(e);return}this.schemaOptions.resolvers=e;}addResolverArray(e){if(Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers=[...this.schemaOptions.resolvers,...e];return}this.schemaOptions.resolvers=[this.schemaOptions.resolvers,...e];}addResolverObject(e){if(Array.isArray(this.schemaOptions.resolvers)){this.schemaOptions.resolvers=[...this.schemaOptions.resolvers,e];return}this.schemaOptions.resolvers={...this.schemaOptions.resolvers,...e};}addTypeDefArray(e){for(let t of e)this.addTypeDef(t);}ensureTypeDefsArray(){if(Array.isArray(this.schemaOptions.typeDefs))return;if(this.schemaOptions.typeDefs!==void 0){this.schemaOptions.typeDefs=[this.schemaOptions.typeDefs];return}this.schemaOptions.typeDefs=[];}};var Me=class{constructor(e){this.response=e;}body(){return this.response.getBody()}statusCode(){return this.response.responseStatus}headers(){return this.response.headers}assertStatus(e){if(this.response.responseStatus!==e)throw new Error(`Expected status ${e}, but got ${this.response.responseStatus}`);return this}assertHeader(e,t){if(this.response.headers[e]!==t)throw new Error(`Expected header ${e} to be ${t}, but got ${this.response.headers[e]}`);return this}assertHeaderExists(e){if(!(e in this.response.headers))throw new Error(`Expected header ${e} to exist, but it was not found`);return this}assertHeaderNotExists(e){if(e in this.response.headers)throw new Error(`Expected header ${e} to not exist, but it was found with value: ${this.response.headers[e]}`);return this}assertBodySubset(e){return this.assertSubset(this.body(),e,"body"),this}assertBodyDeepEqual(e){return this.assertDeepEqual(this.body(),e,"body"),this}assertBodyNotSubset(e){return this.assertNotSubset(this.body(),e,"body"),this}assertBodyNotDeepEqual(e){return this.assertNotDeepEqual(this.body(),e,"body"),this}assertCustom(e){return e(this.response),this}assertSubset(e,t,r){for(let o in t){let n=r===""?o:`${r}.${o}`,i=e[o],a=t[o];if(!(o in e))throw new Error(`Expected ${r} to have key ${o}, but it was not found`);if(this.isObject(a)&&this.isObject(i))this.assertSubset(i,a,n);else if(Array.isArray(a)&&Array.isArray(i))this.assertArraySubset(i,a,n);else if(i!==a)throw new Error(`Expected ${n} to be ${a}, but got ${i}`)}}assertDeepEqual(e,t,r){if(this.isObject(e)&&this.isObject(t)){let o=Object.keys(e),n=Object.keys(t);if(o.length!==n.length)throw new Error(`Expected ${r} to have ${n.length} keys, but got ${o.length}`);for(let i of n){let a=r==="body"?i:`${r}.${i}`;this.assertDeepEqual(e[i],t[i],a);}}else if(Array.isArray(e)&&Array.isArray(t))this.assertArrayDeepEqual(e,t,r);else if(e!==t)throw new Error(`Expected ${r} to be ${t}, but got ${e}`)}assertNotSubset(e,t,r){try{throw this.assertSubset(e,t,r),new Error(`Expected ${r} to NOT contain the subset, but it does`)}catch(o){if(o instanceof Error&&o.message.includes("Expected"))return;throw o}}assertNotDeepEqual(e,t,r){try{throw this.assertDeepEqual(e,t,r),new Error(`Expected ${r} to NOT be deeply equal, but it is`)}catch(o){if(o instanceof Error&&o.message.includes("Expected"))return;throw o}}assertArraySubset(e,t,r){if(t.length>e.length)throw new Error(`Expected ${r} to have at least ${t.length} elements, but got ${e.length}`);for(let o=0;o<t.length;o++){let n=`${r}[${o}]`,i=e[o],a=t[o];if(this.isObject(a)&&this.isObject(i))this.assertSubset(i,a,n);else if(Array.isArray(a)&&Array.isArray(i))this.assertArraySubset(i,a,n);else if(i!==a)throw new Error(`Expected ${n} to be ${a}, but got ${i}`)}}assertArrayDeepEqual(e,t,r){if(e.length!==t.length)throw new Error(`Expected ${r} to have ${t.length} elements, but got ${e.length}`);for(let o=0;o<t.length;o++){let n=`${r}[${o}]`;this.assertDeepEqual(e[o],t[o],n);}}isObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}};var re=async(s,e,t,r=new W)=>{let o=0;if(!s.length)return await e(t,r),r;let n=async()=>{if(o++,o>=s.length){await e(t,r);return}let a=s[o];await a(t,r,n);},i=s[0];return await i(t,r,n),r},se=s=>s?["post","put","patch","delete"].includes(s.toLowerCase()):true,Ae=s=>{let e=null,t=false,r=async()=>{for(;t;)await new Promise(n=>setTimeout(n,10));},o=async()=>{try{let{createYoga:n,createSchema:i}=await import('graphql-yoga'),a=s.getSchema(i),p=s.getYogaOptions();return n({graphqlEndpoint:"/graphql",...p,schema:a})}catch(n){throw n instanceof Error&&(n.message.includes("Cannot find module")||n.message.includes("Cannot find package"))?new Error("GraphQL is enabled but 'graphql-yoga' is not installed. Install it with: npm install graphql graphql-yoga"):n}};return async()=>{if(!s.isEnabled)return null;if(e!==null)return e;if(t)return await r(),e;t=true;try{return e=o(),await e}catch(p){throw e=null,p}finally{t=false;}}};var Je=class{server;constructor(e){this.server=e;}async request(e,t,r={}){let{headers:o={},query:n={},cookies:i={},ip:a}=r;this.validateOptions(r);let p=C.find(e.toUpperCase(),t);if(!p){let u=new W(404);return u.json({caller:"MockServer",error:"Route not found",path:t,method:e}),new Me(u)}let c=r.body,d="application/json";if(c&&typeof c=="object"&&!(c instanceof Uint8Array)&&!(c instanceof ArrayBuffer)&&(c=JSON.stringify(c)),r.formData){let u=`----WebKitFormBoundary${Math.random().toString(36).substring(2)}`;d=`multipart/form-data; boundary=${u}`,c=await this.formDataToMultipart(r.formData,u);}r.urlencoded&&(d="application/x-www-form-urlencoded",c=new URLSearchParams(r.urlencoded).toString());let l=new URL(`http://${this.server.host}:${this.server.port}${t}`);l.search=new URLSearchParams(n).toString();let h=new Q(l.toString(),{method:e.toUpperCase(),body:se(e)?c:void 0,headers:{"content-type":d,...o}});h.query={...Object.fromEntries(l.searchParams.entries()),...n},h.params=p.params,h.cookies=i,h.ip=a;try{let u=await re(p.middleware,p.handler,h);return new Me(u)}catch(u){y.error({error:u},`Error processing mock request ${e} ${t}:`);let g=new W(500);return g.json({error:"Internal server error",message:u instanceof Error?u.message:String(u)}),new Me(g)}}async get(e,t){return this.request("GET",e,t)}async post(e,t){return this.request("POST",e,t)}async put(e,t){return this.request("PUT",e,t)}async patch(e,t){return this.request("PATCH",e,t)}async delete(e,t){return this.request("DELETE",e,t)}async formDataToMultipart(e,t){let r=new TextEncoder,o=[];for(let[p,c]of e.entries()){o.push(r.encode(`--${t}\r
299
299
  `));let d=`Content-Disposition: form-data; name="${p}"`,l="";if(c instanceof File&&(d+=`; filename="${c.name}"`,l=`Content-Type: ${c.type||"application/octet-stream"}\r
300
300
  `),o.push(r.encode(`${d}\r
301
301
  ${l}\r
302
302
  `)),c instanceof File){let h=await c.arrayBuffer();o.push(new Uint8Array(h)),o.push(r.encode(`\r
303
303
  `));}else o.push(r.encode(`${String(c)}\r
304
304
  `));}o.push(r.encode(`--${t}--\r
305
- `));let n=o.reduce((p,c)=>p+c.byteLength,0),i=new Uint8Array(n),a=0;for(let p of o)i.set(p,a),a+=p.byteLength;return i}validateOptions(e){let{body:t,formData:r,urlencoded:o}=e;if(t&&(r||o))throw new Error("Only one of body, formData, urlencoded can be provided");if(r&&(o||t))throw new Error("Only one of formData, urlencoded can be provided");if(o&&(t||r))throw new Error("Only one of urlencoded, body can be provided")}};var qe=new AsyncLocalStorage,Rt=s=>async(e,t,r)=>{let o={};for(let[n,i]of Object.entries(s))o[n]=i(e);qe.run(o,()=>{e.ctx=new Proxy({},{get(n,i){return qe.getStore()?.[i]},set(n,i,a){let p=qe.getStore();return p?(p[i]=a,true):false},ownKeys(){let n=qe.getStore();return n?Object.keys(n):[]},has(n,i){let a=qe.getStore();return a?i in a:false}}),r();});};var zt=()=>async(s,e,t)=>(se(s.method)&&(s.rawBody=await s.arrayBuffer(),Object.defineProperty(s,"body",{value:void 0,writable:true,configurable:true,enumerable:true})),t());var es=1024,ts=6,rs=[/text\/.+/,/application\/json/,/application\/javascript/,/application\/xml/,/application\/.*\+json/,/application\/.*\+xml/],Gt=s=>{let e=s?.threshold??es,t=Math.max(0,Math.min(9,s?.level??ts)),r=s?.filter??rs;return async(o,n,i)=>{if(!(o.headers.get("accept-encoding")||"").includes("gzip"))return i();let c=n.send.bind(n),d=n.json.bind(n),l=n.text.bind(n),h=(u,g)=>{if(!ss(u,g,e,r))return u;let b=Kt(u);if(!b||b.length<e)return u;let j=gzipSync(b,{level:t});return n.setHeader("Content-Encoding","gzip"),n.setHeader("Content-Length",j.length.toString()),j};n.send=function(u){let g=n.headers["content-type"],b=h(u,g);return c(b)},n.json=function(u){let g=JSON.stringify(u),b=h(g,"application/json");return b!==g?(n.setHeader("Content-Type","application/json"),c(b)):d(u)},n.text=function(u){let g=h(u,"text/plain");return g!==u?(n.setHeader("Content-Type","text/plain"),c(g)):l(u)},await i();}},ss=(s,e,t,r)=>{if(!s||!e)return false;let o=Kt(s);return !o||o.length<t?false:r.some(n=>n.test(e))},Kt=s=>typeof s=="string"?Buffer.from(s,"utf-8"):Buffer.isBuffer(s)?s:s instanceof Uint8Array?Buffer.from(s):typeof s=="object"?Buffer.from(JSON.stringify(s),"utf-8"):null;var Zt=s=>{let e={secret:s?.secret??"",defaults:{path:"/",httpOnly:true,secure:true,sameSite:"Lax",...s?.defaults},parse:s?.parse??true,sign:s?.sign??false};return async(t,r,o)=>{if(e.parse){let n=os(t.headers.get("cookie")||"");t.cookies={};for(let[i,a]of Object.entries(n)){if(e.sign&&e.secret){let p=await as(a,e.secret);p!==false&&(t.cookies[i]=p);continue}t.cookies[i]=a;}}r.cookie=(n,i,a)=>{Vt(r,n,i,{...e.defaults,...a},e);},r.clearCookie=(n,i)=>{ns(r,n,{...e.defaults,...i});},await o();}};function os(s){let e={};if(!s)return e;let t=s.split(";");for(let r of t){let[o,n]=r.trim().split("=");o&&n&&(e[decodeURIComponent(o)]=decodeURIComponent(n));}return e}async function Vt(s,e,t,r,o){let n=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;r.domain&&(n+=`; Domain=${r.domain}`),r.path&&(n+=`; Path=${r.path}`),r.expires&&(n+=`; Expires=${r.expires.toUTCString()}`),r.maxAge&&(n+=`; Max-Age=${r.maxAge}`),r.secure&&(n+="; Secure"),r.httpOnly&&(n+="; HttpOnly"),r.sameSite&&(n+=`; SameSite=${r.sameSite}`),r.priority&&(n+=`; Priority=${r.priority}`),o.sign&&o.secret&&(n=await is(n,o.secret));let i=s.headers["set-cookie"]||"",a=i?`${i}, ${n}`:n;s.setHeader("Set-Cookie",a);}function ns(s,e,t){let r={...t,expires:new Date(0),maxAge:0};Vt(s,e,"",r,{secret:"",sign:false});}async function is(s,e){let t=new TextEncoder,r=t.encode(e),o=t.encode(s),n=await crypto.subtle.importKey("raw",r,{name:"HMAC",hash:"SHA-256"},false,["sign"]),i=await crypto.subtle.sign("HMAC",n,o),a=new Uint8Array(i),p=Array.from(a).map(c=>c.toString(16).padStart(2,"0")).join("");return `${s}.${p}`}async function as(s,e){let t=s.split(".");if(t.length!==2)return false;let[r,o]=t,n=new TextEncoder,i=n.encode(e),a=n.encode(r),p=await crypto.subtle.importKey("raw",i,{name:"HMAC",hash:"SHA-256"},false,["sign"]),c=await crypto.subtle.sign("HMAC",p,a),d=new Uint8Array(c),l=Array.from(d).map(h=>h.toString(16).padStart(2,"0")).join("");return o===l?r:false}var Wt=s=>{let e={origin:"*",methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],allowedHeaders:"",exposedHeaders:"",credentials:false,maxAge:void 0,preflightContinue:false,optionsSuccessStatus:204,...s};return async(t,r,o)=>{let n=t.headers.get("origin")||"";if(t.method==="OPTIONS")return ps(t,r,e,n,o);cs(t,r,e,n),await o();}};function ps(s,e,t,r,o){let n=Jt(t,r);if(!n){e.forbidden("CORS origin not allowed");return}if(Yt(e,t,n),t.preflightContinue){o();return}e.status(t.optionsSuccessStatus||204),e.send("");}function cs(s,e,t,r){let o=Jt(t,r);o&&Yt(e,t,o);}function Jt(s,e){if(typeof s.origin=="string")return s.origin;if(Array.isArray(s.origin)){let t=s.origin.find(r=>typeof r=="string"?r===e:r instanceof RegExp&&r.test(e));return typeof t=="string"?t:false}return "*"}function Yt(s,e,t){if(s.setHeader("Access-Control-Allow-Origin",t),e.credentials&&s.setHeader("Access-Control-Allow-Credentials","true"),e.exposedHeaders&&e.exposedHeaders!==""){let o=Array.isArray(e.exposedHeaders)?e.exposedHeaders.join(","):e.exposedHeaders;s.setHeader("Access-Control-Expose-Headers",o);}if(e.allowedHeaders&&e.allowedHeaders!==""){let o=Array.isArray(e.allowedHeaders)?e.allowedHeaders.join(","):e.allowedHeaders;s.setHeader("Access-Control-Allow-Headers",o);}let r=Array.isArray(e.methods)?e.methods.join(","):e.methods;s.setHeader("Access-Control-Allow-Methods",String(r||"")),typeof e.maxAge=="number"&&s.setHeader("Access-Control-Max-Age",e.maxAge.toString());}function Xt(s,e=""){let t=new URL(s.url),r=Object.fromEntries(s.headers.entries());return {body:s.body,query:s.query,params:s.params,cookies:s.cookies,session:s.session,originalUrl:t.pathname+t.search,baseUrl:e,path:t.pathname.replace(e,"")||"/",method:s.method,ip:s.ip,headers:r,url:t.pathname,get(n){return s.headers.get(n.toLowerCase())??void 0},header(n){return s.headers.get(n.toLowerCase())??void 0},app:{},res:null,route:null,protocol:t.protocol.replace(":",""),secure:t.protocol==="https:",hostname:t.hostname,host:t.host,fresh:false,stale:true,xhr:r["x-requested-with"]?.toLowerCase()==="xmlhttprequest",accepts:()=>{},acceptsCharsets:()=>{},acceptsEncodings:()=>{},acceptsLanguages:()=>{},is:()=>null,range:()=>{},param:n=>s.params[n]??s.query[n],files:s.files,file:s.file,rawBody:s.rawBody}}function er(s){return {locals:{},headersSent:false,statusCode:s.responseStatus,status(t){return s.status(t),this.statusCode=t,this},sendStatus(t){return this.status(t).send(String(t)),this},send(t){if(this.headersSent=true,!!!s.headers["Content-Type"]&&typeof t=="string"){let o=t.trim();if(o.startsWith("<!DOCTYPE")||o.startsWith("<html")||o.startsWith("<HTML"))return s.html(t),this}return s.send(t),this},json(t){return this.headersSent=true,s.json(t),this},redirect(t,r){this.headersSent=true;let o=typeof t=="string"?t:r,n=typeof t=="number"?t:302;return s.status(n).setHeader("Location",o),s.send(""),this},setHeader(t,r){let o=Array.isArray(r)?r.join(", "):String(r);return s.setHeader(t,o),this},set(t,r){if(typeof t=="object")for(let[o,n]of Object.entries(t))s.setHeader(o,n);else r!==void 0&&s.setHeader(t,r);return this},header(t,r){return this.set(t,r)},type(t){return s.setHeader("Content-Type",t),this},contentType(t){return this.type(t)},end(t){return this.headersSent=true,s.send(t??""),this},write(t){return true},get(t){return s.headers[t]},getHeader(t){return s.headers[t]},removeHeader(t){return delete s.headers[t],this},append(t,r){let o=s.headers[t],n=Array.isArray(r)?r.join(", "):r;return s.setHeader(t,o?`${o}, ${n}`:n),this},cookie(t,r,o){return s.cookie?.(t,r,o),this},clearCookie(t,r){return s.clearCookie?.(t,r),this},render(t,r,o){throw new Error("render() is not supported in Express compatibility layer")},format(t){return this},attachment(t){return t?s.setHeader("Content-Disposition",`attachment; filename="${t}"`):s.setHeader("Content-Disposition","attachment"),this},sendFile(t,r,o){s.file(t);},download(t,r,o,n){let i=typeof r=="string"?r:t.split("/").pop();this.attachment(i),s.file(t);},links(t){let r=Object.entries(t).map(([o,n])=>`<${n}>; rel="${o}"`).join(", ");return s.setHeader("Link",r),this},location(t){return s.setHeader("Location",t),this},vary(t){return s.setHeader("Vary",t),this},app:{},req:null}}function ke(s,e=""){return async(t,r,o)=>{let n=Xt(t,e),i=er(r);await new Promise((a,p)=>{let c=d=>{if(d){p(d);return}a();};try{let d=s(n,i,c);d instanceof Promise&&d.catch(p);}catch(d){p(d);}}),await o();}}function ds(s,e=""){return async(t,r)=>{let o=Xt(t,e),n=er(r);await s(o,n,()=>{});}}function Ye(s,e){let t=Tt(s),r=e.stack;if(!r){console.warn("Express router has no stack - routes may not be registered");return}for(let o of r)tr(o,t);}function tr(s,e){if(s.route){let t=Tt(e+s.route.path),r=Object.keys(s.route.methods).filter(o=>s.route.methods[o]);for(let o of r){let n=s.route.stack.map(i=>i.handle);ls(o.toUpperCase(),t,n,e);}return}if(s.handle&&typeof s.handle=="function"){let t=s.path||"",r=Tt(e+t),o=s.handle.stack;if(o&&Array.isArray(o)){for(let p of o)tr(p,r);return}let n=r==="/"?"/*":`${r}/*`,i=ke(s.handle,e),a=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];for(let p of a)C.addOrUpdate(p,n,[i],async()=>{},{excludeFromSwagger:true});}}function ls(s,e,t,r){let o=t.slice(0,-1).map(a=>ke(a,r)),n=t[t.length-1],i=ds(n,r);C.addOrUpdate(s,e,o,i,{excludeFromSwagger:true});}function Tt(s){let e=s.replace(/\/+/g,"/");return e.startsWith("/")||(e="/"+e),e.length>1&&e.endsWith("/")&&(e=e.slice(0,-1)),e}function rr(s){return {use(e,t){if(typeof e=="string"){let n=e,i=t,a=i.stack;if(a&&Array.isArray(a)){Ye(n,i);return}s.use(ke(i,n));return}let r=e,o=r.stack;if(o&&Array.isArray(o)){Ye("/",r);return}s.use(ke(r));}}}var Xe=class extends x{constructor(e,t,r){super(`FILE_TOO_LARGE: "${e}" is too large. Max size is ${r} bytes, but got ${t} bytes`);}};H();var Ct=class{async tmpdir(){switch(S.type){case "node":case "bun":return (await import('os')).tmpdir();case "deno":return Deno.makeTempDir();default:throw new Error("Unsupported runtime")}}},sr=new Ct;var or=1024*1024,ir=s=>async(e,t,r)=>{let o=[];try{let n=e.headers.get("content-type")??e.headers.get("Content-Type");if(!n||!n.startsWith("multipart/form-data")||!e.rawBody)return r();let i=n.match(/boundary=(.*)(;|$)/i);if(!i)return r();let a=i[1].replace(/(^\s*"?|"?\s*$)/g,""),p=new Uint8Array(e.rawBody),c=new TextEncoder().encode(`--${a}`),d=new Uint8Array([13,10,13,10]),l=[],h=(R,E,J=0)=>{e:for(let F=J;F<=R.length-E.length;F++){for(let L=0;L<E.length;L++)if(R[F+L]!==E[L])continue e;return F}return -1},u=h(p,c);for(;u!==-1&&(u+=c.length,!(p[u]===45&&p[u+1]===45));){p[u]===13&&p[u+1]===10&&(u+=2);let R=h(p,d,u);if(R===-1)break;let E=p.subarray(u,R),J=new TextDecoder().decode(E),F=R+d.length,L=h(p,c,F);if(L===-1)break;let B=L-1;p[B]===10&&B--,p[B]===13&&B--;let Pt=p.subarray(F,B+1);l.push({headers:J,data:Pt}),u=L;}let g=[],b={},j=Se(s?.maxFileSize,or)??or;for(let R of l){let E=R.headers.split(`\r
306
- `).find(_e=>_e.toLowerCase().startsWith("content-disposition:"));if(!E)continue;let J=E.match(/name="([^"]+)"/);if(!J)continue;let F=J[1],L=E.match(/filename="([^"]*)"/),B=L?L[1]:"";if(!!B){if(s?.maxFiles&&g.length>=s.maxFiles)return t.badRequest({...P(new x(`Too many files: Maximum ${s.maxFiles} files allowed`))});if(j&&R.data.length>j)return t.badRequest({...P(new Xe(B,R.data.length,j))});let _e=R.headers.split(`\r
307
- `).find(qr=>qr.toLowerCase().startsWith("content-type:")),at=_e?_e.split(":")[1].trim():"application/octet-stream";if(s?.allowedMimeTypes&&!s.allowedMimeTypes.includes(at))return t.badRequest({...P(new x(`Invalid file type: "${at}" is not allowed. Allowed types: ${s.allowedMimeTypes.join(", ")}`))});let Mr=us(B),Ar=f.extName(Mr),pt=f.join(await sr.tmpdir(),`${Y.randomUUID()}${Ar}`);await m.writeFile(pt,R.data),o.push(pt),g.push({formName:F,mimeType:at,size:R.data.length,tmpPath:pt,originalName:B});}else b[F]=new TextDecoder().decode(R.data);}e.files=g,e.body=b,await r(),await nr(o);}catch(n){throw await nr(o),n}},nr=async s=>{await Promise.allSettled(s.map(e=>m.unlink(e)));},us=s=>s.replace(/\.\./g,"").replace(/[\/\\]/g,"").replace(/\0/g,"").replace(/[\x00-\x1f\x80-\x9f]/g,"").trim();var ar=s=>{let e={dnsPrefetchControl:true,frameguard:{action:"SAMEORIGIN"},hsts:{maxAge:15552e3,includeSubDomains:true,preload:false},contentTypeOptions:true,ieNoOpen:true,xssFilter:true,referrerPolicy:"no-referrer",crossOriginResourcePolicy:"same-origin",crossOriginOpenerPolicy:"same-origin",crossOriginEmbedderPolicy:"require-corp",contentSecurityPolicy:false,...s};return async(t,r,o)=>{if(e.dnsPrefetchControl&&r.setHeader("X-DNS-Prefetch-Control","off"),e.frameguard){let n="SAMEORIGIN";typeof e.frameguard=="object"&&(n=e.frameguard.action),r.setHeader("X-Frame-Options",n);}if(e.hsts){let n={};typeof e.hsts=="object"&&(n=e.hsts);let i=n.maxAge!==void 0?n.maxAge:15552e3,a=n.includeSubDomains!==void 0?n.includeSubDomains:true,p=n.preload!==void 0?n.preload:false,c=`max-age=${i}`;a!==false&&(c+="; includeSubDomains"),p&&(c+="; preload"),r.setHeader("Strict-Transport-Security",c);}e.contentTypeOptions&&r.setHeader("X-Content-Type-Options","nosniff"),e.ieNoOpen&&r.setHeader("X-Download-Options","noopen"),e.xssFilter&&r.setHeader("X-XSS-Protection","0"),e.referrerPolicy&&r.setHeader("Referrer-Policy",e.referrerPolicy),e.crossOriginResourcePolicy&&r.setHeader("Cross-Origin-Resource-Policy",e.crossOriginResourcePolicy),e.crossOriginOpenerPolicy&&r.setHeader("Cross-Origin-Opener-Policy",e.crossOriginOpenerPolicy),e.crossOriginEmbedderPolicy&&r.setHeader("Cross-Origin-Embedder-Policy",e.crossOriginEmbedderPolicy),e.contentSecurityPolicy&&r.setHeader("Content-Security-Policy",e.contentSecurityPolicy),await o();}};var Ne=class extends x{constructor(e){super(`JSON_NOT_VALID: "${JSON.stringify(e)}" is not a valid JSON`);}};var pr=100*1024,cr=s=>async(e,t,r)=>{if(!ms(e)||!se(e.method))return r();let o=Se(s?.sizeLimit,pr)??pr,n=e.rawBody;if(!n)return s?.parseEmptyBodyAsObject&&(e.body={}),r();let i=n.byteLength;if(!i)return s?.parseEmptyBodyAsObject&&(e.body={}),r();if(i>o){let a={status:413,message:"ERR_REQUEST_BODY_TOO_LARGE",...s?.customErrorMessage};return t.status(a.status).json({error:a.message})}try{let a=s?.encoding??"utf-8",p=new TextDecoder(a).decode(n);e.body=JSON.parse(p);}catch(a){return a instanceof SyntaxError?t.badRequest({...P(new Ne("Invalid JSON syntax"))}):t.badRequest({...P(new Ne("Invalid request body encoding"))})}await r();};function ms(s){let e=hs(s);return e?fs(e)==="application/json":false}function hs(s){let e=s.headers.get("content-type")??s.headers.get("Content-Type");return e?Array.isArray(e)?e[0]||null:e:null}function fs(s){let e=s.trim(),t=e.indexOf(";");return t===-1?e.toLowerCase():e.substring(0,t).trim().toLowerCase()}var lr=s=>async(e,t,r)=>{try{let o=e.body;(s?.logRequest??!0)&&y.info({type:"request",requestId:e.id,method:s?.requestPayload?.method??!0?e.method:void 0,url:s?.requestPayload?.url??!0?e.url:void 0,ip:s?.requestPayload?.ip??!0?e.ip:void 0,headers:s?.requestPayload?.headers??!0?e.headers:void 0,body:s?.requestPayload?.body??!1?dr(o):void 0});let n=performance.now();await r();let a=performance.now()-n;(s?.logResponse??!0)&&y.info({type:"response",requestId:e.id,status:s?.responsePayload?.status??t.responseStatus,duration:`${a.toFixed(2)}ms`,body:s?.responsePayload?.body??!1?dr(t.getBody()):void 0,headers:s?.responsePayload?.headers??!1?t.headers:void 0});}catch(o){throw y.error(o),o}};function dr(s){if(typeof s=="string"||s&&typeof s=="object"&&s.constructor===Object)return s}var gs=["POST"],ys="X-HTTP-Method-Override",vs=["GET","POST","PUT","PATCH","DELETE"],ur=s=>{let e=(s?.methods??gs).map(r=>r.toUpperCase()),t=s?.header??ys;return async(r,o,n)=>{let i=r.method.toUpperCase();if(!e.includes(i))return n();let a=r.headers.get(t);if(!a)return n();let p=a.toUpperCase();if(!vs.includes(p))return n();r.method=p,await n();}};var et=class{storage=new Map;windowMs;constructor(e){this.windowMs=e;}async set(e,t){this.storage.set(e,t),setTimeout(()=>{this.storage.delete(e);},this.windowMs);}async get(e){let t=this.storage.get(e);return t||0}async delete(e){this.storage.delete(e);}};var mr=(s,e)=>{let t={type:"ip",limit:100,message:"ERR_RATE_LIMIT_EXCEEDED",statusCode:429,...s},r={type:"memory",...e};r.type==="memory"&&!r.windowMs&&(r.windowMs=6e4);let o=r.type==="memory"?new et(r.windowMs):{get:r.get,set:r.set};return async(n,i,a)=>{let p=t.type==="ip"?n.ip:t.key(n),c=await o.get(p);return c>=t.limit?i.status(t.statusCode).json({message:t.message}):(await o.set(p,c+1),a())}};var tt=class{store=new Map;async get(e){let t=this.store.get(e);if(t){if(t.exp&&Date.now()>t.exp){this.store.delete(e);return}return t.value}}async set(e,t,r){let o=r?Date.now()+r*1e3:void 0;this.store.set(e,{value:t,exp:o});}async destroy(e){this.store.delete(e);}};var hr=s=>{let e=s?.name??"sid",t=s?.ttl??3600*24,r=s?.store??new tt,o={path:"/",httpOnly:true,secure:false,sameSite:"Lax",...s?.cookie??{}};return async(n,i,a)=>{let c=n.cookies&&n.cookies[e],d=c?await r.get(c):void 0;(!c||!d)&&(c||=Y.randomUUID(),d||={},await r.set(c,d,t),i.cookie?.(e,c,o)),n.session=d,n.saveSession=async()=>r.set(c,d,t),n.destroySession=async()=>{await r.destroy(c),i.clearCookie?.(e,o);},await a(),await r.set(c,d,t);}};var gr=s=>{let e={type:"standard",path:"/docs",title:"Balda API Documentation",description:"API Documentation from the Balda Framework",version:"1.0.0",servers:["http://localhost"],security:[],tags:[],components:{},securitySchemes:{},models:{}};s&&typeof s!="boolean"&&(e={...e,...s});let t=bs(e),r=`${e.path}`,o=`${r}/json`,n;e.type==="rapidoc"?n=xs(o,e):e.type==="scalar"?n=Rs(o,e):e.type==="elements"?n=Ts(o,e):e.type==="custom"?n=e.customUIGenerator(o,e):n=Ss(o,e),C.addOrUpdate("GET",r,[],(i,a)=>{a.html(n);}),C.addOrUpdate("GET",o,[],(i,a)=>{a.json(t);});},ne=s=>s?s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;"):"";function oe(s){try{return z$1.toJSONSchema(s)}catch(e){if(e instanceof Error&&e.message.includes("Custom types cannot be represented in JSON Schema")){let t=s._def;if(t?.typeName==="ZodInstanceof"){let r=new File([],"test");if(s.safeParse(r).success)return {type:"string",format:"binary"}}if(t?.typeName==="ZodObject"&&t?.shape){let r={},o=[];for(let[n,i]of Object.entries(t.shape))try{r[n]=oe(i);let a=i._def;a?.typeName!=="ZodOptional"&&a?.typeName!=="ZodDefault"&&o.push(n);}catch{r[n]={type:"string",format:"binary"};}return {type:"object",properties:r,...o.length>0?{required:o}:{}}}return {type:"object",description:"Custom type"}}throw e}}function bs(s){let e=C.getRoutes(),t={},r;if(s.models)if(Array.isArray(s.models))r=s.models.reduce((n,i,a)=>{let c=i&&typeof i=="object"&&"_def"in i?oe(i):i,d=c.$id||c.title||`Model${a}`;return n[d]=c,n},{});else {r={};for(let[n,i]of Object.entries(s.models)){let a=i&&typeof i=="object"&&"_def"in i;r[n]=a?oe(i):i;}}let o={...s.components,securitySchemes:s.securitySchemes||{},schemas:r?{...s.components?.schemas||{},...r}:s.components?.schemas?{...s.components.schemas}:void 0};for(let n of e){let i=n.swaggerOptions;if(i?.excludeFromSwagger)continue;t[n.path]||(t[n.path]={});let a=n.method.toLowerCase(),p={summary:i?.name||`${a.toUpperCase()} ${n.path}`,description:i?.description||"",tags:i?.service?[i.service]:[],deprecated:i?.deprecated||false},c=[];if(i?.query&&i.query.type==="object"&&i.query.shape)for(let[d,l]of Object.entries(i.query.shape))c.push({name:d,in:"query",required:Array.isArray(i.query.shape[d].required)?i.query.shape[d].required.includes(d):false,schema:oe(l)});if(i&&i.params?c=c.concat(fr(n.path,i.params)):c=c.concat(fr(n.path)),c.length>0&&(p.parameters=c),i?.requestBody){let d="application/json";i.bodyType==="form-data"?d="multipart/form-data":i.bodyType==="urlencoded"&&(d="application/x-www-form-urlencoded"),p.requestBody={content:{[d]:{schema:oe(i.requestBody)}},required:true};}else i?.bodyType&&(i.bodyType.includes("form-data")||i.bodyType.includes("urlencoded"))&&(p.requestBody={content:{[i.bodyType]:{schema:{type:"object"}}},required:true});if(p.responses={},i?.responses)for(let[d,l]of Object.entries(i.responses))p.responses[d]={description:`Response for ${d}`,content:{"application/json":{schema:oe(l)}}};if(i?.errors)for(let[d,l]of Object.entries(i.errors))p.responses[d]={description:`Error response for ${d}`,content:{"application/json":{schema:oe(l)}}};if(Object.keys(p.responses).length===0&&(p.responses[200]={description:"Successful response",content:{"application/json":{schema:{type:"object"}}}}),i?.security){let d=[];Array.isArray(i.security)||(i.security=[i.security]);for(let l of i.security)if(l.type==="bearer")o.securitySchemes.bearer||(o.securitySchemes.bearer={type:"http",scheme:"bearer",bearerFormat:l.bearerFormat||"JWT",description:l.description}),d.push({bearer:[]});else if(l.type==="apiKey")o.securitySchemes[l.name]||(o.securitySchemes[l.name]={type:"apiKey",name:l.name,in:l.in,description:l.description}),d.push({[l.name]:[]});else if(l.type==="oauth2"){let h=l.name||"oauth2";o.securitySchemes[h]||(o.securitySchemes[h]={type:"oauth2",flows:l.flows,description:l.description}),d.push({[h]:[]});}else if(l.type==="openIdConnect"){let h=l.name||"openIdConnect";o.securitySchemes[h]||(o.securitySchemes[h]={type:"openIdConnect",openIdConnectUrl:l.openIdConnectUrl,description:l.description}),d.push({[h]:[]});}d.length&&(p.security=d);}else s.security&&(p.security=s.security);t[n.path][a]=p;}return {openapi:"3.0.0",info:{title:s.title,description:s.description,version:s.version,...s.info},servers:s.servers?.map(n=>({url:n}))||[{url:"/"}],paths:t,components:o,security:s.security||[],tags:s.tags?Object.entries(s.tags).map(([n,i])=>({name:n,...i})):[]}}function Ss(s,e){return `
305
+ `));let n=o.reduce((p,c)=>p+c.byteLength,0),i=new Uint8Array(n),a=0;for(let p of o)i.set(p,a),a+=p.byteLength;return i}validateOptions(e){let{body:t,formData:r,urlencoded:o}=e;if(t&&(r||o))throw new Error("Only one of body, formData, urlencoded can be provided");if(r&&(o||t))throw new Error("Only one of formData, urlencoded can be provided");if(o&&(t||r))throw new Error("Only one of urlencoded, body can be provided")}};var qe=new AsyncLocalStorage,Rt=s=>async(e,t,r)=>{let o={};for(let[n,i]of Object.entries(s))o[n]=i(e);qe.run(o,()=>{e.ctx=new Proxy({},{get(n,i){return qe.getStore()?.[i]},set(n,i,a){let p=qe.getStore();return p?(p[i]=a,true):false},ownKeys(){let n=qe.getStore();return n?Object.keys(n):[]},has(n,i){let a=qe.getStore();return a?i in a:false}}),r();});};var zt=()=>async(s,e,t)=>(se(s.method)&&(s.rawBody=await s.arrayBuffer(),Object.defineProperty(s,"body",{value:void 0,writable:true,configurable:true,enumerable:true})),t());var es=1024,ts=6,rs=[/text\/.+/,/application\/json/,/application\/javascript/,/application\/xml/,/application\/.*\+json/,/application\/.*\+xml/],Gt=s=>{let e=s?.threshold??es,t=Math.max(0,Math.min(9,s?.level??ts)),r=s?.filter??rs;return async(o,n,i)=>{if(!(o.headers.get("accept-encoding")||"").includes("gzip"))return i();let c=n.send.bind(n),d=n.json.bind(n),l=n.text.bind(n),h=(u,g)=>{if(!ss(u,g,e,r))return u;let b=Kt(u);if(!b||b.length<e)return u;let j=gzipSync(b,{level:t});return n.setHeader("Content-Encoding","gzip"),n.setHeader("Content-Length",j.length.toString()),j};n.send=function(u){let g=n.headers["content-type"],b=h(u,g);return c(b)},n.json=function(u){let g=JSON.stringify(u),b=h(g,"application/json");return b!==g?(n.setHeader("Content-Type","application/json"),c(b)):d(u)},n.text=function(u){let g=h(u,"text/plain");return g!==u?(n.setHeader("Content-Type","text/plain"),c(g)):l(u)},await i();}},ss=(s,e,t,r)=>{if(!s||!e)return false;let o=Kt(s);return !o||o.length<t?false:r.some(n=>n.test(e))},Kt=s=>typeof s=="string"?Buffer.from(s,"utf-8"):Buffer.isBuffer(s)?s:s instanceof Uint8Array?Buffer.from(s):typeof s=="object"?Buffer.from(JSON.stringify(s),"utf-8"):null;var Zt=s=>{let e={secret:s?.secret??"",defaults:{path:"/",httpOnly:true,secure:true,sameSite:"Lax",...s?.defaults},parse:s?.parse??true,sign:s?.sign??false};return async(t,r,o)=>{if(e.parse){let n=os(t.headers.get("cookie")||"");t.cookies={};for(let[i,a]of Object.entries(n)){if(e.sign&&e.secret){let p=await as(a,e.secret);p!==false&&(t.cookies[i]=p);continue}t.cookies[i]=a;}}r.cookie=(n,i,a)=>{Vt(r,n,i,{...e.defaults,...a},e);},r.clearCookie=(n,i)=>{ns(r,n,{...e.defaults,...i});},await o();}};function os(s){let e={};if(!s)return e;let t=s.split(";");for(let r of t){let[o,n]=r.trim().split("=");o&&n&&(e[decodeURIComponent(o)]=decodeURIComponent(n));}return e}async function Vt(s,e,t,r,o){let n=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;r.domain&&(n+=`; Domain=${r.domain}`),r.path&&(n+=`; Path=${r.path}`),r.expires&&(n+=`; Expires=${r.expires.toUTCString()}`),r.maxAge&&(n+=`; Max-Age=${r.maxAge}`),r.secure&&(n+="; Secure"),r.httpOnly&&(n+="; HttpOnly"),r.sameSite&&(n+=`; SameSite=${r.sameSite}`),r.priority&&(n+=`; Priority=${r.priority}`),o.sign&&o.secret&&(n=await is(n,o.secret));let i=s.headers["set-cookie"]||"",a=i?`${i}, ${n}`:n;s.setHeader("Set-Cookie",a);}function ns(s,e,t){let r={...t,expires:new Date(0),maxAge:0};Vt(s,e,"",r,{secret:"",sign:false});}async function is(s,e){let t=new TextEncoder,r=t.encode(e),o=t.encode(s),n=await crypto.subtle.importKey("raw",r,{name:"HMAC",hash:"SHA-256"},false,["sign"]),i=await crypto.subtle.sign("HMAC",n,o),a=new Uint8Array(i),p=Array.from(a).map(c=>c.toString(16).padStart(2,"0")).join("");return `${s}.${p}`}async function as(s,e){let t=s.split(".");if(t.length!==2)return false;let[r,o]=t,n=new TextEncoder,i=n.encode(e),a=n.encode(r),p=await crypto.subtle.importKey("raw",i,{name:"HMAC",hash:"SHA-256"},false,["sign"]),c=await crypto.subtle.sign("HMAC",p,a),d=new Uint8Array(c),l=Array.from(d).map(h=>h.toString(16).padStart(2,"0")).join("");return o===l?r:false}var Wt=s=>{let e={origin:"*",methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],allowedHeaders:"",exposedHeaders:"",credentials:false,maxAge:void 0,preflightContinue:false,optionsSuccessStatus:204,...s};return async(t,r,o)=>{let n=t.headers.get("origin")||"";if(t.method==="OPTIONS")return ps(t,r,e,n,o);cs(t,r,e,n),await o();}};function ps(s,e,t,r,o){let n=Jt(t,r);if(!n){e.forbidden("CORS origin not allowed");return}if(Yt(e,t,n),t.preflightContinue){o();return}e.status(t.optionsSuccessStatus||204),e.send("");}function cs(s,e,t,r){let o=Jt(t,r);o&&Yt(e,t,o);}function Jt(s,e){if(typeof s.origin=="string")return s.origin;if(Array.isArray(s.origin)){let t=s.origin.find(r=>typeof r=="string"?r===e:r instanceof RegExp&&r.test(e));return typeof t=="string"?t:false}return "*"}function Yt(s,e,t){if(s.setHeader("Access-Control-Allow-Origin",t),e.credentials&&s.setHeader("Access-Control-Allow-Credentials","true"),e.exposedHeaders&&e.exposedHeaders!==""){let o=Array.isArray(e.exposedHeaders)?e.exposedHeaders.join(","):e.exposedHeaders;s.setHeader("Access-Control-Expose-Headers",o);}if(e.allowedHeaders&&e.allowedHeaders!==""){let o=Array.isArray(e.allowedHeaders)?e.allowedHeaders.join(","):e.allowedHeaders;s.setHeader("Access-Control-Allow-Headers",o);}let r=Array.isArray(e.methods)?e.methods.join(","):e.methods;s.setHeader("Access-Control-Allow-Methods",String(r||"")),typeof e.maxAge=="number"&&s.setHeader("Access-Control-Max-Age",e.maxAge.toString());}function Xt(s,e=""){let t=new URL(s.url),r=Object.fromEntries(s.headers.entries());return {body:s.body,query:s.query,params:s.params,cookies:s.cookies,session:s.session,originalUrl:t.pathname+t.search,baseUrl:e,path:t.pathname.replace(e,"")||"/",method:s.method,ip:s.ip,headers:r,url:t.pathname,get(n){return s.headers.get(n.toLowerCase())??void 0},header(n){return s.headers.get(n.toLowerCase())??void 0},app:{},res:null,route:null,protocol:t.protocol.replace(":",""),secure:t.protocol==="https:",hostname:t.hostname,host:t.host,fresh:false,stale:true,xhr:r["x-requested-with"]?.toLowerCase()==="xmlhttprequest",accepts:()=>{},acceptsCharsets:()=>{},acceptsEncodings:()=>{},acceptsLanguages:()=>{},is:()=>null,range:()=>{},param:n=>s.params[n]??s.query[n],files:s.files,file:s.file,rawBody:s.rawBody}}function er(s){return {locals:{},headersSent:false,statusCode:s.responseStatus,status(t){return s.status(t),this.statusCode=t,this},sendStatus(t){return this.status(t).send(String(t)),this},send(t){if(this.headersSent=true,!!!s.headers["Content-Type"]&&typeof t=="string"){let o=t.trim();if(o.startsWith("<!DOCTYPE")||o.startsWith("<html")||o.startsWith("<HTML"))return s.html(t),this}return s.send(t),this},json(t){return this.headersSent=true,s.json(t),this},redirect(t,r){this.headersSent=true;let o=typeof t=="string"?t:r,n=typeof t=="number"?t:302;return s.status(n).setHeader("Location",o),s.send(""),this},setHeader(t,r){let o=Array.isArray(r)?r.join(", "):String(r);return s.setHeader(t,o),this},set(t,r){if(typeof t=="object")for(let[o,n]of Object.entries(t))s.setHeader(o,n);else r!==void 0&&s.setHeader(t,r);return this},header(t,r){return this.set(t,r)},type(t){return s.setHeader("Content-Type",t),this},contentType(t){return this.type(t)},end(t){return this.headersSent=true,s.send(t??""),this},write(t){return true},get(t){return s.headers[t]},getHeader(t){return s.headers[t]},removeHeader(t){return delete s.headers[t],this},append(t,r){let o=s.headers[t],n=Array.isArray(r)?r.join(", "):r;return s.setHeader(t,o?`${o}, ${n}`:n),this},cookie(t,r,o){return s.cookie?.(t,r,o),this},clearCookie(t,r){return s.clearCookie?.(t,r),this},render(t,r,o){throw new Error("render() is not supported in Express compatibility layer")},format(t){return this},attachment(t){return t?s.setHeader("Content-Disposition",`attachment; filename="${t}"`):s.setHeader("Content-Disposition","attachment"),this},sendFile(t,r,o){s.file(t);},download(t,r,o,n){let i=typeof r=="string"?r:t.split("/").pop();this.attachment(i),s.file(t);},links(t){let r=Object.entries(t).map(([o,n])=>`<${n}>; rel="${o}"`).join(", ");return s.setHeader("Link",r),this},location(t){return s.setHeader("Location",t),this},vary(t){return s.setHeader("Vary",t),this},app:{},req:null}}function ke(s,e=""){return async(t,r,o)=>{let n=Xt(t,e),i=er(r);await new Promise((a,p)=>{let c=d=>{if(d){p(d);return}a();};try{let d=s(n,i,c);d instanceof Promise&&d.catch(p);}catch(d){p(d);}}),await o();}}function ds(s,e=""){return async(t,r)=>{let o=Xt(t,e),n=er(r);await s(o,n,()=>{});}}function Ye(s,e){let t=Tt(s),r=e.stack;if(!r){console.warn("Express router has no stack - routes may not be registered");return}for(let o of r)tr(o,t);}function tr(s,e){if(s.route){let t=Tt(e+s.route.path),r=Object.keys(s.route.methods).filter(o=>s.route.methods[o]);for(let o of r){let n=s.route.stack.map(i=>i.handle);ls(o.toUpperCase(),t,n,e);}return}if(s.handle&&typeof s.handle=="function"){let t=s.path||"",r=Tt(e+t),o=s.handle.stack;if(o&&Array.isArray(o)){for(let p of o)tr(p,r);return}let n=r==="/"?"/*":`${r}/*`,i=ke(s.handle,e),a=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];for(let p of a)C.addOrUpdate(p,n,[i],async()=>{},{excludeFromSwagger:true});}}function ls(s,e,t,r){let o=t.slice(0,-1).map(a=>ke(a,r)),n=t[t.length-1],i=ds(n,r);C.addOrUpdate(s,e,o,i,{excludeFromSwagger:true});}function Tt(s){let e=s.replace(/\/+/g,"/");return e.startsWith("/")||(e="/"+e),e.length>1&&e.endsWith("/")&&(e=e.slice(0,-1)),e}function rr(s){return {use(e,t){if(typeof e=="string"){let n=e,i=t,a=i.stack;if(a&&Array.isArray(a)){Ye(n,i);return}s.use(ke(i,n));return}let r=e,o=r.stack;if(o&&Array.isArray(o)){Ye("/",r);return}s.use(ke(r));}}}var Xe=class extends x{constructor(e,t,r){super(`FILE_TOO_LARGE: "${e}" is too large. Max size is ${r} bytes, but got ${t} bytes`);}};H();var Ct=class{async tmpdir(){switch(S.type){case "node":case "bun":return (await import('os')).tmpdir();case "deno":return Deno.makeTempDir();default:throw new Error("Unsupported runtime")}}},sr=new Ct;var or=1024*1024,ir=s=>async(e,t,r)=>{let o=[];try{let n=e.headers.get("content-type")??e.headers.get("Content-Type");if(!n||!n.startsWith("multipart/form-data")||!e.rawBody)return r();let i=n.match(/boundary=(.*)(;|$)/i);if(!i)return r();let a=i[1].replace(/(^\s*"?|"?\s*$)/g,""),p=new Uint8Array(e.rawBody),c=new TextEncoder().encode(`--${a}`),d=new Uint8Array([13,10,13,10]),l=[],h=(R,E,J=0)=>{e:for(let D=J;D<=R.length-E.length;D++){for(let L=0;L<E.length;L++)if(R[D+L]!==E[L])continue e;return D}return -1},u=h(p,c);for(;u!==-1&&(u+=c.length,!(p[u]===45&&p[u+1]===45));){p[u]===13&&p[u+1]===10&&(u+=2);let R=h(p,d,u);if(R===-1)break;let E=p.subarray(u,R),J=new TextDecoder().decode(E),D=R+d.length,L=h(p,c,D);if(L===-1)break;let F=L-1;p[F]===10&&F--,p[F]===13&&F--;let Pt=p.subarray(D,F+1);l.push({headers:J,data:Pt}),u=L;}let g=[],b={},j=Se(s?.maxFileSize,or)??or;for(let R of l){let E=R.headers.split(`\r
306
+ `).find(_e=>_e.toLowerCase().startsWith("content-disposition:"));if(!E)continue;let J=E.match(/name="([^"]+)"/);if(!J)continue;let D=J[1],L=E.match(/filename="([^"]*)"/),F=L?L[1]:"";if(!!F){if(s?.maxFiles&&g.length>=s.maxFiles)return t.badRequest({...P(new x(`Too many files: Maximum ${s.maxFiles} files allowed`))});if(j&&R.data.length>j)return t.badRequest({...P(new Xe(F,R.data.length,j))});let _e=R.headers.split(`\r
307
+ `).find(qr=>qr.toLowerCase().startsWith("content-type:")),at=_e?_e.split(":")[1].trim():"application/octet-stream";if(s?.allowedMimeTypes&&!s.allowedMimeTypes.includes(at))return t.badRequest({...P(new x(`Invalid file type: "${at}" is not allowed. Allowed types: ${s.allowedMimeTypes.join(", ")}`))});let Mr=us(F),Ar=f.extName(Mr),pt=f.join(await sr.tmpdir(),`${Y.randomUUID()}${Ar}`);await m.writeFile(pt,R.data),o.push(pt),g.push({formName:D,mimeType:at,size:R.data.length,tmpPath:pt,originalName:F});}else b[D]=new TextDecoder().decode(R.data);}e.files=g,e.body=b,await r(),await nr(o);}catch(n){throw await nr(o),n}},nr=async s=>{await Promise.allSettled(s.map(e=>m.unlink(e)));},us=s=>s.replace(/\.\./g,"").replace(/[\/\\]/g,"").replace(/\0/g,"").replace(/[\x00-\x1f\x80-\x9f]/g,"").trim();var ar=s=>{let e={dnsPrefetchControl:true,frameguard:{action:"SAMEORIGIN"},hsts:{maxAge:15552e3,includeSubDomains:true,preload:false},contentTypeOptions:true,ieNoOpen:true,xssFilter:true,referrerPolicy:"no-referrer",crossOriginResourcePolicy:"same-origin",crossOriginOpenerPolicy:"same-origin",crossOriginEmbedderPolicy:"require-corp",contentSecurityPolicy:false,...s};return async(t,r,o)=>{if(e.dnsPrefetchControl&&r.setHeader("X-DNS-Prefetch-Control","off"),e.frameguard){let n="SAMEORIGIN";typeof e.frameguard=="object"&&(n=e.frameguard.action),r.setHeader("X-Frame-Options",n);}if(e.hsts){let n={};typeof e.hsts=="object"&&(n=e.hsts);let i=n.maxAge!==void 0?n.maxAge:15552e3,a=n.includeSubDomains!==void 0?n.includeSubDomains:true,p=n.preload!==void 0?n.preload:false,c=`max-age=${i}`;a!==false&&(c+="; includeSubDomains"),p&&(c+="; preload"),r.setHeader("Strict-Transport-Security",c);}e.contentTypeOptions&&r.setHeader("X-Content-Type-Options","nosniff"),e.ieNoOpen&&r.setHeader("X-Download-Options","noopen"),e.xssFilter&&r.setHeader("X-XSS-Protection","0"),e.referrerPolicy&&r.setHeader("Referrer-Policy",e.referrerPolicy),e.crossOriginResourcePolicy&&r.setHeader("Cross-Origin-Resource-Policy",e.crossOriginResourcePolicy),e.crossOriginOpenerPolicy&&r.setHeader("Cross-Origin-Opener-Policy",e.crossOriginOpenerPolicy),e.crossOriginEmbedderPolicy&&r.setHeader("Cross-Origin-Embedder-Policy",e.crossOriginEmbedderPolicy),e.contentSecurityPolicy&&r.setHeader("Content-Security-Policy",e.contentSecurityPolicy),await o();}};var Ne=class extends x{constructor(e){super(`JSON_NOT_VALID: "${JSON.stringify(e)}" is not a valid JSON`);}};var pr=100*1024,cr=s=>async(e,t,r)=>{if(!ms(e)||!se(e.method))return r();let o=Se(s?.sizeLimit,pr)??pr,n=e.rawBody;if(!n)return s?.parseEmptyBodyAsObject&&(e.body={}),r();let i=n.byteLength;if(!i)return s?.parseEmptyBodyAsObject&&(e.body={}),r();if(i>o){let a={status:413,message:"ERR_REQUEST_BODY_TOO_LARGE",...s?.customErrorMessage};return t.status(a.status).json({error:a.message})}try{let a=s?.encoding??"utf-8",p=new TextDecoder(a).decode(n);e.body=JSON.parse(p);}catch(a){return a instanceof SyntaxError?t.badRequest({...P(new Ne("Invalid JSON syntax"))}):t.badRequest({...P(new Ne("Invalid request body encoding"))})}await r();};function ms(s){let e=hs(s);return e?fs(e)==="application/json":false}function hs(s){let e=s.headers.get("content-type")??s.headers.get("Content-Type");return e?Array.isArray(e)?e[0]||null:e:null}function fs(s){let e=s.trim(),t=e.indexOf(";");return t===-1?e.toLowerCase():e.substring(0,t).trim().toLowerCase()}var lr=s=>async(e,t,r)=>{try{let o=e.body;(s?.logRequest??!0)&&y.info({type:"request",requestId:e.id,method:s?.requestPayload?.method??!0?e.method:void 0,url:s?.requestPayload?.url??!0?e.url:void 0,ip:s?.requestPayload?.ip??!0?e.ip:void 0,headers:s?.requestPayload?.headers??!0?e.headers:void 0,body:s?.requestPayload?.body??!1?dr(o):void 0});let n=performance.now();await r();let a=performance.now()-n;(s?.logResponse??!0)&&y.info({type:"response",requestId:e.id,status:s?.responsePayload?.status??t.responseStatus,duration:`${a.toFixed(2)}ms`,body:s?.responsePayload?.body??!1?dr(t.getBody()):void 0,headers:s?.responsePayload?.headers??!1?t.headers:void 0});}catch(o){throw y.error(o),o}};function dr(s){if(typeof s=="string"||s&&typeof s=="object"&&s.constructor===Object)return s}var gs=["POST"],ys="X-HTTP-Method-Override",vs=["GET","POST","PUT","PATCH","DELETE"],ur=s=>{let e=(s?.methods??gs).map(r=>r.toUpperCase()),t=s?.header??ys;return async(r,o,n)=>{let i=r.method.toUpperCase();if(!e.includes(i))return n();let a=r.headers.get(t);if(!a)return n();let p=a.toUpperCase();if(!vs.includes(p))return n();r.method=p,await n();}};var et=class{storage=new Map;windowMs;constructor(e){this.windowMs=e;}async set(e,t){this.storage.set(e,t),setTimeout(()=>{this.storage.delete(e);},this.windowMs);}async get(e){let t=this.storage.get(e);return t||0}async delete(e){this.storage.delete(e);}};var mr=(s,e)=>{let t={type:"ip",limit:100,message:"ERR_RATE_LIMIT_EXCEEDED",statusCode:429,...s},r={type:"memory",...e};r.type==="memory"&&!r.windowMs&&(r.windowMs=6e4);let o=r.type==="memory"?new et(r.windowMs):{get:r.get,set:r.set};return async(n,i,a)=>{let p=t.type==="ip"?n.ip:t.key(n),c=await o.get(p);return c>=t.limit?i.status(t.statusCode).json({message:t.message}):(await o.set(p,c+1),a())}};var tt=class{store=new Map;async get(e){let t=this.store.get(e);if(t){if(t.exp&&Date.now()>t.exp){this.store.delete(e);return}return t.value}}async set(e,t,r){let o=r?Date.now()+r*1e3:void 0;this.store.set(e,{value:t,exp:o});}async destroy(e){this.store.delete(e);}};var hr=s=>{let e=s?.name??"sid",t=s?.ttl??3600*24,r=s?.store??new tt,o={path:"/",httpOnly:true,secure:false,sameSite:"Lax",...s?.cookie??{}};return async(n,i,a)=>{let c=n.cookies&&n.cookies[e],d=c?await r.get(c):void 0;(!c||!d)&&(c||=Y.randomUUID(),d||={},await r.set(c,d,t),i.cookie?.(e,c,o)),n.session=d,n.saveSession=async()=>r.set(c,d,t),n.destroySession=async()=>{await r.destroy(c),i.clearCookie?.(e,o);},await a(),await r.set(c,d,t);}};var gr=s=>{let e={type:"standard",path:"/docs",title:"Balda API Documentation",description:"API Documentation from the Balda Framework",version:"1.0.0",servers:["http://localhost"],security:[],tags:[],components:{},securitySchemes:{},models:{}};s&&typeof s!="boolean"&&(e={...e,...s});let t=bs(e),r=`${e.path}`,o=`${r}/json`,n;e.type==="rapidoc"?n=xs(o,e):e.type==="scalar"?n=Rs(o,e):e.type==="elements"?n=Ts(o,e):e.type==="custom"?n=e.customUIGenerator(o,e):n=Ss(o,e),C.addOrUpdate("GET",r,[],(i,a)=>{a.html(n);}),C.addOrUpdate("GET",o,[],(i,a)=>{a.json(t);});},ne=s=>s?s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;"):"";function oe(s){try{return z$1.toJSONSchema(s)}catch(e){if(e instanceof Error&&e.message.includes("Custom types cannot be represented in JSON Schema")){let t=s._def;if(t?.typeName==="ZodInstanceof"){let r=new File([],"test");if(s.safeParse(r).success)return {type:"string",format:"binary"}}if(t?.typeName==="ZodObject"&&t?.shape){let r={},o=[];for(let[n,i]of Object.entries(t.shape))try{r[n]=oe(i);let a=i._def;a?.typeName!=="ZodOptional"&&a?.typeName!=="ZodDefault"&&o.push(n);}catch{r[n]={type:"string",format:"binary"};}return {type:"object",properties:r,...o.length>0?{required:o}:{}}}return {type:"object",description:"Custom type"}}throw e}}function bs(s){let e=C.getRoutes(),t={},r;if(s.models)if(Array.isArray(s.models))r=s.models.reduce((n,i,a)=>{let c=i&&typeof i=="object"&&"_def"in i?oe(i):i,d=c.$id||c.title||`Model${a}`;return n[d]=c,n},{});else {r={};for(let[n,i]of Object.entries(s.models)){let a=i&&typeof i=="object"&&"_def"in i;r[n]=a?oe(i):i;}}let o={...s.components,securitySchemes:s.securitySchemes||{},schemas:r?{...s.components?.schemas||{},...r}:s.components?.schemas?{...s.components.schemas}:void 0};for(let n of e){let i=n.swaggerOptions;if(i?.excludeFromSwagger)continue;t[n.path]||(t[n.path]={});let a=n.method.toLowerCase(),p={summary:i?.name||`${a.toUpperCase()} ${n.path}`,description:i?.description||"",tags:i?.service?[i.service]:[],deprecated:i?.deprecated||false},c=[];if(i?.query&&i.query.type==="object"&&i.query.shape)for(let[d,l]of Object.entries(i.query.shape))c.push({name:d,in:"query",required:Array.isArray(i.query.shape[d].required)?i.query.shape[d].required.includes(d):false,schema:oe(l)});if(i&&i.params?c=c.concat(fr(n.path,i.params)):c=c.concat(fr(n.path)),c.length>0&&(p.parameters=c),i?.requestBody){let d="application/json";i.bodyType==="form-data"?d="multipart/form-data":i.bodyType==="urlencoded"&&(d="application/x-www-form-urlencoded"),p.requestBody={content:{[d]:{schema:oe(i.requestBody)}},required:true};}else i?.bodyType&&(i.bodyType.includes("form-data")||i.bodyType.includes("urlencoded"))&&(p.requestBody={content:{[i.bodyType]:{schema:{type:"object"}}},required:true});if(p.responses={},i?.responses)for(let[d,l]of Object.entries(i.responses))p.responses[d]={description:`Response for ${d}`,content:{"application/json":{schema:oe(l)}}};if(i?.errors)for(let[d,l]of Object.entries(i.errors))p.responses[d]={description:`Error response for ${d}`,content:{"application/json":{schema:oe(l)}}};if(Object.keys(p.responses).length===0&&(p.responses[200]={description:"Successful response",content:{"application/json":{schema:{type:"object"}}}}),i?.security){let d=[];Array.isArray(i.security)||(i.security=[i.security]);for(let l of i.security)if(l.type==="bearer")o.securitySchemes.bearer||(o.securitySchemes.bearer={type:"http",scheme:"bearer",bearerFormat:l.bearerFormat||"JWT",description:l.description}),d.push({bearer:[]});else if(l.type==="apiKey")o.securitySchemes[l.name]||(o.securitySchemes[l.name]={type:"apiKey",name:l.name,in:l.in,description:l.description}),d.push({[l.name]:[]});else if(l.type==="oauth2"){let h=l.name||"oauth2";o.securitySchemes[h]||(o.securitySchemes[h]={type:"oauth2",flows:l.flows,description:l.description}),d.push({[h]:[]});}else if(l.type==="openIdConnect"){let h=l.name||"openIdConnect";o.securitySchemes[h]||(o.securitySchemes[h]={type:"openIdConnect",openIdConnectUrl:l.openIdConnectUrl,description:l.description}),d.push({[h]:[]});}d.length&&(p.security=d);}else s.security&&(p.security=s.security);t[n.path][a]=p;}return {openapi:"3.0.0",info:{title:s.title,description:s.description,version:s.version,...s.info},servers:s.servers?.map(n=>({url:n}))||[{url:"/"}],paths:t,components:o,security:s.security||[],tags:s.tags?Object.entries(s.tags).map(([n,i])=>({name:n,...i})):[]}}function Ss(s,e){return `
308
308
  <!DOCTYPE html>
309
309
  <html lang="en">
310
310
  <head>
@@ -434,6 +434,6 @@ ${l}\r
434
434
  <script src="https://unpkg.com/@stoplight/elements@7.7.9/web-components.min.js"></script>
435
435
  </body>
436
436
  </html>
437
- `}function fr(s,e){let t=[],r=/:([a-zA-Z0-9_]+)/g,o;for(;(o=r.exec(s))!==null;){let n=o[1],i={type:"string"};e&&e.shape&&e.shape[n]&&(i=oe(e.shape[n])||{type:"string"}),t.push({name:n,in:"path",required:true,schema:i});}return t}var yr=s=>async(e,t,r)=>{e.timeout=false;let o=setTimeout(()=>{e.timeout=true;},s.ms);try{await r();}finally{clearTimeout(o);}};var vr=s=>{let e=s?.header??"x-forwarded-for",t=s?.trust??true,r=s?.hop??"first";return async(o,n,i)=>{if(!t)return i();let a=o.headers.get(e);if(a&&typeof a=="string"){let p=a.split(",").map(c=>c.trim()).filter(Boolean);p.length&&(o.ip=r==="first"?p[0]:p[p.length-1]);}return i()}};var wr=1024*1024,br=s=>{let t={limit:Se(s?.limit,wr)??wr,extended:s?.extended??false,charset:s?.charset??"utf8",allowEmpty:s?.allowEmpty??true,parameterLimit:s?.parameterLimit??1e3};return async(r,o,n)=>{if(!(r.headers.get("content-type")||"").includes("application/x-www-form-urlencoded"))return n();try{await Cs(r,t),await n();}catch(a){if(a instanceof Error&&a.message.includes("limit")){o.status(413).json({error:"Payload too large",message:"Request body exceeds the size limit"});return}throw a}}};async function Cs(s,e){let t=s.rawBody;if(t.byteLength>e.limit)throw new Error(`Body size ${t.byteLength} exceeds limit ${e.limit}`);let o=new TextDecoder(e.charset).decode(t),n=Os(o,e);s.body=n;}function Os(s,e){let t={},r=new URLSearchParams(s);if(r.size>e.parameterLimit)throw new Error(`Too many parameters: ${r.size} exceeds limit ${e.parameterLimit}`);for(let[o,n]of r.entries())!e.allowEmpty&&n===""||(e.extended?Ps(t,o,n):t[o]=n);return t}function Ps(s,e,t){let r=["__proto__","constructor","prototype"];if(r.includes(e))return;let o=e.match(/\[([^\]]*)\]/g);if(!o){r.includes(e)||(s[e]=t);return}let n=s,i=e.split("[")[0];if(r.includes(i))return;for(let p=0;p<o.length-1;p++){let c=o[p].slice(1,-1);if(r.includes(c))return;if(n[i]||(n[i]={}),c===""){Array.isArray(n[i])||(n[i]=[]),n=n[i];continue}n[i][c]||(n[i][c]={}),n=n[i][c];}let a=o[o.length-1].slice(1,-1);if(!r.includes(a)){if(a===""){Array.isArray(n)||(n=[]),n.push(t);return}n[a]=t;}}var Ot=class{ITERATIONS=6e5;SALT_LENGTH=16;KEY_LENGTH=256;async hash(e){if(!e)throw new Error("Data to hash cannot be empty");let r=new TextEncoder().encode(e),o=crypto.getRandomValues(new Uint8Array(this.SALT_LENGTH)),n=await crypto.subtle.importKey("raw",r,{name:"PBKDF2"},false,["deriveBits"]),i=await crypto.subtle.deriveBits({name:"PBKDF2",salt:o,iterations:this.ITERATIONS,hash:"SHA-256"},n,this.KEY_LENGTH),a=this.encodeBase64(o),p=this.encodeBase64(new Uint8Array(i));return `${a}:${p}`}async compare(e,t){if(!e||!t)return false;try{let o=new TextEncoder().encode(t),n=e.split(":");if(n.length!==2)throw new Error("Invalid hash format");let[i,a]=n,p=this.decodeBase64(i),c=this.decodeBase64(a),d=await crypto.subtle.importKey("raw",o,{name:"PBKDF2"},!1,["deriveBits"]),l=await crypto.subtle.deriveBits({name:"PBKDF2",salt:p,iterations:this.ITERATIONS,hash:"SHA-256"},d,this.KEY_LENGTH),h=new Uint8Array(l);if(h.length!==c.length)return !1;let u=0;for(let g=0;g<h.length;g++)u|=h[g]^c[g];return u===0}catch{return false}}encodeBase64(e){let t="",r=e.byteLength;for(let o=0;o<r;o++)t+=String.fromCharCode(e[o]);return btoa(t)}decodeBase64(e){let t=atob(e),r=t.length,o=new Uint8Array(r);for(let n=0;n<r;n++)o[n]=t.charCodeAt(n);return o}},rt=new Ot;var st=class{port;hostname;host;routes;tapOptions;graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.hostname=e?.host??"0.0.0.0",this.host=e?.host??"0.0.0.0",this.url=`http://${this.host}:${this.port}`,this.tapOptions=e?.tapOptions,this.graphql=e?.graphql??new z,this.ensureGraphQLHandler=Ae(this.graphql);}listen(){let e=this.tapOptions?.bun,{fetch:t,websocket:r,...o}=e??{};this.runtimeServer=Bun.serve({port:this.port,hostname:this.hostname,fetch:async(n,i)=>{let a=new URL(n.url),p=C.find(n.method,a.pathname);if(Q.enrichRequest(n),n.params=p?.params??{},n.query=Object.fromEntries(a.searchParams.entries()),n.ip=n.headers.get("x-forwarded-for")?.split(",")[0]??i.requestIP(n)?.address,await t?.call(this,n,i),this.graphql.isEnabled&&a.pathname.startsWith(this.graphql.getYogaOptions().graphqlEndpoint??"/graphql")){let l=await this.ensureGraphQLHandler();if(l)return l.fetch(n,{server:i})}if(r&&n.headers.get("upgrade")==="websocket"&&i.upgrade(n,{data:{}}))return;let c=await re(p?.middleware??[],p?.handler??((l,h)=>{h.notFound({...P(new k(l.url,l.method))});}),n);return c.headers["Content-Type"]==="application/json"?Response.json(c.getBody(),{status:c.responseStatus,headers:c.headers}):new Response(c.getBody(),{status:c.responseStatus,headers:c.headers})},...r?{websocket:r}:{},...o}),this.url=this.runtimeServer.url.toString();}async close(){if(!this.runtimeServer)throw new Error("Server is not listening or not initialized");await this.runtimeServer.stop();}};var ot=class{graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.hostname=e?.host??"0.0.0.0",this.host=e?.host??"0.0.0.0",this.url=`http://${this.host}:${this.port}`,this.tapOptions=e?.tapOptions,this.graphql=e?.graphql??new z,this.ensureGraphQLHandler=Ae(this.graphql);}listen(){let e=this.tapOptions?.deno,{handler:t,...r}=e??{};this.runtimeServer=Deno.serve({port:this.port,hostname:this.hostname,handler:async(o,n)=>{let i=new URL(o.url),a=C.find(o.method,i.pathname);if(Q.enrichRequest(o),o.params=a?.params??{},o.query=Object.fromEntries(i.searchParams.entries()),o.ip=o.headers.get("x-forwarded-for")?.split(",")[0]??n.remoteAddr?.hostname,await t?.(o,n))return new Response(null,{status:426});if(this.graphql.isEnabled&&i.pathname.startsWith(this.graphql.getYogaOptions().graphqlEndpoint??"/graphql")){let l=await this.ensureGraphQLHandler();if(l)return l.fetch(o,{info:n})}if(o.headers.get("upgrade")==="websocket"&&this.tapOptions?.deno?.websocket){let{socket:l,response:h}=Deno.upgradeWebSocket(o);return this.tapOptions?.deno?.websocket?.open&&(l.onopen=()=>this.tapOptions?.deno?.websocket?.open?.(l)),this.tapOptions?.deno?.websocket?.message&&(l.onmessage=u=>{this.tapOptions?.deno?.websocket?.message?.(l,u.data);}),this.tapOptions?.deno?.websocket?.close&&(l.onclose=()=>this.tapOptions?.deno?.websocket?.close?.(l)),h}let c=await re(a?.middleware??[],a?.handler??((l,h)=>{h.notFound({...P(new k(l.url,l.method))});}),o);return c.headers["Content-Type"]==="application/json"?Response.json(c.getBody(),{status:c.responseStatus,headers:c.headers}):new Response(c.getBody(),{status:c.responseStatus,headers:c.headers})},...r}),this.url=`http://${this.host}:${this.port}`;}async close(){if(!this.runtimeServer)throw new Error("Server is not listening or not initialized");await this.runtimeServer.shutdown();}};async function qs(s,e){let t=s.getReader();try{for(;;){let{done:r,value:o}=await t.read();if(r){e.end();break}e.write(o);}}catch(r){e.destroy(r);}}var nt=class{port;host;url;routes;tapOptions;runtimeServer;nodeHttpClient;httpsOptions;graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.host=e?.host??"0.0.0.0",this.tapOptions=e?.tapOptions,this.nodeHttpClient=e?.nodeHttpClient??"http",this.httpsOptions=e?.nodeHttpClient==="https"||e?.nodeHttpClient==="http2-secure"?e?.httpsOptions:void 0,this.graphql=e?.graphql??new z,this.ensureGraphQLHandler=Ae(this.graphql);let t=this.nodeHttpClient==="https"||this.nodeHttpClient==="http2-secure"?"https":"http";this.url=`${t}://${this.host}:${this.port}`,this.runtimeServer=this.createServer(async(r,o)=>{if(this.tapOptions&&this.tapOptions.node){let g=this.tapOptions.node;await g?.(r);}if(this.graphql.isEnabled&&r.url?.startsWith(this.graphql.getYogaOptions().graphqlEndpoint??"/graphql")){let g=await this.ensureGraphQLHandler();if(g){g(r,o);return}}let n=C.find(r.method,r.url),i={};for(let g of Object.keys(r.headers)){if(g.startsWith(":"))continue;let b=r.headers[g];b!==void 0&&(i[g]=Array.isArray(b)?b.join(", "):b);}let a=new Q(`${this.url}${r.url}`,{method:r.method,body:se(r.method)?await this.readRequestBody(r):void 0,headers:i}),p=r.headers["x-forwarded-for"];Array.isArray(p)&&(p=p[0]),a.ip=p??r.socket.remoteAddress;let[c,d=""]=r.url?.split("?",2)??[];a.query=Object.fromEntries(new URLSearchParams(d)),a.params=n?.params??{};let l=new W;l.nodeResponse=o;let h=await re(n?.middleware??[],n?.handler??((g,b)=>{b.notFound({...P(new k(g.url,g.method))});}),a,l);if(o.headersSent||o.writableEnded)return;let u=h.getBody();if(u instanceof ReadableStream){qs(u,o);return}u instanceof Buffer||u instanceof Uint8Array||typeof u=="string"?u=u:h.headers["Content-Type"]==="application/json"&&typeof u!="string"?u=JSON.stringify(u):u=String(u),o.writeHead(h.responseStatus,h.headers),o.end(u);});}listen(){this.runtimeServer.listen(this.port,this.host);}async close(){return new Promise((e,t)=>{this.runtimeServer.close(r=>{r&&"code"in r&&r.code!=="ERR_SERVER_NOT_RUNNING"?t(r):e();});})}async readRequestBody(e){return new Promise((t,r)=>{let o=[];e.on("data",n=>o.push(Buffer.from(n))),e.on("error",r),e.on("end",()=>t(Buffer.concat(o).toString()));})}createServer(e){if(this.nodeHttpClient==="http")return createServer(e);if(this.nodeHttpClient==="http2")return createServer$1(e);if(this.nodeHttpClient==="http2-secure"){if(!this.httpsOptions)throw new Error("httpsOptions (key, cert) are required when using http2-secure client");return createSecureServer(this.httpsOptions,e)}if(!this.httpsOptions)throw new Error("httpsOptions (key, cert) are required when using https client");return createServer$2(this.httpsOptions,e)}};var it=class{routes;server;constructor(e){this.server=this.getRuntimeServer(e),this.routes=this.server.routes;}get url(){return this.server.url}get port(){return this.server.port}get host(){return this.server.host}getServer(e){return this.server.runtimeServer}listen(){return this.server.listen()}async close(){return this.server.close()}getRuntimeServer(e){if(e?.runtime==="bun")return new st(e);if(e?.runtime==="node")return new nt(e);if(e?.runtime==="deno")return new ot(e);throw new Error("No server implementation found for runtime: "+e?.runtime)}};H();var Sr=["isListening","url","port","host","routes","embed","constructor","get","post","put","patch","delete","getNodeServer","getBunServer","getDenoServer","use","setErrorHandler","listen","close","tapOptions","startUpOptions","tmpDir","logger","getMockServer","useExpress","expressMiddleware","mountExpressRouter","setNotFoundHandler","setGlobalCronErrorHandler","startRegisteredCrons","bootstrap","handleNotFound","registerNotFoundRoutes","importControllers","applyPlugins"];var xr=class{isListening;isProduction;graphql;router=C;wasInitialized;serverConnector;globalMiddlewares=[];serverOptions;controllerImportBlacklistedPaths=["node_modules"];notFoundHandler;nativeEnv=new je;httpsOptions;constructor(e){this.wasInitialized=false,this.serverOptions={nodeHttpClient:e?.nodeHttpClient??"http",port:e?.port??Number(this.nativeEnv.get("PORT"))??80,host:e?.host??this.nativeEnv.get("HOST")??"0.0.0.0",controllerPatterns:e?.controllerPatterns??[],plugins:e?.plugins??{},tapOptions:e?.tapOptions??{},swagger:e?.swagger??true,useBodyParser:e?.useBodyParser??true,graphql:e?.graphql??void 0},e?.ajvInstance&&N.setGlobalInstance(e.ajvInstance),this.httpsOptions=e?.nodeHttpClient==="https"||e?.nodeHttpClient==="http2-secure"?e.httpsOptions:void 0,this.isListening=false,this.isProduction=this.nativeEnv.get("NODE_ENV")==="production",this.graphql=new z(this.serverOptions.graphql),this.serverConnector=new it({routes:[],port:this.serverOptions.port,host:this.serverOptions.host,tapOptions:this.serverOptions.tapOptions,runtime:S.type,nodeHttpClient:this.serverOptions.nodeHttpClient,httpsOptions:this.httpsOptions,graphql:this.graphql}),this.serverOptions.useBodyParser&&this.use(zt());}get url(){return this.serverConnector.url}get port(){return this.serverConnector.port}get host(){return this.serverConnector.host}get routes(){return C.getRoutes()||[]}async hash(e){return rt.hash(e)}async compareHash(e,t){return rt.compare(e,t)}getEnvironment(){return this.nativeEnv.getEnvironment()}tmpDir(...e){return f.join("tmp",...e)}async mkdir(e,t){await m.mkdir(e,t);}get(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("GET",e,o,n,i);}post(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("POST",e,o,n,i);}patch(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("PATCH",e,o,n,i);}put(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("PUT",e,o,n,i);}delete(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("DELETE",e,o,n,i);}options(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("OPTIONS",e,o,n,i);}head(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("HEAD",e,o,n,i);}group(e,t,r){this.router.group(e,t,r);}getNodeServer(){if(S.type!=="node")throw new Error("Server is not using node runtime, you can't call `.getNodeServer()`");return this.serverConnector.getServer("node")}getBunServer(){if(S.type!=="bun")throw new Error("Server is not using bun runtime, you can't call `.getBunServer()`");return this.serverConnector.getServer("bun")}getDenoServer(){if(S.type!=="deno")throw new Error("Server is not using deno runtime, you can't call `.getDenoServer()`");return this.serverConnector.getServer("deno")}embed(e,t){if(typeof e!="string"||e.trim()==="")throw new Error(`Invalid key provided to embed: ${e}. Key must be a non-empty string.`);if(Sr.includes(e))throw new Error(`Cannot embed value with key '${e}' as it conflicts with a protected server property.`);Object.defineProperty(this,e,{value:t,writable:false,configurable:true,enumerable:true});}exit(e=0){switch(S.type){case "bun":case "node":process.exit(e);case "deno":Deno.exit(e);default:throw new Error(`Unsupported runtime: ${S.type}`)}}on(e,t){switch(S.type){case "bun":case "node":process.on(e,t);break;case "deno":Deno.addSignalListener(e,t);break;default:throw new Error(`Unsupported runtime: ${S.type}, only node, bun and deno are supported`)}}once(e,t){switch(S.type){case "bun":case "node":process.once(e,t);break;case "deno":Deno.addSignalListener(e,t);break;default:throw new Error(`Unsupported runtime: ${S.type}, only node, bun and deno are supported`)}}use(...e){this.globalMiddlewares.push(...e);}useExpress(e,t){rr(this).use(e,t);}expressMiddleware(e){return ke(e)}mountExpressRouter(e,t){Ye(e,t);}setErrorHandler(e){this.globalMiddlewares.unshift(async(t,r,o)=>{try{await o();}catch(n){await e?.(t,r,o,n);}});}setNotFoundHandler(e){this.notFoundHandler=e?.bind(this);}listen(e){if(this.isListening)throw new Error("Server is already listening, you can't call `.listen()` multiple times");this.bootstrap().then(()=>{this.serverConnector.listen(),this.isListening=true,this.serverOptions.swagger&&gr(this.serverOptions.swagger),e?.({port:this.port,host:this.host,url:this.url});});}async close(){await this.serverConnector.close(),this.isListening=false;}async getMockServer(e){return await this.bootstrap(e),new Je(this)}async importControllers(e){let t=e??this.serverOptions.controllerPatterns,r=await Promise.all(t.map(async o=>glob(o,{absolute:true,cwd:M.getCwd()}))).then(o=>o.flat());r=r.flat(),r=r.filter(o=>!this.controllerImportBlacklistedPaths.some(n=>o.includes(n))),y.debug(`Found ${r.length} controllers to import`),await Promise.all(r.map(async o=>{y.debug(`Importing controller ${o}`),await import(o).catch(n=>{y.error(`Error importing controller ${o}: ${n}`);});}));}extractOptionsAndHandlerFromRouteRegistration(e,t){if(typeof e=="function")return {middlewares:[],handler:e,swaggerOptions:void 0};let r=e;return {middlewares:Array.isArray(r.middlewares)?r.middlewares:r.middlewares?[r.middlewares]:[],handler:t,swaggerOptions:r.swagger}}applyPlugins(e){Object.entries(e).forEach(([t,r])=>{switch(t){case "cors":this.use(Wt(r));break;case "json":this.use(cr(r));break;case "static":this.use(Qt(r));break;case "fileParser":this.use(ir(r));break;case "helmet":this.use(ar(r));break;case "cookie":this.use(Zt(r));break;case "methodOverride":this.use(ur(r));break;case "compression":this.use(Gt(r));break;case "log":this.use(lr(r));break;case "rateLimiter":let{keyOptions:o,storageOptions:n}=r;this.use(mr(o,n));break;case "urlencoded":this.use(br(r));break;case "trustProxy":this.use(vr(r));break;case "timeout":this.use(yr(r));break;case "session":this.use(hr(r));break;case "asyncLocalStorage":this.use(Rt(r));break;default:y.warn(`Unknown plugin ${t}`);break}});}async bootstrap(e){this.wasInitialized||(await this.importControllers(e?.controllerPatterns),this.applyPlugins(this.serverOptions.plugins),this.registerNotFoundRoutes(),this.globalMiddlewares.length&&C.applyGlobalMiddlewaresToAllRoutes(this.globalMiddlewares),this.wasInitialized=true);}handleNotFound=(e,t)=>{if(this.notFoundHandler){this.notFoundHandler(e,t);return}let r=new URL(e.url).pathname,o=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"],n=[];for(let a of o){if(a===e.method.toUpperCase())continue;let p=C.find(a,r);p&&p.handler!==this.handleNotFound&&n.push(a);}if(n.length){t.setHeader("Allow",n.join(", "));let a=new Ee(r,e.method);t.methodNotAllowed({...P(a)});return}let i=new k(r,e.method);t.notFound({...P(i)});};registerNotFoundRoutes(){let e=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];for(let t of e)C.addOrUpdate(t,"*",[],this.handleNotFound,{excludeFromSwagger:true});}};var G=class extends x{constructor(e){super(`File not found: ${e}`);}};var Rr=class{constructor(e){this.options=e;}async getDownloadUrl(e,t=3600){await this.ensureClient();let r=this.containerClient.getBlockBlobClient(e),o=new Date(Date.now()-300*1e3),n=new Date(Date.now()+t*1e3),i=this.azureBlobLib.BlobSASPermissions.parse("r"),a=this.azureBlobLib.generateBlobSASQueryParameters({containerName:this.options.containerName,blobName:e,permissions:i,startsOn:o,expiresOn:n},this.sharedKeyCredential).toString();return `${r.url}?${a}`}async getUploadUrl(e,t=3600){await this.ensureClient();let r=this.containerClient.getBlockBlobClient(e),o=new Date(Date.now()-300*1e3),n=new Date(Date.now()+t*1e3),i=this.azureBlobLib.BlobSASPermissions.parse("w"),a=this.azureBlobLib.generateBlobSASQueryParameters({containerName:this.options.containerName,blobName:e,permissions:i,startsOn:o,expiresOn:n},this.sharedKeyCredential).toString();return `${r.url}?${a}`}async listObjects(e){await this.ensureClient();let t=[],r=e?e.endsWith("/")?e:`${e}/`:void 0;for await(let o of this.containerClient.listBlobsFlat({prefix:r}))t.push(o.name);return t}async getObject(e,t="raw"){await this.ensureClient();try{let o=await this.containerClient.getBlockBlobClient(e).download();if(!o.readableStreamBody)throw new G(e);let n=t;if(n==="stream")return Readable.toWeb(o.readableStreamBody);let i=[];for await(let p of o.readableStreamBody)i.push(Buffer.isBuffer(p)?p:Buffer.from(p));let a=Buffer.concat(i);switch(n){case "raw":return new Uint8Array(a);case "text":return a.toString();default:throw new x("Invalid return type")}}catch(r){throw r.statusCode===404?new G(e):r}}async putObject(e,t,r){await this.ensureClient();let o=this.containerClient.getBlockBlobClient(e),n=t;await o.upload(n,n.length,{blobHTTPHeaders:{blobContentType:r||"application/octet-stream"}});}async deleteObject(e){await this.ensureClient();let t=this.containerClient.getBlockBlobClient(e);try{await t.delete();}catch(r){if(r&&typeof r=="object"&&"statusCode"in r&&r.statusCode===404)return;throw r}}async ensureClient(){if(this.azureBlobLib)return;this.azureBlobLib=await import('@azure/storage-blob').catch(()=>{throw new x("Library not installed: @azure/storage-blob, try run npm install @azure/storage-blob")}),this.blobServiceClient=this.azureBlobLib.BlobServiceClient.fromConnectionString(this.options.connectionString),this.containerClient=this.blobServiceClient.getContainerClient(this.options.containerName);let e=this.blobServiceClient.credential;if(!(e instanceof this.azureBlobLib.StorageSharedKeyCredential))throw new x("BlobStorage requires a shared key credential to generate SAS URLs");this.sharedKeyCredential=e;}};var Tr=class{constructor(e){this.options=e;}wasDirectoryEnsured=false;async getDownloadUrl(e,t=3600){throw new x("LocalStorageProvider does not support getDownloadUrl. Use S3 or Azure Blob storage for signed URLs.")}async getUploadUrl(e,t=3600){throw new x("LocalStorageProvider does not support getUploadUrl. Use S3 or Azure Blob storage for signed URLs.")}async listObjects(e){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let t=f.resolve(this.options.directory),r=e?f.join(t,e):t;if(!await m.exists(r))return [];let n=[];return await this.listFilesRecursively(r,t,n),n}async getObject(e,t="raw"){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let r=f.join(this.options.directory,e);if(!await m.exists(r))throw new G(e);switch(t){case "raw":return await m.readFile(r);case "text":return await m.readFile(r,{encoding:"utf8"});case "stream":return await m.streamFile(r);default:throw new x("Invalid return type")}}async putObject(e,t,r){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let o=f.join(this.options.directory,e),n=f.join(o,"..");await m.mkdir(n,{recursive:true}),await m.writeFile(o,t);}async deleteObject(e){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let t=f.join(this.options.directory,e);await m.exists(t)&&await m.unlink(t);}async listFilesRecursively(e,t,r){let o=await m.stat(e);if(o.isFile){let i=e.replace(t,"").replace(/^\//,"");r.push(i);return}if(!o.isDirectory)return;let n=await this.readDirectory(e);for(let i of n){let a=f.join(e,i);await this.listFilesRecursively(a,t,r);}}async readDirectory(e){let{runtime:t}=await Promise.resolve().then(()=>(H(),Mt));switch(t.type){case "node":return await(await import('fs/promises')).readdir(e);case "bun":return await(await import('fs/promises')).readdir(e);case "deno":{let r=[];for await(let o of Deno.readDir(e))r.push(o.name);return r}default:throw new x("Unsupported runtime")}}async ensureDirectoryExists(){await m.exists(this.options.directory)||(await m.mkdir(this.options.directory,{recursive:true}),this.wasDirectoryEnsured=true);}};var Cr=class{options;constructor(e){this.options=e;}async getDownloadUrl(e,t=3600){if(await this.ensureClient(),!this.options.cloudfrontOptions)throw new x("getDownloadUrl requires CloudFront configuration");let{domainName:r,keyPairId:o,privateKey:n}=this.options.cloudfrontOptions,i=`https://${r}/${e}`,a=new Date(Date.now()+t*1e3).toISOString();return this.cloudfrontSignerLib.getSignedUrl({url:i,keyPairId:o,privateKey:n,dateLessThan:a})}async getUploadUrl(e,t=3600){await this.ensureClient();let r=new this.s3Lib.PutObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});return this.s3PresignerLib.getSignedUrl(this.s3Client,r,{expiresIn:t})}async listObjects(e){await this.ensureClient();let t=new this.s3Lib.ListObjectsV2Command({Bucket:this.options.s3ClientConfig.bucketName,Prefix:e});return (await this.s3Client.send(t)).Contents?.map(o=>o.Key).filter(Boolean)??[]}async getObject(e,t="raw"){await this.ensureClient();let r=new this.s3Lib.GetObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});try{let o=await this.s3Client.send(r);if(!o.Body)throw new G(e);switch(t){case "raw":return await o.Body.transformToByteArray();case "text":return await o.Body.transformToString();case "stream":return o.Body.transformToWebStream();default:throw new x("Invalid return type")}}catch(o){throw o.name==="NoSuchKey"?new G(e):o}}async putObject(e,t,r){await this.ensureClient();let o=new this.s3Lib.PutObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e,Body:t,ContentType:r});await this.s3Client.send(o);}async deleteObject(e){await this.ensureClient();let t=new this.s3Lib.DeleteObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});await this.s3Client.send(t);}async ensureClient(){this.s3Lib||(this.s3Lib=await import('@aws-sdk/client-s3').then(e=>e.default).catch(()=>{throw new x("Library not installed: @aws-sdk/client-s3, try run npm install @aws-sdk/client-s3")}),this.s3PresignerLib=await import('@aws-sdk/s3-request-presigner').then(e=>e.default).catch(()=>{throw new x("Library not installed: @aws-sdk/s3-request-presigner, try run npm install @aws-sdk/s3-request-presigner")}),this.options.cloudfrontOptions&&(this.cloudfrontSignerLib=await import('@aws-sdk/cloudfront-signer').then(e=>e.default).catch(()=>{throw new x("Library not installed: @aws-sdk/cloudfront-signer, try run npm install @aws-sdk/cloudfront-signer")})),this.s3Client=new this.s3Lib.S3Client(this.options.s3ClientConfig??{}));}};var Or=class{providerOptions;defaultProvider;providerMap;constructor(e,t){this.providerOptions=e,this.defaultProvider=t.defaultProvider,this.providerMap=new Map(Object.entries(e).map(([r,o])=>[r,o]));}use(e){let t=this.providerMap.get(e);if(!t)throw new Error(`[Storage] Provider ${String(e)} not found`);return t}async getDownloadUrl(e,t){return this.providerOptions[this.defaultProvider].getDownloadUrl(e,t)}async getUploadUrl(e,t){return this.providerOptions[this.defaultProvider].getUploadUrl(e,t)}async listObjects(e){return this.providerOptions[this.defaultProvider].listObjects(e)}async getObject(e,t="raw"){return this.providerOptions[this.defaultProvider].getObject(e,t)}async putObject(e,t,r){return this.providerOptions[this.defaultProvider].putObject(e,t,r)}async deleteObject(e){return this.providerOptions[this.defaultProvider].deleteObject(e)}};var Pr=class{};var jr=s=>(e,t)=>(r,o,n)=>{let i={scope:e,handler:t,manager:s};if(typeof o>"u"){let p=v.get(r.prototype,"__class__");return p||(p={policies:[]}),p.policies||(p.policies=[]),p.policies.push(i),v.set(r.prototype,"__class__",p),r}let a=v.get(r,o);return a||(a={policies:[]}),a.policies||(a.policies=[]),a.policies.push(i),v.set(r,o,a),n};var Er=class{providers;constructor(e){this.providers=e;}createDecorator(){return jr(this)}canAccess(e,t,...r){let o=this.providers[e];if(!o)throw new x(`Policy provider for ${String(e)} not found`);return o[t](...r)}};var Dl=C;
438
- export{ao as ARG_SYMBOL,Rr as AzureBlobStorageProvider,Ht as BaseCron,Dt as BaseMqtt,Pr as BasePlugin,Ft as BaseQueue,Ue as BullMQPubSub,O as Command,bt as CommandRegistry,be as CronService,z as GraphQL,Tr as LocalStorageProvider,$e as MqttService,Qe as PGBossPubSub,Er as PolicyManager,ee as QueueManager,Ge as QueueService,Q as Request,W as Response,Cr as S3StorageProvider,ze as SQSPubSub,xr as Server,Or as Storage,ae as VALIDATION_ERROR_SYMBOL,A as arg,Rt as asyncLocalStorage,qe as asyncStorage,Zr as baseCommands,Pe as commandRegistry,Gt as compression,So as controller,Zt as cookie,Wt as cors,rr as createExpressAdapter,jr as createPolicyDecorator,Vs as cron,Ls as defineLoggerConfig,Yn as defineQueueConfiguration,To as del,ds as expressHandler,ke as expressMiddleware,ir as fileParser,T as flag,Po as get,xt as getContentType,rt as hash,ar as helmet,cr as json,lr as log,y as logger,ur as methodOverride,Do as middleware,Ye as mountExpressRouter,Bn as mqtt,Mo as patch,ko as post,Gn as publish,No as put,Te as queue,mr as rateLimiter,Dl as router,Yo as serialize,Qt as serveStatic,hr as session,Gs as setCronGlobalErrorHandler,Fn as setMqttGlobalErrorHandler,yr as timeout,vr as trustProxy,br as urlencoded,rn as validate};//# sourceMappingURL=index.js.map
437
+ `}function fr(s,e){let t=[],r=/:([a-zA-Z0-9_]+)/g,o;for(;(o=r.exec(s))!==null;){let n=o[1],i={type:"string"};e&&e.shape&&e.shape[n]&&(i=oe(e.shape[n])||{type:"string"}),t.push({name:n,in:"path",required:true,schema:i});}return t}var yr=s=>async(e,t,r)=>{e.timeout=false;let o=setTimeout(()=>{e.timeout=true;},s.ms);try{await r();}finally{clearTimeout(o);}};var vr=s=>{let e=s?.header??"x-forwarded-for",t=s?.trust??true,r=s?.hop??"first";return async(o,n,i)=>{if(!t)return i();let a=o.headers.get(e);if(a&&typeof a=="string"){let p=a.split(",").map(c=>c.trim()).filter(Boolean);p.length&&(o.ip=r==="first"?p[0]:p[p.length-1]);}return i()}};var wr=1024*1024,br=s=>{let t={limit:Se(s?.limit,wr)??wr,extended:s?.extended??false,charset:s?.charset??"utf8",allowEmpty:s?.allowEmpty??true,parameterLimit:s?.parameterLimit??1e3};return async(r,o,n)=>{if(!(r.headers.get("content-type")||"").includes("application/x-www-form-urlencoded"))return n();try{await Cs(r,t),await n();}catch(a){if(a instanceof Error&&a.message.includes("limit")){o.status(413).json({error:"Payload too large",message:"Request body exceeds the size limit"});return}throw a}}};async function Cs(s,e){let t=s.rawBody;if(t.byteLength>e.limit)throw new Error(`Body size ${t.byteLength} exceeds limit ${e.limit}`);let o=new TextDecoder(e.charset).decode(t),n=Os(o,e);s.body=n;}function Os(s,e){let t={},r=new URLSearchParams(s);if(r.size>e.parameterLimit)throw new Error(`Too many parameters: ${r.size} exceeds limit ${e.parameterLimit}`);for(let[o,n]of r.entries())!e.allowEmpty&&n===""||(e.extended?Ps(t,o,n):t[o]=n);return t}function Ps(s,e,t){let r=["__proto__","constructor","prototype"];if(r.includes(e))return;let o=e.match(/\[([^\]]*)\]/g);if(!o){r.includes(e)||(s[e]=t);return}let n=s,i=e.split("[")[0];if(r.includes(i))return;for(let p=0;p<o.length-1;p++){let c=o[p].slice(1,-1);if(r.includes(c))return;if(n[i]||(n[i]={}),c===""){Array.isArray(n[i])||(n[i]=[]),n=n[i];continue}n[i][c]||(n[i][c]={}),n=n[i][c];}let a=o[o.length-1].slice(1,-1);if(!r.includes(a)){if(a===""){Array.isArray(n)||(n=[]),n.push(t);return}n[a]=t;}}var Ot=class{ITERATIONS=6e5;SALT_LENGTH=16;KEY_LENGTH=256;async hash(e){if(!e)throw new Error("Data to hash cannot be empty");let r=new TextEncoder().encode(e),o=crypto.getRandomValues(new Uint8Array(this.SALT_LENGTH)),n=await crypto.subtle.importKey("raw",r,{name:"PBKDF2"},false,["deriveBits"]),i=await crypto.subtle.deriveBits({name:"PBKDF2",salt:o,iterations:this.ITERATIONS,hash:"SHA-256"},n,this.KEY_LENGTH),a=this.encodeBase64(o),p=this.encodeBase64(new Uint8Array(i));return `${a}:${p}`}async compare(e,t){if(!e||!t)return false;try{let o=new TextEncoder().encode(t),n=e.split(":");if(n.length!==2)throw new Error("Invalid hash format");let[i,a]=n,p=this.decodeBase64(i),c=this.decodeBase64(a),d=await crypto.subtle.importKey("raw",o,{name:"PBKDF2"},!1,["deriveBits"]),l=await crypto.subtle.deriveBits({name:"PBKDF2",salt:p,iterations:this.ITERATIONS,hash:"SHA-256"},d,this.KEY_LENGTH),h=new Uint8Array(l);if(h.length!==c.length)return !1;let u=0;for(let g=0;g<h.length;g++)u|=h[g]^c[g];return u===0}catch{return false}}encodeBase64(e){let t="",r=e.byteLength;for(let o=0;o<r;o++)t+=String.fromCharCode(e[o]);return btoa(t)}decodeBase64(e){let t=atob(e),r=t.length,o=new Uint8Array(r);for(let n=0;n<r;n++)o[n]=t.charCodeAt(n);return o}},rt=new Ot;var st=class{port;hostname;host;routes;tapOptions;graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.hostname=e?.host??"0.0.0.0",this.host=e?.host??"0.0.0.0",this.url=`http://${this.host}:${this.port}`,this.tapOptions=e?.tapOptions,this.graphql=e?.graphql??new z,this.ensureGraphQLHandler=Ae(this.graphql);}listen(){let e=this.tapOptions?.bun,{fetch:t,websocket:r,...o}=e??{};this.runtimeServer=Bun.serve({port:this.port,hostname:this.hostname,fetch:async(n,i)=>{let a=new URL(n.url),p=C.find(n.method,a.pathname);if(Q.enrichRequest(n),n.params=p?.params??{},n.query=Object.fromEntries(a.searchParams.entries()),n.ip=n.headers.get("x-forwarded-for")?.split(",")[0]??i.requestIP(n)?.address,await t?.call(this,n,i),this.graphql.isEnabled&&a.pathname.startsWith(this.graphql.getYogaOptions().graphqlEndpoint??"/graphql")){let l=await this.ensureGraphQLHandler();if(l)return l.fetch(n,{server:i})}if(r&&n.headers.get("upgrade")==="websocket"&&i.upgrade(n,{data:{}}))return;let c=await re(p?.middleware??[],p?.handler??((l,h)=>{h.notFound({...P(new k(l.url,l.method))});}),n);return c.headers["Content-Type"]==="application/json"?Response.json(c.getBody(),{status:c.responseStatus,headers:c.headers}):new Response(c.getBody(),{status:c.responseStatus,headers:c.headers})},...r?{websocket:r}:{},...o}),this.url=this.runtimeServer.url.toString();}async close(){if(!this.runtimeServer)throw new Error("Server is not listening or not initialized");await this.runtimeServer.stop();}};var ot=class{graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.hostname=e?.host??"0.0.0.0",this.host=e?.host??"0.0.0.0",this.url=`http://${this.host}:${this.port}`,this.tapOptions=e?.tapOptions,this.graphql=e?.graphql??new z,this.ensureGraphQLHandler=Ae(this.graphql);}listen(){let e=this.tapOptions?.deno,{handler:t,...r}=e??{};this.runtimeServer=Deno.serve({port:this.port,hostname:this.hostname,handler:async(o,n)=>{let i=new URL(o.url),a=C.find(o.method,i.pathname);if(Q.enrichRequest(o),o.params=a?.params??{},o.query=Object.fromEntries(i.searchParams.entries()),o.ip=o.headers.get("x-forwarded-for")?.split(",")[0]??n.remoteAddr?.hostname,await t?.(o,n))return new Response(null,{status:426});if(this.graphql.isEnabled&&i.pathname.startsWith(this.graphql.getYogaOptions().graphqlEndpoint??"/graphql")){let l=await this.ensureGraphQLHandler();if(l)return l.fetch(o,{info:n})}if(o.headers.get("upgrade")==="websocket"&&this.tapOptions?.deno?.websocket){let{socket:l,response:h}=Deno.upgradeWebSocket(o);return this.tapOptions?.deno?.websocket?.open&&(l.onopen=()=>this.tapOptions?.deno?.websocket?.open?.(l)),this.tapOptions?.deno?.websocket?.message&&(l.onmessage=u=>{this.tapOptions?.deno?.websocket?.message?.(l,u.data);}),this.tapOptions?.deno?.websocket?.close&&(l.onclose=()=>this.tapOptions?.deno?.websocket?.close?.(l)),h}let c=await re(a?.middleware??[],a?.handler??((l,h)=>{h.notFound({...P(new k(l.url,l.method))});}),o);return c.headers["Content-Type"]==="application/json"?Response.json(c.getBody(),{status:c.responseStatus,headers:c.headers}):new Response(c.getBody(),{status:c.responseStatus,headers:c.headers})},...r}),this.url=`http://${this.host}:${this.port}`;}async close(){if(!this.runtimeServer)throw new Error("Server is not listening or not initialized");await this.runtimeServer.shutdown();}};async function qs(s,e){let t=s.getReader();try{for(;;){let{done:r,value:o}=await t.read();if(r){e.end();break}e.write(o);}}catch(r){e.destroy(r);}}var nt=class{port;host;url;routes;tapOptions;runtimeServer;nodeHttpClient;httpsOptions;graphql;ensureGraphQLHandler;constructor(e){this.routes=e?.routes??[],this.port=e?.port??80,this.host=e?.host??"0.0.0.0",this.tapOptions=e?.tapOptions,this.nodeHttpClient=e?.nodeHttpClient??"http",this.httpsOptions=e?.nodeHttpClient==="https"||e?.nodeHttpClient==="http2-secure"?e?.httpsOptions:void 0,this.graphql=e?.graphql??new z,this.ensureGraphQLHandler=Ae(this.graphql);let t=this.nodeHttpClient==="https"||this.nodeHttpClient==="http2-secure"?"https":"http";this.url=`${t}://${this.host}:${this.port}`,this.runtimeServer=this.createServer(async(r,o)=>{if(this.tapOptions&&this.tapOptions.node){let g=this.tapOptions.node;await g?.(r);}if(this.graphql.isEnabled&&r.url?.startsWith(this.graphql.getYogaOptions().graphqlEndpoint??"/graphql")){let g=await this.ensureGraphQLHandler();if(g){g(r,o);return}}let n=C.find(r.method,r.url),i={};for(let g of Object.keys(r.headers)){if(g.startsWith(":"))continue;let b=r.headers[g];b!==void 0&&(i[g]=Array.isArray(b)?b.join(", "):b);}let a=new Q(`${this.url}${r.url}`,{method:r.method,body:se(r.method)?await this.readRequestBody(r):void 0,headers:i}),p=r.headers["x-forwarded-for"];Array.isArray(p)&&(p=p[0]),a.ip=p??r.socket.remoteAddress;let[c,d=""]=r.url?.split("?",2)??[];a.query=Object.fromEntries(new URLSearchParams(d)),a.params=n?.params??{};let l=new W;l.nodeResponse=o;let h=await re(n?.middleware??[],n?.handler??((g,b)=>{b.notFound({...P(new k(g.url,g.method))});}),a,l);if(o.headersSent||o.writableEnded)return;let u=h.getBody();if(u instanceof ReadableStream){qs(u,o);return}u instanceof Buffer||u instanceof Uint8Array||typeof u=="string"?u=u:h.headers["Content-Type"]==="application/json"&&typeof u!="string"?u=JSON.stringify(u):u=String(u),o.writeHead(h.responseStatus,h.headers),o.end(u);});}listen(){this.runtimeServer.listen(this.port,this.host);}async close(){return new Promise((e,t)=>{this.runtimeServer.close(r=>{r&&"code"in r&&r.code!=="ERR_SERVER_NOT_RUNNING"?t(r):e();});})}async readRequestBody(e){return new Promise((t,r)=>{let o=[];e.on("data",n=>o.push(Buffer.from(n))),e.on("error",r),e.on("end",()=>t(Buffer.concat(o).toString()));})}createServer(e){if(this.nodeHttpClient==="http")return createServer(e);if(this.nodeHttpClient==="http2")return createServer$1(e);if(this.nodeHttpClient==="http2-secure"){if(!this.httpsOptions)throw new Error("httpsOptions (key, cert) are required when using http2-secure client");return createSecureServer(this.httpsOptions,e)}if(!this.httpsOptions)throw new Error("httpsOptions (key, cert) are required when using https client");return createServer$2(this.httpsOptions,e)}};var it=class{routes;server;constructor(e){this.server=this.getRuntimeServer(e),this.routes=this.server.routes;}get url(){return this.server.url}get port(){return this.server.port}get host(){return this.server.host}getServer(e){return this.server.runtimeServer}listen(){return this.server.listen()}async close(){return this.server.close()}getRuntimeServer(e){if(e?.runtime==="bun")return new st(e);if(e?.runtime==="node")return new nt(e);if(e?.runtime==="deno")return new ot(e);throw new Error("No server implementation found for runtime: "+e?.runtime)}};H();var Sr=["isListening","url","port","host","routes","embed","constructor","get","post","put","patch","delete","getNodeServer","getBunServer","getDenoServer","use","setErrorHandler","listen","close","tapOptions","startUpOptions","tmpDir","logger","getMockServer","useExpress","expressMiddleware","mountExpressRouter","setNotFoundHandler","setGlobalCronErrorHandler","startRegisteredCrons","bootstrap","handleNotFound","registerNotFoundRoutes","importControllers","applyPlugins"];var xr=class{isListening;isProduction;graphql;router=C;wasInitialized;serverConnector;globalMiddlewares=[];serverOptions;controllerImportBlacklistedPaths=["node_modules"];notFoundHandler;nativeEnv=new je;httpsOptions;constructor(e){this.wasInitialized=false,this.serverOptions={nodeHttpClient:e?.nodeHttpClient??"http",port:e?.port??Number(this.nativeEnv.get("PORT"))??80,host:e?.host??this.nativeEnv.get("HOST")??"0.0.0.0",controllerPatterns:e?.controllerPatterns??[],plugins:e?.plugins??{},tapOptions:e?.tapOptions??{},swagger:e?.swagger??true,useBodyParser:e?.useBodyParser??true,graphql:e?.graphql??void 0},e?.ajvInstance&&N.setGlobalInstance(e.ajvInstance),this.httpsOptions=e?.nodeHttpClient==="https"||e?.nodeHttpClient==="http2-secure"?e.httpsOptions:void 0,this.isListening=false,this.isProduction=this.nativeEnv.get("NODE_ENV")==="production",this.graphql=new z(this.serverOptions.graphql),this.serverConnector=new it({routes:[],port:this.serverOptions.port,host:this.serverOptions.host,tapOptions:this.serverOptions.tapOptions,runtime:S.type,nodeHttpClient:this.serverOptions.nodeHttpClient,httpsOptions:this.httpsOptions,graphql:this.graphql}),this.serverOptions.useBodyParser&&this.use(zt());}get url(){return this.serverConnector.url}get port(){return this.serverConnector.port}get host(){return this.serverConnector.host}get routes(){return C.getRoutes()||[]}async hash(e){return rt.hash(e)}async compareHash(e,t){return rt.compare(e,t)}getEnvironment(){return this.nativeEnv.getEnvironment()}tmpDir(...e){return f.join("tmp",...e)}async mkdir(e,t){await m.mkdir(e,t);}get(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("GET",e,o,n,i);}post(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("POST",e,o,n,i);}patch(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("PATCH",e,o,n,i);}put(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("PUT",e,o,n,i);}delete(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("DELETE",e,o,n,i);}options(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("OPTIONS",e,o,n,i);}head(e,t,r){let{middlewares:o,handler:n,swaggerOptions:i}=this.extractOptionsAndHandlerFromRouteRegistration(t,r);C.addOrUpdate("HEAD",e,o,n,i);}group(e,t,r){this.router.group(e,t,r);}getNodeServer(){if(S.type!=="node")throw new Error("Server is not using node runtime, you can't call `.getNodeServer()`");return this.serverConnector.getServer("node")}getBunServer(){if(S.type!=="bun")throw new Error("Server is not using bun runtime, you can't call `.getBunServer()`");return this.serverConnector.getServer("bun")}getDenoServer(){if(S.type!=="deno")throw new Error("Server is not using deno runtime, you can't call `.getDenoServer()`");return this.serverConnector.getServer("deno")}embed(e,t){if(typeof e!="string"||e.trim()==="")throw new Error(`Invalid key provided to embed: ${e}. Key must be a non-empty string.`);if(Sr.includes(e))throw new Error(`Cannot embed value with key '${e}' as it conflicts with a protected server property.`);Object.defineProperty(this,e,{value:t,writable:false,configurable:true,enumerable:true});}exit(e=0){switch(S.type){case "bun":case "node":process.exit(e);case "deno":Deno.exit(e);default:throw new Error(`Unsupported runtime: ${S.type}`)}}on(e,t){switch(S.type){case "bun":case "node":process.on(e,t);break;case "deno":Deno.addSignalListener(e,t);break;default:throw new Error(`Unsupported runtime: ${S.type}, only node, bun and deno are supported`)}}once(e,t){switch(S.type){case "bun":case "node":process.once(e,t);break;case "deno":Deno.addSignalListener(e,t);break;default:throw new Error(`Unsupported runtime: ${S.type}, only node, bun and deno are supported`)}}use(...e){this.globalMiddlewares.push(...e);}useExpress(e,t){rr(this).use(e,t);}expressMiddleware(e){return ke(e)}mountExpressRouter(e,t){Ye(e,t);}setErrorHandler(e){this.globalMiddlewares.unshift(async(t,r,o)=>{try{await o();}catch(n){await e?.(t,r,o,n);}});}setNotFoundHandler(e){this.notFoundHandler=e?.bind(this);}listen(e){if(this.isListening)throw new Error("Server is already listening, you can't call `.listen()` multiple times");this.bootstrap().then(()=>{this.serverConnector.listen(),this.isListening=true,this.serverOptions.swagger&&gr(this.serverOptions.swagger),e?.({port:this.port,host:this.host,url:this.url});});}async close(){await this.serverConnector.close(),this.isListening=false;}async getMockServer(e){return await this.bootstrap(e),new Je(this)}async importControllers(e){let t=e??this.serverOptions.controllerPatterns,r=await Promise.all(t.map(async o=>glob(o,{absolute:true,cwd:M.getCwd()}))).then(o=>o.flat());r=r.flat(),r=r.filter(o=>!this.controllerImportBlacklistedPaths.some(n=>o.includes(n))),y.debug(`Found ${r.length} controllers to import`),await Promise.all(r.map(async o=>{y.debug(`Importing controller ${o}`),await import(o).catch(n=>{y.error(`Error importing controller ${o}: ${n}`);});}));}extractOptionsAndHandlerFromRouteRegistration(e,t){if(typeof e=="function")return {middlewares:[],handler:e,swaggerOptions:void 0};let r=e;return {middlewares:Array.isArray(r.middlewares)?r.middlewares:r.middlewares?[r.middlewares]:[],handler:t,swaggerOptions:r.swagger}}applyPlugins(e){Object.entries(e).forEach(([t,r])=>{switch(t){case "cors":this.use(Wt(r));break;case "json":this.use(cr(r));break;case "static":this.use(Qt(r));break;case "fileParser":this.use(ir(r));break;case "helmet":this.use(ar(r));break;case "cookie":this.use(Zt(r));break;case "methodOverride":this.use(ur(r));break;case "compression":this.use(Gt(r));break;case "log":this.use(lr(r));break;case "rateLimiter":let{keyOptions:o,storageOptions:n}=r;this.use(mr(o,n));break;case "urlencoded":this.use(br(r));break;case "trustProxy":this.use(vr(r));break;case "timeout":this.use(yr(r));break;case "session":this.use(hr(r));break;case "asyncLocalStorage":this.use(Rt(r));break;default:y.warn(`Unknown plugin ${t}`);break}});}async bootstrap(e){this.wasInitialized||(await this.importControllers(e?.controllerPatterns),this.applyPlugins(this.serverOptions.plugins),this.registerNotFoundRoutes(),this.globalMiddlewares.length&&C.applyGlobalMiddlewaresToAllRoutes(this.globalMiddlewares),this.wasInitialized=true);}handleNotFound=(e,t)=>{if(this.notFoundHandler){this.notFoundHandler(e,t);return}let r=new URL(e.url).pathname,o=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"],n=[];for(let a of o){if(a===e.method.toUpperCase())continue;let p=C.find(a,r);p&&p.handler!==this.handleNotFound&&n.push(a);}if(n.length){t.setHeader("Allow",n.join(", "));let a=new Ee(r,e.method);t.methodNotAllowed({...P(a)});return}let i=new k(r,e.method);t.notFound({...P(i)});};registerNotFoundRoutes(){let e=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];for(let t of e)C.addOrUpdate(t,"*",[],this.handleNotFound,{excludeFromSwagger:true});}};var G=class extends x{constructor(e){super(`File not found: ${e}`);}};var Rr=class{constructor(e){this.options=e;}async getDownloadUrl(e,t=3600){await this.ensureClient();let r=this.containerClient.getBlockBlobClient(e),o=new Date(Date.now()-300*1e3),n=new Date(Date.now()+t*1e3),i=this.azureBlobLib.BlobSASPermissions.parse("r"),a=this.azureBlobLib.generateBlobSASQueryParameters({containerName:this.options.containerName,blobName:e,permissions:i,startsOn:o,expiresOn:n},this.sharedKeyCredential).toString();return `${r.url}?${a}`}async getUploadUrl(e,t=3600){await this.ensureClient();let r=this.containerClient.getBlockBlobClient(e),o=new Date(Date.now()-300*1e3),n=new Date(Date.now()+t*1e3),i=this.azureBlobLib.BlobSASPermissions.parse("w"),a=this.azureBlobLib.generateBlobSASQueryParameters({containerName:this.options.containerName,blobName:e,permissions:i,startsOn:o,expiresOn:n},this.sharedKeyCredential).toString();return `${r.url}?${a}`}async listObjects(e){await this.ensureClient();let t=[],r=e?e.endsWith("/")?e:`${e}/`:void 0;for await(let o of this.containerClient.listBlobsFlat({prefix:r}))t.push(o.name);return t}async getObject(e,t="raw"){await this.ensureClient();try{let o=await this.containerClient.getBlockBlobClient(e).download();if(!o.readableStreamBody)throw new G(e);let n=t;if(n==="stream")return Readable.toWeb(o.readableStreamBody);let i=[];for await(let p of o.readableStreamBody)i.push(Buffer.isBuffer(p)?p:Buffer.from(p));let a=Buffer.concat(i);switch(n){case "raw":return new Uint8Array(a);case "text":return a.toString();default:throw new x("Invalid return type")}}catch(r){throw r.statusCode===404?new G(e):r}}async putObject(e,t,r){await this.ensureClient();let o=this.containerClient.getBlockBlobClient(e),n=t;await o.upload(n,n.length,{blobHTTPHeaders:{blobContentType:r||"application/octet-stream"}});}async deleteObject(e){await this.ensureClient();let t=this.containerClient.getBlockBlobClient(e);try{await t.delete();}catch(r){if(r&&typeof r=="object"&&"statusCode"in r&&r.statusCode===404)return;throw r}}async ensureClient(){if(this.azureBlobLib)return;this.azureBlobLib=await import('@azure/storage-blob').catch(()=>{throw new x("Library not installed: @azure/storage-blob, try run npm install @azure/storage-blob")}),this.blobServiceClient=this.azureBlobLib.BlobServiceClient.fromConnectionString(this.options.connectionString),this.containerClient=this.blobServiceClient.getContainerClient(this.options.containerName);let e=this.blobServiceClient.credential;if(!(e instanceof this.azureBlobLib.StorageSharedKeyCredential))throw new x("BlobStorage requires a shared key credential to generate SAS URLs");this.sharedKeyCredential=e;}};var Tr=class{constructor(e){this.options=e;}wasDirectoryEnsured=false;async getDownloadUrl(e,t=3600){throw new x("LocalStorageProvider does not support getDownloadUrl. Use S3 or Azure Blob storage for signed URLs.")}async getUploadUrl(e,t=3600){throw new x("LocalStorageProvider does not support getUploadUrl. Use S3 or Azure Blob storage for signed URLs.")}async listObjects(e){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let t=f.resolve(this.options.directory),r=e?f.join(t,e):t;if(!await m.exists(r))return [];let n=[];return await this.listFilesRecursively(r,t,n),n}async getObject(e,t="raw"){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let r=f.join(this.options.directory,e);if(!await m.exists(r))throw new G(e);switch(t){case "raw":return await m.readFile(r);case "text":return await m.readFile(r,{encoding:"utf8"});case "stream":return await m.streamFile(r);default:throw new x("Invalid return type")}}async putObject(e,t,r){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let o=f.join(this.options.directory,e),n=f.join(o,"..");await m.mkdir(n,{recursive:true}),await m.writeFile(o,t);}async deleteObject(e){this.wasDirectoryEnsured||await this.ensureDirectoryExists();let t=f.join(this.options.directory,e);await m.exists(t)&&await m.unlink(t);}async listFilesRecursively(e,t,r){let o=await m.stat(e);if(o.isFile){let i=e.replace(t,"").replace(/^\//,"");r.push(i);return}if(!o.isDirectory)return;let n=await this.readDirectory(e);for(let i of n){let a=f.join(e,i);await this.listFilesRecursively(a,t,r);}}async readDirectory(e){let{runtime:t}=await Promise.resolve().then(()=>(H(),Mt));switch(t.type){case "node":return await(await import('fs/promises')).readdir(e);case "bun":return await(await import('fs/promises')).readdir(e);case "deno":{let r=[];for await(let o of Deno.readDir(e))r.push(o.name);return r}default:throw new x("Unsupported runtime")}}async ensureDirectoryExists(){await m.exists(this.options.directory)||(await m.mkdir(this.options.directory,{recursive:true}),this.wasDirectoryEnsured=true);}};var Cr=class{options;constructor(e){this.options=e;}async getDownloadUrl(e,t=3600){if(await this.ensureClient(),!this.options.cloudfrontOptions)throw new x("getDownloadUrl requires CloudFront configuration");let{domainName:r,keyPairId:o,privateKey:n}=this.options.cloudfrontOptions,i=`https://${r}/${e}`,a=new Date(Date.now()+t*1e3).toISOString();return this.cloudfrontSignerLib.getSignedUrl({url:i,keyPairId:o,privateKey:n,dateLessThan:a})}async getUploadUrl(e,t=3600){await this.ensureClient();let r=new this.s3Lib.PutObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});return this.s3PresignerLib.getSignedUrl(this.s3Client,r,{expiresIn:t})}async listObjects(e){await this.ensureClient();let t=new this.s3Lib.ListObjectsV2Command({Bucket:this.options.s3ClientConfig.bucketName,Prefix:e});return (await this.s3Client.send(t)).Contents?.map(o=>o.Key).filter(Boolean)??[]}async getObject(e,t="raw"){await this.ensureClient();let r=new this.s3Lib.GetObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});try{let o=await this.s3Client.send(r);if(!o.Body)throw new G(e);switch(t){case "raw":return await o.Body.transformToByteArray();case "text":return await o.Body.transformToString();case "stream":return o.Body.transformToWebStream();default:throw new x("Invalid return type")}}catch(o){throw o.name==="NoSuchKey"?new G(e):o}}async putObject(e,t,r){await this.ensureClient();let o=new this.s3Lib.PutObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e,Body:t,ContentType:r});await this.s3Client.send(o);}async deleteObject(e){await this.ensureClient();let t=new this.s3Lib.DeleteObjectCommand({Bucket:this.options.s3ClientConfig.bucketName,Key:e});await this.s3Client.send(t);}async ensureClient(){this.s3Lib||(this.s3Lib=await import('@aws-sdk/client-s3').then(e=>e.default).catch(()=>{throw new x("Library not installed: @aws-sdk/client-s3, try run npm install @aws-sdk/client-s3")}),this.s3PresignerLib=await import('@aws-sdk/s3-request-presigner').then(e=>e.default).catch(()=>{throw new x("Library not installed: @aws-sdk/s3-request-presigner, try run npm install @aws-sdk/s3-request-presigner")}),this.options.cloudfrontOptions&&(this.cloudfrontSignerLib=await import('@aws-sdk/cloudfront-signer').then(e=>e.default).catch(()=>{throw new x("Library not installed: @aws-sdk/cloudfront-signer, try run npm install @aws-sdk/cloudfront-signer")})),this.s3Client=new this.s3Lib.S3Client(this.options.s3ClientConfig??{}));}};var Or=class{providerOptions;defaultProvider;providerMap;constructor(e,t){this.providerOptions=e,this.defaultProvider=t.defaultProvider,this.providerMap=new Map(Object.entries(e).map(([r,o])=>[r,o]));}use(e){let t=this.providerMap.get(e);if(!t)throw new Error(`[Storage] Provider ${String(e)} not found`);return t}async getDownloadUrl(e,t){return this.providerOptions[this.defaultProvider].getDownloadUrl(e,t)}async getUploadUrl(e,t){return this.providerOptions[this.defaultProvider].getUploadUrl(e,t)}async listObjects(e){return this.providerOptions[this.defaultProvider].listObjects(e)}async getObject(e,t="raw"){return this.providerOptions[this.defaultProvider].getObject(e,t)}async putObject(e,t,r){return this.providerOptions[this.defaultProvider].putObject(e,t,r)}async deleteObject(e){return this.providerOptions[this.defaultProvider].deleteObject(e)}};var Pr=class{};var jr=s=>(e,t)=>(r,o,n)=>{let i={scope:e,handler:t,manager:s};if(typeof o>"u"){let p=v.get(r.prototype,"__class__");return p||(p={policies:[]}),p.policies||(p.policies=[]),p.policies.push(i),v.set(r.prototype,"__class__",p),r}let a=v.get(r,o);return a||(a={policies:[]}),a.policies||(a.policies=[]),a.policies.push(i),v.set(r,o,a),n};var Er=class{providers;constructor(e){this.providers=e;}createDecorator(){return jr(this)}canAccess(e,t,...r){let o=this.providers[e];if(!o)throw new x(`Policy provider for ${String(e)} not found`);return o[t](...r)}};var Bl=C;
438
+ export{ao as ARG_SYMBOL,Rr as AzureBlobStorageProvider,Ht as BaseCron,Bt as BaseMqtt,Pr as BasePlugin,Dt as BaseQueue,Ue as BullMQPubSub,O as Command,bt as CommandRegistry,be as CronService,z as GraphQL,Tr as LocalStorageProvider,$e as MqttService,Qe as PGBossPubSub,Er as PolicyManager,ee as QueueManager,Ge as QueueService,Q as Request,W as Response,Cr as S3StorageProvider,ze as SQSPubSub,xr as Server,Or as Storage,ae as VALIDATION_ERROR_SYMBOL,A as arg,Rt as asyncLocalStorage,qe as asyncStorage,Zr as baseCommands,Pe as commandRegistry,Gt as compression,So as controller,Zt as cookie,Wt as cors,rr as createExpressAdapter,jr as createPolicyDecorator,Vs as cron,Ls as defineLoggerConfig,Yn as defineQueueConfiguration,To as del,ds as expressHandler,ke as expressMiddleware,ir as fileParser,T as flag,Po as get,xt as getContentType,rt as hash,ar as helmet,cr as json,lr as log,y as logger,ur as methodOverride,Bo as middleware,Ye as mountExpressRouter,Fn as mqtt,Mo as patch,ko as post,Gn as publish,No as put,Te as queue,mr as rateLimiter,Bl as router,Yo as serialize,Qt as serveStatic,hr as session,Gs as setCronGlobalErrorHandler,Dn as setMqttGlobalErrorHandler,yr as timeout,vr as trustProxy,br as urlencoded,rn as validate};//# sourceMappingURL=index.js.map
439
439
  //# sourceMappingURL=index.js.map