summaryrefslogtreecommitdiff
path: root/packages/integrations/vue
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/vue')
-rw-r--r--packages/integrations/vue/client.js1
-rw-r--r--packages/integrations/vue/context.js24
-rw-r--r--packages/integrations/vue/server.js10
-rw-r--r--packages/integrations/vue/test/basics.test.js9
-rw-r--r--packages/integrations/vue/test/fixtures/basics/src/components/WithId.vue9
-rw-r--r--packages/integrations/vue/test/fixtures/basics/src/pages/index.astro3
6 files changed, 55 insertions, 1 deletions
diff --git a/packages/integrations/vue/client.js b/packages/integrations/vue/client.js
index 58ee11d5c..b3935752c 100644
--- a/packages/integrations/vue/client.js
+++ b/packages/integrations/vue/client.js
@@ -40,6 +40,7 @@ export default (element) =>
return content;
},
});
+ app.config.idPrefix = element.getAttribute('prefix');
await setup(app);
app.mount(element, isHydrate);
appMap.set(element, appInstance);
diff --git a/packages/integrations/vue/context.js b/packages/integrations/vue/context.js
new file mode 100644
index 000000000..80a569ce6
--- /dev/null
+++ b/packages/integrations/vue/context.js
@@ -0,0 +1,24 @@
+const contexts = new WeakMap();
+
+const ID_PREFIX = 'v';
+
+function getContext(rendererContextResult) {
+ if (contexts.has(rendererContextResult)) {
+ return contexts.get(rendererContextResult);
+ }
+ const ctx = {
+ currentIndex: 0,
+ get id() {
+ return ID_PREFIX + this.currentIndex.toString();
+ },
+ };
+ contexts.set(rendererContextResult, ctx);
+ return ctx;
+}
+
+export function incrementId(rendererContextResult) {
+ const ctx = getContext(rendererContextResult);
+ const id = ctx.id;
+ ctx.currentIndex++;
+ return id;
+}
diff --git a/packages/integrations/vue/server.js b/packages/integrations/vue/server.js
index afdc9e8a2..5b7f6cb50 100644
--- a/packages/integrations/vue/server.js
+++ b/packages/integrations/vue/server.js
@@ -2,12 +2,19 @@ import { setup } from 'virtual:@astrojs/vue/app';
import { createSSRApp, h } from 'vue';
import { renderToString } from 'vue/server-renderer';
import StaticHtml from './static-html.js';
+import { incrementId } from './context.js';
function check(Component) {
return !!Component['ssrRender'] || !!Component['__ssrInlineRender'];
}
async function renderToStaticMarkup(Component, inputProps, slotted, metadata) {
+ let prefix;
+ if (this && this.result) {
+ prefix = incrementId(this.result);
+ }
+ const attrs = { prefix };
+
const slots = {};
const props = { ...inputProps };
delete props.slot;
@@ -21,9 +28,10 @@ async function renderToStaticMarkup(Component, inputProps, slotted, metadata) {
});
}
const app = createSSRApp({ render: () => h(Component, props, slots) });
+ app.config.idPrefix = prefix;
await setup(app);
const html = await renderToString(app);
- return { html };
+ return { html, attrs };
}
export default {
diff --git a/packages/integrations/vue/test/basics.test.js b/packages/integrations/vue/test/basics.test.js
index 4eb2b987c..d54ea66b6 100644
--- a/packages/integrations/vue/test/basics.test.js
+++ b/packages/integrations/vue/test/basics.test.js
@@ -30,4 +30,13 @@ describe('Basics', () => {
assert.notEqual(img, undefined);
assert.equal(img.getAttribute('src'), '/light_walrus.avif');
});
+
+ it('Should generate unique ids when using useId()', async () => {
+ const data = await fixture.readFile('/index.html');
+ const { document } = parseHTML(data);
+
+ const els = document.querySelectorAll('.vue-use-id');
+ assert.equal(els.length, 2);
+ assert.notEqual(els[0].getAttribute('id'), els[1].getAttribute('id'));
+ });
});
diff --git a/packages/integrations/vue/test/fixtures/basics/src/components/WithId.vue b/packages/integrations/vue/test/fixtures/basics/src/components/WithId.vue
new file mode 100644
index 000000000..2c8667696
--- /dev/null
+++ b/packages/integrations/vue/test/fixtures/basics/src/components/WithId.vue
@@ -0,0 +1,9 @@
+<script setup>
+import { useId } from "vue"
+
+const id = useId()
+</script>
+
+<template>
+ <p class="vue-use-id" :id="id">{{ id }}</p>
+</template> \ No newline at end of file
diff --git a/packages/integrations/vue/test/fixtures/basics/src/pages/index.astro b/packages/integrations/vue/test/fixtures/basics/src/pages/index.astro
index b2f292d10..162b326c8 100644
--- a/packages/integrations/vue/test/fixtures/basics/src/pages/index.astro
+++ b/packages/integrations/vue/test/fixtures/basics/src/pages/index.astro
@@ -1,6 +1,7 @@
---
import Bar from '../components/Foo.vue';
import Parent from '../components/Parent.astro';
+import WithId from '../components/WithId.vue';
---
<html>
<head>
@@ -10,5 +11,7 @@ import Parent from '../components/Parent.astro';
<Parent>
<Bar slot="footer" />
</Parent>
+ <WithId client:idle />
+ <WithId client:idle />
</body>
</html>
ght'> 2023-09-01Fix run button starting cwd at /Gravatar Ashcon Partovi 1-0/+2 2023-09-01fix(runtime): fix dns_resolver crash (#4435)Gravatar dave caruso 3-17/+19 * fix incorrect c pointer * format * lets go * random other test case fixed * hanassagi patch * Update dns_resolver.zig * Revert "Update dns_resolver.zig" This reverts commit 53eb338048583a338e7c01d2b351f1c679db3e15. * See if the tests pass --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> 2023-09-01Fix background colorGravatar Ashcon Partovi 1-2/+3 2023-09-01Allow older versions of VSCodeGravatar Ashcon Partovi 2-6/+5 2023-09-01Fix README for extensionGravatar Ashcon Partovi 2-7/+12 2023-09-01Update VSCode extensionGravatar Ashcon Partovi 1-3/+4 2023-09-01Fix breakpoint on entry for extensionGravatar Ashcon Partovi 5-18/+15 2023-09-01Add Bun.canReload event to inspectorGravatar Ashcon Partovi 2-0/+17 2023-08-31JavaScript Debug Terminal == Bun TerminalGravatar Ashcon Partovi 1-0/+32 2023-08-31fix(runtime): `fs.cp` edge cases (#4439)Gravatar dave caruso 2-8/+44 * yippee * enable cpSync tests * much better * that doesnt actually do anything * lose 2023-08-31only set initial debugger breakpoint once (#4441)Gravatar Dylan Conway 1-2/+11 * unset `set_breakpoint_on_first_line` on reload * move to `module_loader.zig` 2023-08-31Make breakpoints faster in VSCode extensionGravatar Ashcon Partovi 1-241/+327 2023-08-31`bun install` correctly join dependency URLs (#4421)Gravatar Julian 6-64/+243 * use WTF to join registry strings * show dependency error messages, better join error We actually report errors when enqueuing dependencies now. I also made the join URLs error message read better. It'd be cleaner to handle it all in one place, but there's currently no way to propagate the data up. * starting on registry URL tests * added more registry URL tests * [install] prevent optional/peer deps from failing builds Couldn't get the peer dependency test to work, but the code is there. * ran prettier * changed error note to use realname, updated tests * ran prettier again... 2023-08-31get name if not provided in `FormData.append` (#4434)Gravatar Dylan Conway 4-5/+45 * get file name from blob if not provided * add test * another test * format 2023-08-31Fix vscode debug terminalGravatar Ashcon Partovi 1-21/+0