| 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 | 
| } |