diff options
author | 2023-10-27 08:11:46 -0400 | |
---|---|---|
committer | 2023-10-27 08:11:46 -0400 | |
commit | c77f55d9c075569be018dc1fb5a42c932b9071c7 (patch) | |
tree | 05ef0749d600bd73071cb5e509b2b1212bb3d6ab /packages/integrations/vue | |
parent | ca90b47cfc5e00f5065cf461e2fe50db62215e49 (diff) | |
download | astro-c77f55d9c075569be018dc1fb5a42c932b9071c7.tar.gz astro-c77f55d9c075569be018dc1fb5a42c932b9071c7.tar.zst astro-c77f55d9c075569be018dc1fb5a42c932b9071c7.zip |
Prevent passing slot names as props (#8930)
Co-authored-by: Sarah Rainsberger <5098874+sarah11918@users.noreply.github.com>
Co-authored-by: Nate Moore <7118177+natemoo-re@users.noreply.github.com>
Diffstat (limited to 'packages/integrations/vue')
7 files changed, 64 insertions, 1 deletions
diff --git a/packages/integrations/vue/server.js b/packages/integrations/vue/server.js index 4e06baa5f..4bcf04903 100644 --- a/packages/integrations/vue/server.js +++ b/packages/integrations/vue/server.js @@ -7,8 +7,10 @@ function check(Component) { return !!Component['ssrRender'] || !!Component['__ssrInlineRender']; } -async function renderToStaticMarkup(Component, props, slotted, metadata) { +async function renderToStaticMarkup(Component, inputProps, slotted, metadata) { const slots = {}; + const props = { ...inputProps }; + delete props.slot; for (const [key, value] of Object.entries(slotted)) { slots[key] = () => h(StaticHtml, { diff --git a/packages/integrations/vue/test/basics.test.js b/packages/integrations/vue/test/basics.test.js new file mode 100644 index 000000000..a4bdc7f87 --- /dev/null +++ b/packages/integrations/vue/test/basics.test.js @@ -0,0 +1,24 @@ +import { loadFixture } from './test-utils.js'; +import { expect } from 'chai'; +import { parseHTML } from 'linkedom'; +describe('Basics', () => { + /** @type {import('./test-utils').Fixture} */ + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/basics/', + }); + await fixture.build(); + }); + + it('Slots are added without the slot attribute', async () => { + const data = await fixture.readFile('/index.html'); + const { document } = parseHTML(data); + const bar = document.querySelector('#foo'); + + expect(bar).not.to.be.undefined; + expect(bar.getAttribute('slot')).to.be.null; + }); + +}); diff --git a/packages/integrations/vue/test/fixtures/basics/astro.config.mjs b/packages/integrations/vue/test/fixtures/basics/astro.config.mjs new file mode 100644 index 000000000..afd8fbca6 --- /dev/null +++ b/packages/integrations/vue/test/fixtures/basics/astro.config.mjs @@ -0,0 +1,6 @@ +import { defineConfig } from 'astro/config'; +import vue from '@astrojs/vue'; + +export default defineConfig({ + integrations: [vue()], +}) diff --git a/packages/integrations/vue/test/fixtures/basics/package.json b/packages/integrations/vue/test/fixtures/basics/package.json new file mode 100644 index 000000000..9cae3999c --- /dev/null +++ b/packages/integrations/vue/test/fixtures/basics/package.json @@ -0,0 +1,9 @@ +{ + "name": "@test/vue-basics", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*", + "@astrojs/vue": "workspace:*" + } +} diff --git a/packages/integrations/vue/test/fixtures/basics/src/components/Foo.vue b/packages/integrations/vue/test/fixtures/basics/src/components/Foo.vue new file mode 100644 index 000000000..29db411cd --- /dev/null +++ b/packages/integrations/vue/test/fixtures/basics/src/components/Foo.vue @@ -0,0 +1,4 @@ + +<template> + <div id="foo">bar</div> +</template> diff --git a/packages/integrations/vue/test/fixtures/basics/src/components/Parent.astro b/packages/integrations/vue/test/fixtures/basics/src/components/Parent.astro new file mode 100644 index 000000000..25c574998 --- /dev/null +++ b/packages/integrations/vue/test/fixtures/basics/src/components/Parent.astro @@ -0,0 +1,4 @@ +<section> + <header></header> + <footer><slot name="footer"></slot></footer> +</section> diff --git a/packages/integrations/vue/test/fixtures/basics/src/pages/index.astro b/packages/integrations/vue/test/fixtures/basics/src/pages/index.astro new file mode 100644 index 000000000..e17de6edf --- /dev/null +++ b/packages/integrations/vue/test/fixtures/basics/src/pages/index.astro @@ -0,0 +1,14 @@ +--- +import Parent from '../components/Parent.astro'; +import Bar from '../components/Foo.vue'; +--- +<html> + <head> + <title>Testing</title> + </head> + <body> + <Parent> + <Bar slot="footer" /> + </Parent> + </body> +</html> |