]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor(componentProps): extract validate prop name logic (#825)
authoryang <504575307@qq.com>
Mon, 16 Mar 2020 22:45:08 +0000 (06:45 +0800)
committerGitHub <noreply@github.com>
Mon, 16 Mar 2020 22:45:08 +0000 (18:45 -0400)
packages/runtime-core/src/componentProps.ts

index 67ba81b9b01f7f7af00e181a5f9451a5d48f0635..c2cbb473d6c9cdbb4819497cea8f0394b7ac78dd 100644 (file)
@@ -223,6 +223,15 @@ const normalizationMap = new WeakMap<
   NormalizedPropsOptions
 >()
 
+function validatePropName(key: string) {
+  if (key[0] !== '$') {
+    return true
+  } else if (__DEV__) {
+    warn(`Invalid prop name: "${key}" is a reserved property.`)
+  }
+  return false
+}
+
 function normalizePropsOptions(
   raw: ComponentPropsOptions | void
 ): NormalizedPropsOptions {
@@ -240,10 +249,8 @@ function normalizePropsOptions(
         warn(`props must be strings when using array syntax.`, raw[i])
       }
       const normalizedKey = camelize(raw[i])
-      if (normalizedKey[0] !== '$') {
+      if (validatePropName(normalizedKey)) {
         options[normalizedKey] = EMPTY_OBJ
-      } else if (__DEV__) {
-        warn(`Invalid prop name: "${normalizedKey}" is a reserved property.`)
       }
     }
   } else {
@@ -252,7 +259,7 @@ function normalizePropsOptions(
     }
     for (const key in raw) {
       const normalizedKey = camelize(key)
-      if (normalizedKey[0] !== '$') {
+      if (validatePropName(normalizedKey)) {
         const opt = raw[key]
         const prop: NormalizedProp = (options[normalizedKey] =
           isArray(opt) || isFunction(opt) ? { type: opt } : opt)
@@ -267,8 +274,6 @@ function normalizePropsOptions(
             needCastKeys.push(normalizedKey)
           }
         }
-      } else if (__DEV__) {
-        warn(`Invalid prop name: "${normalizedKey}" is a reserved property.`)
       }
     }
   }