@@ -15,7 +15,7 @@ import { resolveScript } from './script'
15
15
import { transformTemplateInMain } from './template'
16
16
import { isOnlyTemplateChanged } from './handleHotUpdate'
17
17
18
- export function genSfcFacade (
18
+ export async function genSfcFacade (
19
19
code : string ,
20
20
filename : string ,
21
21
options : Options ,
@@ -52,7 +52,7 @@ export function genSfcFacade(
52
52
const hasScoped = descriptor . styles . some ( ( s ) => s . scoped )
53
53
54
54
// script
55
- const { code : scriptCode , map } = genScriptCode (
55
+ const { code : scriptCode , map } = await genScriptCode (
56
56
descriptor ,
57
57
scopeId ,
58
58
isProduction ,
@@ -166,7 +166,7 @@ function genTemplateCode(
166
166
}
167
167
}
168
168
169
- function genScriptCode (
169
+ async function genScriptCode (
170
170
descriptor : SFCDescriptor ,
171
171
scopeId : string ,
172
172
isProd : boolean ,
@@ -186,9 +186,23 @@ function genScriptCode(
186
186
)
187
187
if ( script ) {
188
188
// 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
+ ) {
190
194
scriptCode = rewriteDefault ( script . content , `_sfc_main` )
191
195
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
+ }
192
206
} else {
193
207
const src = script . src || descriptor . filename
194
208
const attrsQuery = attrsToQuery ( script . attrs , 'js' )
0 commit comments