Home / Function/ validate_mutation() — svelte Function Reference

validate_mutation() — svelte Function Reference

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

Function javascript Compiler Transformer calls 2 called by 2

Entity Profile

Dependency Diagram

graph TD
  dcd117e6_7004_e4da_f4a2_f82f6e43060c["validate_mutation()"]
  d04d7971_88df_542d_dd4f_26170ce6f581["utils.js"]
  dcd117e6_7004_e4da_f4a2_f82f6e43060c -->|defined in| d04d7971_88df_542d_dd4f_26170ce6f581
  1f789731_ba68_8335_c783_30bddb35964b["AssignmentExpression()"]
  1f789731_ba68_8335_c783_30bddb35964b -->|calls| dcd117e6_7004_e4da_f4a2_f82f6e43060c
  68cf0c33_ad3f_da48_7ecf_ca63584ef620["UpdateExpression()"]
  68cf0c33_ad3f_da48_7ecf_ca63584ef620 -->|calls| dcd117e6_7004_e4da_f4a2_f82f6e43060c
  7a7783f8_ffa6_0cc3_61b0_031882649535["is_ignored()"]
  dcd117e6_7004_e4da_f4a2_f82f6e43060c -->|calls| 7a7783f8_ffa6_0cc3_61b0_031882649535
  804afe56_25d1_9f41_dafe_adc75e952134["object()"]
  dcd117e6_7004_e4da_f4a2_f82f6e43060c -->|calls| 804afe56_25d1_9f41_dafe_adc75e952134
  style dcd117e6_7004_e4da_f4a2_f82f6e43060c fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

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

export function validate_mutation(node, context, expression) {
	let left = /** @type {Expression | Super} */ (
		node.type === 'AssignmentExpression' ? node.left : node.argument
	);

	if (!dev || left.type !== 'MemberExpression' || is_ignored(node, 'ownership_invalid_mutation')) {
		return expression;
	}

	const name = object(left);
	if (!name) return expression;

	const binding = context.state.scope.get(name.name);
	if (binding?.kind !== 'prop' && binding?.kind !== 'bindable_prop') return expression;

	const state = /** @type {ComponentClientTransformState} */ (context.state);
	state.analysis.needs_mutation_validation = true;

	/** @type {Array<Identifier | Literal | Expression>} */
	const path = [];

	while (left.type === 'MemberExpression') {
		if (left.property.type === 'Literal') {
			path.unshift(left.property);
		} else if (left.property.type === 'Identifier') {
			const transform = Object.hasOwn(context.state.transform, left.property.name)
				? context.state.transform[left.property.name]
				: null;
			if (left.computed) {
				path.unshift(transform?.read ? transform.read(left.property) : left.property);
			} else {
				path.unshift(b.literal(left.property.name));
			}
		} else {
			return expression;
		}

		left = left.object;
	}

	path.unshift(b.literal(name.name));

	const loc = locator(/** @type {number} */ (left.start));

	return b.call(
		'$$ownership_validator.mutation',
		b.literal(binding.prop_alias),
		b.array(path),
		expression,
		loc && b.literal(loc.line),
		loc && b.literal(loc.column)
	);
}

Domain

Subdomains

Frequently Asked Questions

What does validate_mutation() do?
validate_mutation() is a function in the svelte codebase, defined in packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js.
Where is validate_mutation() defined?
validate_mutation() is defined in packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js at line 382.
What does validate_mutation() call?
validate_mutation() calls 2 function(s): is_ignored, object.
What calls validate_mutation()?
validate_mutation() is called by 2 function(s): AssignmentExpression, UpdateExpression.

Analyze Your Own Codebase

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

Try Supermodel Free