@bleedingdev/modern-js-plugin-tanstack 3.2.0-ultramodern.99 → 3.4.0-ultramodern.0

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 (127) hide show
  1. package/dist/cjs/cli/index.js +80 -34
  2. package/dist/cjs/cli/routeSplitting.js +13 -41
  3. package/dist/cjs/cli/tanstackTypes.js +114 -200
  4. package/dist/cjs/cli.js +12 -8
  5. package/dist/cjs/runtime/basepathRewrite.js +12 -8
  6. package/dist/cjs/runtime/dataMutation.js +9 -5
  7. package/dist/cjs/runtime/hooks.js +20 -19
  8. package/dist/cjs/runtime/hydrationBoundary.js +12 -7
  9. package/dist/cjs/runtime/index.js +66 -54
  10. package/dist/cjs/runtime/lifecycle.js +21 -91
  11. package/dist/cjs/runtime/loaderBridge.js +173 -0
  12. package/dist/cjs/runtime/outlet.js +58 -0
  13. package/dist/cjs/runtime/plugin.js +190 -110
  14. package/dist/cjs/runtime/plugin.node.js +25 -40
  15. package/dist/cjs/runtime/plugin.worker.js +9 -5
  16. package/dist/cjs/runtime/pluginCore.js +55 -0
  17. package/dist/cjs/runtime/prefetchLink.js +10 -6
  18. package/dist/cjs/runtime/register.js +56 -0
  19. package/dist/cjs/runtime/routeTree.js +30 -212
  20. package/dist/cjs/runtime/router.js +41 -0
  21. package/dist/cjs/runtime/rsc/ClientSlot.js +9 -5
  22. package/dist/cjs/runtime/rsc/CompositeComponent.js +9 -5
  23. package/dist/cjs/runtime/rsc/ReplayableStream.js +14 -9
  24. package/dist/cjs/runtime/rsc/RscNodeRenderer.js +9 -5
  25. package/dist/cjs/runtime/rsc/SlotContext.js +9 -5
  26. package/dist/cjs/runtime/rsc/client.js +9 -5
  27. package/dist/cjs/runtime/rsc/createRscProxy.js +9 -5
  28. package/dist/cjs/runtime/rsc/index.js +9 -5
  29. package/dist/cjs/runtime/rsc/payloadRouter.js +44 -6
  30. package/dist/cjs/runtime/rsc/server.js +9 -5
  31. package/dist/cjs/runtime/rsc/slotUsageSanitizer.js +9 -5
  32. package/dist/cjs/runtime/rsc/symbols.js +20 -15
  33. package/dist/cjs/runtime/state.js +45 -0
  34. package/dist/cjs/runtime/types.js +13 -9
  35. package/dist/cjs/runtime/utils.js +9 -11
  36. package/dist/cjs/runtime.js +9 -5
  37. package/dist/esm/cli/index.mjs +73 -28
  38. package/dist/esm/cli/routeSplitting.mjs +1 -30
  39. package/dist/esm/cli/tanstackTypes.mjs +100 -190
  40. package/dist/esm/runtime/hooks.mjs +1 -8
  41. package/dist/esm/runtime/hydrationBoundary.mjs +3 -2
  42. package/dist/esm/runtime/index.mjs +4 -2
  43. package/dist/esm/runtime/lifecycle.mjs +1 -82
  44. package/dist/esm/runtime/loaderBridge.mjs +114 -0
  45. package/dist/esm/runtime/outlet.mjs +17 -0
  46. package/dist/esm/runtime/plugin.mjs +183 -107
  47. package/dist/esm/runtime/plugin.node.mjs +19 -38
  48. package/dist/esm/runtime/pluginCore.mjs +14 -0
  49. package/dist/esm/runtime/prefetchLink.mjs +1 -1
  50. package/dist/esm/runtime/register.mjs +18 -0
  51. package/dist/esm/runtime/routeTree.mjs +15 -198
  52. package/dist/esm/runtime/router.mjs +2 -0
  53. package/dist/esm/runtime/rsc/payloadRouter.mjs +35 -1
  54. package/dist/esm/runtime/state.mjs +7 -0
  55. package/dist/esm/runtime/utils.mjs +0 -6
  56. package/dist/esm-node/cli/index.mjs +73 -28
  57. package/dist/esm-node/cli/routeSplitting.mjs +1 -30
  58. package/dist/esm-node/cli/tanstackTypes.mjs +100 -190
  59. package/dist/esm-node/runtime/hooks.mjs +1 -8
  60. package/dist/esm-node/runtime/hydrationBoundary.mjs +3 -2
  61. package/dist/esm-node/runtime/index.mjs +4 -2
  62. package/dist/esm-node/runtime/lifecycle.mjs +1 -82
  63. package/dist/esm-node/runtime/loaderBridge.mjs +115 -0
  64. package/dist/esm-node/runtime/outlet.mjs +18 -0
  65. package/dist/esm-node/runtime/plugin.mjs +183 -107
  66. package/dist/esm-node/runtime/plugin.node.mjs +19 -38
  67. package/dist/esm-node/runtime/pluginCore.mjs +15 -0
  68. package/dist/esm-node/runtime/prefetchLink.mjs +1 -1
  69. package/dist/esm-node/runtime/register.mjs +19 -0
  70. package/dist/esm-node/runtime/routeTree.mjs +15 -198
  71. package/dist/esm-node/runtime/router.mjs +3 -0
  72. package/dist/esm-node/runtime/rsc/payloadRouter.mjs +35 -1
  73. package/dist/esm-node/runtime/state.mjs +8 -0
  74. package/dist/esm-node/runtime/utils.mjs +0 -6
  75. package/dist/types/cli/index.d.ts +11 -2
  76. package/dist/types/cli/routeSplitting.d.ts +6 -15
  77. package/dist/types/cli/tanstackTypes.d.ts +21 -1
  78. package/dist/types/runtime/hooks.d.ts +8 -33
  79. package/dist/types/runtime/index.d.ts +6 -3
  80. package/dist/types/runtime/lifecycle.d.ts +7 -22
  81. package/dist/types/runtime/loaderBridge.d.ts +48 -0
  82. package/dist/types/runtime/outlet.d.ts +2 -0
  83. package/dist/types/runtime/plugin.d.ts +1 -14
  84. package/dist/types/runtime/plugin.node.d.ts +1 -14
  85. package/dist/types/runtime/pluginCore.d.ts +21 -0
  86. package/dist/types/runtime/register.d.ts +9 -0
  87. package/dist/types/runtime/routeTree.d.ts +0 -2
  88. package/dist/types/runtime/router.d.ts +14 -0
  89. package/dist/types/runtime/state.d.ts +16 -0
  90. package/dist/types/runtime/types.d.ts +7 -53
  91. package/package.json +40 -38
  92. package/rstest.config.mts +6 -0
  93. package/src/cli/index.ts +146 -24
  94. package/src/cli/routeSplitting.ts +6 -44
  95. package/src/cli/tanstackTypes.ts +203 -208
  96. package/src/runtime/hooks.ts +10 -27
  97. package/src/runtime/hydrationBoundary.tsx +5 -5
  98. package/src/runtime/index.tsx +12 -14
  99. package/src/runtime/lifecycle.ts +16 -151
  100. package/src/runtime/loaderBridge.ts +257 -0
  101. package/src/runtime/outlet.tsx +48 -0
  102. package/src/runtime/plugin.node.tsx +28 -83
  103. package/src/runtime/plugin.tsx +350 -202
  104. package/src/runtime/pluginCore.ts +48 -0
  105. package/src/runtime/prefetchLink.tsx +1 -1
  106. package/src/runtime/register.ts +58 -0
  107. package/src/runtime/routeTree.ts +41 -365
  108. package/src/runtime/router.ts +15 -0
  109. package/src/runtime/rsc/payloadRouter.ts +45 -2
  110. package/src/runtime/ssr-shim.d.ts +1 -3
  111. package/src/runtime/state.ts +29 -0
  112. package/src/runtime/types.ts +20 -67
  113. package/src/runtime/utils.tsx +3 -7
  114. package/tests/router/cli.test.ts +373 -31
  115. package/tests/router/hooks.test.ts +26 -0
  116. package/tests/router/loaderBridge.test.ts +211 -0
  117. package/tests/router/packageSurface.test.ts +24 -0
  118. package/tests/router/prefetchLink.test.tsx +43 -7
  119. package/tests/router/register.test.ts +46 -0
  120. package/tests/router/routeTree.test.ts +176 -139
  121. package/tests/router/rsc.test.tsx +70 -0
  122. package/tests/router/tanstackTypes.test.ts +395 -7
  123. package/dist/cjs/runtime/DefaultNotFound.js +0 -47
  124. package/dist/esm/runtime/DefaultNotFound.mjs +0 -13
  125. package/dist/esm-node/runtime/DefaultNotFound.mjs +0 -14
  126. package/dist/types/runtime/DefaultNotFound.d.ts +0 -2
  127. package/src/runtime/DefaultNotFound.tsx +0 -15
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -31,6 +35,7 @@ __webpack_require__.d(__webpack_exports__, {
31
35
  loadTanstackRscPayload: ()=>loadTanstackRscPayload,
32
36
  loadTanstackRscRouteData: ()=>loadTanstackRscRouteData
33
37
  });
38
+ const router_namespaceObject = require("@modern-js/runtime-utils/router");
34
39
  const react_router_namespaceObject = require("@tanstack/react-router");
35
40
  const payloadFetchCache = new Map();
36
41
  let payloadDecoder;
@@ -70,6 +75,39 @@ function toPayloadRoute(match) {
70
75
  pathnameBase: 'string' == typeof match.pathnameBase ? match.pathnameBase : pathname
71
76
  };
72
77
  }
78
+ function shouldRedactServerError(status = 500) {
79
+ return status >= 500 && 'development' !== process.env.NODE_ENV && 'test' !== process.env.NODE_ENV;
80
+ }
81
+ function serializePayloadError(error) {
82
+ if ((0, router_namespaceObject.isRouteErrorResponse)(error)) {
83
+ if (shouldRedactServerError(error.status)) return {
84
+ status: error.status,
85
+ statusText: 'Internal Server Error',
86
+ data: 'Unexpected Server Error',
87
+ __type: 'RouteErrorResponse'
88
+ };
89
+ return {
90
+ ...error,
91
+ __type: 'RouteErrorResponse'
92
+ };
93
+ }
94
+ if (error instanceof Error) {
95
+ if (shouldRedactServerError()) return {
96
+ message: 'Unexpected Server Error',
97
+ stack: void 0,
98
+ __type: 'Error'
99
+ };
100
+ return {
101
+ message: error.message,
102
+ stack: error.stack,
103
+ __type: 'Error',
104
+ ...'Error' !== error.name ? {
105
+ __subType: error.name
106
+ } : {}
107
+ };
108
+ }
109
+ return error;
110
+ }
73
111
  function createTanstackRscServerPayload(router, options = {}) {
74
112
  const matches = Array.isArray(router.state?.matches) ? router.state.matches : [];
75
113
  const routes = [];
@@ -80,7 +118,7 @@ function createTanstackRscServerPayload(router, options = {}) {
80
118
  if (payloadRoute) {
81
119
  routes.push(payloadRoute);
82
120
  if ('loaderData' in match && void 0 !== match.loaderData && !(options.omitClientLoaderData && payloadRoute.hasClientLoader)) loaderData[payloadRoute.id] = match.loaderData;
83
- if (void 0 !== match.error) errors[payloadRoute.id] = match.error;
121
+ if (void 0 !== match.error) errors[payloadRoute.id] = serializePayloadError(match.error);
84
122
  }
85
123
  }
86
124
  return {
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -23,16 +27,6 @@ var __webpack_require__ = {};
23
27
  })();
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
- __webpack_require__.d(__webpack_exports__, {
27
- RENDERABLE_RSC: ()=>RENDERABLE_RSC,
28
- RSC_PROXY_GET_TREE: ()=>RSC_PROXY_GET_TREE,
29
- RSC_PROXY_PATH: ()=>RSC_PROXY_PATH,
30
- RSC_SLOT_USAGES: ()=>RSC_SLOT_USAGES,
31
- RSC_SLOT_USAGES_STREAM: ()=>RSC_SLOT_USAGES_STREAM,
32
- SERVER_COMPONENT_STREAM: ()=>SERVER_COMPONENT_STREAM,
33
- isRenderableServerComponent: ()=>isRenderableServerComponent,
34
- isServerComponent: ()=>isServerComponent
35
- });
36
30
  const SERVER_COMPONENT_STREAM = Symbol.for('modern.tanstack.rsc.stream');
37
31
  const RENDERABLE_RSC = Symbol.for('modern.tanstack.rsc.renderable');
38
32
  const RSC_PROXY_GET_TREE = Symbol.for('modern.tanstack.rsc.proxy.getTree');
@@ -49,6 +43,17 @@ function isRenderableServerComponent(value) {
49
43
  if ('object' != typeof value && 'function' != typeof value) return false;
50
44
  return RENDERABLE_RSC in value && true === value[RENDERABLE_RSC];
51
45
  }
46
+ __webpack_require__.d(__webpack_exports__, {
47
+ isRenderableServerComponent: ()=>isRenderableServerComponent,
48
+ isServerComponent: ()=>isServerComponent
49
+ }, {
50
+ RENDERABLE_RSC: RENDERABLE_RSC,
51
+ RSC_PROXY_GET_TREE: RSC_PROXY_GET_TREE,
52
+ RSC_PROXY_PATH: RSC_PROXY_PATH,
53
+ RSC_SLOT_USAGES: RSC_SLOT_USAGES,
54
+ RSC_SLOT_USAGES_STREAM: RSC_SLOT_USAGES_STREAM,
55
+ SERVER_COMPONENT_STREAM: SERVER_COMPONENT_STREAM
56
+ });
52
57
  exports.RENDERABLE_RSC = __webpack_exports__.RENDERABLE_RSC;
53
58
  exports.RSC_PROXY_GET_TREE = __webpack_exports__.RSC_PROXY_GET_TREE;
54
59
  exports.RSC_PROXY_PATH = __webpack_exports__.RSC_PROXY_PATH;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ getTanstackRouterState: ()=>getTanstackRouterState
32
+ });
33
+ const context_namespaceObject = require("@modern-js/runtime/context");
34
+ function getTanstackRouterState(context) {
35
+ const state = (0, context_namespaceObject.getRouterRuntimeState)(context);
36
+ if (void 0 === state || 'tanstack' !== state.framework) return;
37
+ return state;
38
+ }
39
+ exports.getTanstackRouterState = __webpack_exports__.getTanstackRouterState;
40
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
41
+ "getTanstackRouterState"
42
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
43
+ Object.defineProperty(exports, '__esModule', {
44
+ value: true
45
+ });
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -23,16 +27,16 @@ var __webpack_require__ = {};
23
27
  })();
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
- __webpack_require__.d(__webpack_exports__, {
27
- getModernTanstackRouterFastDefaults: ()=>getModernTanstackRouterFastDefaults,
28
- modernTanstackRouterFastDefaults: ()=>modernTanstackRouterFastDefaults
29
- });
30
30
  const modernTanstackRouterFastDefaults = {
31
31
  defaultStructuralSharing: true
32
32
  };
33
33
  const getModernTanstackRouterFastDefaults = (config = {})=>({
34
34
  defaultStructuralSharing: config.defaultStructuralSharing ?? modernTanstackRouterFastDefaults.defaultStructuralSharing
35
35
  });
36
+ __webpack_require__.d(__webpack_exports__, {}, {
37
+ getModernTanstackRouterFastDefaults: getModernTanstackRouterFastDefaults,
38
+ modernTanstackRouterFastDefaults: modernTanstackRouterFastDefaults
39
+ });
36
40
  exports.getModernTanstackRouterFastDefaults = __webpack_exports__.getModernTanstackRouterFastDefaults;
37
41
  exports.modernTanstackRouterFastDefaults = __webpack_exports__.modernTanstackRouterFastDefaults;
38
42
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -41,7 +45,6 @@ __webpack_require__.d(__webpack_exports__, {
41
45
  const jsx_runtime_namespaceObject = require("react/jsx-runtime");
42
46
  const external_react_namespaceObject = require("react");
43
47
  var external_react_default = /*#__PURE__*/ __webpack_require__.n(external_react_namespaceObject);
44
- const external_DefaultNotFound_js_namespaceObject = require("./DefaultNotFound.js");
45
48
  function getRouteObjects(routes, { globalApp, ssrMode, props }) {
46
49
  const createLayoutElement = (Component)=>{
47
50
  const GlobalLayout = globalApp;
@@ -62,7 +65,6 @@ function getRouteObjects(routes, { globalApp, ssrMode, props }) {
62
65
  id: route.id,
63
66
  loader: route.loader,
64
67
  action: route.action,
65
- hasErrorBoundary: route.hasErrorBoundary,
66
68
  shouldRevalidate: route.shouldRevalidate,
67
69
  handle: {
68
70
  ...route.handle,
@@ -98,10 +100,6 @@ function getRouteObjects(routes, { globalApp, ssrMode, props }) {
98
100
  };
99
101
  routeObjects.push(routeObject);
100
102
  }
101
- routeObjects.push({
102
- path: '*',
103
- element: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DefaultNotFound_js_namespaceObject.DefaultNotFound, {})
104
- });
105
103
  return routeObjects;
106
104
  }
107
105
  function createRouteObjectsFromConfig({ routesConfig, props, ssrMode }) {
@@ -24,11 +24,15 @@ function __webpack_require__(moduleId) {
24
24
  };
25
25
  })();
26
26
  (()=>{
27
- __webpack_require__.d = (exports1, definition)=>{
28
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
29
- enumerable: true,
30
- get: definition[key]
31
- });
27
+ __webpack_require__.d = (exports1, getters, values)=>{
28
+ var define = (defs, kind)=>{
29
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
30
+ enumerable: true,
31
+ [kind]: defs[key]
32
+ });
33
+ };
34
+ define(getters, "get");
35
+ define(values, "value");
32
36
  };
33
37
  })();
34
38
  (()=>{
@@ -1,11 +1,11 @@
1
1
  import node_path from "node:path";
2
2
  import { NESTED_ROUTE_SPEC_FILE, filterRoutesForServer, fs } from "@modern-js/utils";
3
- import { createTanstackRsbuildRouteSplittingProfile, isTanstackStartRouteModuleSource, resolveTanstackRouteCodeSplittingEnabled } from "./routeSplitting.mjs";
4
- import { generateTanstackRouterTypesSourceForEntry, isTanstackRouterFrameworkEnabled } from "./tanstackTypes.mjs";
3
+ import { createTanstackRsbuildRouteSplittingProfile, resolveTanstackRouteCodeSplittingEnabled } from "./routeSplitting.mjs";
4
+ import { collectCanonicalRoutesForEntry, generateTanstackRouterTypesSourceForEntry } from "./tanstackTypes.mjs";
5
5
  import { __webpack_require__ } from "../rslib-runtime.mjs";
6
6
  import * as __rspack_external__modern_js_runtime_cli_401ee077 from "@modern-js/runtime/cli";
7
7
  __webpack_require__.add({
8
- "@modern-js/runtime/cli" (module) {
8
+ 2320 (module) {
9
9
  module.exports = __rspack_external__modern_js_runtime_cli_401ee077;
10
10
  }
11
11
  });
@@ -15,8 +15,8 @@ const ENTRYPOINTS_KEY = '@modern-js/plugin-tanstack';
15
15
  let runtimeRouterCli;
16
16
  function getRuntimeRouterCli() {
17
17
  if (runtimeRouterCli) return runtimeRouterCli;
18
- const cli = __webpack_require__("@modern-js/runtime/cli");
19
- if (cli.handleGeneratorEntryCode && cli.getEntrypointRoutesDir) {
18
+ const cli = __webpack_require__(2320);
19
+ if (cli.handleGeneratorEntryCode && cli.getEntrypointRoutesDir && cli.getEntrypointRoutesOwner) {
20
20
  runtimeRouterCli = cli;
21
21
  return runtimeRouterCli;
22
22
  }
@@ -32,6 +32,14 @@ async function writeFileIfChanged(filePath, content) {
32
32
  function createRegisterDtsContent(opts) {
33
33
  const importStatements = opts.entries.map((entryName, index)=>`import type { router as router${index} } from './${entryName}/router.gen';`).join('\n');
34
34
  const routerUnionType = opts.entries.map((_, index)=>`typeof router${index}`).join(' | ');
35
+ const canonicalEntries = Object.entries(opts.canonicalRoutes ?? {});
36
+ const canonicalRoutesAugmentation = canonicalEntries.length > 0 ? `
37
+ declare module '${opts.i18nRuntimeModule || '@modern-js/plugin-i18n/runtime'}' {
38
+ interface UltramodernCanonicalRoutes {
39
+ ${canonicalEntries.map(([routePath, paramsType])=>` '${routePath}': ${paramsType};`).join('\n')}
40
+ }
41
+ }
42
+ ` : '';
35
43
  return `// This file is auto-generated by Modern.js. Do not edit manually.
36
44
 
37
45
  ${importStatements}
@@ -41,19 +49,21 @@ declare module '${opts.runtimeModule}' {
41
49
  router: ${routerUnionType};
42
50
  }
43
51
  }
44
- `;
52
+ ${canonicalRoutesAugmentation}`;
45
53
  }
46
54
  async function writeTanstackRegisterFile(opts) {
47
- const { entries, generatedDirName = DEFAULT_GENERATED_DIR_NAME, runtimeModule = '@modern-js/plugin-tanstack/runtime', srcDirectory } = opts;
55
+ const { entries, generatedDirName = DEFAULT_GENERATED_DIR_NAME, runtimeModule = '@modern-js/plugin-tanstack/runtime', srcDirectory, canonicalRoutes, i18nRuntimeModule } = opts;
48
56
  if (0 === entries.length) return;
49
57
  const registerDtsPath = node_path.join(srcDirectory, generatedDirName, 'register.gen.d.ts');
50
58
  await writeFileIfChanged(registerDtsPath, createRegisterDtsContent({
51
59
  entries,
52
- runtimeModule
60
+ runtimeModule,
61
+ canonicalRoutes,
62
+ i18nRuntimeModule
53
63
  }));
54
64
  }
55
65
  async function writeTanstackRouterTypesForEntries(opts) {
56
- const { appContext, generatedDirName = DEFAULT_GENERATED_DIR_NAME, routesByEntry } = opts;
66
+ const { appContext, generatedDirName = DEFAULT_GENERATED_DIR_NAME, routesByEntry, i18nPluginInstalled = false } = opts;
57
67
  const entryNames = Object.keys(routesByEntry);
58
68
  await Promise.all(entryNames.map(async (entryName)=>{
59
69
  const { routerGenTs } = await generateTanstackRouterTypesSourceForEntry({
@@ -70,10 +80,21 @@ async function writeTanstackRouterTypesForEntries(opts) {
70
80
  if (mainEntryName && b === mainEntryName) return 1;
71
81
  return a.localeCompare(b);
72
82
  });
83
+ let canonicalRoutes = null;
84
+ if (i18nPluginInstalled) for (const entryName of registerEntries){
85
+ const entryCanonicalRoutes = collectCanonicalRoutesForEntry(routesByEntry[entryName], {
86
+ localeParamHeuristic: true
87
+ });
88
+ if (entryCanonicalRoutes) canonicalRoutes = {
89
+ ...entryCanonicalRoutes,
90
+ ...canonicalRoutes ?? {}
91
+ };
92
+ }
73
93
  await writeTanstackRegisterFile({
74
94
  entries: registerEntries,
75
95
  generatedDirName,
76
- srcDirectory: appContext.srcDirectory
96
+ srcDirectory: appContext.srcDirectory,
97
+ canonicalRoutes
77
98
  });
78
99
  }
79
100
  function tanstackRouterPlugin(options = {}) {
@@ -91,16 +112,42 @@ function tanstackRouterPlugin(options = {}) {
91
112
  const { getEntrypointRoutesDir } = getRuntimeRouterCli();
92
113
  return getEntrypointRoutesDir(entrypoint) === routesDir;
93
114
  };
115
+ const isForeignRouteEntrypoint = (entrypoint)=>{
116
+ const { getEntrypointRoutesDir, getEntrypointRoutesOwner } = getRuntimeRouterCli();
117
+ if (getEntrypointRoutesOwner(entrypoint)) return true;
118
+ if (entrypoint.pageRoutesEntry) return true;
119
+ return null !== getEntrypointRoutesDir(entrypoint);
120
+ };
121
+ const isI18nPluginInstalled = ()=>{
122
+ const { plugins } = api.getAppContext();
123
+ return Boolean(plugins?.some((plugin)=>plugin?.name === '@modern-js/plugin-i18n'));
124
+ };
94
125
  api._internalRuntimePlugins(({ entrypoint, plugins })=>{
95
- if (!isTanstackEntrypoint(entrypoint)) return {
126
+ const { metaName, serverRoutes } = api.getAppContext();
127
+ const serverBase = serverRoutes.filter((route)=>route.entryName === entrypoint.entryName).map((route)=>route.urlPath).sort((a, b)=>a.length - b.length > 0 ? -1 : 1);
128
+ if (isTanstackEntrypoint(entrypoint)) {
129
+ plugins.push({
130
+ name: 'tanstackRouter',
131
+ path: `@${metaName}/plugin-tanstack/runtime`,
132
+ config: {
133
+ serverBase
134
+ }
135
+ });
136
+ return {
137
+ entrypoint,
138
+ plugins
139
+ };
140
+ }
141
+ if (isForeignRouteEntrypoint(entrypoint)) return {
96
142
  entrypoint,
97
143
  plugins
98
144
  };
99
- const { metaName, serverRoutes } = api.getAppContext();
100
- const serverBase = serverRoutes.filter((route)=>route.entryName === entrypoint.entryName).map((route)=>route.urlPath).sort((a, b)=>a.length - b.length > 0 ? -1 : 1);
101
- plugins.push({
102
- name: 'tanstackRouter',
103
- path: `@${metaName}/plugin-tanstack/runtime`,
145
+ const routerWrapperPath = `@${metaName}/plugin-tanstack/runtime/router`;
146
+ const existingRouterPlugin = plugins.find((plugin)=>'router' === plugin.name);
147
+ if (existingRouterPlugin) existingRouterPlugin.path = routerWrapperPath;
148
+ else plugins.push({
149
+ name: 'router',
150
+ path: routerWrapperPath,
104
151
  config: {
105
152
  serverBase
106
153
  }
@@ -119,7 +166,9 @@ function tanstackRouterPlugin(options = {}) {
119
166
  source: {
120
167
  include: [
121
168
  /[\\/]node_modules[\\/]@tanstack[\\/]react-router[\\/]/,
122
- node_path.resolve(__dirname, '../runtime').replace('cjs', 'esm')
169
+ /[\\/]node_modules[\\/]@tanstack[\\/]router-core[\\/]/,
170
+ /[\\/]node_modules[\\/]@tanstack[\\/]react-store[\\/]/,
171
+ node_path.resolve(__dirname, '..', '..')
123
172
  ]
124
173
  }
125
174
  }));
@@ -136,15 +185,13 @@ function tanstackRouterPlugin(options = {}) {
136
185
  if (0 === tanstackEntrypoints.length) return;
137
186
  const { handleGeneratorEntryCode } = getRuntimeRouterCli();
138
187
  const routesByEntry = await handleGeneratorEntryCode(api, tanstackEntrypoints, {
139
- entrypointsKey: ENTRYPOINTS_KEY,
140
- generateCodeOptions: {
141
- enableTanstackTypes: false
142
- }
188
+ entrypointsKey: ENTRYPOINTS_KEY
143
189
  });
144
190
  await writeTanstackRouterTypesForEntries({
145
191
  appContext: api.getAppContext(),
146
192
  generatedDirName,
147
- routesByEntry
193
+ routesByEntry,
194
+ i18nPluginInstalled: isI18nPluginInstalled()
148
195
  });
149
196
  });
150
197
  api.onFileChanged(async (event)=>{
@@ -158,15 +205,13 @@ function tanstackRouterPlugin(options = {}) {
158
205
  regenerate: async ({ api, entrypoints })=>{
159
206
  const { handleGeneratorEntryCode } = getRuntimeRouterCli();
160
207
  const routesByEntry = await handleGeneratorEntryCode(api, entrypoints, {
161
- entrypointsKey: ENTRYPOINTS_KEY,
162
- generateCodeOptions: {
163
- enableTanstackTypes: false
164
- }
208
+ entrypointsKey: ENTRYPOINTS_KEY
165
209
  });
166
210
  await writeTanstackRouterTypesForEntries({
167
211
  appContext: api.getAppContext(),
168
212
  generatedDirName,
169
- routesByEntry
213
+ routesByEntry,
214
+ i18nPluginInstalled: isI18nPluginInstalled()
170
215
  });
171
216
  }
172
217
  });
@@ -198,4 +243,4 @@ function tanstackRouterPlugin(options = {}) {
198
243
  }
199
244
  const src_cli = tanstackRouterPlugin;
200
245
  export default src_cli;
201
- export { createTanstackRsbuildRouteSplittingProfile, generateTanstackRouterTypesSourceForEntry, isTanstackRouterFrameworkEnabled, isTanstackStartRouteModuleSource, resolveTanstackRouteCodeSplittingEnabled, tanstackRouterPlugin, writeTanstackRegisterFile, writeTanstackRouterTypesForEntries };
246
+ export { collectCanonicalRoutesForEntry, createTanstackRsbuildRouteSplittingProfile, generateTanstackRouterTypesSourceForEntry, resolveTanstackRouteCodeSplittingEnabled, tanstackRouterPlugin, writeTanstackRegisterFile, writeTanstackRouterTypesForEntries };
@@ -1,12 +1,3 @@
1
- const TANSTACK_START_ROUTE_FACTORY_CALLS = [
2
- 'createFileRoute',
3
- 'createRootRoute',
4
- 'createRootRouteWithContext'
5
- ];
6
- const TANSTACK_START_ROUTE_FACTORY_REGEX = /\b(createFileRoute|createRootRoute|createRootRouteWithContext)\s*(?:<|\()/;
7
- function isTanstackStartRouteModuleSource(source) {
8
- return TANSTACK_START_ROUTE_FACTORY_REGEX.test(source);
9
- }
10
1
  function resolveTanstackRouteCodeSplittingEnabled(option) {
11
2
  if ('boolean' == typeof option) return option;
12
3
  return option?.enabled ?? true;
@@ -17,27 +8,7 @@ function createTanstackRsbuildRouteSplittingProfile(opts) {
17
8
  output: {
18
9
  splitRouteChunks: resolveTanstackRouteCodeSplittingEnabled(opts.routeCodeSplitting)
19
10
  }
20
- },
21
- modernRouteChunks: {
22
- enabled: resolveTanstackRouteCodeSplittingEnabled(opts.routeCodeSplitting),
23
- owner: 'modern'
24
- },
25
- builderChunkSplit: {
26
- owner: 'modern-rsbuild',
27
- preserved: true
28
- },
29
- tanstackStartRspackSplitter: {
30
- compatible: false,
31
- reason: 'TanStack Start Rsbuild route splitting is tied to TanStack file-route factory modules; Modern generates TanStack route trees from Modern route metadata and owns route chunking through output.splitRouteChunks.',
32
- clientDeleteNodes: [
33
- 'ssr',
34
- 'server',
35
- 'headers'
36
- ],
37
- routeFactoryCalls: [
38
- ...TANSTACK_START_ROUTE_FACTORY_CALLS
39
- ]
40
11
  }
41
12
  };
42
13
  }
43
- export { createTanstackRsbuildRouteSplittingProfile, isTanstackStartRouteModuleSource, resolveTanstackRouteCodeSplittingEnabled };
14
+ export { createTanstackRsbuildRouteSplittingProfile, resolveTanstackRouteCodeSplittingEnabled };