@tanstack/query-core 4.14.5 → 4.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
1
  import type { QueryObserverOptions, QueryObserverResult } from './types';
2
2
  import type { QueryClient } from './queryClient';
3
3
  import type { NotifyOptions } from './queryObserver';
4
+ import { QueryObserver } from './queryObserver';
4
5
  import { Subscribable } from './subscribable';
5
6
  declare type QueriesObserverListener = (result: QueryObserverResult[]) => void;
6
7
  export declare class QueriesObserver extends Subscribable<QueriesObserverListener> {
@@ -16,6 +17,7 @@ export declare class QueriesObserver extends Subscribable<QueriesObserverListene
16
17
  setQueries(queries: QueryObserverOptions[], notifyOptions?: NotifyOptions): void;
17
18
  getCurrentResult(): QueryObserverResult[];
18
19
  getQueries(): import("./query").Query<unknown, unknown, unknown, import("./types").QueryKey>[];
20
+ getObservers(): QueryObserver<unknown, unknown, unknown, unknown, import("./types").QueryKey>[];
19
21
  getOptimisticResult(queries: QueryObserverOptions[]): QueryObserverResult[];
20
22
  private findMatchingObservers;
21
23
  private onUpdate;
@@ -84,6 +84,10 @@ class QueriesObserver extends Subscribable {
84
84
  return this.observers.map(observer => observer.getCurrentQuery());
85
85
  }
86
86
 
87
+ getObservers() {
88
+ return this.observers;
89
+ }
90
+
87
91
  getOptimisticResult(queries) {
88
92
  return this.findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
89
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queriesObserver.esm.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport type {\n QueryObserverOptions,\n QueryObserverResult,\n DefaultedQueryObserverOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.length === 1) {\n this.observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.length) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = []\n this.observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\n\n notifyManager.batch(() => {\n const prevObservers = this.observers\n\n const newObserverMatches = this.findMatchingObservers(this.queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\n this.result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n\n this.notify()\n })\n }\n\n getCurrentResult(): QueryObserverResult[] {\n return this.result\n }\n\n getQueries() {\n return this.observers.map((observer) => observer.getCurrentQuery())\n }\n\n getOptimisticResult(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObservers.find(\n (observer) =>\n observer.options.queryHash === defaultedOptions.queryHash,\n )\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = matchingObservers.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) =>\n !matchedQueryHashes.includes(defaultedOptions.queryHash),\n )\n\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) =>\n !matchingObservers.some((match) => match.observer === prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.observers.indexOf(observer)\n if (index !== -1) {\n this.result = replaceAt(this.result, index, result)\n this.notify()\n }\n }\n\n private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","length","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","hasListeners","difference","notify","getQueries","getCurrentQuery","getOptimisticResult","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","find","matchedQueryHashes","unmatchedQueries","filter","includes","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
1
+ {"version":3,"file":"queriesObserver.esm.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport type {\n QueryObserverOptions,\n QueryObserverResult,\n DefaultedQueryObserverOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.length === 1) {\n this.observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.length) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = []\n this.observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\n\n notifyManager.batch(() => {\n const prevObservers = this.observers\n\n const newObserverMatches = this.findMatchingObservers(this.queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\n this.result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n\n this.notify()\n })\n }\n\n getCurrentResult(): QueryObserverResult[] {\n return this.result\n }\n\n getQueries() {\n return this.observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.observers\n }\n\n getOptimisticResult(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObservers.find(\n (observer) =>\n observer.options.queryHash === defaultedOptions.queryHash,\n )\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = matchingObservers.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) =>\n !matchedQueryHashes.includes(defaultedOptions.queryHash),\n )\n\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) =>\n !matchingObservers.some((match) => match.observer === prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.observers.indexOf(observer)\n if (index !== -1) {\n this.result = replaceAt(this.result, index, result)\n this.notify()\n }\n }\n\n private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","length","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","hasListeners","difference","notify","getQueries","getCurrentQuery","getObservers","getOptimisticResult","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","find","matchedQueryHashes","unmatchedQueries","filter","includes","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":";;;;;AAcO,MAAMA,eAAN,SAA8BC,YAA9B,CAAoE;AAOzEC,EAAAA,WAAW,CAACC,MAAD,EAAsBC,OAAtB,EAAwD;AACjE,IAAA,KAAA,EAAA,CAAA;IAEA,IAAKD,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKC,CAAAA,OAAL,GAAe,EAAf,CAAA;IACA,IAAKC,CAAAA,MAAL,GAAc,EAAd,CAAA;IACA,IAAKC,CAAAA,SAAL,GAAiB,EAAjB,CAAA;IACA,IAAKC,CAAAA,YAAL,GAAoB,EAApB,CAAA;;AAEA,IAAA,IAAIH,OAAJ,EAAa;MACX,IAAKI,CAAAA,UAAL,CAAgBJ,OAAhB,CAAA,CAAA;AACD,KAAA;AACF,GAAA;;AAESK,EAAAA,WAAW,GAAS;AAC5B,IAAA,IAAI,KAAKC,SAAL,CAAeC,MAAf,KAA0B,CAA9B,EAAiC;AAC/B,MAAA,IAAA,CAAKL,SAAL,CAAeM,OAAf,CAAwBC,QAAD,IAAc;AACnCA,QAAAA,QAAQ,CAACC,SAAT,CAAoBT,MAAD,IAAY;AAC7B,UAAA,IAAA,CAAKU,QAAL,CAAcF,QAAd,EAAwBR,MAAxB,CAAA,CAAA;SADF,CAAA,CAAA;OADF,CAAA,CAAA;AAKD,KAAA;AACF,GAAA;;AAESW,EAAAA,aAAa,GAAS;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAKN,SAAL,CAAeC,MAApB,EAA4B;AAC1B,MAAA,IAAA,CAAKM,OAAL,EAAA,CAAA;AACD,KAAA;AACF,GAAA;;AAEDA,EAAAA,OAAO,GAAS;IACd,IAAKP,CAAAA,SAAL,GAAiB,EAAjB,CAAA;AACA,IAAA,IAAA,CAAKJ,SAAL,CAAeM,OAAf,CAAwBC,QAAD,IAAc;AACnCA,MAAAA,QAAQ,CAACI,OAAT,EAAA,CAAA;KADF,CAAA,CAAA;AAGD,GAAA;;AAEDT,EAAAA,UAAU,CACRJ,OADQ,EAERc,aAFQ,EAGF;IACN,IAAKd,CAAAA,OAAL,GAAeA,OAAf,CAAA;IAEAe,aAAa,CAACC,KAAd,CAAoB,MAAM;MACxB,MAAMC,aAAa,GAAG,IAAA,CAAKf,SAA3B,CAAA;MAEA,MAAMgB,kBAAkB,GAAG,IAAKC,CAAAA,qBAAL,CAA2B,IAAKnB,CAAAA,OAAhC,CAA3B,CAHwB;;AAMxBkB,MAAAA,kBAAkB,CAACV,OAAnB,CAA4BY,KAAD,IACzBA,KAAK,CAACX,QAAN,CAAeY,UAAf,CAA0BD,KAAK,CAACE,qBAAhC,EAAuDR,aAAvD,CADF,CAAA,CAAA;MAIA,MAAMS,YAAY,GAAGL,kBAAkB,CAACM,GAAnB,CAAwBJ,KAAD,IAAWA,KAAK,CAACX,QAAxC,CAArB,CAAA;MACA,MAAMgB,eAAe,GAAGC,MAAM,CAACC,WAAP,CACtBJ,YAAY,CAACC,GAAb,CAAkBf,QAAD,IAAc,CAACA,QAAQ,CAACmB,OAAT,CAAiBC,SAAlB,EAA6BpB,QAA7B,CAA/B,CADsB,CAAxB,CAAA;AAGA,MAAA,MAAMqB,SAAS,GAAGP,YAAY,CAACC,GAAb,CAAkBf,QAAD,IACjCA,QAAQ,CAACsB,gBAAT,EADgB,CAAlB,CAAA;AAIA,MAAA,MAAMC,cAAc,GAAGT,YAAY,CAACU,IAAb,CACrB,CAACxB,QAAD,EAAWyB,KAAX,KAAqBzB,QAAQ,KAAKQ,aAAa,CAACiB,KAAD,CAD1B,CAAvB,CAAA;;MAGA,IAAIjB,aAAa,CAACV,MAAd,KAAyBgB,YAAY,CAAChB,MAAtC,IAAgD,CAACyB,cAArD,EAAqE;AACnE,QAAA,OAAA;AACD,OAAA;;MAED,IAAK9B,CAAAA,SAAL,GAAiBqB,YAAjB,CAAA;MACA,IAAKpB,CAAAA,YAAL,GAAoBsB,eAApB,CAAA;MACA,IAAKxB,CAAAA,MAAL,GAAc6B,SAAd,CAAA;;AAEA,MAAA,IAAI,CAAC,IAAA,CAAKK,YAAL,EAAL,EAA0B;AACxB,QAAA,OAAA;AACD,OAAA;;MAEDC,UAAU,CAACnB,aAAD,EAAgBM,YAAhB,CAAV,CAAwCf,OAAxC,CAAiDC,QAAD,IAAc;AAC5DA,QAAAA,QAAQ,CAACI,OAAT,EAAA,CAAA;OADF,CAAA,CAAA;MAIAuB,UAAU,CAACb,YAAD,EAAeN,aAAf,CAAV,CAAwCT,OAAxC,CAAiDC,QAAD,IAAc;AAC5DA,QAAAA,QAAQ,CAACC,SAAT,CAAoBT,MAAD,IAAY;AAC7B,UAAA,IAAA,CAAKU,QAAL,CAAcF,QAAd,EAAwBR,MAAxB,CAAA,CAAA;SADF,CAAA,CAAA;OADF,CAAA,CAAA;AAMA,MAAA,IAAA,CAAKoC,MAAL,EAAA,CAAA;KA3CF,CAAA,CAAA;AA6CD,GAAA;;AAEDN,EAAAA,gBAAgB,GAA0B;AACxC,IAAA,OAAO,KAAK9B,MAAZ,CAAA;AACD,GAAA;;AAEDqC,EAAAA,UAAU,GAAG;IACX,OAAO,IAAA,CAAKpC,SAAL,CAAesB,GAAf,CAAoBf,QAAD,IAAcA,QAAQ,CAAC8B,eAAT,EAAjC,CAAP,CAAA;AACD,GAAA;;AAEDC,EAAAA,YAAY,GAAG;AACb,IAAA,OAAO,KAAKtC,SAAZ,CAAA;AACD,GAAA;;EAEDuC,mBAAmB,CAACzC,OAAD,EAAyD;AAC1E,IAAA,OAAO,KAAKmB,qBAAL,CAA2BnB,OAA3B,CAAoCwB,CAAAA,GAApC,CAAyCJ,KAAD,IAC7CA,KAAK,CAACX,QAAN,CAAegC,mBAAf,CAAmCrB,KAAK,CAACE,qBAAzC,CADK,CAAP,CAAA;AAGD,GAAA;;EAEOH,qBAAqB,CAC3BnB,OAD2B,EAEL;IACtB,MAAMiB,aAAa,GAAG,IAAA,CAAKf,SAA3B,CAAA;AACA,IAAA,MAAMoB,qBAAqB,GAAGtB,OAAO,CAACwB,GAAR,CAAaI,OAAD,IACxC,IAAA,CAAK7B,MAAL,CAAY2C,mBAAZ,CAAgCd,OAAhC,CAD4B,CAA9B,CAAA;AAIA,IAAA,MAAMe,iBAAuC,GAC3CrB,qBAAqB,CAACsB,OAAtB,CAA+BC,gBAAD,IAAsB;AAClD,MAAA,MAAMzB,KAAK,GAAGH,aAAa,CAAC6B,IAAd,CACXrC,QAAD,IACEA,QAAQ,CAACmB,OAAT,CAAiBC,SAAjB,KAA+BgB,gBAAgB,CAAChB,SAFtC,CAAd,CAAA;;MAIA,IAAIT,KAAK,IAAI,IAAb,EAAmB;AACjB,QAAA,OAAO,CAAC;AAAEE,UAAAA,qBAAqB,EAAEuB,gBAAzB;AAA2CpC,UAAAA,QAAQ,EAAEW,KAAAA;AAArD,SAAD,CAAP,CAAA;AACD,OAAA;;AACD,MAAA,OAAO,EAAP,CAAA;AACD,KATD,CADF,CAAA;AAYA,IAAA,MAAM2B,kBAAkB,GAAGJ,iBAAiB,CAACnB,GAAlB,CACxBJ,KAAD,IAAWA,KAAK,CAACE,qBAAN,CAA4BO,SADd,CAA3B,CAAA;AAGA,IAAA,MAAMmB,gBAAgB,GAAG1B,qBAAqB,CAAC2B,MAAtB,CACtBJ,gBAAD,IACE,CAACE,kBAAkB,CAACG,QAAnB,CAA4BL,gBAAgB,CAAChB,SAA7C,CAFoB,CAAzB,CAAA;IAKA,MAAMsB,kBAAkB,GAAGlC,aAAa,CAACgC,MAAd,CACxBG,YAAD,IACE,CAACT,iBAAiB,CAACV,IAAlB,CAAwBb,KAAD,IAAWA,KAAK,CAACX,QAAN,KAAmB2C,YAArD,CAFsB,CAA3B,CAAA;;IAKA,MAAMC,WAAW,GAAIzB,OAAD,IAAkD;MACpE,MAAMiB,gBAAgB,GAAG,IAAK9C,CAAAA,MAAL,CAAY2C,mBAAZ,CAAgCd,OAAhC,CAAzB,CAAA;MACA,MAAM0B,eAAe,GAAG,IAAKnD,CAAAA,YAAL,CAAkB0C,gBAAgB,CAAChB,SAAnC,CAAxB,CAAA;MACA,OAAOyB,eAAP,IAAOA,IAAAA,GAAAA,eAAP,GAA0B,IAAIC,aAAJ,CAAkB,IAAKxD,CAAAA,MAAvB,EAA+B8C,gBAA/B,CAA1B,CAAA;KAHF,CAAA;;IAMA,MAAMW,oBAA0C,GAAGR,gBAAgB,CAACxB,GAAjB,CACjD,CAACI,OAAD,EAAUM,KAAV,KAAoB;MAClB,IAAIN,OAAO,CAAC6B,gBAAZ,EAA8B;AAC5B;AACA,QAAA,MAAMC,sBAAsB,GAAGP,kBAAkB,CAACjB,KAAD,CAAjD,CAAA;;QACA,IAAIwB,sBAAsB,KAAKC,SAA/B,EAA0C;UACxC,OAAO;AACLrC,YAAAA,qBAAqB,EAAEM,OADlB;AAELnB,YAAAA,QAAQ,EAAEiD,sBAAAA;WAFZ,CAAA;AAID,SAAA;AACF,OAAA;;MACD,OAAO;AACLpC,QAAAA,qBAAqB,EAAEM,OADlB;QAELnB,QAAQ,EAAE4C,WAAW,CAACzB,OAAD,CAAA;OAFvB,CAAA;AAID,KAhBgD,CAAnD,CAAA;;IAmBA,MAAMgC,2BAA2B,GAAG,CAClCC,CADkC,EAElCC,CAFkC,KAIlCxC,qBAAqB,CAACyC,OAAtB,CAA8BF,CAAC,CAACvC,qBAAhC,IACAA,qBAAqB,CAACyC,OAAtB,CAA8BD,CAAC,CAACxC,qBAAhC,CALF,CAAA;;IAOA,OAAOqB,iBAAiB,CACrBqB,MADI,CACGR,oBADH,CAEJS,CAAAA,IAFI,CAECL,2BAFD,CAAP,CAAA;AAGD,GAAA;;AAEOjD,EAAAA,QAAQ,CAACF,QAAD,EAA0BR,MAA1B,EAA6D;IAC3E,MAAMiC,KAAK,GAAG,IAAKhC,CAAAA,SAAL,CAAe6D,OAAf,CAAuBtD,QAAvB,CAAd,CAAA;;AACA,IAAA,IAAIyB,KAAK,KAAK,CAAC,CAAf,EAAkB;MAChB,IAAKjC,CAAAA,MAAL,GAAciE,SAAS,CAAC,IAAA,CAAKjE,MAAN,EAAciC,KAAd,EAAqBjC,MAArB,CAAvB,CAAA;AACA,MAAA,IAAA,CAAKoC,MAAL,EAAA,CAAA;AACD,KAAA;AACF,GAAA;;AAEOA,EAAAA,MAAM,GAAS;IACrBtB,aAAa,CAACC,KAAd,CAAoB,MAAM;AACxB,MAAA,IAAA,CAAKV,SAAL,CAAeE,OAAf,CAAwB2D,QAAD,IAAc;QACnCA,QAAQ,CAAC,IAAKlE,CAAAA,MAAN,CAAR,CAAA;OADF,CAAA,CAAA;KADF,CAAA,CAAA;AAKD,GAAA;;AAvMwE;;;;"}
@@ -88,6 +88,10 @@ class QueriesObserver extends subscribable.Subscribable {
88
88
  return this.observers.map(observer => observer.getCurrentQuery());
89
89
  }
90
90
 
91
+ getObservers() {
92
+ return this.observers;
93
+ }
94
+
91
95
  getOptimisticResult(queries) {
92
96
  return this.findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
93
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queriesObserver.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport type {\n QueryObserverOptions,\n QueryObserverResult,\n DefaultedQueryObserverOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.length === 1) {\n this.observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.length) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = []\n this.observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\n\n notifyManager.batch(() => {\n const prevObservers = this.observers\n\n const newObserverMatches = this.findMatchingObservers(this.queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\n this.result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n\n this.notify()\n })\n }\n\n getCurrentResult(): QueryObserverResult[] {\n return this.result\n }\n\n getQueries() {\n return this.observers.map((observer) => observer.getCurrentQuery())\n }\n\n getOptimisticResult(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObservers.find(\n (observer) =>\n observer.options.queryHash === defaultedOptions.queryHash,\n )\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = matchingObservers.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) =>\n !matchedQueryHashes.includes(defaultedOptions.queryHash),\n )\n\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) =>\n !matchingObservers.some((match) => match.observer === prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.observers.indexOf(observer)\n if (index !== -1) {\n this.result = replaceAt(this.result, index, result)\n this.notify()\n }\n }\n\n private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","length","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","hasListeners","difference","notify","getQueries","getCurrentQuery","getOptimisticResult","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","find","matchedQueryHashes","unmatchedQueries","filter","includes","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
1
+ {"version":3,"file":"queriesObserver.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport type {\n QueryObserverOptions,\n QueryObserverResult,\n DefaultedQueryObserverOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.length === 1) {\n this.observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.length) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = []\n this.observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\n\n notifyManager.batch(() => {\n const prevObservers = this.observers\n\n const newObserverMatches = this.findMatchingObservers(this.queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\n this.result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n\n this.notify()\n })\n }\n\n getCurrentResult(): QueryObserverResult[] {\n return this.result\n }\n\n getQueries() {\n return this.observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.observers\n }\n\n getOptimisticResult(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObservers.find(\n (observer) =>\n observer.options.queryHash === defaultedOptions.queryHash,\n )\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = matchingObservers.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) =>\n !matchedQueryHashes.includes(defaultedOptions.queryHash),\n )\n\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) =>\n !matchingObservers.some((match) => match.observer === prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.observers.indexOf(observer)\n if (index !== -1) {\n this.result = replaceAt(this.result, index, result)\n this.notify()\n }\n }\n\n private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","length","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","hasListeners","difference","notify","getQueries","getCurrentQuery","getObservers","getOptimisticResult","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","find","matchedQueryHashes","unmatchedQueries","filter","includes","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
@@ -84,6 +84,10 @@ class QueriesObserver extends Subscribable {
84
84
  return this.observers.map(observer => observer.getCurrentQuery());
85
85
  }
86
86
 
87
+ getObservers() {
88
+ return this.observers;
89
+ }
90
+
87
91
  getOptimisticResult(queries) {
88
92
  return this.findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
89
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queriesObserver.mjs","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport type {\n QueryObserverOptions,\n QueryObserverResult,\n DefaultedQueryObserverOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.length === 1) {\n this.observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.length) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = []\n this.observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\n\n notifyManager.batch(() => {\n const prevObservers = this.observers\n\n const newObserverMatches = this.findMatchingObservers(this.queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\n this.result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n\n this.notify()\n })\n }\n\n getCurrentResult(): QueryObserverResult[] {\n return this.result\n }\n\n getQueries() {\n return this.observers.map((observer) => observer.getCurrentQuery())\n }\n\n getOptimisticResult(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObservers.find(\n (observer) =>\n observer.options.queryHash === defaultedOptions.queryHash,\n )\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = matchingObservers.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) =>\n !matchedQueryHashes.includes(defaultedOptions.queryHash),\n )\n\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) =>\n !matchingObservers.some((match) => match.observer === prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.observers.indexOf(observer)\n if (index !== -1) {\n this.result = replaceAt(this.result, index, result)\n this.notify()\n }\n }\n\n private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","length","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","hasListeners","difference","notify","getQueries","getCurrentQuery","getOptimisticResult","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","find","matchedQueryHashes","unmatchedQueries","filter","includes","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
1
+ {"version":3,"file":"queriesObserver.mjs","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport type {\n QueryObserverOptions,\n QueryObserverResult,\n DefaultedQueryObserverOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.length === 1) {\n this.observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.length) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = []\n this.observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\n\n notifyManager.batch(() => {\n const prevObservers = this.observers\n\n const newObserverMatches = this.findMatchingObservers(this.queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\n this.result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.onUpdate(observer, result)\n })\n })\n\n this.notify()\n })\n }\n\n getCurrentResult(): QueryObserverResult[] {\n return this.result\n }\n\n getQueries() {\n return this.observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.observers\n }\n\n getOptimisticResult(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObservers.find(\n (observer) =>\n observer.options.queryHash === defaultedOptions.queryHash,\n )\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = matchingObservers.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) =>\n !matchedQueryHashes.includes(defaultedOptions.queryHash),\n )\n\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) =>\n !matchingObservers.some((match) => match.observer === prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.observers.indexOf(observer)\n if (index !== -1) {\n this.result = replaceAt(this.result, index, result)\n this.notify()\n }\n }\n\n private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","length","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","hasListeners","difference","notify","getQueries","getCurrentQuery","getObservers","getOptimisticResult","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","find","matchedQueryHashes","unmatchedQueries","filter","includes","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
@@ -2761,6 +2761,10 @@
2761
2761
  return this.observers.map(observer => observer.getCurrentQuery());
2762
2762
  }
2763
2763
 
2764
+ getObservers() {
2765
+ return this.observers;
2766
+ }
2767
+
2764
2768
  getOptimisticResult(queries) {
2765
2769
  return this.findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
2766
2770
  }