@tanstack/react-router 1.97.14 → 1.97.17

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 (79) hide show
  1. package/dist/cjs/Match.cjs +8 -24
  2. package/dist/cjs/Match.cjs.map +1 -1
  3. package/dist/cjs/Matches.cjs +1 -1
  4. package/dist/cjs/Matches.cjs.map +1 -1
  5. package/dist/cjs/RouterProvider.cjs.map +1 -1
  6. package/dist/cjs/RouterProvider.d.cts +0 -1
  7. package/dist/cjs/ScriptOnce.cjs +1 -8
  8. package/dist/cjs/ScriptOnce.cjs.map +1 -1
  9. package/dist/cjs/ScriptOnce.d.cts +1 -1
  10. package/dist/cjs/Transitioner.cjs +1 -2
  11. package/dist/cjs/Transitioner.cjs.map +1 -1
  12. package/dist/cjs/awaited.cjs +1 -22
  13. package/dist/cjs/awaited.cjs.map +1 -1
  14. package/dist/cjs/index.cjs +2 -7
  15. package/dist/cjs/index.cjs.map +1 -1
  16. package/dist/cjs/index.d.cts +4 -6
  17. package/dist/cjs/router.cjs +11 -129
  18. package/dist/cjs/router.cjs.map +1 -1
  19. package/dist/cjs/router.d.cts +33 -93
  20. package/dist/cjs/routerContext.cjs.map +1 -1
  21. package/dist/cjs/routerContext.d.cts +7 -2
  22. package/dist/cjs/serializer.d.cts +15 -0
  23. package/dist/cjs/useRouterState.cjs +1 -1
  24. package/dist/cjs/useRouterState.cjs.map +1 -1
  25. package/dist/cjs/utils.cjs.map +1 -1
  26. package/dist/cjs/utils.d.cts +2 -2
  27. package/dist/esm/Match.js +9 -25
  28. package/dist/esm/Match.js.map +1 -1
  29. package/dist/esm/Matches.js +1 -1
  30. package/dist/esm/Matches.js.map +1 -1
  31. package/dist/esm/RouterProvider.d.ts +0 -1
  32. package/dist/esm/RouterProvider.js.map +1 -1
  33. package/dist/esm/ScriptOnce.d.ts +1 -1
  34. package/dist/esm/ScriptOnce.js +1 -8
  35. package/dist/esm/ScriptOnce.js.map +1 -1
  36. package/dist/esm/Transitioner.js +1 -2
  37. package/dist/esm/Transitioner.js.map +1 -1
  38. package/dist/esm/awaited.js +1 -22
  39. package/dist/esm/awaited.js.map +1 -1
  40. package/dist/esm/index.d.ts +4 -6
  41. package/dist/esm/index.js +1 -6
  42. package/dist/esm/index.js.map +1 -1
  43. package/dist/esm/router.d.ts +33 -93
  44. package/dist/esm/router.js +11 -129
  45. package/dist/esm/router.js.map +1 -1
  46. package/dist/esm/routerContext.d.ts +7 -2
  47. package/dist/esm/routerContext.js.map +1 -1
  48. package/dist/esm/serializer.d.ts +15 -0
  49. package/dist/esm/useRouterState.js +1 -1
  50. package/dist/esm/useRouterState.js.map +1 -1
  51. package/dist/esm/utils.d.ts +2 -2
  52. package/dist/esm/utils.js.map +1 -1
  53. package/package.json +1 -1
  54. package/src/Match.tsx +4 -29
  55. package/src/Matches.tsx +1 -1
  56. package/src/RouterProvider.tsx +3 -3
  57. package/src/ScriptOnce.tsx +0 -8
  58. package/src/Transitioner.tsx +1 -1
  59. package/src/awaited.tsx +3 -25
  60. package/src/index.tsx +12 -34
  61. package/src/router.ts +44 -271
  62. package/src/routerContext.tsx +7 -1
  63. package/src/serializer.ts +24 -0
  64. package/src/useRouterState.tsx +1 -1
  65. package/src/utils.ts +1 -1
  66. package/dist/cjs/isServerSideError.cjs +0 -22
  67. package/dist/cjs/isServerSideError.cjs.map +0 -1
  68. package/dist/cjs/isServerSideError.d.cts +0 -5
  69. package/dist/cjs/transformer.cjs +0 -137
  70. package/dist/cjs/transformer.cjs.map +0 -1
  71. package/dist/cjs/transformer.d.cts +0 -16
  72. package/dist/esm/isServerSideError.d.ts +0 -5
  73. package/dist/esm/isServerSideError.js +0 -22
  74. package/dist/esm/isServerSideError.js.map +0 -1
  75. package/dist/esm/transformer.d.ts +0 -16
  76. package/dist/esm/transformer.js +0 -137
  77. package/dist/esm/transformer.js.map +0 -1
  78. package/src/isServerSideError.tsx +0 -23
  79. package/src/transformer.ts +0 -192
@@ -1,15 +1,12 @@
1
1
  import { createMemoryHistory, createBrowserHistory, parseHref } from "@tanstack/history";
2
2
  import { Store, batch } from "@tanstack/react-store";
3
3
  import invariant from "tiny-invariant";
4
- import warning from "tiny-warning";
5
- import jsesc from "jsesc";
6
4
  import { rootRouteId } from "./root.js";
7
5
  import { defaultStringifySearch, defaultParseSearch } from "./searchParams.js";
8
6
  import { pick, createControlledPromise, deepEqual, replaceEqualDeep, last, functionalUpdate } from "./utils.js";
9
7
  import { trimPath, trimPathLeft, parsePathname, resolvePath, cleanPath, trimPathRight, matchPathname, interpolatePath, joinPaths } from "./path.js";
10
8
  import { isResolvedRedirect, isRedirect } from "./redirects.js";
11
9
  import { isNotFound } from "./not-found.js";
12
- import { defaultTransformer } from "./transformer.js";
13
10
  const componentTypes = [
14
11
  "component",
15
12
  "errorComponent",
@@ -374,7 +371,7 @@ class Router {
374
371
  }) ?? {}
375
372
  };
376
373
  }
377
- } catch (e) {
374
+ } catch {
378
375
  }
379
376
  });
380
377
  search = validatedSearch;
@@ -423,7 +420,7 @@ class Router {
423
420
  ) ?? {}
424
421
  };
425
422
  return validatedSearch;
426
- } catch (e) {
423
+ } catch {
427
424
  }
428
425
  };
429
426
  middlewares.push(validate);
@@ -964,17 +961,7 @@ class Router {
964
961
  cause: preload ? "preload" : cause,
965
962
  matches
966
963
  };
967
- let beforeLoadContext = await ((_c = (_b = route.options).beforeLoad) == null ? void 0 : _c.call(_b, beforeLoadFnContext)) ?? {};
968
- if (this.serializeLoaderData) {
969
- beforeLoadContext = this.serializeLoaderData(
970
- "__beforeLoadContext",
971
- beforeLoadContext,
972
- {
973
- router: this,
974
- match: this.getMatch(matchId)
975
- }
976
- );
977
- }
964
+ const beforeLoadContext = await ((_c = (_b = route.options).beforeLoad) == null ? void 0 : _c.call(_b, beforeLoadFnContext)) ?? {};
978
965
  if (isRedirect(beforeLoadContext) || isNotFound(beforeLoadContext)) {
979
966
  handleSerialError(index, beforeLoadContext, "BEFORE_LOAD");
980
967
  }
@@ -1054,7 +1041,7 @@ class Router {
1054
1041
  preload: !!preload && !this.state.matches.find((d) => d.id === matchId)
1055
1042
  }));
1056
1043
  const runLoader = async () => {
1057
- var _a2, _b2, _c2, _d, _e, _f, _g, _h;
1044
+ var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i;
1058
1045
  try {
1059
1046
  const potentialPendingMinPromise = async () => {
1060
1047
  const latestMatch = this.getMatch(matchId);
@@ -1068,17 +1055,7 @@ class Router {
1068
1055
  ...prev,
1069
1056
  isFetching: "loader"
1070
1057
  }));
1071
- let loaderData = await ((_b2 = (_a2 = route.options).loader) == null ? void 0 : _b2.call(_a2, getLoaderContext()));
1072
- if (this.serializeLoaderData) {
1073
- loaderData = this.serializeLoaderData(
1074
- "loaderData",
1075
- loaderData,
1076
- {
1077
- router: this,
1078
- match: this.getMatch(matchId)
1079
- }
1080
- );
1081
- }
1058
+ const loaderData = await ((_b2 = (_a2 = route.options).loader) == null ? void 0 : _b2.call(_a2, getLoaderContext()));
1082
1059
  handleRedirectAndNotFound(
1083
1060
  this.getMatch(matchId),
1084
1061
  loaderData
@@ -1129,6 +1106,10 @@ class Router {
1129
1106
  isFetching: false
1130
1107
  }));
1131
1108
  }
1109
+ (_i = this.serverSsr) == null ? void 0 : _i.onMatchSettled({
1110
+ router: this,
1111
+ match: this.getMatch(matchId)
1112
+ });
1132
1113
  await route._componentsPromise;
1133
1114
  } catch (err) {
1134
1115
  updateMatch(matchId, (prev) => ({
@@ -1369,104 +1350,6 @@ class Router {
1369
1350
  }
1370
1351
  return match;
1371
1352
  };
1372
- this.dehydrate = () => {
1373
- var _a;
1374
- const pickError = ((_a = this.options.errorSerializer) == null ? void 0 : _a.serialize) ?? defaultSerializeError;
1375
- return {
1376
- state: {
1377
- dehydratedMatches: this.state.matches.map((d) => {
1378
- return {
1379
- ...pick(d, ["id", "status", "updatedAt"]),
1380
- // If an error occurs server-side during SSRing,
1381
- // send a small subset of the error to the client
1382
- error: d.error ? {
1383
- data: pickError(d.error),
1384
- __isServerError: true
1385
- } : void 0
1386
- // NOTE: We don't send the loader data here, because
1387
- // there is a potential that it needs to be streamed.
1388
- // Instead, we render it next to the route match in the HTML
1389
- // which gives us the potential to stream it via suspense.
1390
- };
1391
- })
1392
- },
1393
- manifest: this.manifest
1394
- };
1395
- };
1396
- this.hydrate = () => {
1397
- var _a, _b, _c;
1398
- let ctx;
1399
- if (typeof document !== "undefined") {
1400
- ctx = this.options.transformer.parse((_a = window.__TSR__) == null ? void 0 : _a.dehydrated);
1401
- }
1402
- invariant(
1403
- ctx,
1404
- "Expected to find a dehydrated data on window.__TSR__.dehydrated... but we did not. Please file an issue!"
1405
- );
1406
- this.dehydratedData = ctx.payload;
1407
- (_c = (_b = this.options).hydrate) == null ? void 0 : _c.call(_b, ctx.payload);
1408
- const dehydratedState = ctx.router.state;
1409
- const matches = this.matchRoutes(this.state.location).map((match) => {
1410
- const dehydratedMatch = dehydratedState.dehydratedMatches.find(
1411
- (d) => d.id === match.id
1412
- );
1413
- invariant(
1414
- dehydratedMatch,
1415
- `Could not find a client-side match for dehydrated match with id: ${match.id}!`
1416
- );
1417
- return {
1418
- ...match,
1419
- ...dehydratedMatch
1420
- };
1421
- });
1422
- this.__store.setState((s) => {
1423
- return {
1424
- ...s,
1425
- matches
1426
- };
1427
- });
1428
- this.manifest = ctx.router.manifest;
1429
- };
1430
- this.injectedHtml = [];
1431
- this.injectHtml = (html) => {
1432
- const cb = () => {
1433
- this.injectedHtml = this.injectedHtml.filter((d) => d !== cb);
1434
- return html;
1435
- };
1436
- this.injectedHtml.push(cb);
1437
- };
1438
- this.injectScript = (script, opts) => {
1439
- this.injectHtml(
1440
- `<script class='tsr-once'>${script}${process.env.NODE_ENV === "development" && ((opts == null ? void 0 : opts.logScript) ?? true) ? `; console.info(\`Injected From Server:
1441
- ${jsesc(script, { quotes: "backtick" })}\`)` : ""}; if (typeof __TSR__ !== 'undefined') __TSR__.cleanScripts()<\/script>`
1442
- );
1443
- };
1444
- this.streamedKeys = /* @__PURE__ */ new Set();
1445
- this.getStreamedValue = (key) => {
1446
- var _a;
1447
- if (this.isServer) {
1448
- return void 0;
1449
- }
1450
- const streamedValue = (_a = window.__TSR__) == null ? void 0 : _a.streamedValues[key];
1451
- if (!streamedValue) {
1452
- return;
1453
- }
1454
- if (!streamedValue.parsed) {
1455
- streamedValue.parsed = this.options.transformer.parse(streamedValue.value);
1456
- }
1457
- return streamedValue.parsed;
1458
- };
1459
- this.streamValue = (key, value) => {
1460
- var _a;
1461
- warning(
1462
- !this.streamedKeys.has(key),
1463
- "Key has already been streamed: " + key
1464
- );
1465
- this.streamedKeys.add(key);
1466
- this.injectScript(
1467
- `__TSR__.streamedValues['${key}'] = { value: ${(_a = this.serializer) == null ? void 0 : _a.call(this, this.options.transformer.stringify(value))}}`
1468
- );
1469
- };
1470
1353
  this._handleNotFound = (matches, err, {
1471
1354
  updateMatch = this.updateMatch
1472
1355
  } = {}) => {
@@ -1510,11 +1393,10 @@ ${jsesc(script, { quotes: "backtick" })}\`)` : ""}; if (typeof __TSR__ !== 'unde
1510
1393
  caseSensitive: options.caseSensitive ?? false,
1511
1394
  notFoundMode: options.notFoundMode ?? "fuzzy",
1512
1395
  stringifySearch: options.stringifySearch ?? defaultStringifySearch,
1513
- parseSearch: options.parseSearch ?? defaultParseSearch,
1514
- transformer: options.transformer ?? defaultTransformer
1396
+ parseSearch: options.parseSearch ?? defaultParseSearch
1515
1397
  });
1516
1398
  if (typeof document !== "undefined") {
1517
- window.__TSR__ROUTER__ = this;
1399
+ window.__TSR_ROUTER__ = this;
1518
1400
  }
1519
1401
  }
1520
1402
  get state() {