@islands/hydration
Version:
Hydration utilities for îles
39 lines (37 loc) • 1.02 kB
JavaScript
import {
onDispose
} from "./chunk-AX6GSPTT.js";
// svelte.ts
import { createRawSnippet, mount, unmount } from "svelte";
function createIsland(Component, id, el, props, slots = {}) {
let children;
let $$slots;
let renderFns = {};
Object.entries(slots).forEach(([slotName, html]) => {
const fnName = slotName === "default" ? "children" : slotName;
renderFns[fnName] = createRawSnippet(() => ({ render: () => html }));
$$slots ??= {};
if (slotName === "default") {
$$slots.default = true;
children = renderFns[fnName];
} else {
$$slots[fnName] = renderFns[fnName];
}
});
const component = mount(Component, {
target: el,
props: {
...props,
children,
$$slots,
...renderFns
}
});
if (import.meta.env.DISPOSE_ISLANDS)
onDispose(id, () => unmount(component));
if (import.meta.env.DEV)
window.__ILE_DEVTOOLS__?.onHydration({ id, el, props, slots, component, framework: "svelte" });
}
export {
createIsland as default
};