diff --git a/packages/store/src/misc.ts b/packages/store/src/misc.ts index 165b352..1b3069b 100644 --- a/packages/store/src/misc.ts +++ b/packages/store/src/misc.ts @@ -1,5 +1,5 @@ import {get, derived, Readable, Unsubscriber, Writable, Subscriber} from "svelte/store" -import {memoize, throttle} from "@welshman/lib" +import {memoize, equals, throttle} from "@welshman/lib" // Define Stores and StoresValues types locally since they're not exported in Svelte 5 type Stores = Readable | [Readable, ...Array>] | Array> @@ -93,3 +93,19 @@ export const deriveDeduplicated = ( } }) } + +export const deriveDeduplicatedByValue = ( + stores: S, + get: (storeValues: StoresValues) => T, +): Readable => { + let prev: T + + return derived(stores, (storeValues, set) => { + const result = get(storeValues) + + if (!equals(prev, result)) { + prev = result + set(result) + } + }) +}