File tree 7 files changed +72
-9
lines changed
packages/next/src/lib/metadata
test/e2e/app-dir/reexport-client-component-metadata
7 files changed +72
-9
lines changed Original file line number Diff line number Diff line change @@ -28,7 +28,6 @@ import {
28
28
import { resolveOpenGraph , resolveTwitter } from './resolvers/resolve-opengraph'
29
29
import { resolveTitle } from './resolvers/resolve-title'
30
30
import { resolveAsArrayOrUndefined } from './generate/utils'
31
- import { isClientReference } from '../client-reference'
32
31
import {
33
32
getComponentTypeModule ,
34
33
getLayoutOrPageModule ,
@@ -322,9 +321,6 @@ async function getDefinedViewport(
322
321
props : any ,
323
322
tracingProps : { route : string }
324
323
) : Promise < Viewport | ViewportResolver | null > {
325
- if ( isClientReference ( mod ) ) {
326
- return null
327
- }
328
324
if ( typeof mod . generateViewport === 'function' ) {
329
325
const { route } = tracingProps
330
326
return ( parent : ResolvingViewport ) =>
@@ -347,11 +343,6 @@ async function getDefinedMetadata(
347
343
props : any ,
348
344
tracingProps : { route : string }
349
345
) : Promise < Metadata | MetadataResolver | null > {
350
- // Layer is a client component, we just skip it. It can't have metadata exported.
351
- // Return early to avoid accessing properties error for client references.
352
- if ( isClientReference ( mod ) ) {
353
- return null
354
- }
355
346
if ( typeof mod . generateMetadata === 'function' ) {
356
347
const { route } = tracingProps
357
348
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