import config from 'core/config' import { hyphenate, isArray } from 'shared/util' function isKeyNotMatch(expect: T | Array, actual: T): boolean { if (isArray(expect)) { return expect.indexOf(actual) === -1 } else { return expect !== actual } } /** * Runtime helper for checking keyCodes from config. * exposed as Vue.prototype._k * passing in eventKeyName as last argument separately for backwards compat */ export function checkKeyCodes( eventKeyCode: number, key: string, builtInKeyCode?: number | Array, eventKeyName?: string, builtInKeyName?: string | Array ): boolean | null | undefined { const mappedKeyCode = config.keyCodes[key] || builtInKeyCode if (builtInKeyName && eventKeyName && !config.keyCodes[key]) { return isKeyNotMatch(builtInKeyName, eventKeyName) } else if (mappedKeyCode) { return isKeyNotMatch(mappedKeyCode, eventKeyCode) } else if (eventKeyName) { return hyphenate(eventKeyName) !== key } return eventKeyCode === undefined }