summaryrefslogtreecommitdiff
path: root/packages/integrations/vue/src/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/vue/src/index.ts')
-rw-r--r--packages/integrations/vue/src/index.ts26
1 files changed, 24 insertions, 2 deletions
diff --git a/packages/integrations/vue/src/index.ts b/packages/integrations/vue/src/index.ts
index e8ca19025..2af3062bf 100644
--- a/packages/integrations/vue/src/index.ts
+++ b/packages/integrations/vue/src/index.ts
@@ -6,6 +6,7 @@ import type { UserConfig } from 'vite';
interface Options extends VueOptions {
jsx?: boolean | VueJsxOptions;
+ appEntrypoint?: string;
}
function getRenderer(): AstroRenderer {
@@ -31,13 +32,34 @@ function getJsxRenderer(): AstroRenderer {
};
}
+function virtualAppEntrypoint(options?: Options) {
+ const virtualModuleId = 'virtual:@astrojs/vue/app';
+ const resolvedVirtualModuleId = '\0' + virtualModuleId;
+ return {
+ name: '@astrojs/vue/virtual-app',
+ resolveId(id: string) {
+ if (id == virtualModuleId) {
+ return resolvedVirtualModuleId;
+ }
+ },
+ load(id: string) {
+ if (id === resolvedVirtualModuleId) {
+ if (options?.appEntrypoint) {
+ return `export { default as setup } from "${options.appEntrypoint}";`;
+ }
+ return `export const setup = () => {};`;
+ }
+ },
+ };
+}
+
async function getViteConfiguration(options?: Options): Promise<UserConfig> {
const config: UserConfig = {
optimizeDeps: {
include: ['@astrojs/vue/client.js', 'vue'],
- exclude: ['@astrojs/vue/server.js'],
+ exclude: ['@astrojs/vue/server.js', 'virtual:@astrojs/vue/app']
},
- plugins: [vue(options)],
+ plugins: [vue(options), virtualAppEntrypoint(options)],
ssr: {
external: ['@vue/server-renderer'],
noExternal: ['vueperslides'],