Home / Class/ SvelteSet Class — svelte Architecture

SvelteSet Class — svelte Architecture

Architecture documentation for the SvelteSet class in set.js from the svelte codebase.

Entity Profile

Dependency Diagram

graph TD
  eea73370_3158_afe8_bb16_b4ffb58d476f["SvelteSet"]
  4906f61a_c290_2722_44b4_523e6fa121db["set.js"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|defined in| 4906f61a_c290_2722_44b4_523e6fa121db
  2f2c0b09_fdf1_e466_679b_e88c5380a219["constructor()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| 2f2c0b09_fdf1_e466_679b_e88c5380a219
  7d5db99a_07cd_cef9_c683_da198f0e07ae["value()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| 7d5db99a_07cd_cef9_c683_da198f0e07ae
  0897fecf_4cf0_3844_68cc_d9edf7a0a23a["inited()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| 0897fecf_4cf0_3844_68cc_d9edf7a0a23a
  d460491c_489c_23c6_7a07_f9e08453a5c2["has()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| d460491c_489c_23c6_7a07_f9e08453a5c2
  c3ab1fe7_dc0c_4dce_760e_a2afd68ccc68["add()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| c3ab1fe7_dc0c_4dce_760e_a2afd68ccc68
  64f0baa3_3905_9966_9720_bebedd8e7a54["delete()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| 64f0baa3_3905_9966_9720_bebedd8e7a54
  687f3c30_8fae_fb5d_2f23_045d2220f990["clear()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| 687f3c30_8fae_fb5d_2f23_045d2220f990
  bab7be01_996a_52b1_ecec_0c80dd2b84c9["keys()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| bab7be01_996a_52b1_ecec_0c80dd2b84c9
  d7a23a2b_04a7_60aa_4659_13e911cdd1d1["values()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| d7a23a2b_04a7_60aa_4659_13e911cdd1d1
  bb4f056b_d65d_190d_f49f_b3784ab0c952["entries()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| bb4f056b_d65d_190d_f49f_b3784ab0c952
  22a5556c_26e8_4c3c_bce8_312d429e9260["Symbol()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| 22a5556c_26e8_4c3c_bce8_312d429e9260
  4f1e3793_e4e0_569e_29fc_cc0eab45e1b1["size()"]
  eea73370_3158_afe8_bb16_b4ffb58d476f -->|method| 4f1e3793_e4e0_569e_29fc_cc0eab45e1b1

Relationship Graph

Source Code

packages/svelte/src/reactivity/set.js lines 47–213

export class SvelteSet extends Set {
	/** @type {Map<T, Source<boolean>>} */
	#sources = new Map();
	#version = state(0);
	#size = state(0);
	#update_version = update_version || -1;

	/**
	 * @param {Iterable<T> | null | undefined} [value]
	 */
	constructor(value) {
		super();

		if (DEV) {
			// If the value is invalid then the native exception will fire here
			value = new Set(value);

			tag(this.#version, 'SvelteSet version');
			tag(this.#size, 'SvelteSet.size');
		}

		if (value) {
			for (var element of value) {
				super.add(element);
			}
			this.#size.v = super.size;
		}

		if (!inited) this.#init();
	}

	/**
	 * If the source is being created inside the same reaction as the SvelteSet instance,
	 * we use `state` so that it will not be a dependency of the reaction. Otherwise we
	 * use `source` so it will be.
	 *
	 * @template T
	 * @param {T} value
	 * @returns {Source<T>}
	 */
	#source(value) {
		return update_version === this.#update_version ? state(value) : source(value);
	}

	// We init as part of the first instance so that we can treeshake this class
	#init() {
		inited = true;

		var proto = SvelteSet.prototype;
		var set_proto = Set.prototype;

		for (const method of read_methods) {
			// @ts-ignore
			proto[method] = function (...v) {
				get(this.#version);
				// @ts-ignore
				return set_proto[method].apply(this, v);
			};
		}

		for (const method of set_like_methods) {
			// @ts-ignore
			proto[method] = function (...v) {
				get(this.#version);
				// @ts-ignore
				var set = /** @type {Set<T>} */ (set_proto[method].apply(this, v));
				return new SvelteSet(set);
			};
		}
	}

	/** @param {T} value */
	has(value) {
		var has = super.has(value);
		var sources = this.#sources;
		var s = sources.get(value);

		if (s === undefined) {
			if (!has) {
				// If the value doesn't exist, track the version in case it's added later
				// but don't create sources willy-nilly to track all possible values

Frequently Asked Questions

What is the SvelteSet class?
SvelteSet is a class in the svelte codebase, defined in packages/svelte/src/reactivity/set.js.
Where is SvelteSet defined?
SvelteSet is defined in packages/svelte/src/reactivity/set.js at line 47.

Analyze Your Own Codebase

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

Try Supermodel Free