UNPKG

@fleek-platform/next-on-fleek

Version:

`@fleek-platform/next-on-fleek` is a CLI tool that you can use to build and develop [Next.js](https://nextjs.org/) applications so that they can run on [Fleek Functions](https://fleek.xyz/docs/platform/fleek-functions/).

87 lines (77 loc) 2.34 kB
import { applyPCREMatches, matchPCRE } from './pcre'; type HasFieldRequestProperties = { url: URL; cookies: Record<string, string>; headers: Headers; routeDest?: string; }; /** * Checks if a Vercel source route's `has` record conditions match a request, and whether the request * destination should be updated based on the `has` record. * * @param has The `has` record conditions to check against the request. * @param requestProperties The request properties to check against. * @returns Whether the request matches the `has` record conditions, and the new destination if it changed. */ export function checkhasField( has: VercelHasField, { url, cookies, headers, routeDest }: HasFieldRequestProperties, ): { valid: boolean; newRouteDest?: string } { switch (has.type) { case 'host': { return { valid: url.hostname === has.value }; } case 'header': { if (has.value !== undefined) { return getHasFieldPCREMatchResult( has.value, headers.get(has.key), routeDest, ); } return { valid: headers.has(has.key) }; } case 'cookie': { const cookie = cookies[has.key]; if (cookie && has.value !== undefined) { return getHasFieldPCREMatchResult(has.value, cookie, routeDest); } return { valid: cookie !== undefined }; } case 'query': { if (has.value !== undefined) { return getHasFieldPCREMatchResult( has.value, url.searchParams.get(has.key), routeDest, ); } return { valid: url.searchParams.has(has.key) }; } } } /** * Gets the has field PCRE match results, and tries to apply any named capture groups to a * route destination. * * @param hasValue The has field value to match against. * @param foundValue The value found in the request. * @param routeDest Destination to apply match to. * @returns Whether the match is valid, and the destination with the match applied. */ function getHasFieldPCREMatchResult( hasValue: string, foundValue: string | null, routeDest?: string, ): { valid: boolean; newRouteDest?: string } { const { match, captureGroupKeys } = matchPCRE(hasValue, foundValue); if (routeDest && match && captureGroupKeys.length) { return { valid: !!match, newRouteDest: applyPCREMatches(routeDest, match, captureGroupKeys, { namedOnly: true, }), }; } return { valid: !!match }; }