Home / Function/ BindDirective() — svelte Function Reference

BindDirective() — svelte Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  059abfac_6785_3551_13a8_b20c40ff070b["BindDirective()"]
  f59848c5_33bd_24cb_c787_66ccdd8d5b5e["BindDirective.js"]
  059abfac_6785_3551_13a8_b20c40ff070b -->|defined in| f59848c5_33bd_24cb_c787_66ccdd8d5b5e
  7a7783f8_ffa6_0cc3_61b0_031882649535["is_ignored()"]
  059abfac_6785_3551_13a8_b20c40ff070b -->|calls| 7a7783f8_ffa6_0cc3_61b0_031882649535
  6922c44b_14fe_b017_d157_304290a82a06["validate_binding()"]
  059abfac_6785_3551_13a8_b20c40ff070b -->|calls| 6922c44b_14fe_b017_d157_304290a82a06
  8027aa4e_4fda_68d8_71fa_0a45b97acb64["build_bind_this()"]
  059abfac_6785_3551_13a8_b20c40ff070b -->|calls| 8027aa4e_4fda_68d8_71fa_0a45b97acb64
  653284b2_68fd_eee3_0064_918a4c065d4a["is_text_attribute()"]
  059abfac_6785_3551_13a8_b20c40ff070b -->|calls| 653284b2_68fd_eee3_0064_918a4c065d4a
  e31bc2c2_91c1_b9a9_f78a_2832bddce6c5["build_attribute_value()"]
  059abfac_6785_3551_13a8_b20c40ff070b -->|calls| e31bc2c2_91c1_b9a9_f78a_2832bddce6c5
  c8d80c9d_ab6c_13c0_c85e_a9b120f82f45["blockers()"]
  059abfac_6785_3551_13a8_b20c40ff070b -->|calls| c8d80c9d_ab6c_13c0_c85e_a9b120f82f45
  style 059abfac_6785_3551_13a8_b20c40ff070b fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/compiler/phases/3-transform/client/visitors/BindDirective.js lines 15–290

export function BindDirective(node, context) {
	const expression = /** @type {Expression} */ (context.visit(node.expression));
	const property = binding_properties[node.name];

	const parent = /** @type {AST.SvelteNode} */ (context.path.at(-1));

	let get, set;

	if (expression.type === 'SequenceExpression') {
		[get, set] = expression.expressions;
	} else {
		if (
			dev &&
			context.state.analysis.runes &&
			expression.type === 'MemberExpression' &&
			(node.name !== 'this' ||
				context.path.some(
					({ type }) =>
						type === 'IfBlock' ||
						type === 'EachBlock' ||
						type === 'AwaitBlock' ||
						type === 'KeyBlock'
				)) &&
			!is_ignored(node, 'binding_property_non_reactive')
		) {
			validate_binding(context.state, node, expression);
		}

		const assignment = /** @type {Expression} */ (
			context.visit(b.assignment('=', /** @type {Pattern} */ (node.expression), b.id('$$value')))
		);

		if (dev) {
			// in dev, create named functions, so that `$inspect(...)` delivers
			// useful stack traces
			get = b.function(b.id('get', node.name_loc), [], b.block([b.return(expression)]));
			set = b.function(
				b.id('set', node.name_loc),
				[b.id('$$value')],
				b.block([b.stmt(assignment)])
			);
		} else {
			// in prod, optimise for brevity
			get = b.thunk(expression);

			/** @type {Expression | undefined} */
			set = b.unthunk(
				b.arrow(
					[b.id('$$value')],
					/** @type {Expression} */ (
						context.visit(
							b.assignment('=', /** @type {Pattern} */ (node.expression), b.id('$$value'))
						)
					)
				)
			);

			if (get === set) {
				set = undefined;
			}
		}
	}

	/** @type {CallExpression} */
	let call;

	if (property?.event) {
		call = b.call(
			'$.bind_property',
			b.literal(node.name),
			b.literal(property.event),
			context.state.node,
			set ?? get,
			property.bidirectional && get
		);
	} else {
		// special cases
		switch (node.name) {
			// window
			case 'online':
				call = b.call(`$.bind_online`, set ?? get);

Domain

Subdomains

Frequently Asked Questions

What does BindDirective() do?
BindDirective() is a function in the svelte codebase, defined in packages/svelte/src/compiler/phases/3-transform/client/visitors/BindDirective.js.
Where is BindDirective() defined?
BindDirective() is defined in packages/svelte/src/compiler/phases/3-transform/client/visitors/BindDirective.js at line 15.
What does BindDirective() call?
BindDirective() calls 6 function(s): blockers, build_attribute_value, build_bind_this, is_ignored, is_text_attribute, validate_binding.

Analyze Your Own Codebase

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

Try Supermodel Free