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
Source
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