personal web client for Bluesky
typescript solidjs bluesky atcute
at trunk 882 B view raw
1import { type QueryClient, type QueryFilters, matchQuery } from '@mary/solid-query'; 2 3export interface CacheMatcher<T> { 4 filter: QueryFilters | QueryFilters[]; 5 iterate: (data: any) => Generator<T>; 6} 7 8export function* iterateQueryCache<T>(queryClient: QueryClient, matchers: CacheMatcher<T>[]): Generator<T> { 9 const queries = queryClient.getQueryCache().getAll(); 10 queries.sort((a, b) => b.state.dataUpdatedAt - a.state.dataUpdatedAt); 11 12 for (let i = 0, ilen = queries.length; i < ilen; i++) { 13 const query = queries[i]; 14 const data = query.state.data; 15 16 if (data === undefined) { 17 continue; 18 } 19 20 for (let j = 0, jlen = matchers.length; j < jlen; j++) { 21 const matcher = matchers[j]; 22 const filter = matcher.filter; 23 24 if (Array.isArray(filter) ? filter.some((f) => matchQuery(f, query)) : matchQuery(filter, query)) { 25 yield* matcher.iterate(data); 26 } 27 } 28 } 29}