From 34703fb7a8d81ce02eb22ce2d4c9deed4645a1e9 Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Sat, 16 Aug 2025 18:27:55 +0200 Subject: [PATCH] refactor: rename static resolver to fixed --- CLAUDE.md | Bin 4175 -> 4170 bytes .../src/router/index.ts | 4 +- packages/router/src/encoding.ts | 1 - packages/router/src/experimental/index.ts | 2 +- ...-static.spec.ts => resolver-fixed.spec.ts} | 36 +++++++++--------- .../{resolver-static.ts => resolver-fixed.ts} | 30 +++++++-------- packages/router/src/experimental/router.ts | 6 +-- 7 files changed, 38 insertions(+), 41 deletions(-) rename packages/router/src/experimental/route-resolver/{resolver-static.spec.ts => resolver-fixed.spec.ts} (91%) rename packages/router/src/experimental/route-resolver/{resolver-static.ts => resolver-fixed.ts} (91%) diff --git a/CLAUDE.md b/CLAUDE.md index 5ce92462ae1d0a6e7b0dd329e72f3d1e602f5f21..4fcb8a9cd6f717a22e702dfd3b1c72cc68caa8b3 100644 GIT binary patch literal 4170 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 U$me?1A3FX_Z^k_<<9t@Vp2zSgDF6Tf literal 4175 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[ + 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 } /** -- 2.47.3