Home / Function/ writable() — svelte Function Reference

writable() — svelte Function Reference

Architecture documentation for the writable() function in index.js from the svelte codebase.

Entity Profile

Dependency Diagram

graph TD
  ba16ff3e_8a18_d3c4_15e9_96304b539f51["writable()"]
  b874f390_a6ee_7d84_7151_b2b77f0388d5["index.js"]
  ba16ff3e_8a18_d3c4_15e9_96304b539f51 -->|defined in| b874f390_a6ee_7d84_7151_b2b77f0388d5
  1be4451f_f9ee_5df1_6b9b_d5f88ec472fd["spring()"]
  1be4451f_f9ee_5df1_6b9b_d5f88ec472fd -->|calls| ba16ff3e_8a18_d3c4_15e9_96304b539f51
  cc3dbfb4_f7d6_e5af_e4aa_42d1354dade9["tweened()"]
  cc3dbfb4_f7d6_e5af_e4aa_42d1354dade9 -->|calls| ba16ff3e_8a18_d3c4_15e9_96304b539f51
  d677216e_46d5_c70b_1d0e_82e2fcf6a340["toStore()"]
  d677216e_46d5_c70b_1d0e_82e2fcf6a340 -->|calls| ba16ff3e_8a18_d3c4_15e9_96304b539f51
  9b2c21f2_41ab_1545_33fc_5df63113cb0f["toStore()"]
  9b2c21f2_41ab_1545_33fc_5df63113cb0f -->|calls| ba16ff3e_8a18_d3c4_15e9_96304b539f51
  a6e21914_fa35_9517_31ef_4774ea1ecde3["readable()"]
  a6e21914_fa35_9517_31ef_4774ea1ecde3 -->|calls| ba16ff3e_8a18_d3c4_15e9_96304b539f51
  b3727276_e6f9_12a7_bfa7_3faf14f08373["safe_not_equal()"]
  ba16ff3e_8a18_d3c4_15e9_96304b539f51 -->|calls| b3727276_e6f9_12a7_bfa7_3faf14f08373
  3b9fcc16_eee3_208a_bc65_45c294d8565a["run()"]
  ba16ff3e_8a18_d3c4_15e9_96304b539f51 -->|calls| 3b9fcc16_eee3_208a_bc65_45c294d8565a
  style ba16ff3e_8a18_d3c4_15e9_96304b539f51 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/store/shared/index.js lines 34–95

export function writable(value, start = noop) {
	/** @type {Unsubscriber | null} */
	let stop = null;

	/** @type {Set<SubscribeInvalidateTuple<T>>} */
	const subscribers = new Set();

	/**
	 * @param {T} new_value
	 * @returns {void}
	 */
	function set(new_value) {
		if (safe_not_equal(value, new_value)) {
			value = new_value;
			if (stop) {
				// store is ready
				const run_queue = !subscriber_queue.length;
				for (const subscriber of subscribers) {
					subscriber[1]();
					subscriber_queue.push(subscriber, value);
				}
				if (run_queue) {
					for (let i = 0; i < subscriber_queue.length; i += 2) {
						subscriber_queue[i][0](subscriber_queue[i + 1]);
					}
					subscriber_queue.length = 0;
				}
			}
		}
	}

	/**
	 * @param {Updater<T>} fn
	 * @returns {void}
	 */
	function update(fn) {
		set(fn(/** @type {T} */ (value)));
	}

	/**
	 * @param {Subscriber<T>} run
	 * @param {() => void} [invalidate]
	 * @returns {Unsubscriber}
	 */
	function subscribe(run, invalidate = noop) {
		/** @type {SubscribeInvalidateTuple<T>} */
		const subscriber = [run, invalidate];
		subscribers.add(subscriber);
		if (subscribers.size === 1) {
			stop = start(set, update) || noop;
		}
		run(/** @type {T} */ (value));
		return () => {
			subscribers.delete(subscriber);
			if (subscribers.size === 0 && stop) {
				stop();
				stop = null;
			}
		};
	}
	return { set, update, subscribe };
}

Subdomains

Frequently Asked Questions

What does writable() do?
writable() is a function in the svelte codebase, defined in packages/svelte/src/store/shared/index.js.
Where is writable() defined?
writable() is defined in packages/svelte/src/store/shared/index.js at line 34.
What does writable() call?
writable() calls 2 function(s): run, safe_not_equal.
What calls writable()?
writable() is called by 5 function(s): readable, spring, toStore, toStore, tweened.

Analyze Your Own Codebase

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

Try Supermodel Free