File tree Expand file tree Collapse file tree 7 files changed +72
-9
lines changed
packages/next/src/lib/metadata
test/e2e/app-dir/reexport-client-component-metadata Expand file tree Collapse file tree 7 files changed +72
-9
lines changed Original file line number Diff line number Diff line change @@ -32,7 +32,6 @@ import {
32
32
import { resolveOpenGraph , resolveTwitter } from './resolvers/resolve-opengraph'
33
33
import { resolveTitle } from './resolvers/resolve-title'
34
34
import { resolveAsArrayOrUndefined } from './generate/utils'
35
- import { isClientReference } from '../client-reference'
36
35
import {
37
36
getComponentTypeModule ,
38
37
getLayoutOrPageModule ,
@@ -331,9 +330,6 @@ async function getDefinedViewport(
331
330
props : any ,
332
331
tracingProps : { route : string }
333
332
) : Promise < Viewport | ViewportResolver | null > {
334
- if ( isClientReference ( mod ) ) {
335
- return null
336
- }
337
333
if ( typeof mod . generateViewport === 'function' ) {
338
334
const { route } = tracingProps
339
335
return ( parent : ResolvingViewport ) =>
@@ -356,11 +352,6 @@ async function getDefinedMetadata(
356
352
props : any ,
357
353
tracingProps : { route : string }
358
354
) : Promise < Metadata | MetadataResolver | null > {
359
- // Layer is a client component, we just skip it. It can't have metadata exported.
360
- // Return early to avoid accessing properties error for client references.
361
- if ( isClientReference ( mod ) ) {
362
- return null
363
- }
364
355
if ( typeof mod . generateMetadata === 'function' ) {
365
356
const { route } = tracingProps
366
357
return ( parent : ResolvingMetadata ) =>
Original file line number Diff line number Diff line change
1
+ export default function Layout ( { children } : { children : React . ReactNode } ) {
2
+ return (
3
+ < html >
4
+ < body > { children } </ body >
5
+ </ html >
6
+ )
7
+ }
8
+
9
+ export const metadata = {
10
+ title : 'Root Layout' ,
11
+ description : 'Root Description' ,
12
+ }
Original file line number Diff line number Diff line change
1
+ 'use client'
2
+
3
+ export default function PageContent ( ) {
4
+ return < h1 > Page 2 Content</ h1 >
5
+ }
Original file line number Diff line number Diff line change
1
+ import PageContent from './page-content'
2
+
3
+ export default PageContent
Original file line number Diff line number Diff line change
1
+ 'use client'
2
+
3
+ export default function PageContent ( ) {
4
+ return < h1 > Page 1 Content</ h1 >
5
+ }
Original file line number Diff line number Diff line change
1
+ import PageContent from './page-content'
2
+
3
+ export const metadata = {
4
+ title : 'Page 1' ,
5
+ description : 'Page 1 Description' ,
6
+ }
7
+
8
+ export default PageContent
Original file line number Diff line number Diff line change
1
+ import { nextTestSetup } from 'e2e-utils'
2
+
3
+ describe ( 'app-dir - reexport-client-component-metadata' , ( ) => {
4
+ const { next } = nextTestSetup ( {
5
+ files : __dirname ,
6
+ } )
7
+
8
+ it ( 'should render the page metadata if override' , async ( ) => {
9
+ const $ = await next . render$ ( '/override' )
10
+ expect ( $ ( 'title' ) . text ( ) ) . toBe ( 'Page 1' )
11
+ expect ( $ ( 'meta[name="description"]' ) . attr ( 'content' ) ) . toBe (
12
+ 'Page 1 Description'
13
+ )
14
+
15
+ const browser = await next . browser ( '/override' )
16
+ expect ( await browser . elementByCss ( 'title' ) . text ( ) ) . toBe ( 'Page 1' )
17
+ expect (
18
+ await browser
19
+ . elementByCss ( 'meta[name="description"]' )
20
+ . getAttribute ( 'content' )
21
+ ) . toBe ( 'Page 1 Description' )
22
+ } )
23
+
24
+ it ( 'should render the layout metadata if not override' , async ( ) => {
25
+ const $ = await next . render$ ( '/no-override' )
26
+ expect ( $ ( 'title' ) . text ( ) ) . toBe ( 'Root Layout' )
27
+ expect ( $ ( 'meta[name="description"]' ) . attr ( 'content' ) ) . toBe (
28
+ 'Root Description'
29
+ )
30
+
31
+ const browser = await next . browser ( '/no-override' )
32
+ expect ( await browser . elementByCss ( 'title' ) . text ( ) ) . toBe ( 'Root Layout' )
33
+ expect (
34
+ await browser
35
+ . elementByCss ( 'meta[name="description"]' )
36
+ . getAttribute ( 'content' )
37
+ ) . toBe ( 'Root Description' )
38
+ } )
39
+ } )
You can’t perform that action at this time.
0 commit comments