@@ -14,6 +14,28 @@ function errorOnBadHandler(resourcePath: string) {
14
14
`
15
15
}
16
16
17
+ /* re-export the userland route configs */
18
+ async function createReExportsCode (
19
+ resourcePath : string ,
20
+ loaderContext : webpack . LoaderContext < any >
21
+ ) {
22
+ return ''
23
+ const exportNames = await getLoaderModuleNamedExports (
24
+ resourcePath ,
25
+ loaderContext
26
+ )
27
+ // Re-export configs but avoid conflicted exports
28
+ const reExportNames = exportNames . filter (
29
+ ( name ) => name !== 'default' && name !== 'generateSitemaps'
30
+ )
31
+
32
+ return reExportNames . length > 0
33
+ ? `export { ${ reExportNames . join ( ', ' ) } } from ${ JSON . stringify (
34
+ resourcePath
35
+ ) } \n`
36
+ : ''
37
+ }
38
+
17
39
const cacheHeader = {
18
40
none : 'no-cache, no-store' ,
19
41
longCache : 'public, immutable, no-transform, max-age=31536000' ,
@@ -85,7 +107,10 @@ export const dynamic = 'force-static'
85
107
return code
86
108
}
87
109
88
- function getDynamicTextRouteCode ( resourcePath : string ) {
110
+ async function getDynamicTextRouteCode (
111
+ resourcePath : string ,
112
+ loaderContext : webpack . LoaderContext < any >
113
+ ) {
89
114
return `\
90
115
/* dynamic asset route */
91
116
import { NextResponse } from 'next/server'
@@ -96,6 +121,7 @@ const contentType = ${JSON.stringify(getContentType(resourcePath))}
96
121
const fileType = ${ JSON . stringify ( getFilenameAndExtension ( resourcePath ) . name ) }
97
122
98
123
${ errorOnBadHandler ( resourcePath ) }
124
+ ${ await createReExportsCode ( resourcePath , loaderContext ) }
99
125
100
126
export async function GET() {
101
127
const data = await handler()
@@ -112,7 +138,10 @@ export async function GET() {
112
138
}
113
139
114
140
// <metadata-image>/[id]/route.js
115
- function getDynamicImageRouteCode ( resourcePath : string ) {
141
+ async function getDynamicImageRouteCode (
142
+ resourcePath : string ,
143
+ loaderContext : webpack . LoaderContext < any >
144
+ ) {
116
145
return `\
117
146
/* dynamic image route */
118
147
import { NextResponse } from 'next/server'
@@ -124,6 +153,7 @@ const handler = imageModule.default
124
153
const generateImageMetadata = imageModule.generateImageMetadata
125
154
126
155
${ errorOnBadHandler ( resourcePath ) }
156
+ ${ await createReExportsCode ( resourcePath , loaderContext ) }
127
157
128
158
export async function GET(_, ctx) {
129
159
const { __metadata_id__, ...params } = ctx.params || {}
@@ -162,10 +192,6 @@ async function getDynamicSitemapRouteCode(
162
192
resourcePath ,
163
193
loaderContext
164
194
)
165
- // Re-export configs but avoid conflicted exports
166
- const reExportNames = exportNames . filter (
167
- ( name ) => name !== 'default' && name !== 'generateSitemaps'
168
- )
169
195
170
196
const hasGenerateSitemaps = exportNames . includes ( 'generateSitemaps' )
171
197
@@ -195,15 +221,7 @@ const contentType = ${JSON.stringify(getContentType(resourcePath))}
195
221
const fileType = ${ JSON . stringify ( getFilenameAndExtension ( resourcePath ) . name ) }
196
222
197
223
${ 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
- }
224
+ ${ await createReExportsCode ( resourcePath , loaderContext ) }
207
225
208
226
export async function GET(_, ctx) {
209
227
const { __metadata_id__: id, ...params } = ctx.params || {}
@@ -253,11 +271,11 @@ const nextMetadataRouterLoader: webpack.LoaderDefinitionFunction<MetadataRouteLo
253
271
let code = ''
254
272
if ( isDynamicRouteExtension === '1' ) {
255
273
if ( fileBaseName === 'robots' || fileBaseName === 'manifest' ) {
256
- code = getDynamicTextRouteCode ( filePath )
274
+ code = await getDynamicTextRouteCode ( filePath , this )
257
275
} else if ( fileBaseName === 'sitemap' ) {
258
276
code = await getDynamicSitemapRouteCode ( filePath , this )
259
277
} else {
260
- code = getDynamicImageRouteCode ( filePath )
278
+ code = await getDynamicImageRouteCode ( filePath , this )
261
279
}
262
280
} else {
263
281
code = await getStaticAssetRouteCode ( filePath , fileBaseName )
0 commit comments