feat: support component-level compilerOptions when using runtime compiler
- The `delimiters` component option is deprecated. Use `compilerOptions.delimiters` instead.
This commit is contained in:
@@ -578,6 +578,13 @@ function setupStatefulComponent(
|
||||
validateDirectiveName(names[i])
|
||||
}
|
||||
}
|
||||
if (Component.compilerOptions && isRuntimeOnly()) {
|
||||
warn(
|
||||
`"compilerOptions" is only supported when using a build of Vue that ` +
|
||||
`includes the runtime compiler. Since you are using a runtime-only ` +
|
||||
`build, the options should be passed via your build tool config instead.`
|
||||
)
|
||||
}
|
||||
}
|
||||
// 0. create render proxy property access cache
|
||||
instance.accessCache = Object.create(null)
|
||||
@@ -728,12 +735,19 @@ export function finishComponentSetup(
|
||||
startMeasure(instance, `compile`)
|
||||
}
|
||||
const { isCustomElement, compilerOptions } = instance.appContext.config
|
||||
const {
|
||||
delimiters,
|
||||
compilerOptions: componentCompilerOptions
|
||||
} = Component
|
||||
const finalCompilerOptions: CompilerOptions = extend(
|
||||
{
|
||||
isCustomElement: isCustomElement || NO,
|
||||
delimiters: Component.delimiters
|
||||
},
|
||||
compilerOptions
|
||||
extend(
|
||||
{
|
||||
isCustomElement,
|
||||
delimiters
|
||||
},
|
||||
compilerOptions
|
||||
),
|
||||
componentCompilerOptions
|
||||
)
|
||||
if (__COMPAT__) {
|
||||
// pass runtime compat config into the compiler
|
||||
|
||||
@@ -150,6 +150,9 @@ export interface ComponentOptionsBase<
|
||||
expose?: string[]
|
||||
serverPrefetch?(): Promise<any>
|
||||
|
||||
// Runtime compiler only -----------------------------------------------------
|
||||
compilerOptions?: RuntimeCompilerOptions
|
||||
|
||||
// Internal ------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
@@ -203,6 +206,16 @@ export interface ComponentOptionsBase<
|
||||
__defaults?: Defaults
|
||||
}
|
||||
|
||||
/**
|
||||
* Subset of compiler options that makes sense for the runtime.
|
||||
*/
|
||||
export interface RuntimeCompilerOptions {
|
||||
isCustomElement?: (tag: string) => boolean
|
||||
whitespace?: 'preserve' | 'condense'
|
||||
comments?: boolean
|
||||
delimiters?: [string, string]
|
||||
}
|
||||
|
||||
export type ComponentOptionsWithoutProps<
|
||||
Props = {},
|
||||
RawBindings = {},
|
||||
@@ -446,7 +459,10 @@ interface LegacyOptions<
|
||||
renderTriggered?: DebuggerHook
|
||||
errorCaptured?: ErrorCapturedHook
|
||||
|
||||
// runtime compile only
|
||||
/**
|
||||
* runtime compile only
|
||||
* @deprecated use `compilerOptions.delimiters` instead.
|
||||
*/
|
||||
delimiters?: [string, string]
|
||||
|
||||
/**
|
||||
|
||||
@@ -179,7 +179,8 @@ export {
|
||||
ComponentOptionsBase,
|
||||
RenderFunction,
|
||||
MethodOptions,
|
||||
ComputedOptions
|
||||
ComputedOptions,
|
||||
RuntimeCompilerOptions
|
||||
} from './componentOptions'
|
||||
export { EmitsOptions, ObjectEmitsOptions } from './componentEmits'
|
||||
export {
|
||||
|
||||
Reference in New Issue
Block a user