Skip to content

Commit caa0f67

Browse files
committed
Fix dev overlay code frame for Turbopack
1 parent f9acd0b commit caa0f67

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

packages/next/src/client/components/react-dev-overlay/server/middleware-turbopack.ts

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,11 @@ export function getOverlayMiddleware(project: Project) {
8686
): Promise<void> {
8787
const { pathname, searchParams } = new URL(req.url!, 'http://n')
8888

89-
const frame = {
90-
file: searchParams.get('file') as string,
91-
methodName: searchParams.get('methodName') ?? '<unknown>',
92-
line: parseInt(searchParams.get('lineNumber') ?? '0', 10) || 0,
93-
column: parseInt(searchParams.get('column') ?? '0', 10) || 0,
94-
isServer: searchParams.get('isServer') === 'true',
95-
} satisfies TurbopackStackFrame
96-
9789
if (pathname === '/__nextjs_original-stack-frame') {
90+
const frame = createStackFrame(searchParams)
91+
92+
if (!frame) return badRequest(res)
93+
9894
let originalStackFrame: OriginalStackFrameResponse | null
9995
try {
10096
originalStackFrame = await createOriginalStackFrame(project, frame)
@@ -110,7 +106,9 @@ export function getOverlayMiddleware(project: Project) {
110106

111107
return json(res, originalStackFrame)
112108
} else if (pathname === '/__nextjs_launch-editor') {
113-
if (!frame.file) return badRequest(res)
109+
const frame = createStackFrame(searchParams)
110+
111+
if (!frame) return badRequest(res)
114112

115113
const fileExists = await fs.access(frame.file, FS.F_OK).then(
116114
() => true,
@@ -169,3 +167,24 @@ export function getSourceMapMiddleware(project: Project) {
169167
noContent(res)
170168
}
171169
}
170+
171+
function createStackFrame(searchParams: URLSearchParams) {
172+
const fileParam = searchParams.get('file')
173+
174+
if (!fileParam) {
175+
return undefined
176+
}
177+
178+
// rsc://React/Server/file://<filename>?42 => file://<filename>
179+
const file = fileParam
180+
.replace(/^rsc:\/\/React\/\w+\//, '')
181+
.replace(/\?\d+$/, '')
182+
183+
return {
184+
file,
185+
methodName: searchParams.get('methodName') ?? '<unknown>',
186+
line: parseInt(searchParams.get('lineNumber') ?? '0', 10) || 0,
187+
column: parseInt(searchParams.get('column') ?? '0', 10) || 0,
188+
isServer: searchParams.get('isServer') === 'true',
189+
} satisfies TurbopackStackFrame
190+
}

0 commit comments

Comments
 (0)