Home / File/ hydratable.js — svelte Source File

hydratable.js — svelte Source File

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

File javascript ServerRuntime Serialization 10 imports 5 functions

Entity Profile

Dependency Diagram

graph LR
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08["hydratable.js"]
  3c211218_0172_f6af_dd4f_da8028a531fc["index.js"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> 3c211218_0172_f6af_dd4f_da8028a531fc
  006232e6_7197_38b5_bd13_0b28c51c2ac8["render-context.js"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> 006232e6_7197_38b5_bd13_0b28c51c2ac8
  996c7fa5_2d99_0bb8_8ca5_ceef284d88cf["get_render_context"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> 996c7fa5_2d99_0bb8_8ca5_ceef284d88cf
  aa72dc21_2f0c_e44b_b27f_dee45869de27["errors.js"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> aa72dc21_2f0c_e44b_b27f_dee45869de27
  66d86b00_6f66_4791_e665_59e2cf45dc7f["dev.js"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> 66d86b00_6f66_4791_e665_59e2cf45dc7f
  dc56a025_e89c_82a9_72a2_1f21312e2aa4["get_stack"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> dc56a025_e89c_82a9_72a2_1f21312e2aa4
  4440efa2_b84c_d186_53ca_534b0add2937["dev.js"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> 4440efa2_b84c_d186_53ca_534b0add2937
  8362c319_fb03_c16d_839d_c59e10f334e7["get_user_code_location"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> 8362c319_fb03_c16d_839d_c59e10f334e7
  39cece3d_6293_5319_57d1_707aa326f944["devalue"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> 39cece3d_6293_5319_57d1_707aa326f944
  c9866d91_a204_fa55_a9e3_6bcc6aaaec1e["esm-env"]
  2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 --> c9866d91_a204_fa55_a9e3_6bcc6aaaec1e
  style 2d51c6c9_d3dc_2c19_12a2_18adb2ef1c08 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @import { HydratableLookupEntry } from '#server' */
import { async_mode_flag } from '../flags/index.js';
import { get_render_context } from './render-context.js';
import * as e from './errors.js';
import * as devalue from 'devalue';
import { get_stack } from '../shared/dev.js';
import { DEV } from 'esm-env';
import { get_user_code_location } from './dev.js';

/**
 * @template T
 * @param {string} key
 * @param {() => T} fn
 * @returns {T}
 */
export function hydratable(key, fn) {
	if (!async_mode_flag) {
		e.experimental_async_required('hydratable');
	}

	const { hydratable } = get_render_context();

	let entry = hydratable.lookup.get(key);

	if (entry !== undefined) {
		if (DEV) {
			const comparison = compare(key, entry, encode(key, fn()));
			comparison.catch(() => {});
			hydratable.comparisons.push(comparison);
		}

		return /** @type {T} */ (entry.value);
	}

	const value = fn();

	entry = encode(key, value, hydratable.unresolved_promises);
	hydratable.lookup.set(key, entry);

	return value;
}

/**
 * @param {string} key
 * @param {any} value
 * @param {Map<Promise<any>, string>} [unresolved]
 */
function encode(key, value, unresolved) {
	/** @type {HydratableLookupEntry} */
	const entry = { value, serialized: '' };

	if (DEV) {
		entry.stack = get_user_code_location();
	}

	let uid = 1;

	entry.serialized = devalue.uneval(entry.value, (value, uneval) => {
		if (is_promise(value)) {
			// we serialize promises as `"${i}"`, because it's impossible for that string
// ... (83 more lines)

Domain

Subdomains

Frequently Asked Questions

What does hydratable.js do?
hydratable.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 hydratable.js?
hydratable.js defines 5 function(s): compare, encode, hydratable, is_promise, serialization_stack.
What does hydratable.js depend on?
hydratable.js imports 10 module(s): dev.js, dev.js, devalue, errors.js, esm-env, get_render_context, get_stack, get_user_code_location, and 2 more.
Where is hydratable.js in the architecture?
hydratable.js is located at packages/svelte/src/internal/server/hydratable.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