UNPKG

@obelism/improve-sdk-next

Version:
2 lines (1 loc) 1.69 kB
Object.defineProperty(exports,"__esModule",{value:!0});var e=require("next/server");const t=RegExp(["Vercelbot","DotBot","Yeti","AhrefsBot","SeznamBot","YandexBot","UptimeRobot","Bytespider","Baiduspider","fidget-spinner-bot","AASA-Bot","FullStoryBot","SemrushBot","PetalBot","RyteBot","Pinterestbot","AntBot","Monsidobot","blowra","JobRoboter","Qwantify","YisouSpider"].map(e=>e.toLowerCase()).join("|"),"i"),o=/(\[[a-zA-Z0-9-]+\])+/g,r=/\[\[\.\.\.[a-zA-Z0-9-]+\]\]/g,s=/\[\.\.\.[a-zA-Z0-9-]+\]/g,i=e=>e.endsWith("/")?e.substring(0,e.length-1):e;exports.generateImproveNextMiddleware=n=>a=>{let l,{ua:p="",isBot:u=!1}=e.userAgent(a);if(u||p&&t.test(p.toLowerCase()))return e.NextResponse.next();let g=n.serverABtests.find(e=>((e,t)=>{let n=i(t.split("?")[0]),a=i(e.split("?")[0]);return n===a||new RegExp(`^${a.replace(o,"[a-zA-Z0-9-]+")}$`.replace(r,"?.*").replace(s,".*")).test(n)})(e.routeHandler,a.nextUrl.pathname));if(!g)return e.NextResponse.next();let d=g.options.at(0)?.value;if(!d)return e.NextResponse.next();let x=n.improveSdk.getVisitorCookieName(),m=a.cookies.get(x)?.value,v=m&&n.improveSdk.validateVisitorId(m)?m:n.improveSdk.generateVisitorId(),f=e=>e&&n.improveSdk.validateTestValue(g.slug,e)?e:null,A=f(a.nextUrl.searchParams.get(g.slug))||f(a.cookies.get(g.slug)?.value)||n.improveSdk.getTestValue(g.slug,v,p),B=g.options.find(e=>e.value===A);if(!B)return e.NextResponse.next();if(B.value!==d){let t=a.nextUrl.clone();t.pathname=g?.formatSlug?g?.formatSlug(t,B)?.pathname:B.slug,l=e.NextResponse.rewrite(t)}else l=e.NextResponse.next();return l.cookies.set(x,v,{maxAge:604800,...n.options?.visitorId}),l.cookies.set(g.slug,A,{maxAge:604800,...n.options?.testValue}),l};