Skip to content

Commit a7fe0ae

Browse files
committed
bring back style collection
1 parent 6ce299c commit a7fe0ae

11 files changed

Lines changed: 300 additions & 419 deletions

File tree

packages/start/src/config/fs-routes/index.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@ import { fileSystemWatcher } from "./fs-watcher.js";
55
import type { BaseFileSystemRouter } from "./router.js";
66
import { treeShake } from "./tree-shake.js";
77

8-
const getClientManifestPath = new URL("../../server/manifest/client-manifest.js", import.meta.url).pathname;
9-
108
export const moduleId = "solid-start:routes";
119

1210
export type RouterBuilder = (config: ResolvedConfig) => BaseFileSystemRouter;
1311

1412
export interface FsRoutesArgs {
1513
routers: Record<"client" | "server", RouterBuilder>;
16-
handlers: Record<"client" | "server", string>;
1714
}
1815

19-
export function fsRoutes({ routers, handlers }: FsRoutesArgs): Array<PluginOption> {
16+
export function fsRoutes({ routers }: FsRoutesArgs): Array<PluginOption> {
2017
(globalThis as any).ROUTERS = {};
2118

2219
return [
@@ -85,7 +82,7 @@ ${js.getImportStatements()}
8582
${this.environment.name === "server"
8683
? ""
8784
: `
88-
import { getClientManifest } from "${getClientManifestPath}"
85+
import { getClientManifest } from "solid-start:get-client-manifest";
8986
function clientManifestImport(id) {
9087
return getClientManifest().import(id)
9188
}`

packages/start/src/config/index.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,6 @@ function solidStartVitePlugin(options?: SolidStartOptions): Array<PluginOption>
195195
},
196196
css(),
197197
fsRoutes({
198-
handlers,
199198
routers: {
200199
client: config =>
201200
new SolidStartClientFileRouter({
@@ -309,10 +308,10 @@ function solidStartVitePlugin(options?: SolidStartOptions): Array<PluginOption>
309308
await getSsrDevManifest(true, handlers.client).getAssets(id)
310309
)}`;
311310
}
312-
} else if (id === VIRTUAL_MODULES.middleware) return "export default {};"
311+
} else if (id === `\0${VIRTUAL_MODULES.middleware}`) return "export default {};"
313312
}
314313
},
315-
nitroPlugin({ root: process.cwd() }, () => ssrBundle, start.server, start.middleware),
314+
nitroPlugin({ root: process.cwd() }, () => ssrBundle, start.server),
316315
{
317316
name: "solid-start:capture-client-bundle",
318317
enforce: "post",
@@ -322,7 +321,7 @@ function solidStartVitePlugin(options?: SolidStartOptions): Array<PluginOption>
322321
},
323322
solid({
324323
...start.solid,
325-
ssr: start.ssr,
324+
ssr: true,
326325
extensions: extensions.map(ext => `.${ext}`)
327326
})
328327
];

packages/start/src/config/nitroPlugin.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ export function nitroPlugin(
4343
options: { root: string },
4444
getSsrBundle: () => Rollup.OutputBundle,
4545
nitroConfig?: UserNitroConfig,
46-
middleware?: string
47-
// handlers: { client: string; server: string }
4846
): Array<PluginOption> {
4947
return [
5048
{

packages/start/src/server/collect-styles.ts

Lines changed: 98 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -5,87 +5,87 @@ import type { ModuleNode, ViteDevServer } from "vite";
55
import { CLIENT_BASE_PATH } from "../config/index.js";
66

77
async function getViteModuleNode(vite: ViteDevServer, file: string, ssr = false) {
8-
// let nodePath = file;
9-
// let node = vite.moduleGraph.getModuleById(file);
10-
11-
// if (!node) {
12-
// const resolvedId = await vite.pluginContainer.resolveId(file, undefined, { ssr: false })
13-
// if (!resolvedId) return;
14-
15-
// nodePath = resolvedId.id;
16-
// node = vite.moduleGraph.getModuleById(file);
17-
// }
18-
19-
// if (!node) {
20-
// nodePath = resolve(nodePath);
21-
// node = await vite.moduleGraph.getModuleByUrl(file);
22-
// }
23-
24-
// if (!node) {
25-
// await vite.moduleGraph.ensureEntryFromUrl(nodePath, false);
26-
// node = vite.moduleGraph.getModuleById(nodePath);
27-
// }
28-
29-
30-
// try {
31-
// if (!node?.transformResult && !ssr) {
32-
// await vite.transformRequest(nodePath);
33-
// node = vite.moduleGraph.getModuleById(nodePath);
34-
// }
35-
36-
// if (ssr && !node?.ssrTransformResult) {
37-
// // if (skip.includes(file)) {
38-
// // return null;
39-
// // }
40-
// await vite.ssrLoadModule(file);
41-
// node = vite.moduleGraph.getModuleById(nodePath);
42-
// }
43-
44-
// // vite.config.logger.error = prev;
45-
// return node;
46-
// } catch (e) {
47-
// // vite.config.logger.error = prev;
48-
// return null;
49-
// }
8+
let nodePath = file;
9+
let node = vite.moduleGraph.getModuleById(file);
10+
11+
if (!node) {
12+
const resolvedId = await vite.pluginContainer.resolveId(file, undefined, { ssr: false })
13+
if (!resolvedId) return;
14+
15+
nodePath = resolvedId.id;
16+
node = vite.moduleGraph.getModuleById(file);
17+
}
18+
19+
if (!node) {
20+
nodePath = resolve(nodePath);
21+
node = await vite.moduleGraph.getModuleByUrl(file);
22+
}
23+
24+
if (!node) {
25+
await vite.moduleGraph.ensureEntryFromUrl(nodePath, false);
26+
node = vite.moduleGraph.getModuleById(nodePath);
27+
}
28+
29+
30+
try {
31+
if (!node?.transformResult && !ssr) {
32+
await vite.transformRequest(nodePath);
33+
node = vite.moduleGraph.getModuleById(nodePath);
34+
}
35+
36+
if (ssr && !node?.ssrTransformResult) {
37+
// if (skip.includes(file)) {
38+
// return null;
39+
// }
40+
await vite.ssrLoadModule(file);
41+
node = vite.moduleGraph.getModuleById(nodePath);
42+
}
43+
44+
// vite.config.logger.error = prev;
45+
return node;
46+
} catch (e) {
47+
// vite.config.logger.error = prev;
48+
return null;
49+
}
5050
}
5151

5252
async function findModuleDependencies(vite: ViteDevServer, module: ModuleNode, ssr = false, deps: Set<ModuleNode>) {
53-
// async function add(module: ModuleNode) {
54-
// if (!deps.has(module)) {
55-
// deps.add(module);
56-
// await findModuleDependencies(vite, module, ssr, deps);
57-
// }
58-
// }
59-
60-
// async function addByUrl(url: string, ssr: boolean) {
61-
// const node = await getViteModuleNode(vite, url, ssr);
62-
63-
// if (node) await add(node);
64-
// }
65-
66-
// if (module.url.endsWith(".css")) return;
67-
68-
// if (ssr) {
69-
// if (module.ssrTransformResult?.deps) {
70-
// for (const url of module.ssrTransformResult.deps) {
71-
// await addByUrl(url, ssr);
72-
// }
73-
74-
// // Parallel version with incorrect style order
75-
// /* node.ssrTransformResult.deps.forEach((url) =>
76-
// branches.push(add_by_url(url, ssr)),
77-
// ); */
78-
// }
79-
// } else {
80-
// for (const { url } of module.importedModules) {
81-
// const node = await getViteModuleNode(vite, url, ssr);
82-
83-
// if (node && !deps.has(node)) {
84-
// deps.add(node);
85-
// await findModuleDependencies(vite, node, ssr, deps);
86-
// }
87-
// }
88-
// }
53+
async function add(module: ModuleNode) {
54+
if (!deps.has(module)) {
55+
deps.add(module);
56+
await findModuleDependencies(vite, module, ssr, deps);
57+
}
58+
}
59+
60+
async function addByUrl(url: string, ssr: boolean) {
61+
const node = await getViteModuleNode(vite, url, ssr);
62+
63+
if (node) await add(node);
64+
}
65+
66+
if (module.url.endsWith(".css")) return;
67+
68+
if (ssr) {
69+
if (module.ssrTransformResult?.deps) {
70+
for (const url of module.ssrTransformResult.deps) {
71+
await addByUrl(url, ssr);
72+
}
73+
74+
// Parallel version with incorrect style order
75+
/* node.ssrTransformResult.deps.forEach((url) =>
76+
branches.push(add_by_url(url, ssr)),
77+
); */
78+
}
79+
} else {
80+
for (const { url } of module.importedModules) {
81+
const node = await getViteModuleNode(vite, url, ssr);
82+
83+
if (node && !deps.has(node)) {
84+
deps.add(node);
85+
await findModuleDependencies(vite, node, ssr, deps);
86+
}
87+
}
88+
}
8989
}
9090

9191

@@ -125,14 +125,14 @@ export const isCssUrlWithoutSideEffects = (url: string) => {
125125
};
126126

127127
async function findFilesDepedencies(vite: ViteDevServer, files: Array<string>, ssr = false, deps = new Set<ModuleNode>()) {
128-
// for (const file of files) {
129-
// try {
130-
// const node = await getViteModuleNode(vite, file, ssr);
131-
// if (node) await findModuleDependencies(vite, node, ssr, deps);
132-
// } catch (e) {
133-
// console.error(e);
134-
// }
135-
// }
128+
for (const file of files) {
129+
try {
130+
const node = await getViteModuleNode(vite, file, ssr);
131+
if (node) await findModuleDependencies(vite, node, ssr, deps);
132+
} catch (e) {
133+
console.error(e);
134+
}
135+
}
136136

137137
return deps;
138138
}
@@ -141,24 +141,24 @@ const injectQuery = (url: string, query: string) =>
141141
url.includes("?") ? url.replace("?", `?${query}&`) : `${url}?${query}`;
142142

143143
export async function findStylesInModuleGraph(vite: ViteDevServer, id: string, ssr = false) {
144-
// const absolute = path.resolve(process.cwd(), id);
144+
const absolute = path.resolve(process.cwd(), id);
145145

146-
// const dependencies = await findFilesDepedencies(vite, [absolute], ssr);
146+
const dependencies = await findFilesDepedencies(vite, [absolute], ssr);
147147

148148
const styles: Record<string, any> = {};
149149

150-
// for (const dep of dependencies) {
151-
// if (isCssFile(dep.url)) {
152-
// let depURL = dep.url;
153-
// if (!isCssUrlWithoutSideEffects(depURL)) {
154-
// depURL = injectQuery(dep.url, "inline");
155-
// }
150+
for (const dep of dependencies) {
151+
if (isCssFile(dep.url)) {
152+
let depURL = dep.url;
153+
if (!isCssUrlWithoutSideEffects(depURL)) {
154+
depURL = injectQuery(dep.url, "inline");
155+
}
156156

157-
// const mod = await vite.ssrLoadModule(depURL);
157+
const mod = await vite.ssrLoadModule(depURL);
158158

159-
// styles[join(vite.config.root, dep.url)] = mod.default;
160-
// }
161-
// }
159+
styles[join(vite.config.root, dep.url)] = mod.default;
160+
}
161+
}
162162

163163
return styles
164164
}

0 commit comments

Comments
 (0)