@bleedingdev/modern-js-plugin-tanstack 3.5.0-ultramodern.30 → 3.5.0-ultramodern.32

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 (221) hide show
  1. package/dist/cjs/cli/artifacts.js +157 -0
  2. package/dist/cjs/cli/index.js +6 -103
  3. package/dist/cjs/cli/tanstackTypes/canonicalRoutes.js +113 -0
  4. package/dist/cjs/cli/tanstackTypes/shared.js +130 -0
  5. package/dist/cjs/cli/tanstackTypes/source.js +251 -0
  6. package/dist/cjs/cli/tanstackTypes.js +4 -350
  7. package/dist/cjs/runtime/blockingSubscribe.js +64 -0
  8. package/dist/cjs/runtime/{pluginCore.js → clientBasepath.js} +12 -19
  9. package/dist/cjs/runtime/clientHydration.js +129 -0
  10. package/dist/cjs/runtime/dataMutation.js +11 -176
  11. package/dist/cjs/runtime/formData.js +116 -0
  12. package/dist/cjs/runtime/loaderBridge.js +4 -1
  13. package/dist/cjs/runtime/plugin.js +21 -125
  14. package/dist/cjs/runtime/plugin.node.js +38 -119
  15. package/dist/cjs/runtime/pluginShared.js +90 -0
  16. package/dist/cjs/runtime/routeTree/components.js +102 -0
  17. package/dist/cjs/runtime/routeTree/construction.js +152 -0
  18. package/dist/cjs/runtime/routeTree/index.js +47 -0
  19. package/dist/cjs/runtime/routeTree/loaders.js +158 -0
  20. package/dist/cjs/runtime/routeTree/paths.js +57 -0
  21. package/dist/cjs/runtime/routeTree/staticData.js +63 -0
  22. package/dist/cjs/runtime/routeTree/tanstackRoutes.js +57 -0
  23. package/dist/cjs/runtime/routeTree/types.js +18 -0
  24. package/dist/cjs/runtime/routeTree.js +7 -320
  25. package/dist/cjs/runtime/rsc/CompositeComponent.js +18 -13
  26. package/dist/cjs/runtime/rsc/RscNodeRenderer.js +5 -16
  27. package/dist/cjs/runtime/rsc/client.js +8 -25
  28. package/dist/cjs/runtime/rsc/flightSerialization.js +132 -0
  29. package/dist/cjs/runtime/rsc/payloadErrors.js +99 -0
  30. package/dist/cjs/runtime/rsc/payloadFetch.js +117 -0
  31. package/dist/cjs/runtime/rsc/payloadRouter.js +21 -142
  32. package/dist/cjs/runtime/rsc/payloadRoutes.js +106 -0
  33. package/dist/cjs/runtime/rsc/payloadStorage.js +58 -0
  34. package/dist/cjs/runtime/rsc/server.js +14 -18
  35. package/dist/cjs/runtime/rsc/shared.js +71 -0
  36. package/dist/cjs/runtime/rsc/treeGetter.js +72 -0
  37. package/dist/cjs/runtime/ssrManagedTags.js +103 -0
  38. package/dist/cjs/runtime/ssrPreload.js +89 -0
  39. package/dist/cjs/runtime/ssrTypes.js +18 -0
  40. package/dist/cjs/runtime/submitAction.js +161 -0
  41. package/dist/cjs/runtime/utils.js +49 -86
  42. package/dist/esm/cli/artifacts.mjs +103 -0
  43. package/dist/esm/cli/index.mjs +4 -101
  44. package/dist/esm/cli/tanstackTypes/canonicalRoutes.mjs +75 -0
  45. package/dist/esm/cli/tanstackTypes/shared.mjs +68 -0
  46. package/dist/esm/cli/tanstackTypes/source.mjs +203 -0
  47. package/dist/esm/cli/tanstackTypes.mjs +2 -339
  48. package/dist/esm/runtime/blockingSubscribe.mjs +19 -0
  49. package/dist/esm/runtime/clientBasepath.mjs +10 -0
  50. package/dist/esm/runtime/clientHydration.mjs +70 -0
  51. package/dist/esm/runtime/dataMutation.mjs +2 -167
  52. package/dist/esm/runtime/formData.mjs +63 -0
  53. package/dist/esm/runtime/loaderBridge.mjs +4 -1
  54. package/dist/esm/runtime/plugin.mjs +14 -118
  55. package/dist/esm/runtime/plugin.node.mjs +33 -114
  56. package/dist/esm/runtime/pluginShared.mjs +40 -0
  57. package/dist/esm/runtime/routeTree/components.mjs +55 -0
  58. package/dist/esm/runtime/routeTree/construction.mjs +111 -0
  59. package/dist/esm/runtime/routeTree/index.mjs +2 -0
  60. package/dist/esm/runtime/routeTree/loaders.mjs +117 -0
  61. package/dist/esm/runtime/routeTree/paths.mjs +16 -0
  62. package/dist/esm/runtime/routeTree/staticData.mjs +22 -0
  63. package/dist/esm/runtime/routeTree/tanstackRoutes.mjs +13 -0
  64. package/dist/esm/runtime/routeTree/types.mjs +0 -0
  65. package/dist/esm/runtime/routeTree.mjs +1 -318
  66. package/dist/esm/runtime/rsc/CompositeComponent.mjs +18 -13
  67. package/dist/esm/runtime/rsc/RscNodeRenderer.mjs +4 -15
  68. package/dist/esm/runtime/rsc/client.mjs +6 -26
  69. package/dist/esm/runtime/rsc/flightSerialization.mjs +88 -0
  70. package/dist/esm/runtime/rsc/payloadErrors.mjs +49 -0
  71. package/dist/esm/runtime/rsc/payloadFetch.mjs +61 -0
  72. package/dist/esm/runtime/rsc/payloadRouter.mjs +12 -133
  73. package/dist/esm/runtime/rsc/payloadRoutes.mjs +50 -0
  74. package/dist/esm/runtime/rsc/payloadStorage.mjs +14 -0
  75. package/dist/esm/runtime/rsc/server.mjs +17 -21
  76. package/dist/esm/runtime/rsc/shared.mjs +21 -0
  77. package/dist/esm/runtime/rsc/treeGetter.mjs +34 -0
  78. package/dist/esm/runtime/ssrManagedTags.mjs +53 -0
  79. package/dist/esm/runtime/ssrPreload.mjs +51 -0
  80. package/dist/esm/runtime/ssrTypes.mjs +0 -0
  81. package/dist/esm/runtime/submitAction.mjs +120 -0
  82. package/dist/esm/runtime/utils.mjs +47 -75
  83. package/dist/esm-node/cli/artifacts.mjs +104 -0
  84. package/dist/esm-node/cli/index.mjs +4 -101
  85. package/dist/esm-node/cli/tanstackTypes/canonicalRoutes.mjs +76 -0
  86. package/dist/esm-node/cli/tanstackTypes/shared.mjs +69 -0
  87. package/dist/esm-node/cli/tanstackTypes/source.mjs +204 -0
  88. package/dist/esm-node/cli/tanstackTypes.mjs +2 -339
  89. package/dist/esm-node/runtime/blockingSubscribe.mjs +20 -0
  90. package/dist/esm-node/runtime/clientBasepath.mjs +11 -0
  91. package/dist/esm-node/runtime/clientHydration.mjs +71 -0
  92. package/dist/esm-node/runtime/dataMutation.mjs +2 -167
  93. package/dist/esm-node/runtime/formData.mjs +64 -0
  94. package/dist/esm-node/runtime/loaderBridge.mjs +4 -1
  95. package/dist/esm-node/runtime/plugin.mjs +14 -118
  96. package/dist/esm-node/runtime/plugin.node.mjs +33 -114
  97. package/dist/esm-node/runtime/pluginShared.mjs +41 -0
  98. package/dist/esm-node/runtime/routeTree/components.mjs +56 -0
  99. package/dist/esm-node/runtime/routeTree/construction.mjs +112 -0
  100. package/dist/esm-node/runtime/routeTree/index.mjs +3 -0
  101. package/dist/esm-node/runtime/routeTree/loaders.mjs +118 -0
  102. package/dist/esm-node/runtime/routeTree/paths.mjs +17 -0
  103. package/dist/esm-node/runtime/routeTree/staticData.mjs +23 -0
  104. package/dist/esm-node/runtime/routeTree/tanstackRoutes.mjs +14 -0
  105. package/dist/esm-node/runtime/routeTree/types.mjs +1 -0
  106. package/dist/esm-node/runtime/routeTree.mjs +1 -318
  107. package/dist/esm-node/runtime/rsc/CompositeComponent.mjs +18 -13
  108. package/dist/esm-node/runtime/rsc/RscNodeRenderer.mjs +4 -15
  109. package/dist/esm-node/runtime/rsc/client.mjs +6 -26
  110. package/dist/esm-node/runtime/rsc/flightSerialization.mjs +89 -0
  111. package/dist/esm-node/runtime/rsc/payloadErrors.mjs +50 -0
  112. package/dist/esm-node/runtime/rsc/payloadFetch.mjs +62 -0
  113. package/dist/esm-node/runtime/rsc/payloadRouter.mjs +12 -133
  114. package/dist/esm-node/runtime/rsc/payloadRoutes.mjs +51 -0
  115. package/dist/esm-node/runtime/rsc/payloadStorage.mjs +15 -0
  116. package/dist/esm-node/runtime/rsc/server.mjs +17 -21
  117. package/dist/esm-node/runtime/rsc/shared.mjs +22 -0
  118. package/dist/esm-node/runtime/rsc/treeGetter.mjs +35 -0
  119. package/dist/esm-node/runtime/ssrManagedTags.mjs +54 -0
  120. package/dist/esm-node/runtime/ssrPreload.mjs +52 -0
  121. package/dist/esm-node/runtime/ssrTypes.mjs +1 -0
  122. package/dist/esm-node/runtime/submitAction.mjs +121 -0
  123. package/dist/esm-node/runtime/utils.mjs +47 -75
  124. package/dist/types/cli/artifacts.d.ts +33 -0
  125. package/dist/types/cli/index.d.ts +2 -33
  126. package/dist/types/cli/tanstackTypes/canonicalRoutes.d.ts +22 -0
  127. package/dist/types/cli/tanstackTypes/shared.d.ts +20 -0
  128. package/dist/types/cli/tanstackTypes/source.d.ts +10 -0
  129. package/dist/types/cli/tanstackTypes.d.ts +3 -31
  130. package/dist/types/runtime/blockingSubscribe.d.ts +3 -0
  131. package/dist/types/runtime/clientBasepath.d.ts +1 -0
  132. package/dist/types/runtime/clientHydration.d.ts +19 -0
  133. package/dist/types/runtime/dataMutation.d.ts +3 -12
  134. package/dist/types/runtime/formData.d.ts +23 -0
  135. package/dist/types/runtime/plugin.d.ts +1 -1
  136. package/dist/types/runtime/plugin.node.d.ts +1 -1
  137. package/dist/types/runtime/{pluginCore.d.ts → pluginShared.d.ts} +14 -0
  138. package/dist/types/runtime/routeTree/components.d.ts +7 -0
  139. package/dist/types/runtime/routeTree/construction.d.ts +5 -0
  140. package/dist/types/runtime/routeTree/index.d.ts +2 -0
  141. package/dist/types/runtime/routeTree/loaders.d.ts +4 -0
  142. package/dist/types/runtime/routeTree/paths.d.ts +3 -0
  143. package/dist/types/runtime/routeTree/staticData.d.ts +19 -0
  144. package/dist/types/runtime/routeTree/tanstackRoutes.d.ts +4 -0
  145. package/dist/types/runtime/routeTree/types.d.ts +75 -0
  146. package/dist/types/runtime/routeTree.d.ts +1 -9
  147. package/dist/types/runtime/rsc/CompositeComponent.d.ts +1 -2
  148. package/dist/types/runtime/rsc/RscNodeRenderer.d.ts +2 -3
  149. package/dist/types/runtime/rsc/client.d.ts +2 -0
  150. package/dist/types/runtime/rsc/flightSerialization.d.ts +3 -0
  151. package/dist/types/runtime/rsc/payloadErrors.d.ts +6 -0
  152. package/dist/types/runtime/rsc/payloadFetch.d.ts +10 -0
  153. package/dist/types/runtime/rsc/payloadRouter.d.ts +2 -10
  154. package/dist/types/runtime/rsc/payloadRoutes.d.ts +43 -0
  155. package/dist/types/runtime/rsc/payloadStorage.d.ts +5 -0
  156. package/dist/types/runtime/rsc/shared.d.ts +19 -0
  157. package/dist/types/runtime/rsc/treeGetter.d.ts +1 -0
  158. package/dist/types/runtime/ssrManagedTags.d.ts +7 -0
  159. package/dist/types/runtime/ssrPreload.d.ts +2 -0
  160. package/dist/types/runtime/ssrTypes.d.ts +43 -0
  161. package/dist/types/runtime/state.d.ts +1 -1
  162. package/dist/types/runtime/submitAction.d.ts +14 -0
  163. package/dist/types/runtime/types.d.ts +3 -46
  164. package/dist/types/runtime/utils.d.ts +1 -22
  165. package/package.json +30 -9
  166. package/rstest.config.mts +1 -0
  167. package/src/cli/artifacts.ts +255 -0
  168. package/src/cli/index.ts +6 -246
  169. package/src/cli/tanstackTypes/canonicalRoutes.ts +157 -0
  170. package/src/cli/tanstackTypes/shared.ts +119 -0
  171. package/src/cli/tanstackTypes/source.ts +405 -0
  172. package/src/cli/tanstackTypes.ts +4 -647
  173. package/src/runtime/blockingSubscribe.ts +48 -0
  174. package/src/runtime/clientBasepath.ts +12 -0
  175. package/src/runtime/clientHydration.ts +151 -0
  176. package/src/runtime/dataMutation.tsx +9 -306
  177. package/src/runtime/formData.ts +153 -0
  178. package/src/runtime/loaderBridge.ts +8 -3
  179. package/src/runtime/plugin.node.tsx +60 -284
  180. package/src/runtime/plugin.tsx +21 -257
  181. package/src/runtime/pluginShared.ts +112 -0
  182. package/src/runtime/routeTree/components.ts +130 -0
  183. package/src/runtime/routeTree/construction.ts +238 -0
  184. package/src/runtime/routeTree/index.ts +7 -0
  185. package/src/runtime/routeTree/loaders.ts +232 -0
  186. package/src/runtime/routeTree/paths.ts +36 -0
  187. package/src/runtime/routeTree/staticData.ts +66 -0
  188. package/src/runtime/routeTree/tanstackRoutes.ts +36 -0
  189. package/src/runtime/routeTree/types.ts +87 -0
  190. package/src/runtime/routeTree.ts +5 -750
  191. package/src/runtime/rsc/CompositeComponent.tsx +29 -20
  192. package/src/runtime/rsc/RscNodeRenderer.tsx +9 -27
  193. package/src/runtime/rsc/client.tsx +12 -40
  194. package/src/runtime/rsc/flightSerialization.ts +158 -0
  195. package/src/runtime/rsc/payloadErrors.ts +73 -0
  196. package/src/runtime/rsc/payloadFetch.ts +97 -0
  197. package/src/runtime/rsc/payloadRouter.ts +29 -234
  198. package/src/runtime/rsc/payloadRoutes.ts +122 -0
  199. package/src/runtime/rsc/payloadStorage.ts +35 -0
  200. package/src/runtime/rsc/server.tsx +20 -29
  201. package/src/runtime/rsc/shared.ts +70 -0
  202. package/src/runtime/rsc/treeGetter.tsx +52 -0
  203. package/src/runtime/ssrManagedTags.ts +107 -0
  204. package/src/runtime/ssrPreload.ts +125 -0
  205. package/src/runtime/ssrTypes.ts +51 -0
  206. package/src/runtime/state.ts +4 -2
  207. package/src/runtime/submitAction.ts +194 -0
  208. package/src/runtime/types.ts +14 -51
  209. package/src/runtime/utils.tsx +72 -108
  210. package/src/types/react-server-dom-rspack.d.ts +56 -0
  211. package/tests/castRatchet.test.ts +85 -0
  212. package/tests/router/dataMutation.test.tsx +59 -0
  213. package/tests/router/fixtures/router-gen.golden.txt +72 -0
  214. package/tests/router/loaderBridge.test.ts +21 -0
  215. package/tests/router/routeTree.test.ts +51 -11
  216. package/tests/router/rsc.test.tsx +189 -0
  217. package/tests/router/ssrPreload.test.ts +30 -0
  218. package/tests/router/tanstackTypes.test.ts +254 -1
  219. package/dist/esm/runtime/pluginCore.mjs +0 -14
  220. package/dist/esm-node/runtime/pluginCore.mjs +0 -15
  221. package/src/runtime/pluginCore.ts +0 -56
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
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");
22
+ };
23
+ })();
24
+ (()=>{
25
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
26
+ })();
27
+ (()=>{
28
+ __webpack_require__.r = (exports1)=>{
29
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
30
+ value: 'Module'
31
+ });
32
+ Object.defineProperty(exports1, '__esModule', {
33
+ value: true
34
+ });
35
+ };
36
+ })();
37
+ var __webpack_exports__ = {};
38
+ __webpack_require__.r(__webpack_exports__);
39
+ __webpack_require__.d(__webpack_exports__, {
40
+ generateTanstackRouteArtifacts: ()=>generateTanstackRouteArtifacts,
41
+ writeTanstackRegisterFile: ()=>writeTanstackRegisterFile,
42
+ writeTanstackRouterTypesForEntries: ()=>writeTanstackRouterTypesForEntries
43
+ });
44
+ const external_node_path_namespaceObject = require("node:path");
45
+ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
46
+ const utils_namespaceObject = require("@modern-js/utils");
47
+ const external_tanstackTypes_js_namespaceObject = require("./tanstackTypes.js");
48
+ const DEFAULT_GENERATED_DIR_NAME = 'modern-tanstack';
49
+ async function writeFileIfChanged(filePath, content) {
50
+ try {
51
+ const previous = await utils_namespaceObject.fs.pathExists(filePath) ? await utils_namespaceObject.fs.readFile(filePath, 'utf-8') : null;
52
+ if (previous === content) return;
53
+ } catch {}
54
+ await utils_namespaceObject.fs.outputFile(filePath, content, 'utf-8');
55
+ }
56
+ function createRegisterDtsContent(opts) {
57
+ const importStatements = opts.entries.map((entryName, index)=>`import type { router as router${index} } from './${entryName}/router.gen';`).join('\n');
58
+ const routerUnionType = opts.entries.map((_, index)=>`typeof router${index}`).join(' | ');
59
+ const canonicalEntries = Object.entries(opts.canonicalRoutes ?? {});
60
+ const canonicalRoutesAugmentation = canonicalEntries.length > 0 ? `
61
+ declare module '${opts.i18nRuntimeModule || '@modern-js/plugin-i18n/runtime'}' {
62
+ interface UltramodernCanonicalRoutes {
63
+ ${canonicalEntries.map(([routePath, paramsType])=>` '${routePath}': ${paramsType};`).join('\n')}
64
+ }
65
+ }
66
+ ` : '';
67
+ return `// This file is auto-generated by Modern.js. Do not edit manually.
68
+
69
+ ${importStatements}
70
+
71
+ declare module '${opts.runtimeModule}' {
72
+ interface Register {
73
+ router: ${routerUnionType};
74
+ }
75
+ }
76
+ ${canonicalRoutesAugmentation}`;
77
+ }
78
+ async function writeTanstackRegisterFile(opts) {
79
+ const { entries, generatedDirName = DEFAULT_GENERATED_DIR_NAME, runtimeModule = '@modern-js/plugin-tanstack/runtime', srcDirectory, canonicalRoutes, i18nRuntimeModule } = opts;
80
+ if (0 === entries.length) return;
81
+ const registerDtsPath = external_node_path_default().join(srcDirectory, generatedDirName, 'register.gen.d.ts');
82
+ await writeFileIfChanged(registerDtsPath, createRegisterDtsContent({
83
+ entries,
84
+ runtimeModule,
85
+ canonicalRoutes,
86
+ i18nRuntimeModule
87
+ }));
88
+ }
89
+ async function writeTanstackRouterTypesForEntries(opts) {
90
+ const { appContext, generatedDirName = DEFAULT_GENERATED_DIR_NAME, routesByEntry, i18nPluginInstalled = false } = opts;
91
+ const entryNames = Object.keys(routesByEntry);
92
+ await Promise.all(entryNames.map(async (entryName)=>{
93
+ const { routerGenTs } = await (0, external_tanstackTypes_js_namespaceObject.generateTanstackRouterTypesSourceForEntry)({
94
+ appContext,
95
+ entryName,
96
+ generatedDirName,
97
+ routes: routesByEntry[entryName]
98
+ });
99
+ await writeFileIfChanged(external_node_path_default().join(appContext.srcDirectory, generatedDirName, entryName, 'router.gen.ts'), routerGenTs);
100
+ }));
101
+ const mainEntryName = appContext.entrypoints?.find((entrypoint)=>entrypoint.isMainEntry)?.entryName;
102
+ const registerEntries = entryNames.sort((a, b)=>{
103
+ if (mainEntryName && a === mainEntryName) return -1;
104
+ if (mainEntryName && b === mainEntryName) return 1;
105
+ return a.localeCompare(b);
106
+ });
107
+ let canonicalRoutes = null;
108
+ if (i18nPluginInstalled) for (const entryName of registerEntries){
109
+ const entryCanonicalRoutes = (0, external_tanstackTypes_js_namespaceObject.collectCanonicalRoutesForEntry)(routesByEntry[entryName], {
110
+ localeParamHeuristic: true
111
+ });
112
+ if (entryCanonicalRoutes) canonicalRoutes = {
113
+ ...entryCanonicalRoutes,
114
+ ...canonicalRoutes ?? {}
115
+ };
116
+ }
117
+ await writeTanstackRegisterFile({
118
+ entries: registerEntries,
119
+ generatedDirName,
120
+ srcDirectory: appContext.srcDirectory,
121
+ canonicalRoutes
122
+ });
123
+ }
124
+ async function generateTanstackRouteArtifacts(opts) {
125
+ const [{ createRunOptions }, { cli }, utils] = await Promise.all([
126
+ import("@modern-js/app-tools/cli/run"),
127
+ import("@modern-js/plugin/cli"),
128
+ import("@modern-js/utils")
129
+ ]);
130
+ process.env.MODERN_ARGV = 'node modern build';
131
+ process.env.NODE_ENV = process.env.NODE_ENV || 'production';
132
+ const { findExists, CONFIG_FILE_EXTENSIONS } = utils;
133
+ const configFileBase = external_node_path_default().resolve(opts.appDirectory, 'modern.config');
134
+ const resolvedConfigFile = findExists(CONFIG_FILE_EXTENSIONS.map((extension)=>`${configFileBase}${extension}`));
135
+ if (!resolvedConfigFile) throw new Error(`[plugin-tanstack] Unable to locate a Modern.js config file (modern.config.{${CONFIG_FILE_EXTENSIONS.map((extension)=>extension.slice(1)).join(',')}}) in ${opts.appDirectory}. TanStack route generation requires the app config to resolve its plugins.`);
136
+ const runOptions = await createRunOptions({
137
+ cwd: opts.appDirectory,
138
+ configFile: configFileBase,
139
+ version: opts.version || process.env.MODERN_JS_VERSION || '0.0.0-routes-generate',
140
+ internalPlugins: utils.INTERNAL_RUNTIME_PLUGINS
141
+ });
142
+ await cli.init({
143
+ ...runOptions,
144
+ command: 'build'
145
+ });
146
+ }
147
+ exports.generateTanstackRouteArtifacts = __webpack_exports__.generateTanstackRouteArtifacts;
148
+ exports.writeTanstackRegisterFile = __webpack_exports__.writeTanstackRegisterFile;
149
+ exports.writeTanstackRouterTypesForEntries = __webpack_exports__.writeTanstackRouterTypesForEntries;
150
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
151
+ "generateTanstackRouteArtifacts",
152
+ "writeTanstackRegisterFile",
153
+ "writeTanstackRouterTypesForEntries"
154
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
155
+ Object.defineProperty(exports, '__esModule', {
156
+ value: true
157
+ });
@@ -55,16 +55,17 @@ var __webpack_exports__ = {};
55
55
  collectCanonicalRoutesForEntry: ()=>external_tanstackTypes_js_namespaceObject.collectCanonicalRoutesForEntry,
56
56
  createTanstackRsbuildRouteSplittingProfile: ()=>external_routeSplitting_js_namespaceObject.createTanstackRsbuildRouteSplittingProfile,
57
57
  default: ()=>src_cli,
58
- generateTanstackRouteArtifacts: ()=>generateTanstackRouteArtifacts,
58
+ generateTanstackRouteArtifacts: ()=>external_artifacts_js_namespaceObject.generateTanstackRouteArtifacts,
59
59
  generateTanstackRouterTypesSourceForEntry: ()=>external_tanstackTypes_js_namespaceObject.generateTanstackRouterTypesSourceForEntry,
60
60
  resolveTanstackRouteCodeSplittingEnabled: ()=>external_routeSplitting_js_namespaceObject.resolveTanstackRouteCodeSplittingEnabled,
61
61
  tanstackRouterPlugin: ()=>tanstackRouterPlugin,
62
- writeTanstackRegisterFile: ()=>writeTanstackRegisterFile,
63
- writeTanstackRouterTypesForEntries: ()=>writeTanstackRouterTypesForEntries
62
+ writeTanstackRegisterFile: ()=>external_artifacts_js_namespaceObject.writeTanstackRegisterFile,
63
+ writeTanstackRouterTypesForEntries: ()=>external_artifacts_js_namespaceObject.writeTanstackRouterTypesForEntries
64
64
  });
65
65
  const external_node_path_namespaceObject = require("node:path");
66
66
  var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
67
67
  const utils_namespaceObject = require("@modern-js/utils");
68
+ const external_artifacts_js_namespaceObject = require("./artifacts.js");
68
69
  const external_routeSplitting_js_namespaceObject = require("./routeSplitting.js");
69
70
  const external_tanstackTypes_js_namespaceObject = require("./tanstackTypes.js");
70
71
  const DEFAULT_ROUTES_DIR = 'routes';
@@ -80,81 +81,6 @@ var __webpack_exports__ = {};
80
81
  }
81
82
  throw new Error('@modern-js/plugin-tanstack requires @modern-js/runtime/cli router helper exports.');
82
83
  }
83
- async function writeFileIfChanged(filePath, content) {
84
- try {
85
- const previous = await utils_namespaceObject.fs.pathExists(filePath) ? await utils_namespaceObject.fs.readFile(filePath, 'utf-8') : null;
86
- if (previous === content) return;
87
- } catch {}
88
- await utils_namespaceObject.fs.outputFile(filePath, content, 'utf-8');
89
- }
90
- function createRegisterDtsContent(opts) {
91
- const importStatements = opts.entries.map((entryName, index)=>`import type { router as router${index} } from './${entryName}/router.gen';`).join('\n');
92
- const routerUnionType = opts.entries.map((_, index)=>`typeof router${index}`).join(' | ');
93
- const canonicalEntries = Object.entries(opts.canonicalRoutes ?? {});
94
- const canonicalRoutesAugmentation = canonicalEntries.length > 0 ? `
95
- declare module '${opts.i18nRuntimeModule || '@modern-js/plugin-i18n/runtime'}' {
96
- interface UltramodernCanonicalRoutes {
97
- ${canonicalEntries.map(([routePath, paramsType])=>` '${routePath}': ${paramsType};`).join('\n')}
98
- }
99
- }
100
- ` : '';
101
- return `// This file is auto-generated by Modern.js. Do not edit manually.
102
-
103
- ${importStatements}
104
-
105
- declare module '${opts.runtimeModule}' {
106
- interface Register {
107
- router: ${routerUnionType};
108
- }
109
- }
110
- ${canonicalRoutesAugmentation}`;
111
- }
112
- async function writeTanstackRegisterFile(opts) {
113
- const { entries, generatedDirName = DEFAULT_GENERATED_DIR_NAME, runtimeModule = '@modern-js/plugin-tanstack/runtime', srcDirectory, canonicalRoutes, i18nRuntimeModule } = opts;
114
- if (0 === entries.length) return;
115
- const registerDtsPath = external_node_path_default().join(srcDirectory, generatedDirName, 'register.gen.d.ts');
116
- await writeFileIfChanged(registerDtsPath, createRegisterDtsContent({
117
- entries,
118
- runtimeModule,
119
- canonicalRoutes,
120
- i18nRuntimeModule
121
- }));
122
- }
123
- async function writeTanstackRouterTypesForEntries(opts) {
124
- const { appContext, generatedDirName = DEFAULT_GENERATED_DIR_NAME, routesByEntry, i18nPluginInstalled = false } = opts;
125
- const entryNames = Object.keys(routesByEntry);
126
- await Promise.all(entryNames.map(async (entryName)=>{
127
- const { routerGenTs } = await (0, external_tanstackTypes_js_namespaceObject.generateTanstackRouterTypesSourceForEntry)({
128
- appContext,
129
- entryName,
130
- generatedDirName,
131
- routes: routesByEntry[entryName]
132
- });
133
- await writeFileIfChanged(external_node_path_default().join(appContext.srcDirectory, generatedDirName, entryName, 'router.gen.ts'), routerGenTs);
134
- }));
135
- const mainEntryName = appContext.entrypoints?.find((entrypoint)=>entrypoint.isMainEntry)?.entryName;
136
- const registerEntries = entryNames.sort((a, b)=>{
137
- if (mainEntryName && a === mainEntryName) return -1;
138
- if (mainEntryName && b === mainEntryName) return 1;
139
- return a.localeCompare(b);
140
- });
141
- let canonicalRoutes = null;
142
- if (i18nPluginInstalled) for (const entryName of registerEntries){
143
- const entryCanonicalRoutes = (0, external_tanstackTypes_js_namespaceObject.collectCanonicalRoutesForEntry)(routesByEntry[entryName], {
144
- localeParamHeuristic: true
145
- });
146
- if (entryCanonicalRoutes) canonicalRoutes = {
147
- ...entryCanonicalRoutes,
148
- ...canonicalRoutes ?? {}
149
- };
150
- }
151
- await writeTanstackRegisterFile({
152
- entries: registerEntries,
153
- generatedDirName,
154
- srcDirectory: appContext.srcDirectory,
155
- canonicalRoutes
156
- });
157
- }
158
84
  function tanstackRouterPlugin(options = {}) {
159
85
  const routesDir = options.routesDir || DEFAULT_ROUTES_DIR;
160
86
  const generatedDirName = options.generatedDirName || DEFAULT_GENERATED_DIR_NAME;
@@ -245,7 +171,7 @@ ${canonicalRoutesAugmentation}`;
245
171
  const routesByEntry = await handleGeneratorEntryCode(api, tanstackEntrypoints, {
246
172
  entrypointsKey: ENTRYPOINTS_KEY
247
173
  });
248
- await writeTanstackRouterTypesForEntries({
174
+ await (0, external_artifacts_js_namespaceObject.writeTanstackRouterTypesForEntries)({
249
175
  appContext: api.getAppContext(),
250
176
  generatedDirName,
251
177
  routesByEntry,
@@ -265,7 +191,7 @@ ${canonicalRoutesAugmentation}`;
265
191
  const routesByEntry = await handleGeneratorEntryCode(api, entrypoints, {
266
192
  entrypointsKey: ENTRYPOINTS_KEY
267
193
  });
268
- await writeTanstackRouterTypesForEntries({
194
+ await (0, external_artifacts_js_namespaceObject.writeTanstackRouterTypesForEntries)({
269
195
  appContext: api.getAppContext(),
270
196
  generatedDirName,
271
197
  routesByEntry,
@@ -296,29 +222,6 @@ ${canonicalRoutesAugmentation}`;
296
222
  }
297
223
  };
298
224
  }
299
- async function generateTanstackRouteArtifacts(opts) {
300
- const [{ createRunOptions }, { cli }, utils] = await Promise.all([
301
- import("@modern-js/app-tools/cli/run"),
302
- import("@modern-js/plugin/cli"),
303
- import("@modern-js/utils")
304
- ]);
305
- process.env.MODERN_ARGV = 'node modern build';
306
- process.env.NODE_ENV = process.env.NODE_ENV || 'production';
307
- const { findExists, CONFIG_FILE_EXTENSIONS } = utils;
308
- const configFileBase = external_node_path_default().resolve(opts.appDirectory, 'modern.config');
309
- const resolvedConfigFile = findExists(CONFIG_FILE_EXTENSIONS.map((extension)=>`${configFileBase}${extension}`));
310
- if (!resolvedConfigFile) throw new Error(`[plugin-tanstack] Unable to locate a Modern.js config file (modern.config.{${CONFIG_FILE_EXTENSIONS.map((extension)=>extension.slice(1)).join(',')}}) in ${opts.appDirectory}. TanStack route generation requires the app config to resolve its plugins.`);
311
- const runOptions = await createRunOptions({
312
- cwd: opts.appDirectory,
313
- configFile: configFileBase,
314
- version: opts.version || process.env.MODERN_JS_VERSION || '0.0.0-routes-generate',
315
- internalPlugins: utils.INTERNAL_RUNTIME_PLUGINS
316
- });
317
- await cli.init({
318
- ...runOptions,
319
- command: 'build'
320
- });
321
- }
322
225
  const src_cli = tanstackRouterPlugin;
323
226
  })();
324
227
  exports.collectCanonicalRoutesForEntry = __webpack_exports__.collectCanonicalRoutesForEntry;
@@ -0,0 +1,113 @@
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
+ collectCanonicalRoutesForEntry: ()=>collectCanonicalRoutesForEntry
32
+ });
33
+ const external_shared_js_namespaceObject = require("./shared.js");
34
+ const LOCALE_PARAM_SEGMENTS = new Set([
35
+ ':lang',
36
+ ':locale',
37
+ ':language',
38
+ '$lang',
39
+ '$locale',
40
+ '$language'
41
+ ]);
42
+ function paramsTypeForCanonicalPath(canonicalPath) {
43
+ const fields = [];
44
+ for (const segment of canonicalPath.split('/'))if (segment) {
45
+ if ('*' === segment || '$' === segment) {
46
+ fields.push("'_splat'?: string");
47
+ continue;
48
+ }
49
+ if (segment.startsWith('{-$') && segment.endsWith('}')) {
50
+ fields.push(`${JSON.stringify(segment.slice(3, -1))}?: string`);
51
+ continue;
52
+ }
53
+ if (segment.startsWith('$')) {
54
+ fields.push(`${JSON.stringify(segment.slice(1))}: string`);
55
+ continue;
56
+ }
57
+ if (segment.startsWith(':')) {
58
+ const optional = segment.endsWith('?');
59
+ const name = segment.slice(1, optional ? void 0 : segment.length);
60
+ fields.push(`${JSON.stringify(optional ? name.slice(0, -1) : name)}${optional ? '?' : ''}: string`);
61
+ }
62
+ }
63
+ return fields.length > 0 ? `{ ${fields.join('; ')} }` : 'Record<string, never>';
64
+ }
65
+ function collectCanonicalRoutesForEntry(routes, options = {}) {
66
+ const { localeParamHeuristic = true } = options;
67
+ const canonicalParams = new Map();
68
+ let hasI18nSurface = false;
69
+ const normalizeJoined = (joined)=>{
70
+ const collapsed = joined.replace(/\/+/g, '/');
71
+ const withLeading = collapsed.startsWith('/') ? collapsed : `/${collapsed}`;
72
+ return withLeading.length > 1 ? withLeading.replace(/\/+$/, '') : withLeading;
73
+ };
74
+ const record = (canonicalPath)=>{
75
+ const normalized = normalizeJoined(canonicalPath || '/');
76
+ const key = (0, external_shared_js_namespaceObject.toTanstackPath)(normalized);
77
+ if (!canonicalParams.has(key)) canonicalParams.set(key, paramsTypeForCanonicalPath(normalized));
78
+ };
79
+ const visit = (route, parentPath)=>{
80
+ let currentPath = parentPath;
81
+ if ('string' == typeof route.modernCanonicalPath) {
82
+ hasI18nSurface = true;
83
+ currentPath = normalizeJoined(route.modernCanonicalPath);
84
+ } else if ('string' == typeof route.path && route.path.length > 0) {
85
+ const segments = route.path.replace(/\[(.+?)\]/g, ':$1').split('/').filter(Boolean);
86
+ if (localeParamHeuristic && '' === parentPath && LOCALE_PARAM_SEGMENTS.has(segments[0])) {
87
+ hasI18nSurface = true;
88
+ segments.shift();
89
+ }
90
+ currentPath = segments.length ? normalizeJoined(`${parentPath}/${segments.join('/')}`) : parentPath;
91
+ }
92
+ const children = route.children;
93
+ if (children && children.length > 0) {
94
+ for (const child of children)visit(child, currentPath);
95
+ return;
96
+ }
97
+ record(currentPath || '/');
98
+ };
99
+ const rootModern = routes.find((route)=>route.isRoot);
100
+ const topLevel = rootModern ? rootModern.children ?? [] : routes;
101
+ for (const route of topLevel)visit(route, '');
102
+ if (!hasI18nSurface || 0 === canonicalParams.size) return null;
103
+ return Object.fromEntries([
104
+ ...canonicalParams.entries()
105
+ ].sort(([a], [b])=>a.localeCompare(b)));
106
+ }
107
+ exports.collectCanonicalRoutesForEntry = __webpack_exports__.collectCanonicalRoutesForEntry;
108
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
109
+ "collectCanonicalRoutesForEntry"
110
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
111
+ Object.defineProperty(exports, '__esModule', {
112
+ value: true
113
+ });
@@ -0,0 +1,130 @@
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
+ createRouteStaticDataSnippet: ()=>createRouteStaticDataSnippet,
32
+ isIndexRoute: ()=>isIndexRoute,
33
+ isPathlessLayout: ()=>isPathlessLayout,
34
+ normalizeRelativeImport: ()=>normalizeRelativeImport,
35
+ pickModernLoaderModule: ()=>pickModernLoaderModule,
36
+ pickRouteSearchContractModules: ()=>pickRouteSearchContractModules,
37
+ quote: ()=>quote,
38
+ resolveFileNoExt: ()=>resolveFileNoExt,
39
+ toTanstackPath: ()=>toTanstackPath
40
+ });
41
+ const cli_namespaceObject = require("@modern-js/runtime/cli");
42
+ const utils_namespaceObject = require("@modern-js/utils");
43
+ const JS_OR_TS_EXTS = [
44
+ '.js',
45
+ '.jsx',
46
+ '.ts',
47
+ '.tsx',
48
+ '.mjs',
49
+ '.mts',
50
+ '.cjs',
51
+ '.cts'
52
+ ];
53
+ function toTanstackPath(pathname) {
54
+ return pathname.split('/').map((segment)=>{
55
+ if (!segment) return segment;
56
+ if ('*' === segment) return '$';
57
+ if (segment.startsWith(':')) {
58
+ const name = segment.slice(1);
59
+ if (name.endsWith('?')) return `{-$${name.slice(0, -1)}}`;
60
+ return `$${name}`;
61
+ }
62
+ return segment;
63
+ }).join('/');
64
+ }
65
+ async function resolveFileNoExt(inputNoExtPath) {
66
+ const file = (0, utils_namespaceObject.findExists)(JS_OR_TS_EXTS.map((ext)=>`${inputNoExtPath}${ext}`));
67
+ return file ? (0, cli_namespaceObject.getPathWithoutExt)(file) : null;
68
+ }
69
+ function quote(str) {
70
+ return JSON.stringify(str);
71
+ }
72
+ function normalizeRelativeImport(p) {
73
+ const normalized = (0, utils_namespaceObject.formatImportPath)((0, utils_namespaceObject.slash)(p));
74
+ if (normalized.startsWith('.')) return normalized;
75
+ return `./${normalized}`;
76
+ }
77
+ function pickModernLoaderModule(route) {
78
+ const loaderPath = route.data || route.loader;
79
+ if (!loaderPath || 'string' != typeof loaderPath) return null;
80
+ const inline = Boolean(route.data);
81
+ return {
82
+ loaderPath,
83
+ inline
84
+ };
85
+ }
86
+ function pickRouteSearchContractModules(route) {
87
+ const validateSearchPath = route.validateSearch;
88
+ const loaderDepsPath = route.loaderDeps;
89
+ return {
90
+ validateSearchPath: 'string' == typeof validateSearchPath ? validateSearchPath : null,
91
+ loaderDepsPath: 'string' == typeof loaderDepsPath ? loaderDepsPath : null
92
+ };
93
+ }
94
+ function isPathlessLayout(route) {
95
+ return 'nested' === route.type && 'boolean' != typeof route.index && void 0 === route.path;
96
+ }
97
+ function isIndexRoute(route) {
98
+ return 'nested' === route.type && Boolean(route.index);
99
+ }
100
+ function createRouteStaticDataSnippet(opts) {
101
+ const staticDataLines = [];
102
+ if (opts.modernRouteId) staticDataLines.push(`modernRouteId: ${quote(opts.modernRouteId)},`);
103
+ if (opts.loaderName) staticDataLines.push(`modernRouteLoader: ${opts.loaderName},`);
104
+ if (opts.actionName) staticDataLines.push(`modernRouteAction: ${opts.actionName},`);
105
+ if (!staticDataLines.length) return null;
106
+ return `staticData: createRouteStaticData({\n ${staticDataLines.join('\n ')}\n }),`;
107
+ }
108
+ exports.createRouteStaticDataSnippet = __webpack_exports__.createRouteStaticDataSnippet;
109
+ exports.isIndexRoute = __webpack_exports__.isIndexRoute;
110
+ exports.isPathlessLayout = __webpack_exports__.isPathlessLayout;
111
+ exports.normalizeRelativeImport = __webpack_exports__.normalizeRelativeImport;
112
+ exports.pickModernLoaderModule = __webpack_exports__.pickModernLoaderModule;
113
+ exports.pickRouteSearchContractModules = __webpack_exports__.pickRouteSearchContractModules;
114
+ exports.quote = __webpack_exports__.quote;
115
+ exports.resolveFileNoExt = __webpack_exports__.resolveFileNoExt;
116
+ exports.toTanstackPath = __webpack_exports__.toTanstackPath;
117
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
118
+ "createRouteStaticDataSnippet",
119
+ "isIndexRoute",
120
+ "isPathlessLayout",
121
+ "normalizeRelativeImport",
122
+ "pickModernLoaderModule",
123
+ "pickRouteSearchContractModules",
124
+ "quote",
125
+ "resolveFileNoExt",
126
+ "toTanstackPath"
127
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
128
+ Object.defineProperty(exports, '__esModule', {
129
+ value: true
130
+ });