@tanstack/react-router
Advanced tools
Comparing version 1.74.6 to 1.75.0
@@ -183,5 +183,27 @@ import { RootRouteId } from './root.js'; | ||
export type AnySearchValidatorAdapter = SearchValidatorAdapter<any, any>; | ||
export interface StandardSchemaValidator<TInput, TOutput> { | ||
readonly '~types'?: StandardSchemaValidatorTypes<TInput, TOutput> | undefined; | ||
readonly '~validate': AnyStandardSchemaValidate; | ||
} | ||
export type AnyStandardSchemaValidator = StandardSchemaValidator<any, any>; | ||
export interface StandardSchemaValidatorTypes<TInput, TOutput> { | ||
readonly input: TInput; | ||
readonly output: TOutput; | ||
} | ||
export interface AnyStandardSchemaValidateSuccess { | ||
readonly value: any; | ||
} | ||
export interface AnyStandardSchemaValidateFailure { | ||
readonly issues: ReadonlyArray<AnyStandardSchemaValidateIssue>; | ||
} | ||
export interface AnyStandardSchemaValidateIssue { | ||
readonly message: string; | ||
} | ||
export interface AnyStandardSchemaValidateInput { | ||
readonly value: any; | ||
} | ||
export type AnyStandardSchemaValidate = (input: AnyStandardSchemaValidateInput) => AnyStandardSchemaValidateSuccess | AnyStandardSchemaValidateFailure; | ||
export type AnySearchValidatorFn = SearchValidatorFn<any, any>; | ||
export type SearchValidatorFn<TInput, TOutput> = (input: TInput) => TOutput; | ||
export type SearchValidator<TInput, TOutput> = SearchValidatorObj<TInput, TOutput> | SearchValidatorFn<TInput, TOutput> | SearchValidatorAdapter<TInput, TOutput> | undefined; | ||
export type SearchValidator<TInput, TOutput> = SearchValidatorObj<TInput, TOutput> | SearchValidatorFn<TInput, TOutput> | SearchValidatorAdapter<TInput, TOutput> | StandardSchemaValidator<TInput, TOutput> | undefined; | ||
export type AnySearchValidator = SearchValidator<any, any>; | ||
@@ -235,5 +257,5 @@ export type DefaultSearchValidator = SearchValidator<Record<string, unknown>, AnySearchSchema>; | ||
export type ResolveSearchSchemaFnInput<TSearchValidator> = TSearchValidator extends (input: infer TSearchSchemaInput) => any ? TSearchSchemaInput extends SearchSchemaInput ? Omit<TSearchSchemaInput, keyof SearchSchemaInput> : ResolveSearchSchemaFn<TSearchValidator> : AnySearchSchema; | ||
export type ResolveSearchSchemaInput<TSearchValidator> = TSearchValidator extends AnySearchValidatorAdapter ? TSearchValidator['types']['input'] : TSearchValidator extends AnySearchValidatorObj ? ResolveSearchSchemaFnInput<TSearchValidator['parse']> : ResolveSearchSchemaFnInput<TSearchValidator>; | ||
export type ResolveSearchSchemaInput<TSearchValidator> = TSearchValidator extends AnyStandardSchemaValidator ? NonNullable<TSearchValidator['~types']>['input'] : TSearchValidator extends AnySearchValidatorAdapter ? TSearchValidator['types']['input'] : TSearchValidator extends AnySearchValidatorObj ? ResolveSearchSchemaFnInput<TSearchValidator['parse']> : ResolveSearchSchemaFnInput<TSearchValidator>; | ||
export type ResolveSearchSchemaFn<TSearchValidator> = TSearchValidator extends (...args: any) => infer TSearchSchema ? TSearchSchema : AnySearchSchema; | ||
export type ResolveSearchSchema<TSearchValidator> = unknown extends TSearchValidator ? TSearchValidator : TSearchValidator extends AnySearchValidatorAdapter ? TSearchValidator['types']['output'] : TSearchValidator extends AnySearchValidatorObj ? ResolveSearchSchemaFn<TSearchValidator['parse']> : ResolveSearchSchemaFn<TSearchValidator>; | ||
export type ResolveSearchSchema<TSearchValidator> = unknown extends TSearchValidator ? TSearchValidator : TSearchValidator extends AnyStandardSchemaValidator ? NonNullable<TSearchValidator['~types']>['output'] : TSearchValidator extends AnySearchValidatorAdapter ? TSearchValidator['types']['output'] : TSearchValidator extends AnySearchValidatorObj ? ResolveSearchSchemaFn<TSearchValidator['parse']> : ResolveSearchSchemaFn<TSearchValidator>; | ||
export type ResolveFullSearchSchema<TParentRoute extends AnyRoute, TSearchValidator> = unknown extends TParentRoute ? ResolveSearchSchema<TSearchValidator> : Assign<InferFullSearchSchema<TParentRoute>, ResolveSearchSchema<TSearchValidator>>; | ||
@@ -240,0 +262,0 @@ export type ResolveFullSearchSchemaInput<TParentRoute extends AnyRoute, TSearchValidator> = Assign<InferFullSearchSchemaInput<TParentRoute>, ResolveSearchSchemaInput<TSearchValidator>>; |
@@ -27,2 +27,17 @@ import { createMemoryHistory, createBrowserHistory, parseHref } from "@tanstack/history"; | ||
} | ||
function validateSearch(validateSearch2, input) { | ||
if (validateSearch2 == null) return {}; | ||
if ("~validate" in validateSearch2) { | ||
const result = validateSearch2["~validate"]({ value: input }); | ||
if ("value" in result) return result.value; | ||
throw new SearchParamError(JSON.stringify(result.issues, void 0, 2)); | ||
} | ||
if ("parse" in validateSearch2) { | ||
return validateSearch2.parse(input); | ||
} | ||
if (typeof validateSearch2 === "function") { | ||
return validateSearch2(input); | ||
} | ||
return {}; | ||
} | ||
function createRouter(options) { | ||
@@ -331,6 +346,8 @@ return new Router(options); | ||
if (route.options.validateSearch) { | ||
const validator = typeof route.options.validateSearch === "object" ? route.options.validateSearch.parse : route.options.validateSearch; | ||
validatedSearch = { | ||
...validatedSearch, | ||
...validator({ ...validatedSearch, ...search }) | ||
...validateSearch(route.options.validateSearch, { | ||
...validatedSearch, | ||
...search | ||
}) ?? {} | ||
}; | ||
@@ -1472,4 +1489,3 @@ } | ||
try { | ||
const validator = typeof route.options.validateSearch === "object" ? route.options.validateSearch.parse : route.options.validateSearch; | ||
const search = (validator == null ? void 0 : validator(parentSearch)) ?? {}; | ||
const search = validateSearch(route.options.validateSearch, parentSearch) ?? {}; | ||
return [ | ||
@@ -1476,0 +1492,0 @@ { |
{ | ||
"name": "@tanstack/react-router", | ||
"version": "1.74.6", | ||
"version": "1.75.0", | ||
"description": "Modern and scalable routing for React applications", | ||
@@ -5,0 +5,0 @@ "author": "Tanner Linsley", |
@@ -501,2 +501,34 @@ import invariant from 'tiny-invariant' | ||
export interface StandardSchemaValidator<TInput, TOutput> { | ||
readonly '~types'?: StandardSchemaValidatorTypes<TInput, TOutput> | undefined | ||
readonly '~validate': AnyStandardSchemaValidate | ||
} | ||
export type AnyStandardSchemaValidator = StandardSchemaValidator<any, any> | ||
export interface StandardSchemaValidatorTypes<TInput, TOutput> { | ||
readonly input: TInput | ||
readonly output: TOutput | ||
} | ||
export interface AnyStandardSchemaValidateSuccess { | ||
readonly value: any | ||
} | ||
export interface AnyStandardSchemaValidateFailure { | ||
readonly issues: ReadonlyArray<AnyStandardSchemaValidateIssue> | ||
} | ||
export interface AnyStandardSchemaValidateIssue { | ||
readonly message: string | ||
} | ||
export interface AnyStandardSchemaValidateInput { | ||
readonly value: any | ||
} | ||
export type AnyStandardSchemaValidate = ( | ||
input: AnyStandardSchemaValidateInput, | ||
) => AnyStandardSchemaValidateSuccess | AnyStandardSchemaValidateFailure | ||
export type AnySearchValidatorFn = SearchValidatorFn<any, any> | ||
@@ -510,2 +542,3 @@ | ||
| SearchValidatorAdapter<TInput, TOutput> | ||
| StandardSchemaValidator<TInput, TOutput> | ||
| undefined | ||
@@ -629,7 +662,9 @@ | ||
export type ResolveSearchSchemaInput<TSearchValidator> = | ||
TSearchValidator extends AnySearchValidatorAdapter | ||
? TSearchValidator['types']['input'] | ||
: TSearchValidator extends AnySearchValidatorObj | ||
? ResolveSearchSchemaFnInput<TSearchValidator['parse']> | ||
: ResolveSearchSchemaFnInput<TSearchValidator> | ||
TSearchValidator extends AnyStandardSchemaValidator | ||
? NonNullable<TSearchValidator['~types']>['input'] | ||
: TSearchValidator extends AnySearchValidatorAdapter | ||
? TSearchValidator['types']['input'] | ||
: TSearchValidator extends AnySearchValidatorObj | ||
? ResolveSearchSchemaFnInput<TSearchValidator['parse']> | ||
: ResolveSearchSchemaFnInput<TSearchValidator> | ||
@@ -645,7 +680,9 @@ export type ResolveSearchSchemaFn<TSearchValidator> = TSearchValidator extends ( | ||
? TSearchValidator | ||
: TSearchValidator extends AnySearchValidatorAdapter | ||
? TSearchValidator['types']['output'] | ||
: TSearchValidator extends AnySearchValidatorObj | ||
? ResolveSearchSchemaFn<TSearchValidator['parse']> | ||
: ResolveSearchSchemaFn<TSearchValidator> | ||
: TSearchValidator extends AnyStandardSchemaValidator | ||
? NonNullable<TSearchValidator['~types']>['output'] | ||
: TSearchValidator extends AnySearchValidatorAdapter | ||
? TSearchValidator['types']['output'] | ||
: TSearchValidator extends AnySearchValidatorObj | ||
? ResolveSearchSchemaFn<TSearchValidator['parse']> | ||
: ResolveSearchSchemaFn<TSearchValidator> | ||
@@ -652,0 +689,0 @@ export type ResolveFullSearchSchema< |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1578514
19893