@tanstack/react-router 1.82.1 → 1.82.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.d.cts +2 -2
- package/dist/cjs/route.cjs.map +1 -1
- package/dist/cjs/route.d.cts +3 -3
- package/dist/cjs/router.cjs +3 -2
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/transformer.cjs.map +1 -1
- package/dist/cjs/transformer.d.cts +8 -0
- package/dist/cjs/validators.d.cts +3 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/route.d.ts +3 -3
- package/dist/esm/route.js.map +1 -1
- package/dist/esm/router.js +3 -2
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/transformer.d.ts +8 -0
- package/dist/esm/transformer.js.map +1 -1
- package/dist/esm/validators.d.ts +3 -1
- package/package.json +1 -1
- package/src/index.tsx +9 -1
- package/src/route.ts +3 -3
- package/src/router.ts +4 -3
- package/src/transformer.ts +19 -0
- package/src/validators.ts +16 -1
|
@@ -3,3 +3,11 @@ export interface RouterTransformer {
|
|
|
3
3
|
parse: (str: string) => unknown;
|
|
4
4
|
}
|
|
5
5
|
export declare const defaultTransformer: RouterTransformer;
|
|
6
|
+
export type TransformerStringify<T, TSerializable> = T extends TSerializable ? T : T extends (...args: Array<any>) => any ? 'Function is not serializable' : {
|
|
7
|
+
[K in keyof T]: TransformerStringify<T[K], TSerializable>;
|
|
8
|
+
};
|
|
9
|
+
export type TransformerParse<T, TSerializable> = T extends TSerializable ? T : T extends JSX.Element ? ReadableStream : {
|
|
10
|
+
[K in keyof T]: TransformerParse<T[K], TSerializable>;
|
|
11
|
+
};
|
|
12
|
+
export type DefaultTransformerStringify<T> = TransformerStringify<T, Date | undefined>;
|
|
13
|
+
export type DefaultTransformerParse<T> = TransformerParse<T, Date | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.js","sources":["../../src/transformer.ts"],"sourcesContent":["import { isPlainObject } from './utils'\n\nexport interface RouterTransformer {\n stringify: (obj: unknown) => string\n parse: (str: string) => unknown\n}\n\nexport const defaultTransformer: RouterTransformer = {\n stringify: (value: any) =>\n JSON.stringify(value, function replacer(key, value) {\n const keyVal = this[key]\n const transformer = transformers.find((t) => t.stringifyCondition(keyVal))\n\n if (transformer) {\n return transformer.stringify(keyVal)\n }\n\n return value\n }),\n parse: (value: string) =>\n JSON.parse(value, function parser(key, value) {\n const keyVal = this[key]\n const transformer = transformers.find((t) => t.parseCondition(keyVal))\n\n if (transformer) {\n return transformer.parse(keyVal)\n }\n\n return value\n }),\n}\n\nconst transformers = [\n {\n // Dates\n stringifyCondition: (value: any) => value instanceof Date,\n stringify: (value: any) => ({ $date: value.toISOString() }),\n parseCondition: (value: any) => isPlainObject(value) && value.$date,\n parse: (value: any) => new Date(value.$date),\n },\n {\n // undefined\n stringifyCondition: (value: any) => value === undefined,\n stringify: () => ({ $undefined: '' }),\n parseCondition: (value: any) =>\n isPlainObject(value) && value.$undefined === '',\n parse: () => undefined,\n },\n] as const\n"],"names":["value"],"mappings":";AAOO,MAAM,qBAAwC;AAAA,EACnD,WAAW,CAAC,UACV,KAAK,UAAU,OAAO,SAAS,SAAS,KAAKA,QAAO;AAC5C,UAAA,SAAS,KAAK,GAAG;AACjB,UAAA,cAAc,aAAa,KAAK,CAAC,MAAM,EAAE,mBAAmB,MAAM,CAAC;AAEzE,QAAI,aAAa;AACR,aAAA,YAAY,UAAU,MAAM;AAAA,IAAA;AAG9BA,WAAAA;AAAAA,EAAA,CACR;AAAA,EACH,OAAO,CAAC,UACN,KAAK,MAAM,OAAO,SAAS,OAAO,KAAKA,QAAO;AACtC,UAAA,SAAS,KAAK,GAAG;AACjB,UAAA,cAAc,aAAa,KAAK,CAAC,MAAM,EAAE,eAAe,MAAM,CAAC;AAErE,QAAI,aAAa;AACR,aAAA,YAAY,MAAM,MAAM;AAAA,IAAA;AAG1BA,WAAAA;AAAAA,EACR,CAAA;AACL;AAEA,MAAM,eAAe;AAAA,EACnB;AAAA;AAAA,IAEE,oBAAoB,CAAC,UAAe,iBAAiB;AAAA,IACrD,WAAW,CAAC,WAAgB,EAAE,OAAO,MAAM;IAC3C,gBAAgB,CAAC,UAAe,cAAc,KAAK,KAAK,MAAM;AAAA,IAC9D,OAAO,CAAC,UAAe,IAAI,KAAK,MAAM,KAAK;AAAA,EAC7C;AAAA,EACA;AAAA;AAAA,IAEE,oBAAoB,CAAC,UAAe,UAAU;AAAA,IAC9C,WAAW,OAAO,EAAE,YAAY;IAChC,gBAAgB,CAAC,UACf,cAAc,KAAK,KAAK,MAAM,eAAe;AAAA,IAC/C,OAAO,MAAM;AAAA,EAAA;AAEjB;"}
|
|
1
|
+
{"version":3,"file":"transformer.js","sources":["../../src/transformer.ts"],"sourcesContent":["import { isPlainObject } from './utils'\n\nexport interface RouterTransformer {\n stringify: (obj: unknown) => string\n parse: (str: string) => unknown\n}\n\nexport const defaultTransformer: RouterTransformer = {\n stringify: (value: any) =>\n JSON.stringify(value, function replacer(key, value) {\n const keyVal = this[key]\n const transformer = transformers.find((t) => t.stringifyCondition(keyVal))\n\n if (transformer) {\n return transformer.stringify(keyVal)\n }\n\n return value\n }),\n parse: (value: string) =>\n JSON.parse(value, function parser(key, value) {\n const keyVal = this[key]\n const transformer = transformers.find((t) => t.parseCondition(keyVal))\n\n if (transformer) {\n return transformer.parse(keyVal)\n }\n\n return value\n }),\n}\n\nconst transformers = [\n {\n // Dates\n stringifyCondition: (value: any) => value instanceof Date,\n stringify: (value: any) => ({ $date: value.toISOString() }),\n parseCondition: (value: any) => isPlainObject(value) && value.$date,\n parse: (value: any) => new Date(value.$date),\n },\n {\n // undefined\n stringifyCondition: (value: any) => value === undefined,\n stringify: () => ({ $undefined: '' }),\n parseCondition: (value: any) =>\n isPlainObject(value) && value.$undefined === '',\n parse: () => undefined,\n },\n] as const\n\nexport type TransformerStringify<T, TSerializable> = T extends TSerializable\n ? T\n : T extends (...args: Array<any>) => any\n ? 'Function is not serializable'\n : { [K in keyof T]: TransformerStringify<T[K], TSerializable> }\n\nexport type TransformerParse<T, TSerializable> = T extends TSerializable\n ? T\n : T extends JSX.Element\n ? ReadableStream\n : { [K in keyof T]: TransformerParse<T[K], TSerializable> }\n\nexport type DefaultTransformerStringify<T> = TransformerStringify<\n T,\n Date | undefined\n>\n\nexport type DefaultTransformerParse<T> = TransformerParse<T, Date | undefined>\n"],"names":["value"],"mappings":";AAOO,MAAM,qBAAwC;AAAA,EACnD,WAAW,CAAC,UACV,KAAK,UAAU,OAAO,SAAS,SAAS,KAAKA,QAAO;AAC5C,UAAA,SAAS,KAAK,GAAG;AACjB,UAAA,cAAc,aAAa,KAAK,CAAC,MAAM,EAAE,mBAAmB,MAAM,CAAC;AAEzE,QAAI,aAAa;AACR,aAAA,YAAY,UAAU,MAAM;AAAA,IAAA;AAG9BA,WAAAA;AAAAA,EAAA,CACR;AAAA,EACH,OAAO,CAAC,UACN,KAAK,MAAM,OAAO,SAAS,OAAO,KAAKA,QAAO;AACtC,UAAA,SAAS,KAAK,GAAG;AACjB,UAAA,cAAc,aAAa,KAAK,CAAC,MAAM,EAAE,eAAe,MAAM,CAAC;AAErE,QAAI,aAAa;AACR,aAAA,YAAY,MAAM,MAAM;AAAA,IAAA;AAG1BA,WAAAA;AAAAA,EACR,CAAA;AACL;AAEA,MAAM,eAAe;AAAA,EACnB;AAAA;AAAA,IAEE,oBAAoB,CAAC,UAAe,iBAAiB;AAAA,IACrD,WAAW,CAAC,WAAgB,EAAE,OAAO,MAAM;IAC3C,gBAAgB,CAAC,UAAe,cAAc,KAAK,KAAK,MAAM;AAAA,IAC9D,OAAO,CAAC,UAAe,IAAI,KAAK,MAAM,KAAK;AAAA,EAC7C;AAAA,EACA;AAAA;AAAA,IAEE,oBAAoB,CAAC,UAAe,UAAU;AAAA,IAC9C,WAAW,OAAO,EAAE,YAAY;IAChC,gBAAgB,CAAC,UACf,cAAc,KAAK,KAAK,MAAM,eAAe;AAAA,IAC/C,OAAO,MAAM;AAAA,EAAA;AAEjB;"}
|
package/dist/esm/validators.d.ts
CHANGED
|
@@ -43,7 +43,9 @@ export type Validator<TInput, TOutput> = ValidatorObj<TInput, TOutput> | Validat
|
|
|
43
43
|
export type AnyValidator = Validator<any, any>;
|
|
44
44
|
export type AnySchema = {};
|
|
45
45
|
export type DefaultValidator = Validator<Record<string, unknown>, AnySchema>;
|
|
46
|
-
export type
|
|
46
|
+
export type ResolveSearchValidatorInputFn<TValidator> = TValidator extends (input: infer TSchemaInput) => any ? TSchemaInput extends SearchSchemaInput ? Omit<TSchemaInput, keyof SearchSchemaInput> : ResolveValidatorOutputFn<TValidator> : AnySchema;
|
|
47
|
+
export type ResolveSearchValidatorInput<TValidator> = TValidator extends AnyStandardSchemaValidator ? NonNullable<TValidator['~standard']['types']>['input'] : TValidator extends AnyValidatorAdapter ? TValidator['types']['input'] : TValidator extends AnyValidatorObj ? ResolveSearchValidatorInputFn<TValidator['parse']> : ResolveSearchValidatorInputFn<TValidator>;
|
|
48
|
+
export type ResolveValidatorInputFn<TValidator> = TValidator extends (input: infer TInput) => any ? TInput : undefined;
|
|
47
49
|
export type ResolveValidatorInput<TValidator> = TValidator extends AnyStandardSchemaValidator ? NonNullable<TValidator['~standard']['types']>['input'] : TValidator extends AnyValidatorAdapter ? TValidator['types']['input'] : TValidator extends AnyValidatorObj ? ResolveValidatorInputFn<TValidator['parse']> : ResolveValidatorInputFn<TValidator>;
|
|
48
50
|
export type ResolveValidatorOutputFn<TValidator> = TValidator extends (...args: any) => infer TSchema ? TSchema : AnySchema;
|
|
49
51
|
export type ResolveValidatorOutput<TValidator> = unknown extends TValidator ? TValidator : TValidator extends AnyStandardSchemaValidator ? NonNullable<TValidator['~standard']['types']>['output'] : TValidator extends AnyValidatorAdapter ? TValidator['types']['output'] : TValidator extends AnyValidatorObj ? ResolveValidatorOutputFn<TValidator['parse']> : ResolveValidatorOutputFn<TValidator>;
|
package/package.json
CHANGED
package/src/index.tsx
CHANGED
|
@@ -290,7 +290,13 @@ export {
|
|
|
290
290
|
export type { SearchSerializer, SearchParser } from './searchParams'
|
|
291
291
|
|
|
292
292
|
export { defaultTransformer } from './transformer'
|
|
293
|
-
export type {
|
|
293
|
+
export type {
|
|
294
|
+
RouterTransformer,
|
|
295
|
+
TransformerParse,
|
|
296
|
+
TransformerStringify,
|
|
297
|
+
DefaultTransformerParse,
|
|
298
|
+
DefaultTransformerStringify,
|
|
299
|
+
} from './transformer'
|
|
294
300
|
|
|
295
301
|
export { useBlocker, Block } from './useBlocker'
|
|
296
302
|
|
|
@@ -351,6 +357,8 @@ export type {
|
|
|
351
357
|
AnyValidatorObj,
|
|
352
358
|
ResolveValidatorInputFn,
|
|
353
359
|
ResolveValidatorOutputFn,
|
|
360
|
+
ResolveSearchValidatorInput,
|
|
361
|
+
ResolveSearchValidatorInputFn,
|
|
354
362
|
Validator,
|
|
355
363
|
ValidatorAdapter,
|
|
356
364
|
ValidatorObj,
|
package/src/route.ts
CHANGED
|
@@ -37,7 +37,7 @@ import type {
|
|
|
37
37
|
AnyValidatorAdapter,
|
|
38
38
|
AnyValidatorObj,
|
|
39
39
|
DefaultValidator,
|
|
40
|
-
|
|
40
|
+
ResolveSearchValidatorInput,
|
|
41
41
|
ResolveValidatorOutput,
|
|
42
42
|
StandardSchemaValidator,
|
|
43
43
|
ValidatorAdapter,
|
|
@@ -679,7 +679,7 @@ export type ResolveFullSearchSchemaInput<
|
|
|
679
679
|
TSearchValidator,
|
|
680
680
|
> = Assign<
|
|
681
681
|
InferFullSearchSchemaInput<TParentRoute>,
|
|
682
|
-
|
|
682
|
+
ResolveSearchValidatorInput<TSearchValidator>
|
|
683
683
|
>
|
|
684
684
|
|
|
685
685
|
export type LooseReturnType<T> = T extends (
|
|
@@ -988,7 +988,7 @@ export class Route<
|
|
|
988
988
|
customId: TCustomId
|
|
989
989
|
id: TId
|
|
990
990
|
searchSchema: ResolveValidatorOutput<TSearchValidator>
|
|
991
|
-
searchSchemaInput:
|
|
991
|
+
searchSchemaInput: ResolveSearchValidatorInput<TSearchValidator>
|
|
992
992
|
searchValidator: TSearchValidator
|
|
993
993
|
fullSearchSchema: ResolveFullSearchSchema<TParentRoute, TSearchValidator>
|
|
994
994
|
fullSearchSchemaInput: ResolveFullSearchSchemaInput<
|
package/src/router.ts
CHANGED
|
@@ -584,12 +584,13 @@ function validateSearch(validateSearch: AnyValidator, input: unknown): unknown {
|
|
|
584
584
|
if ('~standard' in validateSearch) {
|
|
585
585
|
const result = validateSearch['~standard'].validate(input)
|
|
586
586
|
|
|
587
|
-
if ('value' in result) return result.value
|
|
588
|
-
|
|
589
587
|
if (result instanceof Promise)
|
|
590
588
|
throw new SearchParamError('Async validation not supported')
|
|
591
589
|
|
|
592
|
-
|
|
590
|
+
if (result.issues)
|
|
591
|
+
throw new SearchParamError(JSON.stringify(result.issues, undefined, 2))
|
|
592
|
+
|
|
593
|
+
return result.value
|
|
593
594
|
}
|
|
594
595
|
|
|
595
596
|
if ('parse' in validateSearch) {
|
package/src/transformer.ts
CHANGED
|
@@ -47,3 +47,22 @@ const transformers = [
|
|
|
47
47
|
parse: () => undefined,
|
|
48
48
|
},
|
|
49
49
|
] as const
|
|
50
|
+
|
|
51
|
+
export type TransformerStringify<T, TSerializable> = T extends TSerializable
|
|
52
|
+
? T
|
|
53
|
+
: T extends (...args: Array<any>) => any
|
|
54
|
+
? 'Function is not serializable'
|
|
55
|
+
: { [K in keyof T]: TransformerStringify<T[K], TSerializable> }
|
|
56
|
+
|
|
57
|
+
export type TransformerParse<T, TSerializable> = T extends TSerializable
|
|
58
|
+
? T
|
|
59
|
+
: T extends JSX.Element
|
|
60
|
+
? ReadableStream
|
|
61
|
+
: { [K in keyof T]: TransformerParse<T[K], TSerializable> }
|
|
62
|
+
|
|
63
|
+
export type DefaultTransformerStringify<T> = TransformerStringify<
|
|
64
|
+
T,
|
|
65
|
+
Date | undefined
|
|
66
|
+
>
|
|
67
|
+
|
|
68
|
+
export type DefaultTransformerParse<T> = TransformerParse<T, Date | undefined>
|
package/src/validators.ts
CHANGED
|
@@ -72,7 +72,7 @@ export type AnySchema = {}
|
|
|
72
72
|
|
|
73
73
|
export type DefaultValidator = Validator<Record<string, unknown>, AnySchema>
|
|
74
74
|
|
|
75
|
-
export type
|
|
75
|
+
export type ResolveSearchValidatorInputFn<TValidator> = TValidator extends (
|
|
76
76
|
input: infer TSchemaInput,
|
|
77
77
|
) => any
|
|
78
78
|
? TSchemaInput extends SearchSchemaInput
|
|
@@ -80,6 +80,21 @@ export type ResolveValidatorInputFn<TValidator> = TValidator extends (
|
|
|
80
80
|
: ResolveValidatorOutputFn<TValidator>
|
|
81
81
|
: AnySchema
|
|
82
82
|
|
|
83
|
+
export type ResolveSearchValidatorInput<TValidator> =
|
|
84
|
+
TValidator extends AnyStandardSchemaValidator
|
|
85
|
+
? NonNullable<TValidator['~standard']['types']>['input']
|
|
86
|
+
: TValidator extends AnyValidatorAdapter
|
|
87
|
+
? TValidator['types']['input']
|
|
88
|
+
: TValidator extends AnyValidatorObj
|
|
89
|
+
? ResolveSearchValidatorInputFn<TValidator['parse']>
|
|
90
|
+
: ResolveSearchValidatorInputFn<TValidator>
|
|
91
|
+
|
|
92
|
+
export type ResolveValidatorInputFn<TValidator> = TValidator extends (
|
|
93
|
+
input: infer TInput,
|
|
94
|
+
) => any
|
|
95
|
+
? TInput
|
|
96
|
+
: undefined
|
|
97
|
+
|
|
83
98
|
export type ResolveValidatorInput<TValidator> =
|
|
84
99
|
TValidator extends AnyStandardSchemaValidator
|
|
85
100
|
? NonNullable<TValidator['~standard']['types']>['input']
|