@sigiljs/sigil
Version:
TypeScript-first Node.js HTTP framework offering schema-driven routing, modifier-based middleware, plugin extensibility, and flexible response templating
2 lines (1 loc) • 1.86 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("@sigiljs/seal"),f=require("../sigil/misc/sigil-responses-list.js"),b=require("./route-core.js");class _ extends b.default{constructor(e,t,u){super(e,t,u)}get(e,t){return this.$request("GET",e,t)}post(e,t){return this.$request("POST",e,t)}put(e,t){return this.$request("PUT",e,t)}patch(e,t){return this.$request("PATCH",e,t)}delete(e,t){return this.$request("DELETE",e,t)}options(e,t){return this.$request("OPTIONS",e,t)}trace(e,t){return this.$request("TRACE",e,t)}connect(e,t){return this.$request("CONNECT",e,t)}head(e,t){return this.$request("HEAD",e,t)}$request(e,t,u){const r=this.__initialParent??this,l={...this.__$schemas},p=Object.entries(l),d=Math.random().toString(),h=s=>`Provided request cannot be processed due to invalid ${s}`,g=Object.fromEntries(Object.entries(l).map(([s,i])=>[s,o.seal.exportMetadataOf(i)])),n={method:e,path:t,flatSchema:g,metadata:{}};return r.$registeredRequests.set(d,n),r.$updateCallback?.(),this.logger({message:s=>`Registering new path @ ${e} ${s("<...>/")}${t.slice(1)}`,level:"info",module:"route",json:{milestone:"path",ok:!0,method:e,path:t}}),r.$pathfinder.register(e,t,async s=>{const i=s,c={params:i.params,body:i.body?.json(),query:i.query.getObject(),headers:i.headers.link};if(!r.__$options?.debug?.validation?.skip)for(const[a,q]of p){if(!c[a]||typeof c[a]!="object")return new o.ValidationError(h(a));const $=o.seal.validate(q,c[a]);if($.length){const m=r.__$options?.debug?.validation?.messages?$.join(", "):h(a);throw new o.ValidationError(m)}}return u(await r.$injectModifier(i),new f.default,this.__$sigil||null)}),{meta(s){n.metadata={...n.metadata,...s},r.$registeredRequests.set(d,n),r.$updateCallback?.()},description(s){this.meta({description:s})}}}}exports.default=_;