@luukgoossen/elysia-procedures
Version:
tRPC style procedures and actions with TypeBox validation
2 lines (1 loc) • 4.18 kB
JavaScript
var P=Object.create;var{getPrototypeOf:Q,defineProperty:I,getOwnPropertyNames:X,getOwnPropertyDescriptor:S}=Object,Y=Object.prototype.hasOwnProperty;var Z=(z,D,E)=>{E=z!=null?P(Q(z)):{};let F=D||!z||!z.__esModule?I(E,"default",{value:z,enumerable:!0}):E;for(let G of X(z))if(!Y.call(F,G))I(F,G,{get:()=>z[G],enumerable:!0});return F},W=new WeakMap,j=(z)=>{var D=W.get(z),E;if(D)return D;if(D=I({},"__esModule",{value:!0}),z&&typeof z==="object"||typeof z==="function")X(z).map((F)=>!Y.call(D,F)&&I(D,F,{get:()=>z[F],enumerable:!(E=S(z,F))||E.enumerable}));return W.set(z,D),D};var C=(z,D)=>{for(var E in D)I(z,E,{get:D[E],enumerable:!0,configurable:!0,set:(F)=>D[E]=()=>F})};var T={};C(T,{ActionBuilder:()=>R,Action:()=>U});module.exports=j(T);var J=require("@sinclair/typebox/value");var _=require("@sinclair/typebox"),$=(z)=>z.replace(/(?:^\w|[A-Z]|\b\w)/g,(D,E)=>E===0?D.toLowerCase():D.toUpperCase()).replace(/\s+/g,""),N=(z,D)=>_.Type.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 R{_state;constructor(z){this._state=z}_apply=(z)=>{return new R({...this._state,...z})};params=(z)=>{let D=N(this._state.params,z);return this._apply({params:D})};query=(z)=>{let D=N(this._state.query,z);return this._apply({query:D})};body=(z)=>{let D=N(this._state.body,z);return this._apply({body:D})};output=(z)=>this._apply({output:z});build=(z)=>{return new U({handler:z,...this._state})}}class U{_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:$(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,...K}=z,L=await this._execute(K,{params:E,query:F,body:G});return D?.end(performance.timeOrigin+performance.now()),L});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:K}=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}},(O)=>{if(this.params)F=this.params?J.Value.Parse(this.params,D.params):D.params;if(this.query)G=this.query?J.Value.Parse(this.query,D.query):D.query;if(this.body)K=this.body?J.Value.Parse(this.body,D.body):D.body;O?.end(performance.timeOrigin+performance.now())});let L=await this._execute(z,{params:F,query:G,body:K});if(!this.output)return E?.end(performance.timeOrigin+performance.now()),L;let k=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}},(O)=>{let M=J.Value.Parse(this.output,L);return O?.end(performance.timeOrigin+performance.now()),M});return E?.end(performance.timeOrigin+performance.now()),k});_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})}}