@openuiai/next 15.6.0-bun.28 → 15.6.0-bun.30
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.
- package/dist/bin/next +1 -1
- package/dist/build/index.js +3 -3
- package/dist/build/swc/index.js +1 -1
- package/dist/build/webpack-config.js +2 -2
- package/dist/client/app-bootstrap.js +1 -1
- package/dist/client/index.js +1 -1
- package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/pages-api.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages-api.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages-api.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages-api.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/pages.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages.runtime.prod.js.map +1 -1
- package/dist/esm/build/index.js +3 -3
- package/dist/esm/build/swc/index.js +1 -1
- package/dist/esm/build/webpack-config.js +2 -2
- package/dist/esm/client/app-bootstrap.js +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/esm/server/lib/app-info-log.js +1 -1
- package/dist/esm/server/lib/router-utils/typegen.js +20 -14
- package/dist/esm/server/lib/router-utils/typegen.js.map +1 -1
- package/dist/esm/server/lib/start-server.js +1 -1
- package/dist/esm/shared/lib/canary-only.js +1 -1
- package/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/server/lib/app-info-log.js +1 -1
- package/dist/server/lib/router-utils/typegen.js +25 -14
- package/dist/server/lib/router-utils/typegen.js.map +1 -1
- package/dist/server/lib/start-server.js +1 -1
- package/dist/shared/lib/canary-only.js +1 -1
- package/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/telemetry/events/session-stopped.js +2 -2
- package/dist/telemetry/events/version.js +2 -2
- package/package.json +1 -1
package/dist/esm/build/index.js
CHANGED
|
@@ -301,7 +301,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
|
|
|
301
301
|
const nextBuildSpan = trace('next-build', undefined, {
|
|
302
302
|
buildMode: experimentalBuildMode,
|
|
303
303
|
isTurboBuild: String(isTurbopack),
|
|
304
|
-
version: "15.6.0-bun.
|
|
304
|
+
version: "15.6.0-bun.30"
|
|
305
305
|
});
|
|
306
306
|
NextBuildContext.nextBuildSpan = nextBuildSpan;
|
|
307
307
|
NextBuildContext.dir = dir;
|
|
@@ -780,7 +780,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
|
|
|
780
780
|
// Files outside of the distDir can be "type": "module"
|
|
781
781
|
await writeFileUtf8(path.join(distDir, 'package.json'), '{"type": "commonjs"}');
|
|
782
782
|
// These are written to distDir, so they need to come after creating and cleaning distDr.
|
|
783
|
-
await recordFrameworkVersion("15.6.0-bun.
|
|
783
|
+
await recordFrameworkVersion("15.6.0-bun.30");
|
|
784
784
|
await updateBuildDiagnostics({
|
|
785
785
|
buildStage: 'start'
|
|
786
786
|
});
|
|
@@ -2425,7 +2425,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
|
|
|
2425
2425
|
distDir,
|
|
2426
2426
|
config,
|
|
2427
2427
|
staticPages,
|
|
2428
|
-
nextVersion: "15.6.0-bun.
|
|
2428
|
+
nextVersion: "15.6.0-bun.30",
|
|
2429
2429
|
tracingRoot: outputFileTracingRoot,
|
|
2430
2430
|
hasNodeMiddleware,
|
|
2431
2431
|
hasInstrumentationHook,
|
|
@@ -11,7 +11,7 @@ import { isDeepStrictEqual } from 'util';
|
|
|
11
11
|
import { getDefineEnv } from '../define-env';
|
|
12
12
|
import { getReactCompilerLoader } from '../get-babel-loader-config';
|
|
13
13
|
import { throwTurbopackInternalError } from '../../shared/lib/turbopack/internal-error';
|
|
14
|
-
const nextVersion = "15.6.0-bun.
|
|
14
|
+
const nextVersion = "15.6.0-bun.30";
|
|
15
15
|
const ArchName = arch();
|
|
16
16
|
const PlatformName = platform();
|
|
17
17
|
function infoLog(...args) {
|
|
@@ -1575,7 +1575,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
|
|
|
1575
1575
|
isClient && new CopyFilePlugin({
|
|
1576
1576
|
// file path to build output of `@next/polyfill-nomodule`
|
|
1577
1577
|
filePath: require.resolve('./polyfills/polyfill-nomodule'),
|
|
1578
|
-
cacheKey: "15.6.0-bun.
|
|
1578
|
+
cacheKey: "15.6.0-bun.30",
|
|
1579
1579
|
name: `static/chunks/polyfills${dev ? '' : '-[hash]'}.js`,
|
|
1580
1580
|
minimize: false,
|
|
1581
1581
|
info: {
|
|
@@ -1756,7 +1756,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
|
|
|
1756
1756
|
// - Next.js location on disk (some loaders use absolute paths and some resolve options depend on absolute paths)
|
|
1757
1757
|
// - Next.js version
|
|
1758
1758
|
// - next.config.js keys that affect compilation
|
|
1759
|
-
version: `${__dirname}|${"15.6.0-bun.
|
|
1759
|
+
version: `${__dirname}|${"15.6.0-bun.30"}|${configVars}`,
|
|
1760
1760
|
cacheDirectory: path.join(distDir, 'cache', 'webpack'),
|
|
1761
1761
|
// For production builds, it's more efficient to compress all cache files together instead of compression each one individually.
|
|
1762
1762
|
// So we disable compression here and allow the build runner to take care of compressing the cache as a whole.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - next/script with `beforeInteractive` strategy
|
|
6
6
|
*/ import { getAssetPrefix } from './asset-prefix';
|
|
7
7
|
import { setAttributesFromProps } from './set-attributes-from-props';
|
|
8
|
-
const version = "15.6.0-bun.
|
|
8
|
+
const version = "15.6.0-bun.30";
|
|
9
9
|
window.next = {
|
|
10
10
|
version,
|
|
11
11
|
appDir: true
|
package/dist/esm/client/index.js
CHANGED
|
@@ -26,7 +26,7 @@ import { SearchParamsContext, PathParamsContext } from '../shared/lib/hooks-clie
|
|
|
26
26
|
import { onRecoverableError } from './react-client-callbacks/on-recoverable-error';
|
|
27
27
|
import tracer from './tracing/tracer';
|
|
28
28
|
import { isNextRouterError } from './components/is-next-router-error';
|
|
29
|
-
export const version = "15.6.0-bun.
|
|
29
|
+
export const version = "15.6.0-bun.30";
|
|
30
30
|
export let router;
|
|
31
31
|
export const emitter = mitt();
|
|
32
32
|
const looseToArray = (input)=>[].slice.call(input);
|
|
@@ -158,7 +158,7 @@ export default class HotReloaderWebpack {
|
|
|
158
158
|
this.previewProps = previewProps;
|
|
159
159
|
this.rewrites = rewrites;
|
|
160
160
|
this.hotReloaderSpan = trace('hot-reloader', undefined, {
|
|
161
|
-
version: "15.6.0-bun.
|
|
161
|
+
version: "15.6.0-bun.30"
|
|
162
162
|
});
|
|
163
163
|
// Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
|
|
164
164
|
// of the current `next dev` invocation.
|
|
@@ -14,7 +14,7 @@ export function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures
|
|
|
14
14
|
bundlerSuffix = ' (webpack)';
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.6.0-bun.
|
|
17
|
+
Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.6.0-bun.30"}`))}${bundlerSuffix}`);
|
|
18
18
|
if (appUrl) {
|
|
19
19
|
Log.bootstrap(`- Local: ${appUrl}`);
|
|
20
20
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { isDynamicRoute } from '../../../shared/lib/router/utils/is-dynamic';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
// Read package name dynamically to support forked packages
|
|
5
|
+
// Use dynamic path resolution to avoid bundler issues
|
|
6
|
+
const packageJsonPath = path.join(__dirname, '../../../../../package.json');
|
|
7
|
+
const PKG_NAME = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')).name;
|
|
2
8
|
function generateRouteTypes(routesManifest) {
|
|
3
9
|
const appRoutes = Object.keys(routesManifest.appRoutes).sort();
|
|
4
10
|
const pageRoutes = Object.keys(routesManifest.pageRoutes).sort();
|
|
@@ -224,18 +230,18 @@ declare namespace __next_route_internal_types__ {
|
|
|
224
230
|
`}
|
|
225
231
|
}
|
|
226
232
|
|
|
227
|
-
declare module '
|
|
228
|
-
export { default } from '
|
|
229
|
-
export * from '
|
|
233
|
+
declare module '${PKG_NAME}' {
|
|
234
|
+
export { default } from '${PKG_NAME}/types.js'
|
|
235
|
+
export * from '${PKG_NAME}/types.js'
|
|
230
236
|
|
|
231
237
|
export type Route<T extends string = string> =
|
|
232
238
|
__next_route_internal_types__.RouteImpl<T>
|
|
233
239
|
}
|
|
234
240
|
|
|
235
|
-
declare module '
|
|
236
|
-
export { useLinkStatus } from '
|
|
241
|
+
declare module '${PKG_NAME}/link' {
|
|
242
|
+
export { useLinkStatus } from '${PKG_NAME}/dist/client/link.js'
|
|
237
243
|
|
|
238
|
-
import type { LinkProps as OriginalLinkProps } from '
|
|
244
|
+
import type { LinkProps as OriginalLinkProps } from '${PKG_NAME}/dist/client/link.js'
|
|
239
245
|
import type { AnchorHTMLAttributes, DetailedHTMLProps } from 'react'
|
|
240
246
|
import type { UrlObject } from 'url'
|
|
241
247
|
|
|
@@ -262,11 +268,11 @@ declare module 'next/link' {
|
|
|
262
268
|
export default function Link<RouteType>(props: LinkProps<RouteType>): JSX.Element
|
|
263
269
|
}
|
|
264
270
|
|
|
265
|
-
declare module '
|
|
266
|
-
export * from '
|
|
271
|
+
declare module '${PKG_NAME}/navigation' {
|
|
272
|
+
export * from '${PKG_NAME}/dist/client/components/navigation.js'
|
|
267
273
|
|
|
268
|
-
import type { NavigateOptions, AppRouterInstance as OriginalAppRouterInstance } from '
|
|
269
|
-
import type { RedirectType } from '
|
|
274
|
+
import type { NavigateOptions, AppRouterInstance as OriginalAppRouterInstance } from '${PKG_NAME}/dist/shared/lib/app-router-context.shared-runtime.js'
|
|
275
|
+
import type { RedirectType } from '${PKG_NAME}/dist/client/components/redirect-error.js'
|
|
270
276
|
|
|
271
277
|
interface AppRouterInstance extends OriginalAppRouterInstance {
|
|
272
278
|
/**
|
|
@@ -323,8 +329,8 @@ declare module 'next/navigation' {
|
|
|
323
329
|
): never;
|
|
324
330
|
}
|
|
325
331
|
|
|
326
|
-
declare module '
|
|
327
|
-
import type { FormProps as OriginalFormProps } from '
|
|
332
|
+
declare module '${PKG_NAME}/form' {
|
|
333
|
+
import type { FormProps as OriginalFormProps } from '${PKG_NAME}/dist/client/form.js'
|
|
328
334
|
|
|
329
335
|
type FormRestProps = Omit<OriginalFormProps, 'action'>
|
|
330
336
|
|
|
@@ -476,7 +482,7 @@ export function generateValidatorFile(routesManifest) {
|
|
|
476
482
|
routeImports.push('AppRouteHandlerRoutes');
|
|
477
483
|
}
|
|
478
484
|
const routeImportStatement = routeImports.length > 0 ? `import type { ${routeImports.join(', ')} } from "./routes.js"` : '';
|
|
479
|
-
const nextRequestImport = hasAppRouteHandlers ?
|
|
485
|
+
const nextRequestImport = hasAppRouteHandlers ? `import type { NextRequest } from '${PKG_NAME}/server.js'\n` : '';
|
|
480
486
|
// Conditionally import types from next/types, merged into a single statement
|
|
481
487
|
const nextTypes = [];
|
|
482
488
|
if (pagesApiRouteValidations) {
|
|
@@ -485,7 +491,7 @@ export function generateValidatorFile(routesManifest) {
|
|
|
485
491
|
if (appPageValidations || layoutValidations) {
|
|
486
492
|
nextTypes.push('ResolvingMetadata', 'ResolvingViewport');
|
|
487
493
|
}
|
|
488
|
-
const nextTypesImport = nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "
|
|
494
|
+
const nextTypesImport = nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "${PKG_NAME}/types.js"\n` : '';
|
|
489
495
|
return `// This file is generated automatically by Next.js
|
|
490
496
|
// Do not edit this file manually
|
|
491
497
|
// This file validates that all pages and layouts export the correct types
|
|
@@ -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 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 // Build a unified set of routes across app/pages/redirect/rewrite as well as\n // app route handlers and Pages Router API routes.\n const allRoutesSet = new Set<string>([\n ...Object.keys(routesManifest.appRoutes),\n ...Object.keys(routesManifest.pageRoutes),\n ...Object.keys(routesManifest.redirectRoutes),\n ...Object.keys(routesManifest.rewriteRoutes),\n // Allow linking to App Route Handlers (e.g. `/logout/route.ts`)\n ...Object.keys(routesManifest.appRouteHandlerRoutes),\n // Allow linking to Pages Router API routes (e.g. `/api/*`)\n ...Array.from(routesManifest.pageApiRoutes),\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 allRoutesSet) {\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 export { useLinkStatus } from 'next/dist/client/link.js'\n\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 import type { RedirectType } from 'next/dist/client/components/redirect-error.js'\n \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 /**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 307/303 to the caller.\n * - In a Server Action, type defaults to 'push' and 'replace' elsewhere.\n *\n * Read more: [Next.js Docs: redirect](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\n export function redirect<RouteType>(\n /** The URL to redirect to */\n url: __next_route_internal_types__.RouteImpl<RouteType>,\n type?: RedirectType\n ): never;\n \n /**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 308/303 to the caller.\n *\n * Read more: [Next.js Docs: redirect](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\n export function permanentRedirect<RouteType>(\n /** The URL to redirect to */\n url: __next_route_internal_types__.RouteImpl<RouteType>,\n type?: RedirectType\n ): never;\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\n // NOTE: we previously used `satisfies` here, but it's not supported by TypeScript 4.8 and below.\n // If we ever raise the TS minimum version, we can switch back.\n\n return `// Validate ${filePath}\n{\n type __IsExpected<Specific extends ${typeWithRoute}> = Specific\n const handler = {} as typeof import(${JSON.stringify(\n importPath.replace(/\\.tsx?$/, '.js')\n )})\n type __Check = __IsExpected<typeof handler>\n // @ts-ignore\n type __Unused = __Check\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' | string // necessary for JS\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 | void> | Response | void\n POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n PATCH?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n DELETE?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n HEAD?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n}\n\n`\n }\n\n if (pagesApiRouteValidations) {\n typeDefinitions += `type ApiRouteConfig = {\n default: (req: any, res: any) => ReturnType<NextApiHandler>\n config?: {\n api?: {\n bodyParser?: boolean | { sizeLimit?: string }\n responseLimit?: string | number | boolean\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 = []\n\n // Only import AppRoutes if there are app pages\n if (appPageValidations) {\n routeImports.push('AppRoutes')\n }\n\n // Only import LayoutRoutes if there are layouts\n if (layoutValidations) {\n routeImports.push('LayoutRoutes')\n }\n\n // Only import ParamMap if there are routes that use it\n if (appPageValidations || layoutValidations || appRouteHandlerValidations) {\n routeImports.push('ParamMap')\n }\n\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 // Conditionally import types from next/types, merged into a single statement\n const nextTypes: string[] = []\n if (pagesApiRouteValidations) {\n nextTypes.push('NextApiHandler')\n }\n if (appPageValidations || layoutValidations) {\n nextTypes.push('ResolvingMetadata', 'ResolvingViewport')\n }\n const nextTypesImport =\n nextTypes.length > 0\n ? `import type { ${nextTypes.join(', ')} } from \"next/types.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}\n${nextTypesImport}${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":["isDynamicRoute","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","paramType","key","group","escapedKey","repeat","optional","generateLayoutSlotMap","slotMap","sortedLayoutRoutes","slots","slot","formatRouteToRouteType","isDynamic","split","part","startsWith","endsWith","routeType","serializeRouteTypes","routeTypes","generateLinkTypesFile","allRoutesSet","Set","Array","from","pageApiRoutes","staticRouteTypes","dynamicRouteTypes","serializedStaticRouteTypes","serializedDynamicRouteTypes","routeTypesFallback","generateValidatorFile","generateValidations","paths","type","pathToRouteMap","filter","filePath","importPath","get","typeWithRoute","replace","appPageValidations","appPagePaths","filePathToRoute","appRouteHandlerValidations","appRouteHandlers","pagesRouterPageValidations","pagesRouterPagePaths","pagesApiRouteValidations","layoutValidations","layoutPaths","typeDefinitions","routeImports","routeImportStatement","nextRequestImport","nextTypes","nextTypesImport","generateRouteTypesFile","layoutSlotMap","routeExports","exportStatement","routeContextInterface"],"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'\nimport path from 'path'\nimport fs from 'fs'\n\n// Read package name dynamically to support forked packages\n// Use dynamic path resolution to avoid bundler issues\nconst packageJsonPath = path.join(__dirname, '../../../../../package.json')\nconst PKG_NAME = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')).name\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 // Build a unified set of routes across app/pages/redirect/rewrite as well as\n // app route handlers and Pages Router API routes.\n const allRoutesSet = new Set<string>([\n ...Object.keys(routesManifest.appRoutes),\n ...Object.keys(routesManifest.pageRoutes),\n ...Object.keys(routesManifest.redirectRoutes),\n ...Object.keys(routesManifest.rewriteRoutes),\n // Allow linking to App Route Handlers (e.g. `/logout/route.ts`)\n ...Object.keys(routesManifest.appRouteHandlerRoutes),\n // Allow linking to Pages Router API routes (e.g. `/api/*`)\n ...Array.from(routesManifest.pageApiRoutes),\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 allRoutesSet) {\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 '${PKG_NAME}' {\n export { default } from '${PKG_NAME}/types.js'\n export * from '${PKG_NAME}/types.js'\n\n export type Route<T extends string = string> =\n __next_route_internal_types__.RouteImpl<T>\n}\n\ndeclare module '${PKG_NAME}/link' {\n export { useLinkStatus } from '${PKG_NAME}/dist/client/link.js'\n\n import type { LinkProps as OriginalLinkProps } from '${PKG_NAME}/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 '${PKG_NAME}/navigation' {\n export * from '${PKG_NAME}/dist/client/components/navigation.js'\n\n import type { NavigateOptions, AppRouterInstance as OriginalAppRouterInstance } from '${PKG_NAME}/dist/shared/lib/app-router-context.shared-runtime.js'\n import type { RedirectType } from '${PKG_NAME}/dist/client/components/redirect-error.js'\n \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 /**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 307/303 to the caller.\n * - In a Server Action, type defaults to 'push' and 'replace' elsewhere.\n *\n * Read more: [Next.js Docs: redirect](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\n export function redirect<RouteType>(\n /** The URL to redirect to */\n url: __next_route_internal_types__.RouteImpl<RouteType>,\n type?: RedirectType\n ): never;\n \n /**\n * This function allows you to redirect the user to another URL. It can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a meta tag to redirect the user to the target page.\n * - In a Route Handler or Server Action, it will serve a 308/303 to the caller.\n *\n * Read more: [Next.js Docs: redirect](https://nextjs.org/docs/app/api-reference/functions/redirect)\n */\n export function permanentRedirect<RouteType>(\n /** The URL to redirect to */\n url: __next_route_internal_types__.RouteImpl<RouteType>,\n type?: RedirectType\n ): never;\n}\n\ndeclare module '${PKG_NAME}/form' {\n import type { FormProps as OriginalFormProps } from '${PKG_NAME}/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\n // NOTE: we previously used `satisfies` here, but it's not supported by TypeScript 4.8 and below.\n // If we ever raise the TS minimum version, we can switch back.\n\n return `// Validate ${filePath}\n{\n type __IsExpected<Specific extends ${typeWithRoute}> = Specific\n const handler = {} as typeof import(${JSON.stringify(\n importPath.replace(/\\.tsx?$/, '.js')\n )})\n type __Check = __IsExpected<typeof handler>\n // @ts-ignore\n type __Unused = __Check\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' | string // necessary for JS\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 | void> | Response | void\n POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n PATCH?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n DELETE?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n HEAD?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void\n}\n\n`\n }\n\n if (pagesApiRouteValidations) {\n typeDefinitions += `type ApiRouteConfig = {\n default: (req: any, res: any) => ReturnType<NextApiHandler>\n config?: {\n api?: {\n bodyParser?: boolean | { sizeLimit?: string }\n responseLimit?: string | number | boolean\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 = []\n\n // Only import AppRoutes if there are app pages\n if (appPageValidations) {\n routeImports.push('AppRoutes')\n }\n\n // Only import LayoutRoutes if there are layouts\n if (layoutValidations) {\n routeImports.push('LayoutRoutes')\n }\n\n // Only import ParamMap if there are routes that use it\n if (appPageValidations || layoutValidations || appRouteHandlerValidations) {\n routeImports.push('ParamMap')\n }\n\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 '${PKG_NAME}/server.js'\\n`\n : ''\n\n // Conditionally import types from next/types, merged into a single statement\n const nextTypes: string[] = []\n if (pagesApiRouteValidations) {\n nextTypes.push('NextApiHandler')\n }\n if (appPageValidations || layoutValidations) {\n nextTypes.push('ResolvingMetadata', 'ResolvingViewport')\n }\n const nextTypesImport =\n nextTypes.length > 0\n ? `import type { ${nextTypes.join(', ')} } from \"${PKG_NAME}/types.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}\n${nextTypesImport}${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":["isDynamicRoute","path","fs","packageJsonPath","join","__dirname","PKG_NAME","JSON","parse","readFileSync","name","generateRouteTypes","routesManifest","appRoutes","Object","keys","sort","pageRoutes","layoutRoutes","redirectRoutes","rewriteRoutes","result","length","map","route","stringify","appRouteHandlerRoutes","hasAppRouteHandlers","routeUnionParts","push","generateParamTypes","allRoutes","paramTypes","sortedRoutes","entries","a","b","localeCompare","routeInfo","groups","paramType","key","group","escapedKey","repeat","optional","generateLayoutSlotMap","slotMap","sortedLayoutRoutes","slots","slot","formatRouteToRouteType","isDynamic","split","part","startsWith","endsWith","routeType","serializeRouteTypes","routeTypes","generateLinkTypesFile","allRoutesSet","Set","Array","from","pageApiRoutes","staticRouteTypes","dynamicRouteTypes","serializedStaticRouteTypes","serializedDynamicRouteTypes","routeTypesFallback","generateValidatorFile","generateValidations","paths","type","pathToRouteMap","filter","filePath","importPath","get","typeWithRoute","replace","appPageValidations","appPagePaths","filePathToRoute","appRouteHandlerValidations","appRouteHandlers","pagesRouterPageValidations","pagesRouterPagePaths","pagesApiRouteValidations","layoutValidations","layoutPaths","typeDefinitions","routeImports","routeImportStatement","nextRequestImport","nextTypes","nextTypesImport","generateRouteTypesFile","layoutSlotMap","routeExports","exportStatement","routeContextInterface"],"mappings":"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","ignoreList":[0]}
|
|
@@ -87,7 +87,7 @@ export async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup,
|
|
|
87
87
|
export async function startServer(serverOptions) {
|
|
88
88
|
const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
|
|
89
89
|
let { port } = serverOptions;
|
|
90
|
-
process.title = `next-server (v${"15.6.0-bun.
|
|
90
|
+
process.title = `next-server (v${"15.6.0-bun.30"})`;
|
|
91
91
|
let handlersReady = ()=>{};
|
|
92
92
|
let handlersError = ()=>{};
|
|
93
93
|
let handlersPromise = new Promise((resolve, reject)=>{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export function isStableBuild() {
|
|
2
2
|
var _process_env___NEXT_VERSION;
|
|
3
|
-
return !((_process_env___NEXT_VERSION = "15.6.0-bun.
|
|
3
|
+
return !((_process_env___NEXT_VERSION = "15.6.0-bun.30") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
|
|
4
4
|
}
|
|
5
5
|
export class CanaryOnlyError extends Error {
|
|
6
6
|
constructor(arg){
|
|
@@ -226,7 +226,7 @@ class HotReloaderWebpack {
|
|
|
226
226
|
this.previewProps = previewProps;
|
|
227
227
|
this.rewrites = rewrites;
|
|
228
228
|
this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
|
|
229
|
-
version: "15.6.0-bun.
|
|
229
|
+
version: "15.6.0-bun.30"
|
|
230
230
|
});
|
|
231
231
|
// Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
|
|
232
232
|
// of the current `next dev` invocation.
|
|
@@ -82,7 +82,7 @@ function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures, logBu
|
|
|
82
82
|
bundlerSuffix = ' (webpack)';
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
-
_log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.6.0-bun.
|
|
85
|
+
_log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.6.0-bun.30"}`))}${bundlerSuffix}`);
|
|
86
86
|
if (appUrl) {
|
|
87
87
|
_log.bootstrap(`- Local: ${appUrl}`);
|
|
88
88
|
}
|
|
@@ -25,6 +25,17 @@ _export(exports, {
|
|
|
25
25
|
}
|
|
26
26
|
});
|
|
27
27
|
const _isdynamic = require("../../../shared/lib/router/utils/is-dynamic");
|
|
28
|
+
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
29
|
+
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
30
|
+
function _interop_require_default(obj) {
|
|
31
|
+
return obj && obj.__esModule ? obj : {
|
|
32
|
+
default: obj
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Read package name dynamically to support forked packages
|
|
36
|
+
// Use dynamic path resolution to avoid bundler issues
|
|
37
|
+
const packageJsonPath = _path.default.join(__dirname, '../../../../../package.json');
|
|
38
|
+
const PKG_NAME = JSON.parse(_fs.default.readFileSync(packageJsonPath, 'utf8')).name;
|
|
28
39
|
function generateRouteTypes(routesManifest) {
|
|
29
40
|
const appRoutes = Object.keys(routesManifest.appRoutes).sort();
|
|
30
41
|
const pageRoutes = Object.keys(routesManifest.pageRoutes).sort();
|
|
@@ -250,18 +261,18 @@ declare namespace __next_route_internal_types__ {
|
|
|
250
261
|
`}
|
|
251
262
|
}
|
|
252
263
|
|
|
253
|
-
declare module '
|
|
254
|
-
export { default } from '
|
|
255
|
-
export * from '
|
|
264
|
+
declare module '${PKG_NAME}' {
|
|
265
|
+
export { default } from '${PKG_NAME}/types.js'
|
|
266
|
+
export * from '${PKG_NAME}/types.js'
|
|
256
267
|
|
|
257
268
|
export type Route<T extends string = string> =
|
|
258
269
|
__next_route_internal_types__.RouteImpl<T>
|
|
259
270
|
}
|
|
260
271
|
|
|
261
|
-
declare module '
|
|
262
|
-
export { useLinkStatus } from '
|
|
272
|
+
declare module '${PKG_NAME}/link' {
|
|
273
|
+
export { useLinkStatus } from '${PKG_NAME}/dist/client/link.js'
|
|
263
274
|
|
|
264
|
-
import type { LinkProps as OriginalLinkProps } from '
|
|
275
|
+
import type { LinkProps as OriginalLinkProps } from '${PKG_NAME}/dist/client/link.js'
|
|
265
276
|
import type { AnchorHTMLAttributes, DetailedHTMLProps } from 'react'
|
|
266
277
|
import type { UrlObject } from 'url'
|
|
267
278
|
|
|
@@ -288,11 +299,11 @@ declare module 'next/link' {
|
|
|
288
299
|
export default function Link<RouteType>(props: LinkProps<RouteType>): JSX.Element
|
|
289
300
|
}
|
|
290
301
|
|
|
291
|
-
declare module '
|
|
292
|
-
export * from '
|
|
302
|
+
declare module '${PKG_NAME}/navigation' {
|
|
303
|
+
export * from '${PKG_NAME}/dist/client/components/navigation.js'
|
|
293
304
|
|
|
294
|
-
import type { NavigateOptions, AppRouterInstance as OriginalAppRouterInstance } from '
|
|
295
|
-
import type { RedirectType } from '
|
|
305
|
+
import type { NavigateOptions, AppRouterInstance as OriginalAppRouterInstance } from '${PKG_NAME}/dist/shared/lib/app-router-context.shared-runtime.js'
|
|
306
|
+
import type { RedirectType } from '${PKG_NAME}/dist/client/components/redirect-error.js'
|
|
296
307
|
|
|
297
308
|
interface AppRouterInstance extends OriginalAppRouterInstance {
|
|
298
309
|
/**
|
|
@@ -349,8 +360,8 @@ declare module 'next/navigation' {
|
|
|
349
360
|
): never;
|
|
350
361
|
}
|
|
351
362
|
|
|
352
|
-
declare module '
|
|
353
|
-
import type { FormProps as OriginalFormProps } from '
|
|
363
|
+
declare module '${PKG_NAME}/form' {
|
|
364
|
+
import type { FormProps as OriginalFormProps } from '${PKG_NAME}/dist/client/form.js'
|
|
354
365
|
|
|
355
366
|
type FormRestProps = Omit<OriginalFormProps, 'action'>
|
|
356
367
|
|
|
@@ -502,7 +513,7 @@ function generateValidatorFile(routesManifest) {
|
|
|
502
513
|
routeImports.push('AppRouteHandlerRoutes');
|
|
503
514
|
}
|
|
504
515
|
const routeImportStatement = routeImports.length > 0 ? `import type { ${routeImports.join(', ')} } from "./routes.js"` : '';
|
|
505
|
-
const nextRequestImport = hasAppRouteHandlers ?
|
|
516
|
+
const nextRequestImport = hasAppRouteHandlers ? `import type { NextRequest } from '${PKG_NAME}/server.js'\n` : '';
|
|
506
517
|
// Conditionally import types from next/types, merged into a single statement
|
|
507
518
|
const nextTypes = [];
|
|
508
519
|
if (pagesApiRouteValidations) {
|
|
@@ -511,7 +522,7 @@ function generateValidatorFile(routesManifest) {
|
|
|
511
522
|
if (appPageValidations || layoutValidations) {
|
|
512
523
|
nextTypes.push('ResolvingMetadata', 'ResolvingViewport');
|
|
513
524
|
}
|
|
514
|
-
const nextTypesImport = nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "
|
|
525
|
+
const nextTypesImport = nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "${PKG_NAME}/types.js"\n` : '';
|
|
515
526
|
return `// This file is generated automatically by Next.js
|
|
516
527
|
// Do not edit this file manually
|
|
517
528
|
// This file validates that all pages and layouts export the correct types
|