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