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);
}
});
};
});
}
};
}
Domain
Subdomains
Called By
Source
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