@tanstack/react-router 1.71.0 → 1.72.1

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.
@@ -2,4 +2,4 @@ import { NoInfer, PickOptional } from './utils.js';
2
2
  import { SearchMiddleware } from './route.js';
3
3
  import { IsRequiredParams } from './link.js';
4
4
  export declare function retainSearchParams<TSearchSchema extends object>(keys: Array<keyof TSearchSchema> | true): SearchMiddleware<TSearchSchema>;
5
- export declare function stripSearchParams<TSearchSchema, const TValues = Partial<NoInfer<TSearchSchema>> | Array<keyof PickOptional<TSearchSchema>>, const TInput = IsRequiredParams<TSearchSchema> extends never ? TValues | true : TValues>(input: NoInfer<TInput>): SearchMiddleware<TSearchSchema>;
5
+ export declare function stripSearchParams<TSearchSchema, TOptionalProps = PickOptional<NoInfer<TSearchSchema>>, const TValues = Partial<NoInfer<TOptionalProps>> | Array<keyof TOptionalProps>, const TInput = IsRequiredParams<TSearchSchema> extends never ? TValues | true : TValues>(input: NoInfer<TInput>): SearchMiddleware<TSearchSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"searchMiddleware.js","sources":["../../src/searchMiddleware.ts"],"sourcesContent":["import { deepEqual } from './utils'\nimport type { NoInfer, PickOptional } from './utils'\nimport type { SearchMiddleware } from './route'\nimport type { IsRequiredParams } from './link'\n\nexport function retainSearchParams<TSearchSchema extends object>(\n keys: Array<keyof TSearchSchema> | true,\n): SearchMiddleware<TSearchSchema> {\n return ({ search, next }) => {\n const result = next(search)\n if (keys === true) {\n return { ...search, ...result }\n }\n // add missing keys from search to result\n keys.forEach((key) => {\n if (!(key in result)) {\n result[key] = search[key]\n }\n })\n return result\n }\n}\n\nexport function stripSearchParams<\n TSearchSchema,\n const TValues =\n | Partial<NoInfer<TSearchSchema>>\n | Array<keyof PickOptional<TSearchSchema>>,\n const TInput = IsRequiredParams<TSearchSchema> extends never\n ? TValues | true\n : TValues,\n>(input: NoInfer<TInput>): SearchMiddleware<TSearchSchema> {\n return ({ search, next }) => {\n if (input === true) {\n return {}\n }\n const result = next(search) as Record<string, unknown>\n if (Array.isArray(input)) {\n input.forEach((key) => {\n delete result[key]\n })\n } else {\n Object.entries(input as Record<string, unknown>).forEach(\n ([key, value]) => {\n if (deepEqual(result[key], value)) {\n delete result[key]\n }\n },\n )\n }\n return result as any\n }\n}\n"],"names":[],"mappings":";AAKO,SAAS,mBACd,MACiC;AACjC,SAAO,CAAC,EAAE,QAAQ,WAAW;AACrB,UAAA,SAAS,KAAK,MAAM;AAC1B,QAAI,SAAS,MAAM;AACjB,aAAO,EAAE,GAAG,QAAQ,GAAG;IACzB;AAEK,SAAA,QAAQ,CAAC,QAAQ;AAChB,UAAA,EAAE,OAAO,SAAS;AACb,eAAA,GAAG,IAAI,OAAO,GAAG;AAAA,MAC1B;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EAAA;AAEX;AAEO,SAAS,kBAQd,OAAyD;AACzD,SAAO,CAAC,EAAE,QAAQ,WAAW;AAC3B,QAAI,UAAU,MAAM;AAClB,aAAO;IACT;AACM,UAAA,SAAS,KAAK,MAAM;AACtB,QAAA,MAAM,QAAQ,KAAK,GAAG;AAClB,YAAA,QAAQ,CAAC,QAAQ;AACrB,eAAO,OAAO,GAAG;AAAA,MAAA,CAClB;AAAA,IAAA,OACI;AACE,aAAA,QAAQ,KAAgC,EAAE;AAAA,QAC/C,CAAC,CAAC,KAAK,KAAK,MAAM;AAChB,cAAI,UAAU,OAAO,GAAG,GAAG,KAAK,GAAG;AACjC,mBAAO,OAAO,GAAG;AAAA,UACnB;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AACO,WAAA;AAAA,EAAA;AAEX;"}
1
+ {"version":3,"file":"searchMiddleware.js","sources":["../../src/searchMiddleware.ts"],"sourcesContent":["import { deepEqual } from './utils'\nimport type { NoInfer, PickOptional } from './utils'\nimport type { SearchMiddleware } from './route'\nimport type { IsRequiredParams } from './link'\n\nexport function retainSearchParams<TSearchSchema extends object>(\n keys: Array<keyof TSearchSchema> | true,\n): SearchMiddleware<TSearchSchema> {\n return ({ search, next }) => {\n const result = next(search)\n if (keys === true) {\n return { ...search, ...result }\n }\n // add missing keys from search to result\n keys.forEach((key) => {\n if (!(key in result)) {\n result[key] = search[key]\n }\n })\n return result\n }\n}\n\nexport function stripSearchParams<\n TSearchSchema,\n TOptionalProps = PickOptional<NoInfer<TSearchSchema>>,\n const TValues =\n | Partial<NoInfer<TOptionalProps>>\n | Array<keyof TOptionalProps>,\n const TInput = IsRequiredParams<TSearchSchema> extends never\n ? TValues | true\n : TValues,\n>(input: NoInfer<TInput>): SearchMiddleware<TSearchSchema> {\n return ({ search, next }) => {\n if (input === true) {\n return {}\n }\n const result = next(search) as Record<string, unknown>\n if (Array.isArray(input)) {\n input.forEach((key) => {\n delete result[key]\n })\n } else {\n Object.entries(input as Record<string, unknown>).forEach(\n ([key, value]) => {\n if (deepEqual(result[key], value)) {\n delete result[key]\n }\n },\n )\n }\n return result as any\n }\n}\n"],"names":[],"mappings":";AAKO,SAAS,mBACd,MACiC;AACjC,SAAO,CAAC,EAAE,QAAQ,WAAW;AACrB,UAAA,SAAS,KAAK,MAAM;AAC1B,QAAI,SAAS,MAAM;AACjB,aAAO,EAAE,GAAG,QAAQ,GAAG;IACzB;AAEK,SAAA,QAAQ,CAAC,QAAQ;AAChB,UAAA,EAAE,OAAO,SAAS;AACb,eAAA,GAAG,IAAI,OAAO,GAAG;AAAA,MAC1B;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EAAA;AAEX;AAEO,SAAS,kBASd,OAAyD;AACzD,SAAO,CAAC,EAAE,QAAQ,WAAW;AAC3B,QAAI,UAAU,MAAM;AAClB,aAAO;IACT;AACM,UAAA,SAAS,KAAK,MAAM;AACtB,QAAA,MAAM,QAAQ,KAAK,GAAG;AAClB,YAAA,QAAQ,CAAC,QAAQ;AACrB,eAAO,OAAO,GAAG;AAAA,MAAA,CAClB;AAAA,IAAA,OACI;AACE,aAAA,QAAQ,KAAgC,EAAE;AAAA,QAC/C,CAAC,CAAC,KAAK,KAAK,MAAM;AAChB,cAAI,UAAU,OAAO,GAAG,GAAG,KAAK,GAAG;AACjC,mBAAO,OAAO,GAAG;AAAA,UACnB;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AACO,WAAA;AAAA,EAAA;AAEX;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/react-router",
3
- "version": "1.71.0",
3
+ "version": "1.72.1",
4
4
  "description": "Modern and scalable routing for React applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
package/src/router.ts CHANGED
@@ -1439,7 +1439,29 @@ export class Router<
1439
1439
  leaveParams: opts.leaveParams,
1440
1440
  })
1441
1441
 
1442
- const applyMiddlewares = () => {
1442
+ let search = fromSearch
1443
+ if (opts._includeValidateSearch) {
1444
+ let validatedSearch = this.options.search?.strict ? {} : search
1445
+ matchedRoutesResult?.matchedRoutes.forEach((route) => {
1446
+ try {
1447
+ if (route.options.validateSearch) {
1448
+ const validator =
1449
+ typeof route.options.validateSearch === 'object'
1450
+ ? route.options.validateSearch.parse
1451
+ : route.options.validateSearch
1452
+ validatedSearch = {
1453
+ ...validatedSearch,
1454
+ ...validator({ ...validatedSearch, ...search }),
1455
+ }
1456
+ }
1457
+ } catch (e) {
1458
+ // ignore errors here because they are already handled in matchRoutes
1459
+ }
1460
+ })
1461
+ search = validatedSearch
1462
+ }
1463
+
1464
+ const applyMiddlewares = (search: any) => {
1443
1465
  const allMiddlewares =
1444
1466
  stayingMatches?.reduce(
1445
1467
  (acc, route) => {
@@ -1515,31 +1537,11 @@ export class Router<
1515
1537
  }
1516
1538
 
1517
1539
  // Start applying middlewares
1518
- return applyNext(0, fromSearch)
1540
+ return applyNext(0, search)
1519
1541
  }
1520
1542
 
1521
- let search = applyMiddlewares()
1543
+ search = applyMiddlewares(search)
1522
1544
 
1523
- if (opts._includeValidateSearch) {
1524
- let validatedSearch = this.options.search?.strict ? {} : search
1525
- matchedRoutesResult?.matchedRoutes.forEach((route) => {
1526
- try {
1527
- if (route.options.validateSearch) {
1528
- const validator =
1529
- typeof route.options.validateSearch === 'object'
1530
- ? route.options.validateSearch.parse
1531
- : route.options.validateSearch
1532
- validatedSearch = {
1533
- ...validatedSearch,
1534
- ...validator({ ...validatedSearch, ...search }),
1535
- }
1536
- }
1537
- } catch (e) {
1538
- // ignore errors here because they are already handled in matchRoutes
1539
- }
1540
- })
1541
- search = validatedSearch
1542
- }
1543
1545
  search = replaceEqualDeep(fromSearch, search)
1544
1546
  const searchStr = this.options.stringifySearch(search)
1545
1547
 
@@ -23,9 +23,10 @@ export function retainSearchParams<TSearchSchema extends object>(
23
23
 
24
24
  export function stripSearchParams<
25
25
  TSearchSchema,
26
+ TOptionalProps = PickOptional<NoInfer<TSearchSchema>>,
26
27
  const TValues =
27
- | Partial<NoInfer<TSearchSchema>>
28
- | Array<keyof PickOptional<TSearchSchema>>,
28
+ | Partial<NoInfer<TOptionalProps>>
29
+ | Array<keyof TOptionalProps>,
29
30
  const TInput = IsRequiredParams<TSearchSchema> extends never
30
31
  ? TValues | true
31
32
  : TValues,