@luukgoossen/elysia-procedures
Version:
tRPC style procedures and actions with TypeBox validation
2 lines (1 loc) • 1.41 kB
JavaScript
var $={};Y($,{createProcedure:()=>_,ProcedureBuilder:()=>I,Procedure:()=>N,Middleware:()=>L});module.exports=X($);var V=new WeakMap,Z=(E,F)=>`${E}:[${F.join(",")}]`;class L{_id=crypto.randomUUID();_handler;_keys;name;constructor(E,F,G){this._handler=E,this._keys=G,this.name=F}execute=async(E)=>{if(!this._keys)return await this._handler(E);let F=Z(this._id,await this._keys(E)),G=V.get(E.ctx.request)??new Map;if(G.has(F))return G.get(F);let R=await this._handler(E);return G.set(F,R??null),V.set(E.ctx.request,G),R}}class I{_state;constructor(E){this._state=E}_apply=(E)=>{return new I({...this._state,...E})};params=(E)=>{let F=H(this._state.params,E);return this._apply({params:F})};query=(E)=>{let F=H(this._state.query,E);return this._apply({query:F})};body=(E)=>{let F=H(this._state.body,E);return this._apply({body:F})};cache=(E)=>this._apply({keys:E});build=(E)=>{if(E){let F=new L(E,this._state.name,this._state.keys);this._state.middlewares=[...this._state.middlewares,F]}return new N(this._state)}}class N{params;query;body;middlewares;constructor(E){this.params=E.params,this.query=E.query,this.body=E.body,this.middlewares=E.middlewares}createAction=(E,F)=>{return new W({params:this.params,query:this.query,body:this.body,output:void 0,middlewares:this.middlewares,name:E,details:F})}}var _=(E,F)=>new I({params:F?.params,query:F?.query,body:F?.body,middlewares:F?.middlewares??[],name:E});