UNPKG

@luukgoossen/elysia-procedures

Version:

tRPC style procedures and actions with TypeBox validation

3 lines (2 loc) 3.88 kB
import{createRequire as Q}from"node:module";var $=Object.create;var{getPrototypeOf:k,defineProperty:O,getOwnPropertyNames:M}=Object;var P=Object.prototype.hasOwnProperty;var R=(z,D,E)=>{E=z!=null?$(k(z)):{};let F=D||!z||!z.__esModule?O(E,"default",{value:z,enumerable:!0}):E;for(let G of M(z))if(!P.call(F,G))O(F,G,{get:()=>z[G],enumerable:!0});return F};var U=Q(import.meta.url);import{Value as L}from"@sinclair/typebox/value";import{Type as S}from"@sinclair/typebox";var W=(z)=>z.replace(/(?:^\w|[A-Z]|\b\w)/g,(D,E)=>E===0?D.toLowerCase():D.toUpperCase()).replace(/\s+/g,""),K=(z,D)=>S.Object({...D.properties,...z?z.properties:{}},{additionalProperties:!1});var H=async(z,D)=>{try{let{startSpanManual:E}=await import("@sentry/bun");return E(z,D)}catch{}try{let{record:E}=await import("@elysiajs/opentelemetry");return E(z.name,z,D)}catch{}return D()};class X{_state;constructor(z){this._state=z}_apply=(z)=>{return new X({...this._state,...z})};params=(z)=>{let D=K(this._state.params,z);return this._apply({params:D})};query=(z)=>{let D=K(this._state.query,z);return this._apply({query:D})};body=(z)=>{let D=K(this._state.body,z);return this._apply({body:D})};output=(z)=>this._apply({output:z});build=(z)=>{return new Y({handler:z,...this._state})}}class Y{_handler;_middlewares;name;details;params;query;body;output;constructor(z){this._handler=z.handler,this._middlewares=z.middlewares,this.name=z.name,this.details=z.details,this.params=z.params,this.query=z.query,this.body=z.body,this.output=z.output}get docs(){return{params:this.params,query:this.query,body:this.body,response:this.output,detail:{summary:this.name,operationId:W(this.name),...this.details}}}handle=async(z)=>H({name:this.details?.tracing?.name??this.name,op:"procedure.action",startTime:performance.timeOrigin+performance.now(),attributes:{"procedure.type":"action","procedure.name":this.name,...this.details?.tracing?.attributes}},async(D)=>{let{params:E,query:F,body:G,...I}=z,J=await this._execute(I,{params:E,query:F,body:G});return D?.end(performance.timeOrigin+performance.now()),J});run=async(z,D)=>H({name:this.details?.tracing?.name??this.name,op:"procedure.action",startTime:performance.timeOrigin+performance.now(),attributes:{"procedure.type":"action","procedure.name":this.name,...this.details?.tracing?.attributes}},async(E)=>{let{params:F,query:G,body:I}=D;await H({name:this.details?.tracing?.name??this.name,op:"procedure.input",startTime:performance.timeOrigin+performance.now(),attributes:{"procedure.type":"input","procedure.name":this.name}},(N)=>{if(this.params)F=this.params?L.Parse(this.params,D.params):D.params;if(this.query)G=this.query?L.Parse(this.query,D.query):D.query;if(this.body)I=this.body?L.Parse(this.body,D.body):D.body;N?.end(performance.timeOrigin+performance.now())});let J=await this._execute(z,{params:F,query:G,body:I});if(!this.output)return E?.end(performance.timeOrigin+performance.now()),J;let Z=await H({name:this.details?.tracing?.name??this.name,op:"procedure.output",startTime:performance.timeOrigin+performance.now(),attributes:{"procedure.type":"output","procedure.name":this.name}},(N)=>{let _=L.Parse(this.output,J);return N?.end(performance.timeOrigin+performance.now()),_});return E?.end(performance.timeOrigin+performance.now()),Z});_execute=async(z,D)=>{for(let E of this._middlewares){let F=await E.execute({params:D.params,query:D.query,body:D.body,ctx:z});if(F)z={...z,...F}}return await H({name:this.details?.tracing?.name??this.name,op:"procedure.handler",startTime:performance.timeOrigin+performance.now(),attributes:{"procedure.type":"handler","procedure.name":this.name,...this.details?.tracing?.attributes}},async(E)=>{let F=await this._handler({params:D.params,query:D.query,body:D.body,ctx:z});return E?.end(performance.timeOrigin+performance.now()),F})}}export{X as ActionBuilder,Y as Action}; export{K as b,H as c,X as d};