UNPKG

@tanstack/query-core

Version:

The framework agnostic core that powers TanStack Query

105 lines (104 loc) 2.68 kB
import { __privateAdd, __privateGet, __privateSet } from "./chunk-WPSKCR32.js"; // src/queryCache.ts import { hashQueryKeyByOptions, matchQuery } from "./utils.js"; import { Query } from "./query.js"; import { notifyManager } from "./notifyManager.js"; import { Subscribable } from "./subscribable.js"; var _queries; var QueryCache = class extends Subscribable { constructor(config = {}) { super(); this.config = config; __privateAdd(this, _queries, void 0); __privateSet(this, _queries, /* @__PURE__ */ new Map()); } build(client, options, state) { const queryKey = options.queryKey; const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options); let query = this.get(queryHash); if (!query) { query = new Query({ cache: this, queryKey, queryHash, options: client.defaultQueryOptions(options), state, defaultOptions: client.getQueryDefaults(queryKey) }); this.add(query); } return query; } add(query) { if (!__privateGet(this, _queries).has(query.queryHash)) { __privateGet(this, _queries).set(query.queryHash, query); this.notify({ type: "added", query }); } } remove(query) { const queryInMap = __privateGet(this, _queries).get(query.queryHash); if (queryInMap) { query.destroy(); if (queryInMap === query) { __privateGet(this, _queries).delete(query.queryHash); } this.notify({ type: "removed", query }); } } clear() { notifyManager.batch(() => { this.getAll().forEach((query) => { this.remove(query); }); }); } get(queryHash) { return __privateGet(this, _queries).get(queryHash); } getAll() { return [...__privateGet(this, _queries).values()]; } find(filters) { const defaultedFilters = { exact: true, ...filters }; return this.getAll().find( (query) => matchQuery(defaultedFilters, query) ); } findAll(filters = {}) { const queries = this.getAll(); return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries; } notify(event) { notifyManager.batch(() => { this.listeners.forEach((listener) => { listener(event); }); }); } onFocus() { notifyManager.batch(() => { this.getAll().forEach((query) => { query.onFocus(); }); }); } onOnline() { notifyManager.batch(() => { this.getAll().forEach((query) => { query.onOnline(); }); }); } }; _queries = new WeakMap(); export { QueryCache }; //# sourceMappingURL=queryCache.js.map