utils.js — svelte Source File
Architecture documentation for utils.js, a javascript file in the svelte codebase. 14 imports, 23 dependents.
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
Functions
Classes
Dependencies
Imported By
- packages/svelte/src/compiler/phases/3-transform/client/visitors/AnimateDirective.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/AssignmentExpression.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/AttachTag.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/AwaitBlock.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/BindDirective.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/ConstTag.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/EachBlock.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/Fragment.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/HtmlTag.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/IfBlock.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/KeyBlock.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/RenderTag.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/SlotElement.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteElement.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/TitleElement.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/TransitionDirective.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/UpdateExpression.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/UseDirective.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/element.js
- packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/fragment.js
- packages/svelte/src/compiler/phases/3-transform/client/types.d.ts
Source
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