123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import { hashQueryKeyByOptions, parseFilterArgs, matchQuery } from './utils.esm.js';
- import { Query } from './query.esm.js';
- import { notifyManager } from './notifyManager.esm.js';
- import { Subscribable } from './subscribable.esm.js';
- // CLASS
- class QueryCache extends Subscribable {
- constructor(config) {
- super();
- this.config = config || {};
- this.queries = [];
- this.queriesMap = {};
- }
- build(client, options, state) {
- var _options$queryHash;
- const queryKey = options.queryKey;
- const queryHash = (_options$queryHash = options.queryHash) != null ? _options$queryHash : hashQueryKeyByOptions(queryKey, options);
- let query = this.get(queryHash);
- if (!query) {
- query = new Query({
- cache: this,
- logger: client.getLogger(),
- queryKey,
- queryHash,
- options: client.defaultQueryOptions(options),
- state,
- defaultOptions: client.getQueryDefaults(queryKey)
- });
- this.add(query);
- }
- return query;
- }
- add(query) {
- if (!this.queriesMap[query.queryHash]) {
- this.queriesMap[query.queryHash] = query;
- this.queries.push(query);
- this.notify({
- type: 'added',
- query
- });
- }
- }
- remove(query) {
- const queryInMap = this.queriesMap[query.queryHash];
- if (queryInMap) {
- query.destroy();
- this.queries = this.queries.filter(x => x !== query);
- if (queryInMap === query) {
- delete this.queriesMap[query.queryHash];
- }
- this.notify({
- type: 'removed',
- query
- });
- }
- }
- clear() {
- notifyManager.batch(() => {
- this.queries.forEach(query => {
- this.remove(query);
- });
- });
- }
- get(queryHash) {
- return this.queriesMap[queryHash];
- }
- getAll() {
- return this.queries;
- }
- find(arg1, arg2) {
- const [filters] = parseFilterArgs(arg1, arg2);
- if (typeof filters.exact === 'undefined') {
- filters.exact = true;
- }
- return this.queries.find(query => matchQuery(filters, query));
- }
- findAll(arg1, arg2) {
- const [filters] = parseFilterArgs(arg1, arg2);
- return Object.keys(filters).length > 0 ? this.queries.filter(query => matchQuery(filters, query)) : this.queries;
- }
- notify(event) {
- notifyManager.batch(() => {
- this.listeners.forEach(({
- listener
- }) => {
- listener(event);
- });
- });
- }
- onFocus() {
- notifyManager.batch(() => {
- this.queries.forEach(query => {
- query.onFocus();
- });
- });
- }
- onOnline() {
- notifyManager.batch(() => {
- this.queries.forEach(query => {
- query.onOnline();
- });
- });
- }
- }
- export { QueryCache };
- //# sourceMappingURL=queryCache.esm.js.map
|