@@ -14,6 +14,27 @@ function errorOnBadHandler(resourcePath: string) {
1414 `
1515}
1616
17+ /* re-export the userland route configs */
18+ async function createReExportsCode (
19+ resourcePath : string ,
20+ loaderContext : webpack . LoaderContext < any >
21+ ) {
22+ const exportNames = await getLoaderModuleNamedExports (
23+ resourcePath ,
24+ loaderContext
25+ )
26+ // Re-export configs but avoid conflicted exports
27+ const reExportNames = exportNames . filter (
28+ ( name ) => name !== 'default' && name !== 'generateSitemaps'
29+ )
30+
31+ return reExportNames . length > 0
32+ ? `export { ${ reExportNames . join ( ', ' ) } } from ${ JSON . stringify (
33+ resourcePath
34+ ) } \n`
35+ : ''
36+ }
37+
1738const cacheHeader = {
1839 none : 'no-cache, no-store' ,
1940 longCache : 'public, immutable, no-transform, max-age=31536000' ,
@@ -85,7 +106,10 @@ export const dynamic = 'force-static'
85106 return code
86107}
87108
88- function getDynamicTextRouteCode ( resourcePath : string ) {
109+ async function getDynamicTextRouteCode (
110+ resourcePath : string ,
111+ loaderContext : webpack . LoaderContext < any >
112+ ) {
89113 return `\
90114/* dynamic asset route */
91115import { NextResponse } from 'next/server'
@@ -96,6 +120,7 @@ const contentType = ${JSON.stringify(getContentType(resourcePath))}
96120const fileType = ${ JSON . stringify ( getFilenameAndExtension ( resourcePath ) . name ) }
97121
98122${ errorOnBadHandler ( resourcePath ) }
123+ ${ await createReExportsCode ( resourcePath , loaderContext ) }
99124
100125export async function GET() {
101126 const data = await handler()
@@ -112,7 +137,10 @@ export async function GET() {
112137}
113138
114139// <metadata-image>/[id]/route.js
115- function getDynamicImageRouteCode ( resourcePath : string ) {
140+ async function getDynamicImageRouteCode (
141+ resourcePath : string ,
142+ loaderContext : webpack . LoaderContext < any >
143+ ) {
116144 return `\
117145/* dynamic image route */
118146import { NextResponse } from 'next/server'
@@ -124,6 +152,7 @@ const handler = imageModule.default
124152const generateImageMetadata = imageModule.generateImageMetadata
125153
126154${ errorOnBadHandler ( resourcePath ) }
155+ ${ await createReExportsCode ( resourcePath , loaderContext ) }
127156
128157export async function GET(_, ctx) {
129158 const { __metadata_id__, ...params } = ctx.params || {}
@@ -162,10 +191,6 @@ async function getDynamicSitemapRouteCode(
162191 resourcePath ,
163192 loaderContext
164193 )
165- // Re-export configs but avoid conflicted exports
166- const reExportNames = exportNames . filter (
167- ( name ) => name !== 'default' && name !== 'generateSitemaps'
168- )
169194
170195 const hasGenerateSitemaps = exportNames . includes ( 'generateSitemaps' )
171196
@@ -195,15 +220,7 @@ const contentType = ${JSON.stringify(getContentType(resourcePath))}
195220const fileType = ${ JSON . stringify ( getFilenameAndExtension ( resourcePath ) . name ) }
196221
197222${ errorOnBadHandler ( resourcePath ) }
198-
199- ${ '' /* re-export the userland route configs */ }
200- ${
201- reExportNames . length > 0
202- ? `export { ${ reExportNames . join ( ', ' ) } } from ${ JSON . stringify (
203- resourcePath
204- ) } \n`
205- : ''
206- }
223+ ${ await createReExportsCode ( resourcePath , loaderContext ) }
207224
208225export async function GET(_, ctx) {
209226 const { __metadata_id__: id, ...params } = ctx.params || {}
@@ -253,11 +270,11 @@ const nextMetadataRouterLoader: webpack.LoaderDefinitionFunction<MetadataRouteLo
253270 let code = ''
254271 if ( isDynamicRouteExtension === '1' ) {
255272 if ( fileBaseName === 'robots' || fileBaseName === 'manifest' ) {
256- code = getDynamicTextRouteCode ( filePath )
273+ code = await getDynamicTextRouteCode ( filePath , this )
257274 } else if ( fileBaseName === 'sitemap' ) {
258275 code = await getDynamicSitemapRouteCode ( filePath , this )
259276 } else {
260- code = getDynamicImageRouteCode ( filePath )
277+ code = await getDynamicImageRouteCode ( filePath , this )
261278 }
262279 } else {
263280 code = await getStaticAssetRouteCode ( filePath , fileBaseName )
0 commit comments