SvelteElement.js — svelte Source File
Architecture documentation for SvelteElement.js, a javascript file in the svelte codebase. 10 imports, 1 dependents.
Entity Profile
Dependency Diagram
graph LR afdcad58_521a_672c_dc53_627e7bdc4b30["SvelteElement.js"] 62f818c8_e890_17ed_5ec1_92f953d4a7a6["state.js"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> 62f818c8_e890_17ed_5ec1_92f953d4a7a6 f3fad5a9_6b91_ed4f_9331_7f9fc18491c3["utils.js"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> f3fad5a9_6b91_ed4f_9331_7f9fc18491c3 a475d4d0_a1fa_71f2_13d3_ba42155a8763["determine_namespace_for_children"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> a475d4d0_a1fa_71f2_13d3_ba42155a8763 b25fbb61_695c_e699_cbac_73059624d603["element.js"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> b25fbb61_695c_e699_cbac_73059624d603 17370b4c_df64_f183_35da_1de383ea4963["build_element_attributes"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> 17370b4c_df64_f183_35da_1de383ea4963 74eddc85_a390_2aab_af5a_ef32b77d5430["utils.js"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> 74eddc85_a390_2aab_af5a_ef32b77d5430 49bc6956_1326_e1db_837c_bb4db2493060["build_template"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> 49bc6956_1326_e1db_837c_bb4db2493060 6487918e_a8f7_315c_caf5_9694fc4edde7["create_child_block"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> 6487918e_a8f7_315c_caf5_9694fc4edde7 89f84d70_5c6c_1980_33f9_650ce42a04ab["PromiseOptimiser"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> 89f84d70_5c6c_1980_33f9_650ce42a04ab 95c28355_f14c_c3cd_5a03_d5a53ca255bc["builders"] afdcad58_521a_672c_dc53_627e7bdc4b30 --> 95c28355_f14c_c3cd_5a03_d5a53ca255bc 86cf8685_38fa_3a1c_9b81_21c452968289["transform-server.js"] 86cf8685_38fa_3a1c_9b81_21c452968289 --> afdcad58_521a_672c_dc53_627e7bdc4b30 style afdcad58_521a_672c_dc53_627e7bdc4b30 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
/** @import { BlockStatement, Expression, Statement } from 'estree' */
/** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../types.js' */
import { dev, locator } from '../../../../state.js';
import * as b from '#compiler/builders';
import { determine_namespace_for_children } from '../../utils.js';
import { build_element_attributes } from './shared/element.js';
import { build_template, create_child_block, PromiseOptimiser } from './shared/utils.js';
/**
* @param {AST.SvelteElement} node
* @param {ComponentContext} context
*/
export function SvelteElement(node, context) {
let tag = /** @type {Expression} */ (context.visit(node.tag));
if (dev) {
// Ensure getters/function calls aren't called multiple times.
// If we ever start referencing `tag` more than once in prod, move this out of the if block.
if (tag.type !== 'Identifier') {
const tag_id = context.state.scope.generate('$$tag');
context.state.init.push(b.const(tag_id, tag));
tag = b.id(tag_id);
}
context.state.init.push(b.stmt(b.call('$.validate_dynamic_element_tag', b.thunk(tag))));
if (node.fragment.nodes.length > 0) {
context.state.init.push(b.stmt(b.call('$.validate_void_dynamic_element', b.thunk(tag))));
}
}
const state = {
...context.state,
namespace: determine_namespace_for_children(node, context.state.namespace),
template: [],
init: []
};
const optimiser = new PromiseOptimiser();
/** @type {Statement[]} */
let statements = [];
build_element_attributes(node, { ...context, state }, optimiser.transform);
if (dev) {
const location = locator(node.start);
statements.push(
b.stmt(
b.call(
'$.push_element',
b.id('$$renderer'),
tag,
b.literal(location.line),
b.literal(location.column)
)
)
);
}
const attributes = b.block([...state.init, ...build_template(state.template)]);
const children = /** @type {BlockStatement} */ (context.visit(node.fragment, state));
statements.push(
...optimiser.render([
b.stmt(
b.call(
'$.element',
b.id('$$renderer'),
tag,
attributes.body.length > 0 && b.thunk(attributes),
children.body.length > 0 && b.thunk(children)
)
)
])
);
if (dev) {
statements.push(b.stmt(b.call('$.pop_element')));
}
context.state.template.push(
...create_child_block(
statements,
node.metadata.expression.blockers(),
node.metadata.expression.has_await
)
);
}
Domain
Subdomains
Functions
Dependencies
Source
Frequently Asked Questions
What does SvelteElement.js do?
SvelteElement.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 SvelteElement.js?
SvelteElement.js defines 1 function(s): SvelteElement.
What does SvelteElement.js depend on?
SvelteElement.js imports 10 module(s): PromiseOptimiser, build_element_attributes, build_template, builders, create_child_block, determine_namespace_for_children, element.js, state.js, and 2 more.
What files import SvelteElement.js?
SvelteElement.js is imported by 1 file(s): transform-server.js.
Where is SvelteElement.js in the architecture?
SvelteElement.js is located at packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js (domain: Compiler, subdomain: Transformer, directory: packages/svelte/src/compiler/phases/3-transform/server/visitors).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free