veloce-ts 0.4.13 → 0.4.14
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/dist/cjs/src/index.js +3 -3
- package/dist/cjs/src/index.js.map +4 -4
- package/dist/cjs/src/plugins/index.js +2 -2
- package/dist/cjs/src/plugins/index.js.map +3 -3
- package/dist/cjs/src/testing/index.js +22 -22
- package/dist/cjs/src/testing/index.js.map +3 -3
- package/dist/cjs/src/websocket/index.js +2 -2
- package/dist/cjs/src/websocket/index.js.map +3 -3
- package/dist/esm/src/index.js +3 -3
- package/dist/esm/src/index.js.map +4 -4
- package/dist/esm/src/plugins/index.js +2 -2
- package/dist/esm/src/plugins/index.js.map +3 -3
- package/dist/esm/src/testing/index.js +21 -21
- package/dist/esm/src/testing/index.js.map +3 -3
- package/dist/esm/src/websocket/index.js +2 -2
- package/dist/esm/src/websocket/index.js.map +3 -3
- package/dist/types/core/application.d.ts.map +1 -1
- package/dist/types/websocket/connection.d.ts +6 -0
- package/dist/types/websocket/connection.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/src/index.js
CHANGED
|
@@ -75,7 +75,7 @@ and limitations under the License.
|
|
|
75
75
|
};
|
|
76
76
|
</script>
|
|
77
77
|
</body>
|
|
78
|
-
</html>`}}class Q${manager;id;_ws;constructor($,J,Q){this.manager=J;this._ws=$,this.id=Q||crypto.randomUUID()}send($){if(!this._ws||this._ws.readyState!==WebSocket.OPEN)return;let J=typeof $==="string"?$:JSON.stringify($);this._ws.send(J)}broadcast($,J){this.manager.broadcast($,J)}join($){this.manager.joinRoom(this.id,$)}leave($){this.manager.leaveRoom(this.id,$)}close($,J){if(this._ws&&this._ws.readyState===WebSocket.OPEN)this._ws.close($,J)}get native(){return this._ws}get isOpen(){return this._ws!==null&&this._ws.readyState===WebSocket.OPEN}_markClosed(){this._ws=null}}class m${connections=new Map;rooms=new Map;connectionsByRoom=new Map;handleConnection($,J){let Q=new Q$($,this);if(this.connections.set(Q.id,Q),J.onConnect)this.executeHandler(J,J.onConnect,Q);return $.addEventListener("message",async(X)=>{await this.handleMessage(X,Q,J)}),$.addEventListener("close",()=>{this.handleDisconnect(Q,J)}),$.addEventListener("error",(X)=>{console.error(`WebSocket error for connection ${Q.id}:`,X)}),Q}handleConnectionBun($,J){let Q=new Q$($,this);if(this.connections.set(Q.id,Q),J.onConnect)this.executeHandler(J,J.onConnect,Q);return Q}async handleMessageBun($,J,Q){let Y={data:typeof $==="string"?$:$.toString()};await this.handleMessage(Y,J,Q)}handleDisconnectBun($,J){this.handleDisconnect($,J)}async handleMessage($,J,Q){if(!Q.onMessage)return;let X;try{if(X=typeof $.data==="string"?JSON.parse($.data):$.data,Q.messageSchema)X=await Q.messageSchema.parseAsync(X);await this.executeHandler(Q,Q.onMessage,J,X)}catch(Y){J.send({error:"Invalid message format",details:Y instanceof Error?Y.message:"Unknown error"})}}handleDisconnect($,J){if(Array.from(this.connectionsByRoom.entries()).forEach(([Q,X])=>{if(X.delete($),X.size===0)this.connectionsByRoom.delete(Q)}),Array.from(this.rooms.entries()).forEach(([Q,X])=>{if(X.delete($.id),X.size===0)this.rooms.delete(Q)}),this.connections.delete($.id),$._markClosed(),J.onDisconnect)this.executeHandler(J,J.onDisconnect,$)}async executeHandler($,J,Q,X){try{let Y=$.instance??new $.target,W=Y[J];if(typeof W==="function")if(X!==void 0)await W.call(Y,Q,X);else await W.call(Y,Q)}catch(Y){console.error(`Error executing WebSocket handler ${J}:`,Y)}}broadcast($,J){let Q=J?this.getConnectionsInRoom(J):Array.from(this.connections.values()),X=typeof $==="string"?$:JSON.stringify($);for(let Y of Q)if(Y.isOpen)Y.send(X)}joinRoom($,J){let Q=this.connections.get($);if(!Q)return;if(!this.rooms.has(J))this.rooms.set(J,new Set);if(this.rooms.get(J).add($),!this.connectionsByRoom.has(J))this.connectionsByRoom.set(J,new Set);this.connectionsByRoom.get(J).add(Q)}leaveRoom($,J){let Q=this.connections.get($);if(!Q)return;let X=this.rooms.get(J);if(X){if(X.delete($),X.size===0)this.rooms.delete(J)}let Y=this.connectionsByRoom.get(J);if(Y){if(Y.delete(Q),Y.size===0)this.connectionsByRoom.delete(J)}}getConnectionsInRoom($){let J=this.connectionsByRoom.get($);return J?Array.from(J):[]}getConnection($){return this.connections.get($)}getAllConnections(){return Array.from(this.connections.values())}getConnectionCount(){return this.connections.size}getRooms(){return Array.from(this.rooms.keys())}getRoomSize($){return this.rooms.get($)?.size||0}}class l${name="websocket";version="1.0.0";manager;constructor(){this.manager=new m$}async install($){let Q=$.getMetadata().getWebSockets(),X=$.getContainer();for(let Y of Q)Y.instance=await X.resolve(Y.target),this.registerWebSocket($,Y)}registerWebSocket($,J){$.getHono().get(J.path,async(X)=>{if(X.req.header("upgrade")?.toLowerCase()!=="websocket")return X.text("Expected WebSocket upgrade",426);return this.handleUpgrade(X,J)})}handleUpgrade($,J){if(typeof Bun<"u")return this.handleBunUpgrade($,J);else if(typeof globalThis.Deno<"u")return this.handleDenoUpgrade($,J);else return this.handleNodeUpgrade($,J)}handleBunUpgrade($,J){let Q=$.env;if(!Q?.upgrade)return $.text("WebSocket upgrade not supported in this environment",501);if(!Q.upgrade($.req.raw,{data:{manager:this.manager,metadata:J,requestUrl:$.req.url}}))return $.text("WebSocket upgrade failed",500);return}handleDenoUpgrade($,J){let Q=globalThis.Deno,{socket:X,response:Y}=Q.upgradeWebSocket($.req.raw);return X.onopen=()=>{this.manager.handleConnection(X,J)},Y}handleNodeUpgrade($,J){return $.text("WebSocket support requires Bun or Deno runtime",501)}getManager(){return this.manager}broadcast($,J){this.manager.broadcast($,J)}getConnectionCount(){return this.manager.getConnectionCount()}getRooms(){return this.manager.getRooms()}}var _M=w1(X$(),1),S9=Symbol("graphql:resolver"),c$=Symbol("graphql:field"),x2=Symbol("graphql:args");function ZQ($){return(J)=>{let Q={target:J,name:$||J.name};Reflect.defineMetadata(S9,Q,J)}}function SQ($,J){return C9("query",$,J)}function CQ($,J){return C9("mutation",$,J)}function MQ($,J){return C9("subscription",$,J)}function C9($,J,Q){return(X,Y)=>{let W={target:X.constructor,propertyKey:Y,type:$,name:J||Y,description:Q?.description,deprecated:Q?.deprecated,deprecationReason:Q?.deprecationReason},H=Reflect.getMetadata(c$,X.constructor)||[];H.push(W),Reflect.defineMetadata(c$,H,X.constructor),Reflect.defineMetadata(c$,W,X,Y)}}function PQ($,J,Q){return(X,Y,W)=>{if(!Y)return;let H=Reflect.getMetadata(x2,X,Y)||[],G={index:W,name:$,schema:J,description:Q?.description,defaultValue:Q?.defaultValue,nullable:Q?.nullable};H[W]=G,Reflect.defineMetadata(x2,H,X,Y)}}function KQ(){return($,J,Q)=>{if(!J)return;let X=Reflect.getMetadata(x2,$,J)||[],Y={index:Q,name:"__context__",nullable:!1};X[Q]=Y,Reflect.defineMetadata(x2,X,$,J)}}function IQ($){return Reflect.getMetadata(S9,$)}function TQ($){return Reflect.getMetadata(c$,$)||[]}function bQ($,J){return Reflect.getMetadata(c$,$,J)}function v2($,J){return Reflect.getMetadata(x2,$,J)||[]}function fQ($){return Reflect.hasMetadata(S9,$)}function kQ($,J){return Reflect.hasMetadata(c$,$,J)}function J1($){let J=$._def.typeName;if(J==="ZodString")return"String";if(J==="ZodNumber"){if($._def.checks?.some((X)=>X.kind==="int"))return"Int";return"Float"}if(J==="ZodBoolean")return"Boolean";if(J==="ZodArray")return`[${J1($._def.type)}]`;if(J==="ZodObject")return"JSON";if(J==="ZodOptional")return J1($._def.innerType);if(J==="ZodNullable")return J1($._def.innerType);if(J==="ZodDefault")return J1($._def.innerType);if(J==="ZodEnum")return"String";if(J==="ZodUnion"){let Q=$._def.options;if(Q&&Q.length>0)return J1(Q[0])}if(J==="ZodLiteral"){let Q=$._def.value;if(typeof Q==="string")return"String";if(typeof Q==="number")return"Float";if(typeof Q==="boolean")return"Boolean"}if(J==="ZodDate")return"String";return"String"}function Y$($){let J=$._def.typeName;if(J==="ZodOptional"||J==="ZodNullable")return!0;if(J==="ZodDefault")return Y$($._def.innerType);return!1}function o6($){let J=$._def.typeName;if(J==="ZodDefault")return $._def.defaultValue();if(J==="ZodOptional"||J==="ZodNullable"){let Q=$._def.innerType;if(Q)return o6(Q)}return}function xQ($,J){if(J._def.typeName!=="ZodObject")throw Error("Schema must be a ZodObject");let X=J._def.shape(),Y=[];for(let[W,H]of Object.entries(X)){let G=H,V=J1(G),q=Y$(G)?V:`${V}!`;Y.push(` ${W}: ${q}`)}return`type ${$} {
|
|
78
|
+
</html>`}}class Q${manager;id;_ws;constructor($,J,Q){this.manager=J;this._ws=$,this.id=Q||crypto.randomUUID()}send($){if(!this._ws||this._ws.readyState!==WebSocket.OPEN)return;let J=typeof $==="string"?$:JSON.stringify($);this._ws.send(J)}broadcast($,J){this.manager.broadcast($,J)}join($){this.manager.joinRoom(this.id,$)}leave($){this.manager.leaveRoom(this.id,$)}close($,J){if(this._ws&&this._ws.readyState===WebSocket.OPEN)this._ws.close($,J)}get native(){return this._ws}get requestUrl(){if(!this._ws)return"";let $=this._ws;return $?.data?.requestUrl??$?.url??""}get isOpen(){return this._ws!==null&&this._ws.readyState===WebSocket.OPEN}_markClosed(){this._ws=null}}class m${connections=new Map;rooms=new Map;connectionsByRoom=new Map;handleConnection($,J){let Q=new Q$($,this);if(this.connections.set(Q.id,Q),J.onConnect)this.executeHandler(J,J.onConnect,Q);return $.addEventListener("message",async(X)=>{await this.handleMessage(X,Q,J)}),$.addEventListener("close",()=>{this.handleDisconnect(Q,J)}),$.addEventListener("error",(X)=>{console.error(`WebSocket error for connection ${Q.id}:`,X)}),Q}handleConnectionBun($,J){let Q=new Q$($,this);if(this.connections.set(Q.id,Q),J.onConnect)this.executeHandler(J,J.onConnect,Q);return Q}async handleMessageBun($,J,Q){let Y={data:typeof $==="string"?$:$.toString()};await this.handleMessage(Y,J,Q)}handleDisconnectBun($,J){this.handleDisconnect($,J)}async handleMessage($,J,Q){if(!Q.onMessage)return;let X;try{if(X=typeof $.data==="string"?JSON.parse($.data):$.data,Q.messageSchema)X=await Q.messageSchema.parseAsync(X);await this.executeHandler(Q,Q.onMessage,J,X)}catch(Y){J.send({error:"Invalid message format",details:Y instanceof Error?Y.message:"Unknown error"})}}handleDisconnect($,J){if(Array.from(this.connectionsByRoom.entries()).forEach(([Q,X])=>{if(X.delete($),X.size===0)this.connectionsByRoom.delete(Q)}),Array.from(this.rooms.entries()).forEach(([Q,X])=>{if(X.delete($.id),X.size===0)this.rooms.delete(Q)}),this.connections.delete($.id),$._markClosed(),J.onDisconnect)this.executeHandler(J,J.onDisconnect,$)}async executeHandler($,J,Q,X){try{let Y=$.instance??new $.target,W=Y[J];if(typeof W==="function")if(X!==void 0)await W.call(Y,Q,X);else await W.call(Y,Q)}catch(Y){console.error(`Error executing WebSocket handler ${J}:`,Y)}}broadcast($,J){let Q=J?this.getConnectionsInRoom(J):Array.from(this.connections.values()),X=typeof $==="string"?$:JSON.stringify($);for(let Y of Q)if(Y.isOpen)Y.send(X)}joinRoom($,J){let Q=this.connections.get($);if(!Q)return;if(!this.rooms.has(J))this.rooms.set(J,new Set);if(this.rooms.get(J).add($),!this.connectionsByRoom.has(J))this.connectionsByRoom.set(J,new Set);this.connectionsByRoom.get(J).add(Q)}leaveRoom($,J){let Q=this.connections.get($);if(!Q)return;let X=this.rooms.get(J);if(X){if(X.delete($),X.size===0)this.rooms.delete(J)}let Y=this.connectionsByRoom.get(J);if(Y){if(Y.delete(Q),Y.size===0)this.connectionsByRoom.delete(J)}}getConnectionsInRoom($){let J=this.connectionsByRoom.get($);return J?Array.from(J):[]}getConnection($){return this.connections.get($)}getAllConnections(){return Array.from(this.connections.values())}getConnectionCount(){return this.connections.size}getRooms(){return Array.from(this.rooms.keys())}getRoomSize($){return this.rooms.get($)?.size||0}}class l${name="websocket";version="1.0.0";manager;constructor(){this.manager=new m$}async install($){let Q=$.getMetadata().getWebSockets(),X=$.getContainer();for(let Y of Q)Y.instance=await X.resolve(Y.target),this.registerWebSocket($,Y)}registerWebSocket($,J){$.getHono().get(J.path,async(X)=>{if(X.req.header("upgrade")?.toLowerCase()!=="websocket")return X.text("Expected WebSocket upgrade",426);return this.handleUpgrade(X,J)})}handleUpgrade($,J){if(typeof Bun<"u")return this.handleBunUpgrade($,J);else if(typeof globalThis.Deno<"u")return this.handleDenoUpgrade($,J);else return this.handleNodeUpgrade($,J)}handleBunUpgrade($,J){let Q=$.env;if(!Q?.upgrade)return $.text("WebSocket upgrade not supported in this environment",501);if(!Q.upgrade($.req.raw,{data:{manager:this.manager,metadata:J,requestUrl:$.req.url}}))return $.text("WebSocket upgrade failed",500);return}handleDenoUpgrade($,J){let Q=globalThis.Deno,{socket:X,response:Y}=Q.upgradeWebSocket($.req.raw);return X.onopen=()=>{this.manager.handleConnection(X,J)},Y}handleNodeUpgrade($,J){return $.text("WebSocket support requires Bun or Deno runtime",501)}getManager(){return this.manager}broadcast($,J){this.manager.broadcast($,J)}getConnectionCount(){return this.manager.getConnectionCount()}getRooms(){return this.manager.getRooms()}}var _M=w1(X$(),1),S9=Symbol("graphql:resolver"),c$=Symbol("graphql:field"),x2=Symbol("graphql:args");function ZQ($){return(J)=>{let Q={target:J,name:$||J.name};Reflect.defineMetadata(S9,Q,J)}}function SQ($,J){return C9("query",$,J)}function CQ($,J){return C9("mutation",$,J)}function MQ($,J){return C9("subscription",$,J)}function C9($,J,Q){return(X,Y)=>{let W={target:X.constructor,propertyKey:Y,type:$,name:J||Y,description:Q?.description,deprecated:Q?.deprecated,deprecationReason:Q?.deprecationReason},H=Reflect.getMetadata(c$,X.constructor)||[];H.push(W),Reflect.defineMetadata(c$,H,X.constructor),Reflect.defineMetadata(c$,W,X,Y)}}function PQ($,J,Q){return(X,Y,W)=>{if(!Y)return;let H=Reflect.getMetadata(x2,X,Y)||[],G={index:W,name:$,schema:J,description:Q?.description,defaultValue:Q?.defaultValue,nullable:Q?.nullable};H[W]=G,Reflect.defineMetadata(x2,H,X,Y)}}function KQ(){return($,J,Q)=>{if(!J)return;let X=Reflect.getMetadata(x2,$,J)||[],Y={index:Q,name:"__context__",nullable:!1};X[Q]=Y,Reflect.defineMetadata(x2,X,$,J)}}function IQ($){return Reflect.getMetadata(S9,$)}function TQ($){return Reflect.getMetadata(c$,$)||[]}function bQ($,J){return Reflect.getMetadata(c$,$,J)}function v2($,J){return Reflect.getMetadata(x2,$,J)||[]}function fQ($){return Reflect.hasMetadata(S9,$)}function kQ($,J){return Reflect.hasMetadata(c$,$,J)}function J1($){let J=$._def.typeName;if(J==="ZodString")return"String";if(J==="ZodNumber"){if($._def.checks?.some((X)=>X.kind==="int"))return"Int";return"Float"}if(J==="ZodBoolean")return"Boolean";if(J==="ZodArray")return`[${J1($._def.type)}]`;if(J==="ZodObject")return"JSON";if(J==="ZodOptional")return J1($._def.innerType);if(J==="ZodNullable")return J1($._def.innerType);if(J==="ZodDefault")return J1($._def.innerType);if(J==="ZodEnum")return"String";if(J==="ZodUnion"){let Q=$._def.options;if(Q&&Q.length>0)return J1(Q[0])}if(J==="ZodLiteral"){let Q=$._def.value;if(typeof Q==="string")return"String";if(typeof Q==="number")return"Float";if(typeof Q==="boolean")return"Boolean"}if(J==="ZodDate")return"String";return"String"}function Y$($){let J=$._def.typeName;if(J==="ZodOptional"||J==="ZodNullable")return!0;if(J==="ZodDefault")return Y$($._def.innerType);return!1}function o6($){let J=$._def.typeName;if(J==="ZodDefault")return $._def.defaultValue();if(J==="ZodOptional"||J==="ZodNullable"){let Q=$._def.innerType;if(Q)return o6(Q)}return}function xQ($,J){if(J._def.typeName!=="ZodObject")throw Error("Schema must be a ZodObject");let X=J._def.shape(),Y=[];for(let[W,H]of Object.entries(X)){let G=H,V=J1(G),q=Y$(G)?V:`${V}!`;Y.push(` ${W}: ${q}`)}return`type ${$} {
|
|
79
79
|
${Y.join(`
|
|
80
80
|
`)}
|
|
81
81
|
}`}function vQ($,J){if(J._def.typeName!=="ZodObject")throw Error("Schema must be a ZodObject");let X=J._def.shape(),Y=[];for(let[W,H]of Object.entries(X)){let G=H,V=J1(G),U=Y$(G),q=o6(G),_=U?V:`${V}!`;if(q!==void 0){let F=JSON.stringify(q);_+=` = ${F}`}Y.push(` ${W}: ${_}`)}return`input ${$} {
|
|
@@ -150,7 +150,7 @@ Body: ${Q.text}`);let X=Q.body,Y=X?.tokens?.accessToken??X?.accessToken??X?.toke
|
|
|
150
150
|
Body: ${Q.text}`);return this.defaultHeaders.Authorization=`Bearer ${Y}`,Y}async registerAndLogin($,J={}){let Q=J.register??"/auth/register",X=J.login??"/auth/login",Y=await this.post(Q,{json:$});if(Y.status>=400&&Y.status!==409)throw Error(`registerAndLogin: registration failed — HTTP ${Y.status}.
|
|
151
151
|
Body: ${Y.text}`);let W={};if($.username)W.username=$.username;if($.email)W.email=$.email;return W.password=$.password,this.loginAs(W,X)}clearAuth(){return delete this.defaultHeaders.Authorization,this}async get($,J){return this.request("GET",$,J)}async post($,J){return this.request("POST",$,J)}async put($,J){return this.request("PUT",$,J)}async patch($,J){return this.request("PATCH",$,J)}async delete($,J){return this.request("DELETE",$,J)}async request($,J,Q){let X=this._buildUrl(J,Q?.query),Y={method:$,headers:this._buildHeaders(Q)};if(Q?.body!==void 0)Y.body=Q.body;else if(Q?.json!==void 0)Y.body=JSON.stringify(Q.json);let W=await this.hono.request(X,Y),H=await W.text(),G;try{G=JSON.parse(H)}catch{G=H}return new m2({status:W.status,headers:W.headers,body:G,text:H,ok:W.ok})}_buildUrl($,J){if(!J||Object.keys(J).length===0)return $;return`${$}?${new URLSearchParams(J).toString()}`}_buildHeaders($){let J={...this.defaultHeaders,...$?.headers};if($?.json!==void 0&&!J["Content-Type"])J["Content-Type"]="application/json";return J}_clone(){let $=Object.create(H$.prototype);return $.hono=this.hono,$.defaultHeaders={...this.defaultHeaders},$}}xX();class s2{singletons=new Map;requestScoped=new WeakMap;providers=new Map;resolutionStack=new Set;providerNameCache=new WeakMap;stats={singletonHits:0,singletonMisses:0,requestHits:0,requestMisses:0,transientCreations:0};register($,J){this.providers.set($,J||{scope:"transient"})}async resolve($,J){let Q=this.providers.get($)||{scope:J?.scope||"transient"},X=J?.scope||Q.scope||"transient";if(X==="singleton"){if(this.singletons.has($))return this.stats.singletonHits++,this.singletons.get($);if(this.stats.singletonMisses++,this.resolutionStack.has($))throw Error(`Circular dependency detected: ${this.buildCircularDependencyMessage($)}`);this.resolutionStack.add($);try{let Y=await this.create($,Q,J?.context);return this.singletons.set($,Y),Y}finally{this.resolutionStack.delete($)}}if(X==="request"&&!J?.context)throw Error(`Cannot resolve request-scoped provider "${this.getProviderName($)}" without a request context. Pass { context } in the resolve options.`);if(X==="request"&&J?.context){let Y=this.requestScoped.get(J.context);if(Y?.has($))return this.stats.requestHits++,Y.get($);if(this.stats.requestMisses++,!Y)Y=new Map,this.requestScoped.set(J.context,Y);if(this.resolutionStack.has($))throw Error(`Circular dependency detected: ${this.buildCircularDependencyMessage($)}`);this.resolutionStack.add($);try{let W=await this.create($,Q,J.context);return Y.set($,W),W}finally{this.resolutionStack.delete($)}}if(this.stats.transientCreations++,this.resolutionStack.has($))throw Error(`Circular dependency detected: ${this.buildCircularDependencyMessage($)}`);this.resolutionStack.add($);try{return await this.create($,Q,J?.context)}finally{this.resolutionStack.delete($)}}buildCircularDependencyMessage($){let J=Array.from(this.resolutionStack),Q=this.getProviderName($);return J.map((Y)=>this.getProviderName(Y)).join(" -> ")+" -> "+Q}async create($,J,Q){if(J.factory)return J.factory();if(typeof $==="function")if($.prototype&&$.prototype.constructor===$){let X=S.getDependencyMetadata($.prototype,"constructor"),Y;if(X&&X.length>0){let W=[];for(let H of X){if(!H)continue;W[H.index]=await this.resolve(H.provider,{scope:H.scope,context:Q})}Y=new $(...W)}else Y=new $;return Y}else{let X=$();return X instanceof Promise?await X:X}throw Error("Invalid provider type")}async resolveNestedDependencies($,J){}getProviderName($){if(typeof $==="string")return $;else if(typeof $==="symbol")return $.toString();let J=this.providerNameCache.get($);if(J)return J;let Q;if(typeof $==="function")if($.name)Q=$.name;else Q=$.toString().substring(0,50);else Q=String($);if(typeof $==="object"||typeof $==="function")this.providerNameCache.set($,Q);return Q}clear(){this.singletons.clear(),this.providers.clear(),this.resolutionStack.clear(),this.providerNameCache=new WeakMap,this.resetStats()}clearRequestScope($){this.requestScoped.delete($)}getStats(){let $=this.stats.singletonHits+this.stats.singletonMisses,J=$>0?this.stats.singletonHits/$*100:0,Q=this.stats.requestHits+this.stats.requestMisses,X=Q>0?this.stats.requestHits/Q*100:0;return{singletonHits:this.stats.singletonHits,singletonMisses:this.stats.singletonMisses,singletonHitRate:Math.round(J*100)/100,requestHits:this.stats.requestHits,requestMisses:this.stats.requestMisses,requestHitRate:Math.round(X*100)/100,transientCreations:this.stats.transientCreations}}resetStats(){this.stats={singletonHits:0,singletonMisses:0,requestHits:0,requestMisses:0,transientCreations:0}}}V$();var hX=/^[\w!#$%&'*.^`|~+-]+$/,Ez=/^[ !#-:<-[\]-~]*$/,vX=($)=>{let J=0,Q=$.length;while(J<Q){let X=$.charCodeAt(J);if(X!==32&&X!==9)break;J++}while(Q>J){let X=$.charCodeAt(Q-1);if(X!==32&&X!==9)break;Q--}return J===0&&Q===$.length?$:$.slice(J,Q)},H5=($,J)=>{if(J&&$.indexOf(J)===-1)return{};let Q=$.split(";"),X={};for(let Y of Q){let W=Y.indexOf("=");if(W===-1)continue;let H=vX(Y.substring(0,W));if(J&&J!==H||!hX.test(H))continue;let G=vX(Y.substring(W+1));if(G.startsWith('"')&&G.endsWith('"'))G=G.slice(1,-1);if(Ez.test(G)){if(X[H]=G.indexOf("%")!==-1?s$(G,l2):G,J)break}}return X};var Lz=($,J,Q={})=>{if(!hX.test($))throw Error("Invalid cookie name");let X=`${$}=${J}`;if($.startsWith("__Secure-")&&!Q.secure)throw Error("__Secure- Cookie must have Secure attributes");if($.startsWith("__Host-")){if(!Q.secure)throw Error("__Host- Cookie must have Secure attributes");if(Q.path!=="/")throw Error('__Host- Cookie must have Path attributes with "/"');if(Q.domain)throw Error("__Host- Cookie must not have Domain attributes")}for(let Y of["domain","path"])if(Q[Y]&&/[;\r\n]/.test(Q[Y]))throw Error(`${Y} must not contain ";", "\\r", or "\\n"`);if(Q&&typeof Q.maxAge==="number"&&Q.maxAge>=0){if(Q.maxAge>34560000)throw Error("Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.");X+=`; Max-Age=${Q.maxAge|0}`}if(Q.domain&&Q.prefix!=="host")X+=`; Domain=${Q.domain}`;if(Q.path)X+=`; Path=${Q.path}`;if(Q.expires){if(Q.expires.getTime()-Date.now()>34560000000)throw Error("Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.");X+=`; Expires=${Q.expires.toUTCString()}`}if(Q.httpOnly)X+="; HttpOnly";if(Q.secure)X+="; Secure";if(Q.sameSite)X+=`; SameSite=${Q.sameSite.charAt(0).toUpperCase()+Q.sameSite.slice(1)}`;if(Q.priority)X+=`; Priority=${Q.priority.charAt(0).toUpperCase()+Q.priority.slice(1)}`;if(Q.partitioned){if(!Q.secure)throw Error("Partitioned Cookie must have Secure attributes");X+="; Partitioned"}return X},H4=($,J,Q)=>{return J=encodeURIComponent(J),Lz($,J,Q)};var G4=($,J,Q)=>{let X=$.req.raw.headers.get("Cookie");if(typeof J==="string"){if(!X)return;let W=J;if(Q==="secure")W="__Secure-"+J;else if(Q==="host")W="__Host-"+J;return H5(X,W)[W]}if(!X)return{};return H5(X)};var Oz=($,J,Q)=>{let X;if(Q?.prefix==="secure")X=H4("__Secure-"+$,J,{path:"/",...Q,secure:!0});else if(Q?.prefix==="host")X=H4("__Host-"+$,J,{...Q,path:"/",secure:!0,domain:void 0});else X=H4($,J,{path:"/",...Q});return X},V4=($,J,Q,X)=>{let Y=Oz(J,Q,X);$.header("Set-Cookie",Y,{append:!0})};class G5{static json($,J=200,Q){return new U4($,J,Q)}static html($,J=200){return new q4($,J)}static file($,J){return new D4($,J)}static stream($,J){return new B4($,J)}static redirect($,J=302){return new _4($,J)}}class U4{data;status;headers;constructor($,J=200,Q={}){this.data=$;this.status=J;this.headers=Q}toHonoResponse($){return $.json(this.data,this.status,this.headers)}}class q4{content;status;constructor($,J=200){this.content=$;this.status=J}toHonoResponse($){return $.html(this.content,this.status)}}class _4{url;status;constructor($,J=302){this.url=$;this.status=J}toHonoResponse($){return $.redirect(this.url,this.status)}}class D4{path;options;constructor($,J){this.path=$;this.options=J}async toHonoResponse($){try{let J=typeof Bun<"u"?Bun.file(this.path):await this.readFileNode(this.path),X={"Content-Type":this.options?.contentType||this.guessContentType(this.path)};if(this.options?.download||this.options?.filename){let W=(this.options?.filename||this.path.split("/").pop()||"download").replace(/[/\\]/g,"").replace(/["]/g,"'").replace(/[\r\n]/g,""),H=this.options?.download?"attachment":"inline";X["Content-Disposition"]=`${H}; filename="${W}"`}if(typeof Bun<"u"&&J instanceof Blob)return $.body(J,200,X);else return $.body(J,200,X)}catch(J){return $.json({error:"File not found",message:J instanceof Error?J.message:"Unknown error"},404)}}async readFileNode($){throw Error("File reading in Node.js requires fs module - use Bun runtime or implement adapter")}guessContentType($){let J=$.split(".").pop()?.toLowerCase();return{html:"text/html",css:"text/css",js:"application/javascript",json:"application/json",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml",pdf:"application/pdf",txt:"text/plain",xml:"application/xml"}[J||""]||"application/octet-stream"}}class B4{stream;options;constructor($,J){this.stream=$;this.options=J}toHonoResponse($){let J={"Content-Type":this.options?.contentType||"application/octet-stream",...this.options?.headers};return $.body(this.stream,200,J)}}class F4{static serialize($,J){if(J===null||J===void 0)return $.body(null,204);if(typeof globalThis.Response<"u"&&J instanceof globalThis.Response)return J;if(J instanceof G5)return J;if(J instanceof U4)return J.toHonoResponse($);if(J instanceof q4)return J.toHonoResponse($);if(J instanceof D4)return J.toHonoResponse($);if(J instanceof B4)return J.toHonoResponse($);if(J instanceof _4)return J.toHonoResponse($);if(J&&typeof J.toHonoResponse==="function")return J.toHonoResponse($);return $.json(J)}}class M1{static cache=new Map;static snapshotCache=new Map;static clearCache(){this.cache.clear(),this.snapshotCache.clear()}static snapshot($){let J=$.handler;return JSON.stringify({method:$.method,path:$.path,params:$.parameters?.map((Q)=>({i:Q.index,t:Q.type,n:Q.name})),deps:$.dependencies?.map((Q)=>({i:Q.index})),handlerId:J?M1.handlerIds.get(J)??M1.assignHandlerId(J):null})}static handlerIds=new WeakMap;static nextHandlerId=0;static assignHandlerId($){let J=++M1.nextHandlerId;return M1.handlerIds.set($,J),J}static compile($){let J=`${$.target?.name??"anon"}:${$.propertyKey}`,Q=this.snapshot($),X=this.cache.get(J);if(X&&this.snapshotCache.get(J)===Q)return X;let Y=this.compilePathRegex($.path),W=this.resolveParameterOrder($.parameters),H=this.resolveDependencyOrder($.dependencies),G=this.calculateMaxArgumentIndex($.parameters,$.dependencies),V=this.computeParameterFlags($.parameters,$.dependencies),U={...$,pathRegex:Y,parameterOrder:W,dependencyOrder:H,maxArgumentIndex:G,...V};return this.cache.set(J,U),this.snapshotCache.set(J,Q),U}static compilePathRegex($){let J=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return J=J.replace(/\\\{([^}]+)\\\}/g,"(?<$1>[^/]+)"),J=J.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g,"(?<$1>[^/]+)"),J=`^${J}$`,new RegExp(J)}static resolveParameterOrder($){if(!$||$.length===0)return[];return $.map((J)=>J.index).filter((J)=>J!==void 0).sort((J,Q)=>J-Q)}static resolveDependencyOrder($){if(!$||$.length===0)return[];return $.map((J)=>J.index).filter((J)=>J!==void 0).sort((J,Q)=>J-Q)}static calculateMaxArgumentIndex($,J){let Q=-1;if($&&$.length>0){let X=Math.max(...$.map((Y)=>Y.index));Q=Math.max(Q,X)}if(J&&J.length>0){let X=Math.max(...J.map((Y)=>Y.index));Q=Math.max(Q,X)}return Q}static computeParameterFlags($,J){let Q=!!(J&&J.length>0);if(!$||$.length===0)return{hasBody:!1,hasQuery:!1,hasParams:!1,hasHeaders:!1,hasCookies:!1,hasDependencies:Q};return{hasBody:$.some((X)=>X.type==="body"),hasQuery:$.some((X)=>X.type==="query"),hasParams:$.some((X)=>X.type==="param"),hasHeaders:$.some((X)=>X.type==="header"),hasCookies:$.some((X)=>X.type==="cookie"),hasDependencies:Q}}static compileAll($){return $.map((J)=>this.compile(J))}}n$();class r2{app;metadata;container;validator;errorHandler;compiledRoutes=new Map;constructor($,J,Q,X,Y){this.app=$;this.metadata=J;this.container=Q;this.validator=X;this.errorHandler=Y}compile(){let $=this.metadata.getRoutes(),J=M1.compileAll($);for(let Q of J){let X=`${Q.target.name}:${Q.propertyKey}`;this.compiledRoutes.set(X,Q);let Y=this.createHandler(Q),W=this.normalizePath(Q.path),H=Q.method.toLowerCase();if(Q.middleware&&Q.middleware.length>0)this.app[H](W,...Q.middleware,Y);else this.app[H](W,Y)}}normalizePath($){if(!$.startsWith("/"))$="/"+$;if($=$.replace(/\{([^}]+)\}/g,":$1"),$.length>1&&$.endsWith("/"))$=$.slice(0,-1);return $}createHandler($){return async(J)=>{try{J.set("routeMetadata",$);let Q=$.cache,X=null,Y=null;if(Q){let{CacheManager:q}=await Promise.resolve().then(() => (C2(),z9)),{parseTTL:_}=await Promise.resolve().then(() => U9);Y=q;let F=J.req.param(),B=Q.includeQuery?J.req.query():void 0;X=q.generateKey($.method,$.path,F,B,Q);let D=await q.get(X,Q.store);if(D!==null)return J.header("X-Cache","HIT"),this.serializeResponse(J,D);J.header("X-Cache","MISS")}let W=await this.extractParameters(J,$.parameters),H=await this.resolveDependencies(J,$.dependencies),G=this.mergeArguments(W,H,$.parameters,$.maxArgumentIndex),V;if($.handler)V=await $.handler(J,...G);else{let q=await this.container.resolve($.target,{scope:"transient",context:J});if(typeof q[$.propertyKey]!=="function")throw Error(`Method ${$.propertyKey} not found on controller ${$.target.name}`);V=await q[$.propertyKey](...G)}if(Q&&X&&Y){if(!Q.condition||Q.condition(V)){let{parseTTL:q}=await Promise.resolve().then(() => U9),_=q(Q.ttl);await Y.set(X,V,_,Q.store)}}let U=$.cacheInvalidate;if(U&&Array.isArray(U)){if(!Y){let{CacheManager:_}=await Promise.resolve().then(() => (C2(),z9));Y=_}let q=J.req.param();for(let _ of U){let F=_;if(q)for(let[B,D]of Object.entries(q))F=F.replace(`{${B}}`,String(D));await Y.invalidate(F)}}if($.responseSchema)try{V=await $.responseSchema.parseAsync(V)}catch{}if($.statusCode)J.status($.statusCode);return this.serializeResponse(J,V)}catch(Q){return await this.handleError(J,Q)}}}serializeResponse($,J){return F4.serialize($,J)}getRouteMetadataForContext($){return $.get("routeMetadata")||null}isAuthRequired($){if($.auth?.required)return!0;return $.parameters.some((J)=>J.type==="current-user")}async handleError($,J){return await this.errorHandler.handle(J,$)}async extractParameters($,J){let Q=[];for(let X of J){if(!X)continue;let Y;switch(X.type){case"body":try{Y=await $.req.json()}catch(U){Y=null}break;case"query":if(X.name)Y=$.req.query(X.name);else Y=$.req.query();if(X.schema&&Y!==void 0)try{Y=X.schema.parse(Y)}catch(U){throw new r6(`Invalid query parameter: ${U}`)}break;case"param":if(X.name)Y=$.req.param(X.name);else Y=$.req.param();break;case"header":if(X.name)Y=$.req.header(X.name);else{let U={};$.req.raw.headers.forEach((q,_)=>{U[_]=q}),Y=U}break;case"cookie":if(X.name)Y=G4($,X.name);else{let U=$.req.header("cookie");if(U)Y=Object.fromEntries(U.split(";").map((q)=>{let[_,...F]=q.trim().split("=");return[_,F.join("=")]}));else Y={}}break;case"request":Y=$.req;break;case"response":case"context":Y=$;break;case"current-user":Y=$.get("auth.user")||null;let W=this.getRouteMetadataForContext($);if(W&&this.isAuthRequired(W)){if(!Y){let U=$.get("auth.error")||"Authentication required",{AuthenticationException:q}=await Promise.resolve().then(() => (h1(),gX));throw new q(U)}}break;case"token":Y=$.get("auth.token")||null;break;case"oauth-user":Y=$.get("oauth.user")||null;break;case"oauth-token":Y=$.get("oauth.token")||null;break;case"current-session":Y=$.get("session")||null;break;case"session-data":let H=$.get("session");if(H&&X.metadata?.key)Y=H.data[X.metadata.key];else if(H)Y=H.data;else Y=null;break;case"csrf-token":Y=$.get("csrf.token")||null;break;case"filtered-resource":Y=$.get("filtered.resource")||null;break;case"filtered-attributes":Y=$.get("filtered.attributes")||[];break;case"request-id":let{getRequestId:G}=await Promise.resolve().then(() => D8);Y=G($);break;case"abort-signal":let{getAbortSignal:V}=await Promise.resolve().then(() => D8);Y=V($);break;default:Y=void 0}if(X.schema)try{Y=await this.validator.validate(Y,X.schema)}catch(W){throw W}Q[X.index]=Y}return Q}mergeArguments($,J,Q,X){let W=Q.filter((U)=>U!==void 0&&U.index!==void 0).map((U)=>U.index),H=W.length>0?Math.max(...W):-1,G=X!==void 0&&X>=0?X:Math.max(H,$.length-1,J.length-1,0);if(!Number.isFinite(G)||G<0)G=0;let V=Array(G+1);for(let U=0;U<=G;U++)if($[U]!==void 0)V[U]=$[U];else if(J[U]!==void 0)V[U]=J[U];return V}async resolveDependencies($,J){let Q=[];for(let X of J){if(!X)continue;try{let Y=await this.container.resolve(X.provider,{scope:X.scope,context:$});Q[X.index]=Y}catch(Y){throw Error(`Failed to resolve dependency at index ${X.index}: ${Y instanceof Error?Y.message:"Unknown error"}`)}}return Q}}n$();i$();class a2{customHandler;isDevelopment;format;constructor($,J){this.customHandler=$,this.format=J?.errorResponseFormat??"rfc9457",this.isDevelopment=J?.forceDevelopment!==void 0?J.forceDevelopment:typeof process<"u"&&!0}setCustomHandler($){this.customHandler=$}getFormat(){return this.format}setErrorResponseFormat($){this.format=$}async handle($,J){if(this.customHandler)try{let Q=await this.customHandler($,J);return j1(J,Q)}catch(Q){if(this.isDevelopment)console.error("Custom error handler failed:",Q)}if($ instanceof C1)return j1(J,this.handleValidationException($,J));if($.name==="ZodError"&&Array.isArray($.issues)){let Q=new C1($);return j1(J,this.handleValidationException(Q,J))}if($ instanceof j0)return j1(J,this.handleHTTPException($,J));return j1(J,this.handleGenericError($,J))}handleValidationException($,J){let Q=$.toJSON();if(this.isDevelopment)console.error("Validation Error:",{path:J.req.path,method:J.req.method,violations:Q.violations??Q.details});return p$(J,Q,$.statusCode,this.format)}handleHTTPException($,J){if($.statusCode>=500){let X={name:$.name,statusCode:$.statusCode,message:$.message,path:J.req.path,method:J.req.method,...this.isDevelopment&&$.stack?{stack:$.stack}:{}};try{v0().error("HTTP Server Error",$,X)}catch{console.error("HTTP Exception:",X)}}else if(this.isDevelopment){let X={name:$.name,statusCode:$.statusCode,message:$.message,path:J.req.path,method:J.req.method};try{v0().warn("HTTP Client Error",X)}catch{console.warn("HTTP Exception:",X)}}let Q=$.toJSON();return p$(J,Q,$.statusCode,this.format)}handleGenericError($,J){let Q={name:$.name,message:$.message,path:J.req.path,method:J.req.method,stack:$.stack};try{v0().error("Internal Server Error",$,Q)}catch{console.error("Internal Server Error:",Q)}let X=500,Y=this.isDevelopment?$.message:"An unexpected error occurred.",W={type:d$(X),title:S1(X,$.message,"Internal Server Error"),status:X,detail:Y,error:Y,statusCode:X};if(this.isDevelopment)W.debug={name:$.name,message:$.message,stack:$.stack?$.stack.split(`
|
|
152
152
|
`).map((H)=>H.trim()):void 0};if(this.format==="legacy"){let H={error:"Internal Server Error",statusCode:X,message:Y};if(this.isDevelopment){if(H.name=$.name,$.stack)H.stack=$.stack.split(`
|
|
153
|
-
`).map((G)=>G.trim())}return J.json(H,X)}return p$(J,W,X,this.format)}isDevelopmentMode(){return this.isDevelopment}setDevelopmentMode($){this.isDevelopment=$}}class t2{plugins=new Map;installed=new Set;register($){if(this.plugins.has($.name))throw Error(`Plugin "${$.name}" is already registered`);this.plugins.set($.name,$)}async install($){let J=this.resolveInstallOrder();for(let Q of J)await this.plugins.get(Q).install($),this.installed.add(Q)}isInstalled($){return this.installed.has($)}getPlugin($){return this.plugins.get($)}getPluginNames(){return Array.from(this.plugins.keys())}resolveInstallOrder(){let $=new Set,J=new Set,Q=[],X=(Y,W=[])=>{if(J.has(Y)){let G=[...W,Y].join(" -> ");throw Error(`Circular dependency detected in plugins: ${G}`)}if($.has(Y))return;J.add(Y);let H=this.plugins.get(Y);if(!H)throw Error(`Plugin "${Y}" is not registered`);if(H.dependencies)for(let G of H.dependencies){if(!this.plugins.has(G))throw Error(`Plugin "${Y}" depends on "${G}" which is not registered`);X(G,[...W,Y])}J.delete(Y),$.add(Y),Q.push(Y)};for(let Y of this.plugins.keys())X(Y);return Q}}class D${hono;metadata;container;validator;errorHandler;compiler;pluginManager;config;compiled=!1;globalMiddleware=[];groupPrefix="";constructor($){if(this.config={adapter:"hono",title:"Veloce-TS API",version:"1.0.0",docs:!0,...$},this.hono=new W5,this.metadata=new S,this.container=new s2,this.validator=new W$,this.errorHandler=new a2(void 0,{errorResponseFormat:this.config.errorResponseFormat}),this.pluginManager=new t2,this.compiler=new r2(this.hono,this.metadata,this.container,this.validator,this.errorHandler),this.config.cors)if(this.config.cors===!0)this.useCors();else this.useCors(this.config.cors)}include($){let J=S.getControllerMetadata($);if(J)this.metadata.registerController($,J);let Q=S.getRouteMethods($);for(let X of Q){let Y=S.getRouteMetadata($.prototype,X),W=S.getParameterMetadata($.prototype,X),H=S.getDependencyMetadata($.prototype,X);if(Y&&Y.method&&Y.path!==void 0){let G=J?.prefix||"",V=this.normalizePath(G,Y.path);this.metadata.registerRoute({...Y,target:$,propertyKey:X,method:Y.method,path:V,middleware:[...J?.middleware||[],...Y.middleware||[]],parameters:W||Y.parameters||[],dependencies:H||Y.dependencies||[],responses:Y.responses||[],docs:Y.docs})}}}get($,J){this.registerFunctionalRoute("GET",$,J)}post($,J){this.registerFunctionalRoute("POST",$,J)}put($,J){this.registerFunctionalRoute("PUT",$,J)}delete($,J){this.registerFunctionalRoute("DELETE",$,J)}patch($,J){this.registerFunctionalRoute("PATCH",$,J)}route($){return new uX(this,$)}group($,J){let Q=this.groupPrefix;this.groupPrefix=this.normalizePath(this.groupPrefix,$),J(),this.groupPrefix=Q}registerFunctionalRoute($,J,Q){let X=this.normalizePath(this.groupPrefix,J),Y={target:yX,propertyKey:`${$.toLowerCase()}_${X}`,method:$,path:X,middleware:Q.middleware||[],parameters:this.extractParametersFromSchema(Q.schema),dependencies:[],responses:Q.responses||[],docs:Q.docs,handler:Q.handler};this.metadata.registerRoute(Y)}extractParametersFromSchema($){let J=[],Q=0;if($?.body)J.push({index:Q++,type:"body",schema:$.body,required:!0});if($?.query)J.push({index:Q++,type:"query",schema:$.query,required:!1});if($?.params)J.push({index:Q++,type:"param",schema:$.params,required:!0});if($?.headers)J.push({index:Q++,type:"header",schema:$.headers,required:!1});return J}use($){this.globalMiddleware.push($),this.hono.use("*",$)}useCors($){let J=z2($);this.use(J)}useRateLimit($){let J=d1($);this.use(J)}useCompression($){let J=N2($);this.use(J)}usePlugin($){this.pluginManager.register($)}getPluginManager(){return this.pluginManager}onError($){this.errorHandler.setCustomHandler($)}getErrorHandler(){return this.errorHandler}normalizePath(...$){let J=$.filter((Q)=>Q!=="").join("/").replace(/\/+/g,"/").replace(/\/$/,"");return J.startsWith("/")?J:`/${J}`}getHono(){return this.hono}getMetadata(){return this.metadata}getContainer(){return this.container}getCompiler(){return this.compiler}getConfig(){return this.config}isCompiled(){return this.compiled}markCompiled(){this.compiled=!0}async compile(){if(this.compiled){console.warn("Routes have already been compiled. Skipping compilation.");return}await this.pluginManager.install(this),this.compiler.compile(),this.compiled=!0}serverInstance=null;shutdownHandlersRegistered=!1;async listen($,J){if(!this.compiled)await this.compile();let Q=this.createAdapter();return this.serverInstance=Q.listen($,J),this.setupGracefulShutdown(),this.serverInstance}setupGracefulShutdown(){if(typeof process>"u")return;if(this.shutdownHandlersRegistered)return;this.shutdownHandlersRegistered=!0;let $=async(J)=>{let Q=v0().child({component:"app"});if(Q.info(`Received ${J}, starting graceful shutdown...`),this.serverInstance&&typeof this.serverInstance.close==="function")try{await Promise.resolve(this.serverInstance.close()),Q.info("Server closed gracefully")}catch(X){Q.error("Error during shutdown",X)}process.exit(0)};process.on("SIGTERM",()=>$("SIGTERM")),process.on("SIGINT",()=>$("SIGINT"))}async shutdown(){if(this.serverInstance&&typeof this.serverInstance.close==="function")await Promise.resolve(this.serverInstance.close()),this.serverInstance=null}createAdapter(){let $=this.config.adapter||"hono";switch($){case"hono":{let{HonoAdapter:J}=T0(V8);return new J(this.hono)}case"express":{let{ExpressAdapter:J}=T0(S7);return new J(this)}case"native":{let{HonoAdapter:J}=T0(V8);return new J(this.hono)}default:throw Error(`Unknown adapter type: ${$}. Supported adapters: 'hono', 'express', 'native'`)}}}class yX{}class uX{app;path;constructor($,J){this.app=$;this.path=J}get($){return this.app.get(this.path,$),this}post($){return this.app.post(this.path,$),this}put($){return this.app.put(this.path,$),this}delete($){return this.app.delete(this.path,$),this}patch($){return this.app.patch(this.path,$),this}}function z4($){let J={docs:!1,cors:!1,...$};return new D$(J)}function U5($,J,Q,X){let Y=$.getContainer(),W=typeof Q==="function"?Q:()=>Q;Y.register(J,{scope:X?.scope||"singleton",factory:W})}function N4($){return new H$($)}async function q5($,J){let Q=z4(J);await $(Q),await Q.compile();let X=N4(Q);return{app:Q,client:X}}function _5($){$.getContainer().clear()}var kO={};Z0(kO,{zodToJsonSchema:()=>n6,zodToGraphQLType:()=>J1,zodObjectToGraphQLType:()=>xQ,zodObjectToGraphQLInput:()=>vQ,z:()=>w,withRepositoryMixin:()=>AO,transactionMiddleware:()=>H7,toLegacyErrorBody:()=>P9,setupTestApp:()=>q5,setSessionData:()=>QV,setRequestMetadata:()=>K7,setRequestContext:()=>_8,setGlobalTransactionManager:()=>l0,setCache:()=>_9,sendErrorResponse:()=>p$,resolveProblemType:()=>d$,resolveProblemTitle:()=>S1,requestLoggingMiddleware:()=>MB,removeSessionData:()=>XV,registerDrizzle:()=>tX,problemTypeUri:()=>B1,parseTTL:()=>r1,parseCursorQuery:()=>OO,paginate:()=>LO,mockDependency:()=>U5,mergeVeloceCorsHeaders:()=>j1,isSessionAuthenticated:()=>$V,isOAuthAuthenticated:()=>dG,isNullable:()=>Y$,isAuthenticated:()=>JO,invalidateCache:()=>B9,initializeRequestContext:()=>w2,initializeLogger:()=>CB,hasResolverMetadata:()=>fQ,hasFieldMetadata:()=>kQ,globalTransactionEventManager:()=>j$,globalRepositoryRegistry:()=>jO,getUserRoles:()=>J7,getUserPermissions:()=>xG,getTransactionInterceptor:()=>BV,getToken:()=>t5,getSessionUserId:()=>JV,getSessionManager:()=>G2,getSessionData:()=>eG,getResolverMetadata:()=>IQ,getRequestMetadata:()=>I7,getRequestId:()=>C7,getRequestDuration:()=>A2,getRequestContext:()=>E1,getRBACManager:()=>kG,getOAuthUser:()=>lG,getOAuthToken:()=>cG,getOAuthProvider:()=>pG,getLogger:()=>v0,getGlobalTransactionManager:()=>I1,getFieldsMetadata:()=>TQ,getFieldMetadata:()=>bQ,getDefaultValue:()=>o6,getCurrentUser:()=>N1,getCurrentSession:()=>u0,getCache:()=>q9,getCSRFProtection:()=>tG,getAuthError:()=>QO,getArgumentsMetadata:()=>v2,getAbortSignal:()=>M7,generateRequestId:()=>q8,errorLoggingMiddleware:()=>PB,deleteCache:()=>D9,createTypeORMPlugin:()=>LV,createTransactionalProxy:()=>RO,createTransactionPlugin:()=>fO,createTestClient:()=>N4,createTestApp:()=>z4,createSimpleRequestIdMiddleware:()=>V9,createSessionMiddleware:()=>aG,createRequestContextMiddleware:()=>G9,createRedisCacheStore:()=>RV,createRateLimitMiddleware:()=>d1,createRBACMiddleware:()=>$7,createPrismaPlugin:()=>EV,createLogger:()=>H9,createDefaultRBAC:()=>r5,createCorsMiddleware:()=>z2,createCompressionMiddleware:()=>N2,createChildLogger:()=>o1,createCacheMiddleware:()=>N9,createCacheInvalidationMiddleware:()=>w9,createAuthMiddleware:()=>a5,clearMocks:()=>_5,clearCache:()=>F9,cleanupRequestContext:()=>j2,checkUserRole:()=>GO,checkUserPermission:()=>VO,buildProblemInstance:()=>M9,abortRequest:()=>P7,ZodToJsonSchemaConverter:()=>Z1,WebSocketPlugin:()=>l$,WebSocketManager:()=>m$,WebSocketConnection:()=>Q$,WebSocket:()=>c9,VeloceTS:()=>D$,Veloce:()=>D$,ValidationException:()=>C1,ValidationEngine:()=>W$,VELOCE_CORS_HEADERS_KEY:()=>U8,UseMiddleware:()=>hz,UnprocessableEntityException:()=>pQ,UnauthorizedException:()=>uQ,TypeORMTransactionManager:()=>z6,TypeORMRepository:()=>K1,TypeORMPlugin:()=>Q8,TypeORMEntity:()=>OV,TransactionalWithPropagation:()=>A$,Transactional:()=>qV,TransactionTemplate:()=>AV,TransactionService:()=>wV,TransactionPropagationManager:()=>zV,TransactionPropagation:()=>FV,TransactionPlugin:()=>V7,TransactionMetricsListener:()=>$8,TransactionLoggingListener:()=>e4,TransactionInterceptor:()=>c1,TransactionEventType:()=>NV,TransactionEventManager:()=>G7,TooManyRequestsException:()=>iQ,TokenRevokedException:()=>V5,TokenPayloadSchema:()=>iL,TokenExpiredException:()=>o2,Token:()=>$O,Timeout:()=>fz,TestResponse:()=>m2,TestClient:()=>H$,Tags:()=>mz,Tag:()=>uz,Supports:()=>CO,SuperAdminOnly:()=>WO,Summary:()=>gz,Subscription:()=>MQ,StreamResponse:()=>B4,SessionManager:()=>Q7,SessionGuard:()=>X7,SessionDataSchema:()=>iG,Session:()=>nG,ServiceUnavailableException:()=>nQ,RouterCompiler:()=>r2,Roles:()=>bG,RoleSchema:()=>oL,RoleAssignmentSchema:()=>rL,ResponseSerializer:()=>F4,ResponseSchema:()=>bz,Response:()=>G5,Resolver:()=>ZQ,RequiresNew:()=>SO,Required:()=>ZO,RequireRole:()=>e5,RequirePermission:()=>XO,RequireCSRF:()=>rG,RequestId:()=>sX,Req:()=>iX,RepositoryService:()=>YV,RepositoryRegistry:()=>B6,RepositoryFactory:()=>N$,Repository:()=>UV,RefreshRequestSchema:()=>sL,RedisCacheStore:()=>Y8,RedirectResponse:()=>_4,RateLimit:()=>kz,RBACPlugin:()=>vG,RBACManager:()=>W2,RBACGuard:()=>D6,QueryBuilderFactory:()=>WV,QueryBuilder:()=>a4,Query:()=>lX,Put:()=>Mz,PrismaZodSchemaGenerator:()=>V2,PrismaTransactionManager:()=>F6,PrismaRepository:()=>P1,PrismaPlugin:()=>J8,Post:()=>Cz,PluginManager:()=>t2,Permissions:()=>fG,PermissionMatcher:()=>H2,PermissionCheckSchema:()=>aL,PayloadTooLargeException:()=>dQ,Patch:()=>Kz,Param:()=>cX,PaginationTransformer:()=>GV,PaginationHelper:()=>l1,PaginationBuilder:()=>HV,Paginated:()=>EO,PROBLEM_JSON_MEDIA_TYPE:()=>hQ,OpenAPIPlugin:()=>s6,OpenAPIGenerator:()=>D1,OnTransactionRollback:()=>bO,OnTransactionCommit:()=>TO,OnTransactionBegin:()=>IO,OnMessage:()=>p9,OnDisconnect:()=>i9,OnConnect:()=>d9,OAuthUserSchema:()=>gG,OAuthUser:()=>uG,OAuthToken:()=>mG,OAuth:()=>yG,NotSupported:()=>MO,NotFoundException:()=>yQ,Never:()=>KO,Mutation:()=>CQ,MinimumRole:()=>HO,Migration:()=>U7,MetadataRegistry:()=>S,MetadataCompiler:()=>M1,MemoryCacheStore:()=>S2,Mandatory:()=>PO,LoginRequestSchema:()=>nL,JWTProvider:()=>o4,JSONResponse:()=>U4,InvalidTokenException:()=>_$,InjectDB:()=>eX,Inject:()=>vz,InMemoryUserProvider:()=>TG,InMemoryTransactionManager:()=>w$,HttpCode:()=>Tz,HonoAdapter:()=>j6,HealthCheckers:()=>I9,HealthCheckPlugin:()=>a6,Header:()=>dX,HTTPException:()=>j0,HTMLResponse:()=>q4,GraphQLSubscription:()=>MQ,GraphQLSchemaBuilder:()=>h2,GraphQLQuery:()=>SQ,GraphQLPlugin:()=>g2,GraphQLMutation:()=>CQ,GraphQLCtx:()=>KQ,GoneException:()=>cQ,Get:()=>Sz,GenericRepository:()=>wO,GQLSubscription:()=>MQ,GQLQuery:()=>SQ,GQLMutation:()=>CQ,GQLContext:()=>KQ,ForbiddenException:()=>mQ,FileResponse:()=>D4,FastAPITS:()=>D$,ExpressAdapter:()=>F2,ErrorHandler:()=>a2,Entity:()=>_V,DrizzleZodSchemaConverter:()=>X8,DrizzleTransactionManager:()=>N6,DrizzleRepository:()=>m0,DrizzlePlugin:()=>q7,Description:()=>yz,Deprecated:()=>lz,Depends:()=>xz,Delete:()=>Pz,DefaultQueryOperators:()=>Y7,DIContainer:()=>s2,DEFAULT_PROBLEM_TYPE_BASE:()=>gQ,DB_TOKEN:()=>w4,CursorPaginationHelper:()=>W7,CurrentUser:()=>eL,CurrentSession:()=>sG,Ctx:()=>nX,Cookie:()=>pX,Controller:()=>Zz,ConflictException:()=>lQ,Column:()=>DV,CacheManager:()=>k0,CacheInvalidate:()=>aX,Cache:()=>rX,CSRFToken:()=>oG,Body:()=>mX,BaseTransactionManager:()=>Y1,BaseRepository:()=>m1,BadRequestException:()=>r6,AuthorizationException:()=>E0,AuthenticationException:()=>R0,AuthService:()=>_6,AuthPlugin:()=>hG,Auth:()=>tL,Arg:()=>PQ,ApiResponse:()=>dz,ApiDoc:()=>cz,All:()=>Iz,AdminOnly:()=>YO,AbortSignal:()=>oX});module.exports=T0(kO);var gk=w1(X$(),1);function Zz($="",J){return(Q)=>{let X=$.trim();if(X&&!X.startsWith("/"))X="/"+X;if(X.endsWith("/"))X=X.slice(0,-1);S.defineController(Q,{prefix:X,middleware:J?.middleware||[]})}}function r$($){return(J="")=>{return(Q,X)=>{let Y=J.trim();if(Y&&!Y.startsWith("/"))Y="/"+Y;let W=Reflect.getMetadata("route:middleware",Q,X)||[];S.defineRoute(Q,X,{method:$,path:Y,middleware:W,parameters:[],dependencies:[],responses:[]})}}}var Sz=r$("GET"),Cz=r$("POST"),Mz=r$("PUT"),Pz=r$("DELETE"),Kz=r$("PATCH"),Iz=r$("ALL");function Tz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,statusCode:$})}}function bz($,J=200){return(Q,X)=>{let Y=S.getRouteMetadata(Q,X),W=(Y?.responses??[]).filter((H)=>H.statusCode!==J);W.push({statusCode:J,schema:$,description:void 0}),S.defineRoute(Q,X,{...Y,responseSchema:$,responses:W})}}function fz($,J){let Q=async(X,Y)=>{let W,H=new Promise((G,V)=>{W=setTimeout(()=>{V(Object.assign(Error(J??`Request timed out after ${$}ms`),{name:"TimeoutError",statusCode:408}))},$)});try{X.header("X-Timeout-Ms",String($)),await Promise.race([Y(),H])}finally{if(W!==void 0)clearTimeout(W)}};return(X,Y)=>{let W=S.getRouteMetadata(X,Y),H=Reflect.getMetadata("route:middleware",X,Y)||[];Reflect.defineMetadata("route:middleware",[Q,...H],X,Y),S.defineRoute(X,Y,{...W,middleware:[Q,...W?.middleware||[]]})}}function kz($){let J=d1($);return(Q,X)=>{let Y=S.getRouteMetadata(Q,X),W=Reflect.getMetadata("route:middleware",Q,X)||[];Reflect.defineMetadata("route:middleware",[J,...W],Q,X),S.defineRoute(Q,X,{...Y,middleware:[J,...Y?.middleware||[]]})}}function mX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"body",schema:$,required:!0};S.defineParameter(J,Q,X,Y)}}function lX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"query",required:!1};if(typeof $==="string")Y.name=$;else if($)Y.schema=$;S.defineParameter(J,Q,X,Y)}}function cX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"param",name:$,required:!0};S.defineParameter(J,Q,X,Y)}}function dX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"header",name:$,required:!1};S.defineParameter(J,Q,X,Y)}}function pX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"cookie",name:$,required:!1};S.defineParameter(J,Q,X,Y)}}function iX(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"request",required:!0};S.defineParameter($,J,Q,X)}}function nX(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"context",required:!0};S.defineParameter($,J,Q,X)}}function sX(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"request-id",required:!1};S.defineParameter($,J,Q,X)}}function oX(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"abort-signal",required:!1};S.defineParameter($,J,Q,X)}}function xz($,J="request"){return(Q,X,Y)=>{if(X===void 0)S.defineDependency(Q.prototype,"constructor",Y,{index:Y,provider:$,scope:J});else S.defineDependency(Q,X,Y,{index:Y,provider:$,scope:J})}}function vz($,J="singleton"){return(Q,X,Y)=>{if(X===void 0)S.defineDependency(Q.prototype,"constructor",Y,{index:Y,provider:$,scope:J});else S.defineDependency(Q,X,Y,{index:Y,provider:$,scope:J})}}function hz(...$){return(J,Q)=>{let X=Reflect.getMetadata("route:middleware",J,Q)||[];Reflect.defineMetadata("route:middleware",[...X,...$],J,Q);let Y=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...Y,middleware:[...Y?.middleware||[],...$]})}}function gz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,summary:$}})}}function yz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,description:$}})}}function uz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q),Y=X?.docs?.tags??[];if(!Y.includes($))S.defineRoute(J,Q,{...X,docs:{...X?.docs,tags:[...Y,$]}})}}function mz(...$){return(J,Q)=>{let X=S.getRouteMetadata(J,Q),Y=X?.docs?.tags??[],W=Array.from(new Set([...Y,...$]));S.defineRoute(J,Q,{...X,docs:{...X?.docs,tags:W}})}}function lz(){return($,J)=>{let Q=S.getRouteMetadata($,J);S.defineRoute($,J,{...Q,docs:{...Q?.docs,deprecated:!0}})}}function cz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,...$}})}}function dz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q),Y=X?.responses||[],W=Y.findIndex((G)=>G.statusCode===$.statusCode),H;if(W>=0)H=[...Y],H[W]=$;else H=[...Y,$];S.defineRoute(J,Q,{...X,responses:H})}}function rX($){return(J,Q)=>{Reflect.defineMetadata("cache:options",$,J,Q);let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,cache:$})}}function aX($){return(J,Q)=>{let X=Array.isArray($)?$:[$];Reflect.defineMetadata("cache:invalidate",X,J,Q);let Y=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...Y,cacheInvalidate:X})}}var w4=Symbol("veloce:db");function tX($,J,Q=w4){$.getContainer().register(Q,{scope:"singleton",factory:()=>J})}function eX($=w4){return(J,Q,X)=>{if(Q===void 0)S.defineDependency(J.prototype,"constructor",X,{index:X,provider:$,scope:"singleton"});else S.defineDependency(J,Q,X,{index:X,provider:$,scope:"singleton"})}}i$();n$();h1();var u1=w1(IG(),1);class o4{config;blacklistedTokens=new Set;constructor($){this.config=$;if(!$.secret)throw Error("JWT secret is required")}generateTokens($){let J=Math.floor(Date.now()/1000),Q=this.parseExpiration(this.config.expiresIn||"1h"),X={sub:$.sub,...$,iat:J,exp:J+Q,iss:this.config.issuer,aud:this.config.audience},Y=u1.sign(X,this.config.secret,{algorithm:this.config.algorithm||"HS256"}),W={sub:$.sub,type:"refresh",iat:J,exp:J+this.parseExpiration(this.config.refreshExpiresIn||"7d"),iss:this.config.issuer,aud:this.config.audience},H=u1.sign(W,this.config.refreshSecret||this.config.secret,{algorithm:this.config.algorithm||"HS256"});return{accessToken:Y,refreshToken:H,expiresIn:Q}}verifyAccessToken($){if(this.isBlacklisted($))throw Error("Token has been revoked");try{return u1.verify($,this.config.secret,{algorithms:[this.config.algorithm||"HS256"],issuer:this.config.issuer,audience:this.config.audience})}catch(J){if(J instanceof Error)throw Error(`Invalid token: ${J.message}`);throw Error("Invalid token")}}verifyRefreshToken($){if(this.isBlacklisted($))throw Error("Refresh token has been revoked");try{let J=u1.verify($,this.config.refreshSecret||this.config.secret,{algorithms:[this.config.algorithm||"HS256"],issuer:this.config.issuer,audience:this.config.audience});if(J.type!=="refresh")throw Error("Invalid refresh token type");return J}catch(J){if(J instanceof Error)throw Error(`Invalid refresh token: ${J.message}`);throw Error("Invalid refresh token")}}refreshAccessToken($){let J=this.verifyRefreshToken($);return this.blacklistToken($),this.generateTokens({sub:J.sub,...Object.fromEntries(Object.entries(J).filter(([Q])=>!["iat","exp","iss","aud","type"].includes(Q)))})}decodeToken($){try{return u1.decode($)}catch{return null}}blacklistToken($){this.blacklistedTokens.add($),this.cleanupBlacklist()}isBlacklisted($){return this.blacklistedTokens.has($)}cleanupBlacklist(){let $=Math.floor(Date.now()/1000);for(let J of this.blacklistedTokens){let Q=this.decodeToken(J);if(Q&&Q.exp&&Q.exp<$)this.blacklistedTokens.delete(J)}}parseExpiration($){if(typeof $==="number")return $;let J={s:1,m:60,h:3600,d:86400,w:604800},Q=$.match(/^(\d+)([smhdw])$/);if(!Q)throw Error(`Invalid expiration format: ${$}`);let[,X,Y]=Q;return parseInt(X)*J[Y]}}var iL=w.object({sub:w.string(),iat:w.number().optional(),exp:w.number().optional(),iss:w.string().optional(),aud:w.string().optional()}).passthrough(),nL=w.object({username:w.string().min(1),password:w.string().min(1)}),sL=w.object({refreshToken:w.string().min(1)});h1();class _6{config;userProvider;jwtProvider;constructor($,J){this.config=$;this.userProvider=J;this.jwtProvider=new o4($)}async login($,J){let Q=await this.userProvider.findByCredentials($,J);if(!Q)throw new R0("Invalid credentials");let X=this.jwtProvider.generateTokens({sub:Q.id,username:Q.username,email:Q.email,roles:Q.roles||[],permissions:Q.permissions||[]});return{user:Q,tokens:X}}async refresh($){try{return this.jwtProvider.refreshAccessToken($)}catch(J){throw new _$(J instanceof Error?J.message:"Invalid refresh token")}}async logout($,J){if(this.jwtProvider.blacklistToken($),J)this.jwtProvider.blacklistToken(J)}async verifyToken($){try{let J=this.jwtProvider.verifyAccessToken($),Q=await this.userProvider.findById(J.sub);if(!Q)throw new R0("User not found");return Q}catch(J){if(J instanceof Error){if(J.message.includes("expired"))throw new o2;throw new _$(J.message)}throw new _$("Token verification failed")}}getUserFromToken($){return this.jwtProvider.verifyAccessToken($)}hasRoles($,J){let Q=$.roles||[];return J.every((X)=>Q.includes(X))}hasPermissions($,J){let Q=$.permissions||[];return J.every((X)=>Q.includes(X))}async register($){if(!this.userProvider.createUser)throw Error("UserProvider does not support user creation");let J=await this.userProvider.createUser($),Q=this.jwtProvider.generateTokens({sub:J.id,username:J.username,email:J.email,roles:J.roles||[],permissions:J.permissions||[]});return{user:J,tokens:Q}}cleanup(){this.jwtProvider.cleanupBlacklist()}getJWTProvider(){return this.jwtProvider}}class TG{users=new Map;async findByCredentials($,J){for(let[Q,X]of this.users)if(X.username===$){if(await this.verifyPassword(J,X.passwordHash)){let{passwordHash:W,...H}=X;return H}}return null}async findById($){let J=this.users.get($);if(J){let{passwordHash:Q,...X}=J;return X}return null}async hashPassword($){return Buffer.from($).toString("base64")}async verifyPassword($,J){return await this.hashPassword($)===J}async createUser($){let J=crypto.randomUUID(),Q=await this.hashPassword($.password),X={id:J,username:$.username,email:$.email,roles:$.roles||["user"],passwordHash:Q};this.users.set(J,X);let{passwordHash:Y,...W}=X;return W}}class W2{roles=new Map;hierarchy=new Map;compiledPermissions=new Map;defineRole($){if(this.roles.set($.name,$),$.inherits&&$.inherits.length>0)this.hierarchy.set($.name,$.inherits);this.compiledPermissions.clear()}defineRoles($){for(let J of $)this.defineRole(J)}getRolePermissions($){if(this.compiledPermissions.has($))return Array.from(this.compiledPermissions.get($));let J=new Set;return this.collectPermissions($,J,new Set),this.compiledPermissions.set($,J),Array.from(J)}roleHasPermission($,J){return this.getRolePermissions($).includes(J)}userHasPermission($,J){for(let Q of $)if(this.roleHasPermission(Q,J))return!0;return!1}userHasRoles($,J){return J.every((Q)=>$.includes(Q))}userHasAnyRole($,J){return J.some((Q)=>$.includes(Q))}getRolesWithPermission($){let J=[];for(let Q of this.roles.keys())if(this.roleHasPermission(Q,$))J.push(Q);return J}getRoleHierarchy($){let J=[];return this.collectParentRoles($,J,new Set),J}roleInheritsFrom($,J){return this.getRoleHierarchy($).includes(J)}getAllRoles(){return Array.from(this.roles.values())}getRole($){return this.roles.get($)}roleExists($){return this.roles.has($)}validateRoles($){let J=[],Q=[];for(let X of $)if(this.roleExists(X))J.push(X);else Q.push(X);return{valid:J,invalid:Q}}getEffectiveRoles($){let J=new Set;for(let Q of $)J.add(Q),this.getRoleHierarchy(Q).forEach((Y)=>J.add(Y));return Array.from(J)}compareRoleLevels($,J){let Q=this.getRole($),X=this.getRole(J),Y=Q?.level??0,W=X?.level??0;return Y-W}getHighestRoleLevel($){let J=0;for(let Q of $){let X=this.getRole(Q);if(X&&X.level&&X.level>J)J=X.level}return J}collectPermissions($,J,Q){if(Q.has($))throw Error(`Circular role inheritance detected: ${$}`);Q.add($);let X=this.roles.get($);if(!X)throw Error(`Role not found: ${$}`);X.permissions.forEach((W)=>J.add(W));let Y=this.hierarchy.get($)||[];for(let W of Y)this.collectPermissions(W,J,new Set(Q))}collectParentRoles($,J,Q){if(Q.has($))return;Q.add($);let X=this.hierarchy.get($)||[];for(let Y of X)J.push(Y),this.collectParentRoles(Y,J,Q)}}function r5(){let $=new W2;return $.defineRoles([{name:"guest",description:"Guest user with minimal permissions",permissions:["read:public"],level:1},{name:"user",description:"Regular authenticated user",permissions:["read:own","write:own","read:public"],inherits:["guest"],level:10},{name:"moderator",description:"Moderator with content management permissions",permissions:["read:all","write:all","moderate:content"],inherits:["user"],level:50},{name:"admin",description:"Administrator with full system access",permissions:["*"],inherits:["moderator"],level:100},{name:"super-admin",description:"Super administrator with unrestricted access",permissions:["*","system:*"],inherits:["admin"],level:1000}]),$}var oL=w.object({name:w.string().min(1),description:w.string().optional(),permissions:w.array(w.string()),inherits:w.array(w.string()).optional(),level:w.number().optional()}),rL=w.object({userId:w.string(),roles:w.array(w.string())}),aL=w.object({userId:w.string(),permission:w.string()});class H2{static matches($,J){if(J==="*")return!0;if(J.endsWith("*")){let Q=J.slice(0,-1);return $.startsWith(Q)}return $===J}static hasPermission($,J){return $.some((Q)=>this.matches(J,Q))}static filterByPattern($,J){return $.filter((Q)=>this.matches(Q,J))}}function tL($){return(J,Q)=>{let X={required:!$?.optional,config:$};S.defineAuth(J,Q,X)}}function eL(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"current-user",required:!1})}}function $O(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"token",required:!1})}}function a5($){return async(J,Q)=>{let X=J.req.header("Authorization");if(!X||!X.startsWith("Bearer "))J.set("auth.error","Missing or invalid Authorization header"),J.set("auth.authenticated",!1);else{let Y=X.substring(7);try{let W=$.verifyAccessToken(Y);J.set("auth.user",W),J.set("auth.token",Y),J.set("auth.authenticated",!0)}catch(W){J.set("auth.error",W instanceof Error?W.message:"Authentication failed"),J.set("auth.authenticated",!1)}}await Q()}}function N1($){return $.get("auth.user")||null}function t5($){return $.get("auth.token")||null}function JO($){return $.get("auth.authenticated")===!0}function QO($){return $.get("auth.error")||null}h1();function bG($){return(J,Q)=>{let Y={config:Array.isArray($)?{roles:$,requireAll:!1,allowInherited:!0}:{requireAll:!1,allowInherited:!0,...$}};S.defineRoles(J,Q,Y)}}function fG($){return(J,Q)=>{let Y={config:Array.isArray($)?{permissions:$,requireAll:!1}:{requireAll:!1,...$}};S.definePermissions(J,Q,Y)}}function e5($){return bG([$])}function XO($){return fG([$])}function YO(){return e5("admin")}function WO(){return e5("super-admin")}function HO($){return(J,Q)=>{S.defineMinimumRole(J,Q,{roleName:$})}}function $7($){return async(J,Q)=>{J.set("rbac",$),await Q()}}class D6{rbac;constructor($){this.rbac=$}checkRoles($,J){let Q=N1($);if(!Q)throw new E0("Authentication required for role check");let X=Q.roles||[],Y=J.allowInherited?this.rbac.getEffectiveRoles(X):X,W;if(J.requireAll)W=J.roles.every((H)=>Y.includes(H));else W=J.roles.some((H)=>Y.includes(H));if(!W){let H=J.requireAll?"all":"any";throw new E0(`Access denied. Required ${H} of roles: ${J.roles.join(", ")}`)}}checkPermissions($,J){let Q=N1($);if(!Q)throw new E0("Authentication required for permission check");let X=Q.roles||[],Y=new Set;for(let G of X)this.rbac.getRolePermissions(G).forEach((U)=>Y.add(U));let W=Array.from(Y),H;if(J.requireAll)H=J.permissions.every((G)=>H2.hasPermission(W,G));else H=J.permissions.some((G)=>H2.hasPermission(W,G));if(!H){let G=J.requireAll?"all":"any";throw new E0(`Access denied. Required ${G} of permissions: ${J.permissions.join(", ")}`)}}checkMinimumRole($,J){let Q=N1($);if(!Q)throw new E0("Authentication required for role level check");let X=Q.roles||[],Y=this.rbac.getHighestRoleLevel(X),W=this.rbac.getRole(J);if(!W)throw Error(`Required role not found: ${J}`);let H=W.level||0;if(Y<H)throw new E0(`Access denied. Minimum role level required: ${J} (level ${H})`)}}function kG($){return $.get("rbac")||null}function J7($){return N1($)?.roles||[]}function xG($){let J=kG($),Q=J7($);if(!J)return[];let X=new Set;for(let Y of Q)J.getRolePermissions(Y).forEach((H)=>X.add(H));return Array.from(X)}function GO($,J){return J7($).includes(J)}function VO($,J){let Q=xG($);return H2.hasPermission(Q,J)}h1();class vG{config;name="rbac";version="1.0.0";dependencies=["auth"];rbac;guard;constructor($={}){this.config=$;if($.rbac)this.rbac=$.rbac;else if($.useDefaults!==!1)this.rbac=r5();else this.rbac=new W2;if($.roles)this.rbac.defineRoles($.roles);this.guard=new D6(this.rbac)}async install($){let J=$7(this.rbac);if($.use(J),$.getContainer().register(W2,{factory:()=>this.rbac,scope:"singleton"}),$.getContainer().register(D6,{factory:()=>this.guard,scope:"singleton"}),this.extendRouterCompiler($),this.config.enableManagementRoutes!==!1)this.addManagementRoutes($)}extendRouterCompiler($){let J=$.compile.bind($);$.compile=async()=>{let Q=$.getMetadata().getRoutes();for(let X of Q)if(X.roles||X.permissions||X.minimumRole){let Y=this.buildRBACMiddleware(X);$.getMetadata().registerRoute({...X,middleware:[Y,...X.middleware||[]]})}await J()}}buildRBACMiddleware($){let J=this.guard,Q=$.roles?.config,X=$.permissions?.config,Y=$.minimumRole;return async(W,H)=>{if(!N1(W))throw new E0("Authentication required");if(Q)J.checkRoles(W,Q);if(X)J.checkPermissions(W,X);if(Y)J.checkMinimumRole(W,Y.roleName);await H()}}addManagementRoutes($){let J=this.config.routes||{};$.get(J.roles||"/rbac/roles",{handler:(Q)=>{let X=this.rbac.getAllRoles();return Q.json({success:!0,roles:X.map((Y)=>({name:Y.name,description:Y.description,permissions:Y.permissions,inherits:Y.inherits,level:Y.level}))})}}),$.get("/rbac/roles/:roleName",{handler:(Q)=>{let X=Q.req.param("roleName"),Y=this.rbac.getRole(X);if(!Y)return Q.json({error:"Role not found"},404);let W=this.rbac.getRolePermissions(X),H=this.rbac.getRoleHierarchy(X);return Q.json({success:!0,role:{...Y,effectivePermissions:W,hierarchy:H}})}}),$.get("/rbac/roles/:roleName/permissions",{handler:(Q)=>{let X=Q.req.param("roleName");if(!this.rbac.roleExists(X))return Q.json({error:"Role not found"},404);let Y=this.rbac.getRolePermissions(X);return Q.json({success:!0,role:X,permissions:Y})}}),$.post("/rbac/check-permission",{handler:async(Q)=>{let X=await Q.req.json(),{roles:Y,permission:W}=X;if(!Array.isArray(Y)||!W)return Q.json({error:"Invalid request body"},400);let H=this.rbac.userHasPermission(Y,W);return Q.json({success:!0,hasPermission:H,roles:Y,permission:W})}}),$.post("/rbac/check-roles",{handler:async(Q)=>{let X=await Q.req.json(),{userRoles:Y,requiredRoles:W,requireAll:H=!1}=X;if(!Array.isArray(Y)||!Array.isArray(W))return Q.json({error:"Invalid request body"},400);let G=H?this.rbac.userHasRoles(Y,W):this.rbac.userHasAnyRole(Y,W);return Q.json({success:!0,hasRoles:G,userRoles:Y,requiredRoles:W,requireAll:H})}}),$.post("/rbac/effective-roles",{handler:async(Q)=>{let X=await Q.req.json(),{roles:Y}=X;if(!Array.isArray(Y))return Q.json({error:"Invalid request body"},400);let W=this.rbac.getEffectiveRoles(Y);return Q.json({success:!0,inputRoles:Y,effectiveRoles:W})}}),$.post("/rbac/user-permissions",{handler:async(Q)=>{let X=await Q.req.json(),{roles:Y}=X;if(!Array.isArray(Y))return Q.json({error:"Invalid request body"},400);let W=new Set;for(let H of Y)if(this.rbac.roleExists(H))this.rbac.getRolePermissions(H).forEach((V)=>W.add(V));return Q.json({success:!0,roles:Y,permissions:Array.from(W)})}})}getRBACManager(){return this.rbac}getGuard(){return this.guard}}h1();class hG{config;name="auth";version="1.0.0";authService;compileExtended=!1;constructor($){this.config=$;this.authService=new _6($.jwt,$.userProvider)}async install($){let J=a5(this.authService.getJWTProvider());if($.use(J),$.getContainer().register(_6,{factory:()=>this.authService,scope:"singleton"}),this.config.enableDefaultRoutes!==!1)this.addDefaultRoutes($);this.extendRouterCompiler($)}extendRouterCompiler($){if(this.compileExtended)return;this.compileExtended=!0,$.use(async(Q,X)=>{Q.set("authService",this.authService),await X()});let J=$.compile.bind($);$.compile=async()=>{await J();let Q=$.getHono(),X=$.getMetadata().getRoutes();for(let Y of X){let W=S.getAuthMetadata(Y.target.prototype,Y.propertyKey);if(Y.auth?.required||W?.required){console.log("Adding auth middleware for route:",Y.path,Y.method);let G=Y.auth?.config||W?.config;Q.use(Y.path,async(V,U)=>{if(console.log("Auth middleware executing for:",V.req.path,V.req.method,"target:",Y.path,Y.method),V.req.method!==Y.method)return console.log("Method mismatch, skipping auth check"),U();console.log("Checking authentication...");let q=V.get("auth.user"),_=V.get("auth.error");if(!q){let F=_||"Authentication required";throw console.log("No user found, throwing auth exception"),new R0(F)}if(G?.roles?.length){if(!this.authService.hasRoles(q,G.roles))throw new E0(`Required roles: ${G.roles.join(", ")}`)}if(G?.permissions?.length){if(!this.authService.hasPermissions(q,G.permissions))throw new E0(`Required permissions: ${G.permissions.join(", ")}`)}await U()})}}}}buildPath($){return $.path}pathMatches($,J){let Q=$.replace(/:([^/]+)/g,"([^/]+)");return new RegExp(`^${Q}$`).test(J)}addDefaultRoutes($){let J=this.config.routes||{};if($.post(J.login||"/auth/login",{handler:async(Q)=>{let X=await Q.req.json(),{username:Y,password:W}=X;try{let H=await this.authService.login(Y,W);return{success:!0,user:H.user,tokens:H.tokens}}catch(H){throw new R0(H instanceof Error?H.message:"Login failed")}},schema:{body:w.object({username:w.string().min(1),password:w.string().min(1)})}}),$.post(J.refresh||"/auth/refresh",{handler:async(Q)=>{let X=await Q.req.json(),{refreshToken:Y}=X;try{return{success:!0,tokens:await this.authService.refresh(Y)}}catch(W){throw new R0(W instanceof Error?W.message:"Token refresh failed")}},schema:{body:w.object({refreshToken:w.string().min(1)})}}),$.post(J.logout||"/auth/logout",{handler:async(Q)=>{let X=t5(Q),Y=await Q.req.json(),{refreshToken:W}=Y;if(X)await this.authService.logout(X,W);return{success:!0,message:"Logged out successfully"}},schema:{body:w.object({refreshToken:w.string().optional()})}}),"createUser"in this.config.userProvider)$.post(J.register||"/auth/register",{handler:async(Q)=>{let X=await Q.req.json(),{username:Y,password:W,email:H}=X;try{let G=await this.authService.register({username:Y,password:W,email:H});return{success:!0,user:G.user,tokens:G.tokens}}catch(G){throw new R0(G instanceof Error?G.message:"Registration failed")}},schema:{body:w.object({username:w.string().min(1),password:w.string().min(6),email:w.string().email().optional()})}});$.get("/auth/me",{handler:async(Q)=>{let X=N1(Q);if(!X)throw new R0("Not authenticated");return{success:!0,user:X}}})}getAuthService(){return this.authService}}class r4{name;config;constructor($,J){this.name=$;this.config=J}getAuthUrl($,J){let Q=new URLSearchParams({client_id:this.config.clientId,redirect_uri:this.config.redirectUri,response_type:"code",state:$,scope:this.config.scopes?.join(" ")||""});if(J&&this.config.pkce)Q.set("code_challenge",J),Q.set("code_challenge_method","S256");return`${this.config.authUrl}?${Q.toString()}`}async exchangeCodeForTokens($,J){let Q=new URLSearchParams({client_id:this.config.clientId,client_secret:this.config.clientSecret,code:$,grant_type:"authorization_code",redirect_uri:this.config.redirectUri});if(J&&this.config.pkce)Q.set("code_verifier",J);let X=await fetch(this.config.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Q.toString()});if(!X.ok){let W=await X.text();throw Error(`Token exchange failed: ${W}`)}let Y=await X.json();return{accessToken:Y.access_token,refreshToken:Y.refresh_token,expiresIn:Y.expires_in,tokenType:Y.token_type||"Bearer",scope:Y.scope}}async getUserInfo($){let J=await fetch(this.config.userInfoUrl,{headers:{Authorization:`Bearer ${$}`,Accept:"application/json"}});if(!J.ok){let X=await J.text();throw Error(`Failed to get user info: ${X}`)}let Q=await J.json();return this.mapUserInfo(Q)}mapUserInfo($){return{id:$.id||$.sub,email:$.email,name:$.name,username:$.login||$.preferred_username,avatar:$.avatar_url||$.picture,provider:this.name,...$}}}class UO extends r4{constructor($,J,Q){super("google",{clientId:$,clientSecret:J,redirectUri:Q,scopes:["openid","profile","email"],authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",userInfoUrl:"https://www.googleapis.com/oauth2/v2/userinfo",pkce:!0})}mapUserInfo($){return{id:$.id,email:$.email,name:$.name,username:$.email,avatar:$.picture,provider:"google",verified:$.verified_email,locale:$.locale,raw:$}}}class qO extends r4{constructor($,J,Q){super("github",{clientId:$,clientSecret:J,redirectUri:Q,scopes:["user:email"],authUrl:"https://github.com/login/oauth/authorize",tokenUrl:"https://github.com/login/oauth/access_token",userInfoUrl:"https://api.github.com/user",pkce:!1})}mapUserInfo($){return{id:$.id.toString(),email:$.email,name:$.name,username:$.login,avatar:$.avatar_url,provider:"github",company:$.company,location:$.location,bio:$.bio,raw:$}}async getUserInfo($){let J=await fetch(this.config.userInfoUrl,{headers:{Authorization:`Bearer ${$}`,Accept:"application/vnd.github.v3+json","User-Agent":"VeloceTS-OAuth"}});if(!J.ok)throw Error(`Failed to get user info: ${await J.text()}`);let Q=await J.json();if(!Q.email)try{let X=await fetch("https://api.github.com/user/emails",{headers:{Authorization:`Bearer ${$}`,Accept:"application/vnd.github.v3+json","User-Agent":"VeloceTS-OAuth"}});if(X.ok){let W=(await X.json()).find((H)=>H.primary);if(W)Q.email=W.email}}catch(X){}return this.mapUserInfo(Q)}}class _O extends r4{constructor($,J,Q,X="common"){super("microsoft",{clientId:$,clientSecret:J,redirectUri:Q,scopes:["openid","profile","email"],authUrl:`https://login.microsoftonline.com/${X}/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/${X}/oauth2/v2.0/token`,userInfoUrl:"https://graph.microsoft.com/v1.0/me",pkce:!0})}mapUserInfo($){return{id:$.id,email:$.mail||$.userPrincipalName,name:$.displayName,username:$.userPrincipalName,avatar:void 0,provider:"microsoft",jobTitle:$.jobTitle,department:$.department,officeLocation:$.officeLocation,raw:$}}}class DO{static generateCodeVerifier(){let $=new Uint8Array(32);return crypto.getRandomValues($),this.base64URLEncode($)}static async generateCodeChallenge($){let Q=new TextEncoder().encode($),X=await crypto.subtle.digest("SHA-256",Q);return this.base64URLEncode(new Uint8Array(X))}static async generatePKCEChallenge(){let $=this.generateCodeVerifier(),J=await this.generateCodeChallenge($);return{codeVerifier:$,codeChallenge:J,codeChallengeMethod:"S256"}}static base64URLEncode($){return btoa(String.fromCharCode(...$)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}}class BO{states=new Map;ttl=600000;generateState($){let J=crypto.randomUUID();return this.states.set(J,{timestamp:Date.now(),data:$}),this.cleanup(),J}validateState($){let J=this.states.get($);if(!J)return{valid:!1};if(Date.now()-J.timestamp>this.ttl)return this.states.delete($),{valid:!1};return this.states.delete($),{valid:!0,data:J.data}}cleanup(){let $=Date.now();for(let[J,Q]of this.states.entries())if($-Q.timestamp>this.ttl)this.states.delete(J)}}var Ab=w.object({code:w.string(),state:w.string(),error:w.string().optional(),error_description:w.string().optional()}),jb=w.object({accessToken:w.string(),refreshToken:w.string().optional(),expiresIn:w.number().optional(),tokenType:w.string(),scope:w.string().optional()}),gG=w.object({id:w.string(),email:w.string().optional(),name:w.string().optional(),username:w.string().optional(),avatar:w.string().optional(),provider:w.string()}).passthrough();function yG($){return(J,Q)=>{let X={provider:$.provider,config:$};S.defineOAuth(J,Q,X)}}function uG(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"oauth-user",required:!0})}}function mG(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"oauth-token",required:!0})}}function lG($){return $.get("oauth.user")||null}function cG($){return $.get("oauth.token")||null}function dG($){return $.get("oauth.authenticated")===!0}function pG($){return $.get("oauth.provider")||null}class FO{sessions=new Map;async get($){let J=this.sessions.get($);if(!J)return null;if(J.expiresAt&&J.expiresAt<new Date)return this.sessions.delete($),null;return J}async set($,J){this.sessions.set($,J)}async destroy($){this.sessions.delete($)}async touch($){let J=this.sessions.get($);if(J)J.updatedAt=new Date,this.sessions.set($,J)}async clear(){this.sessions.clear()}async length(){return this.sessions.size}async all(){return Array.from(this.sessions.values())}cleanup(){let $=new Date;for(let[J,Q]of this.sessions.entries())if(Q.expiresAt&&Q.expiresAt<$)this.sessions.delete(J)}}class zO{redis;prefix="sess:";constructor($,J){this.redis=$;if(J)this.prefix=J}async get($){let J=this.prefix+$,Q=await this.redis.get(J);if(!Q)return null;try{let X=JSON.parse(Q);if(X.createdAt=new Date(X.createdAt),X.updatedAt=new Date(X.updatedAt),X.expiresAt)X.expiresAt=new Date(X.expiresAt);return X}catch(X){return null}}async set($,J){let Q=this.prefix+$,X=JSON.stringify(J);if(J.expiresAt){let Y=Math.floor((J.expiresAt.getTime()-Date.now())/1000);if(Y>0)await this.redis.setex(Q,Y,X)}else await this.redis.set(Q,X)}async destroy($){let J=this.prefix+$;await this.redis.del(J)}async touch($){let J=await this.get($);if(J)J.updatedAt=new Date,await this.set($,J)}async clear(){let $=await this.redis.keys(this.prefix+"*");if($.length>0)await this.redis.del(...$)}async length(){return(await this.redis.keys(this.prefix+"*")).length}async all(){let $=await this.redis.keys(this.prefix+"*"),J=[];for(let Q of $){let X=await this.redis.get(Q);if(X)try{let Y=JSON.parse(X);if(Y.createdAt=new Date(Y.createdAt),Y.updatedAt=new Date(Y.updatedAt),Y.expiresAt)Y.expiresAt=new Date(Y.expiresAt);J.push(Y)}catch(Y){}}return J}}class Q7{store;config;constructor($,J){this.store=$;this.config={name:"sessionId",maxAge:86400000,secure:!1,httpOnly:!0,sameSite:"lax",path:"/",rolling:!1,genid:()=>crypto.randomUUID(),...J,domain:J.domain}}async createSession($,J={},Q){let X=this.config.genid(),Y=new Date,W=Q?.maxAge||this.config.maxAge,H={id:X,userId:$,data:J,createdAt:Y,updatedAt:Y,expiresAt:new Date(Y.getTime()+W),ipAddress:Q?.ipAddress,userAgent:Q?.userAgent,csrfToken:this.generateCSRFToken()};return await this.store.set(X,H),H}async getSession($){return await this.store.get($)}async updateSession($,J){let Q=await this.store.get($);if(!Q)return null;if(Q.data={...Q.data,...J},Q.updatedAt=new Date,this.config.rolling)Q.expiresAt=new Date(Date.now()+this.config.maxAge);return await this.store.set($,Q),Q}async touchSession($){if(this.config.rolling){let J=await this.store.get($);if(J)J.updatedAt=new Date,J.expiresAt=new Date(Date.now()+this.config.maxAge),await this.store.set($,J)}else await this.store.touch($)}async destroySession($){await this.store.destroy($)}async regenerateSession($){let J=await this.store.get($);if(!J)return null;let Q=this.config.genid(),X={...J,id:Q,updatedAt:new Date,csrfToken:this.generateCSRFToken()};return await this.store.set(Q,X),await this.store.destroy($),X}async getUserSessions($){return(await this.store.all()).filter((Q)=>Q.userId===$)}async destroyUserSessions($){let J=await this.getUserSessions($);for(let Q of J)await this.store.destroy(Q.id)}validateCSRFToken($,J){return $.csrfToken===J}generateCSRFToken(){return crypto.randomUUID()}getCookieOptions(){let $={maxAge:this.config.maxAge,secure:this.config.secure,httpOnly:this.config.httpOnly,sameSite:this.config.sameSite,path:this.config.path};if(this.config.domain)$.domain=this.config.domain;return $}getConfig(){return{...this.config}}getStore(){return this.store}}class NO{tokenStore=new Map;tokenTTL=3600000;generateToken($){let J=crypto.randomUUID(),Q=new Date(Date.now()+this.tokenTTL);return this.tokenStore.set($,{token:J,expiresAt:Q}),this.cleanup(),J}validateToken($,J){let Q=this.tokenStore.get($);if(!Q)return!1;if(Q.expiresAt<new Date)return this.tokenStore.delete($),!1;return Q.token===J}removeToken($){this.tokenStore.delete($)}cleanup(){let $=new Date;for(let[J,Q]of this.tokenStore.entries())if(Q.expiresAt<$)this.tokenStore.delete(J)}}var iG=w.object({id:w.string(),userId:w.string(),data:w.record(w.any()),createdAt:w.date(),updatedAt:w.date(),expiresAt:w.date().optional(),ipAddress:w.string().optional(),userAgent:w.string().optional(),csrfToken:w.string().optional()}),Zb=w.object({name:w.string().optional(),secret:w.string(),maxAge:w.number().optional(),secure:w.boolean().optional(),httpOnly:w.boolean().optional(),sameSite:w.enum(["strict","lax","none"]).optional(),domain:w.string().optional(),path:w.string().optional(),rolling:w.boolean().optional()}),Sb=w.object({userId:w.string(),data:w.record(w.any()).optional(),maxAge:w.number().optional(),ipAddress:w.string().optional(),userAgent:w.string().optional()}),Cb=w.object({data:w.record(w.any())});h1();function nG($={}){return(J,Q)=>{let X={config:$};S.defineSession(J,Q,X)}}function sG(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"current-session",required:!0})}}function Tb($){return(J,Q,X)=>{if(Q)S.defineParameter(J,Q,X,{index:X,type:"session-data",required:!1,metadata:{key:$}})}}function oG(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"csrf-token",required:!0})}}function rG(){return($,J)=>{S.defineCSRF($,J,{required:!0})}}function aG($,J){return async(Q,X)=>{let Y=$.getConfig(),W=G4(Q,Y.name),H=null;if(W){if(H=await $.getSession(W),H)await $.touchSession(W)}Q.set("session",H),Q.set("sessionManager",$),Q.set("csrfProtection",J),await X()}}class X7{sessionManager;csrfProtection;constructor($,J){this.sessionManager=$;this.csrfProtection=J}checkSession($,J){let Q=u0($);if(J.required&&!Q)throw new R0("Session required");if(Q&&J.csrf)this.checkCSRF($,Q)}checkCSRF($,J){if(!this.csrfProtection)throw Error("CSRF protection not configured");let Q=$.req.header("X-CSRF-Token")||$.req.query("_csrf");if(!Q)throw new E0("CSRF token required");if(!this.csrfProtection.validateToken(J.id,Q))throw new E0("Invalid CSRF token")}async createSession($,J,Q={}){let X=G2($);if(!X)throw Error("Session manager not available");let Y=$.req.header("X-Forwarded-For")||$.req.header("X-Real-IP")||"unknown",W=$.req.header("User-Agent")||"unknown",H=await X.createSession(J,Q,{ipAddress:Y,userAgent:W}),G=X.getCookieOptions();return V4($,X.getConfig().name,H.id,G),$.set("session",H),H}async updateSession($,J){let Q=u0($),X=G2($);if(!Q||!X)return null;let Y=await X.updateSession(Q.id,J);if(Y)$.set("session",Y);return Y}async destroySession($){let J=u0($),Q=G2($);if(!J||!Q)return;await Q.destroySession(J.id);let X=Q.getConfig();if(V4($,X.name,"",{...Q.getCookieOptions(),maxAge:0}),$.set("session",null),this.csrfProtection)this.csrfProtection.removeToken(J.id)}async regenerateSession($){let J=u0($),Q=G2($);if(!J||!Q)return null;let X=await Q.regenerateSession(J.id);if(X){let Y=Q.getCookieOptions();if(V4($,Q.getConfig().name,X.id,Y),$.set("session",X),this.csrfProtection)this.csrfProtection.removeToken(J.id),this.csrfProtection.generateToken(X.id)}return X}generateCSRFToken($){let J=u0($);if(!J||!this.csrfProtection)return null;return this.csrfProtection.generateToken(J.id)}}function u0($){return $.get("session")||null}function G2($){return $.get("sessionManager")||null}function tG($){return $.get("csrfProtection")||null}function eG($,J){let Q=u0($);if(!Q)return null;if(J)return Q.data[J];return Q.data}function $V($){return u0($)!==null}function JV($){return u0($)?.userId||null}function QV($,J,Q){let X=u0($);if(X)X.data[J]=Q,$.set("session",X)}function XV($,J){let Q=u0($);if(Q&&J in Q.data)delete Q.data[J],$.set("session",Q)}class m1{schema;constructor($){this.schema=$}validate($){if(this.schema)return this.schema.parse($);return $}validatePartial($){if(this.schema)try{return this.schema.parse($)}catch{return $}return $}async createMany($){let J=[];for(let Q of $)J.push(await this.create(Q));return J}async updateMany($,J){let Q=await this.findMany({where:$}),X=0;for(let Y of Q){let W=Y.id;if(W)await this.update(W,J),X++}return X}async deleteMany($){let J=await this.findMany({where:$}),Q=0;for(let X of J){let Y=X.id;if(Y&&await this.delete(Y))Q++}return Q}async findPaginated($){let{pagination:J,...Q}=$,{page:X,limit:Y}=J,W=(X-1)*Y,H=await this.count(Q.where),G=await this.findMany({...Q,pagination:{...J,offset:W}}),V=Math.ceil(H/Y);return{data:G,total:H,page:X,limit:Y,totalPages:V,hasNext:X<V,hasPrev:X>1}}async count($){return(await this.findMany({where:$})).length}async exists($){return await this.findOne({where:$})!==null}async withTransaction($){return $(this)}buildWhereClause($){if(!$)return{};return $}buildOrderByClause($){if(!$)return{};if(Array.isArray($))return $.reduce((J,Q)=>{return J[Q.field]=Q.direction,J},{});return{[$.field]:$.direction}}buildPaginationClause($){if(!$)return{};let J={};if($.limit)J.take=$.limit;if($.offset)J.skip=$.offset;return J}}class P1 extends m1{client;delegate;modelName;constructor($){super($.zodSchema);this.client=$.client,this.delegate=$.delegate,this.modelName=$.model}async create($){let J=this.validatePartial($),Q=await this.delegate.create({data:J});return this.validate(Q)}async findById($){let J=await this.delegate.findUnique({where:{id:$}});return J?this.validate(J):null}async findOne($){let J=this.buildPrismaFindOptions($),Q=await this.delegate.findFirst(J);return Q?this.validate(Q):null}async findMany($){let J=this.buildPrismaFindOptions($||{});return(await this.delegate.findMany(J)).map((X)=>this.validate(X))}async update($,J){let Q=this.validatePartial(J),X=await this.delegate.update({where:{id:$},data:Q});return this.validate(X)}async delete($){try{return await this.delegate.delete({where:{id:$}}),!0}catch(J){return!1}}async createMany($){let J=$.map((X)=>this.validatePartial(X));await this.delegate.create({data:J,skipDuplicates:!0});let Q=[];for(let X of J){let Y=await this.create(X);Q.push(Y)}return Q}async updateMany($,J){let Q=this.validatePartial(J);return(await this.delegate.updateMany({where:this.buildWhereClause($),data:Q})).count}async deleteMany($){return(await this.delegate.deleteMany({where:this.buildWhereClause($)})).count}async count($){return await this.delegate.count({where:$?this.buildWhereClause($):void 0})}async exists($){return await this.delegate.count({where:this.buildWhereClause($),take:1})>0}async findPaginated($){let{pagination:J,...Q}=$,{page:X,limit:Y}=J,W=(X-1)*Y,H=this.buildPrismaFindOptions(Q),[G,V]=await Promise.all([this.delegate.count({where:H.where}),this.delegate.findMany({...H,skip:W,take:Y})]),U=V.map((_)=>this.validate(_)),q=Math.ceil(G/Y);return{data:U,total:G,page:X,limit:Y,totalPages:q,hasNext:X<q,hasPrev:X>1}}async withTransaction($){return await this.client.$transaction(async(J)=>{let Q=new this.constructor({client:J,delegate:J[this.modelName.toLowerCase()],model:this.modelName,zodSchema:this.schema});return await $(Q)})}buildPrismaFindOptions($){let J={};if($.where)J.where=this.buildWhereClause($.where);if($.orderBy)J.orderBy=this.buildOrderByClause($.orderBy);if($.pagination){let Q=this.buildPaginationClause($.pagination);Object.assign(J,Q)}if($.include)J.include=$.include.reduce((Q,X)=>{return Q[X]=!0,Q},{});if($.select)J.select=$.select.reduce((Q,X)=>{return Q[X]=!0,Q},{});return J}buildWhereClause($){let J={};for(let[Q,X]of Object.entries($))if(X===null||X===void 0)J[Q]=null;else if(typeof X==="object"&&!Array.isArray(X))J[Q]=X;else if(Array.isArray(X))J[Q]={in:X};else J[Q]=X;return J}buildOrderByClause($){if(Array.isArray($))return $.map((J)=>({[J.field]:J.direction}));return{[$.field]:$.direction}}buildPaginationClause($){let J={};if($.limit)J.take=$.limit;if($.offset)J.skip=$.offset;return J}async aggregate($){let J={};if($.where)J.where=this.buildWhereClause($.where);if($._count)J._count=$._count;if($._avg)J._avg=$._avg;if($._sum)J._sum=$._sum;if($._min)J._min=$._min;if($._max)J._max=$._max;return await this.delegate.aggregate(J)}async groupBy($){let J={by:$.by};if($.where)J.where=this.buildWhereClause($.where);if($.having)J.having=this.buildWhereClause($.having);if($.orderBy)J.orderBy=this.buildOrderByClause($.orderBy);if($._count)J._count=$._count;if($._avg)J._avg=$._avg;if($._sum)J._sum=$._sum;if($._min)J._min=$._min;if($._max)J._max=$._max;return await this.delegate.groupBy(J)}}class K1 extends m1{dataSource;repository;entity;constructor($){super($.zodSchema);this.dataSource=$.dataSource,this.repository=$.repository,this.entity=$.entity}async create($){let J=this.validatePartial($),Q=this.repository.create(J),X=await this.repository.save(Q);return this.validate(X)}async findById($){let J=await this.repository.findOneBy({id:$});return J?this.validate(J):null}async findOne($){let J=this.buildTypeORMFindOptions($),Q=await this.repository.findOne(J);return Q?this.validate(Q):null}async findMany($){let J=this.buildTypeORMFindOptions($||{});return(await this.repository.find(J)).map((X)=>this.validate(X))}async update($,J){let Q=this.validatePartial(J),X=await this.repository.findOneBy({id:$});if(!X)throw Error(`Entity with id ${$} not found`);let Y=this.repository.merge(X,Q),W=await this.repository.save(Y);return this.validate(W)}async delete($){return((await this.repository.delete({id:$})).affected||0)>0}async createMany($){let Q=$.map((Y)=>this.validatePartial(Y)).map((Y)=>this.repository.create(Y));return(await this.repository.save(Q)).map((Y)=>this.validate(Y))}async updateMany($,J){let Q=this.validatePartial(J),X=this.buildWhereClause($);return(await this.repository.update(X,Q)).affected||0}async deleteMany($){let J=this.buildWhereClause($);return(await this.repository.delete(J)).affected||0}async count($){let J=$?{where:this.buildWhereClause($)}:{};return await this.repository.count(J)}async exists($){return await this.repository.count({where:this.buildWhereClause($),take:1})>0}async findPaginated($){let{pagination:J,...Q}=$,{page:X,limit:Y}=J,W=(X-1)*Y,H=this.buildTypeORMFindOptions(Q);H.skip=W,H.take=Y;let[G,V]=await this.repository.createQueryBuilder("entity").where(H.where||{}).orderBy(H.order||{}).skip(W).take(Y).getManyAndCount(),U=G.map((_)=>this.validate(_)),q=Math.ceil(V/Y);return{data:U,total:V,page:X,limit:Y,totalPages:q,hasNext:X<q,hasPrev:X>1}}async withTransaction($){return await this.dataSource.transaction(async(J)=>{let Q=J.getRepository?J.getRepository(this.entity):this.repository,X=new this.constructor({dataSource:this.dataSource,repository:Q,entity:this.entity,zodSchema:this.schema});return await $(X)})}buildTypeORMFindOptions($){let J={};if($.where)J.where=this.buildWhereClause($.where);if($.orderBy)J.order=this.buildOrderByClause($.orderBy);if($.pagination){if($.pagination.limit)J.take=$.pagination.limit;if($.pagination.offset)J.skip=$.pagination.offset}if($.include)J.relations=$.include;if($.select)J.select=$.select.reduce((Q,X)=>{return Q[X]=!0,Q},{});return J}buildWhereClause($){let J={};for(let[Q,X]of Object.entries($))if(X===null||X===void 0)J[Q]=null;else if(typeof X==="object"&&!Array.isArray(X))if("gt"in X)J[Q]={$gt:X.gt};else if("gte"in X)J[Q]={$gte:X.gte};else if("lt"in X)J[Q]={$lt:X.lt};else if("lte"in X)J[Q]={$lte:X.lte};else if("like"in X)J[Q]={$like:X.like};else if("in"in X)J[Q]={$in:X.in};else J[Q]=X;else if(Array.isArray(X))J[Q]={$in:X};else J[Q]=X;return J}buildOrderByClause($){if(Array.isArray($))return $.reduce((J,Q)=>{return J[Q.field]=Q.direction.toUpperCase(),J},{});return{[$.field]:$.direction.toUpperCase()}}createQueryBuilder($){return this.repository.createQueryBuilder($)}async query($,J){return await this.dataSource.manager.query($,J)}async softDelete($){try{if(this.dataSource.getMetadata(this.entity).columns.some((X)=>X.propertyName==="deletedAt"))return((await this.repository.update({id:$},{deletedAt:new Date})).affected||0)>0;else return await this.delete($)}catch(J){return!1}}async restore($){try{return((await this.repository.update({id:$},{deletedAt:null})).affected||0)>0}catch(J){return!1}}async findWithRelations($,J){let Q=await this.repository.findOne({where:{id:$},relations:J});return Q?this.validate(Q):null}async bulkInsert($){let J=$.map((Y)=>this.validatePartial(Y)),X=this.repository.createQueryBuilder().insert();if(X)await X.into(this.entity).values(J).execute();else await this.createMany($)}async upsert($,J){let Q=this.validatePartial($);try{let X=this.repository.create(Q),Y=await this.repository.save(X);return this.validate(Y)}catch(X){let Y=J.reduce((H,G)=>{if(G in Q)H[G]=Q[G];return H},{}),W=await this.repository.findOneBy(Y);if(W){let H=this.repository.merge(W,Q),G=await this.repository.save(H);return this.validate(G)}throw X}}}class m0 extends m1{database;table;operators;constructor($){super($.zodSchema);this.database=$.database,this.table=$.table,this.operators=this.initializeOperators()}initializeOperators(){return{eq:($,J)=>({type:"eq",column:$,value:J}),ne:($,J)=>({type:"ne",column:$,value:J}),gt:($,J)=>({type:"gt",column:$,value:J}),gte:($,J)=>({type:"gte",column:$,value:J}),lt:($,J)=>({type:"lt",column:$,value:J}),lte:($,J)=>({type:"lte",column:$,value:J}),like:($,J)=>({type:"like",column:$,value:J}),ilike:($,J)=>({type:"ilike",column:$,value:J}),inArray:($,J)=>({type:"in",column:$,values:J}),notInArray:($,J)=>({type:"notIn",column:$,values:J}),isNull:($)=>({type:"isNull",column:$}),isNotNull:($)=>({type:"isNotNull",column:$}),between:($,J,Q)=>({type:"between",column:$,min:J,max:Q}),and:(...$)=>({type:"and",conditions:$}),or:(...$)=>({type:"or",conditions:$}),not:($)=>({type:"not",condition:$})}}async create($){let J=this.validatePartial($),Q=await this.database.insert(this.table).values(J).returning().execute();return this.validate(Q[0])}async findById($){let J=this.getPrimaryKeyColumn(),Q=await this.database.select().from(this.table).where(this.operators.eq(J,$)).execute();return Q.length>0?this.validate(Q[0]):null}async findOne($){let J=this.database.select().from(this.table);if($.where)J=J.where(this.buildWhereClause($.where));if($.orderBy)J=J.orderBy(...this.buildOrderByClause($.orderBy));J=J.limit(1);let Q=await J.execute();return Q.length>0?this.validate(Q[0]):null}async findMany($){let J=this.database.select().from(this.table);if($?.where)J=J.where(this.buildWhereClause($.where));if($?.orderBy)J=J.orderBy(...this.buildOrderByClause($.orderBy));if($?.pagination){if($.pagination.limit)J=J.limit($.pagination.limit);if($.pagination.offset)J=J.offset($.pagination.offset)}return(await J.execute()).map((X)=>this.validate(X))}async update($,J){let Q=this.validatePartial(J),X=this.getPrimaryKeyColumn(),Y=await this.database.update(this.table).set(Q).where(this.operators.eq(X,$)).returning().execute();if(Y.length===0)throw Error(`Entity with id ${$} not found`);return this.validate(Y[0])}async delete($){let J=this.getPrimaryKeyColumn();return(await this.database.delete(this.table).where(this.operators.eq(J,$)).execute()).rowsAffected>0}async createMany($){let J=$.map((X)=>this.validatePartial(X));return(await this.database.insert(this.table).values(J).returning().execute()).map((X)=>this.validate(X))}async updateMany($,J){let Q=this.validatePartial(J),X=this.buildWhereClause($);return(await this.database.update(this.table).set(Q).where(X).execute()).rowsAffected}async deleteMany($){let J=this.buildWhereClause($);return(await this.database.delete(this.table).where(J).execute()).rowsAffected}async count($){let J=this.database.select({count:"COUNT(*)"}).from(this.table);if($)J=J.where(this.buildWhereClause($));return(await J.execute())[0]?.count||0}async exists($){return await this.count($)>0}async findPaginated($){let{pagination:J,...Q}=$,{page:X,limit:Y}=J,W=(X-1)*Y,H=this.database.select().from(this.table),G=this.database.select({count:"COUNT(*)"}).from(this.table);if(Q.where){let B=this.buildWhereClause(Q.where);H=H.where(B),G=G.where(B)}if(Q.orderBy)H=H.orderBy(...this.buildOrderByClause(Q.orderBy));H=H.limit(Y).offset(W);let[V,U]=await Promise.all([H.execute(),G.execute()]),q=U[0]?.count||0,_=V.map((B)=>this.validate(B)),F=Math.ceil(q/Y);return{data:_,total:q,page:X,limit:Y,totalPages:F,hasNext:X<F,hasPrev:X>1}}async withTransaction($){return await this.database.transaction(async(J)=>{let Q=new this.constructor({database:J,table:this.table,zodSchema:this.schema});return await $(Q)})}buildWhereClause($){let J=[];for(let[Q,X]of Object.entries($)){let Y=this.getColumn(Q);if(X===null||X===void 0)J.push(this.operators.isNull(Y));else if(typeof X==="object"&&!Array.isArray(X))if("gt"in X)J.push(this.operators.gt(Y,X.gt));else if("gte"in X)J.push(this.operators.gte(Y,X.gte));else if("lt"in X)J.push(this.operators.lt(Y,X.lt));else if("lte"in X)J.push(this.operators.lte(Y,X.lte));else if("like"in X)J.push(this.operators.like(Y,X.like));else if("ilike"in X)J.push(this.operators.ilike(Y,X.ilike));else if("in"in X)J.push(this.operators.inArray(Y,X.in));else if("notIn"in X)J.push(this.operators.notInArray(Y,X.notIn));else if("between"in X&&Array.isArray(X.between)&&X.between.length===2)J.push(this.operators.between(Y,X.between[0],X.between[1]));else J.push(this.operators.eq(Y,X));else if(Array.isArray(X))J.push(this.operators.inArray(Y,X));else J.push(this.operators.eq(Y,X))}return J.length===1?J[0]:this.operators.and(...J)}buildOrderByClause($){if(Array.isArray($))return $.map((Q)=>{let X=this.getColumn(Q.field);return Q.direction==="desc"?{column:X,direction:"desc"}:X});let J=this.getColumn($.field);return $.direction==="desc"?[{column:J,direction:"desc"}]:[J]}getPrimaryKeyColumn(){for(let[$,J]of Object.entries(this.table._.columns))if(J._.isPrimaryKey)return this.table[$];return this.table.id||this.table._.columns.id}getColumn($){return this.table[$]||this.table._.columns[$]}async rawQuery($,J){return await this.database.execute({sql:$,params:J})}async upsert($,J){let Q=this.validatePartial($),X=J.map((W)=>this.getColumn(W)),Y=await this.database.insert(this.table).values(Q).onConflictDoUpdate({target:X,set:Q}).returning().execute();return this.validate(Y[0])}async bulkUpsert($,J){let Q=$.map((W)=>this.validatePartial(W)),X=J.map((W)=>this.getColumn(W));return(await this.database.insert(this.table).values(Q).onConflictDoUpdate({target:X,set:Q[0]}).returning().execute()).map((W)=>this.validate(W))}async findWithSelect($,J){let Q=J.reduce((Y,W)=>{return Y[W]=this.getColumn(W),Y},{}),X=this.database.select(Q).from(this.table);if($.where)X=X.where(this.buildWhereClause($.where));if($.orderBy)X=X.orderBy(...this.buildOrderByClause($.orderBy));if($.pagination){if($.pagination.limit)X=X.limit($.pagination.limit);if($.pagination.offset)X=X.offset($.pagination.offset)}return await X.execute()}async aggregate($){let J={};if($.count)J.count="COUNT(*)";if($.sum)for(let X of $.sum)J[`sum_${X}`]=`SUM(${X})`;if($.avg)for(let X of $.avg)J[`avg_${X}`]=`AVG(${X})`;if($.min)for(let X of $.min)J[`min_${X}`]=`MIN(${X})`;if($.max)for(let X of $.max)J[`max_${X}`]=`MAX(${X})`;let Q=this.database.select(J).from(this.table);if($.where)Q=Q.where(this.buildWhereClause($.where));if($.groupBy){let X=$.groupBy.map((Y)=>this.getColumn(Y));Q=Q.groupBy(...X)}if($.having)Q=Q.having(this.buildWhereClause($.having));return await Q.execute()}}class N${static instance;constructor(){}static getInstance(){if(!N$.instance)N$.instance=new N$;return N$.instance}createRepository($,J){switch($){case"prisma":return new P1(J);case"typeorm":return new K1(J);case"drizzle":return new m0(J);default:throw Error(`Unsupported repository type: ${$}`)}}createPrismaRepository($){return new P1($)}createTypeORMRepository($){return new K1($)}createDrizzleRepository($){return new m0($)}}class B6{repositories=new Map;factory;constructor(){this.factory=N$.getInstance()}register($,J){this.repositories.set($,J)}get($){return this.repositories.get($)}createAndRegister($,J,Q){let X=this.factory.createRepository(J,Q);return this.register($,X),X}remove($){return this.repositories.delete($)}getNames(){return Array.from(this.repositories.keys())}clear(){this.repositories.clear()}size(){return this.repositories.size}}function wO($,J,Q){return(X,Y)=>{let W={type:"generic-repository",name:$,ormType:J,options:Q};Reflect.defineMetadata("inject",W,X,Y)}}function AO($){return class extends ${repositories=new B6;getRepository(J){return this.repositories.get(J)}createRepository(J,Q,X){return this.repositories.createAndRegister(J,Q,X)}async withRepositories(J,Q){let X=new Map;for(let W of J){let H=this.repositories.get(W);if(H)X.set(W,H)}let Y=X.values().next().value;if(Y&&typeof Y.withTransaction==="function")return await Y.withTransaction(async()=>{return await Q(X)});return await Q(X)}}}class YV{repositories=new B6;constructor(){this.initializeRepositories()}getRepository($){let J=this.repositories.get($);if(!J)throw Error(`Repository '${$}' not found`);return J}async executeInTransaction($,J){let Q=new Map;for(let Y of $){let W=this.repositories.get(Y);if(W)Q.set(Y,W)}let X=Q.values().next().value;if(X&&typeof X.withTransaction==="function")return await X.withTransaction(async()=>{return await J(Q)});return await J(Q)}}var jO=new B6;class a4{executor;operators;selectFields;whereConditions=[];orderByClause;limitCount;offsetCount;groupByFields;havingConditions=[];joins=[];constructor($,J=new Y7){this.executor=$;this.operators=J}select($){return this.selectFields=$,this}where($){let J=this.buildFilterCondition($);return this.whereConditions.push(J),this}orderBy($){return this.orderByClause=$,this}limit($){return this.limitCount=$,this}offset($){return this.offsetCount=$,this}groupBy($){return this.groupByFields=$,this}having($){let J=this.buildFilterCondition($);return this.havingConditions.push(J),this}join($,J){return this.joins.push({type:"JOIN",table:$,condition:J}),this}leftJoin($,J){return this.joins.push({type:"LEFT JOIN",table:$,condition:J}),this}rightJoin($,J){return this.joins.push({type:"RIGHT JOIN",table:$,condition:J}),this}innerJoin($,J){return this.joins.push({type:"INNER JOIN",table:$,condition:J}),this}async execute(){let $=this.buildQuery();return await this.executor.execute($)}async first(){let $=this.limitCount;this.limit(1);let J=await this.execute();return this.limitCount=$,J.length>0?J[0]:null}async count(){let $=this.buildCountQuery();return await this.executor.count($)}async exists(){return await this.count()>0}buildFilterCondition($){let J=[];for(let[Q,X]of Object.entries($))if(X===null||X===void 0)J.push({type:"isNull",field:Q});else if(typeof X==="object"&&!Array.isArray(X))for(let[Y,W]of Object.entries(X))switch(Y){case"eq":J.push({type:"eq",field:Q,value:W});break;case"ne":J.push({type:"ne",field:Q,value:W});break;case"gt":J.push({type:"gt",field:Q,value:W});break;case"gte":J.push({type:"gte",field:Q,value:W});break;case"lt":J.push({type:"lt",field:Q,value:W});break;case"lte":J.push({type:"lte",field:Q,value:W});break;case"like":J.push({type:"like",field:Q,pattern:W});break;case"ilike":J.push({type:"ilike",field:Q,pattern:W});break;case"in":J.push({type:"in",field:Q,values:W});break;case"notIn":J.push({type:"notIn",field:Q,values:W});break;case"between":if(Array.isArray(W)&&W.length===2)J.push({type:"between",field:Q,min:W[0],max:W[1]});break}else if(Array.isArray(X))J.push({type:"in",field:Q,values:X});else J.push({type:"eq",field:Q,value:X});return J.length===1?J[0]:{type:"and",conditions:J}}buildQuery(){return{select:this.selectFields,where:this.whereConditions.length>0?this.whereConditions.length===1?this.whereConditions[0]:{type:"and",conditions:this.whereConditions}:void 0,orderBy:this.orderByClause,limit:this.limitCount,offset:this.offsetCount,groupBy:this.groupByFields,having:this.havingConditions.length>0?this.havingConditions.length===1?this.havingConditions[0]:{type:"and",conditions:this.havingConditions}:void 0,joins:this.joins}}buildCountQuery(){return{select:["COUNT(*) as count"],where:this.whereConditions.length>0?this.whereConditions.length===1?this.whereConditions[0]:{type:"and",conditions:this.whereConditions}:void 0,joins:this.joins}}}class Y7{eq($){return{type:"eq",value:$}}ne($){return{type:"ne",value:$}}gt($){return{type:"gt",value:$}}gte($){return{type:"gte",value:$}}lt($){return{type:"lt",value:$}}lte($){return{type:"lte",value:$}}like($){return{type:"like",pattern:$}}ilike($){return{type:"ilike",pattern:$}}in($){return{type:"in",values:$}}notIn($){return{type:"notIn",values:$}}between($,J){return{type:"between",min:$,max:J}}isNull(){return{type:"isNull"}}isNotNull(){return{type:"isNotNull"}}and(...$){return{type:"and",conditions:$}}or(...$){return{type:"or",conditions:$}}not($){return{type:"not",condition:$}}}class WV{static create($){return new a4($)}static createWithOperators($,J){return new a4($,J)}}class l1{static calculateMeta($,J,Q){if(Q<=0)throw Error("Limit must be greater than 0");let X=Math.ceil($/Q),Y=l1.calculateOffset(J,Q);return{total:$,page:J,limit:Q,totalPages:X,hasNext:J<X,hasPrev:J>1,firstPage:1,lastPage:X,from:$===0?0:Y+1,to:Math.min(Y+Q,$)}}static calculateOffset($,J){return($-1)*J}static calculatePage($,J){return Math.floor($/J)+1}static validatePagination($,J){if($<1)throw Error("Page must be greater than 0");if(J<1)throw Error("Limit must be greater than 0");if(J>1000)throw Error("Limit cannot exceed 1000")}static createPaginatedResult($,J,Q,X){let Y=this.calculateMeta(J,Q,X);return{data:$,total:Y.total,page:Y.page,limit:Y.limit,totalPages:Y.totalPages,hasNext:Y.hasNext,hasPrev:Y.hasPrev}}static parsePaginationQuery($,J=10,Q=100){let X=parseInt($.page,10),Y=parseInt($.limit,10),W=Number.isFinite(X)&&X>=1?X:1,H=Number.isFinite(Y)&&Y>=1?Math.min(Y,Q):J;return{page:W,limit:H}}static extractPaginationFromQuery($){let J=parseInt($.page)||1,Q=parseInt($.limit)||10;return this.validatePagination(J,Q),{page:J,limit:Q}}}class W7{static encodeCursor($){return Buffer.from(JSON.stringify($)).toString("base64")}static decodeCursor($){try{return JSON.parse(Buffer.from($,"base64").toString())}catch(J){throw Error("Invalid cursor format")}}static createCursor($,J="id"){let Q=$[J];if(Q===void 0||Q===null)throw Error(`Cursor field '${J}' not found in entity`);return this.encodeCursor({[J]:Q})}static extractCursorValue($,J="id"){return this.decodeCursor($)[J]}static createCursorPaginatedResult($,J,Q="id",X=!1){let Y=$.length>J,W=X,H=Y?$.slice(0,J):$,G,V;if(H.length>0){if(Y)G=this.createCursor(H[H.length-1],Q);if(W)V=this.createCursor(H[0],Q)}return{data:H,nextCursor:G,prevCursor:V,hasNext:Y,hasPrev:W,limit:J,count:H.length}}static createMultiCursor($,J){let Q={};for(let X of J){if($[X]===void 0||$[X]===null)throw Error(`Cursor field '${X}' is missing from entity`);Q[X]=$[X]}return this.encodeCursor(Q)}static decodeMultiCursor($){return this.decodeCursor($)}}class HV{baseQuery;options={};constructor($={}){this.baseQuery=$;this.options={...$}}offset($,J){return l1.validatePagination($,J),this.options.pagination={page:$,limit:J,offset:l1.calculateOffset($,J)},this}cursor($,J,Q="id"){if(J<1||J>1000)throw Error("Limit must be between 1 and 1000");let X=W7.extractCursorValue($,Q);return this.options.where={...this.options.where,[Q]:{gt:X}},this.options.pagination={limit:J},this}orderBy($,J="asc"){return this.options.orderBy={field:$,direction:J},this}orderByMultiple($){return this.options.orderBy=$.map((J)=>({field:J.field,direction:J.direction})),this}where($){return this.options.where={...this.options.where,...$},this}select($){return this.options.select=$,this}include($){return this.options.include=$,this}build(){return this.options}reset(){return this.options={...this.baseQuery},this}}function EO($=10,J=100){return function(Q,X,Y){let W=Y.value;return Y.value=async function(...H){let G=H[H.length-1];if(G&&typeof G==="object"&&(("page"in G)||("limit"in G))){let V=G.page||1,U=Math.min(G.limit||$,J);l1.validatePagination(V,U),G.pagination={page:V,limit:U,offset:l1.calculateOffset(V,U)}}return await W.apply(this,H)},Y}}function LO($,J,Q,X){let Y=l1.calculateMeta(J,Q,X);return{data:$,meta:Y}}function OO($,J=20,Q=100){let X=parseInt($.limit,10),Y=Number.isFinite(X)&&X>=1?Math.min(X,Q):J;return{cursor:typeof $.cursor==="string"&&$.cursor.length>0?$.cursor:void 0,limit:Y}}class GV{static toApiResponse($,J){return{data:$.data,meta:{total:$.total,page:$.page,limit:$.limit,totalPages:$.totalPages},links:{first:J?`${J}?page=1&limit=${$.limit}`:null,last:J?`${J}?page=${$.totalPages}&limit=${$.limit}`:null,prev:$.hasPrev&&J?`${J}?page=${$.page-1}&limit=${$.limit}`:null,next:$.hasNext&&J?`${J}?page=${$.page+1}&limit=${$.limit}`:null}}}static toCursorApiResponse($,J){let Q={data:$.data,meta:{limit:$.limit,hasNext:$.hasNext,hasPrev:$.hasPrev},cursors:{next:$.nextCursor,prev:$.prevCursor}};if(J)Q.links={next:$.nextCursor?`${J}?cursor=${$.nextCursor}&limit=${$.limit}`:null,prev:$.prevCursor?`${J}?cursor=${$.prevCursor}&limit=${$.limit}`:null};return Q}}c0();c0();var Vf=w1(X$(),1);function UV($,J){return(Q)=>{let X={entity:$,connection:J,transactional:!1};Reflect.defineMetadata("repository",X,Q)}}function qV($){return(J,Q,X)=>{let Y=X.value,W={isolation:$?.isolation||"READ_COMMITTED",timeout:$?.timeout||30000,readOnly:$?.readOnly||!1,propagation:$?.propagation||"REQUIRED"};return Reflect.defineMetadata("transactional",W,J,Q),X.value=async function(...H){return await I1().handleTransactional(this,Q,H,Y,H.find((V)=>V&&typeof V==="object"&&V.req&&V.res))},X}}function _V($){return(J)=>{let Q={tableName:$||J.name.toLowerCase()};Reflect.defineMetadata("entity",Q,J)}}function DV($){return(J,Q)=>{let X={name:$?.name||Q.toString(),type:$?.type||"string",nullable:$?.nullable||!1,unique:$?.unique||!1,primary:$?.primary||!1};Reflect.defineMetadata("column",X,J,Q)}}c0();class c1{static instance;constructor(){}static getInstance(){if(!c1.instance)c1.instance=new c1;return c1.instance}async intercept($,J,Q,X,Y){let W=I1();if(Reflect.getMetadata("transactional",$,J))return await W.handleTransactional($,J,Q,X,Y);return await X.apply($,Q)}createTransactionalProxy($,J){return new Proxy($,{get:(Q,X)=>{let Y=Q[X];if(typeof Y==="function")return async(...W)=>{return await this.intercept(Q,X,W,Y.bind(Q),J)};return Y}})}}function H7(){return async($,J)=>{let Q=c1.getInstance();$.set("transactionInterceptor",Q),$.set("transactionContext",$),await J()}}function BV($){return $.get("transactionInterceptor")||c1.getInstance()}function RO($,J){return BV($).createTransactionalProxy(J,$)}var FV;((H)=>{H.REQUIRED="REQUIRED";H.REQUIRES_NEW="REQUIRES_NEW";H.SUPPORTS="SUPPORTS";H.NOT_SUPPORTED="NOT_SUPPORTED";H.MANDATORY="MANDATORY";H.NEVER="NEVER"})(FV||={});class zV{shouldStartNewTransaction($,J){switch($){case"REQUIRED":return!J;case"REQUIRES_NEW":return!0;case"SUPPORTS":return!1;case"NOT_SUPPORTED":return!1;case"MANDATORY":if(!J)throw Error("Transaction is mandatory but no existing transaction found");return!1;case"NEVER":if(J)throw Error("Transaction is not allowed but existing transaction found");return!1;default:return!J}}shouldSuspendTransaction($,J){return $==="NOT_SUPPORTED"&&!!J}shouldExecuteInTransaction($,J){switch($){case"REQUIRED":case"REQUIRES_NEW":case"MANDATORY":return!0;case"SUPPORTS":return!!J;case"NOT_SUPPORTED":case"NEVER":return!1;default:return!0}}shouldRollbackForError($,J){if(J.noRollbackFor){for(let Q of J.noRollbackFor)if($ instanceof Q)return!1}if(J.rollbackFor){for(let Q of J.rollbackFor)if($ instanceof Q)return!0;return!1}return!0}}function A$($){return(J,Q,X)=>{let Y=X.value,W={isolation:$?.isolation||"READ_COMMITTED",timeout:$?.timeout||30000,readOnly:$?.readOnly||!1,propagation:$?.propagation||"REQUIRED",rollbackFor:$?.rollbackFor,noRollbackFor:$?.noRollbackFor};return Reflect.defineMetadata("transactional",W,J,Q),X.value=async function(...H){let{getGlobalTransactionManager:G}=await Promise.resolve().then(() => (c0(),VV));return await G().handleTransactional(this,Q,H,Y,H.find((U)=>U&&typeof U==="object"&&U.req&&U.res))},X}}function ZO($){return A$({...$,propagation:"REQUIRED"})}function SO($){return A$({...$,propagation:"REQUIRES_NEW"})}function CO($){return A$({...$,propagation:"SUPPORTS"})}function MO($){return A$({...$,propagation:"NOT_SUPPORTED"})}function PO($){return A$({...$,propagation:"MANDATORY"})}function KO($){return A$({...$,propagation:"NEVER"})}var NV;((q)=>{q.BEFORE_BEGIN="BEFORE_BEGIN";q.AFTER_BEGIN="AFTER_BEGIN";q.BEFORE_COMMIT="BEFORE_COMMIT";q.AFTER_COMMIT="AFTER_COMMIT";q.BEFORE_ROLLBACK="BEFORE_ROLLBACK";q.AFTER_ROLLBACK="AFTER_ROLLBACK";q.BEFORE_SAVEPOINT="BEFORE_SAVEPOINT";q.AFTER_SAVEPOINT="AFTER_SAVEPOINT";q.BEFORE_ROLLBACK_TO_SAVEPOINT="BEFORE_ROLLBACK_TO_SAVEPOINT";q.AFTER_ROLLBACK_TO_SAVEPOINT="AFTER_ROLLBACK_TO_SAVEPOINT"})(NV||={});class G7{listeners=[];beginListeners=[];commitListeners=[];rollbackListeners=[];savepointListeners=[];addListener($){this.listeners.push($)}removeListener($){let J=this.listeners.indexOf($);if(J>-1)this.listeners.splice(J,1)}addBeginListener($){this.beginListeners.push($)}addCommitListener($){this.commitListeners.push($)}addRollbackListener($){this.rollbackListeners.push($)}addSavepointListener($){this.savepointListeners.push($)}async emitEvent($){for(let J of this.listeners)try{await J.onTransactionEvent($)}catch(Q){console.error("Error in transaction event listener:",Q)}await this.emitSpecificEvent($)}async emitSpecificEvent($){switch($.type){case"BEFORE_BEGIN":for(let J of this.beginListeners)if(J.onBeforeBegin)try{await J.onBeforeBegin($.context)}catch(Q){console.error("Error in before begin listener:",Q)}break;case"AFTER_BEGIN":for(let J of this.beginListeners)if(J.onAfterBegin)try{await J.onAfterBegin($.context)}catch(Q){console.error("Error in after begin listener:",Q)}break;case"BEFORE_COMMIT":for(let J of this.commitListeners)if(J.onBeforeCommit)try{await J.onBeforeCommit($.context)}catch(Q){console.error("Error in before commit listener:",Q)}break;case"AFTER_COMMIT":for(let J of this.commitListeners)if(J.onAfterCommit)try{await J.onAfterCommit($.context)}catch(Q){console.error("Error in after commit listener:",Q)}break;case"BEFORE_ROLLBACK":for(let J of this.rollbackListeners)if(J.onBeforeRollback)try{await J.onBeforeRollback($.context,$.error)}catch(Q){console.error("Error in before rollback listener:",Q)}break;case"AFTER_ROLLBACK":for(let J of this.rollbackListeners)if(J.onAfterRollback)try{await J.onAfterRollback($.context,$.error)}catch(Q){console.error("Error in after rollback listener:",Q)}break;case"BEFORE_SAVEPOINT":for(let J of this.savepointListeners)if(J.onBeforeSavepoint)try{await J.onBeforeSavepoint($.context,$.metadata?.name)}catch(Q){console.error("Error in before savepoint listener:",Q)}break;case"AFTER_SAVEPOINT":for(let J of this.savepointListeners)if(J.onAfterSavepoint)try{await J.onAfterSavepoint($.context,$.metadata?.name)}catch(Q){console.error("Error in after savepoint listener:",Q)}break;case"BEFORE_ROLLBACK_TO_SAVEPOINT":for(let J of this.savepointListeners)if(J.onBeforeRollbackToSavepoint)try{await J.onBeforeRollbackToSavepoint($.context,$.metadata?.name)}catch(Q){console.error("Error in before rollback to savepoint listener:",Q)}break;case"AFTER_ROLLBACK_TO_SAVEPOINT":for(let J of this.savepointListeners)if(J.onAfterRollbackToSavepoint)try{await J.onAfterRollbackToSavepoint($.context,$.metadata?.name)}catch(Q){console.error("Error in after rollback to savepoint listener:",Q)}break}}clearAllListeners(){this.listeners=[],this.beginListeners=[],this.commitListeners=[],this.rollbackListeners=[],this.savepointListeners=[]}}function IO(){return($,J)=>{Reflect.defineMetadata("transaction-event","begin",$,J)}}function TO(){return($,J)=>{Reflect.defineMetadata("transaction-event","commit",$,J)}}function bO(){return($,J)=>{Reflect.defineMetadata("transaction-event","rollback",$,J)}}class e4{logger;constructor($=console.log){this.logger=$}async onTransactionEvent($){let J=`Transaction ${$.type}: ${$.context.id}`,Q={timestamp:$.timestamp,context:{id:$.context.id,startTime:$.context.startTime,isolation:$.context.isolation,timeout:$.context.timeout,readOnly:$.context.readOnly,savepoints:$.context.savepoints,rollbackOnly:$.context.rollbackOnly},metadata:$.metadata,error:$.error?.message};this.logger(J,Q)}}class $8{metrics={totalTransactions:0,committedTransactions:0,rolledBackTransactions:0,averageDuration:0,totalDuration:0};async onTransactionEvent($){switch($.type){case"AFTER_BEGIN":this.metrics.totalTransactions++;break;case"AFTER_COMMIT":this.metrics.committedTransactions++,this.updateDuration($.context);break;case"AFTER_ROLLBACK":this.metrics.rolledBackTransactions++,this.updateDuration($.context);break}}updateDuration($){let J=Date.now()-$.startTime.getTime();this.metrics.totalDuration+=J,this.metrics.averageDuration=this.metrics.totalDuration/(this.metrics.committedTransactions+this.metrics.rolledBackTransactions)}getMetrics(){return{...this.metrics}}resetMetrics(){this.metrics={totalTransactions:0,committedTransactions:0,rolledBackTransactions:0,averageDuration:0,totalDuration:0}}}var j$=new G7;c0();class V7{name="transaction";version="1.0.0";config;metricsListener;constructor($){this.config={enableLogging:!0,enableMetrics:!0,defaultIsolation:"READ_COMMITTED",defaultTimeout:30000,...$}}async install($){this.setupTransactionManager(),$.use(H7()),this.setupEventListeners(),this.registerTransactionUtilities($),console.log("✅ Transaction plugin installed successfully")}setupTransactionManager(){if(this.config.customTransactionManager)l0(this.config.customTransactionManager);else l0(new w$)}setupEventListeners(){if(this.config.enableLogging){let $=new e4;j$.addListener($)}if(this.config.enableMetrics)this.metricsListener=new $8,j$.addListener(this.metricsListener)}registerTransactionUtilities($){let J=$.getContainer();class Q{}class X{}class Y{}if(J.register(Q,{scope:"singleton",factory:()=>j$}),this.metricsListener)J.register(X,{scope:"singleton",factory:()=>({getMetrics:()=>this.metricsListener.getMetrics(),resetMetrics:()=>this.metricsListener.resetMetrics()})});J.register(Y,{scope:"singleton",factory:()=>({executeInTransaction:async(W)=>{let H=I1(),G=await H.begin();try{let V=await W();if(G.rollbackOnly)throw await H.rollback(G),Error("Transaction marked for rollback");return await H.commit(G),V}catch(V){throw await H.rollback(G),V}},getCurrentTransaction:()=>{return null},isInTransaction:()=>{return!1}})})}getMetrics(){return this.metricsListener?.getMetrics()}resetMetrics(){this.metricsListener?.resetMetrics()}addEventListener($){j$.addListener($)}removeEventListener($){j$.removeListener($)}}function fO($){return new V7($)}class wV{transactionManager;constructor($){this.transactionManager=$}async executeInTransaction($){let J=await this.transactionManager.begin();try{let Q=await $();if(J.rollbackOnly)throw await this.transactionManager.rollback(J),Error("Transaction marked for rollback");return await this.transactionManager.commit(J),Q}catch(Q){throw await this.transactionManager.rollback(J),Q}}async createSavepoint($){}async rollbackToSavepoint($){}setRollbackOnly(){}isInTransaction(){return!1}}class AV{transactionManager;defaultOptions;constructor($,J){this.transactionManager=$;this.defaultOptions=J}async execute($,J){let Q={...this.defaultOptions,...J},X=await this.transactionManager.begin(Q);try{let Y=await $();if(X.rollbackOnly)throw await this.transactionManager.rollback(X),Error("Transaction marked for rollback");return await this.transactionManager.commit(X),Y}catch(Y){throw await this.transactionManager.rollback(X),Y}}async executeReadOnly($){return this.execute($,{readOnly:!0})}async executeWithIsolation($,J){return this.execute($,{isolation:J})}}class V2{modelSchemas=new Map;generateModelSchema($){if(this.modelSchemas.has($.name))return this.modelSchemas.get($.name);let J={};for(let X of $.fields)J[X.name]=this.generateFieldSchema(X);let Q=w.object(J);return this.modelSchemas.set($.name,Q),Q}generateFieldSchema($){let J=this.getBaseSchema($.type);if($.isList)J=w.array(J);if($.isOptional)J=J.optional();if($.isUnique)J=J.describe(`Unique field: ${$.name}`);return J}getBaseSchema($){switch($.toLowerCase()){case"string":return w.string();case"int":case"integer":return w.number().int();case"float":case"decimal":return w.number();case"boolean":case"bool":return w.boolean();case"datetime":case"timestamp":return w.date();case"json":return w.record(w.any());case"bytes":return w.instanceof(Buffer);case"bigint":return w.bigint();default:return w.string()}}generateCreateSchema($){let J={};for(let Q of $.fields){if(Q.isId&&Q.hasDefaultValue)continue;if(Q.name==="createdAt"||Q.name==="updatedAt")continue;J[Q.name]=this.generateFieldSchema(Q)}return w.object(J)}generateUpdateSchema($){let J={};for(let Q of $.fields){if(Q.isId)continue;if(Q.name==="updatedAt")continue;let X=this.generateFieldSchema(Q);if(!X.isOptional())X=X.optional();J[Q.name]=X}return w.object(J)}static parsePrismaSchema($){let J=[],Q=$.split(`
|
|
153
|
+
`).map((G)=>G.trim())}return J.json(H,X)}return p$(J,W,X,this.format)}isDevelopmentMode(){return this.isDevelopment}setDevelopmentMode($){this.isDevelopment=$}}class t2{plugins=new Map;installed=new Set;register($){if(this.plugins.has($.name))throw Error(`Plugin "${$.name}" is already registered`);this.plugins.set($.name,$)}async install($){let J=this.resolveInstallOrder();for(let Q of J)await this.plugins.get(Q).install($),this.installed.add(Q)}isInstalled($){return this.installed.has($)}getPlugin($){return this.plugins.get($)}getPluginNames(){return Array.from(this.plugins.keys())}resolveInstallOrder(){let $=new Set,J=new Set,Q=[],X=(Y,W=[])=>{if(J.has(Y)){let G=[...W,Y].join(" -> ");throw Error(`Circular dependency detected in plugins: ${G}`)}if($.has(Y))return;J.add(Y);let H=this.plugins.get(Y);if(!H)throw Error(`Plugin "${Y}" is not registered`);if(H.dependencies)for(let G of H.dependencies){if(!this.plugins.has(G))throw Error(`Plugin "${Y}" depends on "${G}" which is not registered`);X(G,[...W,Y])}J.delete(Y),$.add(Y),Q.push(Y)};for(let Y of this.plugins.keys())X(Y);return Q}}class D${hono;metadata;container;validator;errorHandler;compiler;pluginManager;config;compiled=!1;globalMiddleware=[];groupPrefix="";constructor($){if(this.config={adapter:"hono",title:"Veloce-TS API",version:"1.0.0",docs:!0,...$},this.hono=new W5,this.metadata=new S,this.container=new s2,this.validator=new W$,this.errorHandler=new a2(void 0,{errorResponseFormat:this.config.errorResponseFormat}),this.pluginManager=new t2,this.compiler=new r2(this.hono,this.metadata,this.container,this.validator,this.errorHandler),this.config.cors)if(this.config.cors===!0)this.useCors();else this.useCors(this.config.cors)}include($){if(S.hasWebSocketMetadata($)){let X=S.getWebSocketMetadata($);if(X?.path)this.metadata.registerWebSocket(X);return}let J=S.getControllerMetadata($);if(J)this.metadata.registerController($,J);let Q=S.getRouteMethods($);for(let X of Q){let Y=S.getRouteMetadata($.prototype,X),W=S.getParameterMetadata($.prototype,X),H=S.getDependencyMetadata($.prototype,X);if(Y&&Y.method&&Y.path!==void 0){let G=J?.prefix||"",V=this.normalizePath(G,Y.path);this.metadata.registerRoute({...Y,target:$,propertyKey:X,method:Y.method,path:V,middleware:[...J?.middleware||[],...Y.middleware||[]],parameters:W||Y.parameters||[],dependencies:H||Y.dependencies||[],responses:Y.responses||[],docs:Y.docs})}}}get($,J){this.registerFunctionalRoute("GET",$,J)}post($,J){this.registerFunctionalRoute("POST",$,J)}put($,J){this.registerFunctionalRoute("PUT",$,J)}delete($,J){this.registerFunctionalRoute("DELETE",$,J)}patch($,J){this.registerFunctionalRoute("PATCH",$,J)}route($){return new uX(this,$)}group($,J){let Q=this.groupPrefix;this.groupPrefix=this.normalizePath(this.groupPrefix,$),J(),this.groupPrefix=Q}registerFunctionalRoute($,J,Q){let X=this.normalizePath(this.groupPrefix,J),Y={target:yX,propertyKey:`${$.toLowerCase()}_${X}`,method:$,path:X,middleware:Q.middleware||[],parameters:this.extractParametersFromSchema(Q.schema),dependencies:[],responses:Q.responses||[],docs:Q.docs,handler:Q.handler};this.metadata.registerRoute(Y)}extractParametersFromSchema($){let J=[],Q=0;if($?.body)J.push({index:Q++,type:"body",schema:$.body,required:!0});if($?.query)J.push({index:Q++,type:"query",schema:$.query,required:!1});if($?.params)J.push({index:Q++,type:"param",schema:$.params,required:!0});if($?.headers)J.push({index:Q++,type:"header",schema:$.headers,required:!1});return J}use($){this.globalMiddleware.push($),this.hono.use("*",$)}useCors($){let J=z2($);this.use(J)}useRateLimit($){let J=d1($);this.use(J)}useCompression($){let J=N2($);this.use(J)}usePlugin($){this.pluginManager.register($)}getPluginManager(){return this.pluginManager}onError($){this.errorHandler.setCustomHandler($)}getErrorHandler(){return this.errorHandler}normalizePath(...$){let J=$.filter((Q)=>Q!=="").join("/").replace(/\/+/g,"/").replace(/\/$/,"");return J.startsWith("/")?J:`/${J}`}getHono(){return this.hono}getMetadata(){return this.metadata}getContainer(){return this.container}getCompiler(){return this.compiler}getConfig(){return this.config}isCompiled(){return this.compiled}markCompiled(){this.compiled=!0}async compile(){if(this.compiled){console.warn("Routes have already been compiled. Skipping compilation.");return}await this.pluginManager.install(this),this.compiler.compile(),this.compiled=!0}serverInstance=null;shutdownHandlersRegistered=!1;async listen($,J){if(!this.compiled)await this.compile();let Q=this.createAdapter();return this.serverInstance=Q.listen($,J),this.setupGracefulShutdown(),this.serverInstance}setupGracefulShutdown(){if(typeof process>"u")return;if(this.shutdownHandlersRegistered)return;this.shutdownHandlersRegistered=!0;let $=async(J)=>{let Q=v0().child({component:"app"});if(Q.info(`Received ${J}, starting graceful shutdown...`),this.serverInstance&&typeof this.serverInstance.close==="function")try{await Promise.resolve(this.serverInstance.close()),Q.info("Server closed gracefully")}catch(X){Q.error("Error during shutdown",X)}process.exit(0)};process.on("SIGTERM",()=>$("SIGTERM")),process.on("SIGINT",()=>$("SIGINT"))}async shutdown(){if(this.serverInstance&&typeof this.serverInstance.close==="function")await Promise.resolve(this.serverInstance.close()),this.serverInstance=null}createAdapter(){let $=this.config.adapter||"hono";switch($){case"hono":{let{HonoAdapter:J}=T0(V8);return new J(this.hono)}case"express":{let{ExpressAdapter:J}=T0(S7);return new J(this)}case"native":{let{HonoAdapter:J}=T0(V8);return new J(this.hono)}default:throw Error(`Unknown adapter type: ${$}. Supported adapters: 'hono', 'express', 'native'`)}}}class yX{}class uX{app;path;constructor($,J){this.app=$;this.path=J}get($){return this.app.get(this.path,$),this}post($){return this.app.post(this.path,$),this}put($){return this.app.put(this.path,$),this}delete($){return this.app.delete(this.path,$),this}patch($){return this.app.patch(this.path,$),this}}function z4($){let J={docs:!1,cors:!1,...$};return new D$(J)}function U5($,J,Q,X){let Y=$.getContainer(),W=typeof Q==="function"?Q:()=>Q;Y.register(J,{scope:X?.scope||"singleton",factory:W})}function N4($){return new H$($)}async function q5($,J){let Q=z4(J);await $(Q),await Q.compile();let X=N4(Q);return{app:Q,client:X}}function _5($){$.getContainer().clear()}var kO={};Z0(kO,{zodToJsonSchema:()=>n6,zodToGraphQLType:()=>J1,zodObjectToGraphQLType:()=>xQ,zodObjectToGraphQLInput:()=>vQ,z:()=>w,withRepositoryMixin:()=>AO,transactionMiddleware:()=>H7,toLegacyErrorBody:()=>P9,setupTestApp:()=>q5,setSessionData:()=>QV,setRequestMetadata:()=>K7,setRequestContext:()=>_8,setGlobalTransactionManager:()=>l0,setCache:()=>_9,sendErrorResponse:()=>p$,resolveProblemType:()=>d$,resolveProblemTitle:()=>S1,requestLoggingMiddleware:()=>MB,removeSessionData:()=>XV,registerDrizzle:()=>tX,problemTypeUri:()=>B1,parseTTL:()=>r1,parseCursorQuery:()=>OO,paginate:()=>LO,mockDependency:()=>U5,mergeVeloceCorsHeaders:()=>j1,isSessionAuthenticated:()=>$V,isOAuthAuthenticated:()=>dG,isNullable:()=>Y$,isAuthenticated:()=>JO,invalidateCache:()=>B9,initializeRequestContext:()=>w2,initializeLogger:()=>CB,hasResolverMetadata:()=>fQ,hasFieldMetadata:()=>kQ,globalTransactionEventManager:()=>j$,globalRepositoryRegistry:()=>jO,getUserRoles:()=>J7,getUserPermissions:()=>xG,getTransactionInterceptor:()=>BV,getToken:()=>t5,getSessionUserId:()=>JV,getSessionManager:()=>G2,getSessionData:()=>eG,getResolverMetadata:()=>IQ,getRequestMetadata:()=>I7,getRequestId:()=>C7,getRequestDuration:()=>A2,getRequestContext:()=>E1,getRBACManager:()=>kG,getOAuthUser:()=>lG,getOAuthToken:()=>cG,getOAuthProvider:()=>pG,getLogger:()=>v0,getGlobalTransactionManager:()=>I1,getFieldsMetadata:()=>TQ,getFieldMetadata:()=>bQ,getDefaultValue:()=>o6,getCurrentUser:()=>N1,getCurrentSession:()=>u0,getCache:()=>q9,getCSRFProtection:()=>tG,getAuthError:()=>QO,getArgumentsMetadata:()=>v2,getAbortSignal:()=>M7,generateRequestId:()=>q8,errorLoggingMiddleware:()=>PB,deleteCache:()=>D9,createTypeORMPlugin:()=>LV,createTransactionalProxy:()=>RO,createTransactionPlugin:()=>fO,createTestClient:()=>N4,createTestApp:()=>z4,createSimpleRequestIdMiddleware:()=>V9,createSessionMiddleware:()=>aG,createRequestContextMiddleware:()=>G9,createRedisCacheStore:()=>RV,createRateLimitMiddleware:()=>d1,createRBACMiddleware:()=>$7,createPrismaPlugin:()=>EV,createLogger:()=>H9,createDefaultRBAC:()=>r5,createCorsMiddleware:()=>z2,createCompressionMiddleware:()=>N2,createChildLogger:()=>o1,createCacheMiddleware:()=>N9,createCacheInvalidationMiddleware:()=>w9,createAuthMiddleware:()=>a5,clearMocks:()=>_5,clearCache:()=>F9,cleanupRequestContext:()=>j2,checkUserRole:()=>GO,checkUserPermission:()=>VO,buildProblemInstance:()=>M9,abortRequest:()=>P7,ZodToJsonSchemaConverter:()=>Z1,WebSocketPlugin:()=>l$,WebSocketManager:()=>m$,WebSocketConnection:()=>Q$,WebSocket:()=>c9,VeloceTS:()=>D$,Veloce:()=>D$,ValidationException:()=>C1,ValidationEngine:()=>W$,VELOCE_CORS_HEADERS_KEY:()=>U8,UseMiddleware:()=>hz,UnprocessableEntityException:()=>pQ,UnauthorizedException:()=>uQ,TypeORMTransactionManager:()=>z6,TypeORMRepository:()=>K1,TypeORMPlugin:()=>Q8,TypeORMEntity:()=>OV,TransactionalWithPropagation:()=>A$,Transactional:()=>qV,TransactionTemplate:()=>AV,TransactionService:()=>wV,TransactionPropagationManager:()=>zV,TransactionPropagation:()=>FV,TransactionPlugin:()=>V7,TransactionMetricsListener:()=>$8,TransactionLoggingListener:()=>e4,TransactionInterceptor:()=>c1,TransactionEventType:()=>NV,TransactionEventManager:()=>G7,TooManyRequestsException:()=>iQ,TokenRevokedException:()=>V5,TokenPayloadSchema:()=>iL,TokenExpiredException:()=>o2,Token:()=>$O,Timeout:()=>fz,TestResponse:()=>m2,TestClient:()=>H$,Tags:()=>mz,Tag:()=>uz,Supports:()=>CO,SuperAdminOnly:()=>WO,Summary:()=>gz,Subscription:()=>MQ,StreamResponse:()=>B4,SessionManager:()=>Q7,SessionGuard:()=>X7,SessionDataSchema:()=>iG,Session:()=>nG,ServiceUnavailableException:()=>nQ,RouterCompiler:()=>r2,Roles:()=>bG,RoleSchema:()=>oL,RoleAssignmentSchema:()=>rL,ResponseSerializer:()=>F4,ResponseSchema:()=>bz,Response:()=>G5,Resolver:()=>ZQ,RequiresNew:()=>SO,Required:()=>ZO,RequireRole:()=>e5,RequirePermission:()=>XO,RequireCSRF:()=>rG,RequestId:()=>sX,Req:()=>iX,RepositoryService:()=>YV,RepositoryRegistry:()=>B6,RepositoryFactory:()=>N$,Repository:()=>UV,RefreshRequestSchema:()=>sL,RedisCacheStore:()=>Y8,RedirectResponse:()=>_4,RateLimit:()=>kz,RBACPlugin:()=>vG,RBACManager:()=>W2,RBACGuard:()=>D6,QueryBuilderFactory:()=>WV,QueryBuilder:()=>a4,Query:()=>lX,Put:()=>Mz,PrismaZodSchemaGenerator:()=>V2,PrismaTransactionManager:()=>F6,PrismaRepository:()=>P1,PrismaPlugin:()=>J8,Post:()=>Cz,PluginManager:()=>t2,Permissions:()=>fG,PermissionMatcher:()=>H2,PermissionCheckSchema:()=>aL,PayloadTooLargeException:()=>dQ,Patch:()=>Kz,Param:()=>cX,PaginationTransformer:()=>GV,PaginationHelper:()=>l1,PaginationBuilder:()=>HV,Paginated:()=>EO,PROBLEM_JSON_MEDIA_TYPE:()=>hQ,OpenAPIPlugin:()=>s6,OpenAPIGenerator:()=>D1,OnTransactionRollback:()=>bO,OnTransactionCommit:()=>TO,OnTransactionBegin:()=>IO,OnMessage:()=>p9,OnDisconnect:()=>i9,OnConnect:()=>d9,OAuthUserSchema:()=>gG,OAuthUser:()=>uG,OAuthToken:()=>mG,OAuth:()=>yG,NotSupported:()=>MO,NotFoundException:()=>yQ,Never:()=>KO,Mutation:()=>CQ,MinimumRole:()=>HO,Migration:()=>U7,MetadataRegistry:()=>S,MetadataCompiler:()=>M1,MemoryCacheStore:()=>S2,Mandatory:()=>PO,LoginRequestSchema:()=>nL,JWTProvider:()=>o4,JSONResponse:()=>U4,InvalidTokenException:()=>_$,InjectDB:()=>eX,Inject:()=>vz,InMemoryUserProvider:()=>TG,InMemoryTransactionManager:()=>w$,HttpCode:()=>Tz,HonoAdapter:()=>j6,HealthCheckers:()=>I9,HealthCheckPlugin:()=>a6,Header:()=>dX,HTTPException:()=>j0,HTMLResponse:()=>q4,GraphQLSubscription:()=>MQ,GraphQLSchemaBuilder:()=>h2,GraphQLQuery:()=>SQ,GraphQLPlugin:()=>g2,GraphQLMutation:()=>CQ,GraphQLCtx:()=>KQ,GoneException:()=>cQ,Get:()=>Sz,GenericRepository:()=>wO,GQLSubscription:()=>MQ,GQLQuery:()=>SQ,GQLMutation:()=>CQ,GQLContext:()=>KQ,ForbiddenException:()=>mQ,FileResponse:()=>D4,FastAPITS:()=>D$,ExpressAdapter:()=>F2,ErrorHandler:()=>a2,Entity:()=>_V,DrizzleZodSchemaConverter:()=>X8,DrizzleTransactionManager:()=>N6,DrizzleRepository:()=>m0,DrizzlePlugin:()=>q7,Description:()=>yz,Deprecated:()=>lz,Depends:()=>xz,Delete:()=>Pz,DefaultQueryOperators:()=>Y7,DIContainer:()=>s2,DEFAULT_PROBLEM_TYPE_BASE:()=>gQ,DB_TOKEN:()=>w4,CursorPaginationHelper:()=>W7,CurrentUser:()=>eL,CurrentSession:()=>sG,Ctx:()=>nX,Cookie:()=>pX,Controller:()=>Zz,ConflictException:()=>lQ,Column:()=>DV,CacheManager:()=>k0,CacheInvalidate:()=>aX,Cache:()=>rX,CSRFToken:()=>oG,Body:()=>mX,BaseTransactionManager:()=>Y1,BaseRepository:()=>m1,BadRequestException:()=>r6,AuthorizationException:()=>E0,AuthenticationException:()=>R0,AuthService:()=>_6,AuthPlugin:()=>hG,Auth:()=>tL,Arg:()=>PQ,ApiResponse:()=>dz,ApiDoc:()=>cz,All:()=>Iz,AdminOnly:()=>YO,AbortSignal:()=>oX});module.exports=T0(kO);var gk=w1(X$(),1);function Zz($="",J){return(Q)=>{let X=$.trim();if(X&&!X.startsWith("/"))X="/"+X;if(X.endsWith("/"))X=X.slice(0,-1);S.defineController(Q,{prefix:X,middleware:J?.middleware||[]})}}function r$($){return(J="")=>{return(Q,X)=>{let Y=J.trim();if(Y&&!Y.startsWith("/"))Y="/"+Y;let W=Reflect.getMetadata("route:middleware",Q,X)||[];S.defineRoute(Q,X,{method:$,path:Y,middleware:W,parameters:[],dependencies:[],responses:[]})}}}var Sz=r$("GET"),Cz=r$("POST"),Mz=r$("PUT"),Pz=r$("DELETE"),Kz=r$("PATCH"),Iz=r$("ALL");function Tz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,statusCode:$})}}function bz($,J=200){return(Q,X)=>{let Y=S.getRouteMetadata(Q,X),W=(Y?.responses??[]).filter((H)=>H.statusCode!==J);W.push({statusCode:J,schema:$,description:void 0}),S.defineRoute(Q,X,{...Y,responseSchema:$,responses:W})}}function fz($,J){let Q=async(X,Y)=>{let W,H=new Promise((G,V)=>{W=setTimeout(()=>{V(Object.assign(Error(J??`Request timed out after ${$}ms`),{name:"TimeoutError",statusCode:408}))},$)});try{X.header("X-Timeout-Ms",String($)),await Promise.race([Y(),H])}finally{if(W!==void 0)clearTimeout(W)}};return(X,Y)=>{let W=S.getRouteMetadata(X,Y),H=Reflect.getMetadata("route:middleware",X,Y)||[];Reflect.defineMetadata("route:middleware",[Q,...H],X,Y),S.defineRoute(X,Y,{...W,middleware:[Q,...W?.middleware||[]]})}}function kz($){let J=d1($);return(Q,X)=>{let Y=S.getRouteMetadata(Q,X),W=Reflect.getMetadata("route:middleware",Q,X)||[];Reflect.defineMetadata("route:middleware",[J,...W],Q,X),S.defineRoute(Q,X,{...Y,middleware:[J,...Y?.middleware||[]]})}}function mX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"body",schema:$,required:!0};S.defineParameter(J,Q,X,Y)}}function lX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"query",required:!1};if(typeof $==="string")Y.name=$;else if($)Y.schema=$;S.defineParameter(J,Q,X,Y)}}function cX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"param",name:$,required:!0};S.defineParameter(J,Q,X,Y)}}function dX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"header",name:$,required:!1};S.defineParameter(J,Q,X,Y)}}function pX($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"cookie",name:$,required:!1};S.defineParameter(J,Q,X,Y)}}function iX(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"request",required:!0};S.defineParameter($,J,Q,X)}}function nX(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"context",required:!0};S.defineParameter($,J,Q,X)}}function sX(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"request-id",required:!1};S.defineParameter($,J,Q,X)}}function oX(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"abort-signal",required:!1};S.defineParameter($,J,Q,X)}}function xz($,J="request"){return(Q,X,Y)=>{if(X===void 0)S.defineDependency(Q.prototype,"constructor",Y,{index:Y,provider:$,scope:J});else S.defineDependency(Q,X,Y,{index:Y,provider:$,scope:J})}}function vz($,J="singleton"){return(Q,X,Y)=>{if(X===void 0)S.defineDependency(Q.prototype,"constructor",Y,{index:Y,provider:$,scope:J});else S.defineDependency(Q,X,Y,{index:Y,provider:$,scope:J})}}function hz(...$){return(J,Q)=>{let X=Reflect.getMetadata("route:middleware",J,Q)||[];Reflect.defineMetadata("route:middleware",[...X,...$],J,Q);let Y=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...Y,middleware:[...Y?.middleware||[],...$]})}}function gz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,summary:$}})}}function yz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,description:$}})}}function uz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q),Y=X?.docs?.tags??[];if(!Y.includes($))S.defineRoute(J,Q,{...X,docs:{...X?.docs,tags:[...Y,$]}})}}function mz(...$){return(J,Q)=>{let X=S.getRouteMetadata(J,Q),Y=X?.docs?.tags??[],W=Array.from(new Set([...Y,...$]));S.defineRoute(J,Q,{...X,docs:{...X?.docs,tags:W}})}}function lz(){return($,J)=>{let Q=S.getRouteMetadata($,J);S.defineRoute($,J,{...Q,docs:{...Q?.docs,deprecated:!0}})}}function cz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,...$}})}}function dz($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q),Y=X?.responses||[],W=Y.findIndex((G)=>G.statusCode===$.statusCode),H;if(W>=0)H=[...Y],H[W]=$;else H=[...Y,$];S.defineRoute(J,Q,{...X,responses:H})}}function rX($){return(J,Q)=>{Reflect.defineMetadata("cache:options",$,J,Q);let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,cache:$})}}function aX($){return(J,Q)=>{let X=Array.isArray($)?$:[$];Reflect.defineMetadata("cache:invalidate",X,J,Q);let Y=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...Y,cacheInvalidate:X})}}var w4=Symbol("veloce:db");function tX($,J,Q=w4){$.getContainer().register(Q,{scope:"singleton",factory:()=>J})}function eX($=w4){return(J,Q,X)=>{if(Q===void 0)S.defineDependency(J.prototype,"constructor",X,{index:X,provider:$,scope:"singleton"});else S.defineDependency(J,Q,X,{index:X,provider:$,scope:"singleton"})}}i$();n$();h1();var u1=w1(IG(),1);class o4{config;blacklistedTokens=new Set;constructor($){this.config=$;if(!$.secret)throw Error("JWT secret is required")}generateTokens($){let J=Math.floor(Date.now()/1000),Q=this.parseExpiration(this.config.expiresIn||"1h"),X={sub:$.sub,...$,iat:J,exp:J+Q,iss:this.config.issuer,aud:this.config.audience},Y=u1.sign(X,this.config.secret,{algorithm:this.config.algorithm||"HS256"}),W={sub:$.sub,type:"refresh",iat:J,exp:J+this.parseExpiration(this.config.refreshExpiresIn||"7d"),iss:this.config.issuer,aud:this.config.audience},H=u1.sign(W,this.config.refreshSecret||this.config.secret,{algorithm:this.config.algorithm||"HS256"});return{accessToken:Y,refreshToken:H,expiresIn:Q}}verifyAccessToken($){if(this.isBlacklisted($))throw Error("Token has been revoked");try{return u1.verify($,this.config.secret,{algorithms:[this.config.algorithm||"HS256"],issuer:this.config.issuer,audience:this.config.audience})}catch(J){if(J instanceof Error)throw Error(`Invalid token: ${J.message}`);throw Error("Invalid token")}}verifyRefreshToken($){if(this.isBlacklisted($))throw Error("Refresh token has been revoked");try{let J=u1.verify($,this.config.refreshSecret||this.config.secret,{algorithms:[this.config.algorithm||"HS256"],issuer:this.config.issuer,audience:this.config.audience});if(J.type!=="refresh")throw Error("Invalid refresh token type");return J}catch(J){if(J instanceof Error)throw Error(`Invalid refresh token: ${J.message}`);throw Error("Invalid refresh token")}}refreshAccessToken($){let J=this.verifyRefreshToken($);return this.blacklistToken($),this.generateTokens({sub:J.sub,...Object.fromEntries(Object.entries(J).filter(([Q])=>!["iat","exp","iss","aud","type"].includes(Q)))})}decodeToken($){try{return u1.decode($)}catch{return null}}blacklistToken($){this.blacklistedTokens.add($),this.cleanupBlacklist()}isBlacklisted($){return this.blacklistedTokens.has($)}cleanupBlacklist(){let $=Math.floor(Date.now()/1000);for(let J of this.blacklistedTokens){let Q=this.decodeToken(J);if(Q&&Q.exp&&Q.exp<$)this.blacklistedTokens.delete(J)}}parseExpiration($){if(typeof $==="number")return $;let J={s:1,m:60,h:3600,d:86400,w:604800},Q=$.match(/^(\d+)([smhdw])$/);if(!Q)throw Error(`Invalid expiration format: ${$}`);let[,X,Y]=Q;return parseInt(X)*J[Y]}}var iL=w.object({sub:w.string(),iat:w.number().optional(),exp:w.number().optional(),iss:w.string().optional(),aud:w.string().optional()}).passthrough(),nL=w.object({username:w.string().min(1),password:w.string().min(1)}),sL=w.object({refreshToken:w.string().min(1)});h1();class _6{config;userProvider;jwtProvider;constructor($,J){this.config=$;this.userProvider=J;this.jwtProvider=new o4($)}async login($,J){let Q=await this.userProvider.findByCredentials($,J);if(!Q)throw new R0("Invalid credentials");let X=this.jwtProvider.generateTokens({sub:Q.id,username:Q.username,email:Q.email,roles:Q.roles||[],permissions:Q.permissions||[]});return{user:Q,tokens:X}}async refresh($){try{return this.jwtProvider.refreshAccessToken($)}catch(J){throw new _$(J instanceof Error?J.message:"Invalid refresh token")}}async logout($,J){if(this.jwtProvider.blacklistToken($),J)this.jwtProvider.blacklistToken(J)}async verifyToken($){try{let J=this.jwtProvider.verifyAccessToken($),Q=await this.userProvider.findById(J.sub);if(!Q)throw new R0("User not found");return Q}catch(J){if(J instanceof Error){if(J.message.includes("expired"))throw new o2;throw new _$(J.message)}throw new _$("Token verification failed")}}getUserFromToken($){return this.jwtProvider.verifyAccessToken($)}hasRoles($,J){let Q=$.roles||[];return J.every((X)=>Q.includes(X))}hasPermissions($,J){let Q=$.permissions||[];return J.every((X)=>Q.includes(X))}async register($){if(!this.userProvider.createUser)throw Error("UserProvider does not support user creation");let J=await this.userProvider.createUser($),Q=this.jwtProvider.generateTokens({sub:J.id,username:J.username,email:J.email,roles:J.roles||[],permissions:J.permissions||[]});return{user:J,tokens:Q}}cleanup(){this.jwtProvider.cleanupBlacklist()}getJWTProvider(){return this.jwtProvider}}class TG{users=new Map;async findByCredentials($,J){for(let[Q,X]of this.users)if(X.username===$){if(await this.verifyPassword(J,X.passwordHash)){let{passwordHash:W,...H}=X;return H}}return null}async findById($){let J=this.users.get($);if(J){let{passwordHash:Q,...X}=J;return X}return null}async hashPassword($){return Buffer.from($).toString("base64")}async verifyPassword($,J){return await this.hashPassword($)===J}async createUser($){let J=crypto.randomUUID(),Q=await this.hashPassword($.password),X={id:J,username:$.username,email:$.email,roles:$.roles||["user"],passwordHash:Q};this.users.set(J,X);let{passwordHash:Y,...W}=X;return W}}class W2{roles=new Map;hierarchy=new Map;compiledPermissions=new Map;defineRole($){if(this.roles.set($.name,$),$.inherits&&$.inherits.length>0)this.hierarchy.set($.name,$.inherits);this.compiledPermissions.clear()}defineRoles($){for(let J of $)this.defineRole(J)}getRolePermissions($){if(this.compiledPermissions.has($))return Array.from(this.compiledPermissions.get($));let J=new Set;return this.collectPermissions($,J,new Set),this.compiledPermissions.set($,J),Array.from(J)}roleHasPermission($,J){return this.getRolePermissions($).includes(J)}userHasPermission($,J){for(let Q of $)if(this.roleHasPermission(Q,J))return!0;return!1}userHasRoles($,J){return J.every((Q)=>$.includes(Q))}userHasAnyRole($,J){return J.some((Q)=>$.includes(Q))}getRolesWithPermission($){let J=[];for(let Q of this.roles.keys())if(this.roleHasPermission(Q,$))J.push(Q);return J}getRoleHierarchy($){let J=[];return this.collectParentRoles($,J,new Set),J}roleInheritsFrom($,J){return this.getRoleHierarchy($).includes(J)}getAllRoles(){return Array.from(this.roles.values())}getRole($){return this.roles.get($)}roleExists($){return this.roles.has($)}validateRoles($){let J=[],Q=[];for(let X of $)if(this.roleExists(X))J.push(X);else Q.push(X);return{valid:J,invalid:Q}}getEffectiveRoles($){let J=new Set;for(let Q of $)J.add(Q),this.getRoleHierarchy(Q).forEach((Y)=>J.add(Y));return Array.from(J)}compareRoleLevels($,J){let Q=this.getRole($),X=this.getRole(J),Y=Q?.level??0,W=X?.level??0;return Y-W}getHighestRoleLevel($){let J=0;for(let Q of $){let X=this.getRole(Q);if(X&&X.level&&X.level>J)J=X.level}return J}collectPermissions($,J,Q){if(Q.has($))throw Error(`Circular role inheritance detected: ${$}`);Q.add($);let X=this.roles.get($);if(!X)throw Error(`Role not found: ${$}`);X.permissions.forEach((W)=>J.add(W));let Y=this.hierarchy.get($)||[];for(let W of Y)this.collectPermissions(W,J,new Set(Q))}collectParentRoles($,J,Q){if(Q.has($))return;Q.add($);let X=this.hierarchy.get($)||[];for(let Y of X)J.push(Y),this.collectParentRoles(Y,J,Q)}}function r5(){let $=new W2;return $.defineRoles([{name:"guest",description:"Guest user with minimal permissions",permissions:["read:public"],level:1},{name:"user",description:"Regular authenticated user",permissions:["read:own","write:own","read:public"],inherits:["guest"],level:10},{name:"moderator",description:"Moderator with content management permissions",permissions:["read:all","write:all","moderate:content"],inherits:["user"],level:50},{name:"admin",description:"Administrator with full system access",permissions:["*"],inherits:["moderator"],level:100},{name:"super-admin",description:"Super administrator with unrestricted access",permissions:["*","system:*"],inherits:["admin"],level:1000}]),$}var oL=w.object({name:w.string().min(1),description:w.string().optional(),permissions:w.array(w.string()),inherits:w.array(w.string()).optional(),level:w.number().optional()}),rL=w.object({userId:w.string(),roles:w.array(w.string())}),aL=w.object({userId:w.string(),permission:w.string()});class H2{static matches($,J){if(J==="*")return!0;if(J.endsWith("*")){let Q=J.slice(0,-1);return $.startsWith(Q)}return $===J}static hasPermission($,J){return $.some((Q)=>this.matches(J,Q))}static filterByPattern($,J){return $.filter((Q)=>this.matches(Q,J))}}function tL($){return(J,Q)=>{let X={required:!$?.optional,config:$};S.defineAuth(J,Q,X)}}function eL(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"current-user",required:!1})}}function $O(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"token",required:!1})}}function a5($){return async(J,Q)=>{let X=J.req.header("Authorization");if(!X||!X.startsWith("Bearer "))J.set("auth.error","Missing or invalid Authorization header"),J.set("auth.authenticated",!1);else{let Y=X.substring(7);try{let W=$.verifyAccessToken(Y);J.set("auth.user",W),J.set("auth.token",Y),J.set("auth.authenticated",!0)}catch(W){J.set("auth.error",W instanceof Error?W.message:"Authentication failed"),J.set("auth.authenticated",!1)}}await Q()}}function N1($){return $.get("auth.user")||null}function t5($){return $.get("auth.token")||null}function JO($){return $.get("auth.authenticated")===!0}function QO($){return $.get("auth.error")||null}h1();function bG($){return(J,Q)=>{let Y={config:Array.isArray($)?{roles:$,requireAll:!1,allowInherited:!0}:{requireAll:!1,allowInherited:!0,...$}};S.defineRoles(J,Q,Y)}}function fG($){return(J,Q)=>{let Y={config:Array.isArray($)?{permissions:$,requireAll:!1}:{requireAll:!1,...$}};S.definePermissions(J,Q,Y)}}function e5($){return bG([$])}function XO($){return fG([$])}function YO(){return e5("admin")}function WO(){return e5("super-admin")}function HO($){return(J,Q)=>{S.defineMinimumRole(J,Q,{roleName:$})}}function $7($){return async(J,Q)=>{J.set("rbac",$),await Q()}}class D6{rbac;constructor($){this.rbac=$}checkRoles($,J){let Q=N1($);if(!Q)throw new E0("Authentication required for role check");let X=Q.roles||[],Y=J.allowInherited?this.rbac.getEffectiveRoles(X):X,W;if(J.requireAll)W=J.roles.every((H)=>Y.includes(H));else W=J.roles.some((H)=>Y.includes(H));if(!W){let H=J.requireAll?"all":"any";throw new E0(`Access denied. Required ${H} of roles: ${J.roles.join(", ")}`)}}checkPermissions($,J){let Q=N1($);if(!Q)throw new E0("Authentication required for permission check");let X=Q.roles||[],Y=new Set;for(let G of X)this.rbac.getRolePermissions(G).forEach((U)=>Y.add(U));let W=Array.from(Y),H;if(J.requireAll)H=J.permissions.every((G)=>H2.hasPermission(W,G));else H=J.permissions.some((G)=>H2.hasPermission(W,G));if(!H){let G=J.requireAll?"all":"any";throw new E0(`Access denied. Required ${G} of permissions: ${J.permissions.join(", ")}`)}}checkMinimumRole($,J){let Q=N1($);if(!Q)throw new E0("Authentication required for role level check");let X=Q.roles||[],Y=this.rbac.getHighestRoleLevel(X),W=this.rbac.getRole(J);if(!W)throw Error(`Required role not found: ${J}`);let H=W.level||0;if(Y<H)throw new E0(`Access denied. Minimum role level required: ${J} (level ${H})`)}}function kG($){return $.get("rbac")||null}function J7($){return N1($)?.roles||[]}function xG($){let J=kG($),Q=J7($);if(!J)return[];let X=new Set;for(let Y of Q)J.getRolePermissions(Y).forEach((H)=>X.add(H));return Array.from(X)}function GO($,J){return J7($).includes(J)}function VO($,J){let Q=xG($);return H2.hasPermission(Q,J)}h1();class vG{config;name="rbac";version="1.0.0";dependencies=["auth"];rbac;guard;constructor($={}){this.config=$;if($.rbac)this.rbac=$.rbac;else if($.useDefaults!==!1)this.rbac=r5();else this.rbac=new W2;if($.roles)this.rbac.defineRoles($.roles);this.guard=new D6(this.rbac)}async install($){let J=$7(this.rbac);if($.use(J),$.getContainer().register(W2,{factory:()=>this.rbac,scope:"singleton"}),$.getContainer().register(D6,{factory:()=>this.guard,scope:"singleton"}),this.extendRouterCompiler($),this.config.enableManagementRoutes!==!1)this.addManagementRoutes($)}extendRouterCompiler($){let J=$.compile.bind($);$.compile=async()=>{let Q=$.getMetadata().getRoutes();for(let X of Q)if(X.roles||X.permissions||X.minimumRole){let Y=this.buildRBACMiddleware(X);$.getMetadata().registerRoute({...X,middleware:[Y,...X.middleware||[]]})}await J()}}buildRBACMiddleware($){let J=this.guard,Q=$.roles?.config,X=$.permissions?.config,Y=$.minimumRole;return async(W,H)=>{if(!N1(W))throw new E0("Authentication required");if(Q)J.checkRoles(W,Q);if(X)J.checkPermissions(W,X);if(Y)J.checkMinimumRole(W,Y.roleName);await H()}}addManagementRoutes($){let J=this.config.routes||{};$.get(J.roles||"/rbac/roles",{handler:(Q)=>{let X=this.rbac.getAllRoles();return Q.json({success:!0,roles:X.map((Y)=>({name:Y.name,description:Y.description,permissions:Y.permissions,inherits:Y.inherits,level:Y.level}))})}}),$.get("/rbac/roles/:roleName",{handler:(Q)=>{let X=Q.req.param("roleName"),Y=this.rbac.getRole(X);if(!Y)return Q.json({error:"Role not found"},404);let W=this.rbac.getRolePermissions(X),H=this.rbac.getRoleHierarchy(X);return Q.json({success:!0,role:{...Y,effectivePermissions:W,hierarchy:H}})}}),$.get("/rbac/roles/:roleName/permissions",{handler:(Q)=>{let X=Q.req.param("roleName");if(!this.rbac.roleExists(X))return Q.json({error:"Role not found"},404);let Y=this.rbac.getRolePermissions(X);return Q.json({success:!0,role:X,permissions:Y})}}),$.post("/rbac/check-permission",{handler:async(Q)=>{let X=await Q.req.json(),{roles:Y,permission:W}=X;if(!Array.isArray(Y)||!W)return Q.json({error:"Invalid request body"},400);let H=this.rbac.userHasPermission(Y,W);return Q.json({success:!0,hasPermission:H,roles:Y,permission:W})}}),$.post("/rbac/check-roles",{handler:async(Q)=>{let X=await Q.req.json(),{userRoles:Y,requiredRoles:W,requireAll:H=!1}=X;if(!Array.isArray(Y)||!Array.isArray(W))return Q.json({error:"Invalid request body"},400);let G=H?this.rbac.userHasRoles(Y,W):this.rbac.userHasAnyRole(Y,W);return Q.json({success:!0,hasRoles:G,userRoles:Y,requiredRoles:W,requireAll:H})}}),$.post("/rbac/effective-roles",{handler:async(Q)=>{let X=await Q.req.json(),{roles:Y}=X;if(!Array.isArray(Y))return Q.json({error:"Invalid request body"},400);let W=this.rbac.getEffectiveRoles(Y);return Q.json({success:!0,inputRoles:Y,effectiveRoles:W})}}),$.post("/rbac/user-permissions",{handler:async(Q)=>{let X=await Q.req.json(),{roles:Y}=X;if(!Array.isArray(Y))return Q.json({error:"Invalid request body"},400);let W=new Set;for(let H of Y)if(this.rbac.roleExists(H))this.rbac.getRolePermissions(H).forEach((V)=>W.add(V));return Q.json({success:!0,roles:Y,permissions:Array.from(W)})}})}getRBACManager(){return this.rbac}getGuard(){return this.guard}}h1();class hG{config;name="auth";version="1.0.0";authService;compileExtended=!1;constructor($){this.config=$;this.authService=new _6($.jwt,$.userProvider)}async install($){let J=a5(this.authService.getJWTProvider());if($.use(J),$.getContainer().register(_6,{factory:()=>this.authService,scope:"singleton"}),this.config.enableDefaultRoutes!==!1)this.addDefaultRoutes($);this.extendRouterCompiler($)}extendRouterCompiler($){if(this.compileExtended)return;this.compileExtended=!0,$.use(async(Q,X)=>{Q.set("authService",this.authService),await X()});let J=$.compile.bind($);$.compile=async()=>{await J();let Q=$.getHono(),X=$.getMetadata().getRoutes();for(let Y of X){let W=S.getAuthMetadata(Y.target.prototype,Y.propertyKey);if(Y.auth?.required||W?.required){console.log("Adding auth middleware for route:",Y.path,Y.method);let G=Y.auth?.config||W?.config;Q.use(Y.path,async(V,U)=>{if(console.log("Auth middleware executing for:",V.req.path,V.req.method,"target:",Y.path,Y.method),V.req.method!==Y.method)return console.log("Method mismatch, skipping auth check"),U();console.log("Checking authentication...");let q=V.get("auth.user"),_=V.get("auth.error");if(!q){let F=_||"Authentication required";throw console.log("No user found, throwing auth exception"),new R0(F)}if(G?.roles?.length){if(!this.authService.hasRoles(q,G.roles))throw new E0(`Required roles: ${G.roles.join(", ")}`)}if(G?.permissions?.length){if(!this.authService.hasPermissions(q,G.permissions))throw new E0(`Required permissions: ${G.permissions.join(", ")}`)}await U()})}}}}buildPath($){return $.path}pathMatches($,J){let Q=$.replace(/:([^/]+)/g,"([^/]+)");return new RegExp(`^${Q}$`).test(J)}addDefaultRoutes($){let J=this.config.routes||{};if($.post(J.login||"/auth/login",{handler:async(Q)=>{let X=await Q.req.json(),{username:Y,password:W}=X;try{let H=await this.authService.login(Y,W);return{success:!0,user:H.user,tokens:H.tokens}}catch(H){throw new R0(H instanceof Error?H.message:"Login failed")}},schema:{body:w.object({username:w.string().min(1),password:w.string().min(1)})}}),$.post(J.refresh||"/auth/refresh",{handler:async(Q)=>{let X=await Q.req.json(),{refreshToken:Y}=X;try{return{success:!0,tokens:await this.authService.refresh(Y)}}catch(W){throw new R0(W instanceof Error?W.message:"Token refresh failed")}},schema:{body:w.object({refreshToken:w.string().min(1)})}}),$.post(J.logout||"/auth/logout",{handler:async(Q)=>{let X=t5(Q),Y=await Q.req.json(),{refreshToken:W}=Y;if(X)await this.authService.logout(X,W);return{success:!0,message:"Logged out successfully"}},schema:{body:w.object({refreshToken:w.string().optional()})}}),"createUser"in this.config.userProvider)$.post(J.register||"/auth/register",{handler:async(Q)=>{let X=await Q.req.json(),{username:Y,password:W,email:H}=X;try{let G=await this.authService.register({username:Y,password:W,email:H});return{success:!0,user:G.user,tokens:G.tokens}}catch(G){throw new R0(G instanceof Error?G.message:"Registration failed")}},schema:{body:w.object({username:w.string().min(1),password:w.string().min(6),email:w.string().email().optional()})}});$.get("/auth/me",{handler:async(Q)=>{let X=N1(Q);if(!X)throw new R0("Not authenticated");return{success:!0,user:X}}})}getAuthService(){return this.authService}}class r4{name;config;constructor($,J){this.name=$;this.config=J}getAuthUrl($,J){let Q=new URLSearchParams({client_id:this.config.clientId,redirect_uri:this.config.redirectUri,response_type:"code",state:$,scope:this.config.scopes?.join(" ")||""});if(J&&this.config.pkce)Q.set("code_challenge",J),Q.set("code_challenge_method","S256");return`${this.config.authUrl}?${Q.toString()}`}async exchangeCodeForTokens($,J){let Q=new URLSearchParams({client_id:this.config.clientId,client_secret:this.config.clientSecret,code:$,grant_type:"authorization_code",redirect_uri:this.config.redirectUri});if(J&&this.config.pkce)Q.set("code_verifier",J);let X=await fetch(this.config.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Q.toString()});if(!X.ok){let W=await X.text();throw Error(`Token exchange failed: ${W}`)}let Y=await X.json();return{accessToken:Y.access_token,refreshToken:Y.refresh_token,expiresIn:Y.expires_in,tokenType:Y.token_type||"Bearer",scope:Y.scope}}async getUserInfo($){let J=await fetch(this.config.userInfoUrl,{headers:{Authorization:`Bearer ${$}`,Accept:"application/json"}});if(!J.ok){let X=await J.text();throw Error(`Failed to get user info: ${X}`)}let Q=await J.json();return this.mapUserInfo(Q)}mapUserInfo($){return{id:$.id||$.sub,email:$.email,name:$.name,username:$.login||$.preferred_username,avatar:$.avatar_url||$.picture,provider:this.name,...$}}}class UO extends r4{constructor($,J,Q){super("google",{clientId:$,clientSecret:J,redirectUri:Q,scopes:["openid","profile","email"],authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",userInfoUrl:"https://www.googleapis.com/oauth2/v2/userinfo",pkce:!0})}mapUserInfo($){return{id:$.id,email:$.email,name:$.name,username:$.email,avatar:$.picture,provider:"google",verified:$.verified_email,locale:$.locale,raw:$}}}class qO extends r4{constructor($,J,Q){super("github",{clientId:$,clientSecret:J,redirectUri:Q,scopes:["user:email"],authUrl:"https://github.com/login/oauth/authorize",tokenUrl:"https://github.com/login/oauth/access_token",userInfoUrl:"https://api.github.com/user",pkce:!1})}mapUserInfo($){return{id:$.id.toString(),email:$.email,name:$.name,username:$.login,avatar:$.avatar_url,provider:"github",company:$.company,location:$.location,bio:$.bio,raw:$}}async getUserInfo($){let J=await fetch(this.config.userInfoUrl,{headers:{Authorization:`Bearer ${$}`,Accept:"application/vnd.github.v3+json","User-Agent":"VeloceTS-OAuth"}});if(!J.ok)throw Error(`Failed to get user info: ${await J.text()}`);let Q=await J.json();if(!Q.email)try{let X=await fetch("https://api.github.com/user/emails",{headers:{Authorization:`Bearer ${$}`,Accept:"application/vnd.github.v3+json","User-Agent":"VeloceTS-OAuth"}});if(X.ok){let W=(await X.json()).find((H)=>H.primary);if(W)Q.email=W.email}}catch(X){}return this.mapUserInfo(Q)}}class _O extends r4{constructor($,J,Q,X="common"){super("microsoft",{clientId:$,clientSecret:J,redirectUri:Q,scopes:["openid","profile","email"],authUrl:`https://login.microsoftonline.com/${X}/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/${X}/oauth2/v2.0/token`,userInfoUrl:"https://graph.microsoft.com/v1.0/me",pkce:!0})}mapUserInfo($){return{id:$.id,email:$.mail||$.userPrincipalName,name:$.displayName,username:$.userPrincipalName,avatar:void 0,provider:"microsoft",jobTitle:$.jobTitle,department:$.department,officeLocation:$.officeLocation,raw:$}}}class DO{static generateCodeVerifier(){let $=new Uint8Array(32);return crypto.getRandomValues($),this.base64URLEncode($)}static async generateCodeChallenge($){let Q=new TextEncoder().encode($),X=await crypto.subtle.digest("SHA-256",Q);return this.base64URLEncode(new Uint8Array(X))}static async generatePKCEChallenge(){let $=this.generateCodeVerifier(),J=await this.generateCodeChallenge($);return{codeVerifier:$,codeChallenge:J,codeChallengeMethod:"S256"}}static base64URLEncode($){return btoa(String.fromCharCode(...$)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}}class BO{states=new Map;ttl=600000;generateState($){let J=crypto.randomUUID();return this.states.set(J,{timestamp:Date.now(),data:$}),this.cleanup(),J}validateState($){let J=this.states.get($);if(!J)return{valid:!1};if(Date.now()-J.timestamp>this.ttl)return this.states.delete($),{valid:!1};return this.states.delete($),{valid:!0,data:J.data}}cleanup(){let $=Date.now();for(let[J,Q]of this.states.entries())if($-Q.timestamp>this.ttl)this.states.delete(J)}}var Ab=w.object({code:w.string(),state:w.string(),error:w.string().optional(),error_description:w.string().optional()}),jb=w.object({accessToken:w.string(),refreshToken:w.string().optional(),expiresIn:w.number().optional(),tokenType:w.string(),scope:w.string().optional()}),gG=w.object({id:w.string(),email:w.string().optional(),name:w.string().optional(),username:w.string().optional(),avatar:w.string().optional(),provider:w.string()}).passthrough();function yG($){return(J,Q)=>{let X={provider:$.provider,config:$};S.defineOAuth(J,Q,X)}}function uG(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"oauth-user",required:!0})}}function mG(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"oauth-token",required:!0})}}function lG($){return $.get("oauth.user")||null}function cG($){return $.get("oauth.token")||null}function dG($){return $.get("oauth.authenticated")===!0}function pG($){return $.get("oauth.provider")||null}class FO{sessions=new Map;async get($){let J=this.sessions.get($);if(!J)return null;if(J.expiresAt&&J.expiresAt<new Date)return this.sessions.delete($),null;return J}async set($,J){this.sessions.set($,J)}async destroy($){this.sessions.delete($)}async touch($){let J=this.sessions.get($);if(J)J.updatedAt=new Date,this.sessions.set($,J)}async clear(){this.sessions.clear()}async length(){return this.sessions.size}async all(){return Array.from(this.sessions.values())}cleanup(){let $=new Date;for(let[J,Q]of this.sessions.entries())if(Q.expiresAt&&Q.expiresAt<$)this.sessions.delete(J)}}class zO{redis;prefix="sess:";constructor($,J){this.redis=$;if(J)this.prefix=J}async get($){let J=this.prefix+$,Q=await this.redis.get(J);if(!Q)return null;try{let X=JSON.parse(Q);if(X.createdAt=new Date(X.createdAt),X.updatedAt=new Date(X.updatedAt),X.expiresAt)X.expiresAt=new Date(X.expiresAt);return X}catch(X){return null}}async set($,J){let Q=this.prefix+$,X=JSON.stringify(J);if(J.expiresAt){let Y=Math.floor((J.expiresAt.getTime()-Date.now())/1000);if(Y>0)await this.redis.setex(Q,Y,X)}else await this.redis.set(Q,X)}async destroy($){let J=this.prefix+$;await this.redis.del(J)}async touch($){let J=await this.get($);if(J)J.updatedAt=new Date,await this.set($,J)}async clear(){let $=await this.redis.keys(this.prefix+"*");if($.length>0)await this.redis.del(...$)}async length(){return(await this.redis.keys(this.prefix+"*")).length}async all(){let $=await this.redis.keys(this.prefix+"*"),J=[];for(let Q of $){let X=await this.redis.get(Q);if(X)try{let Y=JSON.parse(X);if(Y.createdAt=new Date(Y.createdAt),Y.updatedAt=new Date(Y.updatedAt),Y.expiresAt)Y.expiresAt=new Date(Y.expiresAt);J.push(Y)}catch(Y){}}return J}}class Q7{store;config;constructor($,J){this.store=$;this.config={name:"sessionId",maxAge:86400000,secure:!1,httpOnly:!0,sameSite:"lax",path:"/",rolling:!1,genid:()=>crypto.randomUUID(),...J,domain:J.domain}}async createSession($,J={},Q){let X=this.config.genid(),Y=new Date,W=Q?.maxAge||this.config.maxAge,H={id:X,userId:$,data:J,createdAt:Y,updatedAt:Y,expiresAt:new Date(Y.getTime()+W),ipAddress:Q?.ipAddress,userAgent:Q?.userAgent,csrfToken:this.generateCSRFToken()};return await this.store.set(X,H),H}async getSession($){return await this.store.get($)}async updateSession($,J){let Q=await this.store.get($);if(!Q)return null;if(Q.data={...Q.data,...J},Q.updatedAt=new Date,this.config.rolling)Q.expiresAt=new Date(Date.now()+this.config.maxAge);return await this.store.set($,Q),Q}async touchSession($){if(this.config.rolling){let J=await this.store.get($);if(J)J.updatedAt=new Date,J.expiresAt=new Date(Date.now()+this.config.maxAge),await this.store.set($,J)}else await this.store.touch($)}async destroySession($){await this.store.destroy($)}async regenerateSession($){let J=await this.store.get($);if(!J)return null;let Q=this.config.genid(),X={...J,id:Q,updatedAt:new Date,csrfToken:this.generateCSRFToken()};return await this.store.set(Q,X),await this.store.destroy($),X}async getUserSessions($){return(await this.store.all()).filter((Q)=>Q.userId===$)}async destroyUserSessions($){let J=await this.getUserSessions($);for(let Q of J)await this.store.destroy(Q.id)}validateCSRFToken($,J){return $.csrfToken===J}generateCSRFToken(){return crypto.randomUUID()}getCookieOptions(){let $={maxAge:this.config.maxAge,secure:this.config.secure,httpOnly:this.config.httpOnly,sameSite:this.config.sameSite,path:this.config.path};if(this.config.domain)$.domain=this.config.domain;return $}getConfig(){return{...this.config}}getStore(){return this.store}}class NO{tokenStore=new Map;tokenTTL=3600000;generateToken($){let J=crypto.randomUUID(),Q=new Date(Date.now()+this.tokenTTL);return this.tokenStore.set($,{token:J,expiresAt:Q}),this.cleanup(),J}validateToken($,J){let Q=this.tokenStore.get($);if(!Q)return!1;if(Q.expiresAt<new Date)return this.tokenStore.delete($),!1;return Q.token===J}removeToken($){this.tokenStore.delete($)}cleanup(){let $=new Date;for(let[J,Q]of this.tokenStore.entries())if(Q.expiresAt<$)this.tokenStore.delete(J)}}var iG=w.object({id:w.string(),userId:w.string(),data:w.record(w.any()),createdAt:w.date(),updatedAt:w.date(),expiresAt:w.date().optional(),ipAddress:w.string().optional(),userAgent:w.string().optional(),csrfToken:w.string().optional()}),Zb=w.object({name:w.string().optional(),secret:w.string(),maxAge:w.number().optional(),secure:w.boolean().optional(),httpOnly:w.boolean().optional(),sameSite:w.enum(["strict","lax","none"]).optional(),domain:w.string().optional(),path:w.string().optional(),rolling:w.boolean().optional()}),Sb=w.object({userId:w.string(),data:w.record(w.any()).optional(),maxAge:w.number().optional(),ipAddress:w.string().optional(),userAgent:w.string().optional()}),Cb=w.object({data:w.record(w.any())});h1();function nG($={}){return(J,Q)=>{let X={config:$};S.defineSession(J,Q,X)}}function sG(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"current-session",required:!0})}}function Tb($){return(J,Q,X)=>{if(Q)S.defineParameter(J,Q,X,{index:X,type:"session-data",required:!1,metadata:{key:$}})}}function oG(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"csrf-token",required:!0})}}function rG(){return($,J)=>{S.defineCSRF($,J,{required:!0})}}function aG($,J){return async(Q,X)=>{let Y=$.getConfig(),W=G4(Q,Y.name),H=null;if(W){if(H=await $.getSession(W),H)await $.touchSession(W)}Q.set("session",H),Q.set("sessionManager",$),Q.set("csrfProtection",J),await X()}}class X7{sessionManager;csrfProtection;constructor($,J){this.sessionManager=$;this.csrfProtection=J}checkSession($,J){let Q=u0($);if(J.required&&!Q)throw new R0("Session required");if(Q&&J.csrf)this.checkCSRF($,Q)}checkCSRF($,J){if(!this.csrfProtection)throw Error("CSRF protection not configured");let Q=$.req.header("X-CSRF-Token")||$.req.query("_csrf");if(!Q)throw new E0("CSRF token required");if(!this.csrfProtection.validateToken(J.id,Q))throw new E0("Invalid CSRF token")}async createSession($,J,Q={}){let X=G2($);if(!X)throw Error("Session manager not available");let Y=$.req.header("X-Forwarded-For")||$.req.header("X-Real-IP")||"unknown",W=$.req.header("User-Agent")||"unknown",H=await X.createSession(J,Q,{ipAddress:Y,userAgent:W}),G=X.getCookieOptions();return V4($,X.getConfig().name,H.id,G),$.set("session",H),H}async updateSession($,J){let Q=u0($),X=G2($);if(!Q||!X)return null;let Y=await X.updateSession(Q.id,J);if(Y)$.set("session",Y);return Y}async destroySession($){let J=u0($),Q=G2($);if(!J||!Q)return;await Q.destroySession(J.id);let X=Q.getConfig();if(V4($,X.name,"",{...Q.getCookieOptions(),maxAge:0}),$.set("session",null),this.csrfProtection)this.csrfProtection.removeToken(J.id)}async regenerateSession($){let J=u0($),Q=G2($);if(!J||!Q)return null;let X=await Q.regenerateSession(J.id);if(X){let Y=Q.getCookieOptions();if(V4($,Q.getConfig().name,X.id,Y),$.set("session",X),this.csrfProtection)this.csrfProtection.removeToken(J.id),this.csrfProtection.generateToken(X.id)}return X}generateCSRFToken($){let J=u0($);if(!J||!this.csrfProtection)return null;return this.csrfProtection.generateToken(J.id)}}function u0($){return $.get("session")||null}function G2($){return $.get("sessionManager")||null}function tG($){return $.get("csrfProtection")||null}function eG($,J){let Q=u0($);if(!Q)return null;if(J)return Q.data[J];return Q.data}function $V($){return u0($)!==null}function JV($){return u0($)?.userId||null}function QV($,J,Q){let X=u0($);if(X)X.data[J]=Q,$.set("session",X)}function XV($,J){let Q=u0($);if(Q&&J in Q.data)delete Q.data[J],$.set("session",Q)}class m1{schema;constructor($){this.schema=$}validate($){if(this.schema)return this.schema.parse($);return $}validatePartial($){if(this.schema)try{return this.schema.parse($)}catch{return $}return $}async createMany($){let J=[];for(let Q of $)J.push(await this.create(Q));return J}async updateMany($,J){let Q=await this.findMany({where:$}),X=0;for(let Y of Q){let W=Y.id;if(W)await this.update(W,J),X++}return X}async deleteMany($){let J=await this.findMany({where:$}),Q=0;for(let X of J){let Y=X.id;if(Y&&await this.delete(Y))Q++}return Q}async findPaginated($){let{pagination:J,...Q}=$,{page:X,limit:Y}=J,W=(X-1)*Y,H=await this.count(Q.where),G=await this.findMany({...Q,pagination:{...J,offset:W}}),V=Math.ceil(H/Y);return{data:G,total:H,page:X,limit:Y,totalPages:V,hasNext:X<V,hasPrev:X>1}}async count($){return(await this.findMany({where:$})).length}async exists($){return await this.findOne({where:$})!==null}async withTransaction($){return $(this)}buildWhereClause($){if(!$)return{};return $}buildOrderByClause($){if(!$)return{};if(Array.isArray($))return $.reduce((J,Q)=>{return J[Q.field]=Q.direction,J},{});return{[$.field]:$.direction}}buildPaginationClause($){if(!$)return{};let J={};if($.limit)J.take=$.limit;if($.offset)J.skip=$.offset;return J}}class P1 extends m1{client;delegate;modelName;constructor($){super($.zodSchema);this.client=$.client,this.delegate=$.delegate,this.modelName=$.model}async create($){let J=this.validatePartial($),Q=await this.delegate.create({data:J});return this.validate(Q)}async findById($){let J=await this.delegate.findUnique({where:{id:$}});return J?this.validate(J):null}async findOne($){let J=this.buildPrismaFindOptions($),Q=await this.delegate.findFirst(J);return Q?this.validate(Q):null}async findMany($){let J=this.buildPrismaFindOptions($||{});return(await this.delegate.findMany(J)).map((X)=>this.validate(X))}async update($,J){let Q=this.validatePartial(J),X=await this.delegate.update({where:{id:$},data:Q});return this.validate(X)}async delete($){try{return await this.delegate.delete({where:{id:$}}),!0}catch(J){return!1}}async createMany($){let J=$.map((X)=>this.validatePartial(X));await this.delegate.create({data:J,skipDuplicates:!0});let Q=[];for(let X of J){let Y=await this.create(X);Q.push(Y)}return Q}async updateMany($,J){let Q=this.validatePartial(J);return(await this.delegate.updateMany({where:this.buildWhereClause($),data:Q})).count}async deleteMany($){return(await this.delegate.deleteMany({where:this.buildWhereClause($)})).count}async count($){return await this.delegate.count({where:$?this.buildWhereClause($):void 0})}async exists($){return await this.delegate.count({where:this.buildWhereClause($),take:1})>0}async findPaginated($){let{pagination:J,...Q}=$,{page:X,limit:Y}=J,W=(X-1)*Y,H=this.buildPrismaFindOptions(Q),[G,V]=await Promise.all([this.delegate.count({where:H.where}),this.delegate.findMany({...H,skip:W,take:Y})]),U=V.map((_)=>this.validate(_)),q=Math.ceil(G/Y);return{data:U,total:G,page:X,limit:Y,totalPages:q,hasNext:X<q,hasPrev:X>1}}async withTransaction($){return await this.client.$transaction(async(J)=>{let Q=new this.constructor({client:J,delegate:J[this.modelName.toLowerCase()],model:this.modelName,zodSchema:this.schema});return await $(Q)})}buildPrismaFindOptions($){let J={};if($.where)J.where=this.buildWhereClause($.where);if($.orderBy)J.orderBy=this.buildOrderByClause($.orderBy);if($.pagination){let Q=this.buildPaginationClause($.pagination);Object.assign(J,Q)}if($.include)J.include=$.include.reduce((Q,X)=>{return Q[X]=!0,Q},{});if($.select)J.select=$.select.reduce((Q,X)=>{return Q[X]=!0,Q},{});return J}buildWhereClause($){let J={};for(let[Q,X]of Object.entries($))if(X===null||X===void 0)J[Q]=null;else if(typeof X==="object"&&!Array.isArray(X))J[Q]=X;else if(Array.isArray(X))J[Q]={in:X};else J[Q]=X;return J}buildOrderByClause($){if(Array.isArray($))return $.map((J)=>({[J.field]:J.direction}));return{[$.field]:$.direction}}buildPaginationClause($){let J={};if($.limit)J.take=$.limit;if($.offset)J.skip=$.offset;return J}async aggregate($){let J={};if($.where)J.where=this.buildWhereClause($.where);if($._count)J._count=$._count;if($._avg)J._avg=$._avg;if($._sum)J._sum=$._sum;if($._min)J._min=$._min;if($._max)J._max=$._max;return await this.delegate.aggregate(J)}async groupBy($){let J={by:$.by};if($.where)J.where=this.buildWhereClause($.where);if($.having)J.having=this.buildWhereClause($.having);if($.orderBy)J.orderBy=this.buildOrderByClause($.orderBy);if($._count)J._count=$._count;if($._avg)J._avg=$._avg;if($._sum)J._sum=$._sum;if($._min)J._min=$._min;if($._max)J._max=$._max;return await this.delegate.groupBy(J)}}class K1 extends m1{dataSource;repository;entity;constructor($){super($.zodSchema);this.dataSource=$.dataSource,this.repository=$.repository,this.entity=$.entity}async create($){let J=this.validatePartial($),Q=this.repository.create(J),X=await this.repository.save(Q);return this.validate(X)}async findById($){let J=await this.repository.findOneBy({id:$});return J?this.validate(J):null}async findOne($){let J=this.buildTypeORMFindOptions($),Q=await this.repository.findOne(J);return Q?this.validate(Q):null}async findMany($){let J=this.buildTypeORMFindOptions($||{});return(await this.repository.find(J)).map((X)=>this.validate(X))}async update($,J){let Q=this.validatePartial(J),X=await this.repository.findOneBy({id:$});if(!X)throw Error(`Entity with id ${$} not found`);let Y=this.repository.merge(X,Q),W=await this.repository.save(Y);return this.validate(W)}async delete($){return((await this.repository.delete({id:$})).affected||0)>0}async createMany($){let Q=$.map((Y)=>this.validatePartial(Y)).map((Y)=>this.repository.create(Y));return(await this.repository.save(Q)).map((Y)=>this.validate(Y))}async updateMany($,J){let Q=this.validatePartial(J),X=this.buildWhereClause($);return(await this.repository.update(X,Q)).affected||0}async deleteMany($){let J=this.buildWhereClause($);return(await this.repository.delete(J)).affected||0}async count($){let J=$?{where:this.buildWhereClause($)}:{};return await this.repository.count(J)}async exists($){return await this.repository.count({where:this.buildWhereClause($),take:1})>0}async findPaginated($){let{pagination:J,...Q}=$,{page:X,limit:Y}=J,W=(X-1)*Y,H=this.buildTypeORMFindOptions(Q);H.skip=W,H.take=Y;let[G,V]=await this.repository.createQueryBuilder("entity").where(H.where||{}).orderBy(H.order||{}).skip(W).take(Y).getManyAndCount(),U=G.map((_)=>this.validate(_)),q=Math.ceil(V/Y);return{data:U,total:V,page:X,limit:Y,totalPages:q,hasNext:X<q,hasPrev:X>1}}async withTransaction($){return await this.dataSource.transaction(async(J)=>{let Q=J.getRepository?J.getRepository(this.entity):this.repository,X=new this.constructor({dataSource:this.dataSource,repository:Q,entity:this.entity,zodSchema:this.schema});return await $(X)})}buildTypeORMFindOptions($){let J={};if($.where)J.where=this.buildWhereClause($.where);if($.orderBy)J.order=this.buildOrderByClause($.orderBy);if($.pagination){if($.pagination.limit)J.take=$.pagination.limit;if($.pagination.offset)J.skip=$.pagination.offset}if($.include)J.relations=$.include;if($.select)J.select=$.select.reduce((Q,X)=>{return Q[X]=!0,Q},{});return J}buildWhereClause($){let J={};for(let[Q,X]of Object.entries($))if(X===null||X===void 0)J[Q]=null;else if(typeof X==="object"&&!Array.isArray(X))if("gt"in X)J[Q]={$gt:X.gt};else if("gte"in X)J[Q]={$gte:X.gte};else if("lt"in X)J[Q]={$lt:X.lt};else if("lte"in X)J[Q]={$lte:X.lte};else if("like"in X)J[Q]={$like:X.like};else if("in"in X)J[Q]={$in:X.in};else J[Q]=X;else if(Array.isArray(X))J[Q]={$in:X};else J[Q]=X;return J}buildOrderByClause($){if(Array.isArray($))return $.reduce((J,Q)=>{return J[Q.field]=Q.direction.toUpperCase(),J},{});return{[$.field]:$.direction.toUpperCase()}}createQueryBuilder($){return this.repository.createQueryBuilder($)}async query($,J){return await this.dataSource.manager.query($,J)}async softDelete($){try{if(this.dataSource.getMetadata(this.entity).columns.some((X)=>X.propertyName==="deletedAt"))return((await this.repository.update({id:$},{deletedAt:new Date})).affected||0)>0;else return await this.delete($)}catch(J){return!1}}async restore($){try{return((await this.repository.update({id:$},{deletedAt:null})).affected||0)>0}catch(J){return!1}}async findWithRelations($,J){let Q=await this.repository.findOne({where:{id:$},relations:J});return Q?this.validate(Q):null}async bulkInsert($){let J=$.map((Y)=>this.validatePartial(Y)),X=this.repository.createQueryBuilder().insert();if(X)await X.into(this.entity).values(J).execute();else await this.createMany($)}async upsert($,J){let Q=this.validatePartial($);try{let X=this.repository.create(Q),Y=await this.repository.save(X);return this.validate(Y)}catch(X){let Y=J.reduce((H,G)=>{if(G in Q)H[G]=Q[G];return H},{}),W=await this.repository.findOneBy(Y);if(W){let H=this.repository.merge(W,Q),G=await this.repository.save(H);return this.validate(G)}throw X}}}class m0 extends m1{database;table;operators;constructor($){super($.zodSchema);this.database=$.database,this.table=$.table,this.operators=this.initializeOperators()}initializeOperators(){return{eq:($,J)=>({type:"eq",column:$,value:J}),ne:($,J)=>({type:"ne",column:$,value:J}),gt:($,J)=>({type:"gt",column:$,value:J}),gte:($,J)=>({type:"gte",column:$,value:J}),lt:($,J)=>({type:"lt",column:$,value:J}),lte:($,J)=>({type:"lte",column:$,value:J}),like:($,J)=>({type:"like",column:$,value:J}),ilike:($,J)=>({type:"ilike",column:$,value:J}),inArray:($,J)=>({type:"in",column:$,values:J}),notInArray:($,J)=>({type:"notIn",column:$,values:J}),isNull:($)=>({type:"isNull",column:$}),isNotNull:($)=>({type:"isNotNull",column:$}),between:($,J,Q)=>({type:"between",column:$,min:J,max:Q}),and:(...$)=>({type:"and",conditions:$}),or:(...$)=>({type:"or",conditions:$}),not:($)=>({type:"not",condition:$})}}async create($){let J=this.validatePartial($),Q=await this.database.insert(this.table).values(J).returning().execute();return this.validate(Q[0])}async findById($){let J=this.getPrimaryKeyColumn(),Q=await this.database.select().from(this.table).where(this.operators.eq(J,$)).execute();return Q.length>0?this.validate(Q[0]):null}async findOne($){let J=this.database.select().from(this.table);if($.where)J=J.where(this.buildWhereClause($.where));if($.orderBy)J=J.orderBy(...this.buildOrderByClause($.orderBy));J=J.limit(1);let Q=await J.execute();return Q.length>0?this.validate(Q[0]):null}async findMany($){let J=this.database.select().from(this.table);if($?.where)J=J.where(this.buildWhereClause($.where));if($?.orderBy)J=J.orderBy(...this.buildOrderByClause($.orderBy));if($?.pagination){if($.pagination.limit)J=J.limit($.pagination.limit);if($.pagination.offset)J=J.offset($.pagination.offset)}return(await J.execute()).map((X)=>this.validate(X))}async update($,J){let Q=this.validatePartial(J),X=this.getPrimaryKeyColumn(),Y=await this.database.update(this.table).set(Q).where(this.operators.eq(X,$)).returning().execute();if(Y.length===0)throw Error(`Entity with id ${$} not found`);return this.validate(Y[0])}async delete($){let J=this.getPrimaryKeyColumn();return(await this.database.delete(this.table).where(this.operators.eq(J,$)).execute()).rowsAffected>0}async createMany($){let J=$.map((X)=>this.validatePartial(X));return(await this.database.insert(this.table).values(J).returning().execute()).map((X)=>this.validate(X))}async updateMany($,J){let Q=this.validatePartial(J),X=this.buildWhereClause($);return(await this.database.update(this.table).set(Q).where(X).execute()).rowsAffected}async deleteMany($){let J=this.buildWhereClause($);return(await this.database.delete(this.table).where(J).execute()).rowsAffected}async count($){let J=this.database.select({count:"COUNT(*)"}).from(this.table);if($)J=J.where(this.buildWhereClause($));return(await J.execute())[0]?.count||0}async exists($){return await this.count($)>0}async findPaginated($){let{pagination:J,...Q}=$,{page:X,limit:Y}=J,W=(X-1)*Y,H=this.database.select().from(this.table),G=this.database.select({count:"COUNT(*)"}).from(this.table);if(Q.where){let B=this.buildWhereClause(Q.where);H=H.where(B),G=G.where(B)}if(Q.orderBy)H=H.orderBy(...this.buildOrderByClause(Q.orderBy));H=H.limit(Y).offset(W);let[V,U]=await Promise.all([H.execute(),G.execute()]),q=U[0]?.count||0,_=V.map((B)=>this.validate(B)),F=Math.ceil(q/Y);return{data:_,total:q,page:X,limit:Y,totalPages:F,hasNext:X<F,hasPrev:X>1}}async withTransaction($){return await this.database.transaction(async(J)=>{let Q=new this.constructor({database:J,table:this.table,zodSchema:this.schema});return await $(Q)})}buildWhereClause($){let J=[];for(let[Q,X]of Object.entries($)){let Y=this.getColumn(Q);if(X===null||X===void 0)J.push(this.operators.isNull(Y));else if(typeof X==="object"&&!Array.isArray(X))if("gt"in X)J.push(this.operators.gt(Y,X.gt));else if("gte"in X)J.push(this.operators.gte(Y,X.gte));else if("lt"in X)J.push(this.operators.lt(Y,X.lt));else if("lte"in X)J.push(this.operators.lte(Y,X.lte));else if("like"in X)J.push(this.operators.like(Y,X.like));else if("ilike"in X)J.push(this.operators.ilike(Y,X.ilike));else if("in"in X)J.push(this.operators.inArray(Y,X.in));else if("notIn"in X)J.push(this.operators.notInArray(Y,X.notIn));else if("between"in X&&Array.isArray(X.between)&&X.between.length===2)J.push(this.operators.between(Y,X.between[0],X.between[1]));else J.push(this.operators.eq(Y,X));else if(Array.isArray(X))J.push(this.operators.inArray(Y,X));else J.push(this.operators.eq(Y,X))}return J.length===1?J[0]:this.operators.and(...J)}buildOrderByClause($){if(Array.isArray($))return $.map((Q)=>{let X=this.getColumn(Q.field);return Q.direction==="desc"?{column:X,direction:"desc"}:X});let J=this.getColumn($.field);return $.direction==="desc"?[{column:J,direction:"desc"}]:[J]}getPrimaryKeyColumn(){for(let[$,J]of Object.entries(this.table._.columns))if(J._.isPrimaryKey)return this.table[$];return this.table.id||this.table._.columns.id}getColumn($){return this.table[$]||this.table._.columns[$]}async rawQuery($,J){return await this.database.execute({sql:$,params:J})}async upsert($,J){let Q=this.validatePartial($),X=J.map((W)=>this.getColumn(W)),Y=await this.database.insert(this.table).values(Q).onConflictDoUpdate({target:X,set:Q}).returning().execute();return this.validate(Y[0])}async bulkUpsert($,J){let Q=$.map((W)=>this.validatePartial(W)),X=J.map((W)=>this.getColumn(W));return(await this.database.insert(this.table).values(Q).onConflictDoUpdate({target:X,set:Q[0]}).returning().execute()).map((W)=>this.validate(W))}async findWithSelect($,J){let Q=J.reduce((Y,W)=>{return Y[W]=this.getColumn(W),Y},{}),X=this.database.select(Q).from(this.table);if($.where)X=X.where(this.buildWhereClause($.where));if($.orderBy)X=X.orderBy(...this.buildOrderByClause($.orderBy));if($.pagination){if($.pagination.limit)X=X.limit($.pagination.limit);if($.pagination.offset)X=X.offset($.pagination.offset)}return await X.execute()}async aggregate($){let J={};if($.count)J.count="COUNT(*)";if($.sum)for(let X of $.sum)J[`sum_${X}`]=`SUM(${X})`;if($.avg)for(let X of $.avg)J[`avg_${X}`]=`AVG(${X})`;if($.min)for(let X of $.min)J[`min_${X}`]=`MIN(${X})`;if($.max)for(let X of $.max)J[`max_${X}`]=`MAX(${X})`;let Q=this.database.select(J).from(this.table);if($.where)Q=Q.where(this.buildWhereClause($.where));if($.groupBy){let X=$.groupBy.map((Y)=>this.getColumn(Y));Q=Q.groupBy(...X)}if($.having)Q=Q.having(this.buildWhereClause($.having));return await Q.execute()}}class N${static instance;constructor(){}static getInstance(){if(!N$.instance)N$.instance=new N$;return N$.instance}createRepository($,J){switch($){case"prisma":return new P1(J);case"typeorm":return new K1(J);case"drizzle":return new m0(J);default:throw Error(`Unsupported repository type: ${$}`)}}createPrismaRepository($){return new P1($)}createTypeORMRepository($){return new K1($)}createDrizzleRepository($){return new m0($)}}class B6{repositories=new Map;factory;constructor(){this.factory=N$.getInstance()}register($,J){this.repositories.set($,J)}get($){return this.repositories.get($)}createAndRegister($,J,Q){let X=this.factory.createRepository(J,Q);return this.register($,X),X}remove($){return this.repositories.delete($)}getNames(){return Array.from(this.repositories.keys())}clear(){this.repositories.clear()}size(){return this.repositories.size}}function wO($,J,Q){return(X,Y)=>{let W={type:"generic-repository",name:$,ormType:J,options:Q};Reflect.defineMetadata("inject",W,X,Y)}}function AO($){return class extends ${repositories=new B6;getRepository(J){return this.repositories.get(J)}createRepository(J,Q,X){return this.repositories.createAndRegister(J,Q,X)}async withRepositories(J,Q){let X=new Map;for(let W of J){let H=this.repositories.get(W);if(H)X.set(W,H)}let Y=X.values().next().value;if(Y&&typeof Y.withTransaction==="function")return await Y.withTransaction(async()=>{return await Q(X)});return await Q(X)}}}class YV{repositories=new B6;constructor(){this.initializeRepositories()}getRepository($){let J=this.repositories.get($);if(!J)throw Error(`Repository '${$}' not found`);return J}async executeInTransaction($,J){let Q=new Map;for(let Y of $){let W=this.repositories.get(Y);if(W)Q.set(Y,W)}let X=Q.values().next().value;if(X&&typeof X.withTransaction==="function")return await X.withTransaction(async()=>{return await J(Q)});return await J(Q)}}var jO=new B6;class a4{executor;operators;selectFields;whereConditions=[];orderByClause;limitCount;offsetCount;groupByFields;havingConditions=[];joins=[];constructor($,J=new Y7){this.executor=$;this.operators=J}select($){return this.selectFields=$,this}where($){let J=this.buildFilterCondition($);return this.whereConditions.push(J),this}orderBy($){return this.orderByClause=$,this}limit($){return this.limitCount=$,this}offset($){return this.offsetCount=$,this}groupBy($){return this.groupByFields=$,this}having($){let J=this.buildFilterCondition($);return this.havingConditions.push(J),this}join($,J){return this.joins.push({type:"JOIN",table:$,condition:J}),this}leftJoin($,J){return this.joins.push({type:"LEFT JOIN",table:$,condition:J}),this}rightJoin($,J){return this.joins.push({type:"RIGHT JOIN",table:$,condition:J}),this}innerJoin($,J){return this.joins.push({type:"INNER JOIN",table:$,condition:J}),this}async execute(){let $=this.buildQuery();return await this.executor.execute($)}async first(){let $=this.limitCount;this.limit(1);let J=await this.execute();return this.limitCount=$,J.length>0?J[0]:null}async count(){let $=this.buildCountQuery();return await this.executor.count($)}async exists(){return await this.count()>0}buildFilterCondition($){let J=[];for(let[Q,X]of Object.entries($))if(X===null||X===void 0)J.push({type:"isNull",field:Q});else if(typeof X==="object"&&!Array.isArray(X))for(let[Y,W]of Object.entries(X))switch(Y){case"eq":J.push({type:"eq",field:Q,value:W});break;case"ne":J.push({type:"ne",field:Q,value:W});break;case"gt":J.push({type:"gt",field:Q,value:W});break;case"gte":J.push({type:"gte",field:Q,value:W});break;case"lt":J.push({type:"lt",field:Q,value:W});break;case"lte":J.push({type:"lte",field:Q,value:W});break;case"like":J.push({type:"like",field:Q,pattern:W});break;case"ilike":J.push({type:"ilike",field:Q,pattern:W});break;case"in":J.push({type:"in",field:Q,values:W});break;case"notIn":J.push({type:"notIn",field:Q,values:W});break;case"between":if(Array.isArray(W)&&W.length===2)J.push({type:"between",field:Q,min:W[0],max:W[1]});break}else if(Array.isArray(X))J.push({type:"in",field:Q,values:X});else J.push({type:"eq",field:Q,value:X});return J.length===1?J[0]:{type:"and",conditions:J}}buildQuery(){return{select:this.selectFields,where:this.whereConditions.length>0?this.whereConditions.length===1?this.whereConditions[0]:{type:"and",conditions:this.whereConditions}:void 0,orderBy:this.orderByClause,limit:this.limitCount,offset:this.offsetCount,groupBy:this.groupByFields,having:this.havingConditions.length>0?this.havingConditions.length===1?this.havingConditions[0]:{type:"and",conditions:this.havingConditions}:void 0,joins:this.joins}}buildCountQuery(){return{select:["COUNT(*) as count"],where:this.whereConditions.length>0?this.whereConditions.length===1?this.whereConditions[0]:{type:"and",conditions:this.whereConditions}:void 0,joins:this.joins}}}class Y7{eq($){return{type:"eq",value:$}}ne($){return{type:"ne",value:$}}gt($){return{type:"gt",value:$}}gte($){return{type:"gte",value:$}}lt($){return{type:"lt",value:$}}lte($){return{type:"lte",value:$}}like($){return{type:"like",pattern:$}}ilike($){return{type:"ilike",pattern:$}}in($){return{type:"in",values:$}}notIn($){return{type:"notIn",values:$}}between($,J){return{type:"between",min:$,max:J}}isNull(){return{type:"isNull"}}isNotNull(){return{type:"isNotNull"}}and(...$){return{type:"and",conditions:$}}or(...$){return{type:"or",conditions:$}}not($){return{type:"not",condition:$}}}class WV{static create($){return new a4($)}static createWithOperators($,J){return new a4($,J)}}class l1{static calculateMeta($,J,Q){if(Q<=0)throw Error("Limit must be greater than 0");let X=Math.ceil($/Q),Y=l1.calculateOffset(J,Q);return{total:$,page:J,limit:Q,totalPages:X,hasNext:J<X,hasPrev:J>1,firstPage:1,lastPage:X,from:$===0?0:Y+1,to:Math.min(Y+Q,$)}}static calculateOffset($,J){return($-1)*J}static calculatePage($,J){return Math.floor($/J)+1}static validatePagination($,J){if($<1)throw Error("Page must be greater than 0");if(J<1)throw Error("Limit must be greater than 0");if(J>1000)throw Error("Limit cannot exceed 1000")}static createPaginatedResult($,J,Q,X){let Y=this.calculateMeta(J,Q,X);return{data:$,total:Y.total,page:Y.page,limit:Y.limit,totalPages:Y.totalPages,hasNext:Y.hasNext,hasPrev:Y.hasPrev}}static parsePaginationQuery($,J=10,Q=100){let X=parseInt($.page,10),Y=parseInt($.limit,10),W=Number.isFinite(X)&&X>=1?X:1,H=Number.isFinite(Y)&&Y>=1?Math.min(Y,Q):J;return{page:W,limit:H}}static extractPaginationFromQuery($){let J=parseInt($.page)||1,Q=parseInt($.limit)||10;return this.validatePagination(J,Q),{page:J,limit:Q}}}class W7{static encodeCursor($){return Buffer.from(JSON.stringify($)).toString("base64")}static decodeCursor($){try{return JSON.parse(Buffer.from($,"base64").toString())}catch(J){throw Error("Invalid cursor format")}}static createCursor($,J="id"){let Q=$[J];if(Q===void 0||Q===null)throw Error(`Cursor field '${J}' not found in entity`);return this.encodeCursor({[J]:Q})}static extractCursorValue($,J="id"){return this.decodeCursor($)[J]}static createCursorPaginatedResult($,J,Q="id",X=!1){let Y=$.length>J,W=X,H=Y?$.slice(0,J):$,G,V;if(H.length>0){if(Y)G=this.createCursor(H[H.length-1],Q);if(W)V=this.createCursor(H[0],Q)}return{data:H,nextCursor:G,prevCursor:V,hasNext:Y,hasPrev:W,limit:J,count:H.length}}static createMultiCursor($,J){let Q={};for(let X of J){if($[X]===void 0||$[X]===null)throw Error(`Cursor field '${X}' is missing from entity`);Q[X]=$[X]}return this.encodeCursor(Q)}static decodeMultiCursor($){return this.decodeCursor($)}}class HV{baseQuery;options={};constructor($={}){this.baseQuery=$;this.options={...$}}offset($,J){return l1.validatePagination($,J),this.options.pagination={page:$,limit:J,offset:l1.calculateOffset($,J)},this}cursor($,J,Q="id"){if(J<1||J>1000)throw Error("Limit must be between 1 and 1000");let X=W7.extractCursorValue($,Q);return this.options.where={...this.options.where,[Q]:{gt:X}},this.options.pagination={limit:J},this}orderBy($,J="asc"){return this.options.orderBy={field:$,direction:J},this}orderByMultiple($){return this.options.orderBy=$.map((J)=>({field:J.field,direction:J.direction})),this}where($){return this.options.where={...this.options.where,...$},this}select($){return this.options.select=$,this}include($){return this.options.include=$,this}build(){return this.options}reset(){return this.options={...this.baseQuery},this}}function EO($=10,J=100){return function(Q,X,Y){let W=Y.value;return Y.value=async function(...H){let G=H[H.length-1];if(G&&typeof G==="object"&&(("page"in G)||("limit"in G))){let V=G.page||1,U=Math.min(G.limit||$,J);l1.validatePagination(V,U),G.pagination={page:V,limit:U,offset:l1.calculateOffset(V,U)}}return await W.apply(this,H)},Y}}function LO($,J,Q,X){let Y=l1.calculateMeta(J,Q,X);return{data:$,meta:Y}}function OO($,J=20,Q=100){let X=parseInt($.limit,10),Y=Number.isFinite(X)&&X>=1?Math.min(X,Q):J;return{cursor:typeof $.cursor==="string"&&$.cursor.length>0?$.cursor:void 0,limit:Y}}class GV{static toApiResponse($,J){return{data:$.data,meta:{total:$.total,page:$.page,limit:$.limit,totalPages:$.totalPages},links:{first:J?`${J}?page=1&limit=${$.limit}`:null,last:J?`${J}?page=${$.totalPages}&limit=${$.limit}`:null,prev:$.hasPrev&&J?`${J}?page=${$.page-1}&limit=${$.limit}`:null,next:$.hasNext&&J?`${J}?page=${$.page+1}&limit=${$.limit}`:null}}}static toCursorApiResponse($,J){let Q={data:$.data,meta:{limit:$.limit,hasNext:$.hasNext,hasPrev:$.hasPrev},cursors:{next:$.nextCursor,prev:$.prevCursor}};if(J)Q.links={next:$.nextCursor?`${J}?cursor=${$.nextCursor}&limit=${$.limit}`:null,prev:$.prevCursor?`${J}?cursor=${$.prevCursor}&limit=${$.limit}`:null};return Q}}c0();c0();var Vf=w1(X$(),1);function UV($,J){return(Q)=>{let X={entity:$,connection:J,transactional:!1};Reflect.defineMetadata("repository",X,Q)}}function qV($){return(J,Q,X)=>{let Y=X.value,W={isolation:$?.isolation||"READ_COMMITTED",timeout:$?.timeout||30000,readOnly:$?.readOnly||!1,propagation:$?.propagation||"REQUIRED"};return Reflect.defineMetadata("transactional",W,J,Q),X.value=async function(...H){return await I1().handleTransactional(this,Q,H,Y,H.find((V)=>V&&typeof V==="object"&&V.req&&V.res))},X}}function _V($){return(J)=>{let Q={tableName:$||J.name.toLowerCase()};Reflect.defineMetadata("entity",Q,J)}}function DV($){return(J,Q)=>{let X={name:$?.name||Q.toString(),type:$?.type||"string",nullable:$?.nullable||!1,unique:$?.unique||!1,primary:$?.primary||!1};Reflect.defineMetadata("column",X,J,Q)}}c0();class c1{static instance;constructor(){}static getInstance(){if(!c1.instance)c1.instance=new c1;return c1.instance}async intercept($,J,Q,X,Y){let W=I1();if(Reflect.getMetadata("transactional",$,J))return await W.handleTransactional($,J,Q,X,Y);return await X.apply($,Q)}createTransactionalProxy($,J){return new Proxy($,{get:(Q,X)=>{let Y=Q[X];if(typeof Y==="function")return async(...W)=>{return await this.intercept(Q,X,W,Y.bind(Q),J)};return Y}})}}function H7(){return async($,J)=>{let Q=c1.getInstance();$.set("transactionInterceptor",Q),$.set("transactionContext",$),await J()}}function BV($){return $.get("transactionInterceptor")||c1.getInstance()}function RO($,J){return BV($).createTransactionalProxy(J,$)}var FV;((H)=>{H.REQUIRED="REQUIRED";H.REQUIRES_NEW="REQUIRES_NEW";H.SUPPORTS="SUPPORTS";H.NOT_SUPPORTED="NOT_SUPPORTED";H.MANDATORY="MANDATORY";H.NEVER="NEVER"})(FV||={});class zV{shouldStartNewTransaction($,J){switch($){case"REQUIRED":return!J;case"REQUIRES_NEW":return!0;case"SUPPORTS":return!1;case"NOT_SUPPORTED":return!1;case"MANDATORY":if(!J)throw Error("Transaction is mandatory but no existing transaction found");return!1;case"NEVER":if(J)throw Error("Transaction is not allowed but existing transaction found");return!1;default:return!J}}shouldSuspendTransaction($,J){return $==="NOT_SUPPORTED"&&!!J}shouldExecuteInTransaction($,J){switch($){case"REQUIRED":case"REQUIRES_NEW":case"MANDATORY":return!0;case"SUPPORTS":return!!J;case"NOT_SUPPORTED":case"NEVER":return!1;default:return!0}}shouldRollbackForError($,J){if(J.noRollbackFor){for(let Q of J.noRollbackFor)if($ instanceof Q)return!1}if(J.rollbackFor){for(let Q of J.rollbackFor)if($ instanceof Q)return!0;return!1}return!0}}function A$($){return(J,Q,X)=>{let Y=X.value,W={isolation:$?.isolation||"READ_COMMITTED",timeout:$?.timeout||30000,readOnly:$?.readOnly||!1,propagation:$?.propagation||"REQUIRED",rollbackFor:$?.rollbackFor,noRollbackFor:$?.noRollbackFor};return Reflect.defineMetadata("transactional",W,J,Q),X.value=async function(...H){let{getGlobalTransactionManager:G}=await Promise.resolve().then(() => (c0(),VV));return await G().handleTransactional(this,Q,H,Y,H.find((U)=>U&&typeof U==="object"&&U.req&&U.res))},X}}function ZO($){return A$({...$,propagation:"REQUIRED"})}function SO($){return A$({...$,propagation:"REQUIRES_NEW"})}function CO($){return A$({...$,propagation:"SUPPORTS"})}function MO($){return A$({...$,propagation:"NOT_SUPPORTED"})}function PO($){return A$({...$,propagation:"MANDATORY"})}function KO($){return A$({...$,propagation:"NEVER"})}var NV;((q)=>{q.BEFORE_BEGIN="BEFORE_BEGIN";q.AFTER_BEGIN="AFTER_BEGIN";q.BEFORE_COMMIT="BEFORE_COMMIT";q.AFTER_COMMIT="AFTER_COMMIT";q.BEFORE_ROLLBACK="BEFORE_ROLLBACK";q.AFTER_ROLLBACK="AFTER_ROLLBACK";q.BEFORE_SAVEPOINT="BEFORE_SAVEPOINT";q.AFTER_SAVEPOINT="AFTER_SAVEPOINT";q.BEFORE_ROLLBACK_TO_SAVEPOINT="BEFORE_ROLLBACK_TO_SAVEPOINT";q.AFTER_ROLLBACK_TO_SAVEPOINT="AFTER_ROLLBACK_TO_SAVEPOINT"})(NV||={});class G7{listeners=[];beginListeners=[];commitListeners=[];rollbackListeners=[];savepointListeners=[];addListener($){this.listeners.push($)}removeListener($){let J=this.listeners.indexOf($);if(J>-1)this.listeners.splice(J,1)}addBeginListener($){this.beginListeners.push($)}addCommitListener($){this.commitListeners.push($)}addRollbackListener($){this.rollbackListeners.push($)}addSavepointListener($){this.savepointListeners.push($)}async emitEvent($){for(let J of this.listeners)try{await J.onTransactionEvent($)}catch(Q){console.error("Error in transaction event listener:",Q)}await this.emitSpecificEvent($)}async emitSpecificEvent($){switch($.type){case"BEFORE_BEGIN":for(let J of this.beginListeners)if(J.onBeforeBegin)try{await J.onBeforeBegin($.context)}catch(Q){console.error("Error in before begin listener:",Q)}break;case"AFTER_BEGIN":for(let J of this.beginListeners)if(J.onAfterBegin)try{await J.onAfterBegin($.context)}catch(Q){console.error("Error in after begin listener:",Q)}break;case"BEFORE_COMMIT":for(let J of this.commitListeners)if(J.onBeforeCommit)try{await J.onBeforeCommit($.context)}catch(Q){console.error("Error in before commit listener:",Q)}break;case"AFTER_COMMIT":for(let J of this.commitListeners)if(J.onAfterCommit)try{await J.onAfterCommit($.context)}catch(Q){console.error("Error in after commit listener:",Q)}break;case"BEFORE_ROLLBACK":for(let J of this.rollbackListeners)if(J.onBeforeRollback)try{await J.onBeforeRollback($.context,$.error)}catch(Q){console.error("Error in before rollback listener:",Q)}break;case"AFTER_ROLLBACK":for(let J of this.rollbackListeners)if(J.onAfterRollback)try{await J.onAfterRollback($.context,$.error)}catch(Q){console.error("Error in after rollback listener:",Q)}break;case"BEFORE_SAVEPOINT":for(let J of this.savepointListeners)if(J.onBeforeSavepoint)try{await J.onBeforeSavepoint($.context,$.metadata?.name)}catch(Q){console.error("Error in before savepoint listener:",Q)}break;case"AFTER_SAVEPOINT":for(let J of this.savepointListeners)if(J.onAfterSavepoint)try{await J.onAfterSavepoint($.context,$.metadata?.name)}catch(Q){console.error("Error in after savepoint listener:",Q)}break;case"BEFORE_ROLLBACK_TO_SAVEPOINT":for(let J of this.savepointListeners)if(J.onBeforeRollbackToSavepoint)try{await J.onBeforeRollbackToSavepoint($.context,$.metadata?.name)}catch(Q){console.error("Error in before rollback to savepoint listener:",Q)}break;case"AFTER_ROLLBACK_TO_SAVEPOINT":for(let J of this.savepointListeners)if(J.onAfterRollbackToSavepoint)try{await J.onAfterRollbackToSavepoint($.context,$.metadata?.name)}catch(Q){console.error("Error in after rollback to savepoint listener:",Q)}break}}clearAllListeners(){this.listeners=[],this.beginListeners=[],this.commitListeners=[],this.rollbackListeners=[],this.savepointListeners=[]}}function IO(){return($,J)=>{Reflect.defineMetadata("transaction-event","begin",$,J)}}function TO(){return($,J)=>{Reflect.defineMetadata("transaction-event","commit",$,J)}}function bO(){return($,J)=>{Reflect.defineMetadata("transaction-event","rollback",$,J)}}class e4{logger;constructor($=console.log){this.logger=$}async onTransactionEvent($){let J=`Transaction ${$.type}: ${$.context.id}`,Q={timestamp:$.timestamp,context:{id:$.context.id,startTime:$.context.startTime,isolation:$.context.isolation,timeout:$.context.timeout,readOnly:$.context.readOnly,savepoints:$.context.savepoints,rollbackOnly:$.context.rollbackOnly},metadata:$.metadata,error:$.error?.message};this.logger(J,Q)}}class $8{metrics={totalTransactions:0,committedTransactions:0,rolledBackTransactions:0,averageDuration:0,totalDuration:0};async onTransactionEvent($){switch($.type){case"AFTER_BEGIN":this.metrics.totalTransactions++;break;case"AFTER_COMMIT":this.metrics.committedTransactions++,this.updateDuration($.context);break;case"AFTER_ROLLBACK":this.metrics.rolledBackTransactions++,this.updateDuration($.context);break}}updateDuration($){let J=Date.now()-$.startTime.getTime();this.metrics.totalDuration+=J,this.metrics.averageDuration=this.metrics.totalDuration/(this.metrics.committedTransactions+this.metrics.rolledBackTransactions)}getMetrics(){return{...this.metrics}}resetMetrics(){this.metrics={totalTransactions:0,committedTransactions:0,rolledBackTransactions:0,averageDuration:0,totalDuration:0}}}var j$=new G7;c0();class V7{name="transaction";version="1.0.0";config;metricsListener;constructor($){this.config={enableLogging:!0,enableMetrics:!0,defaultIsolation:"READ_COMMITTED",defaultTimeout:30000,...$}}async install($){this.setupTransactionManager(),$.use(H7()),this.setupEventListeners(),this.registerTransactionUtilities($),console.log("✅ Transaction plugin installed successfully")}setupTransactionManager(){if(this.config.customTransactionManager)l0(this.config.customTransactionManager);else l0(new w$)}setupEventListeners(){if(this.config.enableLogging){let $=new e4;j$.addListener($)}if(this.config.enableMetrics)this.metricsListener=new $8,j$.addListener(this.metricsListener)}registerTransactionUtilities($){let J=$.getContainer();class Q{}class X{}class Y{}if(J.register(Q,{scope:"singleton",factory:()=>j$}),this.metricsListener)J.register(X,{scope:"singleton",factory:()=>({getMetrics:()=>this.metricsListener.getMetrics(),resetMetrics:()=>this.metricsListener.resetMetrics()})});J.register(Y,{scope:"singleton",factory:()=>({executeInTransaction:async(W)=>{let H=I1(),G=await H.begin();try{let V=await W();if(G.rollbackOnly)throw await H.rollback(G),Error("Transaction marked for rollback");return await H.commit(G),V}catch(V){throw await H.rollback(G),V}},getCurrentTransaction:()=>{return null},isInTransaction:()=>{return!1}})})}getMetrics(){return this.metricsListener?.getMetrics()}resetMetrics(){this.metricsListener?.resetMetrics()}addEventListener($){j$.addListener($)}removeEventListener($){j$.removeListener($)}}function fO($){return new V7($)}class wV{transactionManager;constructor($){this.transactionManager=$}async executeInTransaction($){let J=await this.transactionManager.begin();try{let Q=await $();if(J.rollbackOnly)throw await this.transactionManager.rollback(J),Error("Transaction marked for rollback");return await this.transactionManager.commit(J),Q}catch(Q){throw await this.transactionManager.rollback(J),Q}}async createSavepoint($){}async rollbackToSavepoint($){}setRollbackOnly(){}isInTransaction(){return!1}}class AV{transactionManager;defaultOptions;constructor($,J){this.transactionManager=$;this.defaultOptions=J}async execute($,J){let Q={...this.defaultOptions,...J},X=await this.transactionManager.begin(Q);try{let Y=await $();if(X.rollbackOnly)throw await this.transactionManager.rollback(X),Error("Transaction marked for rollback");return await this.transactionManager.commit(X),Y}catch(Y){throw await this.transactionManager.rollback(X),Y}}async executeReadOnly($){return this.execute($,{readOnly:!0})}async executeWithIsolation($,J){return this.execute($,{isolation:J})}}class V2{modelSchemas=new Map;generateModelSchema($){if(this.modelSchemas.has($.name))return this.modelSchemas.get($.name);let J={};for(let X of $.fields)J[X.name]=this.generateFieldSchema(X);let Q=w.object(J);return this.modelSchemas.set($.name,Q),Q}generateFieldSchema($){let J=this.getBaseSchema($.type);if($.isList)J=w.array(J);if($.isOptional)J=J.optional();if($.isUnique)J=J.describe(`Unique field: ${$.name}`);return J}getBaseSchema($){switch($.toLowerCase()){case"string":return w.string();case"int":case"integer":return w.number().int();case"float":case"decimal":return w.number();case"boolean":case"bool":return w.boolean();case"datetime":case"timestamp":return w.date();case"json":return w.record(w.any());case"bytes":return w.instanceof(Buffer);case"bigint":return w.bigint();default:return w.string()}}generateCreateSchema($){let J={};for(let Q of $.fields){if(Q.isId&&Q.hasDefaultValue)continue;if(Q.name==="createdAt"||Q.name==="updatedAt")continue;J[Q.name]=this.generateFieldSchema(Q)}return w.object(J)}generateUpdateSchema($){let J={};for(let Q of $.fields){if(Q.isId)continue;if(Q.name==="updatedAt")continue;let X=this.generateFieldSchema(Q);if(!X.isOptional())X=X.optional();J[Q.name]=X}return w.object(J)}static parsePrismaSchema($){let J=[],Q=$.split(`
|
|
154
154
|
`),X=null,Y=!1;for(let W of Q){let H=W.trim();if(H.startsWith("model ")){X={name:H.split(" ")[1],fields:[],relations:[]},Y=!0;continue}if(H==="}"&&Y&&X){J.push(X),X=null,Y=!1;continue}if(Y&&X&&H&&!H.startsWith("//")){let G=this.parseField(H);if(G)X.fields.push(G)}}return J}static parseField($){let J=$.trim().split(/\s+/);if(J.length<2)return null;let Q=J[0],X=J[1],Y=X.includes("?"),W=X.includes("[]"),H=X.replace("?","").replace("[]",""),G=$.includes("@")?$.split("@").slice(1):[],V=G.some((_)=>_.startsWith("id")),U=G.some((_)=>_.startsWith("unique")),q=G.some((_)=>_.startsWith("default"));return{name:Q,type:H,isOptional:Y,isList:W,isId:V,isUnique:U,hasDefaultValue:q}}generateAllSchemas($){return{base:this.generateModelSchema($),create:this.generateCreateSchema($),update:this.generateUpdateSchema($)}}}c0();class F6 extends Y1{client;prismaTransactions=new Map;constructor($){super();this.client=$}async begin($){let J=this.createTransactionContext($);return this.prismaTransactions.set(J.id,{options:$,startTime:J.startTime}),J}async commit($){this.prismaTransactions.delete($.id),this.removeTransactionContext($)}async rollback($){this.prismaTransactions.delete($.id),this.removeTransactionContext($)}async savepoint($,J){$.savepoints.push(J);let Q=this.prismaTransactions.get($.id);if(Q)Q.savepoints=Q.savepoints||[],Q.savepoints.push(J)}async rollbackToSavepoint($,J){let Q=$.savepoints.indexOf(J);if(Q===-1)throw Error(`Savepoint ${J} not found`);$.savepoints=$.savepoints.slice(0,Q+1);let X=this.prismaTransactions.get($.id);if(X&&X.savepoints)X.savepoints=X.savepoints.slice(0,Q+1)}async executeInTransaction($,J){let Q={};if(J?.timeout)Q.timeout=J.timeout;if(J?.isolation){let X={READ_UNCOMMITTED:"ReadUncommitted",READ_COMMITTED:"ReadCommitted",REPEATABLE_READ:"RepeatableRead",SERIALIZABLE:"Serializable"};Q.isolationLevel=X[J.isolation]}return await this.client.$transaction($,Q)}async handleTransactional($,J,Q,X,Y){let W=Reflect.getMetadata("transactional",$,J);if(!W)return X.apply($,Q);if(Y?this.getRequestTransaction(Y):null)return X.apply($,Q);return await this.executeInTransaction(async(G)=>{let V=await this.begin(W);if(Y)this.setRequestTransaction(Y,V);try{let U=await this.injectTransactionClient($,Q,X,G);if(V.rollbackOnly)throw Error("Transaction marked for rollback");return U}catch(U){throw this.setRollbackOnly(V),U}finally{if(Y)this.clearRequestTransaction(Y);await this.commit(V)}},W)}async injectTransactionClient($,J,Q,X){if($.repositories){let Y={...$.repositories};try{for(let[W,H]of Object.entries($.repositories))if(H&&typeof H==="object"&&"client"in H){H.client=X;let G=H.modelName;if(G&&X[G.toLowerCase()])H.delegate=X[G.toLowerCase()]}return await Q.apply($,J)}finally{$.repositories=Y}}return await Q.apply($,J)}createTransactionalRepository($,J){let Q=new $(J);if(Q&&typeof Q==="object"&&"withTransaction"in Q){let X=Q.withTransaction;Q.withTransaction=async(Y)=>{return await this.executeInTransaction(async(W)=>{let H=new $({...J,client:W,delegate:W[J.model.toLowerCase()]});return await Y(H)})}}return Q}}c0();var U2=w1(require("fs")),jV=w1(require("path"));class J8{name="prisma";version="1.0.0";client;config;schemaGenerator;transactionManager;models=new Map;constructor($,J){this.client=$,this.config={generateZodSchemas:!0,schemaPath:"./prisma/schema.prisma",outputPath:"./src/generated/zod-schemas.ts",...J},this.schemaGenerator=new V2,this.transactionManager=new F6($)}async install($){if(await this.client.$connect(),l0(this.transactionManager),this.config.generateZodSchemas&&this.config.schemaPath)await this.parseAndGenerateSchemas();this.registerRepositoryFactory($),this.registerShutdownHook($),console.log("✅ Prisma plugin installed successfully")}async parseAndGenerateSchemas(){try{if(!U2.default.existsSync(this.config.schemaPath)){console.warn(`⚠️ Prisma schema not found at ${this.config.schemaPath}`);return}let $=U2.default.readFileSync(this.config.schemaPath,"utf-8"),J=V2.parsePrismaSchema($);for(let Q of J){this.models.set(Q.name,Q);let X=this.schemaGenerator.generateAllSchemas(Q);Q.zodSchema=X.base}if(this.config.outputPath)await this.generateZodSchemaFile();console.log(`\uD83D\uDCDD Generated Zod schemas for ${J.length} models`)}catch($){console.error("❌ Failed to parse Prisma schema:",$)}}async generateZodSchemaFile(){let $=jV.default.dirname(this.config.outputPath);if(!U2.default.existsSync($))U2.default.mkdirSync($,{recursive:!0});let J=`// Auto-generated Zod schemas from Prisma schema
|
|
155
155
|
`;J+=`// Do not edit this file manually
|
|
156
156
|
|
|
@@ -167,4 +167,4 @@ Body: ${Y.text}`);let W={};if($.username)W.username=$.username;if($.email)W.emai
|
|
|
167
167
|
|
|
168
168
|
`}U2.default.writeFileSync(this.config.outputPath,J)}zodSchemaToString($){return"z.object({})"}registerRepositoryFactory($){let J=$.getContainer();class Q{}class X{}J.register(Q,{scope:"singleton",factory:()=>({create:(Y,W)=>{let H=this.client[Y.toLowerCase()];if(!H)throw Error(`Model ${Y} not found in Prisma client`);return new P1({client:this.client,delegate:H,model:Y,zodSchema:W})}})}),J.register(X,{scope:"singleton",factory:()=>this.transactionManager})}registerShutdownHook($){process.on("SIGINT",async()=>{console.log("\uD83D\uDD0C Disconnecting from database..."),await this.client.$disconnect(),process.exit(0)}),process.on("SIGTERM",async()=>{console.log("\uD83D\uDD0C Disconnecting from database..."),await this.client.$disconnect(),process.exit(0)})}getModel($){return this.models.get($)}getModels(){return this.models}createRepository($,J){let Q=this.client[$.toLowerCase()];if(!Q)throw Error(`Model ${$} not found in Prisma client`);return new P1({client:this.client,delegate:Q,model:$,zodSchema:J})}getClient(){return this.client}getTransactionManager(){return this.transactionManager}}function EV($,J){return new J8($,J)}c0();class z6 extends Y1{dataSource;activeQueryRunners=new Map;constructor($){super();this.dataSource=$}async begin($){let J=this.createTransactionContext($),Q=this.dataSource.createQueryRunner();return await Q.connect(),await Q.startTransaction(),this.activeQueryRunners.set(J.id,Q),J}async commit($){let J=this.activeQueryRunners.get($.id);if(!J)throw Error(`Transaction ${$.id} not found`);try{if($.rollbackOnly)await J.rollbackTransaction();else await J.commitTransaction()}finally{await J.release(),this.activeQueryRunners.delete($.id),this.removeTransactionContext($)}}async rollback($){let J=this.activeQueryRunners.get($.id);if(!J)throw Error(`Transaction ${$.id} not found`);try{if(J.isTransactionActive)await J.rollbackTransaction()}finally{await J.release(),this.activeQueryRunners.delete($.id),this.removeTransactionContext($)}}async savepoint($,J){let Q=this.activeQueryRunners.get($.id);if(!Q)throw Error(`Transaction ${$.id} not found`);await Q.manager.query(`SAVEPOINT ${J}`),$.savepoints.push(J)}async rollbackToSavepoint($,J){let Q=this.activeQueryRunners.get($.id);if(!Q)throw Error(`Transaction ${$.id} not found`);let X=$.savepoints.indexOf(J);if(X===-1)throw Error(`Savepoint ${J} not found`);await Q.manager.query(`ROLLBACK TO SAVEPOINT ${J}`),$.savepoints=$.savepoints.slice(0,X+1)}async executeInTransaction($,J){return await this.dataSource.transaction(async(Q)=>{return await $(Q)})}async handleTransactional($,J,Q,X,Y){let W=Reflect.getMetadata("transactional",$,J);if(!W)return X.apply($,Q);let H=Y?this.getRequestTransaction(Y):null;if(H)return this.handleNestedTransaction(H,$,Q,X);return await this.executeInTransaction(async(G)=>{let V=await this.begin(W);if(Y)this.setRequestTransaction(Y,V);try{let U=await this.injectTransactionManager($,Q,X,G);if(V.rollbackOnly)throw Error("Transaction marked for rollback");return U}catch(U){throw this.setRollbackOnly(V),U}finally{if(Y)this.clearRequestTransaction(Y);this.removeTransactionContext(V)}},W)}async handleNestedTransaction($,J,Q,X){let Y=`sp_${Date.now()}_${Math.random().toString(36).substring(2,11)}`;try{return await this.savepoint($,Y),await X.apply(J,Q)}catch(W){throw await this.rollbackToSavepoint($,Y),W}}async injectTransactionManager($,J,Q,X){if($.repositories){let Y={...$.repositories};try{for(let[W,H]of Object.entries($.repositories))if(H&&typeof H==="object"&&"dataSource"in H){let G=H.entity,V=X.getRepository?X.getRepository(G):H.repository;$.repositories[W]=new H.constructor({dataSource:H.dataSource,repository:V,entity:G,zodSchema:H.schema})}return await Q.apply($,J)}finally{$.repositories=Y}}return await Q.apply($,J)}createTransactionalRepository($,J){let Q=new $(J);if(Q&&typeof Q==="object"&&"withTransaction"in Q){let X=Q.withTransaction;Q.withTransaction=async(Y)=>{return await this.executeInTransaction(async(W)=>{let H=W.getRepository?W.getRepository(J.entity):J.repository,G=new $({...J,repository:H});return await Y(G)})}}return Q}getQueryRunner($){return this.activeQueryRunners.get($.id)}isTransactionActive($){let J=this.activeQueryRunners.get($.id);return J?J.isTransactionActive:!1}getDataSource(){return this.dataSource}}c0();class Q8{name="typeorm";version="1.0.0";dataSource;config;transactionManager;entities=new Map;constructor($,J){this.dataSource=$,this.config={synchronize:!1,logging:!1,migrationsRun:!1,dropSchema:!1,cache:!1,...J},this.transactionManager=new z6($)}async install($){if(!this.dataSource.isInitialized)await this.dataSource.initialize();l0(this.transactionManager),this.extractEntityMetadata(),this.registerRepositoryFactory($),this.registerMigrationUtilities($),this.registerShutdownHook($),console.log("✅ TypeORM plugin installed successfully")}extractEntityMetadata(){try{let $=this.dataSource.entityMetadatas||this.dataSource.manager.connection?.entityMetadatas||[];for(let J of $){let Q={name:J.name,tableName:J.tableName,columns:J.columns?.map((X)=>({propertyName:X.propertyName,type:X.type,isPrimary:X.isPrimary,isGenerated:X.isGenerated,isNullable:X.isNullable,isUnique:X.isUnique,length:X.length,default:X.default}))||[],relations:J.relations?.map((X)=>({propertyName:X.propertyName,type:X.relationType,target:X.inverseEntityMetadata?.name||"unknown",inverseSide:X.inverseSidePropertyPath,joinColumn:X.joinColumns?.[0]?.databaseName,joinTable:X.joinTableName}))||[]};this.entities.set(J.name,Q)}console.log(`\uD83D\uDCDD Extracted metadata for ${this.entities.size} entities`)}catch($){console.error("❌ Failed to extract entity metadata:",$)}}registerRepositoryFactory($){let J=$.getContainer();class Q{}class X{}class Y{}class W{}J.register(Q,{scope:"singleton",factory:()=>({create:(H,G)=>{let V=this.dataSource.getRepository(H);return new K1({dataSource:this.dataSource,repository:V,entity:H,zodSchema:G})}})}),J.register(X,{scope:"singleton",factory:()=>this.dataSource}),J.register(Y,{scope:"request",factory:()=>this.dataSource.manager}),J.register(W,{scope:"singleton",factory:()=>this.transactionManager})}registerMigrationUtilities($){let J=$.getContainer();class Q{}class X{}J.register(Q,{scope:"singleton",factory:()=>({run:async()=>{if(this.config.migrationsRun&&this.dataSource.runMigrations)await this.dataSource.runMigrations(),console.log("✅ Migrations executed successfully")},revert:async()=>{if(this.dataSource.undoLastMigration)await this.dataSource.undoLastMigration(),console.log("✅ Last migration reverted successfully")},generate:async(Y)=>{console.log(`\uD83D\uDCDD Generate migration: ${Y}`)}})}),J.register(X,{scope:"singleton",factory:()=>({seed:async(Y)=>{for(let W of Y)if(typeof W.run==="function")await W.run(this.dataSource);console.log("✅ Database seeded successfully")}})})}registerShutdownHook($){process.on("SIGINT",async()=>{if(console.log("\uD83D\uDD0C Closing database connection..."),this.dataSource.isInitialized)await this.dataSource.destroy();process.exit(0)}),process.on("SIGTERM",async()=>{if(console.log("\uD83D\uDD0C Closing database connection..."),this.dataSource.isInitialized)await this.dataSource.destroy();process.exit(0)})}getEntity($){return this.entities.get($)}getEntities(){return this.entities}createRepository($,J){let Q=this.dataSource.getRepository($);return new K1({dataSource:this.dataSource,repository:Q,entity:$,zodSchema:J})}getDataSource(){return this.dataSource}getTransactionManager(){return this.transactionManager}async runMigrations(){if(this.dataSource.runMigrations)await this.dataSource.runMigrations(),console.log("✅ Migrations executed successfully");else console.warn("⚠️ Migration support not available")}async revertMigration(){if(this.dataSource.undoLastMigration)await this.dataSource.undoLastMigration(),console.log("✅ Last migration reverted successfully");else console.warn("⚠️ Migration revert not available")}async synchronize(){if(this.config.synchronize&&this.dataSource.synchronize)await this.dataSource.synchronize(),console.log("✅ Database schema synchronized");else console.warn("⚠️ Schema synchronization is disabled or not available")}async dropSchema(){if(this.config.dropSchema&&this.dataSource.dropDatabase)await this.dataSource.dropDatabase(),console.log("✅ Database schema dropped");else console.warn("⚠️ Schema dropping is disabled or not available")}}function LV($,J){return new Q8($,J)}class U7{}var pf=w1(X$(),1);function OV($){return(J)=>{let Q={name:$?.name||J.name,tableName:$?.tableName||J.name.toLowerCase(),schema:$?.schema,database:$?.database,synchronize:$?.synchronize};Reflect.defineMetadata("typeorm:entity",Q,J)}}c0();class N6 extends Y1{database;drizzleTransactions=new Map;constructor($){super();this.database=$}async begin($){let J=this.createTransactionContext($);return this.drizzleTransactions.set(J.id,{options:$,startTime:J.startTime}),J}async commit($){this.drizzleTransactions.delete($.id),this.removeTransactionContext($)}async rollback($){this.drizzleTransactions.delete($.id),this.removeTransactionContext($)}async savepoint($,J){$.savepoints.push(J);let Q=this.drizzleTransactions.get($.id);if(Q)Q.savepoints=Q.savepoints||[],Q.savepoints.push(J)}async rollbackToSavepoint($,J){let Q=$.savepoints.indexOf(J);if(Q===-1)throw Error(`Savepoint ${J} not found`);$.savepoints=$.savepoints.slice(0,Q+1);let X=this.drizzleTransactions.get($.id);if(X&&X.savepoints)X.savepoints=X.savepoints.slice(0,Q+1)}async executeInTransaction($,J){return await this.database.transaction(async(Q)=>{return await $(Q)})}async handleTransactional($,J,Q,X,Y){let W=Reflect.getMetadata("transactional",$,J);if(!W)return X.apply($,Q);if(Y?this.getRequestTransaction(Y):null)return X.apply($,Q);return await this.executeInTransaction(async(G)=>{let V=await this.begin(W);if(Y)this.setRequestTransaction(Y,V);try{let U=await this.injectTransactionDatabase($,Q,X,G);if(V.rollbackOnly)throw Error("Transaction marked for rollback");return U}catch(U){throw this.setRollbackOnly(V),U}finally{if(Y)this.clearRequestTransaction(Y);await this.commit(V)}},W)}async injectTransactionDatabase($,J,Q,X){if($.repositories){let Y={...$.repositories};try{for(let[W,H]of Object.entries($.repositories))if(H&&typeof H==="object"&&"database"in H){let{table:G,schema:V}=H;$.repositories[W]=new H.constructor({database:X,table:G,zodSchema:V})}return await Q.apply($,J)}finally{$.repositories=Y}}return await Q.apply($,J)}createTransactionalRepository($,J){let Q=new $(J);if(Q&&typeof Q==="object"&&"withTransaction"in Q){let X=Q.withTransaction;Q.withTransaction=async(Y)=>{return await this.executeInTransaction(async(W)=>{let H=new $({...J,database:W});return await Y(H)})}}return Q}async batch($){return await this.executeInTransaction(async(J)=>{let Q=[];for(let X of $){let Y=await X();Q.push(Y)}return Q})}async executeWithRetry($,J={}){let{maxRetries:Q=3,retryDelay:X=1000,retryCondition:Y=(H)=>H.code==="SERIALIZATION_FAILURE"||H.code==="DEADLOCK_DETECTED"}=J,W;for(let H=0;H<=Q;H++)try{return await this.executeInTransaction($)}catch(G){if(W=G,H===Q||!Y(G))throw G;await new Promise((V)=>setTimeout(V,X*Math.pow(2,H)))}throw W}getDatabase(){return this.database}isInTransaction(){return this.drizzleTransactions.size>0}getActiveTransactionCount(){return this.drizzleTransactions.size}}c0();class X8{tableSchemas=new Map;convertTableToZod($){let J=$._.name;if(this.tableSchemas.has(J))return this.tableSchemas.get(J);let Q={};for(let[Y,W]of Object.entries($._.columns))Q[Y]=this.convertColumnToZod(W);let X=w.object(Q);return this.tableSchemas.set(J,X),X}convertColumnToZod($){let J=this.getBaseZodSchema($);if(!$._.notNull)J=J.nullable();if($._.hasDefault||!$._.notNull)J=J.optional();return J}getBaseZodSchema($){let J=$._.dataType.toLowerCase(),Q=$._.columnType.toLowerCase();if($._.enumValues&&$._.enumValues.length>0)return w.enum($._.enumValues);switch(Q){case"serial":case"bigserial":return w.number().int().positive();case"boolean":return w.boolean();case"date":return w.date();case"timestamp":case"timestamptz":return w.date();case"json":case"jsonb":return w.record(w.any());case"uuid":return w.string().uuid();case"text":case"varchar":case"char":return w.string();case"integer":case"int":case"int4":return w.number().int();case"bigint":case"int8":return w.bigint();case"smallint":case"int2":return w.number().int().min(-32768).max(32767);case"real":case"float4":return w.number();case"double precision":case"float8":return w.number();case"decimal":case"numeric":return w.number();case"bytea":return w.instanceof(Buffer);default:return this.getBaseZodSchemaByDataType(J)}}getBaseZodSchemaByDataType($){switch($){case"string":case"text":return w.string();case"number":case"integer":return w.number();case"boolean":return w.boolean();case"date":return w.date();case"json":return w.record(w.any());case"buffer":return w.instanceof(Buffer);case"bigint":return w.bigint();default:return w.string()}}generateCreateSchema($){let J={};for(let[Q,X]of Object.entries($._.columns)){if(X._.isPrimaryKey&&X._.hasDefault)continue;if(X._.columnType.includes("serial"))continue;J[Q]=this.convertColumnToZod(X)}return w.object(J)}generateUpdateSchema($){let J={};for(let[Q,X]of Object.entries($._.columns)){if(X._.isPrimaryKey)continue;let Y=this.convertColumnToZod(X);if(!Y.isOptional())Y=Y.optional();J[Q]=Y}return w.object(J)}extractTableMetadata($){let J=[];for(let[Q,X]of Object.entries($._.columns))J.push({name:Q,dataType:X._.dataType,isPrimaryKey:X._.isPrimaryKey,isNotNull:X._.notNull,hasDefault:X._.hasDefault,isUnique:X._.isUnique,isAutoIncrement:X._.columnType.includes("serial"),enumValues:X._.enumValues});return{name:$._.name,schema:$._.schema,columns:J,relations:[],zodSchema:this.convertTableToZod($)}}generateAllSchemas($){return{base:this.convertTableToZod($),create:this.generateCreateSchema($),update:this.generateUpdateSchema($)}}clearCache(){this.tableSchemas.clear()}getCachedSchema($){return this.tableSchemas.get($)}}class q7{name="drizzle";version="1.0.0";database;config;transactionManager;schemaConverter;tables=new Map;tableMetadata=new Map;logger=o1({component:"DrizzlePlugin"});constructor($,J){this.database=$,this.config={logger:!1,mode:"default",...J},this.transactionManager=new N6($),this.schemaConverter=new X8}async install($){try{if(this.logger.info("Installing Drizzle ORM plugin..."),l0(this.transactionManager),this.logger.debug("Global transaction manager configured"),this.config.schema)this.registerSchema(this.config.schema);this.registerRepositoryFactory($),this.registerDatabaseUtilities($),this.logger.info("✅ Drizzle plugin installed successfully")}catch(J){let Q=J instanceof Error?J:Error(String(J));throw this.logger.error("Failed to install Drizzle plugin",Q),Error(`Drizzle plugin installation failed: ${Q.message}`)}}registerSchema($){let J=0,Q=0;for(let[X,Y]of Object.entries($))if(this.isValidDrizzleTable(Y))try{this.tables.set(X,Y);let W=this.schemaConverter.extractTableMetadata(Y);this.tableMetadata.set(X,W),J++,this.logger.debug(`Registered table: ${X}`)}catch(W){let H=W instanceof Error?W:Error(String(W));this.logger.error(`Failed to register table ${X}`,H,{tableName:X}),Q++}else this.logger.debug(`Skipped invalid table: ${X}`),Q++;this.logger.info(`\uD83D\uDCDD Registered ${J} Drizzle table(s)${Q>0?` (${Q} skipped)`:""}`)}isValidDrizzleTable($){if(!$||typeof $!=="object")return!1;let J=$;if(!J._||typeof J._!=="object")return!1;if(typeof J._.name!=="string"||J._.name.trim().length===0)return!1;if(!J._.columns||typeof J._.columns!=="object")return!1;if(Object.keys(J._.columns).length===0)return this.logger.warn(`Table ${J._.name} has no columns defined`),!1;return!0}registerRepositoryFactory($){let J=$.getContainer();J.register("DrizzleRepositoryFactory",{scope:"singleton",factory:()=>({create:(Q,X)=>{let Y=this.tables.get(Q);if(!Y)throw Error(`Table ${Q} not found in Drizzle schema`);return new m0({database:this.database,table:Y,zodSchema:X||this.tableMetadata.get(Q)?.zodSchema})},createFromTable:(Q,X)=>{return new m0({database:this.database,table:Q,zodSchema:X})}})}),J.register("DrizzleDatabase",{scope:"singleton",factory:()=>this.database}),J.register("TransactionManager",{scope:"singleton",factory:()=>this.transactionManager}),J.register("DrizzleSchemaConverter",{scope:"singleton",factory:()=>this.schemaConverter})}registerDatabaseUtilities($){let J=$.getContainer();J.register("QueryBuilder",{scope:"request",factory:()=>({select:(Q)=>this.database.select(Q),insert:(Q)=>this.database.insert(Q),update:(Q)=>this.database.update(Q),delete:(Q)=>this.database.delete(Q),raw:(Q,X)=>this.database.execute({sql:Q,params:X})})}),J.register("Seeder",{scope:"singleton",factory:()=>({seed:async(Q)=>{let X=o1({component:"Seeder"});try{X.info(`Running ${Q.length} seeder(s)...`),await this.transactionManager.executeInTransaction(async(Y)=>{for(let W of Q)if(typeof W.run==="function")X.debug(`Running seeder: ${W.constructor.name}`),await W.run(Y);else X.warn(`Skipping invalid seeder (no run method): ${W.constructor.name}`)}),X.info("✅ Database seeded successfully")}catch(Y){let W=Y instanceof Error?Y:Error(String(Y));throw X.error("Failed to seed database",W),Error(`Database seeding failed: ${W.message}`)}}})})}getTable($){return this.tables.get($)}getTables(){return this.tables}getTableMetadata($){return this.tableMetadata.get($)}getAllTableMetadata(){return this.tableMetadata}createRepository($,J){let Q=this.tables.get($);if(!Q)throw Error(`Table ${$} not found in Drizzle schema`);return new m0({database:this.database,table:Q,zodSchema:J||this.tableMetadata.get($)?.zodSchema})}createRepositoryFromTable($,J){return new m0({database:this.database,table:$,zodSchema:J})}getDatabase(){return this.database}getTransactionManager(){return this.transactionManager}getSchemaConverter(){return this.schemaConverter}addTable($,J){if(!this.isValidDrizzleTable(J))throw Error(`Invalid Drizzle table: ${$}`);this.tables.set($,J);let Q=this.schemaConverter.extractTableMetadata(J);this.tableMetadata.set($,Q),this.logger.debug(`Added table dynamically: ${$}`)}removeTable($){let J=this.tables.has($);if(this.tables.delete($),this.tableMetadata.delete($),J)this.logger.debug(`Removed table: ${$}`);return J}generateZodSchemas(){let $={};for(let[J,Q]of this.tables){let X=this.schemaConverter.generateAllSchemas(Q);$[J]=X}return $}async executeRaw($,J){try{return this.logger.debug("Executing raw SQL query"),await this.database.execute({sql:$,params:J})}catch(Q){let X=Q instanceof Error?Q:Error(String(Q));throw this.logger.error("Raw SQL query failed",X),Error(`SQL execution failed: ${X.message}`)}}async executeInTransaction($){try{return await this.transactionManager.executeInTransaction($)}catch(J){let Q=J instanceof Error?J:Error(String(J));throw this.logger.error("Transaction failed",Q),J}}}class Y8{client;prefix;constructor($,J={}){this.client=$,this.prefix=J.prefix||"cache:"}async get($){let J=this.getFullKey($),Q=await this.client.get(J);if(!Q)return null;try{return JSON.parse(Q)}catch{return Q}}async set($,J,Q=0){let X=this.getFullKey($),Y=JSON.stringify(J);if(Q>0)await this.client.setex(X,Q,Y);else await this.client.set(X,Y)}async delete($){let J=this.getFullKey($);return await this.client.del(J)>0}async has($){let J=this.getFullKey($);return await this.client.exists(J)>0}async clear(){let $=await this.keys("*");if($.length>0)await Promise.all($.map((J)=>this.delete(J)))}async deletePattern($){let J=await this.keys($);if(J.length===0)return 0;return await Promise.all(J.map((Q)=>this.delete(Q))),J.length}async keys($="*"){let J=this.getFullKey($);return(await this.client.keys(J)).map((X)=>X.substring(this.prefix.length))}getFullKey($){return`${this.prefix}${$}`}}function RV($,J){return new Y8($,J)}C2();
|
|
169
169
|
|
|
170
|
-
//# debugId=
|
|
170
|
+
//# debugId=9C625722BCA4D72C64756E2164756E21
|