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
Calls
Source
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