@tanstack/router-core 1.132.0-alpha.2 → 1.132.0-alpha.3

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.
Files changed (100) hide show
  1. package/dist/cjs/index.cjs +8 -2
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +6 -2
  4. package/dist/cjs/load-matches.cjs +636 -0
  5. package/dist/cjs/load-matches.cjs.map +1 -0
  6. package/dist/cjs/load-matches.d.cts +16 -0
  7. package/dist/cjs/qss.cjs +19 -19
  8. package/dist/cjs/qss.cjs.map +1 -1
  9. package/dist/cjs/qss.d.cts +6 -4
  10. package/dist/cjs/redirect.cjs +3 -3
  11. package/dist/cjs/redirect.cjs.map +1 -1
  12. package/dist/cjs/router.cjs +33 -702
  13. package/dist/cjs/router.cjs.map +1 -1
  14. package/dist/cjs/router.d.cts +14 -37
  15. package/dist/cjs/scroll-restoration.cjs +20 -25
  16. package/dist/cjs/scroll-restoration.cjs.map +1 -1
  17. package/dist/cjs/searchParams.cjs +7 -15
  18. package/dist/cjs/searchParams.cjs.map +1 -1
  19. package/dist/cjs/ssr/constants.cjs +5 -0
  20. package/dist/cjs/ssr/constants.cjs.map +1 -0
  21. package/dist/cjs/ssr/constants.d.cts +1 -0
  22. package/dist/cjs/ssr/{seroval-plugins.cjs → serializer/ShallowErrorPlugin.cjs} +2 -2
  23. package/dist/cjs/ssr/serializer/ShallowErrorPlugin.cjs.map +1 -0
  24. package/dist/cjs/ssr/{seroval-plugins.d.cts → serializer/ShallowErrorPlugin.d.cts} +1 -2
  25. package/dist/cjs/ssr/serializer/seroval-plugins.cjs +11 -0
  26. package/dist/cjs/ssr/serializer/seroval-plugins.cjs.map +1 -0
  27. package/dist/cjs/ssr/serializer/seroval-plugins.d.cts +2 -0
  28. package/dist/cjs/ssr/serializer/transformer.cjs +50 -0
  29. package/dist/cjs/ssr/serializer/transformer.cjs.map +1 -0
  30. package/dist/cjs/ssr/serializer/transformer.d.cts +18 -0
  31. package/dist/cjs/ssr/ssr-client.cjs +15 -1
  32. package/dist/cjs/ssr/ssr-client.cjs.map +1 -1
  33. package/dist/cjs/ssr/ssr-client.d.cts +5 -1
  34. package/dist/cjs/ssr/ssr-server.cjs +12 -10
  35. package/dist/cjs/ssr/ssr-server.cjs.map +1 -1
  36. package/dist/cjs/ssr/ssr-server.d.cts +0 -1
  37. package/dist/cjs/ssr/tsrScript.cjs +1 -1
  38. package/dist/cjs/ssr/tsrScript.cjs.map +1 -1
  39. package/dist/cjs/utils.cjs +8 -7
  40. package/dist/cjs/utils.cjs.map +1 -1
  41. package/dist/cjs/utils.d.cts +1 -1
  42. package/dist/esm/index.d.ts +6 -2
  43. package/dist/esm/index.js +9 -3
  44. package/dist/esm/index.js.map +1 -1
  45. package/dist/esm/load-matches.d.ts +16 -0
  46. package/dist/esm/load-matches.js +636 -0
  47. package/dist/esm/load-matches.js.map +1 -0
  48. package/dist/esm/qss.d.ts +6 -4
  49. package/dist/esm/qss.js +19 -19
  50. package/dist/esm/qss.js.map +1 -1
  51. package/dist/esm/redirect.js +3 -3
  52. package/dist/esm/redirect.js.map +1 -1
  53. package/dist/esm/router.d.ts +14 -37
  54. package/dist/esm/router.js +33 -702
  55. package/dist/esm/router.js.map +1 -1
  56. package/dist/esm/scroll-restoration.js +20 -25
  57. package/dist/esm/scroll-restoration.js.map +1 -1
  58. package/dist/esm/searchParams.js +7 -15
  59. package/dist/esm/searchParams.js.map +1 -1
  60. package/dist/esm/ssr/constants.d.ts +1 -0
  61. package/dist/esm/ssr/constants.js +5 -0
  62. package/dist/esm/ssr/constants.js.map +1 -0
  63. package/dist/esm/ssr/{seroval-plugins.d.ts → serializer/ShallowErrorPlugin.d.ts} +1 -2
  64. package/dist/esm/ssr/{seroval-plugins.js → serializer/ShallowErrorPlugin.js} +2 -2
  65. package/dist/esm/ssr/serializer/ShallowErrorPlugin.js.map +1 -0
  66. package/dist/esm/ssr/serializer/seroval-plugins.d.ts +2 -0
  67. package/dist/esm/ssr/serializer/seroval-plugins.js +11 -0
  68. package/dist/esm/ssr/serializer/seroval-plugins.js.map +1 -0
  69. package/dist/esm/ssr/serializer/transformer.d.ts +18 -0
  70. package/dist/esm/ssr/serializer/transformer.js +50 -0
  71. package/dist/esm/ssr/serializer/transformer.js.map +1 -0
  72. package/dist/esm/ssr/ssr-client.d.ts +5 -1
  73. package/dist/esm/ssr/ssr-client.js +15 -1
  74. package/dist/esm/ssr/ssr-client.js.map +1 -1
  75. package/dist/esm/ssr/ssr-server.d.ts +0 -1
  76. package/dist/esm/ssr/ssr-server.js +12 -10
  77. package/dist/esm/ssr/ssr-server.js.map +1 -1
  78. package/dist/esm/ssr/tsrScript.js +1 -1
  79. package/dist/esm/ssr/tsrScript.js.map +1 -1
  80. package/dist/esm/utils.d.ts +1 -1
  81. package/dist/esm/utils.js +8 -7
  82. package/dist/esm/utils.js.map +1 -1
  83. package/package.json +1 -1
  84. package/src/index.ts +12 -2
  85. package/src/load-matches.ts +955 -0
  86. package/src/qss.ts +27 -24
  87. package/src/redirect.ts +3 -3
  88. package/src/router.ts +62 -1048
  89. package/src/scroll-restoration.ts +25 -32
  90. package/src/searchParams.ts +8 -19
  91. package/src/ssr/constants.ts +1 -0
  92. package/src/ssr/{seroval-plugins.ts → serializer/ShallowErrorPlugin.ts} +2 -2
  93. package/src/ssr/serializer/seroval-plugins.ts +9 -0
  94. package/src/ssr/serializer/transformer.ts +78 -0
  95. package/src/ssr/ssr-client.ts +30 -3
  96. package/src/ssr/ssr-server.ts +18 -10
  97. package/src/ssr/tsrScript.ts +5 -1
  98. package/src/utils.ts +11 -10
  99. package/dist/cjs/ssr/seroval-plugins.cjs.map +0 -1
  100. package/dist/esm/ssr/seroval-plugins.js.map +0 -1
package/src/qss.ts CHANGED
@@ -6,12 +6,15 @@
6
6
  * This reimplementation uses modern browser APIs
7
7
  * (namely URLSearchParams) and TypeScript while still
8
8
  * maintaining the original functionality and interface.
9
+ *
10
+ * Update: this implementation has also been mangled to
11
+ * fit exactly our use-case (single value per key in encoding).
9
12
  */
10
13
 
11
14
  /**
12
15
  * Encodes an object into a query string.
13
16
  * @param obj - The object to encode into a query string.
14
- * @param [pfx] - An optional prefix to add before the query string.
17
+ * @param stringify - An optional custom stringify function.
15
18
  * @returns The encoded query string.
16
19
  * @example
17
20
  * ```
@@ -19,18 +22,20 @@
19
22
  * // Expected output: "token=foo&key=value"
20
23
  * ```
21
24
  */
22
- export function encode(obj: any, pfx?: string) {
23
- const normalizedObject = Object.entries(obj).flatMap(([key, value]) => {
24
- if (Array.isArray(value)) {
25
- return value.map((v) => [key, String(v)])
26
- } else {
27
- return [[key, String(value)]]
28
- }
29
- })
25
+ export function encode(
26
+ obj: Record<string, any>,
27
+ stringify: (value: any) => string = String,
28
+ ): string {
29
+ const result = new URLSearchParams()
30
30
 
31
- const searchParams = new URLSearchParams(normalizedObject)
31
+ for (const key in obj) {
32
+ const val = obj[key]
33
+ if (val !== undefined) {
34
+ result.set(key, stringify(val))
35
+ }
36
+ }
32
37
 
33
- return (pfx || '') + searchParams.toString()
38
+ return result.toString()
34
39
  }
35
40
 
36
41
  /**
@@ -52,28 +57,26 @@ function toValue(str: unknown) {
52
57
  /**
53
58
  * Decodes a query string into an object.
54
59
  * @param str - The query string to decode.
55
- * @param [pfx] - An optional prefix to filter out from the query string.
56
60
  * @returns The decoded key-value pairs in an object format.
57
61
  * @example
58
62
  * // Example input: decode("token=foo&key=value")
59
63
  * // Expected output: { "token": "foo", "key": "value" }
60
64
  */
61
- export function decode(str: any, pfx?: string): any {
62
- const searchParamsPart = pfx ? str.slice(pfx.length) : str
63
- const searchParams = new URLSearchParams(searchParamsPart)
65
+ export function decode(str: any): any {
66
+ const searchParams = new URLSearchParams(str)
64
67
 
65
- const entries = [...searchParams.entries()]
68
+ const result: Record<string, unknown> = {}
66
69
 
67
- return entries.reduce<Record<string, unknown>>((acc, [key, value]) => {
68
- const previousValue = acc[key]
70
+ for (const [key, value] of searchParams.entries()) {
71
+ const previousValue = result[key]
69
72
  if (previousValue == null) {
70
- acc[key] = toValue(value)
73
+ result[key] = toValue(value)
74
+ } else if (Array.isArray(previousValue)) {
75
+ previousValue.push(toValue(value))
71
76
  } else {
72
- acc[key] = Array.isArray(previousValue)
73
- ? [...previousValue, toValue(value)]
74
- : [previousValue, toValue(value)]
77
+ result[key] = [previousValue, toValue(value)]
75
78
  }
79
+ }
76
80
 
77
- return acc
78
- }, {})
81
+ return result
79
82
  }
package/src/redirect.ts CHANGED
@@ -65,9 +65,9 @@ export function redirect<
65
65
  ): Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> {
66
66
  opts.statusCode = opts.statusCode || opts.code || 307
67
67
 
68
- if (!opts.reloadDocument) {
68
+ if (!opts.reloadDocument && typeof opts.href === 'string') {
69
69
  try {
70
- new URL(`${opts.href}`)
70
+ new URL(opts.href)
71
71
  opts.reloadDocument = true
72
72
  } catch {}
73
73
  }
@@ -103,7 +103,7 @@ export function isResolvedRedirect(
103
103
  }
104
104
 
105
105
  export function parseRedirect(obj: any) {
106
- if (typeof obj === 'object' && obj.isSerializedRedirect) {
106
+ if (obj !== null && typeof obj === 'object' && obj.isSerializedRedirect) {
107
107
  return redirect(obj)
108
108
  }
109
109