refactor(store): remove queue and task system (#382)

This commit is contained in:
rahim
2026-02-03 15:06:06 +11:00
committed by GitHub
parent 8ed455c20a
commit 9fa172e8a4
35 changed files with 419 additions and 1620 deletions
@@ -11,22 +11,18 @@ export class MockMedia extends EventTarget {
// Shared slice for synchronous tests
export const audioSlice = defineSlice<MockMedia>()({
state: ({ task }) => ({
state: ({ target }) => ({
volume: 1,
muted: false,
setVolume(volume: number) {
return task(({ target }) => {
target.volume = volume;
target.dispatchEvent(new Event('volumechange'));
return volume;
});
target().volume = volume;
target().dispatchEvent(new Event('volumechange'));
return volume;
},
setMuted(muted: boolean) {
return task(({ target }) => {
target.muted = muted;
target.dispatchEvent(new Event('volumechange'));
return muted;
});
target().muted = muted;
target().dispatchEvent(new Event('volumechange'));
return muted;
},
}),
@@ -56,36 +52,28 @@ export class AsyncMockMedia extends EventTarget {
}
export const asyncAudioSlice = defineSlice<AsyncMockMedia>()({
state: ({ task }) => ({
state: ({ target }) => ({
volume: 1,
muted: false,
setVolume(volume: number) {
return task(async ({ target }) => {
await Promise.resolve();
target.volume = volume;
target.dispatchEvent(new Event('volumechange'));
return volume;
});
async setVolume(volume: number) {
await Promise.resolve();
target().volume = volume;
target().dispatchEvent(new Event('volumechange'));
return volume;
},
slowSetVolume(volume: number) {
return task(async ({ target }) => {
await new Promise((resolve) => setTimeout(resolve, 50));
target.volume = volume;
target.dispatchEvent(new Event('volumechange'));
return volume;
});
async slowSetVolume(volume: number) {
await new Promise((resolve) => setTimeout(resolve, 50));
target().volume = volume;
target().dispatchEvent(new Event('volumechange'));
return volume;
},
failingRequest() {
return task(async () => {
await Promise.resolve();
throw new Error('Request failed');
});
async failingRequest() {
await Promise.resolve();
throw new Error('Request failed');
},
failingSetVolume() {
return task(async () => {
await new Promise((resolve) => setTimeout(resolve, 10));
throw new Error('Test error');
});
async failingSetVolume() {
await new Promise((resolve) => setTimeout(resolve, 10));
throw new Error('Test error');
},
}),
@@ -109,55 +97,3 @@ export function createAsyncTestStore() {
return { store, target };
}
/** Slice with custom keys (name !== key) for testing superseding behavior. */
export const customKeySlice = defineSlice<MockMedia>()({
state: ({ task }) => ({
volume: 1,
muted: false,
// name='adjustVolume', key='audio-settings'
adjustVolume(volume: number) {
return task({
key: 'audio-settings',
async handler({ target }) {
await new Promise((resolve) => setTimeout(resolve, 20));
target.volume = volume;
target.dispatchEvent(new Event('volumechange'));
return volume;
},
});
},
// name='toggleMute', key='audio-settings' (same key - will supersede adjustVolume)
toggleMute(muted: boolean) {
return task({
key: 'audio-settings',
async handler({ target }) {
await new Promise((resolve) => setTimeout(resolve, 20));
target.muted = muted;
target.dispatchEvent(new Event('volumechange'));
return muted;
},
});
},
}),
attach({ target, signal, set }) {
const sync = () => set({ volume: target.volume, muted: target.muted });
sync();
target.addEventListener('volumechange', sync);
signal.addEventListener('abort', () => {
target.removeEventListener('volumechange', sync);
});
},
});
export function createCustomKeyTestStore() {
const store = createCoreStore<MockMedia>()(customKeySlice, { onError: noop });
const target = new MockMedia();
store.attach(target);
return { store, target };
}