Home / Function/ createSubscriber() — svelte Function Reference

createSubscriber() — svelte Function Reference

Architecture documentation for the createSubscriber() function in create-subscriber.js from the svelte codebase.

Entity Profile

Dependency Diagram

graph TD
  92303a26_c904_85e7_5ec0_8e0605dbb9f9["createSubscriber()"]
  9ad5fe9f_fc6f_e854_93df_194b16c3b738["create-subscriber.js"]
  92303a26_c904_85e7_5ec0_8e0605dbb9f9 -->|defined in| 9ad5fe9f_fc6f_e854_93df_194b16c3b738
  142e2be6_1ec4_1b85_9b82_cefdeae4a983["constructor()"]
  142e2be6_1ec4_1b85_9b82_cefdeae4a983 -->|calls| 92303a26_c904_85e7_5ec0_8e0605dbb9f9
  ab0a252a_4356_68f7_4ed9_005d076ecd66["fromStore()"]
  ab0a252a_4356_68f7_4ed9_005d076ecd66 -->|calls| 92303a26_c904_85e7_5ec0_8e0605dbb9f9
  1e2f7428_6050_5cb7_69db_bf5db719f6d1["source()"]
  92303a26_c904_85e7_5ec0_8e0605dbb9f9 -->|calls| 1e2f7428_6050_5cb7_69db_bf5db719f6d1
  4dfcf957_8573_ff55_bd31_4181227109e3["tag()"]
  92303a26_c904_85e7_5ec0_8e0605dbb9f9 -->|calls| 4dfcf957_8573_ff55_bd31_4181227109e3
  461d1f5f_ffa4_d984_98a4_868566c66f30["effect_tracking()"]
  92303a26_c904_85e7_5ec0_8e0605dbb9f9 -->|calls| 461d1f5f_ffa4_d984_98a4_868566c66f30
  a08b6cc5_af73_1be4_d02f_3113cf8a8305["get()"]
  92303a26_c904_85e7_5ec0_8e0605dbb9f9 -->|calls| a08b6cc5_af73_1be4_d02f_3113cf8a8305
  7494b934_a3b8_689e_91b6_8435e26461c5["render_effect()"]
  92303a26_c904_85e7_5ec0_8e0605dbb9f9 -->|calls| 7494b934_a3b8_689e_91b6_8435e26461c5
  a814b193_e12a_4037_c3c8_dfd45f3bd0bb["untrack()"]
  92303a26_c904_85e7_5ec0_8e0605dbb9f9 -->|calls| a814b193_e12a_4037_c3c8_dfd45f3bd0bb
  7602fc38_fab9_8955_83f0_8643d7c6c7a4["increment()"]
  92303a26_c904_85e7_5ec0_8e0605dbb9f9 -->|calls| 7602fc38_fab9_8955_83f0_8643d7c6c7a4
  2cab0f64_6d19_d981_66e2_d2555c252702["queue_micro_task()"]
  92303a26_c904_85e7_5ec0_8e0605dbb9f9 -->|calls| 2cab0f64_6d19_d981_66e2_d2555c252702
  style 92303a26_c904_85e7_5ec0_8e0605dbb9f9 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/reactivity/create-subscriber.js lines 54–95

export function createSubscriber(start) {
	let subscribers = 0;
	let version = source(0);
	/** @type {(() => void) | void} */
	let stop;

	if (DEV) {
		tag(version, 'createSubscriber version');
	}

	return () => {
		if (effect_tracking()) {
			get(version);

			render_effect(() => {
				if (subscribers === 0) {
					stop = untrack(() => start(() => increment(version)));
				}

				subscribers += 1;

				return () => {
					queue_micro_task(() => {
						// Only count down after a microtask, else we would reach 0 before our own render effect reruns,
						// but reach 1 again when the tick callback of the prior teardown runs. That would mean we
						// re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.
						subscribers -= 1;

						if (subscribers === 0) {
							stop?.();
							stop = undefined;
							// Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.
							// If we didn't do this then the comparison of write versions would determine that the derived has a later version than
							// the subscriber, and it would not be re-run.
							increment(version);
						}
					});
				};
			});
		}
	};
}

Subdomains

Frequently Asked Questions

What does createSubscriber() do?
createSubscriber() is a function in the svelte codebase, defined in packages/svelte/src/reactivity/create-subscriber.js.
Where is createSubscriber() defined?
createSubscriber() is defined in packages/svelte/src/reactivity/create-subscriber.js at line 54.
What does createSubscriber() call?
createSubscriber() calls 8 function(s): effect_tracking, get, increment, queue_micro_task, render_effect, source, tag, untrack.
What calls createSubscriber()?
createSubscriber() is called by 2 function(s): constructor, fromStore.

Analyze Your Own Codebase

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

Try Supermodel Free