From: Eduardo San Martin Morote Date: Sat, 16 Aug 2025 16:27:55 +0000 (+0200) Subject: refactor: rename static resolver to fixed X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=34703fb7a8d81ce02eb22ce2d4c9deed4645a1e9;p=thirdparty%2Fvuejs%2Frouter.git refactor: rename static resolver to fixed --- diff --git a/CLAUDE.md b/CLAUDE.md index 5ce92462..4fcb8a9c 100644 Binary files a/CLAUDE.md and b/CLAUDE.md differ diff --git a/packages/experiments-playground/src/router/index.ts b/packages/experiments-playground/src/router/index.ts index 5ccf1d58..066e22c1 100644 --- a/packages/experiments-playground/src/router/index.ts +++ b/packages/experiments-playground/src/router/index.ts @@ -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([ + resolver: createFixedResolver([ r_home, r_about, r_nested, diff --git a/packages/router/src/encoding.ts b/packages/router/src/encoding.ts index ba205d73..e866dcba 100644 --- a/packages/router/src/encoding.ts +++ b/packages/router/src/encoding.ts @@ -153,4 +153,3 @@ export function decode( } return '' + text } -// TODO: just add the null check to the original function in encoding.ts diff --git a/packages/router/src/experimental/index.ts b/packages/router/src/experimental/index.ts index 7c5c1c0f..a504af1d 100644 --- a/packages/router/src/experimental/index.ts +++ b/packages/router/src/experimental/index.ts @@ -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, diff --git a/packages/router/src/experimental/route-resolver/resolver-static.spec.ts b/packages/router/src/experimental/route-resolver/resolver-fixed.spec.ts 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 86b0a5f8..30b934d2 100644 --- a/packages/router/src/experimental/route-resolver/resolver-static.spec.ts +++ b/packages/router/src/experimental/route-resolver/resolver-fixed.spec.ts @@ -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, diff --git a/packages/router/src/experimental/route-resolver/resolver-static.ts b/packages/router/src/experimental/route-resolver/resolver-fixed.ts 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 dbc1f12a..375af5d8 100644 --- a/packages/router/src/experimental/route-resolver/resolver-static.ts +++ b/packages/router/src/experimental/route-resolver/resolver-fixed.ts @@ -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 = - | (EXPERIMENTAL_ResolverRecord_Matchable & T) - | (EXPERIMENTAL_ResolverRecord_Group & T) +export type EXPERIMENTAL_ResolverRecord = + | (EXPERIMENTAL_ResolverRecord_Matchable & ExtensionT) + | (EXPERIMENTAL_ResolverRecord_Group & ExtensionT) -export type EXPERIMENTAL_ResolverStaticRecord = - EXPERIMENTAL_ResolverRecord +export type EXPERIMENTAL_ResolverFixedRecord = + EXPERIMENTAL_ResolverRecord -export interface EXPERIMENTAL_ResolverStatic +export interface EXPERIMENTAL_ResolverFixed extends EXPERIMENTAL_Resolver_Base {} /** @@ -102,16 +100,16 @@ export function buildMatched( } /** - * 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 { +>(records: TRecord[]): EXPERIMENTAL_ResolverFixed { // allows fast access to a matcher by name const recordMap = new Map() 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}".` ) diff --git a/packages/router/src/experimental/router.ts b/packages/router/src/experimental/router.ts index 0613ffdd..0cd04e7c 100644 --- a/packages/router/src/experimental/router.ts +++ b/packages/router/src/experimental/router.ts @@ -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 + resolver: EXPERIMENTAL_ResolverFixed } /**