Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
1 line
No EOL
23 KiB
Text
1 line
No EOL
23 KiB
Text
{"version":3,"sources":["../../src/server/server-utils.ts"],"sourcesContent":["import type { Rewrite } from '../lib/load-custom-routes'\nimport type { RouteMatchFn } from '../shared/lib/router/utils/route-matcher'\nimport type { NextConfig } from './config'\nimport type { BaseNextRequest } from './base-http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\n\nimport { normalizeLocalePath } from '../shared/lib/i18n/normalize-locale-path'\nimport { getPathMatch } from '../shared/lib/router/utils/path-match'\nimport { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex'\nimport { getRouteMatcher } from '../shared/lib/router/utils/route-matcher'\nimport {\n matchHas,\n prepareDestination,\n} from '../shared/lib/router/utils/prepare-destination'\nimport { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { normalizeRscURL } from '../shared/lib/router/utils/app-paths'\nimport {\n NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER,\n NEXT_CACHE_REVALIDATED_TAGS_HEADER,\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../lib/constants'\nimport { normalizeNextQueryParam } from './web/utils'\nimport type { IncomingHttpHeaders, IncomingMessage } from 'http'\nimport { decodeQueryPathParameter } from './lib/decode-query-path-parameter'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { parseReqUrl } from '../lib/url'\nimport { formatUrl } from '../shared/lib/router/utils/format-url'\n\nfunction filterInternalQuery(\n query: Record<string, undefined | string | string[]>,\n paramKeys: string[]\n) {\n // this is used to pass query information in rewrites\n // but should not be exposed in final query\n delete query['nextInternalLocale']\n\n for (const key in query) {\n const isNextQueryPrefix =\n key !== NEXT_QUERY_PARAM_PREFIX && key.startsWith(NEXT_QUERY_PARAM_PREFIX)\n\n const isNextInterceptionMarkerPrefix =\n key !== NEXT_INTERCEPTION_MARKER_PREFIX &&\n key.startsWith(NEXT_INTERCEPTION_MARKER_PREFIX)\n\n if (\n isNextQueryPrefix ||\n isNextInterceptionMarkerPrefix ||\n paramKeys.includes(key)\n ) {\n delete query[key]\n }\n }\n}\n\nexport function normalizeCdnUrl(\n req: BaseNextRequest | IncomingMessage,\n paramKeys: string[]\n) {\n // make sure to normalize req.url from CDNs to strip dynamic and rewrite\n // params from the query which are added during routing\n const _parsedUrl = parseReqUrl(req.url!)\n\n // we can't normalize if we can't parse\n if (!_parsedUrl) {\n return req.url\n }\n delete (_parsedUrl as any).search\n filterInternalQuery(_parsedUrl.query, paramKeys)\n\n req.url = formatUrl(_parsedUrl)\n}\n\nexport function interpolateDynamicPath(\n pathname: string,\n params: ParsedUrlQuery,\n defaultRouteRegex?: ReturnType<typeof getNamedRouteRegex> | undefined\n) {\n if (!defaultRouteRegex) return pathname\n\n for (const param of Object.keys(defaultRouteRegex.groups)) {\n const { optional, repeat } = defaultRouteRegex.groups[param]\n let builtParam = `[${repeat ? '...' : ''}${param}]`\n\n if (optional) {\n builtParam = `[${builtParam}]`\n }\n\n let paramValue: string\n const value = params[param]\n\n if (Array.isArray(value)) {\n paramValue = value.map((v) => v && encodeURIComponent(v)).join('/')\n } else if (value) {\n paramValue = encodeURIComponent(value)\n } else {\n paramValue = ''\n }\n\n if (paramValue || optional) {\n pathname = pathname.replaceAll(builtParam, paramValue)\n }\n }\n\n return pathname\n}\n\nexport function normalizeDynamicRouteParams(\n query: ParsedUrlQuery,\n defaultRouteRegex: ReturnType<typeof getNamedRouteRegex>,\n defaultRouteMatches: ParsedUrlQuery,\n ignoreMissingOptional: boolean\n) {\n let hasValidParams = true\n let params: ParsedUrlQuery = {}\n\n for (const key of Object.keys(defaultRouteRegex.groups)) {\n let value: string | string[] | undefined = query[key]\n\n if (typeof value === 'string') {\n value = normalizeRscURL(value)\n } else if (Array.isArray(value)) {\n value = value.map(normalizeRscURL)\n }\n\n // if the value matches the default value we can't rely\n // on the parsed params, this is used to signal if we need\n // to parse x-now-route-matches or not\n const defaultValue = defaultRouteMatches![key]\n const isOptional = defaultRouteRegex!.groups[key].optional\n\n const isDefaultValue = Array.isArray(defaultValue)\n ? defaultValue.some((defaultVal) => {\n return Array.isArray(value)\n ? value.some((val) => val.includes(defaultVal))\n : value?.includes(defaultVal)\n })\n : value?.includes(defaultValue as string)\n\n if (\n isDefaultValue ||\n (typeof value === 'undefined' && !(isOptional && ignoreMissingOptional))\n ) {\n return { params: {}, hasValidParams: false }\n }\n\n // non-provided optional values should be undefined so normalize\n // them to undefined\n if (\n isOptional &&\n (!value ||\n (Array.isArray(value) &&\n value.length === 1 &&\n // fallback optional catch-all SSG pages have\n // [[...paramName]] for the root path on Vercel\n (value[0] === 'index' || value[0] === `[[...${key}]]`)) ||\n value === 'index' ||\n value === `[[...${key}]]`)\n ) {\n value = undefined\n delete query[key]\n }\n\n // query values from the proxy aren't already split into arrays\n // so make sure to normalize catch-all values\n if (\n value &&\n typeof value === 'string' &&\n defaultRouteRegex!.groups[key].repeat\n ) {\n value = value.split('/')\n }\n\n if (value) {\n params[key] = value\n }\n }\n\n return {\n params,\n hasValidParams,\n }\n}\n\nexport function getServerUtils({\n page,\n i18n,\n basePath,\n rewrites,\n pageIsDynamic,\n trailingSlash,\n caseSensitive,\n}: {\n page: string\n i18n?: NextConfig['i18n']\n basePath: string\n rewrites: DeepReadonly<{\n fallback?: ReadonlyArray<Rewrite>\n afterFiles?: ReadonlyArray<Rewrite>\n beforeFiles?: ReadonlyArray<Rewrite>\n }>\n pageIsDynamic: boolean\n trailingSlash?: boolean\n caseSensitive: boolean\n}) {\n let defaultRouteRegex: ReturnType<typeof getNamedRouteRegex> | undefined\n let dynamicRouteMatcher: RouteMatchFn | undefined\n let defaultRouteMatches: ParsedUrlQuery | undefined\n\n if (pageIsDynamic) {\n defaultRouteRegex = getNamedRouteRegex(page, {\n prefixRouteKeys: false,\n })\n dynamicRouteMatcher = getRouteMatcher(defaultRouteRegex)\n defaultRouteMatches = dynamicRouteMatcher(page) as ParsedUrlQuery\n }\n\n function handleRewrites(\n req: BaseNextRequest | IncomingMessage,\n parsedUrl: DeepReadonly<UrlWithParsedQuery>\n ) {\n // Here we deep clone the parsedUrl to avoid mutating the original. We also\n // cast this to a mutable type so we can mutate it within this scope.\n const rewrittenParsedUrl = structuredClone(parsedUrl) as UrlWithParsedQuery\n const rewriteParams: Record<string, string> = {}\n let fsPathname = rewrittenParsedUrl.pathname\n\n const matchesPage = () => {\n const fsPathnameNoSlash = removeTrailingSlash(fsPathname || '')\n return (\n fsPathnameNoSlash === removeTrailingSlash(page) ||\n dynamicRouteMatcher?.(fsPathnameNoSlash)\n )\n }\n\n const checkRewrite = (rewrite: DeepReadonly<Rewrite>): boolean => {\n const matcher = getPathMatch(\n rewrite.source + (trailingSlash ? '(/)?' : ''),\n {\n removeUnnamedParams: true,\n strict: true,\n sensitive: !!caseSensitive,\n }\n )\n\n if (!rewrittenParsedUrl.pathname) return false\n\n let params = matcher(rewrittenParsedUrl.pathname)\n\n if ((rewrite.has || rewrite.missing) && params) {\n const hasParams = matchHas(\n req,\n rewrittenParsedUrl.query,\n rewrite.has as Rewrite['has'],\n rewrite.missing as Rewrite['missing']\n )\n\n if (hasParams) {\n Object.assign(params, hasParams)\n } else {\n params = false\n }\n }\n\n if (params) {\n const { parsedDestination, destQuery } = prepareDestination({\n appendParamsToQuery: true,\n destination: rewrite.destination,\n params: params,\n query: rewrittenParsedUrl.query,\n })\n\n // if the rewrite destination is external break rewrite chain\n if (parsedDestination.protocol) {\n return true\n }\n\n Object.assign(rewriteParams, destQuery, params)\n Object.assign(rewrittenParsedUrl.query, parsedDestination.query)\n delete (parsedDestination as any).query\n\n Object.assign(rewrittenParsedUrl, parsedDestination)\n\n fsPathname = rewrittenParsedUrl.pathname\n if (!fsPathname) return false\n\n if (basePath) {\n fsPathname = fsPathname.replace(new RegExp(`^${basePath}`), '') || '/'\n }\n\n if (i18n) {\n const result = normalizeLocalePath(fsPathname, i18n.locales)\n fsPathname = result.pathname\n rewrittenParsedUrl.query.nextInternalLocale =\n result.detectedLocale || params.nextInternalLocale\n }\n\n if (fsPathname === page) {\n return true\n }\n\n if (pageIsDynamic && dynamicRouteMatcher) {\n const dynamicParams = dynamicRouteMatcher(fsPathname)\n if (dynamicParams) {\n rewrittenParsedUrl.query = {\n ...rewrittenParsedUrl.query,\n ...dynamicParams,\n }\n return true\n }\n }\n }\n\n return false\n }\n\n for (const rewrite of rewrites.beforeFiles || []) {\n checkRewrite(rewrite)\n }\n\n if (fsPathname !== page) {\n let finished = false\n\n for (const rewrite of rewrites.afterFiles || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n\n if (!finished && !matchesPage()) {\n for (const rewrite of rewrites.fallback || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n }\n }\n\n return { rewriteParams, rewrittenParsedUrl }\n }\n\n function getParamsFromRouteMatches(routeMatchesHeader: string) {\n // If we don't have a default route regex, we can't get params from route\n // matches\n if (!defaultRouteRegex) return null\n\n const { groups, routeKeys } = defaultRouteRegex\n\n const matcher = getRouteMatcher({\n re: {\n // Simulate a RegExp match from the \\`req.url\\` input\n exec: (str: string) => {\n // Normalize all the prefixed query params.\n const obj: Record<string, string> = Object.fromEntries(\n new URLSearchParams(str)\n )\n for (const [key, value] of Object.entries(obj)) {\n const normalizedKey = normalizeNextQueryParam(key)\n if (!normalizedKey) continue\n\n obj[normalizedKey] = value\n delete obj[key]\n }\n\n // Use all the named route keys.\n const result = {} as RegExpExecArray\n for (const keyName of Object.keys(routeKeys)) {\n const paramName = routeKeys[keyName]\n\n // If this param name is not a valid parameter name, then skip it.\n if (!paramName) continue\n\n const group = groups[paramName]\n const value = obj[keyName]\n\n // When we're missing a required param, we can't match the route.\n if (!group.optional && !value) return null\n\n result[group.pos] = value\n }\n\n return result\n },\n },\n groups,\n })\n\n const routeMatches = matcher(routeMatchesHeader)\n if (!routeMatches) return null\n\n return routeMatches\n }\n\n function normalizeQueryParams(\n query: Record<string, string | string[] | undefined>,\n routeParamKeys: Set<string>\n ) {\n // this is used to pass query information in rewrites\n // but should not be exposed in final query\n delete query['nextInternalLocale']\n\n for (const [key, value] of Object.entries(query)) {\n const normalizedKey = normalizeNextQueryParam(key)\n if (!normalizedKey) continue\n\n // Remove the prefixed key from the query params because we want\n // to consume it for the dynamic route matcher.\n delete query[key]\n routeParamKeys.add(normalizedKey)\n\n if (typeof value === 'undefined') continue\n\n query[normalizedKey] = Array.isArray(value)\n ? value.map((v) => decodeQueryPathParameter(v))\n : decodeQueryPathParameter(value)\n }\n }\n\n return {\n handleRewrites,\n defaultRouteRegex,\n dynamicRouteMatcher,\n defaultRouteMatches,\n normalizeQueryParams,\n getParamsFromRouteMatches,\n /**\n * Normalize dynamic route params.\n *\n * @param query - The query params to normalize.\n * @param ignoreMissingOptional - Whether to ignore missing optional params.\n * @returns The normalized params and whether they are valid.\n */\n normalizeDynamicRouteParams: (\n query: ParsedUrlQuery,\n ignoreMissingOptional: boolean\n ) => {\n if (!defaultRouteRegex || !defaultRouteMatches) {\n return { params: {}, hasValidParams: false }\n }\n\n return normalizeDynamicRouteParams(\n query,\n defaultRouteRegex,\n defaultRouteMatches,\n ignoreMissingOptional\n )\n },\n\n normalizeCdnUrl: (\n req: BaseNextRequest | IncomingMessage,\n paramKeys: string[]\n ) => normalizeCdnUrl(req, paramKeys),\n\n interpolateDynamicPath: (\n pathname: string,\n params: Record<string, undefined | string | string[]>\n ) => interpolateDynamicPath(pathname, params, defaultRouteRegex),\n\n filterInternalQuery: (query: ParsedUrlQuery, paramKeys: string[]) =>\n filterInternalQuery(query, paramKeys),\n }\n}\n\nexport function getPreviouslyRevalidatedTags(\n headers: IncomingHttpHeaders,\n previewModeId: string | undefined\n): string[] {\n return typeof headers[NEXT_CACHE_REVALIDATED_TAGS_HEADER] === 'string' &&\n headers[NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER] === previewModeId\n ? headers[NEXT_CACHE_REVALIDATED_TAGS_HEADER].split(',')\n : []\n}\n"],"names":["getPreviouslyRevalidatedTags","getServerUtils","interpolateDynamicPath","normalizeCdnUrl","normalizeDynamicRouteParams","filterInternalQuery","query","paramKeys","key","isNextQueryPrefix","NEXT_QUERY_PARAM_PREFIX","startsWith","isNextInterceptionMarkerPrefix","NEXT_INTERCEPTION_MARKER_PREFIX","includes","req","_parsedUrl","parseReqUrl","url","search","formatUrl","pathname","params","defaultRouteRegex","param","Object","keys","groups","optional","repeat","builtParam","paramValue","value","Array","isArray","map","v","encodeURIComponent","join","replaceAll","defaultRouteMatches","ignoreMissingOptional","hasValidParams","normalizeRscURL","defaultValue","isOptional","isDefaultValue","some","defaultVal","val","length","undefined","split","page","i18n","basePath","rewrites","pageIsDynamic","trailingSlash","caseSensitive","dynamicRouteMatcher","getNamedRouteRegex","prefixRouteKeys","getRouteMatcher","handleRewrites","parsedUrl","rewrittenParsedUrl","structuredClone","rewriteParams","fsPathname","matchesPage","fsPathnameNoSlash","removeTrailingSlash","checkRewrite","rewrite","matcher","getPathMatch","source","removeUnnamedParams","strict","sensitive","has","missing","hasParams","matchHas","assign","parsedDestination","destQuery","prepareDestination","appendParamsToQuery","destination","protocol","replace","RegExp","result","normalizeLocalePath","locales","nextInternalLocale","detectedLocale","dynamicParams","beforeFiles","finished","afterFiles","fallback","getParamsFromRouteMatches","routeMatchesHeader","routeKeys","re","exec","str","obj","fromEntries","URLSearchParams","entries","normalizedKey","normalizeNextQueryParam","keyName","paramName","group","pos","routeMatches","normalizeQueryParams","routeParamKeys","add","decodeQueryPathParameter","headers","previewModeId","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER"],"mappings":"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","ignoreList":[0]} |