From 5c0749fdf3840a5081f3872ea7b904bbd7f6f7cd Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 4 Feb 2025 23:44:20 +0000 Subject: [PATCH] fix --- .../client/visitors/shared/component.js | 2 +- .../internal/client/reactivity/resources.js | 26 +++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) 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 5fdbb12fc1..d08b8c0664 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 @@ -181,7 +181,7 @@ export function build_component(node, component_name, context, anchor = context. n.type === 'ExpressionTag' && n.expression.type !== 'Identifier' && (n.expression.type !== 'MemberExpression' || - n.expression.object.type !== 'ArrayExpression') + n.expression.object.type === 'AwaitExpression') ); }); diff --git a/packages/svelte/src/internal/client/reactivity/resources.js b/packages/svelte/src/internal/client/reactivity/resources.js index 260cf8e65a..f34092ee4d 100644 --- a/packages/svelte/src/internal/client/reactivity/resources.js +++ b/packages/svelte/src/internal/client/reactivity/resources.js @@ -63,19 +63,35 @@ export class Resource { var value = get(this.#current); if (value === UNINITIALIZED) { - return this.#fn.v; + throw new Error('Resource is not yet resolved, ensure it is awaited'); } return value; } get latest() { - var promise = get(this.#fn); + var value = get(this.#current); + get(this.#pending); - if (!this.#pending.v) { - return this.#current.v; + if (value === UNINITIALIZED) { + throw new Error('Resource is not yet resolved, ensure it is awaited'); } - return promise; + return value; + } + + /** + * @param {(arg0: { readonly current: T; readonly pending: boolean; readonly latest: T; }) => void} onfulfilled + * @param {((reason: any) => PromiseLike) | null | undefined} onrejected + */ + then(onfulfilled, onrejected) { + return get(this.#fn).then(() => { + var self = this; + onfulfilled({ + get current() { return self.current }, + get pending() { return self.pending }, + get latest() { return self.latest } + }); + }, onrejected); } }