Skip to content

Commit

Permalink
fix: pass compilerOptions to sfc parse & re-enable AST reuse
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx990803 committed Dec 30, 2023
1 parent 071f30d commit d2a2e05
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 8 deletions.
8 changes: 6 additions & 2 deletions src/descriptorCache.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as fs from 'fs'
import type { SFCDescriptor } from 'vue/compiler-sfc'
import type { CompilerOptions, SFCDescriptor } from 'vue/compiler-sfc'
import { compiler } from './compiler'

const { parse } = compiler
Expand All @@ -9,7 +9,10 @@ export function setDescriptor(filename: string, entry: SFCDescriptor) {
descriptorCache.set(cleanQuery(filename), entry)
}

export function getDescriptor(filename: string): SFCDescriptor {
export function getDescriptor(
filename: string,
compilerOptions?: CompilerOptions
): SFCDescriptor {
filename = cleanQuery(filename)
if (descriptorCache.has(filename)) {
return descriptorCache.get(filename)!
Expand All @@ -24,6 +27,7 @@ export function getDescriptor(filename: string): SFCDescriptor {
const { descriptor } = parse(source, {
filename,
sourceMap: true,
templateParseOptions: compilerOptions,
})
descriptorCache.set(filename, descriptor)
return descriptor
Expand Down
5 changes: 4 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ export default function loader(
const { descriptor, errors } = parse(source, {
filename,
sourceMap,
templateParseOptions: options.compilerOptions,
})

const asCustomElement =
Expand Down Expand Up @@ -363,7 +364,9 @@ export default function loader(
if (!propsToAttach.length) {
code += `\n\nconst __exports__ = script;`
} else {
code += `\n\nimport exportComponent from ${stringifyRequest(exportHelperPath)}`
code += `\n\nimport exportComponent from ${stringifyRequest(
exportHelperPath
)}`
code += `\nconst __exports__ = /*#__PURE__*/exportComponent(script, [${propsToAttach
.map(([key, val]) => `['${key}',${val}]`)
.join(',')}])`
Expand Down
13 changes: 8 additions & 5 deletions src/templateLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ const TemplateLoader: LoaderDefinitionFunction = function (source, inMap: any) {
loaderContext.mode === 'production' || process.env.NODE_ENV === 'production'
const query = qs.parse(loaderContext.resourceQuery.slice(1))
const scopeId = query.id as string
const descriptor = getDescriptor(loaderContext.resourcePath)
const descriptor = getDescriptor(
loaderContext.resourcePath,
options.compilerOptions
)
const script = resolveScript(
descriptor,
query.id as string,
Expand All @@ -44,10 +47,10 @@ const TemplateLoader: LoaderDefinitionFunction = function (source, inMap: any) {

const compiled = compileTemplate({
source,
// ast:
// descriptor.template && !descriptor.template.lang
// ? descriptor.template.ast
// : undefined,
ast:
descriptor.template && !descriptor.template.lang
? descriptor.template.ast
: undefined,
filename: loaderContext.resourcePath,
inMap,
id: scopeId,
Expand Down

0 comments on commit d2a2e05

Please sign in to comment.