All files / src/internal/shared validate.js

100% Statements 70/70
100% Branches 14/14
100% Functions 6/6
100% Lines 67/67

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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 682x 2x 2x 2x 2x 2x 2x 2x 2x 2x 22x 22x 22x 2x 2x 2x 2x 2x 2x 19x 3x 3x 16x 16x 16x 2x 2x 2x 2x 2x 2x 3027x 5x 5x 3022x 3022x 3022x 2x 2x 2x 2x 2x 2x 19x 19x 16x 16x 19x 2x 2x 2x 21x 21x 21x 2x 2x 21x 2x 2x 2x 2x 2x 2x 375x 3x 3x 375x  
import { is_void } from '../../compiler/phases/1-parse/utils/names.js';
import * as w from './warnings.js';
import * as e from './errors.js';
 
const snippet_symbol = Symbol.for('svelte.snippet');
 
/**
 * @param {any} fn
 */
export function add_snippet_symbol(fn) {
	fn[snippet_symbol] = true;
	return fn;
}
 
/**
 * Validate that the function handed to `{@render ...}` is a snippet function, and not some other kind of function.
 * @param {any} snippet_fn
 */
export function validate_snippet(snippet_fn) {
	if (snippet_fn && snippet_fn[snippet_symbol] !== true) {
		e.render_tag_invalid_argument();
	}
 
	return snippet_fn;
}
 
/**
 * Validate that the function behind `<Component />` isn't a snippet.
 * @param {any} component_fn
 */
export function validate_component(component_fn) {
	if (component_fn?.[snippet_symbol] === true) {
		e.snippet_used_as_component();
	}
 
	return component_fn;
}
 
/**
 * @param {() => string} tag_fn
 * @returns {void}
 */
export function validate_void_dynamic_element(tag_fn) {
	const tag = tag_fn();
	if (tag && is_void(tag)) {
		w.dynamic_void_element_content(false, tag);
	}
}
 
/** @param {() => unknown} tag_fn */
export function validate_dynamic_element_tag(tag_fn) {
	const tag = tag_fn();
	const is_string = typeof tag === 'string';
	if (tag && !is_string) {
		e.svelte_element_invalid_this_value();
	}
}
 
/**
 * @param {any} store
 * @param {string} name
 */
export function validate_store(store, name) {
	if (store != null && typeof store.subscribe !== 'function') {
		e.store_invalid_shape(name);
	}
}