Home / Function/ build_template_chunk() — svelte Function Reference

build_template_chunk() — svelte Function Reference

Architecture documentation for the build_template_chunk() function in utils.js from the svelte codebase.

Function javascript Compiler Transformer calls 4 called by 4

Entity Profile

Dependency Diagram

graph TD
  f3280f06_553d_66c3_8ca2_c3c36dcdda64["build_template_chunk()"]
  d04d7971_88df_542d_dd4f_26170ce6f581["utils.js"]
  f3280f06_553d_66c3_8ca2_c3c36dcdda64 -->|defined in| d04d7971_88df_542d_dd4f_26170ce6f581
  1e3b81f2_cd53_e5a5_0140_a9af38facf99["RegularElement()"]
  1e3b81f2_cd53_e5a5_0140_a9af38facf99 -->|calls| f3280f06_553d_66c3_8ca2_c3c36dcdda64
  fc471bd0_caed_35be_8561_9d55a2505105["TitleElement()"]
  fc471bd0_caed_35be_8561_9d55a2505105 -->|calls| f3280f06_553d_66c3_8ca2_c3c36dcdda64
  e31bc2c2_91c1_b9a9_f78a_2832bddce6c5["build_attribute_value()"]
  e31bc2c2_91c1_b9a9_f78a_2832bddce6c5 -->|calls| f3280f06_553d_66c3_8ca2_c3c36dcdda64
  b52df138_fa9e_4e12_86dd_c455789e68c1["process_children()"]
  b52df138_fa9e_4e12_86dd_c455789e68c1 -->|calls| f3280f06_553d_66c3_8ca2_c3c36dcdda64
  5ff7d39f_78e8_c057_8c8e_279f6e72149e["add()"]
  f3280f06_553d_66c3_8ca2_c3c36dcdda64 -->|calls| 5ff7d39f_78e8_c057_8c8e_279f6e72149e
  66243dec_e2be_a66d_3992_3ea42cf964b5["build_expression()"]
  f3280f06_553d_66c3_8ca2_c3c36dcdda64 -->|calls| 66243dec_e2be_a66d_3992_3ea42cf964b5
  13e926d4_7098_edcb_143e_3e3e944df9b6["has_blockers()"]
  f3280f06_553d_66c3_8ca2_c3c36dcdda64 -->|calls| 13e926d4_7098_edcb_143e_3e3e944df9b6
  f58b3d9a_75d2_270c_fa96_1df0cdee1d8f["sanitize_template_string()"]
  f3280f06_553d_66c3_8ca2_c3c36dcdda64 -->|calls| f58b3d9a_75d2_270c_fa96_1df0cdee1d8f
  style f3280f06_553d_66c3_8ca2_c3c36dcdda64 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js lines 101–188

export function build_template_chunk(
	values,
	context,
	state = context.state,
	memoize = (value, metadata) => state.memoizer.add(value, metadata)
) {
	/** @type {Expression[]} */
	const expressions = [];

	let quasi = b.quasi('');
	const quasis = [quasi];

	let has_state = false;
	let has_await = false;

	for (let i = 0; i < values.length; i++) {
		const node = values[i];

		if (node.type === 'Text') {
			quasi.value.cooked += node.data;
		} else if (node.expression.type === 'Literal') {
			if (node.expression.value != null) {
				quasi.value.cooked += node.expression.value + '';
			}
		} else if (
			node.expression.type !== 'Identifier' ||
			node.expression.name !== 'undefined' ||
			state.scope.get('undefined')
		) {
			let value = memoize(
				build_expression(context, node.expression, node.metadata.expression, state),
				node.metadata.expression
			);

			const evaluated = state.scope.evaluate(value);

			has_await ||= node.metadata.expression.has_await || node.metadata.expression.has_blockers();
			has_state ||= has_await || (node.metadata.expression.has_state && !evaluated.is_known);

			if (values.length === 1) {
				// If we have a single expression, then pass that in directly to possibly avoid doing
				// extra work in the template_effect (instead we do the work in set_text).
				if (evaluated.is_known) {
					value = b.literal((evaluated.value ?? '') + '');
				}

				return { value, has_state };
			}

			if (
				value.type === 'LogicalExpression' &&
				value.right.type === 'Literal' &&
				(value.operator === '??' || value.operator === '||')
			) {
				// `foo ?? null` -=> `foo ?? ''`
				// otherwise leave the expression untouched
				if (value.right.value === null) {
					value = { ...value, right: b.literal('') };
				}
			}

			if (evaluated.is_known) {
				quasi.value.cooked += (evaluated.value ?? '') + '';
			} else {
				if (!evaluated.is_defined) {
					// add `?? ''` where necessary
					value = b.logical('??', value, b.literal(''));
				}

				expressions.push(value);

				quasi = b.quasi('', i + 1 === values.length);
				quasis.push(quasi);
			}
		}
	}

	for (const quasi of quasis) {
		quasi.value.raw = sanitize_template_string(/** @type {string} */ (quasi.value.cooked));
	}

Domain

Subdomains

Frequently Asked Questions

What does build_template_chunk() do?
build_template_chunk() is a function in the svelte codebase, defined in packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js.
Where is build_template_chunk() defined?
build_template_chunk() is defined in packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js at line 101.
What does build_template_chunk() call?
build_template_chunk() calls 4 function(s): add, build_expression, has_blockers, sanitize_template_string.
What calls build_template_chunk()?
build_template_chunk() is called by 4 function(s): RegularElement, TitleElement, build_attribute_value, process_children.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free