Skip to content

Commit 35acec8

Browse files
authored
fix: remove svelte css transform (#280)
1 parent d2a0343 commit 35acec8

File tree

13 files changed

+99
-17
lines changed

13 files changed

+99
-17
lines changed

.changeset/slow-buses-tap.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/vite-plugin-svelte': patch
3+
---
4+
5+
Remove transforming svelte css
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* Ensure transform flow is not interrupted
3+
* @returns {import('vite').Plugin[]}
4+
*/
5+
function transformValidation() {
6+
return [
7+
{
8+
name: 'transform-validation:1',
9+
enforce: 'pre',
10+
transform(code, id) {
11+
if (id.endsWith('.svelte')) {
12+
return code.replace('__JS_TRANSFORM_1__', '__JS_TRANSFORM_2__');
13+
} else if (id.endsWith('.css')) {
14+
return code.replace('__CSS_TRANSFORM_1__', '__CSS_TRANSFORM_2__');
15+
}
16+
}
17+
},
18+
{
19+
name: 'transform-validation:2',
20+
transform(code, id) {
21+
if (id.endsWith('.svelte')) {
22+
return code.replace('__JS_TRANSFORM_2__', '__JS_TRANSFORM_3__');
23+
} else if (id.endsWith('.css')) {
24+
return code.replace('__CSS_TRANSFORM_2__', 'red');
25+
}
26+
}
27+
},
28+
{
29+
name: 'transform-validation:3',
30+
enforce: 'post',
31+
transform(code, id) {
32+
if (id.endsWith('.svelte')) {
33+
return code.replace('__JS_TRANSFORM_3__', 'Hello world');
34+
}
35+
// can't handle css here as in build, it would be `export default {}`
36+
}
37+
}
38+
];
39+
}
40+
41+
module.exports.transformValidation = transformValidation;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"version": "1.0.0",
3+
"private": true,
4+
"name": "e2e-test-dep-vite-plugins",
5+
"main": "./index.js",
6+
"files": [
7+
"index.js"
8+
]
9+
}

packages/e2e-tests/hmr/__tests__/hmr.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ test('should not have failed requests', async () => {
3939
});
4040
});
4141

42+
test('should respect transforms', async () => {
43+
expect(await getText('#js-transform')).toBe('Hello world');
44+
expect(await getColor('#css-transform')).toBe('red');
45+
});
46+
4247
if (!isBuild) {
4348
describe('hmr', () => {
4449
const updateHmrTest = editFileAndWaitForHmrComplete.bind(null, 'src/components/HmrTest.svelte');

packages/e2e-tests/hmr/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
},
1313
"devDependencies": {
1414
"@sveltejs/vite-plugin-svelte": "workspace:*",
15+
"e2e-test-dep-vite-plugins": "workspace:*",
1516
"node-fetch": "^2.6.6",
1617
"svelte": "^3.46.4",
1718
"vite": "^2.8.4"

packages/e2e-tests/hmr/src/App.svelte

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@
22
import StaticImport from './components/StaticImport.svelte';
33
import Dependency from 'e2e-test-dep-svelte-simple';
44
import HmrTest from './components/HmrTest.svelte';
5+
const jsTransform = '__JS_TRANSFORM_1__';
56
let dynamicImportComponent;
67
function importDynamic() {
78
import('./components/DynamicImport.svelte').then((m) => (dynamicImportComponent = m.default));
89
}
910
</script>
1011

1112
<h1 id="app-header">Test-App</h1>
13+
<!-- to be transformed into "Hello world!" text -->
14+
<p id="js-transform">{jsTransform}</p>
15+
<!-- to be transformed into "hello-world" class -->
16+
<p id="css-transform">Hello world</p>
1217
<StaticImport />
1318
<Dependency />
1419
{#if !dynamicImportComponent}
@@ -24,4 +29,8 @@
2429
h1 {
2530
color: #111111;
2631
}
32+
33+
:global(#css-transform) {
34+
color: __CSS_TRANSFORM_1__;
35+
}
2736
</style>

packages/e2e-tests/hmr/vite.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
const { defineConfig } = require('vite');
22
const { svelte } = require('@sveltejs/vite-plugin-svelte');
3+
const { transformValidation } = require('e2e-test-dep-vite-plugins');
34

45
module.exports = defineConfig(({ command, mode }) => {
56
return {
6-
plugins: [svelte()],
7+
plugins: [transformValidation(), svelte()],
78
build: {
89
minify: false,
910
target: 'esnext',

packages/e2e-tests/kit-node/__tests__/kit.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ describe('kit-node', () => {
8282
expect(browserLogs.some((x) => x === 'onMount dynamic imported isSSR: false')).toBe(true);
8383
});
8484

85+
test('should respect transforms', async () => {
86+
expect(await getText('#js-transform')).toBe('Hello world');
87+
expect(await getColor('#css-transform')).toBe('red');
88+
});
89+
8590
if (isBuild) {
8691
it('should not include dynamic import from onmount in ssr output', async () => {
8792
const app = readFileContent(path.join('.svelte-kit', 'output', 'server', 'app.js'));

packages/e2e-tests/kit-node/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"@sveltejs/adapter-node": "^1.0.0-next.68",
1212
"@sveltejs/kit": "^1.0.0-next.278",
1313
"e2e-test-dep-svelte-api-only": "workspace:*",
14+
"e2e-test-dep-vite-plugins": "workspace:*",
1415
"svelte": "^3.46.4",
1516
"svelte-i18n": "^3.3.13"
1617
},

packages/e2e-tests/kit-node/src/routes/index.svelte

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import Child from '$lib/Child.svelte';
2626
import { setSomeContext } from 'e2e-test-dep-svelte-api-only';
2727
export let load_status = 'NOT_LOADED';
28+
const jsTransform = '__JS_TRANSFORM_1__';
2829
let mount_status = 'BEFORE_MOUNT';
2930
onMount(async () => {
3031
const isSSR = (await import('../client-only-module.js')).default;
@@ -52,6 +53,10 @@
5253
<div id="mount">{mount_status}</div>
5354
<div id="i18n">{$_('welcome')}</div>
5455
<div id="env">{import.meta.env.VITE_FOO}</div>
56+
<!-- to be transformed into "Hello world!" text -->
57+
<p id="js-transform">{jsTransform}</p>
58+
<!-- to be transformed into "hello-world" class -->
59+
<p id="css-transform">Hello world</p>
5560
</main>
5661

5762
<!-- HMR-TEMPLATE-INJECT -->
@@ -83,6 +88,10 @@
8388
line-height: 1.35;
8489
}
8590
91+
:global(#css-transform) {
92+
color: __CSS_TRANSFORM_1__;
93+
}
94+
8695
@media (min-width: 480px) {
8796
h1 {
8897
max-width: none;

packages/e2e-tests/kit-node/svelte.config.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import node from '@sveltejs/adapter-node';
2+
import { transformValidation } from 'e2e-test-dep-vite-plugins';
23

34
/** @type {import('@sveltejs/kit').Config} */
45
const config = {
@@ -16,7 +17,8 @@ const config = {
1617
usePolling: true,
1718
interval: 100
1819
}
19-
}
20+
},
21+
plugins: [transformValidation()]
2022
}
2123
}
2224
};

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

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -145,22 +145,9 @@ export function svelte(inlineOptions?: Partial<Options>): Plugin {
145145
async transform(code, id, opts) {
146146
const ssr = !!opts?.ssr;
147147
const svelteRequest = requestParser(id, ssr);
148-
if (!svelteRequest) {
148+
if (!svelteRequest || svelteRequest.query.svelte) {
149149
return;
150150
}
151-
const { filename, query } = svelteRequest;
152-
153-
if (query.svelte) {
154-
if (query.type === 'style') {
155-
const css = cache.getCSS(svelteRequest);
156-
if (css) {
157-
log.debug(`transform returns css for ${filename}`);
158-
return css; // TODO return code arg instead? it's the code from load hook.
159-
}
160-
}
161-
log.error('failed to transform tagged svelte request', svelteRequest);
162-
throw new Error(`failed to transform tagged svelte request for id ${id}`);
163-
}
164151
let compileData;
165152
try {
166153
compileData = await compileSvelte(svelteRequest, code, options);
@@ -174,7 +161,7 @@ export function svelte(inlineOptions?: Partial<Options>): Plugin {
174161
ensureWatchedFile(options.server!.watcher, d, options.root);
175162
});
176163
}
177-
log.debug(`transform returns compiled js for ${filename}`);
164+
log.debug(`transform returns compiled js for ${svelteRequest.filename}`);
178165
return compileData.compiled.js;
179166
},
180167

pnpm-lock.yaml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)