veloce-ts 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/LICENSE +21 -0
- package/README.md +442 -0
- package/bin/veloce.ts +2 -0
- package/dist/cjs/src/cli/index.js +425 -0
- package/dist/cjs/src/cli/index.js.map +22 -0
- package/dist/cjs/src/docs/index.js +7 -0
- package/dist/cjs/src/docs/index.js.map +55 -0
- package/dist/cjs/src/errors/index.js +4 -0
- package/dist/cjs/src/errors/index.js.map +12 -0
- package/dist/cjs/src/graphql/index.js +83 -0
- package/dist/cjs/src/graphql/index.js.map +24 -0
- package/dist/cjs/src/index.js +126 -0
- package/dist/cjs/src/index.js.map +108 -0
- package/dist/cjs/src/middleware/index.js +3 -0
- package/dist/cjs/src/middleware/index.js.map +12 -0
- package/dist/cjs/src/plugins/index.js +125 -0
- package/dist/cjs/src/plugins/index.js.map +67 -0
- package/dist/cjs/src/testing/index.js +17 -0
- package/dist/cjs/src/testing/index.js.map +54 -0
- package/dist/cjs/src/types/index.js +3 -0
- package/dist/cjs/src/types/index.js.map +16 -0
- package/dist/cjs/src/validation/index.js +3 -0
- package/dist/cjs/src/validation/index.js.map +19 -0
- package/dist/cjs/src/websocket/index.js +3 -0
- package/dist/cjs/src/websocket/index.js.map +12 -0
- package/dist/esm/chunk-0zxhx5b8.js +7 -0
- package/dist/esm/chunk-0zxhx5b8.js.map +10 -0
- package/dist/esm/chunk-159eqj8q.js +5 -0
- package/dist/esm/chunk-159eqj8q.js.map +12 -0
- package/dist/esm/chunk-1hqjkm44.js +5 -0
- package/dist/esm/chunk-1hqjkm44.js.map +11 -0
- package/dist/esm/chunk-2q6s8v3j.js +6 -0
- package/dist/esm/chunk-2q6s8v3j.js.map +10 -0
- package/dist/esm/chunk-42h6trpf.js +5 -0
- package/dist/esm/chunk-42h6trpf.js.map +9 -0
- package/dist/esm/chunk-82f2j0k2.js +60 -0
- package/dist/esm/chunk-82f2j0k2.js.map +10 -0
- package/dist/esm/chunk-8wrnr45g.js +338 -0
- package/dist/esm/chunk-8wrnr45g.js.map +10 -0
- package/dist/esm/chunk-9p6d0t33.js +5 -0
- package/dist/esm/chunk-9p6d0t33.js.map +10 -0
- package/dist/esm/chunk-awven6dt.js +4 -0
- package/dist/esm/chunk-awven6dt.js.map +16 -0
- package/dist/esm/chunk-gv5n8ddb.js +18 -0
- package/dist/esm/chunk-gv5n8ddb.js.map +10 -0
- package/dist/esm/chunk-pn7z890c.js +72 -0
- package/dist/esm/chunk-pn7z890c.js.map +13 -0
- package/dist/esm/chunk-qfsjy9bg.js +7 -0
- package/dist/esm/chunk-qfsjy9bg.js.map +10 -0
- package/dist/esm/chunk-vkkzgaf7.js +5 -0
- package/dist/esm/chunk-vkkzgaf7.js.map +12 -0
- package/dist/esm/src/cli/index.js +30 -0
- package/dist/esm/src/cli/index.js.map +18 -0
- package/dist/esm/src/docs/index.js +8 -0
- package/dist/esm/src/docs/index.js.map +48 -0
- package/dist/esm/src/errors/index.js +4 -0
- package/dist/esm/src/errors/index.js.map +9 -0
- package/dist/esm/src/graphql/index.js +4 -0
- package/dist/esm/src/graphql/index.js.map +9 -0
- package/dist/esm/src/index.js +4 -0
- package/dist/esm/src/index.js.map +16 -0
- package/dist/esm/src/middleware/index.js +4 -0
- package/dist/esm/src/middleware/index.js.map +9 -0
- package/dist/esm/src/plugins/index.js +42 -0
- package/dist/esm/src/plugins/index.js.map +10 -0
- package/dist/esm/src/testing/index.js +4 -0
- package/dist/esm/src/testing/index.js.map +39 -0
- package/dist/esm/src/types/index.js +4 -0
- package/dist/esm/src/types/index.js.map +9 -0
- package/dist/esm/src/validation/index.js +4 -0
- package/dist/esm/src/validation/index.js.map +9 -0
- package/dist/esm/src/websocket/index.js +4 -0
- package/dist/esm/src/websocket/index.js.map +9 -0
- package/dist/types/adapters/base.d.ts +24 -0
- package/dist/types/adapters/base.d.ts.map +1 -0
- package/dist/types/adapters/express.d.ts +44 -0
- package/dist/types/adapters/express.d.ts.map +1 -0
- package/dist/types/adapters/hono.d.ts +44 -0
- package/dist/types/adapters/hono.d.ts.map +1 -0
- package/dist/types/cli/commands/build.d.ts +3 -0
- package/dist/types/cli/commands/build.d.ts.map +1 -0
- package/dist/types/cli/commands/dev.d.ts +3 -0
- package/dist/types/cli/commands/dev.d.ts.map +1 -0
- package/dist/types/cli/commands/generate.d.ts +3 -0
- package/dist/types/cli/commands/generate.d.ts.map +1 -0
- package/dist/types/cli/commands/new.d.ts +3 -0
- package/dist/types/cli/commands/new.d.ts.map +1 -0
- package/dist/types/cli/index.d.ts +3 -0
- package/dist/types/cli/index.d.ts.map +1 -0
- package/dist/types/core/application.d.ts +268 -0
- package/dist/types/core/application.d.ts.map +1 -0
- package/dist/types/core/compiled-metadata.d.ts +58 -0
- package/dist/types/core/compiled-metadata.d.ts.map +1 -0
- package/dist/types/core/metadata.d.ts +175 -0
- package/dist/types/core/metadata.d.ts.map +1 -0
- package/dist/types/core/plugin.d.ts +63 -0
- package/dist/types/core/plugin.d.ts.map +1 -0
- package/dist/types/core/router-compiler.d.ts +61 -0
- package/dist/types/core/router-compiler.d.ts.map +1 -0
- package/dist/types/decorators/dependencies.d.ts +28 -0
- package/dist/types/decorators/dependencies.d.ts.map +1 -0
- package/dist/types/decorators/docs.d.ts +38 -0
- package/dist/types/decorators/docs.d.ts.map +1 -0
- package/dist/types/decorators/graphql.d.ts +126 -0
- package/dist/types/decorators/graphql.d.ts.map +1 -0
- package/dist/types/decorators/http.d.ts +74 -0
- package/dist/types/decorators/http.d.ts.map +1 -0
- package/dist/types/decorators/middleware.d.ts +30 -0
- package/dist/types/decorators/middleware.d.ts.map +1 -0
- package/dist/types/decorators/params.d.ts +82 -0
- package/dist/types/decorators/params.d.ts.map +1 -0
- package/dist/types/decorators/websocket.d.ts +61 -0
- package/dist/types/decorators/websocket.d.ts.map +1 -0
- package/dist/types/dependencies/container.d.ts +93 -0
- package/dist/types/dependencies/container.d.ts.map +1 -0
- package/dist/types/docs/index.d.ts +3 -0
- package/dist/types/docs/index.d.ts.map +1 -0
- package/dist/types/docs/openapi-generator.d.ts +50 -0
- package/dist/types/docs/openapi-generator.d.ts.map +1 -0
- package/dist/types/docs/zod-to-json-schema.d.ts +46 -0
- package/dist/types/docs/zod-to-json-schema.d.ts.map +1 -0
- package/dist/types/errors/exceptions.d.ts +48 -0
- package/dist/types/errors/exceptions.d.ts.map +1 -0
- package/dist/types/errors/handler.d.ts +61 -0
- package/dist/types/errors/handler.d.ts.map +1 -0
- package/dist/types/errors/index.d.ts +7 -0
- package/dist/types/errors/index.d.ts.map +1 -0
- package/dist/types/graphql/index.d.ts +4 -0
- package/dist/types/graphql/index.d.ts.map +1 -0
- package/dist/types/graphql/plugin.d.ts +60 -0
- package/dist/types/graphql/plugin.d.ts.map +1 -0
- package/dist/types/graphql/schema-builder.d.ts +46 -0
- package/dist/types/graphql/schema-builder.d.ts.map +1 -0
- package/dist/types/graphql/zod-to-graphql.d.ts +22 -0
- package/dist/types/graphql/zod-to-graphql.d.ts.map +1 -0
- package/dist/types/index.d.ts +34 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/middleware/compression.d.ts +7 -0
- package/dist/types/middleware/compression.d.ts.map +1 -0
- package/dist/types/middleware/cors.d.ts +7 -0
- package/dist/types/middleware/cors.d.ts.map +1 -0
- package/dist/types/middleware/index.d.ts +4 -0
- package/dist/types/middleware/index.d.ts.map +1 -0
- package/dist/types/middleware/rate-limit.d.ts +7 -0
- package/dist/types/middleware/rate-limit.d.ts.map +1 -0
- package/dist/types/plugins/index.d.ts +4 -0
- package/dist/types/plugins/index.d.ts.map +1 -0
- package/dist/types/plugins/openapi.d.ts +23 -0
- package/dist/types/plugins/openapi.d.ts.map +1 -0
- package/dist/types/responses/response.d.ts +200 -0
- package/dist/types/responses/response.d.ts.map +1 -0
- package/dist/types/testing/helpers.d.ts +98 -0
- package/dist/types/testing/helpers.d.ts.map +1 -0
- package/dist/types/testing/index.d.ts +4 -0
- package/dist/types/testing/index.d.ts.map +1 -0
- package/dist/types/testing/test-client.d.ts +86 -0
- package/dist/types/testing/test-client.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +232 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/validation/exceptions.d.ts +25 -0
- package/dist/types/validation/exceptions.d.ts.map +1 -0
- package/dist/types/validation/index.d.ts +3 -0
- package/dist/types/validation/index.d.ts.map +1 -0
- package/dist/types/validation/validator.d.ts +54 -0
- package/dist/types/validation/validator.d.ts.map +1 -0
- package/dist/types/websocket/connection.d.ts +51 -0
- package/dist/types/websocket/connection.d.ts.map +1 -0
- package/dist/types/websocket/index.d.ts +4 -0
- package/dist/types/websocket/index.d.ts.map +1 -0
- package/dist/types/websocket/manager.d.ts +82 -0
- package/dist/types/websocket/manager.d.ts.map +1 -0
- package/dist/types/websocket/plugin.d.ts +51 -0
- package/dist/types/websocket/plugin.d.ts.map +1 -0
- package/package.json +149 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{A as as,B as sn,z as ps}from"../../chunk-159eqj8q.js";import{C as ms}from"../../chunk-2q6s8v3j.js";import{Z as Wn}from"../../chunk-gv5n8ddb.js";import{_ as ds}from"../../chunk-9p6d0t33.js";import"../../chunk-1hqjkm44.js";import"../../chunk-awven6dt.js";import{ia as Nn,ja as Os,la as ys,ma as As}from"../../chunk-42h6trpf.js";var Hs={};ys(Hs,{HonoAdapter:()=>Ks});class Ks{hono;name="hono";runtime;constructor(s){this.hono=s;this.runtime=Fn()}listen(s,n){switch(this.runtime){case"bun":return this.listenBun(s,n);case"deno":return this.listenDeno(s,n);case"node":return this.listenNode(s,n);case"workerd":throw Error("Cloudflare Workers do not support listen(). Deploy using wrangler or export the handler with getHandler().");default:throw Error(`Unsupported runtime: ${this.runtime}. FastAPI-TS supports Bun, Node.js, Deno, and Cloudflare Workers.`)}}getHandler(){return this.hono.fetch}getRuntime(){return this.runtime}listenBun(s,n){let i=Bun.serve({port:s,fetch:this.hono.fetch});if(n)n();return i}listenDeno(s,n){let i=new AbortController;return Deno.serve({port:s,signal:i.signal,onListen:n},this.hono.fetch),{port:s,close:()=>i.abort()}}listenNode(s,n){try{let{serve:i}=(()=>{throw new Error("Cannot require module "+"@hono/node-server");})();return i({fetch:this.hono.fetch,port:s},n)}catch(i){throw Error("Node.js adapter requires @hono/node-server package. Install it with: npm install @hono/node-server")}}}var Fn=()=>{if(typeof Bun<"u")return"bun";if(typeof Deno<"u")return"deno";if(typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers")return"workerd";if(typeof process<"u"&&process.versions&&process.versions.node)return"node";return"unknown"};var Ms={};ys(Ms,{ExpressAdapter:()=>es});class es{app;name="express";express;constructor(s){this.app=s;try{let n=(()=>{throw new Error("Cannot require module "+"express");})();this.express=n(),this.setupBridge()}catch(n){throw Error("Express adapter requires express package. Install it with: npm install express")}}setupBridge(){let s=this.app.getHono();this.express.use(async(n,i)=>{try{let f=this.createWebRequest(n),c=await s.fetch(f);await this.sendExpressResponse(i,c)}catch(f){i.status(500).json({error:"Internal Server Error",message:f instanceof Error?f.message:"Unknown error"})}})}createWebRequest(s){let n=s.protocol||"http",i=s.get("host")||"localhost",f=`${n}://${i}${s.originalUrl||s.url}`,c=new Headers;for(let[t,u]of Object.entries(s.headers))if(typeof u==="string")c.set(t,u);else if(Array.isArray(u))u.forEach((w)=>c.append(t,w));let h={method:s.method,headers:c};if(s.method!=="GET"&&s.method!=="HEAD"){if(s.body)h.body=JSON.stringify(s.body),c.set("content-type","application/json")}return new Request(f,h)}async sendExpressResponse(s,n){if(s.status(n.status),n.headers.forEach((i,f)=>{s.setHeader(f,i)}),n.body){let i=n.headers.get("content-type")||"";if(i.includes("application/json")){let f=await n.json();s.json(f)}else if(i.includes("text/")){let f=await n.text();s.send(f)}else{let f=await n.arrayBuffer();s.send(Buffer.from(f))}}else s.end()}listen(s,n){return this.express.listen(s,n)}getHandler(){return this.express}getExpressApp(){return this.express}}class _{hono;constructor(s){this.hono=s.getHono()}async get(s,n){return this.request("GET",s,n)}async post(s,n){return this.request("POST",s,n)}async put(s,n){return this.request("PUT",s,n)}async delete(s,n){return this.request("DELETE",s,n)}async patch(s,n){return this.request("PATCH",s,n)}async request(s,n,i){let f=this.buildUrl(n,i?.query),c={method:s,headers:this.buildHeaders(i)};if(i?.body!==void 0)c.body=i.body;else if(i?.json!==void 0)c.body=JSON.stringify(i.json);let h=await this.hono.request(f,c),t=await h.text(),u;try{u=JSON.parse(t)}catch{u=t}return{status:h.status,headers:h.headers,body:u,text:t,json:async()=>JSON.parse(t),ok:h.ok}}buildUrl(s,n){if(!n||Object.keys(n).length===0)return s;let i=new URLSearchParams(n).toString();return`${s}?${i}`}buildHeaders(s){let n={...s?.headers};if(s?.json!==void 0&&!n["Content-Type"])n["Content-Type"]="application/json";return n}}var E=(s,n,i)=>{return(f,c)=>{let h=-1;return t(0);async function t(u){if(u<=h)throw Error("next() called multiple times");h=u;let w,b=!1,P;if(s[u])P=s[u][0][0],f.req.routeIndex=u;else P=u===s.length&&c||void 0;if(P)try{w=await P(f,()=>t(u+1))}catch(S){if(S instanceof Error&&n)f.error=S,w=await n(S,f),b=!0;else throw S}else if(f.finalized===!1&&i)w=await i(f);if(w&&(f.finalized===!1||b))f.res=w;return f}}};var Us=Symbol();var zs=async(s,n=Object.create(null))=>{let{all:i=!1,dot:f=!1}=n,h=(s instanceof G?s.raw.headers:s.headers).get("Content-Type");if(h?.startsWith("multipart/form-data")||h?.startsWith("application/x-www-form-urlencoded"))return wn(s,{all:i,dot:f});return{}};async function wn(s,n){let i=await s.formData();if(i)return bn(i,n);return{}}function bn(s,n){let i=Object.create(null);if(s.forEach((f,c)=>{if(!(n.all||c.endsWith("[]")))i[c]=f;else Pn(i,c,f)}),n.dot)Object.entries(i).forEach(([f,c])=>{if(f.includes("."))Sn(i,f,c),delete i[f]});return i}var Pn=(s,n,i)=>{if(s[n]!==void 0)if(Array.isArray(s[n]))s[n].push(i);else s[n]=[s[n],i];else if(!n.endsWith("[]"))s[n]=i;else s[n]=[i]},Sn=(s,n,i)=>{let f=s,c=n.split(".");c.forEach((h,t)=>{if(t===c.length-1)f[h]=i;else{if(!f[h]||typeof f[h]!=="object"||Array.isArray(f[h])||f[h]instanceof File)f[h]=Object.create(null);f=f[h]}})};var y=(s)=>{let n=s.split("/");if(n[0]==="")n.shift();return n},Ns=(s)=>{let{groups:n,path:i}=$n(s),f=y(i);return xn(f,n)},$n=(s)=>{let n=[];return s=s.replace(/\{[^}]+\}/g,(i,f)=>{let c=`@${f}`;return n.push([c,i]),c}),{groups:n,path:s}},xn=(s,n)=>{for(let i=n.length-1;i>=0;i--){let[f]=n[i];for(let c=s.length-1;c>=0;c--)if(s[c].includes(f)){s[c]=s[c].replace(f,n[i][1]);break}}return s},L={},Ws=(s,n)=>{if(s==="*")return"*";let i=s.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(i){let f=`${s}#${n}`;if(!L[f])if(i[2])L[f]=n&&n[0]!==":"&&n[0]!=="*"?[f,i[1],new RegExp(`^${i[2]}(?=/${n})`)]:[s,i[1],new RegExp(`^${i[2]}$`)];else L[f]=[s,i[1],!0];return L[f]}return null},I=(s,n)=>{try{return n(s)}catch{return s.replace(/(?:%[0-9A-Fa-f]{2})+/g,(i)=>{try{return n(i)}catch{return i}})}},jn=(s)=>I(s,decodeURI),A=(s)=>{let n=s.url,i=n.indexOf("/",n.indexOf(":")+4),f=i;for(;f<n.length;f++){let c=n.charCodeAt(f);if(c===37){let h=n.indexOf("?",f),t=n.slice(i,h===-1?void 0:h);return jn(t.includes("%25")?t.replace(/%25/g,"%2525"):t)}else if(c===63)break}return n.slice(i,f)};var Is=(s)=>{let n=A(s);return n.length>1&&n.at(-1)==="/"?n.slice(0,-1):n},z=(s,n,...i)=>{if(i.length)n=z(n,...i);return`${s?.[0]==="/"?"":"/"}${s}${n==="/"?"":`${s?.at(-1)==="/"?"":"/"}${n?.[0]==="/"?n.slice(1):n}`}`},k=(s)=>{if(s.charCodeAt(s.length-1)!==63||!s.includes(":"))return null;let n=s.split("/"),i=[],f="";return n.forEach((c)=>{if(c!==""&&!/\:/.test(c))f+="/"+c;else if(/\:/.test(c))if(/\?/.test(c)){if(i.length===0&&f==="")i.push("/");else i.push(f);let h=c.replace("?","");f+="/"+h,i.push(f)}else f+="/"+c}),i.filter((c,h,t)=>t.indexOf(c)===h)},g=(s)=>{if(!/[%+]/.test(s))return s;if(s.indexOf("+")!==-1)s=s.replace(/\+/g," ");return s.indexOf("%")!==-1?I(s,Z):s},Xs=(s,n,i)=>{let f;if(!i&&n&&!/[%+]/.test(n)){let t=s.indexOf(`?${n}`,8);if(t===-1)t=s.indexOf(`&${n}`,8);while(t!==-1){let u=s.charCodeAt(t+n.length+1);if(u===61){let w=t+n.length+2,b=s.indexOf("&",w);return g(s.slice(w,b===-1?void 0:b))}else if(u==38||isNaN(u))return"";t=s.indexOf(`&${n}`,t+1)}if(f=/[%+]/.test(s),!f)return}let c={};f??=/[%+]/.test(s);let h=s.indexOf("?",8);while(h!==-1){let t=s.indexOf("&",h+1),u=s.indexOf("=",h);if(u>t&&t!==-1)u=-1;let w=s.slice(h+1,u===-1?t===-1?void 0:t:u);if(f)w=g(w);if(h=t,w==="")continue;let b;if(u===-1)b="";else if(b=s.slice(u+1,t===-1?void 0:t),f)b=g(b);if(i){if(!(c[w]&&Array.isArray(c[w])))c[w]=[];c[w].push(b)}else c[w]??=b}return n?c[n]:c},Fs=Xs,Bs=(s,n)=>{return Xs(s,n,!0)},Z=decodeURIComponent;var Zs=(s)=>I(s,Z),G=class{raw;#n;#s;routeIndex=0;path;bodyCache={};constructor(s,n="/",i=[[]]){this.raw=s,this.path=n,this.#s=i,this.#n={}}param(s){return s?this.#i(s):this.#h()}#i(s){let n=this.#s[0][this.routeIndex][1][s],i=this.#c(n);return i&&/\%/.test(i)?Zs(i):i}#h(){let s={},n=Object.keys(this.#s[0][this.routeIndex][1]);for(let i of n){let f=this.#c(this.#s[0][this.routeIndex][1][i]);if(f!==void 0)s[i]=/\%/.test(f)?Zs(f):f}return s}#c(s){return this.#s[1]?this.#s[1][s]:s}query(s){return Fs(this.url,s)}queries(s){return Bs(this.url,s)}header(s){if(s)return this.raw.headers.get(s)??void 0;let n={};return this.raw.headers.forEach((i,f)=>{n[f]=i}),n}async parseBody(s){return this.bodyCache.parsedBody??=await zs(this,s)}#f=(s)=>{let{bodyCache:n,raw:i}=this,f=n[s];if(f)return f;let c=Object.keys(n)[0];if(c)return n[c].then((h)=>{if(c==="json")h=JSON.stringify(h);return new Response(h)[s]()});return n[s]=i[s]()};json(){return this.#f("text").then((s)=>JSON.parse(s))}text(){return this.#f("text")}arrayBuffer(){return this.#f("arrayBuffer")}blob(){return this.#f("blob")}formData(){return this.#f("formData")}addValidatedData(s,n){this.#n[s]=n}valid(s){return this.#n[s]}get url(){return this.raw.url}get method(){return this.raw.method}get[Us](){return this.#s}get matchedRoutes(){return this.#s[0].map(([[,s]])=>s)}get routePath(){return this.#s[0].map(([[,s]])=>s)[this.routeIndex].path}};var Ds={Stringify:1,BeforeStream:2,Stream:3},ln=(s,n)=>{let i=new String(s);return i.isEscaped=!0,i.callbacks=n,i};var K=async(s,n,i,f,c)=>{if(typeof s==="object"&&!(s instanceof String)){if(!(s instanceof Promise))s=s.toString();if(s instanceof Promise)s=await s}let h=s.callbacks;if(!h?.length)return Promise.resolve(s);if(c)c[0]+=s;else c=[s];let t=Promise.all(h.map((u)=>u({phase:n,buffer:c,context:f}))).then((u)=>Promise.all(u.filter(Boolean).map((w)=>K(w,n,!1,f,c))).then(()=>c[0]));if(i)return ln(await t,h);else return t};var Cn="text/plain; charset=UTF-8",e=(s,n)=>{return{"Content-Type":s,...n}},Vs=class{#n;#s;env={};#i;finalized=!1;error;#h;#c;#f;#P;#w;#b;#u;#S;#$;constructor(s,n){if(this.#n=s,n)this.#c=n.executionCtx,this.env=n.env,this.#b=n.notFoundHandler,this.#$=n.path,this.#S=n.matchResult}get req(){return this.#s??=new G(this.#n,this.#$,this.#S),this.#s}get event(){if(this.#c&&"respondWith"in this.#c)return this.#c;else throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#c)return this.#c;else throw Error("This context has no ExecutionContext")}get res(){return this.#f||=new Response(null,{headers:this.#u??=new Headers})}set res(s){if(this.#f&&s){s=new Response(s.body,s);for(let[n,i]of this.#f.headers.entries()){if(n==="content-type")continue;if(n==="set-cookie"){let f=this.#f.headers.getSetCookie();s.headers.delete("set-cookie");for(let c of f)s.headers.append("set-cookie",c)}else s.headers.set(n,i)}}this.#f=s,this.finalized=!0}render=(...s)=>{return this.#w??=(n)=>this.html(n),this.#w(...s)};setLayout=(s)=>this.#P=s;getLayout=()=>this.#P;setRenderer=(s)=>{this.#w=s};header=(s,n,i)=>{if(this.finalized)this.#f=new Response(this.#f.body,this.#f);let f=this.#f?this.#f.headers:this.#u??=new Headers;if(n===void 0)f.delete(s);else if(i?.append)f.append(s,n);else f.set(s,n)};status=(s)=>{this.#h=s};set=(s,n)=>{this.#i??=new Map,this.#i.set(s,n)};get=(s)=>{return this.#i?this.#i.get(s):void 0};get var(){if(!this.#i)return{};return Object.fromEntries(this.#i)}#t(s,n,i){let f=this.#f?new Headers(this.#f.headers):this.#u??new Headers;if(typeof n==="object"&&"headers"in n){let h=n.headers instanceof Headers?n.headers:new Headers(n.headers);for(let[t,u]of h)if(t.toLowerCase()==="set-cookie")f.append(t,u);else f.set(t,u)}if(i)for(let[h,t]of Object.entries(i))if(typeof t==="string")f.set(h,t);else{f.delete(h);for(let u of t)f.append(h,u)}let c=typeof n==="number"?n:n?.status??this.#h;return new Response(s,{status:c,headers:f})}newResponse=(...s)=>this.#t(...s);body=(s,n,i)=>this.#t(s,n,i);text=(s,n,i)=>{return!this.#u&&!this.#h&&!n&&!i&&!this.finalized?new Response(s):this.#t(s,n,e(Cn,i))};json=(s,n,i)=>{return this.#t(JSON.stringify(s),n,e("application/json",i))};html=(s,n,i)=>{let f=(c)=>this.#t(c,n,e("text/html; charset=UTF-8",i));return typeof s==="object"?K(s,Ds.Stringify,!1,{}).then(f):f(s)};redirect=(s,n)=>{let i=String(s);return this.header("Location",!/[^\x00-\xFF]/.test(i)?i:encodeURI(i)),this.newResponse(null,n??302)};notFound=()=>{return this.#b??=()=>new Response,this.#b(this)}};var $="ALL",Qs="all",Js=["get","post","put","delete","options","patch"],R="Can not add a route since the matcher is already built.",q=class extends Error{};var _s="__COMPOSED_HANDLER";var Hn=(s)=>{return s.text("404 Not Found",404)},Gs=(s,n)=>{if("getResponse"in s){let i=s.getResponse();return n.newResponse(i.body,i)}return console.error(s),n.text("Internal Server Error",500)},M=class{get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath="/";#n="/";routes=[];constructor(s={}){[...Js,Qs].forEach((c)=>{this[c]=(h,...t)=>{if(typeof h==="string")this.#n=h;else this.#h(c,this.#n,h);return t.forEach((u)=>{this.#h(c,this.#n,u)}),this}}),this.on=(c,h,...t)=>{for(let u of[h].flat()){this.#n=u;for(let w of[c].flat())t.map((b)=>{this.#h(w.toUpperCase(),this.#n,b)})}return this},this.use=(c,...h)=>{if(typeof c==="string")this.#n=c;else this.#n="*",h.unshift(c);return h.forEach((t)=>{this.#h($,this.#n,t)}),this};let{strict:i,...f}=s;Object.assign(this,f),this.getPath=i??!0?s.getPath??A:Is}#s(){let s=new M({router:this.router,getPath:this.getPath});return s.errorHandler=this.errorHandler,s.#i=this.#i,s.routes=this.routes,s}#i=Hn;errorHandler=Gs;route(s,n){let i=this.basePath(s);return n.routes.map((f)=>{let c;if(n.errorHandler===Gs)c=f.handler;else c=async(h,t)=>(await E([],n.errorHandler)(h,()=>f.handler(h,t))).res,c[_s]=f.handler;i.#h(f.method,f.path,c)}),this}basePath(s){let n=this.#s();return n._basePath=z(this._basePath,s),n}onError=(s)=>{return this.errorHandler=s,this};notFound=(s)=>{return this.#i=s,this};mount(s,n,i){let f,c;if(i)if(typeof i==="function")c=i;else if(c=i.optionHandler,i.replaceRequest===!1)f=(u)=>u;else f=i.replaceRequest;let h=c?(u)=>{let w=c(u);return Array.isArray(w)?w:[w]}:(u)=>{let w=void 0;try{w=u.executionCtx}catch{}return[u.env,w]};f||=(()=>{let u=z(this._basePath,s),w=u==="/"?0:u.length;return(b)=>{let P=new URL(b.url);return P.pathname=P.pathname.slice(w)||"/",new Request(P,b)}})();let t=async(u,w)=>{let b=await n(f(u.req.raw),...h(u));if(b)return b;await w()};return this.#h($,z(s,"*"),t),this}#h(s,n,i){s=s.toUpperCase(),n=z(this._basePath,n);let f={basePath:this._basePath,path:n,method:s,handler:i};this.router.add(s,n,[i,f]),this.routes.push(f)}#c(s,n){if(s instanceof Error)return this.errorHandler(s,n);throw s}#f(s,n,i,f){if(f==="HEAD")return(async()=>new Response(null,await this.#f(s,n,i,"GET")))();let c=this.getPath(s,{env:i}),h=this.router.match(f,c),t=new Vs(s,{path:c,matchResult:h,env:i,executionCtx:n,notFoundHandler:this.#i});if(h[0].length===1){let w;try{w=h[0][0][0][0](t,async()=>{t.res=await this.#i(t)})}catch(b){return this.#c(b,t)}return w instanceof Promise?w.then((b)=>b||(t.finalized?t.res:this.#i(t))).catch((b)=>this.#c(b,t)):w??this.#i(t)}let u=E(h[0],this.errorHandler,this.#i);return(async()=>{try{let w=await u(t);if(!w.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return w.res}catch(w){return this.#c(w,t)}})()}fetch=(s,...n)=>{return this.#f(s,n[1],n[0],s.method)};request=(s,n,i,f)=>{if(s instanceof Request)return this.fetch(n?new Request(s,n):s,i,f);return s=s.toString(),this.fetch(new Request(/^https?:\/\//.test(s)?s:`http://localhost${z("/",s)}`,n),i,f)};fire=()=>{addEventListener("fetch",(s)=>{s.respondWith(this.#f(s.request,s,void 0,s.request.method))})}};var v="[^/]+",D=".*",V="(?:|/.*)",N=Symbol(),On=new Set(".\\+*[^]$()");function rn(s,n){if(s.length===1)return n.length===1?s<n?-1:1:-1;if(n.length===1)return 1;if(s===D||s===V)return 1;else if(n===D||n===V)return-1;if(s===v)return 1;else if(n===v)return-1;return s.length===n.length?s<n?-1:1:n.length-s.length}var Y=class{#n;#s;#i=Object.create(null);insert(s,n,i,f,c){if(s.length===0){if(this.#n!==void 0)throw N;if(c)return;this.#n=n;return}let[h,...t]=s,u=h==="*"?t.length===0?["","",D]:["","",v]:h==="/*"?["","",V]:h.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),w;if(u){let b=u[1],P=u[2]||v;if(b&&u[2]){if(P===".*")throw N;if(P=P.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(P))throw N}if(w=this.#i[P],!w){if(Object.keys(this.#i).some((S)=>S!==D&&S!==V))throw N;if(c)return;if(w=this.#i[P]=new Y,b!=="")w.#s=f.varIndex++}if(!c&&b!=="")i.push([b,w.#s])}else if(w=this.#i[h],!w){if(Object.keys(this.#i).some((b)=>b.length>1&&b!==D&&b!==V))throw N;if(c)return;w=this.#i[h]=new Y}w.insert(t,n,i,f,c)}buildRegExpStr(){let n=Object.keys(this.#i).sort(rn).map((i)=>{let f=this.#i[i];return(typeof f.#s==="number"?`(${i})@${f.#s}`:On.has(i)?`\\${i}`:i)+f.buildRegExpStr()});if(typeof this.#n==="number")n.unshift(`#${this.#n}`);if(n.length===0)return"";if(n.length===1)return n[0];return"(?:"+n.join("|")+")"}};var Ls=class{#n={varIndex:0};#s=new Y;insert(s,n,i){let f=[],c=[];for(let t=0;;){let u=!1;if(s=s.replace(/\{[^}]+\}/g,(w)=>{let b=`@\\${t}`;return c[t]=[b,w],t++,u=!0,b}),!u)break}let h=s.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let t=c.length-1;t>=0;t--){let[u]=c[t];for(let w=h.length-1;w>=0;w--)if(h[w].indexOf(u)!==-1){h[w]=h[w].replace(u,c[t][1]);break}}return this.#s.insert(h,n,f,this.#n,i),f}buildRegExp(){let s=this.#s.buildRegExpStr();if(s==="")return[/^$/,[],[]];let n=0,i=[],f=[];return s=s.replace(/#(\d+)|@(\d+)|\.\*\$/g,(c,h,t)=>{if(h!==void 0)return i[++n]=Number(h),"$()";if(t!==void 0)return f[Number(t)]=++n,"";return""}),[new RegExp(`^${s}`),i,f]}};var ks=[],on=[/^$/,[],Object.create(null)],Rs=Object.create(null);function qs(s){return Rs[s]??=new RegExp(s==="*"?"":`^${s.replace(/\/\*$|([.\\+*[^\]$()])/g,(n,i)=>i?`\\${i}`:"(?:|/.*)")}$`)}function Un(){Rs=Object.create(null)}function zn(s){let n=new Ls,i=[];if(s.length===0)return on;let f=s.map((b)=>[!/\*|\/:/.test(b[0]),...b]).sort(([b,P],[S,j])=>b?1:S?-1:P.length-j.length),c=Object.create(null);for(let b=0,P=-1,S=f.length;b<S;b++){let[j,C,x]=f[b];if(j)c[C]=[x.map(([H])=>[H,Object.create(null)]),ks];else P++;let l;try{l=n.insert(C,P,j)}catch(H){throw H===N?new q(C):H}if(j)continue;i[P]=x.map(([H,W])=>{let F=Object.create(null);W-=1;for(;W>=0;W--){let[O,T]=l[W];F[O]=T}return[H,F]})}let[h,t,u]=n.buildRegExp();for(let b=0,P=i.length;b<P;b++)for(let S=0,j=i[b].length;S<j;S++){let C=i[b][S]?.[1];if(!C)continue;let x=Object.keys(C);for(let l=0,H=x.length;l<H;l++)C[x[l]]=u[C[x[l]]]}let w=[];for(let b in t)w[b]=i[t[b]];return[h,w,c]}function X(s,n){if(!s)return;for(let i of Object.keys(s).sort((f,c)=>c.length-f.length))if(qs(i).test(n))return[...s[i]];return}var d=class{name="RegExpRouter";#n;#s;constructor(){this.#n={[$]:Object.create(null)},this.#s={[$]:Object.create(null)}}add(s,n,i){let f=this.#n,c=this.#s;if(!f||!c)throw Error(R);if(!f[s])[f,c].forEach((u)=>{u[s]=Object.create(null),Object.keys(u[$]).forEach((w)=>{u[s][w]=[...u[$][w]]})});if(n==="/*")n="*";let h=(n.match(/\/:/g)||[]).length;if(/\*$/.test(n)){let u=qs(n);if(s===$)Object.keys(f).forEach((w)=>{f[w][n]||=X(f[w],n)||X(f[$],n)||[]});else f[s][n]||=X(f[s],n)||X(f[$],n)||[];Object.keys(f).forEach((w)=>{if(s===$||s===w)Object.keys(f[w]).forEach((b)=>{u.test(b)&&f[w][b].push([i,h])})}),Object.keys(c).forEach((w)=>{if(s===$||s===w)Object.keys(c[w]).forEach((b)=>u.test(b)&&c[w][b].push([i,h]))});return}let t=k(n)||[n];for(let u=0,w=t.length;u<w;u++){let b=t[u];Object.keys(c).forEach((P)=>{if(s===$||s===P)c[P][b]||=[...X(f[P],b)||X(f[$],b)||[]],c[P][b].push([i,h-w+u+1])})}}match(s,n){Un();let i=this.#i();return this.match=(f,c)=>{let h=i[f]||i[$],t=h[2][c];if(t)return t;let u=c.match(h[0]);if(!u)return[[],ks];let w=u.indexOf("",1);return[h[1][w],u]},this.match(s,n)}#i(){let s=Object.create(null);return Object.keys(this.#s).concat(Object.keys(this.#n)).forEach((n)=>{s[n]||=this.#h(n)}),this.#n=this.#s=void 0,s}#h(s){let n=[],i=s===$;if([this.#n,this.#s].forEach((f)=>{let c=f[s]?Object.keys(f[s]).map((h)=>[h,f[s][h]]):[];if(c.length!==0)i||=!0,n.push(...c);else if(s!==$)n.push(...Object.keys(f[$]).map((h)=>[h,f[$][h]]))}),!i)return null;else return zn(n)}};var m=class{name="SmartRouter";#n=[];#s=[];constructor(s){this.#n=s.routers}add(s,n,i){if(!this.#s)throw Error(R);this.#s.push([s,n,i])}match(s,n){if(!this.#s)throw Error("Fatal error");let i=this.#n,f=this.#s,c=i.length,h=0,t;for(;h<c;h++){let u=i[h];try{for(let w=0,b=f.length;w<b;w++)u.add(...f[w]);t=u.match(s,n)}catch(w){if(w instanceof q)continue;throw w}this.match=u.match.bind(u),this.#n=[u],this.#s=void 0;break}if(h===c)throw Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,t}get activeRouter(){if(this.#s||this.#n.length!==1)throw Error("No active router has been determined yet.");return this.#n[0]}};var Q=Object.create(null),p=class{#n;#s;#i;#h=0;#c=Q;constructor(s,n,i){if(this.#s=i||Object.create(null),this.#n=[],s&&n){let f=Object.create(null);f[s]={handler:n,possibleKeys:[],score:0},this.#n=[f]}this.#i=[]}insert(s,n,i){this.#h=++this.#h;let f=this,c=Ns(n),h=[];for(let t=0,u=c.length;t<u;t++){let w=c[t],b=c[t+1],P=Ws(w,b),S=Array.isArray(P)?P[0]:w;if(S in f.#s){if(f=f.#s[S],P)h.push(P[1]);continue}if(f.#s[S]=new p,P)f.#i.push(P),h.push(P[1]);f=f.#s[S]}return f.#n.push({[s]:{handler:i,possibleKeys:h.filter((t,u,w)=>w.indexOf(t)===u),score:this.#h}}),f}#f(s,n,i,f){let c=[];for(let h=0,t=s.#n.length;h<t;h++){let u=s.#n[h],w=u[n]||u[$],b={};if(w!==void 0){if(w.params=Object.create(null),c.push(w),i!==Q||f&&f!==Q)for(let P=0,S=w.possibleKeys.length;P<S;P++){let j=w.possibleKeys[P],C=b[w.score];w.params[j]=f?.[j]&&!C?f[j]:i[j]??f?.[j],b[w.score]=!0}}}return c}search(s,n){let i=[];this.#c=Q;let c=[this],h=y(n),t=[];for(let u=0,w=h.length;u<w;u++){let b=h[u],P=u===w-1,S=[];for(let j=0,C=c.length;j<C;j++){let x=c[j],l=x.#s[b];if(l)if(l.#c=x.#c,P){if(l.#s["*"])i.push(...this.#f(l.#s["*"],s,x.#c));i.push(...this.#f(l,s,x.#c))}else S.push(l);for(let H=0,W=x.#i.length;H<W;H++){let F=x.#i[H],O=x.#c===Q?{}:{...x.#c};if(F==="*"){let o=x.#s["*"];if(o)i.push(...this.#f(o,s,x.#c)),o.#c=O,S.push(o);continue}let[T,os,B]=F;if(!b&&!(B instanceof RegExp))continue;let r=x.#s[T],tn=h.slice(u).join("/");if(B instanceof RegExp){let o=B.exec(tn);if(o){if(O[os]=o[0],i.push(...this.#f(r,s,x.#c,O)),Object.keys(r.#s).length){r.#c=O;let un=o[0].match(/\//)?.length??0;(t[un]||=[]).push(r)}continue}}if(B===!0||B.test(b))if(O[os]=b,P){if(i.push(...this.#f(r,s,O,x.#c)),r.#s["*"])i.push(...this.#f(r.#s["*"],s,O,x.#c))}else r.#c=O,S.push(r)}}c=S.concat(t.shift()??[])}if(i.length>1)i.sort((u,w)=>{return u.score-w.score});return[i.map(({handler:u,params:w})=>[u,w])]}};var a=class{name="TrieRouter";#n;constructor(){this.#n=new p}add(s,n,i){let f=k(n);if(f){for(let c=0,h=f.length;c<h;c++)this.#n.insert(s,f[c],i);return}this.#n.insert(s,n,i)}match(s,n){return this.#n.search(s,n)}};var ss=class extends M{constructor(s={}){super(s);this.router=s.router??new m({routers:[new d,new a]})}};var vi=Nn(Wn(),1),ns=Symbol("route:metadata"),is=Symbol("controller:metadata"),vs=Symbol("parameter:metadata"),Ys=Symbol("dependency:metadata"),fs=Symbol("websocket:metadata"),Ts=Symbol("websocket:handler:metadata"),cs=Symbol("graphql:resolver"),J=Symbol("graphql:field");class U{routes=new Map;controllers=new Map;routesByController=new Map;websockets=new Map;graphqlResolvers=new Map;graphqlFields=new Map;registerRoute(s){let n=this.getRouteKey(s.target,s.propertyKey);if(this.routes.set(n,s),!this.routesByController.has(s.target))this.routesByController.set(s.target,[]);this.routesByController.get(s.target).push(s)}registerController(s,n){this.controllers.set(s,n)}getRoutes(){return Array.from(this.routes.values())}getRoute(s,n){let i=this.getRouteKey(s,n);return this.routes.get(i)}getRoutesByController(s){return this.routesByController.get(s)||[]}getController(s){return this.controllers.get(s)}getControllers(){return new Map(this.controllers)}registerWebSocket(s){this.websockets.set(s.target,s)}getWebSockets(){return Array.from(this.websockets.values())}getWebSocket(s){return this.websockets.get(s)}registerGraphQLResolver(s){this.graphqlResolvers.set(s.target,s)}registerGraphQLField(s){let n=this.getRouteKey(s.target,s.propertyKey);this.graphqlFields.set(n,s)}getGraphQLResolvers(){return Array.from(this.graphqlResolvers.values())}getGraphQLResolver(s){return this.graphqlResolvers.get(s)}getGraphQLFields(){return Array.from(this.graphqlFields.values())}getGraphQLFieldsByResolver(s){return Array.from(this.graphqlFields.values()).filter((n)=>n.target===s)}clear(){this.routes.clear(),this.controllers.clear(),this.routesByController.clear(),this.websockets.clear(),this.graphqlResolvers.clear(),this.graphqlFields.clear()}getRouteKey(s,n){return`${s.name}:${n}`}static defineRoute(s,n,i){let f=this.getRouteMetadata(s,n),c={...f,...i,target:s.constructor,propertyKey:n,middleware:[...f?.middleware||[],...i.middleware||[]],parameters:i.parameters||f?.parameters||[],dependencies:i.dependencies||f?.dependencies||[],responses:i.responses||f?.responses||[]};Reflect.defineMetadata(ns,c,s,n)}static defineParameter(s,n,i,f){let c=this.getParameterMetadata(s,n)||[];c[i]=f,Reflect.defineMetadata(vs,c,s,n);let h=this.getRouteMetadata(s,n);this.defineRoute(s,n,{...h,parameters:c})}static defineDependency(s,n,i,f){let c=this.getDependencyMetadata(s,n)||[];c[i]=f,Reflect.defineMetadata(Ys,c,s,n);let h=this.getRouteMetadata(s,n);this.defineRoute(s,n,{...h,dependencies:c})}static defineController(s,n){Reflect.defineMetadata(is,n,s)}static getRouteMetadata(s,n){return Reflect.getMetadata(ns,s,n)}static getParameterMetadata(s,n){return Reflect.getMetadata(vs,s,n)}static getDependencyMetadata(s,n){return Reflect.getMetadata(Ys,s,n)}static getControllerMetadata(s){return Reflect.getMetadata(is,s)}static hasControllerMetadata(s){return Reflect.hasMetadata(is,s)}static hasRouteMetadata(s,n){return Reflect.hasMetadata(ns,s,n)}static getRouteMethods(s){let n=s.prototype,i=[],f=Object.getOwnPropertyNames(n);for(let c of f){if(c==="constructor")continue;if(this.hasRouteMetadata(n,c))i.push(c)}return i}static defineWebSocket(s,n){let f={...this.getWebSocketMetadata(s),...n,target:s};Reflect.defineMetadata(fs,f,s)}static defineWebSocketHandler(s,n,i){let f=this.getWebSocketMetadata(s.constructor)||{};switch(i.type){case"connect":f.onConnect=n;break;case"message":f.onMessage=n,f.messageSchema=i.schema;break;case"disconnect":f.onDisconnect=n;break}this.defineWebSocket(s.constructor,f),Reflect.defineMetadata(Ts,i,s,n)}static getWebSocketMetadata(s){return Reflect.getMetadata(fs,s)}static getWebSocketHandlerMetadata(s,n){return Reflect.getMetadata(Ts,s,n)}static hasWebSocketMetadata(s){return Reflect.hasMetadata(fs,s)}static defineGraphQLResolver(s,n){Reflect.defineMetadata(cs,n,s)}static defineGraphQLField(s,n,i){Reflect.defineMetadata(J,i,s,n);let f=this.getGraphQLFieldsMetadata(s.constructor)||[];f.push(i),Reflect.defineMetadata(J,f,s.constructor)}static getGraphQLResolverMetadata(s){return Reflect.getMetadata(cs,s)}static getGraphQLFieldsMetadata(s){return Reflect.getMetadata(J,s)||[]}static getGraphQLFieldMetadata(s,n){return Reflect.getMetadata(J,s,n)}static hasGraphQLResolverMetadata(s){return Reflect.hasMetadata(cs,s)}static hasGraphQLFieldMetadata(s,n){return Reflect.hasMetadata(J,s,n)}}class hs{singletons=new Map;requestScoped=new WeakMap;providers=new Map;resolutionStack=new Set;providerNameCache=new WeakMap;stats={singletonHits:0,singletonMisses:0,requestHits:0,requestMisses:0,transientCreations:0};register(s,n){this.providers.set(s,n||{scope:"transient"})}async resolve(s,n){let i=this.providers.get(s)||{scope:n?.scope||"transient"},f=n?.scope||i.scope||"transient";if(f==="singleton"){if(this.singletons.has(s))return this.stats.singletonHits++,this.singletons.get(s);if(this.stats.singletonMisses++,this.resolutionStack.has(s))throw Error(`Circular dependency detected: ${this.buildCircularDependencyMessage(s)}`);this.resolutionStack.add(s);try{let c=await this.create(s,i,n?.context);return this.singletons.set(s,c),c}finally{this.resolutionStack.delete(s)}}if(f==="request"&&n?.context){let c=this.requestScoped.get(n.context);if(c?.has(s))return this.stats.requestHits++,c.get(s);if(this.stats.requestMisses++,!c)c=new Map,this.requestScoped.set(n.context,c);if(this.resolutionStack.has(s))throw Error(`Circular dependency detected: ${this.buildCircularDependencyMessage(s)}`);this.resolutionStack.add(s);try{let h=await this.create(s,i,n.context);return c.set(s,h),h}finally{this.resolutionStack.delete(s)}}if(this.stats.transientCreations++,this.resolutionStack.has(s))throw Error(`Circular dependency detected: ${this.buildCircularDependencyMessage(s)}`);this.resolutionStack.add(s);try{return await this.create(s,i,n?.context)}finally{this.resolutionStack.delete(s)}}buildCircularDependencyMessage(s){let n=Array.from(this.resolutionStack),i=this.getProviderName(s);return n.map((c)=>this.getProviderName(c)).join(" -> ")+" -> "+i}async create(s,n,i){if(n.factory)return n.factory();if(typeof s==="function")if(s.prototype&&s.prototype.constructor===s){let f=new s;return await this.resolveNestedDependencies(f,i),f}else{let f=s();return f instanceof Promise?await f:f}throw Error("Invalid provider type")}async resolveNestedDependencies(s,n){}getProviderName(s){let n=this.providerNameCache.get(s);if(n)return n;let i;if(typeof s==="function")if(s.name)i=s.name;else i=s.toString().substring(0,50);else i=String(s);return this.providerNameCache.set(s,i),i}clear(){this.singletons.clear(),this.providers.clear(),this.resolutionStack.clear(),this.providerNameCache=new WeakMap,this.resetStats()}clearRequestScope(s){this.requestScoped.delete(s)}getStats(){let s=this.stats.singletonHits+this.stats.singletonMisses,n=s>0?this.stats.singletonHits/s*100:0,i=this.stats.requestHits+this.stats.requestMisses,f=i>0?this.stats.requestHits/i*100:0;return{singletonHits:this.stats.singletonHits,singletonMisses:this.stats.singletonMisses,singletonHitRate:Math.round(n*100)/100,requestHits:this.stats.requestHits,requestMisses:this.stats.requestMisses,requestHitRate:Math.round(f*100)/100,transientCreations:this.stats.transientCreations}}resetStats(){this.stats={singletonHits:0,singletonMisses:0,requestHits:0,requestMisses:0,transientCreations:0}}}var In=/^[\w!#$%&'*.^`|~+-]+$/,Xn=/^[ !#-:<-[\]-~]*$/,ts=(s,n)=>{if(n&&s.indexOf(n)===-1)return{};let i=s.trim().split(";"),f={};for(let c of i){c=c.trim();let h=c.indexOf("=");if(h===-1)continue;let t=c.substring(0,h).trim();if(n&&n!==t||!In.test(t))continue;let u=c.substring(h+1).trim();if(u.startsWith('"')&&u.endsWith('"'))u=u.slice(1,-1);if(Xn.test(u)){if(f[t]=u.indexOf("%")!==-1?I(u,Z):u,n)break}}return f};var Es=(s,n,i)=>{let f=s.req.raw.headers.get("Cookie");if(typeof n==="string"){if(!f)return;let h=n;if(i==="secure")h="__Secure-"+n;else if(i==="host")h="__Host-"+n;return ts(f,h)[h]}if(!f)return{};return ts(f)};class gs{static json(s,n=200,i){return new us(s,n,i)}static html(s,n=200){return new ws(s,n)}static file(s,n){return new Ps(s,n)}static stream(s,n){return new Ss(s,n)}static redirect(s,n=302){return new bs(s,n)}}class us{data;status;headers;constructor(s,n=200,i={}){this.data=s;this.status=n;this.headers=i}toHonoResponse(s){return s.json(this.data,this.status,this.headers)}}class ws{content;status;constructor(s,n=200){this.content=s;this.status=n}toHonoResponse(s){return s.html(this.content,this.status)}}class bs{url;status;constructor(s,n=302){this.url=s;this.status=n}toHonoResponse(s){return s.redirect(this.url,this.status)}}class Ps{path;options;constructor(s,n){this.path=s;this.options=n}async toHonoResponse(s){try{let n=typeof Bun<"u"?Bun.file(this.path):await this.readFileNode(this.path),f={"Content-Type":this.options?.contentType||this.guessContentType(this.path)};if(this.options?.download||this.options?.filename){let c=this.options?.filename||this.path.split("/").pop()||"download",h=this.options?.download?"attachment":"inline";f["Content-Disposition"]=`${h}; filename="${c}"`}if(typeof Bun<"u"&&n instanceof Blob)return s.body(n,200,f);else return s.body(n,200,f)}catch(n){return s.json({error:"File not found",message:n instanceof Error?n.message:"Unknown error"},404)}}async readFileNode(s){throw Error("File reading in Node.js requires fs module - use Bun runtime or implement adapter")}guessContentType(s){let n=s.split(".").pop()?.toLowerCase();return{html:"text/html",css:"text/css",js:"application/javascript",json:"application/json",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml",pdf:"application/pdf",txt:"text/plain",xml:"application/xml"}[n||""]||"application/octet-stream"}}class Ss{stream;options;constructor(s,n){this.stream=s;this.options=n}toHonoResponse(s){let n={"Content-Type":this.options?.contentType||"application/octet-stream",...this.options?.headers};return s.body(this.stream,200,n)}}class $s{static serialize(s,n){if(n===null||n===void 0)return s.body(null,204);if(n instanceof gs)return n;if(n instanceof us)return n.toHonoResponse(s);if(n instanceof ws)return n.toHonoResponse(s);if(n instanceof Ps)return n.toHonoResponse(s);if(n instanceof Ss)return n.toHonoResponse(s);if(n instanceof bs)return n.toHonoResponse(s);if(n&&typeof n.toHonoResponse==="function")return n.toHonoResponse(s);return s.json(n)}}class xs{static compile(s){let n=this.compilePathRegex(s.path),i=this.resolveParameterOrder(s.parameters),f=this.resolveDependencyOrder(s.dependencies),c=this.calculateMaxArgumentIndex(s.parameters,s.dependencies),h=this.computeParameterFlags(s.parameters);return{...s,pathRegex:n,parameterOrder:i,dependencyOrder:f,maxArgumentIndex:c,...h}}static compilePathRegex(s){let n=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return n=n.replace(/\\\{([^}]+)\\\}/g,"(?<$1>[^/]+)"),n=n.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g,"(?<$1>[^/]+)"),n=`^${n}$`,new RegExp(n)}static resolveParameterOrder(s){if(!s||s.length===0)return[];return s.map((n)=>n.index).filter((n)=>n!==void 0).sort((n,i)=>n-i)}static resolveDependencyOrder(s){if(!s||s.length===0)return[];return s.map((n)=>n.index).filter((n)=>n!==void 0).sort((n,i)=>n-i)}static calculateMaxArgumentIndex(s,n){let i=-1;if(s&&s.length>0){let f=Math.max(...s.map((c)=>c.index));i=Math.max(i,f)}if(n&&n.length>0){let f=Math.max(...n.map((c)=>c.index));i=Math.max(i,f)}return i}static computeParameterFlags(s){if(!s||s.length===0)return{hasBody:!1,hasQuery:!1,hasParams:!1,hasHeaders:!1,hasCookies:!1,hasDependencies:!1};return{hasBody:s.some((n)=>n.type==="body"),hasQuery:s.some((n)=>n.type==="query"),hasParams:s.some((n)=>n.type==="param"),hasHeaders:s.some((n)=>n.type==="header"),hasCookies:s.some((n)=>n.type==="cookie"),hasDependencies:!1}}static compileAll(s){return s.map((n)=>this.compile(n))}}class js{app;metadata;container;validator;errorHandler;compiledRoutes=new Map;constructor(s,n,i,f,c){this.app=s;this.metadata=n;this.container=i;this.validator=f;this.errorHandler=c}compile(){let s=this.metadata.getRoutes(),n=xs.compileAll(s);for(let i of n){let f=`${i.target.name}:${i.propertyKey}`;this.compiledRoutes.set(f,i);let c=this.createHandler(i),h=this.normalizePath(i.path),t=i.method.toLowerCase();if(i.middleware&&i.middleware.length>0)this.app[t](h,...i.middleware,c);else this.app[t](h,c)}}normalizePath(s){if(!s.startsWith("/"))s="/"+s;if(s=s.replace(/\{([^}]+)\}/g,":$1"),s.length>1&&s.endsWith("/"))s=s.slice(0,-1);return s}createHandler(s){return async(n)=>{try{let i=await this.extractParameters(n,s.parameters),f=await this.resolveDependencies(n,s.dependencies),c=this.mergeArguments(i,f,s.parameters,s.maxArgumentIndex),h;if(s.handler)h=await s.handler(n,...c);else h=await(await this.container.resolve(s.target,{scope:"transient",context:n}))[s.propertyKey](...c);return this.serializeResponse(n,h)}catch(i){return await this.handleError(n,i)}}}serializeResponse(s,n){return $s.serialize(s,n)}async handleError(s,n){return await this.errorHandler.handle(n,s)}async extractParameters(s,n){let i=[];for(let f of n){let c;switch(f.type){case"body":try{c=await s.req.json()}catch(h){c=null}break;case"query":if(f.name)c=s.req.query(f.name);else c=s.req.query();break;case"param":if(f.name)c=s.req.param(f.name);else c=s.req.param();break;case"header":if(f.name)c=s.req.header(f.name);else{let h={};s.req.raw.headers.forEach((t,u)=>{h[u]=t}),c=h}break;case"cookie":if(f.name)c=Es(s,f.name);else{let h=s.req.header("cookie");if(h)c=Object.fromEntries(h.split(";").map((t)=>{let[u,...w]=t.trim().split("=");return[u,w.join("=")]}));else c={}}break;case"request":c=s.req;break;case"response":case"context":c=s;break;default:c=void 0}if(f.schema)try{c=await this.validator.validate(c,f.schema)}catch(h){throw h}i[f.index]=c}return i}mergeArguments(s,n,i,f){let c=f!==void 0?f:Math.max(i.length>0?Math.max(...i.map((t)=>t.index)):-1,s.length-1,n.length-1),h=Array(c+1);for(let t=0;t<=c;t++)if(s[t]!==void 0)h[t]=s[t];else if(n[t]!==void 0)h[t]=n[t];return h}async resolveDependencies(s,n){let i=[];for(let f of n)try{let c=await this.container.resolve(f.provider,{scope:f.scope,context:s});i[f.index]=c}catch(c){throw Error(`Failed to resolve dependency at index ${f.index}: ${c instanceof Error?c.message:"Unknown error"}`)}return i}}class ls{plugins=new Map;installed=new Set;register(s){if(this.plugins.has(s.name))throw Error(`Plugin "${s.name}" is already registered`);this.plugins.set(s.name,s)}async install(s){let n=this.resolveInstallOrder();for(let i of n)await this.plugins.get(i).install(s),this.installed.add(i)}isInstalled(s){return this.installed.has(s)}getPlugin(s){return this.plugins.get(s)}getPluginNames(){return Array.from(this.plugins.keys())}resolveInstallOrder(){let s=new Set,n=new Set,i=[],f=(c,h=[])=>{if(n.has(c)){let u=[...h,c].join(" -> ");throw Error(`Circular dependency detected in plugins: ${u}`)}if(s.has(c))return;n.add(c);let t=this.plugins.get(c);if(!t)throw Error(`Plugin "${c}" is not registered`);if(t.dependencies)for(let u of t.dependencies){if(!this.plugins.has(u))throw Error(`Plugin "${c}" depends on "${u}" which is not registered`);f(u,[...h,c])}n.delete(c),s.add(c),i.push(c)};for(let c of this.plugins.keys())f(c);return i}}class rs{hono;metadata;container;validator;errorHandler;compiler;pluginManager;config;compiled=!1;globalMiddleware=[];groupPrefix="";constructor(s){if(this.config={adapter:"hono",title:"FastAPI-TS API",version:"1.0.0",docs:!0,...s},this.hono=new ss,this.metadata=new U,this.container=new hs,this.validator=new ds,this.errorHandler=new ms,this.pluginManager=new ls,this.compiler=new js(this.hono,this.metadata,this.container,this.validator,this.errorHandler),this.config.cors)if(this.config.cors===!0)this.useCors();else this.useCors(this.config.cors)}include(s){let n=U.getControllerMetadata(s);if(n)this.metadata.registerController(s,n);let i=U.getRouteMethods(s);for(let f of i){let c=U.getRouteMetadata(s.prototype,f),h=U.getParameterMetadata(s.prototype,f),t=U.getDependencyMetadata(s.prototype,f);if(c&&c.method&&c.path!==void 0){let u=n?.prefix||"",w=this.normalizePath(u,c.path);this.metadata.registerRoute({target:s,propertyKey:f,method:c.method,path:w,middleware:[...n?.middleware||[],...c.middleware||[]],parameters:h||c.parameters||[],dependencies:t||c.dependencies||[],responses:c.responses||[],docs:c.docs})}}}get(s,n){this.registerFunctionalRoute("GET",s,n)}post(s,n){this.registerFunctionalRoute("POST",s,n)}put(s,n){this.registerFunctionalRoute("PUT",s,n)}delete(s,n){this.registerFunctionalRoute("DELETE",s,n)}patch(s,n){this.registerFunctionalRoute("PATCH",s,n)}route(s){return new fn(this,s)}group(s,n){let i=this.groupPrefix;this.groupPrefix=this.normalizePath(this.groupPrefix,s),n(),this.groupPrefix=i}registerFunctionalRoute(s,n,i){let f=this.normalizePath(this.groupPrefix,n),c={target:nn,propertyKey:`${s.toLowerCase()}_${f}`,method:s,path:f,middleware:i.middleware||[],parameters:this.extractParametersFromSchema(i.schema),dependencies:[],responses:i.responses||[],docs:i.docs,handler:i.handler};this.metadata.registerRoute(c)}extractParametersFromSchema(s){let n=[],i=0;if(s?.body)n.push({index:i++,type:"body",schema:s.body,required:!0});if(s?.query)n.push({index:i++,type:"query",schema:s.query,required:!1});if(s?.params)n.push({index:i++,type:"param",schema:s.params,required:!0});if(s?.headers)n.push({index:i++,type:"header",schema:s.headers,required:!1});return n}use(s){this.globalMiddleware.push(s),this.hono.use("*",s)}useCors(s){let n=ps(s);this.use(n)}useRateLimit(s){let n=as(s);this.use(n)}useCompression(s){let n=sn(s);this.use(n)}usePlugin(s){this.pluginManager.register(s)}getPluginManager(){return this.pluginManager}onError(s){this.errorHandler.setCustomHandler(s)}getErrorHandler(){return this.errorHandler}normalizePath(...s){let n=s.filter((i)=>i!=="").join("/").replace(/\/+/g,"/").replace(/\/$/,"");return n.startsWith("/")?n:`/${n}`}getHono(){return this.hono}getMetadata(){return this.metadata}getContainer(){return this.container}getConfig(){return this.config}isCompiled(){return this.compiled}markCompiled(){this.compiled=!0}async compile(){if(this.compiled){console.warn("Routes have already been compiled. Skipping compilation.");return}await this.pluginManager.install(this),this.compiler.compile(),this.compiled=!0}async listen(s,n){if(!this.compiled)await this.compile();return this.createAdapter().listen(s,n)}createAdapter(){let s=this.config.adapter||"hono";switch(s){case"hono":{let{HonoAdapter:n}=Os(Hs);return new n(this.hono)}case"express":{let{ExpressAdapter:n}=Os(Ms);return new n(this)}case"native":{let{HonoAdapter:n}=Os(Hs);return new n(this.hono)}default:throw Error(`Unknown adapter type: ${s}. Supported adapters: 'hono', 'express', 'native'`)}}}class nn{}class fn{app;path;constructor(s,n){this.app=s;this.path=n}get(s){return this.app.get(this.path,s),this}post(s){return this.app.post(this.path,s),this}put(s){return this.app.put(this.path,s),this}delete(s){return this.app.delete(this.path,s),this}patch(s){return this.app.patch(this.path,s),this}}function cn(s){let n={docs:!1,cors:!1,...s};return new rs(n)}function Bn(s,n,i,f){let c=s.getContainer(),h=typeof i==="function"?i:()=>i;c.register(n,{scope:f?.scope||"singleton",factory:h})}function hn(s){return new _(s)}async function Zn(s,n){let i=cn(n);await s(i),await i.compile();let f=hn(i);return{app:i,client:f}}function Dn(s){s.getContainer().clear()}export{Zn as setupTestApp,Bn as mockDependency,hn as createTestClient,cn as createTestApp,Dn as clearMocks,_ as TestClient};export{U as e,hs as f,gs as g,us as h,ws as i,bs as j,Ps as k,Ss as l,$s as m,xs as n,js as o,ls as p,Ks as q,es as r,rs as s,_ as t,cn as u,Bn as v,hn as w,Zn as x,Dn as y};
|
|
3
|
+
|
|
4
|
+
//# debugId=B14BE0F28C7B960464756E2164756E21
|