summaryrefslogtreecommitdiff
path: root/packages/integrations/vue
diff options
context:
space:
mode:
authorGravatar Michael Thomas <michaelhthomas@Outlook.com> 2024-01-01 02:44:17 -0500
committerGravatar GitHub <noreply@github.com> 2024-01-01 15:44:17 +0800
commite496b2e3b84b673b81c872dad9a6b3f9dd32396a (patch)
tree47d60fa5a97a183828c0598d3f3830bcc478e662 /packages/integrations/vue
parent22f42d11a4fd2e154a0c5873c4f516584e383b70 (diff)
downloadastro-e496b2e3b84b673b81c872dad9a6b3f9dd32396a.tar.gz
astro-e496b2e3b84b673b81c872dad9a6b3f9dd32396a.tar.zst
astro-e496b2e3b84b673b81c872dad9a6b3f9dd32396a.zip
Fix asynchronous `appEntrypoint` support (#9558)
Diffstat (limited to 'packages/integrations/vue')
-rw-r--r--packages/integrations/vue/src/index.ts4
-rw-r--r--packages/integrations/vue/test/app-entrypoint.test.js23
-rw-r--r--packages/integrations/vue/test/fixtures/app-entrypoint-async/astro.config.mjs14
-rw-r--r--packages/integrations/vue/test/fixtures/app-entrypoint-async/package.json10
-rw-r--r--packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Bar.vue3
-rw-r--r--packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Baz.vue3
-rw-r--r--packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Foo.vue6
-rw-r--r--packages/integrations/vue/test/fixtures/app-entrypoint-async/src/pages/_app.ts11
-rw-r--r--packages/integrations/vue/test/fixtures/app-entrypoint-async/src/pages/index.astro12
9 files changed, 84 insertions, 2 deletions
diff --git a/packages/integrations/vue/src/index.ts b/packages/integrations/vue/src/index.ts
index 00cb9f19a..8cd1172a9 100644
--- a/packages/integrations/vue/src/index.ts
+++ b/packages/integrations/vue/src/index.ts
@@ -63,9 +63,9 @@ function virtualAppEntrypoint(options?: Options): Plugin {
return `\
import * as mod from ${JSON.stringify(appEntrypoint)};
-export const setup = (app) => {
+export const setup = async (app) => {
if ('default' in mod) {
- mod.default(app);
+ await mod.default(app);
} else {
${
!isBuild
diff --git a/packages/integrations/vue/test/app-entrypoint.test.js b/packages/integrations/vue/test/app-entrypoint.test.js
index 3a374be1c..04bfdf9dc 100644
--- a/packages/integrations/vue/test/app-entrypoint.test.js
+++ b/packages/integrations/vue/test/app-entrypoint.test.js
@@ -185,3 +185,26 @@ describe('App Entrypoint /src/absolute', () => {
expect(js).not.to.match(/\w+\.component\(\"Bar\"/gm);
});
});
+
+describe('App Entrypoint async', () => {
+ /** @type {import('./test-utils').Fixture} */
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: './fixtures/app-entrypoint-async/',
+ });
+ await fixture.build();
+ });
+
+ it('loads during SSR', async () => {
+ const html = await fixture.readFile('/index.html');
+ const $ = cheerioLoad(html);
+
+ // test 1: component before await renders
+ expect($('#foo > #bar').text()).to.eq('works');
+
+ // test 2: component after await renders
+ expect($('#foo > #baz').text()).to.eq('works');
+ });
+});
diff --git a/packages/integrations/vue/test/fixtures/app-entrypoint-async/astro.config.mjs b/packages/integrations/vue/test/fixtures/app-entrypoint-async/astro.config.mjs
new file mode 100644
index 000000000..fa04f9c8b
--- /dev/null
+++ b/packages/integrations/vue/test/fixtures/app-entrypoint-async/astro.config.mjs
@@ -0,0 +1,14 @@
+import { defineConfig } from 'astro/config';
+import vue from '@astrojs/vue';
+import ViteSvgLoader from 'vite-svg-loader'
+
+export default defineConfig({
+ integrations: [vue({
+ appEntrypoint: '/src/pages/_app'
+ })],
+ vite: {
+ plugins: [
+ ViteSvgLoader(),
+ ],
+ },
+})
diff --git a/packages/integrations/vue/test/fixtures/app-entrypoint-async/package.json b/packages/integrations/vue/test/fixtures/app-entrypoint-async/package.json
new file mode 100644
index 000000000..a1bcef08d
--- /dev/null
+++ b/packages/integrations/vue/test/fixtures/app-entrypoint-async/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@test/vue-app-entrypoint-async",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/vue": "workspace:*",
+ "astro": "workspace:*",
+ "vite-svg-loader": "5.0.1"
+ }
+} \ No newline at end of file
diff --git a/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Bar.vue b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Bar.vue
new file mode 100644
index 000000000..9e690ea06
--- /dev/null
+++ b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Bar.vue
@@ -0,0 +1,3 @@
+<template>
+ <div id="bar">works</div>
+</template>
diff --git a/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Baz.vue b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Baz.vue
new file mode 100644
index 000000000..8d7cb6b7c
--- /dev/null
+++ b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Baz.vue
@@ -0,0 +1,3 @@
+<template>
+ <div id="baz">works</div>
+</template>
diff --git a/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Foo.vue b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Foo.vue
new file mode 100644
index 000000000..94dd36584
--- /dev/null
+++ b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/components/Foo.vue
@@ -0,0 +1,6 @@
+<template>
+ <div id="foo">
+ <Bar />
+ <Baz />
+ </div>
+</template>
diff --git a/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/pages/_app.ts b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/pages/_app.ts
new file mode 100644
index 000000000..d2bc5396a
--- /dev/null
+++ b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/pages/_app.ts
@@ -0,0 +1,11 @@
+import type { App } from 'vue'
+import Bar from '../components/Bar.vue'
+import Baz from '../components/Baz.vue'
+
+export default async function setup(app: App) {
+ app.component('Bar', Bar);
+
+ await new Promise(resolve => setTimeout(resolve, 250));
+
+ app.component('Baz', Baz);
+}
diff --git a/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/pages/index.astro b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/pages/index.astro
new file mode 100644
index 000000000..3240cbe0f
--- /dev/null
+++ b/packages/integrations/vue/test/fixtures/app-entrypoint-async/src/pages/index.astro
@@ -0,0 +1,12 @@
+---
+import Foo from '../components/Foo.vue';
+---
+
+<html>
+ <head>
+ <title>Vue App Entrypoint</title>
+ </head>
+ <body>
+ <Foo client:load />
+ </body>
+</html>