Skip to content

Commit 8bfdf00

Browse files
committed
fix: relative paths in dev in validator.ts (#83073)
Fixes #83063 - **Problem**: `next dev` produced overly deep relative imports in `validator.ts` that differed from `next typegen`/`next build`. - **Cause**: Dev pre-relativized page file paths and didn’t pass `validatorFilePath`, causing incorrect relative path computation. - **Solution**: - Pass `validatorFilePath` to `createRouteTypesManifest` in dev. - Stop pre-relativizing file paths; provide absolute `fileName` so the manifest computes paths relative to the validator directory. - **Result**: `validator.ts` now uses correct, shallow relative imports, matching `next typegen` and `next build`. - **Verification**: Reproduced with `test/e2e/app-dir/typed-routes-validator`; outputs from `pnpm next dev` and `pnpm next typegen` now match. ### Example Before (next dev): ```typescript // Validate ../../../../../../app/page.tsx { const handler = {} as typeof import("../../../../../../app/page.js") handler satisfies AppPageConfig<"/"> } ``` After (next dev/typegen/build): ```typescript // Validate ../../app/page.tsx { const handler = {} as typeof import("../../app/page.js") handler satisfies AppPageConfig<"/"> } ```
1 parent 497ec6a commit 8bfdf00

File tree

1 file changed

+8
-20
lines changed

1 file changed

+8
-20
lines changed

packages/next/src/server/lib/router-utils/setup-dev-bundler.ts

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -576,10 +576,7 @@ async function startWatcher(
576576
''
577577
)
578578
),
579-
filePath: path.relative(
580-
path.dirname(validatorFilePath),
581-
fileName
582-
),
579+
filePath: fileName,
583580
})
584581
}
585582

@@ -606,18 +603,12 @@ async function startWatcher(
606603
if (validFileMatcher.isAppRouterRoute(fileName)) {
607604
appRouteHandlers.push({
608605
route: normalizePathSep(pageName),
609-
filePath: path.relative(
610-
path.dirname(validatorFilePath),
611-
fileName
612-
),
606+
filePath: fileName,
613607
})
614608
} else {
615609
appRoutes.push({
616610
route: normalizePathSep(pageName),
617-
filePath: path.relative(
618-
path.dirname(validatorFilePath),
619-
fileName
620-
),
611+
filePath: fileName,
621612
})
622613
}
623614

@@ -635,18 +626,12 @@ async function startWatcher(
635626
if (pageName.startsWith('/api/')) {
636627
pageApiRoutes.push({
637628
route: normalizePathSep(pageName),
638-
filePath: path.relative(
639-
path.dirname(validatorFilePath),
640-
fileName
641-
),
629+
filePath: fileName,
642630
})
643631
} else {
644632
pageRoutes.push({
645633
route: normalizePathSep(pageName),
646-
filePath: path.relative(
647-
path.dirname(validatorFilePath),
648-
fileName
649-
),
634+
filePath: fileName,
650635
})
651636
}
652637
}
@@ -1062,6 +1047,9 @@ async function startWatcher(
10621047
slots,
10631048
redirects: opts.nextConfig.redirects,
10641049
rewrites: opts.nextConfig.rewrites,
1050+
// Ensure relative paths in validator.ts are computed from validatorFilePath,
1051+
// matching behavior of build and CLI typegen.
1052+
validatorFilePath,
10651053
appRouteHandlers,
10661054
pageApiRoutes,
10671055
})

0 commit comments

Comments
 (0)