@@ -15,7 +15,7 @@ import { resolveScript } from './script'
1515import { transformTemplateInMain } from './template'
1616import { isOnlyTemplateChanged } from './handleHotUpdate'
1717
18- export function genSfcFacade (
18+ export async function genSfcFacade (
1919 code : string ,
2020 filename : string ,
2121 options : Options ,
@@ -52,7 +52,7 @@ export function genSfcFacade(
5252 const hasScoped = descriptor . styles . some ( ( s ) => s . scoped )
5353
5454 // script
55- const { code : scriptCode , map } = genScriptCode (
55+ const { code : scriptCode , map } = await genScriptCode (
5656 descriptor ,
5757 scopeId ,
5858 isProduction ,
@@ -166,7 +166,7 @@ function genTemplateCode(
166166 }
167167}
168168
169- function genScriptCode (
169+ async function genScriptCode (
170170 descriptor : SFCDescriptor ,
171171 scopeId : string ,
172172 isProd : boolean ,
@@ -186,9 +186,23 @@ function genScriptCode(
186186 )
187187 if ( script ) {
188188 // js or ts can be directly placed in the main module
189- if ( ( ! script . lang || script . lang === 'ts' ) && ! script . src ) {
189+ if (
190+ ( ! script . lang ||
191+ ( script . lang === 'ts' && ( pluginContext as any ) . server ) ) &&
192+ ! script . src
193+ ) {
190194 scriptCode = rewriteDefault ( script . content , `_sfc_main` )
191195 map = script . map
196+ if ( script . lang === 'ts' ) {
197+ const result = await ( pluginContext as any ) . server . transformWithEsbuild (
198+ scriptCode ,
199+ descriptor . filename ,
200+ { loader : 'ts' } ,
201+ map
202+ )
203+ scriptCode = result . code
204+ map = result . map
205+ }
192206 } else {
193207 const src = script . src || descriptor . filename
194208 const attrsQuery = attrsToQuery ( script . attrs , 'js' )
0 commit comments