Skip to content

Commit

Permalink
Use rendered CSS for AMP pages, rather than emitted CSS (#1408)
Browse files Browse the repository at this point in the history
* failing test for #808

* use rendered CSS for AMP pages, rather than emitted CSS - fixes #808

* bump vite-plugin-svelte

* oops
  • Loading branch information
Rich Harris committed May 11, 2021
1 parent 3fab470 commit cfd6c3c
Show file tree
Hide file tree
Showing 11 changed files with 61 additions and 11 deletions.
5 changes: 5 additions & 0 deletions .changeset/happy-nails-draw.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@sveltejs/kit': patch
---

Use rendered CSS for AMP pages
2 changes: 1 addition & 1 deletion packages/kit/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"version": "1.0.0-next.104",
"type": "module",
"dependencies": {
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.9",
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.10",
"cheap-watch": "^1.0.3",
"sade": "^1.7.4",
"vite": "^2.2.4"
Expand Down
3 changes: 2 additions & 1 deletion packages/kit/src/core/build/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,8 @@ async function build_client({
plugins: [
...(user_config.plugins || []),
svelte({
extensions: config.extensions
extensions: config.extensions,
emitCss: !config.kit.amp
})
]
});
Expand Down
3 changes: 2 additions & 1 deletion packages/kit/src/core/dev/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ class Watcher extends EventEmitter {
plugins: [
...(user_config.plugins || []),
svelte({
extensions: this.config.extensions
extensions: this.config.extensions,
emitCss: !this.config.kit.amp
})
],
publicDir: this.config.kit.files.assets,
Expand Down
6 changes: 3 additions & 3 deletions packages/kit/src/runtime/server/page/render.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,16 +87,16 @@ export async function render_response({
unsubscribe();
}
} else {
rendered = { head: '', html: '', css: '' };
rendered = { head: '', html: '', css: { code: '', map: null } };
}

const include_js = page_config.router || page_config.hydrate;
if (!include_js) js.clear();

// TODO strip the AMP stuff out of the build if not relevant
const links = options.amp
? styles.size > 0
? `<style amp-custom>${Array.from(styles).join('\n')}</style>`
? styles.size > 0 || rendered.css.code.length > 0
? `<style amp-custom>${Array.from(styles).concat(rendered.css.code).join('\n')}</style>`
: ''
: [
...Array.from(js).map((dep) => `<link rel="modulepreload" href="${dep}">`),
Expand Down
7 changes: 7 additions & 0 deletions packages/kit/test/apps/amp/src/routes/styles/Unused.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<p class="shouty">this component will never be rendered</p>

<style>
p {
color: #40b3ff;
}
</style>
12 changes: 12 additions & 0 deletions packages/kit/test/apps/amp/src/routes/styles/_tests.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import * as assert from 'uvu/assert';

/** @type {import('test').TestMaker} */
export default function (test, is_dev) {
test('only includes CSS for rendered components', '/styles', async ({ page }) => {
const style = await page.innerHTML('style[amp-custom]');

assert.ok(style.includes('#ff3e00'), 'Rendered styles are included');
assert.ok(style.includes('uppercase'), 'Imported styles are included');
assert.ok(!style.includes('#40b3ff'), 'Unrendered styles are omitted');
});
}
3 changes: 3 additions & 0 deletions packages/kit/test/apps/amp/src/routes/styles/imported.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.shouty {
text-transform: uppercase;
}
18 changes: 18 additions & 0 deletions packages/kit/test/apps/amp/src/routes/styles/index.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<script>
import { amp } from '$app/env';
import Unused from './Unused.svelte';
import './imported.css';
</script>

{#if amp}
<p class="shouty">this text is rendered</p>
{:else}
<Unused/>
{/if}


<style>
p {
color: #ff3e00;
}
</style>
5 changes: 4 additions & 1 deletion packages/kit/types/internal.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,10 @@ export type SSRComponent = {
) => {
html: string;
head: string;
css: string;
css: {
code: string;
map: any; // TODO
};
};
};
};
Expand Down
8 changes: 4 additions & 4 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit cfd6c3c

Please sign in to comment.