11import { type Component , createComponent , type JSX , lazy , onCleanup } from "solid-js" ;
22
33import { type Asset , renderAsset } from "./renderAsset.tsx" ;
4+ import { useAssets } from "solid-js/web" ;
45
56export default function lazyRoute < T extends Record < string , any > > (
67 component : { src : string ; import ( ) : Promise < Record < string , Component > > } ,
@@ -22,81 +23,82 @@ export default function lazyRoute<T extends Record<string, any>>(
2223 if ( import . meta. env . DEV ) {
2324 const manifest = import . meta. env . SSR ? serverManifest : clientManifest ;
2425
25- const assets = await manifest . getAssets ( component . src ) ;
26- const styles = assets . filter ( ( asset : any ) => asset . tag === "style" ) ;
26+ const assets = ( await manifest . getAssets ( component . src ) ) . filter (
27+ ( asset : any ) => asset . tag === "link"
28+ ) ;
2729
28- if ( import . meta. env . SSR && import . meta. hot )
29- import . meta. hot . on ( "css-update" , data => {
30- updateStyles ( styles , data ) ;
31- } ) ;
30+ // if (import.meta.env.SSR && import.meta.hot)
31+ // import.meta.hot.on("css-update", data => {
32+ // updateStyles(styles, data);
33+ // });
3234
3335 const Comp : Component < T > = props => {
3436 if ( typeof window !== "undefined" ) {
35- appendStyles ( styles ) ;
37+ appendStyles ( assets ) ;
3638 }
3739
3840 onCleanup ( ( ) => {
3941 if ( typeof window !== "undefined" ) {
4042 // remove style tags added by vite when a CSS file is imported
41- cleanupStyles ( styles ) ;
43+ cleanupStyles ( assets ) ;
4244 }
4345 } ) ;
4446
45- return [
46- ...assets . map ( ( asset : Asset ) => renderAsset ( asset ) ) ,
47- createComponent ( Component , props )
48- ] ;
47+ useAssets ( ( ) => assets . map ( ( asset : Asset ) => renderAsset ( asset ) ) ) ;
48+
49+ return [ createComponent ( Component , props ) ] ;
4950 } ;
5051 return { default : Comp } ;
5152 } else {
52- const assets = await clientManifest . getAssets ( component . src ) ;
53- const styles = assets . filter (
53+ const assets = ( await clientManifest . getAssets ( component . src ) ) . filter (
5454 asset =>
5555 asset . tag === "style" ||
5656 ( asset . attrs as JSX . LinkHTMLAttributes < HTMLLinkElement > ) . rel === "stylesheet"
5757 ) ;
5858 if ( typeof window !== "undefined" ) {
59- preloadStyles ( styles ) ;
59+ preloadStyles ( assets ) ;
6060 }
61+
6162 const Comp : Component < T > = props => {
6263 return [
63- ... styles . map ( ( asset : Asset ) => renderAsset ( asset ) ) ,
64- createComponent ( Component , props )
64+ createComponent ( Component , props ) ,
65+ ... assets . map ( ( asset : Asset ) => renderAsset ( asset ) )
6566 ] ;
6667 } ;
6768 return { default : Comp } ;
6869 }
6970 } ) ;
7071}
7172
72- function appendStyles ( styles : Array < any > ) {
73- styles . forEach ( style => {
73+ function appendStyles ( links : Array < any > ) {
74+ links . forEach ( link => {
7475 let element = document . head . querySelector (
75- `style [data-vite-dev-id="${ style . attrs [ "data-vite-dev-id" ] } "]`
76+ `link [data-vite-dev-id="${ link . attrs [ "data-vite-dev-id" ] } "]`
7677 ) ;
7778 if ( ! element ) {
78- element = document . createElement ( "style" ) ;
79- element . setAttribute ( "data-vite-dev-id" , style . attrs [ "data-vite-dev-id" ] ) ;
80- element . innerHTML = style . children ;
79+ element = document . createElement ( "link" ) ;
80+ element . setAttribute ( "data-vite-dev-id" , link . attrs [ "data-vite-dev-id" ] ) ;
8181 element . setAttribute ( "data-vite-ref" , "0" ) ;
82+ element . setAttribute ( "href" , link . attrs [ "href" ] ) ;
83+ element . setAttribute ( "rel" , link . attrs [ "rel" ] ) ;
8284 document . head . appendChild ( element ) ;
8385 }
8486
8587 element . setAttribute ( "data-vite-ref" , `${ Number ( element . getAttribute ( "data-vite-ref" ) ) + 1 } ` ) ;
8688 } ) ;
8789}
8890
89- function updateStyles ( styles : Array < any > , data : any ) {
90- const styleAsset = styles . find ( s => s . attrs [ "data-vite-dev-id" ] === data . file ) ;
91- if ( styleAsset ) {
92- styleAsset . children = data . contents ;
93- }
94- }
91+ // function updateStyles(links : Array<any>, data: any) {
92+ // const linkAsset = links .find(s => s.attrs["data-vite-dev-id"] === data.file);
93+ // // if (linkAsset ) {
94+ // // linkAsset .children = data.contents;
95+ // / / }
96+ // }
9597
96- function cleanupStyles ( styles : Array < any > ) {
97- styles . forEach ( style => {
98+ function cleanupStyles ( links : Array < any > ) {
99+ links . forEach ( link => {
98100 const element = document . head . querySelector (
99- `style [data-vite-dev-id="${ style . attrs [ "data-vite-dev-id" ] } "]`
101+ `link [data-vite-dev-id="${ link . attrs [ "data-vite-dev-id" ] } "]`
100102 ) ;
101103
102104 if ( ! element ) {
@@ -111,27 +113,26 @@ function cleanupStyles(styles: Array<any>) {
111113 } ) ;
112114}
113115
114- if ( ! import . meta. env . SSR && import . meta. hot ) {
115- import . meta. hot . on ( "css-update" , data => {
116- for ( const el of document . querySelectorAll ( `style [data-vite-dev-id="${ data . file } "]` ) ) {
117- el . innerHTML = data . contents ;
118- }
119- } ) ;
120- }
121-
122- export function preloadStyles ( styles : Array < any > ) {
123- styles . forEach ( style => {
124- if ( ! style . attrs . href ) {
116+ // if (!import.meta.env.SSR && import.meta.hot) {
117+ // import.meta.hot.on("css-update", data => {
118+ // for (const el of document.querySelectorAll(`link [data-vite-dev-id="${data.file}"]`)) {
119+ // el.innerHTML = data.contents;
120+ // }
121+ // });
122+ // }
123+
124+ export function preloadStyles ( links : Array < any > ) {
125+ links . forEach ( link => {
126+ if ( ! link . attrs . href ) {
125127 return ;
126128 }
127-
128- let element = document . head . querySelector ( `link[href="${ style . attrs . href } "]` ) ;
129+ let element = document . head . querySelector ( `link[href="${ link . attrs . href } "]` ) ;
129130 if ( ! element ) {
130131 // create a link preload element for the css file so it starts loading but doesnt get attached
131132 element = document . createElement ( "link" ) ;
132133 element . setAttribute ( "rel" , "preload" ) ;
133134 element . setAttribute ( "as" , "style" ) ;
134- element . setAttribute ( "href" , style . attrs . href ) ;
135+ element . setAttribute ( "href" , link . attrs . href ) ;
135136 document . head . appendChild ( element ) ;
136137 }
137138 } ) ;
0 commit comments