Skip to content

Commit f46c622

Browse files
committed
refactor: use svelte 5.26 hasGlobal flag instead of custom impl
1 parent 1f8bfe4 commit f46c622

File tree

4 files changed

+19
-41
lines changed

4 files changed

+19
-41
lines changed

packages/vite-plugin-svelte/src/index.js

+9-13
Original file line numberDiff line numberDiff line change
@@ -118,20 +118,16 @@ export function svelte(inlineOptions) {
118118
};
119119
} else {
120120
if (query.svelte && query.type === 'style') {
121-
// @ts-expect-error __meta does not exist
122-
const { __meta, ...css } = cache.getCSS(svelteRequest);
123-
if (css) {
124-
if (__meta?.hasUnscopedGlobalCss) {
125-
return css; // css contains unscoped global, do not scope to component
121+
const cachedCss = cache.getCSS(svelteRequest);
122+
if (cachedCss) {
123+
const { hasGlobal, ...css } = cachedCss;
124+
if (hasGlobal === false) {
125+
// hasGlobal was added in svelte 5.26.0, so make sure it is boolean false
126+
css.meta ??= {};
127+
css.meta.vite ??= {};
128+
css.meta.vite.cssScopeTo = [svelteRequest.filename, 'default'];
126129
}
127-
return {
128-
...css,
129-
meta: {
130-
vite: {
131-
cssScopeTo: [svelteRequest.filename, 'default']
132-
}
133-
}
134-
};
130+
return css;
135131
}
136132
}
137133
// prevent vite asset plugin from loading files as url that should be compiled in transform

packages/vite-plugin-svelte/src/types/compile.d.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Processed, CompileResult } from 'svelte/compiler';
22
import type { SvelteRequest } from './id.d.ts';
33
import type { ResolvedOptions } from './options.d.ts';
4+
import type { CustomPluginOptionsVite } from 'vite';
45

56
export type CompileSvelte = (
67
svelteRequest: SvelteRequest,
@@ -12,8 +13,9 @@ export interface Code {
1213
code: string;
1314
map?: any;
1415
dependencies?: any[];
15-
__meta?: {
16-
hasUnscopedGlobalCss?: boolean;
16+
hasGlobal?: boolean;
17+
meta?: {
18+
vite?: CustomPluginOptionsVite;
1719
};
1820
}
1921

packages/vite-plugin-svelte/src/utils/compile.js

+1-21
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export function createCompileSvelte() {
6868
}
6969

7070
let preprocessed;
71-
let hasUnscopedGlobalCss = false;
71+
7272
const preprocessors = options.preprocess
7373
? Array.isArray(options.preprocess)
7474
? [...options.preprocess]
@@ -80,17 +80,6 @@ export function createCompileSvelte() {
8080
preprocessors.push(devStylePreprocessor);
8181
}
8282

83-
if (options.emitCss) {
84-
// check if css has unscoped global rules
85-
// This is later used to decide if css output can be scoped to the js module for treeshaking
86-
preprocessors.push({
87-
name: 'test-has-global-style',
88-
style({ content }) {
89-
hasUnscopedGlobalCss = /(?:^|,)\s*(?::global[\s{(]|@keyframes -global-)/m.test(content);
90-
}
91-
});
92-
}
93-
9483
if (preprocessors.length > 0) {
9584
try {
9685
preprocessed = await svelte.preprocess(code, preprocessors, { filename }); // full filename here so postcss works
@@ -145,15 +134,6 @@ export function createCompileSvelte() {
145134
try {
146135
compiled = svelte.compile(finalCode, { ...finalCompileOptions, filename });
147136

148-
if (compiled.css && hasUnscopedGlobalCss) {
149-
Object.defineProperty(compiled.css, '__meta', {
150-
value: { hasUnscopedGlobalCss },
151-
writable: false,
152-
enumerable: false,
153-
configurable: false
154-
});
155-
}
156-
157137
// patch output with partial accept until svelte does it
158138
// TODO remove later
159139
if (

pnpm-lock.yaml

+5-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)