Home / Class/ ResizeObserverSingleton Class — svelte Architecture

ResizeObserverSingleton Class — svelte Architecture

Architecture documentation for the ResizeObserverSingleton class in size.js from the svelte codebase.

Entity Profile

Dependency Diagram

graph TD
  7aec7a59_607b_ef2d_909b_d619875d2f84["ResizeObserverSingleton"]
  fe1dcfc3_17ce_7457_26bc_48c27d79cefc["size.js"]
  7aec7a59_607b_ef2d_909b_d619875d2f84 -->|defined in| fe1dcfc3_17ce_7457_26bc_48c27d79cefc
  0b1314cf_3229_164f_0186_dda65b61acf8["constructor()"]
  7aec7a59_607b_ef2d_909b_d619875d2f84 -->|method| 0b1314cf_3229_164f_0186_dda65b61acf8
  d86d4126_6146_ecbe_15fd_fa3db2f84672["observe()"]
  7aec7a59_607b_ef2d_909b_d619875d2f84 -->|method| d86d4126_6146_ecbe_15fd_fa3db2f84672
  0a17ae89_497b_83d0_8655_a52c5775a66c["ResizeObserver()"]
  7aec7a59_607b_ef2d_909b_d619875d2f84 -->|method| 0a17ae89_497b_83d0_8655_a52c5775a66c

Relationship Graph

Source Code

packages/svelte/src/internal/client/dom/elements/bindings/size.js lines 8–63

class ResizeObserverSingleton {
	/** */
	#listeners = new WeakMap();

	/** @type {ResizeObserver | undefined} */
	#observer;

	/** @type {ResizeObserverOptions} */
	#options;

	/** @static */
	static entries = new WeakMap();

	/** @param {ResizeObserverOptions} options */
	constructor(options) {
		this.#options = options;
	}

	/**
	 * @param {Element} element
	 * @param {(entry: ResizeObserverEntry) => any} listener
	 */
	observe(element, listener) {
		var listeners = this.#listeners.get(element) || new Set();
		listeners.add(listener);

		this.#listeners.set(element, listeners);
		this.#getObserver().observe(element, this.#options);

		return () => {
			var listeners = this.#listeners.get(element);
			listeners.delete(listener);

			if (listeners.size === 0) {
				this.#listeners.delete(element);
				/** @type {ResizeObserver} */ (this.#observer).unobserve(element);
			}
		};
	}

	#getObserver() {
		return (
			this.#observer ??
			(this.#observer = new ResizeObserver(
				/** @param {any} entries */ (entries) => {
					for (var entry of entries) {
						ResizeObserverSingleton.entries.set(entry.target, entry);
						for (var listener of this.#listeners.get(entry.target) || []) {
							listener(entry);
						}
					}
				}
			))
		);
	}
}

Domain

Frequently Asked Questions

What is the ResizeObserverSingleton class?
ResizeObserverSingleton is a class in the svelte codebase, defined in packages/svelte/src/internal/client/dom/elements/bindings/size.js.
Where is ResizeObserverSingleton defined?
ResizeObserverSingleton is defined in packages/svelte/src/internal/client/dom/elements/bindings/size.js at line 8.

Analyze Your Own Codebase

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

Try Supermodel Free