diff --git a/packages/runtime-core/src/compat/componentVModel.ts b/packages/runtime-core/src/compat/componentVModel.ts index 7a9fea9bff8..a994a67729d 100644 --- a/packages/runtime-core/src/compat/componentVModel.ts +++ b/packages/runtime-core/src/compat/componentVModel.ts @@ -1,5 +1,6 @@ import { ShapeFlags, extend } from '@vue/shared' import type { ComponentInternalInstance, ComponentOptions } from '../component' +import { createAppContext } from '../apiCreateApp' import { ErrorCodes, callWithErrorHandling } from '../errorHandling' import type { VNode } from '../vnode' import { popWarningContext, pushWarningContext } from '../warning' @@ -31,7 +32,14 @@ export function convertLegacyVModelProps(vnode: VNode): void { if (__DEV__ && !warnedTypes.has(comp)) { pushWarningContext(vnode) - warnDeprecation(DeprecationTypes.COMPONENT_V_MODEL, { type } as any, comp) + warnDeprecation( + DeprecationTypes.COMPONENT_V_MODEL, + { + type, + appContext: (vnode.ctx && vnode.ctx.appContext) || createAppContext(), + } as any, + comp, + ) popWarningContext() warnedTypes.add(comp) } diff --git a/packages/vue-compat/__tests__/componentVModel.spec.ts b/packages/vue-compat/__tests__/componentVModel.spec.ts index 5ef19954734..0c85d3f289e 100644 --- a/packages/vue-compat/__tests__/componentVModel.spec.ts +++ b/packages/vue-compat/__tests__/componentVModel.spec.ts @@ -140,4 +140,41 @@ describe('COMPONENT_V_MODEL', () => { template: ``, }) }) + + // #14202 + test('should handle v-model deprecation warning with missing appContext', async () => { + const ChildComponent = { + template: `