nextjs-multi-middleware
Version:
A utility to easily chain and compose multiple middleware functions in Next.js.
2 lines (1 loc) • 1.62 kB
JavaScript
;var p=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var C=(n,t)=>{for(var s in t)p(n,s,{get:t[s],enumerable:!0})},$=(n,t,s,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of g(t))!P.call(n,o)&&o!==s&&p(n,o,{get:()=>t[o],enumerable:!(a=F(t,o))||a.enumerable});return n};var H=n=>$(p({},"__esModule",{value:!0}),n);var S={};C(S,{chain:()=>b});module.exports=H(S);var m=require("next/server"),R=require("path-to-regexp");function b(n,t={}){let{debug:s=!1}=t,a=s?console.log:()=>{},o=n.map(u=>typeof u=="function"?{handler:u}:u);return async function(u,v){let w,q=0,x=u,l=v,d=async(c,M)=>{let i;c instanceof Error?i=c:c&&(a("[chain] Next called with a new request."),x=c,M&&(l=M));let E=o[q++];if(!E){if(i)throw i;return}let{handler:r,matcher:f}=E;if(!i){let e=!0;if(f&&(typeof f=="function"?e=f(x):e=(0,R.match)(f,{decode:decodeURIComponent})(x.nextUrl.pathname)!==!1,a(`[chain] Middleware ${r.name||"anonymous"}: matcher evaluated to ${e}`)),!e)return d()}try{if(i)return r.length===4?(a(`[chain] Executing error handler ${r.name||"anonymous"}`),await r(i,x,l,(N,h,y)=>N?d(N):d(h,y))):d(i);if(r.length<=2){a(`[chain] Executing standard middleware ${r.name||"anonymous"}`);let e=await r(x,l);return e instanceof m.NextResponse?e:await d()}else if(r.length===3)return a(`[chain] Executing custom middleware ${r.name||"anonymous"}`),await r(x,l,(N,h)=>d(N,h))}catch(e){return a(`[chain] Error in middleware ${r.name||"anonymous"}:`,e),d(e)}};return w=await d(),w||m.NextResponse.next()}}0&&(module.exports={chain});