Home / File/ utils.js — svelte Source File

utils.js — svelte Source File

Architecture documentation for utils.js, a javascript file in the svelte codebase. 14 imports, 23 dependents.

File javascript Compiler Transformer 14 imports 23 dependents 8 functions 1 classes

Entity Profile

Dependency Diagram

graph LR
  d04d7971_88df_542d_dd4f_26170ce6f581["utils.js"]
  0c5c28a7_226d_4e7c_e75e_0853c0a9fc2c["ast.js"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> 0c5c28a7_226d_4e7c_e75e_0853c0a9fc2c
  804afe56_25d1_9f41_dafe_adc75e952134["object"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> 804afe56_25d1_9f41_dafe_adc75e952134
  4de7d612_97cf_465b_c57c_42e39253c605["sanitize_template_string.js"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> 4de7d612_97cf_465b_c57c_42e39253c605
  f58b3d9a_75d2_270c_fa96_1df0cdee1d8f["sanitize_template_string"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> f58b3d9a_75d2_270c_fa96_1df0cdee1d8f
  ce051dbd_4cf1_f117_d66e_12cfa122de37["patterns.js"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> ce051dbd_4cf1_f117_d66e_12cfa122de37
  62f818c8_e890_17ed_5ec1_92f953d4a7a6["state.js"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> 62f818c8_e890_17ed_5ec1_92f953d4a7a6
  7a7783f8_ffa6_0cc3_61b0_031882649535["is_ignored"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> 7a7783f8_ffa6_0cc3_61b0_031882649535
  c518b20b_2355_7b11_4ac2_2d9bb5dcfb43["utils.js"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> c518b20b_2355_7b11_4ac2_2d9bb5dcfb43
  27fded45_bc11_247b_d3fe_94831379f9ed["build_getter"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> 27fded45_bc11_247b_d3fe_94831379f9ed
  bbca3d2a_42c8_b215_d3b5_5077ccaf0797["nodes.js"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> bbca3d2a_42c8_b215_d3b5_5077ccaf0797
  6e00a8f3_2371_ecf1_5a93_296f787aca83["ExpressionMetadata"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> 6e00a8f3_2371_ecf1_5a93_296f787aca83
  c49ac9f8_b355_57a2_8d10_b5fd945c6144["zimmerframe"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> c49ac9f8_b355_57a2_8d10_b5fd945c6144
  95c28355_f14c_c3cd_5a03_d5a53ca255bc["builders"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> 95c28355_f14c_c3cd_5a03_d5a53ca255bc
  b932d26b_ff92_1d3f_5809_ff63edbef8d1["is-reference"]
  d04d7971_88df_542d_dd4f_26170ce6f581 --> b932d26b_ff92_1d3f_5809_ff63edbef8d1
  style d04d7971_88df_542d_dd4f_26170ce6f581 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { AssignmentExpression, Expression, Identifier, MemberExpression, SequenceExpression, Literal, Super, UpdateExpression, ExpressionStatement } from 'estree' */
/** @import { AST } from '#compiler' */
/** @import { ComponentClientTransformState, ComponentContext, Context } from '../../types' */
import { walk } from 'zimmerframe';
import { object } from '../../../../../utils/ast.js';
import * as b from '#compiler/builders';
import { sanitize_template_string } from '../../../../../utils/sanitize_template_string.js';
import { regex_is_valid_identifier } from '../../../../patterns.js';
import is_reference from 'is-reference';
import { dev, is_ignored, locator, component_name } from '../../../../../state.js';
import { build_getter } from '../../utils.js';
import { ExpressionMetadata } from '../../../../nodes.js';

/**
 * A utility for extracting complex expressions (such as call expressions)
 * from templates and replacing them with `$0`, `$1` etc
 */
export class Memoizer {
	/** @type {Array<{ id: Identifier, expression: Expression }>} */
	#sync = [];

	/** @type {Array<{ id: Identifier, expression: Expression }>} */
	#async = [];

	/** @type {Set<Expression>} */
	#blockers = new Set();

	/**
	 * @param {Expression} expression
	 * @param {ExpressionMetadata} metadata
	 * @param {boolean} memoize_if_state
	 */
	add(expression, metadata, memoize_if_state = false) {
		this.check_blockers(metadata);

		const should_memoize =
			metadata.has_call || metadata.has_await || (memoize_if_state && metadata.has_state);

		if (!should_memoize) {
			// no memoization required
			return expression;
		}

		const id = b.id('#'); // filled in later

		(metadata.has_await ? this.#async : this.#sync).push({ id, expression });

		return id;
	}

	/**
	 * @param {ExpressionMetadata} metadata
	 */
	check_blockers(metadata) {
		for (const binding of metadata.dependencies) {
			if (binding.blocker) {
				this.#blockers.add(binding.blocker);
			}
		}
	}
// ... (454 more lines)

Domain

Subdomains

Classes

Imported By

Frequently Asked Questions

What does utils.js do?
utils.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 utils.js?
utils.js defines 8 function(s): add_svelte_meta, build_bind_this, build_expression, build_render_statement, build_template_chunk, parse_directive_name, validate_binding, validate_mutation.
What does utils.js depend on?
utils.js imports 14 module(s): ExpressionMetadata, ast.js, build_getter, builders, is-reference, is_ignored, nodes.js, object, and 6 more.
What files import utils.js?
utils.js is imported by 23 file(s): AnimateDirective.js, AssignmentExpression.js, AttachTag.js, AwaitBlock.js, BindDirective.js, ConstTag.js, EachBlock.js, Fragment.js, and 15 more.
Where is utils.js in the architecture?
utils.js is located at packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.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