Home / File/ TitleElement.js — svelte Source File

TitleElement.js — svelte Source File

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

File javascript Compiler Transformer 4 imports 1 dependents 1 functions

Entity Profile

Dependency Diagram

graph LR
  f8561a4f_8669_f7da_9b3c_fd7e65e998a5["TitleElement.js"]
  d04d7971_88df_542d_dd4f_26170ce6f581["utils.js"]
  f8561a4f_8669_f7da_9b3c_fd7e65e998a5 --> d04d7971_88df_542d_dd4f_26170ce6f581
  f3280f06_553d_66c3_8ca2_c3c36dcdda64["build_template_chunk"]
  f8561a4f_8669_f7da_9b3c_fd7e65e998a5 --> f3280f06_553d_66c3_8ca2_c3c36dcdda64
  be60a9d7_77eb_5ad3_ab7e_2f9bd93a3db1["Memoizer"]
  f8561a4f_8669_f7da_9b3c_fd7e65e998a5 --> be60a9d7_77eb_5ad3_ab7e_2f9bd93a3db1
  95c28355_f14c_c3cd_5a03_d5a53ca255bc["builders"]
  f8561a4f_8669_f7da_9b3c_fd7e65e998a5 --> 95c28355_f14c_c3cd_5a03_d5a53ca255bc
  7665e008_f37d_b860_a594_f2539a66af4e["transform-client.js"]
  7665e008_f37d_b860_a594_f2539a66af4e --> f8561a4f_8669_f7da_9b3c_fd7e65e998a5
  style f8561a4f_8669_f7da_9b3c_fd7e65e998a5 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../types' */
import * as b from '#compiler/builders';
import { build_template_chunk, Memoizer } from './shared/utils.js';

/**
 * @param {AST.TitleElement} node
 * @param {ComponentContext} context
 */
export function TitleElement(node, context) {
	const memoizer = new Memoizer();
	const { has_state, value } = build_template_chunk(
		/** @type {any} */ (node.fragment.nodes),
		context,
		context.state,
		(value, metadata) => memoizer.add(value, metadata)
	);
	const evaluated = context.state.scope.evaluate(value);

	const statement = b.stmt(
		b.assignment(
			'=',
			b.member(b.id('$.document'), b.id('title', node.name_loc)),
			evaluated.is_known
				? b.literal(evaluated.value)
				: evaluated.is_defined
					? value
					: b.logical('??', value, b.literal(''))
		)
	);

	// Make sure it only changes the title once async work is done
	if (has_state) {
		context.state.after_update.push(
			b.stmt(
				b.call(
					'$.deferred_template_effect',
					b.arrow(memoizer.apply(), b.block([statement])),
					memoizer.sync_values(),
					memoizer.async_values(),
					memoizer.blockers()
				)
			)
		);
	} else {
		context.state.after_update.push(b.stmt(b.call('$.effect', b.thunk(b.block([statement])))));
	}
}

Domain

Subdomains

Functions

Frequently Asked Questions

What does TitleElement.js do?
TitleElement.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 TitleElement.js?
TitleElement.js defines 1 function(s): TitleElement.
What does TitleElement.js depend on?
TitleElement.js imports 4 module(s): Memoizer, build_template_chunk, builders, utils.js.
What files import TitleElement.js?
TitleElement.js is imported by 1 file(s): transform-client.js.
Where is TitleElement.js in the architecture?
TitleElement.js is located at packages/svelte/src/compiler/phases/3-transform/client/visitors/TitleElement.js (domain: Compiler, subdomain: Transformer, directory: packages/svelte/src/compiler/phases/3-transform/client/visitors).

Analyze Your Own Codebase

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

Try Supermodel Free