import { Store } from "./base"; const trivial = async () => null; type Validator = (value: T) => Promise; export const optimistic = (onValidate: Validator = trivial) => { let queue = Promise.resolve(); return (store: Store) => { store.subscribe((value) => { let cancel = false; const handler = async () => { if (cancel) { return; } const validated = await onValidate(value); if (!cancel && validated !== null) { store.set(validated); } }; queue = queue.then(handler); return () => { cancel = true; }; }); return store; }; };