1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- const fs = require('fs')
- const path = require('path')
- const { resolveCompiler } = require('./compiler')
- const cache = new Map()
- exports.setDescriptor = function setDescriptor(filename, entry) {
- cache.set(cleanQuery(filename), entry)
- }
- exports.getDescriptor = function getDescriptor(
- filename,
- options,
- loaderContext
- ) {
- filename = cleanQuery(filename)
- if (cache.has(filename)) {
- return cache.get(filename)
- }
- // This function should only be called after the descriptor has been
- // cached by the main loader.
- // If this is somehow called without a cache hit, it's probably due to sub
- // loaders being run in separate threads. The only way to deal with this is to
- // read from disk directly...
- const source = fs.readFileSync(filename, 'utf-8')
- const sourceRoot = path.dirname(
- path.relative(loaderContext.rootContext, loaderContext.resourcePath)
- )
- const { compiler, templateCompiler } = resolveCompiler(
- loaderContext.rootContext
- )
- const descriptor = compiler.parse({
- source,
- compiler: options.compiler || templateCompiler,
- filename,
- sourceRoot,
- needMap: loaderContext.sourceMap
- })
- cache.set(filename, descriptor)
- return descriptor
- }
- function cleanQuery(str) {
- const i = str.indexOf('?')
- return i > 0 ? str.slice(0, i) : str
- }
|