@tanstack/start-plugin-core 1.131.6 → 1.132.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) 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 +1 -1
  15. package/dist/esm/index.js +0 -4
  16. package/dist/esm/index.js.map +1 -1
  17. package/dist/esm/load-env-plugin/plugin.d.ts +2 -3
  18. package/dist/esm/load-env-plugin/plugin.js +5 -8
  19. package/dist/esm/load-env-plugin/plugin.js.map +1 -1
  20. package/dist/esm/output-directory.d.ts +3 -0
  21. package/dist/esm/output-directory.js +14 -0
  22. package/dist/esm/output-directory.js.map +1 -0
  23. package/dist/esm/plugin.d.ts +6 -290
  24. package/dist/esm/plugin.js +123 -76
  25. package/dist/esm/plugin.js.map +1 -1
  26. package/dist/esm/post-server-build.d.ts +7 -0
  27. package/dist/esm/post-server-build.js +55 -0
  28. package/dist/esm/post-server-build.js.map +1 -0
  29. package/dist/esm/prerender.d.ts +11 -0
  30. package/dist/esm/{nitro-plugin/prerender.js → prerender.js} +85 -73
  31. package/dist/esm/prerender.js.map +1 -0
  32. package/dist/esm/{nitro-plugin/queue.js → queue.js} +7 -10
  33. package/dist/esm/queue.js.map +1 -0
  34. package/dist/esm/resolve-entries.d.ts +8 -0
  35. package/dist/esm/resolve-entries.js +37 -0
  36. package/dist/esm/resolve-entries.js.map +1 -0
  37. package/dist/esm/schema.d.ts +1369 -6719
  38. package/dist/esm/schema.js +52 -85
  39. package/dist/esm/schema.js.map +1 -1
  40. package/dist/esm/start-compiler-plugin.js +2 -2
  41. package/dist/esm/start-compiler-plugin.js.map +1 -1
  42. package/dist/esm/start-manifest-plugin/plugin.d.ts +1 -1
  43. package/dist/esm/start-manifest-plugin/plugin.js +8 -13
  44. package/dist/esm/start-manifest-plugin/plugin.js.map +1 -1
  45. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js +2 -3
  46. package/dist/esm/start-router-plugin/generator-plugins/routes-manifest-plugin.js.map +1 -1
  47. package/dist/esm/start-router-plugin/generator-plugins/server-routes-plugin.js +2 -4
  48. package/dist/esm/start-router-plugin/generator-plugins/server-routes-plugin.js.map +1 -1
  49. package/dist/esm/start-router-plugin/plugin.js.map +1 -1
  50. package/dist/esm/start-router-plugin/route-tree-client-plugin.js.map +1 -1
  51. package/dist/esm/start-router-plugin/virtual-route-tree-plugin.js.map +1 -1
  52. package/dist/esm/utils.js.map +1 -1
  53. package/package.json +13 -18
  54. package/src/{nitro-plugin/build-sitemap.ts → build-sitemap.ts} +8 -8
  55. package/src/constants.ts +12 -9
  56. package/src/dev-server-plugin/plugin.ts +140 -99
  57. package/src/global.d.ts +0 -2
  58. package/src/index.ts +1 -5
  59. package/src/load-env-plugin/plugin.ts +6 -11
  60. package/src/output-directory.ts +18 -0
  61. package/src/plugin.ts +160 -98
  62. package/src/post-server-build.ts +73 -0
  63. package/src/{nitro-plugin/prerender.ts → prerender.ts} +93 -86
  64. package/src/resolve-entries.ts +52 -0
  65. package/src/schema.ts +88 -121
  66. package/src/start-manifest-plugin/plugin.ts +8 -14
  67. package/dist/cjs/compilers.cjs +0 -416
  68. package/dist/cjs/compilers.cjs.map +0 -1
  69. package/dist/cjs/compilers.d.cts +0 -21
  70. package/dist/cjs/constants.cjs +0 -20
  71. package/dist/cjs/constants.cjs.map +0 -1
  72. package/dist/cjs/constants.d.cts +0 -6
  73. package/dist/cjs/debug.cjs +0 -5
  74. package/dist/cjs/debug.cjs.map +0 -1
  75. package/dist/cjs/debug.d.cts +0 -1
  76. package/dist/cjs/dev-server-plugin/extract-html-scripts.cjs +0 -35
  77. package/dist/cjs/dev-server-plugin/extract-html-scripts.cjs.map +0 -1
  78. package/dist/cjs/dev-server-plugin/extract-html-scripts.d.cts +0 -4
  79. package/dist/cjs/dev-server-plugin/plugin.cjs +0 -121
  80. package/dist/cjs/dev-server-plugin/plugin.cjs.map +0 -1
  81. package/dist/cjs/dev-server-plugin/plugin.d.cts +0 -5
  82. package/dist/cjs/index.cjs +0 -11
  83. package/dist/cjs/index.cjs.map +0 -1
  84. package/dist/cjs/index.d.cts +0 -3
  85. package/dist/cjs/load-env-plugin/plugin.cjs +0 -34
  86. package/dist/cjs/load-env-plugin/plugin.cjs.map +0 -1
  87. package/dist/cjs/load-env-plugin/plugin.d.cts +0 -3
  88. package/dist/cjs/nitro-plugin/build-sitemap.cjs +0 -138
  89. package/dist/cjs/nitro-plugin/build-sitemap.cjs.map +0 -1
  90. package/dist/cjs/nitro-plugin/build-sitemap.d.cts +0 -31
  91. package/dist/cjs/nitro-plugin/plugin.cjs +0 -187
  92. package/dist/cjs/nitro-plugin/plugin.cjs.map +0 -1
  93. package/dist/cjs/nitro-plugin/plugin.d.cts +0 -3
  94. package/dist/cjs/nitro-plugin/prerender.cjs +0 -178
  95. package/dist/cjs/nitro-plugin/prerender.cjs.map +0 -1
  96. package/dist/cjs/nitro-plugin/prerender.d.cts +0 -8
  97. package/dist/cjs/nitro-plugin/queue.cjs +0 -131
  98. package/dist/cjs/nitro-plugin/queue.cjs.map +0 -1
  99. package/dist/cjs/nitro-plugin/queue.d.cts +0 -32
  100. package/dist/cjs/plugin.cjs +0 -227
  101. package/dist/cjs/plugin.cjs.map +0 -1
  102. package/dist/cjs/plugin.d.cts +0 -300
  103. package/dist/cjs/resolve-virtual-entries-plugin/plugin.cjs +0 -80
  104. package/dist/cjs/resolve-virtual-entries-plugin/plugin.cjs.map +0 -1
  105. package/dist/cjs/resolve-virtual-entries-plugin/plugin.d.cts +0 -3
  106. package/dist/cjs/schema.cjs +0 -158
  107. package/dist/cjs/schema.cjs.map +0 -1
  108. package/dist/cjs/schema.d.cts +0 -8878
  109. package/dist/cjs/start-compiler-plugin.cjs +0 -78
  110. package/dist/cjs/start-compiler-plugin.cjs.map +0 -1
  111. package/dist/cjs/start-compiler-plugin.d.cts +0 -13
  112. package/dist/cjs/start-manifest-plugin/plugin.cjs +0 -182
  113. package/dist/cjs/start-manifest-plugin/plugin.cjs.map +0 -1
  114. package/dist/cjs/start-manifest-plugin/plugin.d.cts +0 -6
  115. package/dist/cjs/start-router-plugin/generator-plugins/routes-manifest-plugin.cjs +0 -39
  116. package/dist/cjs/start-router-plugin/generator-plugins/routes-manifest-plugin.cjs.map +0 -1
  117. package/dist/cjs/start-router-plugin/generator-plugins/routes-manifest-plugin.d.cts +0 -6
  118. package/dist/cjs/start-router-plugin/generator-plugins/server-routes-plugin.cjs +0 -121
  119. package/dist/cjs/start-router-plugin/generator-plugins/server-routes-plugin.cjs.map +0 -1
  120. package/dist/cjs/start-router-plugin/generator-plugins/server-routes-plugin.d.cts +0 -2
  121. package/dist/cjs/start-router-plugin/plugin.cjs +0 -45
  122. package/dist/cjs/start-router-plugin/plugin.cjs.map +0 -1
  123. package/dist/cjs/start-router-plugin/plugin.d.cts +0 -3
  124. package/dist/cjs/start-router-plugin/route-tree-client-plugin.cjs +0 -73
  125. package/dist/cjs/start-router-plugin/route-tree-client-plugin.cjs.map +0 -1
  126. package/dist/cjs/start-router-plugin/route-tree-client-plugin.d.cts +0 -6
  127. package/dist/cjs/start-router-plugin/virtual-route-tree-plugin.cjs +0 -29
  128. package/dist/cjs/start-router-plugin/virtual-route-tree-plugin.cjs.map +0 -1
  129. package/dist/cjs/start-router-plugin/virtual-route-tree-plugin.d.cts +0 -3
  130. package/dist/cjs/utils.cjs +0 -18
  131. package/dist/cjs/utils.cjs.map +0 -1
  132. package/dist/cjs/utils.d.cts +0 -8
  133. package/dist/esm/nitro-plugin/build-sitemap.js.map +0 -1
  134. package/dist/esm/nitro-plugin/plugin.d.ts +0 -3
  135. package/dist/esm/nitro-plugin/plugin.js +0 -187
  136. package/dist/esm/nitro-plugin/plugin.js.map +0 -1
  137. package/dist/esm/nitro-plugin/prerender.d.ts +0 -8
  138. package/dist/esm/nitro-plugin/prerender.js.map +0 -1
  139. package/dist/esm/nitro-plugin/queue.js.map +0 -1
  140. package/dist/esm/resolve-virtual-entries-plugin/plugin.d.ts +0 -3
  141. package/dist/esm/resolve-virtual-entries-plugin/plugin.js +0 -63
  142. package/dist/esm/resolve-virtual-entries-plugin/plugin.js.map +0 -1
  143. package/src/nitro-plugin/plugin.ts +0 -252
  144. package/src/resolve-virtual-entries-plugin/plugin.ts +0 -77
  145. /package/dist/esm/{nitro-plugin/queue.d.ts → queue.d.ts} +0 -0
  146. /package/src/{nitro-plugin/queue.ts → queue.ts} +0 -0
@@ -1,81 +1,97 @@
1
- import { createEvent, sendWebResponse, getHeader } from "h3";
2
1
  import { isRunnableDevEnvironment } from "vite";
3
- import { VITE_ENVIRONMENT_NAMES } from "../constants.js";
2
+ import { VIRTUAL_MODULES } from "@tanstack/start-server-core";
3
+ import { NodeRequest, sendNodeResponse } from "srvx/node";
4
+ import { VITE_ENVIRONMENT_NAMES, ENTRY_POINTS } from "../constants.js";
5
+ import { resolveViteId } from "../utils.js";
4
6
  import { extractHtmlScripts } from "./extract-html-scripts.js";
5
- function devServerPlugin() {
7
+ function devServerPlugin({
8
+ startConfig
9
+ }) {
6
10
  let isTest = false;
7
- return {
8
- name: "start-dev-ssr-plugin",
9
- config(userConfig, { mode }) {
10
- isTest = isTest ? isTest : mode === "test";
11
- userConfig.appType = "custom";
12
- },
13
- async configureServer(viteDevServer) {
14
- if (isTest) {
15
- return;
16
- }
17
- const templateHtml = `<html><head></head><body></body></html>`;
18
- const transformedHtml = await viteDevServer.transformIndexHtml(
19
- "/",
20
- templateHtml
21
- );
22
- const scripts = extractHtmlScripts(transformedHtml);
23
- globalThis.TSS_INJECTED_HEAD_SCRIPTS = scripts.map((script) => script.content ?? "").join(";");
24
- return () => {
25
- if (viteDevServer.config.server.middlewareMode) {
11
+ let injectedHeadScripts;
12
+ return [
13
+ {
14
+ name: "tanstack-start-core:dev-server",
15
+ config(_userConfig, { mode }) {
16
+ isTest = isTest ? isTest : mode === "test";
17
+ },
18
+ async configureServer(viteDevServer) {
19
+ if (isTest) {
26
20
  return;
27
21
  }
28
- viteDevServer.middlewares.use(async (req, res, next) => {
29
- var _a;
30
- if (req.originalUrl) {
31
- req.url = req.originalUrl;
32
- }
33
- const event = createEvent(req, res);
22
+ const templateHtml = `<html><head></head><body></body></html>`;
23
+ const transformedHtml = await viteDevServer.transformIndexHtml(
24
+ "/",
25
+ templateHtml
26
+ );
27
+ const scripts = extractHtmlScripts(transformedHtml);
28
+ injectedHeadScripts = scripts.flatMap((script) => script.content ?? []).join(";");
29
+ return () => {
34
30
  const serverEnv = viteDevServer.environments[VITE_ENVIRONMENT_NAMES.server];
35
- try {
36
- if (!serverEnv) {
37
- throw new Error(
38
- `Server environment ${VITE_ENVIRONMENT_NAMES.server} not found`
39
- );
31
+ if (!serverEnv) {
32
+ throw new Error(
33
+ `Server environment ${VITE_ENVIRONMENT_NAMES.server} not found`
34
+ );
35
+ }
36
+ const installMiddleware = startConfig.vite?.installDevServerMiddleware;
37
+ if (installMiddleware === false) {
38
+ return;
39
+ }
40
+ if (installMiddleware == void 0) {
41
+ if (viteDevServer.config.server.middlewareMode) {
42
+ return;
40
43
  }
41
- if (!isRunnableDevEnvironment(serverEnv)) {
42
- return next();
44
+ if (!isRunnableDevEnvironment(serverEnv) || // do not check via `isFetchableDevEnvironment` since nitro does implement the `FetchableDevEnvironment` interface but not via inheritance (which this helper checks)
45
+ "dispatchFetch" in serverEnv) {
46
+ return;
43
47
  }
44
- const serverEntry = await serverEnv.runner.import(
45
- "/~start/server-entry"
48
+ }
49
+ if (!isRunnableDevEnvironment(serverEnv)) {
50
+ throw new Error(
51
+ "cannot install vite dev server middleware for TanStack Start since the SSR environment is not a RunnableDevEnvironment"
46
52
  );
47
- const response = await serverEntry["default"](event);
48
- return sendWebResponse(event, response);
49
- } catch (e) {
50
- console.error(e);
51
- viteDevServer.ssrFixStacktrace(e);
52
- if ((_a = getHeader(event, "content-type")) == null ? void 0 : _a.includes("application/json")) {
53
- return sendWebResponse(
54
- event,
55
- new Response(
56
- JSON.stringify(
53
+ }
54
+ viteDevServer.middlewares.use(async (req, res) => {
55
+ if (req.originalUrl) {
56
+ req.url = req.originalUrl;
57
+ }
58
+ const webReq = new NodeRequest({ req, res });
59
+ try {
60
+ const serverEntry = await serverEnv.runner.import(
61
+ ENTRY_POINTS.server
62
+ );
63
+ const webRes = await serverEntry["default"].fetch(webReq);
64
+ return sendNodeResponse(res, webRes);
65
+ } catch (e) {
66
+ console.error(e);
67
+ viteDevServer.ssrFixStacktrace(e);
68
+ if (webReq.headers.get("content-type")?.includes("application/json")) {
69
+ return sendNodeResponse(
70
+ res,
71
+ new Response(
72
+ JSON.stringify(
73
+ {
74
+ status: 500,
75
+ error: "Internal Server Error",
76
+ message: "An unexpected error occurred. Please try again later.",
77
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
78
+ },
79
+ null,
80
+ 2
81
+ ),
57
82
  {
58
83
  status: 500,
59
- error: "Internal Server Error",
60
- message: "An unexpected error occurred. Please try again later.",
61
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
62
- },
63
- null,
64
- 2
65
- ),
66
- {
67
- status: 500,
68
- headers: {
69
- "Content-Type": "application/json"
84
+ headers: {
85
+ "Content-Type": "application/json"
86
+ }
70
87
  }
71
- }
72
- )
73
- );
74
- }
75
- return sendWebResponse(
76
- event,
77
- new Response(
78
- `
88
+ )
89
+ );
90
+ }
91
+ return sendNodeResponse(
92
+ res,
93
+ new Response(
94
+ `
79
95
  <!DOCTYPE html>
80
96
  <html lang="en">
81
97
  <head>
@@ -84,27 +100,49 @@ function devServerPlugin() {
84
100
  <script type="module">
85
101
  import { ErrorOverlay } from '/@vite/client'
86
102
  document.body.appendChild(new ErrorOverlay(${JSON.stringify(
87
- prepareError(req, e)
88
- ).replace(/</g, "\\u003c")}))
103
+ prepareError(req, e)
104
+ ).replace(/</g, "\\u003c")}))
89
105
  <\/script>
90
106
  </head>
91
107
  <body>
92
108
  </body>
93
109
  </html>
94
110
  `,
95
- {
96
- status: 500,
97
- headers: {
98
- "Content-Type": "text/html"
111
+ {
112
+ status: 500,
113
+ headers: {
114
+ "Content-Type": "text/html"
115
+ }
99
116
  }
100
- }
101
- )
102
- );
103
- }
104
- });
105
- };
117
+ )
118
+ );
119
+ }
120
+ });
121
+ };
122
+ }
123
+ },
124
+ {
125
+ name: "tanstack-start-core:dev-server:injected-head-scripts",
126
+ sharedDuringBuild: true,
127
+ applyToEnvironment: (env) => env.config.consumer === "server",
128
+ resolveId: {
129
+ filter: { id: new RegExp(VIRTUAL_MODULES.injectedHeadScripts) },
130
+ handler(_id) {
131
+ return resolveViteId(VIRTUAL_MODULES.injectedHeadScripts);
132
+ }
133
+ },
134
+ load: {
135
+ filter: {
136
+ id: new RegExp(resolveViteId(VIRTUAL_MODULES.injectedHeadScripts))
137
+ },
138
+ handler() {
139
+ const mod = `
140
+ export const injectedHeadScripts = ${JSON.stringify(injectedHeadScripts) || "undefined"}`;
141
+ return mod;
142
+ }
143
+ }
106
144
  }
107
- };
145
+ ];
108
146
  }
109
147
  function prepareError(req, error) {
110
148
  const e = error;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../src/dev-server-plugin/plugin.ts"],"sourcesContent":["import { createEvent, getHeader, sendWebResponse } from 'h3'\nimport { isRunnableDevEnvironment } from 'vite'\nimport { VITE_ENVIRONMENT_NAMES } from '../constants'\nimport { extractHtmlScripts } from './extract-html-scripts'\nimport type { Connect, DevEnvironment, Plugin } from 'vite'\n\n/* eslint-disable no-var */\ndeclare global {\n var TSS_INJECTED_HEAD_SCRIPTS: string | undefined\n}\n\nexport function devServerPlugin(): Plugin {\n // let config: UserConfig\n let isTest = false\n\n return {\n name: 'start-dev-ssr-plugin',\n config(userConfig, { mode }) {\n // config = userConfig\n isTest = isTest ? isTest : mode === 'test'\n // see https://vite.dev/config/shared-options.html#apptype\n // this will prevent vite from injecting middlewares that we don't want\n userConfig.appType = 'custom'\n },\n async configureServer(viteDevServer) {\n if (isTest) {\n return\n }\n\n // Extract the scripts that Vite plugins would inject into the initial HTML\n const templateHtml = `<html><head></head><body></body></html>`\n const transformedHtml = await viteDevServer.transformIndexHtml(\n '/',\n templateHtml,\n )\n const scripts = extractHtmlScripts(transformedHtml)\n globalThis.TSS_INJECTED_HEAD_SCRIPTS = scripts\n .map((script) => script.content ?? '')\n .join(';')\n\n return () => {\n // do not install middleware in middlewareMode\n if (viteDevServer.config.server.middlewareMode) {\n return\n }\n viteDevServer.middlewares.use(async (req, res, next) => {\n // Create an H3Event to have it passed into the server entry\n // i.e: event => defineEventHandler(event)\n\n // fix the request URL to match the original URL\n // otherwise, the request URL will '/index.html'\n if (req.originalUrl) {\n req.url = req.originalUrl\n }\n const event = createEvent(req, res)\n\n const serverEnv = viteDevServer.environments[\n VITE_ENVIRONMENT_NAMES.server\n ] as DevEnvironment | undefined\n\n try {\n if (!serverEnv) {\n throw new Error(\n `Server environment ${VITE_ENVIRONMENT_NAMES.server} not found`,\n )\n }\n\n if (!isRunnableDevEnvironment(serverEnv)) {\n return next()\n }\n\n // Import and resolve the request by running the server entry point\n // i.e export default defineEventHandler((event) => { ... })\n const serverEntry = await serverEnv.runner.import(\n '/~start/server-entry',\n )\n const response = await serverEntry['default'](event)\n\n return sendWebResponse(event, response)\n } catch (e) {\n console.error(e)\n viteDevServer.ssrFixStacktrace(e as Error)\n\n if (\n getHeader(event, 'content-type')?.includes('application/json')\n ) {\n return sendWebResponse(\n event,\n new Response(\n JSON.stringify(\n {\n status: 500,\n error: 'Internal Server Error',\n message:\n 'An unexpected error occurred. Please try again later.',\n timestamp: new Date().toISOString(),\n },\n null,\n 2,\n ),\n {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n ),\n )\n }\n\n return sendWebResponse(\n event,\n new Response(\n `\n <!DOCTYPE html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Error</title>\n <script type=\"module\">\n import { ErrorOverlay } from '/@vite/client'\n document.body.appendChild(new ErrorOverlay(${JSON.stringify(\n prepareError(req, e),\n ).replace(/</g, '\\\\u003c')}))\n </script>\n </head>\n <body>\n </body>\n </html>\n `,\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n },\n ),\n )\n }\n })\n }\n },\n }\n}\n\n/**\n * Formats error for SSR message in error overlay\n * @param req\n * @param error\n * @returns\n */\nfunction prepareError(req: Connect.IncomingMessage, error: unknown) {\n const e = error as Error\n return {\n message: `An error occured while server rendering ${req.url}:\\n\\n\\t${\n typeof e === 'string' ? e : e.message\n } `,\n stack: typeof e === 'string' ? '' : e.stack,\n }\n}\n"],"names":[],"mappings":";;;;AAWO,SAAS,kBAA0B;AAExC,MAAI,SAAS;AAEN,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO,YAAY,EAAE,QAAQ;AAElB,eAAA,SAAS,SAAS,SAAS;AAGpC,iBAAW,UAAU;AAAA,IACvB;AAAA,IACA,MAAM,gBAAgB,eAAe;AACnC,UAAI,QAAQ;AACV;AAAA,MAAA;AAIF,YAAM,eAAe;AACf,YAAA,kBAAkB,MAAM,cAAc;AAAA,QAC1C;AAAA,QACA;AAAA,MACF;AACM,YAAA,UAAU,mBAAmB,eAAe;AACvC,iBAAA,4BAA4B,QACpC,IAAI,CAAC,WAAW,OAAO,WAAW,EAAE,EACpC,KAAK,GAAG;AAEX,aAAO,MAAM;AAEP,YAAA,cAAc,OAAO,OAAO,gBAAgB;AAC9C;AAAA,QAAA;AAEF,sBAAc,YAAY,IAAI,OAAO,KAAK,KAAK,SAAS;;AAMtD,cAAI,IAAI,aAAa;AACnB,gBAAI,MAAM,IAAI;AAAA,UAAA;AAEV,gBAAA,QAAQ,YAAY,KAAK,GAAG;AAElC,gBAAM,YAAY,cAAc,aAC9B,uBAAuB,MACzB;AAEI,cAAA;AACF,gBAAI,CAAC,WAAW;AACd,oBAAM,IAAI;AAAA,gBACR,sBAAsB,uBAAuB,MAAM;AAAA,cACrD;AAAA,YAAA;AAGE,gBAAA,CAAC,yBAAyB,SAAS,GAAG;AACxC,qBAAO,KAAK;AAAA,YAAA;AAKR,kBAAA,cAAc,MAAM,UAAU,OAAO;AAAA,cACzC;AAAA,YACF;AACA,kBAAM,WAAW,MAAM,YAAY,SAAS,EAAE,KAAK;AAE5C,mBAAA,gBAAgB,OAAO,QAAQ;AAAA,mBAC/B,GAAG;AACV,oBAAQ,MAAM,CAAC;AACf,0BAAc,iBAAiB,CAAU;AAEzC,iBACE,eAAU,OAAO,cAAc,MAA/B,mBAAkC,SAAS,qBAC3C;AACO,qBAAA;AAAA,gBACL;AAAA,gBACA,IAAI;AAAA,kBACF,KAAK;AAAA,oBACH;AAAA,sBACE,QAAQ;AAAA,sBACR,OAAO;AAAA,sBACP,SACE;AAAA,sBACF,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,oBACpC;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,QAAQ;AAAA,oBACR,SAAS;AAAA,sBACP,gBAAgB;AAAA,oBAAA;AAAA,kBAClB;AAAA,gBACF;AAAA,cAEJ;AAAA,YAAA;AAGK,mBAAA;AAAA,cACL;AAAA,cACA,IAAI;AAAA,gBACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iEAQiD,KAAK;AAAA,kBAChD,aAAa,KAAK,CAAC;AAAA,gBAAA,EACnB,QAAQ,MAAM,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAO9B;AAAA,kBACE,QAAQ;AAAA,kBACR,SAAS;AAAA,oBACP,gBAAgB;AAAA,kBAAA;AAAA,gBAClB;AAAA,cACF;AAAA,YAEJ;AAAA,UAAA;AAAA,QACF,CACD;AAAA,MACH;AAAA,IAAA;AAAA,EAEJ;AACF;AAQA,SAAS,aAAa,KAA8B,OAAgB;AAClE,QAAM,IAAI;AACH,SAAA;AAAA,IACL,SAAS,2CAA2C,IAAI,GAAG;AAAA;AAAA,GACzD,OAAO,MAAM,WAAW,IAAI,EAAE,OAChC;AAAA,IACA,OAAO,OAAO,MAAM,WAAW,KAAK,EAAE;AAAA,EACxC;AACF;"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../src/dev-server-plugin/plugin.ts"],"sourcesContent":["import { isRunnableDevEnvironment } from 'vite'\nimport { VIRTUAL_MODULES } from '@tanstack/start-server-core'\nimport { NodeRequest, sendNodeResponse } from 'srvx/node'\nimport { ENTRY_POINTS, VITE_ENVIRONMENT_NAMES } from '../constants'\nimport { resolveViteId } from '../utils'\nimport { extractHtmlScripts } from './extract-html-scripts'\nimport type { Connect, DevEnvironment, PluginOption } from 'vite'\nimport type { TanStackStartOutputConfig } from '../schema'\n\nexport function devServerPlugin({\n startConfig,\n}: {\n startConfig: TanStackStartOutputConfig\n}): PluginOption {\n let isTest = false\n\n let injectedHeadScripts: string | undefined\n\n return [\n {\n name: 'tanstack-start-core:dev-server',\n config(_userConfig, { mode }) {\n isTest = isTest ? isTest : mode === 'test'\n },\n async configureServer(viteDevServer) {\n if (isTest) {\n return\n }\n\n // Extract the scripts that Vite plugins would inject into the initial HTML\n const templateHtml = `<html><head></head><body></body></html>`\n const transformedHtml = await viteDevServer.transformIndexHtml(\n '/',\n templateHtml,\n )\n const scripts = extractHtmlScripts(transformedHtml)\n injectedHeadScripts = scripts\n .flatMap((script) => script.content ?? [])\n .join(';')\n\n return () => {\n const serverEnv = viteDevServer.environments[\n VITE_ENVIRONMENT_NAMES.server\n ] as DevEnvironment | undefined\n\n if (!serverEnv) {\n throw new Error(\n `Server environment ${VITE_ENVIRONMENT_NAMES.server} not found`,\n )\n }\n const installMiddleware = startConfig.vite?.installDevServerMiddleware\n if (installMiddleware === false) {\n return\n }\n if (installMiddleware == undefined) {\n // do not install middleware in middlewareMode by default\n if (viteDevServer.config.server.middlewareMode) {\n return\n }\n\n // do not install middleware if SSR env in case another plugin already did\n if (\n !isRunnableDevEnvironment(serverEnv) ||\n // do not check via `isFetchableDevEnvironment` since nitro does implement the `FetchableDevEnvironment` interface but not via inheritance (which this helper checks)\n 'dispatchFetch' in serverEnv\n ) {\n return\n }\n }\n\n if (!isRunnableDevEnvironment(serverEnv)) {\n throw new Error(\n 'cannot install vite dev server middleware for TanStack Start since the SSR environment is not a RunnableDevEnvironment',\n )\n }\n\n viteDevServer.middlewares.use(async (req, res) => {\n // fix the request URL to match the original URL\n // otherwise, the request URL will '/index.html'\n if (req.originalUrl) {\n req.url = req.originalUrl\n }\n const webReq = new NodeRequest({ req, res })\n\n try {\n // Import and resolve the request by running the server request entry point\n // this request entry point must implement the `fetch` API as follows:\n /**\n * export default {\n * fetch(req: Request): Promise<Response>\n * }\n */\n const serverEntry = await serverEnv.runner.import(\n ENTRY_POINTS.server,\n )\n const webRes = await serverEntry['default'].fetch(webReq)\n\n return sendNodeResponse(res, webRes)\n } catch (e) {\n console.error(e)\n viteDevServer.ssrFixStacktrace(e as Error)\n\n if (\n webReq.headers.get('content-type')?.includes('application/json')\n ) {\n return sendNodeResponse(\n res,\n new Response(\n JSON.stringify(\n {\n status: 500,\n error: 'Internal Server Error',\n message:\n 'An unexpected error occurred. Please try again later.',\n timestamp: new Date().toISOString(),\n },\n null,\n 2,\n ),\n {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n ),\n )\n }\n\n return sendNodeResponse(\n res,\n new Response(\n `\n <!DOCTYPE html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Error</title>\n <script type=\"module\">\n import { ErrorOverlay } from '/@vite/client'\n document.body.appendChild(new ErrorOverlay(${JSON.stringify(\n prepareError(req, e),\n ).replace(/</g, '\\\\u003c')}))\n </script>\n </head>\n <body>\n </body>\n </html>\n `,\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/html',\n },\n },\n ),\n )\n }\n })\n }\n },\n },\n {\n name: 'tanstack-start-core:dev-server:injected-head-scripts',\n sharedDuringBuild: true,\n applyToEnvironment: (env) => env.config.consumer === 'server',\n resolveId: {\n filter: { id: new RegExp(VIRTUAL_MODULES.injectedHeadScripts) },\n handler(_id) {\n return resolveViteId(VIRTUAL_MODULES.injectedHeadScripts)\n },\n },\n load: {\n filter: {\n id: new RegExp(resolveViteId(VIRTUAL_MODULES.injectedHeadScripts)),\n },\n handler() {\n const mod = `\n export const injectedHeadScripts = ${JSON.stringify(injectedHeadScripts) || 'undefined'}`\n return mod\n },\n },\n },\n ]\n}\n\n/**\n * Formats error for SSR message in error overlay\n * @param req\n * @param error\n * @returns\n */\nfunction prepareError(req: Connect.IncomingMessage, error: unknown) {\n const e = error as Error\n return {\n message: `An error occured while server rendering ${req.url}:\\n\\n\\t${\n typeof e === 'string' ? e : e.message\n } `,\n stack: typeof e === 'string' ? '' : e.stack,\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export { createTanStackConfig, createTanStackStartOptionsSchema, pageSchema, } from './schema.js';
1
+ export type { TanStackStartInputConfig } from './schema.js';
2
2
  export { TanStackStartVitePluginCore } from './plugin.js';
3
3
  export { resolveViteId } from './utils.js';
package/dist/esm/index.js CHANGED
@@ -1,11 +1,7 @@
1
- import { createTanStackConfig, createTanStackStartOptionsSchema, pageSchema } from "./schema.js";
2
1
  import { TanStackStartVitePluginCore } from "./plugin.js";
3
2
  import { resolveViteId } from "./utils.js";
4
3
  export {
5
4
  TanStackStartVitePluginCore,
6
- createTanStackConfig,
7
- createTanStackStartOptionsSchema,
8
- pageSchema,
9
5
  resolveViteId
10
6
  };
11
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1,3 +1,2 @@
1
- import { TanStackStartOutputConfig } from '../plugin.js';
2
- import * as vite from 'vite';
3
- export declare function loadEnvPlugin(startOpts: TanStackStartOutputConfig): vite.Plugin;
1
+ import { Plugin } from 'vite';
2
+ export declare function loadEnvPlugin(): Plugin;
@@ -1,13 +1,10 @@
1
- import * as vite from "vite";
2
- function loadEnvPlugin(startOpts) {
1
+ import { loadEnv } from "vite";
2
+ function loadEnvPlugin() {
3
3
  return {
4
- name: "tanstack-vite-plugin-nitro-load-env",
4
+ name: "tanstack-start-core:load-env",
5
5
  enforce: "pre",
6
- config(userConfig, envConfig) {
7
- Object.assign(
8
- process.env,
9
- vite.loadEnv(envConfig.mode, userConfig.root ?? startOpts.root, "")
10
- );
6
+ configResolved(config) {
7
+ Object.assign(process.env, loadEnv(config.mode, config.root));
11
8
  }
12
9
  };
13
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../src/load-env-plugin/plugin.ts"],"sourcesContent":["import * as vite from 'vite'\nimport type { TanStackStartOutputConfig } from '../plugin'\n\nexport function loadEnvPlugin(\n startOpts: TanStackStartOutputConfig,\n): vite.Plugin {\n return {\n name: 'tanstack-vite-plugin-nitro-load-env',\n enforce: 'pre',\n config(userConfig, envConfig) {\n Object.assign(\n process.env,\n vite.loadEnv(envConfig.mode, userConfig.root ?? startOpts.root, ''),\n )\n },\n }\n}\n"],"names":[],"mappings":";AAGO,SAAS,cACd,WACa;AACN,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO,YAAY,WAAW;AACrB,aAAA;AAAA,QACL,QAAQ;AAAA,QACR,KAAK,QAAQ,UAAU,MAAM,WAAW,QAAQ,UAAU,MAAM,EAAE;AAAA,MACpE;AAAA,IAAA;AAAA,EAEJ;AACF;"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../src/load-env-plugin/plugin.ts"],"sourcesContent":["import { loadEnv } from 'vite'\nimport type { Plugin } from 'vite'\n\nexport function loadEnvPlugin(): Plugin {\n return {\n name: 'tanstack-start-core:load-env',\n enforce: 'pre',\n configResolved(config) {\n Object.assign(process.env, loadEnv(config.mode, config.root))\n },\n }\n}\n"],"names":[],"mappings":";AAGO,SAAS,gBAAwB;AACtC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,QAAQ;AACrB,aAAO,OAAO,QAAQ,KAAK,QAAQ,OAAO,MAAM,OAAO,IAAI,CAAC;AAAA,IAC9D;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,3 @@
1
+ import type * as vite from 'vite';
2
+ export declare function getClientOutputDirectory(userConfig: vite.UserConfig): string;
3
+ export declare function getServerOutputDirectory(userConfig: vite.UserConfig): string;
@@ -0,0 +1,14 @@
1
+ import { join } from "pathe";
2
+ import { VITE_ENVIRONMENT_NAMES } from "./constants.js";
3
+ function getClientOutputDirectory(userConfig) {
4
+ return userConfig.environments?.[VITE_ENVIRONMENT_NAMES.client]?.build?.outDir ?? join(getServerOutputDirectory(userConfig), "public");
5
+ }
6
+ function getServerOutputDirectory(userConfig) {
7
+ const rootOutputDirectory = userConfig.build?.outDir ?? "dist";
8
+ return userConfig.environments?.[VITE_ENVIRONMENT_NAMES.server]?.build?.outDir ?? rootOutputDirectory;
9
+ }
10
+ export {
11
+ getClientOutputDirectory,
12
+ getServerOutputDirectory
13
+ };
14
+ //# sourceMappingURL=output-directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-directory.js","sources":["../../src/output-directory.ts"],"sourcesContent":["import { join } from 'pathe'\nimport { VITE_ENVIRONMENT_NAMES } from './constants'\nimport type * as vite from 'vite'\n\nexport function getClientOutputDirectory(userConfig: vite.UserConfig) {\n return (\n userConfig.environments?.[VITE_ENVIRONMENT_NAMES.client]?.build?.outDir ??\n join(getServerOutputDirectory(userConfig), 'public')\n )\n}\n\nexport function getServerOutputDirectory(userConfig: vite.UserConfig) {\n const rootOutputDirectory = userConfig.build?.outDir ?? 'dist'\n return (\n userConfig.environments?.[VITE_ENVIRONMENT_NAMES.server]?.build?.outDir ??\n rootOutputDirectory\n )\n}\n"],"names":[],"mappings":";;AAIO,SAAS,yBAAyB,YAA6B;AACpE,SACE,WAAW,eAAe,uBAAuB,MAAM,GAAG,OAAO,UACjE,KAAK,yBAAyB,UAAU,GAAG,QAAQ;AAEvD;AAEO,SAAS,yBAAyB,YAA6B;AACpE,QAAM,sBAAsB,WAAW,OAAO,UAAU;AACxD,SACE,WAAW,eAAe,uBAAuB,MAAM,GAAG,OAAO,UACjE;AAEJ;"}