@ -1,5 +1,6 @@
/** @import { Effect, TemplateNode } from '#client' */
/** @import { Getters } from '#shared' */
import { run } from '../../../shared/utils.js' ;
import { add _snippet _symbol } from '../../../shared/validate.js' ;
import { EFFECT _TRANSPARENT } from '../../constants.js' ;
import { branch , block , destroy _effect } from '../../reactivity/effects.js' ;
@ -8,8 +9,8 @@ import {
set _dev _current _component _function
} from '../../runtime.js' ;
import { hydrate _next , hydrate _node , hydrating } from '../hydration.js' ;
import { create _fragment _from _html } from '../reconciler.js' ;
import { assign _nodes } from '../template.js' ;
import * as e from '../../errors.js' ;
/ * *
* @ template { ( node : TemplateNode , ... args : any [ ] ) => void } SnippetFn
@ -65,20 +66,15 @@ export function wrap_snippet(component, fn) {
}
/ * *
* Create a snippet imperatively using mount , hydrate and render functions .
* Create a snippet programmatically
* @ template { unknown [ ] } Params
* @ param { {
* mount ? : ( ... params : Getters < Params > ) => Element ,
* hydrate ? : ( element : Element , ... params : Getters < Params > ) => void ,
* render ? : ( ... params : Params ) => string
* render : ( ... params : Params ) => string
* update ? : ( element : Element , ... params : Getters < Params > ) => void ,
* } } options
* @ returns { import ( 'svelte' ) . Snippet < Params > }
* /
export function createRawSnippet ( { mount , hydrate } ) {
if ( mount === undefined ) {
e . snippet _missing _mount ( ) ;
}
export function createRawSnippet ( { render , update } ) {
return add _snippet _symbol (
( /** @type {TemplateNode} */ anchor , /** @type {Getters<Params>} */ ... params ) => {
/** @type {Element} */
@ -87,17 +83,14 @@ export function createRawSnippet({ mount, hydrate }) {
if ( hydrating ) {
element = /** @type {Element} */ ( hydrate _node ) ;
hydrate _next ( ) ;
if ( hydrate === undefined ) {
element . replaceWith ( ( element = mount ( ... params ) ) ) ;
} else {
hydrate ( element , ... params ) ;
}
} else {
element = mount ( ... params ) ;
var html = render ( ... /** @type {Params} */ ( params . map ( run ) ) ) ;
var fragment = create _fragment _from _html ( html ) ;
element = /** @type {Element} */ ( fragment . firstChild ) ;
anchor . before ( element ) ;
}
update ? . ( element , ... params ) ;
assign _nodes ( element , element ) ;
}
) ;