@tanstack/start-plugin-core 1.166.12 → 1.166.14

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 (87) hide show
  1. package/dist/esm/build-sitemap.js +94 -123
  2. package/dist/esm/build-sitemap.js.map +1 -1
  3. package/dist/esm/constants.js +15 -20
  4. package/dist/esm/constants.js.map +1 -1
  5. package/dist/esm/dev-server-plugin/dev-styles.js +137 -150
  6. package/dist/esm/dev-server-plugin/dev-styles.js.map +1 -1
  7. package/dist/esm/dev-server-plugin/extract-html-scripts.js +16 -15
  8. package/dist/esm/dev-server-plugin/extract-html-scripts.js.map +1 -1
  9. package/dist/esm/dev-server-plugin/plugin.js +125 -195
  10. package/dist/esm/dev-server-plugin/plugin.js.map +1 -1
  11. package/dist/esm/import-protection-plugin/ast.js +6 -5
  12. package/dist/esm/import-protection-plugin/ast.js.map +1 -1
  13. package/dist/esm/import-protection-plugin/constants.js +20 -22
  14. package/dist/esm/import-protection-plugin/constants.js.map +1 -1
  15. package/dist/esm/import-protection-plugin/defaults.js +35 -25
  16. package/dist/esm/import-protection-plugin/defaults.js.map +1 -1
  17. package/dist/esm/import-protection-plugin/extensionlessAbsoluteIdResolver.js +93 -92
  18. package/dist/esm/import-protection-plugin/extensionlessAbsoluteIdResolver.js.map +1 -1
  19. package/dist/esm/import-protection-plugin/matchers.js +23 -24
  20. package/dist/esm/import-protection-plugin/matchers.js.map +1 -1
  21. package/dist/esm/import-protection-plugin/plugin.js +1045 -1361
  22. package/dist/esm/import-protection-plugin/plugin.js.map +1 -1
  23. package/dist/esm/import-protection-plugin/postCompileUsage.js +58 -55
  24. package/dist/esm/import-protection-plugin/postCompileUsage.js.map +1 -1
  25. package/dist/esm/import-protection-plugin/rewriteDeniedImports.js +187 -259
  26. package/dist/esm/import-protection-plugin/rewriteDeniedImports.js.map +1 -1
  27. package/dist/esm/import-protection-plugin/sourceLocation.js +238 -248
  28. package/dist/esm/import-protection-plugin/sourceLocation.js.map +1 -1
  29. package/dist/esm/import-protection-plugin/trace.js +173 -184
  30. package/dist/esm/import-protection-plugin/trace.js.map +1 -1
  31. package/dist/esm/import-protection-plugin/utils.js +132 -111
  32. package/dist/esm/import-protection-plugin/utils.js.map +1 -1
  33. package/dist/esm/import-protection-plugin/virtualModules.js +216 -196
  34. package/dist/esm/import-protection-plugin/virtualModules.js.map +1 -1
  35. package/dist/esm/index.js +2 -7
  36. package/dist/esm/load-env-plugin/plugin.js +12 -11
  37. package/dist/esm/load-env-plugin/plugin.js.map +1 -1
  38. package/dist/esm/output-directory.js +10 -10
  39. package/dist/esm/output-directory.js.map +1 -1
  40. package/dist/esm/plugin.js +275 -355
  41. package/dist/esm/plugin.js.map +1 -1
  42. package/dist/esm/post-server-build.js +39 -53
  43. package/dist/esm/post-server-build.js.map +1 -1
  44. package/dist/esm/prerender.js +177 -239
  45. package/dist/esm/prerender.js.map +1 -1
  46. package/dist/esm/preview-server-plugin/plugin.js +41 -44
  47. package/dist/esm/preview-server-plugin/plugin.js.map +1 -1
  48. package/dist/esm/queue.js +115 -126
  49. package/dist/esm/queue.js.map +1 -1
  50. package/dist/esm/resolve-entries.js +31 -32
  51. package/dist/esm/resolve-entries.js.map +1 -1
  52. package/dist/esm/schema.js +156 -179
  53. package/dist/esm/schema.js.map +1 -1
  54. package/dist/esm/start-compiler-plugin/compiler.js +655 -812
  55. package/dist/esm/start-compiler-plugin/compiler.js.map +1 -1
  56. package/dist/esm/start-compiler-plugin/handleClientOnlyJSX.js +25 -8
  57. package/dist/esm/start-compiler-plugin/handleClientOnlyJSX.js.map +1 -1
  58. package/dist/esm/start-compiler-plugin/handleCreateIsomorphicFn.js +22 -19
  59. package/dist/esm/start-compiler-plugin/handleCreateIsomorphicFn.js.map +1 -1
  60. package/dist/esm/start-compiler-plugin/handleCreateMiddleware.js +20 -22
  61. package/dist/esm/start-compiler-plugin/handleCreateMiddleware.js.map +1 -1
  62. package/dist/esm/start-compiler-plugin/handleCreateServerFn.js +187 -255
  63. package/dist/esm/start-compiler-plugin/handleCreateServerFn.js.map +1 -1
  64. package/dist/esm/start-compiler-plugin/handleEnvOnly.js +23 -33
  65. package/dist/esm/start-compiler-plugin/handleEnvOnly.js.map +1 -1
  66. package/dist/esm/start-compiler-plugin/plugin.js +247 -291
  67. package/dist/esm/start-compiler-plugin/plugin.js.map +1 -1
  68. package/dist/esm/start-compiler-plugin/utils.js +27 -27
  69. package/dist/esm/start-compiler-plugin/utils.js.map +1 -1
  70. package/dist/esm/start-manifest-plugin/manifestBuilder.js +272 -378
  71. package/dist/esm/start-manifest-plugin/manifestBuilder.js.map +1 -1
  72. package/dist/esm/start-manifest-plugin/plugin.js +35 -44
  73. package/dist/esm/start-manifest-plugin/plugin.js.map +1 -1
  74. package/dist/esm/start-router-plugin/constants.js +6 -5
  75. package/dist/esm/start-router-plugin/constants.js.map +1 -1
  76. package/dist/esm/start-router-plugin/generator-plugins/prerender-routes-plugin.js +24 -19
  77. package/dist/esm/start-router-plugin/generator-plugins/prerender-routes-plugin.js.map +1 -1
  78. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js +28 -29
  79. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js.map +1 -1
  80. package/dist/esm/start-router-plugin/plugin.js +146 -199
  81. package/dist/esm/start-router-plugin/plugin.js.map +1 -1
  82. package/dist/esm/start-router-plugin/pruneServerOnlySubtrees.js +32 -31
  83. package/dist/esm/start-router-plugin/pruneServerOnlySubtrees.js.map +1 -1
  84. package/dist/esm/utils.js +14 -14
  85. package/dist/esm/utils.js.map +1 -1
  86. package/package.json +7 -7
  87. package/dist/esm/index.js.map +0 -1
@@ -1,211 +1,158 @@
1
- import { tanstackRouterGenerator, tanStackRouterCodeSplitter, tanstackRouterAutoImport } from "@tanstack/router-plugin/vite";
2
- import { normalizePath } from "vite";
3
- import path__default from "pathe";
4
1
  import { VITE_ENVIRONMENT_NAMES } from "../constants.js";
5
2
  import { routesManifestPlugin } from "./generator-plugins/routes-manifest-plugin.js";
6
3
  import { prerenderRoutesPlugin } from "./generator-plugins/prerender-routes-plugin.js";
4
+ import "./constants.js";
7
5
  import { pruneServerOnlySubtrees } from "./pruneServerOnlySubtrees.js";
8
- import { SERVER_PROP } from "./constants.js";
6
+ import { normalizePath } from "vite";
7
+ import path from "pathe";
8
+ import { tanStackRouterCodeSplitter, tanstackRouterAutoImport, tanstackRouterGenerator } from "@tanstack/router-plugin/vite";
9
+ //#region src/start-router-plugin/plugin.ts
9
10
  function isServerOnlyNode(node) {
10
- if (!node?.createFileRouteProps) {
11
- return false;
12
- }
13
- return node.createFileRouteProps.has(SERVER_PROP) && node.createFileRouteProps.size === 1;
11
+ if (!node?.createFileRouteProps) return false;
12
+ return node.createFileRouteProps.has("server") && node.createFileRouteProps.size === 1;
14
13
  }
15
- function moduleDeclaration({
16
- startFilePath,
17
- routerFilePath,
18
- corePluginOpts,
19
- generatedRouteTreePath
20
- }) {
21
- function getImportPath(absolutePath) {
22
- let relativePath = path__default.relative(
23
- path__default.dirname(generatedRouteTreePath),
24
- absolutePath
25
- );
26
- if (!relativePath.startsWith(".")) {
27
- relativePath = "./" + relativePath;
28
- }
29
- relativePath = relativePath.split(path__default.sep).join("/");
30
- return relativePath;
31
- }
32
- const result = [
33
- `import type { getRouter } from '${getImportPath(routerFilePath)}'`
34
- ];
35
- if (startFilePath) {
36
- result.push(
37
- `import type { startInstance } from '${getImportPath(startFilePath)}'`
38
- );
39
- } else {
40
- result.push(
41
- `import type { createStart } from '@tanstack/${corePluginOpts.framework}-start'`
42
- );
43
- }
44
- result.push(
45
- `declare module '@tanstack/${corePluginOpts.framework}-start' {
14
+ function moduleDeclaration({ startFilePath, routerFilePath, corePluginOpts, generatedRouteTreePath }) {
15
+ function getImportPath(absolutePath) {
16
+ let relativePath = path.relative(path.dirname(generatedRouteTreePath), absolutePath);
17
+ if (!relativePath.startsWith(".")) relativePath = "./" + relativePath;
18
+ relativePath = relativePath.split(path.sep).join("/");
19
+ return relativePath;
20
+ }
21
+ const result = [`import type { getRouter } from '${getImportPath(routerFilePath)}'`];
22
+ if (startFilePath) result.push(`import type { startInstance } from '${getImportPath(startFilePath)}'`);
23
+ else result.push(`import type { createStart } from '@tanstack/${corePluginOpts.framework}-start'`);
24
+ result.push(`declare module '@tanstack/${corePluginOpts.framework}-start' {
46
25
  interface Register {
47
26
  ssr: true
48
- router: Awaited<ReturnType<typeof getRouter>>`
49
- );
50
- if (startFilePath) {
51
- result.push(
52
- ` config: Awaited<ReturnType<typeof startInstance.getOptions>>`
53
- );
54
- }
55
- result.push(` }
27
+ router: Awaited<ReturnType<typeof getRouter>>`);
28
+ if (startFilePath) result.push(` config: Awaited<ReturnType<typeof startInstance.getOptions>>`);
29
+ result.push(` }
56
30
  }`);
57
- return result.join("\n");
31
+ return result.join("\n");
58
32
  }
59
33
  function tanStackStartRouter(startPluginOpts, getConfig, corePluginOpts) {
60
- const getGeneratedRouteTreePath = () => {
61
- const { startConfig } = getConfig();
62
- return path__default.resolve(startConfig.router.generatedRouteTree);
63
- };
64
- let clientEnvironment = null;
65
- function invalidate() {
66
- if (!clientEnvironment) {
67
- return;
68
- }
69
- const mod = clientEnvironment.moduleGraph.getModuleById(
70
- getGeneratedRouteTreePath()
71
- );
72
- if (mod) {
73
- clientEnvironment.moduleGraph.invalidateModule(mod);
74
- }
75
- clientEnvironment.hot.send({ type: "full-reload", path: "*" });
76
- }
77
- let generatorInstance = null;
78
- const clientTreeGeneratorPlugin = {
79
- name: "start-client-tree-plugin",
80
- init({ generator }) {
81
- generatorInstance = generator;
82
- },
83
- afterTransform({ node, prevNode }) {
84
- if (isServerOnlyNode(node) !== isServerOnlyNode(prevNode)) {
85
- invalidate();
86
- }
87
- }
88
- };
89
- let routeTreeFileFooter = null;
90
- function getRouteTreeFileFooter() {
91
- if (routeTreeFileFooter) {
92
- return routeTreeFileFooter;
93
- }
94
- const { startConfig, resolvedStartConfig } = getConfig();
95
- const ogRouteTreeFileFooter = startConfig.router.routeTreeFileFooter;
96
- if (ogRouteTreeFileFooter) {
97
- if (Array.isArray(ogRouteTreeFileFooter)) {
98
- routeTreeFileFooter = ogRouteTreeFileFooter;
99
- } else {
100
- routeTreeFileFooter = ogRouteTreeFileFooter();
101
- }
102
- }
103
- routeTreeFileFooter = [
104
- moduleDeclaration({
105
- generatedRouteTreePath: getGeneratedRouteTreePath(),
106
- corePluginOpts,
107
- startFilePath: resolvedStartConfig.startFilePath,
108
- routerFilePath: resolvedStartConfig.routerFilePath
109
- }),
110
- ...routeTreeFileFooter ?? []
111
- ];
112
- return routeTreeFileFooter;
113
- }
114
- let resolvedGeneratedRouteTreePath = null;
115
- const clientTreePlugin = {
116
- name: "tanstack-start:route-tree-client-plugin",
117
- enforce: "pre",
118
- applyToEnvironment: (env) => env.name === VITE_ENVIRONMENT_NAMES.client,
119
- configureServer(server) {
120
- clientEnvironment = server.environments[VITE_ENVIRONMENT_NAMES.client];
121
- },
122
- config() {
123
- resolvedGeneratedRouteTreePath = normalizePath(
124
- getGeneratedRouteTreePath()
125
- );
126
- clientTreePlugin.load.filter = {
127
- id: { include: new RegExp(resolvedGeneratedRouteTreePath) }
128
- };
129
- },
130
- load: {
131
- filter: {
132
- // this will be set in the config hook above since it relies on `config` hook being called first
133
- },
134
- async handler() {
135
- if (!generatorInstance) {
136
- throw new Error("Generator instance not initialized");
137
- }
138
- const crawlingResult = await generatorInstance.getCrawlingResult();
139
- if (!crawlingResult) {
140
- throw new Error("Crawling result not available");
141
- }
142
- const prunedAcc = pruneServerOnlySubtrees(crawlingResult);
143
- const acc = {
144
- ...crawlingResult.acc,
145
- ...prunedAcc
146
- };
147
- const buildResult = generatorInstance.buildRouteTree({
148
- ...crawlingResult,
149
- acc,
150
- config: {
151
- // importRoutesUsingAbsolutePaths: true,
152
- // addExtensions: true,
153
- disableTypes: true,
154
- enableRouteTreeFormatting: false,
155
- routeTreeFileHeader: [],
156
- routeTreeFileFooter: []
157
- }
158
- });
159
- return { code: buildResult.routeTreeContent, map: null };
160
- }
161
- }
162
- };
163
- return [
164
- clientTreePlugin,
165
- tanstackRouterGenerator(() => {
166
- const routerConfig = getConfig().startConfig.router;
167
- const plugins = [clientTreeGeneratorPlugin, routesManifestPlugin()];
168
- if (startPluginOpts?.prerender?.enabled === true) {
169
- plugins.push(prerenderRoutesPlugin());
170
- }
171
- return {
172
- ...routerConfig,
173
- target: corePluginOpts.framework,
174
- routeTreeFileFooter: getRouteTreeFileFooter,
175
- plugins
176
- };
177
- }),
178
- tanStackRouterCodeSplitter(() => {
179
- const routerConfig = getConfig().startConfig.router;
180
- return {
181
- ...routerConfig,
182
- codeSplittingOptions: {
183
- ...routerConfig.codeSplittingOptions,
184
- deleteNodes: ["ssr", "server", "headers"],
185
- addHmr: true
186
- },
187
- plugin: {
188
- vite: { environmentName: VITE_ENVIRONMENT_NAMES.client }
189
- }
190
- };
191
- }),
192
- tanStackRouterCodeSplitter(() => {
193
- const routerConfig = getConfig().startConfig.router;
194
- return {
195
- ...routerConfig,
196
- codeSplittingOptions: {
197
- ...routerConfig.codeSplittingOptions,
198
- addHmr: false
199
- },
200
- plugin: {
201
- vite: { environmentName: VITE_ENVIRONMENT_NAMES.server }
202
- }
203
- };
204
- }),
205
- tanstackRouterAutoImport(startPluginOpts?.router)
206
- ];
34
+ const getGeneratedRouteTreePath = () => {
35
+ const { startConfig } = getConfig();
36
+ return path.resolve(startConfig.router.generatedRouteTree);
37
+ };
38
+ let clientEnvironment = null;
39
+ function invalidate() {
40
+ if (!clientEnvironment) return;
41
+ const mod = clientEnvironment.moduleGraph.getModuleById(getGeneratedRouteTreePath());
42
+ if (mod) clientEnvironment.moduleGraph.invalidateModule(mod);
43
+ clientEnvironment.hot.send({
44
+ type: "full-reload",
45
+ path: "*"
46
+ });
47
+ }
48
+ let generatorInstance = null;
49
+ const clientTreeGeneratorPlugin = {
50
+ name: "start-client-tree-plugin",
51
+ init({ generator }) {
52
+ generatorInstance = generator;
53
+ },
54
+ afterTransform({ node, prevNode }) {
55
+ if (isServerOnlyNode(node) !== isServerOnlyNode(prevNode)) invalidate();
56
+ }
57
+ };
58
+ let routeTreeFileFooter = null;
59
+ function getRouteTreeFileFooter() {
60
+ if (routeTreeFileFooter) return routeTreeFileFooter;
61
+ const { startConfig, resolvedStartConfig } = getConfig();
62
+ const ogRouteTreeFileFooter = startConfig.router.routeTreeFileFooter;
63
+ if (ogRouteTreeFileFooter) if (Array.isArray(ogRouteTreeFileFooter)) routeTreeFileFooter = ogRouteTreeFileFooter;
64
+ else routeTreeFileFooter = ogRouteTreeFileFooter();
65
+ routeTreeFileFooter = [moduleDeclaration({
66
+ generatedRouteTreePath: getGeneratedRouteTreePath(),
67
+ corePluginOpts,
68
+ startFilePath: resolvedStartConfig.startFilePath,
69
+ routerFilePath: resolvedStartConfig.routerFilePath
70
+ }), ...routeTreeFileFooter ?? []];
71
+ return routeTreeFileFooter;
72
+ }
73
+ let resolvedGeneratedRouteTreePath = null;
74
+ const clientTreePlugin = {
75
+ name: "tanstack-start:route-tree-client-plugin",
76
+ enforce: "pre",
77
+ applyToEnvironment: (env) => env.name === VITE_ENVIRONMENT_NAMES.client,
78
+ configureServer(server) {
79
+ clientEnvironment = server.environments[VITE_ENVIRONMENT_NAMES.client];
80
+ },
81
+ config() {
82
+ resolvedGeneratedRouteTreePath = normalizePath(getGeneratedRouteTreePath());
83
+ clientTreePlugin.load.filter = { id: { include: new RegExp(resolvedGeneratedRouteTreePath) } };
84
+ },
85
+ load: {
86
+ filter: {},
87
+ async handler() {
88
+ if (!generatorInstance) throw new Error("Generator instance not initialized");
89
+ const crawlingResult = await generatorInstance.getCrawlingResult();
90
+ if (!crawlingResult) throw new Error("Crawling result not available");
91
+ const prunedAcc = pruneServerOnlySubtrees(crawlingResult);
92
+ const acc = {
93
+ ...crawlingResult.acc,
94
+ ...prunedAcc
95
+ };
96
+ return {
97
+ code: generatorInstance.buildRouteTree({
98
+ ...crawlingResult,
99
+ acc,
100
+ config: {
101
+ disableTypes: true,
102
+ enableRouteTreeFormatting: false,
103
+ routeTreeFileHeader: [],
104
+ routeTreeFileFooter: []
105
+ }
106
+ }).routeTreeContent,
107
+ map: null
108
+ };
109
+ }
110
+ }
111
+ };
112
+ return [
113
+ clientTreePlugin,
114
+ tanstackRouterGenerator(() => {
115
+ const routerConfig = getConfig().startConfig.router;
116
+ const plugins = [clientTreeGeneratorPlugin, routesManifestPlugin()];
117
+ if (startPluginOpts?.prerender?.enabled === true) plugins.push(prerenderRoutesPlugin());
118
+ return {
119
+ ...routerConfig,
120
+ target: corePluginOpts.framework,
121
+ routeTreeFileFooter: getRouteTreeFileFooter,
122
+ plugins
123
+ };
124
+ }),
125
+ tanStackRouterCodeSplitter(() => {
126
+ const routerConfig = getConfig().startConfig.router;
127
+ return {
128
+ ...routerConfig,
129
+ codeSplittingOptions: {
130
+ ...routerConfig.codeSplittingOptions,
131
+ deleteNodes: [
132
+ "ssr",
133
+ "server",
134
+ "headers"
135
+ ],
136
+ addHmr: true
137
+ },
138
+ plugin: { vite: { environmentName: VITE_ENVIRONMENT_NAMES.client } }
139
+ };
140
+ }),
141
+ tanStackRouterCodeSplitter(() => {
142
+ const routerConfig = getConfig().startConfig.router;
143
+ return {
144
+ ...routerConfig,
145
+ codeSplittingOptions: {
146
+ ...routerConfig.codeSplittingOptions,
147
+ addHmr: false
148
+ },
149
+ plugin: { vite: { environmentName: VITE_ENVIRONMENT_NAMES.server } }
150
+ };
151
+ }),
152
+ tanstackRouterAutoImport(startPluginOpts?.router)
153
+ ];
207
154
  }
208
- export {
209
- tanStackStartRouter
210
- };
211
- //# sourceMappingURL=plugin.js.map
155
+ //#endregion
156
+ export { tanStackStartRouter };
157
+
158
+ //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../src/start-router-plugin/plugin.ts"],"sourcesContent":["import {\n tanStackRouterCodeSplitter,\n tanstackRouterAutoImport,\n tanstackRouterGenerator,\n} from '@tanstack/router-plugin/vite'\nimport { normalizePath } from 'vite'\nimport path from 'pathe'\nimport { VITE_ENVIRONMENT_NAMES } from '../constants'\nimport { routesManifestPlugin } from './generator-plugins/routes-manifest-plugin'\nimport { prerenderRoutesPlugin } from './generator-plugins/prerender-routes-plugin'\nimport { pruneServerOnlySubtrees } from './pruneServerOnlySubtrees'\nimport { SERVER_PROP } from './constants'\nimport type { GetConfigFn, TanStackStartVitePluginCoreOptions } from '../types'\nimport type {\n Generator,\n GeneratorPlugin,\n RouteNode,\n} from '@tanstack/router-generator'\nimport type { DevEnvironment, Plugin, PluginOption } from 'vite'\nimport type { TanStackStartInputConfig } from '../schema'\n\nfunction isServerOnlyNode(node: RouteNode | undefined) {\n if (!node?.createFileRouteProps) {\n return false\n }\n return (\n node.createFileRouteProps.has(SERVER_PROP) &&\n node.createFileRouteProps.size === 1\n )\n}\n\nfunction moduleDeclaration({\n startFilePath,\n routerFilePath,\n corePluginOpts,\n generatedRouteTreePath,\n}: {\n startFilePath: string | undefined\n routerFilePath: string\n corePluginOpts: TanStackStartVitePluginCoreOptions\n generatedRouteTreePath: string\n}): string {\n function getImportPath(absolutePath: string) {\n let relativePath = path.relative(\n path.dirname(generatedRouteTreePath),\n absolutePath,\n )\n\n if (!relativePath.startsWith('.')) {\n relativePath = './' + relativePath\n }\n\n // convert to POSIX-style for ESM imports (important on Windows)\n relativePath = relativePath.split(path.sep).join('/')\n return relativePath\n }\n\n const result: Array<string> = [\n `import type { getRouter } from '${getImportPath(routerFilePath)}'`,\n ]\n if (startFilePath) {\n result.push(\n `import type { startInstance } from '${getImportPath(startFilePath)}'`,\n )\n }\n // make sure we import something from start to get the server route declaration merge\n else {\n result.push(\n `import type { createStart } from '@tanstack/${corePluginOpts.framework}-start'`,\n )\n }\n result.push(\n `declare module '@tanstack/${corePluginOpts.framework}-start' {\n interface Register {\n ssr: true\n router: Awaited<ReturnType<typeof getRouter>>`,\n )\n if (startFilePath) {\n result.push(\n ` config: Awaited<ReturnType<typeof startInstance.getOptions>>`,\n )\n }\n result.push(` }\n}`)\n\n return result.join('\\n')\n}\n\nexport function tanStackStartRouter(\n startPluginOpts: TanStackStartInputConfig,\n getConfig: GetConfigFn,\n corePluginOpts: TanStackStartVitePluginCoreOptions,\n): Array<PluginOption> {\n const getGeneratedRouteTreePath = () => {\n const { startConfig } = getConfig()\n return path.resolve(startConfig.router.generatedRouteTree)\n }\n\n let clientEnvironment: DevEnvironment | null = null\n function invalidate() {\n if (!clientEnvironment) {\n return\n }\n\n const mod = clientEnvironment.moduleGraph.getModuleById(\n getGeneratedRouteTreePath(),\n )\n if (mod) {\n clientEnvironment.moduleGraph.invalidateModule(mod)\n }\n clientEnvironment.hot.send({ type: 'full-reload', path: '*' })\n }\n\n let generatorInstance: Generator | null = null\n\n const clientTreeGeneratorPlugin: GeneratorPlugin = {\n name: 'start-client-tree-plugin',\n init({ generator }) {\n generatorInstance = generator\n },\n afterTransform({ node, prevNode }) {\n if (isServerOnlyNode(node) !== isServerOnlyNode(prevNode)) {\n invalidate()\n }\n },\n }\n\n let routeTreeFileFooter: Array<string> | null = null\n\n function getRouteTreeFileFooter() {\n if (routeTreeFileFooter) {\n return routeTreeFileFooter\n }\n const { startConfig, resolvedStartConfig } = getConfig()\n const ogRouteTreeFileFooter = startConfig.router.routeTreeFileFooter\n if (ogRouteTreeFileFooter) {\n if (Array.isArray(ogRouteTreeFileFooter)) {\n routeTreeFileFooter = ogRouteTreeFileFooter\n } else {\n routeTreeFileFooter = ogRouteTreeFileFooter()\n }\n }\n routeTreeFileFooter = [\n moduleDeclaration({\n generatedRouteTreePath: getGeneratedRouteTreePath(),\n corePluginOpts,\n startFilePath: resolvedStartConfig.startFilePath,\n routerFilePath: resolvedStartConfig.routerFilePath,\n }),\n ...(routeTreeFileFooter ?? []),\n ]\n return routeTreeFileFooter\n }\n\n let resolvedGeneratedRouteTreePath: string | null = null\n const clientTreePlugin: Plugin = {\n name: 'tanstack-start:route-tree-client-plugin',\n enforce: 'pre',\n applyToEnvironment: (env) => env.name === VITE_ENVIRONMENT_NAMES.client,\n configureServer(server) {\n clientEnvironment = server.environments[VITE_ENVIRONMENT_NAMES.client]\n },\n config() {\n type LoadObjectHook = Extract<\n typeof clientTreePlugin.load,\n { filter?: unknown }\n >\n resolvedGeneratedRouteTreePath = normalizePath(\n getGeneratedRouteTreePath(),\n )\n ;(clientTreePlugin.load as LoadObjectHook).filter = {\n id: { include: new RegExp(resolvedGeneratedRouteTreePath) },\n }\n },\n\n load: {\n filter: {\n // this will be set in the config hook above since it relies on `config` hook being called first\n },\n async handler() {\n if (!generatorInstance) {\n throw new Error('Generator instance not initialized')\n }\n const crawlingResult = await generatorInstance.getCrawlingResult()\n if (!crawlingResult) {\n throw new Error('Crawling result not available')\n }\n const prunedAcc = pruneServerOnlySubtrees(crawlingResult)\n const acc = {\n ...crawlingResult.acc,\n ...prunedAcc,\n }\n const buildResult = generatorInstance.buildRouteTree({\n ...crawlingResult,\n acc,\n config: {\n // importRoutesUsingAbsolutePaths: true,\n // addExtensions: true,\n disableTypes: true,\n enableRouteTreeFormatting: false,\n routeTreeFileHeader: [],\n routeTreeFileFooter: [],\n },\n })\n return { code: buildResult.routeTreeContent, map: null }\n },\n },\n }\n return [\n clientTreePlugin,\n tanstackRouterGenerator(() => {\n const routerConfig = getConfig().startConfig.router\n const plugins = [clientTreeGeneratorPlugin, routesManifestPlugin()]\n if (startPluginOpts?.prerender?.enabled === true) {\n plugins.push(prerenderRoutesPlugin())\n }\n return {\n ...routerConfig,\n target: corePluginOpts.framework,\n routeTreeFileFooter: getRouteTreeFileFooter,\n plugins,\n }\n }),\n tanStackRouterCodeSplitter(() => {\n const routerConfig = getConfig().startConfig.router\n return {\n ...routerConfig,\n codeSplittingOptions: {\n ...routerConfig.codeSplittingOptions,\n deleteNodes: ['ssr', 'server', 'headers'],\n addHmr: true,\n },\n plugin: {\n vite: { environmentName: VITE_ENVIRONMENT_NAMES.client },\n },\n }\n }),\n tanStackRouterCodeSplitter(() => {\n const routerConfig = getConfig().startConfig.router\n return {\n ...routerConfig,\n codeSplittingOptions: {\n ...routerConfig.codeSplittingOptions,\n addHmr: false,\n },\n plugin: {\n vite: { environmentName: VITE_ENVIRONMENT_NAMES.server },\n },\n }\n }),\n tanstackRouterAutoImport(startPluginOpts?.router),\n ]\n}\n"],"names":["path"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","names":[],"sources":["../../../src/start-router-plugin/plugin.ts"],"sourcesContent":["import {\n tanStackRouterCodeSplitter,\n tanstackRouterAutoImport,\n tanstackRouterGenerator,\n} from '@tanstack/router-plugin/vite'\nimport { normalizePath } from 'vite'\nimport path from 'pathe'\nimport { VITE_ENVIRONMENT_NAMES } from '../constants'\nimport { routesManifestPlugin } from './generator-plugins/routes-manifest-plugin'\nimport { prerenderRoutesPlugin } from './generator-plugins/prerender-routes-plugin'\nimport { pruneServerOnlySubtrees } from './pruneServerOnlySubtrees'\nimport { SERVER_PROP } from './constants'\nimport type { GetConfigFn, TanStackStartVitePluginCoreOptions } from '../types'\nimport type {\n Generator,\n GeneratorPlugin,\n RouteNode,\n} from '@tanstack/router-generator'\nimport type { DevEnvironment, Plugin, PluginOption } from 'vite'\nimport type { TanStackStartInputConfig } from '../schema'\n\nfunction isServerOnlyNode(node: RouteNode | undefined) {\n if (!node?.createFileRouteProps) {\n return false\n }\n return (\n node.createFileRouteProps.has(SERVER_PROP) &&\n node.createFileRouteProps.size === 1\n )\n}\n\nfunction moduleDeclaration({\n startFilePath,\n routerFilePath,\n corePluginOpts,\n generatedRouteTreePath,\n}: {\n startFilePath: string | undefined\n routerFilePath: string\n corePluginOpts: TanStackStartVitePluginCoreOptions\n generatedRouteTreePath: string\n}): string {\n function getImportPath(absolutePath: string) {\n let relativePath = path.relative(\n path.dirname(generatedRouteTreePath),\n absolutePath,\n )\n\n if (!relativePath.startsWith('.')) {\n relativePath = './' + relativePath\n }\n\n // convert to POSIX-style for ESM imports (important on Windows)\n relativePath = relativePath.split(path.sep).join('/')\n return relativePath\n }\n\n const result: Array<string> = [\n `import type { getRouter } from '${getImportPath(routerFilePath)}'`,\n ]\n if (startFilePath) {\n result.push(\n `import type { startInstance } from '${getImportPath(startFilePath)}'`,\n )\n }\n // make sure we import something from start to get the server route declaration merge\n else {\n result.push(\n `import type { createStart } from '@tanstack/${corePluginOpts.framework}-start'`,\n )\n }\n result.push(\n `declare module '@tanstack/${corePluginOpts.framework}-start' {\n interface Register {\n ssr: true\n router: Awaited<ReturnType<typeof getRouter>>`,\n )\n if (startFilePath) {\n result.push(\n ` config: Awaited<ReturnType<typeof startInstance.getOptions>>`,\n )\n }\n result.push(` }\n}`)\n\n return result.join('\\n')\n}\n\nexport function tanStackStartRouter(\n startPluginOpts: TanStackStartInputConfig,\n getConfig: GetConfigFn,\n corePluginOpts: TanStackStartVitePluginCoreOptions,\n): Array<PluginOption> {\n const getGeneratedRouteTreePath = () => {\n const { startConfig } = getConfig()\n return path.resolve(startConfig.router.generatedRouteTree)\n }\n\n let clientEnvironment: DevEnvironment | null = null\n function invalidate() {\n if (!clientEnvironment) {\n return\n }\n\n const mod = clientEnvironment.moduleGraph.getModuleById(\n getGeneratedRouteTreePath(),\n )\n if (mod) {\n clientEnvironment.moduleGraph.invalidateModule(mod)\n }\n clientEnvironment.hot.send({ type: 'full-reload', path: '*' })\n }\n\n let generatorInstance: Generator | null = null\n\n const clientTreeGeneratorPlugin: GeneratorPlugin = {\n name: 'start-client-tree-plugin',\n init({ generator }) {\n generatorInstance = generator\n },\n afterTransform({ node, prevNode }) {\n if (isServerOnlyNode(node) !== isServerOnlyNode(prevNode)) {\n invalidate()\n }\n },\n }\n\n let routeTreeFileFooter: Array<string> | null = null\n\n function getRouteTreeFileFooter() {\n if (routeTreeFileFooter) {\n return routeTreeFileFooter\n }\n const { startConfig, resolvedStartConfig } = getConfig()\n const ogRouteTreeFileFooter = startConfig.router.routeTreeFileFooter\n if (ogRouteTreeFileFooter) {\n if (Array.isArray(ogRouteTreeFileFooter)) {\n routeTreeFileFooter = ogRouteTreeFileFooter\n } else {\n routeTreeFileFooter = ogRouteTreeFileFooter()\n }\n }\n routeTreeFileFooter = [\n moduleDeclaration({\n generatedRouteTreePath: getGeneratedRouteTreePath(),\n corePluginOpts,\n startFilePath: resolvedStartConfig.startFilePath,\n routerFilePath: resolvedStartConfig.routerFilePath,\n }),\n ...(routeTreeFileFooter ?? []),\n ]\n return routeTreeFileFooter\n }\n\n let resolvedGeneratedRouteTreePath: string | null = null\n const clientTreePlugin: Plugin = {\n name: 'tanstack-start:route-tree-client-plugin',\n enforce: 'pre',\n applyToEnvironment: (env) => env.name === VITE_ENVIRONMENT_NAMES.client,\n configureServer(server) {\n clientEnvironment = server.environments[VITE_ENVIRONMENT_NAMES.client]\n },\n config() {\n type LoadObjectHook = Extract<\n typeof clientTreePlugin.load,\n { filter?: unknown }\n >\n resolvedGeneratedRouteTreePath = normalizePath(\n getGeneratedRouteTreePath(),\n )\n ;(clientTreePlugin.load as LoadObjectHook).filter = {\n id: { include: new RegExp(resolvedGeneratedRouteTreePath) },\n }\n },\n\n load: {\n filter: {\n // this will be set in the config hook above since it relies on `config` hook being called first\n },\n async handler() {\n if (!generatorInstance) {\n throw new Error('Generator instance not initialized')\n }\n const crawlingResult = await generatorInstance.getCrawlingResult()\n if (!crawlingResult) {\n throw new Error('Crawling result not available')\n }\n const prunedAcc = pruneServerOnlySubtrees(crawlingResult)\n const acc = {\n ...crawlingResult.acc,\n ...prunedAcc,\n }\n const buildResult = generatorInstance.buildRouteTree({\n ...crawlingResult,\n acc,\n config: {\n // importRoutesUsingAbsolutePaths: true,\n // addExtensions: true,\n disableTypes: true,\n enableRouteTreeFormatting: false,\n routeTreeFileHeader: [],\n routeTreeFileFooter: [],\n },\n })\n return { code: buildResult.routeTreeContent, map: null }\n },\n },\n }\n return [\n clientTreePlugin,\n tanstackRouterGenerator(() => {\n const routerConfig = getConfig().startConfig.router\n const plugins = [clientTreeGeneratorPlugin, routesManifestPlugin()]\n if (startPluginOpts?.prerender?.enabled === true) {\n plugins.push(prerenderRoutesPlugin())\n }\n return {\n ...routerConfig,\n target: corePluginOpts.framework,\n routeTreeFileFooter: getRouteTreeFileFooter,\n plugins,\n }\n }),\n tanStackRouterCodeSplitter(() => {\n const routerConfig = getConfig().startConfig.router\n return {\n ...routerConfig,\n codeSplittingOptions: {\n ...routerConfig.codeSplittingOptions,\n deleteNodes: ['ssr', 'server', 'headers'],\n addHmr: true,\n },\n plugin: {\n vite: { environmentName: VITE_ENVIRONMENT_NAMES.client },\n },\n }\n }),\n tanStackRouterCodeSplitter(() => {\n const routerConfig = getConfig().startConfig.router\n return {\n ...routerConfig,\n codeSplittingOptions: {\n ...routerConfig.codeSplittingOptions,\n addHmr: false,\n },\n plugin: {\n vite: { environmentName: VITE_ENVIRONMENT_NAMES.server },\n },\n }\n }),\n tanstackRouterAutoImport(startPluginOpts?.router),\n ]\n}\n"],"mappings":";;;;;;;;;AAqBA,SAAS,iBAAiB,MAA6B;AACrD,KAAI,CAAC,MAAM,qBACT,QAAO;AAET,QACE,KAAK,qBAAqB,IAAA,SAAgB,IAC1C,KAAK,qBAAqB,SAAS;;AAIvC,SAAS,kBAAkB,EACzB,eACA,gBACA,gBACA,0BAMS;CACT,SAAS,cAAc,cAAsB;EAC3C,IAAI,eAAe,KAAK,SACtB,KAAK,QAAQ,uBAAuB,EACpC,aACD;AAED,MAAI,CAAC,aAAa,WAAW,IAAI,CAC/B,gBAAe,OAAO;AAIxB,iBAAe,aAAa,MAAM,KAAK,IAAI,CAAC,KAAK,IAAI;AACrD,SAAO;;CAGT,MAAM,SAAwB,CAC5B,mCAAmC,cAAc,eAAe,CAAC,GAClE;AACD,KAAI,cACF,QAAO,KACL,uCAAuC,cAAc,cAAc,CAAC,GACrE;KAID,QAAO,KACL,+CAA+C,eAAe,UAAU,SACzE;AAEH,QAAO,KACL,6BAA6B,eAAe,UAAU;;;mDAIvD;AACD,KAAI,cACF,QAAO,KACL,mEACD;AAEH,QAAO,KAAK;GACX;AAED,QAAO,OAAO,KAAK,KAAK;;AAG1B,SAAgB,oBACd,iBACA,WACA,gBACqB;CACrB,MAAM,kCAAkC;EACtC,MAAM,EAAE,gBAAgB,WAAW;AACnC,SAAO,KAAK,QAAQ,YAAY,OAAO,mBAAmB;;CAG5D,IAAI,oBAA2C;CAC/C,SAAS,aAAa;AACpB,MAAI,CAAC,kBACH;EAGF,MAAM,MAAM,kBAAkB,YAAY,cACxC,2BAA2B,CAC5B;AACD,MAAI,IACF,mBAAkB,YAAY,iBAAiB,IAAI;AAErD,oBAAkB,IAAI,KAAK;GAAE,MAAM;GAAe,MAAM;GAAK,CAAC;;CAGhE,IAAI,oBAAsC;CAE1C,MAAM,4BAA6C;EACjD,MAAM;EACN,KAAK,EAAE,aAAa;AAClB,uBAAoB;;EAEtB,eAAe,EAAE,MAAM,YAAY;AACjC,OAAI,iBAAiB,KAAK,KAAK,iBAAiB,SAAS,CACvD,aAAY;;EAGjB;CAED,IAAI,sBAA4C;CAEhD,SAAS,yBAAyB;AAChC,MAAI,oBACF,QAAO;EAET,MAAM,EAAE,aAAa,wBAAwB,WAAW;EACxD,MAAM,wBAAwB,YAAY,OAAO;AACjD,MAAI,sBACF,KAAI,MAAM,QAAQ,sBAAsB,CACtC,uBAAsB;MAEtB,uBAAsB,uBAAuB;AAGjD,wBAAsB,CACpB,kBAAkB;GAChB,wBAAwB,2BAA2B;GACnD;GACA,eAAe,oBAAoB;GACnC,gBAAgB,oBAAoB;GACrC,CAAC,EACF,GAAI,uBAAuB,EAAE,CAC9B;AACD,SAAO;;CAGT,IAAI,iCAAgD;CACpD,MAAM,mBAA2B;EAC/B,MAAM;EACN,SAAS;EACT,qBAAqB,QAAQ,IAAI,SAAS,uBAAuB;EACjE,gBAAgB,QAAQ;AACtB,uBAAoB,OAAO,aAAa,uBAAuB;;EAEjE,SAAS;AAKP,oCAAiC,cAC/B,2BAA2B,CAC5B;AACC,oBAAiB,KAAwB,SAAS,EAClD,IAAI,EAAE,SAAS,IAAI,OAAO,+BAA+B,EAAE,EAC5D;;EAGH,MAAM;GACJ,QAAQ,EAEP;GACD,MAAM,UAAU;AACd,QAAI,CAAC,kBACH,OAAM,IAAI,MAAM,qCAAqC;IAEvD,MAAM,iBAAiB,MAAM,kBAAkB,mBAAmB;AAClE,QAAI,CAAC,eACH,OAAM,IAAI,MAAM,gCAAgC;IAElD,MAAM,YAAY,wBAAwB,eAAe;IACzD,MAAM,MAAM;KACV,GAAG,eAAe;KAClB,GAAG;KACJ;AAaD,WAAO;KAAE,MAZW,kBAAkB,eAAe;MACnD,GAAG;MACH;MACA,QAAQ;OAGN,cAAc;OACd,2BAA2B;OAC3B,qBAAqB,EAAE;OACvB,qBAAqB,EAAE;OACxB;MACF,CAAC,CACyB;KAAkB,KAAK;KAAM;;GAE3D;EACF;AACD,QAAO;EACL;EACA,8BAA8B;GAC5B,MAAM,eAAe,WAAW,CAAC,YAAY;GAC7C,MAAM,UAAU,CAAC,2BAA2B,sBAAsB,CAAC;AACnE,OAAI,iBAAiB,WAAW,YAAY,KAC1C,SAAQ,KAAK,uBAAuB,CAAC;AAEvC,UAAO;IACL,GAAG;IACH,QAAQ,eAAe;IACvB,qBAAqB;IACrB;IACD;IACD;EACF,iCAAiC;GAC/B,MAAM,eAAe,WAAW,CAAC,YAAY;AAC7C,UAAO;IACL,GAAG;IACH,sBAAsB;KACpB,GAAG,aAAa;KAChB,aAAa;MAAC;MAAO;MAAU;MAAU;KACzC,QAAQ;KACT;IACD,QAAQ,EACN,MAAM,EAAE,iBAAiB,uBAAuB,QAAQ,EACzD;IACF;IACD;EACF,iCAAiC;GAC/B,MAAM,eAAe,WAAW,CAAC,YAAY;AAC7C,UAAO;IACL,GAAG;IACH,sBAAsB;KACpB,GAAG,aAAa;KAChB,QAAQ;KACT;IACD,QAAQ,EACN,MAAM,EAAE,iBAAiB,uBAAuB,QAAQ,EACzD;IACF;IACD;EACF,yBAAyB,iBAAiB,OAAO;EAClD"}
@@ -1,34 +1,35 @@
1
- import { SERVER_PROP } from "./constants.js";
2
- function pruneServerOnlySubtrees({
3
- rootRouteNode,
4
- acc
5
- }) {
6
- const routeNodes = [];
7
- const routeTree = prune({ ...rootRouteNode, children: acc.routeTree }, routeNodes)?.children || [];
8
- routeNodes.pop();
9
- return {
10
- routeTree,
11
- routeNodes
12
- };
1
+ import "./constants.js";
2
+ //#region src/start-router-plugin/pruneServerOnlySubtrees.ts
3
+ function pruneServerOnlySubtrees({ rootRouteNode, acc }) {
4
+ const routeNodes = [];
5
+ const routeTree = prune({
6
+ ...rootRouteNode,
7
+ children: acc.routeTree
8
+ }, routeNodes)?.children || [];
9
+ routeNodes.pop();
10
+ return {
11
+ routeTree,
12
+ routeNodes
13
+ };
13
14
  }
14
15
  function prune(node, collectedRouteNodes) {
15
- const newChildren = [];
16
- let allChildrenServerOnly = true;
17
- for (const child of node.children || []) {
18
- const newChild = prune(child, collectedRouteNodes);
19
- if (newChild) {
20
- newChildren.push(newChild);
21
- allChildrenServerOnly = false;
22
- }
23
- }
24
- const allServerOnly = node.createFileRouteProps?.has(SERVER_PROP) && node.createFileRouteProps.size === 1 && allChildrenServerOnly;
25
- if (allServerOnly) {
26
- return null;
27
- }
28
- collectedRouteNodes.push(node);
29
- return { ...node, children: newChildren };
16
+ const newChildren = [];
17
+ let allChildrenServerOnly = true;
18
+ for (const child of node.children || []) {
19
+ const newChild = prune(child, collectedRouteNodes);
20
+ if (newChild) {
21
+ newChildren.push(newChild);
22
+ allChildrenServerOnly = false;
23
+ }
24
+ }
25
+ if (node.createFileRouteProps?.has("server") && node.createFileRouteProps.size === 1 && allChildrenServerOnly) return null;
26
+ collectedRouteNodes.push(node);
27
+ return {
28
+ ...node,
29
+ children: newChildren
30
+ };
30
31
  }
31
- export {
32
- pruneServerOnlySubtrees
33
- };
34
- //# sourceMappingURL=pruneServerOnlySubtrees.js.map
32
+ //#endregion
33
+ export { pruneServerOnlySubtrees };
34
+
35
+ //# sourceMappingURL=pruneServerOnlySubtrees.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pruneServerOnlySubtrees.js","sources":["../../../src/start-router-plugin/pruneServerOnlySubtrees.ts"],"sourcesContent":["import { SERVER_PROP } from './constants'\nimport type {\n HandleNodeAccumulator,\n RouteNode,\n} from '@tanstack/router-generator'\n\nexport function pruneServerOnlySubtrees({\n rootRouteNode,\n acc,\n}: {\n rootRouteNode: RouteNode\n acc: HandleNodeAccumulator\n}) {\n const routeNodes: Array<RouteNode> = []\n const routeTree =\n prune({ ...rootRouteNode, children: acc.routeTree }, routeNodes)\n ?.children || []\n // remove root node from routeNodes\n routeNodes.pop()\n return {\n routeTree,\n routeNodes,\n }\n}\nfunction prune(\n node: RouteNode,\n collectedRouteNodes: Array<RouteNode>,\n): RouteNode | null {\n const newChildren: Array<RouteNode> = []\n let allChildrenServerOnly = true\n\n for (const child of node.children || []) {\n const newChild = prune(child, collectedRouteNodes)\n if (newChild) {\n newChildren.push(newChild)\n // at least one child survived pruning\n allChildrenServerOnly = false\n }\n }\n\n const allServerOnly =\n node.createFileRouteProps?.has(SERVER_PROP) &&\n node.createFileRouteProps.size === 1 &&\n allChildrenServerOnly\n // prune this subtree\n if (allServerOnly) {\n return null\n }\n collectedRouteNodes.push(node)\n return { ...node, children: newChildren }\n}\n"],"names":[],"mappings":";AAMO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AACF,GAGG;AACD,QAAM,aAA+B,CAAA;AACrC,QAAM,YACJ,MAAM,EAAE,GAAG,eAAe,UAAU,IAAI,UAAA,GAAa,UAAU,GAC3D,YAAY,CAAA;AAElB,aAAW,IAAA;AACX,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EAAA;AAEJ;AACA,SAAS,MACP,MACA,qBACkB;AAClB,QAAM,cAAgC,CAAA;AACtC,MAAI,wBAAwB;AAE5B,aAAW,SAAS,KAAK,YAAY,CAAA,GAAI;AACvC,UAAM,WAAW,MAAM,OAAO,mBAAmB;AACjD,QAAI,UAAU;AACZ,kBAAY,KAAK,QAAQ;AAEzB,8BAAwB;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,gBACJ,KAAK,sBAAsB,IAAI,WAAW,KAC1C,KAAK,qBAAqB,SAAS,KACnC;AAEF,MAAI,eAAe;AACjB,WAAO;AAAA,EACT;AACA,sBAAoB,KAAK,IAAI;AAC7B,SAAO,EAAE,GAAG,MAAM,UAAU,YAAA;AAC9B;"}
1
+ {"version":3,"file":"pruneServerOnlySubtrees.js","names":[],"sources":["../../../src/start-router-plugin/pruneServerOnlySubtrees.ts"],"sourcesContent":["import { SERVER_PROP } from './constants'\nimport type {\n HandleNodeAccumulator,\n RouteNode,\n} from '@tanstack/router-generator'\n\nexport function pruneServerOnlySubtrees({\n rootRouteNode,\n acc,\n}: {\n rootRouteNode: RouteNode\n acc: HandleNodeAccumulator\n}) {\n const routeNodes: Array<RouteNode> = []\n const routeTree =\n prune({ ...rootRouteNode, children: acc.routeTree }, routeNodes)\n ?.children || []\n // remove root node from routeNodes\n routeNodes.pop()\n return {\n routeTree,\n routeNodes,\n }\n}\nfunction prune(\n node: RouteNode,\n collectedRouteNodes: Array<RouteNode>,\n): RouteNode | null {\n const newChildren: Array<RouteNode> = []\n let allChildrenServerOnly = true\n\n for (const child of node.children || []) {\n const newChild = prune(child, collectedRouteNodes)\n if (newChild) {\n newChildren.push(newChild)\n // at least one child survived pruning\n allChildrenServerOnly = false\n }\n }\n\n const allServerOnly =\n node.createFileRouteProps?.has(SERVER_PROP) &&\n node.createFileRouteProps.size === 1 &&\n allChildrenServerOnly\n // prune this subtree\n if (allServerOnly) {\n return null\n }\n collectedRouteNodes.push(node)\n return { ...node, children: newChildren }\n}\n"],"mappings":";;AAMA,SAAgB,wBAAwB,EACtC,eACA,OAIC;CACD,MAAM,aAA+B,EAAE;CACvC,MAAM,YACJ,MAAM;EAAE,GAAG;EAAe,UAAU,IAAI;EAAW,EAAE,WAAW,EAC5D,YAAY,EAAE;AAEpB,YAAW,KAAK;AAChB,QAAO;EACL;EACA;EACD;;AAEH,SAAS,MACP,MACA,qBACkB;CAClB,MAAM,cAAgC,EAAE;CACxC,IAAI,wBAAwB;AAE5B,MAAK,MAAM,SAAS,KAAK,YAAY,EAAE,EAAE;EACvC,MAAM,WAAW,MAAM,OAAO,oBAAoB;AAClD,MAAI,UAAU;AACZ,eAAY,KAAK,SAAS;AAE1B,2BAAwB;;;AAS5B,KAJE,KAAK,sBAAsB,IAAA,SAAgB,IAC3C,KAAK,qBAAqB,SAAS,KACnC,sBAGA,QAAO;AAET,qBAAoB,KAAK,KAAK;AAC9B,QAAO;EAAE,GAAG;EAAM,UAAU;EAAa"}
package/dist/esm/utils.js CHANGED
@@ -1,18 +1,18 @@
1
+ //#region src/utils.ts
1
2
  function resolveViteId(id) {
2
- return `\0${id}`;
3
+ return `\0${id}`;
3
4
  }
4
5
  function createLogger(prefix) {
5
- const label = `[${prefix}]`;
6
- return {
7
- log: (...args) => console.log(label, ...args),
8
- debug: (...args) => console.debug(label, ...args),
9
- info: (...args) => console.info(label, ...args),
10
- warn: (...args) => console.warn(label, ...args),
11
- error: (...args) => console.error(label, ...args)
12
- };
6
+ const label = `[${prefix}]`;
7
+ return {
8
+ log: (...args) => console.log(label, ...args),
9
+ debug: (...args) => console.debug(label, ...args),
10
+ info: (...args) => console.info(label, ...args),
11
+ warn: (...args) => console.warn(label, ...args),
12
+ error: (...args) => console.error(label, ...args)
13
+ };
13
14
  }
14
- export {
15
- createLogger,
16
- resolveViteId
17
- };
18
- //# sourceMappingURL=utils.js.map
15
+ //#endregion
16
+ export { createLogger, resolveViteId };
17
+
18
+ //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["export function resolveViteId(id: string) {\n return `\\0${id}`\n}\n\nexport function createLogger(prefix: string) {\n const label = `[${prefix}]`\n return {\n log: (...args: any) => console.log(label, ...args),\n debug: (...args: any) => console.debug(label, ...args),\n info: (...args: any) => console.info(label, ...args),\n warn: (...args: any) => console.warn(label, ...args),\n error: (...args: any) => console.error(label, ...args),\n }\n}\n"],"names":[],"mappings":"AAAO,SAAS,cAAc,IAAY;AACxC,SAAO,KAAK,EAAE;AAChB;AAEO,SAAS,aAAa,QAAgB;AAC3C,QAAM,QAAQ,IAAI,MAAM;AACxB,SAAO;AAAA,IACL,KAAK,IAAI,SAAc,QAAQ,IAAI,OAAO,GAAG,IAAI;AAAA,IACjD,OAAO,IAAI,SAAc,QAAQ,MAAM,OAAO,GAAG,IAAI;AAAA,IACrD,MAAM,IAAI,SAAc,QAAQ,KAAK,OAAO,GAAG,IAAI;AAAA,IACnD,MAAM,IAAI,SAAc,QAAQ,KAAK,OAAO,GAAG,IAAI;AAAA,IACnD,OAAO,IAAI,SAAc,QAAQ,MAAM,OAAO,GAAG,IAAI;AAAA,EAAA;AAEzD;"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../src/utils.ts"],"sourcesContent":["export function resolveViteId(id: string) {\n return `\\0${id}`\n}\n\nexport function createLogger(prefix: string) {\n const label = `[${prefix}]`\n return {\n log: (...args: any) => console.log(label, ...args),\n debug: (...args: any) => console.debug(label, ...args),\n info: (...args: any) => console.info(label, ...args),\n warn: (...args: any) => console.warn(label, ...args),\n error: (...args: any) => console.error(label, ...args),\n }\n}\n"],"mappings":";AAAA,SAAgB,cAAc,IAAY;AACxC,QAAO,KAAK;;AAGd,SAAgB,aAAa,QAAgB;CAC3C,MAAM,QAAQ,IAAI,OAAO;AACzB,QAAO;EACL,MAAM,GAAG,SAAc,QAAQ,IAAI,OAAO,GAAG,KAAK;EAClD,QAAQ,GAAG,SAAc,QAAQ,MAAM,OAAO,GAAG,KAAK;EACtD,OAAO,GAAG,SAAc,QAAQ,KAAK,OAAO,GAAG,KAAK;EACpD,OAAO,GAAG,SAAc,QAAQ,KAAK,OAAO,GAAG,KAAK;EACpD,QAAQ,GAAG,SAAc,QAAQ,MAAM,OAAO,GAAG,KAAK;EACvD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/start-plugin-core",
3
- "version": "1.166.12",
3
+ "version": "1.166.14",
4
4
  "description": "Modern and scalable routing for React applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -60,12 +60,12 @@
60
60
  "vitefu": "^1.1.1",
61
61
  "xmlbuilder2": "^4.0.3",
62
62
  "zod": "^3.24.2",
63
- "@tanstack/router-core": "1.167.1",
64
- "@tanstack/router-generator": "1.166.9",
65
- "@tanstack/router-plugin": "1.166.10",
66
- "@tanstack/router-utils": "1.161.5",
67
- "@tanstack/start-client-core": "1.166.9",
68
- "@tanstack/start-server-core": "1.166.9"
63
+ "@tanstack/router-core": "1.167.3",
64
+ "@tanstack/router-generator": "1.166.11",
65
+ "@tanstack/router-plugin": "1.166.12",
66
+ "@tanstack/router-utils": "1.161.6",
67
+ "@tanstack/start-client-core": "1.166.11",
68
+ "@tanstack/start-server-core": "1.166.11"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@types/babel__code-frame": "^7.0.6",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}