@tanstack/start-plugin-core 1.20.3-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/cjs/compilers.cjs +402 -0
- package/dist/cjs/compilers.cjs.map +1 -0
- package/dist/cjs/compilers.d.cts +21 -0
- package/dist/cjs/extractHtmlScripts.cjs +35 -0
- package/dist/cjs/extractHtmlScripts.cjs.map +1 -0
- package/dist/cjs/extractHtmlScripts.d.cts +4 -0
- package/dist/cjs/index.cjs +15 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +7 -0
- package/dist/cjs/nitro/build-nitro.cjs +18 -0
- package/dist/cjs/nitro/build-nitro.cjs.map +1 -0
- package/dist/cjs/nitro/build-nitro.d.cts +2 -0
- package/dist/cjs/nitro/build-sitemap.cjs +54 -0
- package/dist/cjs/nitro/build-sitemap.cjs.map +1 -0
- package/dist/cjs/nitro/build-sitemap.d.cts +9 -0
- package/dist/cjs/nitro/dev-server-plugin.cjs +128 -0
- package/dist/cjs/nitro/dev-server-plugin.cjs.map +1 -0
- package/dist/cjs/nitro/dev-server-plugin.d.cts +5 -0
- package/dist/cjs/nitro/nitro-plugin.cjs +128 -0
- package/dist/cjs/nitro/nitro-plugin.cjs.map +1 -0
- package/dist/cjs/nitro/nitro-plugin.d.cts +3 -0
- package/dist/cjs/plugin.cjs +117 -0
- package/dist/cjs/plugin.cjs.map +1 -0
- package/dist/cjs/plugin.d.cts +2713 -0
- package/dist/cjs/prerender.cjs +171 -0
- package/dist/cjs/prerender.cjs.map +1 -0
- package/dist/cjs/prerender.d.cts +8 -0
- package/dist/cjs/queue.cjs +131 -0
- package/dist/cjs/queue.cjs.map +1 -0
- package/dist/cjs/queue.d.cts +32 -0
- package/dist/cjs/routesManifestPlugin.cjs +165 -0
- package/dist/cjs/routesManifestPlugin.cjs.map +1 -0
- package/dist/cjs/routesManifestPlugin.d.cts +3 -0
- package/dist/cjs/schema.cjs +136 -0
- package/dist/cjs/schema.cjs.map +1 -0
- package/dist/cjs/schema.d.cts +8128 -0
- package/dist/cjs/start-compiler-plugin.cjs +72 -0
- package/dist/cjs/start-compiler-plugin.cjs.map +1 -0
- package/dist/cjs/start-compiler-plugin.d.cts +13 -0
- package/dist/cjs/start-server-routes-plugin/config.d.cts +49 -0
- package/dist/cjs/start-server-routes-plugin/plugin.cjs +608 -0
- package/dist/cjs/start-server-routes-plugin/plugin.cjs.map +1 -0
- package/dist/cjs/start-server-routes-plugin/plugin.d.cts +3 -0
- package/dist/cjs/start-server-routes-plugin/template.cjs +111 -0
- package/dist/cjs/start-server-routes-plugin/template.cjs.map +1 -0
- package/dist/cjs/start-server-routes-plugin/template.d.cts +34 -0
- package/dist/esm/compilers.d.ts +21 -0
- package/dist/esm/compilers.js +384 -0
- package/dist/esm/compilers.js.map +1 -0
- package/dist/esm/extractHtmlScripts.d.ts +4 -0
- package/dist/esm/extractHtmlScripts.js +18 -0
- package/dist/esm/extractHtmlScripts.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/nitro/build-nitro.d.ts +2 -0
- package/dist/esm/nitro/build-nitro.js +18 -0
- package/dist/esm/nitro/build-nitro.js.map +1 -0
- package/dist/esm/nitro/build-sitemap.d.ts +9 -0
- package/dist/esm/nitro/build-sitemap.js +54 -0
- package/dist/esm/nitro/build-sitemap.js.map +1 -0
- package/dist/esm/nitro/dev-server-plugin.d.ts +5 -0
- package/dist/esm/nitro/dev-server-plugin.js +128 -0
- package/dist/esm/nitro/dev-server-plugin.js.map +1 -0
- package/dist/esm/nitro/nitro-plugin.d.ts +3 -0
- package/dist/esm/nitro/nitro-plugin.js +128 -0
- package/dist/esm/nitro/nitro-plugin.js.map +1 -0
- package/dist/esm/plugin.d.ts +2713 -0
- package/dist/esm/plugin.js +117 -0
- package/dist/esm/plugin.js.map +1 -0
- package/dist/esm/prerender.d.ts +8 -0
- package/dist/esm/prerender.js +171 -0
- package/dist/esm/prerender.js.map +1 -0
- package/dist/esm/queue.d.ts +32 -0
- package/dist/esm/queue.js +131 -0
- package/dist/esm/queue.js.map +1 -0
- package/dist/esm/routesManifestPlugin.d.ts +3 -0
- package/dist/esm/routesManifestPlugin.js +165 -0
- package/dist/esm/routesManifestPlugin.js.map +1 -0
- package/dist/esm/schema.d.ts +8128 -0
- package/dist/esm/schema.js +136 -0
- package/dist/esm/schema.js.map +1 -0
- package/dist/esm/start-compiler-plugin.d.ts +13 -0
- package/dist/esm/start-compiler-plugin.js +72 -0
- package/dist/esm/start-compiler-plugin.js.map +1 -0
- package/dist/esm/start-server-routes-plugin/config.d.ts +49 -0
- package/dist/esm/start-server-routes-plugin/plugin.d.ts +3 -0
- package/dist/esm/start-server-routes-plugin/plugin.js +608 -0
- package/dist/esm/start-server-routes-plugin/plugin.js.map +1 -0
- package/dist/esm/start-server-routes-plugin/template.d.ts +34 -0
- package/dist/esm/start-server-routes-plugin/template.js +111 -0
- package/dist/esm/start-server-routes-plugin/template.js.map +1 -0
- package/package.json +72 -0
- package/src/compilers.ts +759 -0
- package/src/extractHtmlScripts.ts +19 -0
- package/src/index.ts +15 -0
- package/src/nitro/build-nitro.ts +27 -0
- package/src/nitro/build-sitemap.ts +79 -0
- package/src/nitro/dev-server-plugin.ts +159 -0
- package/src/nitro/nitro-plugin.ts +161 -0
- package/src/plugin.ts +145 -0
- package/src/prerender.ts +245 -0
- package/src/queue.ts +153 -0
- package/src/routesManifestPlugin.ts +216 -0
- package/src/schema.ts +193 -0
- package/src/start-compiler-plugin.ts +111 -0
- package/src/start-server-routes-plugin/config.ts +8 -0
- package/src/start-server-routes-plugin/plugin.ts +890 -0
- package/src/start-server-routes-plugin/template.ts +164 -0
|
@@ -0,0 +1,165 @@
|
|
|
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
|
+
function startManifestPlugin(opts) {
|
|
6
|
+
let config;
|
|
7
|
+
return {
|
|
8
|
+
name: "tsr-routes-manifest",
|
|
9
|
+
enforce: "pre",
|
|
10
|
+
configResolved(resolvedConfig) {
|
|
11
|
+
config = resolvedConfig;
|
|
12
|
+
},
|
|
13
|
+
// configEnvironment(env, envConfig) {
|
|
14
|
+
// config = envConfig.
|
|
15
|
+
// },
|
|
16
|
+
resolveId(id) {
|
|
17
|
+
if (id === "tanstack:start-manifest") {
|
|
18
|
+
return id;
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
},
|
|
22
|
+
load(id) {
|
|
23
|
+
var _a, _b;
|
|
24
|
+
if (id === "tanstack:start-manifest") {
|
|
25
|
+
if (this.environment.config.consumer !== "server") {
|
|
26
|
+
return `export default {}`;
|
|
27
|
+
}
|
|
28
|
+
if (config.command === "serve") {
|
|
29
|
+
return `export const tsrStartManifest = () => ({
|
|
30
|
+
entry: "$${process.env.TSS_CLIENT_BASE}/",
|
|
31
|
+
routes: {}
|
|
32
|
+
})`;
|
|
33
|
+
}
|
|
34
|
+
const clientViteManifestPath = path.resolve(
|
|
35
|
+
opts.root,
|
|
36
|
+
".tanstack-start/build/client-dist/.vite/manifest.json"
|
|
37
|
+
);
|
|
38
|
+
let viteManifest;
|
|
39
|
+
try {
|
|
40
|
+
viteManifest = JSON.parse(
|
|
41
|
+
readFileSync(clientViteManifestPath, "utf-8")
|
|
42
|
+
);
|
|
43
|
+
} catch (err) {
|
|
44
|
+
console.error(err);
|
|
45
|
+
throw new Error(
|
|
46
|
+
`Could not find the production client vite manifest at '${clientViteManifestPath}'!`
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
const routeTreePath = path.resolve(opts.tsr.generatedRouteTree);
|
|
50
|
+
let routeTreeContent;
|
|
51
|
+
try {
|
|
52
|
+
routeTreeContent = readFileSync(routeTreePath, "utf-8");
|
|
53
|
+
} catch (err) {
|
|
54
|
+
console.error(err);
|
|
55
|
+
throw new Error(
|
|
56
|
+
`Could not find the generated route tree at '${routeTreePath}'!`
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
const routerManifest = JSON.parse(
|
|
60
|
+
((_a = routeTreeContent.match(
|
|
61
|
+
/\/\* ROUTE_MANIFEST_START([\s\S]*?)ROUTE_MANIFEST_END \*\//
|
|
62
|
+
)) == null ? void 0 : _a[1]) || "{ routes: {} }"
|
|
63
|
+
);
|
|
64
|
+
const routes = routerManifest.routes;
|
|
65
|
+
let entryFile;
|
|
66
|
+
const filesByRouteFilePath = Object.fromEntries(
|
|
67
|
+
Object.entries(viteManifest).map(([k, v]) => {
|
|
68
|
+
if (v.isEntry) {
|
|
69
|
+
entryFile = v;
|
|
70
|
+
}
|
|
71
|
+
const rPath = k.split("?")[0];
|
|
72
|
+
return [rPath, v];
|
|
73
|
+
}, {})
|
|
74
|
+
);
|
|
75
|
+
const routesDirectoryFromRoot = path.relative(
|
|
76
|
+
opts.root,
|
|
77
|
+
opts.tsr.routesDirectory
|
|
78
|
+
);
|
|
79
|
+
Object.entries(routes).forEach(([k, v]) => {
|
|
80
|
+
const file = filesByRouteFilePath[path.join(routesDirectoryFromRoot, v.filePath)];
|
|
81
|
+
if (file) {
|
|
82
|
+
const preloads = (file.imports ?? []).map(
|
|
83
|
+
(d) => path.join("/", viteManifest[d].file)
|
|
84
|
+
);
|
|
85
|
+
if (file.file) {
|
|
86
|
+
preloads.unshift(path.join("/", file.file));
|
|
87
|
+
}
|
|
88
|
+
const cssFiles = file.css ?? [];
|
|
89
|
+
const cssAssetsList = cssFiles.map(
|
|
90
|
+
(cssFile) => ({
|
|
91
|
+
tag: "link",
|
|
92
|
+
attrs: {
|
|
93
|
+
rel: "stylesheet",
|
|
94
|
+
href: joinURL("/", cssFile),
|
|
95
|
+
type: "text/css"
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
);
|
|
99
|
+
routes[k] = {
|
|
100
|
+
...v,
|
|
101
|
+
assets: [...v.assets || [], ...cssAssetsList],
|
|
102
|
+
preloads
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
if (entryFile) {
|
|
107
|
+
routes[rootRouteId].preloads = [
|
|
108
|
+
path.join("/", entryFile.file),
|
|
109
|
+
...((_b = entryFile.imports) == null ? void 0 : _b.map(
|
|
110
|
+
(d) => path.join("/", viteManifest[d].file)
|
|
111
|
+
)) || []
|
|
112
|
+
];
|
|
113
|
+
const entryCssFiles = entryFile.css ?? [];
|
|
114
|
+
const entryCssAssetsList = entryCssFiles.map(
|
|
115
|
+
(cssFile) => ({
|
|
116
|
+
tag: "link",
|
|
117
|
+
attrs: {
|
|
118
|
+
rel: "stylesheet",
|
|
119
|
+
href: joinURL("/", cssFile),
|
|
120
|
+
type: "text/css"
|
|
121
|
+
}
|
|
122
|
+
})
|
|
123
|
+
);
|
|
124
|
+
routes[rootRouteId].assets = [
|
|
125
|
+
...routes[rootRouteId].assets || [],
|
|
126
|
+
...entryCssAssetsList,
|
|
127
|
+
{
|
|
128
|
+
tag: "script",
|
|
129
|
+
attrs: {
|
|
130
|
+
src: joinURL("/", entryFile.file),
|
|
131
|
+
type: "module"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
];
|
|
135
|
+
}
|
|
136
|
+
const recurseRoute = (route, seenPreloads = {}) => {
|
|
137
|
+
var _a2;
|
|
138
|
+
route.preloads = (_a2 = route.preloads) == null ? void 0 : _a2.filter((preload) => {
|
|
139
|
+
if (seenPreloads[preload]) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
seenPreloads[preload] = true;
|
|
143
|
+
return true;
|
|
144
|
+
});
|
|
145
|
+
if (route.children) {
|
|
146
|
+
route.children.forEach((child) => {
|
|
147
|
+
const childRoute = routes[child];
|
|
148
|
+
recurseRoute(childRoute, { ...seenPreloads });
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
recurseRoute(routes[rootRouteId]);
|
|
153
|
+
const routesManifest = {
|
|
154
|
+
routes
|
|
155
|
+
};
|
|
156
|
+
return `export const tsrStartManifest = () => (${JSON.stringify(routesManifest)})`;
|
|
157
|
+
}
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
export {
|
|
163
|
+
startManifestPlugin
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=routesManifestPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routesManifestPlugin.js","sources":["../../src/routesManifestPlugin.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { joinURL } from 'ufo'\nimport { rootRouteId } from '@tanstack/router-core'\nimport type {\n PluginOption,\n ResolvedConfig,\n Manifest as ViteManifest,\n ManifestChunk as ViteManifestChunk,\n} from 'vite'\nimport type { Manifest, RouterManagedTag } from '@tanstack/router-core'\nimport type { TanStackStartOutputConfig } from './plugin'\n\nexport function startManifestPlugin(\n opts: TanStackStartOutputConfig,\n): PluginOption {\n let config: ResolvedConfig\n\n return {\n name: 'tsr-routes-manifest',\n enforce: 'pre',\n\n configResolved(resolvedConfig) {\n config = resolvedConfig\n },\n // configEnvironment(env, envConfig) {\n // config = envConfig.\n // },\n resolveId(id) {\n if (id === 'tanstack:start-manifest') {\n return id\n }\n return\n },\n load(id) {\n if (id === 'tanstack:start-manifest') {\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 // If we're in development, return a dummy manifest\n\n if (config.command === 'serve') {\n return `export const tsrStartManifest = () => ({\n entry: \"$${process.env.TSS_CLIENT_BASE}/\",\n routes: {}\n })`\n }\n\n const clientViteManifestPath = path.resolve(\n opts.root,\n '.tanstack-start/build/client-dist/.vite/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 const routeTreePath = path.resolve(opts.tsr.generatedRouteTree)\n\n let routeTreeContent: string\n try {\n routeTreeContent = readFileSync(routeTreePath, 'utf-8')\n } catch (err) {\n console.error(err)\n throw new Error(\n `Could not find the generated route tree at '${routeTreePath}'!`,\n )\n }\n\n // Extract the routesManifest JSON from the route tree file.\n // It's located between the /* ROUTE_MANIFEST_START and ROUTE_MANIFEST_END */ comment block.\n\n const routerManifest = JSON.parse(\n routeTreeContent.match(\n /\\/\\* ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END \\*\\//,\n )?.[1] || '{ routes: {} }',\n ) as Manifest\n\n const routes = routerManifest.routes\n\n let entryFile: ViteManifestChunk | undefined\n\n const filesByRouteFilePath: ViteManifest = Object.fromEntries(\n Object.entries(viteManifest).map(([k, v]) => {\n if (v.isEntry) {\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(routes).forEach(([k, v]) => {\n const file =\n filesByRouteFilePath[\n path.join(routesDirectoryFromRoot, v.filePath as string)\n ]\n\n if (file) {\n const preloads = (file.imports ?? []).map((d) =>\n path.join('/', viteManifest[d]!.file),\n )\n\n if (file.file) {\n preloads.unshift(path.join('/', file.file))\n }\n\n const cssFiles = file.css ?? []\n const cssAssetsList: Array<RouterManagedTag> = cssFiles.map(\n (cssFile) => ({\n tag: 'link',\n attrs: {\n rel: 'stylesheet',\n href: joinURL('/', cssFile),\n type: 'text/css',\n },\n }),\n )\n\n routes[k] = {\n ...v,\n assets: [...(v.assets || []), ...cssAssetsList],\n preloads,\n }\n }\n })\n\n if (entryFile) {\n routes[rootRouteId]!.preloads = [\n path.join('/', entryFile.file),\n ...(entryFile.imports?.map((d) =>\n path.join('/', 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 entryCssFiles = entryFile.css ?? []\n const entryCssAssetsList: Array<RouterManagedTag> = entryCssFiles.map(\n (cssFile) => ({\n tag: 'link',\n attrs: {\n rel: 'stylesheet',\n href: joinURL('/', cssFile),\n type: 'text/css',\n },\n }),\n )\n\n routes[rootRouteId]!.assets = [\n ...(routes[rootRouteId]!.assets || []),\n ...entryCssAssetsList,\n {\n tag: 'script',\n attrs: {\n src: joinURL('/', 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 = routes[child]!\n recurseRoute(childRoute, { ...seenPreloads })\n })\n }\n }\n\n // @ts-expect-error\n recurseRoute(routes[rootRouteId])\n\n const routesManifest = {\n routes,\n }\n\n return `export const tsrStartManifest = () => (${JSON.stringify(routesManifest)})`\n }\n return\n },\n }\n}\n"],"names":["_a"],"mappings":"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"}
|