@islands/hydration
Version:
Hydration utilities for îles
29 lines (27 loc) • 1.02 kB
JavaScript
import {
onDispose
} from "./chunk-AX6GSPTT.js";
// vue.ts
import { h, createApp as createClientApp, createStaticVNode, createSSRApp } from "vue";
var createVueApp = import.meta.env.SSR ? createSSRApp : createClientApp;
function createVueIsland(component, id, el, props, slots) {
const slotFns = slots && Object.fromEntries(Object.entries(slots).map(([slotName, content]) => {
return [slotName, () => createStaticVNode(content)];
}));
const appDefinition = { render: () => h(component, props, slotFns) };
if (import.meta.env.DEV)
appDefinition.name = `Island: ${nameFromFile(component.__file)}`;
const app = createVueApp(appDefinition);
app.mount(el, Boolean(slots));
if (import.meta.env.DISPOSE_ISLANDS)
onDispose(id, app.unmount);
if (import.meta.env.DEV)
window.__ILE_DEVTOOLS__?.onHydration({ id, el, props, slots, component });
}
function nameFromFile(file) {
const regex = /(\w+?)(?:\.vue)?$/;
return file?.match(regex)?.[1] || file;
}
export {
createVueIsland as default
};