Skip to content

Commit

Permalink
reuse type and validate all the values
Browse files Browse the repository at this point in the history
  • Loading branch information
huozhi committed Jul 12, 2024
1 parent 0620f62 commit c9a07d4
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
16 changes: 10 additions & 6 deletions packages/next/src/server/app-render/app-render.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,11 @@ import { addImplicitTags } from '../lib/patch-fetch'
import { AppRenderSpan, NextNodeServerSpan } from '../lib/trace/constants'
import { getTracer } from '../lib/trace/tracer'
import { FlightRenderResult } from './flight-render-result'
import { createErrorHandler, type ErrorHandler } from './create-error-handler'
import {
createErrorHandler,
type DigestedError,
type ErrorHandler,
} from './create-error-handler'
import {
getShortDynamicParamType,
dynamicParamTypes,
Expand Down Expand Up @@ -723,7 +727,7 @@ async function renderToHTMLOrFlightImpl(
serverModuleMap,
})

const digestErrorsMap: Map<string, Error & { digest: string }> = new Map()
const digestErrorsMap: Map<string, DigestedError> = new Map()
const allCapturedErrors: Error[] = []
const isNextExport = !!renderOpts.nextExport
const { staticGenerationStore, requestStore } = baseCtx
Expand Down Expand Up @@ -759,15 +763,15 @@ async function renderToHTMLOrFlightImpl(
} as const

// Including RSC rendering and flight data rendering
function getRSCError(err: Error & { digest: string }) {
function getRSCError(err: DigestedError) {
const digest = err.digest
if (!digestErrorsMap.has(digest)) {
digestErrorsMap.set(digest, err)
}
return err
}

function getSSRError(err: Error & { digest: string }) {
function getSSRError(err: DigestedError) {
// For SSR errors, if we have the existing digest in errors map,
// we should use the existing error object to avoid duplicate error logs.
if (digestErrorsMap.has(err.digest)) {
Expand All @@ -776,14 +780,14 @@ async function renderToHTMLOrFlightImpl(
return err
}

function onFlightDataRenderError(err: Error & { digest: string }) {
function onFlightDataRenderError(err: DigestedError) {
return onInstrumentationRequestError?.(err, req, {
...errorContext,
renderSource: 'react-server-components-payload',
})
}

function onServerRenderError(err: Error & { digest: string }) {
function onServerRenderError(err: DigestedError) {
const renderSource = digestErrorsMap.has(err.digest)
? 'react-server-components'
: 'server-rendering'
Expand Down
4 changes: 3 additions & 1 deletion packages/next/src/server/app-render/create-error-handler.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ export type ErrorHandler = (
errorInfo: unknown
) => string | undefined

export type DigestedError = Error & { digest: string }

/**
* Create error handler for renderers.
* Tolerate dynamic server errors during prerendering so console
Expand All @@ -31,7 +33,7 @@ export function createErrorHandler({
dev?: boolean
isNextExport?: boolean
onReactStreamRenderError?: (err: any) => void
getErrorByRenderSource: (err: Error & { digest: string }) => Error
getErrorByRenderSource: (err: DigestedError) => Error
allCapturedErrors?: Error[]
silenceLogger?: boolean
}): ErrorHandler {
Expand Down
15 changes: 10 additions & 5 deletions test/e2e/on-request-error/basic/basic.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ describe('on-request-error - basic', () => {
}: {
name: string
url: string
renderSource?: string
renderSource: string | undefined
isMiddleware?: boolean
}) {
await retry(async () => {
Expand Down Expand Up @@ -62,7 +62,7 @@ describe('on-request-error - basic', () => {
}: {
payload: any
url: string
renderSource?: string
renderSource: string | undefined
isMiddleware: boolean
}) {
const { request } = payload
Expand All @@ -74,9 +74,7 @@ describe('on-request-error - basic', () => {
expect(request.url).toBe(url)
}

if (renderSource) {
expect(payload.context.renderSource).toBe(renderSource)
}
expect(payload.context.renderSource).toBe(renderSource)

expect(request.method).toBe('GET')
expect(request.headers['accept']).toBe('*/*')
Expand Down Expand Up @@ -128,6 +126,7 @@ describe('on-request-error - basic', () => {
await validateErrorRecord({
name: 'route-node-error',
url: '/app-route',
renderSource: undefined,
})
})

Expand All @@ -136,6 +135,7 @@ describe('on-request-error - basic', () => {
await validateErrorRecord({
name: 'route-edge-error',
url: '/app-route/edge',
renderSource: undefined,
})
})
})
Expand All @@ -146,6 +146,7 @@ describe('on-request-error - basic', () => {
await validateErrorRecord({
name: 'pages-page-node-error',
url: '/page',
renderSource: undefined,
})
})

Expand All @@ -154,6 +155,7 @@ describe('on-request-error - basic', () => {
await validateErrorRecord({
name: 'pages-page-edge-error',
url: '/page/edge',
renderSource: undefined,
})
})

Expand All @@ -162,6 +164,7 @@ describe('on-request-error - basic', () => {
await validateErrorRecord({
name: 'api-node-error',
url: '/api/pages-route',
renderSource: undefined,
})
})

Expand All @@ -170,6 +173,7 @@ describe('on-request-error - basic', () => {
await validateErrorRecord({
name: 'api-edge-error',
url: '/api/pages-route/edge',
renderSource: undefined,
})
})
})
Expand All @@ -181,6 +185,7 @@ describe('on-request-error - basic', () => {
name: 'middleware-error',
url: '/middleware-error',
isMiddleware: true,
renderSource: undefined,
})
})
})
Expand Down

0 comments on commit c9a07d4

Please sign in to comment.