@@ -42,7 +42,11 @@ export async function transformMain(
4242 const hasScoped = descriptor . styles . some ( ( s ) => s . scoped )
4343
4444 // script
45- const { code : scriptCode , map } = await genScriptCode ( descriptor , options )
45+ const { code : scriptCode , map } = await genScriptCode (
46+ descriptor ,
47+ options ,
48+ pluginContext
49+ )
4650
4751 // template
4852 // Check if we can use compile template as inlined render function
@@ -57,7 +61,7 @@ export async function transformMain(
5761 let templateCode = ''
5862 let templateMap
5963 if ( hasTemplateImport ) {
60- ; ( { code : templateCode , map : templateMap } = genTemplateCode (
64+ ; ( { code : templateCode , map : templateMap } = await genTemplateCode (
6165 descriptor ,
6266 options ,
6367 pluginContext
@@ -71,10 +75,10 @@ export async function transformMain(
7175 : ''
7276
7377 // styles
74- const stylesCode = genStyleCode ( descriptor )
78+ const stylesCode = await genStyleCode ( descriptor , pluginContext )
7579
7680 // custom blocks
77- const customBlocksCode = genCustomBlockCode ( descriptor )
81+ const customBlocksCode = await genCustomBlockCode ( descriptor , pluginContext )
7882
7983 const output : string [ ] = [
8084 scriptCode ,
@@ -148,7 +152,7 @@ export async function transformMain(
148152 }
149153}
150154
151- function genTemplateCode (
155+ async function genTemplateCode (
152156 descriptor : SFCDescriptor ,
153157 options : ResolvedOptions ,
154158 pluginContext : PluginContext
@@ -167,7 +171,7 @@ function genTemplateCode(
167171 )
168172 } else {
169173 if ( template . src ) {
170- linkSrcToDescriptor ( template . src , descriptor )
174+ await linkSrcToDescriptor ( template . src , descriptor , pluginContext )
171175 }
172176 const src = template . src || descriptor . filename
173177 const srcQuery = template . src ? `&src` : ``
@@ -184,7 +188,8 @@ function genTemplateCode(
184188
185189async function genScriptCode (
186190 descriptor : SFCDescriptor ,
187- options : ResolvedOptions
191+ options : ResolvedOptions ,
192+ pluginContext : PluginContext
188193) : Promise < {
189194 code : string
190195 map : RawSourceMap
@@ -213,7 +218,7 @@ async function genScriptCode(
213218 }
214219 } else {
215220 if ( script . src ) {
216- linkSrcToDescriptor ( script . src , descriptor )
221+ await linkSrcToDescriptor ( script . src , descriptor , pluginContext )
217222 }
218223 const src = script . src || descriptor . filename
219224 const langFallback = ( script . src && path . extname ( src ) . slice ( 1 ) ) || 'js'
@@ -231,13 +236,17 @@ async function genScriptCode(
231236 }
232237}
233238
234- function genStyleCode ( descriptor : SFCDescriptor ) {
239+ async function genStyleCode (
240+ descriptor : SFCDescriptor ,
241+ pluginContext : PluginContext
242+ ) {
235243 let stylesCode = ``
236244 let hasCSSModules = false
237245 if ( descriptor . styles . length ) {
238- descriptor . styles . forEach ( ( style , i ) => {
246+ for ( let i = 0 ; i < descriptor . styles . length ; i ++ ) {
247+ const style = descriptor . styles [ i ]
239248 if ( style . src ) {
240- linkSrcToDescriptor ( style . src , descriptor )
249+ await linkSrcToDescriptor ( style . src , descriptor , pluginContext )
241250 }
242251 const src = style . src || descriptor . filename
243252 // do not include module in default query, since we use it to indicate
@@ -256,16 +265,20 @@ function genStyleCode(descriptor: SFCDescriptor) {
256265 stylesCode += `\nimport ${ JSON . stringify ( styleRequest ) } `
257266 }
258267 // TODO SSR critical CSS collection
259- } )
268+ }
260269 }
261270 return stylesCode
262271}
263272
264- function genCustomBlockCode ( descriptor : SFCDescriptor ) {
273+ async function genCustomBlockCode (
274+ descriptor : SFCDescriptor ,
275+ pluginContext : PluginContext
276+ ) {
265277 let code = ''
266- descriptor . customBlocks . forEach ( ( block , index ) => {
278+ for ( let index = 0 ; index < descriptor . customBlocks . length ; index ++ ) {
279+ const block = descriptor . customBlocks [ index ]
267280 if ( block . src ) {
268- linkSrcToDescriptor ( block . src , descriptor )
281+ await linkSrcToDescriptor ( block . src , descriptor , pluginContext )
269282 }
270283 const src = block . src || descriptor . filename
271284 const attrsQuery = attrsToQuery ( block . attrs , block . type )
@@ -274,7 +287,7 @@ function genCustomBlockCode(descriptor: SFCDescriptor) {
274287 const request = JSON . stringify ( src + query )
275288 code += `import block${ index } from ${ request } \n`
276289 code += `if (typeof block${ index } === 'function') block${ index } (_sfc_main)\n`
277- } )
290+ }
278291 return code
279292}
280293
@@ -298,11 +311,13 @@ function genCSSModulesCode(
298311 * with its owner SFC descriptor so that we can get the information about
299312 * the owner SFC when compiling that file in the transform phase.
300313 */
301- function linkSrcToDescriptor ( src : string , descriptor : SFCDescriptor ) {
302- const srcFile = path . posix . resolve (
303- path . posix . dirname ( descriptor . filename ) ,
304- src
305- )
314+ async function linkSrcToDescriptor (
315+ src : string ,
316+ descriptor : SFCDescriptor ,
317+ pluginContext : PluginContext
318+ ) {
319+ const srcFile =
320+ ( await pluginContext . resolve ( src , descriptor . filename ) ) ?. id || src
306321 setDescriptor ( srcFile , descriptor )
307322}
308323
0 commit comments