{"version":3,"sources":["../../../../../src/shared/lib/router/utils/resolve-rewrites.ts"],"sourcesContent":["import type { ParsedUrlQuery } from 'querystring'\nimport type { Rewrite } from '../../../../lib/load-custom-routes'\nimport { getPathMatch } from './path-match'\nimport { matchHas, prepareDestination } from './prepare-destination'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removeBasePath } from '../../../../client/remove-base-path'\nimport { parseRelativeUrl, type ParsedRelativeUrl } from './parse-relative-url'\n\ninterface ParsedAs extends Omit {\n slashes: boolean | undefined\n}\n\nexport default function resolveRewrites(\n asPath: string,\n pages: string[],\n rewrites: {\n beforeFiles: Rewrite[]\n afterFiles: Rewrite[]\n fallback: Rewrite[]\n },\n query: ParsedUrlQuery,\n resolveHref: (path: string) => string,\n locales?: readonly string[]\n): {\n matchedPage: boolean\n parsedAs: ParsedAs\n asPath: string\n resolvedHref?: string\n externalDest?: boolean\n} {\n let matchedPage = false\n let externalDest = false\n let parsedAs: ParsedAs = parseRelativeUrl(asPath)\n let fsPathname = removeTrailingSlash(\n normalizeLocalePath(removeBasePath(parsedAs.pathname), locales).pathname\n )\n let resolvedHref\n\n const handleRewrite = (rewrite: Rewrite) => {\n const matcher = getPathMatch(\n rewrite.source + (process.env.__NEXT_TRAILING_SLASH ? '(/)?' : ''),\n {\n removeUnnamedParams: true,\n strict: true,\n }\n )\n\n let params = matcher(parsedAs.pathname)\n\n if ((rewrite.has || rewrite.missing) && params) {\n const hasParams = matchHas(\n {\n headers: {\n host: document.location.hostname,\n 'user-agent': navigator.userAgent,\n },\n cookies: document.cookie\n .split('; ')\n .reduce>((acc, item) => {\n const [key, ...value] = item.split('=')\n acc[key] = value.join('=')\n return acc\n }, {}),\n } as any,\n parsedAs.query,\n rewrite.has,\n rewrite.missing\n )\n\n if (hasParams) {\n Object.assign(params, hasParams)\n } else {\n params = false\n }\n }\n\n if (params) {\n if (!rewrite.destination) {\n // this is a proxied rewrite which isn't handled on the client\n externalDest = true\n return true\n }\n const destRes = prepareDestination({\n appendParamsToQuery: true,\n destination: rewrite.destination,\n params: params,\n query: query,\n })\n parsedAs = destRes.parsedDestination\n asPath = destRes.newUrl\n Object.assign(query, destRes.parsedDestination.query)\n\n fsPathname = removeTrailingSlash(\n normalizeLocalePath(removeBasePath(asPath), locales).pathname\n )\n\n if (pages.includes(fsPathname)) {\n // check if we now match a page as this means we are done\n // resolving the rewrites\n matchedPage = true\n resolvedHref = fsPathname\n return true\n }\n\n // check if we match a dynamic-route, if so we break the rewrites chain\n resolvedHref = resolveHref(fsPathname)\n\n if (resolvedHref !== asPath && pages.includes(resolvedHref)) {\n matchedPage = true\n return true\n }\n }\n }\n let finished = false\n\n for (let i = 0; i < rewrites.beforeFiles.length; i++) {\n // we don't end after match in beforeFiles to allow\n // continuing through all beforeFiles rewrites\n handleRewrite(rewrites.beforeFiles[i])\n }\n matchedPage = pages.includes(fsPathname)\n\n if (!matchedPage) {\n if (!finished) {\n for (let i = 0; i < rewrites.afterFiles.length; i++) {\n if (handleRewrite(rewrites.afterFiles[i])) {\n finished = true\n break\n }\n }\n }\n\n // check dynamic route before processing fallback rewrites\n if (!finished) {\n resolvedHref = resolveHref(fsPathname)\n matchedPage = pages.includes(resolvedHref)\n finished = matchedPage\n }\n\n if (!finished) {\n for (let i = 0; i < rewrites.fallback.length; i++) {\n if (handleRewrite(rewrites.fallback[i])) {\n finished = true\n break\n }\n }\n }\n }\n\n return {\n asPath,\n parsedAs,\n matchedPage,\n resolvedHref,\n externalDest,\n }\n}\n"],"names":["resolveRewrites","asPath","pages","rewrites","query","resolveHref","locales","matchedPage","externalDest","parsedAs","parseRelativeUrl","fsPathname","removeTrailingSlash","normalizeLocalePath","removeBasePath","pathname","resolvedHref","handleRewrite","rewrite","matcher","getPathMatch","source","process","env","__NEXT_TRAILING_SLASH","removeUnnamedParams","strict","params","has","missing","hasParams","matchHas","headers","host","document","location","hostname","navigator","userAgent","cookies","cookie","split","reduce","acc","item","key","value","join","Object","assign","destination","destRes","prepareDestination","appendParamsToQuery","parsedDestination","newUrl","includes","finished","i","beforeFiles","length","afterFiles","fallback"],"mappings":"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","ignoreList":[0]}