summaryrefslogtreecommitdiff
path: root/packages/integrations/vue
diff options
context:
space:
mode:
authorGravatar Matthew Phillips <matthew@skypack.dev> 2023-10-27 08:11:46 -0400
committerGravatar GitHub <noreply@github.com> 2023-10-27 08:11:46 -0400
commitc77f55d9c075569be018dc1fb5a42c932b9071c7 (patch)
tree05ef0749d600bd73071cb5e509b2b1212bb3d6ab /packages/integrations/vue
parentca90b47cfc5e00f5065cf461e2fe50db62215e49 (diff)
downloadastro-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')
-rw-r--r--packages/integrations/vue/server.js4
-rw-r--r--packages/integrations/vue/test/basics.test.js24
-rw-r--r--packages/integrations/vue/test/fixtures/basics/astro.config.mjs6
-rw-r--r--packages/integrations/vue/test/fixtures/basics/package.json9
-rw-r--r--packages/integrations/vue/test/fixtures/basics/src/components/Foo.vue4
-rw-r--r--packages/integrations/vue/test/fixtures/basics/src/components/Parent.astro4
-rw-r--r--packages/integrations/vue/test/fixtures/basics/src/pages/index.astro14
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>