wip: tests for compiler compat

This commit is contained in:
Evan You
2021-04-30 15:50:32 -04:00
parent b4c92ccf6b
commit bd3cc4d2c7
9 changed files with 271 additions and 79 deletions

View File

@@ -9,8 +9,10 @@ import {
ExpressionNode,
SimpleExpressionNode,
isStaticExp,
warnDeprecation,
CompilerDeprecationTypes
CompilerDeprecationTypes,
TransformContext,
SourceLocation,
checkCompatEnabled
} from '@vue/compiler-core'
import { V_ON_WITH_MODIFIERS, V_ON_WITH_KEYS } from '../runtimeHelpers'
import { makeMap, capitalize } from '@vue/shared'
@@ -31,7 +33,12 @@ const isKeyboardEvent = /*#__PURE__*/ makeMap(
true
)
const resolveModifiers = (key: ExpressionNode, modifiers: string[]) => {
const resolveModifiers = (
key: ExpressionNode,
modifiers: string[],
context: TransformContext,
loc: SourceLocation
) => {
const keyModifiers = []
const nonKeyModifiers = []
const eventOptionModifiers = []
@@ -39,7 +46,17 @@ const resolveModifiers = (key: ExpressionNode, modifiers: string[]) => {
for (let i = 0; i < modifiers.length; i++) {
const modifier = modifiers[i]
if (isEventOptionModifier(modifier)) {
if (
__COMPAT__ &&
modifier === 'native' &&
checkCompatEnabled(
CompilerDeprecationTypes.COMPILER_V_ON_NATIVE,
context,
loc
)
) {
eventOptionModifiers.push(modifier)
} else if (isEventOptionModifier(modifier)) {
// eventOptionModifiers: modifiers for addEventListener() options,
// e.g. .passive & .capture
eventOptionModifiers.push(modifier)
@@ -94,20 +111,12 @@ export const transformOn: DirectiveTransform = (dir, node, context) => {
const { modifiers } = dir
if (!modifiers.length) return baseResult
if (__COMPAT__ && __DEV__ && modifiers.includes('native')) {
warnDeprecation(
CompilerDeprecationTypes.COMPILER_V_ON_NATIVE,
context,
dir.loc
)
}
let { key, value: handlerExp } = baseResult.props[0]
const {
keyModifiers,
nonKeyModifiers,
eventOptionModifiers
} = resolveModifiers(key, modifiers)
} = resolveModifiers(key, modifiers, context, dir.loc)
// normalize click.right and click.middle since they don't actually fire
if (nonKeyModifiers.includes('right')) {