Home / Function/ flatten() — svelte Function Reference

flatten() — svelte Function Reference

Architecture documentation for the flatten() function in async.js from the svelte codebase.

Entity Profile

Dependency Diagram

graph TD
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e["flatten()"]
  1ad3e508_c069_abae_2e4a_bd17c8892e18["async.js"]
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|defined in| 1ad3e508_c069_abae_2e4a_bd17c8892e18
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f["async()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| b9aaaccb_7510_28de_bb53_f808b2cb1d5e
  9a87a496_4e7d_9214_8bba_7bb2e3e47939["attribute_effect()"]
  9a87a496_4e7d_9214_8bba_7bb2e3e47939 -->|calls| b9aaaccb_7510_28de_bb53_f808b2cb1d5e
  a1d7f44d_5b8b_629c_39ba_eeb1486eee4a["run_after_blockers()"]
  a1d7f44d_5b8b_629c_39ba_eeb1486eee4a -->|calls| b9aaaccb_7510_28de_bb53_f808b2cb1d5e
  cb33ef2f_2e6e_0042_436d_4ff6a84c5836["template_effect()"]
  cb33ef2f_2e6e_0042_436d_4ff6a84c5836 -->|calls| b9aaaccb_7510_28de_bb53_f808b2cb1d5e
  67fa511b_0187_f041_2ace_159bdaf811ae["deferred_template_effect()"]
  67fa511b_0187_f041_2ace_159bdaf811ae -->|calls| b9aaaccb_7510_28de_bb53_f808b2cb1d5e
  ad360ec3_c98b_ac47_212b_923d0363a0ce["is_runes()"]
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|calls| ad360ec3_c98b_ac47_212b_923d0363a0ce
  db550759_ee3b_160c_8afa_d1aa9fae478c["fn()"]
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|calls| db550759_ee3b_160c_8afa_d1aa9fae478c
  61349edc_4397_493f_bcdc_aa9a9b92ec3c["capture()"]
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|calls| 61349edc_4397_493f_bcdc_aa9a9b92ec3c
  623c7d5f_8856_1cec_42aa_d58e310da5d1["invoke_error_boundary()"]
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|calls| 623c7d5f_8856_1cec_42aa_d58e310da5d1
  a0b8f840_863f_a966_d259_b866f80703d1["deactivate()"]
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|calls| a0b8f840_863f_a966_d259_b866f80703d1
  df71411d_ad64_65b8_da29_e77890377349["unset_context()"]
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|calls| df71411d_ad64_65b8_da29_e77890377349
  9a4a3f08_7a6a_f871_c243_a35a6690f3f7["run()"]
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|calls| 9a4a3f08_7a6a_f871_c243_a35a6690f3f7
  a387a36f_f417_a149_0b1a_ee4a1da63440["async_derived()"]
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|calls| a387a36f_f417_a149_0b1a_ee4a1da63440
  style b9aaaccb_7510_28de_bb53_f808b2cb1d5e fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/internal/client/reactivity/async.js lines 35–92

export function flatten(blockers, sync, async, fn) {
	const d = is_runes() ? derived : derived_safe_equal;

	// Filter out already-settled blockers - no need to wait for them
	var pending = blockers.filter((b) => !b.settled);

	if (async.length === 0 && pending.length === 0) {
		fn(sync.map(d));
		return;
	}

	var batch = current_batch;
	var parent = /** @type {Effect} */ (active_effect);

	var restore = capture();
	var blocker_promise =
		pending.length === 1
			? pending[0].promise
			: pending.length > 1
				? Promise.all(pending.map((b) => b.promise))
				: null;

	/** @param {Value[]} values */
	function finish(values) {
		restore();

		try {
			fn(values);
		} catch (error) {
			if ((parent.f & DESTROYED) === 0) {
				invoke_error_boundary(error, parent);
			}
		}

		batch?.deactivate();
		unset_context();
	}

	// Fast path: blockers but no async expressions
	if (async.length === 0) {
		/** @type {Promise<any>} */ (blocker_promise).then(() => finish(sync.map(d)));
		return;
	}

	// Full path: has async expressions
	function run() {
		restore();
		Promise.all(async.map((expression) => async_derived(expression)))
			.then((result) => finish([...sync.map(d), ...result]))
			.catch((error) => invoke_error_boundary(error, parent));
	}

	if (blocker_promise) {
		blocker_promise.then(run);
	} else {
		run();
	}
}

Domain

Subdomains

Frequently Asked Questions

What does flatten() do?
flatten() is a function in the svelte codebase, defined in packages/svelte/src/internal/client/reactivity/async.js.
Where is flatten() defined?
flatten() is defined in packages/svelte/src/internal/client/reactivity/async.js at line 35.
What does flatten() call?
flatten() calls 8 function(s): async_derived, capture, deactivate, fn, invoke_error_boundary, is_runes, run, unset_context.
What calls flatten()?
flatten() is called by 5 function(s): async, attribute_effect, deferred_template_effect, run_after_blockers, template_effect.

Analyze Your Own Codebase

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

Try Supermodel Free