UNPKG

@tanstack/query-core

Version:

The framework agnostic core that powers TanStack Query

100 lines (99 loc) 2.5 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const require_utils = require("./utils.cjs"); const require_subscribable = require("./subscribable.cjs"); const require_notifyManager = require("./notifyManager.cjs"); const require_query = require("./query.cjs"); //#region src/queryCache.ts var QueryCache = class extends require_subscribable.Subscribable { #queries; constructor(config = {}) { super(); this.config = config; this.#queries = /* @__PURE__ */ new Map(); } build(client, options, state) { const queryKey = options.queryKey; const queryHash = options.queryHash ?? require_utils.hashQueryKeyByOptions(queryKey, options); let query = this.get(queryHash); if (!query) { query = new require_query.Query({ client, queryKey, queryHash, options: client.defaultQueryOptions(options), state, defaultOptions: client.getQueryDefaults(queryKey) }); this.add(query); } return query; } add(query) { if (!this.#queries.has(query.queryHash)) { this.#queries.set(query.queryHash, query); this.notify({ type: "added", query }); } } remove(query) { const queryInMap = this.#queries.get(query.queryHash); if (queryInMap) { query.destroy(); if (queryInMap === query) this.#queries.delete(query.queryHash); this.notify({ type: "removed", query }); } } clear() { require_notifyManager.notifyManager.batch(() => { this.getAll().forEach((query) => { this.remove(query); }); }); } get(queryHash) { return this.#queries.get(queryHash); } getAll() { return [...this.#queries.values()]; } find(filters) { const defaultedFilters = { exact: true, ...filters }; return this.getAll().find((query) => require_utils.matchQuery(defaultedFilters, query)); } findAll(filters = {}) { const queries = this.getAll(); return Object.keys(filters).length > 0 ? queries.filter((query) => require_utils.matchQuery(filters, query)) : queries; } notify(event) { require_notifyManager.notifyManager.batch(() => { this.listeners.forEach((listener) => { listener(event); }); }); } onFocus() { require_notifyManager.notifyManager.batch(() => { this.getAll().forEach((query) => { query.onFocus(); }); }); } onOnline() { require_notifyManager.notifyManager.batch(() => { this.getAll().forEach((query) => { query.onOnline(); }); }); } }; //#endregion exports.QueryCache = QueryCache; //# sourceMappingURL=queryCache.cjs.map