@@ -10,6 +10,7 @@ import {
10
10
import { transformRequest } from '../server/transformRequest'
11
11
import type { InternalResolveOptionsWithOverrideConditions } from '../plugins/resolve'
12
12
import { tryNodeResolve } from '../plugins/resolve'
13
+ import { genSourceMapUrl } from '../server/sourcemap'
13
14
import {
14
15
ssrDynamicImportKey ,
15
16
ssrExportAllKey ,
@@ -25,6 +26,16 @@ interface SSRContext {
25
26
26
27
type SSRModule = Record < string , any >
27
28
29
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
30
+ const AsyncFunction = async function ( ) { } . constructor as typeof Function
31
+ let fnDeclarationLineCount = 0
32
+ {
33
+ const body = '/*code*/'
34
+ const source = new AsyncFunction ( 'a' , 'b' , body ) . toString ( )
35
+ fnDeclarationLineCount =
36
+ source . slice ( 0 , source . indexOf ( body ) ) . split ( '\n' ) . length - 1
37
+ }
38
+
28
39
const pendingModules = new Map < string , Promise < SSRModule > > ( )
29
40
const pendingImports = new Map < string , string [ ] > ( )
30
41
@@ -181,17 +192,27 @@ async function instantiateModule(
181
192
}
182
193
}
183
194
195
+ let sourceMapSuffix = ''
196
+ if ( result . map ) {
197
+ const moduleSourceMap = Object . assign ( { } , result . map , {
198
+ // offset the first three lines of the module (function declaration and 'use strict')
199
+ mappings : ';' . repeat ( fnDeclarationLineCount + 1 ) + result . map . mappings ,
200
+ } )
201
+ sourceMapSuffix =
202
+ '\n//# sourceMappingURL=' + genSourceMapUrl ( moduleSourceMap )
203
+ }
204
+
184
205
try {
185
- // eslint-disable-next-line @typescript-eslint/no-empty-function
186
- const AsyncFunction = async function ( ) { } . constructor as typeof Function
187
206
const initModule = new AsyncFunction (
188
207
`global` ,
189
208
ssrModuleExportsKey ,
190
209
ssrImportMetaKey ,
191
210
ssrImportKey ,
192
211
ssrDynamicImportKey ,
193
212
ssrExportAllKey ,
194
- '"use strict";' + result . code + `\n//# sourceURL=${ mod . url } ` ,
213
+ '"use strict";\n' +
214
+ result . code +
215
+ `\n//# sourceURL=${ mod . url } ${ sourceMapSuffix } ` ,
195
216
)
196
217
await initModule (
197
218
context . global ,
0 commit comments