fix(compiler-sfc): respect sfc parse options in cache key

This commit is contained in:
Evan You 2023-12-30 20:38:58 +08:00
parent b010cb9939
commit b8d58ec4f4
1 changed files with 23 additions and 9 deletions

View File

@ -103,9 +103,30 @@ export interface SFCParseResult {
export const parseCache = createCache<SFCParseResult>()
function genCacheKey(source: string, options: SFCParseOptions): string {
return (
source +
JSON.stringify(
{
...options,
compiler: { parse: options.compiler?.parse },
},
(_, val) => (typeof val === 'function' ? val.toString() : val),
)
)
}
export function parse(
source: string,
{
options: SFCParseOptions = {},
): SFCParseResult {
const sourceKey = genCacheKey(source, options)
const cache = parseCache.get(sourceKey)
if (cache) {
return cache
}
const {
sourceMap = true,
filename = DEFAULT_FILENAME,
sourceRoot = '',
@ -114,14 +135,7 @@ export function parse(
compiler = CompilerDOM,
templateParseOptions = {},
parseExpressions = true,
}: SFCParseOptions = {},
): SFCParseResult {
const sourceKey =
source + sourceMap + filename + sourceRoot + pad + compiler.parse
const cache = parseCache.get(sourceKey)
if (cache) {
return cache
}
} = options
const descriptor: SFCDescriptor = {
filename,