|
|
|
|
@ -62,28 +62,44 @@ export function wrap_snippet(component, fn) {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @template T
|
|
|
|
|
* @typedef {{
|
|
|
|
|
* [K in keyof T]: () => T[K];
|
|
|
|
|
* }} LazyParams
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create a snippet imperatively using mount, hyrdate and render functions.
|
|
|
|
|
* @template {unknown[]} Params
|
|
|
|
|
* @param {{
|
|
|
|
|
* mount: (...params: any[]) => Element,
|
|
|
|
|
* hydrate?: (element: Element, ...params: any[]) => void,
|
|
|
|
|
* render: (...params: any[]) => string
|
|
|
|
|
* mount: (...params: LazyParams<Params>) => Element,
|
|
|
|
|
* hydrate?: (element: Element, ...params: LazyParams<Params>) => void,
|
|
|
|
|
* render: (...params: Params) => string
|
|
|
|
|
* }} options
|
|
|
|
|
* @returns {import('svelte').Snippet<Params>}
|
|
|
|
|
*/
|
|
|
|
|
export function createRawSnippet({ mount, hydrate }) {
|
|
|
|
|
var snippet_fn = (/** @type {TemplateNode} */ anchor, /** @type {any[]} */ ...params) => {
|
|
|
|
|
return add_snippet_symbol((anchor, ...params) => {
|
|
|
|
|
/** @type {Element} */
|
|
|
|
|
var element;
|
|
|
|
|
|
|
|
|
|
if (hydrating) {
|
|
|
|
|
element = hydrate_node;
|
|
|
|
|
element = /** @type {Element} */ (hydrate_node);
|
|
|
|
|
|
|
|
|
|
if (hydrate === undefined) {
|
|
|
|
|
element = mount(...params);
|
|
|
|
|
hydrate_node.replaceWith(element);
|
|
|
|
|
} else {
|
|
|
|
|
hydrate(element, ...params);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
hydrate_next();
|
|
|
|
|
if (hydrate !== undefined) hydrate(/** @type {Element} */ (element), ...params);
|
|
|
|
|
} else {
|
|
|
|
|
element = mount(...params);
|
|
|
|
|
anchor.before(element);
|
|
|
|
|
}
|
|
|
|
|
assign_nodes(element, element);
|
|
|
|
|
};
|
|
|
|
|
add_snippet_symbol(snippet_fn);
|
|
|
|
|
|
|
|
|
|
return snippet_fn;
|
|
|
|
|
assign_nodes(element, element);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|