Skip to content

Commit 2d9078c

Browse files
authored
Merge branch 'canary' into bump-react
2 parents 3f6d231 + c501842 commit 2d9078c

File tree

8 files changed

+91
-8
lines changed

8 files changed

+91
-8
lines changed

packages/next/server/base-server.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1216,6 +1216,8 @@ export default abstract class Server<ServerOptions extends Options = Options> {
12161216
const isDataReq =
12171217
!!query.__nextDataReq && (isSSG || hasServerProps || isServerComponent)
12181218

1219+
delete query.__nextDataReq
1220+
12191221
// normalize req.url for SSG paths as it is not exposed
12201222
// to getStaticProps and the asPath should not expose /_next/data
12211223
if (
@@ -1227,7 +1229,11 @@ export default abstract class Server<ServerOptions extends Options = Options> {
12271229
req.url = this.stripNextDataPath(req.url)
12281230
}
12291231

1230-
if (!!query.__nextDataReq) {
1232+
if (
1233+
!isServerComponent &&
1234+
!!req.headers['x-nextjs-data'] &&
1235+
(!res.statusCode || res.statusCode === 200)
1236+
) {
12311237
res.setHeader(
12321238
'x-nextjs-matched-path',
12331239
`${query.__nextLocale ? `/${query.__nextLocale}` : ''}${pathname}`
@@ -1243,7 +1249,6 @@ export default abstract class Server<ServerOptions extends Options = Options> {
12431249
return null
12441250
}
12451251
}
1246-
delete query.__nextDataReq
12471252

12481253
// Don't delete query.__flight__ yet, it still needs to be used in renderToHTML later
12491254
const isFlightRequest = Boolean(

test/e2e/middleware-general/app/next.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module.exports = {
77
return [
88
{
99
source: '/redirect-1',
10-
destination: '/somewhere-else',
10+
destination: '/somewhere/else',
1111
permanent: false,
1212
},
1313
]

test/e2e/middleware-general/test/index.test.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,14 @@ describe('Middleware Runtime', () => {
129129
)
130130
expect(res.status).toBe(307)
131131
expect(new URL(res.headers.get('location'), 'http://n').pathname).toBe(
132-
'/somewhere-else'
132+
'/somewhere/else'
133133
)
134134

135135
const browser = await webdriver(next.url, `${locale}/`)
136136
await browser.eval(`next.router.push('/redirect-1')`)
137137
await check(async () => {
138138
const pathname = await browser.eval('location.pathname')
139-
return pathname === '/somewhere-else' ? 'success' : pathname
139+
return pathname === '/somewhere/else' ? 'success' : pathname
140140
}, 'success')
141141
})
142142

@@ -146,11 +146,13 @@ describe('Middleware Runtime', () => {
146146
expect(await res.text()).toContain('Hello World')
147147

148148
const browser = await webdriver(next.url, `${locale}/`)
149+
await browser.eval('window.beforeNav = 1')
149150
await browser.eval(`next.router.push('/rewrite-1')`)
150151
await check(async () => {
151152
const content = await browser.eval('document.documentElement.innerHTML')
152153
return content.includes('Hello World') ? 'success' : content
153154
}, 'success')
155+
expect(await browser.eval('window.beforeNav')).toBe(1)
154156
})
155157

156158
it('should rewrite correctly for non-SSG/SSP page', async () => {
@@ -365,7 +367,9 @@ describe('Middleware Runtime', () => {
365367
const res = await fetchViaHTTP(next.url, `/ssr-page`)
366368
const dataRes = await fetchViaHTTP(
367369
next.url,
368-
`/_next/data/${next.buildId}/en/ssr-page.json`
370+
`/_next/data/${next.buildId}/en/ssr-page.json`,
371+
undefined,
372+
{ headers: { 'x-nextjs-data': '1' } }
369373
)
370374
const json = await dataRes.json()
371375
expect(json.pageProps.message).toEqual('Bye Cruel World')

test/e2e/middleware-redirects/test/index.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,7 @@ describe('Middleware Redirect', () => {
146146
const browser = await webdriver(next.url, `${locale}`)
147147
await browser.elementByCss('#link-to-api-with-locale').click()
148148
await browser.waitForCondition('window.location.pathname === "/api/ok"')
149-
const body = await browser.elementByCss('body').text()
150-
expect(body).toBe('ok')
149+
await check(() => browser.elementByCss('body').text(), 'ok')
151150
})
152151
}
153152
})

test/e2e/middleware-rewrites/app/middleware.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,16 @@ export async function middleware(request) {
2222
)
2323
}
2424

25+
if (url.pathname === '/rewrite-to-beforefiles-rewrite') {
26+
url.pathname = '/beforefiles-rewrite'
27+
return NextResponse.rewrite(url)
28+
}
29+
30+
if (url.pathname === '/rewrite-to-afterfiles-rewrite') {
31+
url.pathname = '/afterfiles-rewrite'
32+
return NextResponse.rewrite(url)
33+
}
34+
2535
if (url.pathname.startsWith('/to-blog')) {
2636
const slug = url.pathname.split('/').pop()
2737
url.pathname = `/fallback-true-blog/${slug}`

test/e2e/middleware-rewrites/app/next.config.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,21 @@ module.exports = {
33
locales: ['ja', 'en', 'fr', 'es'],
44
defaultLocale: 'en',
55
},
6+
rewrites() {
7+
return {
8+
beforeFiles: [
9+
{
10+
source: '/beforefiles-rewrite',
11+
destination: '/ab-test/a',
12+
},
13+
],
14+
afterFiles: [
15+
{
16+
source: '/afterfiles-rewrite',
17+
destination: '/ab-test/b',
18+
},
19+
],
20+
fallback: [],
21+
}
22+
},
623
}

test/e2e/middleware-rewrites/app/pages/index.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,18 @@ export default function Home() {
1515
<a id="rewrite-me-to-about">Rewrite me to about</a>
1616
</Link>
1717
<div />
18+
<Link href="/rewrite-to-beforefiles-rewrite">
19+
<a id="rewrite-to-beforefiles-rewrite">
20+
Rewrite me to beforeFiles Rewrite
21+
</a>
22+
</Link>
23+
<div />
24+
<Link href="/rewrite-to-afterfiles-rewrite">
25+
<a id="rewrite-to-afterfiles-rewrite">
26+
Rewrite me to afterFiles Rewrite
27+
</a>
28+
</Link>
29+
<div />
1830
<Link href="/rewrite-me-to-vercel">
1931
<a>Rewrite me to Vercel</a>
2032
</Link>

test/e2e/middleware-rewrites/test/index.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ describe('Middleware Rewrite', () => {
2424
tests()
2525
testsWithLocale()
2626
testsWithLocale('/fr')
27+
2728
function tests() {
2829
// TODO: middleware effect headers aren't available here
2930
it.skip('includes the locale in rewrites by default', async () => {
@@ -271,6 +272,41 @@ describe('Middleware Rewrite', () => {
271272
await browser.elementByCss('#link-en2').click()
272273
await browser.waitForElementByCss('.en')
273274
})
275+
276+
it('should allow to rewrite to a `beforeFiles` rewrite config', async () => {
277+
const res = await fetchViaHTTP(
278+
next.url,
279+
`/rewrite-to-beforefiles-rewrite`
280+
)
281+
expect(res.status).toBe(200)
282+
expect(await res.text()).toContain('Welcome Page A')
283+
284+
const browser = await webdriver(next.url, '/')
285+
await browser.elementByCss('#rewrite-to-beforefiles-rewrite').click()
286+
await check(
287+
() => browser.eval('document.documentElement.innerHTML'),
288+
/Welcome Page A/
289+
)
290+
expect(await browser.eval('window.location.pathname')).toBe(
291+
`/rewrite-to-beforefiles-rewrite`
292+
)
293+
})
294+
295+
it('should allow to rewrite to a `afterFiles` rewrite config', async () => {
296+
const res = await fetchViaHTTP(next.url, `/rewrite-to-afterfiles-rewrite`)
297+
expect(res.status).toBe(200)
298+
expect(await res.text()).toContain('Welcome Page B')
299+
300+
const browser = await webdriver(next.url, '/')
301+
await browser.elementByCss('#rewrite-to-afterfiles-rewrite').click()
302+
await check(
303+
() => browser.eval('document.documentElement.innerHTML'),
304+
/Welcome Page B/
305+
)
306+
expect(await browser.eval('window.location.pathname')).toBe(
307+
`/rewrite-to-afterfiles-rewrite`
308+
)
309+
})
274310
}
275311

276312
function testsWithLocale(locale = '') {

0 commit comments

Comments
 (0)