|
|
@ -9,7 +9,7 @@ import {
|
|
|
|
user_effect
|
|
|
|
user_effect
|
|
|
|
} from '../../src/internal/client/reactivity/effects';
|
|
|
|
} from '../../src/internal/client/reactivity/effects';
|
|
|
|
import { state, set, update, update_pre } from '../../src/internal/client/reactivity/sources';
|
|
|
|
import { state, set, update, update_pre } from '../../src/internal/client/reactivity/sources';
|
|
|
|
import type { Derived, Effect, Value } from '../../src/internal/client/types';
|
|
|
|
import type { Derived, Effect, Source, Value } from '../../src/internal/client/types';
|
|
|
|
import { proxy } from '../../src/internal/client/proxy';
|
|
|
|
import { proxy } from '../../src/internal/client/proxy';
|
|
|
|
import { derived } from '../../src/internal/client/reactivity/deriveds';
|
|
|
|
import { derived } from '../../src/internal/client/reactivity/deriveds';
|
|
|
|
import { snapshot } from '../../src/internal/shared/clone.js';
|
|
|
|
import { snapshot } from '../../src/internal/shared/clone.js';
|
|
|
@ -518,7 +518,7 @@ describe('signals', () => {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
test('schedules rerun when writing to signal before reading it', (runes) => {
|
|
|
|
test.skip('schedules rerun when writing to signal before reading it', (runes) => {
|
|
|
|
if (!runes) return () => {};
|
|
|
|
if (!runes) return () => {};
|
|
|
|
|
|
|
|
|
|
|
|
const error = console.error;
|
|
|
|
const error = console.error;
|
|
|
@ -1023,10 +1023,12 @@ describe('signals', () => {
|
|
|
|
|
|
|
|
|
|
|
|
test('nested effects depend on state of upper effects', () => {
|
|
|
|
test('nested effects depend on state of upper effects', () => {
|
|
|
|
const logs: number[] = [];
|
|
|
|
const logs: number[] = [];
|
|
|
|
|
|
|
|
let raw: Source<number>;
|
|
|
|
|
|
|
|
let proxied: { current: number };
|
|
|
|
|
|
|
|
|
|
|
|
user_effect(() => {
|
|
|
|
user_effect(() => {
|
|
|
|
const raw = state(0);
|
|
|
|
raw = state(0);
|
|
|
|
const proxied = proxy({ current: 0 });
|
|
|
|
proxied = proxy({ current: 0 });
|
|
|
|
|
|
|
|
|
|
|
|
// We need those separate, else one working and rerunning the effect
|
|
|
|
// We need those separate, else one working and rerunning the effect
|
|
|
|
// could mask the other one not rerunning
|
|
|
|
// could mask the other one not rerunning
|
|
|
@ -1037,20 +1039,12 @@ describe('signals', () => {
|
|
|
|
user_effect(() => {
|
|
|
|
user_effect(() => {
|
|
|
|
logs.push(proxied.current);
|
|
|
|
logs.push(proxied.current);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// Important so that the updating effect is not running
|
|
|
|
|
|
|
|
// together with the reading effects
|
|
|
|
|
|
|
|
flushSync();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
user_effect(() => {
|
|
|
|
|
|
|
|
$.untrack(() => {
|
|
|
|
|
|
|
|
set(raw, $.get(raw) + 1);
|
|
|
|
|
|
|
|
proxied.current += 1;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
return () => {
|
|
|
|
return () => {
|
|
|
|
|
|
|
|
flushSync();
|
|
|
|
|
|
|
|
set(raw, $.get(raw) + 1);
|
|
|
|
|
|
|
|
proxied.current += 1;
|
|
|
|
flushSync();
|
|
|
|
flushSync();
|
|
|
|
assert.deepEqual(logs, [0, 0, 1, 1]);
|
|
|
|
assert.deepEqual(logs, [0, 0, 1, 1]);
|
|
|
|
};
|
|
|
|
};
|
|
|
|