All files / src/internal/client/dom/blocks svelte-component.js

100% Statements 33/33
100% Branches 8/8
100% Functions 1/1
100% Lines 32/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 332x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 74x 74x 74x 74x 74x 74x 74x 144x 140x 144x 64x 64x 64x 140x 144x 128x 128x 74x 74x  
import { block, branch, pause_effect } from '../../reactivity/effects.js';
 
// TODO seems weird that `anchor` is unused here — possible bug?
 
/**
 * @template P
 * @template {(props: P) => void} C
 * @param {Comment} anchor
 * @param {() => C} get_component
 * @param {(component: C) => import('#client').Dom | void} render_fn
 * @returns {void}
 */
export function component(anchor, get_component, render_fn) {
	/** @type {C} */
	let component;
 
	/** @type {import('#client').Effect | null} */
	let effect;
 
	block(() => {
		if (component === (component = get_component())) return;
 
		if (effect) {
			pause_effect(effect);
			effect = null;
		}
 
		if (component) {
			effect = branch(() => render_fn(component));
		}
	});
}