Home / File/ element.js — svelte Source File

element.js — svelte Source File

Architecture documentation for element.js, a javascript file in the svelte codebase. 29 imports, 2 dependents.

File javascript Compiler Transformer 29 imports 2 dependents 9 functions

Entity Profile

Dependency Diagram

graph LR
  206889ff_1f9f_b6c1_d530_059d001e1cf4["element.js"]
  2aa63f4e_82c9_33e3_ac6c_5f3d46250522["utils.js"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 2aa63f4e_82c9_33e3_ac6c_5f3d46250522
  02a8b5a2_13c5_e5b3_1ed2_617763d0904d["is_void"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 02a8b5a2_13c5_e5b3_1ed2_617763d0904d
  8b705104_0cb9_c5c8_5bed_6dcfe73592d3["expression.js"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 8b705104_0cb9_c5c8_5bed_6dcfe73592d3
  f55653bc_77b3_5212_03f1_93bc274916e8["read_expression"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> f55653bc_77b3_5212_03f1_93bc274916e8
  90aa5201_1990_23b6_f05a_1ff5d9b22b14["script.js"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 90aa5201_1990_23b6_f05a_1ff5d9b22b14
  3f7147bd_f765_d166_38e7_10f71b9fd062["read_script"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 3f7147bd_f765_d166_38e7_10f71b9fd062
  251e2338_f8b8_69b4_b2e5_29ee7decbfa6["style.js"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 251e2338_f8b8_69b4_b2e5_29ee7decbfa6
  ed89faef_4ddb_7d55_bba6_cc8feba73758["read_style"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> ed89faef_4ddb_7d55_bba6_cc8feba73758
  06660fad_daa2_c824_01c8_ebafc63758a1["html.js"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 06660fad_daa2_c824_01c8_ebafc63758a1
  83712aa1_c83d_1cd5_c47d_1cdb04dd210c["decode_character_references"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 83712aa1_c83d_1cd5_c47d_1cdb04dd210c
  495501a4_a342_6a4d_ac11_e3e2fee8b218["errors.js"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 495501a4_a342_6a4d_ac11_e3e2fee8b218
  a146f6ac_0088_8736_b6ce_318f9f115170["e"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> a146f6ac_0088_8736_b6ce_318f9f115170
  56a689f9_11c0_cc76_bd60_41bb6dc96475["warnings.js"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 56a689f9_11c0_cc76_bd60_41bb6dc96475
  3246e0bc_b9fc_f638_5e35_41e8c39a2408["w"]
  206889ff_1f9f_b6c1_d530_059d001e1cf4 --> 3246e0bc_b9fc_f638_5e35_41e8c39a2408
  style 206889ff_1f9f_b6c1_d530_059d001e1cf4 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { Expression, Identifier, SourceLocation } from 'estree' */
/** @import { Location } from 'locate-character' */
/** @import { AST } from '#compiler' */
/** @import { Parser } from '../index.js' */
import { is_void } from '../../../../utils.js';
import read_expression from '../read/expression.js';
import { read_script } from '../read/script.js';
import read_style from '../read/style.js';
import { decode_character_references } from '../utils/html.js';
import * as e from '../../../errors.js';
import * as w from '../../../warnings.js';
import { create_fragment } from '../utils/create.js';
import { create_attribute, ExpressionMetadata, is_element_node } from '../../nodes.js';
import { get_attribute_expression, is_expression_attribute } from '../../../utils/ast.js';
import { closing_tag_omitted } from '../../../../html-tree-validation.js';
import { list } from '../../../utils/string.js';
import { locator } from '../../../state.js';
import * as b from '#compiler/builders';

const regex_invalid_unquoted_attribute_value = /^(\/>|[\s"'=<>`])/;
const regex_closing_textarea_tag = /^<\/textarea(\s[^>]*)?>/i;
const regex_closing_comment = /-->/;
const regex_whitespace_or_slash_or_closing_tag = /(\s|\/|>)/;
const regex_token_ending_character = /[\s=/>"']/;
const regex_starts_with_quote_characters = /^["']/;
const regex_attribute_value = /^(?:"([^"]*)"|'([^'])*'|([^>\s]+))/;
const regex_valid_element_name =
	/^(?:![a-zA-Z]+|[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|[a-zA-Z][a-zA-Z0-9]*:[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9])$/;
export const regex_valid_component_name =
	// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers adjusted for our needs
	// (must start with uppercase letter if no dots, can contain dots)
	/^(?:\p{Lu}[$\u200c\u200d\p{ID_Continue}.]*|\p{ID_Start}[$\u200c\u200d\p{ID_Continue}]*(?:\.[$\u200c\u200d\p{ID_Continue}]+)+)$/u;

/** @type {Map<string, AST.ElementLike['type']>} */
const root_only_meta_tags = new Map([
	['svelte:head', 'SvelteHead'],
	['svelte:options', 'SvelteOptions'],
	['svelte:window', 'SvelteWindow'],
	['svelte:document', 'SvelteDocument'],
	['svelte:body', 'SvelteBody']
]);

/** @type {Map<string, AST.ElementLike['type']>} */
const meta_tags = new Map([
	...root_only_meta_tags,
	['svelte:element', 'SvelteElement'],
	['svelte:component', 'SvelteComponent'],
	['svelte:self', 'SvelteSelf'],
	['svelte:fragment', 'SvelteFragment'],
	['svelte:boundary', 'SvelteBoundary']
]);

/** @param {Parser} parser */
export default function element(parser) {
	const start = parser.index++;

	let parent = parser.current();

	if (parser.eat('!--')) {
		const data = parser.read_until(regex_closing_comment);
// ... (818 more lines)

Domain

Subdomains

Frequently Asked Questions

What does element.js do?
element.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 element.js?
element.js defines 9 function(s): element, get_directive_type, parent_is_head, parent_is_shadowroot_template, read_attribute, read_attribute_value, read_sequence, read_static_attribute, read_tag.
What does element.js depend on?
element.js imports 29 module(s): ExpressionMetadata, ast.js, builders, closing_tag_omitted, create.js, create_attribute, create_fragment, decode_character_references, and 21 more.
What files import element.js?
element.js is imported by 2 file(s): fragment.js, index.js.
Where is element.js in the architecture?
element.js is located at packages/svelte/src/compiler/phases/1-parse/state/element.js (domain: Compiler, subdomain: Transformer, directory: packages/svelte/src/compiler/phases/1-parse/state).

Analyze Your Own Codebase

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

Try Supermodel Free