From 42894060d9bdb204cf73c71c69442b60a54459c3 Mon Sep 17 00:00:00 2001 From: Varixo Date: Fri, 9 Aug 2024 17:18:31 +0200 Subject: [PATCH] fix v2-signals tests --- packages/qwik/src/core/use/use-task.ts | 20 ++++--------------- packages/qwik/src/core/v2/signal/v2-signal.ts | 13 ++++++++++++ 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/qwik/src/core/use/use-task.ts b/packages/qwik/src/core/use/use-task.ts index 6784cb6d246..18f83f9160d 100644 --- a/packages/qwik/src/core/use/use-task.ts +++ b/packages/qwik/src/core/use/use-task.ts @@ -29,12 +29,8 @@ import { delay, isPromise, maybeThen, safeCall } from '../util/promises'; import { isFunction, isObject, type ValueOrPromise } from '../util/types'; import { ChoreType } from '../v2/shared/scheduler'; import { isContainer2, type Container2, type HostElement, type fixMeAny } from '../v2/shared/types'; -import { EffectProperty } from '../v2/signal/v2-signal'; -import { - createComputed2Qrl, - type ReadonlySignal2, - type Signal2, -} from '../v2/signal/v2-signal.public'; +import { ComputedSignal2, EffectProperty, throwIfQRLNotResolved } from '../v2/signal/v2-signal'; +import { type ReadonlySignal2, type Signal2 } from '../v2/signal/v2-signal.public'; import { invoke, newInvokeContext, untrack, waitAndRun } from './use-core'; import { useOn, useOnDocument } from './use-on'; import { useSequentialScope } from './use-sequential-scope'; @@ -435,18 +431,10 @@ export const useComputedQrl: ComputedQRL = (qrl: QRL>): Signal2 return val; } assertQrl(qrl); - const signal = createComputed2Qrl(qrl); + const signal = new ComputedSignal2(null, qrl); set(signal); - const resolved = qrl.resolved; - if (!resolved) { - // When we are creating a signal using a use method, we need to ensure - // that the computation can be lazy and therefore we need to unsure - // that the QRL is resolved. - // When we re-create the signal from serialization (we don't create the signal - // using useMethod) it is OK to not resolve it until the graph is marked as dirty. - throw qrl.resolve(); - } + throwIfQRLNotResolved(qrl); return signal; }; diff --git a/packages/qwik/src/core/v2/signal/v2-signal.ts b/packages/qwik/src/core/v2/signal/v2-signal.ts index 6bfad64b608..6acb51a41b1 100644 --- a/packages/qwik/src/core/v2/signal/v2-signal.ts +++ b/packages/qwik/src/core/v2/signal/v2-signal.ts @@ -46,9 +46,22 @@ export const createSignal2 = (value?: any) => { }; export const createComputedSignal2 = (qrl: QRL<() => T>) => { + throwIfQRLNotResolved(qrl); return new ComputedSignal2(null, qrl as QRLInternal<() => T>); }; +export const throwIfQRLNotResolved = (qrl: QRL<() => T>) => { + const resolved = qrl.resolved; + if (!resolved) { + // When we are creating a signal using a use method, we need to ensure + // that the computation can be lazy and therefore we need to unsure + // that the QRL is resolved. + // When we re-create the signal from serialization (we don't create the signal + // using useMethod) it is OK to not resolve it until the graph is marked as dirty. + throw qrl.resolve(); + } +}; + /** @public */ export const isSignal2 = (value: any): value is ISignal2 => { return value instanceof Signal2;