next 15.4.2-canary.51 → 15.4.2-canary.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of next might be problematic. Click here for more details.

Files changed (43) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +2 -2
  3. package/dist/build/swc/index.js +1 -1
  4. package/dist/build/webpack-config.js +2 -2
  5. package/dist/client/app-bootstrap.js +1 -1
  6. package/dist/client/index.js +1 -1
  7. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js +1 -1
  8. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js.map +1 -1
  9. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js +1 -1
  10. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js.map +1 -1
  11. package/dist/compiled/next-server/pages-turbo.runtime.dev.js +1 -1
  12. package/dist/compiled/next-server/pages-turbo.runtime.dev.js.map +1 -1
  13. package/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  14. package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
  15. package/dist/esm/build/index.js +2 -2
  16. package/dist/esm/build/swc/index.js +1 -1
  17. package/dist/esm/build/webpack-config.js +2 -2
  18. package/dist/esm/client/app-bootstrap.js +1 -1
  19. package/dist/esm/client/index.js +1 -1
  20. package/dist/esm/server/dev/hot-reloader-turbopack.js +3 -2
  21. package/dist/esm/server/dev/hot-reloader-turbopack.js.map +1 -1
  22. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  23. package/dist/esm/server/lib/app-info-log.js +1 -1
  24. package/dist/esm/server/lib/router-utils/route-types-utils.js +10 -10
  25. package/dist/esm/server/lib/router-utils/route-types-utils.js.map +1 -1
  26. package/dist/esm/server/lib/router-utils/typegen.js +87 -33
  27. package/dist/esm/server/lib/router-utils/typegen.js.map +1 -1
  28. package/dist/esm/server/lib/start-server.js +1 -1
  29. package/dist/esm/shared/lib/canary-only.js +1 -1
  30. package/dist/server/dev/hot-reloader-turbopack.js +3 -2
  31. package/dist/server/dev/hot-reloader-turbopack.js.map +1 -1
  32. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  33. package/dist/server/lib/app-info-log.js +1 -1
  34. package/dist/server/lib/router-utils/route-types-utils.js +10 -10
  35. package/dist/server/lib/router-utils/route-types-utils.js.map +1 -1
  36. package/dist/server/lib/router-utils/typegen.js +87 -33
  37. package/dist/server/lib/router-utils/typegen.js.map +1 -1
  38. package/dist/server/lib/start-server.js +1 -1
  39. package/dist/shared/lib/canary-only.js +1 -1
  40. package/dist/telemetry/anonymous-meta.js +1 -1
  41. package/dist/telemetry/events/session-stopped.js +2 -2
  42. package/dist/telemetry/events/version.js +2 -2
  43. package/package.json +15 -15
@@ -40,10 +40,9 @@ function generateRouteTypes(routesManifest) {
40
40
  }
41
41
  // Generate AppRouteHandlerRoutes union type for route handlers
42
42
  const appRouteHandlerRoutes = Object.keys(routesManifest.appRouteHandlerRoutes).sort();
43
- if (appRouteHandlerRoutes.length > 0) {
43
+ const hasAppRouteHandlers = appRouteHandlerRoutes.length > 0;
44
+ if (hasAppRouteHandlers) {
44
45
  result += `type AppRouteHandlerRoutes = ${appRouteHandlerRoutes.map((route)=>JSON.stringify(route)).join(' | ')}\n`;
45
- } else {
46
- result += 'type AppRouteHandlerRoutes = never\n';
47
46
  }
48
47
  // Generate PageRoutes union type
49
48
  if (pageRoutes.length > 0) {
@@ -69,7 +68,18 @@ function generateRouteTypes(routesManifest) {
69
68
  } else {
70
69
  result += 'type RewriteRoutes = never\n';
71
70
  }
72
- result += 'type Routes = AppRoutes | AppRouteHandlerRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRoutes\n';
71
+ // Only include AppRouteHandlerRoutes in Routes union if there are actual route handlers
72
+ const routeUnionParts = [
73
+ 'AppRoutes',
74
+ 'PageRoutes',
75
+ 'LayoutRoutes',
76
+ 'RedirectRoutes',
77
+ 'RewriteRoutes'
78
+ ];
79
+ if (hasAppRouteHandlers) {
80
+ routeUnionParts.push('AppRouteHandlerRoutes');
81
+ }
82
+ result += `type Routes = ${routeUnionParts.join(' | ')}\n`;
73
83
  return result;
74
84
  }
75
85
  function generateParamTypes(routesManifest) {
@@ -335,15 +345,11 @@ function generateValidatorFile(routesManifest) {
335
345
  const pagesRouterPageValidations = generateValidations(Array.from(routesManifest.pagesRouterPagePaths).sort(), 'PagesPageConfig');
336
346
  const pagesApiRouteValidations = generateValidations(Array.from(routesManifest.pageApiRoutes).sort(), 'ApiRouteConfig');
337
347
  const layoutValidations = generateValidations(Array.from(routesManifest.layoutPaths).sort(), 'LayoutConfig', routesManifest.filePathToRoute);
338
- return `// This file is generated automatically by Next.js
339
- // Do not edit this file manually
340
- // This file validates that all pages and layouts export the correct types
341
-
342
- import type { AppRoutes, AppRouteHandlerRoutes, LayoutRoutes, ParamMap } from "./routes.js"
343
- import type { ResolvingMetadata, ResolvingViewport } from "next/dist/lib/metadata/types/metadata-interface.js"
344
- import type { NextRequest } from 'next/server.js'
345
-
346
- type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
348
+ const hasAppRouteHandlers = Object.keys(routesManifest.appRouteHandlerRoutes).length > 0;
349
+ // Build type definitions based on what's actually used
350
+ let typeDefinitions = '';
351
+ if (appPageValidations) {
352
+ typeDefinitions += `type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
347
353
  default: React.ComponentType<{ params: Promise<ParamMap[Route]> } & any> | ((props: { params: Promise<ParamMap[Route]> } & any) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
348
354
  generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
349
355
  generateMetadata?: (
@@ -358,7 +364,10 @@ type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
358
364
  viewport?: any
359
365
  }
360
366
 
361
- type PagesPageConfig = {
367
+ `;
368
+ }
369
+ if (pagesRouterPageValidations) {
370
+ typeDefinitions += `type PagesPageConfig = {
362
371
  default: React.ComponentType<any> | ((props: any) => React.ReactNode | Promise<React.ReactNode> | never | void)
363
372
  getStaticProps?: (context: any) => Promise<any> | any
364
373
  getStaticPaths?: (context: any) => Promise<any> | any
@@ -376,7 +385,10 @@ type PagesPageConfig = {
376
385
  }
377
386
  }
378
387
 
379
- type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {
388
+ `;
389
+ }
390
+ if (layoutValidations) {
391
+ typeDefinitions += `type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {
380
392
  default: React.ComponentType<LayoutProps<Route>> | ((props: LayoutProps<Route>) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
381
393
  generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
382
394
  generateMetadata?: (
@@ -391,7 +403,10 @@ type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {
391
403
  viewport?: any
392
404
  }
393
405
 
394
- type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRoutes> = {
406
+ `;
407
+ }
408
+ if (appRouteHandlerValidations) {
409
+ typeDefinitions += `type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRoutes> = {
395
410
  GET?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void
396
411
  POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void
397
412
  PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void
@@ -401,7 +416,10 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
401
416
  OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void
402
417
  }
403
418
 
404
- type ApiRouteConfig = {
419
+ `;
420
+ }
421
+ if (pagesApiRouteValidations) {
422
+ typeDefinitions += `type ApiRouteConfig = {
405
423
  default: (req: any, res: any) => Promise<void> | void | Promise<Response> | Response
406
424
  config?: {
407
425
  api?: {
@@ -414,6 +432,27 @@ type ApiRouteConfig = {
414
432
  }
415
433
  }
416
434
 
435
+ `;
436
+ }
437
+ // Build import statement based on what's actually needed
438
+ const routeImports = [
439
+ 'AppRoutes',
440
+ 'LayoutRoutes',
441
+ 'ParamMap'
442
+ ];
443
+ if (hasAppRouteHandlers) {
444
+ routeImports.push('AppRouteHandlerRoutes');
445
+ }
446
+ const routeImportStatement = routeImports.length > 0 ? `import type { ${routeImports.join(', ')} } from "./routes.js"` : '';
447
+ const nextRequestImport = hasAppRouteHandlers ? "import type { NextRequest } from 'next/server.js'\n" : '';
448
+ return `// This file is generated automatically by Next.js
449
+ // Do not edit this file manually
450
+ // This file validates that all pages and layouts export the correct types
451
+
452
+ ${routeImportStatement}
453
+ import type { ResolvingMetadata, ResolvingViewport } from "next/dist/lib/metadata/types/metadata-interface.js"
454
+ ${nextRequestImport}
455
+ ${typeDefinitions}
417
456
  ${appPageValidations}
418
457
 
419
458
  ${appRouteHandlerValidations}
@@ -429,6 +468,35 @@ function generateRouteTypesFile(routesManifest) {
429
468
  const routeTypes = generateRouteTypes(routesManifest);
430
469
  const paramTypes = generateParamTypes(routesManifest);
431
470
  const layoutSlotMap = generateLayoutSlotMap(routesManifest);
471
+ const hasAppRouteHandlers = Object.keys(routesManifest.appRouteHandlerRoutes).length > 0;
472
+ // Build export statement based on what's actually generated
473
+ const routeExports = [
474
+ 'AppRoutes',
475
+ 'PageRoutes',
476
+ 'LayoutRoutes',
477
+ 'RedirectRoutes',
478
+ 'RewriteRoutes',
479
+ 'ParamMap'
480
+ ];
481
+ if (hasAppRouteHandlers) {
482
+ routeExports.push('AppRouteHandlerRoutes');
483
+ }
484
+ const exportStatement = `export type { ${routeExports.join(', ')} }`;
485
+ const routeContextInterface = hasAppRouteHandlers ? `
486
+
487
+ /**
488
+ * Context for Next.js App Router route handlers
489
+ * @example
490
+ * \`\`\`tsx
491
+ * export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) {
492
+ * const { id } = await context.params
493
+ * return Response.json({ id })
494
+ * }
495
+ * \`\`\`
496
+ */
497
+ interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {
498
+ params: Promise<ParamMap[AppRouteHandlerRoute]>
499
+ }` : '';
432
500
  return `// This file is generated automatically by Next.js
433
501
  // Do not edit this file manually
434
502
 
@@ -440,7 +508,7 @@ export type ParamsOf<Route extends Routes> = ParamMap[Route]
440
508
 
441
509
  ${layoutSlotMap}
442
510
 
443
- export type { AppRoutes, AppRouteHandlerRoutes, PageRoutes, LayoutRoutes, RedirectRoutes, RewriteRoutes, ParamMap }
511
+ ${exportStatement}
444
512
 
445
513
  declare global {
446
514
  /**
@@ -472,21 +540,7 @@ declare global {
472
540
  children: React.ReactNode
473
541
  } & {
474
542
  [K in LayoutSlotMap[LayoutRoute]]: React.ReactNode
475
- }
476
-
477
- /**
478
- * Context for Next.js App Router route handlers
479
- * @example
480
- * \`\`\`tsx
481
- * export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) {
482
- * const { id } = await context.params
483
- * return Response.json({ id })
484
- * }
485
- * \`\`\`
486
- */
487
- interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {
488
- params: Promise<ParamMap[AppRouteHandlerRoute]>
489
- }
543
+ }${routeContextInterface}
490
544
  }
491
545
  `;
492
546
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/server/lib/router-utils/typegen.ts"],"sourcesContent":["import type { RouteTypesManifest } from './route-types-utils'\nimport { isDynamicRoute } from '../../../shared/lib/router/utils/is-dynamic'\n\nfunction generateRouteTypes(routesManifest: RouteTypesManifest): string {\n const appRoutes = Object.keys(routesManifest.appRoutes).sort()\n const pageRoutes = Object.keys(routesManifest.pageRoutes).sort()\n const layoutRoutes = Object.keys(routesManifest.layoutRoutes).sort()\n const redirectRoutes = Object.keys(routesManifest.redirectRoutes).sort()\n const rewriteRoutes = Object.keys(routesManifest.rewriteRoutes).sort()\n\n let result = ''\n\n // Generate AppRoutes union type (pages only)\n if (appRoutes.length > 0) {\n result += `type AppRoutes = ${appRoutes.map((route) => JSON.stringify(route)).join(' | ')}\\n`\n } else {\n result += 'type AppRoutes = never\\n'\n }\n\n // Generate AppRouteHandlerRoutes union type for route handlers\n const appRouteHandlerRoutes = Object.keys(\n routesManifest.appRouteHandlerRoutes\n ).sort()\n\n if (appRouteHandlerRoutes.length > 0) {\n result += `type AppRouteHandlerRoutes = ${appRouteHandlerRoutes.map((route) => JSON.stringify(route)).join(' | ')}\\n`\n } else {\n result += 'type AppRouteHandlerRoutes = never\\n'\n }\n\n // Generate PageRoutes union type\n if (pageRoutes.length > 0) {\n result += `type PageRoutes = ${pageRoutes.map((route) => JSON.stringify(route)).join(' | ')}\\n`\n } else {\n result += 'type PageRoutes = never\\n'\n }\n\n // Generate LayoutRoutes union type\n if (layoutRoutes.length > 0) {\n result += `type LayoutRoutes = ${layoutRoutes.map((route) => JSON.stringify(route)).join(' | ')}\\n`\n } else {\n result += 'type LayoutRoutes = never\\n'\n }\n\n // Generate RedirectRoutes union type\n if (redirectRoutes.length > 0) {\n result += `type RedirectRoutes = ${redirectRoutes\n .map((route) => JSON.stringify(route))\n .join(' | ')}\\n`\n } else {\n result += 'type RedirectRoutes = never\\n'\n }\n\n // Generate RewriteRoutes union type\n if (rewriteRoutes.length > 0) {\n result += `type RewriteRoutes = ${rewriteRoutes\n .map((route) => JSON.stringify(route))\n .join(' | ')}\\n`\n } else {\n result += 'type RewriteRoutes = never\\n'\n }\n\n result +=\n 'type Routes = AppRoutes | AppRouteHandlerRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRoutes\\n'\n\n return result\n}\n\nfunction generateParamTypes(routesManifest: RouteTypesManifest): string {\n const allRoutes = {\n ...routesManifest.appRoutes,\n ...routesManifest.appRouteHandlerRoutes,\n ...routesManifest.pageRoutes,\n ...routesManifest.layoutRoutes,\n ...routesManifest.redirectRoutes,\n ...routesManifest.rewriteRoutes,\n }\n\n let paramTypes = 'interface ParamMap {\\n'\n\n // Sort routes deterministically for consistent output\n const sortedRoutes = Object.entries(allRoutes).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n\n for (const [route, routeInfo] of sortedRoutes) {\n const { groups } = routeInfo\n\n // For static routes (no dynamic segments), we can produce an empty parameter map.\n if (!isDynamicRoute(route) || Object.keys(groups ?? {}).length === 0) {\n paramTypes += ` ${JSON.stringify(route)}: {}\\n`\n continue\n }\n\n let paramType = '{'\n\n // Process each group based on its properties\n for (const [key, group] of Object.entries(groups)) {\n const escapedKey = JSON.stringify(key)\n if (group.repeat) {\n // Catch-all parameters\n if (group.optional) {\n paramType += ` ${escapedKey}?: string[];`\n } else {\n paramType += ` ${escapedKey}: string[];`\n }\n } else {\n // Regular parameters\n if (group.optional) {\n paramType += ` ${escapedKey}?: string;`\n } else {\n paramType += ` ${escapedKey}: string;`\n }\n }\n }\n\n paramType += ' }'\n\n paramTypes += ` ${JSON.stringify(route)}: ${paramType}\\n`\n }\n\n paramTypes += '}\\n'\n return paramTypes\n}\n\nfunction generateLayoutSlotMap(routesManifest: RouteTypesManifest): string {\n let slotMap = 'interface LayoutSlotMap {\\n'\n\n // Sort routes deterministically for consistent output\n const sortedLayoutRoutes = Object.entries(routesManifest.layoutRoutes).sort(\n ([a], [b]) => a.localeCompare(b)\n )\n\n for (const [route, routeInfo] of sortedLayoutRoutes) {\n if ('slots' in routeInfo) {\n const slots = routeInfo.slots.sort()\n if (slots.length > 0) {\n slotMap += ` ${JSON.stringify(route)}: ${slots.map((slot) => JSON.stringify(slot)).join(' | ')}\\n`\n } else {\n slotMap += ` ${JSON.stringify(route)}: never\\n`\n }\n } else {\n slotMap += ` ${JSON.stringify(route)}: never\\n`\n }\n }\n\n slotMap += '}\\n'\n return slotMap\n}\n\n// Helper function to format routes to route types (matches the plugin logic exactly)\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\n// Helper function to serialize route types (matches the plugin logic exactly)\nfunction serializeRouteTypes(routeTypes: string[]) {\n // route collection is not deterministic, this makes the output of the file deterministic\n return routeTypes\n .sort()\n .map((route) => `\\n | \\`${route}\\``)\n .join('')\n}\n\nexport function generateLinkTypesFile(\n routesManifest: RouteTypesManifest\n): string {\n // Generate serialized static and dynamic routes for the internal namespace\n const allRoutes = {\n ...routesManifest.appRoutes,\n ...routesManifest.pageRoutes,\n ...routesManifest.redirectRoutes,\n ...routesManifest.rewriteRoutes,\n }\n\n const staticRouteTypes: string[] = []\n const dynamicRouteTypes: string[] = []\n\n // Process each route using the same logic as the plugin\n for (const route of Object.keys(allRoutes)) {\n const { isDynamic, routeType } = formatRouteToRouteType(route)\n if (isDynamic) {\n dynamicRouteTypes.push(routeType)\n } else {\n staticRouteTypes.push(routeType)\n }\n }\n\n const serializedStaticRouteTypes = serializeRouteTypes(staticRouteTypes)\n const serializedDynamicRouteTypes = serializeRouteTypes(dynamicRouteTypes)\n\n // If both StaticRoutes and DynamicRoutes are empty, fallback to type 'string & {}'.\n const routeTypesFallback =\n !serializedStaticRouteTypes && !serializedDynamicRouteTypes\n ? 'string & {}'\n : ''\n\n return `// This file is generated automatically by Next.js\n// Do not edit this file manually\n\n// Type definitions for Next.js routes\n\n/**\n * Internal types used by the Next.js router and Link component.\n * These types are not meant to be used directly.\n * @internal\n */\ndeclare namespace __next_route_internal_types__ {\n type SearchOrHash = \\`?\\${string}\\` | \\`#\\${string}\\`\n type WithProtocol = \\`\\${string}:\\${string}\\`\n\n type Suffix = '' | SearchOrHash\n\n type SafeSlug<S extends string> = S extends \\`\\${string}/\\${string}\\`\n ? never\n : S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S\n\n type CatchAllSlug<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S\n\n type OptionalCatchAllSlug<S extends string> =\n S extends \\`\\${string}\\${SearchOrHash}\\` ? never : S\n\n type StaticRoutes = ${serializedStaticRouteTypes || 'never'}\n type DynamicRoutes<T extends string = string> = ${\n serializedDynamicRouteTypes || 'never'\n }\n\n type RouteImpl<T> = ${\n routeTypesFallback ||\n `\n ${\n // This keeps autocompletion working for static routes.\n '| StaticRoutes'\n }\n | SearchOrHash\n | WithProtocol\n | \\`\\${StaticRoutes}\\${SearchOrHash}\\`\n | (T extends \\`\\${DynamicRoutes<infer _>}\\${Suffix}\\` ? T : never)\n `\n }\n}\n\ndeclare module 'next' {\n export { default } from 'next/types.js'\n export * from 'next/types.js'\n\n export type Route<T extends string = string> =\n __next_route_internal_types__.RouteImpl<T>\n}\n\ndeclare module 'next/link' {\n import type { LinkProps as OriginalLinkProps } from 'next/dist/client/link.js'\n import type { AnchorHTMLAttributes, DetailedHTMLProps } from 'react'\n import type { UrlObject } from 'url'\n\n type LinkRestProps = Omit<\n Omit<\n DetailedHTMLProps<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n HTMLAnchorElement\n >,\n keyof OriginalLinkProps\n > &\n OriginalLinkProps,\n 'href'\n >\n\n export type LinkProps<RouteInferType> = LinkRestProps & {\n /**\n * The path or URL to navigate to. This is the only required prop. It can also be an object.\n * @see https://nextjs.org/docs/api-reference/next/link\n */\n href: __next_route_internal_types__.RouteImpl<RouteInferType> | UrlObject\n }\n\n export default function Link<RouteType>(props: LinkProps<RouteType>): JSX.Element\n}\n\ndeclare module 'next/navigation' {\n export * from 'next/dist/client/components/navigation.js'\n\n import type { NavigateOptions, AppRouterInstance as OriginalAppRouterInstance } from 'next/dist/shared/lib/app-router-context.shared-runtime.js'\n interface AppRouterInstance extends OriginalAppRouterInstance {\n /**\n * Navigate to the provided href.\n * Pushes a new history entry.\n */\n push<RouteType>(href: __next_route_internal_types__.RouteImpl<RouteType>, options?: NavigateOptions): void\n /**\n * Navigate to the provided href.\n * Replaces the current history entry.\n */\n replace<RouteType>(href: __next_route_internal_types__.RouteImpl<RouteType>, options?: NavigateOptions): void\n /**\n * Prefetch the provided href.\n */\n prefetch<RouteType>(href: __next_route_internal_types__.RouteImpl<RouteType>): void\n }\n\n export function useRouter(): AppRouterInstance;\n}\n\ndeclare module 'next/form' {\n import type { FormProps as OriginalFormProps } from 'next/dist/client/form.js'\n\n type FormRestProps = Omit<OriginalFormProps, 'action'>\n\n export type FormProps<RouteInferType> = {\n /**\n * \\`action\\` can be either a \\`string\\` or a function.\n * - If \\`action\\` is a string, it will be interpreted as a path or URL to navigate to when the form is submitted.\n * The path will be prefetched when the form becomes visible.\n * - If \\`action\\` is a function, it will be called when the form is submitted. See the [React docs](https://react.dev/reference/react-dom/components/form#props) for more.\n */\n action: __next_route_internal_types__.RouteImpl<RouteInferType> | ((formData: FormData) => void)\n } & FormRestProps\n\n export default function Form<RouteType>(props: FormProps<RouteType>): JSX.Element\n}\n`\n}\n\nexport function generateValidatorFile(\n routesManifest: RouteTypesManifest\n): string {\n const generateValidations = (\n paths: string[],\n type:\n | 'AppPageConfig'\n | 'PagesPageConfig'\n | 'LayoutConfig'\n | 'RouteHandlerConfig'\n | 'ApiRouteConfig',\n pathToRouteMap?: Map<string, string>\n ) =>\n paths\n .sort()\n // Only validate TypeScript files - JavaScript files have too many type inference limitations\n .filter(\n (filePath) => filePath.endsWith('.ts') || filePath.endsWith('.tsx')\n )\n .filter(\n // Don't include metadata routes or pages\n // (e.g. /manifest.webmanifest)\n (filePath) =>\n type !== 'AppPageConfig' ||\n filePath.endsWith('page.ts') ||\n filePath.endsWith('page.tsx')\n )\n .map((filePath) => {\n // Keep the file extension for TypeScript imports to support node16 module resolution\n const importPath = filePath\n const route = pathToRouteMap?.get(filePath)\n const typeWithRoute =\n route &&\n (type === 'AppPageConfig' ||\n type === 'LayoutConfig' ||\n type === 'RouteHandlerConfig')\n ? `${type}<${JSON.stringify(route)}>`\n : type\n return `// Validate ${filePath}\n{\n const handler = {} as typeof import(${JSON.stringify(\n importPath.replace(/\\.tsx?$/, '.js')\n )})\n handler satisfies ${typeWithRoute}\n}`\n })\n .join('\\n\\n')\n\n // Use direct mappings from the manifest\n\n // Generate validations for different route types\n const appPageValidations = generateValidations(\n Array.from(routesManifest.appPagePaths).sort(),\n 'AppPageConfig',\n routesManifest.filePathToRoute\n )\n const appRouteHandlerValidations = generateValidations(\n Array.from(routesManifest.appRouteHandlers).sort(),\n 'RouteHandlerConfig',\n routesManifest.filePathToRoute\n )\n const pagesRouterPageValidations = generateValidations(\n Array.from(routesManifest.pagesRouterPagePaths).sort(),\n 'PagesPageConfig'\n )\n const pagesApiRouteValidations = generateValidations(\n Array.from(routesManifest.pageApiRoutes).sort(),\n 'ApiRouteConfig'\n )\n const layoutValidations = generateValidations(\n Array.from(routesManifest.layoutPaths).sort(),\n 'LayoutConfig',\n routesManifest.filePathToRoute\n )\n\n return `// This file is generated automatically by Next.js\n// Do not edit this file manually\n// This file validates that all pages and layouts export the correct types\n\nimport type { AppRoutes, AppRouteHandlerRoutes, LayoutRoutes, ParamMap } from \"./routes.js\"\nimport type { ResolvingMetadata, ResolvingViewport } from \"next/dist/lib/metadata/types/metadata-interface.js\"\nimport type { NextRequest } from 'next/server.js'\n\ntype AppPageConfig<Route extends AppRoutes = AppRoutes> = {\n default: React.ComponentType<{ params: Promise<ParamMap[Route]> } & any> | ((props: { params: Promise<ParamMap[Route]> } & any) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)\n generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]\n generateMetadata?: (\n props: { params: Promise<ParamMap[Route]> } & any,\n parent: ResolvingMetadata\n ) => Promise<any> | any\n generateViewport?: (\n props: { params: Promise<ParamMap[Route]> } & any,\n parent: ResolvingViewport\n ) => Promise<any> | any\n metadata?: any\n viewport?: any\n}\n\ntype PagesPageConfig = {\n default: React.ComponentType<any> | ((props: any) => React.ReactNode | Promise<React.ReactNode> | never | void)\n getStaticProps?: (context: any) => Promise<any> | any\n getStaticPaths?: (context: any) => Promise<any> | any\n getServerSideProps?: (context: any) => Promise<any> | any\n getInitialProps?: (context: any) => Promise<any> | any\n /**\n * Segment configuration for legacy Pages Router pages.\n * Validated at build-time by parsePagesSegmentConfig.\n */\n config?: {\n amp?: boolean | 'hybrid'\n maxDuration?: number\n runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const\n regions?: string[]\n }\n}\n\ntype LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {\n default: React.ComponentType<LayoutProps<Route>> | ((props: LayoutProps<Route>) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)\n generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]\n generateMetadata?: (\n props: { params: Promise<ParamMap[Route]> } & any,\n parent: ResolvingMetadata\n ) => Promise<any> | any\n generateViewport?: (\n props: { params: Promise<ParamMap[Route]> } & any,\n parent: ResolvingViewport\n ) => Promise<any> | any\n metadata?: any\n viewport?: any\n}\n\ntype RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRoutes> = {\n GET?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n PATCH?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n DELETE?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n HEAD?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n}\n\ntype ApiRouteConfig = {\n default: (req: any, res: any) => Promise<void> | void | Promise<Response> | Response\n config?: {\n api?: {\n bodyParser?: boolean | { sizeLimit?: string }\n responseLimit?: string | number\n externalResolver?: boolean\n }\n runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const\n maxDuration?: number\n }\n}\n\n${appPageValidations}\n\n${appRouteHandlerValidations}\n\n${pagesRouterPageValidations}\n\n${pagesApiRouteValidations}\n\n${layoutValidations}\n`\n}\n\nexport function generateRouteTypesFile(\n routesManifest: RouteTypesManifest\n): string {\n const routeTypes = generateRouteTypes(routesManifest)\n const paramTypes = generateParamTypes(routesManifest)\n const layoutSlotMap = generateLayoutSlotMap(routesManifest)\n\n return `// This file is generated automatically by Next.js\n// Do not edit this file manually\n\n${routeTypes}\n\n${paramTypes}\n\nexport type ParamsOf<Route extends Routes> = ParamMap[Route]\n\n${layoutSlotMap}\n\nexport type { AppRoutes, AppRouteHandlerRoutes, PageRoutes, LayoutRoutes, RedirectRoutes, RewriteRoutes, ParamMap }\n\ndeclare global {\n /**\n * Props for Next.js App Router page components\n * @example\n * \\`\\`\\`tsx\n * export default function Page(props: PageProps<'/blog/[slug]'>) {\n * const { slug } = await props.params\n * return <div>Blog post: {slug}</div>\n * }\n * \\`\\`\\`\n */\n interface PageProps<AppRoute extends AppRoutes> {\n params: Promise<ParamMap[AppRoute]>\n searchParams: Promise<Record<string, string | string[] | undefined>>\n }\n\n /**\n * Props for Next.js App Router layout components\n * @example\n * \\`\\`\\`tsx\n * export default function Layout(props: LayoutProps<'/dashboard'>) {\n * return <div>{props.children}</div>\n * }\n * \\`\\`\\`\n */\n type LayoutProps<LayoutRoute extends LayoutRoutes> = {\n params: Promise<ParamMap[LayoutRoute]>\n children: React.ReactNode\n } & {\n [K in LayoutSlotMap[LayoutRoute]]: React.ReactNode\n }\n\n /**\n * Context for Next.js App Router route handlers\n * @example\n * \\`\\`\\`tsx\n * export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) {\n * const { id } = await context.params\n * return Response.json({ id })\n * }\n * \\`\\`\\`\n */\n interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {\n params: Promise<ParamMap[AppRouteHandlerRoute]>\n }\n}\n`\n}\n"],"names":["generateLinkTypesFile","generateRouteTypesFile","generateValidatorFile","generateRouteTypes","routesManifest","appRoutes","Object","keys","sort","pageRoutes","layoutRoutes","redirectRoutes","rewriteRoutes","result","length","map","route","JSON","stringify","join","appRouteHandlerRoutes","generateParamTypes","allRoutes","paramTypes","sortedRoutes","entries","a","b","localeCompare","routeInfo","groups","isDynamicRoute","paramType","key","group","escapedKey","repeat","optional","generateLayoutSlotMap","slotMap","sortedLayoutRoutes","slots","slot","formatRouteToRouteType","isDynamic","split","part","startsWith","endsWith","routeType","serializeRouteTypes","routeTypes","staticRouteTypes","dynamicRouteTypes","push","serializedStaticRouteTypes","serializedDynamicRouteTypes","routeTypesFallback","generateValidations","paths","type","pathToRouteMap","filter","filePath","importPath","get","typeWithRoute","replace","appPageValidations","Array","from","appPagePaths","filePathToRoute","appRouteHandlerValidations","appRouteHandlers","pagesRouterPageValidations","pagesRouterPagePaths","pagesApiRouteValidations","pageApiRoutes","layoutValidations","layoutPaths","layoutSlotMap"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../src/server/lib/router-utils/typegen.ts"],"sourcesContent":["import type { RouteTypesManifest } from './route-types-utils'\nimport { isDynamicRoute } from '../../../shared/lib/router/utils/is-dynamic'\n\nfunction generateRouteTypes(routesManifest: RouteTypesManifest): string {\n const appRoutes = Object.keys(routesManifest.appRoutes).sort()\n const pageRoutes = Object.keys(routesManifest.pageRoutes).sort()\n const layoutRoutes = Object.keys(routesManifest.layoutRoutes).sort()\n const redirectRoutes = Object.keys(routesManifest.redirectRoutes).sort()\n const rewriteRoutes = Object.keys(routesManifest.rewriteRoutes).sort()\n\n let result = ''\n\n // Generate AppRoutes union type (pages only)\n if (appRoutes.length > 0) {\n result += `type AppRoutes = ${appRoutes.map((route) => JSON.stringify(route)).join(' | ')}\\n`\n } else {\n result += 'type AppRoutes = never\\n'\n }\n\n // Generate AppRouteHandlerRoutes union type for route handlers\n const appRouteHandlerRoutes = Object.keys(\n routesManifest.appRouteHandlerRoutes\n ).sort()\n\n const hasAppRouteHandlers = appRouteHandlerRoutes.length > 0\n\n if (hasAppRouteHandlers) {\n result += `type AppRouteHandlerRoutes = ${appRouteHandlerRoutes.map((route) => JSON.stringify(route)).join(' | ')}\\n`\n }\n\n // Generate PageRoutes union type\n if (pageRoutes.length > 0) {\n result += `type PageRoutes = ${pageRoutes.map((route) => JSON.stringify(route)).join(' | ')}\\n`\n } else {\n result += 'type PageRoutes = never\\n'\n }\n\n // Generate LayoutRoutes union type\n if (layoutRoutes.length > 0) {\n result += `type LayoutRoutes = ${layoutRoutes.map((route) => JSON.stringify(route)).join(' | ')}\\n`\n } else {\n result += 'type LayoutRoutes = never\\n'\n }\n\n // Generate RedirectRoutes union type\n if (redirectRoutes.length > 0) {\n result += `type RedirectRoutes = ${redirectRoutes\n .map((route) => JSON.stringify(route))\n .join(' | ')}\\n`\n } else {\n result += 'type RedirectRoutes = never\\n'\n }\n\n // Generate RewriteRoutes union type\n if (rewriteRoutes.length > 0) {\n result += `type RewriteRoutes = ${rewriteRoutes\n .map((route) => JSON.stringify(route))\n .join(' | ')}\\n`\n } else {\n result += 'type RewriteRoutes = never\\n'\n }\n\n // Only include AppRouteHandlerRoutes in Routes union if there are actual route handlers\n const routeUnionParts = [\n 'AppRoutes',\n 'PageRoutes',\n 'LayoutRoutes',\n 'RedirectRoutes',\n 'RewriteRoutes',\n ]\n if (hasAppRouteHandlers) {\n routeUnionParts.push('AppRouteHandlerRoutes')\n }\n\n result += `type Routes = ${routeUnionParts.join(' | ')}\\n`\n\n return result\n}\n\nfunction generateParamTypes(routesManifest: RouteTypesManifest): string {\n const allRoutes = {\n ...routesManifest.appRoutes,\n ...routesManifest.appRouteHandlerRoutes,\n ...routesManifest.pageRoutes,\n ...routesManifest.layoutRoutes,\n ...routesManifest.redirectRoutes,\n ...routesManifest.rewriteRoutes,\n }\n\n let paramTypes = 'interface ParamMap {\\n'\n\n // Sort routes deterministically for consistent output\n const sortedRoutes = Object.entries(allRoutes).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n\n for (const [route, routeInfo] of sortedRoutes) {\n const { groups } = routeInfo\n\n // For static routes (no dynamic segments), we can produce an empty parameter map.\n if (!isDynamicRoute(route) || Object.keys(groups ?? {}).length === 0) {\n paramTypes += ` ${JSON.stringify(route)}: {}\\n`\n continue\n }\n\n let paramType = '{'\n\n // Process each group based on its properties\n for (const [key, group] of Object.entries(groups)) {\n const escapedKey = JSON.stringify(key)\n if (group.repeat) {\n // Catch-all parameters\n if (group.optional) {\n paramType += ` ${escapedKey}?: string[];`\n } else {\n paramType += ` ${escapedKey}: string[];`\n }\n } else {\n // Regular parameters\n if (group.optional) {\n paramType += ` ${escapedKey}?: string;`\n } else {\n paramType += ` ${escapedKey}: string;`\n }\n }\n }\n\n paramType += ' }'\n\n paramTypes += ` ${JSON.stringify(route)}: ${paramType}\\n`\n }\n\n paramTypes += '}\\n'\n return paramTypes\n}\n\nfunction generateLayoutSlotMap(routesManifest: RouteTypesManifest): string {\n let slotMap = 'interface LayoutSlotMap {\\n'\n\n // Sort routes deterministically for consistent output\n const sortedLayoutRoutes = Object.entries(routesManifest.layoutRoutes).sort(\n ([a], [b]) => a.localeCompare(b)\n )\n\n for (const [route, routeInfo] of sortedLayoutRoutes) {\n if ('slots' in routeInfo) {\n const slots = routeInfo.slots.sort()\n if (slots.length > 0) {\n slotMap += ` ${JSON.stringify(route)}: ${slots.map((slot) => JSON.stringify(slot)).join(' | ')}\\n`\n } else {\n slotMap += ` ${JSON.stringify(route)}: never\\n`\n }\n } else {\n slotMap += ` ${JSON.stringify(route)}: never\\n`\n }\n }\n\n slotMap += '}\\n'\n return slotMap\n}\n\n// Helper function to format routes to route types (matches the plugin logic exactly)\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\n// Helper function to serialize route types (matches the plugin logic exactly)\nfunction serializeRouteTypes(routeTypes: string[]) {\n // route collection is not deterministic, this makes the output of the file deterministic\n return routeTypes\n .sort()\n .map((route) => `\\n | \\`${route}\\``)\n .join('')\n}\n\nexport function generateLinkTypesFile(\n routesManifest: RouteTypesManifest\n): string {\n // Generate serialized static and dynamic routes for the internal namespace\n const allRoutes = {\n ...routesManifest.appRoutes,\n ...routesManifest.pageRoutes,\n ...routesManifest.redirectRoutes,\n ...routesManifest.rewriteRoutes,\n }\n\n const staticRouteTypes: string[] = []\n const dynamicRouteTypes: string[] = []\n\n // Process each route using the same logic as the plugin\n for (const route of Object.keys(allRoutes)) {\n const { isDynamic, routeType } = formatRouteToRouteType(route)\n if (isDynamic) {\n dynamicRouteTypes.push(routeType)\n } else {\n staticRouteTypes.push(routeType)\n }\n }\n\n const serializedStaticRouteTypes = serializeRouteTypes(staticRouteTypes)\n const serializedDynamicRouteTypes = serializeRouteTypes(dynamicRouteTypes)\n\n // If both StaticRoutes and DynamicRoutes are empty, fallback to type 'string & {}'.\n const routeTypesFallback =\n !serializedStaticRouteTypes && !serializedDynamicRouteTypes\n ? 'string & {}'\n : ''\n\n return `// This file is generated automatically by Next.js\n// Do not edit this file manually\n\n// Type definitions for Next.js routes\n\n/**\n * Internal types used by the Next.js router and Link component.\n * These types are not meant to be used directly.\n * @internal\n */\ndeclare namespace __next_route_internal_types__ {\n type SearchOrHash = \\`?\\${string}\\` | \\`#\\${string}\\`\n type WithProtocol = \\`\\${string}:\\${string}\\`\n\n type Suffix = '' | SearchOrHash\n\n type SafeSlug<S extends string> = S extends \\`\\${string}/\\${string}\\`\n ? never\n : S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S\n\n type CatchAllSlug<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S\n\n type OptionalCatchAllSlug<S extends string> =\n S extends \\`\\${string}\\${SearchOrHash}\\` ? never : S\n\n type StaticRoutes = ${serializedStaticRouteTypes || 'never'}\n type DynamicRoutes<T extends string = string> = ${\n serializedDynamicRouteTypes || 'never'\n }\n\n type RouteImpl<T> = ${\n routeTypesFallback ||\n `\n ${\n // This keeps autocompletion working for static routes.\n '| StaticRoutes'\n }\n | SearchOrHash\n | WithProtocol\n | \\`\\${StaticRoutes}\\${SearchOrHash}\\`\n | (T extends \\`\\${DynamicRoutes<infer _>}\\${Suffix}\\` ? T : never)\n `\n }\n}\n\ndeclare module 'next' {\n export { default } from 'next/types.js'\n export * from 'next/types.js'\n\n export type Route<T extends string = string> =\n __next_route_internal_types__.RouteImpl<T>\n}\n\ndeclare module 'next/link' {\n import type { LinkProps as OriginalLinkProps } from 'next/dist/client/link.js'\n import type { AnchorHTMLAttributes, DetailedHTMLProps } from 'react'\n import type { UrlObject } from 'url'\n\n type LinkRestProps = Omit<\n Omit<\n DetailedHTMLProps<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n HTMLAnchorElement\n >,\n keyof OriginalLinkProps\n > &\n OriginalLinkProps,\n 'href'\n >\n\n export type LinkProps<RouteInferType> = LinkRestProps & {\n /**\n * The path or URL to navigate to. This is the only required prop. It can also be an object.\n * @see https://nextjs.org/docs/api-reference/next/link\n */\n href: __next_route_internal_types__.RouteImpl<RouteInferType> | UrlObject\n }\n\n export default function Link<RouteType>(props: LinkProps<RouteType>): JSX.Element\n}\n\ndeclare module 'next/navigation' {\n export * from 'next/dist/client/components/navigation.js'\n\n import type { NavigateOptions, AppRouterInstance as OriginalAppRouterInstance } from 'next/dist/shared/lib/app-router-context.shared-runtime.js'\n interface AppRouterInstance extends OriginalAppRouterInstance {\n /**\n * Navigate to the provided href.\n * Pushes a new history entry.\n */\n push<RouteType>(href: __next_route_internal_types__.RouteImpl<RouteType>, options?: NavigateOptions): void\n /**\n * Navigate to the provided href.\n * Replaces the current history entry.\n */\n replace<RouteType>(href: __next_route_internal_types__.RouteImpl<RouteType>, options?: NavigateOptions): void\n /**\n * Prefetch the provided href.\n */\n prefetch<RouteType>(href: __next_route_internal_types__.RouteImpl<RouteType>): void\n }\n\n export function useRouter(): AppRouterInstance;\n}\n\ndeclare module 'next/form' {\n import type { FormProps as OriginalFormProps } from 'next/dist/client/form.js'\n\n type FormRestProps = Omit<OriginalFormProps, 'action'>\n\n export type FormProps<RouteInferType> = {\n /**\n * \\`action\\` can be either a \\`string\\` or a function.\n * - If \\`action\\` is a string, it will be interpreted as a path or URL to navigate to when the form is submitted.\n * The path will be prefetched when the form becomes visible.\n * - If \\`action\\` is a function, it will be called when the form is submitted. See the [React docs](https://react.dev/reference/react-dom/components/form#props) for more.\n */\n action: __next_route_internal_types__.RouteImpl<RouteInferType> | ((formData: FormData) => void)\n } & FormRestProps\n\n export default function Form<RouteType>(props: FormProps<RouteType>): JSX.Element\n}\n`\n}\n\nexport function generateValidatorFile(\n routesManifest: RouteTypesManifest\n): string {\n const generateValidations = (\n paths: string[],\n type:\n | 'AppPageConfig'\n | 'PagesPageConfig'\n | 'LayoutConfig'\n | 'RouteHandlerConfig'\n | 'ApiRouteConfig',\n pathToRouteMap?: Map<string, string>\n ) =>\n paths\n .sort()\n // Only validate TypeScript files - JavaScript files have too many type inference limitations\n .filter(\n (filePath) => filePath.endsWith('.ts') || filePath.endsWith('.tsx')\n )\n .filter(\n // Don't include metadata routes or pages\n // (e.g. /manifest.webmanifest)\n (filePath) =>\n type !== 'AppPageConfig' ||\n filePath.endsWith('page.ts') ||\n filePath.endsWith('page.tsx')\n )\n .map((filePath) => {\n // Keep the file extension for TypeScript imports to support node16 module resolution\n const importPath = filePath\n const route = pathToRouteMap?.get(filePath)\n const typeWithRoute =\n route &&\n (type === 'AppPageConfig' ||\n type === 'LayoutConfig' ||\n type === 'RouteHandlerConfig')\n ? `${type}<${JSON.stringify(route)}>`\n : type\n return `// Validate ${filePath}\n{\n const handler = {} as typeof import(${JSON.stringify(\n importPath.replace(/\\.tsx?$/, '.js')\n )})\n handler satisfies ${typeWithRoute}\n}`\n })\n .join('\\n\\n')\n\n // Use direct mappings from the manifest\n\n // Generate validations for different route types\n const appPageValidations = generateValidations(\n Array.from(routesManifest.appPagePaths).sort(),\n 'AppPageConfig',\n routesManifest.filePathToRoute\n )\n const appRouteHandlerValidations = generateValidations(\n Array.from(routesManifest.appRouteHandlers).sort(),\n 'RouteHandlerConfig',\n routesManifest.filePathToRoute\n )\n const pagesRouterPageValidations = generateValidations(\n Array.from(routesManifest.pagesRouterPagePaths).sort(),\n 'PagesPageConfig'\n )\n const pagesApiRouteValidations = generateValidations(\n Array.from(routesManifest.pageApiRoutes).sort(),\n 'ApiRouteConfig'\n )\n const layoutValidations = generateValidations(\n Array.from(routesManifest.layoutPaths).sort(),\n 'LayoutConfig',\n routesManifest.filePathToRoute\n )\n\n const hasAppRouteHandlers =\n Object.keys(routesManifest.appRouteHandlerRoutes).length > 0\n\n // Build type definitions based on what's actually used\n let typeDefinitions = ''\n\n if (appPageValidations) {\n typeDefinitions += `type AppPageConfig<Route extends AppRoutes = AppRoutes> = {\n default: React.ComponentType<{ params: Promise<ParamMap[Route]> } & any> | ((props: { params: Promise<ParamMap[Route]> } & any) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)\n generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]\n generateMetadata?: (\n props: { params: Promise<ParamMap[Route]> } & any,\n parent: ResolvingMetadata\n ) => Promise<any> | any\n generateViewport?: (\n props: { params: Promise<ParamMap[Route]> } & any,\n parent: ResolvingViewport\n ) => Promise<any> | any\n metadata?: any\n viewport?: any\n}\n\n`\n }\n\n if (pagesRouterPageValidations) {\n typeDefinitions += `type PagesPageConfig = {\n default: React.ComponentType<any> | ((props: any) => React.ReactNode | Promise<React.ReactNode> | never | void)\n getStaticProps?: (context: any) => Promise<any> | any\n getStaticPaths?: (context: any) => Promise<any> | any\n getServerSideProps?: (context: any) => Promise<any> | any\n getInitialProps?: (context: any) => Promise<any> | any\n /**\n * Segment configuration for legacy Pages Router pages.\n * Validated at build-time by parsePagesSegmentConfig.\n */\n config?: {\n amp?: boolean | 'hybrid'\n maxDuration?: number\n runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const\n regions?: string[]\n }\n}\n\n`\n }\n\n if (layoutValidations) {\n typeDefinitions += `type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {\n default: React.ComponentType<LayoutProps<Route>> | ((props: LayoutProps<Route>) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)\n generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]\n generateMetadata?: (\n props: { params: Promise<ParamMap[Route]> } & any,\n parent: ResolvingMetadata\n ) => Promise<any> | any\n generateViewport?: (\n props: { params: Promise<ParamMap[Route]> } & any,\n parent: ResolvingViewport\n ) => Promise<any> | any\n metadata?: any\n viewport?: any\n}\n\n`\n }\n\n if (appRouteHandlerValidations) {\n typeDefinitions += `type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRoutes> = {\n GET?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n PATCH?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n DELETE?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n HEAD?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response> | Response | Promise<void> | void\n}\n\n`\n }\n\n if (pagesApiRouteValidations) {\n typeDefinitions += `type ApiRouteConfig = {\n default: (req: any, res: any) => Promise<void> | void | Promise<Response> | Response\n config?: {\n api?: {\n bodyParser?: boolean | { sizeLimit?: string }\n responseLimit?: string | number\n externalResolver?: boolean\n }\n runtime?: 'edge' | 'experimental-edge' | 'nodejs' | string // necessary unless config is exported as const\n maxDuration?: number\n }\n}\n\n`\n }\n\n // Build import statement based on what's actually needed\n const routeImports = ['AppRoutes', 'LayoutRoutes', 'ParamMap']\n if (hasAppRouteHandlers) {\n routeImports.push('AppRouteHandlerRoutes')\n }\n\n const routeImportStatement =\n routeImports.length > 0\n ? `import type { ${routeImports.join(', ')} } from \"./routes.js\"`\n : ''\n\n const nextRequestImport = hasAppRouteHandlers\n ? \"import type { NextRequest } from 'next/server.js'\\n\"\n : ''\n\n return `// This file is generated automatically by Next.js\n// Do not edit this file manually\n// This file validates that all pages and layouts export the correct types\n\n${routeImportStatement}\nimport type { ResolvingMetadata, ResolvingViewport } from \"next/dist/lib/metadata/types/metadata-interface.js\"\n${nextRequestImport}\n${typeDefinitions}\n${appPageValidations}\n\n${appRouteHandlerValidations}\n\n${pagesRouterPageValidations}\n\n${pagesApiRouteValidations}\n\n${layoutValidations}\n`\n}\n\nexport function generateRouteTypesFile(\n routesManifest: RouteTypesManifest\n): string {\n const routeTypes = generateRouteTypes(routesManifest)\n const paramTypes = generateParamTypes(routesManifest)\n const layoutSlotMap = generateLayoutSlotMap(routesManifest)\n\n const hasAppRouteHandlers =\n Object.keys(routesManifest.appRouteHandlerRoutes).length > 0\n\n // Build export statement based on what's actually generated\n const routeExports = [\n 'AppRoutes',\n 'PageRoutes',\n 'LayoutRoutes',\n 'RedirectRoutes',\n 'RewriteRoutes',\n 'ParamMap',\n ]\n if (hasAppRouteHandlers) {\n routeExports.push('AppRouteHandlerRoutes')\n }\n\n const exportStatement = `export type { ${routeExports.join(', ')} }`\n\n const routeContextInterface = hasAppRouteHandlers\n ? `\n\n /**\n * Context for Next.js App Router route handlers\n * @example\n * \\`\\`\\`tsx\n * export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) {\n * const { id } = await context.params\n * return Response.json({ id })\n * }\n * \\`\\`\\`\n */\n interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {\n params: Promise<ParamMap[AppRouteHandlerRoute]>\n }`\n : ''\n\n return `// This file is generated automatically by Next.js\n// Do not edit this file manually\n\n${routeTypes}\n\n${paramTypes}\n\nexport type ParamsOf<Route extends Routes> = ParamMap[Route]\n\n${layoutSlotMap}\n\n${exportStatement}\n\ndeclare global {\n /**\n * Props for Next.js App Router page components\n * @example\n * \\`\\`\\`tsx\n * export default function Page(props: PageProps<'/blog/[slug]'>) {\n * const { slug } = await props.params\n * return <div>Blog post: {slug}</div>\n * }\n * \\`\\`\\`\n */\n interface PageProps<AppRoute extends AppRoutes> {\n params: Promise<ParamMap[AppRoute]>\n searchParams: Promise<Record<string, string | string[] | undefined>>\n }\n\n /**\n * Props for Next.js App Router layout components\n * @example\n * \\`\\`\\`tsx\n * export default function Layout(props: LayoutProps<'/dashboard'>) {\n * return <div>{props.children}</div>\n * }\n * \\`\\`\\`\n */\n type LayoutProps<LayoutRoute extends LayoutRoutes> = {\n params: Promise<ParamMap[LayoutRoute]>\n children: React.ReactNode\n } & {\n [K in LayoutSlotMap[LayoutRoute]]: React.ReactNode\n }${routeContextInterface}\n}\n`\n}\n"],"names":["generateLinkTypesFile","generateRouteTypesFile","generateValidatorFile","generateRouteTypes","routesManifest","appRoutes","Object","keys","sort","pageRoutes","layoutRoutes","redirectRoutes","rewriteRoutes","result","length","map","route","JSON","stringify","join","appRouteHandlerRoutes","hasAppRouteHandlers","routeUnionParts","push","generateParamTypes","allRoutes","paramTypes","sortedRoutes","entries","a","b","localeCompare","routeInfo","groups","isDynamicRoute","paramType","key","group","escapedKey","repeat","optional","generateLayoutSlotMap","slotMap","sortedLayoutRoutes","slots","slot","formatRouteToRouteType","isDynamic","split","part","startsWith","endsWith","routeType","serializeRouteTypes","routeTypes","staticRouteTypes","dynamicRouteTypes","serializedStaticRouteTypes","serializedDynamicRouteTypes","routeTypesFallback","generateValidations","paths","type","pathToRouteMap","filter","filePath","importPath","get","typeWithRoute","replace","appPageValidations","Array","from","appPagePaths","filePathToRoute","appRouteHandlerValidations","appRouteHandlers","pagesRouterPageValidations","pagesRouterPagePaths","pagesApiRouteValidations","pageApiRoutes","layoutValidations","layoutPaths","typeDefinitions","routeImports","routeImportStatement","nextRequestImport","layoutSlotMap","routeExports","exportStatement","routeContextInterface"],"mappings":"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","ignoreList":[0]}
@@ -179,7 +179,7 @@ async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup, server
179
179
  async function startServer(serverOptions) {
180
180
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
181
181
  let { port } = serverOptions;
182
- process.title = `next-server (v${"15.4.2-canary.51"})`;
182
+ process.title = `next-server (v${"15.4.2-canary.53"})`;
183
183
  let handlersReady = ()=>{};
184
184
  let handlersError = ()=>{};
185
185
  let handlersPromise = new Promise((resolve, reject)=>{
@@ -22,7 +22,7 @@ _export(exports, {
22
22
  });
23
23
  function isStableBuild() {
24
24
  var _process_env___NEXT_VERSION;
25
- return !((_process_env___NEXT_VERSION = "15.4.2-canary.51") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
25
+ return !((_process_env___NEXT_VERSION = "15.4.2-canary.53") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
26
26
  }
27
27
  class CanaryOnlyError extends Error {
28
28
  constructor(arg){
@@ -81,7 +81,7 @@ function getAnonymousMeta() {
81
81
  isWsl: _iswsl.default,
82
82
  isCI: _ciinfo.isCI,
83
83
  ciName: _ciinfo.isCI && _ciinfo.name || null,
84
- nextVersion: "15.4.2-canary.51"
84
+ nextVersion: "15.4.2-canary.53"
85
85
  };
86
86
  return traits;
87
87
  }
@@ -11,11 +11,11 @@ Object.defineProperty(exports, "eventCliSessionStopped", {
11
11
  const EVENT_VERSION = 'NEXT_CLI_SESSION_STOPPED';
12
12
  function eventCliSessionStopped(event) {
13
13
  // This should be an invariant, if it fails our build tooling is broken.
14
- if (typeof "15.4.2-canary.51" !== 'string') {
14
+ if (typeof "15.4.2-canary.53" !== 'string') {
15
15
  return [];
16
16
  }
17
17
  const payload = {
18
- nextVersion: "15.4.2-canary.51",
18
+ nextVersion: "15.4.2-canary.53",
19
19
  nodeVersion: process.version,
20
20
  cliCommand: event.cliCommand,
21
21
  durationMilliseconds: event.durationMilliseconds,
@@ -36,12 +36,12 @@ function hasBabelConfig(dir) {
36
36
  function eventCliSession(dir, nextConfig, event) {
37
37
  var _nextConfig_experimental_staleTimes, _nextConfig_experimental_staleTimes1, _nextConfig_experimental_reactCompiler, _nextConfig_experimental_reactCompiler1;
38
38
  // This should be an invariant, if it fails our build tooling is broken.
39
- if (typeof "15.4.2-canary.51" !== 'string') {
39
+ if (typeof "15.4.2-canary.53" !== 'string') {
40
40
  return [];
41
41
  }
42
42
  const { images, i18n } = nextConfig || {};
43
43
  const payload = {
44
- nextVersion: "15.4.2-canary.51",
44
+ nextVersion: "15.4.2-canary.53",
45
45
  nodeVersion: process.version,
46
46
  cliCommand: event.cliCommand,
47
47
  isSrcDir: event.isSrcDir,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next",
3
- "version": "15.4.2-canary.51",
3
+ "version": "15.4.2-canary.53",
4
4
  "description": "The React Framework",
5
5
  "main": "./dist/server/next.js",
6
6
  "license": "MIT",
@@ -102,7 +102,7 @@
102
102
  ]
103
103
  },
104
104
  "dependencies": {
105
- "@next/env": "15.4.2-canary.51",
105
+ "@next/env": "15.4.2-canary.53",
106
106
  "@swc/helpers": "0.5.15",
107
107
  "caniuse-lite": "^1.0.30001579",
108
108
  "postcss": "8.4.31",
@@ -132,14 +132,14 @@
132
132
  },
133
133
  "optionalDependencies": {
134
134
  "sharp": "^0.34.3",
135
- "@next/swc-darwin-arm64": "15.4.2-canary.51",
136
- "@next/swc-darwin-x64": "15.4.2-canary.51",
137
- "@next/swc-linux-arm64-gnu": "15.4.2-canary.51",
138
- "@next/swc-linux-arm64-musl": "15.4.2-canary.51",
139
- "@next/swc-linux-x64-gnu": "15.4.2-canary.51",
140
- "@next/swc-linux-x64-musl": "15.4.2-canary.51",
141
- "@next/swc-win32-arm64-msvc": "15.4.2-canary.51",
142
- "@next/swc-win32-x64-msvc": "15.4.2-canary.51"
135
+ "@next/swc-darwin-arm64": "15.4.2-canary.53",
136
+ "@next/swc-darwin-x64": "15.4.2-canary.53",
137
+ "@next/swc-linux-arm64-gnu": "15.4.2-canary.53",
138
+ "@next/swc-linux-arm64-musl": "15.4.2-canary.53",
139
+ "@next/swc-linux-x64-gnu": "15.4.2-canary.53",
140
+ "@next/swc-linux-x64-musl": "15.4.2-canary.53",
141
+ "@next/swc-win32-arm64-msvc": "15.4.2-canary.53",
142
+ "@next/swc-win32-x64-msvc": "15.4.2-canary.53"
143
143
  },
144
144
  "devDependencies": {
145
145
  "@ampproject/toolbox-optimizer": "2.8.3",
@@ -174,11 +174,11 @@
174
174
  "@jest/types": "29.5.0",
175
175
  "@mswjs/interceptors": "0.23.0",
176
176
  "@napi-rs/triples": "1.2.0",
177
- "@next/font": "15.4.2-canary.51",
178
- "@next/polyfill-module": "15.4.2-canary.51",
179
- "@next/polyfill-nomodule": "15.4.2-canary.51",
180
- "@next/react-refresh-utils": "15.4.2-canary.51",
181
- "@next/swc": "15.4.2-canary.51",
177
+ "@next/font": "15.4.2-canary.53",
178
+ "@next/polyfill-module": "15.4.2-canary.53",
179
+ "@next/polyfill-nomodule": "15.4.2-canary.53",
180
+ "@next/react-refresh-utils": "15.4.2-canary.53",
181
+ "@next/swc": "15.4.2-canary.53",
182
182
  "@opentelemetry/api": "1.6.0",
183
183
  "@playwright/test": "1.51.1",
184
184
  "@rspack/core": "1.4.5",