UNPKG

next-expose

Version:

A fluent, type-safe API routing and middleware layer for the Next.js App Router.

2 lines (1 loc) 1.95 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./responses.cjs.js"),m=require("./errors.cjs.js");function w(a,r){return async(t,i)=>{let u;try{u=await i.params??{}}catch(e){return console.error("Error resolving route parameters:",e),s.InternalServerError("Failed to resolve route parameters")}const d={params:u},c=async(e,o)=>{if(e<a.length){const h=a[e];return h({req:t,ctx:o,next:l=>{const p={...o,...l,params:o.params};return c(e+1,p)}})}return r({ctx:o,req:t})};try{return await c(0,d)}catch(e){if(m.isApiError(e))switch(console.warn(`[API] Handled Error (${e.statusCode}): ${e.message}`),e.statusCode){case 400:return s.BadRequest(e.payload,e.message);case 401:return s.Unauthorized(e.message);case 403:return s.Forbidden(e.message);case 404:return s.NotFound(e.message);case 409:return s.Conflict(e.message);case 429:return s.TooManyRequests(e.message,e.payload);default:return s.InternalServerError(e.message)}if(console.error("Unhandled error in Expose pipeline:",e),process.env.NODE_ENV==="production")return s.InternalServerError("An unexpected error occurred on the server.");const o=e instanceof Error?e.message:"An unknown error occurred.";return s.InternalServerError(o)}}}class n{constructor(r,t){this.parentRouter=r,this.httpMethod=t}collectedMiddlewares=[];use(r){return this.collectedMiddlewares.push(r),this}handle(r){const t=w(this.collectedMiddlewares,r);return this.parentRouter._registerMethod(this.httpMethod,t)}}class g{methodPipelines=new Map;_registerMethod(r,t){return this.methodPipelines.set(r,t),this}get(){return new n(this,"GET")}post(){return new n(this,"POST")}put(){return new n(this,"PUT")}delete(){return new n(this,"DELETE")}patch(){return new n(this,"PATCH")}options(){return new n(this,"OPTIONS")}head(){return new n(this,"HEAD")}expose(){const r={};for(const[t,i]of this.methodPipelines.entries())r[t]=i;return r}}function E(){return new g}exports.route=E;