Home / Function/ AwaitBlock() — svelte Function Reference

AwaitBlock() — svelte Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  49a90e76_8bb2_2524_8ee4_abb5bc5df675["AwaitBlock()"]
  844ad472_83ed_856d_0120_d6773152f6bb["AwaitBlock.js"]
  49a90e76_8bb2_2524_8ee4_abb5bc5df675 -->|defined in| 844ad472_83ed_856d_0120_d6773152f6bb
  66243dec_e2be_a66d_3992_3ea42cf964b5["build_expression()"]
  49a90e76_8bb2_2524_8ee4_abb5bc5df675 -->|calls| 66243dec_e2be_a66d_3992_3ea42cf964b5
  ee8b2bed_04ff_215a_150b_219fe7b6d684["create_derived_block_argument()"]
  49a90e76_8bb2_2524_8ee4_abb5bc5df675 -->|calls| ee8b2bed_04ff_215a_150b_219fe7b6d684
  575bfb79_8777_5076_eda3_be015882482a["add_svelte_meta()"]
  49a90e76_8bb2_2524_8ee4_abb5bc5df675 -->|calls| 575bfb79_8777_5076_eda3_be015882482a
  c8d80c9d_ab6c_13c0_c85e_a9b120f82f45["blockers()"]
  49a90e76_8bb2_2524_8ee4_abb5bc5df675 -->|calls| c8d80c9d_ab6c_13c0_c85e_a9b120f82f45
  style 49a90e76_8bb2_2524_8ee4_abb5bc5df675 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/compiler/phases/3-transform/client/visitors/AwaitBlock.js lines 14–89

export function AwaitBlock(node, context) {
	context.state.template.push_comment();

	// Visit {#await <expression>} first to ensure that scopes are in the correct order
	const expression = b.thunk(
		build_expression(context, node.expression, node.metadata.expression),
		node.metadata.expression.has_await
	);

	let then_block;
	let catch_block;

	if (node.then) {
		const then_context = {
			...context,
			state: { ...context.state, transform: { ...context.state.transform } }
		};
		const argument = node.value && create_derived_block_argument(node.value, then_context);

		/** @type {Pattern[]} */
		const args = [b.id('$$anchor')];
		if (argument) args.push(argument.id);

		const declarations = argument?.declarations ?? [];
		const block = /** @type {BlockStatement} */ (then_context.visit(node.then, then_context.state));

		then_block = b.arrow(args, b.block([...declarations, ...block.body]));
	}

	if (node.catch) {
		const catch_context = { ...context, state: { ...context.state } };
		const argument = node.error && create_derived_block_argument(node.error, catch_context);

		/** @type {Pattern[]} */
		const args = [b.id('$$anchor')];
		if (argument) args.push(argument.id);

		const declarations = argument?.declarations ?? [];
		const block = /** @type {BlockStatement} */ (
			catch_context.visit(node.catch, catch_context.state)
		);

		catch_block = b.arrow(args, b.block([...declarations, ...block.body]));
	}

	const stmt = add_svelte_meta(
		b.call(
			'$.await',
			context.state.node,
			expression,
			node.pending
				? b.arrow([b.id('$$anchor')], /** @type {BlockStatement} */ (context.visit(node.pending)))
				: b.null,
			then_block,
			catch_block
		),
		node,
		'await'
	);

	if (node.metadata.expression.has_blockers()) {
		context.state.init.push(
			b.stmt(
				b.call(
					'$.async',
					context.state.node,
					node.metadata.expression.blockers(),
					b.array([]),
					b.arrow([context.state.node], b.block([stmt]))
				)
			)
		);
	} else {
		context.state.init.push(stmt);
	}
}

Domain

Subdomains

Frequently Asked Questions

What does AwaitBlock() do?
AwaitBlock() is a function in the svelte codebase, defined in packages/svelte/src/compiler/phases/3-transform/client/visitors/AwaitBlock.js.
Where is AwaitBlock() defined?
AwaitBlock() is defined in packages/svelte/src/compiler/phases/3-transform/client/visitors/AwaitBlock.js at line 14.
What does AwaitBlock() call?
AwaitBlock() calls 4 function(s): add_svelte_meta, blockers, build_expression, create_derived_block_argument.

Analyze Your Own Codebase

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

Try Supermodel Free