From 62bac644e1586eaa3963573613560ddf1294dc35 Mon Sep 17 00:00:00 2001 From: Zakir Motala Date: Thu, 16 Apr 2026 23:00:45 +0200 Subject: [PATCH] refactor: extract shared compiler options resolution logic Removes code duplication between runtime-core and server-renderer by introducing a shared getResolvedCompilerOptions helper. This addresses a TODO in ssrCompile.ts and improves maintainability. --- packages/runtime-core/src/component.ts | 36 ++++++++++++------- packages/runtime-core/src/index.ts | 3 ++ .../server-renderer/src/helpers/ssrCompile.ts | 17 ++------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 4e1aa5e4d38..847ca72d260 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -983,6 +983,28 @@ export function registerRuntimeCompiler(_compile: any): void { // dev only export const isRuntimeOnly = (): boolean => !compile +/** + * @internal + */ +export function getResolvedCompilerOptions( + instance: ComponentInternalInstance, +): CompilerOptions { + const Component = instance.type as ComponentOptions + const { isCustomElement, compilerOptions } = instance.appContext.config + const { delimiters, compilerOptions: componentCompilerOptions } = Component + + return extend( + extend( + { + isCustomElement, + delimiters, + }, + compilerOptions, + ), + componentCompilerOptions, + ) +} + export function finishComponentSetup( instance: ComponentInternalInstance, isSSR: boolean, @@ -1014,19 +1036,7 @@ export function finishComponentSetup( if (__DEV__) { startMeasure(instance, `compile`) } - const { isCustomElement, compilerOptions } = instance.appContext.config - const { delimiters, compilerOptions: componentCompilerOptions } = - Component - const finalCompilerOptions: CompilerOptions = extend( - extend( - { - isCustomElement, - delimiters, - }, - compilerOptions, - ), - componentCompilerOptions, - ) + const finalCompilerOptions = getResolvedCompilerOptions(instance) if (__COMPAT__) { // pass runtime compat config into the compiler finalCompilerOptions.compatConfig = Object.create(globalCompatConfig) diff --git a/packages/runtime-core/src/index.ts b/packages/runtime-core/src/index.ts index c8468334e33..1bfb87936b9 100644 --- a/packages/runtime-core/src/index.ts +++ b/packages/runtime-core/src/index.ts @@ -395,6 +395,7 @@ export { transformVNodeArgs } from './vnode' import { createComponentInstance, getComponentPublicInstance, + getResolvedCompilerOptions, setupComponent, } from './component' import { renderComponentRoot } from './componentRenderUtils' @@ -414,6 +415,7 @@ const _ssrUtils: { ensureValidVNode: typeof ensureValidVNode pushWarningContext: typeof pushWarningContext popWarningContext: typeof popWarningContext + getResolvedCompilerOptions: typeof getResolvedCompilerOptions } = { createComponentInstance, setupComponent, @@ -425,6 +427,7 @@ const _ssrUtils: { ensureValidVNode, pushWarningContext, popWarningContext, + getResolvedCompilerOptions, } /** diff --git a/packages/server-renderer/src/helpers/ssrCompile.ts b/packages/server-renderer/src/helpers/ssrCompile.ts index 8412a65e843..066d02e5c3a 100644 --- a/packages/server-renderer/src/helpers/ssrCompile.ts +++ b/packages/server-renderer/src/helpers/ssrCompile.ts @@ -1,6 +1,7 @@ import { type ComponentInternalInstance, type ComponentOptions, + ssrUtils, warn, } from 'vue' import { compile } from '@vue/compiler-ssr' @@ -32,21 +33,7 @@ export function ssrCompile( ) } - // TODO: This is copied from runtime-core/src/component.ts and should probably be refactored - const Component = instance.type as ComponentOptions - const { isCustomElement, compilerOptions } = instance.appContext.config - const { delimiters, compilerOptions: componentCompilerOptions } = Component - - const finalCompilerOptions: CompilerOptions = extend( - extend( - { - isCustomElement, - delimiters, - }, - compilerOptions, - ), - componentCompilerOptions, - ) + const finalCompilerOptions = ssrUtils.getResolvedCompilerOptions(instance) finalCompilerOptions.isCustomElement = finalCompilerOptions.isCustomElement || NO