]> git.ipfire.org Git - thirdparty/vuejs/router.git/commitdiff
refactor: rename static resolver to fixed
authorEduardo San Martin Morote <posva13@gmail.com>
Sat, 16 Aug 2025 16:27:55 +0000 (18:27 +0200)
committerEduardo San Martin Morote <posva13@gmail.com>
Sat, 16 Aug 2025 16:27:55 +0000 (18:27 +0200)
CLAUDE.md
packages/experiments-playground/src/router/index.ts
packages/router/src/encoding.ts
packages/router/src/experimental/index.ts
packages/router/src/experimental/route-resolver/resolver-fixed.spec.ts [moved from packages/router/src/experimental/route-resolver/resolver-static.spec.ts with 91% similarity]
packages/router/src/experimental/route-resolver/resolver-fixed.ts [moved from packages/router/src/experimental/route-resolver/resolver-static.ts with 91% similarity]
packages/router/src/experimental/router.ts

index 5ce92462ae1d0a6e7b0dd329e72f3d1e602f5f21..4fcb8a9cd6f717a22e702dfd3b1c72cc68caa8b3 100644 (file)
Binary files a/CLAUDE.md and b/CLAUDE.md differ
index 5ccf1d58788fcc198dc92786261fd006bbf2d3f0..066e22c1332931d3048af1564d16fef521d43d7b 100644 (file)
@@ -1,7 +1,7 @@
 import { createWebHistory } from 'vue-router'
 import {
   experimental_createRouter,
-  createStaticResolver,
+  createFixedResolver,
   MatcherPatternPathStatic,
   MatcherPatternPathCustomParams,
   normalizeRouteRecord,
@@ -115,7 +115,7 @@ const r_profiles_detail = normalizeRouteRecord({
 
 export const router = experimental_createRouter({
   history: createWebHistory(),
-  resolver: createStaticResolver<EXPERIMENTAL_RouteRecordNormalized_Matchable>([
+  resolver: createFixedResolver<EXPERIMENTAL_RouteRecordNormalized_Matchable>([
     r_home,
     r_about,
     r_nested,
index ba205d73a42bcebda0c07b946f8a9bc10c732bbb..e866dcba6a7c3f052658620e6cfc52c22c909800 100644 (file)
@@ -153,4 +153,3 @@ export function decode(
   }
   return '' + text
 }
-// TODO: just add the null check to the original function in encoding.ts
index 7c5c1c0fbc21c93c491f2b58ac12d2a6628b54ed..a504af1d5ed2f481c5da33c2e34e4765d91abf57 100644 (file)
@@ -13,7 +13,7 @@ export type {
   EXPERIMENTAL_RouteRecordNormalized_Matchable,
 } from './router'
 
-export { createStaticResolver } from './route-resolver/resolver-static'
+export { createFixedResolver } from './route-resolver/resolver-fixed'
 export {
   MatcherPatternPathStatic,
   MatcherPatternPathDynamic,
similarity index 91%
rename from packages/router/src/experimental/route-resolver/resolver-static.spec.ts
rename to packages/router/src/experimental/route-resolver/resolver-fixed.spec.ts
index 86b0a5f8d2d063e43e2d79c70544eba3f5b35625..30b934d29eb6012dee9fda37ee460f40151d2bbd 100644 (file)
@@ -1,5 +1,5 @@
 import { describe, expect, it } from 'vitest'
-import { createStaticResolver } from './resolver-static'
+import { createFixedResolver } from './resolver-fixed'
 import { NO_MATCH_LOCATION } from './resolver-abstract'
 import { MatcherQueryParams } from './matchers/matcher-pattern'
 import {
@@ -14,10 +14,10 @@ import {
   PAGE_QUERY_PATTERN_MATCHER,
 } from './matchers/test-utils'
 
-describe('StaticResolver', () => {
+describe('fixed resolver', () => {
   describe('new matchers', () => {
     it('static path', () => {
-      const resolver = createStaticResolver([
+      const resolver = createFixedResolver([
         { name: 'root', path: new MatcherPatternPathStatic('/') },
         { name: 'users', path: new MatcherPatternPathStatic('/users') },
       ])
@@ -40,7 +40,7 @@ describe('StaticResolver', () => {
     })
 
     it('dynamic path', () => {
-      const resolver = createStaticResolver([
+      const resolver = createFixedResolver([
         {
           name: 'user-detail',
           path: USER_ID_PATH_PATTERN_MATCHER,
@@ -58,7 +58,7 @@ describe('StaticResolver', () => {
   describe('resolve()', () => {
     describe('absolute locations as strings', () => {
       it('resolves string locations with no params', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           { name: 'root', path: EMPTY_PATH_PATTERN_MATCHER },
         ])
 
@@ -71,7 +71,7 @@ describe('StaticResolver', () => {
       })
 
       it('resolves a not found string', () => {
-        const resolver = createStaticResolver([])
+        const resolver = createFixedResolver([])
         expect(resolver.resolve('/bar?q=1#hash')).toEqual({
           ...NO_MATCH_LOCATION,
           fullPath: '/bar?q=1#hash',
@@ -83,7 +83,7 @@ describe('StaticResolver', () => {
       })
 
       it('resolves string locations with params', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           { name: 'user-detail', path: USER_ID_PATH_PATTERN_MATCHER },
         ])
 
@@ -102,7 +102,7 @@ describe('StaticResolver', () => {
       })
 
       it('resolve string locations with query', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           {
             name: 'any-path',
             path: ANY_PATH_PATTERN_MATCHER,
@@ -122,7 +122,7 @@ describe('StaticResolver', () => {
       })
 
       it('resolves string locations with hash', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           {
             name: 'any-path',
             path: ANY_PATH_PATTERN_MATCHER,
@@ -139,7 +139,7 @@ describe('StaticResolver', () => {
       })
 
       it('combines path, query and hash params', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           {
             name: 'user-detail',
             path: USER_ID_PATH_PATTERN_MATCHER,
@@ -156,7 +156,7 @@ describe('StaticResolver', () => {
 
     describe('relative locations as strings', () => {
       it('resolves a simple object relative location', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           { name: 'any-path', path: ANY_PATH_PATTERN_MATCHER },
         ])
 
@@ -197,7 +197,7 @@ describe('StaticResolver', () => {
     })
 
     it('resolves a simple string relative location', () => {
-      const resolver = createStaticResolver([
+      const resolver = createFixedResolver([
         { name: 'any-path', path: ANY_PATH_PATTERN_MATCHER },
       ])
 
@@ -229,7 +229,7 @@ describe('StaticResolver', () => {
 
     describe('absolute locations', () => {
       it('resolves an object location', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           { name: 'root', path: EMPTY_PATH_PATTERN_MATCHER },
         ])
         expect(resolver.resolve({ path: '/' })).toMatchObject({
@@ -242,7 +242,7 @@ describe('StaticResolver', () => {
       })
 
       it('resolves an absolute string location', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           { name: 'root', path: EMPTY_PATH_PATTERN_MATCHER },
         ])
         expect(resolver.resolve('/')).toMatchObject({
@@ -255,7 +255,7 @@ describe('StaticResolver', () => {
       })
 
       it('treats object path as pathname only (no query/hash parsing)', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           { name: 'any-path', path: ANY_PATH_PATTERN_MATCHER },
         ])
         // Object with path containing query/hash should treat entire string as pathname
@@ -270,7 +270,7 @@ describe('StaticResolver', () => {
 
     describe('named locations', () => {
       it('resolves named locations with no params', () => {
-        const resolver = createStaticResolver([
+        const resolver = createFixedResolver([
           {
             name: 'home',
             path: EMPTY_PATH_PATTERN_MATCHER,
@@ -288,7 +288,7 @@ describe('StaticResolver', () => {
     })
 
     describe('encoding', () => {
-      const resolver = createStaticResolver([
+      const resolver = createFixedResolver([
         { name: 'any-path', path: ANY_PATH_PATTERN_MATCHER },
       ])
       describe('decodes', () => {
@@ -311,7 +311,7 @@ describe('StaticResolver', () => {
         })
 
         it('passes a decoded query to the matcher', () => {
-          const resolver = createStaticResolver([
+          const resolver = createFixedResolver([
             {
               name: 'query',
               path: EMPTY_PATH_PATTERN_MATCHER,
similarity index 91%
rename from packages/router/src/experimental/route-resolver/resolver-static.ts
rename to packages/router/src/experimental/route-resolver/resolver-fixed.ts
index dbc1f12a594d9dc579d24824aa2129af65d84f6a..375af5d8086ad093b2a2c4b567be3c2f99fcf71e 100644 (file)
@@ -24,9 +24,6 @@ import type {
 } from './matchers/matcher-pattern'
 import { warn } from '../../warning'
 
-// TODO: find a better name than static that doesn't conflict with static params
-// maybe fixed or simple
-
 export interface EXPERIMENTAL_ResolverRecord_Base {
   /**
    * Name of the matcher. Unique across all matchers. If missing, this record
@@ -49,10 +46,8 @@ export interface EXPERIMENTAL_ResolverRecord_Base {
    */
   hash?: MatcherPatternHash
 
-  // TODO: here or in router
-  // redirect?: RouteRecordRedirectOption
+  parent?: EXPERIMENTAL_ResolverRecord | null // the parent can be matchable or not
 
-  parent?: EXPERIMENTAL_ResolverRecord | null // the parend can be matchable or not
   // TODO: implement aliases
   // aliasOf?: this
 }
@@ -70,20 +65,23 @@ export interface EXPERIMENTAL_ResolverRecord_Group
   hash?: undefined
 }
 
+/**
+ * A matchable record is a record that can be matched by a path, query or hash and will resolve to a location.
+ */
 export interface EXPERIMENTAL_ResolverRecord_Matchable
   extends EXPERIMENTAL_ResolverRecord_Base {
   name: RecordName
   path: MatcherPatternPath
 }
 
-export type EXPERIMENTAL_ResolverRecord<T = {}> =
-  | (EXPERIMENTAL_ResolverRecord_Matchable & T)
-  | (EXPERIMENTAL_ResolverRecord_Group & T)
+export type EXPERIMENTAL_ResolverRecord<ExtensionT = {}> =
+  | (EXPERIMENTAL_ResolverRecord_Matchable & ExtensionT)
+  | (EXPERIMENTAL_ResolverRecord_Group & ExtensionT)
 
-export type EXPERIMENTAL_ResolverStaticRecord<T = {}> =
-  EXPERIMENTAL_ResolverRecord<T>
+export type EXPERIMENTAL_ResolverFixedRecord<ExtensionT = {}> =
+  EXPERIMENTAL_ResolverRecord<ExtensionT>
 
-export interface EXPERIMENTAL_ResolverStatic<TRecord>
+export interface EXPERIMENTAL_ResolverFixed<TRecord>
   extends EXPERIMENTAL_Resolver_Base<TRecord> {}
 
 /**
@@ -102,16 +100,16 @@ export function buildMatched<T extends EXPERIMENTAL_ResolverRecord>(
 }
 
 /**
- * Creates a simple resolver that must have all records defined at creation
+ * Creates a fixed resolver that must have all records defined at creation
  * time.
  *
  * @template TRecord - extended type of the records
  * @param {TRecord[]} records - Ordered array of records that will be used to resolve routes
  * @returns a resolver that can be passed to the router
  */
-export function createStaticResolver<
+export function createFixedResolver<
   TRecord extends EXPERIMENTAL_ResolverRecord_Matchable,
->(records: TRecord[]): EXPERIMENTAL_ResolverStatic<TRecord> {
+>(records: TRecord[]): EXPERIMENTAL_ResolverFixed<TRecord> {
   // allows fast access to a matcher by name
   const recordMap = new Map<RecordName, TRecord>()
   for (const record of records) {
@@ -184,7 +182,7 @@ export function createStaticResolver<
           throw new Error(`Record "${String(name)}" not found`)
         }
 
-        if (typeof to === 'object' && to.hash?.startsWith('#')) {
+        if (typeof to === 'object' && to.hash && to.hash.startsWith('#')) {
           warn(
             `A \`hash\` should always start with the character "#". Replace "${to.hash}" with "#${to.hash}".`
           )
index 0613ffdd39bef30030b6307999be930612261f46..0cd04e7ca1240f9546fdecc37dff49e8db0bf20e 100644 (file)
@@ -81,8 +81,8 @@ import {
   EXPERIMENTAL_ResolverRecord_Base,
   EXPERIMENTAL_ResolverRecord_Group,
   EXPERIMENTAL_ResolverRecord_Matchable,
-  EXPERIMENTAL_ResolverStatic,
-} from './route-resolver/resolver-static'
+  EXPERIMENTAL_ResolverFixed,
+} from './route-resolver/resolver-fixed'
 import {
   ResolverLocationAsNamed,
   ResolverLocationAsPathRelative,
@@ -383,7 +383,7 @@ export interface EXPERIMENTAL_RouterOptions
    *
    * @experimental
    */
-  resolver: EXPERIMENTAL_ResolverStatic<EXPERIMENTAL_RouteRecordNormalized_Matchable>
+  resolver: EXPERIMENTAL_ResolverFixed<EXPERIMENTAL_RouteRecordNormalized_Matchable>
 }
 
 /**