Home / Function/ build_assignment() — svelte Function Reference

build_assignment() — svelte Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  929ea076_708a_da33_cc6d_97e3e8d16c93["build_assignment()"]
  f75f2dc9_b2ee_72df_1184_7fbc8c163e48["AssignmentExpression.js"]
  929ea076_708a_da33_cc6d_97e3e8d16c93 -->|defined in| f75f2dc9_b2ee_72df_1184_7fbc8c163e48
  d69a156c_617a_9397_4c8b_e94508c59e30["get_name()"]
  929ea076_708a_da33_cc6d_97e3e8d16c93 -->|calls| d69a156c_617a_9397_4c8b_e94508c59e30
  627dc2f8_4dbc_5bb1_8f54_cee503e17098["get()"]
  929ea076_708a_da33_cc6d_97e3e8d16c93 -->|calls| 627dc2f8_4dbc_5bb1_8f54_cee503e17098
  bed91719_d047_2256_e199_ee875d5f49b9["get_rune()"]
  929ea076_708a_da33_cc6d_97e3e8d16c93 -->|calls| bed91719_d047_2256_e199_ee875d5f49b9
  a3992cec_6c90_d564_7bfc_3ad8518003cc["build_assignment_value()"]
  929ea076_708a_da33_cc6d_97e3e8d16c93 -->|calls| a3992cec_6c90_d564_7bfc_3ad8518003cc
  b390044c_0a62_db9d_b3e4_445e28c237d2["is_store_name()"]
  929ea076_708a_da33_cc6d_97e3e8d16c93 -->|calls| b390044c_0a62_db9d_b3e4_445e28c237d2
  804afe56_25d1_9f41_dafe_adc75e952134["object()"]
  929ea076_708a_da33_cc6d_97e3e8d16c93 -->|calls| 804afe56_25d1_9f41_dafe_adc75e952134
  style 929ea076_708a_da33_cc6d_97e3e8d16c93 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js lines 26–100

function build_assignment(operator, left, right, context) {
	if (
		context.state.analysis.runes &&
		left.type === 'MemberExpression' &&
		left.object.type === 'ThisExpression' &&
		!left.computed
	) {
		const name = get_name(left.property);
		const field = name && context.state.state_fields.get(name);

		// special case — state declaration in class constructor
		if (field && field.node.type === 'AssignmentExpression' && left === field.node.left) {
			const rune = get_rune(right, context.state.scope);

			if (rune) {
				const key =
					left.property.type === 'PrivateIdentifier' || rune === '$state' || rune === '$state.raw'
						? left.property
						: field.key;

				return b.assignment(
					operator,
					b.member(b.this, key, key.type === 'Literal'),
					/** @type {Expression} */ (context.visit(right))
				);
			}
		} else if (
			field &&
			(field.type === '$derived' || field.type === '$derived.by') &&
			left.property.type === 'PrivateIdentifier'
		) {
			let value = /** @type {Expression} */ (
				context.visit(build_assignment_value(operator, left, right))
			);
			return b.call(b.member(b.this, name), value);
		}
	}

	let object = left;

	while (object.type === 'MemberExpression') {
		// @ts-expect-error
		object = object.object;
	}

	if (object.type !== 'Identifier' || !is_store_name(object.name)) {
		return null;
	}

	const name = object.name.slice(1);

	if (!context.state.scope.get(name)) {
		return null;
	}

	if (object === left) {
		let value = /** @type {Expression} */ (
			context.visit(build_assignment_value(operator, left, right))
		);

		return b.call('$.store_set', b.id(name), value);
	}

	return b.call(
		'$.store_mutate',
		b.assignment('??=', b.id('$$store_subs'), b.object([])),
		b.literal(object.name),
		b.id(name),
		b.assignment(
			operator,
			/** @type {Pattern} */ (context.visit(left)),
			/** @type {Expression} */ (context.visit(right))
		)
	);
}

Domain

Subdomains

Frequently Asked Questions

What does build_assignment() do?
build_assignment() is a function in the svelte codebase, defined in packages/svelte/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js.
Where is build_assignment() defined?
build_assignment() is defined in packages/svelte/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js at line 26.
What does build_assignment() call?
build_assignment() calls 6 function(s): build_assignment_value, get, get_name, get_rune, is_store_name, object.

Analyze Your Own Codebase

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

Try Supermodel Free