Home / Class/ PromiseOptimiser Class — svelte Architecture

PromiseOptimiser Class — svelte Architecture

Architecture documentation for the PromiseOptimiser class in utils.js from the svelte codebase.

Entity Profile

Dependency Diagram

graph TD
  89f84d70_5c6c_1980_33f9_650ce42a04ab["PromiseOptimiser"]
  74eddc85_a390_2aab_af5a_ef32b77d5430["utils.js"]
  89f84d70_5c6c_1980_33f9_650ce42a04ab -->|defined in| 74eddc85_a390_2aab_af5a_ef32b77d5430
  126a8308_3b14_c35b_d2d5_a0f33b2939dc["check_blockers()"]
  89f84d70_5c6c_1980_33f9_650ce42a04ab -->|method| 126a8308_3b14_c35b_d2d5_a0f33b2939dc
  ace7a550_b7b7_88e6_9231_4375f5df3866["b()"]
  89f84d70_5c6c_1980_33f9_650ce42a04ab -->|method| ace7a550_b7b7_88e6_9231_4375f5df3866
  9cf014c4_f551_2661_0229_f990b01327ac["blockers()"]
  89f84d70_5c6c_1980_33f9_650ce42a04ab -->|method| 9cf014c4_f551_2661_0229_f990b01327ac
  c5103d74_690b_5e58_b211_85c417500d79["is_async()"]
  89f84d70_5c6c_1980_33f9_650ce42a04ab -->|method| c5103d74_690b_5e58_b211_85c417500d79
  94797a73_c86f_f8e5_0dbd_d1012c2c1584["render()"]
  89f84d70_5c6c_1980_33f9_650ce42a04ab -->|method| 94797a73_c86f_f8e5_0dbd_d1012c2c1584
  7048cd7e_3fd1_ae4c_a573_68a6ebe889e9["render_block()"]
  89f84d70_5c6c_1980_33f9_650ce42a04ab -->|method| 7048cd7e_3fd1_ae4c_a573_68a6ebe889e9

Relationship Graph

Source Code

packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js lines 299–400

export class PromiseOptimiser {
	/** @type {Expression[]} */
	expressions = [];

	has_await = false;

	/** @type {Set<Expression>} */
	#blockers = new Set();

	/**
	 * @param {Expression} expression
	 * @param {ExpressionMetadata} metadata
	 */
	transform = (expression, metadata) => {
		this.check_blockers(metadata);

		if (metadata.has_await) {
			this.has_await = true;

			const length = this.expressions.push(expression);
			return b.id(`$$${length - 1}`);
		}

		return expression;
	};

	/**
	 * @param {ExpressionMetadata} metadata
	 */
	check_blockers(metadata) {
		for (const binding of metadata.dependencies) {
			if (binding.blocker) {
				this.#blockers.add(binding.blocker);
			}
		}
	}

	#apply() {
		if (this.expressions.length === 0) {
			return b.empty;
		}

		if (this.expressions.length === 1) {
			return b.const('$$0', this.expressions[0]);
		}

		const promises = b.array(
			this.expressions.map((expression) => {
				return expression.type === 'AwaitExpression' && !has_await_expression(expression.argument)
					? expression.argument
					: b.call(b.thunk(expression, true));
			})
		);

		return b.const(
			b.array_pattern(this.expressions.map((_, i) => b.id(`$$${i}`))),
			b.await(b.call('Promise.all', promises))
		);
	}

	blockers() {
		return b.array([...this.#blockers]);
	}

	is_async() {
		return this.expressions.length > 0 || this.#blockers.size > 0;
	}

	/**
	 * @param {Statement[]} statements
	 * @returns {Statement[]}
	 */
	render(statements) {
		if (!this.is_async()) {
			return statements;
		}

		const fn = b.arrow(
			[b.id('$$renderer')],
			b.block([this.#apply(), ...statements]),
			this.has_await

Domain

Frequently Asked Questions

What is the PromiseOptimiser class?
PromiseOptimiser is a class in the svelte codebase, defined in packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js.
Where is PromiseOptimiser defined?
PromiseOptimiser is defined in packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js at line 299.

Analyze Your Own Codebase

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

Try Supermodel Free