Skip to content

Fix sibling intercepted App Router routes #2810

Fix sibling intercepted App Router routes

Fix sibling intercepted App Router routes #2810

Triggered via pull request April 21, 2026 16:41
Status Failure
Total duration 3m 12s
Artifacts 3

ci.yml

on: pull_request
Matrix: create-next-app
Matrix: e2e
Matrix: test-integration
Vitest (integration report)
26s
Vitest (integration report)
Fit to window
Zoom out
Zoom in

Annotations

12 errors, 1 warning, and 9 notices
E2E (app-router)
Process completed with exit code 1.
[app-router] › tests/e2e/app-router/advanced.spec.ts:96:7 › Intercepting Routes › chained intercepted navigations keep the original source context: tests/e2e/app-router/advanced.spec.ts#L107
1) [app-router] › tests/e2e/app-router/advanced.spec.ts:96:7 › Intercepting Routes › chained intercepted navigations keep the original source context Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toContainText(expected) failed Locator: locator('[data-testid="photo-modal"]') Expected substring: "Viewing photo 43" Timeout: 5000ms Error: element(s) not found Call log: - Expect "toContainText" with timeout 5000ms - waiting for locator('[data-testid="photo-modal"]') 2 × locator resolved to <div data-testid="photo-modal">…</div> - unexpected value "Photo ModalViewing photo 42 in modalNext PhotoRefresh modal0Like" 105 | 106 | await expect(page.locator('[data-testid="photo-modal"]')).toBeVisible(); > 107 | await expect(page.locator('[data-testid="photo-modal"]')).toContainText("Viewing photo 43"); | ^ 108 | await expect(page.locator('[data-testid="feed-page"]')).toBeVisible(); 109 | await expect(page.locator('[data-testid="photo-page"]')).not.toBeVisible(); 110 | }); at /home/runner/work/vinext/vinext/tests/e2e/app-router/advanced.spec.ts:107:63
[app-router] › tests/e2e/app-router/advanced.spec.ts:96:7 › Intercepting Routes › chained intercepted navigations keep the original source context: tests/e2e/app-router/advanced.spec.ts#L107
1) [app-router] › tests/e2e/app-router/advanced.spec.ts:96:7 › Intercepting Routes › chained intercepted navigations keep the original source context Error: expect(locator).toContainText(expected) failed Locator: locator('[data-testid="photo-modal"]') Expected substring: "Viewing photo 43" Timeout: 5000ms Error: element(s) not found Call log: - Expect "toContainText" with timeout 5000ms - waiting for locator('[data-testid="photo-modal"]') 2 × locator resolved to <div data-testid="photo-modal">…</div> - unexpected value "Photo ModalViewing photo 42 in modalNext PhotoRefresh modal0Like" 105 | 106 | await expect(page.locator('[data-testid="photo-modal"]')).toBeVisible(); > 107 | await expect(page.locator('[data-testid="photo-modal"]')).toContainText("Viewing photo 43"); | ^ 108 | await expect(page.locator('[data-testid="feed-page"]')).toBeVisible(); 109 | await expect(page.locator('[data-testid="photo-page"]')).not.toBeVisible(); 110 | }); at /home/runner/work/vinext/vinext/tests/e2e/app-router/advanced.spec.ts:107:63
Vitest (integration 2/3)
Process completed with exit code 1.
Vitest (integration report)
Process completed with exit code 1.
[integration] tests/entry-templates.test.ts > App Router entry templates > generateRscEntry snapshot (with metadata routes): tests/entry-templates.test.ts#L233
Error: Snapshot `App Router entry templates > generateRscEntry snapshot (with metadata routes) 1` mismatched - Expected + Received @@ -715,16 +715,28 @@ /** * Check if a pathname matches any intercepting route. * Returns the match info or null. */ - function findIntercept(pathname) { + function findIntercept(pathname, sourcePathname = null) { const urlParts = pathname.split("/").filter(Boolean); for (const entry of interceptLookup) { const params = matchPattern(urlParts, entry.targetPatternParts); if (params !== null) { - return { ...entry, matchedParams: params }; + let sourceParams = {}; + if (sourcePathname !== null) { + const sourceRoute = routes[entry.sourceRouteIndex]; + const sourceParts = sourcePathname.split("/").filter(Boolean); + const matchedSourceParams = sourceRoute + ? matchPattern(sourceParts, sourceRoute.patternParts) + : null; + if (matchedSourceParams === null) { + continue; + } + sourceParams = matchedSourceParams; + } + return { ...entry, matchedParams: { ...sourceParams, ...params } }; } } return null; } @@ -734,12 +746,13 @@ searchParams, isRscRequest, request, mountedSlotsHeader, } = pageRequest; + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { const _interceptionContext = opts?.interceptionContext ?? null; const _noExportRouteId = __createAppPayloadRouteId(routePath, _interceptionContext); let _noExportRootLayout = null; if (route.layouts?.length > 0) { // Compute the root layout tree path for this error payload using the @@ -859,11 +872,11 @@ const mountedSlotIds = mountedSlotsHeader ? new Set(mountedSlotsHeader.split(" ")) : null; return __buildAppPageElements({ - element: createElement(PageComponent, pageProps), + element: PageComponent ? createElement(PageComponent, pageProps) : null, globalErrorModule: null, isRscRequest, mountedSlotIds, makeThenableParams, matchedParams: params, @@ -1588,11 +1601,13 @@ const { route: actionRoute, params: actionParams } = match; const __actionRerenderTarget = __resolveAppPageActionRerenderTarget({ cleanPathname, currentParams: actionParams, currentRoute: actionRoute, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; @@ -1869,12 +1884,13 @@ _mwCtx, ); } // Build the component tree: layouts wrapping the page + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { setHeadersContext(null); setNavigationContext(null); return new Response("Page has no default export", { status: 500 }); } @@ -2042,11 +2058,13 @@ }, ); }, cleanPathname, currentRoute: route, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; ❯ assertMatchResult node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voidzero-dev/vite-plus-test/dist/chunks/test.D1JkM1w4.js:4027:25 ❯ Proxy.<anonymous> node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voi
[integration] tests/entry-templates.test.ts > App Router entry templates > generateRscEntry snapshot (with config): tests/entry-templates.test.ts#L211
Error: Snapshot `App Router entry templates > generateRscEntry snapshot (with config) 1` mismatched - Expected + Received @@ -708,16 +708,28 @@ /** * Check if a pathname matches any intercepting route. * Returns the match info or null. */ - function findIntercept(pathname) { + function findIntercept(pathname, sourcePathname = null) { const urlParts = pathname.split("/").filter(Boolean); for (const entry of interceptLookup) { const params = matchPattern(urlParts, entry.targetPatternParts); if (params !== null) { - return { ...entry, matchedParams: params }; + let sourceParams = {}; + if (sourcePathname !== null) { + const sourceRoute = routes[entry.sourceRouteIndex]; + const sourceParts = sourcePathname.split("/").filter(Boolean); + const matchedSourceParams = sourceRoute + ? matchPattern(sourceParts, sourceRoute.patternParts) + : null; + if (matchedSourceParams === null) { + continue; + } + sourceParams = matchedSourceParams; + } + return { ...entry, matchedParams: { ...sourceParams, ...params } }; } } return null; } @@ -727,12 +739,13 @@ searchParams, isRscRequest, request, mountedSlotsHeader, } = pageRequest; + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { const _interceptionContext = opts?.interceptionContext ?? null; const _noExportRouteId = __createAppPayloadRouteId(routePath, _interceptionContext); let _noExportRootLayout = null; if (route.layouts?.length > 0) { // Compute the root layout tree path for this error payload using the @@ -852,11 +865,11 @@ const mountedSlotIds = mountedSlotsHeader ? new Set(mountedSlotsHeader.split(" ")) : null; return __buildAppPageElements({ - element: createElement(PageComponent, pageProps), + element: PageComponent ? createElement(PageComponent, pageProps) : null, globalErrorModule: null, isRscRequest, mountedSlotIds, makeThenableParams, matchedParams: params, @@ -1587,11 +1600,13 @@ const { route: actionRoute, params: actionParams } = match; const __actionRerenderTarget = __resolveAppPageActionRerenderTarget({ cleanPathname, currentParams: actionParams, currentRoute: actionRoute, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; @@ -1868,12 +1883,13 @@ _mwCtx, ); } // Build the component tree: layouts wrapping the page + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { setHeadersContext(null); setNavigationContext(null); return new Response("Page has no default export", { status: 500 }); } @@ -2041,11 +2057,13 @@ }, ); }, cleanPathname, currentRoute: route, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; ❯ assertMatchResult node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voidzero-dev/vite-plus-test/dist/chunks/test.D1JkM1w4.js:4027:25 ❯ Proxy.<anonymous> node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voidzero-dev
[integration] tests/entry-templates.test.ts > App Router entry templates > generateRscEntry snapshot (with global error): tests/entry-templates.test.ts#L181
Error: Snapshot `App Router entry templates > generateRscEntry snapshot (with global error) 1` mismatched - Expected + Received @@ -709,16 +709,28 @@ /** * Check if a pathname matches any intercepting route. * Returns the match info or null. */ - function findIntercept(pathname) { + function findIntercept(pathname, sourcePathname = null) { const urlParts = pathname.split("/").filter(Boolean); for (const entry of interceptLookup) { const params = matchPattern(urlParts, entry.targetPatternParts); if (params !== null) { - return { ...entry, matchedParams: params }; + let sourceParams = {}; + if (sourcePathname !== null) { + const sourceRoute = routes[entry.sourceRouteIndex]; + const sourceParts = sourcePathname.split("/").filter(Boolean); + const matchedSourceParams = sourceRoute + ? matchPattern(sourceParts, sourceRoute.patternParts) + : null; + if (matchedSourceParams === null) { + continue; + } + sourceParams = matchedSourceParams; + } + return { ...entry, matchedParams: { ...sourceParams, ...params } }; } } return null; } @@ -728,12 +740,13 @@ searchParams, isRscRequest, request, mountedSlotsHeader, } = pageRequest; + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { const _interceptionContext = opts?.interceptionContext ?? null; const _noExportRouteId = __createAppPayloadRouteId(routePath, _interceptionContext); let _noExportRootLayout = null; if (route.layouts?.length > 0) { // Compute the root layout tree path for this error payload using the @@ -853,11 +866,11 @@ const mountedSlotIds = mountedSlotsHeader ? new Set(mountedSlotsHeader.split(" ")) : null; return __buildAppPageElements({ - element: createElement(PageComponent, pageProps), + element: PageComponent ? createElement(PageComponent, pageProps) : null, globalErrorModule: mod_11, isRscRequest, mountedSlotIds, makeThenableParams, matchedParams: params, @@ -1582,11 +1595,13 @@ const { route: actionRoute, params: actionParams } = match; const __actionRerenderTarget = __resolveAppPageActionRerenderTarget({ cleanPathname, currentParams: actionParams, currentRoute: actionRoute, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; @@ -1863,12 +1878,13 @@ _mwCtx, ); } // Build the component tree: layouts wrapping the page + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { setHeadersContext(null); setNavigationContext(null); return new Response("Page has no default export", { status: 500 }); } @@ -2036,11 +2052,13 @@ }, ); }, cleanPathname, currentRoute: route, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; ❯ assertMatchResult node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voidzero-dev/vite-plus-test/dist/chunks/test.D1JkM1w4.js:4027:25 ❯ Proxy.<anonymous> node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@void
[integration] tests/entry-templates.test.ts > App Router entry templates > generateRscEntry snapshot (with instrumentation): tests/entry-templates.test.ts#L168
Error: Snapshot `App Router entry templates > generateRscEntry snapshot (with instrumentation) 1` mismatched - Expected + Received @@ -738,16 +738,28 @@ /** * Check if a pathname matches any intercepting route. * Returns the match info or null. */ - function findIntercept(pathname) { + function findIntercept(pathname, sourcePathname = null) { const urlParts = pathname.split("/").filter(Boolean); for (const entry of interceptLookup) { const params = matchPattern(urlParts, entry.targetPatternParts); if (params !== null) { - return { ...entry, matchedParams: params }; + let sourceParams = {}; + if (sourcePathname !== null) { + const sourceRoute = routes[entry.sourceRouteIndex]; + const sourceParts = sourcePathname.split("/").filter(Boolean); + const matchedSourceParams = sourceRoute + ? matchPattern(sourceParts, sourceRoute.patternParts) + : null; + if (matchedSourceParams === null) { + continue; + } + sourceParams = matchedSourceParams; + } + return { ...entry, matchedParams: { ...sourceParams, ...params } }; } } return null; } @@ -757,12 +769,13 @@ searchParams, isRscRequest, request, mountedSlotsHeader, } = pageRequest; + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { const _interceptionContext = opts?.interceptionContext ?? null; const _noExportRouteId = __createAppPayloadRouteId(routePath, _interceptionContext); let _noExportRootLayout = null; if (route.layouts?.length > 0) { // Compute the root layout tree path for this error payload using the @@ -882,11 +895,11 @@ const mountedSlotIds = mountedSlotsHeader ? new Set(mountedSlotsHeader.split(" ")) : null; return __buildAppPageElements({ - element: createElement(PageComponent, pageProps), + element: PageComponent ? createElement(PageComponent, pageProps) : null, globalErrorModule: null, isRscRequest, mountedSlotIds, makeThenableParams, matchedParams: params, @@ -1614,11 +1627,13 @@ const { route: actionRoute, params: actionParams } = match; const __actionRerenderTarget = __resolveAppPageActionRerenderTarget({ cleanPathname, currentParams: actionParams, currentRoute: actionRoute, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; @@ -1895,12 +1910,13 @@ _mwCtx, ); } // Build the component tree: layouts wrapping the page + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { setHeadersContext(null); setNavigationContext(null); return new Response("Page has no default export", { status: 500 }); } @@ -2068,11 +2084,13 @@ }, ); }, cleanPathname, currentRoute: route, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; ❯ assertMatchResult node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voidzero-dev/vite-plus-test/dist/chunks/test.D1JkM1w4.js:4027:25 ❯ Proxy.<anonymous> node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voi
[integration] tests/entry-templates.test.ts > App Router entry templates > generateRscEntry snapshot (with middleware): tests/entry-templates.test.ts#L153
Error: Snapshot `App Router entry templates > generateRscEntry snapshot (with middleware) 1` mismatched - Expected + Received @@ -708,16 +708,28 @@ /** * Check if a pathname matches any intercepting route. * Returns the match info or null. */ - function findIntercept(pathname) { + function findIntercept(pathname, sourcePathname = null) { const urlParts = pathname.split("/").filter(Boolean); for (const entry of interceptLookup) { const params = matchPattern(urlParts, entry.targetPatternParts); if (params !== null) { - return { ...entry, matchedParams: params }; + let sourceParams = {}; + if (sourcePathname !== null) { + const sourceRoute = routes[entry.sourceRouteIndex]; + const sourceParts = sourcePathname.split("/").filter(Boolean); + const matchedSourceParams = sourceRoute + ? matchPattern(sourceParts, sourceRoute.patternParts) + : null; + if (matchedSourceParams === null) { + continue; + } + sourceParams = matchedSourceParams; + } + return { ...entry, matchedParams: { ...sourceParams, ...params } }; } } return null; } @@ -727,12 +739,13 @@ searchParams, isRscRequest, request, mountedSlotsHeader, } = pageRequest; + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { const _interceptionContext = opts?.interceptionContext ?? null; const _noExportRouteId = __createAppPayloadRouteId(routePath, _interceptionContext); let _noExportRootLayout = null; if (route.layouts?.length > 0) { // Compute the root layout tree path for this error payload using the @@ -852,11 +865,11 @@ const mountedSlotIds = mountedSlotsHeader ? new Set(mountedSlotsHeader.split(" ")) : null; return __buildAppPageElements({ - element: createElement(PageComponent, pageProps), + element: PageComponent ? createElement(PageComponent, pageProps) : null, globalErrorModule: null, isRscRequest, mountedSlotIds, makeThenableParams, matchedParams: params, @@ -1948,11 +1961,13 @@ const { route: actionRoute, params: actionParams } = match; const __actionRerenderTarget = __resolveAppPageActionRerenderTarget({ cleanPathname, currentParams: actionParams, currentRoute: actionRoute, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; @@ -2229,12 +2244,13 @@ _mwCtx, ); } // Build the component tree: layouts wrapping the page + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { setHeadersContext(null); setNavigationContext(null); return new Response("Page has no default export", { status: 500 }); } @@ -2402,11 +2418,13 @@ }, ); }, cleanPathname, currentRoute: route, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; ❯ assertMatchResult node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voidzero-dev/vite-plus-test/dist/chunks/test.D1JkM1w4.js:4027:25 ❯ Proxy.<anonymous> node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voidzero
[integration] tests/entry-templates.test.ts > App Router entry templates > generateRscEntry snapshot (minimal routes): tests/entry-templates.test.ts#L140
Error: Snapshot `App Router entry templates > generateRscEntry snapshot (minimal routes) 1` mismatched - Expected + Received @@ -708,16 +708,28 @@ /** * Check if a pathname matches any intercepting route. * Returns the match info or null. */ - function findIntercept(pathname) { + function findIntercept(pathname, sourcePathname = null) { const urlParts = pathname.split("/").filter(Boolean); for (const entry of interceptLookup) { const params = matchPattern(urlParts, entry.targetPatternParts); if (params !== null) { - return { ...entry, matchedParams: params }; + let sourceParams = {}; + if (sourcePathname !== null) { + const sourceRoute = routes[entry.sourceRouteIndex]; + const sourceParts = sourcePathname.split("/").filter(Boolean); + const matchedSourceParams = sourceRoute + ? matchPattern(sourceParts, sourceRoute.patternParts) + : null; + if (matchedSourceParams === null) { + continue; + } + sourceParams = matchedSourceParams; + } + return { ...entry, matchedParams: { ...sourceParams, ...params } }; } } return null; } @@ -727,12 +739,13 @@ searchParams, isRscRequest, request, mountedSlotsHeader, } = pageRequest; + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { const _interceptionContext = opts?.interceptionContext ?? null; const _noExportRouteId = __createAppPayloadRouteId(routePath, _interceptionContext); let _noExportRootLayout = null; if (route.layouts?.length > 0) { // Compute the root layout tree path for this error payload using the @@ -852,11 +865,11 @@ const mountedSlotIds = mountedSlotsHeader ? new Set(mountedSlotsHeader.split(" ")) : null; return __buildAppPageElements({ - element: createElement(PageComponent, pageProps), + element: PageComponent ? createElement(PageComponent, pageProps) : null, globalErrorModule: null, isRscRequest, mountedSlotIds, makeThenableParams, matchedParams: params, @@ -1581,11 +1594,13 @@ const { route: actionRoute, params: actionParams } = match; const __actionRerenderTarget = __resolveAppPageActionRerenderTarget({ cleanPathname, currentParams: actionParams, currentRoute: actionRoute, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; @@ -1862,12 +1877,13 @@ _mwCtx, ); } // Build the component tree: layouts wrapping the page + const hasPageModule = !!route.page; const PageComponent = route.page?.default; - if (!PageComponent) { + if (hasPageModule && !PageComponent) { setHeadersContext(null); setNavigationContext(null); return new Response("Page has no default export", { status: 500 }); } @@ -2035,11 +2051,13 @@ }, ); }, cleanPathname, currentRoute: route, - findIntercept, + findIntercept(pathname) { + return findIntercept(pathname, interceptionContextHeader); + }, getRouteParamNames(sourceRoute) { return sourceRoute.params; }, getSourceRoute(sourceRouteIndex) { return routes[sourceRouteIndex]; ❯ assertMatchResult node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voidzero-dev/vite-plus-test/dist/chunks/test.D1JkM1w4.js:4027:25 ❯ Proxy.<anonymous> node_modules/.pnpm/@voidzero-dev[email protected]_@[email protected]_@[email protected]_@voidze_f63249bc202c8b757f929e08a6ee9746/node_modules/@voidzero-
CI
Process completed with exit code 1.
E2E (app-router)
No files were found with the provided path: playwright-report/. No artifacts will be uploaded.
🎭 Playwright Run Summary
1 passed (5.0s)
🎭 Playwright Run Summary
16 passed (8.8s)
🎭 Playwright Run Summary
13 passed (6.8s)
🎭 Playwright Run Summary
22 passed (10.8s)
🎭 Playwright Run Summary
38 passed (11.4s)
🎭 Playwright Run Summary
37 passed (20.6s)
🎭 Playwright Run Summary
17 passed (10.7s)
🎭 Playwright Run Summary
85 passed (23.4s)
🎭 Playwright Run Summary
1 failed [app-router] › tests/e2e/app-router/advanced.spec.ts:96:7 › Intercepting Routes › chained intercepted navigations keep the original source context 8 skipped 327 passed (1.5m)

Artifacts

Produced during runtime
Name Size Digest
blob-report-1
47.8 KB
sha256:ed828e2ca5fb0bb75c4aeb730555860b7957d49ab5876630db0629868341a173
blob-report-2
391 KB
sha256:06c3d3ccb84400b60688bcb302e861faa62d8f0bcc720ddc4ea4a9db42f6a58c
blob-report-3
34.9 KB
sha256:50fd8b588c5064c3d52d9ba4e95a4e886b63ccfb0fb9340019eb9ae65eb1ab03