Home / Function/ process_children() — svelte Function Reference

process_children() — svelte Function Reference

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

Function javascript Compiler Transformer calls 4 called by 3

Entity Profile

Dependency Diagram

graph TD
  4ec029f0_bbf8_66de_0dbf_d15eef3e10a0["process_children()"]
  74eddc85_a390_2aab_af5a_ef32b77d5430["utils.js"]
  4ec029f0_bbf8_66de_0dbf_d15eef3e10a0 -->|defined in| 74eddc85_a390_2aab_af5a_ef32b77d5430
  018cf13b_00c1_1002_de36_76e71d0a0a5e["Fragment()"]
  018cf13b_00c1_1002_de36_76e71d0a0a5e -->|calls| 4ec029f0_bbf8_66de_0dbf_d15eef3e10a0
  602abe50_d235_587e_7077_a4250fe9dc79["RegularElement()"]
  602abe50_d235_587e_7077_a4250fe9dc79 -->|calls| 4ec029f0_bbf8_66de_0dbf_d15eef3e10a0
  2cc87ff4_8315_a5e3_6fa2_6ca8a78b161c["TitleElement()"]
  2cc87ff4_8315_a5e3_6fa2_6ca8a78b161c -->|calls| 4ec029f0_bbf8_66de_0dbf_d15eef3e10a0
  d6dfd043_7103_f2c7_aab3_9660fb0a5f75["escape_html()"]
  4ec029f0_bbf8_66de_0dbf_d15eef3e10a0 -->|calls| d6dfd043_7103_f2c7_aab3_9660fb0a5f75
  f58b3d9a_75d2_270c_fa96_1df0cdee1d8f["sanitize_template_string()"]
  4ec029f0_bbf8_66de_0dbf_d15eef3e10a0 -->|calls| f58b3d9a_75d2_270c_fa96_1df0cdee1d8f
  c5103d74_690b_5e58_b211_85c417500d79["is_async()"]
  4ec029f0_bbf8_66de_0dbf_d15eef3e10a0 -->|calls| c5103d74_690b_5e58_b211_85c417500d79
  9cf014c4_f551_2661_0229_f990b01327ac["blockers()"]
  4ec029f0_bbf8_66de_0dbf_d15eef3e10a0 -->|calls| 9cf014c4_f551_2661_0229_f990b01327ac
  style 4ec029f0_bbf8_66de_0dbf_d15eef3e10a0 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js lines 36–106

export function process_children(nodes, { visit, state }) {
	/** @type {Array<AST.Text | AST.Comment | AST.ExpressionTag>} */
	let sequence = [];

	function flush() {
		if (sequence.length === 0) {
			return;
		}

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

		/** @type {Expression[]} */
		const expressions = [];

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

			if (node.type === 'Text' || node.type === 'Comment') {
				quasi.value.cooked +=
					node.type === 'Comment' ? `<!--${node.data}-->` : escape_html(node.data);
			} else {
				const evaluated = state.scope.evaluate(node.expression);

				if (evaluated.is_known) {
					quasi.value.cooked += escape_html((evaluated.value ?? '') + '');
				} else {
					expressions.push(b.call('$.escape', /** @type {Expression} */ (visit(node.expression))));

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

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

		state.template.push(b.template(quasis, expressions));
		sequence = [];
	}

	for (const node of nodes) {
		if (node.type === 'ExpressionTag' && node.metadata.expression.is_async()) {
			flush();

			const expression = /** @type {Expression} */ (visit(node.expression));

			let call = b.call(
				'$$renderer.push',
				b.thunk(b.call('$.escape', expression), node.metadata.expression.has_await)
			);

			const blockers = node.metadata.expression.blockers();

			if (blockers.elements.length > 0) {
				call = b.call('$$renderer.async', blockers, b.arrow([b.id('$$renderer')], call));
			}

			state.template.push(b.stmt(call));
		} else if (node.type === 'Text' || node.type === 'Comment' || node.type === 'ExpressionTag') {
			sequence.push(node);
		} else {
			flush();
			visit(node, { ...state });
		}
	}

	flush();
}

Domain

Subdomains

Frequently Asked Questions

What does process_children() do?
process_children() is a function in the svelte codebase, defined in packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js.
Where is process_children() defined?
process_children() is defined in packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js at line 36.
What does process_children() call?
process_children() calls 4 function(s): blockers, escape_html, is_async, sanitize_template_string.
What calls process_children()?
process_children() is called by 3 function(s): Fragment, RegularElement, TitleElement.

Analyze Your Own Codebase

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

Try Supermodel Free