| | import { codeFrameColumns } from 'next/dist/compiled/babel/code-frame' |
| | import isInternal from '../../shared/lib/is-internal' |
| | import type { StackFrame } from '../../server/lib/parse-stack' |
| | import { ignoreListAnonymousStackFramesIfSandwiched as ignoreListAnonymousStackFramesIfSandwichedGeneric } from '../../server/lib/source-maps' |
| |
|
| | export type { StackFrame } |
| |
|
| | export interface IgnorableStackFrame extends StackFrame { |
| | ignored: boolean |
| | } |
| |
|
| | export interface OriginalStackFramesRequest { |
| | frames: readonly StackFrame[] |
| | isServer: boolean |
| | isEdgeServer: boolean |
| | isAppDirectory: boolean |
| | } |
| |
|
| | export type OriginalStackFramesResponse = OriginalStackFrameResponseResult[] |
| |
|
| | export type OriginalStackFrameResponseResult = |
| | PromiseSettledResult<OriginalStackFrameResponse> |
| |
|
| | export interface OriginalStackFrameResponse { |
| | originalStackFrame: (StackFrame & { ignored: boolean }) | null |
| | originalCodeFrame: string | null |
| | } |
| |
|
| | export function ignoreListAnonymousStackFramesIfSandwiched( |
| | responses: OriginalStackFramesResponse |
| | ): void { |
| | ignoreListAnonymousStackFramesIfSandwichedGeneric( |
| | responses, |
| | (response) => { |
| | return ( |
| | response.status === 'fulfilled' && |
| | response.value.originalStackFrame !== null && |
| | response.value.originalStackFrame.file === '<anonymous>' |
| | ) |
| | }, |
| | (response) => { |
| | return ( |
| | response.status === 'fulfilled' && |
| | response.value.originalStackFrame !== null && |
| | response.value.originalStackFrame.ignored === true |
| | ) |
| | }, |
| | (response) => { |
| | return response.status === 'fulfilled' && |
| | response.value.originalStackFrame !== null |
| | ? response.value.originalStackFrame.methodName |
| | : '' |
| | }, |
| | (response) => { |
| | ;( |
| | response as PromiseFulfilledResult<OriginalStackFrameResponse> |
| | ).value.originalStackFrame!.ignored = true |
| | } |
| | ) |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | export function getOriginalCodeFrame( |
| | frame: IgnorableStackFrame, |
| | source: string | null, |
| | colors: boolean = process.stdout.isTTY |
| | ): string | null { |
| | if (!source || isInternal(frame.file)) { |
| | return null |
| | } |
| |
|
| | return codeFrameColumns( |
| | source, |
| | { |
| | start: { |
| | |
| | line: frame.line1 ?? -1, |
| | |
| | column: frame.column1 ?? 0, |
| | }, |
| | }, |
| | { forceColor: colors } |
| | ) |
| | } |
| |
|