diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/Program.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/Program.js index 2174f3e819..6a49a01fa4 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/Program.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/Program.js @@ -255,12 +255,15 @@ function transform_body(program, context) { if (statements.length > 0) { var declarations = statements.map((s) => s.declarations).flat(); - out.push( - b.declaration( - 'var', - declarations.map((d) => b.declarator(d.node)) - ) - ); + + if (declarations.length > 0) { + out.push( + b.declaration( + 'var', + declarations.map((d) => b.declarator(d.node)) + ) + ); + } const thunks = statements.map((s) => { if (s.node.type === 'VariableDeclarator') { diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index 70d511cc63..b045084c8c 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -276,9 +276,18 @@ export function run(thunks) { let promise = Promise.resolve(); - return thunks.map((fn) => { + var boundary = get_boundary(); + var batch = /** @type {Batch} */ (current_batch); + var blocking = !boundary.is_pending(); + + boundary.update_pending_count(1); + batch.increment(blocking); + + const promises = thunks.map((fn) => { promise = promise .then(() => { + // TODO abort if component was destroyed + try { restore(); return fn(); @@ -290,4 +299,11 @@ export function run(thunks) { return promise; }); + + promise.then(() => { + boundary.update_pending_count(-1); + batch.decrement(blocking); + }); + + return promises; }