From 5f0394a5ab88c82c74e240161499721f63d5462e Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 21 Apr 2023 15:20:12 +0800 Subject: [PATCH] feat(deprecation): deprecate @vnode hooks in favor of vue: prefix --- packages/compiler-core/src/errors.ts | 6 ++++++ packages/compiler-core/src/transforms/vOn.ts | 6 +++++- packages/compiler-dom/src/errors.ts | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/compiler-core/src/errors.ts b/packages/compiler-core/src/errors.ts index db7d0eb393d..9a91b91a650 100644 --- a/packages/compiler-core/src/errors.ts +++ b/packages/compiler-core/src/errors.ts @@ -97,6 +97,9 @@ export const enum ErrorCodes { X_CACHE_HANDLER_NOT_SUPPORTED, X_SCOPE_ID_NOT_SUPPORTED, + // deprecations + DEPRECATION_VNODE_HOOKS, + // Special value for higher-order compilers to pick up the last code // to avoid collision of error codes. This should always be kept as the last // item. @@ -179,6 +182,9 @@ export const errorMessages: Record = { [ErrorCodes.X_CACHE_HANDLER_NOT_SUPPORTED]: `"cacheHandlers" option is only supported when the "prefixIdentifiers" option is enabled.`, [ErrorCodes.X_SCOPE_ID_NOT_SUPPORTED]: `"scopeId" option is only supported in module mode.`, + // deprecations + [ErrorCodes.DEPRECATION_VNODE_HOOKS]: `@vnode-* hooks in templates are deprecated. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted.`, + // just to fulfill types [ErrorCodes.__EXTEND_POINT__]: `` } diff --git a/packages/compiler-core/src/transforms/vOn.ts b/packages/compiler-core/src/transforms/vOn.ts index 9fe8b6ab61c..3deee202418 100644 --- a/packages/compiler-core/src/transforms/vOn.ts +++ b/packages/compiler-core/src/transforms/vOn.ts @@ -43,7 +43,11 @@ export const transformOn: DirectiveTransform = ( if (arg.type === NodeTypes.SIMPLE_EXPRESSION) { if (arg.isStatic) { let rawName = arg.content - // TODO deprecate @vnodeXXX usage + if (__DEV__ && rawName.startsWith('vnode')) { + context.onWarn( + createCompilerError(ErrorCodes.DEPRECATION_VNODE_HOOKS, arg.loc) + ) + } if (rawName.startsWith('vue:')) { rawName = `vnode-${rawName.slice(4)}` } diff --git a/packages/compiler-dom/src/errors.ts b/packages/compiler-dom/src/errors.ts index 620d62da822..d129dc08d4e 100644 --- a/packages/compiler-dom/src/errors.ts +++ b/packages/compiler-dom/src/errors.ts @@ -21,7 +21,7 @@ export function createDOMCompilerError( } export const enum DOMErrorCodes { - X_V_HTML_NO_EXPRESSION = 51 /* ErrorCodes.__EXTEND_POINT__ */, + X_V_HTML_NO_EXPRESSION = 52 /* ErrorCodes.__EXTEND_POINT__ */, X_V_HTML_WITH_CHILDREN, X_V_TEXT_NO_EXPRESSION, X_V_TEXT_WITH_CHILDREN,