]> git.ipfire.org Git - thirdparty/vuejs/router.git/commitdiff
fix(warn): should not warn missing optional params in aliases
authorEduardo San Martin Morote <posva13@gmail.com>
Fri, 15 Jan 2021 09:13:45 +0000 (10:13 +0100)
committerEduardo San Martin Morote <posva13@gmail.com>
Fri, 15 Jan 2021 09:13:45 +0000 (10:13 +0100)
__tests__/matcher/addingRemoving.spec.ts
src/matcher/index.ts

index 6130754f4b6e66b9575954ade2fcc045c61f3d8c..276fa9aa7fa2196d9ab9fc403cf43c9caf37e852 100644 (file)
@@ -391,10 +391,25 @@ describe('Matcher: adding and removing records', () => {
   describe('warnings', () => {
     mockWarn()
 
-    // TODO: add warnings for invalid records
-    it.skip('warns if alias is missing a required param', () => {
+    it('warns if alias is missing a required param', () => {
       createRouterMatcher([{ path: '/:id', alias: '/no-id', component }], {})
-      expect('TODO').toHaveBeenWarned()
+      expect('same param named "id"').toHaveBeenWarned()
+    })
+
+    it('does not warn for optional param on alias', () => {
+      createRouterMatcher(
+        [{ path: '/:id', alias: '/:id-:suffix?', component }],
+        {}
+      )
+      expect('same param named').not.toHaveBeenWarned()
+    })
+
+    it('does not warn for optional param on main record', () => {
+      createRouterMatcher(
+        [{ alias: '/:id', path: '/:id-:suffix?', component }],
+        {}
+      )
+      expect('same param named').not.toHaveBeenWarned()
     })
   })
 })
index 2b2a0a56db6c9d51a95331d682f140592567b54e..039d2f870437a90c55d93033c191f5e093f3e558 100644 (file)
@@ -425,15 +425,21 @@ function isSameParam(a: ParamKey, b: ParamKey): boolean {
   )
 }
 
+/**
+ * Check if a path and its alias have the same required params
+ *
+ * @param a - original record
+ * @param b - alias record
+ */
 function checkSameParams(a: RouteRecordMatcher, b: RouteRecordMatcher) {
   for (let key of a.keys) {
-    if (!b.keys.find(isSameParam.bind(null, key)))
+    if (!key.optional && !b.keys.find(isSameParam.bind(null, key)))
       return warn(
         `Alias "${b.record.path}" and the original record: "${a.record.path}" should have the exact same param named "${key.name}"`
       )
   }
   for (let key of b.keys) {
-    if (!a.keys.find(isSameParam.bind(null, key)))
+    if (!key.optional && !a.keys.find(isSameParam.bind(null, key)))
       return warn(
         `Alias "${b.record.path}" and the original record: "${a.record.path}" should have the exact same param named "${key.name}"`
       )