Skip to content

Commit 71cb06d

Browse files
authored
[dev-overlay] Discriminate stack frame settled typed (#76517)
1 parent a606ff7 commit 71cb06d

File tree

3 files changed

+32
-17
lines changed

3 files changed

+32
-17
lines changed

packages/next/src/client/components/react-dev-overlay/ui/components/call-stack-frame/call-stack-frame.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const frame = {
3232
lineNumber: 10,
3333
column: 5,
3434
},
35-
error: false,
35+
error: false as const,
3636
reason: null,
3737
external: false,
3838
ignored: false,

packages/next/src/client/components/react-dev-overlay/ui/components/errors/call-stack/call-stack.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const frame = {
3333
column: 5,
3434
},
3535
originalCodeFrame: 'export default function MyComponent() {',
36-
error: false,
36+
error: false as const,
3737
reason: null,
3838
external: false,
3939
ignored: false,

packages/next/src/client/components/react-dev-overlay/utils/stack-frame.ts

+30-15
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,34 @@ import {
88
isWebpackInternalResource,
99
formatFrameSourceFile,
1010
} from './webpack-module-path'
11-
export interface OriginalStackFrame extends OriginalStackFrameResponse {
12-
error: boolean
13-
reason: string | null
11+
12+
export interface ResolvedOriginalStackFrame extends OriginalStackFrameResponse {
13+
error: false
14+
reason: null
1415
external: boolean
1516
ignored: boolean
1617
sourceStackFrame: StackFrame
1718
}
1819

20+
export interface RejectedOriginalStackFrame extends OriginalStackFrameResponse {
21+
error: true
22+
reason: string
23+
external: boolean
24+
ignored: boolean
25+
sourceStackFrame: StackFrame
26+
}
27+
28+
export type OriginalStackFrame =
29+
| ResolvedOriginalStackFrame
30+
| RejectedOriginalStackFrame
31+
1932
function getOriginalStackFrame(
2033
source: StackFrame,
2134
response: OriginalStackFrameResponseResult
2235
): Promise<OriginalStackFrame> {
23-
async function _getOriginalStackFrame(): Promise<OriginalStackFrame> {
36+
async function _getOriginalStackFrame(): Promise<ResolvedOriginalStackFrame> {
2437
if (response.status === 'rejected') {
25-
return Promise.reject(new Error(response.reason))
38+
throw new Error(response.reason)
2639
}
2740

2841
const body: OriginalStackFrameResponse = response.value
@@ -53,16 +66,18 @@ function getOriginalStackFrame(
5366
})
5467
}
5568

56-
return _getOriginalStackFrame().catch((err: Error) => ({
57-
error: true,
58-
reason: err?.message ?? err?.toString() ?? 'Unknown Error',
59-
external: false,
60-
sourceStackFrame: source,
61-
originalStackFrame: null,
62-
originalCodeFrame: null,
63-
sourcePackage: null,
64-
ignored: false,
65-
}))
69+
return _getOriginalStackFrame().catch(
70+
(err: Error): RejectedOriginalStackFrame => ({
71+
error: true,
72+
reason: err?.message ?? err?.toString() ?? 'Unknown Error',
73+
external: false,
74+
sourceStackFrame: source,
75+
originalStackFrame: null,
76+
originalCodeFrame: null,
77+
sourcePackage: null,
78+
ignored: false,
79+
})
80+
)
6681
}
6782

6883
export async function getOriginalStackFrames(

0 commit comments

Comments
 (0)