Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 17 additions & 25 deletions src/types/fetch/_match.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,39 +58,31 @@ type CalcMatchScore<

type _MatchedRoutes<
Route extends string,
MatchedResultUnion extends MatchResult<string> = MatchResult<
keyof InternalApi
>,
> = MatchedResultUnion["key"] extends infer MatchedKeys // spread union type
? MatchedKeys extends string
? Route extends MatchedKeys
? MatchResult<MatchedKeys, true> // exact match
: MatchedKeys extends `${infer Root}/**${string}`
? MatchedKeys extends `${string}/**`
? Route extends `${Root}/${string}`
? MatchResult<MatchedKeys, false, [], true>
: never // catchAll match
: MatchResult<
MatchedKeys,
false,
CalcMatchScore<Root, Route, [], true>
> // glob match
: MatchResult<
MatchedKeys,
false,
CalcMatchScore<MatchedKeys, Route, [], true>
> // partial match
: never
MatchedKeys extends string = keyof InternalApi,
> = MatchedKeys extends any
? Route extends MatchedKeys
? MatchResult<MatchedKeys, true> // exact match
: MatchedKeys extends `${infer Root}/**${string}`
? MatchedKeys extends `${string}/**`
? Route extends `${Root}/${string}`
? MatchResult<MatchedKeys, false, [], true>
: never // catchAll match
: MatchResult<MatchedKeys, false, CalcMatchScore<Root, Route, [], true>> // glob match
: MatchResult<
MatchedKeys,
false,
CalcMatchScore<MatchedKeys, Route, [], true>
> // partial match
: never;

export type MatchedRoutes<
Route extends string,
MatchedKeysResult extends MatchResult<string> = MatchResult<
keyof InternalApi
>,
Matches extends MatchResult<string> = _MatchedRoutes<
Matches extends MatchResult<string, boolean> = _MatchedRoutes<
Route,
MatchedKeysResult
MatchedKeysResult["key"]
>,
> = Route extends "/"
? keyof InternalApi // root middleware
Expand Down
Loading