]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor: remove rarely used argument in makeMap + optimize perf
authorEvan You <evan@vuejs.org>
Sat, 7 Sep 2024 07:39:56 +0000 (15:39 +0800)
committerEvan You <evan@vuejs.org>
Sat, 7 Sep 2024 07:40:17 +0000 (15:40 +0800)
packages/compiler-dom/src/transforms/vOn.ts
packages/shared/src/makeMap.ts

index 618d12f715365088d968014a984836db4d24e5b2..1bb5763188bd0417c1cb17ed308f7a6b86c97fb8 100644 (file)
@@ -28,10 +28,7 @@ const isNonKeyModifier = /*@__PURE__*/ makeMap(
 )
 // left & right could be mouse or key modifiers based on event type
 const maybeKeyModifier = /*@__PURE__*/ makeMap('left,right')
-const isKeyboardEvent = /*@__PURE__*/ makeMap(
-  `onkeyup,onkeydown,onkeypress`,
-  true,
-)
+const isKeyboardEvent = /*@__PURE__*/ makeMap(`onkeyup,onkeydown,onkeypress`)
 
 const resolveModifiers = (
   key: ExpressionNode,
@@ -64,7 +61,9 @@ const resolveModifiers = (
       // runtimeModifiers: modifiers that needs runtime guards
       if (maybeKeyModifier(modifier)) {
         if (isStaticExp(key)) {
-          if (isKeyboardEvent((key as SimpleExpressionNode).content)) {
+          if (
+            isKeyboardEvent((key as SimpleExpressionNode).content.toLowerCase())
+          ) {
             keyModifiers.push(modifier)
           } else {
             nonKeyModifiers.push(modifier)
@@ -133,7 +132,7 @@ export const transformOn: DirectiveTransform = (dir, node, context) => {
     if (
       keyModifiers.length &&
       // if event name is dynamic, always wrap with keys guard
-      (!isStaticExp(key) || isKeyboardEvent(key.content))
+      (!isStaticExp(key) || isKeyboardEvent(key.content.toLowerCase()))
     ) {
       handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [
         handlerExp,
index 3fa2b09c94a2a4e4b3c07c0d5f3d1c1df9499a81..e85efe21e5b33d545ca74452ccb778b0d9f4123a 100644 (file)
@@ -7,12 +7,8 @@
  */
 
 /*! #__NO_SIDE_EFFECTS__ */
-export function makeMap(
-  str: string,
-  expectsLowerCase?: boolean,
-): (key: string) => boolean {
-  const set = new Set(str.split(','))
-  return expectsLowerCase
-    ? val => set.has(val.toLowerCase())
-    : val => set.has(val)
+export function makeMap(str: string): (key: string) => boolean {
+  const map = Object.create(null)
+  for (const key of str.split(',')) map[key] = 1
+  return val => val in map
 }