30 lines
773 B
JavaScript
30 lines
773 B
JavaScript
import { sharedConfig } from 'solid-js';
|
|
import { hydrate, createComponent } from 'solid-js/web';
|
|
|
|
export default (element) => (Component, props, childHTML) => {
|
|
// Prepare global object expected by Solid's hydration logic
|
|
if (!window._$HY) {
|
|
window._$HY = { events: [], completed: new WeakSet(), r: {} };
|
|
}
|
|
// Perform actual hydration
|
|
let children;
|
|
hydrate(
|
|
() =>
|
|
createComponent(Component, {
|
|
...props,
|
|
get children() {
|
|
if (childHTML != null) {
|
|
// hydrating
|
|
if (sharedConfig.context) children = element.querySelector('astro-fragment');
|
|
|
|
if (children == null) {
|
|
children = document.createElement('astro-fragment');
|
|
children.innerHTML = childHTML;
|
|
}
|
|
}
|
|
return children;
|
|
},
|
|
}),
|
|
element
|
|
);
|
|
};
|