@tanstack/query-core 4.27.0 → 4.29.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.
- package/build/lib/queriesObserver.esm.js +6 -4
- package/build/lib/queriesObserver.esm.js.map +1 -1
- package/build/lib/queriesObserver.js +6 -4
- package/build/lib/queriesObserver.js.map +1 -1
- package/build/lib/queriesObserver.mjs +6 -4
- package/build/lib/queriesObserver.mjs.map +1 -1
- package/build/umd/index.development.js +6 -4
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/queriesObserver.ts +12 -10
|
@@ -94,9 +94,10 @@ class QueriesObserver extends Subscribable {
|
|
|
94
94
|
|
|
95
95
|
findMatchingObservers(queries) {
|
|
96
96
|
const prevObservers = this.observers;
|
|
97
|
+
const prevObserversMap = new Map(prevObservers.map(observer => [observer.options.queryHash, observer]));
|
|
97
98
|
const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
|
|
98
99
|
const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
|
|
99
|
-
const match =
|
|
100
|
+
const match = prevObserversMap.get(defaultedOptions.queryHash);
|
|
100
101
|
|
|
101
102
|
if (match != null) {
|
|
102
103
|
return [{
|
|
@@ -107,9 +108,10 @@ class QueriesObserver extends Subscribable {
|
|
|
107
108
|
|
|
108
109
|
return [];
|
|
109
110
|
});
|
|
110
|
-
const matchedQueryHashes = matchingObservers.map(match => match.defaultedQueryOptions.queryHash);
|
|
111
|
-
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.
|
|
112
|
-
const
|
|
111
|
+
const matchedQueryHashes = new Set(matchingObservers.map(match => match.defaultedQueryOptions.queryHash));
|
|
112
|
+
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.has(defaultedOptions.queryHash));
|
|
113
|
+
const matchingObserversSet = new Set(matchingObservers.map(match => match.observer));
|
|
114
|
+
const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObserversSet.has(prevObserver));
|
|
113
115
|
|
|
114
116
|
const getObserver = options => {
|
|
115
117
|
const defaultedOptions = this.client.defaultQueryOptions(options);
|
|
@@ -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 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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"}
|
|
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 prevObserversMap = new Map(\n prevObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = new Set(\n matchingObservers.map((match) => match.defaultedQueryOptions.queryHash),\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) => !matchedQueryHashes.has(defaultedOptions.queryHash),\n )\n\n const matchingObserversSet = new Set(\n matchingObservers.map((match) => match.observer),\n )\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) => !matchingObserversSet.has(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","prevObserversMap","Map","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","Set","unmatchedQueries","filter","has","matchingObserversSet","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
|
|
@@ -98,9 +98,10 @@ class QueriesObserver extends subscribable.Subscribable {
|
|
|
98
98
|
|
|
99
99
|
findMatchingObservers(queries) {
|
|
100
100
|
const prevObservers = this.observers;
|
|
101
|
+
const prevObserversMap = new Map(prevObservers.map(observer => [observer.options.queryHash, observer]));
|
|
101
102
|
const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
|
|
102
103
|
const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
|
|
103
|
-
const match =
|
|
104
|
+
const match = prevObserversMap.get(defaultedOptions.queryHash);
|
|
104
105
|
|
|
105
106
|
if (match != null) {
|
|
106
107
|
return [{
|
|
@@ -111,9 +112,10 @@ class QueriesObserver extends subscribable.Subscribable {
|
|
|
111
112
|
|
|
112
113
|
return [];
|
|
113
114
|
});
|
|
114
|
-
const matchedQueryHashes = matchingObservers.map(match => match.defaultedQueryOptions.queryHash);
|
|
115
|
-
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.
|
|
116
|
-
const
|
|
115
|
+
const matchedQueryHashes = new Set(matchingObservers.map(match => match.defaultedQueryOptions.queryHash));
|
|
116
|
+
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.has(defaultedOptions.queryHash));
|
|
117
|
+
const matchingObserversSet = new Set(matchingObservers.map(match => match.observer));
|
|
118
|
+
const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObserversSet.has(prevObserver));
|
|
117
119
|
|
|
118
120
|
const getObserver = options => {
|
|
119
121
|
const defaultedOptions = this.client.defaultQueryOptions(options);
|
|
@@ -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 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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"}
|
|
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 prevObserversMap = new Map(\n prevObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = new Set(\n matchingObservers.map((match) => match.defaultedQueryOptions.queryHash),\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) => !matchedQueryHashes.has(defaultedOptions.queryHash),\n )\n\n const matchingObserversSet = new Set(\n matchingObservers.map((match) => match.observer),\n )\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) => !matchingObserversSet.has(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","prevObserversMap","Map","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","Set","unmatchedQueries","filter","has","matchingObserversSet","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
|
|
@@ -94,9 +94,10 @@ class QueriesObserver extends Subscribable {
|
|
|
94
94
|
|
|
95
95
|
findMatchingObservers(queries) {
|
|
96
96
|
const prevObservers = this.observers;
|
|
97
|
+
const prevObserversMap = new Map(prevObservers.map(observer => [observer.options.queryHash, observer]));
|
|
97
98
|
const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
|
|
98
99
|
const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
|
|
99
|
-
const match =
|
|
100
|
+
const match = prevObserversMap.get(defaultedOptions.queryHash);
|
|
100
101
|
|
|
101
102
|
if (match != null) {
|
|
102
103
|
return [{
|
|
@@ -107,9 +108,10 @@ class QueriesObserver extends Subscribable {
|
|
|
107
108
|
|
|
108
109
|
return [];
|
|
109
110
|
});
|
|
110
|
-
const matchedQueryHashes = matchingObservers.map(match => match.defaultedQueryOptions.queryHash);
|
|
111
|
-
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.
|
|
112
|
-
const
|
|
111
|
+
const matchedQueryHashes = new Set(matchingObservers.map(match => match.defaultedQueryOptions.queryHash));
|
|
112
|
+
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.has(defaultedOptions.queryHash));
|
|
113
|
+
const matchingObserversSet = new Set(matchingObservers.map(match => match.observer));
|
|
114
|
+
const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObserversSet.has(prevObserver));
|
|
113
115
|
|
|
114
116
|
const getObserver = options => {
|
|
115
117
|
const defaultedOptions = this.client.defaultQueryOptions(options);
|
|
@@ -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 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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"}
|
|
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 prevObserversMap = new Map(\n prevObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = new Set(\n matchingObservers.map((match) => match.defaultedQueryOptions.queryHash),\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) => !matchedQueryHashes.has(defaultedOptions.queryHash),\n )\n\n const matchingObserversSet = new Set(\n matchingObservers.map((match) => match.observer),\n )\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) => !matchingObserversSet.has(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","prevObserversMap","Map","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","Set","unmatchedQueries","filter","has","matchingObserversSet","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
|
|
@@ -2817,9 +2817,10 @@
|
|
|
2817
2817
|
|
|
2818
2818
|
findMatchingObservers(queries) {
|
|
2819
2819
|
const prevObservers = this.observers;
|
|
2820
|
+
const prevObserversMap = new Map(prevObservers.map(observer => [observer.options.queryHash, observer]));
|
|
2820
2821
|
const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
|
|
2821
2822
|
const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
|
|
2822
|
-
const match =
|
|
2823
|
+
const match = prevObserversMap.get(defaultedOptions.queryHash);
|
|
2823
2824
|
|
|
2824
2825
|
if (match != null) {
|
|
2825
2826
|
return [{
|
|
@@ -2830,9 +2831,10 @@
|
|
|
2830
2831
|
|
|
2831
2832
|
return [];
|
|
2832
2833
|
});
|
|
2833
|
-
const matchedQueryHashes = matchingObservers.map(match => match.defaultedQueryOptions.queryHash);
|
|
2834
|
-
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.
|
|
2835
|
-
const
|
|
2834
|
+
const matchedQueryHashes = new Set(matchingObservers.map(match => match.defaultedQueryOptions.queryHash));
|
|
2835
|
+
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.has(defaultedOptions.queryHash));
|
|
2836
|
+
const matchingObserversSet = new Set(matchingObservers.map(match => match.observer));
|
|
2837
|
+
const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObserversSet.has(prevObserver));
|
|
2836
2838
|
|
|
2837
2839
|
const getObserver = options => {
|
|
2838
2840
|
const defaultedOptions = this.client.defaultQueryOptions(options);
|