@tanstack/start-plugin-core 1.131.10 → 1.132.0-alpha.1

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 (145) 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.js +7 -10
  5. package/dist/esm/compilers.js.map +1 -1
  6. package/dist/esm/constants.d.ts +6 -2
  7. package/dist/esm/constants.js +7 -10
  8. package/dist/esm/constants.js.map +1 -1
  9. package/dist/esm/debug.js.map +1 -1
  10. package/dist/esm/dev-server-plugin/extract-html-scripts.js.map +1 -1
  11. package/dist/esm/dev-server-plugin/plugin.d.ts +5 -5
  12. package/dist/esm/dev-server-plugin/plugin.js +117 -79
  13. package/dist/esm/dev-server-plugin/plugin.js.map +1 -1
  14. package/dist/esm/index.d.ts +2 -1
  15. package/dist/esm/index.js +2 -4
  16. package/dist/esm/load-env-plugin/plugin.d.ts +2 -3
  17. package/dist/esm/load-env-plugin/plugin.js +5 -8
  18. package/dist/esm/load-env-plugin/plugin.js.map +1 -1
  19. package/dist/esm/output-directory.d.ts +3 -0
  20. package/dist/esm/output-directory.js +14 -0
  21. package/dist/esm/output-directory.js.map +1 -0
  22. package/dist/esm/plugin.d.ts +6 -290
  23. package/dist/esm/plugin.js +135 -76
  24. package/dist/esm/plugin.js.map +1 -1
  25. package/dist/esm/post-server-build.d.ts +7 -0
  26. package/dist/esm/post-server-build.js +55 -0
  27. package/dist/esm/post-server-build.js.map +1 -0
  28. package/dist/esm/prerender.d.ts +11 -0
  29. package/dist/esm/{nitro-plugin/prerender.js → prerender.js} +85 -73
  30. package/dist/esm/prerender.js.map +1 -0
  31. package/dist/esm/{nitro-plugin/queue.js → queue.js} +7 -10
  32. package/dist/esm/queue.js.map +1 -0
  33. package/dist/esm/resolve-entries.d.ts +8 -0
  34. package/dist/esm/resolve-entries.js +37 -0
  35. package/dist/esm/resolve-entries.js.map +1 -0
  36. package/dist/esm/schema.d.ts +1369 -6719
  37. package/dist/esm/schema.js +52 -85
  38. package/dist/esm/schema.js.map +1 -1
  39. package/dist/esm/start-compiler-plugin.js +2 -2
  40. package/dist/esm/start-compiler-plugin.js.map +1 -1
  41. package/dist/esm/start-manifest-plugin/plugin.d.ts +1 -1
  42. package/dist/esm/start-manifest-plugin/plugin.js +8 -13
  43. package/dist/esm/start-manifest-plugin/plugin.js.map +1 -1
  44. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js +2 -3
  45. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js.map +1 -1
  46. package/dist/esm/start-router-plugin/generator-plugins/server-routes-plugin.js +2 -4
  47. package/dist/esm/start-router-plugin/generator-plugins/server-routes-plugin.js.map +1 -1
  48. package/dist/esm/start-router-plugin/plugin.js.map +1 -1
  49. package/dist/esm/start-router-plugin/route-tree-client-plugin.js.map +1 -1
  50. package/dist/esm/start-router-plugin/virtual-route-tree-plugin.js.map +1 -1
  51. package/dist/esm/utils.js.map +1 -1
  52. package/package.json +13 -18
  53. package/src/{nitro-plugin/build-sitemap.ts → build-sitemap.ts} +8 -8
  54. package/src/constants.ts +12 -9
  55. package/src/dev-server-plugin/plugin.ts +140 -99
  56. package/src/global.d.ts +0 -2
  57. package/src/index.ts +3 -5
  58. package/src/load-env-plugin/plugin.ts +6 -11
  59. package/src/output-directory.ts +18 -0
  60. package/src/plugin.ts +172 -98
  61. package/src/post-server-build.ts +73 -0
  62. package/src/{nitro-plugin/prerender.ts → prerender.ts} +93 -86
  63. package/src/resolve-entries.ts +52 -0
  64. package/src/schema.ts +88 -121
  65. package/src/start-manifest-plugin/plugin.ts +8 -14
  66. package/dist/cjs/compilers.cjs +0 -416
  67. package/dist/cjs/compilers.cjs.map +0 -1
  68. package/dist/cjs/compilers.d.cts +0 -21
  69. package/dist/cjs/constants.cjs +0 -20
  70. package/dist/cjs/constants.cjs.map +0 -1
  71. package/dist/cjs/constants.d.cts +0 -6
  72. package/dist/cjs/debug.cjs +0 -5
  73. package/dist/cjs/debug.cjs.map +0 -1
  74. package/dist/cjs/debug.d.cts +0 -1
  75. package/dist/cjs/dev-server-plugin/extract-html-scripts.cjs +0 -35
  76. package/dist/cjs/dev-server-plugin/extract-html-scripts.cjs.map +0 -1
  77. package/dist/cjs/dev-server-plugin/extract-html-scripts.d.cts +0 -4
  78. package/dist/cjs/dev-server-plugin/plugin.cjs +0 -121
  79. package/dist/cjs/dev-server-plugin/plugin.cjs.map +0 -1
  80. package/dist/cjs/dev-server-plugin/plugin.d.cts +0 -5
  81. package/dist/cjs/index.cjs +0 -11
  82. package/dist/cjs/index.cjs.map +0 -1
  83. package/dist/cjs/index.d.cts +0 -3
  84. package/dist/cjs/load-env-plugin/plugin.cjs +0 -34
  85. package/dist/cjs/load-env-plugin/plugin.cjs.map +0 -1
  86. package/dist/cjs/load-env-plugin/plugin.d.cts +0 -3
  87. package/dist/cjs/nitro-plugin/build-sitemap.cjs +0 -138
  88. package/dist/cjs/nitro-plugin/build-sitemap.cjs.map +0 -1
  89. package/dist/cjs/nitro-plugin/build-sitemap.d.cts +0 -31
  90. package/dist/cjs/nitro-plugin/plugin.cjs +0 -187
  91. package/dist/cjs/nitro-plugin/plugin.cjs.map +0 -1
  92. package/dist/cjs/nitro-plugin/plugin.d.cts +0 -3
  93. package/dist/cjs/nitro-plugin/prerender.cjs +0 -178
  94. package/dist/cjs/nitro-plugin/prerender.cjs.map +0 -1
  95. package/dist/cjs/nitro-plugin/prerender.d.cts +0 -8
  96. package/dist/cjs/nitro-plugin/queue.cjs +0 -131
  97. package/dist/cjs/nitro-plugin/queue.cjs.map +0 -1
  98. package/dist/cjs/nitro-plugin/queue.d.cts +0 -32
  99. package/dist/cjs/plugin.cjs +0 -227
  100. package/dist/cjs/plugin.cjs.map +0 -1
  101. package/dist/cjs/plugin.d.cts +0 -300
  102. package/dist/cjs/resolve-virtual-entries-plugin/plugin.cjs +0 -80
  103. package/dist/cjs/resolve-virtual-entries-plugin/plugin.cjs.map +0 -1
  104. package/dist/cjs/resolve-virtual-entries-plugin/plugin.d.cts +0 -3
  105. package/dist/cjs/schema.cjs +0 -158
  106. package/dist/cjs/schema.cjs.map +0 -1
  107. package/dist/cjs/schema.d.cts +0 -8878
  108. package/dist/cjs/start-compiler-plugin.cjs +0 -78
  109. package/dist/cjs/start-compiler-plugin.cjs.map +0 -1
  110. package/dist/cjs/start-compiler-plugin.d.cts +0 -13
  111. package/dist/cjs/start-manifest-plugin/plugin.cjs +0 -182
  112. package/dist/cjs/start-manifest-plugin/plugin.cjs.map +0 -1
  113. package/dist/cjs/start-manifest-plugin/plugin.d.cts +0 -6
  114. package/dist/cjs/start-router-plugin/generator-plugins/routes-manifest-plugin.cjs +0 -39
  115. package/dist/cjs/start-router-plugin/generator-plugins/routes-manifest-plugin.cjs.map +0 -1
  116. package/dist/cjs/start-router-plugin/generator-plugins/routes-manifest-plugin.d.cts +0 -6
  117. package/dist/cjs/start-router-plugin/generator-plugins/server-routes-plugin.cjs +0 -121
  118. package/dist/cjs/start-router-plugin/generator-plugins/server-routes-plugin.cjs.map +0 -1
  119. package/dist/cjs/start-router-plugin/generator-plugins/server-routes-plugin.d.cts +0 -2
  120. package/dist/cjs/start-router-plugin/plugin.cjs +0 -45
  121. package/dist/cjs/start-router-plugin/plugin.cjs.map +0 -1
  122. package/dist/cjs/start-router-plugin/plugin.d.cts +0 -3
  123. package/dist/cjs/start-router-plugin/route-tree-client-plugin.cjs +0 -73
  124. package/dist/cjs/start-router-plugin/route-tree-client-plugin.cjs.map +0 -1
  125. package/dist/cjs/start-router-plugin/route-tree-client-plugin.d.cts +0 -6
  126. package/dist/cjs/start-router-plugin/virtual-route-tree-plugin.cjs +0 -29
  127. package/dist/cjs/start-router-plugin/virtual-route-tree-plugin.cjs.map +0 -1
  128. package/dist/cjs/start-router-plugin/virtual-route-tree-plugin.d.cts +0 -3
  129. package/dist/cjs/utils.cjs +0 -18
  130. package/dist/cjs/utils.cjs.map +0 -1
  131. package/dist/cjs/utils.d.cts +0 -8
  132. package/dist/esm/nitro-plugin/build-sitemap.js.map +0 -1
  133. package/dist/esm/nitro-plugin/plugin.d.ts +0 -3
  134. package/dist/esm/nitro-plugin/plugin.js +0 -187
  135. package/dist/esm/nitro-plugin/plugin.js.map +0 -1
  136. package/dist/esm/nitro-plugin/prerender.d.ts +0 -8
  137. package/dist/esm/nitro-plugin/prerender.js.map +0 -1
  138. package/dist/esm/nitro-plugin/queue.js.map +0 -1
  139. package/dist/esm/resolve-virtual-entries-plugin/plugin.d.ts +0 -3
  140. package/dist/esm/resolve-virtual-entries-plugin/plugin.js +0 -63
  141. package/dist/esm/resolve-virtual-entries-plugin/plugin.js.map +0 -1
  142. package/src/nitro-plugin/plugin.ts +0 -252
  143. package/src/resolve-virtual-entries-plugin/plugin.ts +0 -77
  144. /package/dist/esm/{nitro-plugin/queue.d.ts → queue.d.ts} +0 -0
  145. /package/src/{nitro-plugin/queue.ts → queue.ts} +0 -0
@@ -1,178 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const node_fs = require("node:fs");
4
- const node_url = require("node:url");
5
- const os = require("node:os");
6
- const path = require("node:path");
7
- const rollup = require("nitropack/rollup");
8
- const nitropack = require("nitropack");
9
- const ufo = require("ufo");
10
- const constants = require("../constants.cjs");
11
- const utils = require("../utils.cjs");
12
- const queue = require("./queue.cjs");
13
- async function prerender({
14
- options,
15
- nitro,
16
- builder
17
- }) {
18
- var _a;
19
- const logger = utils.createLogger("prerender");
20
- logger.info("Prerendering pages...");
21
- if (((_a = options.prerender) == null ? void 0 : _a.enabled) && !options.pages.length) {
22
- options.pages = [
23
- {
24
- path: "/"
25
- }
26
- ];
27
- }
28
- const serverEnv = builder.environments[constants.VITE_ENVIRONMENT_NAMES.server];
29
- if (!serverEnv) {
30
- throw new Error(
31
- `Vite's "${constants.VITE_ENVIRONMENT_NAMES.server}" environment not found`
32
- );
33
- }
34
- const prerenderOutputDir = path.resolve(
35
- options.root,
36
- ".tanstack",
37
- "start",
38
- "build",
39
- "prerenderer"
40
- );
41
- const nodeNitro = await nitropack.createNitro({
42
- ...nitro.options._config,
43
- preset: "nitro-prerender",
44
- logLevel: 0,
45
- output: {
46
- dir: prerenderOutputDir,
47
- serverDir: path.resolve(prerenderOutputDir, "server"),
48
- publicDir: path.resolve(prerenderOutputDir, "public")
49
- }
50
- });
51
- const nodeNitroRollupOptions = rollup.getRollupConfig(nodeNitro);
52
- const build = serverEnv.config.build;
53
- build.outDir = prerenderOutputDir;
54
- build.rollupOptions = {
55
- ...build.rollupOptions,
56
- ...nodeNitroRollupOptions,
57
- output: {
58
- ...build.rollupOptions.output,
59
- ...nodeNitroRollupOptions.output,
60
- sourcemap: void 0
61
- }
62
- };
63
- await nitropack.build(nodeNitro);
64
- const serverFilename = typeof nodeNitroRollupOptions.output.entryFileNames === "string" ? nodeNitroRollupOptions.output.entryFileNames : "index.mjs";
65
- const serverEntrypoint = node_url.pathToFileURL(
66
- path.resolve(path.join(nodeNitro.options.output.serverDir, serverFilename))
67
- ).toString();
68
- process.env.TSS_PRERENDERING = "true";
69
- const { closePrerenderer, localFetch } = await import(serverEntrypoint);
70
- try {
71
- const pages = await prerenderPages();
72
- logger.info(`Prerendered ${pages.length} pages:`);
73
- pages.forEach((page) => {
74
- logger.info(`- ${page}`);
75
- });
76
- } catch (error) {
77
- logger.error(error);
78
- } finally {
79
- closePrerenderer();
80
- }
81
- function extractLinks(html) {
82
- const linkRegex = /<a[^>]+href=["']([^"']+)["'][^>]*>/g;
83
- const links = [];
84
- let match;
85
- while ((match = linkRegex.exec(html)) !== null) {
86
- const href = match[1];
87
- if (href && (href.startsWith("/") || href.startsWith("./"))) {
88
- links.push(href);
89
- }
90
- }
91
- return links;
92
- }
93
- async function prerenderPages() {
94
- var _a2;
95
- const seen = /* @__PURE__ */ new Set();
96
- const retriesByPath = /* @__PURE__ */ new Map();
97
- const concurrency = ((_a2 = options.prerender) == null ? void 0 : _a2.concurrency) ?? os.cpus().length;
98
- logger.info(`Concurrency: ${concurrency}`);
99
- const queue$1 = new queue.Queue({ concurrency });
100
- options.pages.forEach((page) => addCrawlPageTask(page));
101
- await queue$1.start();
102
- return Array.from(seen);
103
- function addCrawlPageTask(page) {
104
- var _a3, _b;
105
- if (seen.has(page.path)) return;
106
- seen.add(page.path);
107
- if (page.fromCrawl) {
108
- options.pages.push(page);
109
- }
110
- if (!(((_a3 = page.prerender) == null ? void 0 : _a3.enabled) ?? true)) return;
111
- if (((_b = options.prerender) == null ? void 0 : _b.filter) && !options.prerender.filter(page)) return;
112
- const prerenderOptions = {
113
- ...options.prerender,
114
- ...page.prerender
115
- };
116
- queue$1.add(async () => {
117
- var _a4;
118
- logger.info(`Crawling: ${page.path}`);
119
- const retries = retriesByPath.get(page.path) || 0;
120
- try {
121
- const encodedRoute = encodeURI(page.path);
122
- const res = await localFetch(
123
- ufo.withBase(encodedRoute, nodeNitro.options.baseURL),
124
- {
125
- headers: {
126
- ...prerenderOptions.headers,
127
- "x-nitro-prerender": encodedRoute
128
- }
129
- }
130
- );
131
- if (!res.ok) {
132
- throw new Error(`Failed to fetch ${page.path}: ${res.statusText}`, {
133
- cause: res
134
- });
135
- }
136
- const cleanPagePath = (prerenderOptions.outputPath || page.path).split(/[?#]/)[0];
137
- const contentType = res.headers.get("content-type") || "";
138
- const isImplicitHTML = !cleanPagePath.endsWith(".html") && contentType.includes("html");
139
- const routeWithIndex = cleanPagePath.endsWith("/") ? cleanPagePath + "index" : cleanPagePath;
140
- const htmlPath = cleanPagePath.endsWith("/") || prerenderOptions.autoSubfolderIndex ? ufo.joinURL(cleanPagePath, "index.html") : cleanPagePath + ".html";
141
- const filename = ufo.withoutBase(
142
- isImplicitHTML ? htmlPath : routeWithIndex,
143
- nitro.options.baseURL
144
- );
145
- const html = await res.text();
146
- const filepath = path.join(nitro.options.output.publicDir, filename);
147
- await node_fs.promises.mkdir(path.dirname(filepath), {
148
- recursive: true
149
- });
150
- await node_fs.promises.writeFile(filepath, html);
151
- const newPage = await ((_a4 = prerenderOptions.onSuccess) == null ? void 0 : _a4.call(prerenderOptions, { page, html }));
152
- if (newPage) {
153
- Object.assign(page, newPage);
154
- }
155
- if (prerenderOptions.crawlLinks ?? true) {
156
- const links = extractLinks(html);
157
- for (const link of links) {
158
- addCrawlPageTask({ path: link, fromCrawl: true });
159
- }
160
- }
161
- } catch (error) {
162
- if (retries < (prerenderOptions.retryCount ?? 0)) {
163
- logger.warn(`Encountered error, retrying: ${page.path} in 500ms`);
164
- await new Promise(
165
- (resolve) => setTimeout(resolve, prerenderOptions.retryDelay)
166
- );
167
- retriesByPath.set(page.path, retries + 1);
168
- addCrawlPageTask(page);
169
- } else {
170
- throw error;
171
- }
172
- }
173
- });
174
- }
175
- }
176
- }
177
- exports.prerender = prerender;
178
- //# sourceMappingURL=prerender.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prerender.cjs","sources":["../../../src/nitro-plugin/prerender.ts"],"sourcesContent":["import { promises as fsp } from 'node:fs'\nimport { pathToFileURL } from 'node:url'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { getRollupConfig } from 'nitropack/rollup'\nimport { build as buildNitro, createNitro } from 'nitropack'\nimport { joinURL, withBase, withoutBase } from 'ufo'\nimport { VITE_ENVIRONMENT_NAMES } from '../constants'\nimport { createLogger } from '../utils'\nimport { Queue } from './queue'\nimport type { ViteBuilder } from 'vite'\nimport type { $Fetch, Nitro } from 'nitropack'\nimport type { TanStackStartOutputConfig } from '../plugin'\nimport type { Page } from '../schema'\n\nexport async function prerender({\n options,\n nitro,\n builder,\n}: {\n options: TanStackStartOutputConfig\n nitro: Nitro\n builder: ViteBuilder\n}) {\n const logger = createLogger('prerender')\n logger.info('Prerendering pages...')\n\n // If prerender is enabled but no pages are provided, default to prerendering the root page\n if (options.prerender?.enabled && !options.pages.length) {\n options.pages = [\n {\n path: '/',\n },\n ]\n }\n\n const serverEnv = builder.environments[VITE_ENVIRONMENT_NAMES.server]\n\n if (!serverEnv) {\n throw new Error(\n `Vite's \"${VITE_ENVIRONMENT_NAMES.server}\" environment not found`,\n )\n }\n\n const prerenderOutputDir = path.resolve(\n options.root,\n '.tanstack',\n 'start',\n 'build',\n 'prerenderer',\n )\n\n const nodeNitro = await createNitro({\n ...nitro.options._config,\n preset: 'nitro-prerender',\n logLevel: 0,\n output: {\n dir: prerenderOutputDir,\n serverDir: path.resolve(prerenderOutputDir, 'server'),\n publicDir: path.resolve(prerenderOutputDir, 'public'),\n },\n })\n\n const nodeNitroRollupOptions = getRollupConfig(nodeNitro)\n\n const build = serverEnv.config.build\n\n build.outDir = prerenderOutputDir\n\n build.rollupOptions = {\n ...build.rollupOptions,\n ...nodeNitroRollupOptions,\n output: {\n ...build.rollupOptions.output,\n ...nodeNitroRollupOptions.output,\n sourcemap: undefined,\n },\n }\n\n await buildNitro(nodeNitro)\n\n // Import renderer entry\n const serverFilename =\n typeof nodeNitroRollupOptions.output.entryFileNames === 'string'\n ? nodeNitroRollupOptions.output.entryFileNames\n : 'index.mjs'\n\n const serverEntrypoint = pathToFileURL(\n path.resolve(path.join(nodeNitro.options.output.serverDir, serverFilename)),\n ).toString()\n\n process.env.TSS_PRERENDERING = 'true'\n\n const { closePrerenderer, localFetch } = (await import(serverEntrypoint)) as {\n closePrerenderer: () => void\n localFetch: $Fetch\n }\n\n try {\n // Crawl all pages\n const pages = await prerenderPages()\n\n logger.info(`Prerendered ${pages.length} pages:`)\n pages.forEach((page) => {\n logger.info(`- ${page}`)\n })\n\n // TODO: Write the prerendered pages to the output directory\n } catch (error) {\n logger.error(error)\n } finally {\n // Ensure server is always closed\n // server.process.kill()\n closePrerenderer()\n }\n\n function extractLinks(html: string): Array<string> {\n const linkRegex = /<a[^>]+href=[\"']([^\"']+)[\"'][^>]*>/g\n const links: Array<string> = []\n let match\n\n while ((match = linkRegex.exec(html)) !== null) {\n const href = match[1]\n if (href && (href.startsWith('/') || href.startsWith('./'))) {\n links.push(href)\n }\n }\n\n return links\n }\n\n async function prerenderPages() {\n const seen = new Set<string>()\n const retriesByPath = new Map<string, number>()\n const concurrency = options.prerender?.concurrency ?? os.cpus().length\n logger.info(`Concurrency: ${concurrency}`)\n const queue = new Queue({ concurrency })\n\n options.pages.forEach((page) => addCrawlPageTask(page))\n\n await queue.start()\n\n return Array.from(seen)\n\n function addCrawlPageTask(page: Page) {\n // Was the page already seen?\n if (seen.has(page.path)) return\n\n // Add the page to the seen set\n seen.add(page.path)\n\n if (page.fromCrawl) {\n options.pages.push(page)\n }\n\n // If not enabled, skip\n if (!(page.prerender?.enabled ?? true)) return\n\n // If there is a filter link, check if the page should be prerendered\n if (options.prerender?.filter && !options.prerender.filter(page)) return\n\n // Resolve the merged default and page-specific prerender options\n const prerenderOptions = {\n ...options.prerender,\n ...page.prerender,\n }\n\n // Add the task\n queue.add(async () => {\n logger.info(`Crawling: ${page.path}`)\n const retries = retriesByPath.get(page.path) || 0\n try {\n // Fetch the route\n const encodedRoute = encodeURI(page.path)\n\n const res = await localFetch<Response>(\n withBase(encodedRoute, nodeNitro.options.baseURL),\n {\n headers: {\n ...prerenderOptions.headers,\n 'x-nitro-prerender': encodedRoute,\n },\n },\n )\n\n if (!res.ok) {\n throw new Error(`Failed to fetch ${page.path}: ${res.statusText}`, {\n cause: res,\n })\n }\n\n const cleanPagePath = (\n prerenderOptions.outputPath || page.path\n ).split(/[?#]/)[0]!\n\n // Guess route type and populate fileName\n const contentType = res.headers.get('content-type') || ''\n const isImplicitHTML =\n !cleanPagePath.endsWith('.html') && contentType.includes('html')\n // &&\n // !JsonSigRx.test(dataBuff.subarray(0, 32).toString('utf8'))\n const routeWithIndex = cleanPagePath.endsWith('/')\n ? cleanPagePath + 'index'\n : cleanPagePath\n\n const htmlPath =\n cleanPagePath.endsWith('/') || prerenderOptions.autoSubfolderIndex\n ? joinURL(cleanPagePath, 'index.html')\n : cleanPagePath + '.html'\n\n const filename = withoutBase(\n isImplicitHTML ? htmlPath : routeWithIndex,\n nitro.options.baseURL,\n )\n\n const html = await res.text()\n\n const filepath = path.join(nitro.options.output.publicDir, filename)\n\n await fsp.mkdir(path.dirname(filepath), {\n recursive: true,\n })\n\n await fsp.writeFile(filepath, html)\n\n const newPage = await prerenderOptions.onSuccess?.({ page, html })\n\n if (newPage) {\n Object.assign(page, newPage)\n }\n\n // Find new links\n if (prerenderOptions.crawlLinks ?? true) {\n const links = extractLinks(html)\n for (const link of links) {\n addCrawlPageTask({ path: link, fromCrawl: true })\n }\n }\n } catch (error) {\n if (retries < (prerenderOptions.retryCount ?? 0)) {\n logger.warn(`Encountered error, retrying: ${page.path} in 500ms`)\n await new Promise((resolve) =>\n setTimeout(resolve, prerenderOptions.retryDelay),\n )\n retriesByPath.set(page.path, retries + 1)\n addCrawlPageTask(page)\n } else {\n throw error\n }\n }\n })\n }\n }\n}\n"],"names":["createLogger","VITE_ENVIRONMENT_NAMES","createNitro","getRollupConfig","buildNitro","pathToFileURL","_a","queue","Queue","withBase","joinURL","withoutBase","fsp"],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { ViteBuilder } from 'vite';
2
- import { Nitro } from 'nitropack';
3
- import { TanStackStartOutputConfig } from '../plugin.cjs';
4
- export declare function prerender({ options, nitro, builder, }: {
5
- options: TanStackStartOutputConfig;
6
- nitro: Nitro;
7
- builder: ViteBuilder;
8
- }): Promise<void>;
@@ -1,131 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6
- const defaultConfig = {
7
- concurrency: 5,
8
- started: false,
9
- tasks: []
10
- };
11
- class Queue {
12
- constructor(config = defaultConfig) {
13
- __publicField(this, "onSettles", []);
14
- __publicField(this, "onErrors", []);
15
- __publicField(this, "onSuccesses", []);
16
- __publicField(this, "running");
17
- __publicField(this, "active", []);
18
- __publicField(this, "pending");
19
- __publicField(this, "currentConcurrency");
20
- const { concurrency, started, tasks } = {
21
- ...defaultConfig,
22
- ...config
23
- };
24
- this.running = started;
25
- this.pending = tasks;
26
- this.currentConcurrency = concurrency;
27
- }
28
- tick() {
29
- if (!this.running) {
30
- return;
31
- }
32
- while (this.active.length < this.currentConcurrency && this.pending.length) {
33
- const nextFn = this.pending.shift();
34
- if (!nextFn) {
35
- throw new Error("Found task that is not a function");
36
- }
37
- this.active.push(nextFn);
38
- (async () => {
39
- let success = false;
40
- let res;
41
- let error;
42
- try {
43
- res = await nextFn();
44
- success = true;
45
- } catch (e) {
46
- error = e;
47
- }
48
- this.active = this.active.filter((d) => d !== nextFn);
49
- if (success) {
50
- this.onSuccesses.forEach((d) => d(res, nextFn));
51
- } else {
52
- this.onErrors.forEach((d) => d(error, nextFn));
53
- }
54
- this.onSettles.forEach((d) => d(res, error));
55
- this.tick();
56
- })();
57
- }
58
- }
59
- add(fn, { priority } = {}) {
60
- return new Promise((resolve, reject) => {
61
- const task = () => Promise.resolve(fn()).then((res) => {
62
- resolve(res);
63
- return res;
64
- }).catch((err) => {
65
- reject(err);
66
- throw err;
67
- });
68
- if (priority) {
69
- this.pending.unshift(task);
70
- } else {
71
- this.pending.push(task);
72
- }
73
- this.tick();
74
- });
75
- }
76
- throttle(n) {
77
- this.currentConcurrency = n;
78
- }
79
- onSettled(cb) {
80
- this.onSettles.push(cb);
81
- return () => {
82
- this.onSettles = this.onSettles.filter((d) => d !== cb);
83
- };
84
- }
85
- onError(cb) {
86
- this.onErrors.push(cb);
87
- return () => {
88
- this.onErrors = this.onErrors.filter((d) => d !== cb);
89
- };
90
- }
91
- onSuccess(cb) {
92
- this.onSuccesses.push(cb);
93
- return () => {
94
- this.onSuccesses = this.onSuccesses.filter((d) => d !== cb);
95
- };
96
- }
97
- stop() {
98
- this.running = false;
99
- }
100
- start() {
101
- this.running = true;
102
- this.tick();
103
- return new Promise((resolve) => {
104
- this.onSettled(() => {
105
- if (this.isSettled()) {
106
- resolve();
107
- }
108
- });
109
- });
110
- }
111
- clear() {
112
- this.pending = [];
113
- }
114
- getActive() {
115
- return this.active;
116
- }
117
- getPending() {
118
- return this.pending;
119
- }
120
- getAll() {
121
- return [...this.active, ...this.pending];
122
- }
123
- isRunning() {
124
- return this.running;
125
- }
126
- isSettled() {
127
- return !this.active.length && !this.pending.length;
128
- }
129
- }
130
- exports.Queue = Queue;
131
- //# sourceMappingURL=queue.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.cjs","sources":["../../../src/nitro-plugin/queue.ts"],"sourcesContent":["interface PoolConfig {\n concurrency?: number\n started?: boolean\n tasks?: Array<() => Promise<any>>\n}\n\nconst defaultConfig: PoolConfig = {\n concurrency: 5,\n started: false,\n tasks: [],\n}\n\nexport class Queue<T> {\n private onSettles: Array<(res: any, error: any) => void> = []\n private onErrors: Array<(error: any, task: () => Promise<any>) => void> = []\n private onSuccesses: Array<(result: any, task: () => Promise<any>) => void> =\n []\n private running: boolean\n private active: Array<() => Promise<any>> = []\n private pending: Array<() => Promise<any>>\n private currentConcurrency: number\n\n constructor(config: PoolConfig = defaultConfig) {\n const { concurrency, started, tasks } = {\n ...defaultConfig,\n ...config,\n }\n this.running = started!\n this.pending = tasks as Array<() => Promise<any>>\n this.currentConcurrency = concurrency!\n }\n\n private tick() {\n if (!this.running) {\n return\n }\n while (\n this.active.length < this.currentConcurrency &&\n this.pending.length\n ) {\n const nextFn = this.pending.shift()\n if (!nextFn) {\n throw new Error('Found task that is not a function')\n }\n this.active.push(nextFn)\n ;(async () => {\n let success = false\n let res!: T\n let error: any\n try {\n res = await nextFn()\n success = true\n } catch (e) {\n error = e\n }\n this.active = this.active.filter((d) => d !== nextFn)\n if (success) {\n this.onSuccesses.forEach((d) => d(res, nextFn))\n } else {\n this.onErrors.forEach((d) => d(error, nextFn))\n }\n this.onSettles.forEach((d) => d(res, error))\n this.tick()\n })()\n }\n }\n\n add(fn: () => Promise<T> | T, { priority }: { priority?: boolean } = {}) {\n return new Promise<any>((resolve, reject) => {\n const task = () =>\n Promise.resolve(fn())\n .then((res) => {\n resolve(res)\n return res\n })\n .catch((err) => {\n reject(err)\n throw err\n })\n if (priority) {\n this.pending.unshift(task)\n } else {\n this.pending.push(task)\n }\n this.tick()\n })\n }\n\n throttle(n: number) {\n this.currentConcurrency = n\n }\n\n onSettled(cb: () => void) {\n this.onSettles.push(cb)\n return () => {\n this.onSettles = this.onSettles.filter((d) => d !== cb)\n }\n }\n\n onError(cb: (error: any, task: () => Promise<any>) => void) {\n this.onErrors.push(cb)\n return () => {\n this.onErrors = this.onErrors.filter((d) => d !== cb)\n }\n }\n\n onSuccess(cb: (result: any, task: () => Promise<any>) => void) {\n this.onSuccesses.push(cb)\n return () => {\n this.onSuccesses = this.onSuccesses.filter((d) => d !== cb)\n }\n }\n\n stop() {\n this.running = false\n }\n\n start() {\n this.running = true\n this.tick()\n return new Promise<void>((resolve) => {\n this.onSettled(() => {\n if (this.isSettled()) {\n resolve()\n }\n })\n })\n }\n\n clear() {\n this.pending = []\n }\n\n getActive() {\n return this.active\n }\n\n getPending() {\n return this.pending\n }\n\n getAll() {\n return [...this.active, ...this.pending]\n }\n\n isRunning() {\n return this.running\n }\n\n isSettled() {\n return !this.active.length && !this.pending.length\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- interface PoolConfig {
2
- concurrency?: number;
3
- started?: boolean;
4
- tasks?: Array<() => Promise<any>>;
5
- }
6
- export declare class Queue<T> {
7
- private onSettles;
8
- private onErrors;
9
- private onSuccesses;
10
- private running;
11
- private active;
12
- private pending;
13
- private currentConcurrency;
14
- constructor(config?: PoolConfig);
15
- private tick;
16
- add(fn: () => Promise<T> | T, { priority }?: {
17
- priority?: boolean;
18
- }): Promise<any>;
19
- throttle(n: number): void;
20
- onSettled(cb: () => void): () => void;
21
- onError(cb: (error: any, task: () => Promise<any>) => void): () => void;
22
- onSuccess(cb: (result: any, task: () => Promise<any>) => void): () => void;
23
- stop(): void;
24
- start(): Promise<void>;
25
- clear(): void;
26
- getActive(): (() => Promise<any>)[];
27
- getPending(): (() => Promise<any>)[];
28
- getAll(): (() => Promise<any>)[];
29
- isRunning(): boolean;
30
- isSettled(): boolean;
31
- }
32
- export {};
@@ -1,227 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const path = require("node:path");
4
- const nitropack = require("nitropack");
5
- const routerCore = require("@tanstack/router-core");
6
- const startServerCore = require("@tanstack/start-server-core");
7
- const serverFunctionsPlugin = require("@tanstack/server-functions-plugin");
8
- const vite = require("vite");
9
- const vitefu = require("vitefu");
10
- const schema = require("./schema.cjs");
11
- const plugin$5 = require("./nitro-plugin/plugin.cjs");
12
- const plugin$3 = require("./start-manifest-plugin/plugin.cjs");
13
- const startCompilerPlugin = require("./start-compiler-plugin.cjs");
14
- const constants = require("./constants.cjs");
15
- const plugin = require("./start-router-plugin/plugin.cjs");
16
- const plugin$2 = require("./load-env-plugin/plugin.cjs");
17
- const plugin$4 = require("./dev-server-plugin/plugin.cjs");
18
- const plugin$1 = require("./resolve-virtual-entries-plugin/plugin.cjs");
19
- function _interopNamespaceDefault(e) {
20
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
21
- if (e) {
22
- for (const k in e) {
23
- if (k !== "default") {
24
- const d = Object.getOwnPropertyDescriptor(e, k);
25
- Object.defineProperty(n, k, d.get ? d : {
26
- enumerable: true,
27
- get: () => e[k]
28
- });
29
- }
30
- }
31
- }
32
- n.default = e;
33
- return Object.freeze(n);
34
- }
35
- const vite__namespace = /* @__PURE__ */ _interopNamespaceDefault(vite);
36
- schema.createTanStackConfig();
37
- let ssrBundle;
38
- function TanStackStartVitePluginCore(opts, startConfig) {
39
- return [
40
- plugin.tanStackStartRouter({
41
- ...startConfig.tsr,
42
- target: opts.framework,
43
- autoCodeSplitting: true
44
- }),
45
- plugin$1.resolveVirtualEntriesPlugin(opts, startConfig),
46
- {
47
- name: "tanstack-start-core:config-client",
48
- async config(viteConfig, { command }) {
49
- var _a;
50
- const viteAppBase = routerCore.trimPathRight(viteConfig.base || "/");
51
- globalThis.TSS_APP_BASE = viteAppBase;
52
- const nitroOutputPublicDir = await (async () => {
53
- const dummyNitroApp = await nitropack.createNitro({
54
- preset: startConfig.target,
55
- compatibilityDate: "2024-12-01"
56
- });
57
- const nitroOutputPublicDir2 = dummyNitroApp.options.output.publicDir;
58
- await dummyNitroApp.close();
59
- return nitroOutputPublicDir2;
60
- })();
61
- const startPackageName = `@tanstack/${opts.framework}-start`;
62
- const routerPackageName = `@tanstack/${opts.framework}-router`;
63
- const additionalOptimizeDeps = {
64
- include: /* @__PURE__ */ new Set(),
65
- exclude: /* @__PURE__ */ new Set()
66
- };
67
- const result = await vitefu.crawlFrameworkPkgs({
68
- root: process.cwd(),
69
- isBuild: command === "build",
70
- isFrameworkPkgByJson(pkgJson) {
71
- var _a2;
72
- if ([routerPackageName, startPackageName].includes(pkgJson.name)) {
73
- return false;
74
- }
75
- const peerDependencies = pkgJson["peerDependencies"];
76
- if (peerDependencies) {
77
- const internalResult = (_a2 = opts.crawlPackages) == null ? void 0 : _a2.call(opts, {
78
- name: pkgJson.name,
79
- peerDependencies,
80
- exports: pkgJson.exports
81
- });
82
- if (internalResult) {
83
- if (internalResult === "exclude") {
84
- additionalOptimizeDeps.exclude.add(pkgJson.name);
85
- } else {
86
- additionalOptimizeDeps.include.add(pkgJson.name);
87
- }
88
- }
89
- return startPackageName in peerDependencies || routerPackageName in peerDependencies;
90
- }
91
- return false;
92
- }
93
- });
94
- return {
95
- base: viteAppBase,
96
- environments: {
97
- [constants.VITE_ENVIRONMENT_NAMES.client]: {
98
- consumer: "client",
99
- build: {
100
- manifest: true,
101
- rollupOptions: {
102
- input: {
103
- main: getClientEntryPath(startConfig)
104
- },
105
- output: {
106
- dir: path.resolve(startConfig.root, constants.CLIENT_DIST_DIR)
107
- },
108
- // TODO: this should be removed
109
- external: ["node:fs", "node:path", "node:os", "node:crypto"]
110
- }
111
- }
112
- },
113
- [constants.VITE_ENVIRONMENT_NAMES.server]: {
114
- consumer: "server",
115
- build: {
116
- ssr: true,
117
- // we don't write to the file system as the below 'capture-output' plugin will
118
- // capture the output and write it to the virtual file system
119
- write: false,
120
- copyPublicDir: false,
121
- rollupOptions: {
122
- output: {
123
- entryFileNames: constants.SSR_ENTRY_FILE
124
- },
125
- plugins: [
126
- {
127
- name: "capture-output",
128
- generateBundle(_options, bundle) {
129
- ssrBundle = bundle;
130
- }
131
- }
132
- ]
133
- },
134
- commonjsOptions: {
135
- include: [/node_modules/]
136
- }
137
- }
138
- }
139
- },
140
- resolve: {
141
- noExternal: [
142
- "@tanstack/start**",
143
- `@tanstack/${opts.framework}-start**`,
144
- ...Object.values(startServerCore.VIRTUAL_MODULES),
145
- startPackageName,
146
- ...result.ssr.noExternal.sort()
147
- ],
148
- external: [...result.ssr.external.sort()],
149
- dedupe: [startPackageName]
150
- },
151
- optimizeDeps: {
152
- exclude: [
153
- ...Object.values(startServerCore.VIRTUAL_MODULES),
154
- startPackageName,
155
- ...result.optimizeDeps.exclude.sort(),
156
- ...additionalOptimizeDeps.exclude
157
- ],
158
- include: [...additionalOptimizeDeps.include]
159
- },
160
- /* prettier-ignore */
161
- define: {
162
- // define is an esbuild function that replaces the any instances of given keys with the given values
163
- // i.e: __FRAMEWORK_NAME__ can be replaced with JSON.stringify("TanStack Start")
164
- // This is not the same as injecting environment variables.
165
- ...defineReplaceEnv("TSS_SERVER_FN_BASE", startConfig.serverFns.base),
166
- ...defineReplaceEnv("TSS_OUTPUT_PUBLIC_DIR", nitroOutputPublicDir),
167
- ...defineReplaceEnv("TSS_APP_BASE", viteAppBase),
168
- ...command === "serve" ? defineReplaceEnv("TSS_SHELL", ((_a = startConfig.spa) == null ? void 0 : _a.enabled) ? "true" : "false") : {}
169
- }
170
- };
171
- }
172
- },
173
- // N.B. TanStackStartCompilerPlugin must be before the TanStackServerFnPluginEnv
174
- startCompilerPlugin.startCompilerPlugin(opts.framework, {
175
- client: { envName: constants.VITE_ENVIRONMENT_NAMES.client },
176
- server: { envName: constants.VITE_ENVIRONMENT_NAMES.server }
177
- }),
178
- serverFunctionsPlugin.TanStackServerFnPluginEnv({
179
- // This is the ID that will be available to look up and import
180
- // our server function manifest and resolve its module
181
- manifestVirtualImportId: startServerCore.VIRTUAL_MODULES.serverFnManifest,
182
- client: {
183
- getRuntimeCode: () => `import { createClientRpc } from '@tanstack/${opts.framework}-start/server-functions-client'`,
184
- replacer: (d) => `createClientRpc('${d.functionId}', '${startConfig.serverFns.base}')`,
185
- envName: constants.VITE_ENVIRONMENT_NAMES.client
186
- },
187
- server: {
188
- getRuntimeCode: () => `import { createServerRpc } from '@tanstack/${opts.framework}-start/server-functions-server'`,
189
- replacer: (d) => `createServerRpc('${d.functionId}', '${startConfig.serverFns.base}', ${d.fn})`,
190
- envName: constants.VITE_ENVIRONMENT_NAMES.server
191
- }
192
- }),
193
- plugin$2.loadEnvPlugin(startConfig),
194
- plugin$3.startManifestPlugin({ clientEntry: getClientEntryPath(startConfig) }),
195
- plugin$4.devServerPlugin(),
196
- plugin$5.nitroPlugin(startConfig, () => ssrBundle),
197
- {
198
- name: "tanstack-start:core:capture-client-bundle",
199
- applyToEnvironment(e) {
200
- return e.name === constants.VITE_ENVIRONMENT_NAMES.client;
201
- },
202
- enforce: "post",
203
- generateBundle(_options, bundle) {
204
- globalThis.TSS_CLIENT_BUNDLE = bundle;
205
- }
206
- }
207
- ];
208
- }
209
- function defineReplaceEnv(key, value) {
210
- return {
211
- [`process.env.${key}`]: JSON.stringify(value),
212
- [`import.meta.env.${key}`]: JSON.stringify(value)
213
- };
214
- }
215
- const getClientEntryPath = (startConfig) => {
216
- const entry = startConfig.clientEntryPath.startsWith(
217
- "/~start/default-client-entry"
218
- ) ? startConfig.clientEntryPath : vite__namespace.normalizePath(
219
- path.join(
220
- "/@fs",
221
- path.resolve(startConfig.root, startConfig.clientEntryPath)
222
- )
223
- );
224
- return entry;
225
- };
226
- exports.TanStackStartVitePluginCore = TanStackStartVitePluginCore;
227
- //# sourceMappingURL=plugin.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.cjs","sources":["../../src/plugin.ts"],"sourcesContent":["import path from 'node:path'\nimport { createNitro } from 'nitropack'\nimport { trimPathRight } from '@tanstack/router-core'\nimport { VIRTUAL_MODULES } from '@tanstack/start-server-core'\nimport { TanStackServerFnPluginEnv } from '@tanstack/server-functions-plugin'\nimport * as vite from 'vite'\nimport { crawlFrameworkPkgs } from 'vitefu'\nimport { createTanStackConfig } from './schema'\nimport { nitroPlugin } from './nitro-plugin/plugin'\nimport { startManifestPlugin } from './start-manifest-plugin/plugin'\nimport { startCompilerPlugin } from './start-compiler-plugin'\nimport {\n CLIENT_DIST_DIR,\n SSR_ENTRY_FILE,\n VITE_ENVIRONMENT_NAMES,\n} from './constants'\nimport { tanStackStartRouter } from './start-router-plugin/plugin'\nimport { loadEnvPlugin } from './load-env-plugin/plugin'\nimport { devServerPlugin } from './dev-server-plugin/plugin'\nimport { resolveVirtualEntriesPlugin } from './resolve-virtual-entries-plugin/plugin'\nimport type { createTanStackStartOptionsSchema } from './schema'\nimport type { PluginOption, Rollup } from 'vite'\nimport type { z } from 'zod'\nimport type { CompileStartFrameworkOptions } from './compilers'\n\nexport type TanStackStartInputConfig = z.input<\n ReturnType<typeof createTanStackStartOptionsSchema>\n>\n\nconst defaultConfig = createTanStackConfig()\nexport function getTanStackStartOptions(opts?: TanStackStartInputConfig) {\n return defaultConfig.parse(opts)\n}\n\nexport type TanStackStartOutputConfig = ReturnType<\n typeof getTanStackStartOptions\n>\n\nexport interface TanStackStartVitePluginCoreOptions {\n framework: CompileStartFrameworkOptions\n getVirtualServerRootHandler: (ctx: {\n routerFilepath: string\n serverEntryFilepath: string\n }) => string\n getVirtualServerEntry: (ctx: { routerFilepath: string }) => string\n getVirtualClientEntry: (ctx: { routerFilepath: string }) => string\n crawlPackages?: (opts: {\n name: string\n peerDependencies: Record<string, any>\n exports?: Record<string, any> | string\n }) => 'include' | 'exclude' | undefined\n}\n// this needs to live outside of the TanStackStartVitePluginCore since it will be invoked multiple times by vite\nlet ssrBundle: Rollup.OutputBundle\n\nexport function TanStackStartVitePluginCore(\n opts: TanStackStartVitePluginCoreOptions,\n startConfig: TanStackStartOutputConfig,\n): Array<PluginOption> {\n return [\n tanStackStartRouter({\n ...startConfig.tsr,\n target: opts.framework,\n autoCodeSplitting: true,\n }),\n resolveVirtualEntriesPlugin(opts, startConfig),\n {\n name: 'tanstack-start-core:config-client',\n async config(viteConfig, { command }) {\n const viteAppBase = trimPathRight(viteConfig.base || '/')\n globalThis.TSS_APP_BASE = viteAppBase\n\n const nitroOutputPublicDir = await (async () => {\n // Create a dummy nitro app to get the resolved public output path\n const dummyNitroApp = await createNitro({\n preset: startConfig.target,\n compatibilityDate: '2024-12-01',\n })\n\n const nitroOutputPublicDir = dummyNitroApp.options.output.publicDir\n await dummyNitroApp.close()\n\n return nitroOutputPublicDir\n })()\n\n const startPackageName = `@tanstack/${opts.framework}-start`\n const routerPackageName = `@tanstack/${opts.framework}-router`\n\n const additionalOptimizeDeps = {\n include: new Set<string>(),\n exclude: new Set<string>(),\n }\n\n // crawl packages that have start in \"peerDependencies\"\n // see https://github.com/svitejs/vitefu/blob/d8d82fa121e3b2215ba437107093c77bde51b63b/src/index.js#L95-L101\n\n // this is currently uncached; could be implemented similarly as vite handles lock file changes\n // see https://github.com/vitejs/vite/blob/557f797d29422027e8c451ca50dd84bf8c41b5f0/packages/vite/src/node/optimizer/index.ts#L1282\n\n const result = await crawlFrameworkPkgs({\n root: process.cwd(),\n isBuild: command === 'build',\n isFrameworkPkgByJson(pkgJson) {\n if ([routerPackageName, startPackageName].includes(pkgJson.name)) {\n return false\n }\n\n const peerDependencies = pkgJson['peerDependencies']\n\n if (peerDependencies) {\n const internalResult = opts.crawlPackages?.({\n name: pkgJson.name,\n peerDependencies,\n exports: pkgJson.exports,\n })\n if (internalResult) {\n if (internalResult === 'exclude') {\n additionalOptimizeDeps.exclude.add(pkgJson.name)\n } else {\n additionalOptimizeDeps.include.add(pkgJson.name)\n }\n }\n return (\n startPackageName in peerDependencies ||\n routerPackageName in peerDependencies\n )\n }\n return false\n },\n })\n\n return {\n base: viteAppBase,\n environments: {\n [VITE_ENVIRONMENT_NAMES.client]: {\n consumer: 'client',\n build: {\n manifest: true,\n rollupOptions: {\n input: {\n main: getClientEntryPath(startConfig),\n },\n output: {\n dir: path.resolve(startConfig.root, CLIENT_DIST_DIR),\n },\n // TODO: this should be removed\n external: ['node:fs', 'node:path', 'node:os', 'node:crypto'],\n },\n },\n },\n [VITE_ENVIRONMENT_NAMES.server]: {\n consumer: 'server',\n build: {\n ssr: true,\n // we don't write to the file system as the below 'capture-output' plugin will\n // capture the output and write it to the virtual file system\n write: false,\n copyPublicDir: false,\n rollupOptions: {\n output: {\n entryFileNames: SSR_ENTRY_FILE,\n },\n plugins: [\n {\n name: 'capture-output',\n generateBundle(_options, bundle) {\n // TODO: can this hook be called more than once?\n ssrBundle = bundle\n },\n },\n ],\n },\n commonjsOptions: {\n include: [/node_modules/],\n },\n },\n },\n },\n resolve: {\n noExternal: [\n '@tanstack/start**',\n `@tanstack/${opts.framework}-start**`,\n ...Object.values(VIRTUAL_MODULES),\n startPackageName,\n ...result.ssr.noExternal.sort(),\n ],\n external: [...result.ssr.external.sort()],\n dedupe: [startPackageName],\n },\n optimizeDeps: {\n exclude: [\n ...Object.values(VIRTUAL_MODULES),\n startPackageName,\n ...result.optimizeDeps.exclude.sort(),\n ...additionalOptimizeDeps.exclude,\n ],\n include: [...additionalOptimizeDeps.include],\n },\n /* prettier-ignore */\n define: {\n // define is an esbuild function that replaces the any instances of given keys with the given values\n // i.e: __FRAMEWORK_NAME__ can be replaced with JSON.stringify(\"TanStack Start\")\n // This is not the same as injecting environment variables.\n\n ...defineReplaceEnv('TSS_SERVER_FN_BASE', startConfig.serverFns.base),\n ...defineReplaceEnv('TSS_OUTPUT_PUBLIC_DIR', nitroOutputPublicDir),\n ...defineReplaceEnv('TSS_APP_BASE', viteAppBase),\n ...(command === 'serve' ? defineReplaceEnv('TSS_SHELL', startConfig.spa?.enabled ? 'true' : 'false') : {}),\n },\n }\n },\n },\n // N.B. TanStackStartCompilerPlugin must be before the TanStackServerFnPluginEnv\n startCompilerPlugin(opts.framework, {\n client: { envName: VITE_ENVIRONMENT_NAMES.client },\n server: { envName: VITE_ENVIRONMENT_NAMES.server },\n }),\n TanStackServerFnPluginEnv({\n // This is the ID that will be available to look up and import\n // our server function manifest and resolve its module\n manifestVirtualImportId: VIRTUAL_MODULES.serverFnManifest,\n client: {\n getRuntimeCode: () =>\n `import { createClientRpc } from '@tanstack/${opts.framework}-start/server-functions-client'`,\n replacer: (d) =>\n `createClientRpc('${d.functionId}', '${startConfig.serverFns.base}')`,\n envName: VITE_ENVIRONMENT_NAMES.client,\n },\n server: {\n getRuntimeCode: () =>\n `import { createServerRpc } from '@tanstack/${opts.framework}-start/server-functions-server'`,\n replacer: (d) =>\n `createServerRpc('${d.functionId}', '${startConfig.serverFns.base}', ${d.fn})`,\n envName: VITE_ENVIRONMENT_NAMES.server,\n },\n }),\n loadEnvPlugin(startConfig),\n startManifestPlugin({ clientEntry: getClientEntryPath(startConfig) }),\n devServerPlugin(),\n nitroPlugin(startConfig, () => ssrBundle),\n {\n name: 'tanstack-start:core:capture-client-bundle',\n applyToEnvironment(e) {\n return e.name === VITE_ENVIRONMENT_NAMES.client\n },\n enforce: 'post',\n generateBundle(_options, bundle) {\n globalThis.TSS_CLIENT_BUNDLE = bundle\n },\n },\n ]\n}\n\nfunction defineReplaceEnv<TKey extends string, TValue extends string>(\n key: TKey,\n value: TValue,\n): { [P in `process.env.${TKey}` | `import.meta.env.${TKey}`]: TValue } {\n return {\n [`process.env.${key}`]: JSON.stringify(value),\n [`import.meta.env.${key}`]: JSON.stringify(value),\n } as { [P in `process.env.${TKey}` | `import.meta.env.${TKey}`]: TValue }\n}\n\nconst getClientEntryPath = (startConfig: TanStackStartOutputConfig) => {\n // when the user specifies a custom client entry path, we need to resolve it\n // relative to the root of the project, keeping in mind that if not specified\n // it will be /~start/default-client-entry which is a virtual path\n // that is resolved by vite to the actual client entry path\n const entry = startConfig.clientEntryPath.startsWith(\n '/~start/default-client-entry',\n )\n ? startConfig.clientEntryPath\n : vite.normalizePath(\n path.join(\n '/@fs',\n path.resolve(startConfig.root, startConfig.clientEntryPath),\n ),\n )\n\n return entry\n}\n"],"names":["createTanStackConfig","tanStackStartRouter","resolveVirtualEntriesPlugin","trimPathRight","createNitro","nitroOutputPublicDir","crawlFrameworkPkgs","_a","VITE_ENVIRONMENT_NAMES","CLIENT_DIST_DIR","SSR_ENTRY_FILE","VIRTUAL_MODULES","startCompilerPlugin","TanStackServerFnPluginEnv","loadEnvPlugin","startManifestPlugin","devServerPlugin","nitroPlugin","vite"],"mappings":"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"}