UNPKG

@islands/hydration

Version:

Hydration utilities for îles

29 lines (27 loc) 1.02 kB
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 };