@@ -2,6 +2,7 @@ import type { Plugin } from "vite";
22import {
33 type Loader ,
44 MediaType ,
5+ type ModuleLoadResponse ,
56 RequestedModuleType ,
67 ResolutionMode ,
78 Workspace ,
@@ -17,6 +18,8 @@ const { default: babelReact } = await import("@babel/preset-react");
1718
1819const BUILTINS = new Set ( builtinModules ) ;
1920
21+ const decoder = new TextDecoder ( ) ;
22+
2023interface DenoState {
2124 type : RequestedModuleType ;
2225}
@@ -180,14 +183,15 @@ export function deno(): Plugin {
180183 return null ;
181184 }
182185
183- const code = new TextDecoder ( ) . decode ( result . code ) ;
186+ const code = decoder . decode ( result . code ) ;
184187
185188 const maybeJsx = babelTransform ( {
186189 ssr : this . environment . config . consumer === "server" ,
187190 media : result . mediaType ,
188191 code,
189192 id : specifier ,
190193 isDev,
194+ inputSourceMap : parseSourceMap ( result . sourceMap ) ,
191195 } ) ;
192196 if ( maybeJsx !== null ) {
193197 return maybeJsx ;
@@ -224,14 +228,15 @@ export function deno(): Plugin {
224228 return null ;
225229 }
226230
227- const code = new TextDecoder ( ) . decode ( result . code ) ;
231+ const code = decoder . decode ( result . code ) ;
228232
229233 const maybeJsx = babelTransform ( {
230234 ssr : this . environment . config . consumer === "server" ,
231235 media : result . mediaType ,
232236 id,
233237 code,
234238 isDev,
239+ inputSourceMap : parseSourceMap ( result . sourceMap ) ,
235240 } ) ;
236241 if ( maybeJsx ) {
237242 return maybeJsx ;
@@ -279,10 +284,12 @@ export function deno(): Plugin {
279284 return ;
280285 }
281286
282- const code = new TextDecoder ( ) . decode ( result . code ) ;
287+ const code = decoder . decode ( result . code ) ;
288+ const map = parseSourceMap ( result . sourceMap ) ;
283289
284290 return {
285291 code,
292+ map,
286293 } ;
287294 } ,
288295 } ,
@@ -375,13 +382,14 @@ function babelTransform(
375382 code : string ;
376383 id : string ;
377384 isDev : boolean ;
385+ inputSourceMap : babel . TransformOptions [ "inputSourceMap" ] ;
378386 } ,
379387) {
380388 if ( ! isJsMediaType ( options . media ) ) {
381389 return null ;
382390 }
383391
384- const { ssr, code, id, isDev } = options ;
392+ const { ssr, code, id, isDev, inputSourceMap } = options ;
385393
386394 const presets : babel . PluginItem [ ] = [ ] ;
387395 if (
@@ -400,6 +408,7 @@ function babelTransform(
400408 const result = babel . transformSync ( code , {
401409 filename : id ,
402410 babelrc : false ,
411+ inputSourceMap,
403412 sourceMaps : "both" ,
404413 presets : presets ,
405414 plugins : [ httpAbsolute ( url ) ] ,
@@ -415,3 +424,10 @@ function babelTransform(
415424
416425 return null ;
417426}
427+
428+ function parseSourceMap (
429+ sourceMap : ModuleLoadResponse [ "sourceMap" ] ,
430+ ) : babel . TransformOptions [ "inputSourceMap" ] {
431+ if ( ! sourceMap ) return undefined ;
432+ return JSON . parse ( decoder . decode ( sourceMap ) ) ;
433+ }
0 commit comments