diff --git a/packages/svelte/src/compiler/phases/1-parse/utils/create.js b/packages/svelte/src/compiler/phases/1-parse/utils/create.js index 2fba918f20..3bbe701944 100644 --- a/packages/svelte/src/compiler/phases/1-parse/utils/create.js +++ b/packages/svelte/src/compiler/phases/1-parse/utils/create.js @@ -11,7 +11,8 @@ export function create_fragment(transparent = false) { metadata: { transparent, dynamic: false, - has_await: false + has_await: false, + effect_pending_expressions: [] } }; } diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/CallExpression.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/CallExpression.js index 53a89125a2..bdd31522ea 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/CallExpression.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/CallExpression.js @@ -165,10 +165,22 @@ export function CallExpression(node, context) { break; case '$effect.pending': + if (node.arguments.length > 1) { + e.rune_invalid_arguments_length(node, rune, 'zero or one arguments'); + } + if (context.state.expression) { context.state.expression.has_state = true; } + if (node.arguments[0]) { + const fragment = /** @type {AST.Fragment} */ (context.state.fragment); + + fragment.metadata.effect_pending_expressions.push( + /** @type {Expression} */ (node.arguments[0]) + ); + } + break; case '$inspect': diff --git a/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts b/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts index 932d353671..2481589922 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts +++ b/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts @@ -24,6 +24,8 @@ export interface ClientTransformState extends TransformState { /** `true` if we're transforming the contents of `