Home / File/ dev.js — svelte Source File

dev.js — svelte Source File

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

File javascript ServerRuntime Serialization 11 imports 3 dependents 5 functions

Entity Profile

Dependency Diagram

graph LR
  4440efa2_b84c_d186_53ca_534b0add2937["dev.js"]
  73865c3c_2786_c9ac_d34f_b51d28b3a29e["constants.js"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> 73865c3c_2786_c9ac_d34f_b51d28b3a29e
  302f84f3_ec7c_fd57_5b8e_e2f3ec2953b7["html-tree-validation.js"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> 302f84f3_ec7c_fd57_5b8e_e2f3ec2953b7
  f7866d2b_dae9_12da_76a2_8cd373b8b5db["is_tag_valid_with_ancestor"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> f7866d2b_dae9_12da_76a2_8cd373b8b5db
  b52e7925_73b5_1187_beab_fb7eb59cc45d["is_tag_valid_with_parent"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> b52e7925_73b5_1187_beab_fb7eb59cc45d
  66d86b00_6f66_4791_e665_59e2cf45dc7f["dev.js"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> 66d86b00_6f66_4791_e665_59e2cf45dc7f
  dc56a025_e89c_82a9_72a2_1f21312e2aa4["get_stack"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> dc56a025_e89c_82a9_72a2_1f21312e2aa4
  54c11eb3_9f61_b300_a3b1_1e9710d714ea["context.js"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> 54c11eb3_9f61_b300_a3b1_1e9710d714ea
  fd36db6e_7997_3606_5582_56b6e78ced09["set_ssr_context"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> fd36db6e_7997_3606_5582_56b6e78ced09
  aa72dc21_2f0c_e44b_b27f_dee45869de27["errors.js"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> aa72dc21_2f0c_e44b_b27f_dee45869de27
  25166256_49ce_81f2_0877_fdbc689bed91["renderer.js"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> 25166256_49ce_81f2_0877_fdbc689bed91
  ce85d155_9f13_f67c_9824_407161a6c2c7["Renderer"]
  4440efa2_b84c_d186_53ca_534b0add2937 --> ce85d155_9f13_f67c_9824_407161a6c2c7
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08["hydratable.js"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> 4440efa2_b84c_d186_53ca_534b0add2937
  126d1e53_1684_ccd3_863f_e26adf6214ae["types.d.ts"]
  126d1e53_1684_ccd3_863f_e26adf6214ae --> 4440efa2_b84c_d186_53ca_534b0add2937
  e19cfbe3_ca82_459d_0cfe_63f6bb4739fd["test.ts"]
  e19cfbe3_ca82_459d_0cfe_63f6bb4739fd --> 4440efa2_b84c_d186_53ca_534b0add2937
  style 4440efa2_b84c_d186_53ca_534b0add2937 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { SSRContext } from '#server' */
import { FILENAME } from '../../constants.js';
import {
	is_tag_valid_with_ancestor,
	is_tag_valid_with_parent
} from '../../html-tree-validation.js';
import { get_stack } from '../shared/dev.js';
import { set_ssr_context, ssr_context } from './context.js';
import * as e from './errors.js';
import { Renderer } from './renderer.js';

// TODO move this
/**
 * @typedef {{
 * 	tag: string;
 * 	parent: undefined | Element;
 *  filename: undefined | string;
 *  line: number;
 *  column: number;
 * }} Element
 */

/**
 * This is exported so that it can be cleared between tests
 * @type {Set<string>}
 */
export let seen;

/**
 * @param {Renderer} renderer
 * @param {string} message
 */
function print_error(renderer, message) {
	message =
		`node_invalid_placement_ssr: ${message}\n\n` +
		'This can cause content to shift around as the browser repairs the HTML, and will likely result in a `hydration_mismatch` warning.';

	if ((seen ??= new Set()).has(message)) return;
	seen.add(message);

	// eslint-disable-next-line no-console
	console.error(message);
	renderer.head((r) =>
		r.push(
			// ensure that `</script>` can't leak in to the script contents
			`<script>console.error(${JSON.stringify(message).replaceAll('</', '<\\u002f')})</script>`
		)
	);
}

/**
 * @param {Renderer} renderer
 * @param {string} tag
 * @param {number} line
 * @param {number} column
 */
export function push_element(renderer, tag, line, column) {
	var context = /** @type {SSRContext} */ (ssr_context);
	var filename = context.function[FILENAME];
	var parent = context.element;
	var element = { tag, parent, filename, line, column };

	if (parent !== undefined) {
		var ancestor = parent.parent;
		var ancestors = [parent.tag];

		const child_loc = filename ? `${filename}:${line}:${column}` : undefined;
		const parent_loc = parent.filename
			? `${parent.filename}:${parent.line}:${parent.column}`
			: undefined;

		const message = is_tag_valid_with_parent(tag, parent.tag, child_loc, parent_loc);
		if (message) print_error(renderer, message);

		while (ancestor != null) {
			ancestors.push(ancestor.tag);
			const ancestor_loc = ancestor.filename
				? `${ancestor.filename}:${ancestor.line}:${ancestor.column}`
				: undefined;

			const message = is_tag_valid_with_ancestor(tag, ancestors, child_loc, ancestor_loc);
			if (message) print_error(renderer, message);

			ancestor = ancestor.parent;
		}
	}

	set_ssr_context({ ...context, p: context, element });
}

export function pop_element() {
	set_ssr_context(/** @type {SSRContext} */ (ssr_context).p);
}

/**
 * @param {Renderer} renderer
 */
export function validate_snippet_args(renderer) {
	if (
		typeof renderer !== 'object' ||
		// for some reason typescript consider the type of renderer as never after the first instanceof
		!(renderer instanceof Renderer)
	) {
		e.invalid_snippet_arguments();
	}
}

export function get_user_code_location() {
	const stack = get_stack();

	return stack
		.filter((line) => line.trim().startsWith('at '))
		.map((line) => line.replace(/\((.*):\d+:\d+\)$/, (_, file) => `(${file})`))
		.join('\n');
}

Domain

Subdomains

Frequently Asked Questions

What does dev.js do?
dev.js is a source file in the svelte codebase, written in javascript. It belongs to the ServerRuntime domain, Serialization subdomain.
What functions are defined in dev.js?
dev.js defines 5 function(s): get_user_code_location, pop_element, print_error, push_element, validate_snippet_args.
What does dev.js depend on?
dev.js imports 11 module(s): Renderer, constants.js, context.js, dev.js, errors.js, get_stack, html-tree-validation.js, is_tag_valid_with_ancestor, and 3 more.
What files import dev.js?
dev.js is imported by 3 file(s): hydratable.js, test.ts, types.d.ts.
Where is dev.js in the architecture?
dev.js is located at packages/svelte/src/internal/server/dev.js (domain: ServerRuntime, subdomain: Serialization, directory: packages/svelte/src/internal/server).

Analyze Your Own Codebase

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

Try Supermodel Free