@@ -12,6 +12,7 @@ import {
1212 type SFCTemplateCompileOptions ,
1313 // eslint-disable-next-line import/no-duplicates
1414} from 'vue/compiler-sfc'
15+ import { computed , shallowRef } from 'vue'
1516import { resolveCompiler } from '../core/compiler'
1617import { getResolvedScript , typeDepToSFCMap } from '../core/script'
1718import { transformMain } from '../core/main'
@@ -142,29 +143,32 @@ function resolveOptions(rawOptions: Options): ResolvedOptions {
142143
143144export default createUnplugin < Options | undefined , false > (
144145 ( rawOptions = { } , meta ) => {
145- let options = resolveOptions ( rawOptions )
146- const { include, exclude, customElement, reactivityTransform } = options
146+ const options = shallowRef ( resolveOptions ( rawOptions ) )
147147
148- const filter = createFilter ( include , exclude )
148+ const filter = computed ( ( ) =>
149+ createFilter ( options . value . include , options . value . exclude )
150+ )
149151
150- const customElementFilter =
151- typeof customElement === 'boolean'
152- ? ( ) => customElement
153- : createFilter ( customElement )
152+ const customElementFilter = computed ( ( ) =>
153+ typeof options . value . customElement === 'boolean'
154+ ? ( ) => options . value . customElement as boolean
155+ : createFilter ( options . value . customElement )
156+ )
154157
155- const refTransformFilter =
156- reactivityTransform === false
158+ const refTransformFilter = computed ( ( ) =>
159+ options . value . reactivityTransform === false
157160 ? ( ) => false
158- : reactivityTransform === true
161+ : options . value . reactivityTransform === true
159162 ? createFilter ( / \. ( j | t ) s x ? $ / , / n o d e _ m o d u l e s / )
160- : createFilter ( reactivityTransform )
163+ : createFilter ( options . value . reactivityTransform )
164+ )
161165
162166 const api = {
163167 get options ( ) {
164- return options
168+ return options . value
165169 } ,
166170 set options ( value ) {
167- options = value
171+ options . value = value
168172 } ,
169173 version,
170174 }
@@ -175,14 +179,14 @@ export default createUnplugin<Options | undefined, false>(
175179 vite : {
176180 api,
177181 handleHotUpdate ( ctx ) {
178- if ( options . compiler . invalidateTypeCache ) {
179- options . compiler . invalidateTypeCache ( ctx . file )
182+ if ( options . value . compiler . invalidateTypeCache ) {
183+ options . value . compiler . invalidateTypeCache ( ctx . file )
180184 }
181185 if ( typeDepToSFCMap . has ( ctx . file ) ) {
182186 return handleTypeDepChange ( typeDepToSFCMap . get ( ctx . file ) ! , ctx )
183187 }
184- if ( filter ( ctx . file ) ) {
185- return handleHotUpdate ( ctx , options )
188+ if ( filter . value ( ctx . file ) ) {
189+ return handleHotUpdate ( ctx , options . value )
186190 }
187191 } ,
188192
@@ -205,21 +209,21 @@ export default createUnplugin<Options | undefined, false>(
205209 } ,
206210
207211 configResolved ( config ) {
208- options = {
209- ...options ,
212+ options . value = {
213+ ...options . value ,
210214 root : config . root ,
211215 sourceMap :
212216 config . command === 'build' ? ! ! config . build . sourcemap : true ,
213217 cssDevSourcemap : config . css ?. devSourcemap ?? false ,
214218 isProduction : config . isProduction ,
215- compiler : options . compiler || resolveCompiler ( config . root ) ,
219+ compiler : options . value . compiler || resolveCompiler ( config . root ) ,
216220 devToolsEnabled :
217221 ! ! config . define ! . __VUE_PROD_DEVTOOLS__ || ! config . isProduction ,
218222 }
219223 } ,
220224
221225 configureServer ( server ) {
222- options . devServer = server
226+ options . value . devServer = server
223227 } ,
224228 } ,
225229
@@ -228,11 +232,11 @@ export default createUnplugin<Options | undefined, false>(
228232 } ,
229233
230234 buildStart ( ) {
231- const compiler = ( options . compiler =
232- options . compiler || resolveCompiler ( options . root ) )
235+ const compiler = ( options . value . compiler =
236+ options . value . compiler || resolveCompiler ( options . value . root ) )
233237
234238 if ( compiler . invalidateTypeCache ) {
235- options . devServer ?. watcher . on ( 'unlink' , ( file ) => {
239+ options . value . devServer ?. watcher . on ( 'unlink' , ( file ) => {
236240 compiler . invalidateTypeCache ( file )
237241 } )
238242 }
@@ -257,7 +261,7 @@ export default createUnplugin<Options | undefined, false>(
257261 } ,
258262
259263 load ( id ) {
260- const ssr = options . ssr
264+ const ssr = options . value . ssr
261265 if ( id === EXPORT_HELPER_ID ) {
262266 return helperCode
263267 }
@@ -268,7 +272,7 @@ export default createUnplugin<Options | undefined, false>(
268272 if ( query . src ) {
269273 return fs . readFileSync ( filename , 'utf-8' )
270274 }
271- const descriptor = getDescriptor ( filename , options ) !
275+ const descriptor = getDescriptor ( filename , options . value ) !
272276 let block : SFCBlock | null | undefined
273277 if ( query . type === 'script' ) {
274278 // handle <script> + <script setup> merge via compileScript()
@@ -294,18 +298,22 @@ export default createUnplugin<Options | undefined, false>(
294298 if ( query . raw || query . url ) return false
295299
296300 // Not Vue SFC and refTransform
297- if ( ! filter ( filename ) && ! query . vue && ! refTransformFilter ( filename ) )
301+ if (
302+ ! filter . value ( filename ) &&
303+ ! query . vue &&
304+ ! refTransformFilter . value ( filename )
305+ )
298306 return false
299307
300308 return true
301309 } ,
302310
303311 transform ( code , id ) {
304- const ssr = options . ssr
312+ const ssr = options . value . ssr
305313 const { filename, query } = parseVueRequest ( id )
306- if ( ! filter ( filename ) && ! query . vue ) {
307- if ( options . compiler . shouldTransformRef ( code ) ) {
308- return options . compiler . transformRef ( code , {
314+ if ( ! filter . value ( filename ) && ! query . vue ) {
315+ if ( options . value . compiler . shouldTransformRef ( code ) ) {
316+ return options . value . compiler . transformRef ( code , {
309317 filename,
310318 sourceMap : true ,
311319 } )
@@ -319,23 +327,23 @@ export default createUnplugin<Options | undefined, false>(
319327 return transformMain (
320328 code ,
321329 filename ,
322- options ,
330+ options . value ,
323331 context ,
324332 ssr ,
325- customElementFilter ( filename )
333+ customElementFilter . value ( filename )
326334 )
327335 } else {
328336 // sub block request
329337 const descriptor = query . src
330338 ? getSrcDescriptor ( filename , query ) ||
331339 getTempSrcDescriptor ( filename , query )
332- : getDescriptor ( filename , options ) !
340+ : getDescriptor ( filename , options . value ) !
333341
334342 if ( query . type === 'template' ) {
335343 return transformTemplateAsModule (
336344 code ,
337345 descriptor ,
338- options ,
346+ options . value ,
339347 context ,
340348 ssr
341349 )
@@ -344,7 +352,7 @@ export default createUnplugin<Options | undefined, false>(
344352 code ,
345353 descriptor ,
346354 Number ( query . index || 0 ) ,
347- options ,
355+ options . value ,
348356 this ,
349357 filename
350358 )
0 commit comments