load-custom-routes.js.map 35.4 KB
Newer Older
1
{"version":3,"sources":["../../lib/load-custom-routes.ts"],"names":["allowedStatusCodes","Set","allowedHasTypes","namedGroupsRegex","getRedirectStatus","route","statusCode","permanent","PERMANENT_REDIRECT_STATUS","TEMPORARY_REDIRECT_STATUS","normalizeRouteRegex","regex","replace","checkRedirect","invalidParts","hadInvalidStatus","has","push","checkHeader","Array","isArray","headers","header","key","value","tryParsePath","handleUrl","result","routePath","parsedDestination","pathname","hash","tokens","pathToRegexp","parse","tokensToRegexp","err","errMatches","message","match","position","parseInt","console","error","fill","join","checkCustomRoutes","routes","type","process","exit","numInvalidRoutes","hadInvalidHas","allowedKeys","add","JSON","stringify","basePath","destination","startsWith","source","keys","Object","invalidKeys","filter","locale","invalidHasItems","hasItem","invalidHasParts","length","itemStr","_route","sourceTokens","hasSegments","matchAll","unnamedInDest","token","name","unnamedIndex","RegExp","size","destTokens","destinationParseFailed","sourceSegments","map","item","Boolean","invalidDestSegments","hasInvalidKeys","hasInvalidParts","processRoutes","config","_routes","newRoutes","defaultLocales","i18n","domains","defaultLocale","base","http","domain","r","srcBasePath","isExternal","destBasePath","forEach","locales","trailingSlash","loadRedirects","redirects","loadRewrites","rewrites","beforeFiles","afterFiles","fallback","_rewrites","every","loadHeaders","loadCustomRoutes","Promise","all","unshift","undefined","internal"],"mappings":"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","sourcesContent":["import { parse as parseUrl } from 'url'\nimport { NextConfig } from '../next-server/server/config'\nimport * as pathToRegexp from 'next/dist/compiled/path-to-regexp'\nimport escapeStringRegexp from 'next/dist/compiled/escape-string-regexp'\nimport {\n  PERMANENT_REDIRECT_STATUS,\n  TEMPORARY_REDIRECT_STATUS,\n} from '../next-server/lib/constants'\n\nexport type RouteHas =\n  | {\n      type: 'header' | 'query' | 'cookie'\n      key: string\n      value?: string\n    }\n  | {\n      type: 'host'\n      key?: undefined\n      value: string\n    }\n\nexport type Rewrite = {\n  source: string\n  destination: string\n  basePath?: false\n  locale?: false\n  has?: RouteHas[]\n}\n\nexport type Header = {\n  source: string\n  basePath?: false\n  locale?: false\n  headers: Array<{ key: string; value: string }>\n  has?: RouteHas[]\n}\n\n// internal type used for validation (not user facing)\nexport type Redirect = {\n  source: string\n  destination: string\n  basePath?: false\n  locale?: false\n  has?: RouteHas[]\n  statusCode?: number\n  permanent?: boolean\n}\n\nexport const allowedStatusCodes = new Set([301, 302, 303, 307, 308])\nconst allowedHasTypes = new Set(['header', 'cookie', 'query', 'host'])\nconst namedGroupsRegex = /\\(\\?<([a-zA-Z][a-zA-Z0-9]*)>/g\n\nexport function getRedirectStatus(route: {\n  statusCode?: number\n  permanent?: boolean\n}): number {\n  return (\n    route.statusCode ||\n    (route.permanent ? PERMANENT_REDIRECT_STATUS : TEMPORARY_REDIRECT_STATUS)\n  )\n}\n\nexport function normalizeRouteRegex(regex: string) {\n  // clean up un-necessary escaping from regex.source which turns / into \\\\/\n  return regex.replace(/\\\\\\//g, '/')\n}\n\nfunction checkRedirect(\n  route: Redirect\n): { invalidParts: string[]; hadInvalidStatus: boolean } {\n  const invalidParts: string[] = []\n  let hadInvalidStatus: boolean = false\n\n  if (route.statusCode && !allowedStatusCodes.has(route.statusCode)) {\n    hadInvalidStatus = true\n    invalidParts.push(`\\`statusCode\\` is not undefined or valid statusCode`)\n  }\n  if (typeof route.permanent !== 'boolean' && !route.statusCode) {\n    invalidParts.push(`\\`permanent\\` is not set to \\`true\\` or \\`false\\``)\n  }\n\n  return {\n    invalidParts,\n    hadInvalidStatus,\n  }\n}\n\nfunction checkHeader(route: Header): string[] {\n  const invalidParts: string[] = []\n\n  if (!Array.isArray(route.headers)) {\n    invalidParts.push('`headers` field must be an array')\n  } else {\n    for (const header of route.headers) {\n      if (!header || typeof header !== 'object') {\n        invalidParts.push(\n          \"`headers` items must be object with { key: '', value: '' }\"\n        )\n        break\n      }\n      if (typeof header.key !== 'string') {\n        invalidParts.push('`key` in header item must be string')\n        break\n      }\n      if (typeof header.value !== 'string') {\n        invalidParts.push('`value` in header item must be string')\n        break\n      }\n    }\n  }\n  return invalidParts\n}\n\ntype ParseAttemptResult = {\n  error?: boolean\n  tokens?: pathToRegexp.Token[]\n}\n\nfunction tryParsePath(route: string, handleUrl?: boolean): ParseAttemptResult {\n  const result: ParseAttemptResult = {}\n  let routePath = route\n\n  try {\n    if (handleUrl) {\n      const parsedDestination = parseUrl(route, true)\n      routePath = `${parsedDestination.pathname!}${\n        parsedDestination.hash || ''\n      }`\n    }\n\n    // Make sure we can parse the source properly\n    result.tokens = pathToRegexp.parse(routePath)\n    pathToRegexp.tokensToRegexp(result.tokens)\n  } catch (err) {\n    // If there is an error show our error link but still show original error or a formatted one if we can\n    const errMatches = err.message.match(/at (\\d{0,})/)\n\n    if (errMatches) {\n      const position = parseInt(errMatches[1], 10)\n      console.error(\n        `\\nError parsing \\`${route}\\` ` +\n          `https://nextjs.org/docs/messages/invalid-route-source\\n` +\n          `Reason: ${err.message}\\n\\n` +\n          `  ${routePath}\\n` +\n          `  ${new Array(position).fill(' ').join('')}^\\n`\n      )\n    } else {\n      console.error(\n        `\\nError parsing ${route} https://nextjs.org/docs/messages/invalid-route-source`,\n        err\n      )\n    }\n    result.error = true\n  }\n\n  return result\n}\n\nexport type RouteType = 'rewrite' | 'redirect' | 'header'\n\nfunction checkCustomRoutes(\n  routes: Redirect[] | Header[] | Rewrite[],\n  type: RouteType\n): void {\n  if (!Array.isArray(routes)) {\n    console.error(\n      `Error: ${type}s must return an array, received ${typeof routes}.\\n` +\n        `See here for more info: https://nextjs.org/docs/messages/routes-must-be-array`\n    )\n    process.exit(1)\n  }\n\n  let numInvalidRoutes = 0\n  let hadInvalidStatus = false\n  let hadInvalidHas = false\n\n  const allowedKeys = new Set<string>(['source', 'basePath', 'locale', 'has'])\n\n  if (type === 'rewrite') {\n    allowedKeys.add('destination')\n  }\n  if (type === 'redirect') {\n    allowedKeys.add('statusCode')\n    allowedKeys.add('permanent')\n    allowedKeys.add('destination')\n  }\n  if (type === 'header') {\n    allowedKeys.add('headers')\n  }\n\n  for (const route of routes) {\n    if (!route || typeof route !== 'object') {\n      console.error(\n        `The route ${JSON.stringify(\n          route\n        )} is not a valid object with \\`source\\` and \\`${\n          type === 'header' ? 'headers' : 'destination'\n        }\\``\n      )\n      numInvalidRoutes++\n      continue\n    }\n\n    if (\n      type === 'rewrite' &&\n      (route as Rewrite).basePath === false &&\n      !(\n        (route as Rewrite).destination.startsWith('http://') ||\n        (route as Rewrite).destination.startsWith('https://')\n      )\n    ) {\n      console.error(\n        `The route ${\n          (route as Rewrite).source\n        } rewrites urls outside of the basePath. Please use a destination that starts with \\`http://\\` or \\`https://\\` https://nextjs.org/docs/messages/invalid-external-rewrite`\n      )\n      numInvalidRoutes++\n      continue\n    }\n\n    const keys = Object.keys(route)\n    const invalidKeys = keys.filter((key) => !allowedKeys.has(key))\n    const invalidParts: string[] = []\n\n    if (typeof route.basePath !== 'undefined' && route.basePath !== false) {\n      invalidParts.push('`basePath` must be undefined or false')\n    }\n\n    if (typeof route.locale !== 'undefined' && route.locale !== false) {\n      invalidParts.push('`locale` must be undefined or false')\n    }\n\n    if (typeof route.has !== 'undefined' && !Array.isArray(route.has)) {\n      invalidParts.push('`has` must be undefined or valid has object')\n      hadInvalidHas = true\n    } else if (route.has) {\n      const invalidHasItems = []\n\n      for (const hasItem of route.has) {\n        let invalidHasParts = []\n\n        if (!allowedHasTypes.has(hasItem.type)) {\n          invalidHasParts.push(`invalid type \"${hasItem.type}\"`)\n        }\n        if (typeof hasItem.key !== 'string' && hasItem.type !== 'host') {\n          invalidHasParts.push(`invalid key \"${hasItem.key}\"`)\n        }\n        if (\n          typeof hasItem.value !== 'undefined' &&\n          typeof hasItem.value !== 'string'\n        ) {\n          invalidHasParts.push(`invalid value \"${hasItem.value}\"`)\n        }\n        if (typeof hasItem.value === 'undefined' && hasItem.type === 'host') {\n          invalidHasParts.push(`value is required for \"host\" type`)\n        }\n\n        if (invalidHasParts.length > 0) {\n          invalidHasItems.push(\n            `${invalidHasParts.join(', ')} for ${JSON.stringify(hasItem)}`\n          )\n        }\n      }\n\n      if (invalidHasItems.length > 0) {\n        hadInvalidHas = true\n        const itemStr = `item${invalidHasItems.length === 1 ? '' : 's'}`\n\n        console.error(\n          `Invalid \\`has\\` ${itemStr}:\\n` + invalidHasItems.join('\\n')\n        )\n        console.error()\n        invalidParts.push(`invalid \\`has\\` ${itemStr} found`)\n      }\n    }\n\n    if (!route.source) {\n      invalidParts.push('`source` is missing')\n    } else if (typeof route.source !== 'string') {\n      invalidParts.push('`source` is not a string')\n    } else if (!route.source.startsWith('/')) {\n      invalidParts.push('`source` does not start with /')\n    }\n\n    if (type === 'header') {\n      invalidParts.push(...checkHeader(route as Header))\n    } else {\n      let _route = route as Rewrite | Redirect\n      if (!_route.destination) {\n        invalidParts.push('`destination` is missing')\n      } else if (typeof _route.destination !== 'string') {\n        invalidParts.push('`destination` is not a string')\n      } else if (\n        type === 'rewrite' &&\n        !_route.destination.match(/^(\\/|https:\\/\\/|http:\\/\\/)/)\n      ) {\n        invalidParts.push(\n          '`destination` does not start with `/`, `http://`, or `https://`'\n        )\n      }\n    }\n\n    if (type === 'redirect') {\n      const result = checkRedirect(route as Redirect)\n      hadInvalidStatus = hadInvalidStatus || result.hadInvalidStatus\n      invalidParts.push(...result.invalidParts)\n    }\n\n    let sourceTokens: pathToRegexp.Token[] | undefined\n\n    if (typeof route.source === 'string' && route.source.startsWith('/')) {\n      // only show parse error if we didn't already show error\n      // for not being a string\n      const { tokens, error } = tryParsePath(route.source)\n\n      if (error) {\n        invalidParts.push('`source` parse failed')\n      }\n      sourceTokens = tokens\n    }\n    const hasSegments = new Set<string>()\n\n    if (route.has) {\n      for (const hasItem of route.has) {\n        if (!hasItem.value && hasItem.key) {\n          hasSegments.add(hasItem.key)\n        }\n\n        if (hasItem.value) {\n          for (const match of hasItem.value.matchAll(namedGroupsRegex)) {\n            if (match[1]) {\n              hasSegments.add(match[1])\n            }\n          }\n\n          if (hasItem.type === 'host') {\n            hasSegments.add('host')\n          }\n        }\n      }\n    }\n\n    // make sure no unnamed patterns are attempted to be used in the\n    // destination as this can cause confusion and is not allowed\n    if (typeof (route as Rewrite).destination === 'string') {\n      if (\n        (route as Rewrite).destination.startsWith('/') &&\n        Array.isArray(sourceTokens)\n      ) {\n        const unnamedInDest = new Set()\n\n        for (const token of sourceTokens) {\n          if (typeof token === 'object' && typeof token.name === 'number') {\n            const unnamedIndex = new RegExp(`:${token.name}(?!\\\\d)`)\n            if ((route as Rewrite).destination.match(unnamedIndex)) {\n              unnamedInDest.add(`:${token.name}`)\n            }\n          }\n        }\n\n        if (unnamedInDest.size > 0) {\n          invalidParts.push(\n            `\\`destination\\` has unnamed params ${[...unnamedInDest].join(\n              ', '\n            )}`\n          )\n        } else {\n          const {\n            tokens: destTokens,\n            error: destinationParseFailed,\n          } = tryParsePath((route as Rewrite).destination, true)\n\n          if (destinationParseFailed) {\n            invalidParts.push('`destination` parse failed')\n          } else {\n            const sourceSegments = new Set(\n              sourceTokens\n                .map((item) => typeof item === 'object' && item.name)\n                .filter(Boolean)\n            )\n            const invalidDestSegments = new Set()\n\n            for (const token of destTokens!) {\n              if (\n                typeof token === 'object' &&\n                !sourceSegments.has(token.name) &&\n                !hasSegments.has(token.name as string)\n              ) {\n                invalidDestSegments.add(token.name)\n              }\n            }\n\n            if (invalidDestSegments.size) {\n              invalidParts.push(\n                `\\`destination\\` has segments not in \\`source\\` or \\`has\\` (${[\n                  ...invalidDestSegments,\n                ].join(', ')})`\n              )\n            }\n          }\n        }\n      }\n    }\n\n    const hasInvalidKeys = invalidKeys.length > 0\n    const hasInvalidParts = invalidParts.length > 0\n\n    if (hasInvalidKeys || hasInvalidParts) {\n      console.error(\n        `${invalidParts.join(', ')}${\n          invalidKeys.length\n            ? (hasInvalidParts ? ',' : '') +\n              ` invalid field${invalidKeys.length === 1 ? '' : 's'}: ` +\n              invalidKeys.join(',')\n            : ''\n        } for route ${JSON.stringify(route)}`\n      )\n      console.error()\n      numInvalidRoutes++\n    }\n  }\n\n  if (numInvalidRoutes > 0) {\n    if (hadInvalidStatus) {\n      console.error(\n        `\\nValid redirect statusCode values are ${[...allowedStatusCodes].join(\n          ', '\n        )}`\n      )\n    }\n    if (hadInvalidHas) {\n      console.error(\n        `\\nValid \\`has\\` object shape is ${JSON.stringify(\n          {\n            type: [...allowedHasTypes].join(', '),\n            key: 'the key to check for',\n            value: 'undefined or a value string to match against',\n          },\n          null,\n          2\n        )}`\n      )\n    }\n    console.error()\n    console.error(\n      `Error: Invalid ${type}${numInvalidRoutes === 1 ? '' : 's'} found`\n    )\n    process.exit(1)\n  }\n}\n\nexport interface CustomRoutes {\n  headers: Header[]\n  rewrites: {\n    fallback: Rewrite[]\n    afterFiles: Rewrite[]\n    beforeFiles: Rewrite[]\n  }\n  redirects: Redirect[]\n}\n\nfunction processRoutes<T>(\n  routes: T,\n  config: NextConfig,\n  type: 'redirect' | 'rewrite' | 'header'\n): T {\n  const _routes = (routes as any) as Array<{\n    source: string\n    locale?: false\n    basePath?: false\n    destination?: string\n  }>\n  const newRoutes: typeof _routes = []\n  const defaultLocales: Array<{\n    locale: string\n    base: string\n  }> = []\n\n  if (config.i18n && type === 'redirect') {\n    for (const item of config.i18n?.domains || []) {\n      defaultLocales.push({\n        locale: item.defaultLocale,\n        base: `http${item.http ? '' : 's'}://${item.domain}`,\n      })\n    }\n\n    defaultLocales.push({\n      locale: config.i18n.defaultLocale,\n      base: '',\n    })\n  }\n\n  for (const r of _routes) {\n    const srcBasePath =\n      config.basePath && r.basePath !== false ? config.basePath : ''\n    const isExternal = !r.destination?.startsWith('/')\n    const destBasePath = srcBasePath && !isExternal ? srcBasePath : ''\n\n    if (config.i18n && r.locale !== false) {\n      defaultLocales.forEach((item) => {\n        let destination\n\n        if (r.destination) {\n          destination = item.base\n            ? `${item.base}${destBasePath}${r.destination}`\n            : `${destBasePath}${r.destination}`\n        }\n\n        newRoutes.push({\n          ...r,\n          destination,\n          source: `${srcBasePath}/${item.locale}${r.source}`,\n        })\n      })\n\n      r.source = `/:nextInternalLocale(${config.i18n.locales\n        .map((locale: string) => escapeStringRegexp(locale))\n        .join('|')})${\n        r.source === '/' && !config.trailingSlash ? '' : r.source\n      }`\n\n      if (r.destination && r.destination?.startsWith('/')) {\n        r.destination = `/:nextInternalLocale${\n          r.destination === '/' && !config.trailingSlash ? '' : r.destination\n        }`\n      }\n    }\n    r.source = `${srcBasePath}${r.source}`\n\n    if (r.destination) {\n      r.destination = `${destBasePath}${r.destination}`\n    }\n    newRoutes.push(r)\n  }\n  return (newRoutes as any) as T\n}\n\nasync function loadRedirects(config: NextConfig) {\n  if (typeof config.redirects !== 'function') {\n    return []\n  }\n  let redirects = await config.redirects()\n  checkCustomRoutes(redirects, 'redirect')\n  return processRoutes(redirects, config, 'redirect')\n}\n\nasync function loadRewrites(config: NextConfig) {\n  if (typeof config.rewrites !== 'function') {\n    return {\n      beforeFiles: [],\n      afterFiles: [],\n      fallback: [],\n    }\n  }\n  const _rewrites = await config.rewrites()\n  let beforeFiles: Rewrite[] = []\n  let afterFiles: Rewrite[] = []\n  let fallback: Rewrite[] = []\n\n  if (\n    !Array.isArray(_rewrites) &&\n    typeof _rewrites === 'object' &&\n    Object.keys(_rewrites).every(\n      (key) =>\n        key === 'beforeFiles' || key === 'afterFiles' || key === 'fallback'\n    )\n  ) {\n    beforeFiles = _rewrites.beforeFiles || []\n    afterFiles = _rewrites.afterFiles || []\n    fallback = _rewrites.fallback || []\n  } else {\n    afterFiles = _rewrites as any\n  }\n\n  checkCustomRoutes(beforeFiles, 'rewrite')\n  checkCustomRoutes(afterFiles, 'rewrite')\n  checkCustomRoutes(fallback, 'rewrite')\n\n  return {\n    beforeFiles: processRoutes(beforeFiles, config, 'rewrite'),\n    afterFiles: processRoutes(afterFiles, config, 'rewrite'),\n    fallback: processRoutes(fallback, config, 'rewrite'),\n  }\n}\n\nasync function loadHeaders(config: NextConfig) {\n  if (typeof config.headers !== 'function') {\n    return []\n  }\n  let headers = await config.headers()\n  checkCustomRoutes(headers, 'header')\n  return processRoutes(headers, config, 'header')\n}\n\nexport default async function loadCustomRoutes(\n  config: NextConfig\n): Promise<CustomRoutes> {\n  const [headers, rewrites, redirects] = await Promise.all([\n    loadHeaders(config),\n    loadRewrites(config),\n    loadRedirects(config),\n  ])\n\n  if (config.trailingSlash) {\n    redirects.unshift(\n      {\n        source: '/:file((?!\\\\.well-known(?:/.*)?)(?:[^/]+/)*[^/]+\\\\.\\\\w+)/',\n        destination: '/:file',\n        permanent: true,\n        locale: config.i18n ? false : undefined,\n        internal: true,\n      } as Redirect,\n      {\n        source: '/:notfile((?!\\\\.well-known(?:/.*)?)(?:[^/]+/)*[^/\\\\.]+)',\n        destination: '/:notfile/',\n        permanent: true,\n        locale: config.i18n ? false : undefined,\n        internal: true,\n      } as Redirect\n    )\n    if (config.basePath) {\n      redirects.unshift({\n        source: config.basePath,\n        destination: config.basePath + '/',\n        permanent: true,\n        basePath: false,\n        locale: config.i18n ? false : undefined,\n        internal: true,\n      } as Redirect)\n    }\n  } else {\n    redirects.unshift({\n      source: '/:path+/',\n      destination: '/:path+',\n      permanent: true,\n      locale: config.i18n ? false : undefined,\n      internal: true,\n    } as Redirect)\n    if (config.basePath) {\n      redirects.unshift({\n        source: config.basePath + '/',\n        destination: config.basePath,\n        permanent: true,\n        basePath: false,\n        locale: config.i18n ? false : undefined,\n        internal: true,\n      } as Redirect)\n    }\n  }\n\n  return {\n    headers,\n    rewrites,\n    redirects,\n  }\n}\n"]}