diesel-core 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Downloads](https://img.shields.io/npm/dm/@nativecn/cli.svg)](https://www.npmjs.com/package/diesel-core)
2
+
1
3
  ### [Read the docs](https://diesel-core.vercel.app/)
2
4
 
3
5
  # DieselJS
@@ -1 +1,2 @@
1
1
  export declare const supportedMethods: string[];
2
+ export declare const EMPTY_OBJ: Readonly<{}>;
package/dist/constant.js CHANGED
@@ -1 +1 @@
1
- var P=["GET","POST","PUT","PATCH","DELETE","ANY","ALL","HEAD","OPTIONS","PROPFIND"];export{P as supportedMethods};
1
+ var e=["GET","POST","PUT","PATCH","DELETE","ANY","ALL","HEAD","OPTIONS","PROPFIND"],t=Object.freeze({});export{e as supportedMethods,t as EMPTY_OBJ};
package/dist/ctx.js CHANGED
@@ -1,118 +1 @@
1
- function A($){switch($.split(".").pop()?.toLowerCase()){case"js":return"application/javascript";case"css":return"text/css";case"html":return"text/html";case"json":return"application/json";case"png":return"image/png";case"jpg":case"jpeg":return"image/jpeg";case"svg":return"image/svg+xml";case"gif":return"image/gif";case"woff":return"font/woff";case"woff2":return"font/woff2";default:return"application/octet-stream"}}var J={reset:"\x1B[0m",info:"\x1B[36m",warn:"\x1B[33m",error:"\x1B[31m",method:{GET:"\x1B[32m",POST:"\x1B[34m",PUT:"\x1B[35m",DELETE:"\x1B[31m",PATCH:"\x1B[36m"}},x=($,F,z)=>{let X=J[$]||J.reset,Z=z?.method?J.method[z.method]||J.reset:J.reset,Q=z?.status?z.status>=500?J.error:z.status>=400?J.warn:J.info:J.reset;console.log(`
2
- ${X}[${$.toUpperCase()}]${J.reset} ${F} - ${Z}${z?.method||""}${J.reset}`);let V={timestamp:new Date().toISOString(),...z,status:z?.status?`${Q}${z.status}${J.reset}`:void 0,method:z?.method?`${Z>X}${z.method}${J.reset}`:void 0};console.log(JSON.stringify(V,null,2)+`
3
- `)},l=($)=>{let{app:F,logger:z,logLevel:X="info",onRequest:Z,onSend:Q,onError:V}=$||{};F?.addHooks("onRequest",(D)=>{D.req.startTime=Date.now(),z?.()??x(X,"Incoming Request",{method:D.req.method,url:D.path,headers:{"user-agent":D.req.headers.get("user-agent"),"content-type":D.req.headers.get("content-type")}}),Z?.(D)}),F?.addHooks("onSend",async(D,G)=>{let W=`${Date.now()-D.req.startTime}ms`;z?.()??x(X,"Response Sent",{method:D.req.method,url:D.url.toString(),status:G.status,duration:W,reqId:D.get?.("requestId"),headers:{"content-type":G.headers.get("content-type")}});let U=await Q?.(D);if(U instanceof Response)return U}),F?.addHooks("onError",async(D,G,W)=>{z?.()??x("error","Unhandled Error",{method:W.method,url:G,status:500,error:D.message});let U=await V?.(D,G,W);if(U instanceof Response)return U})},y=($,F,z,X=0,Z,Q)=>{let V=J.method[F]||J.reset,D=X>=500?J.error:X>=400?J.warn:J.info,G=Q?`[${Q}] `:"",W=$==="<--"?`${$} ${V}${F}${J.reset} ${z} ${G}`:`${$} ${V}${F}${J.reset} ${z} ${D}${X}${J.reset} ${Z??""} ${G}`;console.log(W)},U$=($)=>{let F=Date.now()-$;return F<1000?`${F}ms`:`${Math.round(F/1000)}s`},n=($)=>{let{app:F,log:z,onRequest:X,onSend:Z,onError:Q}=$;F.addHooks("onRequest",(V)=>{let{req:D,path:G}=V;D.startTime=Date.now(),z?.()??y("<--",D.method,G),X?.(D,G)}),F.addHooks("onSend",async(V,D)=>{let{method:G,url:W}=V.req,U=new URL(W).pathname,M=V.get?.("requestId");z?.()??y("-->",G,U,D?.status,U$(V.req.startTime),M);let w=await Z?.(V);return w instanceof Response?w:D}),F.addHooks("onError",async(V,D,G)=>{let W=G.path;z?.()??y(V.message,G.method,W,500);let U=await Q?.(V,W,G);if(U instanceof Response)return U})};function s($,F){if(!$)throw Error("JWT library is not defined, please provide jwt to authenticateJwt Function");return(z)=>{try{let X=z.cookies?.accessToken??z.req?.headers?.get("Authorization");if(!X)return z.json({message:"Unauthorized",error:"No token provided"},401);if(X.startsWith("Bearer "))X=X.slice(7);let Z=$?.verify(X,F);if(!Z)return z.json({message:"Unauthorized",error:"Token could not be decoded"},401);z.set("user",Z)}catch(X){let Z="Invalid token";if(X.name==="TokenExpiredError")Z="Token expired";else if(X.name==="JsonWebTokenError")Z="Malformed or tampered token";return z.json({message:"Unauthorized",error:Z},401)}}}function r($,F,z){if(!$)throw Error("JWT library is not defined, please provide jwt to authenticateJwtDB Function");if(!F)throw Error("User model is not defined, please provide UserModel to authenticateJwtDB Function");return async(X)=>{try{let Z=X.cookies?.accessToken??X.req?.headers?.get("Authorization");if(!Z)return X.json({message:"Unauthorized",error:"No token provided"},401);if(Z.startsWith("Bearer "))Z=Z.slice(7);let Q=$?.verify(Z,z);if(!Q)return X.json({message:"Unauthorized",error:"Token could not be decoded"},401);let V=await F.findById(Q._id).select("-password -refreshToken");if(!V)return X.json({message:"Unauthorized: User not found"},404);X.set("user",V);return}catch(Z){let Q="Invalid token";if(Z.name==="TokenExpiredError")Q="Token expired";else if(Z.name==="JsonWebTokenError")Q="Malformed or tampered token";return X.json({message:"Unauthorized",error:Q},401)}}}var N=($)=>$!==null&&typeof $==="object"&&typeof $.then==="function",c=($)=>$!==null&&typeof $==="object"&&typeof $.status==="number"&&typeof $.headers==="object";async function f($,F,z){if(!F?.length)return;for(let X=0;X<F.length;X++){let Z=F[X](...z),Q=Z instanceof Promise?await Z:Z;if(Q&&$!=="onRequest")return Q}}async function a($,F,z){for(let X of $){let Z=await X(F,z);if(Z)return Z}}async function t($,F,z){let X=await B$($,F,z),Z=N(X)?await X:X;if(Z)return Z}async function B$($,F,z){if(F.endsWith("/"))F=F.slice(0,-1);if(!$.filters.has(F))if($.filterFunction.length)for(let X of $.filterFunction){let Z=await X(z);if(Z)return Z}else return Response.json({error:"Protected route, authentication required"},{status:401})}async function P($,F,z){if($.staticPath){let D=!0;if($.staticRequestPath)D=z.startsWith($.staticRequestPath);if(D){let G=await J$($,z,F);if(G)return G}}let Q=($.router.find(F.req.method,"*")?.handler).slice(-1);if(Q.length>0){let D=await Q[0](F);if(c(D))return D}let V=await Promise.resolve($.routeNotFoundFunc(F));return c(V)?V:u(404,`404 Route not found for ${z}`)}function u($,F){return new Response(JSON.stringify({error:F}),{status:$,headers:{"Content-Type":"application/json"}})}async function J$($,F,z){if(!$.staticPath)return null;let X=`${$.staticPath}${F}`;if(await Bun.file(X).exists()){let Q=A(X);return z.file(X,Q,200)}return null}var m=($)=>$.constructor.name==="AsyncFunction",e=($,F,z,...X)=>{if(F.length>5)$.push(`
4
- for (let i = 0; i < diesel.hooks.${z}.length; i++) {
5
- const result = diesel.hooks.${z}[i](${X});
6
- const finalResult = result instanceof Promise ? await result : result;
7
- if (finalResult && '${z}' !== 'onRequest') return finalResult
8
- }
9
- `);else F?.forEach((Z,Q)=>{if(m(Z))$.push(`
10
- const ${z}${Q}Result = await diesel.hooks.${z}[${Q}](${X})
11
- if (${z}${Q}Result && '${z}' !== 'onRequest') return ${z}${Q}Result
12
- `);else $.push(`
13
- const ${z}${Q}Result = diesel.hooks.${z}[${Q}](${X})
14
- if (${z}${Q}Result && '${z}' !== 'onRequest') return ${z}${Q}Result
15
- `)})},S$=($)=>{$.push(`
16
- let pathname;
17
- const start = req.url.indexOf('/', req.url.indexOf(':') + 4);
18
- let i = start;
19
- for (; i < req.url.length; i++) {
20
- const charCode = req.url.charCodeAt(i);
21
- if (charCode === 37) { // percent-encoded
22
- const queryIndex = req.url.indexOf('?', i);
23
- const path = req.url.slice(start, queryIndex === -1 ? undefined : queryIndex);
24
- pathname = tryDecodeURI(path.includes('%25') ? path.replace(/%25/g, '%2525') : path);
25
- break;
26
- } else if (charCode === 63) { // ?
27
- break;
28
- }
29
- }
30
- if (!pathname) {
31
- pathname = req.url.slice(start, i);
32
- }
33
- `)};var o=($)=>{let F=[],z=$?.hasPreHandlerHook?$.hooks.preHandler:[],X=$?.hasOnSendHook?$.hooks.onSend:[];if(S$(F),F.push(`
34
- const matchedRouteHandler = diesel.router.find(req.method, pathname);
35
- `),F.push(`
36
- const ctx = new Context(
37
- req,
38
- server,
39
- pathname,
40
- matchedRouteHandler?.params,
41
- env,
42
- executionContext
43
- )
44
- `),$.hasFilterEnabled)F.push(`
45
- const filterResponse = await runFilter(diesel, pathname, ctx);
46
- if (filterResponse) return filterResponse;
47
- `);if($.hasPreHandlerHook)e(F,z,"preHandler","ctx");if(F.push(`
48
- let finalResult
49
- const handlers = matchedRouteHandler?.handler;
50
-
51
- if (handlers.length === 1) {
52
- const result = handlers[0](ctx);
53
- finalResult = isPromise(result) ? await result : result;
54
- }
55
- else {
56
- for (let i = 0; i < handlers.length; i++) {
57
- const result = handlers[i](ctx);
58
- finalResult = isPromise(result) ? await result : result;
59
- if (finalResult) break;
60
- }
61
- }
62
- `),$.hasOnSendHook)e(F,X,"onSend","ctx","finalResult");F.push(`
63
- if (finalResult) return finalResult;
64
- `),F.push(`
65
- return await handleRouteNotFound(diesel, ctx, pathname);
66
- `);let Z=`
67
- return async function pipeline(req, diesel, server, env, executionContext) {
68
- ${F.join(`
69
- `)}
70
- }
71
- `;return Function("runFilter","handleRouteNotFound","generateErrorResponse","Context","isPromise",Z)(t,P,u,_,N)},$$=($,F,z,...X)=>{let Z=[],Q;if(typeof X[0]==="string"||typeof X[0]==="object")Q=X[0];let V=X,D=$?.hasMiddleware?$.globalMiddlewares:[],G=$?.hasMiddleware?$.middlewares.get(z)||[]:[],W=[...D,...G],U=$?.hasOnReqHook?$.hooks.onRequest:[],M=$.filters.has(z),w=$.filterFunction;if(U&&U?.length>0)Z.push(`
72
- const onRequestResult = await runHooks(
73
- "onRequest",
74
- onRequestHooks,
75
- [req, "${z}", server]
76
- );
77
- if (onRequestResult) return onRequestResult;
78
- `);if(W.length)Z.push(`
79
- const globalMiddlewareResponse = await executeBunMiddlewares(
80
- allMiddlewares,
81
- req,
82
- server
83
- );
84
- if (globalMiddlewareResponse) return globalMiddlewareResponse;
85
- `);if($.hasFilterEnabled){if(!M)Z.push(`if (${w.length}) {
86
- for (const filterFunction of filterFunctions) {
87
- const filterResult = await filterFunction(req, server);
88
- if (filterResult) return filterResult;
89
- }
90
- } else {
91
- return Response.json({ error: "Protected route, authentication required" }, { status: 401 });
92
- }`)}if(Z.push(`
93
- if ("${F}" !== req.method)
94
- return new Response("Method Not Allowed", { status: 405 });
95
- `),typeof Q<"u")if(typeof Q==="string")Z.push(`
96
- return new Response(${JSON.stringify(Q)});
97
- `);else{let L=JSON.stringify(Q);Z.push(`
98
- return new Response(${JSON.stringify(L)}, {
99
- headers: { "content-type": "application/json; charset=utf-8" }
100
- });
101
- `)}else if(V.length===1){let L=V[0];if(m(L))Z.push(`
102
- const response = await handlers[0](req, server);
103
- if (response instanceof Response) return response;
104
- `);else Z.push(`
105
- const response = handlers[0](req, server);
106
- if (response instanceof Response) return response;
107
- `)}else V.forEach((L,Y)=>{if(m(L))Z.push(`
108
- const response${Y} = await handlers[${Y}](req, server);
109
- if (response${Y} instanceof Response) return response${Y};
110
- `);else Z.push(`
111
- const response${Y} = handlers[${Y}](req, server);
112
- if (response${Y} instanceof Response) return response${Y};
113
- `)});let q=`
114
- return async function(req, server) {
115
- ${Z.join(`
116
- `)}
117
- }
118
- `;return Function("executeBunMiddlewares","handlers","runHooks","filterFunctions","onRequestHooks","allMiddlewares",q)(a,V,f,w,U,W)};var Y$=($,F)=>{try{return F($)}catch{return $.replace(/(?:%[0-9A-Fa-f]{2})+/g,(z)=>{try{return F(z)}catch{return z}})}},K$=($)=>Y$($,decodeURI),E=($)=>{let F=$.indexOf("/",$.indexOf(":")+4),z=F;for(;z<$.length;z++){let X=$.charCodeAt(z);if(X===37){let Z=$.indexOf("?",z),Q=$.slice(F,Z===-1?void 0:Z);return K$(Q.includes("%25")?Q.replace(/%25/g,"%2525"):Q)}else if(X===63)break}return $.slice(F,z)};var d=Symbol.for,C=Symbol("kCapture"),Z$=d("events.errorMonitor"),w$=Symbol("events.maxEventTargetListeners"),L$=Symbol("events.maxEventTargetListenersWarned"),F$=d("nodejs.rejection"),N$=d("nodejs.rejection"),z$=Array.prototype.slice,R=10,K=function($){if(this._events===void 0||this._events===this.__proto__._events)this._events={__proto__:null},this._eventsCount=0;if(this._maxListeners??=void 0,this[C]=$?.captureRejections?Boolean($?.captureRejections):B[C])this.emit=q$},B=K.prototype={};B._events=void 0;B._eventsCount=0;B._maxListeners=void 0;B.setMaxListeners=function($){return i($,"setMaxListeners",0),this._maxListeners=$,this};B.constructor=K;B.getMaxListeners=function(){return this?._maxListeners??R};function Q$($,F){var{_events:z}=$;if(F[0]??=Error("Unhandled error."),!z)throw F[0];var X=z[Z$];if(X)for(var Z of z$.call(X))Z.apply($,F);var Q=z.error;if(!Q)throw F[0];for(var Z of z$.call(Q))Z.apply($,F);return!0}function f$($,F,z,X){F.then(void 0,function(Z){queueMicrotask(()=>C$($,Z,z,X))})}function C$($,F,z,X){if(typeof $[F$]==="function")$[F$](F,z,...X);else try{$[C]=!1,$.emit("error",F)}finally{$[C]=!0}}var R$=function($,...F){if($==="error")return Q$(this,F);var{_events:z}=this;if(z===void 0)return!1;var X=z[$];if(X===void 0)return!1;let Z=X.length>1?X.slice():X;for(let Q=0,{length:V}=Z;Q<V;Q++){let D=Z[Q];switch(F.length){case 0:D.call(this);break;case 1:D.call(this,F[0]);break;case 2:D.call(this,F[0],F[1]);break;case 3:D.call(this,F[0],F[1],F[2]);break;default:D.apply(this,F);break}}return!0},q$=function($,...F){if($==="error")return Q$(this,F);var{_events:z}=this;if(z===void 0)return!1;var X=z[$];if(X===void 0)return!1;let Z=X.length>1?X.slice():X;for(let Q=0,{length:V}=Z;Q<V;Q++){let D=Z[Q],G;switch(F.length){case 0:G=D.call(this);break;case 1:G=D.call(this,F[0]);break;case 2:G=D.call(this,F[0],F[1]);break;case 3:G=D.call(this,F[0],F[1],F[2]);break;default:G=D.apply(this,F);break}if(G!==void 0&&typeof G?.then==="function"&&G.then===Promise.prototype.then)f$(this,G,$,F)}return!0};B.emit=R$;B.addListener=function($,F){j(F);var z=this._events;if(!z)z=this._events={__proto__:null},this._eventsCount=0;else if(z.newListener)this.emit("newListener",$,F.listener??F);var X=z[$];if(!X)z[$]=[F],this._eventsCount++;else{X.push(F);var Z=this._maxListeners??R;if(Z>0&&X.length>Z&&!X.warned)V$(this,$,X)}return this};B.on=B.addListener;B.prependListener=function($,F){j(F);var z=this._events;if(!z)z=this._events={__proto__:null},this._eventsCount=0;else if(z.newListener)this.emit("newListener",$,F.listener??F);var X=z[$];if(!X)z[$]=[F],this._eventsCount++;else{X.unshift(F);var Z=this._maxListeners??R;if(Z>0&&X.length>Z&&!X.warned)V$(this,$,X)}return this};function V$($,F,z){z.warned=!0;let X=Error(`Possible EventEmitter memory leak detected. ${z.length} ${String(F)} listeners added to [${$.constructor.name}]. Use emitter.setMaxListeners() to increase limit`);X.name="MaxListenersExceededWarning",X.emitter=$,X.type=F,X.count=z.length,console.warn(X)}function D$($,F,...z){this.removeListener($,F),F.apply(this,z)}B.once=function($,F){j(F);let z=D$.bind(this,$,F);return z.listener=F,this.addListener($,z),this};B.prependOnceListener=function($,F){j(F);let z=D$.bind(this,$,F);return z.listener=F,this.prependListener($,z),this};B.removeListener=function($,F){j(F);var{_events:z}=this;if(!z)return this;var X=z[$];if(!X)return this;var Z=X.length;let Q=-1;for(let V=Z-1;V>=0;V--)if(X[V]===F||X[V].listener===F){Q=V;break}if(Q<0)return this;if(Q===0)X.shift();else X.splice(Q,1);if(X.length===0)delete z[$],this._eventsCount--;return this};B.off=B.removeListener;B.removeAllListeners=function($){var{_events:F}=this;if($&&F){if(F[$])delete F[$],this._eventsCount--}else this._events={__proto__:null};return this};B.listeners=function($){var{_events:F}=this;if(!F)return[];var z=F[$];if(!z)return[];return z.map((X)=>X.listener??X)};B.rawListeners=function($){var{_events:F}=this;if(!F)return[];var z=F[$];if(!z)return[];return z.slice()};B.listenerCount=function($){var{_events:F}=this;if(!F)return 0;return F[$]?.length??0};B.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};B[C]=!1;function A$($,F,z){var X=z?.signal;if(G$(X,"options.signal"),X?.aborted)throw new h(void 0,{cause:X?.reason});let{resolve:Z,reject:Q,promise:V}=$newPromiseCapability(Promise),D=(U)=>{if($.removeListener(F,G),X!=null)b(X,"abort",W);Q(U)},G=(...U)=>{if(typeof $.removeListener==="function")$.removeListener("error",D);if(X!=null)b(X,"abort",W);Z(U)};if(X$($,F,G,{once:!0}),F!=="error"&&typeof $.once==="function")$.once("error",D);function W(){b($,F,G),b($,"error",D),Q(new h(void 0,{cause:X?.reason}))}if(X!=null)X$(X,"abort",W,{once:!0});return V}function O$($,F){return $.listeners(F)}function I$($,...F){i($,"setMaxListeners",0);var z;if(F&&(z=F.length))for(let X=0;X<z;X++)F[X].setMaxListeners($);else R=$}function M$($,F){return $.listenerCount(F)}function b($,F,z,X){if(typeof $.removeListener==="function")$.removeListener(F,z);else $.removeEventListener(F,z,X)}function X$($,F,z,X){if(typeof $.on==="function")if(X.once)$.once(F,z);else $.on(F,z);else $.addEventListener(F,z,X)}class h extends Error{constructor($="The operation was aborted",F=void 0){if(F!==void 0&&typeof F!=="object")throw O("options","Object",F);super($,F);this.code="ABORT_ERR",this.name="AbortError"}}function O($,F,z){let X=TypeError(`The "${$}" argument must be of type ${F}. Received ${z}`);return X.code="ERR_INVALID_ARG_TYPE",X}function _$($,F,z){let X=RangeError(`The "${$}" argument is out of range. It must be ${F}. Received ${z}`);return X.code="ERR_OUT_OF_RANGE",X}function G$($,F){if($!==void 0&&($===null||typeof $!=="object"||!("aborted"in $)))throw O(F,"AbortSignal",$)}function i($,F,z,X){if(typeof $!=="number")throw O(F,"number",$);if(z!=null&&$<z||X!=null&&$>X||(z!=null||X!=null)&&Number.isNaN($))throw _$(F,`${z!=null?`>= ${z}`:""}${z!=null&&X!=null?" && ":""}${X!=null?`<= ${X}`:""}`,$)}function j($){if(typeof $!=="function")throw TypeError("The listener must be a function")}function j$($,F){if(typeof $!=="boolean")throw O(F,"boolean",$)}function T$($){return $?._maxListeners??R}function H$($,F){if($===void 0)throw O("signal","AbortSignal",$);if(G$($,"signal"),typeof F!=="function")throw O("listener","function",F);let z;if($.aborted)queueMicrotask(()=>F());else $.addEventListener("abort",F,{__proto__:null,once:!0}),z=()=>{$.removeEventListener("abort",F)};return{__proto__:null,[Symbol.dispose](){z?.()}}}Object.defineProperties(K,{captureRejections:{get(){return B[C]},set($){j$($,"EventEmitter.captureRejections"),B[C]=$},enumerable:!0},defaultMaxListeners:{enumerable:!0,get:()=>{return R},set:($)=>{i($,"defaultMaxListeners",0),R=$}},kMaxEventTargetListeners:{value:w$,enumerable:!1,configurable:!1,writable:!1},kMaxEventTargetListenersWarned:{value:L$,enumerable:!1,configurable:!1,writable:!1}});Object.assign(K,{once:A$,getEventListeners:O$,getMaxListeners:T$,setMaxListeners:I$,EventEmitter:K,usingDomains:!1,captureRejectionSymbol:N$,errorMonitor:Z$,addAbortListener:H$,init:K,listenerCount:M$});class g{children;handlers;middlewares;params;paramName;constructor(){this.children={},this.handlers={},this.middlewares=[],this.params={},this.paramName=""}}class T{root;globalMiddlewares;constructor(){this.root=new g,this.globalMiddlewares=[]}pushMiddleware($,F){if(!Array.isArray(F))F=[F];if($==="/"){this.globalMiddlewares.push(...F);return}let z=this.root,X=$.split("/").filter(Boolean);for(let Z of X){let Q=Z;if(Z.startsWith(":"))Q=":";else if(Z.startsWith("*"))z.middlewares.push(...F);if(!z.children[Q])z.children[Q]=new g;z=z.children[Q]}z.middlewares.push(...F)}addMiddleware($,F){return this.pushMiddleware($,F)}insert($,F,z){let X=this.root;if(F==="/"){X.handlers[$]=z,X.params=S;return}let Z=F.split("/").filter(Boolean),Q={};for(let V=0;V<Z.length;V++){let D=Z[V],G=D,W="";if(D.startsWith(":"))G=":",W=D.slice(1);if(!X.children[G])X.children[G]=new g;if(X=X.children[G],W)Q[W]=V,X.paramName=W}X.params=Q,X.handlers[$]=z}add($,F,z){return this.insert($,F,z)}search($,F){let z=this.root,X=F.split("/"),Z=this.globalMiddlewares.slice(),Q;for(let V=0;V<X.length;V++){let D=X[V];if(D.length===0)continue;if(z.children[D])z=z.children[D];else if(z.children[":"]){if(z=z.children[":"],!Q)Q={};Q[z.paramName]=D}else if(z.children["*"]){z=z.children["*"];break}else return{params:Q,handler:Z};if(z.middlewares.length>0){let G=z.middlewares;for(let W=0;W<G.length;W++)Z.push(G[W])}}if(z.handlers[$])Z.push(z.handlers[$]);if(z.handlers.ALL)Z.push(z.handlers.ALL);return{params:Q,handler:Z}}find($,F){return this.search($,F)}}class p{static create($){switch($){case"t2":return new T;case"trie":return new T;default:return new T}}}var W$=["GET","POST","PUT","PATCH","DELETE","ANY","ALL","HEAD","OPTIONS","PROPFIND"];var S=Object.freeze({});class I{static instance;routes;tempRoutes;tempMiddlewares=new Map;router;hasOnReqHook;hasPreHandlerHook;hasPostHandlerHook;hasOnSendHook;hasOnError;hooks;corsConfig;FilterRoutes;filters;filterFunction;hasFilterEnabled;serverInstance;staticFiles;user_jwt_secret;baseApiUrl;enableFileRouter;idleTimeOut;routeNotFoundFunc;prefixApiUrl;compileConfig;#$=!1;emitter;errorFormat;platform="bun";staticPath;staticRequestPath=void 0;get;post;put;patch;delete;any;head;options;propfind;all;constructor($={}){W$.forEach((q)=>{this[q.toLocaleLowerCase()]=(H,...L)=>{return this.addRoute(q,H,L),this}});let{router:F="t2",routerInstance:z,errorFormat:X="json",platform:Z="bun",enableFileRouting:Q=!1,prefixApiUrl:V="",baseApiUrl:D="",jwtSecret:G,idleTimeOut:W=10,pipelineArchitecture:U=!1,logger:M,onError:w}=$;if(z)this.router=z;else this.router=p.create(F);if(this.errorFormat=X,this.platform=Z,!I.instance)I.instance=this;if(U)this.#$=!0;if(this.errorFormat=X,this.emitter=new K,this.prefixApiUrl=V??"",this.fetch=this.fetch.bind(this),this.routes={},this.idleTimeOut=W??10,this.enableFileRouter=Q??!1,this.baseApiUrl=D||"",this.user_jwt_secret=G||process.env.DIESEL_JWT_SECRET||"default_diesel_secret_for_jwt",this.tempRoutes=new Map,this.corsConfig=null,this.hasOnReqHook=!1,this.hasPreHandlerHook=!1,this.hasPostHandlerHook=!1,this.hasOnSendHook=!1,this.hasOnError=!1,this.hooks={onRequest:[],preHandler:[],postHandler:[],onSend:[],onError:[],onClose:[]},w)this.addHooks("onError",(q,H)=>{console.log("Got an exception:",q),console.log("Request Path:",H)});if(M)this.useLogger({app:this});this.FilterRoutes=[],this.filters=new Set,this.filterFunction=[],this.hasFilterEnabled=!1,this.serverInstance=null,this.staticPath=null,this.staticFiles={},this.routeNotFoundFunc=()=>{},this.compileConfig=null}static router($){if(!this.instance)this.instance=new I;return new Proxy(this.instance,{get(F,z,X){return(Z,Q)=>{let V=Q,D="";if(typeof Z==="string")D=Z;else if(typeof Z==="function")V=Z;else if(typeof Z!=="string")D="";let G=$+D;return F[z](G,V)}}})}setupFilter(){return this.hasFilterEnabled=!0,{publicRoutes:(...$)=>{return this.FilterRoutes=$,this.setupFilter()},permitAll:()=>{for(let $ of this?.FilterRoutes){if($.endsWith("/"))$=$.slice(0,-1);this.filters.add($)}return this.setupFilter()},authenticate:($)=>{if($?.length){let F=async(z,X)=>{let Z=z.path;for(let Q of this.filters)if(Z.startsWith(Q))return;for(let Q of $){let V=await Q(z,X);if(V)return V}};this.router.addMiddleware("/",[F])}},authenticateJwt:($)=>{let F=async(z)=>{let X=z.path;for(let Q of this.filters)if(X.startsWith(Q))return;let Z=s($,this.user_jwt_secret)(z);if(Z)return Z};this.router.addMiddleware("/",F)},authenticateJwtDB:($,F)=>{let z=async(X)=>{let Z=X.path;for(let V of this.filters)if(Z.startsWith(V))return;let Q=r($,F,this.user_jwt_secret)(X);if(Q)return Q};this.router.addMiddleware("/",z)}}}redirect($,F,z){return this.any($,(X)=>{let Z=X.params,Q=F;if(Z)for(let D in Z)Q=Q.replace(`:${D}`,Z[D]);let V=X.url.search;if(V)Q+=V;return X.redirect(Q,z)}),this}static($,F){return this.staticPath=$,this.staticRequestPath=F,this}staticHtml($){return this.staticFiles={...this.staticFiles,...$},this}addHooks($,F){if(typeof $!=="string")throw Error("hookName must be a string");if(typeof F!=="function")throw Error("callback must be a instance of function");switch($){case"onRequest":this.hooks.onRequest?.push(F),this.hasOnReqHook=!0;break;case"preHandler":this.hooks.preHandler?.push(F),this.hasPreHandlerHook=!0;break;case"postHandler":this.hooks.postHandler?.push(F),this.hasPostHandlerHook=!0;break;case"onSend":this.hooks.onSend?.push(F),this.hasOnSendHook=!0;break;case"onError":this.hooks.onError?.push(F),this.hasOnError=!0;break;case"onClose":this.hooks.onClose?.push(F);break;default:throw Error(`Unknown hook type: ${$}`)}return this}useLogger($){return n($),this}useAdvancedLogger($){return l($),this}BunRoute($,F,...z){if(!F||typeof F!=="string")throw Error("give a path in string format");let X=$$(this,$.toUpperCase(),F,...z);return this.routes[F]=X,this}listen($,...F){let z="0.0.0.0",X=void 0,Z={};for(let V of F)if(typeof V==="string")z=V;else if(typeof V==="function")X=V;else if(typeof V==="object"&&V!==null)Z=V;let Q={port:$,hostname:z,idleTimeOut:this.idleTimeOut,fetch:this.fetch(),static:this.staticFiles};if(this.routes&&Object.keys(this.routes).length>0)Q.routes=this.routes;if(Z.cert&&Z.key)Q.certFile=Z.cert,Q.keyFile=Z.key;return this.serverInstance=Bun?.serve(Q),X&&X(),this.serverInstance}close($){if(this.serverInstance)this.serverInstance.stop(!0),this.serverInstance=null,$?$():console.log("Server has been stopped");else console.warn("Server is not running.")}cfFetch(){return this.tempRoutes=null,this.tempMiddlewares=null,($,F,z)=>{return this.#F($,void 0,F,z)}}fetch(){if(this.tempRoutes=null,this.tempMiddlewares=null,this.platform==="cf"||this.platform==="cloudflare"){if(this.#$){let $=o(this);return(F,z,X)=>{return $(F,this,void 0,z,X).catch(async(Z)=>{return this.handleError(Z,E(F.url),F)})}}return($,F,z)=>{return this.#F($,void 0,F,z)}}if(this.#$){let $=o(this);return(F,z)=>{return $(F,this,z,void 0,void 0).catch(async(X)=>{return this.handleError(X,E(F.url),F)})}}return this.#F.bind(this)}async#F($,F,z,X){let Z=E($.url),Q=this.router.find($.method,Z),V=new _($,F,Z,Q?.params||S,z,X);try{if(this.hasOnReqHook)await f("onRequest",this.hooks.onRequest,[V]);if(this.hasPreHandlerHook){let W=await f("preHandler",this.hooks.preHandler,[V]);if(W)return W}let D,G=Q?.handler;if(G.length===1){let W=G[0](V);D=N(W)?await W:W}else for(let W=0;W<G.length;W++){let U=G[W](V);if(D=N(U)?await U:U,D)break}if(this.hasOnSendHook){let W=await f("onSend",this.hooks.onSend,[V,D]);if(W)return W}if(D)return D;return await P(this,V,Z)}catch(D){return this.handleError(D,Z,$)}}async handleError($,F,z){let Z=this.errorFormat,Q=await f("onError",this.hooks.onError,[$,F,z]);if(Q)return Q;if($&&typeof $==="object"&&$.name==="HTTPException"){let G=$;if(console.error(`HTTPException on path: ${F}`,{status:G.status,message:G.message,cause:G.cause,res:G.res,stack:G.stack}),G.res)return G.res;return Z==="json"?Response.json({error:G.message},{status:G.status}):new Response(G.message,{status:G.status})}let V=$ instanceof Error?$.message:"Internal Server Error",D=$ instanceof Error?$.stack:void 0;if(console.error(`Error on path: ${F}`,{message:V,stack:D}),Z==="json"){let G={error:V,...!1,path:F};return Response.json(G,{status:500,headers:{"Content-Type":"application/json"}})}else{let G=`Error: ${V}`;return new Response(G,{headers:{"Content-Type":"text/plain"},status:500})}}mount($,F){let z=$.endsWith("/*")?$.slice(0,-1):$,X=z==="/"?0:z.length;this.any($,(Z)=>{let Q=new URL(Z.req.url);Q.pathname=Q.pathname.slice(X)||"/";let V=new Request(Q,Z.req);return F(V,Z.server,Z.env,Z.executionContext)})}route($,F){$=$&&$.length>0?$:F?.prefixApiUrl;let z=F?.tempRoutes??new Map;for(let[X,Z]of z.entries()){let Q=X.replace(/::\w+$/,""),V=`${$}${Q}`,D=Z.handlers.slice(0,-1);this.router.addMiddleware(V,D);let G=Z.handlers[Z.handlers.length-1],W=Z.method;try{this.router.add(W,V,G)}catch(U){console.error(`Error inserting ${V}:`,U)}}for(let[X,Z]of F?.tempMiddlewares?.entries()){let Q=X==="/"?$||"/":`${$}${X}`;this.router.addMiddleware(Q,Z)}return F=null,this}register($){let F=new I,z=()=>{};return this}sub($,F){let z=F.fetch();return this.mount($,z)}addMiddlewareInRouter($,F){this.router.addMiddleware($,F)}addRoute($,F,z){if(typeof F!=="string")throw Error(`Error in ${z[z.length-1]}: Path must be a string. Received: ${typeof F}`);if(typeof $!=="string")throw Error(`Error in addRoute: Method must be a string. Received: ${typeof $}`);this.tempRoutes?.set(F+"::"+$,{method:$,handlers:z});let X=z.slice(0,-1),Z=z[z.length-1];if(X.length>0)this.addMiddlewareInRouter(F,X);try{if($==="ANY"){let Q=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD","PROPFIND"];for(let V of Q)try{this.router.add(V,F,Z)}catch(D){}}else this.router.add($,F,Z)}catch(Q){console.error(`Error inserting ${F}:`,Q)}}use($,...F){if(typeof $==="string"){let z=$==="/"?"/":$;if(!this.tempMiddlewares?.has(z))this.tempMiddlewares?.set(z,[]);this.tempMiddlewares?.get(z).push(...F),this.router.addMiddleware(z,F)}else if(typeof $==="function"){let z=[$,...F];if(!this.tempMiddlewares?.has("/"))this.tempMiddlewares?.set("/",[]);this.tempMiddlewares?.get("/").push(...F),this.router.addMiddleware("/",z)}return this}routeNotFound($){return this.routeNotFoundFunc=$,this}onMethod($,F,...z){let X=Array.isArray($)?$:[$];for(let Z of X){let Q=Z.toLowerCase();if(Q in this)this[Q](F,...z);else this.addRoute(Z.toUpperCase(),F,z)}return this}on($,F){return this.emitter.on($,F),this}emit($,...F){return this.emitter.emit($,...F),this}}class _{req;server;path;param;env;executionContext;headers;parsedQuery=null;parsedCookies=null;parsedBody=null;contextData=S;urlObject=null;constructor($,F,z,X,Z,Q){this.req=$,this.server=F,this.path=z,this.param=X,this.env=Z,this.executionContext=Q,this.headers=null}setHeader($,F){if(!this.headers)this.headers=new Headers;return this.headers.set($,F),this}removeHeader($){if(this.headers)this.headers.delete($);return this}set($,F){if(this.contextData===S)this.contextData={};return this.contextData[$]=F,this}get($){if(this.contextData===S)return;return this.contextData[$]}get ip(){if(this.server)return this.server.requestIP(this.req)?.address??null;return this.req.headers.get("CF-Connecting-IP")||null}get url(){if(!this.urlObject)this.urlObject=new URL(this.req.url);return this.urlObject}get query(){if(!this.parsedQuery)this.parsedQuery=this.url.search?Object.fromEntries(this.url.searchParams):S;return this.parsedQuery}get params(){return this.param?this.param:S}get body(){if(this.req.method==="GET")return Promise.resolve(S);if(!this.parsedBody)this.parsedBody=(async()=>{try{let $=await E$(this.req);if($.error)throw Error($.error);return Object.keys($).length===0?null:$}catch($){throw Error("Invalid request body format")}})();return this.parsedBody}text($,F=200,z){if(!this.headers){if(!z)return new Response($,{status:F,headers:{"Content-Type":"text/plain; charset=utf-8"}});let X={"Content-Type":"text/plain; charset=utf-8"};return v(z,X),new Response($,{status:F,headers:X})}if(z)k(this.headers,z);if(!this.headers?.has("Content-Type"))this.headers?.set("Content-Type","text/plain; charset=utf-8");return new Response($,{status:F,headers:this.headers})}send($,F=200,z){let X,Z;if($ instanceof Uint8Array||$ instanceof ArrayBuffer)X="application/octet-stream",Z=$;else if($!==null&&typeof $==="object")X="application/json; charset=utf-8",Z=JSON.stringify($);else if(typeof $==="string")X="text/plain; charset=utf-8",Z=$;else X="text/plain; charset=utf-8",Z=String($);if(!this.headers){if(!z)return new Response(Z,{status:F,headers:{"Content-Type":X}});let Q={"Content-Type":X};return v(z,Q),new Response(Z,{status:F,headers:Q})}if(z)k(this.headers,z);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type",X);return new Response(Z,{status:F,headers:this.headers})}json($,F=200,z){if(!this.headers){if(!z)return Response.json($,{status:F,headers:{"Content-Type":"application/json; charset=utf-8"}});let X={"Content-Type":"application/json; charset=utf-8"};return v(z,X),Response.json($,{status:F,headers:X})}if(z)k(this.headers,z);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type","application/json; charset=utf-8");return new Response(JSON.stringify($),{status:F,headers:this.headers})}file($,F,z=200,X){let Z=Bun.file($);if(!this.headers){if(!X)return new Response(Z,{status:z,headers:{"Content-Type":F??A($)}});let Q={"Content-Type":F??A($)};return v(X,Q),new Response(Z,{status:z,headers:Q})}if(X)k(this.headers,X);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type",F??A($));return new Response(Z,{status:z,headers:this.headers})}async ejs($,F={},z=200){console.log("this method is diabled now for some time")}redirect($,F=302){if(!this.headers)this.headers=new Headers;return this.headers.set("Location",$),new Response(null,{status:F,headers:this.headers})}setCookie($,F,z={}){if(!this.headers)this.headers=new Headers;let X=`${encodeURIComponent($)}=${encodeURIComponent(F)}`;if(z.maxAge)X+=`; Max-Age=${z.maxAge}`;if(z.expires)X+=`; Expires=${z.expires.toUTCString()}`;if(z.path)X+=`; Path=${z.path}`;if(z.domain)X+=`; Domain=${z.domain}`;if(z.secure)X+="; Secure";if(z.httpOnly)X+="; HttpOnly";if(z.sameSite)X+=`; SameSite=${z.sameSite}`;return this.headers.append("Set-Cookie",X),this}get cookies(){if(!this.parsedCookies){let $=this.req.headers.get("cookie");this.parsedCookies=$?P$($):S}return this.parsedCookies}stream($){let F=new Headers(this.headers??new Headers),z=new ReadableStream({async start(X){await $(X),X.close()}});return new Response(z,{headers:F})}yieldStream($){return new Response}}function k($,F){for(let z in F)$.set(z,F[z])}function v($,F){for(let z in $)F[z]=$[z]}function P$($){return Object.fromEntries($.split(";").map((F)=>{let[z,...X]=F.trim().split("=");return[z,decodeURIComponent(X.join("="))]}))}function Y0($,F){let z={},[X]=F.split("?"),Z=X.split("/").filter(Boolean),Q=Z.length-$.length;for(let V=0;V<$.length;V++)z[$[V]]=Z[Q+V];return z}function K0($,F){let z={},X=$.split("/"),[Z]=F.split("?"),Q=Z.split("/");if(X.length!==Q.length)return null;for(let V=0;V<X.length;V++){let D=X[V];if(D.charCodeAt(0)===58)z[D.slice(1)]=Q[V]}return z}async function E$($){let F=$.headers.get("Content-Type")||"";if(!F)return{};if($.headers.get("Content-Length")==="0"||!$.body)return{};if(F.startsWith("application/json"))return await $.json();if(F.startsWith("application/x-www-form-urlencoded")){let X=await $.text();return Object.fromEntries(new URLSearchParams(X))}if(F.startsWith("multipart/form-data")){let X=await $.formData(),Z={};for(let[Q,V]of X.entries())Z[Q]=V;return Z}return{error:"Unknown request body type"}}function w0($,F){let z={},Z=$?.split("?")[0]?.split("/").filter(Boolean);for(let Q in F)z[Q]=Z?.[F[Q]];return z}export{w0 as parseParams,Y0 as extractParam,K0 as extractDynamicParams,_ as Context};
1
+ function G(w){switch(w.split(".").pop()?.toLowerCase()){case"js":return"application/javascript";case"css":return"text/css";case"html":return"text/html";case"json":return"application/json";case"png":return"image/png";case"jpg":case"jpeg":return"image/jpeg";case"svg":return"image/svg+xml";case"gif":return"image/gif";case"woff":return"font/woff";case"woff2":return"font/woff2";default:return"application/octet-stream"}}var F=Object.freeze({});class V{req;server;path;param;env;executionContext;headers;parsedQuery=null;parsedCookies=null;parsedBody=null;contextData=F;urlObject=null;constructor(w,A,x,L,f,I){this.req=w,this.server=A,this.path=x,this.param=L,this.env=f,this.executionContext=I,this.headers=null}setHeader(w,A){if(!this.headers)this.headers=new Headers;return this.headers.set(w,A),this}removeHeader(w){if(this.headers)this.headers.delete(w);return this}set(w,A){if(this.contextData===F)this.contextData={};return this.contextData[w]=A,this}get(w){if(this.contextData===F)return;return this.contextData[w]}get ip(){if(this.server)return this.server.requestIP(this.req)?.address??null;return this.req.headers.get("CF-Connecting-IP")||null}get url(){if(!this.urlObject)this.urlObject=new URL(this.req.url);return this.urlObject}get query(){if(!this.parsedQuery)this.parsedQuery=this.url.search?Object.fromEntries(this.url.searchParams):F;return this.parsedQuery}get params(){return this.param?this.param:F}get body(){if(this.req.method==="GET")return Promise.resolve(F);if(!this.parsedBody)this.parsedBody=(async()=>{try{let w=await Z(this.req);if(w.error)throw Error(w.error);return Object.keys(w).length===0?null:w}catch(w){throw Error("Invalid request body format")}})();return this.parsedBody}text(w,A=200,x){if(!this.headers){if(!x)return new Response(w,{status:A,headers:{"Content-Type":"text/plain; charset=utf-8"}});let L={"Content-Type":"text/plain; charset=utf-8"};return U(x,L),new Response(w,{status:A,headers:L})}if(x)R(this.headers,x);if(!this.headers?.has("Content-Type"))this.headers?.set("Content-Type","text/plain; charset=utf-8");return new Response(w,{status:A,headers:this.headers})}send(w,A=200,x){let L,f;if(w instanceof Uint8Array||w instanceof ArrayBuffer)L="application/octet-stream",f=w;else if(w!==null&&typeof w==="object")L="application/json; charset=utf-8",f=JSON.stringify(w);else if(typeof w==="string")L="text/plain; charset=utf-8",f=w;else L="text/plain; charset=utf-8",f=String(w);if(!this.headers){if(!x)return new Response(f,{status:A,headers:{"Content-Type":L}});let I={"Content-Type":L};return U(x,I),new Response(f,{status:A,headers:I})}if(x)R(this.headers,x);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type",L);return new Response(f,{status:A,headers:this.headers})}json(w,A=200,x){if(!this.headers){if(!x)return Response.json(w,{status:A,headers:{"Content-Type":"application/json; charset=utf-8"}});let L={"Content-Type":"application/json; charset=utf-8"};return U(x,L),Response.json(w,{status:A,headers:L})}if(x)R(this.headers,x);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type","application/json; charset=utf-8");return new Response(JSON.stringify(w),{status:A,headers:this.headers})}file(w,A,x=200,L){let f=Bun.file(w);if(!this.headers){if(!L)return new Response(f,{status:x,headers:{"Content-Type":A??G(w)}});let I={"Content-Type":A??G(w)};return U(L,I),new Response(f,{status:x,headers:I})}if(L)R(this.headers,L);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type",A??G(w));return new Response(f,{status:x,headers:this.headers})}async ejs(w,A={},x=200){console.log("this method is diabled now for some time")}redirect(w,A=302){if(!this.headers)this.headers=new Headers;return this.headers.set("Location",w),new Response(null,{status:A,headers:this.headers})}setCookie(w,A,x={}){if(!this.headers)this.headers=new Headers;let L=`${encodeURIComponent(w)}=${encodeURIComponent(A)}`;if(x.maxAge)L+=`; Max-Age=${x.maxAge}`;if(x.expires)L+=`; Expires=${x.expires.toUTCString()}`;if(x.path)L+=`; Path=${x.path}`;if(x.domain)L+=`; Domain=${x.domain}`;if(x.secure)L+="; Secure";if(x.httpOnly)L+="; HttpOnly";if(x.sameSite)L+=`; SameSite=${x.sameSite}`;return this.headers.append("Set-Cookie",L),this}get cookies(){if(!this.parsedCookies){let w=this.req.headers.get("cookie");this.parsedCookies=w?X(w):F}return this.parsedCookies}stream(w){let A=new Headers(this.headers??new Headers),x=new ReadableStream({async start(L){await w(L),L.close()}});return new Response(x,{headers:A})}yieldStream(w){return new Response}}function R(w,A){for(let x in A)w.set(x,A[x])}function U(w,A){for(let x in w)A[x]=w[x]}function X(w){return Object.fromEntries(w.split(";").map((A)=>{let[x,...L]=A.trim().split("=");return[x,decodeURIComponent(L.join("="))]}))}function N(w,A){let x={},[L]=A.split("?"),f=L.split("/").filter(Boolean),I=f.length-w.length;for(let z=0;z<w.length;z++)x[w[z]]=f[I+z];return x}function D(w,A){let x={},L=w.split("/"),[f]=A.split("?"),I=f.split("/");if(L.length!==I.length)return null;for(let z=0;z<L.length;z++){let K=L[z];if(K.charCodeAt(0)===58)x[K.slice(1)]=I[z]}return x}async function Z(w){let A=w.headers.get("Content-Type")||"";if(!A)return{};if(w.headers.get("Content-Length")==="0"||!w.body)return{};if(A.startsWith("application/json"))return await w.json();if(A.startsWith("application/x-www-form-urlencoded")){let L=await w.text();return Object.fromEntries(new URLSearchParams(L))}if(A.startsWith("multipart/form-data")){let L=await w.formData(),f={};for(let[I,z]of L.entries())f[I]=z;return f}return{error:"Unknown request body type"}}function Y(w,A){let x={},f=w?.split("?")[0]?.split("/").filter(Boolean);for(let I in A)x[I]=f?.[A[I]];return x}export{Y as parseParams,N as extractParam,D as extractDynamicParams,V as Context};
package/dist/main.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { CompileConfig, ContextType, corsT, DieselFetchHandler, DieselOptions, errorFormat, FilterMethods, HookType, listenArgsT, middlewareFunc, RouteHandler, RouteNotFoundHandler, type handlerFunction, type Hooks, type HttpMethod } from "./types.js";
1
+ import { CompileConfig, corsT, DieselFetchHandler, DieselOptions, errorFormat, FilterMethods, HookType, listenArgsT, middlewareFunc, RouteHandler, RouteNotFoundHandler, type handlerFunction, type Hooks, type HttpMethod } from "./types.js";
2
2
  import { Server } from "bun";
3
3
  import { AdvancedLoggerOptions, LoggerOptions } from "./middlewares/logger/logger.js";
4
4
  import { EventEmitter } from 'events';
5
+ import { Context } from "./ctx.js";
5
6
  import { Router } from "./router/interface.js";
6
- export declare const EMPTY_OBJ: Readonly<{}>;
7
7
  export default class Diesel {
8
8
  #private;
9
9
  private static instance;
@@ -28,7 +28,7 @@ export default class Diesel {
28
28
  baseApiUrl: string;
29
29
  private enableFileRouter;
30
30
  idleTimeOut: number;
31
- routeNotFoundFunc: (c: ContextType) => void | Promise<void> | Promise<Response> | Response;
31
+ routeNotFoundFunc: (c: Context) => void | Promise<void> | Promise<Response> | Response;
32
32
  private prefixApiUrl;
33
33
  compileConfig: CompileConfig | null;
34
34
  emitter: EventEmitter;
package/dist/main.js CHANGED
@@ -1,18 +1,18 @@
1
- var J={reset:"\x1B[0m",info:"\x1B[36m",warn:"\x1B[33m",error:"\x1B[31m",method:{GET:"\x1B[32m",POST:"\x1B[34m",PUT:"\x1B[35m",DELETE:"\x1B[31m",PATCH:"\x1B[36m"}},x=($,F,z)=>{let X=J[$]||J.reset,Z=z?.method?J.method[z.method]||J.reset:J.reset,Q=z?.status?z.status>=500?J.error:z.status>=400?J.warn:J.info:J.reset;console.log(`
2
- ${X}[${$.toUpperCase()}]${J.reset} ${F} - ${Z}${z?.method||""}${J.reset}`);let V={timestamp:new Date().toISOString(),...z,status:z?.status?`${Q}${z.status}${J.reset}`:void 0,method:z?.method?`${Z>X}${z.method}${J.reset}`:void 0};console.log(JSON.stringify(V,null,2)+`
3
- `)},l=($)=>{let{app:F,logger:z,logLevel:X="info",onRequest:Z,onSend:Q,onError:V}=$||{};F?.addHooks("onRequest",(D)=>{D.req.startTime=Date.now(),z?.()??x(X,"Incoming Request",{method:D.req.method,url:D.path,headers:{"user-agent":D.req.headers.get("user-agent"),"content-type":D.req.headers.get("content-type")}}),Z?.(D)}),F?.addHooks("onSend",async(D,G)=>{let W=`${Date.now()-D.req.startTime}ms`;z?.()??x(X,"Response Sent",{method:D.req.method,url:D.url.toString(),status:G.status,duration:W,reqId:D.get?.("requestId"),headers:{"content-type":G.headers.get("content-type")}});let U=await Q?.(D);if(U instanceof Response)return U}),F?.addHooks("onError",async(D,G,W)=>{z?.()??x("error","Unhandled Error",{method:W.method,url:G,status:500,error:D.message});let U=await V?.(D,G,W);if(U instanceof Response)return U})},y=($,F,z,X=0,Z,Q)=>{let V=J.method[F]||J.reset,D=X>=500?J.error:X>=400?J.warn:J.info,G=Q?`[${Q}] `:"",W=$==="<--"?`${$} ${V}${F}${J.reset} ${z} ${G}`:`${$} ${V}${F}${J.reset} ${z} ${D}${X}${J.reset} ${Z??""} ${G}`;console.log(W)},U$=($)=>{let F=Date.now()-$;return F<1000?`${F}ms`:`${Math.round(F/1000)}s`},n=($)=>{let{app:F,log:z,onRequest:X,onSend:Z,onError:Q}=$;F.addHooks("onRequest",(V)=>{let{req:D,path:G}=V;D.startTime=Date.now(),z?.()??y("<--",D.method,G),X?.(D,G)}),F.addHooks("onSend",async(V,D)=>{let{method:G,url:W}=V.req,U=new URL(W).pathname,M=V.get?.("requestId");z?.()??y("-->",G,U,D?.status,U$(V.req.startTime),M);let w=await Z?.(V);return w instanceof Response?w:D}),F.addHooks("onError",async(V,D,G)=>{let W=G.path;z?.()??y(V.message,G.method,W,500);let U=await Q?.(V,W,G);if(U instanceof Response)return U})};function s($,F){if(!$)throw Error("JWT library is not defined, please provide jwt to authenticateJwt Function");return(z)=>{try{let X=z.cookies?.accessToken??z.req?.headers?.get("Authorization");if(!X)return z.json({message:"Unauthorized",error:"No token provided"},401);if(X.startsWith("Bearer "))X=X.slice(7);let Z=$?.verify(X,F);if(!Z)return z.json({message:"Unauthorized",error:"Token could not be decoded"},401);z.set("user",Z)}catch(X){let Z="Invalid token";if(X.name==="TokenExpiredError")Z="Token expired";else if(X.name==="JsonWebTokenError")Z="Malformed or tampered token";return z.json({message:"Unauthorized",error:Z},401)}}}function r($,F,z){if(!$)throw Error("JWT library is not defined, please provide jwt to authenticateJwtDB Function");if(!F)throw Error("User model is not defined, please provide UserModel to authenticateJwtDB Function");return async(X)=>{try{let Z=X.cookies?.accessToken??X.req?.headers?.get("Authorization");if(!Z)return X.json({message:"Unauthorized",error:"No token provided"},401);if(Z.startsWith("Bearer "))Z=Z.slice(7);let Q=$?.verify(Z,z);if(!Q)return X.json({message:"Unauthorized",error:"Token could not be decoded"},401);let V=await F.findById(Q._id).select("-password -refreshToken");if(!V)return X.json({message:"Unauthorized: User not found"},404);X.set("user",V);return}catch(Z){let Q="Invalid token";if(Z.name==="TokenExpiredError")Q="Token expired";else if(Z.name==="JsonWebTokenError")Q="Malformed or tampered token";return X.json({message:"Unauthorized",error:Q},401)}}}function A($){switch($.split(".").pop()?.toLowerCase()){case"js":return"application/javascript";case"css":return"text/css";case"html":return"text/html";case"json":return"application/json";case"png":return"image/png";case"jpg":case"jpeg":return"image/jpeg";case"svg":return"image/svg+xml";case"gif":return"image/gif";case"woff":return"font/woff";case"woff2":return"font/woff2";default:return"application/octet-stream"}}class _{req;server;path;param;env;executionContext;headers;parsedQuery=null;parsedCookies=null;parsedBody=null;contextData=S;urlObject=null;constructor($,F,z,X,Z,Q){this.req=$,this.server=F,this.path=z,this.param=X,this.env=Z,this.executionContext=Q,this.headers=null}setHeader($,F){if(!this.headers)this.headers=new Headers;return this.headers.set($,F),this}removeHeader($){if(this.headers)this.headers.delete($);return this}set($,F){if(this.contextData===S)this.contextData={};return this.contextData[$]=F,this}get($){if(this.contextData===S)return;return this.contextData[$]}get ip(){if(this.server)return this.server.requestIP(this.req)?.address??null;return this.req.headers.get("CF-Connecting-IP")||null}get url(){if(!this.urlObject)this.urlObject=new URL(this.req.url);return this.urlObject}get query(){if(!this.parsedQuery)this.parsedQuery=this.url.search?Object.fromEntries(this.url.searchParams):S;return this.parsedQuery}get params(){return this.param?this.param:S}get body(){if(this.req.method==="GET")return Promise.resolve(S);if(!this.parsedBody)this.parsedBody=(async()=>{try{let $=await J$(this.req);if($.error)throw Error($.error);return Object.keys($).length===0?null:$}catch($){throw Error("Invalid request body format")}})();return this.parsedBody}text($,F=200,z){if(!this.headers){if(!z)return new Response($,{status:F,headers:{"Content-Type":"text/plain; charset=utf-8"}});let X={"Content-Type":"text/plain; charset=utf-8"};return E(z,X),new Response($,{status:F,headers:X})}if(z)P(this.headers,z);if(!this.headers?.has("Content-Type"))this.headers?.set("Content-Type","text/plain; charset=utf-8");return new Response($,{status:F,headers:this.headers})}send($,F=200,z){let X,Z;if($ instanceof Uint8Array||$ instanceof ArrayBuffer)X="application/octet-stream",Z=$;else if($!==null&&typeof $==="object")X="application/json; charset=utf-8",Z=JSON.stringify($);else if(typeof $==="string")X="text/plain; charset=utf-8",Z=$;else X="text/plain; charset=utf-8",Z=String($);if(!this.headers){if(!z)return new Response(Z,{status:F,headers:{"Content-Type":X}});let Q={"Content-Type":X};return E(z,Q),new Response(Z,{status:F,headers:Q})}if(z)P(this.headers,z);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type",X);return new Response(Z,{status:F,headers:this.headers})}json($,F=200,z){if(!this.headers){if(!z)return Response.json($,{status:F,headers:{"Content-Type":"application/json; charset=utf-8"}});let X={"Content-Type":"application/json; charset=utf-8"};return E(z,X),Response.json($,{status:F,headers:X})}if(z)P(this.headers,z);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type","application/json; charset=utf-8");return new Response(JSON.stringify($),{status:F,headers:this.headers})}file($,F,z=200,X){let Z=Bun.file($);if(!this.headers){if(!X)return new Response(Z,{status:z,headers:{"Content-Type":F??A($)}});let Q={"Content-Type":F??A($)};return E(X,Q),new Response(Z,{status:z,headers:Q})}if(X)P(this.headers,X);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type",F??A($));return new Response(Z,{status:z,headers:this.headers})}async ejs($,F={},z=200){console.log("this method is diabled now for some time")}redirect($,F=302){if(!this.headers)this.headers=new Headers;return this.headers.set("Location",$),new Response(null,{status:F,headers:this.headers})}setCookie($,F,z={}){if(!this.headers)this.headers=new Headers;let X=`${encodeURIComponent($)}=${encodeURIComponent(F)}`;if(z.maxAge)X+=`; Max-Age=${z.maxAge}`;if(z.expires)X+=`; Expires=${z.expires.toUTCString()}`;if(z.path)X+=`; Path=${z.path}`;if(z.domain)X+=`; Domain=${z.domain}`;if(z.secure)X+="; Secure";if(z.httpOnly)X+="; HttpOnly";if(z.sameSite)X+=`; SameSite=${z.sameSite}`;return this.headers.append("Set-Cookie",X),this}get cookies(){if(!this.parsedCookies){let $=this.req.headers.get("cookie");this.parsedCookies=$?B$($):S}return this.parsedCookies}stream($){let F=new Headers(this.headers??new Headers),z=new ReadableStream({async start(X){await $(X),X.close()}});return new Response(z,{headers:F})}yieldStream($){return new Response}}function P($,F){for(let z in F)$.set(z,F[z])}function E($,F){for(let z in $)F[z]=$[z]}function B$($){return Object.fromEntries($.split(";").map((F)=>{let[z,...X]=F.trim().split("=");return[z,decodeURIComponent(X.join("="))]}))}async function J$($){let F=$.headers.get("Content-Type")||"";if(!F)return{};if($.headers.get("Content-Length")==="0"||!$.body)return{};if(F.startsWith("application/json"))return await $.json();if(F.startsWith("application/x-www-form-urlencoded")){let X=await $.text();return Object.fromEntries(new URLSearchParams(X))}if(F.startsWith("multipart/form-data")){let X=await $.formData(),Z={};for(let[Q,V]of X.entries())Z[Q]=V;return Z}return{error:"Unknown request body type"}}var N=($)=>$!==null&&typeof $==="object"&&typeof $.then==="function",c=($)=>$!==null&&typeof $==="object"&&typeof $.status==="number"&&typeof $.headers==="object";async function f($,F,z){if(!F?.length)return;for(let X=0;X<F.length;X++){let Z=F[X](...z),Q=Z instanceof Promise?await Z:Z;if(Q&&$!=="onRequest")return Q}}async function a($,F,z){for(let X of $){let Z=await X(F,z);if(Z)return Z}}async function t($,F,z){let X=await S$($,F,z),Z=N(X)?await X:X;if(Z)return Z}async function S$($,F,z){if(F.endsWith("/"))F=F.slice(0,-1);if(!$.filters.has(F))if($.filterFunction.length)for(let X of $.filterFunction){let Z=await X(z);if(Z)return Z}else return Response.json({error:"Protected route, authentication required"},{status:401})}async function b($,F,z){if($.staticPath){let D=!0;if($.staticRequestPath)D=z.startsWith($.staticRequestPath);if(D){let G=await Y$($,z,F);if(G)return G}}let Q=($.router.find(F.req.method,"*")?.handler).slice(-1);if(Q.length>0){let D=await Q[0](F);if(c(D))return D}let V=await Promise.resolve($.routeNotFoundFunc(F));return c(V)?V:u(404,`404 Route not found for ${z}`)}function u($,F){return new Response(JSON.stringify({error:F}),{status:$,headers:{"Content-Type":"application/json"}})}async function Y$($,F,z){if(!$.staticPath)return null;let X=`${$.staticPath}${F}`;if(await Bun.file(X).exists()){let Q=A(X);return z.file(X,Q,200)}return null}var m=($)=>$.constructor.name==="AsyncFunction",e=($,F,z,...X)=>{if(F.length>5)$.push(`
4
- for (let i = 0; i < diesel.hooks.${z}.length; i++) {
5
- const result = diesel.hooks.${z}[i](${X});
1
+ var B={reset:"\x1B[0m",info:"\x1B[36m",warn:"\x1B[33m",error:"\x1B[31m",method:{GET:"\x1B[32m",POST:"\x1B[34m",PUT:"\x1B[35m",DELETE:"\x1B[31m",PATCH:"\x1B[36m"}},g=($,z,X)=>{let Z=B[$]||B.reset,Q=X?.method?B.method[X.method]||B.reset:B.reset,V=X?.status?X.status>=500?B.error:X.status>=400?B.warn:B.info:B.reset;console.log(`
2
+ ${Z}[${$.toUpperCase()}]${B.reset} ${z} - ${Q}${X?.method||""}${B.reset}`);let G={timestamp:new Date().toISOString(),...X,status:X?.status?`${V}${X.status}${B.reset}`:void 0,method:X?.method?`${Q>Z}${X.method}${B.reset}`:void 0};console.log(JSON.stringify(G,null,2)+`
3
+ `)},p=($)=>{let{app:z,logger:X,logLevel:Z="info",onRequest:Q,onSend:V,onError:G}=$||{};z?.addHooks("onRequest",(U)=>{U.req.startTime=Date.now(),X?.()??g(Z,"Incoming Request",{method:U.req.method,url:U.path,headers:{"user-agent":U.req.headers.get("user-agent"),"content-type":U.req.headers.get("content-type")}}),Q?.(U)}),z?.addHooks("onSend",async(U,W)=>{let F=`${Date.now()-U.req.startTime}ms`;X?.()??g(Z,"Response Sent",{method:U.req.method,url:U.url.toString(),status:W.status,duration:F,reqId:U.get?.("requestId"),headers:{"content-type":W.headers.get("content-type")}});let Y=await V?.(U);if(Y instanceof Response)return Y}),z?.addHooks("onError",async(U,W,F)=>{X?.()??g("error","Unhandled Error",{method:F.method,url:W,status:500,error:U.message});let Y=await G?.(U,W,F);if(Y instanceof Response)return Y})},v=($,z,X,Z=0,Q,V)=>{let G=B.method[z]||B.reset,U=Z>=500?B.error:Z>=400?B.warn:B.info,W=V?`[${V}] `:"",F=$==="<--"?`${$} ${G}${z}${B.reset} ${X} ${W}`:`${$} ${G}${z}${B.reset} ${X} ${U}${Z}${B.reset} ${Q??""} ${W}`;console.log(F)},F$=($)=>{let z=Date.now()-$;return z<1000?`${z}ms`:`${Math.round(z/1000)}s`},i=($)=>{let{app:z,log:X,onRequest:Z,onSend:Q,onError:V}=$;z.addHooks("onRequest",(G)=>{let{req:U,path:W}=G;U.startTime=Date.now(),X?.()??v("<--",U.method,W),Z?.(U,W)}),z.addHooks("onSend",async(G,U)=>{let{method:W,url:F}=G.req,Y=new URL(F).pathname,R=G.get?.("requestId");X?.()??v("-->",W,Y,U?.status,F$(G.req.startTime),R);let L=await Q?.(G);return L instanceof Response?L:U}),z.addHooks("onError",async(G,U,W)=>{let F=W.path;X?.()??v(G.message,W.method,F,500);let Y=await V?.(G,F,W);if(Y instanceof Response)return Y})};function l($,z){if(!$)throw Error("JWT library is not defined, please provide jwt to authenticateJwt Function");return(X)=>{try{let Z=X.cookies?.accessToken??X.req?.headers?.get("Authorization");if(!Z)return X.json({message:"Unauthorized",error:"No token provided"},401);if(Z.startsWith("Bearer "))Z=Z.slice(7);let Q=$?.verify(Z,z);if(!Q)return X.json({message:"Unauthorized",error:"Token could not be decoded"},401);X.set("user",Q)}catch(Z){let Q="Invalid token";if(Z.name==="TokenExpiredError")Q="Token expired";else if(Z.name==="JsonWebTokenError")Q="Malformed or tampered token";return X.json({message:"Unauthorized",error:Q},401)}}}function n($,z,X){if(!$)throw Error("JWT library is not defined, please provide jwt to authenticateJwtDB Function");if(!z)throw Error("User model is not defined, please provide UserModel to authenticateJwtDB Function");return async(Z)=>{try{let Q=Z.cookies?.accessToken??Z.req?.headers?.get("Authorization");if(!Q)return Z.json({message:"Unauthorized",error:"No token provided"},401);if(Q.startsWith("Bearer "))Q=Q.slice(7);let V=$?.verify(Q,X);if(!V)return Z.json({message:"Unauthorized",error:"Token could not be decoded"},401);let G=await z.findById(V._id).select("-password -refreshToken");if(!G)return Z.json({message:"Unauthorized: User not found"},404);Z.set("user",G);return}catch(Q){let V="Invalid token";if(Q.name==="TokenExpiredError")V="Token expired";else if(Q.name==="JsonWebTokenError")V="Malformed or tampered token";return Z.json({message:"Unauthorized",error:V},401)}}}function A($){switch($.split(".").pop()?.toLowerCase()){case"js":return"application/javascript";case"css":return"text/css";case"html":return"text/html";case"json":return"application/json";case"png":return"image/png";case"jpg":case"jpeg":return"image/jpeg";case"svg":return"image/svg+xml";case"gif":return"image/gif";case"woff":return"font/woff";case"woff2":return"font/woff2";default:return"application/octet-stream"}}var s=["GET","POST","PUT","PATCH","DELETE","ANY","ALL","HEAD","OPTIONS","PROPFIND"],D=Object.freeze({});class M{req;server;path;param;env;executionContext;headers;parsedQuery=null;parsedCookies=null;parsedBody=null;contextData=D;urlObject=null;constructor($,z,X,Z,Q,V){this.req=$,this.server=z,this.path=X,this.param=Z,this.env=Q,this.executionContext=V,this.headers=null}setHeader($,z){if(!this.headers)this.headers=new Headers;return this.headers.set($,z),this}removeHeader($){if(this.headers)this.headers.delete($);return this}set($,z){if(this.contextData===D)this.contextData={};return this.contextData[$]=z,this}get($){if(this.contextData===D)return;return this.contextData[$]}get ip(){if(this.server)return this.server.requestIP(this.req)?.address??null;return this.req.headers.get("CF-Connecting-IP")||null}get url(){if(!this.urlObject)this.urlObject=new URL(this.req.url);return this.urlObject}get query(){if(!this.parsedQuery)this.parsedQuery=this.url.search?Object.fromEntries(this.url.searchParams):D;return this.parsedQuery}get params(){return this.param?this.param:D}get body(){if(this.req.method==="GET")return Promise.resolve(D);if(!this.parsedBody)this.parsedBody=(async()=>{try{let $=await Y$(this.req);if($.error)throw Error($.error);return Object.keys($).length===0?null:$}catch($){throw Error("Invalid request body format")}})();return this.parsedBody}text($,z=200,X){if(!this.headers){if(!X)return new Response($,{status:z,headers:{"Content-Type":"text/plain; charset=utf-8"}});let Z={"Content-Type":"text/plain; charset=utf-8"};return E(X,Z),new Response($,{status:z,headers:Z})}if(X)H(this.headers,X);if(!this.headers?.has("Content-Type"))this.headers?.set("Content-Type","text/plain; charset=utf-8");return new Response($,{status:z,headers:this.headers})}send($,z=200,X){let Z,Q;if($ instanceof Uint8Array||$ instanceof ArrayBuffer)Z="application/octet-stream",Q=$;else if($!==null&&typeof $==="object")Z="application/json; charset=utf-8",Q=JSON.stringify($);else if(typeof $==="string")Z="text/plain; charset=utf-8",Q=$;else Z="text/plain; charset=utf-8",Q=String($);if(!this.headers){if(!X)return new Response(Q,{status:z,headers:{"Content-Type":Z}});let V={"Content-Type":Z};return E(X,V),new Response(Q,{status:z,headers:V})}if(X)H(this.headers,X);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type",Z);return new Response(Q,{status:z,headers:this.headers})}json($,z=200,X){if(!this.headers){if(!X)return Response.json($,{status:z,headers:{"Content-Type":"application/json; charset=utf-8"}});let Z={"Content-Type":"application/json; charset=utf-8"};return E(X,Z),Response.json($,{status:z,headers:Z})}if(X)H(this.headers,X);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type","application/json; charset=utf-8");return new Response(JSON.stringify($),{status:z,headers:this.headers})}file($,z,X=200,Z){let Q=Bun.file($);if(!this.headers){if(!Z)return new Response(Q,{status:X,headers:{"Content-Type":z??A($)}});let V={"Content-Type":z??A($)};return E(Z,V),new Response(Q,{status:X,headers:V})}if(Z)H(this.headers,Z);if(!this.headers.has("Content-Type"))this.headers.set("Content-Type",z??A($));return new Response(Q,{status:X,headers:this.headers})}async ejs($,z={},X=200){console.log("this method is diabled now for some time")}redirect($,z=302){if(!this.headers)this.headers=new Headers;return this.headers.set("Location",$),new Response(null,{status:z,headers:this.headers})}setCookie($,z,X={}){if(!this.headers)this.headers=new Headers;let Z=`${encodeURIComponent($)}=${encodeURIComponent(z)}`;if(X.maxAge)Z+=`; Max-Age=${X.maxAge}`;if(X.expires)Z+=`; Expires=${X.expires.toUTCString()}`;if(X.path)Z+=`; Path=${X.path}`;if(X.domain)Z+=`; Domain=${X.domain}`;if(X.secure)Z+="; Secure";if(X.httpOnly)Z+="; HttpOnly";if(X.sameSite)Z+=`; SameSite=${X.sameSite}`;return this.headers.append("Set-Cookie",Z),this}get cookies(){if(!this.parsedCookies){let $=this.req.headers.get("cookie");this.parsedCookies=$?J$($):D}return this.parsedCookies}stream($){let z=new Headers(this.headers??new Headers),X=new ReadableStream({async start(Z){await $(Z),Z.close()}});return new Response(X,{headers:z})}yieldStream($){return new Response}}function H($,z){for(let X in z)$.set(X,z[X])}function E($,z){for(let X in $)z[X]=$[X]}function J$($){return Object.fromEntries($.split(";").map((z)=>{let[X,...Z]=z.trim().split("=");return[X,decodeURIComponent(Z.join("="))]}))}async function Y$($){let z=$.headers.get("Content-Type")||"";if(!z)return{};if($.headers.get("Content-Length")==="0"||!$.body)return{};if(z.startsWith("application/json"))return await $.json();if(z.startsWith("application/x-www-form-urlencoded")){let Z=await $.text();return Object.fromEntries(new URLSearchParams(Z))}if(z.startsWith("multipart/form-data")){let Z=await $.formData(),Q={};for(let[V,G]of Z.entries())Q[V]=G;return Q}return{error:"Unknown request body type"}}var S=($)=>$!==null&&typeof $==="object"&&typeof $.then==="function",x=($)=>$!==null&&typeof $==="object"&&typeof $.status==="number"&&typeof $.headers==="object";async function C($,z,X){if(!z?.length)return;for(let Z=0;Z<z.length;Z++){let Q=z[Z](...X),V=Q instanceof Promise?await Q:Q;if(V&&$!=="onRequest")return V}}async function r($,z,X){for(let Z of $){let Q=await Z(z,X);if(Q)return Q}}async function a($,z,X){let Z=await B$($,z,X),Q=S(Z)?await Z:Z;if(Q)return Q}async function B$($,z,X){if(z.endsWith("/"))z=z.slice(0,-1);if(!$.filters.has(z))if($.filterFunction.length)for(let Z of $.filterFunction){let Q=await Z(X);if(Q)return Q}else return Response.json({error:"Protected route, authentication required"},{status:401})}async function b($,z,X){if($.staticPath){let U=!0;if($.staticRequestPath)U=X.startsWith($.staticRequestPath);if(U){let W=await K$($,X,z);if(W)return W}}let V=($.router.find(z.req.method,"*")?.handler).slice(-1);if(V.length>0){let U=await V[0](z);if(x(U))return U}let G=await Promise.resolve($.routeNotFoundFunc(z));return x(G)?G:y(404,`404 Route not found for ${X}`)}function y($,z){return new Response(JSON.stringify({error:z}),{status:$,headers:{"Content-Type":"application/json"}})}async function K$($,z,X){if(!$.staticPath)return null;let Z=`${$.staticPath}${z}`;if(await Bun.file(Z).exists()){let V=A(Z);return X.file(Z,V,200)}return null}var c=($)=>$.constructor.name==="AsyncFunction",t=($,z,X,...Z)=>{if(z.length>5)$.push(`
4
+ for (let i = 0; i < diesel.hooks.${X}.length; i++) {
5
+ const result = diesel.hooks.${X}[i](${Z});
6
6
  const finalResult = result instanceof Promise ? await result : result;
7
- if (finalResult && '${z}' !== 'onRequest') return finalResult
7
+ if (finalResult && '${X}' !== 'onRequest') return finalResult
8
8
  }
9
- `);else F?.forEach((Z,Q)=>{if(m(Z))$.push(`
10
- const ${z}${Q}Result = await diesel.hooks.${z}[${Q}](${X})
11
- if (${z}${Q}Result && '${z}' !== 'onRequest') return ${z}${Q}Result
9
+ `);else z?.forEach((Q,V)=>{if(c(Q))$.push(`
10
+ const ${X}${V}Result = await diesel.hooks.${X}[${V}](${Z})
11
+ if (${X}${V}Result && '${X}' !== 'onRequest') return ${X}${V}Result
12
12
  `);else $.push(`
13
- const ${z}${Q}Result = diesel.hooks.${z}[${Q}](${X})
14
- if (${z}${Q}Result && '${z}' !== 'onRequest') return ${z}${Q}Result
15
- `)})},K$=($)=>{$.push(`
13
+ const ${X}${V}Result = diesel.hooks.${X}[${V}](${Z})
14
+ if (${X}${V}Result && '${X}' !== 'onRequest') return ${X}${V}Result
15
+ `)})},D$=($)=>{$.push(`
16
16
  let pathname;
17
17
  const start = req.url.indexOf('/', req.url.indexOf(':') + 4);
18
18
  let i = start;
@@ -30,9 +30,9 @@ ${X}[${$.toUpperCase()}]${J.reset} ${F} - ${Z}${z?.method||""}${J.reset}`);let V
30
30
  if (!pathname) {
31
31
  pathname = req.url.slice(start, i);
32
32
  }
33
- `)};var o=($)=>{let F=[],z=$?.hasPreHandlerHook?$.hooks.preHandler:[],X=$?.hasOnSendHook?$.hooks.onSend:[];if(K$(F),F.push(`
33
+ `)};var u=($)=>{let z=[],X=$?.hasPreHandlerHook?$.hooks.preHandler:[],Z=$?.hasOnSendHook?$.hooks.onSend:[];if(D$(z),z.push(`
34
34
  const matchedRouteHandler = diesel.router.find(req.method, pathname);
35
- `),F.push(`
35
+ `),z.push(`
36
36
  const ctx = new Context(
37
37
  req,
38
38
  server,
@@ -41,10 +41,10 @@ ${X}[${$.toUpperCase()}]${J.reset} ${F} - ${Z}${z?.method||""}${J.reset}`);let V
41
41
  env,
42
42
  executionContext
43
43
  )
44
- `),$.hasFilterEnabled)F.push(`
44
+ `),$.hasFilterEnabled)z.push(`
45
45
  const filterResponse = await runFilter(diesel, pathname, ctx);
46
46
  if (filterResponse) return filterResponse;
47
- `);if($.hasPreHandlerHook)e(F,z,"preHandler","ctx");if(F.push(`
47
+ `);if($.hasPreHandlerHook)t(z,X,"preHandler","ctx");if(z.push(`
48
48
  let finalResult
49
49
  const handlers = matchedRouteHandler?.handler;
50
50
 
@@ -59,60 +59,53 @@ ${X}[${$.toUpperCase()}]${J.reset} ${F} - ${Z}${z?.method||""}${J.reset}`);let V
59
59
  if (finalResult) break;
60
60
  }
61
61
  }
62
- `),$.hasOnSendHook)e(F,X,"onSend","ctx","finalResult");F.push(`
62
+ `),$.hasOnSendHook)t(z,Z,"onSend","ctx","finalResult");z.push(`
63
63
  if (finalResult) return finalResult;
64
- `),F.push(`
64
+ `),z.push(`
65
65
  return await handleRouteNotFound(diesel, ctx, pathname);
66
- `);let Z=`
66
+ `);let Q=`
67
67
  return async function pipeline(req, diesel, server, env, executionContext) {
68
- ${F.join(`
68
+ ${z.join(`
69
69
  `)}
70
70
  }
71
- `;return Function("runFilter","handleRouteNotFound","generateErrorResponse","Context","isPromise",Z)(t,b,u,_,N)},$$=($,F,z,...X)=>{let Z=[],Q;if(typeof X[0]==="string"||typeof X[0]==="object")Q=X[0];let V=X,D=$?.hasMiddleware?$.globalMiddlewares:[],G=$?.hasMiddleware?$.middlewares.get(z)||[]:[],W=[...D,...G],U=$?.hasOnReqHook?$.hooks.onRequest:[],M=$.filters.has(z),w=$.filterFunction;if(U&&U?.length>0)Z.push(`
71
+ `;return Function("runFilter","handleRouteNotFound","generateErrorResponse","Context","isPromise",Q)(a,b,y,M,S)},e=($,z,X,...Z)=>{let Q=[],V;if(typeof Z[0]==="string"||typeof Z[0]==="object")V=Z[0];let G=Z,U=$?.hasOnReqHook?$.hooks.onRequest:[],W=$.filters.has(X),F=$.filterFunction;if(U&&U?.length>0)Q.push(`
72
72
  const onRequestResult = await runHooks(
73
73
  "onRequest",
74
74
  onRequestHooks,
75
- [req, "${z}", server]
75
+ [req, "${X}", server]
76
76
  );
77
77
  if (onRequestResult) return onRequestResult;
78
- `);if(W.length)Z.push(`
79
- const globalMiddlewareResponse = await executeBunMiddlewares(
80
- allMiddlewares,
81
- req,
82
- server
83
- );
84
- if (globalMiddlewareResponse) return globalMiddlewareResponse;
85
- `);if($.hasFilterEnabled){if(!M)Z.push(`if (${w.length}) {
78
+ `);if($.hasFilterEnabled){if(!W)Q.push(`if (${F.length}) {
86
79
  for (const filterFunction of filterFunctions) {
87
80
  const filterResult = await filterFunction(req, server);
88
81
  if (filterResult) return filterResult;
89
82
  }
90
83
  } else {
91
84
  return Response.json({ error: "Protected route, authentication required" }, { status: 401 });
92
- }`)}if(Z.push(`
93
- if ("${F}" !== req.method)
85
+ }`)}if(Q.push(`
86
+ if ("${z}" !== req.method)
94
87
  return new Response("Method Not Allowed", { status: 405 });
95
- `),typeof Q<"u")if(typeof Q==="string")Z.push(`
96
- return new Response(${JSON.stringify(Q)});
97
- `);else{let L=JSON.stringify(Q);Z.push(`
88
+ `),typeof V<"u")if(typeof V==="string")Q.push(`
89
+ return new Response(${JSON.stringify(V)});
90
+ `);else{let L=JSON.stringify(V);Q.push(`
98
91
  return new Response(${JSON.stringify(L)}, {
99
92
  headers: { "content-type": "application/json; charset=utf-8" }
100
93
  });
101
- `)}else if(V.length===1){let L=V[0];if(m(L))Z.push(`
94
+ `)}else if(G.length===1){let L=G[0];if(c(L))Q.push(`
102
95
  const response = await handlers[0](req, server);
103
96
  if (response instanceof Response) return response;
104
- `);else Z.push(`
97
+ `);else Q.push(`
105
98
  const response = handlers[0](req, server);
106
99
  if (response instanceof Response) return response;
107
- `)}else V.forEach((L,Y)=>{if(m(L))Z.push(`
108
- const response${Y} = await handlers[${Y}](req, server);
109
- if (response${Y} instanceof Response) return response${Y};
110
- `);else Z.push(`
111
- const response${Y} = handlers[${Y}](req, server);
112
- if (response${Y} instanceof Response) return response${Y};
113
- `)});let q=`
100
+ `)}else G.forEach((L,K)=>{if(c(L))Q.push(`
101
+ const response${K} = await handlers[${K}](req, server);
102
+ if (response${K} instanceof Response) return response${K};
103
+ `);else Q.push(`
104
+ const response${K} = handlers[${K}](req, server);
105
+ if (response${K} instanceof Response) return response${K};
106
+ `)});let Y=`
114
107
  return async function(req, server) {
115
- ${Z.join(`
108
+ ${Q.join(`
116
109
  `)}
117
110
  }
118
- `;return Function("executeBunMiddlewares","handlers","runHooks","filterFunctions","onRequestHooks","allMiddlewares",q)(a,V,f,w,U,W)};var w$=($,F)=>{try{return F($)}catch{return $.replace(/(?:%[0-9A-Fa-f]{2})+/g,(z)=>{try{return F(z)}catch{return z}})}},L$=($)=>w$($,decodeURI),g=($)=>{let F=$.indexOf("/",$.indexOf(":")+4),z=F;for(;z<$.length;z++){let X=$.charCodeAt(z);if(X===37){let Z=$.indexOf("?",z),Q=$.slice(F,Z===-1?void 0:Z);return L$(Q.includes("%25")?Q.replace(/%25/g,"%2525"):Q)}else if(X===63)break}return $.slice(F,z)};var d=Symbol.for,C=Symbol("kCapture"),Z$=d("events.errorMonitor"),N$=Symbol("events.maxEventTargetListeners"),f$=Symbol("events.maxEventTargetListenersWarned"),F$=d("nodejs.rejection"),C$=d("nodejs.rejection"),z$=Array.prototype.slice,R=10,K=function($){if(this._events===void 0||this._events===this.__proto__._events)this._events={__proto__:null},this._eventsCount=0;if(this._maxListeners??=void 0,this[C]=$?.captureRejections?Boolean($?.captureRejections):B[C])this.emit=O$},B=K.prototype={};B._events=void 0;B._eventsCount=0;B._maxListeners=void 0;B.setMaxListeners=function($){return i($,"setMaxListeners",0),this._maxListeners=$,this};B.constructor=K;B.getMaxListeners=function(){return this?._maxListeners??R};function Q$($,F){var{_events:z}=$;if(F[0]??=Error("Unhandled error."),!z)throw F[0];var X=z[Z$];if(X)for(var Z of z$.call(X))Z.apply($,F);var Q=z.error;if(!Q)throw F[0];for(var Z of z$.call(Q))Z.apply($,F);return!0}function R$($,F,z,X){F.then(void 0,function(Z){queueMicrotask(()=>q$($,Z,z,X))})}function q$($,F,z,X){if(typeof $[F$]==="function")$[F$](F,z,...X);else try{$[C]=!1,$.emit("error",F)}finally{$[C]=!0}}var A$=function($,...F){if($==="error")return Q$(this,F);var{_events:z}=this;if(z===void 0)return!1;var X=z[$];if(X===void 0)return!1;let Z=X.length>1?X.slice():X;for(let Q=0,{length:V}=Z;Q<V;Q++){let D=Z[Q];switch(F.length){case 0:D.call(this);break;case 1:D.call(this,F[0]);break;case 2:D.call(this,F[0],F[1]);break;case 3:D.call(this,F[0],F[1],F[2]);break;default:D.apply(this,F);break}}return!0},O$=function($,...F){if($==="error")return Q$(this,F);var{_events:z}=this;if(z===void 0)return!1;var X=z[$];if(X===void 0)return!1;let Z=X.length>1?X.slice():X;for(let Q=0,{length:V}=Z;Q<V;Q++){let D=Z[Q],G;switch(F.length){case 0:G=D.call(this);break;case 1:G=D.call(this,F[0]);break;case 2:G=D.call(this,F[0],F[1]);break;case 3:G=D.call(this,F[0],F[1],F[2]);break;default:G=D.apply(this,F);break}if(G!==void 0&&typeof G?.then==="function"&&G.then===Promise.prototype.then)R$(this,G,$,F)}return!0};B.emit=A$;B.addListener=function($,F){j(F);var z=this._events;if(!z)z=this._events={__proto__:null},this._eventsCount=0;else if(z.newListener)this.emit("newListener",$,F.listener??F);var X=z[$];if(!X)z[$]=[F],this._eventsCount++;else{X.push(F);var Z=this._maxListeners??R;if(Z>0&&X.length>Z&&!X.warned)V$(this,$,X)}return this};B.on=B.addListener;B.prependListener=function($,F){j(F);var z=this._events;if(!z)z=this._events={__proto__:null},this._eventsCount=0;else if(z.newListener)this.emit("newListener",$,F.listener??F);var X=z[$];if(!X)z[$]=[F],this._eventsCount++;else{X.unshift(F);var Z=this._maxListeners??R;if(Z>0&&X.length>Z&&!X.warned)V$(this,$,X)}return this};function V$($,F,z){z.warned=!0;let X=Error(`Possible EventEmitter memory leak detected. ${z.length} ${String(F)} listeners added to [${$.constructor.name}]. Use emitter.setMaxListeners() to increase limit`);X.name="MaxListenersExceededWarning",X.emitter=$,X.type=F,X.count=z.length,console.warn(X)}function D$($,F,...z){this.removeListener($,F),F.apply(this,z)}B.once=function($,F){j(F);let z=D$.bind(this,$,F);return z.listener=F,this.addListener($,z),this};B.prependOnceListener=function($,F){j(F);let z=D$.bind(this,$,F);return z.listener=F,this.prependListener($,z),this};B.removeListener=function($,F){j(F);var{_events:z}=this;if(!z)return this;var X=z[$];if(!X)return this;var Z=X.length;let Q=-1;for(let V=Z-1;V>=0;V--)if(X[V]===F||X[V].listener===F){Q=V;break}if(Q<0)return this;if(Q===0)X.shift();else X.splice(Q,1);if(X.length===0)delete z[$],this._eventsCount--;return this};B.off=B.removeListener;B.removeAllListeners=function($){var{_events:F}=this;if($&&F){if(F[$])delete F[$],this._eventsCount--}else this._events={__proto__:null};return this};B.listeners=function($){var{_events:F}=this;if(!F)return[];var z=F[$];if(!z)return[];return z.map((X)=>X.listener??X)};B.rawListeners=function($){var{_events:F}=this;if(!F)return[];var z=F[$];if(!z)return[];return z.slice()};B.listenerCount=function($){var{_events:F}=this;if(!F)return 0;return F[$]?.length??0};B.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};B[C]=!1;function I$($,F,z){var X=z?.signal;if(G$(X,"options.signal"),X?.aborted)throw new h(void 0,{cause:X?.reason});let{resolve:Z,reject:Q,promise:V}=$newPromiseCapability(Promise),D=(U)=>{if($.removeListener(F,G),X!=null)k(X,"abort",W);Q(U)},G=(...U)=>{if(typeof $.removeListener==="function")$.removeListener("error",D);if(X!=null)k(X,"abort",W);Z(U)};if(X$($,F,G,{once:!0}),F!=="error"&&typeof $.once==="function")$.once("error",D);function W(){k($,F,G),k($,"error",D),Q(new h(void 0,{cause:X?.reason}))}if(X!=null)X$(X,"abort",W,{once:!0});return V}function M$($,F){return $.listeners(F)}function _$($,...F){i($,"setMaxListeners",0);var z;if(F&&(z=F.length))for(let X=0;X<z;X++)F[X].setMaxListeners($);else R=$}function j$($,F){return $.listenerCount(F)}function k($,F,z,X){if(typeof $.removeListener==="function")$.removeListener(F,z);else $.removeEventListener(F,z,X)}function X$($,F,z,X){if(typeof $.on==="function")if(X.once)$.once(F,z);else $.on(F,z);else $.addEventListener(F,z,X)}class h extends Error{constructor($="The operation was aborted",F=void 0){if(F!==void 0&&typeof F!=="object")throw O("options","Object",F);super($,F);this.code="ABORT_ERR",this.name="AbortError"}}function O($,F,z){let X=TypeError(`The "${$}" argument must be of type ${F}. Received ${z}`);return X.code="ERR_INVALID_ARG_TYPE",X}function T$($,F,z){let X=RangeError(`The "${$}" argument is out of range. It must be ${F}. Received ${z}`);return X.code="ERR_OUT_OF_RANGE",X}function G$($,F){if($!==void 0&&($===null||typeof $!=="object"||!("aborted"in $)))throw O(F,"AbortSignal",$)}function i($,F,z,X){if(typeof $!=="number")throw O(F,"number",$);if(z!=null&&$<z||X!=null&&$>X||(z!=null||X!=null)&&Number.isNaN($))throw T$(F,`${z!=null?`>= ${z}`:""}${z!=null&&X!=null?" && ":""}${X!=null?`<= ${X}`:""}`,$)}function j($){if(typeof $!=="function")throw TypeError("The listener must be a function")}function H$($,F){if(typeof $!=="boolean")throw O(F,"boolean",$)}function P$($){return $?._maxListeners??R}function E$($,F){if($===void 0)throw O("signal","AbortSignal",$);if(G$($,"signal"),typeof F!=="function")throw O("listener","function",F);let z;if($.aborted)queueMicrotask(()=>F());else $.addEventListener("abort",F,{__proto__:null,once:!0}),z=()=>{$.removeEventListener("abort",F)};return{__proto__:null,[Symbol.dispose](){z?.()}}}Object.defineProperties(K,{captureRejections:{get(){return B[C]},set($){H$($,"EventEmitter.captureRejections"),B[C]=$},enumerable:!0},defaultMaxListeners:{enumerable:!0,get:()=>{return R},set:($)=>{i($,"defaultMaxListeners",0),R=$}},kMaxEventTargetListeners:{value:N$,enumerable:!1,configurable:!1,writable:!1},kMaxEventTargetListenersWarned:{value:f$,enumerable:!1,configurable:!1,writable:!1}});Object.assign(K,{once:I$,getEventListeners:M$,getMaxListeners:P$,setMaxListeners:_$,EventEmitter:K,usingDomains:!1,captureRejectionSymbol:C$,errorMonitor:Z$,addAbortListener:E$,init:K,listenerCount:j$});class v{children;handlers;middlewares;params;paramName;constructor(){this.children={},this.handlers={},this.middlewares=[],this.params={},this.paramName=""}}class T{root;globalMiddlewares;constructor(){this.root=new v,this.globalMiddlewares=[]}pushMiddleware($,F){if(!Array.isArray(F))F=[F];if($==="/"){this.globalMiddlewares.push(...F);return}let z=this.root,X=$.split("/").filter(Boolean);for(let Z of X){let Q=Z;if(Z.startsWith(":"))Q=":";else if(Z.startsWith("*"))z.middlewares.push(...F);if(!z.children[Q])z.children[Q]=new v;z=z.children[Q]}z.middlewares.push(...F)}addMiddleware($,F){return this.pushMiddleware($,F)}insert($,F,z){let X=this.root;if(F==="/"){X.handlers[$]=z,X.params=S;return}let Z=F.split("/").filter(Boolean),Q={};for(let V=0;V<Z.length;V++){let D=Z[V],G=D,W="";if(D.startsWith(":"))G=":",W=D.slice(1);if(!X.children[G])X.children[G]=new v;if(X=X.children[G],W)Q[W]=V,X.paramName=W}X.params=Q,X.handlers[$]=z}add($,F,z){return this.insert($,F,z)}search($,F){let z=this.root,X=F.split("/"),Z=this.globalMiddlewares.slice(),Q;for(let V=0;V<X.length;V++){let D=X[V];if(D.length===0)continue;if(z.children[D])z=z.children[D];else if(z.children[":"]){if(z=z.children[":"],!Q)Q={};Q[z.paramName]=D}else if(z.children["*"]){z=z.children["*"];break}else return{params:Q,handler:Z};if(z.middlewares.length>0){let G=z.middlewares;for(let W=0;W<G.length;W++)Z.push(G[W])}}if(z.handlers[$])Z.push(z.handlers[$]);if(z.handlers.ALL)Z.push(z.handlers.ALL);return{params:Q,handler:Z}}find($,F){return this.search($,F)}}class p{static create($){switch($){case"t2":return new T;case"trie":return new T;default:return new T}}}var W$=["GET","POST","PUT","PATCH","DELETE","ANY","ALL","HEAD","OPTIONS","PROPFIND"];var S=Object.freeze({});class I{static instance;routes;tempRoutes;tempMiddlewares=new Map;router;hasOnReqHook;hasPreHandlerHook;hasPostHandlerHook;hasOnSendHook;hasOnError;hooks;corsConfig;FilterRoutes;filters;filterFunction;hasFilterEnabled;serverInstance;staticFiles;user_jwt_secret;baseApiUrl;enableFileRouter;idleTimeOut;routeNotFoundFunc;prefixApiUrl;compileConfig;#$=!1;emitter;errorFormat;platform="bun";staticPath;staticRequestPath=void 0;get;post;put;patch;delete;any;head;options;propfind;all;constructor($={}){W$.forEach((q)=>{this[q.toLocaleLowerCase()]=(H,...L)=>{return this.addRoute(q,H,L),this}});let{router:F="t2",routerInstance:z,errorFormat:X="json",platform:Z="bun",enableFileRouting:Q=!1,prefixApiUrl:V="",baseApiUrl:D="",jwtSecret:G,idleTimeOut:W=10,pipelineArchitecture:U=!1,logger:M,onError:w}=$;if(z)this.router=z;else this.router=p.create(F);if(this.errorFormat=X,this.platform=Z,!I.instance)I.instance=this;if(U)this.#$=!0;if(this.errorFormat=X,this.emitter=new K,this.prefixApiUrl=V??"",this.fetch=this.fetch.bind(this),this.routes={},this.idleTimeOut=W??10,this.enableFileRouter=Q??!1,this.baseApiUrl=D||"",this.user_jwt_secret=G||process.env.DIESEL_JWT_SECRET||"default_diesel_secret_for_jwt",this.tempRoutes=new Map,this.corsConfig=null,this.hasOnReqHook=!1,this.hasPreHandlerHook=!1,this.hasPostHandlerHook=!1,this.hasOnSendHook=!1,this.hasOnError=!1,this.hooks={onRequest:[],preHandler:[],postHandler:[],onSend:[],onError:[],onClose:[]},w)this.addHooks("onError",(q,H)=>{console.log("Got an exception:",q),console.log("Request Path:",H)});if(M)this.useLogger({app:this});this.FilterRoutes=[],this.filters=new Set,this.filterFunction=[],this.hasFilterEnabled=!1,this.serverInstance=null,this.staticPath=null,this.staticFiles={},this.routeNotFoundFunc=()=>{},this.compileConfig=null}static router($){if(!this.instance)this.instance=new I;return new Proxy(this.instance,{get(F,z,X){return(Z,Q)=>{let V=Q,D="";if(typeof Z==="string")D=Z;else if(typeof Z==="function")V=Z;else if(typeof Z!=="string")D="";let G=$+D;return F[z](G,V)}}})}setupFilter(){return this.hasFilterEnabled=!0,{publicRoutes:(...$)=>{return this.FilterRoutes=$,this.setupFilter()},permitAll:()=>{for(let $ of this?.FilterRoutes){if($.endsWith("/"))$=$.slice(0,-1);this.filters.add($)}return this.setupFilter()},authenticate:($)=>{if($?.length){let F=async(z,X)=>{let Z=z.path;for(let Q of this.filters)if(Z.startsWith(Q))return;for(let Q of $){let V=await Q(z,X);if(V)return V}};this.router.addMiddleware("/",[F])}},authenticateJwt:($)=>{let F=async(z)=>{let X=z.path;for(let Q of this.filters)if(X.startsWith(Q))return;let Z=s($,this.user_jwt_secret)(z);if(Z)return Z};this.router.addMiddleware("/",F)},authenticateJwtDB:($,F)=>{let z=async(X)=>{let Z=X.path;for(let V of this.filters)if(Z.startsWith(V))return;let Q=r($,F,this.user_jwt_secret)(X);if(Q)return Q};this.router.addMiddleware("/",z)}}}redirect($,F,z){return this.any($,(X)=>{let Z=X.params,Q=F;if(Z)for(let D in Z)Q=Q.replace(`:${D}`,Z[D]);let V=X.url.search;if(V)Q+=V;return X.redirect(Q,z)}),this}static($,F){return this.staticPath=$,this.staticRequestPath=F,this}staticHtml($){return this.staticFiles={...this.staticFiles,...$},this}addHooks($,F){if(typeof $!=="string")throw Error("hookName must be a string");if(typeof F!=="function")throw Error("callback must be a instance of function");switch($){case"onRequest":this.hooks.onRequest?.push(F),this.hasOnReqHook=!0;break;case"preHandler":this.hooks.preHandler?.push(F),this.hasPreHandlerHook=!0;break;case"postHandler":this.hooks.postHandler?.push(F),this.hasPostHandlerHook=!0;break;case"onSend":this.hooks.onSend?.push(F),this.hasOnSendHook=!0;break;case"onError":this.hooks.onError?.push(F),this.hasOnError=!0;break;case"onClose":this.hooks.onClose?.push(F);break;default:throw Error(`Unknown hook type: ${$}`)}return this}useLogger($){return n($),this}useAdvancedLogger($){return l($),this}BunRoute($,F,...z){if(!F||typeof F!=="string")throw Error("give a path in string format");let X=$$(this,$.toUpperCase(),F,...z);return this.routes[F]=X,this}listen($,...F){let z="0.0.0.0",X=void 0,Z={};for(let V of F)if(typeof V==="string")z=V;else if(typeof V==="function")X=V;else if(typeof V==="object"&&V!==null)Z=V;let Q={port:$,hostname:z,idleTimeOut:this.idleTimeOut,fetch:this.fetch(),static:this.staticFiles};if(this.routes&&Object.keys(this.routes).length>0)Q.routes=this.routes;if(Z.cert&&Z.key)Q.certFile=Z.cert,Q.keyFile=Z.key;return this.serverInstance=Bun?.serve(Q),X&&X(),this.serverInstance}close($){if(this.serverInstance)this.serverInstance.stop(!0),this.serverInstance=null,$?$():console.log("Server has been stopped");else console.warn("Server is not running.")}cfFetch(){return this.tempRoutes=null,this.tempMiddlewares=null,($,F,z)=>{return this.#F($,void 0,F,z)}}fetch(){if(this.tempRoutes=null,this.tempMiddlewares=null,this.platform==="cf"||this.platform==="cloudflare"){if(this.#$){let $=o(this);return(F,z,X)=>{return $(F,this,void 0,z,X).catch(async(Z)=>{return this.handleError(Z,g(F.url),F)})}}return($,F,z)=>{return this.#F($,void 0,F,z)}}if(this.#$){let $=o(this);return(F,z)=>{return $(F,this,z,void 0,void 0).catch(async(X)=>{return this.handleError(X,g(F.url),F)})}}return this.#F.bind(this)}async#F($,F,z,X){let Z=g($.url),Q=this.router.find($.method,Z),V=new _($,F,Z,Q?.params||S,z,X);try{if(this.hasOnReqHook)await f("onRequest",this.hooks.onRequest,[V]);if(this.hasPreHandlerHook){let W=await f("preHandler",this.hooks.preHandler,[V]);if(W)return W}let D,G=Q?.handler;if(G.length===1){let W=G[0](V);D=N(W)?await W:W}else for(let W=0;W<G.length;W++){let U=G[W](V);if(D=N(U)?await U:U,D)break}if(this.hasOnSendHook){let W=await f("onSend",this.hooks.onSend,[V,D]);if(W)return W}if(D)return D;return await b(this,V,Z)}catch(D){return this.handleError(D,Z,$)}}async handleError($,F,z){let Z=this.errorFormat,Q=await f("onError",this.hooks.onError,[$,F,z]);if(Q)return Q;if($&&typeof $==="object"&&$.name==="HTTPException"){let G=$;if(console.error(`HTTPException on path: ${F}`,{status:G.status,message:G.message,cause:G.cause,res:G.res,stack:G.stack}),G.res)return G.res;return Z==="json"?Response.json({error:G.message},{status:G.status}):new Response(G.message,{status:G.status})}let V=$ instanceof Error?$.message:"Internal Server Error",D=$ instanceof Error?$.stack:void 0;if(console.error(`Error on path: ${F}`,{message:V,stack:D}),Z==="json"){let G={error:V,...!1,path:F};return Response.json(G,{status:500,headers:{"Content-Type":"application/json"}})}else{let G=`Error: ${V}`;return new Response(G,{headers:{"Content-Type":"text/plain"},status:500})}}mount($,F){let z=$.endsWith("/*")?$.slice(0,-1):$,X=z==="/"?0:z.length;this.any($,(Z)=>{let Q=new URL(Z.req.url);Q.pathname=Q.pathname.slice(X)||"/";let V=new Request(Q,Z.req);return F(V,Z.server,Z.env,Z.executionContext)})}route($,F){$=$&&$.length>0?$:F?.prefixApiUrl;let z=F?.tempRoutes??new Map;for(let[X,Z]of z.entries()){let Q=X.replace(/::\w+$/,""),V=`${$}${Q}`,D=Z.handlers.slice(0,-1);this.router.addMiddleware(V,D);let G=Z.handlers[Z.handlers.length-1],W=Z.method;try{this.router.add(W,V,G)}catch(U){console.error(`Error inserting ${V}:`,U)}}for(let[X,Z]of F?.tempMiddlewares?.entries()){let Q=X==="/"?$||"/":`${$}${X}`;this.router.addMiddleware(Q,Z)}return F=null,this}register($){let F=new I,z=()=>{};return this}sub($,F){let z=F.fetch();return this.mount($,z)}addMiddlewareInRouter($,F){this.router.addMiddleware($,F)}addRoute($,F,z){if(typeof F!=="string")throw Error(`Error in ${z[z.length-1]}: Path must be a string. Received: ${typeof F}`);if(typeof $!=="string")throw Error(`Error in addRoute: Method must be a string. Received: ${typeof $}`);this.tempRoutes?.set(F+"::"+$,{method:$,handlers:z});let X=z.slice(0,-1),Z=z[z.length-1];if(X.length>0)this.addMiddlewareInRouter(F,X);try{if($==="ANY"){let Q=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD","PROPFIND"];for(let V of Q)try{this.router.add(V,F,Z)}catch(D){}}else this.router.add($,F,Z)}catch(Q){console.error(`Error inserting ${F}:`,Q)}}use($,...F){if(typeof $==="string"){let z=$==="/"?"/":$;if(!this.tempMiddlewares?.has(z))this.tempMiddlewares?.set(z,[]);this.tempMiddlewares?.get(z).push(...F),this.router.addMiddleware(z,F)}else if(typeof $==="function"){let z=[$,...F];if(!this.tempMiddlewares?.has("/"))this.tempMiddlewares?.set("/",[]);this.tempMiddlewares?.get("/").push(...F),this.router.addMiddleware("/",z)}return this}routeNotFound($){return this.routeNotFoundFunc=$,this}onMethod($,F,...z){let X=Array.isArray($)?$:[$];for(let Z of X){let Q=Z.toLowerCase();if(Q in this)this[Q](F,...z);else this.addRoute(Z.toUpperCase(),F,z)}return this}on($,F){return this.emitter.on($,F),this}emit($,...F){return this.emitter.emit($,...F),this}}export{I as default,S as EMPTY_OBJ};
111
+ `;return Function("executeBunMiddlewares","handlers","runHooks","filterFunctions","onRequestHooks","allMiddlewares",Y)(r,G,C,F,U)};var L$=($,z)=>{try{return z($)}catch{return $.replace(/(?:%[0-9A-Fa-f]{2})+/g,(X)=>{try{return z(X)}catch{return X}})}},N$=($)=>L$($,decodeURI),P=($)=>{let z=$.indexOf("/",$.indexOf(":")+4),X=z;for(;X<$.length;X++){let Z=$.charCodeAt(X);if(Z===37){let Q=$.indexOf("?",X),V=$.slice(z,Q===-1?void 0:Q);return N$(V.includes("%25")?V.replace(/%25/g,"%2525"):V)}else if(Z===63)break}return $.slice(z,X)};var h=Symbol.for,O=Symbol("kCapture"),Z$=h("events.errorMonitor"),S$=Symbol("events.maxEventTargetListeners"),C$=Symbol("events.maxEventTargetListenersWarned"),$$=h("nodejs.rejection"),O$=h("nodejs.rejection"),z$=Array.prototype.slice,w=10,N=function($){if(this._events===void 0||this._events===this.__proto__._events)this._events={__proto__:null},this._eventsCount=0;if(this._maxListeners??=void 0,this[O]=$?.captureRejections?Boolean($?.captureRejections):J[O])this.emit=I$},J=N.prototype={};J._events=void 0;J._eventsCount=0;J._maxListeners=void 0;J.setMaxListeners=function($){return d($,"setMaxListeners",0),this._maxListeners=$,this};J.constructor=N;J.getMaxListeners=function(){return this?._maxListeners??w};function Q$($,z){var{_events:X}=$;if(z[0]??=Error("Unhandled error."),!X)throw z[0];var Z=X[Z$];if(Z)for(var Q of z$.call(Z))Q.apply($,z);var V=X.error;if(!V)throw z[0];for(var Q of z$.call(V))Q.apply($,z);return!0}function w$($,z,X,Z){z.then(void 0,function(Q){queueMicrotask(()=>A$($,Q,X,Z))})}function A$($,z,X,Z){if(typeof $[$$]==="function")$[$$](z,X,...Z);else try{$[O]=!1,$.emit("error",z)}finally{$[O]=!0}}var q$=function($,...z){if($==="error")return Q$(this,z);var{_events:X}=this;if(X===void 0)return!1;var Z=X[$];if(Z===void 0)return!1;let Q=Z.length>1?Z.slice():Z;for(let V=0,{length:G}=Q;V<G;V++){let U=Q[V];switch(z.length){case 0:U.call(this);break;case 1:U.call(this,z[0]);break;case 2:U.call(this,z[0],z[1]);break;case 3:U.call(this,z[0],z[1],z[2]);break;default:U.apply(this,z);break}}return!0},I$=function($,...z){if($==="error")return Q$(this,z);var{_events:X}=this;if(X===void 0)return!1;var Z=X[$];if(Z===void 0)return!1;let Q=Z.length>1?Z.slice():Z;for(let V=0,{length:G}=Q;V<G;V++){let U=Q[V],W;switch(z.length){case 0:W=U.call(this);break;case 1:W=U.call(this,z[0]);break;case 2:W=U.call(this,z[0],z[1]);break;case 3:W=U.call(this,z[0],z[1],z[2]);break;default:W=U.apply(this,z);break}if(W!==void 0&&typeof W?.then==="function"&&W.then===Promise.prototype.then)w$(this,W,$,z)}return!0};J.emit=q$;J.addListener=function($,z){_(z);var X=this._events;if(!X)X=this._events={__proto__:null},this._eventsCount=0;else if(X.newListener)this.emit("newListener",$,z.listener??z);var Z=X[$];if(!Z)X[$]=[z],this._eventsCount++;else{Z.push(z);var Q=this._maxListeners??w;if(Q>0&&Z.length>Q&&!Z.warned)V$(this,$,Z)}return this};J.on=J.addListener;J.prependListener=function($,z){_(z);var X=this._events;if(!X)X=this._events={__proto__:null},this._eventsCount=0;else if(X.newListener)this.emit("newListener",$,z.listener??z);var Z=X[$];if(!Z)X[$]=[z],this._eventsCount++;else{Z.unshift(z);var Q=this._maxListeners??w;if(Q>0&&Z.length>Q&&!Z.warned)V$(this,$,Z)}return this};function V$($,z,X){X.warned=!0;let Z=Error(`Possible EventEmitter memory leak detected. ${X.length} ${String(z)} listeners added to [${$.constructor.name}]. Use emitter.setMaxListeners() to increase limit`);Z.name="MaxListenersExceededWarning",Z.emitter=$,Z.type=z,Z.count=X.length,console.warn(Z)}function G$($,z,...X){this.removeListener($,z),z.apply(this,X)}J.once=function($,z){_(z);let X=G$.bind(this,$,z);return X.listener=z,this.addListener($,X),this};J.prependOnceListener=function($,z){_(z);let X=G$.bind(this,$,z);return X.listener=z,this.prependListener($,X),this};J.removeListener=function($,z){_(z);var{_events:X}=this;if(!X)return this;var Z=X[$];if(!Z)return this;var Q=Z.length;let V=-1;for(let G=Q-1;G>=0;G--)if(Z[G]===z||Z[G].listener===z){V=G;break}if(V<0)return this;if(V===0)Z.shift();else Z.splice(V,1);if(Z.length===0)delete X[$],this._eventsCount--;return this};J.off=J.removeListener;J.removeAllListeners=function($){var{_events:z}=this;if($&&z){if(z[$])delete z[$],this._eventsCount--}else this._events={__proto__:null};return this};J.listeners=function($){var{_events:z}=this;if(!z)return[];var X=z[$];if(!X)return[];return X.map((Z)=>Z.listener??Z)};J.rawListeners=function($){var{_events:z}=this;if(!z)return[];var X=z[$];if(!X)return[];return X.slice()};J.listenerCount=function($){var{_events:z}=this;if(!z)return 0;return z[$]?.length??0};J.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};J[O]=!1;function M$($,z,X){var Z=X?.signal;if(U$(Z,"options.signal"),Z?.aborted)throw new m(void 0,{cause:Z?.reason});let{resolve:Q,reject:V,promise:G}=$newPromiseCapability(Promise),U=(Y)=>{if($.removeListener(z,W),Z!=null)f(Z,"abort",F);V(Y)},W=(...Y)=>{if(typeof $.removeListener==="function")$.removeListener("error",U);if(Z!=null)f(Z,"abort",F);Q(Y)};if(X$($,z,W,{once:!0}),z!=="error"&&typeof $.once==="function")$.once("error",U);function F(){f($,z,W),f($,"error",U),V(new m(void 0,{cause:Z?.reason}))}if(Z!=null)X$(Z,"abort",F,{once:!0});return G}function _$($,z){return $.listeners(z)}function j$($,...z){d($,"setMaxListeners",0);var X;if(z&&(X=z.length))for(let Z=0;Z<X;Z++)z[Z].setMaxListeners($);else w=$}function R$($,z){return $.listenerCount(z)}function f($,z,X,Z){if(typeof $.removeListener==="function")$.removeListener(z,X);else $.removeEventListener(z,X,Z)}function X$($,z,X,Z){if(typeof $.on==="function")if(Z.once)$.once(z,X);else $.on(z,X);else $.addEventListener(z,X,Z)}class m extends Error{constructor($="The operation was aborted",z=void 0){if(z!==void 0&&typeof z!=="object")throw q("options","Object",z);super($,z);this.code="ABORT_ERR",this.name="AbortError"}}function q($,z,X){let Z=TypeError(`The "${$}" argument must be of type ${z}. Received ${X}`);return Z.code="ERR_INVALID_ARG_TYPE",Z}function T$($,z,X){let Z=RangeError(`The "${$}" argument is out of range. It must be ${z}. Received ${X}`);return Z.code="ERR_OUT_OF_RANGE",Z}function U$($,z){if($!==void 0&&($===null||typeof $!=="object"||!("aborted"in $)))throw q(z,"AbortSignal",$)}function d($,z,X,Z){if(typeof $!=="number")throw q(z,"number",$);if(X!=null&&$<X||Z!=null&&$>Z||(X!=null||Z!=null)&&Number.isNaN($))throw T$(z,`${X!=null?`>= ${X}`:""}${X!=null&&Z!=null?" && ":""}${Z!=null?`<= ${Z}`:""}`,$)}function _($){if(typeof $!=="function")throw TypeError("The listener must be a function")}function H$($,z){if(typeof $!=="boolean")throw q(z,"boolean",$)}function E$($){return $?._maxListeners??w}function b$($,z){if($===void 0)throw q("signal","AbortSignal",$);if(U$($,"signal"),typeof z!=="function")throw q("listener","function",z);let X;if($.aborted)queueMicrotask(()=>z());else $.addEventListener("abort",z,{__proto__:null,once:!0}),X=()=>{$.removeEventListener("abort",z)};return{__proto__:null,[Symbol.dispose](){X?.()}}}Object.defineProperties(N,{captureRejections:{get(){return J[O]},set($){H$($,"EventEmitter.captureRejections"),J[O]=$},enumerable:!0},defaultMaxListeners:{enumerable:!0,get:()=>{return w},set:($)=>{d($,"defaultMaxListeners",0),w=$}},kMaxEventTargetListeners:{value:S$,enumerable:!1,configurable:!1,writable:!1},kMaxEventTargetListenersWarned:{value:C$,enumerable:!1,configurable:!1,writable:!1}});Object.assign(N,{once:M$,getEventListeners:_$,getMaxListeners:E$,setMaxListeners:j$,EventEmitter:N,usingDomains:!1,captureRejectionSymbol:O$,errorMonitor:Z$,addAbortListener:b$,init:N,listenerCount:R$});class k{children;handlers;middlewares;params;paramName;constructor(){this.children={},this.handlers={},this.middlewares=[],this.params={},this.paramName=""}}class j{root;globalMiddlewares;constructor(){this.root=new k,this.globalMiddlewares=[]}pushMiddleware($,z){if(!Array.isArray(z))z=[z];if($==="/"){this.globalMiddlewares.push(...z);return}let X=this.root,Z=$.split("/").filter(Boolean);for(let Q of Z){let V=Q;if(Q.startsWith(":"))V=":";else if(Q.startsWith("*"))X.middlewares.push(...z);if(!X.children[V])X.children[V]=new k;X=X.children[V]}X.middlewares.push(...z)}addMiddleware($,z){return this.pushMiddleware($,z)}insert($,z,X){let Z=this.root;if(z==="/"){Z.handlers[$]=X,Z.params=D;return}let Q=z.split("/").filter(Boolean),V={};for(let G=0;G<Q.length;G++){let U=Q[G],W=U,F="";if(U.startsWith(":"))W=":",F=U.slice(1);if(!Z.children[W])Z.children[W]=new k;if(Z=Z.children[W],F)V[F]=G,Z.paramName=F}Z.params=V,Z.handlers[$]=X}add($,z,X){return this.insert($,z,X)}search($,z){let X=this.root,Z=z.split("/"),Q=this.globalMiddlewares.slice(),V;for(let G=0;G<Z.length;G++){let U=Z[G];if(U.length===0)continue;if(X.children[U])X=X.children[U];else if(X.children[":"]){if(X=X.children[":"],!V)V={};V[X.paramName]=U}else if(X.children["*"]){X=X.children["*"];break}else return{params:V,handler:Q};if(X.middlewares.length>0){let W=X.middlewares;for(let F=0;F<W.length;F++)Q.push(W[F])}}if(X.handlers[$])Q.push(X.handlers[$]);if(X.handlers.ALL)Q.push(X.handlers.ALL);return{params:V,handler:Q}}find($,z){return this.search($,z)}}class o{static create($){switch($){case"t2":return new j;case"trie":return new j;default:return new j}}}class I{static instance;routes;tempRoutes;tempMiddlewares=new Map;router;hasOnReqHook;hasPreHandlerHook;hasPostHandlerHook;hasOnSendHook;hasOnError;hooks;corsConfig;FilterRoutes;filters;filterFunction;hasFilterEnabled;serverInstance;staticFiles;user_jwt_secret;baseApiUrl;enableFileRouter;idleTimeOut;routeNotFoundFunc;prefixApiUrl;compileConfig;#$=!1;emitter;errorFormat;platform="bun";staticPath;staticRequestPath=void 0;get;post;put;patch;delete;any;head;options;propfind;all;constructor($={}){s.forEach((K)=>{this[K.toLocaleLowerCase()]=(T,...W$)=>{return this.addRoute(K,T,W$),this}});let{router:z="t2",routerInstance:X,errorFormat:Z="json",platform:Q="bun",enableFileRouting:V=!1,prefixApiUrl:G="",baseApiUrl:U="",jwtSecret:W,idleTimeOut:F=10,pipelineArchitecture:Y=!1,logger:R,onError:L}=$;if(X)this.router=X;else this.router=o.create(z);if(this.errorFormat=Z,this.platform=Q,!I.instance)I.instance=this;if(Y)this.#$=!0;if(this.errorFormat=Z,this.emitter=new N,this.prefixApiUrl=G??"",this.fetch=this.fetch.bind(this),this.routes={},this.idleTimeOut=F??10,this.enableFileRouter=V??!1,this.baseApiUrl=U||"",this.user_jwt_secret=W||process.env.DIESEL_JWT_SECRET||"default_diesel_secret_for_jwt",this.tempRoutes=new Map,this.corsConfig=null,this.hasOnReqHook=!1,this.hasPreHandlerHook=!1,this.hasPostHandlerHook=!1,this.hasOnSendHook=!1,this.hasOnError=!1,this.hooks={onRequest:[],preHandler:[],postHandler:[],onSend:[],onError:[],onClose:[]},L)this.addHooks("onError",(K,T)=>{console.log("Got an exception:",K),console.log("Request Path:",T)});if(R)this.useLogger({app:this});this.FilterRoutes=[],this.filters=new Set,this.filterFunction=[],this.hasFilterEnabled=!1,this.serverInstance=null,this.staticPath=null,this.staticFiles={},this.routeNotFoundFunc=()=>{},this.compileConfig=null}static router($){if(!this.instance)this.instance=new I;return new Proxy(this.instance,{get(z,X,Z){return(Q,V)=>{let G=V,U="";if(typeof Q==="string")U=Q;else if(typeof Q==="function")G=Q;else if(typeof Q!=="string")U="";let W=$+U;return z[X](W,G)}}})}setupFilter(){return this.hasFilterEnabled=!0,{publicRoutes:(...$)=>{return this.FilterRoutes=$,this.setupFilter()},permitAll:()=>{for(let $ of this?.FilterRoutes){if($.endsWith("/"))$=$.slice(0,-1);this.filters.add($)}return this.setupFilter()},authenticate:($)=>{if($?.length){let z=async(X,Z)=>{let Q=X.path;for(let V of this.filters)if(Q.startsWith(V))return;for(let V of $){let G=await V(X,Z);if(G)return G}};this.router.addMiddleware("/",[z])}},authenticateJwt:($)=>{let z=async(X)=>{let Z=X.path;for(let V of this.filters)if(Z.startsWith(V))return;let Q=l($,this.user_jwt_secret)(X);if(Q)return Q};this.router.addMiddleware("/",z)},authenticateJwtDB:($,z)=>{let X=async(Z)=>{let Q=Z.path;for(let G of this.filters)if(Q.startsWith(G))return;let V=n($,z,this.user_jwt_secret)(Z);if(V)return V};this.router.addMiddleware("/",X)}}}redirect($,z,X){return this.any($,(Z)=>{let Q=Z.params,V=z;if(Q)for(let U in Q)V=V.replace(`:${U}`,Q[U]);let G=Z.url.search;if(G)V+=G;return Z.redirect(V,X)}),this}static($,z){return this.staticPath=$,this.staticRequestPath=z,this}staticHtml($){return this.staticFiles={...this.staticFiles,...$},this}addHooks($,z){if(typeof $!=="string")throw Error("hookName must be a string");if(typeof z!=="function")throw Error("callback must be a instance of function");switch($){case"onRequest":this.hooks.onRequest?.push(z),this.hasOnReqHook=!0;break;case"preHandler":this.hooks.preHandler?.push(z),this.hasPreHandlerHook=!0;break;case"postHandler":this.hooks.postHandler?.push(z),this.hasPostHandlerHook=!0;break;case"onSend":this.hooks.onSend?.push(z),this.hasOnSendHook=!0;break;case"onError":this.hooks.onError?.push(z),this.hasOnError=!0;break;case"onClose":this.hooks.onClose?.push(z);break;default:throw Error(`Unknown hook type: ${$}`)}return this}useLogger($){return i($),this}useAdvancedLogger($){return p($),this}BunRoute($,z,...X){if(!z||typeof z!=="string")throw Error("give a path in string format");let Z=e(this,$.toUpperCase(),z,...X);return this.routes[z]=Z,this}listen($,...z){let X="0.0.0.0",Z=void 0,Q={};for(let G of z)if(typeof G==="string")X=G;else if(typeof G==="function")Z=G;else if(typeof G==="object"&&G!==null)Q=G;let V={port:$,hostname:X,idleTimeOut:this.idleTimeOut,fetch:this.fetch(),static:this.staticFiles};if(this.routes&&Object.keys(this.routes).length>0)V.routes=this.routes;if(Q.cert&&Q.key)V.certFile=Q.cert,V.keyFile=Q.key;return this.serverInstance=Bun?.serve(V),Z&&Z(),this.serverInstance}close($){if(this.serverInstance)this.serverInstance.stop(!0),this.serverInstance=null,$?$():console.log("Server has been stopped");else console.warn("Server is not running.")}cfFetch(){return this.tempRoutes=null,this.tempMiddlewares=null,($,z,X)=>{return this.#z($,void 0,z,X)}}fetch(){if(this.tempRoutes=null,this.tempMiddlewares=null,this.platform==="cf"||this.platform==="cloudflare"){if(this.#$){let $=u(this);return(z,X,Z)=>{return $(z,this,void 0,X,Z).catch(async(Q)=>{return this.handleError(Q,P(z.url),z)})}}return($,z,X)=>{return this.#z($,void 0,z,X)}}if(this.#$){let $=u(this);return(z,X)=>{return $(z,this,X,void 0,void 0).catch(async(Z)=>{return this.handleError(Z,P(z.url),z)})}}return this.#z.bind(this)}async#z($,z,X,Z){let Q=P($.url),V=this.router.find($.method,Q),G=new M($,z,Q,V?.params||D,X,Z);try{if(this.hasOnReqHook)await C("onRequest",this.hooks.onRequest,[G]);if(this.hasPreHandlerHook){let F=await C("preHandler",this.hooks.preHandler,[G]);if(F)return F}let U,W=V?.handler;if(W.length===1){let F=W[0](G);U=S(F)?await F:F}else for(let F=0;F<W.length;F++){let Y=W[F](G);if(U=S(Y)?await Y:Y,U)break}if(this.hasOnSendHook){let F=await C("onSend",this.hooks.onSend,[G,U]);if(F)return F}if(U)return U;return await b(this,G,Q)}catch(U){return this.handleError(U,Q,$)}}async handleError($,z,X){let Q=this.errorFormat,V=await C("onError",this.hooks.onError,[$,z,X]);if(V)return V;if($&&typeof $==="object"&&$.name==="HTTPException"){let W=$;if(console.error(`HTTPException on path: ${z}`,{status:W.status,message:W.message,cause:W.cause,res:W.res,stack:W.stack}),W.res)return W.res;return Q==="json"?Response.json({error:W.message},{status:W.status}):new Response(W.message,{status:W.status})}let G=$ instanceof Error?$.message:"Internal Server Error",U=$ instanceof Error?$.stack:void 0;if(console.error(`Error on path: ${z}`,{message:G,stack:U}),Q==="json"){let W={error:G,...!1,path:z};return Response.json(W,{status:500,headers:{"Content-Type":"application/json"}})}else{let W=`Error: ${G}`;return new Response(W,{headers:{"Content-Type":"text/plain"},status:500})}}mount($,z){let X=$.endsWith("/*")?$.slice(0,-1):$,Z=X==="/"?0:X.length;this.any($,(Q)=>{let V=new URL(Q.req.url);V.pathname=V.pathname.slice(Z)||"/";let G=new Request(V,Q.req);return z(G,Q.server,Q.env,Q.executionContext)})}route($,z){$=$&&$.length>0?$:z?.prefixApiUrl;let X=z?.tempRoutes??new Map;for(let[Z,Q]of X.entries()){let V=Z.replace(/::\w+$/,""),G=`${$}${V}`,U=Q.handlers.slice(0,-1);this.router.addMiddleware(G,U);let W=Q.handlers[Q.handlers.length-1],F=Q.method;try{this.router.add(F,G,W)}catch(Y){console.error(`Error inserting ${G}:`,Y)}}for(let[Z,Q]of z?.tempMiddlewares?.entries()){let V=Z==="/"?$||"/":`${$}${Z}`;this.router.addMiddleware(V,Q)}return z=null,this}register($){let z=new I,X=()=>{};return this}sub($,z){let X=z.fetch();return this.mount($,X)}addMiddlewareInRouter($,z){this.router.addMiddleware($,z)}addRoute($,z,X){if(typeof z!=="string")throw Error(`Error in ${X[X.length-1]}: Path must be a string. Received: ${typeof z}`);if(typeof $!=="string")throw Error(`Error in addRoute: Method must be a string. Received: ${typeof $}`);this.tempRoutes?.set(z+"::"+$,{method:$,handlers:X});let Z=X.slice(0,-1),Q=X[X.length-1];if(Z.length>0)this.addMiddlewareInRouter(z,Z);try{if($==="ANY"){let V=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD","PROPFIND"];for(let G of V)try{this.router.add(G,z,Q)}catch(U){}}else this.router.add($,z,Q)}catch(V){console.error(`Error inserting ${z}:`,V)}}use($,...z){if(typeof $==="string"){let X=$==="/"?"/":$;if(!this.tempMiddlewares?.has(X))this.tempMiddlewares?.set(X,[]);this.tempMiddlewares?.get(X).push(...z),this.router.addMiddleware(X,z)}else if(typeof $==="function"){let X=[$,...z];if(!this.tempMiddlewares?.has("/"))this.tempMiddlewares?.set("/",[]);this.tempMiddlewares?.get("/").push(...z),this.router.addMiddleware("/",X)}return this}routeNotFound($){return this.routeNotFoundFunc=$,this}onMethod($,z,...X){let Z=Array.isArray($)?$:[$];for(let Q of Z){let V=Q.toLowerCase();if(V in this)this[V](z,...X);else this.addRoute(Q.toUpperCase(),z,X)}return this}on($,z){return this.emitter.on($,z),this}emit($,...z){return this.emitter.emit($,...z),this}}export{I as default};
@@ -1,3 +1,3 @@
1
- import { DieselT } from "./types";
2
- export declare const buildRequestPipeline: (diesel: DieselT) => any;
3
- export declare const BunRequestPipline: (diesel: DieselT, method: string, path: string, ...handlersOrResponse: Function[]) => any;
1
+ import { Diesel } from "./types";
2
+ export declare const buildRequestPipeline: (diesel: Diesel) => any;
3
+ export declare const BunRequestPipline: (diesel: Diesel, method: string, path: string, ...handlersOrResponse: Function[]) => any;