diff --git a/.changeset/long-moles-join.md b/.changeset/long-moles-join.md
new file mode 100644
index 0000000000..92c3d7bf9d
--- /dev/null
+++ b/.changeset/long-moles-join.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: ensure tracking returns true, even if in unowned
diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js
index d08b8c0664..fde88877dc 100644
--- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js
+++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js
@@ -176,14 +176,15 @@ export function build_component(node, component_name, context, anchor = context.
// When we have a non-simple computation, anything other than an Identifier or Member expression,
// then there's a good chance it needs to be memoized to avoid over-firing when read within the
// child component (e.g. `active={i === index}`)
- const should_wrap_in_derived = get_attribute_chunks(attribute.value).some((n) => {
- return (
- n.type === 'ExpressionTag' &&
- n.expression.type !== 'Identifier' &&
- (n.expression.type !== 'MemberExpression' ||
- n.expression.object.type === 'AwaitExpression')
- );
- });
+ const should_wrap_in_derived =
+ metadata.is_async ||
+ get_attribute_chunks(attribute.value).some((n) => {
+ return (
+ n.type === 'ExpressionTag' &&
+ n.expression.type !== 'Identifier' &&
+ n.expression.type !== 'MemberExpression'
+ );
+ });
return should_wrap_in_derived
? b.call(
diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/AwaitExpression.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/AwaitExpression.js
index f78aa98185..9135892dbd 100644
--- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/AwaitExpression.js
+++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/AwaitExpression.js
@@ -7,7 +7,17 @@ import * as b from '../../../../utils/builders.js';
* @param {Context} context
*/
export function AwaitExpression(node, context) {
- if (context.state.scope.function_depth > 1) {
+ // if `await` is inside a function, or inside `
+
+
Text: {text}
+ diff --git a/playgrounds/sandbox/index.html b/playgrounds/sandbox/index.html index 512b5426a9..845538abf0 100644 --- a/playgrounds/sandbox/index.html +++ b/playgrounds/sandbox/index.html @@ -12,7 +12,7 @@