Home / File/ ClassBody.js — svelte Source File

ClassBody.js — svelte Source File

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

File javascript Compiler Transformer 10 imports 1 dependents 1 functions

Entity Profile

Dependency Diagram

graph LR
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b["ClassBody.js"]
  ee93d8a6_6fde_b1c1_e15b_3a4da5326305["scope.js"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> ee93d8a6_6fde_b1c1_e15b_3a4da5326305
  bed91719_d047_2256_e199_ee875d5f49b9["get_rune"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> bed91719_d047_2256_e199_ee875d5f49b9
  495501a4_a342_6a4d_ac11_e3e2fee8b218["errors.js"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> 495501a4_a342_6a4d_ac11_e3e2fee8b218
  a146f6ac_0088_8736_b6ce_318f9f115170["e"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> a146f6ac_0088_8736_b6ce_318f9f115170
  2aa63f4e_82c9_33e3_ac6c_5f3d46250522["utils.js"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> 2aa63f4e_82c9_33e3_ac6c_5f3d46250522
  c37a3aba_1e0c_9f3e_e144_1a7fa20244b3["is_state_creation_rune"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> c37a3aba_1e0c_9f3e_e144_1a7fa20244b3
  bbca3d2a_42c8_b215_d3b5_5077ccaf0797["nodes.js"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> bbca3d2a_42c8_b215_d3b5_5077ccaf0797
  d69a156c_617a_9397_4c8b_e94508c59e30["get_name"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> d69a156c_617a_9397_4c8b_e94508c59e30
  ce051dbd_4cf1_f117_d66e_12cfa122de37["patterns.js"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> ce051dbd_4cf1_f117_d66e_12cfa122de37
  95c28355_f14c_c3cd_5a03_d5a53ca255bc["builders"]
  ae63a5f8_3bca_b89d_d2cc_a72104d95a3b --> 95c28355_f14c_c3cd_5a03_d5a53ca255bc
  4aa8a188_84d4_0274_ed83_cac0ab1d3572["index.js"]
  4aa8a188_84d4_0274_ed83_cac0ab1d3572 --> ae63a5f8_3bca_b89d_d2cc_a72104d95a3b
  style ae63a5f8_3bca_b89d_d2cc_a72104d95a3b fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { AssignmentExpression, CallExpression, ClassBody, PropertyDefinition, Expression, PrivateIdentifier, MethodDefinition } from 'estree' */
/** @import { StateField } from '#compiler' */
/** @import { Context } from '../types' */
import * as b from '#compiler/builders';
import { get_rune } from '../../scope.js';
import * as e from '../../../errors.js';
import { is_state_creation_rune } from '../../../../utils.js';
import { get_name } from '../../nodes.js';
import { regex_invalid_identifier_chars } from '../../patterns.js';

/**
 * @param {ClassBody} node
 * @param {Context} context
 */
export function ClassBody(node, context) {
	if (!context.state.analysis.runes) {
		context.next();
		return;
	}

	/** @type {string[]} */
	const private_ids = [];

	for (const prop of node.body) {
		if (
			(prop.type === 'MethodDefinition' || prop.type === 'PropertyDefinition') &&
			prop.key.type === 'PrivateIdentifier'
		) {
			private_ids.push(prop.key.name);
		}
	}

	/** @type {Map<string, StateField>} */
	const state_fields = new Map();

	/** @type {Map<string, Array<MethodDefinition['kind'] | 'prop' | 'assigned_prop'>>} */
	const fields = new Map();

	context.state.analysis.classes.set(node, state_fields);

	/** @type {MethodDefinition | null} */
	let constructor = null;

	/**
	 * @param {PropertyDefinition | AssignmentExpression} node
	 * @param {Expression | PrivateIdentifier} key
	 * @param {Expression | null | undefined} value
	 */
	function handle(node, key, value) {
		const name = get_name(key);
		if (name === null) return;

		const rune = get_rune(value, context.state.scope);

		if (rune && is_state_creation_rune(rune)) {
			if (state_fields.has(name)) {
				e.state_field_duplicate(node, name);
			}

			const _key = (node.type === 'AssignmentExpression' || !node.static ? '' : '@') + name;
// ... (97 more lines)

Domain

Subdomains

Functions

Frequently Asked Questions

What does ClassBody.js do?
ClassBody.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 ClassBody.js?
ClassBody.js defines 1 function(s): ClassBody.
What does ClassBody.js depend on?
ClassBody.js imports 10 module(s): builders, e, errors.js, get_name, get_rune, is_state_creation_rune, nodes.js, patterns.js, and 2 more.
What files import ClassBody.js?
ClassBody.js is imported by 1 file(s): index.js.
Where is ClassBody.js in the architecture?
ClassBody.js is located at packages/svelte/src/compiler/phases/2-analyze/visitors/ClassBody.js (domain: Compiler, subdomain: Transformer, directory: packages/svelte/src/compiler/phases/2-analyze/visitors).

Analyze Your Own Codebase

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

Try Supermodel Free