{"version":3,"sources":["../../../../../src/build/webpack/plugins/next-types-plugin/index.ts"],"sourcesContent":["import type { Rewrite, Redirect } from '../../../../lib/load-custom-routes'\n\nimport fs from 'fs/promises'\nimport { webpack, sources } from 'next/dist/compiled/webpack/webpack'\nimport path from 'path'\n\nimport { WEBPACK_LAYERS } from '../../../../lib/constants'\nimport { denormalizePagePath } from '../../../../shared/lib/page-path/denormalize-page-path'\nimport { ensureLeadingSlash } from '../../../../shared/lib/page-path/ensure-leading-slash'\nimport { normalizePathSep } from '../../../../shared/lib/page-path/normalize-path-sep'\nimport { HTTP_METHODS } from '../../../../server/web/http'\nimport { isDynamicRoute } from '../../../../shared/lib/router/utils'\nimport { normalizeAppPath } from '../../../../shared/lib/router/utils/app-paths'\nimport { getPageFromPath } from '../../../entries'\nimport type { PageExtensions } from '../../../page-extensions-type'\nimport { getProxiedPluginState } from '../../../build-context'\nimport type { CacheLife } from '../../../../server/use-cache/cache-life'\n\nconst PLUGIN_NAME = 'NextTypesPlugin'\n\ntype Rewrites = {\n  fallback: Rewrite[]\n  afterFiles: Rewrite[]\n  beforeFiles: Rewrite[]\n}\n\ninterface Options {\n  dir: string\n  distDir: string\n  appDir: string\n  dev: boolean\n  isEdgeServer: boolean\n  pageExtensions: PageExtensions\n  cacheLifeConfig: undefined | { [profile: string]: CacheLife }\n  originalRewrites: Rewrites | undefined\n  originalRedirects: Redirect[] | undefined\n}\n\nfunction createTypeGuardFile(\n  fullPath: string,\n  relativePath: string,\n  options: {\n    type: 'layout' | 'page' | 'route'\n    slots?: string[]\n  }\n) {\n  return `// File: ${fullPath}\nimport * as entry from '${relativePath}.js'\n${\n  options.type === 'route'\n    ? `import type { NextRequest } from 'next/server.js'`\n    : `import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'`\n}\n\ntype TEntry = typeof import('${relativePath}.js')\n\ntype SegmentParams<T extends Object = any> = T extends Record<string, any>\n  ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }\n  : T\n\n// Check that the entry is a valid entry\ncheckFields<Diff<{\n  ${\n    options.type === 'route'\n      ? HTTP_METHODS.map((method) => `${method}?: Function`).join('\\n  ')\n      : 'default: Function'\n  }\n  config?: {}\n  generateStaticParams?: Function\n  revalidate?: RevalidateRange<TEntry> | false\n  dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'\n  dynamicParams?: boolean\n  fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache'\n  preferredRegion?: 'auto' | 'global' | 'home' | string | string[]\n  runtime?: 'nodejs' | 'experimental-edge' | 'edge'\n  maxDuration?: number\n  ${\n    options.type === 'route'\n      ? ''\n      : `\n  metadata?: any\n  generateMetadata?: Function\n  viewport?: any\n  generateViewport?: Function\n  experimental_ppr?: boolean\n  `\n  }\n}, TEntry, ''>>()\n\n${options.type === 'route' ? `type RouteContext = { params: Promise<SegmentParams> }` : ''}\n${\n  options.type === 'route'\n    ? HTTP_METHODS.map(\n        (method) => `// Check the prop type of the entry function\nif ('${method}' in entry) {\n  checkFields<\n    Diff<\n      ParamCheck<Request | NextRequest>,\n      {\n        __tag__: '${method}'\n        __param_position__: 'first'\n        __param_type__: FirstArg<MaybeField<TEntry, '${method}'>>\n      },\n      '${method}'\n    >\n  >()\n  checkFields<\n    Diff<\n      ParamCheck<RouteContext>,\n      {\n        __tag__: '${method}'\n        __param_position__: 'second'\n        __param_type__: SecondArg<MaybeField<TEntry, '${method}'>>\n      },\n      '${method}'\n    >\n  >()\n  ${\n    ''\n    // Adding void to support never return type without explicit return:\n    // e.g. notFound() will interrupt the execution but the handler return type is inferred as void.\n    // x-ref: https://github.com/microsoft/TypeScript/issues/16608#issuecomment-309327984\n  }\n  checkFields<\n    Diff<\n      {\n        __tag__: '${method}',\n        __return_type__: Response | void | never | Promise<Response | void | never>\n      },\n      {\n        __tag__: '${method}',\n        __return_type__: ReturnType<MaybeField<TEntry, '${method}'>>\n      },\n      '${method}'\n    >\n  >()\n}\n`\n      ).join('')\n    : `// Check the prop type of the entry function\ncheckFields<Diff<${\n        options.type === 'page' ? 'PageProps' : 'LayoutProps'\n      }, FirstArg<TEntry['default']>, 'default'>>()\n\n// Check the arguments and return type of the generateMetadata function\nif ('generateMetadata' in entry) {\n  checkFields<Diff<${\n    options.type === 'page' ? 'PageProps' : 'LayoutProps'\n  }, FirstArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>()\n  checkFields<Diff<ResolvingMetadata, SecondArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>()\n}\n\n// Check the arguments and return type of the generateViewport function\nif ('generateViewport' in entry) {\n  checkFields<Diff<${\n    options.type === 'page' ? 'PageProps' : 'LayoutProps'\n  }, FirstArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>()\n  checkFields<Diff<ResolvingViewport, SecondArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>()\n}\n`\n}\n// Check the arguments and return type of the generateStaticParams function\nif ('generateStaticParams' in entry) {\n  checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()\n  checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()\n}\n\nexport interface PageProps {\n  params?: Promise<SegmentParams>\n  searchParams?: Promise<any>\n}\nexport interface LayoutProps {\n  children?: React.ReactNode\n${\n  options.slots\n    ? options.slots.map((slot) => `  ${slot}: React.ReactNode`).join('\\n')\n    : ''\n}\n  params?: Promise<SegmentParams>\n}\n\n// =============\n// Utility types\ntype RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never\n\n// If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>.\ntype OmitWithTag<T, K extends keyof any, _M> = Omit<T, K>\ntype Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message>\n\ntype FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never\ntype SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never\ntype MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never\n\n${\n  options.type === 'route'\n    ? `type ParamCheck<T> = {\n  __tag__: string\n  __param_position__: string\n  __param_type__: T\n}`\n    : ''\n}\n\nfunction checkFields<_ extends { [k in keyof any]: never }>() {}\n\n// https://github.com/sindresorhus/type-fest\ntype Numeric = number | bigint\ntype Zero = 0 | 0n\ntype Negative<T extends Numeric> = T extends Zero ? never : \\`\\${T}\\` extends \\`-\\${string}\\` ? T : never\ntype NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__'\n`\n}\n\nasync function collectNamedSlots(layoutPath: string) {\n  const layoutDir = path.dirname(layoutPath)\n  const items = await fs.readdir(layoutDir, { withFileTypes: true })\n  const slots = []\n  for (const item of items) {\n    if (\n      item.isDirectory() &&\n      item.name.startsWith('@') &&\n      // `@children slots are matched to the children prop, and should not be handled separately for type-checking\n      item.name !== '@children'\n    ) {\n      slots.push(item.name.slice(1))\n    }\n  }\n  return slots\n}\n\n// By exposing the static route types separately as string literals,\n// editors can provide autocompletion for them. However it's currently not\n// possible to provide the same experience for dynamic routes.\n\nconst pluginState = getProxiedPluginState({\n  collectedRootParams: {} as Record<string, string[]>,\n  routeTypes: {\n    edge: {\n      static: [],\n      dynamic: [],\n    },\n    node: {\n      static: [],\n      dynamic: [],\n    },\n    extra: {\n      static: [],\n      dynamic: [],\n    },\n  } as Record<\n    'edge' | 'node' | 'extra',\n    Record<'static' | 'dynamic', string[]>\n  >,\n})\n\nfunction formatRouteToRouteType(route: string) {\n  const isDynamic = isDynamicRoute(route)\n  if (isDynamic) {\n    route = route\n      .split('/')\n      .map((part) => {\n        if (part.startsWith('[') && part.endsWith(']')) {\n          if (part.startsWith('[...')) {\n            // /[...slug]\n            return `\\${CatchAllSlug<T>}`\n          } else if (part.startsWith('[[...') && part.endsWith(']]')) {\n            // /[[...slug]]\n            return `\\${OptionalCatchAllSlug<T>}`\n          }\n          // /[slug]\n          return `\\${SafeSlug<T>}`\n        }\n        return part\n      })\n      .join('/')\n  }\n\n  return {\n    isDynamic,\n    routeType: route,\n  }\n}\n\nfunction formatTimespan(seconds: number): string {\n  if (seconds > 0) {\n    if (seconds === 18748800) {\n      return '1 month'\n    }\n    if (seconds === 18144000) {\n      return '1 month'\n    }\n    if (seconds === 604800) {\n      return '1 week'\n    }\n    if (seconds === 86400) {\n      return '1 day'\n    }\n    if (seconds === 3600) {\n      return '1 hour'\n    }\n    if (seconds === 60) {\n      return '1 minute'\n    }\n    if (seconds % 18748800 === 0) {\n      return seconds / 18748800 + ' months'\n    }\n    if (seconds % 18144000 === 0) {\n      return seconds / 18144000 + ' months'\n    }\n    if (seconds % 604800 === 0) {\n      return seconds / 604800 + ' weeks'\n    }\n    if (seconds % 86400 === 0) {\n      return seconds / 86400 + ' days'\n    }\n    if (seconds % 3600 === 0) {\n      return seconds / 3600 + ' hours'\n    }\n    if (seconds % 60 === 0) {\n      return seconds / 60 + ' minutes'\n    }\n  }\n  return seconds + ' seconds'\n}\n\nfunction formatTimespanWithSeconds(seconds: undefined | number): string {\n  if (seconds === undefined) {\n    return 'default'\n  }\n  if (seconds >= 0xfffffffe) {\n    return 'never'\n  }\n  const text = seconds + ' seconds'\n  const descriptive = formatTimespan(seconds)\n  if (descriptive === text) {\n    return text\n  }\n  return text + ' (' + descriptive + ')'\n}\n\nfunction getRootParamsFromLayouts(layouts: Record<string, string[]>) {\n  // Sort layouts by depth (descending)\n  const sortedLayouts = Object.entries(layouts).sort(\n    (a, b) => b[0].split('/').length - a[0].split('/').length\n  )\n\n  if (!sortedLayouts.length) {\n    return []\n  }\n\n  // we assume the shorted layout path is the root layout\n  let rootLayout = sortedLayouts[sortedLayouts.length - 1][0]\n\n  let rootParams = new Set<string>()\n  let isMultipleRootLayouts = false\n\n  for (const [layoutPath, params] of sortedLayouts) {\n    const allSegmentsAreDynamic = layoutPath\n      .split('/')\n      .slice(1, -1)\n      // match dynamic params but not catch-all or optional catch-all\n      .every((segment) => /^\\[[^[.\\]]+\\]$/.test(segment))\n\n    if (allSegmentsAreDynamic) {\n      if (isSubpath(rootLayout, layoutPath)) {\n        // Current path is a subpath of the root layout, update root\n        rootLayout = layoutPath\n        rootParams = new Set(params)\n      } else {\n        // Found another potential root layout\n        isMultipleRootLayouts = true\n        // Add any new params\n        for (const param of params) {\n          rootParams.add(param)\n        }\n      }\n    }\n  }\n\n  // Create result array\n  const result = Array.from(rootParams).map((param) => ({\n    param,\n    optional: isMultipleRootLayouts,\n  }))\n\n  return result\n}\n\nfunction isSubpath(parentLayoutPath: string, potentialChildLayoutPath: string) {\n  // we strip off the `layout` part of the path as those will always conflict with being a subpath\n  const parentSegments = parentLayoutPath.split('/').slice(1, -1)\n  const childSegments = potentialChildLayoutPath.split('/').slice(1, -1)\n\n  // child segments should be shorter or equal to parent segments to be a subpath\n  if (childSegments.length > parentSegments.length || !childSegments.length)\n    return false\n\n  // Verify all segment values are equal\n  return childSegments.every(\n    (childSegment, index) => childSegment === parentSegments[index]\n  )\n}\n\nfunction createServerDefinitions(\n  rootParams: { param: string; optional: boolean }[]\n) {\n  return `\n  declare module 'next/server' {\n\n    import type { AsyncLocalStorage as NodeAsyncLocalStorage } from 'async_hooks'\n    declare global {\n      var AsyncLocalStorage: typeof NodeAsyncLocalStorage\n    }\n    export { NextFetchEvent } from 'next/dist/server/web/spec-extension/fetch-event'\n    export { NextRequest } from 'next/dist/server/web/spec-extension/request'\n    export { NextResponse } from 'next/dist/server/web/spec-extension/response'\n    export { NextMiddleware, MiddlewareConfig } from 'next/dist/server/web/types'\n    export { userAgentFromString } from 'next/dist/server/web/spec-extension/user-agent'\n    export { userAgent } from 'next/dist/server/web/spec-extension/user-agent'\n    export { URLPattern } from 'next/dist/compiled/@edge-runtime/primitives/url'\n    export { ImageResponse } from 'next/dist/server/web/spec-extension/image-response'\n    export type { ImageResponseOptions } from 'next/dist/compiled/@vercel/og/types'\n    export { after } from 'next/dist/server/after'\n    export { connection } from 'next/dist/server/request/connection'\n    export type { UnsafeUnwrappedSearchParams } from 'next/dist/server/request/search-params'\n    export type { UnsafeUnwrappedParams } from 'next/dist/server/request/params'\n    export function unstable_rootParams(): Promise<{ ${rootParams\n      .map(\n        ({ param, optional }) =>\n          // ensure params with dashes are valid keys\n          `${param.includes('-') ? `'${param}'` : param}${optional ? '?' : ''}: string`\n      )\n      .join(', ')} }>\n  }\n  `\n}\n\nfunction createCustomCacheLifeDefinitions(cacheLife: {\n  [profile: string]: CacheLife\n}) {\n  let overloads = ''\n\n  const profileNames = Object.keys(cacheLife)\n  for (let i = 0; i < profileNames.length; i++) {\n    const profileName = profileNames[i]\n    const profile = cacheLife[profileName]\n    if (typeof profile !== 'object' || profile === null) {\n      continue\n    }\n\n    let description = ''\n\n    if (profile.stale === undefined) {\n      description += `\n     * This cache may be stale on clients for the default stale time of the scope before checking with the server.`\n    } else if (profile.stale >= 0xfffffffe) {\n      description += `\n     * This cache may be stale on clients indefinitely before checking with the server.`\n    } else {\n      description += `\n     * This cache may be stale on clients for ${formatTimespan(profile.stale)} before checking with the server.`\n    }\n    if (\n      profile.revalidate !== undefined &&\n      profile.expire !== undefined &&\n      profile.revalidate >= profile.expire\n    ) {\n      description += `\n     * This cache will expire after ${formatTimespan(profile.expire)}. The next request will recompute it.`\n    } else {\n      if (profile.revalidate === undefined) {\n        description += `\n     * It will inherit the default revalidate time of its scope since it does not define its own.`\n      } else if (profile.revalidate >= 0xfffffffe) {\n        // Nothing to mention.\n      } else {\n        description += `\n     * If the server receives a new request after ${formatTimespan(profile.revalidate)}, start revalidating new values in the background.`\n      }\n      if (profile.expire === undefined) {\n        description += `\n     * It will inherit the default expiration time of its scope since it does not define its own.`\n      } else if (profile.expire >= 0xfffffffe) {\n        description += `\n     * It lives for the maximum age of the server cache. If this entry has no traffic for a while, it may serve an old value the next request.`\n      } else {\n        description += `\n     * If this entry has no traffic for ${formatTimespan(profile.expire)} it will expire. The next request will recompute it.`\n      }\n    }\n\n    overloads += `\n    /**\n     * Cache this \\`\"use cache\"\\` for a timespan defined by the \\`${JSON.stringify(profileName)}\\` profile.\n     * \\`\\`\\`\n     *   stale:      ${formatTimespanWithSeconds(profile.stale)}\n     *   revalidate: ${formatTimespanWithSeconds(profile.revalidate)}\n     *   expire:     ${formatTimespanWithSeconds(profile.expire)}\n     * \\`\\`\\`\n     * ${description}\n     */\n    export function unstable_cacheLife(profile: ${JSON.stringify(profileName)}): void\n    `\n  }\n\n  overloads += `\n    /**\n     * Cache this \\`\"use cache\"\\` using a custom timespan.\n     * \\`\\`\\`\n     *   stale: ... // seconds\n     *   revalidate: ... // seconds\n     *   expire: ... // seconds\n     * \\`\\`\\`\n     *\n     * This is similar to Cache-Control: max-age=\\`stale\\`,s-max-age=\\`revalidate\\`,stale-while-revalidate=\\`expire-revalidate\\`\n     *\n     * If a value is left out, the lowest of other cacheLife() calls or the default, is used instead.\n     */\n    export function unstable_cacheLife(profile: {\n      /**\n       * This cache may be stale on clients for ... seconds before checking with the server.\n       */\n      stale?: number,\n      /**\n       * If the server receives a new request after ... seconds, start revalidating new values in the background.\n       */\n      revalidate?: number,\n      /**\n       * If this entry has no traffic for ... seconds it will expire. The next request will recompute it.\n       */\n      expire?: number\n    }): void\n  `\n\n  // Redefine the cacheLife() accepted arguments.\n  return `// Type definitions for Next.js cacheLife configs\n\ndeclare module 'next/cache' {\n  export { unstable_cache } from 'next/dist/server/web/spec-extension/unstable-cache'\n  export {\n    revalidateTag,\n    revalidatePath,\n    unstable_expireTag,\n    unstable_expirePath,\n  } from 'next/dist/server/web/spec-extension/revalidate'\n  export { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store'\n\n  ${overloads}\n\n  export { cacheTag as unstable_cacheTag } from 'next/dist/server/use-cache/cache-tag'\n}\n`\n}\n\nconst appTypesBasePath = path.join('types', 'app')\n\nexport class NextTypesPlugin {\n  dir: string\n  distDir: string\n  appDir: string\n  dev: boolean\n  isEdgeServer: boolean\n  pageExtensions: string[]\n  pagesDir: string\n  cacheLifeConfig: undefined | { [profile: string]: CacheLife }\n  distDirAbsolutePath: string\n\n  constructor(options: Options) {\n    this.dir = options.dir\n    this.distDir = options.distDir\n    this.appDir = options.appDir\n    this.dev = options.dev\n    this.isEdgeServer = options.isEdgeServer\n    this.pageExtensions = options.pageExtensions\n    this.pagesDir = path.join(this.appDir, '..', 'pages')\n    this.cacheLifeConfig = options.cacheLifeConfig\n    this.distDirAbsolutePath = path.join(this.dir, this.distDir)\n  }\n\n  getRelativePathFromAppTypesDir(moduleRelativePathToAppDir: string) {\n    const moduleAbsolutePath = path.join(\n      this.appDir,\n      moduleRelativePathToAppDir\n    )\n\n    const moduleInAppTypesAbsolutePath = path.join(\n      this.distDirAbsolutePath,\n      appTypesBasePath,\n      moduleRelativePathToAppDir\n    )\n\n    return path.relative(\n      moduleInAppTypesAbsolutePath + '/..',\n      moduleAbsolutePath\n    )\n  }\n\n  collectPage(filePath: string) {\n    const isApp = filePath.startsWith(this.appDir + path.sep)\n    const isPages = !isApp && filePath.startsWith(this.pagesDir + path.sep)\n\n    if (!isApp && !isPages) {\n      return\n    }\n\n    // Filter out non-page and non-route files in app dir\n    if (isApp && !/[/\\\\](?:page|route)\\.[^.]+$/.test(filePath)) {\n      return\n    }\n\n    // Filter out non-page files in pages dir\n    if (\n      isPages &&\n      /[/\\\\](?:_app|_document|_error|404|500)\\.[^.]+$/.test(filePath)\n    ) {\n      return\n    }\n\n    let route = (isApp ? normalizeAppPath : denormalizePagePath)(\n      ensureLeadingSlash(\n        getPageFromPath(\n          path.relative(isApp ? this.appDir : this.pagesDir, filePath),\n          this.pageExtensions\n        )\n      )\n    )\n\n    const { isDynamic, routeType } = formatRouteToRouteType(route)\n\n    pluginState.routeTypes[this.isEdgeServer ? 'edge' : 'node'][\n      isDynamic ? 'dynamic' : 'static'\n    ].push(routeType)\n  }\n\n  apply(compiler: webpack.Compiler) {\n    // From asset root to dist root\n    const assetDirRelative = this.dev\n      ? '..'\n      : this.isEdgeServer\n        ? '..'\n        : '../..'\n\n    const handleModule = async (\n      mod: webpack.NormalModule,\n      compilation: webpack.Compilation\n    ) => {\n      if (!mod.resource) return\n\n      const pageExtensionsRegex = new RegExp(\n        `\\\\.(${this.pageExtensions.join('|')})$`\n      )\n\n      if (!pageExtensionsRegex.test(mod.resource)) return\n\n      if (!mod.resource.startsWith(this.appDir + path.sep)) {\n        if (!this.dev) {\n          if (mod.resource.startsWith(this.pagesDir + path.sep)) {\n            this.collectPage(mod.resource)\n          }\n        }\n        return\n      }\n      if (mod.layer !== WEBPACK_LAYERS.reactServerComponents) return\n\n      // skip for /app/_private dir convention\n      // matches <app-dir>/**/_*\n      const IS_PRIVATE = /(?:\\/[^/]+)*\\/_.*$/.test(\n        mod.resource.replace(this.appDir, '')\n      )\n      if (IS_PRIVATE) return\n\n      const IS_LAYOUT = /[/\\\\]layout\\.[^./\\\\]+$/.test(mod.resource)\n      const IS_PAGE = !IS_LAYOUT && /[/\\\\]page\\.[^.]+$/.test(mod.resource)\n      const IS_ROUTE = !IS_PAGE && /[/\\\\]route\\.[^.]+$/.test(mod.resource)\n      const IS_IMPORTABLE = /\\.(js|jsx|ts|tsx|mjs|cjs)$/.test(mod.resource)\n      const relativePathToApp = path.relative(this.appDir, mod.resource)\n\n      if (!this.dev) {\n        if (IS_PAGE || IS_ROUTE) {\n          this.collectPage(mod.resource)\n        }\n      }\n\n      const typePath = path.join(\n        appTypesBasePath,\n        relativePathToApp.replace(pageExtensionsRegex, '.ts')\n      )\n      const relativeImportPath = normalizePathSep(\n        path\n          .join(this.getRelativePathFromAppTypesDir(relativePathToApp))\n          .replace(pageExtensionsRegex, '')\n      )\n\n      const assetPath = path.join(assetDirRelative, typePath)\n\n      // Typescript won’t allow relative-importing (for example) a .mdx file using the .js extension\n      // so for now we only generate “type guard files” for files that typescript can transform\n      if (!IS_IMPORTABLE) return\n\n      if (IS_LAYOUT) {\n        const rootLayoutPath = normalizeAppPath(\n          ensureLeadingSlash(\n            getPageFromPath(\n              path.relative(this.appDir, mod.resource),\n              this.pageExtensions\n            )\n          )\n        )\n\n        const foundParams = Array.from(\n          rootLayoutPath.matchAll(/\\[(.*?)\\]/g),\n          (match) => match[1]\n        )\n\n        pluginState.collectedRootParams[rootLayoutPath] = foundParams\n\n        const slots = await collectNamedSlots(mod.resource)\n        compilation.emitAsset(\n          assetPath,\n          new sources.RawSource(\n            createTypeGuardFile(mod.resource, relativeImportPath, {\n              type: 'layout',\n              slots,\n            })\n          ) as unknown as webpack.sources.RawSource\n        )\n      } else if (IS_PAGE) {\n        compilation.emitAsset(\n          assetPath,\n          new sources.RawSource(\n            createTypeGuardFile(mod.resource, relativeImportPath, {\n              type: 'page',\n            })\n          ) as unknown as webpack.sources.RawSource\n        )\n      } else if (IS_ROUTE) {\n        compilation.emitAsset(\n          assetPath,\n          new sources.RawSource(\n            createTypeGuardFile(mod.resource, relativeImportPath, {\n              type: 'route',\n            })\n          ) as unknown as webpack.sources.RawSource\n        )\n      }\n    }\n\n    compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {\n      compilation.hooks.processAssets.tapAsync(\n        {\n          name: PLUGIN_NAME,\n          stage: webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH,\n        },\n        async (_, callback) => {\n          const promises: Promise<any>[] = []\n\n          // Clear routes\n          if (this.isEdgeServer) {\n            pluginState.routeTypes.edge.dynamic = []\n            pluginState.routeTypes.edge.static = []\n          } else {\n            pluginState.routeTypes.node.dynamic = []\n            pluginState.routeTypes.node.static = []\n          }\n\n          compilation.chunkGroups.forEach((chunkGroup) => {\n            chunkGroup.chunks.forEach((chunk) => {\n              if (!chunk.name) return\n\n              // Here we only track page and route chunks.\n              if (\n                !chunk.name.startsWith('pages/') &&\n                !(\n                  chunk.name.startsWith('app/') &&\n                  (chunk.name.endsWith('/page') ||\n                    chunk.name.endsWith('/route'))\n                )\n              ) {\n                return\n              }\n\n              const chunkModules =\n                compilation.chunkGraph.getChunkModulesIterable(\n                  chunk\n                ) as Iterable<webpack.NormalModule>\n              for (const mod of chunkModules) {\n                promises.push(handleModule(mod, compilation))\n\n                // If this is a concatenation, register each child to the parent ID.\n                const anyModule = mod as unknown as {\n                  modules: webpack.NormalModule[]\n                }\n                if (anyModule.modules) {\n                  anyModule.modules.forEach((concatenatedMod) => {\n                    promises.push(handleModule(concatenatedMod, compilation))\n                  })\n                }\n              }\n            })\n          })\n\n          await Promise.all(promises)\n\n          const rootParams = getRootParamsFromLayouts(\n            pluginState.collectedRootParams\n          )\n          // If we discovered rootParams, we'll override the `next/server` types\n          // since we're able to determine the root params at build time.\n          if (rootParams.length > 0) {\n            const serverTypesPath = path.join(\n              assetDirRelative,\n              'types/server.d.ts'\n            )\n\n            compilation.emitAsset(\n              serverTypesPath,\n              new sources.RawSource(\n                createServerDefinitions(rootParams)\n              ) as unknown as webpack.sources.RawSource\n            )\n          }\n\n          // Support `\"moduleResolution\": \"Node16\" | \"NodeNext\"` with `\"type\": \"module\"`\n\n          const packageJsonAssetPath = path.join(\n            assetDirRelative,\n            'types/package.json'\n          )\n\n          compilation.emitAsset(\n            packageJsonAssetPath,\n            new sources.RawSource(\n              '{\"type\": \"module\"}'\n            ) as unknown as webpack.sources.RawSource\n          )\n\n          if (this.cacheLifeConfig) {\n            const cacheLifeAssetPath = path.join(\n              assetDirRelative,\n              'types/cache-life.d.ts'\n            )\n\n            compilation.emitAsset(\n              cacheLifeAssetPath,\n              new sources.RawSource(\n                createCustomCacheLifeDefinitions(this.cacheLifeConfig)\n              ) as unknown as webpack.sources.RawSource\n            )\n          }\n\n          callback()\n        }\n      )\n    })\n  }\n}\n"],"names":["NextTypesPlugin","PLUGIN_NAME","createTypeGuardFile","fullPath","relativePath","options","type","HTTP_METHODS","map","method","join","slots","slot","collectNamedSlots","layoutPath","layoutDir","path","dirname","items","fs","readdir","withFileTypes","item","isDirectory","name","startsWith","push","slice","pluginState","getProxiedPluginState","collectedRootParams","routeTypes","edge","static","dynamic","node","extra","formatRouteToRouteType","route","isDynamic","isDynamicRoute","split","part","endsWith","routeType","formatTimespan","seconds","formatTimespanWithSeconds","undefined","text","descriptive","getRootParamsFromLayouts","layouts","sortedLayouts","Object","entries","sort","a","b","length","rootLayout","rootParams","Set","isMultipleRootLayouts","params","allSegmentsAreDynamic","every","segment","test","isSubpath","param","add","result","Array","from","optional","parentLayoutPath","potentialChildLayoutPath","parentSegments","childSegments","childSegment","index","createServerDefinitions","includes","createCustomCacheLifeDefinitions","cacheLife","overloads","profileNames","keys","i","profileName","profile","description","stale","revalidate","expire","JSON","stringify","appTypesBasePath","constructor","dir","distDir","appDir","dev","isEdgeServer","pageExtensions","pagesDir","cacheLifeConfig","distDirAbsolutePath","getRelativePathFromAppTypesDir","moduleRelativePathToAppDir","moduleAbsolutePath","moduleInAppTypesAbsolutePath","relative","collectPage","filePath","isApp","sep","isPages","normalizeAppPath","denormalizePagePath","ensureLeadingSlash","getPageFromPath","apply","compiler","assetDirRelative","handleModule","mod","compilation","resource","pageExtensionsRegex","RegExp","layer","WEBPACK_LAYERS","reactServerComponents","IS_PRIVATE","replace","IS_LAYOUT","IS_PAGE","IS_ROUTE","IS_IMPORTABLE","relativePathToApp","typePath","relativeImportPath","normalizePathSep","assetPath","rootLayoutPath","foundParams","matchAll","match","emitAsset","sources","RawSource","hooks","tap","processAssets","tapAsync","stage","webpack","Compilation","PROCESS_ASSETS_STAGE_OPTIMIZE_HASH","_","callback","promises","chunkGroups","forEach","chunkGroup","chunks","chunk","chunkModules","chunkGraph","getChunkModulesIterable","anyModule","modules","concatenatedMod","Promise","all","serverTypesPath","packageJsonAssetPath","cacheLifeAssetPath"],"mappings":"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","ignoreList":[0]}