Home / File/ RenderTag.js — svelte Source File

RenderTag.js — svelte Source File

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

File javascript Compiler Transformer 5 imports 1 dependents 1 functions

Entity Profile

Dependency Diagram

graph LR
  732df1b1_b4c7_ad36_c716_bfd0aee4083c["RenderTag.js"]
  0c5c28a7_226d_4e7c_e75e_0853c0a9fc2c["ast.js"]
  732df1b1_b4c7_ad36_c716_bfd0aee4083c --> 0c5c28a7_226d_4e7c_e75e_0853c0a9fc2c
  9bcad0f1_2e1e_1fe2_1a87_0967adb89be8["unwrap_optional"]
  732df1b1_b4c7_ad36_c716_bfd0aee4083c --> 9bcad0f1_2e1e_1fe2_1a87_0967adb89be8
  74eddc85_a390_2aab_af5a_ef32b77d5430["utils.js"]
  732df1b1_b4c7_ad36_c716_bfd0aee4083c --> 74eddc85_a390_2aab_af5a_ef32b77d5430
  89f84d70_5c6c_1980_33f9_650ce42a04ab["PromiseOptimiser"]
  732df1b1_b4c7_ad36_c716_bfd0aee4083c --> 89f84d70_5c6c_1980_33f9_650ce42a04ab
  95c28355_f14c_c3cd_5a03_d5a53ca255bc["builders"]
  732df1b1_b4c7_ad36_c716_bfd0aee4083c --> 95c28355_f14c_c3cd_5a03_d5a53ca255bc
  86cf8685_38fa_3a1c_9b81_21c452968289["transform-server.js"]
  86cf8685_38fa_3a1c_9b81_21c452968289 --> 732df1b1_b4c7_ad36_c716_bfd0aee4083c
  style 732df1b1_b4c7_ad36_c716_bfd0aee4083c fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { Expression } from 'estree' */
/** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../types.js' */
import { unwrap_optional } from '../../../../utils/ast.js';
import * as b from '#compiler/builders';
import { empty_comment, PromiseOptimiser } from './shared/utils.js';

/**
 * @param {AST.RenderTag} node
 * @param {ComponentContext} context
 */
export function RenderTag(node, context) {
	const optimiser = new PromiseOptimiser();

	const callee = unwrap_optional(node.expression).callee;
	const raw_args = unwrap_optional(node.expression).arguments;

	const snippet_function = optimiser.transform(
		/** @type {Expression} */ (context.visit(callee)),
		node.metadata.expression
	);

	const snippet_args = raw_args.map((arg, i) => {
		return optimiser.transform(
			/** @type {Expression} */ (context.visit(arg)),
			node.metadata.arguments[i]
		);
	});

	let statement = b.stmt(
		(node.expression.type === 'CallExpression' ? b.call : b.maybe_call)(
			snippet_function,
			b.id('$$renderer'),
			...snippet_args
		)
	);

	context.state.template.push(...optimiser.render_block([statement]));

	// If the render tag is wrapped in $.async, that $.async call already contains surrounding markers,
	// so we don't need to (or rather must not, to avoid hydration mismatches) add our own.
	if (!optimiser.is_async() && !context.state.is_standalone) {
		context.state.template.push(empty_comment);
	}
}

Domain

Subdomains

Functions

Frequently Asked Questions

What does RenderTag.js do?
RenderTag.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 RenderTag.js?
RenderTag.js defines 1 function(s): RenderTag.
What does RenderTag.js depend on?
RenderTag.js imports 5 module(s): PromiseOptimiser, ast.js, builders, unwrap_optional, utils.js.
What files import RenderTag.js?
RenderTag.js is imported by 1 file(s): transform-server.js.
Where is RenderTag.js in the architecture?
RenderTag.js is located at packages/svelte/src/compiler/phases/3-transform/server/visitors/RenderTag.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