Home / File/ events.js — svelte Source File

events.js — svelte Source File

Architecture documentation for events.js, a javascript file in the svelte codebase. 7 imports, 4 dependents.

File javascript Compiler Transformer 7 imports 4 dependents 4 functions

Entity Profile

Dependency Diagram

graph LR
  c5a9d025_4aac_a689_1a38_c0fce5e694c0["events.js"]
  2aa63f4e_82c9_33e3_ac6c_5f3d46250522["utils.js"]
  c5a9d025_4aac_a689_1a38_c0fce5e694c0 --> 2aa63f4e_82c9_33e3_ac6c_5f3d46250522
  414b9ea2_b052_6759_fdfb_f4cabf75669c["is_capture_event"]
  c5a9d025_4aac_a689_1a38_c0fce5e694c0 --> 414b9ea2_b052_6759_fdfb_f4cabf75669c
  034eb538_8c9d_e943_ab91_3ef5cfad2ef9["is_passive_event"]
  c5a9d025_4aac_a689_1a38_c0fce5e694c0 --> 034eb538_8c9d_e943_ab91_3ef5cfad2ef9
  62f818c8_e890_17ed_5ec1_92f953d4a7a6["state.js"]
  c5a9d025_4aac_a689_1a38_c0fce5e694c0 --> 62f818c8_e890_17ed_5ec1_92f953d4a7a6
  bbca3d2a_42c8_b215_d3b5_5077ccaf0797["nodes.js"]
  c5a9d025_4aac_a689_1a38_c0fce5e694c0 --> bbca3d2a_42c8_b215_d3b5_5077ccaf0797
  6e00a8f3_2371_ecf1_5a93_296f787aca83["ExpressionMetadata"]
  c5a9d025_4aac_a689_1a38_c0fce5e694c0 --> 6e00a8f3_2371_ecf1_5a93_296f787aca83
  95c28355_f14c_c3cd_5a03_d5a53ca255bc["builders"]
  c5a9d025_4aac_a689_1a38_c0fce5e694c0 --> 95c28355_f14c_c3cd_5a03_d5a53ca255bc
  126f4294_219b_2a73_5499_a210c4245cce["Attribute.js"]
  126f4294_219b_2a73_5499_a210c4245cce --> c5a9d025_4aac_a689_1a38_c0fce5e694c0
  c19211c5_1457_5635_6aff_780db82c7240["OnDirective.js"]
  c19211c5_1457_5635_6aff_780db82c7240 --> c5a9d025_4aac_a689_1a38_c0fce5e694c0
  4610488f_3cf2_5f73_043e_da0aa9d026fe["RegularElement.js"]
  4610488f_3cf2_5f73_043e_da0aa9d026fe --> c5a9d025_4aac_a689_1a38_c0fce5e694c0
  be3a40b1_7e88_8a0c_e231_56c97bd7899f["component.js"]
  be3a40b1_7e88_8a0c_e231_56c97bd7899f --> c5a9d025_4aac_a689_1a38_c0fce5e694c0
  style c5a9d025_4aac_a689_1a38_c0fce5e694c0 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { Expression } from 'estree' */
/** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../../types' */
import { is_capture_event, is_passive_event } from '../../../../../../utils.js';
import { dev, locator } from '../../../../../state.js';
import * as b from '#compiler/builders';
import { ExpressionMetadata } from '../../../../nodes.js';

/**
 * @param {AST.Attribute} node
 * @param {ComponentContext} context
 */
export function visit_event_attribute(node, context) {
	let capture = false;

	let event_name = node.name.slice(2);
	if (is_capture_event(event_name)) {
		event_name = event_name.slice(0, -7);
		capture = true;
	}

	// we still need to support the weird `onclick="{() => {...}}" form
	const tag = Array.isArray(node.value)
		? /** @type {AST.ExpressionTag} */ (node.value[0])
		: /** @type {AST.ExpressionTag} */ (node.value);

	let handler = build_event_handler(tag.expression, tag.metadata.expression, context);

	if (node.metadata.delegated) {
		if (!context.state.events.has(event_name)) {
			context.state.events.add(event_name);
		}

		context.state.init.push(
			b.stmt(
				b.assignment(
					'=',
					b.member(context.state.node, b.id('__' + event_name, node.name_loc)),
					handler
				)
			)
		);
	} else {
		const statement = b.stmt(
			build_event(
				event_name,
				context.state.node,
				handler,
				capture,
				is_passive_event(event_name) ? true : undefined
			)
		);

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

		if (type === 'SvelteDocument' || type === 'SvelteWindow' || type === 'SvelteBody') {
			// These nodes are above the component tree, and its events should run parent first
			context.state.init.push(statement);
		} else {
			context.state.after_update.push(statement);
// ... (117 more lines)

Domain

Subdomains

Frequently Asked Questions

What does events.js do?
events.js is a source file in the svelte codebase, written in javascript. It belongs to the Compiler domain, Transformer subdomain.
What functions are defined in events.js?
events.js defines 4 function(s): build_event, build_event_handler, has_side_effects, visit_event_attribute.
What does events.js depend on?
events.js imports 7 module(s): ExpressionMetadata, builders, is_capture_event, is_passive_event, nodes.js, state.js, utils.js.
What files import events.js?
events.js is imported by 4 file(s): Attribute.js, OnDirective.js, RegularElement.js, component.js.
Where is events.js in the architecture?
events.js is located at packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/events.js (domain: Compiler, subdomain: Transformer, directory: packages/svelte/src/compiler/phases/3-transform/client/visitors/shared).

Analyze Your Own Codebase

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

Try Supermodel Free