Home / File/ declarations.js — svelte Source File

declarations.js — svelte Source File

Architecture documentation for declarations.js, a javascript file in the svelte codebase. 3 imports, 8 dependents.

File javascript Compiler Transformer 3 imports 8 dependents 2 functions

Entity Profile

Dependency Diagram

graph LR
  1a53d630_ca18_6783_bd92_8c72517a9306["declarations.js"]
  c518b20b_2355_7b11_4ac2_2d9bb5dcfb43["utils.js"]
  1a53d630_ca18_6783_bd92_8c72517a9306 --> c518b20b_2355_7b11_4ac2_2d9bb5dcfb43
  03ec0ace_6e52_c362_5e4b_06e8333b938f["is_state_source"]
  1a53d630_ca18_6783_bd92_8c72517a9306 --> 03ec0ace_6e52_c362_5e4b_06e8333b938f
  95c28355_f14c_c3cd_5a03_d5a53ca255bc["builders"]
  1a53d630_ca18_6783_bd92_8c72517a9306 --> 95c28355_f14c_c3cd_5a03_d5a53ca255bc
  844ad472_83ed_856d_0120_d6773152f6bb["AwaitBlock.js"]
  844ad472_83ed_856d_0120_d6773152f6bb --> 1a53d630_ca18_6783_bd92_8c72517a9306
  23a1c53f_df53_154c_a2d9_3e0efa9bef15["BlockStatement.js"]
  23a1c53f_df53_154c_a2d9_3e0efa9bef15 --> 1a53d630_ca18_6783_bd92_8c72517a9306
  c2ea7651_b458_9fe9_2c66_78f1a5171027["ConstTag.js"]
  c2ea7651_b458_9fe9_2c66_78f1a5171027 --> 1a53d630_ca18_6783_bd92_8c72517a9306
  f0f2f8c6_dafa_048c_81e7_9a2e89e2dd23["EachBlock.js"]
  f0f2f8c6_dafa_048c_81e7_9a2e89e2dd23 --> 1a53d630_ca18_6783_bd92_8c72517a9306
  446a5632_54bb_cf7e_dbdc_33bec913df9e["Program.js"]
  446a5632_54bb_cf7e_dbdc_33bec913df9e --> 1a53d630_ca18_6783_bd92_8c72517a9306
  76dbb198_ccb5_ecf8_b96a_5a5edc5846fb["SnippetBlock.js"]
  76dbb198_ccb5_ecf8_b96a_5a5edc5846fb --> 1a53d630_ca18_6783_bd92_8c72517a9306
  12047c60_7eb9_7476_83e2_7d8004a6f868["VariableDeclaration.js"]
  12047c60_7eb9_7476_83e2_7d8004a6f868 --> 1a53d630_ca18_6783_bd92_8c72517a9306
  47b19192_eefb_9217_3996_3a0f4e07c6ed["assignments.js"]
  47b19192_eefb_9217_3996_3a0f4e07c6ed --> 1a53d630_ca18_6783_bd92_8c72517a9306
  style 1a53d630_ca18_6783_bd92_8c72517a9306 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { Identifier } from 'estree' */
/** @import { ComponentContext, Context } from '../../types' */
import { is_state_source } from '../../utils.js';
import * as b from '#compiler/builders';

/**
 * Turns `foo` into `$.get(foo)`
 * @param {Identifier} node
 */
export function get_value(node) {
	return b.call('$.get', node);
}

/**
 *
 * @param {Context | ComponentContext} context
 */
export function add_state_transformers(context) {
	for (const [name, binding] of context.state.scope.declarations) {
		if (
			is_state_source(binding, context.state.analysis) ||
			binding.kind === 'derived' ||
			binding.kind === 'legacy_reactive'
		) {
			context.state.transform[name] = {
				read: binding.declaration_kind === 'var' ? (node) => b.call('$.safe_get', node) : get_value,
				assign: (node, value, proxy = false) => {
					let call = b.call('$.set', node, value, proxy && b.true);

					if (context.state.scope.get(`$${node.name}`)?.kind === 'store_sub') {
						call = b.call('$.store_unsub', call, b.literal(`$${node.name}`), b.id('$$stores'));
					}

					return call;
				},
				mutate: (node, mutation) => {
					if (context.state.analysis.runes) {
						return mutation;
					}

					return b.call('$.mutate', node, mutation);
				},
				update: (node) => {
					return b.call(
						node.prefix ? '$.update_pre' : '$.update',
						node.argument,
						node.operator === '--' && b.literal(-1)
					);
				}
			};
		}
	}
}

Domain

Subdomains

Dependencies

Frequently Asked Questions

What does declarations.js do?
declarations.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 declarations.js?
declarations.js defines 2 function(s): add_state_transformers, get_value.
What does declarations.js depend on?
declarations.js imports 3 module(s): builders, is_state_source, utils.js.
What files import declarations.js?
declarations.js is imported by 8 file(s): AwaitBlock.js, BlockStatement.js, ConstTag.js, EachBlock.js, Program.js, SnippetBlock.js, VariableDeclaration.js, assignments.js.
Where is declarations.js in the architecture?
declarations.js is located at packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/declarations.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