29 lines
847 B
JavaScript
29 lines
847 B
JavaScript
import { createVNode, defineComponent, onErrorCaptured } from "vue";
|
|
import { injectHead } from "../composables/head.js";
|
|
import { createError } from "../composables/error.js";
|
|
import { islandComponents } from "#build/components.islands.mjs";
|
|
export default defineComponent({
|
|
name: "IslandRenderer",
|
|
props: {
|
|
context: {
|
|
type: Object,
|
|
required: true
|
|
}
|
|
},
|
|
setup(props) {
|
|
const head = injectHead();
|
|
head.entries.clear();
|
|
const component = islandComponents[props.context.name];
|
|
if (!component) {
|
|
throw createError({
|
|
statusCode: 404,
|
|
statusMessage: `Island component not found: ${props.context.name}`
|
|
});
|
|
}
|
|
onErrorCaptured((e) => {
|
|
console.log(e);
|
|
});
|
|
return () => createVNode(component || "span", { ...props.context.props, "data-island-uid": "" });
|
|
}
|
|
});
|