52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const { resolveCompiler } = require('./compiler')
 | |
| 
 | |
| const clientCache = new WeakMap()
 | |
| const serverCache = new WeakMap()
 | |
| 
 | |
| exports.resolveScript = function resolveScript(
 | |
|   descriptor,
 | |
|   scopeId,
 | |
|   options,
 | |
|   loaderContext
 | |
| ) {
 | |
|   if (!descriptor.script && !descriptor.scriptSetup) {
 | |
|     return null
 | |
|   }
 | |
| 
 | |
|   const { compiler } = resolveCompiler(loaderContext.rootContext, loaderContext)
 | |
|   if (!compiler.compileScript) {
 | |
|     if (descriptor.scriptSetup) {
 | |
|       loaderContext.emitError(
 | |
|         'The version of Vue you are using does not support <script setup>. ' +
 | |
|           'Please upgrade to 2.7 or above.'
 | |
|       )
 | |
|     }
 | |
|     return descriptor.script
 | |
|   }
 | |
| 
 | |
|   const isProd =
 | |
|     loaderContext.mode === 'production' || process.env.NODE_ENV === 'production'
 | |
|   const isServer = options.optimizeSSR || loaderContext.target === 'node'
 | |
| 
 | |
|   const cacheToUse = isServer ? serverCache : clientCache
 | |
|   const cached = cacheToUse.get(descriptor)
 | |
|   if (cached) {
 | |
|     return cached
 | |
|   }
 | |
| 
 | |
|   let resolved = null
 | |
| 
 | |
|   try {
 | |
|     resolved = compiler.compileScript(descriptor, {
 | |
|       id: scopeId,
 | |
|       isProd,
 | |
|       babelParserPlugins: options.babelParserPlugins
 | |
|     })
 | |
|   } catch (e) {
 | |
|     loaderContext.emitError(e)
 | |
|   }
 | |
| 
 | |
|   cacheToUse.set(descriptor, resolved)
 | |
|   return resolved
 | |
| }
 | 
