Skip to content

Commit 4d9ac35

Browse files
committed
fix some e2e tests
1 parent ddfe999 commit 4d9ac35

File tree

4 files changed

+45
-36
lines changed

4 files changed

+45
-36
lines changed

packages/qwik/src/core/use/use-task.ts

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,12 @@ export const useTaskQrl = (qrl: QRL<TaskFn>, opts?: UseTaskOptions): void => {
347347
}
348348
};
349349

350-
export const runTask2 = (task: Task, container: Container2, host: HostElement) => {
350+
export const runTask2 = (
351+
task: Task,
352+
container: Container2,
353+
host: HostElement,
354+
isRerunning = false
355+
): ValueOrPromise<void> => {
351356
task.$flags$ &= ~TaskFlags.DIRTY;
352357
const iCtx = newInvokeContext(container.$locale$, host as fixMeAny, undefined, TaskEvent);
353358
iCtx.$container2$ = container;
@@ -393,35 +398,16 @@ export const runTask2 = (task: Task, container: Container2, host: HostElement) =
393398

394399
const taskApi: TaskCtx = { track, cleanup };
395400
cleanupTask(task);
396-
const result = safeCall(() => taskFn(taskApi), cleanup, handleError);
397-
return result;
398-
};
399-
400-
export const runComputed2 = (
401-
task: TaskDescriptor | ComputedDescriptor<unknown>,
402-
container: Container2,
403-
host: HostElement
404-
): ValueOrPromise<void> => {
405-
assertSignal(task.$state$);
406-
task.$flags$ &= ~TaskFlags.DIRTY;
407-
const iCtx = newInvokeContext(container.$locale$, host as fixMeAny, undefined, ComputedEvent);
408-
iCtx.$subscriber$ = [SubscriptionType.HOST, task];
409-
410-
const taskFn = task.$qrl$.getFn(iCtx, () => {
411-
container.$subsManager$.$clearSub$(task);
412-
}) as ComputedFn<unknown>;
413-
414-
const handleError = (reason: unknown) => container.handleError(reason, host);
415-
const result = safeCall(
416-
taskFn,
417-
(returnValue) =>
418-
untrack(() => {
419-
const signal = task.$state$! as SignalInternal<unknown>;
420-
signal[QObjectSignalFlags] &= ~SIGNAL_UNASSIGNED;
421-
signal.untrackedValue = returnValue;
422-
signal[QObjectManagerSymbol].$notifySubs$();
423-
}),
424-
handleError
401+
const result: ValueOrPromise<void> = safeCall(
402+
() => taskFn(taskApi),
403+
cleanup,
404+
(err: unknown) => {
405+
if (isPromise(err)) {
406+
return err.then(() => runTask2(task, container, host, true));
407+
} else {
408+
return handleError(err);
409+
}
410+
}
425411
);
426412
return result;
427413
};
@@ -678,13 +664,17 @@ export const runResource = <T>(
678664
promise.catch(ignoreErrorToPreventNodeFromCrashing);
679665
});
680666

681-
const promise = safeCall(
667+
const promise: ValueOrPromise<void> = safeCall(
682668
() => Promise.resolve(taskFn(opts)),
683669
(value) => {
684670
setState(true, value);
685671
},
686-
(reason) => {
687-
setState(false, reason);
672+
(err) => {
673+
if (isPromise(err)) {
674+
return err.then(() => runResource(task, container, host));
675+
} else {
676+
setState(false, err);
677+
}
688678
}
689679
);
690680

packages/qwik/src/core/v2/shared/shared-serialization.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1416,7 +1416,8 @@ export const canSerialize2 = (value: any): boolean => {
14161416
value == null ||
14171417
typeof value === 'string' ||
14181418
typeof value === 'number' ||
1419-
typeof value === 'boolean'
1419+
typeof value === 'boolean' ||
1420+
typeof value === 'bigint'
14201421
) {
14211422
return true;
14221423
} else if (typeof value === 'object') {
@@ -1441,12 +1442,30 @@ export const canSerialize2 = (value: any): boolean => {
14411442
return true;
14421443
} else if (isTask(value)) {
14431444
return true;
1444-
} else if (value instanceof Error) {
1445+
} else if (isPropsProxy(value)) {
14451446
return true;
14461447
} else if (isPromise(value)) {
14471448
return true;
14481449
} else if (isJSXNode(value)) {
14491450
return true;
1451+
} else if (value instanceof Error) {
1452+
return true;
1453+
} else if (value instanceof URL) {
1454+
return true;
1455+
} else if (value instanceof Date) {
1456+
return true;
1457+
} else if (value instanceof RegExp) {
1458+
return true;
1459+
} else if (value instanceof URLSearchParams) {
1460+
return true;
1461+
} else if (value instanceof FormData) {
1462+
return true;
1463+
} else if (value instanceof Set) {
1464+
return true;
1465+
} else if (value instanceof Map) {
1466+
return true;
1467+
} else if (value instanceof Uint8Array) {
1468+
return true;
14501469
}
14511470
} else if (typeof value === 'function') {
14521471
if (isQrl(value) || isQwikComponent(value)) {

packages/qwik/src/core/v2/signal/v2-signal.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,7 @@ export class ComputedSignal2<T> extends Signal2<T> {
410410
computeQrl.resolved,
411411
'Computed signals must run sync. Expected the QRL to be resolved at this point.'
412412
);
413+
throwIfQRLNotResolved(computeQrl);
413414

414415
const ctx = tryGetInvokeContext();
415416
assertDefined(computeQrl, 'Signal is marked as dirty, but no compute function is provided.');

packages/qwik/src/core/v2/tests/use-context.spec.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import {
2525
createDocument,
2626
emulateExecutionOfQwikFuncs,
2727
} from '@builder.io/qwik/testing';
28-
import '../../../testing/vdom-diff.unit-util';
2928
import { renderToString2 } from 'packages/qwik/src/server/v2-ssr-render2';
3029
import type { Signal2 } from '../signal/v2-signal.public';
3130

0 commit comments

Comments
 (0)