@tanstack/start-plugin-core 1.120.4-alpha.9 → 1.121.0-alpha.2
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.
- package/dist/cjs/constants.cjs +10 -0
- package/dist/cjs/constants.cjs.map +1 -0
- package/dist/cjs/constants.d.cts +4 -0
- package/dist/cjs/index.cjs +0 -6
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +0 -5
- package/dist/cjs/nitro/dev-server-plugin.cjs +11 -3
- package/dist/cjs/nitro/dev-server-plugin.cjs.map +1 -1
- package/dist/cjs/nitro/nitro-plugin.cjs +35 -5
- package/dist/cjs/nitro/nitro-plugin.cjs.map +1 -1
- package/dist/cjs/plugin.cjs +82 -15
- package/dist/cjs/plugin.cjs.map +1 -1
- package/dist/cjs/plugin.d.cts +766 -147
- package/dist/cjs/prerender.cjs +19 -15
- package/dist/cjs/prerender.cjs.map +1 -1
- package/dist/cjs/schema.cjs +21 -2
- package/dist/cjs/schema.cjs.map +1 -1
- package/dist/cjs/schema.d.cts +2362 -601
- package/dist/esm/constants.d.ts +4 -0
- package/dist/esm/constants.js +10 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +0 -5
- package/dist/esm/index.js +0 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/nitro/dev-server-plugin.js +11 -3
- package/dist/esm/nitro/dev-server-plugin.js.map +1 -1
- package/dist/esm/nitro/nitro-plugin.js +35 -5
- package/dist/esm/nitro/nitro-plugin.js.map +1 -1
- package/dist/esm/plugin.d.ts +766 -147
- package/dist/esm/plugin.js +65 -15
- package/dist/esm/plugin.js.map +1 -1
- package/dist/esm/prerender.js +19 -15
- package/dist/esm/prerender.js.map +1 -1
- package/dist/esm/schema.d.ts +2362 -601
- package/dist/esm/schema.js +22 -3
- package/dist/esm/schema.js.map +1 -1
- package/package.json +6 -4
- package/src/constants.ts +6 -0
- package/src/index.ts +0 -8
- package/src/nitro/dev-server-plugin.ts +14 -4
- package/src/nitro/nitro-plugin.ts +42 -4
- package/src/plugin.ts +81 -15
- package/src/prerender.ts +26 -19
- package/src/schema.ts +26 -1
- package/dist/cjs/nitro/build-sitemap.cjs +0 -54
- package/dist/cjs/nitro/build-sitemap.cjs.map +0 -1
- package/dist/esm/nitro/build-sitemap.js +0 -54
- package/dist/esm/nitro/build-sitemap.js.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const VITE_ENVIRONMENT_NAMES = {
|
|
4
|
+
// 'ssr' is chosen as the name for the server environment to ensure backwards compatibility
|
|
5
|
+
// with vite plugins that are not compatible with the new vite environment API (e.g. tailwindcss)
|
|
6
|
+
server: "ssr",
|
|
7
|
+
client: "client"
|
|
8
|
+
};
|
|
9
|
+
exports.VITE_ENVIRONMENT_NAMES = VITE_ENVIRONMENT_NAMES;
|
|
10
|
+
//# sourceMappingURL=constants.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.cjs","sources":["../../src/constants.ts"],"sourcesContent":["export const VITE_ENVIRONMENT_NAMES = {\n // 'ssr' is chosen as the name for the server environment to ensure backwards compatibility\n // with vite plugins that are not compatible with the new vite environment API (e.g. tailwindcss)\n server: 'ssr',\n client: 'client',\n} as const\n"],"names":[],"mappings":";;AAAO,MAAM,yBAAyB;AAAA;AAAA;AAAA,EAGpC,QAAQ;AAAA,EACR,QAAQ;AACV;;"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const compilers = require("./compilers.cjs");
|
|
4
|
-
const buildSitemap = require("./nitro/build-sitemap.cjs");
|
|
5
3
|
const schema = require("./schema.cjs");
|
|
6
4
|
const plugin = require("./plugin.cjs");
|
|
7
|
-
const plugin$1 = require("./start-server-routes-plugin/plugin.cjs");
|
|
8
|
-
exports.compileStartOutputFactory = compilers.compileStartOutputFactory;
|
|
9
|
-
exports.buildSitemap = buildSitemap.buildSitemap;
|
|
10
5
|
exports.createTanStackConfig = schema.createTanStackConfig;
|
|
11
6
|
exports.createTanStackStartOptionsSchema = schema.createTanStackStartOptionsSchema;
|
|
12
7
|
exports.pageSchema = schema.pageSchema;
|
|
13
8
|
exports.TanStackStartVitePluginCore = plugin.TanStackStartVitePluginCore;
|
|
14
|
-
exports.TanStackStartServerRoutesVite = plugin$1.TanStackStartServerRoutesVite;
|
|
15
9
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
export type { CompileOptions, IdentifierConfig } from './compilers.cjs';
|
|
2
|
-
export { compileStartOutputFactory } from './compilers.cjs';
|
|
3
|
-
export type { PagesJson } from './nitro/build-sitemap.cjs';
|
|
4
|
-
export { buildSitemap } from './nitro/build-sitemap.cjs';
|
|
5
1
|
export { createTanStackConfig, createTanStackStartOptionsSchema, pageSchema, } from './schema.cjs';
|
|
6
2
|
export { TanStackStartVitePluginCore } from './plugin.cjs';
|
|
7
|
-
export { TanStackStartServerRoutesVite } from './start-server-routes-plugin/plugin.cjs';
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const h3 = require("h3");
|
|
4
4
|
const vite = require("vite");
|
|
5
5
|
const extractHtmlScripts = require("../extractHtmlScripts.cjs");
|
|
6
|
+
const constants = require("../constants.cjs");
|
|
6
7
|
function devServerPlugin() {
|
|
7
8
|
let isTest = false;
|
|
8
9
|
return {
|
|
@@ -21,10 +22,17 @@ function devServerPlugin() {
|
|
|
21
22
|
viteDevServer.middlewares.use(async (req, res) => {
|
|
22
23
|
var _a;
|
|
23
24
|
const event = h3.createEvent(req, res);
|
|
24
|
-
const serverEnv = viteDevServer.environments[
|
|
25
|
+
const serverEnv = viteDevServer.environments[constants.VITE_ENVIRONMENT_NAMES.server];
|
|
25
26
|
try {
|
|
26
|
-
if (!serverEnv
|
|
27
|
-
throw new Error(
|
|
27
|
+
if (!serverEnv) {
|
|
28
|
+
throw new Error(
|
|
29
|
+
`Server environment ${constants.VITE_ENVIRONMENT_NAMES.server} not found`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
if (!vite.isRunnableDevEnvironment(serverEnv)) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Expected server environment ${constants.VITE_ENVIRONMENT_NAMES.server} to be a RunnableDevEnvironment. This can be caused by multiple vite versions being installed in the project.`
|
|
35
|
+
);
|
|
28
36
|
}
|
|
29
37
|
if (cachedScripts === void 0) {
|
|
30
38
|
const templateHtml = `<html><head></head><body></body></html>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-server-plugin.cjs","sources":["../../../src/nitro/dev-server-plugin.ts"],"sourcesContent":["import { createEvent, getHeader, sendWebResponse } from 'h3'\nimport { isRunnableDevEnvironment } from 'vite'\nimport { extractHtmlScripts } from '../extractHtmlScripts'\nimport type { Connect, Plugin, ViteDevServer } from 'vite'\n\ndeclare global {\n // eslint-disable-next-line no-var\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 },\n configureServer(viteDevServer) {\n if (isTest) {\n return\n }\n\n ;(globalThis as any).viteDevServer = viteDevServer\n\n return () => {\n remove_html_middlewares(viteDevServer.middlewares)\n let cachedScripts: string | undefined\n viteDevServer.middlewares.use(async (req, res) => {\n const event = createEvent(req, res)\n const serverEnv = viteDevServer.environments[
|
|
1
|
+
{"version":3,"file":"dev-server-plugin.cjs","sources":["../../../src/nitro/dev-server-plugin.ts"],"sourcesContent":["import { createEvent, getHeader, sendWebResponse } from 'h3'\nimport { isRunnableDevEnvironment } from 'vite'\nimport { extractHtmlScripts } from '../extractHtmlScripts'\nimport { VITE_ENVIRONMENT_NAMES } from '../constants'\nimport type { Connect, DevEnvironment, Plugin, ViteDevServer } from 'vite'\n\ndeclare global {\n // eslint-disable-next-line no-var\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 },\n configureServer(viteDevServer) {\n if (isTest) {\n return\n }\n\n ;(globalThis as any).viteDevServer = viteDevServer\n\n return () => {\n remove_html_middlewares(viteDevServer.middlewares)\n let cachedScripts: string | undefined\n viteDevServer.middlewares.use(async (req, res) => {\n const event = createEvent(req, res)\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 if (!isRunnableDevEnvironment(serverEnv)) {\n throw new Error(\n `Expected server environment ${VITE_ENVIRONMENT_NAMES.server} to be a RunnableDevEnvironment. This can be caused by multiple vite versions being installed in the project.`,\n )\n }\n if (cachedScripts === undefined) {\n const templateHtml = `<html><head></head><body></body></html>`\n const transformedHtml = await viteDevServer.transformIndexHtml(\n req.url || '/',\n templateHtml,\n )\n const scripts = extractHtmlScripts(transformedHtml)\n globalThis.TSS_INJECTED_HEAD_SCRIPTS = scripts\n .map((script) => script.content ?? '')\n .join(';')\n }\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 * Removes Vite internal middleware\n *\n * @param server\n */\nfunction remove_html_middlewares(server: ViteDevServer['middlewares']) {\n const html_middlewares = [\n 'viteIndexHtmlMiddleware',\n 'vite404Middleware',\n 'viteSpaFallbackMiddleware',\n ]\n for (let i = server.stack.length - 1; i > 0; i--) {\n if (\n html_middlewares.includes(\n // @ts-expect-error\n server.stack[i].handle.name,\n )\n ) {\n server.stack.splice(i, 1)\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":["createEvent","VITE_ENVIRONMENT_NAMES","isRunnableDevEnvironment","extractHtmlScripts","sendWebResponse","getHeader"],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ const nitropack = require("nitropack");
|
|
|
6
6
|
const pathe = require("pathe");
|
|
7
7
|
const plugin = require("../plugin.cjs");
|
|
8
8
|
const prerender = require("../prerender.cjs");
|
|
9
|
+
const constants = require("../constants.cjs");
|
|
9
10
|
const devServerPlugin = require("./dev-server-plugin.cjs");
|
|
10
11
|
const buildNitro = require("./build-nitro.cjs");
|
|
11
12
|
function nitroPlugin(options, getSsrBundle) {
|
|
@@ -15,7 +16,7 @@ function nitroPlugin(options, getSsrBundle) {
|
|
|
15
16
|
{
|
|
16
17
|
name: "tanstack-vite-plugin-nitro",
|
|
17
18
|
configEnvironment(name) {
|
|
18
|
-
if (name ===
|
|
19
|
+
if (name === constants.VITE_ENVIRONMENT_NAMES.server) {
|
|
19
20
|
return {
|
|
20
21
|
build: {
|
|
21
22
|
commonjsOptions: {
|
|
@@ -36,9 +37,9 @@ function nitroPlugin(options, getSsrBundle) {
|
|
|
36
37
|
builder: {
|
|
37
38
|
sharedPlugins: true,
|
|
38
39
|
async buildApp(builder) {
|
|
39
|
-
var _a;
|
|
40
|
-
const clientEnv = builder.environments[
|
|
41
|
-
const serverEnv = builder.environments[
|
|
40
|
+
var _a, _b;
|
|
41
|
+
const clientEnv = builder.environments[constants.VITE_ENVIRONMENT_NAMES.client];
|
|
42
|
+
const serverEnv = builder.environments[constants.VITE_ENVIRONMENT_NAMES.server];
|
|
42
43
|
if (!clientEnv) {
|
|
43
44
|
throw new Error("Client environment not found");
|
|
44
45
|
}
|
|
@@ -71,7 +72,36 @@ function nitroPlugin(options, getSsrBundle) {
|
|
|
71
72
|
};
|
|
72
73
|
const nitro = await nitropack.createNitro(nitroConfig);
|
|
73
74
|
await buildNitro.buildNitroEnvironment(nitro, () => nitropack.build(nitro));
|
|
74
|
-
if ((_a = options.prerender) == null ? void 0 : _a.enabled) {
|
|
75
|
+
if (((_a = options.prerender) == null ? void 0 : _a.enabled) !== false) {
|
|
76
|
+
options.prerender = {
|
|
77
|
+
...options.prerender,
|
|
78
|
+
enabled: options.pages.some(
|
|
79
|
+
(d) => {
|
|
80
|
+
var _a2;
|
|
81
|
+
return typeof d === "string" ? false : !!((_a2 = d.prerender) == null ? void 0 : _a2.enabled);
|
|
82
|
+
}
|
|
83
|
+
)
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if ((_b = options.spa) == null ? void 0 : _b.enabled) {
|
|
87
|
+
options.prerender = {
|
|
88
|
+
...options.prerender,
|
|
89
|
+
enabled: true
|
|
90
|
+
};
|
|
91
|
+
const maskUrl = new URL(
|
|
92
|
+
options.spa.maskPath,
|
|
93
|
+
"http://localhost"
|
|
94
|
+
);
|
|
95
|
+
maskUrl.searchParams.set("__TSS_SHELL", "true");
|
|
96
|
+
options.pages.push({
|
|
97
|
+
path: maskUrl.toString().replace("http://localhost", ""),
|
|
98
|
+
prerender: options.spa.prerender,
|
|
99
|
+
sitemap: {
|
|
100
|
+
exclude: true
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (options.prerender.enabled) {
|
|
75
105
|
await prerender.prerender({
|
|
76
106
|
options,
|
|
77
107
|
nitro,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nitro-plugin.cjs","sources":["../../../src/nitro/nitro-plugin.ts"],"sourcesContent":["import path from 'node:path'\nimport { rmSync } from 'node:fs'\nimport { build, createNitro } from 'nitropack'\nimport { dirname, resolve } from 'pathe'\nimport { clientDistDir, ssrEntryFile } from '../plugin'\nimport { prerender } from '../prerender'\nimport { devServerPlugin } from './dev-server-plugin'\nimport { buildNitroEnvironment } from './build-nitro'\nimport type { EnvironmentOptions, PluginOption, Rollup } from 'vite'\nimport type { NitroConfig } from 'nitropack'\nimport type { TanStackStartOutputConfig } from '../plugin'\n\nexport function nitroPlugin(\n options: TanStackStartOutputConfig,\n getSsrBundle: () => Rollup.OutputBundle,\n): Array<PluginOption> {\n const buildPreset =\n process.env['START_TARGET'] ?? (options.target as string | undefined)\n\n return [\n devServerPlugin(),\n {\n name: 'tanstack-vite-plugin-nitro',\n configEnvironment(name) {\n if (name ===
|
|
1
|
+
{"version":3,"file":"nitro-plugin.cjs","sources":["../../../src/nitro/nitro-plugin.ts"],"sourcesContent":["import path from 'node:path'\nimport { rmSync } from 'node:fs'\nimport { build, createNitro } from 'nitropack'\nimport { dirname, resolve } from 'pathe'\nimport { clientDistDir, ssrEntryFile } from '../plugin'\nimport { prerender } from '../prerender'\nimport { VITE_ENVIRONMENT_NAMES } from '../constants'\nimport { devServerPlugin } from './dev-server-plugin'\nimport { buildNitroEnvironment } from './build-nitro'\nimport type { EnvironmentOptions, PluginOption, Rollup } from 'vite'\nimport type { NitroConfig } from 'nitropack'\nimport type { TanStackStartOutputConfig } from '../plugin'\n\nexport function nitroPlugin(\n options: TanStackStartOutputConfig,\n getSsrBundle: () => Rollup.OutputBundle,\n): Array<PluginOption> {\n const buildPreset =\n process.env['START_TARGET'] ?? (options.target as string | undefined)\n\n return [\n devServerPlugin(),\n {\n name: 'tanstack-vite-plugin-nitro',\n configEnvironment(name) {\n if (name === VITE_ENVIRONMENT_NAMES.server) {\n return {\n build: {\n commonjsOptions: {\n include: [],\n },\n ssr: true,\n sourcemap: true,\n rollupOptions: {\n input: '/~start/server-entry',\n },\n },\n } satisfies EnvironmentOptions\n }\n\n return null\n },\n config() {\n return {\n builder: {\n sharedPlugins: true,\n async buildApp(builder) {\n const clientEnv =\n builder.environments[VITE_ENVIRONMENT_NAMES.client]\n const serverEnv =\n builder.environments[VITE_ENVIRONMENT_NAMES.server]\n\n if (!clientEnv) {\n throw new Error('Client environment not found')\n }\n\n if (!serverEnv) {\n throw new Error('SSR environment not found')\n }\n\n const clientOutputDir = resolve(options.root, clientDistDir)\n rmSync(clientOutputDir, { recursive: true, force: true })\n await builder.build(clientEnv)\n\n await builder.build(serverEnv)\n\n const nitroConfig: NitroConfig = {\n dev: false,\n // TODO do we need this? should this be made configurable?\n compatibilityDate: '2024-11-19',\n logLevel: 3,\n preset: buildPreset,\n publicAssets: [\n {\n dir: path.resolve(options.root, clientDistDir),\n },\n ],\n typescript: {\n generateTsConfig: false,\n },\n prerender: undefined,\n renderer: ssrEntryFile,\n rollupConfig: {\n plugins: [virtualBundlePlugin(getSsrBundle())],\n },\n }\n\n const nitro = await createNitro(nitroConfig)\n\n await buildNitroEnvironment(nitro, () => build(nitro))\n\n // If the user has not set a prerender option, we need to set it to true\n // if the pages array is not empty and has sub options requiring for prerendering\n if (options.prerender?.enabled !== false) {\n options.prerender = {\n ...options.prerender,\n enabled: options.pages.some((d) =>\n typeof d === 'string' ? false : !!d.prerender?.enabled,\n ),\n }\n }\n\n // Setup the options for prerendering the SPA shell (i.e `src/routes/__root.tsx`)\n if (options.spa?.enabled) {\n options.prerender = {\n ...options.prerender,\n enabled: true,\n }\n\n const maskUrl = new URL(\n options.spa.maskPath,\n 'http://localhost',\n )\n\n maskUrl.searchParams.set('__TSS_SHELL', 'true')\n\n options.pages.push({\n path: maskUrl.toString().replace('http://localhost', ''),\n prerender: options.spa.prerender,\n sitemap: {\n exclude: true,\n },\n })\n }\n\n // Start prerendering!!!\n if (options.prerender.enabled) {\n await prerender({\n options,\n nitro,\n builder,\n })\n }\n\n // if (nitroConfig.prerender?.routes?.length && options.sitemap) {\n // console.log('Building Sitemap...')\n // // sitemap needs to be built after all directories are built\n // await buildSitemap({\n // host: options.sitemap.host,\n // routes: nitroConfig.prerender.routes,\n // outputDir: resolve(options.root, 'dist/public'),\n // })\n // }\n\n // console.log(\n // `\\n\\n✅ Client and server bundles successfully built.`,\n // )\n },\n },\n }\n },\n },\n ]\n}\n\nfunction virtualBundlePlugin(ssrBundle: Rollup.OutputBundle): Rollup.Plugin {\n type VirtualModule = { code: string; map: string | null }\n const _modules = new Map<string, VirtualModule>()\n\n // group chunks and source maps\n for (const [fileName, content] of Object.entries(ssrBundle)) {\n if (content.type === 'chunk') {\n const virtualModule: VirtualModule = {\n code: content.code,\n map: null,\n }\n const maybeMap = ssrBundle[`${fileName}.map`]\n if (maybeMap && maybeMap.type === 'asset') {\n virtualModule.map = maybeMap.source as string\n }\n _modules.set(fileName, virtualModule)\n _modules.set(resolve(fileName), virtualModule)\n }\n }\n\n return {\n name: 'virtual-bundle',\n resolveId(id, importer) {\n if (_modules.has(id)) {\n return resolve(id)\n }\n\n if (importer) {\n const resolved = resolve(dirname(importer), id)\n if (_modules.has(resolved)) {\n return resolved\n }\n }\n return null\n },\n load(id) {\n const m = _modules.get(id)\n if (!m) {\n return null\n }\n return m\n },\n }\n}\n"],"names":["devServerPlugin","VITE_ENVIRONMENT_NAMES","resolve","clientDistDir","rmSync","ssrEntryFile","createNitro","buildNitroEnvironment","build","_a","prerender","dirname"],"mappings":"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"}
|
package/dist/cjs/plugin.cjs
CHANGED
|
@@ -2,48 +2,85 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const path = require("node:path");
|
|
4
4
|
const nitropack = require("nitropack");
|
|
5
|
+
const vite = require("@tanstack/router-plugin/vite");
|
|
6
|
+
const serverFunctionsPlugin = require("@tanstack/server-functions-plugin");
|
|
7
|
+
const vite$1 = require("vite");
|
|
5
8
|
const schema = require("./schema.cjs");
|
|
6
9
|
const nitroPlugin = require("./nitro/nitro-plugin.cjs");
|
|
7
10
|
const routesManifestPlugin = require("./routesManifestPlugin.cjs");
|
|
8
11
|
const startCompilerPlugin = require("./start-compiler-plugin.cjs");
|
|
12
|
+
const constants = require("./constants.cjs");
|
|
13
|
+
const plugin = require("./start-server-routes-plugin/plugin.cjs");
|
|
14
|
+
function _interopNamespaceDefault(e) {
|
|
15
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
16
|
+
if (e) {
|
|
17
|
+
for (const k in e) {
|
|
18
|
+
if (k !== "default") {
|
|
19
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: () => e[k]
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
n.default = e;
|
|
28
|
+
return Object.freeze(n);
|
|
29
|
+
}
|
|
30
|
+
const vite__namespace = /* @__PURE__ */ _interopNamespaceDefault(vite$1);
|
|
9
31
|
schema.createTanStackStartOptionsSchema();
|
|
10
32
|
schema.createTanStackConfig();
|
|
11
33
|
const clientDistDir = ".tanstack-start/build/client-dist";
|
|
12
34
|
const ssrEntryFile = "ssr.mjs";
|
|
13
35
|
let ssrBundle;
|
|
14
|
-
function TanStackStartVitePluginCore(
|
|
36
|
+
function TanStackStartVitePluginCore(opts, startConfig) {
|
|
15
37
|
return [
|
|
38
|
+
vite.tanstackRouter({
|
|
39
|
+
verboseFileRoutes: false,
|
|
40
|
+
...startConfig.tsr,
|
|
41
|
+
target: opts.framework,
|
|
42
|
+
enableRouteGeneration: true,
|
|
43
|
+
autoCodeSplitting: true
|
|
44
|
+
}),
|
|
16
45
|
{
|
|
17
46
|
name: "tanstack-start-core:config-client",
|
|
18
47
|
async config() {
|
|
19
48
|
const nitroOutputPublicDir = await (async () => {
|
|
20
49
|
const dummyNitroApp = await nitropack.createNitro({
|
|
21
|
-
preset:
|
|
50
|
+
preset: startConfig.target,
|
|
22
51
|
compatibilityDate: "2024-12-01"
|
|
23
52
|
});
|
|
24
53
|
const nitroOutputPublicDir2 = dummyNitroApp.options.output.publicDir;
|
|
25
54
|
await dummyNitroApp.close();
|
|
26
55
|
return nitroOutputPublicDir2;
|
|
27
56
|
})();
|
|
57
|
+
const getClientEntryPath = (startConfig2) => {
|
|
58
|
+
const entry = startConfig2.clientEntryPath.startsWith(
|
|
59
|
+
"/~start/default-client-entry"
|
|
60
|
+
) ? startConfig2.clientEntryPath : vite__namespace.normalizePath(
|
|
61
|
+
path.resolve(startConfig2.root, startConfig2.clientEntryPath)
|
|
62
|
+
);
|
|
63
|
+
return entry;
|
|
64
|
+
};
|
|
28
65
|
return {
|
|
29
66
|
environments: {
|
|
30
|
-
client: {
|
|
67
|
+
[constants.VITE_ENVIRONMENT_NAMES.client]: {
|
|
31
68
|
consumer: "client",
|
|
32
69
|
build: {
|
|
33
70
|
manifest: true,
|
|
34
71
|
rollupOptions: {
|
|
35
72
|
input: {
|
|
36
|
-
main:
|
|
73
|
+
main: getClientEntryPath(startConfig)
|
|
37
74
|
},
|
|
38
75
|
output: {
|
|
39
|
-
dir: path.resolve(
|
|
76
|
+
dir: path.resolve(startConfig.root, clientDistDir)
|
|
40
77
|
},
|
|
41
78
|
// TODO this should be removed
|
|
42
79
|
external: ["node:fs", "node:path", "node:os", "node:crypto"]
|
|
43
80
|
}
|
|
44
81
|
}
|
|
45
82
|
},
|
|
46
|
-
server: {
|
|
83
|
+
[constants.VITE_ENVIRONMENT_NAMES.server]: {
|
|
47
84
|
consumer: "server",
|
|
48
85
|
build: {
|
|
49
86
|
ssr: true,
|
|
@@ -86,23 +123,53 @@ function TanStackStartVitePluginCore(framework, opts) {
|
|
|
86
123
|
"tanstack:server-fn-manifest",
|
|
87
124
|
"nitropack",
|
|
88
125
|
"@tanstack/**"
|
|
89
|
-
]
|
|
90
|
-
external: ["undici"]
|
|
126
|
+
]
|
|
91
127
|
},
|
|
92
128
|
/* prettier-ignore */
|
|
93
129
|
define: {
|
|
94
|
-
...injectDefineEnv("TSS_PUBLIC_BASE",
|
|
95
|
-
...injectDefineEnv("TSS_CLIENT_BASE",
|
|
96
|
-
...injectDefineEnv("TSS_CLIENT_ENTRY",
|
|
97
|
-
|
|
130
|
+
...injectDefineEnv("TSS_PUBLIC_BASE", startConfig.public.base),
|
|
131
|
+
...injectDefineEnv("TSS_CLIENT_BASE", startConfig.client.base),
|
|
132
|
+
...injectDefineEnv("TSS_CLIENT_ENTRY", getClientEntryPath(startConfig)),
|
|
133
|
+
// This is consumed by the router-manifest, where the entry point is imported after the dev refresh runtime is resolved
|
|
134
|
+
...injectDefineEnv("TSS_SERVER_FN_BASE", startConfig.serverFns.base),
|
|
98
135
|
...injectDefineEnv("TSS_OUTPUT_PUBLIC_DIR", nitroOutputPublicDir)
|
|
99
136
|
}
|
|
100
137
|
};
|
|
101
138
|
}
|
|
102
139
|
},
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
140
|
+
// N.B. TanStackStartCompilerPlugin must be before the TanStackServerFnPluginEnv
|
|
141
|
+
startCompilerPlugin.TanStackStartCompilerPlugin(opts.framework, {
|
|
142
|
+
client: { envName: constants.VITE_ENVIRONMENT_NAMES.client },
|
|
143
|
+
server: { envName: constants.VITE_ENVIRONMENT_NAMES.server }
|
|
144
|
+
}),
|
|
145
|
+
serverFunctionsPlugin.TanStackServerFnPluginEnv({
|
|
146
|
+
// This is the ID that will be available to look up and import
|
|
147
|
+
// our server function manifest and resolve its module
|
|
148
|
+
manifestVirtualImportId: "tanstack:server-fn-manifest",
|
|
149
|
+
client: {
|
|
150
|
+
getRuntimeCode: () => `import { createClientRpc } from '@tanstack/${opts.framework}-start/server-functions-client'`,
|
|
151
|
+
replacer: (d) => `createClientRpc('${d.functionId}', '${startConfig.serverFns.base}')`,
|
|
152
|
+
envName: constants.VITE_ENVIRONMENT_NAMES.client
|
|
153
|
+
},
|
|
154
|
+
server: {
|
|
155
|
+
getRuntimeCode: () => `import { createServerRpc } from '@tanstack/${opts.framework}-start/server-functions-server'`,
|
|
156
|
+
replacer: (d) => `createServerRpc('${d.functionId}', '${startConfig.serverFns.base}', ${d.fn})`,
|
|
157
|
+
envName: constants.VITE_ENVIRONMENT_NAMES.server
|
|
158
|
+
},
|
|
159
|
+
importer: (fn) => {
|
|
160
|
+
const serverEnv = globalThis.viteDevServer.environments[constants.VITE_ENVIRONMENT_NAMES.server];
|
|
161
|
+
if (!serverEnv) {
|
|
162
|
+
throw new Error(`'ssr' vite dev environment not found`);
|
|
163
|
+
}
|
|
164
|
+
return serverEnv.runner.import(fn.extractedFilename);
|
|
165
|
+
}
|
|
166
|
+
}),
|
|
167
|
+
routesManifestPlugin.startManifestPlugin(startConfig),
|
|
168
|
+
nitroPlugin.nitroPlugin(startConfig, () => ssrBundle),
|
|
169
|
+
plugin.TanStackStartServerRoutesVite({
|
|
170
|
+
...startConfig.tsr,
|
|
171
|
+
target: opts.framework
|
|
172
|
+
})
|
|
106
173
|
];
|
|
107
174
|
}
|
|
108
175
|
function injectDefineEnv(key, value) {
|
package/dist/cjs/plugin.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs","sources":["../../src/plugin.ts"],"sourcesContent":["import path from 'node:path'\nimport { createNitro } from 'nitropack'\nimport {\n createTanStackConfig,\n createTanStackStartOptionsSchema,\n} from './schema'\nimport { nitroPlugin } from './nitro/nitro-plugin'\nimport { startManifestPlugin } from './routesManifestPlugin'\nimport { TanStackStartCompilerPlugin } from './start-compiler-plugin'\nimport type { PluginOption, Rollup } from 'vite'\nimport type { z } from 'zod'\nimport type { CompileStartFrameworkOptions } from './compilers'\n\nconst TanStackStartOptionsSchema = createTanStackStartOptionsSchema()\nexport type TanStackStartInputConfig = z.input<\n typeof TanStackStartOptionsSchema\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 const clientDistDir = '.tanstack-start/build/client-dist'\nexport const ssrEntryFile = 'ssr.mjs'\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 framework: CompileStartFrameworkOptions,\n opts: TanStackStartOutputConfig,\n): Array<PluginOption> {\n return [\n {\n name: 'tanstack-start-core:config-client',\n async config() {\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: opts.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 return {\n environments: {\n client: {\n consumer: 'client',\n build: {\n manifest: true,\n rollupOptions: {\n input: {\n main: opts.clientEntryPath,\n },\n output: {\n dir: path.resolve(opts.root, clientDistDir),\n },\n // TODO this should be removed\n external: ['node:fs', 'node:path', 'node:os', 'node:crypto'],\n },\n },\n },\n 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: ssrEntryFile,\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-client',\n '@tanstack/start-client-core',\n '@tanstack/start-server',\n '@tanstack/start-server-core',\n '@tanstack/start-server-functions-fetcher',\n '@tanstack/start-server-functions-client',\n '@tanstack/start-server-functions-server',\n '@tanstack/start-router-manifest',\n '@tanstack/start-config',\n '@tanstack/server-functions-plugin',\n 'tanstack:start-manifest',\n 'tanstack:server-fn-manifest',\n 'nitropack',\n '@tanstack/**',\n ],\n external: ['undici'],\n },\n /* prettier-ignore */\n define: {\n ...injectDefineEnv('TSS_PUBLIC_BASE', opts.public.base),\n ...injectDefineEnv('TSS_CLIENT_BASE', opts.client.base),\n ...injectDefineEnv('TSS_CLIENT_ENTRY', opts.clientEntryPath),\n ...injectDefineEnv('TSS_SERVER_FN_BASE', opts.serverFns.base),\n ...injectDefineEnv('TSS_OUTPUT_PUBLIC_DIR', nitroOutputPublicDir),\n },\n }\n },\n },\n TanStackStartCompilerPlugin(framework),\n startManifestPlugin(opts),\n nitroPlugin(opts, () => ssrBundle),\n ]\n}\n\nfunction injectDefineEnv<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"],"names":["createTanStackStartOptionsSchema","createTanStackConfig","createNitro","nitroOutputPublicDir","TanStackStartCompilerPlugin","startManifestPlugin","nitroPlugin"],"mappings":";;;;;;;;AAamCA,OAAiC,iCAAA;AAK9CC,OAAqB,qBAAA;AASpC,MAAM,gBAAgB;AACtB,MAAM,eAAe;AAG5B,IAAI;AAEY,SAAA,4BACd,WACA,MACqB;AACd,SAAA;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,MAAM,SAAS;AACP,cAAA,uBAAuB,OAAO,YAAY;AAExC,gBAAA,gBAAgB,MAAMC,sBAAY;AAAA,YACtC,QAAQ,KAAK;AAAA,YACb,mBAAmB;AAAA,UAAA,CACpB;AAEKC,gBAAAA,wBAAuB,cAAc,QAAQ,OAAO;AAC1D,gBAAM,cAAc,MAAM;AAEnBA,iBAAAA;AAAAA,QAAAA,GACN;AAEI,eAAA;AAAA,UACL,cAAc;AAAA,YACZ,QAAQ;AAAA,cACN,UAAU;AAAA,cACV,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,eAAe;AAAA,kBACb,OAAO;AAAA,oBACL,MAAM,KAAK;AAAA,kBACb;AAAA,kBACA,QAAQ;AAAA,oBACN,KAAK,KAAK,QAAQ,KAAK,MAAM,aAAa;AAAA,kBAC5C;AAAA;AAAA,kBAEA,UAAU,CAAC,WAAW,aAAa,WAAW,aAAa;AAAA,gBAAA;AAAA,cAC7D;AAAA,YAEJ;AAAA,YACA,QAAQ;AAAA,cACN,UAAU;AAAA,cACV,OAAO;AAAA,gBACL,KAAK;AAAA;AAAA;AAAA,gBAGL,OAAO;AAAA,gBACP,eAAe;AAAA,gBACf,eAAe;AAAA,kBACb,QAAQ;AAAA,oBACN,gBAAgB;AAAA,kBAClB;AAAA,kBACA,SAAS;AAAA,oBACP;AAAA,sBACE,MAAM;AAAA,sBACN,eAAe,SAAS,QAAQ;AAElB,oCAAA;AAAA,sBAAA;AAAA,oBACd;AAAA,kBACF;AAAA,gBAEJ;AAAA,gBACA,iBAAiB;AAAA,kBACf,SAAS,CAAC,cAAc;AAAA,gBAAA;AAAA,cAC1B;AAAA,YACF;AAAA,UAEJ;AAAA,UACA,SAAS;AAAA,YACP,YAAY;AAAA,cACV;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,UAAU,CAAC,QAAQ;AAAA,UACrB;AAAA;AAAA,UAEA,QAAQ;AAAA,YACN,GAAG,gBAAgB,mBAAmB,KAAK,OAAO,IAAI;AAAA,YACtD,GAAG,gBAAgB,mBAAmB,KAAK,OAAO,IAAI;AAAA,YACtD,GAAG,gBAAgB,oBAAoB,KAAK,eAAe;AAAA,YAC3D,GAAG,gBAAgB,sBAAsB,KAAK,UAAU,IAAI;AAAA,YAC5D,GAAG,gBAAgB,yBAAyB,oBAAoB;AAAA,UAAA;AAAA,QAEpE;AAAA,MAAA;AAAA,IAEJ;AAAA,IACAC,oBAAAA,4BAA4B,SAAS;AAAA,IACrCC,qBAAAA,oBAAoB,IAAI;AAAA,IACxBC,YAAA,YAAY,MAAM,MAAM,SAAS;AAAA,EACnC;AACF;AAEA,SAAS,gBACP,KACA,OACsE;AAC/D,SAAA;AAAA,IACL,CAAC,eAAe,GAAG,EAAE,GAAG,KAAK,UAAU,KAAK;AAAA,IAC5C,CAAC,mBAAmB,GAAG,EAAE,GAAG,KAAK,UAAU,KAAK;AAAA,EAClD;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs","sources":["../../src/plugin.ts"],"sourcesContent":["import path from 'node:path'\nimport { createNitro } from 'nitropack'\nimport { tanstackRouter } from '@tanstack/router-plugin/vite'\nimport { TanStackServerFnPluginEnv } from '@tanstack/server-functions-plugin'\nimport * as vite from 'vite'\nimport {\n createTanStackConfig,\n createTanStackStartOptionsSchema,\n} from './schema'\nimport { nitroPlugin } from './nitro/nitro-plugin'\nimport { startManifestPlugin } from './routesManifestPlugin'\nimport { TanStackStartCompilerPlugin } from './start-compiler-plugin'\nimport { VITE_ENVIRONMENT_NAMES } from './constants'\nimport { TanStackStartServerRoutesVite } from './start-server-routes-plugin/plugin'\nimport type { PluginOption, Rollup } from 'vite'\nimport type { z } from 'zod'\nimport type { CompileStartFrameworkOptions } from './compilers'\n\nconst TanStackStartOptionsSchema = createTanStackStartOptionsSchema()\nexport type TanStackStartInputConfig = z.input<\n typeof TanStackStartOptionsSchema\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 const clientDistDir = '.tanstack-start/build/client-dist'\nexport const ssrEntryFile = 'ssr.mjs'\n\nexport interface TanStackStartVitePluginCoreOptions {\n framework: CompileStartFrameworkOptions\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 tanstackRouter({\n verboseFileRoutes: false,\n ...startConfig.tsr,\n target: opts.framework,\n enableRouteGeneration: true,\n autoCodeSplitting: true,\n }),\n {\n name: 'tanstack-start-core:config-client',\n async config() {\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 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.resolve(startConfig.root, startConfig.clientEntryPath),\n )\n\n return entry\n }\n\n return {\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, clientDistDir),\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: ssrEntryFile,\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-client',\n '@tanstack/start-client-core',\n '@tanstack/start-server',\n '@tanstack/start-server-core',\n '@tanstack/start-server-functions-fetcher',\n '@tanstack/start-server-functions-client',\n '@tanstack/start-server-functions-server',\n '@tanstack/start-router-manifest',\n '@tanstack/start-config',\n '@tanstack/server-functions-plugin',\n 'tanstack:start-manifest',\n 'tanstack:server-fn-manifest',\n 'nitropack',\n '@tanstack/**',\n ],\n },\n /* prettier-ignore */\n define: {\n ...injectDefineEnv('TSS_PUBLIC_BASE', startConfig.public.base),\n ...injectDefineEnv('TSS_CLIENT_BASE', startConfig.client.base),\n ...injectDefineEnv('TSS_CLIENT_ENTRY', getClientEntryPath(startConfig)), // This is consumed by the router-manifest, where the entry point is imported after the dev refresh runtime is resolved\n ...injectDefineEnv('TSS_SERVER_FN_BASE', startConfig.serverFns.base),\n ...injectDefineEnv('TSS_OUTPUT_PUBLIC_DIR', nitroOutputPublicDir),\n },\n }\n },\n },\n // N.B. TanStackStartCompilerPlugin must be before the TanStackServerFnPluginEnv\n TanStackStartCompilerPlugin(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: 'tanstack:server-fn-manifest',\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 importer: (fn) => {\n const serverEnv = (globalThis as any).viteDevServer.environments[\n VITE_ENVIRONMENT_NAMES.server\n ]\n if (!serverEnv) {\n throw new Error(`'ssr' vite dev environment not found`)\n }\n return serverEnv.runner.import(fn.extractedFilename)\n },\n }),\n startManifestPlugin(startConfig),\n nitroPlugin(startConfig, () => ssrBundle),\n TanStackStartServerRoutesVite({\n ...startConfig.tsr,\n target: opts.framework,\n }),\n ]\n}\n\nfunction injectDefineEnv<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"],"names":["createTanStackStartOptionsSchema","createTanStackConfig","tanstackRouter","createNitro","nitroOutputPublicDir","startConfig","vite","VITE_ENVIRONMENT_NAMES","TanStackStartCompilerPlugin","TanStackServerFnPluginEnv","startManifestPlugin","nitroPlugin","TanStackStartServerRoutesVite"],"mappings":"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"}
|