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/esm/src/index.js
CHANGED
|
@@ -76,7 +76,7 @@ and limitations under the License.
|
|
|
76
76
|
};
|
|
77
77
|
</script>
|
|
78
78
|
</body>
|
|
79
|
-
</html>`}}class z2{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 C6{connections=new Map;rooms=new Map;connectionsByRoom=new Map;handleConnection($,J){let Q=new z2($,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 z2($,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 y8{name="websocket";version="1.0.0";manager;constructor(){this.manager=new C6}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 XC=v1(o1(),1),u8=Symbol("graphql:resolver"),K$=Symbol("graphql:field"),N2=Symbol("graphql:args");function YC($){return(J)=>{let Q={target:J,name:$||J.name};Reflect.defineMetadata(u8,Q,J)}}function WC($,J){return m8("query",$,J)}function HC($,J){return m8("mutation",$,J)}function GC($,J){return m8("subscription",$,J)}function m8($,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(K$,X.constructor)||[];H.push(W),Reflect.defineMetadata(K$,H,X.constructor),Reflect.defineMetadata(K$,W,X,Y)}}function VC($,J,Q){return(X,Y,W)=>{if(!Y)return;let H=Reflect.getMetadata(N2,X,Y)||[],G={index:W,name:$,schema:J,description:Q?.description,defaultValue:Q?.defaultValue,nullable:Q?.nullable};H[W]=G,Reflect.defineMetadata(N2,H,X,Y)}}function UC(){return($,J,Q)=>{if(!J)return;let X=Reflect.getMetadata(N2,$,J)||[],Y={index:Q,name:"__context__",nullable:!1};X[Q]=Y,Reflect.defineMetadata(N2,X,$,J)}}function qC($){return Reflect.getMetadata(u8,$)}function _C($){return Reflect.getMetadata(K$,$)||[]}function DC($,J){return Reflect.getMetadata(K$,$,J)}function l8($,J){return Reflect.getMetadata(N2,$,J)||[]}function BC($){return Reflect.hasMetadata(u8,$)}function FC($,J){return Reflect.hasMetadata(K$,$,J)}function z1($){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`[${z1($._def.type)}]`;if(J==="ZodObject")return"JSON";if(J==="ZodOptional")return z1($._def.innerType);if(J==="ZodNullable")return z1($._def.innerType);if(J==="ZodDefault")return z1($._def.innerType);if(J==="ZodEnum")return"String";if(J==="ZodUnion"){let Q=$._def.options;if(Q&&Q.length>0)return z1(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 w2($){let J=$._def.typeName;if(J==="ZodOptional"||J==="ZodNullable")return!0;if(J==="ZodDefault")return w2($._def.innerType);return!1}function v3($){let J=$._def.typeName;if(J==="ZodDefault")return $._def.defaultValue();if(J==="ZodOptional"||J==="ZodNullable"){let Q=$._def.innerType;if(Q)return v3(Q)}return}function NC($,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=z1(G),q=w2(G)?V:`${V}!`;Y.push(` ${W}: ${q}`)}return`type ${$} {
|
|
79
|
+
</html>`}}class z2{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 C6{connections=new Map;rooms=new Map;connectionsByRoom=new Map;handleConnection($,J){let Q=new z2($,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 z2($,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 y8{name="websocket";version="1.0.0";manager;constructor(){this.manager=new C6}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 XC=v1(o1(),1),u8=Symbol("graphql:resolver"),K$=Symbol("graphql:field"),N2=Symbol("graphql:args");function YC($){return(J)=>{let Q={target:J,name:$||J.name};Reflect.defineMetadata(u8,Q,J)}}function WC($,J){return m8("query",$,J)}function HC($,J){return m8("mutation",$,J)}function GC($,J){return m8("subscription",$,J)}function m8($,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(K$,X.constructor)||[];H.push(W),Reflect.defineMetadata(K$,H,X.constructor),Reflect.defineMetadata(K$,W,X,Y)}}function VC($,J,Q){return(X,Y,W)=>{if(!Y)return;let H=Reflect.getMetadata(N2,X,Y)||[],G={index:W,name:$,schema:J,description:Q?.description,defaultValue:Q?.defaultValue,nullable:Q?.nullable};H[W]=G,Reflect.defineMetadata(N2,H,X,Y)}}function UC(){return($,J,Q)=>{if(!J)return;let X=Reflect.getMetadata(N2,$,J)||[],Y={index:Q,name:"__context__",nullable:!1};X[Q]=Y,Reflect.defineMetadata(N2,X,$,J)}}function qC($){return Reflect.getMetadata(u8,$)}function _C($){return Reflect.getMetadata(K$,$)||[]}function DC($,J){return Reflect.getMetadata(K$,$,J)}function l8($,J){return Reflect.getMetadata(N2,$,J)||[]}function BC($){return Reflect.hasMetadata(u8,$)}function FC($,J){return Reflect.hasMetadata(K$,$,J)}function z1($){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`[${z1($._def.type)}]`;if(J==="ZodObject")return"JSON";if(J==="ZodOptional")return z1($._def.innerType);if(J==="ZodNullable")return z1($._def.innerType);if(J==="ZodDefault")return z1($._def.innerType);if(J==="ZodEnum")return"String";if(J==="ZodUnion"){let Q=$._def.options;if(Q&&Q.length>0)return z1(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 w2($){let J=$._def.typeName;if(J==="ZodOptional"||J==="ZodNullable")return!0;if(J==="ZodDefault")return w2($._def.innerType);return!1}function v3($){let J=$._def.typeName;if(J==="ZodDefault")return $._def.defaultValue();if(J==="ZodOptional"||J==="ZodNullable"){let Q=$._def.innerType;if(Q)return v3(Q)}return}function NC($,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=z1(G),q=w2(G)?V:`${V}!`;Y.push(` ${W}: ${q}`)}return`type ${$} {
|
|
80
80
|
${Y.join(`
|
|
81
81
|
`)}
|
|
82
82
|
}`}function wC($,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=z1(G),U=w2(G),q=v3(G),_=U?V:`${V}!`;if(q!==void 0){let F=JSON.stringify(q);_+=` = ${F}`}Y.push(` ${W}: ${_}`)}return`input ${$} {
|
|
@@ -151,7 +151,7 @@ Body: ${Q.text}`);let X=Q.body,Y=X?.tokens?.accessToken??X?.accessToken??X?.toke
|
|
|
151
151
|
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 \u2014 HTTP ${Y.status}.
|
|
152
152
|
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 Y9({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(O2.prototype);return $.hono=this.hono,$.defaultHeaders={...this.defaultHeaders},$}}PQ();class x6{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}}}a1();var IQ=/^[\w!#$%&'*.^`|~+-]+$/,pB=/^[ !#-:<-[\]-~]*$/,KQ=($)=>{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)},A9=($,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=KQ(Y.substring(0,W));if(J&&J!==H||!IQ.test(H))continue;let G=KQ(Y.substring(W+1));if(G.startsWith('"')&&G.endsWith('"'))G=G.slice(1,-1);if(pB.test(G)){if(X[H]=G.indexOf("%")!==-1?f$(G,R2):G,J)break}}return X};var iB=($,J,Q={})=>{if(!IQ.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},v6=($,J,Q)=>{return J=encodeURIComponent(J),iB($,J,Q)};var h6=($,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 A9(X,W)[W]}if(!X)return{};return A9(X)};var nB=($,J,Q)=>{let X;if(Q?.prefix==="secure")X=v6("__Secure-"+$,J,{path:"/",...Q,secure:!0});else if(Q?.prefix==="host")X=v6("__Host-"+$,J,{...Q,path:"/",secure:!0,domain:void 0});else X=v6($,J,{path:"/",...Q});return X},g6=($,J,Q,X)=>{let Y=nB(J,Q,X);$.header("Set-Cookie",Y,{append:!0})};class TQ{static json($,J=200,Q){return new j9($,J,Q)}static html($,J=200){return new E9($,J)}static file($,J){return new O9($,J)}static stream($,J){return new R9($,J)}static redirect($,J=302){return new L9($,J)}}class j9{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 E9{content;status;constructor($,J=200){this.content=$;this.status=J}toHonoResponse($){return $.html(this.content,this.status)}}class L9{url;status;constructor($,J=302){this.url=$;this.status=J}toHonoResponse($){return $.redirect(this.url,this.status)}}class O9{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 R9{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 Z9{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 TQ)return J;if(J instanceof j9)return J.toHonoResponse($);if(J instanceof E9)return J.toHonoResponse($);if(J instanceof O9)return J.toHonoResponse($);if(J instanceof R9)return J.toHonoResponse($);if(J instanceof L9)return J.toHonoResponse($);if(J&&typeof J.toHonoResponse==="function")return J.toHonoResponse($);return $.json(J)}}class K1{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?K1.handlerIds.get(J)??K1.assignHandlerId(J):null})}static handlerIds=new WeakMap;static nextHandlerId=0;static assignHandlerId($){let J=++K1.nextHandlerId;return K1.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))}}T$();class u6{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=K1.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(() => (H2(),T8)),{parseTTL:_}=await Promise.resolve().then(() => I8);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(() => I8),_=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(() => (H2(),T8));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 Z9.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 c8(`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=h6($,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(() => (I1(),fQ));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(() => h4);Y=G($);break;case"abort-signal":let{getAbortSignal:V}=await Promise.resolve().then(() => h4);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}}T$();I$();class m6{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 g1(J,Q)}catch(Q){if(this.isDevelopment)console.error("Custom error handler failed:",Q)}if($ instanceof P1)return g1(J,this.handleValidationException($,J));if($.name==="ZodError"&&Array.isArray($.issues)){let Q=new P1($);return g1(J,this.handleValidationException(Q,J))}if($ instanceof E0)return g1(J,this.handleHTTPException($,J));return g1(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 j2(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{c0().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{c0().warn("HTTP Client Error",X)}catch{console.warn("HTTP Exception:",X)}}let Q=$.toJSON();return j2(J,Q,$.statusCode,this.format)}handleGenericError($,J){let Q={name:$.name,message:$.message,path:J.req.path,method:J.req.method,stack:$.stack};try{c0().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:A2(X),title:M1(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(`
|
|
153
153
|
`).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(`
|
|
154
|
-
`).map((G)=>G.trim())}return J.json(H,X)}return j2(J,W,X,this.format)}isDevelopmentMode(){return this.isDevelopment}setDevelopmentMode($){this.isDevelopment=$}}class l6{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 v${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 w9,this.metadata=new S,this.container=new x6,this.validator=new b$,this.errorHandler=new m6(void 0,{errorResponseFormat:this.config.errorResponseFormat}),this.pluginManager=new l6,this.compiler=new u6(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 xQ(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:kQ,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=x4($);this.use(J)}useRateLimit($){let J=$2($);this.use(J)}useCompression($){let J=v4($);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=c0().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}=T4(f4);return new J(this.hono)}case"express":{let{ExpressAdapter:J}=(k4(),T4(b5));return new J(this)}case"native":{let{HonoAdapter:J}=T4(f4);return new J(this.hono)}default:throw Error(`Unknown adapter type: ${$}. Supported adapters: 'hono', 'express', 'native'`)}}}class kQ{}class xQ{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 vQ($){let J={docs:!1,cors:!1,...$};return new v$(J)}function sB($,J,Q,X){let Y=$.getContainer(),W=typeof Q==="function"?Q:()=>Q;Y.register(J,{scope:X?.scope||"singleton",factory:W})}function hQ($){return new O2($)}async function oB($,J){let Q=vQ(J);await $(Q),await Q.compile();let X=hQ(Q);return{app:Q,client:X}}function rB($){$.getContainer().clear()}var ak=v1(o1(),1);function NK($="",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 h$($){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 wK=h$("GET"),AK=h$("POST"),jK=h$("PUT"),EK=h$("DELETE"),LK=h$("PATCH"),OK=h$("ALL");function RK($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,statusCode:$})}}function ZK($,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 SK($,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 CK($){let J=$2($);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 aB($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"body",schema:$,required:!0};S.defineParameter(J,Q,X,Y)}}function tB($){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 eB($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"param",name:$,required:!0};S.defineParameter(J,Q,X,Y)}}function $F($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"header",name:$,required:!1};S.defineParameter(J,Q,X,Y)}}function JF($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"cookie",name:$,required:!1};S.defineParameter(J,Q,X,Y)}}function QF(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"request",required:!0};S.defineParameter($,J,Q,X)}}function XF(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"context",required:!0};S.defineParameter($,J,Q,X)}}function YF(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"request-id",required:!1};S.defineParameter($,J,Q,X)}}function WF(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"abort-signal",required:!1};S.defineParameter($,J,Q,X)}}function TK($,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 bK($,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 xK(...$){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 gK($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,summary:$}})}}function yK($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,description:$}})}}function uK($){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 mK(...$){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 lK(){return($,J)=>{let Q=S.getRouteMetadata($,J);S.defineRoute($,J,{...Q,docs:{...Q?.docs,deprecated:!0}})}}function cK($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,...$}})}}function dK($){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 HF($){return(J,Q)=>{Reflect.defineMetadata("cache:options",$,J,Q);let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,cache:$})}}function GF($){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 S9=Symbol("veloce:db");function VF($,J,Q=S9){$.getContainer().register(Q,{scope:"singleton",factory:()=>J})}function UF($=S9){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$();k4();T$();I1();var b1=v1(FH(),1);class q5{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=b1.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=b1.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 b1.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=b1.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 b1.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 NT=w.object({sub:w.string(),iat:w.number().optional(),exp:w.number().optional(),iss:w.string().optional(),aud:w.string().optional()}).passthrough(),wT=w.object({username:w.string().min(1),password:w.string().min(1)}),AT=w.object({refreshToken:w.string().min(1)});I1();class E4{config;userProvider;jwtProvider;constructor($,J){this.config=$;this.userProvider=J;this.jwtProvider=new q5($)}async login($,J){let Q=await this.userProvider.findByCredentials($,J);if(!Q)throw new S0("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 x$(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 S0("User not found");return Q}catch(J){if(J instanceof Error){if(J.message.includes("expired"))throw new y6;throw new x$(J.message)}throw new x$("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 jE{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 m2{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 zH(){let $=new m2;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 MT=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()}),PT=w.object({userId:w.string(),roles:w.array(w.string())}),KT=w.object({userId:w.string(),permission:w.string()});class l2{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 bT($){return(J,Q)=>{let X={required:!$?.optional,config:$};S.defineAuth(J,Q,X)}}function fT(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"current-user",required:!1})}}function kT(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"token",required:!1})}}function NH($){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 w1($){return $.get("auth.user")||null}function wH($){return $.get("auth.token")||null}function xT($){return $.get("auth.authenticated")===!0}function vT($){return $.get("auth.error")||null}I1();function EE($){return(J,Q)=>{let Y={config:Array.isArray($)?{roles:$,requireAll:!1,allowInherited:!0}:{requireAll:!1,allowInherited:!0,...$}};S.defineRoles(J,Q,Y)}}function LE($){return(J,Q)=>{let Y={config:Array.isArray($)?{permissions:$,requireAll:!1}:{requireAll:!1,...$}};S.definePermissions(J,Q,Y)}}function AH($){return EE([$])}function cT($){return LE([$])}function dT(){return AH("admin")}function pT(){return AH("super-admin")}function iT($){return(J,Q)=>{S.defineMinimumRole(J,Q,{roleName:$})}}function jH($){return async(J,Q)=>{J.set("rbac",$),await Q()}}class L4{rbac;constructor($){this.rbac=$}checkRoles($,J){let Q=w1($);if(!Q)throw new R0("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 R0(`Access denied. Required ${H} of roles: ${J.roles.join(", ")}`)}}checkPermissions($,J){let Q=w1($);if(!Q)throw new R0("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)=>l2.hasPermission(W,G));else H=J.permissions.some((G)=>l2.hasPermission(W,G));if(!H){let G=J.requireAll?"all":"any";throw new R0(`Access denied. Required ${G} of permissions: ${J.permissions.join(", ")}`)}}checkMinimumRole($,J){let Q=w1($);if(!Q)throw new R0("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 R0(`Access denied. Minimum role level required: ${J} (level ${H})`)}}function OE($){return $.get("rbac")||null}function EH($){return w1($)?.roles||[]}function RE($){let J=OE($),Q=EH($);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 nT($,J){return EH($).includes(J)}function sT($,J){let Q=RE($);return l2.hasPermission(Q,J)}I1();class ZE{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=zH();else this.rbac=new m2;if($.roles)this.rbac.defineRoles($.roles);this.guard=new L4(this.rbac)}async install($){let J=jH(this.rbac);if($.use(J),$.getContainer().register(m2,{factory:()=>this.rbac,scope:"singleton"}),$.getContainer().register(L4,{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(!w1(W))throw new R0("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}}I1();class SE{config;name="auth";version="1.0.0";authService;compileExtended=!1;constructor($){this.config=$;this.authService=new E4($.jwt,$.userProvider)}async install($){let J=NH(this.authService.getJWTProvider());if($.use(J),$.getContainer().register(E4,{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 S0(F)}if(G?.roles?.length){if(!this.authService.hasRoles(q,G.roles))throw new R0(`Required roles: ${G.roles.join(", ")}`)}if(G?.permissions?.length){if(!this.authService.hasPermissions(q,G.permissions))throw new R0(`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 S0(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 S0(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=wH(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 S0(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=w1(Q);if(!X)throw new S0("Not authenticated");return{success:!0,user:X}}})}getAuthService(){return this.authService}}class O4{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 CE extends O4{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 ME extends O4{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 PE extends O4{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 KE{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 IE{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 Db=w.object({code:w.string(),state:w.string(),error:w.string().optional(),error_description:w.string().optional()}),Bb=w.object({accessToken:w.string(),refreshToken:w.string().optional(),expiresIn:w.number().optional(),tokenType:w.string(),scope:w.string().optional()}),TE=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 bE($){return(J,Q)=>{let X={provider:$.provider,config:$};S.defineOAuth(J,Q,X)}}function fE(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"oauth-user",required:!0})}}function kE(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"oauth-token",required:!0})}}function xE($){return $.get("oauth.user")||null}function vE($){return $.get("oauth.token")||null}function hE($){return $.get("oauth.authenticated")===!0}function gE($){return $.get("oauth.provider")||null}class yE{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 uE{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 LH{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 mE{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 lE=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()}),Ab=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()}),jb=w.object({userId:w.string(),data:w.record(w.any()).optional(),maxAge:w.number().optional(),ipAddress:w.string().optional(),userAgent:w.string().optional()}),Eb=w.object({data:w.record(w.any())});I1();function cE($={}){return(J,Q)=>{let X={config:$};S.defineSession(J,Q,X)}}function dE(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"current-session",required:!0})}}function Sb($){return(J,Q,X)=>{if(Q)S.defineParameter(J,Q,X,{index:X,type:"session-data",required:!1,metadata:{key:$}})}}function pE(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"csrf-token",required:!0})}}function iE(){return($,J)=>{S.defineCSRF($,J,{required:!0})}}function nE($,J){return async(Q,X)=>{let Y=$.getConfig(),W=h6(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 OH{sessionManager;csrfProtection;constructor($,J){this.sessionManager=$;this.csrfProtection=J}checkSession($,J){let Q=e0($);if(J.required&&!Q)throw new S0("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 R0("CSRF token required");if(!this.csrfProtection.validateToken(J.id,Q))throw new R0("Invalid CSRF token")}async createSession($,J,Q={}){let X=c2($);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 g6($,X.getConfig().name,H.id,G),$.set("session",H),H}async updateSession($,J){let Q=e0($),X=c2($);if(!Q||!X)return null;let Y=await X.updateSession(Q.id,J);if(Y)$.set("session",Y);return Y}async destroySession($){let J=e0($),Q=c2($);if(!J||!Q)return;await Q.destroySession(J.id);let X=Q.getConfig();if(g6($,X.name,"",{...Q.getCookieOptions(),maxAge:0}),$.set("session",null),this.csrfProtection)this.csrfProtection.removeToken(J.id)}async regenerateSession($){let J=e0($),Q=c2($);if(!J||!Q)return null;let X=await Q.regenerateSession(J.id);if(X){let Y=Q.getCookieOptions();if(g6($,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=e0($);if(!J||!this.csrfProtection)return null;return this.csrfProtection.generateToken(J.id)}}function e0($){return $.get("session")||null}function c2($){return $.get("sessionManager")||null}function sE($){return $.get("csrfProtection")||null}function oE($,J){let Q=e0($);if(!Q)return null;if(J)return Q.data[J];return Q.data}function rE($){return e0($)!==null}function aE($){return e0($)?.userId||null}function tE($,J,Q){let X=e0($);if(X)X.data[J]=Q,$.set("session",X)}function eE($,J){let Q=e0($);if(Q&&J in Q.data)delete Q.data[J],$.set("session",Q)}class X${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 f1 extends X${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 X${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 $1 extends X${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 i${static instance;constructor(){}static getInstance(){if(!i$.instance)i$.instance=new i$;return i$.instance}createRepository($,J){switch($){case"prisma":return new f1(J);case"typeorm":return new k1(J);case"drizzle":return new $1(J);default:throw Error(`Unsupported repository type: ${$}`)}}createPrismaRepository($){return new f1($)}createTypeORMRepository($){return new k1($)}createDrizzleRepository($){return new $1($)}}class R4{repositories=new Map;factory;constructor(){this.factory=i$.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 tb($,J,Q){return(X,Y)=>{let W={type:"generic-repository",name:$,ormType:J,options:Q};Reflect.defineMetadata("inject",W,X,Y)}}function eb($){return class extends ${repositories=new R4;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 $L{repositories=new R4;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 $f=new R4;class _5{executor;operators;selectFields;whereConditions=[];orderByClause;limitCount;offsetCount;groupByFields;havingConditions=[];joins=[];constructor($,J=new RH){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 RH{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 JL{static create($){return new _5($)}static createWithOperators($,J){return new _5($,J)}}class Y${static calculateMeta($,J,Q){if(Q<=0)throw Error("Limit must be greater than 0");let X=Math.ceil($/Q),Y=Y$.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 ZH{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 QL{baseQuery;options={};constructor($={}){this.baseQuery=$;this.options={...$}}offset($,J){return Y$.validatePagination($,J),this.options.pagination={page:$,limit:J,offset:Y$.calculateOffset($,J)},this}cursor($,J,Q="id"){if(J<1||J>1000)throw Error("Limit must be between 1 and 1000");let X=ZH.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 Yf($=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);Y$.validatePagination(V,U),G.pagination={page:V,limit:U,offset:Y$.calculateOffset(V,U)}}return await W.apply(this,H)},Y}}function Wf($,J,Q,X){let Y=Y$.calculateMeta(J,Q,X);return{data:$,meta:Y}}function Hf($,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 XL{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}}g0();g0();var Vf=v1(o1(),1);function YL($,J){return(Q)=>{let X={entity:$,connection:J,transactional:!1};Reflect.defineMetadata("repository",X,Q)}}function WL($){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 x1().handleTransactional(this,Q,H,Y,H.find((V)=>V&&typeof V==="object"&&V.req&&V.res))},X}}function HL($){return(J)=>{let Q={tableName:$||J.name.toLowerCase()};Reflect.defineMetadata("entity",Q,J)}}function GL($){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)}}g0();class W${static instance;constructor(){}static getInstance(){if(!W$.instance)W$.instance=new W$;return W$.instance}async intercept($,J,Q,X,Y){let W=x1();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 CH(){return async($,J)=>{let Q=W$.getInstance();$.set("transactionInterceptor",Q),$.set("transactionContext",$),await J()}}function VL($){return $.get("transactionInterceptor")||W$.getInstance()}function Bf($,J){return VL($).createTransactionalProxy(J,$)}var UL;((H)=>{H.REQUIRED="REQUIRED";H.REQUIRES_NEW="REQUIRES_NEW";H.SUPPORTS="SUPPORTS";H.NOT_SUPPORTED="NOT_SUPPORTED";H.MANDATORY="MANDATORY";H.NEVER="NEVER"})(UL||={});class qL{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 s$($){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(() => (g0(),SH));return await G().handleTransactional(this,Q,H,Y,H.find((U)=>U&&typeof U==="object"&&U.req&&U.res))},X}}function zf($){return s$({...$,propagation:"REQUIRED"})}function Nf($){return s$({...$,propagation:"REQUIRES_NEW"})}function wf($){return s$({...$,propagation:"SUPPORTS"})}function Af($){return s$({...$,propagation:"NOT_SUPPORTED"})}function jf($){return s$({...$,propagation:"MANDATORY"})}function Ef($){return s$({...$,propagation:"NEVER"})}var _L;((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"})(_L||={});class MH{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 Of(){return($,J)=>{Reflect.defineMetadata("transaction-event","begin",$,J)}}function Rf(){return($,J)=>{Reflect.defineMetadata("transaction-event","commit",$,J)}}function Zf(){return($,J)=>{Reflect.defineMetadata("transaction-event","rollback",$,J)}}class D5{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 B5{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 o$=new MH;g0();class PH{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(CH()),this.setupEventListeners(),this.registerTransactionUtilities($),console.log("\u2705 Transaction plugin installed successfully")}setupTransactionManager(){if(this.config.customTransactionManager)J1(this.config.customTransactionManager);else J1(new n$)}setupEventListeners(){if(this.config.enableLogging){let $=new D5;o$.addListener($)}if(this.config.enableMetrics)this.metricsListener=new B5,o$.addListener(this.metricsListener)}registerTransactionUtilities($){let J=$.getContainer();class Q{}class X{}class Y{}if(J.register(Q,{scope:"singleton",factory:()=>o$}),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=x1(),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($){o$.addListener($)}removeEventListener($){o$.removeListener($)}}function Kf($){return new PH($)}class DL{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 BL{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 d2{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
|
+
`).map((G)=>G.trim())}return J.json(H,X)}return j2(J,W,X,this.format)}isDevelopmentMode(){return this.isDevelopment}setDevelopmentMode($){this.isDevelopment=$}}class l6{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 v${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 w9,this.metadata=new S,this.container=new x6,this.validator=new b$,this.errorHandler=new m6(void 0,{errorResponseFormat:this.config.errorResponseFormat}),this.pluginManager=new l6,this.compiler=new u6(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 xQ(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:kQ,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=x4($);this.use(J)}useRateLimit($){let J=$2($);this.use(J)}useCompression($){let J=v4($);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=c0().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}=T4(f4);return new J(this.hono)}case"express":{let{ExpressAdapter:J}=(k4(),T4(b5));return new J(this)}case"native":{let{HonoAdapter:J}=T4(f4);return new J(this.hono)}default:throw Error(`Unknown adapter type: ${$}. Supported adapters: 'hono', 'express', 'native'`)}}}class kQ{}class xQ{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 vQ($){let J={docs:!1,cors:!1,...$};return new v$(J)}function sB($,J,Q,X){let Y=$.getContainer(),W=typeof Q==="function"?Q:()=>Q;Y.register(J,{scope:X?.scope||"singleton",factory:W})}function hQ($){return new O2($)}async function oB($,J){let Q=vQ(J);await $(Q),await Q.compile();let X=hQ(Q);return{app:Q,client:X}}function rB($){$.getContainer().clear()}var ak=v1(o1(),1);function NK($="",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 h$($){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 wK=h$("GET"),AK=h$("POST"),jK=h$("PUT"),EK=h$("DELETE"),LK=h$("PATCH"),OK=h$("ALL");function RK($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,statusCode:$})}}function ZK($,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 SK($,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 CK($){let J=$2($);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 aB($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"body",schema:$,required:!0};S.defineParameter(J,Q,X,Y)}}function tB($){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 eB($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"param",name:$,required:!0};S.defineParameter(J,Q,X,Y)}}function $F($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"header",name:$,required:!1};S.defineParameter(J,Q,X,Y)}}function JF($){return(J,Q,X)=>{if(!Q)return;let Y={index:X,type:"cookie",name:$,required:!1};S.defineParameter(J,Q,X,Y)}}function QF(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"request",required:!0};S.defineParameter($,J,Q,X)}}function XF(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"context",required:!0};S.defineParameter($,J,Q,X)}}function YF(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"request-id",required:!1};S.defineParameter($,J,Q,X)}}function WF(){return($,J,Q)=>{if(!J)return;let X={index:Q,type:"abort-signal",required:!1};S.defineParameter($,J,Q,X)}}function TK($,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 bK($,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 xK(...$){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 gK($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,summary:$}})}}function yK($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,description:$}})}}function uK($){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 mK(...$){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 lK(){return($,J)=>{let Q=S.getRouteMetadata($,J);S.defineRoute($,J,{...Q,docs:{...Q?.docs,deprecated:!0}})}}function cK($){return(J,Q)=>{let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,docs:{...X?.docs,...$}})}}function dK($){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 HF($){return(J,Q)=>{Reflect.defineMetadata("cache:options",$,J,Q);let X=S.getRouteMetadata(J,Q);S.defineRoute(J,Q,{...X,cache:$})}}function GF($){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 S9=Symbol("veloce:db");function VF($,J,Q=S9){$.getContainer().register(Q,{scope:"singleton",factory:()=>J})}function UF($=S9){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$();k4();T$();I1();var b1=v1(FH(),1);class q5{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=b1.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=b1.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 b1.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=b1.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 b1.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 NT=w.object({sub:w.string(),iat:w.number().optional(),exp:w.number().optional(),iss:w.string().optional(),aud:w.string().optional()}).passthrough(),wT=w.object({username:w.string().min(1),password:w.string().min(1)}),AT=w.object({refreshToken:w.string().min(1)});I1();class E4{config;userProvider;jwtProvider;constructor($,J){this.config=$;this.userProvider=J;this.jwtProvider=new q5($)}async login($,J){let Q=await this.userProvider.findByCredentials($,J);if(!Q)throw new S0("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 x$(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 S0("User not found");return Q}catch(J){if(J instanceof Error){if(J.message.includes("expired"))throw new y6;throw new x$(J.message)}throw new x$("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 jE{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 m2{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 zH(){let $=new m2;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 MT=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()}),PT=w.object({userId:w.string(),roles:w.array(w.string())}),KT=w.object({userId:w.string(),permission:w.string()});class l2{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 bT($){return(J,Q)=>{let X={required:!$?.optional,config:$};S.defineAuth(J,Q,X)}}function fT(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"current-user",required:!1})}}function kT(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"token",required:!1})}}function NH($){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 w1($){return $.get("auth.user")||null}function wH($){return $.get("auth.token")||null}function xT($){return $.get("auth.authenticated")===!0}function vT($){return $.get("auth.error")||null}I1();function EE($){return(J,Q)=>{let Y={config:Array.isArray($)?{roles:$,requireAll:!1,allowInherited:!0}:{requireAll:!1,allowInherited:!0,...$}};S.defineRoles(J,Q,Y)}}function LE($){return(J,Q)=>{let Y={config:Array.isArray($)?{permissions:$,requireAll:!1}:{requireAll:!1,...$}};S.definePermissions(J,Q,Y)}}function AH($){return EE([$])}function cT($){return LE([$])}function dT(){return AH("admin")}function pT(){return AH("super-admin")}function iT($){return(J,Q)=>{S.defineMinimumRole(J,Q,{roleName:$})}}function jH($){return async(J,Q)=>{J.set("rbac",$),await Q()}}class L4{rbac;constructor($){this.rbac=$}checkRoles($,J){let Q=w1($);if(!Q)throw new R0("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 R0(`Access denied. Required ${H} of roles: ${J.roles.join(", ")}`)}}checkPermissions($,J){let Q=w1($);if(!Q)throw new R0("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)=>l2.hasPermission(W,G));else H=J.permissions.some((G)=>l2.hasPermission(W,G));if(!H){let G=J.requireAll?"all":"any";throw new R0(`Access denied. Required ${G} of permissions: ${J.permissions.join(", ")}`)}}checkMinimumRole($,J){let Q=w1($);if(!Q)throw new R0("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 R0(`Access denied. Minimum role level required: ${J} (level ${H})`)}}function OE($){return $.get("rbac")||null}function EH($){return w1($)?.roles||[]}function RE($){let J=OE($),Q=EH($);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 nT($,J){return EH($).includes(J)}function sT($,J){let Q=RE($);return l2.hasPermission(Q,J)}I1();class ZE{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=zH();else this.rbac=new m2;if($.roles)this.rbac.defineRoles($.roles);this.guard=new L4(this.rbac)}async install($){let J=jH(this.rbac);if($.use(J),$.getContainer().register(m2,{factory:()=>this.rbac,scope:"singleton"}),$.getContainer().register(L4,{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(!w1(W))throw new R0("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}}I1();class SE{config;name="auth";version="1.0.0";authService;compileExtended=!1;constructor($){this.config=$;this.authService=new E4($.jwt,$.userProvider)}async install($){let J=NH(this.authService.getJWTProvider());if($.use(J),$.getContainer().register(E4,{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 S0(F)}if(G?.roles?.length){if(!this.authService.hasRoles(q,G.roles))throw new R0(`Required roles: ${G.roles.join(", ")}`)}if(G?.permissions?.length){if(!this.authService.hasPermissions(q,G.permissions))throw new R0(`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 S0(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 S0(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=wH(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 S0(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=w1(Q);if(!X)throw new S0("Not authenticated");return{success:!0,user:X}}})}getAuthService(){return this.authService}}class O4{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 CE extends O4{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 ME extends O4{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 PE extends O4{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 KE{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 IE{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 Db=w.object({code:w.string(),state:w.string(),error:w.string().optional(),error_description:w.string().optional()}),Bb=w.object({accessToken:w.string(),refreshToken:w.string().optional(),expiresIn:w.number().optional(),tokenType:w.string(),scope:w.string().optional()}),TE=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 bE($){return(J,Q)=>{let X={provider:$.provider,config:$};S.defineOAuth(J,Q,X)}}function fE(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"oauth-user",required:!0})}}function kE(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"oauth-token",required:!0})}}function xE($){return $.get("oauth.user")||null}function vE($){return $.get("oauth.token")||null}function hE($){return $.get("oauth.authenticated")===!0}function gE($){return $.get("oauth.provider")||null}class yE{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 uE{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 LH{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 mE{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 lE=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()}),Ab=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()}),jb=w.object({userId:w.string(),data:w.record(w.any()).optional(),maxAge:w.number().optional(),ipAddress:w.string().optional(),userAgent:w.string().optional()}),Eb=w.object({data:w.record(w.any())});I1();function cE($={}){return(J,Q)=>{let X={config:$};S.defineSession(J,Q,X)}}function dE(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"current-session",required:!0})}}function Sb($){return(J,Q,X)=>{if(Q)S.defineParameter(J,Q,X,{index:X,type:"session-data",required:!1,metadata:{key:$}})}}function pE(){return($,J,Q)=>{if(J)S.defineParameter($,J,Q,{index:Q,type:"csrf-token",required:!0})}}function iE(){return($,J)=>{S.defineCSRF($,J,{required:!0})}}function nE($,J){return async(Q,X)=>{let Y=$.getConfig(),W=h6(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 OH{sessionManager;csrfProtection;constructor($,J){this.sessionManager=$;this.csrfProtection=J}checkSession($,J){let Q=e0($);if(J.required&&!Q)throw new S0("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 R0("CSRF token required");if(!this.csrfProtection.validateToken(J.id,Q))throw new R0("Invalid CSRF token")}async createSession($,J,Q={}){let X=c2($);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 g6($,X.getConfig().name,H.id,G),$.set("session",H),H}async updateSession($,J){let Q=e0($),X=c2($);if(!Q||!X)return null;let Y=await X.updateSession(Q.id,J);if(Y)$.set("session",Y);return Y}async destroySession($){let J=e0($),Q=c2($);if(!J||!Q)return;await Q.destroySession(J.id);let X=Q.getConfig();if(g6($,X.name,"",{...Q.getCookieOptions(),maxAge:0}),$.set("session",null),this.csrfProtection)this.csrfProtection.removeToken(J.id)}async regenerateSession($){let J=e0($),Q=c2($);if(!J||!Q)return null;let X=await Q.regenerateSession(J.id);if(X){let Y=Q.getCookieOptions();if(g6($,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=e0($);if(!J||!this.csrfProtection)return null;return this.csrfProtection.generateToken(J.id)}}function e0($){return $.get("session")||null}function c2($){return $.get("sessionManager")||null}function sE($){return $.get("csrfProtection")||null}function oE($,J){let Q=e0($);if(!Q)return null;if(J)return Q.data[J];return Q.data}function rE($){return e0($)!==null}function aE($){return e0($)?.userId||null}function tE($,J,Q){let X=e0($);if(X)X.data[J]=Q,$.set("session",X)}function eE($,J){let Q=e0($);if(Q&&J in Q.data)delete Q.data[J],$.set("session",Q)}class X${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 f1 extends X${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 X${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 $1 extends X${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 i${static instance;constructor(){}static getInstance(){if(!i$.instance)i$.instance=new i$;return i$.instance}createRepository($,J){switch($){case"prisma":return new f1(J);case"typeorm":return new k1(J);case"drizzle":return new $1(J);default:throw Error(`Unsupported repository type: ${$}`)}}createPrismaRepository($){return new f1($)}createTypeORMRepository($){return new k1($)}createDrizzleRepository($){return new $1($)}}class R4{repositories=new Map;factory;constructor(){this.factory=i$.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 tb($,J,Q){return(X,Y)=>{let W={type:"generic-repository",name:$,ormType:J,options:Q};Reflect.defineMetadata("inject",W,X,Y)}}function eb($){return class extends ${repositories=new R4;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 $L{repositories=new R4;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 $f=new R4;class _5{executor;operators;selectFields;whereConditions=[];orderByClause;limitCount;offsetCount;groupByFields;havingConditions=[];joins=[];constructor($,J=new RH){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 RH{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 JL{static create($){return new _5($)}static createWithOperators($,J){return new _5($,J)}}class Y${static calculateMeta($,J,Q){if(Q<=0)throw Error("Limit must be greater than 0");let X=Math.ceil($/Q),Y=Y$.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 ZH{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 QL{baseQuery;options={};constructor($={}){this.baseQuery=$;this.options={...$}}offset($,J){return Y$.validatePagination($,J),this.options.pagination={page:$,limit:J,offset:Y$.calculateOffset($,J)},this}cursor($,J,Q="id"){if(J<1||J>1000)throw Error("Limit must be between 1 and 1000");let X=ZH.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 Yf($=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);Y$.validatePagination(V,U),G.pagination={page:V,limit:U,offset:Y$.calculateOffset(V,U)}}return await W.apply(this,H)},Y}}function Wf($,J,Q,X){let Y=Y$.calculateMeta(J,Q,X);return{data:$,meta:Y}}function Hf($,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 XL{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}}g0();g0();var Vf=v1(o1(),1);function YL($,J){return(Q)=>{let X={entity:$,connection:J,transactional:!1};Reflect.defineMetadata("repository",X,Q)}}function WL($){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 x1().handleTransactional(this,Q,H,Y,H.find((V)=>V&&typeof V==="object"&&V.req&&V.res))},X}}function HL($){return(J)=>{let Q={tableName:$||J.name.toLowerCase()};Reflect.defineMetadata("entity",Q,J)}}function GL($){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)}}g0();class W${static instance;constructor(){}static getInstance(){if(!W$.instance)W$.instance=new W$;return W$.instance}async intercept($,J,Q,X,Y){let W=x1();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 CH(){return async($,J)=>{let Q=W$.getInstance();$.set("transactionInterceptor",Q),$.set("transactionContext",$),await J()}}function VL($){return $.get("transactionInterceptor")||W$.getInstance()}function Bf($,J){return VL($).createTransactionalProxy(J,$)}var UL;((H)=>{H.REQUIRED="REQUIRED";H.REQUIRES_NEW="REQUIRES_NEW";H.SUPPORTS="SUPPORTS";H.NOT_SUPPORTED="NOT_SUPPORTED";H.MANDATORY="MANDATORY";H.NEVER="NEVER"})(UL||={});class qL{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 s$($){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(() => (g0(),SH));return await G().handleTransactional(this,Q,H,Y,H.find((U)=>U&&typeof U==="object"&&U.req&&U.res))},X}}function zf($){return s$({...$,propagation:"REQUIRED"})}function Nf($){return s$({...$,propagation:"REQUIRES_NEW"})}function wf($){return s$({...$,propagation:"SUPPORTS"})}function Af($){return s$({...$,propagation:"NOT_SUPPORTED"})}function jf($){return s$({...$,propagation:"MANDATORY"})}function Ef($){return s$({...$,propagation:"NEVER"})}var _L;((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"})(_L||={});class MH{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 Of(){return($,J)=>{Reflect.defineMetadata("transaction-event","begin",$,J)}}function Rf(){return($,J)=>{Reflect.defineMetadata("transaction-event","commit",$,J)}}function Zf(){return($,J)=>{Reflect.defineMetadata("transaction-event","rollback",$,J)}}class D5{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 B5{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 o$=new MH;g0();class PH{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(CH()),this.setupEventListeners(),this.registerTransactionUtilities($),console.log("\u2705 Transaction plugin installed successfully")}setupTransactionManager(){if(this.config.customTransactionManager)J1(this.config.customTransactionManager);else J1(new n$)}setupEventListeners(){if(this.config.enableLogging){let $=new D5;o$.addListener($)}if(this.config.enableMetrics)this.metricsListener=new B5,o$.addListener(this.metricsListener)}registerTransactionUtilities($){let J=$.getContainer();class Q{}class X{}class Y{}if(J.register(Q,{scope:"singleton",factory:()=>o$}),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=x1(),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($){o$.addListener($)}removeEventListener($){o$.removeListener($)}}function Kf($){return new PH($)}class DL{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 BL{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 d2{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(`
|
|
155
155
|
`),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($)}}}g0();class S4 extends _1{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}}g0();import p2 from"fs";import FL from"path";class F5{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 d2,this.transactionManager=new S4($)}async install($){if(await this.client.$connect(),J1(this.transactionManager),this.config.generateZodSchemas&&this.config.schemaPath)await this.parseAndGenerateSchemas();this.registerRepositoryFactory($),this.registerShutdownHook($),console.log("\u2705 Prisma plugin installed successfully")}async parseAndGenerateSchemas(){try{if(!p2.existsSync(this.config.schemaPath)){console.warn(`\u26A0\uFE0F Prisma schema not found at ${this.config.schemaPath}`);return}let $=p2.readFileSync(this.config.schemaPath,"utf-8"),J=d2.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("\u274C Failed to parse Prisma schema:",$)}}async generateZodSchemaFile(){let $=FL.dirname(this.config.outputPath);if(!p2.existsSync($))p2.mkdirSync($,{recursive:!0});let J=`// Auto-generated Zod schemas from Prisma schema
|
|
156
156
|
`;J+=`// Do not edit this file manually
|
|
157
157
|
|
|
@@ -168,4 +168,4 @@ Body: ${Y.text}`);let W={};if($.username)W.username=$.username;if($.email)W.emai
|
|
|
168
168
|
|
|
169
169
|
`}p2.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 f1({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 f1({client:this.client,delegate:Q,model:$,zodSchema:J})}getClient(){return this.client}getTransactionManager(){return this.transactionManager}}function zL($,J){return new F5($,J)}g0();class C4 extends _1{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}}g0();class z5{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 C4($)}async install($){if(!this.dataSource.isInitialized)await this.dataSource.initialize();J1(this.transactionManager),this.extractEntityMetadata(),this.registerRepositoryFactory($),this.registerMigrationUtilities($),this.registerShutdownHook($),console.log("\u2705 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("\u274C 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("\u2705 Migrations executed successfully")},revert:async()=>{if(this.dataSource.undoLastMigration)await this.dataSource.undoLastMigration(),console.log("\u2705 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("\u2705 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("\u2705 Migrations executed successfully");else console.warn("\u26A0\uFE0F Migration support not available")}async revertMigration(){if(this.dataSource.undoLastMigration)await this.dataSource.undoLastMigration(),console.log("\u2705 Last migration reverted successfully");else console.warn("\u26A0\uFE0F Migration revert not available")}async synchronize(){if(this.config.synchronize&&this.dataSource.synchronize)await this.dataSource.synchronize(),console.log("\u2705 Database schema synchronized");else console.warn("\u26A0\uFE0F Schema synchronization is disabled or not available")}async dropSchema(){if(this.config.dropSchema&&this.dataSource.dropDatabase)await this.dataSource.dropDatabase(),console.log("\u2705 Database schema dropped");else console.warn("\u26A0\uFE0F Schema dropping is disabled or not available")}}function NL($,J){return new z5($,J)}class KH{}var Wk=v1(o1(),1);function wL($){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)}}g0();class M4 extends _1{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}}g0();class N5{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 IH{name="drizzle";version="1.0.0";database;config;transactionManager;schemaConverter;tables=new Map;tableMetadata=new Map;logger=D$({component:"DrizzlePlugin"});constructor($,J){this.database=$,this.config={logger:!1,mode:"default",...J},this.transactionManager=new M4($),this.schemaConverter=new N5}async install($){try{if(this.logger.info("Installing Drizzle ORM plugin..."),J1(this.transactionManager),this.logger.debug("Global transaction manager configured"),this.config.schema)this.registerSchema(this.config.schema);this.registerRepositoryFactory($),this.registerDatabaseUtilities($),this.logger.info("\u2705 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 $1({database:this.database,table:Y,zodSchema:X||this.tableMetadata.get(Q)?.zodSchema})},createFromTable:(Q,X)=>{return new $1({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=D$({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("\u2705 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 $1({database:this.database,table:Q,zodSchema:J||this.tableMetadata.get($)?.zodSchema})}createRepositoryFromTable($,J){return new $1({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 w5{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 AL($,J){return new w5($,J)}H2();export{f3 as zodToJsonSchema,z1 as zodToGraphQLType,NC as zodObjectToGraphQLType,wC as zodObjectToGraphQLInput,w as z,eb as withRepositoryMixin,CH as transactionMiddleware,g3 as toLegacyErrorBody,oB as setupTestApp,tE as setSessionData,XG as setRequestMetadata,k5 as setRequestContext,J1 as setGlobalTransactionManager,gJ as setCache,j2 as sendErrorResponse,A2 as resolveProblemType,M1 as resolveProblemTitle,XO as requestLoggingMiddleware,eE as removeSessionData,VF as registerDrizzle,N1 as problemTypeUri,B$ as parseTTL,Hf as parseCursorQuery,Wf as paginate,sB as mockDependency,g1 as mergeVeloceCorsHeaders,rE as isSessionAuthenticated,hE as isOAuthAuthenticated,w2 as isNullable,xT as isAuthenticated,uJ as invalidateCache,o2 as initializeRequestContext,$O as initializeLogger,BC as hasResolverMetadata,FC as hasFieldMetadata,o$ as globalTransactionEventManager,$f as globalRepositoryRegistry,EH as getUserRoles,RE as getUserPermissions,VL as getTransactionInterceptor,wH as getToken,aE as getSessionUserId,c2 as getSessionManager,oE as getSessionData,qC as getResolverMetadata,YG as getRequestMetadata,$G as getRequestId,r2 as getRequestDuration,j1 as getRequestContext,OE as getRBACManager,xE as getOAuthUser,vE as getOAuthToken,gE as getOAuthProvider,c0 as getLogger,x1 as getGlobalTransactionManager,_C as getFieldsMetadata,DC as getFieldMetadata,v3 as getDefaultValue,w1 as getCurrentUser,e0 as getCurrentSession,hJ as getCache,sE as getCSRFProtection,vT as getAuthError,l8 as getArgumentsMetadata,JG as getAbortSignal,f5 as generateRequestId,YO as errorLoggingMiddleware,yJ as deleteCache,NL as createTypeORMPlugin,Bf as createTransactionalProxy,Kf as createTransactionPlugin,hQ as createTestClient,vQ as createTestApp,l_ as createSimpleRequestIdMiddleware,nE as createSessionMiddleware,m_ as createRequestContextMiddleware,AL as createRedisCacheStore,$2 as createRateLimitMiddleware,jH as createRBACMiddleware,zL as createPrismaPlugin,vJ as createLogger,zH as createDefaultRBAC,x4 as createCorsMiddleware,v4 as createCompressionMiddleware,D$ as createChildLogger,c_ as createCacheMiddleware,d_ as createCacheInvalidationMiddleware,NH as createAuthMiddleware,rB as clearMocks,mJ as clearCache,a2 as cleanupRequestContext,nT as checkUserRole,sT as checkUserPermission,h3 as buildProblemInstance,QG as abortRequest,s1 as ZodToJsonSchemaConverter,y8 as WebSocketPlugin,C6 as WebSocketManager,z2 as WebSocketConnection,ZB as WebSocket,v$ as VeloceTS,v$ as Veloce,P1 as ValidationException,b$ as ValidationEngine,eH as VELOCE_CORS_HEADERS_KEY,xK as UseMiddleware,jB as UnprocessableEntityException,FB as UnauthorizedException,C4 as TypeORMTransactionManager,k1 as TypeORMRepository,z5 as TypeORMPlugin,wL as TypeORMEntity,s$ as TransactionalWithPropagation,WL as Transactional,BL as TransactionTemplate,DL as TransactionService,qL as TransactionPropagationManager,UL as TransactionPropagation,PH as TransactionPlugin,B5 as TransactionMetricsListener,D5 as TransactionLoggingListener,W$ as TransactionInterceptor,_L as TransactionEventType,MH as TransactionEventManager,EB as TooManyRequestsException,bQ as TokenRevokedException,NT as TokenPayloadSchema,y6 as TokenExpiredException,kT as Token,SK as Timeout,Y9 as TestResponse,O2 as TestClient,mK as Tags,uK as Tag,wf as Supports,pT as SuperAdminOnly,gK as Summary,GC as Subscription,R9 as StreamResponse,LH as SessionManager,OH as SessionGuard,lE as SessionDataSchema,cE as Session,LB as ServiceUnavailableException,u6 as RouterCompiler,EE as Roles,MT as RoleSchema,PT as RoleAssignmentSchema,Z9 as ResponseSerializer,ZK as ResponseSchema,TQ as Response,YC as Resolver,Nf as RequiresNew,zf as Required,AH as RequireRole,cT as RequirePermission,iE as RequireCSRF,YF as RequestId,QF as Req,$L as RepositoryService,R4 as RepositoryRegistry,i$ as RepositoryFactory,YL as Repository,AT as RefreshRequestSchema,w5 as RedisCacheStore,L9 as RedirectResponse,CK as RateLimit,ZE as RBACPlugin,m2 as RBACManager,L4 as RBACGuard,JL as QueryBuilderFactory,_5 as QueryBuilder,tB as Query,jK as Put,d2 as PrismaZodSchemaGenerator,S4 as PrismaTransactionManager,f1 as PrismaRepository,F5 as PrismaPlugin,AK as Post,l6 as PluginManager,LE as Permissions,l2 as PermissionMatcher,KT as PermissionCheckSchema,AB as PayloadTooLargeException,LK as Patch,eB as Param,XL as PaginationTransformer,Y$ as PaginationHelper,QL as PaginationBuilder,Yf as Paginated,UB as PROBLEM_JSON_MEDIA_TYPE,k3 as OpenAPIPlugin,C1 as OpenAPIGenerator,Zf as OnTransactionRollback,Rf as OnTransactionCommit,Of as OnTransactionBegin,CB as OnMessage,MB as OnDisconnect,SB as OnConnect,TE as OAuthUserSchema,fE as OAuthUser,kE as OAuthToken,bE as OAuth,Af as NotSupported,BB as NotFoundException,Ef as Never,HC as Mutation,iT as MinimumRole,KH as Migration,S as MetadataRegistry,K1 as MetadataCompiler,N6 as MemoryCacheStore,jf as Mandatory,wT as LoginRequestSchema,q5 as JWTProvider,j9 as JSONResponse,x$ as InvalidTokenException,UF as InjectDB,bK as Inject,jE as InMemoryUserProvider,n$ as InMemoryTransactionManager,RK as HttpCode,b4 as HonoAdapter,RB as HealthCheckers,u3 as HealthCheckPlugin,$F as Header,E0 as HTTPException,E9 as HTMLResponse,GC as GraphQLSubscription,d8 as GraphQLSchemaBuilder,WC as GraphQLQuery,y3 as GraphQLPlugin,HC as GraphQLMutation,UC as GraphQLCtx,wB as GoneException,wK as Get,tb as GenericRepository,GC as GQLSubscription,WC as GQLQuery,HC as GQLMutation,UC as GQLContext,zB as ForbiddenException,O9 as FileResponse,v$ as FastAPITS,s2 as ExpressAdapter,m6 as ErrorHandler,HL as Entity,N5 as DrizzleZodSchemaConverter,M4 as DrizzleTransactionManager,$1 as DrizzleRepository,IH as DrizzlePlugin,yK as Description,lK as Deprecated,TK as Depends,EK as Delete,RH as DefaultQueryOperators,x6 as DIContainer,qB as DEFAULT_PROBLEM_TYPE_BASE,S9 as DB_TOKEN,ZH as CursorPaginationHelper,fT as CurrentUser,dE as CurrentSession,XF as Ctx,JF as Cookie,NK as Controller,NB as ConflictException,GL as Column,k0 as CacheManager,GF as CacheInvalidate,HF as Cache,pE as CSRFToken,aB as Body,_1 as BaseTransactionManager,X$ as BaseRepository,c8 as BadRequestException,R0 as AuthorizationException,S0 as AuthenticationException,E4 as AuthService,SE as AuthPlugin,bT as Auth,VC as Arg,dK as ApiResponse,cK as ApiDoc,OK as All,dT as AdminOnly,WF as AbortSignal};
|
|
170
170
|
|
|
171
|
-
//# debugId=
|
|
171
|
+
//# debugId=4DF006C062A6FFA164756E2164756E21
|