]> git.ipfire.org Git - thirdparty/vuejs/router.git/commitdiff
refactor: monomorphic RouteRecordNormalized
authorEduardo San Martin Morote <posva13@gmail.com>
Wed, 12 Feb 2020 14:50:03 +0000 (15:50 +0100)
committerEduardo San Martin Morote <posva13@gmail.com>
Wed, 12 Feb 2020 14:50:03 +0000 (15:50 +0100)
__tests__/extractComponentsGuards.spec.ts
__tests__/matcher/records.spec.ts
__tests__/matcher/resolve.spec.ts
__tests__/utils.ts
rollup.config.js
src/matcher/index.ts
src/matcher/types.ts

index 128a91947ce561b73679d5345c161c508cd4b80e..61cfe628875a150c7215fe13f4b0d19232beffc9 100644 (file)
@@ -1,7 +1,8 @@
 import { extractComponentsGuards } from '../src/utils'
 import { START_LOCATION_NORMALIZED, RouteRecord } from '../src/types'
-import { components, normalizeRouteRecord } from './utils'
+import { components } from './utils'
 import { RouteRecordNormalized } from '../src/matcher/types'
+import { normalizeRouteRecord } from '../src/matcher'
 
 const beforeRouteEnter = jest.fn()
 
index c3d6ef7eb8dd76d388e8532608ff036b23308418..1d5daac5e1e176590b2041f86bdab92a83715e22 100644 (file)
@@ -11,7 +11,7 @@ describe('normalizeRouteRecord', () => {
       children: undefined,
       components: { default: {} },
       leaveGuards: [],
-      meta: undefined,
+      meta: {},
       name: undefined,
       path: '/home',
     })
@@ -88,7 +88,7 @@ describe('normalizeRouteRecord', () => {
       children: undefined,
       components: {},
       leaveGuards: [],
-      meta: undefined,
+      meta: {},
       name: undefined,
       path: '/redirect',
     })
index befa9e50bad725e5a095a4babef1a73266d67d54..fde0f2d3cd4a38084403621f9741e6e5937ed403 100644 (file)
@@ -1,4 +1,4 @@
-import { createRouterMatcher } from '../../src/matcher'
+import { createRouterMatcher, normalizeRouteRecord } from '../../src/matcher'
 import {
   START_LOCATION_NORMALIZED,
   RouteComponent,
@@ -7,7 +7,7 @@ import {
   MatcherLocationNormalized,
   MatcherLocationRedirect,
 } from '../../src/types'
-import { normalizeRouteRecord, MatcherLocationNormalizedLoose } from '../utils'
+import { MatcherLocationNormalizedLoose } from '../utils'
 
 // @ts-ignore
 const component: RouteComponent = null
@@ -30,6 +30,10 @@ describe('Router Matcher', () => {
         resolved.meta = record[0].meta || {}
       }
 
+      if (!('name' in resolved)) {
+        resolved.name = undefined
+      }
+
       // add location if provided as it should be the same value
       if ('path' in location && !('path' in resolved)) {
         resolved.path = location.path
index 35462a3a38b9457fd136fccaac7c08a933de2097..16299e7b81ce7225c21662777eaf3e6d3ab607fa 100644 (file)
@@ -1,13 +1,11 @@
 import { JSDOM, ConstructorOptions } from 'jsdom'
 import {
   NavigationGuard,
-  RouteRecord,
   RouteRecordMultipleViews,
   MatcherLocationNormalized,
   RouteLocationNormalized,
 } from '../src/types'
 import { h, resolveComponent } from 'vue'
-import { RouteRecordNormalized } from '../src/matcher/types'
 
 export const tick = (time?: number) =>
   new Promise(resolve => {
@@ -94,34 +92,3 @@ export const components = {
     },
   },
 }
-
-const DEFAULT_COMMON_RECORD_PROPERTIES = {
-  beforeEnter: undefined,
-  leaveGuards: [],
-  meta: undefined,
-}
-
-/**
- * Adds missing properties
- *
- * @param record
- * @returns a normalized copy
- */
-export function normalizeRouteRecord(
-  // cannot be a redirect record
-  record: Exclude<RouteRecord, { redirect: any }>
-): RouteRecordNormalized {
-  if ('components' in record)
-    return {
-      ...DEFAULT_COMMON_RECORD_PROPERTIES,
-      ...record,
-    }
-
-  const { component, ...rest } = record
-
-  return {
-    ...DEFAULT_COMMON_RECORD_PROPERTIES,
-    ...rest,
-    components: { default: component },
-  }
-}
index 2580dd6c60e6ff8957e9dd05d371423e5a10a4cb..590b951470686ec934ff31d67d0b65ed4ab90fef 100644 (file)
@@ -49,7 +49,6 @@ function createEntry(
       }),
       alias({
         resolve: ['ts'],
-        consola: path.resolve(__dirname, './src/consola.ts'),
       }),
     ],
     output: {
index 3b8ea8a63f53e12d3a1e3a0ceeea413567bb25d4..7379db2fe60e060c8c1b887301b0acb9dfc64a94 100644 (file)
@@ -181,8 +181,7 @@ export function createRouterMatcher(
       path,
       params,
       matched,
-      // TODO: merge all meta properties from parent to child
-      meta: (matcher && matcher.record.meta) || {},
+      meta: matcher ? matcher.record.meta : {},
     }
   }
 
@@ -221,7 +220,7 @@ export function normalizeRouteRecord(
     children: (record as any).children,
     name: record.name,
     beforeEnter,
-    meta: record.meta,
+    meta: record.meta || {},
     leaveGuards: [],
   }
 }
index 752afcb24a95991f070db3d5599f2f7297c0710c..5de1ca03d08e363b18ddc48beb9c3ae78a7f8957 100644 (file)
@@ -1,13 +1,12 @@
 import { RouteRecordMultipleViews, NavigationGuard } from '../types'
 
-export interface RouteRecordNormalizedCommon {
+// normalize component/components into components and make every property always present
+export interface RouteRecordNormalized {
+  path: RouteRecordMultipleViews['path']
+  name: RouteRecordMultipleViews['name']
+  components: RouteRecordMultipleViews['components']
+  children: RouteRecordMultipleViews['children']
+  meta: Exclude<RouteRecordMultipleViews['meta'], void>
+  beforeEnter: RouteRecordMultipleViews['beforeEnter']
   leaveGuards: NavigationGuard[]
 }
-
-// normalize component/components into components
-export type RouteRecordNormalized = RouteRecordNormalizedCommon &
-  // TODO: make it required (monomorphic)
-  Pick<
-    RouteRecordMultipleViews,
-    'path' | 'name' | 'components' | 'children' | 'meta' | 'beforeEnter'
-  >