@tanstack/start-plugin-core 1.121.0-alpha.27 → 1.121.0-alpha.28

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 (157) hide show
  1. package/dist/esm/{nitro-plugin/build-sitemap.d.ts → build-sitemap.d.ts} +3 -3
  2. package/dist/esm/{nitro-plugin/build-sitemap.js → build-sitemap.js} +19 -24
  3. package/dist/esm/build-sitemap.js.map +1 -0
  4. package/dist/esm/compilers.d.ts +1 -1
  5. package/dist/esm/compilers.js +6 -9
  6. package/dist/esm/compilers.js.map +1 -1
  7. package/dist/esm/constants.d.ts +6 -2
  8. package/dist/esm/constants.js +7 -10
  9. package/dist/esm/constants.js.map +1 -1
  10. package/dist/esm/debug.js.map +1 -1
  11. package/dist/esm/dev-server-plugin/extract-html-scripts.js.map +1 -1
  12. package/dist/esm/dev-server-plugin/plugin.d.ts +5 -5
  13. package/dist/esm/dev-server-plugin/plugin.js +118 -95
  14. package/dist/esm/dev-server-plugin/plugin.js.map +1 -1
  15. package/dist/esm/index.d.ts +1 -1
  16. package/dist/esm/index.js +0 -4
  17. package/dist/esm/index.js.map +1 -1
  18. package/dist/esm/load-env-plugin/plugin.d.ts +2 -3
  19. package/dist/esm/load-env-plugin/plugin.js +5 -8
  20. package/dist/esm/load-env-plugin/plugin.js.map +1 -1
  21. package/dist/esm/output-directory.d.ts +3 -0
  22. package/dist/esm/output-directory.js +14 -0
  23. package/dist/esm/output-directory.js.map +1 -0
  24. package/dist/esm/plugin.d.ts +11 -286
  25. package/dist/esm/plugin.js +171 -94
  26. package/dist/esm/plugin.js.map +1 -1
  27. package/dist/esm/post-server-build.d.ts +7 -0
  28. package/dist/esm/post-server-build.js +55 -0
  29. package/dist/esm/post-server-build.js.map +1 -0
  30. package/dist/esm/prerender.d.ts +11 -0
  31. package/dist/esm/{nitro-plugin/prerender.js → prerender.js} +88 -71
  32. package/dist/esm/prerender.js.map +1 -0
  33. package/dist/esm/{nitro-plugin/queue.js → queue.js} +7 -10
  34. package/dist/esm/queue.js.map +1 -0
  35. package/dist/esm/resolve-entries.d.ts +8 -0
  36. package/dist/esm/resolve-entries.js +37 -0
  37. package/dist/esm/resolve-entries.js.map +1 -0
  38. package/dist/esm/schema.d.ts +1334 -6585
  39. package/dist/esm/schema.js +54 -86
  40. package/dist/esm/schema.js.map +1 -1
  41. package/dist/esm/start-compiler-plugin.js +7 -3
  42. package/dist/esm/start-compiler-plugin.js.map +1 -1
  43. package/dist/esm/start-manifest-plugin/plugin.d.ts +6 -3
  44. package/dist/esm/start-manifest-plugin/plugin.js +95 -100
  45. package/dist/esm/start-manifest-plugin/plugin.js.map +1 -1
  46. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js +4 -5
  47. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js.map +1 -1
  48. package/dist/esm/start-router-plugin/generator-plugins/server-routes-plugin.js +2 -4
  49. package/dist/esm/start-router-plugin/generator-plugins/server-routes-plugin.js.map +1 -1
  50. package/dist/esm/start-router-plugin/plugin.d.ts +1 -1
  51. package/dist/esm/start-router-plugin/plugin.js +26 -2
  52. package/dist/esm/start-router-plugin/plugin.js.map +1 -1
  53. package/dist/esm/start-router-plugin/route-tree-client-plugin.js +2 -1
  54. package/dist/esm/start-router-plugin/route-tree-client-plugin.js.map +1 -1
  55. package/dist/esm/start-router-plugin/virtual-route-tree-plugin.d.ts +0 -1
  56. package/dist/esm/start-router-plugin/virtual-route-tree-plugin.js +3 -4
  57. package/dist/esm/start-router-plugin/virtual-route-tree-plugin.js.map +1 -1
  58. package/dist/esm/utils.js.map +1 -1
  59. package/package.json +14 -18
  60. package/src/{nitro-plugin/build-sitemap.ts → build-sitemap.ts} +8 -8
  61. package/src/compilers.ts +1 -1
  62. package/src/constants.ts +12 -9
  63. package/src/dev-server-plugin/plugin.ts +146 -124
  64. package/src/index.ts +1 -5
  65. package/src/load-env-plugin/plugin.ts +6 -11
  66. package/src/output-directory.ts +18 -0
  67. package/src/plugin.ts +227 -119
  68. package/src/post-server-build.ts +73 -0
  69. package/src/{nitro-plugin/prerender.ts → prerender.ts} +95 -82
  70. package/src/resolve-entries.ts +52 -0
  71. package/src/schema.ts +89 -121
  72. package/src/start-compiler-plugin.ts +4 -0
  73. package/src/start-manifest-plugin/plugin.ts +121 -139
  74. package/src/start-router-plugin/generator-plugins/routes-manifest-plugin.ts +2 -2
  75. package/src/start-router-plugin/plugin.ts +26 -2
  76. package/src/start-router-plugin/route-tree-client-plugin.ts +2 -1
  77. package/src/start-router-plugin/virtual-route-tree-plugin.ts +3 -4
  78. package/dist/cjs/compilers.cjs +0 -416
  79. package/dist/cjs/compilers.cjs.map +0 -1
  80. package/dist/cjs/compilers.d.cts +0 -21
  81. package/dist/cjs/constants.cjs +0 -20
  82. package/dist/cjs/constants.cjs.map +0 -1
  83. package/dist/cjs/constants.d.cts +0 -6
  84. package/dist/cjs/debug.cjs +0 -5
  85. package/dist/cjs/debug.cjs.map +0 -1
  86. package/dist/cjs/debug.d.cts +0 -1
  87. package/dist/cjs/dev-server-plugin/extract-html-scripts.cjs +0 -35
  88. package/dist/cjs/dev-server-plugin/extract-html-scripts.cjs.map +0 -1
  89. package/dist/cjs/dev-server-plugin/extract-html-scripts.d.cts +0 -4
  90. package/dist/cjs/dev-server-plugin/plugin.cjs +0 -136
  91. package/dist/cjs/dev-server-plugin/plugin.cjs.map +0 -1
  92. package/dist/cjs/dev-server-plugin/plugin.d.cts +0 -5
  93. package/dist/cjs/index.cjs +0 -11
  94. package/dist/cjs/index.cjs.map +0 -1
  95. package/dist/cjs/index.d.cts +0 -3
  96. package/dist/cjs/load-env-plugin/plugin.cjs +0 -34
  97. package/dist/cjs/load-env-plugin/plugin.cjs.map +0 -1
  98. package/dist/cjs/load-env-plugin/plugin.d.cts +0 -3
  99. package/dist/cjs/nitro-plugin/build-sitemap.cjs +0 -138
  100. package/dist/cjs/nitro-plugin/build-sitemap.cjs.map +0 -1
  101. package/dist/cjs/nitro-plugin/build-sitemap.d.cts +0 -31
  102. package/dist/cjs/nitro-plugin/plugin.cjs +0 -181
  103. package/dist/cjs/nitro-plugin/plugin.cjs.map +0 -1
  104. package/dist/cjs/nitro-plugin/plugin.d.cts +0 -3
  105. package/dist/cjs/nitro-plugin/prerender.cjs +0 -173
  106. package/dist/cjs/nitro-plugin/prerender.cjs.map +0 -1
  107. package/dist/cjs/nitro-plugin/prerender.d.cts +0 -8
  108. package/dist/cjs/nitro-plugin/queue.cjs +0 -131
  109. package/dist/cjs/nitro-plugin/queue.cjs.map +0 -1
  110. package/dist/cjs/nitro-plugin/queue.d.cts +0 -32
  111. package/dist/cjs/plugin.cjs +0 -197
  112. package/dist/cjs/plugin.cjs.map +0 -1
  113. package/dist/cjs/plugin.d.cts +0 -291
  114. package/dist/cjs/resolve-virtual-entries-plugin/plugin.cjs +0 -66
  115. package/dist/cjs/resolve-virtual-entries-plugin/plugin.cjs.map +0 -1
  116. package/dist/cjs/resolve-virtual-entries-plugin/plugin.d.cts +0 -3
  117. package/dist/cjs/schema.cjs +0 -157
  118. package/dist/cjs/schema.cjs.map +0 -1
  119. package/dist/cjs/schema.d.cts +0 -8779
  120. package/dist/cjs/start-compiler-plugin.cjs +0 -74
  121. package/dist/cjs/start-compiler-plugin.cjs.map +0 -1
  122. package/dist/cjs/start-compiler-plugin.d.cts +0 -13
  123. package/dist/cjs/start-manifest-plugin/plugin.cjs +0 -182
  124. package/dist/cjs/start-manifest-plugin/plugin.cjs.map +0 -1
  125. package/dist/cjs/start-manifest-plugin/plugin.d.cts +0 -3
  126. package/dist/cjs/start-router-plugin/generator-plugins/routes-manifest-plugin.cjs +0 -39
  127. package/dist/cjs/start-router-plugin/generator-plugins/routes-manifest-plugin.cjs.map +0 -1
  128. package/dist/cjs/start-router-plugin/generator-plugins/routes-manifest-plugin.d.cts +0 -6
  129. package/dist/cjs/start-router-plugin/generator-plugins/server-routes-plugin.cjs +0 -121
  130. package/dist/cjs/start-router-plugin/generator-plugins/server-routes-plugin.cjs.map +0 -1
  131. package/dist/cjs/start-router-plugin/generator-plugins/server-routes-plugin.d.cts +0 -2
  132. package/dist/cjs/start-router-plugin/plugin.cjs +0 -21
  133. package/dist/cjs/start-router-plugin/plugin.cjs.map +0 -1
  134. package/dist/cjs/start-router-plugin/plugin.d.cts +0 -3
  135. package/dist/cjs/start-router-plugin/route-tree-client-plugin.cjs +0 -72
  136. package/dist/cjs/start-router-plugin/route-tree-client-plugin.cjs.map +0 -1
  137. package/dist/cjs/start-router-plugin/route-tree-client-plugin.d.cts +0 -6
  138. package/dist/cjs/start-router-plugin/virtual-route-tree-plugin.cjs +0 -30
  139. package/dist/cjs/start-router-plugin/virtual-route-tree-plugin.cjs.map +0 -1
  140. package/dist/cjs/start-router-plugin/virtual-route-tree-plugin.d.cts +0 -4
  141. package/dist/cjs/utils.cjs +0 -18
  142. package/dist/cjs/utils.cjs.map +0 -1
  143. package/dist/cjs/utils.d.cts +0 -8
  144. package/dist/esm/nitro-plugin/build-sitemap.js.map +0 -1
  145. package/dist/esm/nitro-plugin/plugin.d.ts +0 -3
  146. package/dist/esm/nitro-plugin/plugin.js +0 -181
  147. package/dist/esm/nitro-plugin/plugin.js.map +0 -1
  148. package/dist/esm/nitro-plugin/prerender.d.ts +0 -8
  149. package/dist/esm/nitro-plugin/prerender.js.map +0 -1
  150. package/dist/esm/nitro-plugin/queue.js.map +0 -1
  151. package/dist/esm/resolve-virtual-entries-plugin/plugin.d.ts +0 -3
  152. package/dist/esm/resolve-virtual-entries-plugin/plugin.js +0 -49
  153. package/dist/esm/resolve-virtual-entries-plugin/plugin.js.map +0 -1
  154. package/src/nitro-plugin/plugin.ts +0 -244
  155. package/src/resolve-virtual-entries-plugin/plugin.ts +0 -63
  156. /package/dist/esm/{nitro-plugin/queue.d.ts → queue.d.ts} +0 -0
  157. /package/src/{nitro-plugin/queue.ts → queue.ts} +0 -0
@@ -1,94 +1,28 @@
1
1
  import path from "node:path";
2
- import { existsSync } from "node:fs";
3
2
  import { z } from "zod";
4
- import { configSchema, getConfig } from "@tanstack/router-generator";
3
+ import { getConfig, configSchema } from "@tanstack/router-generator";
5
4
  const tsrConfig = configSchema.omit({ autoCodeSplitting: true }).partial().extend({
5
+ // this is relative to vite root
6
+ // TODO why is this nested under tsr?
6
7
  srcDirectory: z.string().optional().default("src")
7
8
  });
8
- function createTanStackConfig(frameworkPlugin) {
9
- const schema = createTanStackStartOptionsSchema(frameworkPlugin);
9
+ function parseStartConfig(opts) {
10
+ const options = tanstackStartOptionsSchema.parse(opts);
11
+ const srcDirectory = options.tsr.srcDirectory;
12
+ const routesDirectory = options.tsr.routesDirectory ?? path.join(srcDirectory, "routes");
13
+ const generatedRouteTree = options.tsr.generatedRouteTree ?? path.join(srcDirectory, "routeTree.gen.ts");
10
14
  return {
11
- schema,
12
- parse: (opts) => {
13
- const options = schema.parse(opts);
14
- const srcDirectory = options.tsr.srcDirectory;
15
- const routesDirectory = options.tsr.routesDirectory ?? path.join(srcDirectory, "routes");
16
- const generatedRouteTree = options.tsr.generatedRouteTree ?? path.join(srcDirectory, "routeTree.gen.ts");
17
- const clientEntryPath = (() => {
18
- if (options.client.entry) {
19
- return path.join(srcDirectory, options.client.entry);
20
- }
21
- if (existsSync(path.join(srcDirectory, "client.tsx"))) {
22
- return path.join(srcDirectory, "client.tsx");
23
- }
24
- return "/~start/default-client-entry";
25
- })();
26
- const serverEntryPath = (() => {
27
- if (options.server.entry) {
28
- return path.join(srcDirectory, options.server.entry);
29
- }
30
- if (existsSync(path.join(srcDirectory, "server.tsx"))) {
31
- return path.join(srcDirectory, "server.tsx");
32
- }
33
- if (existsSync(path.join(srcDirectory, "server.ts"))) {
34
- return path.join(srcDirectory, "server.ts");
35
- }
36
- if (existsSync(path.join(srcDirectory, "server.js"))) {
37
- return path.join(srcDirectory, "server.js");
38
- }
39
- return "/~start/default-server-entry";
40
- })();
41
- return {
42
- ...options,
43
- tsr: {
44
- ...options.tsr,
45
- ...getConfig({
46
- ...options.tsr,
47
- routesDirectory,
48
- generatedRouteTree
49
- })
50
- },
51
- clientEntryPath,
52
- serverEntryPath
53
- };
15
+ ...options,
16
+ tsr: {
17
+ ...options.tsr,
18
+ ...getConfig({
19
+ ...options.tsr,
20
+ routesDirectory,
21
+ generatedRouteTree
22
+ })
54
23
  }
55
24
  };
56
25
  }
57
- function createTanStackStartOptionsSchema(frameworkPlugin = {}) {
58
- return z.object({
59
- root: z.string().optional().default(process.cwd()),
60
- target: z.custom().optional(),
61
- ...frameworkPlugin,
62
- tsr: tsrConfig.optional().default({}),
63
- client: z.object({
64
- entry: z.string().optional(),
65
- base: z.string().optional().default("/_build")
66
- }).optional().default({}),
67
- server: z.object({
68
- entry: z.string().optional()
69
- }).optional().default({}),
70
- serverFns: z.object({
71
- base: z.string().optional().default("/_serverFn")
72
- }).optional().default({}),
73
- public: z.object({
74
- dir: z.string().optional().default("public"),
75
- base: z.string().optional().default("/")
76
- }).optional().default({}),
77
- pages: z.array(pageSchema).optional().default([]),
78
- sitemap: z.object({
79
- enabled: z.boolean().optional().default(true),
80
- host: z.string().optional(),
81
- outputPath: z.string().optional().default("sitemap.xml")
82
- }).optional(),
83
- prerender: z.object({
84
- enabled: z.boolean().optional(),
85
- concurrency: z.number().optional(),
86
- filter: z.function().args(pageSchema).returns(z.any()).optional(),
87
- failOnError: z.boolean().optional()
88
- }).and(pagePrerenderOptionsSchema.optional()).optional(),
89
- spa: spaSchema.optional()
90
- }).optional().default({});
91
- }
92
26
  const pageSitemapOptionsSchema = z.object({
93
27
  exclude: z.boolean().optional(),
94
28
  priority: z.number().min(0).max(1).optional(),
@@ -133,7 +67,8 @@ const pagePrerenderOptionsSchema = z.object({
133
67
  page: pageBaseSchema,
134
68
  html: z.string()
135
69
  })
136
- ).returns(z.any()).optional()
70
+ ).returns(z.any()).optional(),
71
+ headers: z.record(z.string(), z.string()).optional()
137
72
  });
138
73
  const spaSchema = z.object({
139
74
  enabled: z.boolean().optional().default(true),
@@ -149,9 +84,42 @@ const spaSchema = z.object({
149
84
  const pageSchema = pageBaseSchema.extend({
150
85
  prerender: pagePrerenderOptionsSchema.optional()
151
86
  });
87
+ const tanstackStartOptionsSchema = z.object({
88
+ tsr: tsrConfig.optional().default({}),
89
+ router: z.object({
90
+ // TODO naming?
91
+ entry: z.string().optional()
92
+ }).optional().default({}),
93
+ client: z.object({
94
+ entry: z.string().optional(),
95
+ base: z.string().optional().default("/_build")
96
+ }).optional().default({}),
97
+ server: z.object({
98
+ entry: z.string().optional()
99
+ }).optional().default({}),
100
+ serverFns: z.object({
101
+ base: z.string().optional().default("/_serverFn")
102
+ }).optional().default({}),
103
+ public: z.object({
104
+ dir: z.string().optional().default("public"),
105
+ base: z.string().optional().default("/")
106
+ }).optional().default({}),
107
+ pages: z.array(pageSchema).optional().default([]),
108
+ sitemap: z.object({
109
+ enabled: z.boolean().optional().default(true),
110
+ host: z.string().optional(),
111
+ outputPath: z.string().optional().default("sitemap.xml")
112
+ }).optional(),
113
+ prerender: z.object({
114
+ enabled: z.boolean().optional(),
115
+ concurrency: z.number().optional(),
116
+ filter: z.function().args(pageSchema).returns(z.any()).optional(),
117
+ failOnError: z.boolean().optional()
118
+ }).and(pagePrerenderOptionsSchema.optional()).optional(),
119
+ spa: spaSchema.optional(),
120
+ vite: z.object({ installDevServerMiddleware: z.boolean().optional() }).optional()
121
+ }).optional().default({});
152
122
  export {
153
- createTanStackConfig,
154
- createTanStackStartOptionsSchema,
155
- pageSchema
123
+ parseStartConfig
156
124
  };
157
125
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sources":["../../src/schema.ts"],"sourcesContent":["import path from 'node:path'\nimport { existsSync } from 'node:fs'\nimport { z } from 'zod'\nimport { configSchema, getConfig } from '@tanstack/router-generator'\nimport type { NitroConfig } from 'nitropack'\n\nconst tsrConfig = configSchema\n .omit({ autoCodeSplitting: true })\n .partial()\n .extend({\n srcDirectory: z.string().optional().default('src'),\n })\n\nexport function createTanStackConfig<\n TFrameworkPlugin extends Record<string, unknown>,\n>(frameworkPlugin?: TFrameworkPlugin) {\n const schema = createTanStackStartOptionsSchema(frameworkPlugin)\n\n return {\n schema,\n parse: (opts?: z.input<typeof schema>) => {\n const options = schema.parse(opts)\n\n const srcDirectory = options.tsr.srcDirectory\n\n const routesDirectory =\n options.tsr.routesDirectory ?? path.join(srcDirectory, 'routes')\n\n const generatedRouteTree =\n options.tsr.generatedRouteTree ??\n path.join(srcDirectory, 'routeTree.gen.ts')\n\n const clientEntryPath = (() => {\n if (options.client.entry) {\n return path.join(srcDirectory, options.client.entry)\n }\n\n if (existsSync(path.join(srcDirectory, 'client.tsx'))) {\n return path.join(srcDirectory, 'client.tsx')\n }\n\n return '/~start/default-client-entry'\n })()\n\n const serverEntryPath = (() => {\n if (options.server.entry) {\n return path.join(srcDirectory, options.server.entry)\n }\n\n if (existsSync(path.join(srcDirectory, 'server.tsx'))) {\n return path.join(srcDirectory, 'server.tsx')\n }\n\n if (existsSync(path.join(srcDirectory, 'server.ts'))) {\n return path.join(srcDirectory, 'server.ts')\n }\n\n if (existsSync(path.join(srcDirectory, 'server.js'))) {\n return path.join(srcDirectory, 'server.js')\n }\n\n return '/~start/default-server-entry'\n })()\n\n return {\n ...options,\n tsr: {\n ...options.tsr,\n ...getConfig({\n ...options.tsr,\n routesDirectory,\n generatedRouteTree,\n }),\n },\n clientEntryPath,\n serverEntryPath,\n }\n },\n }\n}\n\nexport function createTanStackStartOptionsSchema(\n frameworkPlugin: Record<string, unknown> = {},\n) {\n return z\n .object({\n root: z.string().optional().default(process.cwd()),\n target: z.custom<NitroConfig['preset']>().optional(),\n ...frameworkPlugin,\n tsr: tsrConfig.optional().default({}),\n client: z\n .object({\n entry: z.string().optional(),\n base: z.string().optional().default('/_build'),\n })\n .optional()\n .default({}),\n server: z\n .object({\n entry: z.string().optional(),\n })\n .optional()\n .default({}),\n serverFns: z\n .object({\n base: z.string().optional().default('/_serverFn'),\n })\n .optional()\n .default({}),\n public: z\n .object({\n dir: z.string().optional().default('public'),\n base: z.string().optional().default('/'),\n })\n .optional()\n .default({}),\n pages: z.array(pageSchema).optional().default([]),\n sitemap: z\n .object({\n enabled: z.boolean().optional().default(true),\n host: z.string().optional(),\n outputPath: z.string().optional().default('sitemap.xml'),\n })\n .optional(),\n prerender: z\n .object({\n enabled: z.boolean().optional(),\n concurrency: z.number().optional(),\n filter: z.function().args(pageSchema).returns(z.any()).optional(),\n failOnError: z.boolean().optional(),\n })\n .and(pagePrerenderOptionsSchema.optional())\n .optional(),\n spa: spaSchema.optional(),\n })\n .optional()\n .default({})\n}\n\nconst pageSitemapOptionsSchema = z.object({\n exclude: z.boolean().optional(),\n priority: z.number().min(0).max(1).optional(),\n changefreq: z\n .enum(['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never'])\n .optional(),\n lastmod: z.union([z.string(), z.date()]).optional(),\n alternateRefs: z\n .array(\n z.object({\n href: z.string(),\n hreflang: z.string(),\n }),\n )\n .optional(),\n images: z\n .array(\n z.object({\n loc: z.string(),\n caption: z.string().optional(),\n title: z.string().optional(),\n }),\n )\n .optional(),\n news: z\n .object({\n publication: z.object({\n name: z.string(),\n language: z.string(),\n }),\n publicationDate: z.union([z.string(), z.date()]),\n title: z.string(),\n })\n .optional(),\n})\n\nconst pageBaseSchema = z.object({\n path: z.string(),\n sitemap: pageSitemapOptionsSchema.optional(),\n fromCrawl: z.boolean().optional(),\n})\n\nconst pagePrerenderOptionsSchema = z.object({\n enabled: z.boolean().optional(),\n outputPath: z.string().optional(),\n autoSubfolderIndex: z.boolean().optional(),\n crawlLinks: z.boolean().optional(),\n retryCount: z.number().optional(),\n retryDelay: z.number().optional(),\n onSuccess: z\n .function()\n .args(\n z.object({\n page: pageBaseSchema,\n html: z.string(),\n }),\n )\n .returns(z.any())\n .optional(),\n})\n\nconst spaSchema = z.object({\n enabled: z.boolean().optional().default(true),\n maskPath: z.string().optional().default('/'),\n prerender: pagePrerenderOptionsSchema\n .optional()\n .default({})\n .transform((opts) => ({\n outputPath: opts.outputPath ?? '/_shell',\n crawlLinks: false,\n retryCount: 0,\n ...opts,\n enabled: true,\n })),\n})\n\nexport const pageSchema = pageBaseSchema.extend({\n prerender: pagePrerenderOptionsSchema.optional(),\n})\n\nexport type Page = z.infer<typeof pageSchema>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sources":["../../src/schema.ts"],"sourcesContent":["import path from 'node:path'\nimport { z } from 'zod'\nimport { configSchema, getConfig } from '@tanstack/router-generator'\n\nconst tsrConfig = configSchema\n .omit({ autoCodeSplitting: true })\n .partial()\n .extend({\n // this is relative to vite root\n // TODO why is this nested under tsr?\n srcDirectory: z.string().optional().default('src'),\n })\n\nexport function parseStartConfig(\n opts?: z.input<typeof tanstackStartOptionsSchema>,\n) {\n const options = tanstackStartOptionsSchema.parse(opts)\n\n const srcDirectory = options.tsr.srcDirectory\n\n const routesDirectory =\n options.tsr.routesDirectory ?? path.join(srcDirectory, 'routes')\n\n const generatedRouteTree =\n options.tsr.generatedRouteTree ??\n path.join(srcDirectory, 'routeTree.gen.ts')\n\n return {\n ...options,\n tsr: {\n ...options.tsr,\n ...getConfig({\n ...options.tsr,\n routesDirectory,\n generatedRouteTree,\n }),\n },\n }\n}\n\nconst pageSitemapOptionsSchema = z.object({\n exclude: z.boolean().optional(),\n priority: z.number().min(0).max(1).optional(),\n changefreq: z\n .enum(['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never'])\n .optional(),\n lastmod: z.union([z.string(), z.date()]).optional(),\n alternateRefs: z\n .array(\n z.object({\n href: z.string(),\n hreflang: z.string(),\n }),\n )\n .optional(),\n images: z\n .array(\n z.object({\n loc: z.string(),\n caption: z.string().optional(),\n title: z.string().optional(),\n }),\n )\n .optional(),\n news: z\n .object({\n publication: z.object({\n name: z.string(),\n language: z.string(),\n }),\n publicationDate: z.union([z.string(), z.date()]),\n title: z.string(),\n })\n .optional(),\n})\n\nconst pageBaseSchema = z.object({\n path: z.string(),\n sitemap: pageSitemapOptionsSchema.optional(),\n fromCrawl: z.boolean().optional(),\n})\n\nconst pagePrerenderOptionsSchema = z.object({\n enabled: z.boolean().optional(),\n outputPath: z.string().optional(),\n autoSubfolderIndex: z.boolean().optional(),\n crawlLinks: z.boolean().optional(),\n retryCount: z.number().optional(),\n retryDelay: z.number().optional(),\n onSuccess: z\n .function()\n .args(\n z.object({\n page: pageBaseSchema,\n html: z.string(),\n }),\n )\n .returns(z.any())\n .optional(),\n headers: z.record(z.string(), z.string()).optional(),\n})\n\nconst spaSchema = z.object({\n enabled: z.boolean().optional().default(true),\n maskPath: z.string().optional().default('/'),\n prerender: pagePrerenderOptionsSchema\n .optional()\n .default({})\n .transform((opts) => ({\n outputPath: opts.outputPath ?? '/_shell',\n crawlLinks: false,\n retryCount: 0,\n ...opts,\n enabled: true,\n })),\n})\n\nconst pageSchema = pageBaseSchema.extend({\n prerender: pagePrerenderOptionsSchema.optional(),\n})\n\nconst tanstackStartOptionsSchema = z\n .object({\n tsr: tsrConfig.optional().default({}),\n router: z\n .object({\n // TODO naming?\n entry: z.string().optional(),\n })\n .optional()\n .default({}),\n client: z\n .object({\n entry: z.string().optional(),\n base: z.string().optional().default('/_build'),\n })\n .optional()\n .default({}),\n server: z\n .object({\n entry: z.string().optional(),\n })\n .optional()\n .default({}),\n serverFns: z\n .object({\n base: z.string().optional().default('/_serverFn'),\n })\n .optional()\n .default({}),\n public: z\n .object({\n dir: z.string().optional().default('public'),\n base: z.string().optional().default('/'),\n })\n .optional()\n .default({}),\n pages: z.array(pageSchema).optional().default([]),\n sitemap: z\n .object({\n enabled: z.boolean().optional().default(true),\n host: z.string().optional(),\n outputPath: z.string().optional().default('sitemap.xml'),\n })\n .optional(),\n prerender: z\n .object({\n enabled: z.boolean().optional(),\n concurrency: z.number().optional(),\n filter: z.function().args(pageSchema).returns(z.any()).optional(),\n failOnError: z.boolean().optional(),\n })\n .and(pagePrerenderOptionsSchema.optional())\n .optional(),\n spa: spaSchema.optional(),\n vite: z\n .object({ installDevServerMiddleware: z.boolean().optional() })\n .optional(),\n })\n .optional()\n .default({})\n\nexport type Page = z.infer<typeof pageSchema>\n\nexport type TanStackStartInputConfig = z.input<\n typeof tanstackStartOptionsSchema\n>\nexport type TanStackStartOutputConfig = ReturnType<typeof parseStartConfig>\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { pathToFileURL, fileURLToPath } from "node:url";
2
2
  import { logDiff } from "@tanstack/router-utils";
3
+ import { VIRTUAL_MODULES } from "@tanstack/start-server-core";
3
4
  import { compileStartOutputFactory } from "./compilers.js";
4
5
  const debug = process.env.TSR_VITE_DEBUG && ["true", "start-plugin"].includes(process.env.TSR_VITE_DEBUG);
5
6
  const transformFuncs = [
@@ -16,11 +17,11 @@ function startCompilerPlugin(framework, inputOpts) {
16
17
  const opts = {
17
18
  client: {
18
19
  envName: "client",
19
- ...inputOpts == null ? void 0 : inputOpts.client
20
+ ...inputOpts?.client
20
21
  },
21
22
  server: {
22
23
  envName: "server",
23
- ...inputOpts == null ? void 0 : inputOpts.server
24
+ ...inputOpts?.server
24
25
  }
25
26
  };
26
27
  return {
@@ -31,7 +32,10 @@ function startCompilerPlugin(framework, inputOpts) {
31
32
  },
32
33
  transform: {
33
34
  filter: {
34
- code: tokenRegex
35
+ code: tokenRegex,
36
+ id: {
37
+ exclude: VIRTUAL_MODULES.serverFnManifest
38
+ }
35
39
  },
36
40
  handler(code, id) {
37
41
  const env = this.environment.name === opts.client.envName ? "client" : this.environment.name === opts.server.envName ? "server" : (() => {
@@ -1 +1 @@
1
- {"version":3,"file":"start-compiler-plugin.js","sources":["../../src/start-compiler-plugin.ts"],"sourcesContent":["import { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\n\nimport { compileStartOutputFactory } from './compilers'\nimport type { Plugin } from 'vite'\nimport type { CompileStartFrameworkOptions } from './compilers'\n\nconst debug =\n process.env.TSR_VITE_DEBUG &&\n ['true', 'start-plugin'].includes(process.env.TSR_VITE_DEBUG)\n\nexport type TanStackStartViteOptions = {\n globalMiddlewareEntry: string\n}\n\nconst transformFuncs = [\n 'createServerFn',\n 'createMiddleware',\n 'serverOnly',\n 'clientOnly',\n 'createIsomorphicFn',\n 'createServerFileRoute',\n 'createServerRootRoute',\n]\n\nconst tokenRegex = new RegExp(transformFuncs.join('|'))\n\nexport function startCompilerPlugin(\n framework: CompileStartFrameworkOptions,\n inputOpts?: {\n client?: {\n envName?: string\n }\n server?: {\n envName?: string\n }\n },\n): Plugin {\n const opts = {\n client: {\n envName: 'client',\n ...inputOpts?.client,\n },\n server: {\n envName: 'server',\n ...inputOpts?.server,\n },\n }\n\n return {\n name: 'vite-plugin-tanstack-start-create-server-fn',\n enforce: 'pre',\n applyToEnvironment(env) {\n return [opts.client.envName, opts.server.envName].includes(env.name)\n },\n transform: {\n filter: {\n code: tokenRegex,\n },\n handler(code, id) {\n const env =\n this.environment.name === opts.client.envName\n ? 'client'\n : this.environment.name === opts.server.envName\n ? 'server'\n : (() => {\n throw new Error(\n `Environment ${this.environment.name} not configured`,\n )\n })()\n\n return transformCode({\n code,\n id,\n env,\n framework,\n })\n },\n },\n }\n}\n\nfunction transformCode(opts: {\n code: string\n id: string\n env: 'server' | 'client'\n framework: CompileStartFrameworkOptions\n}) {\n const { code, env, framework } = opts\n let { id } = opts\n\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n\n if (debug) console.info(`${env} Compiling Start: `, id)\n\n const compileStartOutput = compileStartOutputFactory(framework)\n const compiled = compileStartOutput({\n code,\n filename: id,\n env,\n })\n\n if (debug) {\n logDiff(code, compiled.code)\n console.log('Output:\\n', compiled.code + '\\n\\n')\n }\n\n return compiled\n}\n"],"names":[],"mappings":";;;AAOA,MAAM,QACJ,QAAQ,IAAI,kBACZ,CAAC,QAAQ,cAAc,EAAE,SAAS,QAAQ,IAAI,cAAc;AAM9D,MAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,aAAa,IAAI,OAAO,eAAe,KAAK,GAAG,CAAC;AAEtC,SAAA,oBACd,WACA,WAQQ;AACR,QAAM,OAAO;AAAA,IACX,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,GAAG,uCAAW;AAAA,IAChB;AAAA,IACA,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,GAAG,uCAAW;AAAA,IAAA;AAAA,EAElB;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,mBAAmB,KAAK;AACf,aAAA,CAAC,KAAK,OAAO,SAAS,KAAK,OAAO,OAAO,EAAE,SAAS,IAAI,IAAI;AAAA,IACrE;AAAA,IACA,WAAW;AAAA,MACT,QAAQ;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,MAAM,IAAI;AAChB,cAAM,MACJ,KAAK,YAAY,SAAS,KAAK,OAAO,UAClC,WACA,KAAK,YAAY,SAAS,KAAK,OAAO,UACpC,YACC,MAAM;AACL,gBAAM,IAAI;AAAA,YACR,eAAe,KAAK,YAAY,IAAI;AAAA,UACtC;AAAA,QAAA,GACC;AAEX,eAAO,cAAc;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc,MAKpB;AACD,QAAM,EAAE,MAAM,KAAK,UAAc,IAAA;AAC7B,MAAA,EAAE,OAAO;AAEP,QAAA,MAAM,cAAc,EAAE;AACxB,MAAA,aAAa,OAAO,GAAG;AAC3B,OAAK,cAAc,GAAG,EAAE,QAAQ,OAAO,GAAG;AAE1C,MAAI,MAAe,SAAA,KAAK,GAAG,GAAG,sBAAsB,EAAE;AAEhD,QAAA,qBAAqB,0BAA0B,SAAS;AAC9D,QAAM,WAAW,mBAAmB;AAAA,IAClC;AAAA,IACA,UAAU;AAAA,IACV;AAAA,EAAA,CACD;AAED,MAAI,OAAO;AACD,YAAA,MAAM,SAAS,IAAI;AAC3B,YAAQ,IAAI,aAAa,SAAS,OAAO,MAAM;AAAA,EAAA;AAG1C,SAAA;AACT;"}
1
+ {"version":3,"file":"start-compiler-plugin.js","sources":["../../src/start-compiler-plugin.ts"],"sourcesContent":["import { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\n\nimport { VIRTUAL_MODULES } from '@tanstack/start-server-core'\nimport { compileStartOutputFactory } from './compilers'\nimport type { Plugin } from 'vite'\nimport type { CompileStartFrameworkOptions } from './compilers'\n\nconst debug =\n process.env.TSR_VITE_DEBUG &&\n ['true', 'start-plugin'].includes(process.env.TSR_VITE_DEBUG)\n\nexport type TanStackStartViteOptions = {\n globalMiddlewareEntry: string\n}\n\nconst transformFuncs = [\n 'createServerFn',\n 'createMiddleware',\n 'serverOnly',\n 'clientOnly',\n 'createIsomorphicFn',\n 'createServerFileRoute',\n 'createServerRootRoute',\n]\n\nconst tokenRegex = new RegExp(transformFuncs.join('|'))\n\nexport function startCompilerPlugin(\n framework: CompileStartFrameworkOptions,\n inputOpts?: {\n client?: {\n envName?: string\n }\n server?: {\n envName?: string\n }\n },\n): Plugin {\n const opts = {\n client: {\n envName: 'client',\n ...inputOpts?.client,\n },\n server: {\n envName: 'server',\n ...inputOpts?.server,\n },\n }\n\n return {\n name: 'vite-plugin-tanstack-start-create-server-fn',\n enforce: 'pre',\n applyToEnvironment(env) {\n return [opts.client.envName, opts.server.envName].includes(env.name)\n },\n transform: {\n filter: {\n code: tokenRegex,\n id: {\n exclude: VIRTUAL_MODULES.serverFnManifest,\n },\n },\n handler(code, id) {\n const env =\n this.environment.name === opts.client.envName\n ? 'client'\n : this.environment.name === opts.server.envName\n ? 'server'\n : (() => {\n throw new Error(\n `Environment ${this.environment.name} not configured`,\n )\n })()\n\n return transformCode({\n code,\n id,\n env,\n framework,\n })\n },\n },\n }\n}\n\nfunction transformCode(opts: {\n code: string\n id: string\n env: 'server' | 'client'\n framework: CompileStartFrameworkOptions\n}) {\n const { code, env, framework } = opts\n let { id } = opts\n\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n\n if (debug) console.info(`${env} Compiling Start: `, id)\n\n const compileStartOutput = compileStartOutputFactory(framework)\n const compiled = compileStartOutput({\n code,\n filename: id,\n env,\n })\n\n if (debug) {\n logDiff(code, compiled.code)\n console.log('Output:\\n', compiled.code + '\\n\\n')\n }\n\n return compiled\n}\n"],"names":[],"mappings":";;;;AAQA,MAAM,QACJ,QAAQ,IAAI,kBACZ,CAAC,QAAQ,cAAc,EAAE,SAAS,QAAQ,IAAI,cAAc;AAM9D,MAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,aAAa,IAAI,OAAO,eAAe,KAAK,GAAG,CAAC;AAE/C,SAAS,oBACd,WACA,WAQQ;AACR,QAAM,OAAO;AAAA,IACX,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,GAAG,WAAW;AAAA,IAAA;AAAA,IAEhB,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,GAAG,WAAW;AAAA,IAAA;AAAA,EAChB;AAGF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,mBAAmB,KAAK;AACtB,aAAO,CAAC,KAAK,OAAO,SAAS,KAAK,OAAO,OAAO,EAAE,SAAS,IAAI,IAAI;AAAA,IACrE;AAAA,IACA,WAAW;AAAA,MACT,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,IAAI;AAAA,UACF,SAAS,gBAAgB;AAAA,QAAA;AAAA,MAC3B;AAAA,MAEF,QAAQ,MAAM,IAAI;AAChB,cAAM,MACJ,KAAK,YAAY,SAAS,KAAK,OAAO,UAClC,WACA,KAAK,YAAY,SAAS,KAAK,OAAO,UACpC,YACC,MAAM;AACL,gBAAM,IAAI;AAAA,YACR,eAAe,KAAK,YAAY,IAAI;AAAA,UAAA;AAAA,QAExC,GAAA;AAER,eAAO,cAAc;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MACH;AAAA,IAAA;AAAA,EACF;AAEJ;AAEA,SAAS,cAAc,MAKpB;AACD,QAAM,EAAE,MAAM,KAAK,UAAA,IAAc;AACjC,MAAI,EAAE,OAAO;AAEb,QAAM,MAAM,cAAc,EAAE;AAC5B,MAAI,aAAa,OAAO,GAAG;AAC3B,OAAK,cAAc,GAAG,EAAE,QAAQ,OAAO,GAAG;AAE1C,MAAI,MAAO,SAAQ,KAAK,GAAG,GAAG,sBAAsB,EAAE;AAEtD,QAAM,qBAAqB,0BAA0B,SAAS;AAC9D,QAAM,WAAW,mBAAmB;AAAA,IAClC;AAAA,IACA,UAAU;AAAA,IACV;AAAA,EAAA,CACD;AAED,MAAI,OAAO;AACT,YAAQ,MAAM,SAAS,IAAI;AAC3B,YAAQ,IAAI,aAAa,SAAS,OAAO,MAAM;AAAA,EACjD;AAEA,SAAO;AACT;"}
@@ -1,3 +1,6 @@
1
- import { PluginOption } from 'vite';
2
- import { TanStackStartOutputConfig } from '../plugin.js';
3
- export declare function startManifestPlugin(opts: TanStackStartOutputConfig): PluginOption;
1
+ import { PluginOption, Rollup } from 'vite';
2
+ import { RouterManagedTag } from '@tanstack/router-core';
3
+ export declare const getCSSRecursively: (chunk: Rollup.OutputChunk, chunksByFileName: Map<string, Rollup.OutputChunk>, basePath: string) => RouterManagedTag[];
4
+ export declare function startManifestPlugin(opts: {
5
+ getClientBundle: () => Rollup.OutputBundle;
6
+ }): PluginOption;
@@ -1,13 +1,12 @@
1
- import { readFileSync } from "node:fs";
2
- import path from "node:path";
3
1
  import { joinURL } from "ufo";
4
2
  import { rootRouteId } from "@tanstack/router-core";
5
3
  import { VIRTUAL_MODULES } from "@tanstack/start-server-core";
4
+ import { tsrSplit } from "@tanstack/router-plugin";
6
5
  import { resolveViteId } from "../utils.js";
7
- import { CLIENT_DIST_DIR } from "../constants.js";
8
- const getCSSRecursively = (file, filesByRouteFilePath, basePath) => {
6
+ import { ENTRY_POINTS } from "../constants.js";
7
+ const getCSSRecursively = (chunk, chunksByFileName, basePath) => {
9
8
  const result = [];
10
- for (const cssFile of file.css ?? []) {
9
+ for (const cssFile of chunk.viteMetadata?.importedCss ?? []) {
11
10
  result.push({
12
11
  tag: "link",
13
12
  attrs: {
@@ -17,11 +16,11 @@ const getCSSRecursively = (file, filesByRouteFilePath, basePath) => {
17
16
  }
18
17
  });
19
18
  }
20
- for (const imp of file.imports ?? []) {
21
- const importInfo = filesByRouteFilePath[imp];
22
- if (importInfo) {
19
+ for (const importedFileName of chunk.imports) {
20
+ const importedChunk = chunksByFileName.get(importedFileName);
21
+ if (importedChunk) {
23
22
  result.push(
24
- ...getCSSRecursively(importInfo, filesByRouteFilePath, basePath)
23
+ ...getCSSRecursively(importedChunk, chunksByFileName, basePath)
25
24
  );
26
25
  }
27
26
  }
@@ -29,16 +28,9 @@ const getCSSRecursively = (file, filesByRouteFilePath, basePath) => {
29
28
  };
30
29
  const resolvedModuleId = resolveViteId(VIRTUAL_MODULES.startManifest);
31
30
  function startManifestPlugin(opts) {
32
- let config;
33
31
  return {
34
32
  name: "tanstack-start:start-manifest-plugin",
35
33
  enforce: "pre",
36
- configResolved(resolvedConfig) {
37
- config = resolvedConfig;
38
- },
39
- // configEnvironment(env, envConfig) {
40
- // config = envConfig.
41
- // },
42
34
  resolveId: {
43
35
  filter: { id: new RegExp(VIRTUAL_MODULES.startManifest) },
44
36
  handler(id) {
@@ -53,105 +45,106 @@ function startManifestPlugin(opts) {
53
45
  id: new RegExp(resolvedModuleId)
54
46
  },
55
47
  handler(id) {
56
- var _a;
57
48
  if (id === resolvedModuleId) {
58
49
  if (this.environment.config.consumer !== "server") {
59
50
  return `export default {}`;
60
51
  }
61
- if (config.command === "serve") {
52
+ const APP_BASE = globalThis.TSS_APP_BASE;
53
+ if (this.environment.config.command === "serve") {
62
54
  return `export const tsrStartManifest = () => ({
63
- routes: {}
55
+ routes: {},
56
+ clientEntry: '${joinURL(APP_BASE, "@id", ENTRY_POINTS.client)}',
64
57
  })`;
65
58
  }
66
- const APP_BASE = globalThis.TSS_APP_BASE;
67
- const clientViteManifestPath = path.resolve(
68
- opts.root,
69
- CLIENT_DIST_DIR,
70
- ".vite",
71
- "manifest.json"
72
- );
73
- let viteManifest;
74
- try {
75
- viteManifest = JSON.parse(
76
- readFileSync(clientViteManifestPath, "utf-8")
77
- );
78
- } catch (err) {
79
- console.error(err);
80
- throw new Error(
81
- `Could not find the production client vite manifest at '${clientViteManifestPath}'!`
82
- );
83
- }
84
59
  const routeTreeRoutes = globalThis.TSS_ROUTES_MANIFEST.routes;
85
60
  let entryFile;
86
- const filesByRouteFilePath = Object.fromEntries(
87
- Object.entries(viteManifest).map(([k, v]) => {
88
- if (v.isEntry) {
89
- if (entryFile !== void 0) {
90
- console.error(
91
- `multiple entries detected`,
92
- entryFile.file,
93
- v.file
61
+ const clientBundle = opts.getClientBundle();
62
+ const chunksByFileName = /* @__PURE__ */ new Map();
63
+ const routeChunks = {};
64
+ for (const bundleEntry of Object.values(clientBundle)) {
65
+ if (bundleEntry.type === "chunk") {
66
+ chunksByFileName.set(bundleEntry.fileName, bundleEntry);
67
+ if (bundleEntry.isEntry) {
68
+ if (entryFile) {
69
+ throw new Error(
70
+ `multiple entries detected: ${entryFile.fileName} ${bundleEntry.fileName}`
94
71
  );
95
72
  }
96
- entryFile = v;
73
+ entryFile = bundleEntry;
97
74
  }
98
- const rPath = k.split("?")[0];
99
- return [rPath, v];
100
- }, {})
101
- );
102
- const routesDirectoryFromRoot = path.relative(
103
- opts.root,
104
- opts.tsr.routesDirectory
105
- );
106
- Object.entries(routeTreeRoutes).forEach(([routeId, v]) => {
107
- const file = filesByRouteFilePath[path.posix.join(routesDirectoryFromRoot, v.filePath)];
108
- if (file) {
109
- const preloads = (file.imports ?? []).map((d) => {
110
- const assetPath = joinURL(APP_BASE, viteManifest[d].file);
111
- return assetPath;
75
+ const routePieces = bundleEntry.moduleIds.flatMap((m) => {
76
+ const [id2, query] = m.split("?");
77
+ if (id2 === void 0) {
78
+ throw new Error("expected id to be defined");
79
+ }
80
+ if (query === void 0) {
81
+ return [];
82
+ }
83
+ const searchParams = new URLSearchParams(query);
84
+ const split = searchParams.get(tsrSplit);
85
+ if (split !== null) {
86
+ return {
87
+ id: id2,
88
+ split
89
+ };
90
+ }
91
+ return [];
112
92
  });
113
- if (file.file) {
114
- preloads.unshift(path.join(APP_BASE, file.file));
93
+ if (routePieces.length > 0) {
94
+ routePieces.forEach((r) => {
95
+ let array = routeChunks[r.id];
96
+ if (array === void 0) {
97
+ array = [];
98
+ routeChunks[r.id] = array;
99
+ }
100
+ array.push(bundleEntry);
101
+ });
115
102
  }
116
- const cssAssetsList = getCSSRecursively(
117
- file,
118
- filesByRouteFilePath,
119
- APP_BASE
120
- );
121
- routeTreeRoutes[routeId] = {
122
- ...v,
123
- assets: [...v.assets || [], ...cssAssetsList],
124
- preloads
125
- };
103
+ }
104
+ }
105
+ Object.entries(routeTreeRoutes).forEach(([routeId, v]) => {
106
+ if (!v.filePath) {
107
+ throw new Error(`expected filePath to be set for ${routeId}`);
108
+ }
109
+ const chunks = routeChunks[v.filePath];
110
+ if (chunks) {
111
+ chunks.forEach((chunk) => {
112
+ const preloads = chunk.imports.map((d) => {
113
+ const assetPath = joinURL(APP_BASE, d);
114
+ return assetPath;
115
+ });
116
+ preloads.unshift(joinURL(APP_BASE, chunk.fileName));
117
+ const cssAssetsList = getCSSRecursively(
118
+ chunk,
119
+ chunksByFileName,
120
+ APP_BASE
121
+ );
122
+ routeTreeRoutes[routeId] = {
123
+ ...v,
124
+ assets: [...v.assets || [], ...cssAssetsList],
125
+ preloads: [...v.preloads || [], ...preloads]
126
+ };
127
+ });
126
128
  }
127
129
  });
128
- if (entryFile) {
129
- routeTreeRoutes[rootRouteId].preloads = [
130
- joinURL(APP_BASE, entryFile.file),
131
- ...((_a = entryFile.imports) == null ? void 0 : _a.map(
132
- (d) => joinURL(APP_BASE, viteManifest[d].file)
133
- )) || []
134
- ];
135
- const entryCssAssetsList = getCSSRecursively(
136
- entryFile,
137
- filesByRouteFilePath,
138
- APP_BASE
139
- );
140
- routeTreeRoutes[rootRouteId].assets = [
141
- ...routeTreeRoutes[rootRouteId].assets || [],
142
- ...entryCssAssetsList,
143
- {
144
- tag: "script",
145
- attrs: {
146
- src: joinURL(APP_BASE, entryFile.file),
147
- type: "module"
148
- }
149
- }
150
- ];
130
+ if (!entryFile) {
131
+ throw new Error("No entry file found");
151
132
  }
133
+ routeTreeRoutes[rootRouteId].preloads = [
134
+ joinURL(APP_BASE, entryFile.fileName),
135
+ ...entryFile.imports.map((d) => joinURL(APP_BASE, d))
136
+ ];
137
+ const entryCssAssetsList = getCSSRecursively(
138
+ entryFile,
139
+ chunksByFileName,
140
+ APP_BASE
141
+ );
142
+ routeTreeRoutes[rootRouteId].assets = [
143
+ ...routeTreeRoutes[rootRouteId].assets || [],
144
+ ...entryCssAssetsList
145
+ ];
152
146
  const recurseRoute = (route, seenPreloads = {}) => {
153
- var _a2;
154
- route.preloads = (_a2 = route.preloads) == null ? void 0 : _a2.filter((preload) => {
147
+ route.preloads = route.preloads?.filter((preload) => {
155
148
  if (seenPreloads[preload]) {
156
149
  return false;
157
150
  }
@@ -166,10 +159,11 @@ function startManifestPlugin(opts) {
166
159
  }
167
160
  };
168
161
  recurseRoute(routeTreeRoutes[rootRouteId]);
169
- const routesManifest = {
170
- routes: routeTreeRoutes
162
+ const startManifest = {
163
+ routes: routeTreeRoutes,
164
+ clientEntry: joinURL(APP_BASE, entryFile.fileName)
171
165
  };
172
- return `export const tsrStartManifest = () => (${JSON.stringify(routesManifest)})`;
166
+ return `export const tsrStartManifest = () => (${JSON.stringify(startManifest)})`;
173
167
  }
174
168
  return void 0;
175
169
  }
@@ -177,6 +171,7 @@ function startManifestPlugin(opts) {
177
171
  };
178
172
  }
179
173
  export {
174
+ getCSSRecursively,
180
175
  startManifestPlugin
181
176
  };
182
177
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../src/start-manifest-plugin/plugin.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { joinURL } from 'ufo'\nimport { rootRouteId } from '@tanstack/router-core'\nimport { VIRTUAL_MODULES } from '@tanstack/start-server-core'\nimport { resolveViteId } from '../utils'\nimport { CLIENT_DIST_DIR } from '../constants'\nimport type {\n PluginOption,\n ResolvedConfig,\n Manifest as ViteManifest,\n ManifestChunk as ViteManifestChunk,\n} from 'vite'\nimport type { RouterManagedTag } from '@tanstack/router-core'\nimport type { TanStackStartOutputConfig } from '../plugin'\n\nconst getCSSRecursively = (\n file: ViteManifestChunk,\n filesByRouteFilePath: ViteManifest,\n basePath: string,\n) => {\n const result: Array<RouterManagedTag> = []\n\n // Get all css imports from the file\n for (const cssFile of file.css ?? []) {\n result.push({\n tag: 'link',\n attrs: {\n rel: 'stylesheet',\n href: joinURL(basePath, cssFile),\n type: 'text/css',\n },\n })\n }\n\n // Recursively get CSS from imports\n for (const imp of file.imports ?? []) {\n const importInfo = filesByRouteFilePath[imp]\n if (importInfo) {\n result.push(\n ...getCSSRecursively(importInfo, filesByRouteFilePath, basePath),\n )\n }\n }\n\n return result\n}\n\nconst resolvedModuleId = resolveViteId(VIRTUAL_MODULES.startManifest)\nexport function startManifestPlugin(\n opts: TanStackStartOutputConfig,\n): PluginOption {\n let config: ResolvedConfig\n\n return {\n name: 'tanstack-start:start-manifest-plugin',\n enforce: 'pre',\n\n configResolved(resolvedConfig) {\n config = resolvedConfig\n },\n // configEnvironment(env, envConfig) {\n // config = envConfig.\n // },\n resolveId: {\n filter: { id: new RegExp(VIRTUAL_MODULES.startManifest) },\n handler(id) {\n if (id === VIRTUAL_MODULES.startManifest) {\n return resolvedModuleId\n }\n return undefined\n },\n },\n load: {\n filter: {\n id: new RegExp(resolvedModuleId),\n },\n handler(id) {\n if (id === resolvedModuleId) {\n if (this.environment.config.consumer !== 'server') {\n // this will ultimately fail the build if the plugin is used outside the server environment\n // TODO: do we need special handling for `serve`?\n return `export default {}`\n }\n\n // If we're in development, return a dummy manifest\n if (config.command === 'serve') {\n return `export const tsrStartManifest = () => ({\n routes: {}\n })`\n }\n\n // This is the basepath for the application\n const APP_BASE = globalThis.TSS_APP_BASE\n\n const clientViteManifestPath = path.resolve(\n opts.root,\n CLIENT_DIST_DIR,\n '.vite',\n 'manifest.json',\n )\n\n let viteManifest: ViteManifest\n try {\n viteManifest = JSON.parse(\n readFileSync(clientViteManifestPath, 'utf-8'),\n )\n } catch (err) {\n console.error(err)\n throw new Error(\n `Could not find the production client vite manifest at '${clientViteManifestPath}'!`,\n )\n }\n\n // This the manifest pulled from the generated route tree and later used by the Router.\n // i.e what's located in `src/generatedRouteTree.gen.ts`\n const routeTreeRoutes = globalThis.TSS_ROUTES_MANIFEST.routes\n\n // This is where hydration will start, from when the SSR'd page reaches the browser.\n // By default, this'd be the virtual entry of `/~start/default-client-entry.tsx`, unless a custom entry is provided.\n let entryFile: ViteManifestChunk | undefined\n\n const filesByRouteFilePath: ViteManifest = Object.fromEntries(\n Object.entries(viteManifest).map(([k, v]) => {\n if (v.isEntry) {\n if (entryFile !== undefined) {\n console.error(\n `multiple entries detected`,\n entryFile.file,\n v.file,\n )\n }\n entryFile = v\n }\n\n const rPath = k.split('?')[0]\n\n return [rPath, v]\n }, {}),\n )\n\n const routesDirectoryFromRoot = path.relative(\n opts.root,\n opts.tsr.routesDirectory,\n )\n\n // Add preloads to the routes from the vite manifest\n Object.entries(routeTreeRoutes).forEach(([routeId, v]) => {\n const file =\n filesByRouteFilePath[\n path.posix.join(routesDirectoryFromRoot, v.filePath as string)\n ]\n\n if (file) {\n // Map the relevant imports to their route paths,\n // so that it can be imported in the browser.\n const preloads = (file.imports ?? []).map((d) => {\n const assetPath = joinURL(APP_BASE, viteManifest[d]!.file)\n return assetPath\n })\n\n // Since this is the most important JS entry for the route,\n // it should be moved to the front of the preloads so that\n // it has the best chance of being loaded first.\n if (file.file) {\n preloads.unshift(path.join(APP_BASE, file.file))\n }\n\n const cssAssetsList = getCSSRecursively(\n file,\n filesByRouteFilePath,\n APP_BASE,\n )\n\n routeTreeRoutes[routeId] = {\n ...v,\n assets: [...(v.assets || []), ...cssAssetsList],\n preloads,\n }\n }\n })\n\n if (entryFile) {\n routeTreeRoutes[rootRouteId]!.preloads = [\n joinURL(APP_BASE, entryFile.file),\n ...(entryFile.imports?.map((d) =>\n joinURL(APP_BASE, viteManifest[d]!.file),\n ) || []),\n ]\n\n // Gather all the CSS files from the entry file in\n // the `css` key and add them to the root route\n const entryCssAssetsList = getCSSRecursively(\n entryFile,\n filesByRouteFilePath,\n APP_BASE,\n )\n\n routeTreeRoutes[rootRouteId]!.assets = [\n ...(routeTreeRoutes[rootRouteId]!.assets || []),\n ...entryCssAssetsList,\n {\n tag: 'script',\n attrs: {\n src: joinURL(APP_BASE, entryFile.file),\n type: 'module',\n },\n },\n ]\n }\n\n const recurseRoute = (\n route: {\n preloads?: Array<string>\n children?: Array<any>\n },\n seenPreloads = {} as Record<string, true>,\n ) => {\n route.preloads = route.preloads?.filter((preload) => {\n if (seenPreloads[preload]) {\n return false\n }\n seenPreloads[preload] = true\n return true\n })\n\n if (route.children) {\n route.children.forEach((child) => {\n const childRoute = routeTreeRoutes[child]!\n recurseRoute(childRoute, { ...seenPreloads })\n })\n }\n }\n\n // @ts-expect-error\n recurseRoute(routeTreeRoutes[rootRouteId])\n\n const routesManifest = {\n routes: routeTreeRoutes,\n }\n\n return `export const tsrStartManifest = () => (${JSON.stringify(routesManifest)})`\n }\n\n return undefined\n },\n },\n }\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../src/start-manifest-plugin/plugin.ts"],"sourcesContent":["import { joinURL } from 'ufo'\nimport { rootRouteId } from '@tanstack/router-core'\nimport { VIRTUAL_MODULES } from '@tanstack/start-server-core'\nimport { tsrSplit } from '@tanstack/router-plugin'\nimport { resolveViteId } from '../utils'\nimport { ENTRY_POINTS } from '../constants'\nimport type { PluginOption, Rollup } from 'vite'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const getCSSRecursively = (\n chunk: Rollup.OutputChunk,\n chunksByFileName: Map<string, Rollup.OutputChunk>,\n basePath: string,\n) => {\n const result: Array<RouterManagedTag> = []\n\n // Get all css imports from the file\n for (const cssFile of chunk.viteMetadata?.importedCss ?? []) {\n result.push({\n tag: 'link',\n attrs: {\n rel: 'stylesheet',\n href: joinURL(basePath, cssFile),\n type: 'text/css',\n },\n })\n }\n\n // Recursively get CSS from imports\n for (const importedFileName of chunk.imports) {\n const importedChunk = chunksByFileName.get(importedFileName)\n if (importedChunk) {\n result.push(\n ...getCSSRecursively(importedChunk, chunksByFileName, basePath),\n )\n }\n }\n\n return result\n}\n\nconst resolvedModuleId = resolveViteId(VIRTUAL_MODULES.startManifest)\nexport function startManifestPlugin(opts: {\n getClientBundle: () => Rollup.OutputBundle\n}): PluginOption {\n return {\n name: 'tanstack-start:start-manifest-plugin',\n enforce: 'pre',\n resolveId: {\n filter: { id: new RegExp(VIRTUAL_MODULES.startManifest) },\n handler(id) {\n if (id === VIRTUAL_MODULES.startManifest) {\n return resolvedModuleId\n }\n return undefined\n },\n },\n load: {\n filter: {\n id: new RegExp(resolvedModuleId),\n },\n handler(id) {\n if (id === resolvedModuleId) {\n if (this.environment.config.consumer !== 'server') {\n // this will ultimately fail the build if the plugin is used outside the server environment\n // TODO: do we need special handling for `serve`?\n return `export default {}`\n }\n\n // This is the basepath for the application\n const APP_BASE = globalThis.TSS_APP_BASE\n\n // If we're in development, return a dummy manifest\n if (this.environment.config.command === 'serve') {\n return `export const tsrStartManifest = () => ({\n routes: {},\n clientEntry: '${joinURL(APP_BASE, '@id', ENTRY_POINTS.client)}',\n })`\n }\n\n // This the manifest pulled from the generated route tree and later used by the Router.\n // i.e what's located in `src/routeTree.gen.ts`\n const routeTreeRoutes = globalThis.TSS_ROUTES_MANIFEST.routes\n\n // This is where hydration will start, from when the SSR'd page reaches the browser.\n let entryFile: Rollup.OutputChunk | undefined\n\n const clientBundle = opts.getClientBundle()\n const chunksByFileName = new Map<string, Rollup.OutputChunk>()\n\n const routeChunks: Record<\n string /** fullPath of route file **/,\n Array<Rollup.OutputChunk>\n > = {}\n for (const bundleEntry of Object.values(clientBundle)) {\n if (bundleEntry.type === 'chunk') {\n chunksByFileName.set(bundleEntry.fileName, bundleEntry)\n if (bundleEntry.isEntry) {\n if (entryFile) {\n throw new Error(\n `multiple entries detected: ${entryFile.fileName} ${bundleEntry.fileName}`,\n )\n }\n entryFile = bundleEntry\n }\n const routePieces = bundleEntry.moduleIds.flatMap((m) => {\n const [id, query] = m.split('?')\n if (id === undefined) {\n throw new Error('expected id to be defined')\n }\n if (query === undefined) {\n return []\n }\n const searchParams = new URLSearchParams(query)\n const split = searchParams.get(tsrSplit)\n\n if (split !== null) {\n return {\n id,\n split,\n }\n }\n return []\n })\n if (routePieces.length > 0) {\n routePieces.forEach((r) => {\n let array = routeChunks[r.id]\n if (array === undefined) {\n array = []\n routeChunks[r.id] = array\n }\n array.push(bundleEntry)\n })\n }\n }\n }\n\n // Add preloads to the routes from the vite manifest\n Object.entries(routeTreeRoutes).forEach(([routeId, v]) => {\n if (!v.filePath) {\n throw new Error(`expected filePath to be set for ${routeId}`)\n }\n const chunks = routeChunks[v.filePath]\n if (chunks) {\n chunks.forEach((chunk) => {\n // Map the relevant imports to their route paths,\n // so that it can be imported in the browser.\n const preloads = chunk.imports.map((d) => {\n const assetPath = joinURL(APP_BASE, d)\n return assetPath\n })\n\n // Since this is the most important JS entry for the route,\n // it should be moved to the front of the preloads so that\n // it has the best chance of being loaded first.\n preloads.unshift(joinURL(APP_BASE, chunk.fileName))\n\n const cssAssetsList = getCSSRecursively(\n chunk,\n chunksByFileName,\n APP_BASE,\n )\n\n routeTreeRoutes[routeId] = {\n ...v,\n assets: [...(v.assets || []), ...cssAssetsList],\n preloads: [...(v.preloads || []), ...preloads],\n }\n })\n }\n })\n\n if (!entryFile) {\n throw new Error('No entry file found')\n }\n routeTreeRoutes[rootRouteId]!.preloads = [\n joinURL(APP_BASE, entryFile.fileName),\n ...entryFile.imports.map((d) => joinURL(APP_BASE, d)),\n ]\n\n // Gather all the CSS files from the entry file in\n // the `css` key and add them to the root route\n const entryCssAssetsList = getCSSRecursively(\n entryFile,\n chunksByFileName,\n APP_BASE,\n )\n\n routeTreeRoutes[rootRouteId]!.assets = [\n ...(routeTreeRoutes[rootRouteId]!.assets || []),\n ...entryCssAssetsList,\n ]\n\n const recurseRoute = (\n route: {\n preloads?: Array<string>\n children?: Array<any>\n },\n seenPreloads = {} as Record<string, true>,\n ) => {\n route.preloads = route.preloads?.filter((preload) => {\n if (seenPreloads[preload]) {\n return false\n }\n seenPreloads[preload] = true\n return true\n })\n\n if (route.children) {\n route.children.forEach((child) => {\n const childRoute = routeTreeRoutes[child]!\n recurseRoute(childRoute, { ...seenPreloads })\n })\n }\n }\n\n recurseRoute(routeTreeRoutes[rootRouteId]!)\n\n const startManifest = {\n routes: routeTreeRoutes,\n clientEntry: joinURL(APP_BASE, entryFile.fileName),\n }\n\n return `export const tsrStartManifest = () => (${JSON.stringify(startManifest)})`\n }\n\n return undefined\n },\n },\n }\n}\n"],"names":["id"],"mappings":"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"}
@@ -11,19 +11,18 @@ function routesManifestPlugin() {
11
11
  }
12
12
  const routesManifest = {
13
13
  [rootRouteId]: {
14
- filePath: rootRouteNode.filePath,
14
+ filePath: rootRouteNode.fullPath,
15
15
  children: routeTree.acc.routeTree.map((d) => d.routePath)
16
16
  },
17
17
  ...Object.fromEntries(
18
18
  routeTree.acc.routeNodes.map((d) => {
19
- var _a, _b;
20
19
  const filePathId = d.routePath;
21
20
  return [
22
21
  filePathId,
23
22
  {
24
- filePath: d.filePath,
25
- parent: ((_a = d.parent) == null ? void 0 : _a.routePath) ? d.parent.routePath : void 0,
26
- children: (_b = d.children) == null ? void 0 : _b.map((childRoute) => childRoute.routePath)
23
+ filePath: d.fullPath,
24
+ parent: d.parent?.routePath ? d.parent.routePath : void 0,
25
+ children: d.children?.map((childRoute) => childRoute.routePath)
27
26
  }
28
27
  ];
29
28
  })
@@ -1 +1 @@
1
- {"version":3,"file":"routes-manifest-plugin.js","sources":["../../../../src/start-router-plugin/generator-plugins/routes-manifest-plugin.ts"],"sourcesContent":["import { rootRouteId } from '@tanstack/router-core'\n\nimport type { GeneratorPlugin } from '@tanstack/router-generator'\n\n/**\n * this plugin builds the routes manifest and stores it on globalThis\n * so that it can be accessed later (e.g. from a vite plugin)\n */\nexport function routesManifestPlugin(): GeneratorPlugin {\n return {\n name: 'routes-manifest-plugin',\n onRouteTreesChanged: ({ routeTrees, rootRouteNode }) => {\n const routeTree = routeTrees.find((tree) => tree.exportName === 'Route')\n if (!routeTree) {\n throw new Error(\n 'No route tree found with export name \"Route\". Please ensure your routes are correctly defined.',\n )\n }\n const routesManifest = {\n [rootRouteId]: {\n filePath: rootRouteNode.filePath,\n children: routeTree.acc.routeTree.map((d) => d.routePath),\n },\n ...Object.fromEntries(\n routeTree.acc.routeNodes.map((d) => {\n const filePathId = d.routePath\n\n return [\n filePathId,\n {\n filePath: d.filePath,\n parent: d.parent?.routePath ? d.parent.routePath : undefined,\n children: d.children?.map((childRoute) => childRoute.routePath),\n },\n ]\n }),\n ),\n }\n\n globalThis.TSS_ROUTES_MANIFEST = { routes: routesManifest }\n },\n }\n}\n"],"names":[],"mappings":";AAQO,SAAS,uBAAwC;AAC/C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,qBAAqB,CAAC,EAAE,YAAY,oBAAoB;AACtD,YAAM,YAAY,WAAW,KAAK,CAAC,SAAS,KAAK,eAAe,OAAO;AACvE,UAAI,CAAC,WAAW;AACd,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MAAA;AAEF,YAAM,iBAAiB;AAAA,QACrB,CAAC,WAAW,GAAG;AAAA,UACb,UAAU,cAAc;AAAA,UACxB,UAAU,UAAU,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS;AAAA,QAC1D;AAAA,QACA,GAAG,OAAO;AAAA,UACR,UAAU,IAAI,WAAW,IAAI,CAAC,MAAM;;AAClC,kBAAM,aAAa,EAAE;AAEd,mBAAA;AAAA,cACL;AAAA,cACA;AAAA,gBACE,UAAU,EAAE;AAAA,gBACZ,UAAQ,OAAE,WAAF,mBAAU,aAAY,EAAE,OAAO,YAAY;AAAA,gBACnD,WAAU,OAAE,aAAF,mBAAY,IAAI,CAAC,eAAe,WAAW;AAAA,cAAS;AAAA,YAElE;AAAA,UACD,CAAA;AAAA,QAAA;AAAA,MAEL;AAEW,iBAAA,sBAAsB,EAAE,QAAQ,eAAe;AAAA,IAAA;AAAA,EAE9D;AACF;"}
1
+ {"version":3,"file":"routes-manifest-plugin.js","sources":["../../../../src/start-router-plugin/generator-plugins/routes-manifest-plugin.ts"],"sourcesContent":["import { rootRouteId } from '@tanstack/router-core'\n\nimport type { GeneratorPlugin } from '@tanstack/router-generator'\n\n/**\n * this plugin builds the routes manifest and stores it on globalThis\n * so that it can be accessed later (e.g. from a vite plugin)\n */\nexport function routesManifestPlugin(): GeneratorPlugin {\n return {\n name: 'routes-manifest-plugin',\n onRouteTreesChanged: ({ routeTrees, rootRouteNode }) => {\n const routeTree = routeTrees.find((tree) => tree.exportName === 'Route')\n if (!routeTree) {\n throw new Error(\n 'No route tree found with export name \"Route\". Please ensure your routes are correctly defined.',\n )\n }\n const routesManifest = {\n [rootRouteId]: {\n filePath: rootRouteNode.fullPath,\n children: routeTree.acc.routeTree.map((d) => d.routePath),\n },\n ...Object.fromEntries(\n routeTree.acc.routeNodes.map((d) => {\n const filePathId = d.routePath\n\n return [\n filePathId,\n {\n filePath: d.fullPath,\n parent: d.parent?.routePath ? d.parent.routePath : undefined,\n children: d.children?.map((childRoute) => childRoute.routePath),\n },\n ]\n }),\n ),\n }\n\n globalThis.TSS_ROUTES_MANIFEST = { routes: routesManifest }\n },\n }\n}\n"],"names":[],"mappings":";AAQO,SAAS,uBAAwC;AACtD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,qBAAqB,CAAC,EAAE,YAAY,oBAAoB;AACtD,YAAM,YAAY,WAAW,KAAK,CAAC,SAAS,KAAK,eAAe,OAAO;AACvE,UAAI,CAAC,WAAW;AACd,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAAA,MAEJ;AACA,YAAM,iBAAiB;AAAA,QACrB,CAAC,WAAW,GAAG;AAAA,UACb,UAAU,cAAc;AAAA,UACxB,UAAU,UAAU,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS;AAAA,QAAA;AAAA,QAE1D,GAAG,OAAO;AAAA,UACR,UAAU,IAAI,WAAW,IAAI,CAAC,MAAM;AAClC,kBAAM,aAAa,EAAE;AAErB,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,gBACE,UAAU,EAAE;AAAA,gBACZ,QAAQ,EAAE,QAAQ,YAAY,EAAE,OAAO,YAAY;AAAA,gBACnD,UAAU,EAAE,UAAU,IAAI,CAAC,eAAe,WAAW,SAAS;AAAA,cAAA;AAAA,YAChE;AAAA,UAEJ,CAAC;AAAA,QAAA;AAAA,MACH;AAGF,iBAAW,sBAAsB,EAAE,QAAQ,eAAA;AAAA,IAC7C;AAAA,EAAA;AAEJ;"}