UNPKG

@luukgoossen/elysia-procedures

Version:

tRPC style procedures and actions with TypeBox validation

3 lines (2 loc) 1.43 kB
import{b as H,c as R}from"./action.js";var N=new WeakMap,X=(E,F)=>`${E}:[${F.join(",")}]`;class V{_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=X(this._id,await this._keys(E)),G=N.get(E.ctx.request)??new Map;if(G.has(F))return G.get(F);let L=await this._handler(E);return G.set(F,L??null),N.set(E.ctx.request,G),L}}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 V(E,this._state.name,this._state.keys);this._state.middlewares=[...this._state.middlewares,F]}return new W(this._state)}}class W{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 R({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});export{_ as createProcedure,I as ProcedureBuilder,W as Procedure,V as Middleware}; export{_ as a};