Home / File/ ConstTag.js — svelte Source File

ConstTag.js — svelte Source File

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

File javascript Compiler Transformer 10 imports 1 dependents 2 functions

Entity Profile

Dependency Diagram

graph LR
  c2ea7651_b458_9fe9_2c66_78f1a5171027["ConstTag.js"]
  62f818c8_e890_17ed_5ec1_92f953d4a7a6["state.js"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> 62f818c8_e890_17ed_5ec1_92f953d4a7a6
  0c5c28a7_226d_4e7c_e75e_0853c0a9fc2c["ast.js"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> 0c5c28a7_226d_4e7c_e75e_0853c0a9fc2c
  c12e0147_3f27_cf17_5878_e54ffdc328d5["extract_identifiers"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> c12e0147_3f27_cf17_5878_e54ffdc328d5
  c518b20b_2355_7b11_4ac2_2d9bb5dcfb43["utils.js"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> c518b20b_2355_7b11_4ac2_2d9bb5dcfb43
  c6147fac_8ab6_4ed2_9c90_08e83553fb43["create_derived"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> c6147fac_8ab6_4ed2_9c90_08e83553fb43
  1a53d630_ca18_6783_bd92_8c72517a9306["declarations.js"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> 1a53d630_ca18_6783_bd92_8c72517a9306
  b1380aab_0ea6_e12d_3df0_c3526fef2b75["get_value"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> b1380aab_0ea6_e12d_3df0_c3526fef2b75
  d04d7971_88df_542d_dd4f_26170ce6f581["utils.js"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> d04d7971_88df_542d_dd4f_26170ce6f581
  66243dec_e2be_a66d_3992_3ea42cf964b5["build_expression"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> 66243dec_e2be_a66d_3992_3ea42cf964b5
  95c28355_f14c_c3cd_5a03_d5a53ca255bc["builders"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> 95c28355_f14c_c3cd_5a03_d5a53ca255bc
  7665e008_f37d_b860_a594_f2539a66af4e["transform-client.js"]
  7665e008_f37d_b860_a594_f2539a66af4e --> c2ea7651_b458_9fe9_2c66_78f1a5171027
  style c2ea7651_b458_9fe9_2c66_78f1a5171027 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { Expression, Identifier, Pattern } from 'estree' */
/** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../types' */
/** @import { ExpressionMetadata } from '../../../nodes.js' */
import { dev } from '../../../../state.js';
import { extract_identifiers } from '../../../../utils/ast.js';
import * as b from '#compiler/builders';
import { create_derived } from '../utils.js';
import { get_value } from './shared/declarations.js';
import { build_expression } from './shared/utils.js';

/**
 * @param {AST.ConstTag} node
 * @param {ComponentContext} context
 */
export function ConstTag(node, context) {
	const declaration = node.declaration.declarations[0];
	// TODO we can almost certainly share some code with $derived(...)
	if (declaration.id.type === 'Identifier') {
		const init = build_expression(context, declaration.init, node.metadata.expression);

		let expression = create_derived(context.state, init, node.metadata.expression.has_await);

		if (dev) {
			expression = b.call('$.tag', expression, b.literal(declaration.id.name));
		}

		context.state.transform[declaration.id.name] = { read: get_value };

		add_const_declaration(
			context.state,
			declaration.id,
			expression,
			node.metadata.expression,
			context.state.scope.get_bindings(declaration)
		);
	} else {
		const identifiers = extract_identifiers(declaration.id);
		const tmp = b.id(context.state.scope.generate('computed_const'));

		const transform = { ...context.state.transform };

		// Make all identifiers that are declared within the following computed regular
		// variables, as they are not signals in that context yet
		for (const node of identifiers) {
			delete transform[node.name];
		}

		const child_state = /** @type {ComponentContext['state']} */ ({
			...context.state,
			transform
		});

		// TODO optimise the simple `{ x } = y` case — we can just return `y`
		// instead of destructuring it only to return a new object
		const init = build_expression(
			{ ...context, state: child_state },
			declaration.init,
			node.metadata.expression
		);
// ... (75 more lines)

Domain

Subdomains

Frequently Asked Questions

What does ConstTag.js do?
ConstTag.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 ConstTag.js?
ConstTag.js defines 2 function(s): ConstTag, add_const_declaration.
What does ConstTag.js depend on?
ConstTag.js imports 10 module(s): ast.js, build_expression, builders, create_derived, declarations.js, extract_identifiers, get_value, state.js, and 2 more.
What files import ConstTag.js?
ConstTag.js is imported by 1 file(s): transform-client.js.
Where is ConstTag.js in the architecture?
ConstTag.js is located at packages/svelte/src/compiler/phases/3-transform/client/visitors/ConstTag.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