@@ -21,6 +21,8 @@ import { check_feature } from '../../../utils/features.js';
21
21
import { escape_html } from '../../../utils/escape.js' ;
22
22
23
23
const cwd = process . cwd ( ) ;
24
+ // vite-specifc queries that we should skip handling for css urls
25
+ const vite_css_query_regex = / (?: \? | & ) (?: r a w | u r l | i n l i n e ) (?: & | $ ) / ;
24
26
25
27
/**
26
28
* @param {import('vite').ViteDevServer } vite
@@ -188,6 +190,7 @@ export async function dev(vite, vite_config, svelte_config) {
188
190
// in dev we inline all styles to avoid FOUC. this gets populated lazily so that
189
191
// components/stylesheets loaded via import() during `load` are included
190
192
result . inline_styles = async ( ) => {
193
+ /** @type {Set<import('vite').ModuleNode> } */
191
194
const deps = new Set ( ) ;
192
195
193
196
for ( const module_node of module_nodes ) {
@@ -198,19 +201,12 @@ export async function dev(vite, vite_config, svelte_config) {
198
201
const styles = { } ;
199
202
200
203
for ( const dep of deps ) {
201
- const url = new URL ( dep . url , 'dummy:/' ) ;
202
- const query = url . searchParams ;
203
-
204
- if (
205
- ( isCSSRequest ( dep . file ) ||
206
- ( query . has ( 'svelte' ) && query . get ( 'type' ) === 'style' ) ) &&
207
- ! ( query . has ( 'raw' ) || query . has ( 'url' ) || query . has ( 'inline' ) )
208
- ) {
204
+ if ( isCSSRequest ( dep . url ) && ! vite_css_query_regex . test ( dep . url ) ) {
205
+ const inlineCssUrl = dep . url . includes ( '?' )
206
+ ? dep . url . replace ( '?' , '?inline&' )
207
+ : dep . url + '?inline' ;
209
208
try {
210
- query . set ( 'inline' , '' ) ;
211
- const mod = await vite . ssrLoadModule (
212
- `${ decodeURI ( url . pathname ) } ${ url . search } ${ url . hash } `
213
- ) ;
209
+ const mod = await vite . ssrLoadModule ( inlineCssUrl ) ;
214
210
styles [ dep . url ] = mod . default ;
215
211
} catch {
216
212
// this can happen with dynamically imported modules, I think
0 commit comments