@tanstack/query-core 5.0.0-alpha.32 → 5.0.0-alpha.33

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.
Files changed (51) hide show
  1. package/build/lib/index.d.ts +1 -0
  2. package/build/lib/queriesObserver.d.ts +12 -5
  3. package/build/lib/queriesObserver.esm.js +49 -10
  4. package/build/lib/queriesObserver.esm.js.map +1 -1
  5. package/build/lib/queriesObserver.js +49 -10
  6. package/build/lib/queriesObserver.js.map +1 -1
  7. package/build/lib/queriesObserver.mjs +32 -10
  8. package/build/lib/queriesObserver.mjs.map +1 -1
  9. package/build/umd/index.development.js +31 -10
  10. package/build/umd/index.development.js.map +1 -1
  11. package/build/umd/index.production.js +1 -1
  12. package/build/umd/index.production.js.map +1 -1
  13. package/package.json +1 -1
  14. package/src/index.ts +1 -0
  15. package/src/queriesObserver.ts +63 -13
  16. package/build/lib/focusManager.d.ts.map +0 -1
  17. package/build/lib/hydration.d.ts.map +0 -1
  18. package/build/lib/index.d.ts.map +0 -1
  19. package/build/lib/infiniteQueryBehavior.d.ts.map +0 -1
  20. package/build/lib/infiniteQueryObserver.d.ts.map +0 -1
  21. package/build/lib/mutation.d.ts.map +0 -1
  22. package/build/lib/mutationCache.d.ts.map +0 -1
  23. package/build/lib/mutationObserver.d.ts.map +0 -1
  24. package/build/lib/notifyManager.d.ts.map +0 -1
  25. package/build/lib/onlineManager.d.ts.map +0 -1
  26. package/build/lib/queriesObserver.d.ts.map +0 -1
  27. package/build/lib/query.d.ts.map +0 -1
  28. package/build/lib/queryCache.d.ts.map +0 -1
  29. package/build/lib/queryClient.d.ts.map +0 -1
  30. package/build/lib/queryObserver.d.ts.map +0 -1
  31. package/build/lib/removable.d.ts.map +0 -1
  32. package/build/lib/retryer.d.ts.map +0 -1
  33. package/build/lib/subscribable.d.ts.map +0 -1
  34. package/build/lib/tests/focusManager.test.d.ts.map +0 -1
  35. package/build/lib/tests/hydration.test.d.ts.map +0 -1
  36. package/build/lib/tests/infiniteQueryBehavior.test.d.ts.map +0 -1
  37. package/build/lib/tests/infiniteQueryObserver.test.d.ts.map +0 -1
  38. package/build/lib/tests/mutationCache.test.d.ts.map +0 -1
  39. package/build/lib/tests/mutationObserver.test.d.ts.map +0 -1
  40. package/build/lib/tests/mutations.test.d.ts.map +0 -1
  41. package/build/lib/tests/notifyManager.test.d.ts.map +0 -1
  42. package/build/lib/tests/onlineManager.test.d.ts.map +0 -1
  43. package/build/lib/tests/queriesObserver.test.d.ts.map +0 -1
  44. package/build/lib/tests/query.test.d.ts.map +0 -1
  45. package/build/lib/tests/queryCache.test.d.ts.map +0 -1
  46. package/build/lib/tests/queryClient.test.d.ts.map +0 -1
  47. package/build/lib/tests/queryObserver.test.d.ts.map +0 -1
  48. package/build/lib/tests/utils.d.ts.map +0 -1
  49. package/build/lib/tests/utils.test.d.ts.map +0 -1
  50. package/build/lib/types.d.ts.map +0 -1
  51. package/build/lib/utils.d.ts.map +0 -1
@@ -17,4 +17,5 @@ export * from './types';
17
17
  export type { Query, QueryState } from './query';
18
18
  export type { Mutation, MutationState } from './mutation';
19
19
  export type { DehydrateOptions, DehydratedState, HydrateOptions, } from './hydration';
20
+ export type { QueriesObserverOptions } from './queriesObserver';
20
21
  //# sourceMappingURL=index.d.ts.map
@@ -4,17 +4,24 @@ import type { NotifyOptions } from './queryObserver';
4
4
  import { QueryObserver } from './queryObserver';
5
5
  import { Subscribable } from './subscribable';
6
6
  declare type QueriesObserverListener = (result: QueryObserverResult[]) => void;
7
- export declare class QueriesObserver extends Subscribable<QueriesObserverListener> {
7
+ export interface QueriesObserverOptions<TCombinedResult = QueryObserverResult[]> {
8
+ combine?: (result: QueryObserverResult[]) => TCombinedResult;
9
+ }
10
+ export declare class QueriesObserver<TCombinedResult = QueryObserverResult[]> extends Subscribable<QueriesObserverListener> {
8
11
  #private;
9
- constructor(client: QueryClient, queries?: QueryObserverOptions[]);
12
+ constructor(client: QueryClient, queries: QueryObserverOptions[], options?: QueriesObserverOptions<TCombinedResult>);
10
13
  protected onSubscribe(): void;
11
14
  protected onUnsubscribe(): void;
12
15
  destroy(): void;
13
- setQueries(queries: QueryObserverOptions[], notifyOptions?: NotifyOptions): void;
14
- getCurrentResult(): QueryObserverResult[];
16
+ setQueries(queries: QueryObserverOptions[], options?: QueriesObserverOptions<TCombinedResult>, notifyOptions?: NotifyOptions): void;
17
+ getCurrentResult(): TCombinedResult;
15
18
  getQueries(): import("./query").Query<unknown, Error, unknown, import("./types").QueryKey>[];
16
19
  getObservers(): QueryObserver<unknown, Error, unknown, unknown, import("./types").QueryKey>[];
17
- getOptimisticResult(queries: QueryObserverOptions[]): QueryObserverResult[];
20
+ getOptimisticResult(queries: QueryObserverOptions[]): [
21
+ rawResult: QueryObserverResult[],
22
+ combineResult: (r?: QueryObserverResult[]) => TCombinedResult,
23
+ trackResult: () => QueryObserverResult[]
24
+ ];
18
25
  }
19
26
  export {};
20
27
  //# sourceMappingURL=queriesObserver.d.ts.map
@@ -2,6 +2,7 @@ import { classPrivateFieldLooseBase as _classPrivateFieldLooseBase, classPrivate
2
2
  import { notifyManager } from './notifyManager.esm.js';
3
3
  import { QueryObserver } from './queryObserver.esm.js';
4
4
  import { Subscribable } from './subscribable.esm.js';
5
+ import { replaceEqualDeep } from './utils.esm.js';
5
6
 
6
7
  function difference(array1, array2) {
7
8
  return array1.filter(x => array2.indexOf(x) === -1);
@@ -15,11 +16,15 @@ var _client = /*#__PURE__*/_classPrivateFieldLooseKey("client");
15
16
  var _result = /*#__PURE__*/_classPrivateFieldLooseKey("result");
16
17
  var _queries = /*#__PURE__*/_classPrivateFieldLooseKey("queries");
17
18
  var _observers = /*#__PURE__*/_classPrivateFieldLooseKey("observers");
19
+ var _options = /*#__PURE__*/_classPrivateFieldLooseKey("options");
20
+ var _combinedResult = /*#__PURE__*/_classPrivateFieldLooseKey("combinedResult");
21
+ var _setResult = /*#__PURE__*/_classPrivateFieldLooseKey("setResult");
22
+ var _combineResult = /*#__PURE__*/_classPrivateFieldLooseKey("combineResult");
18
23
  var _findMatchingObservers = /*#__PURE__*/_classPrivateFieldLooseKey("findMatchingObservers");
19
24
  var _onUpdate = /*#__PURE__*/_classPrivateFieldLooseKey("onUpdate");
20
25
  var _notify = /*#__PURE__*/_classPrivateFieldLooseKey("notify");
21
26
  class QueriesObserver extends Subscribable {
22
- constructor(client, _queries2) {
27
+ constructor(client, _queries2, _options2) {
23
28
  super();
24
29
  Object.defineProperty(this, _notify, {
25
30
  value: _notify2
@@ -30,6 +35,12 @@ class QueriesObserver extends Subscribable {
30
35
  Object.defineProperty(this, _findMatchingObservers, {
31
36
  value: _findMatchingObservers2
32
37
  });
38
+ Object.defineProperty(this, _combineResult, {
39
+ value: _combineResult2
40
+ });
41
+ Object.defineProperty(this, _setResult, {
42
+ value: _setResult2
43
+ });
33
44
  Object.defineProperty(this, _client, {
34
45
  writable: true,
35
46
  value: void 0
@@ -46,13 +57,19 @@ class QueriesObserver extends Subscribable {
46
57
  writable: true,
47
58
  value: void 0
48
59
  });
60
+ Object.defineProperty(this, _options, {
61
+ writable: true,
62
+ value: void 0
63
+ });
64
+ Object.defineProperty(this, _combinedResult, {
65
+ writable: true,
66
+ value: void 0
67
+ });
49
68
  _classPrivateFieldLooseBase(this, _client)[_client] = client;
50
69
  _classPrivateFieldLooseBase(this, _queries)[_queries] = [];
51
- _classPrivateFieldLooseBase(this, _result)[_result] = [];
52
70
  _classPrivateFieldLooseBase(this, _observers)[_observers] = [];
53
- if (_queries2) {
54
- this.setQueries(_queries2);
55
- }
71
+ _classPrivateFieldLooseBase(this, _setResult)[_setResult]([]);
72
+ this.setQueries(_queries2, _options2);
56
73
  }
57
74
  onSubscribe() {
58
75
  if (this.listeners.size === 1) {
@@ -74,8 +91,9 @@ class QueriesObserver extends Subscribable {
74
91
  observer.destroy();
75
92
  });
76
93
  }
77
- setQueries(queries, notifyOptions) {
94
+ setQueries(queries, options, notifyOptions) {
78
95
  _classPrivateFieldLooseBase(this, _queries)[_queries] = queries;
96
+ _classPrivateFieldLooseBase(this, _options)[_options] = options;
79
97
  notifyManager.batch(() => {
80
98
  const prevObservers = _classPrivateFieldLooseBase(this, _observers)[_observers];
81
99
  const newObserverMatches = _classPrivateFieldLooseBase(this, _findMatchingObservers)[_findMatchingObservers](_classPrivateFieldLooseBase(this, _queries)[_queries]);
@@ -89,7 +107,7 @@ class QueriesObserver extends Subscribable {
89
107
  return;
90
108
  }
91
109
  _classPrivateFieldLooseBase(this, _observers)[_observers] = newObservers;
92
- _classPrivateFieldLooseBase(this, _result)[_result] = newResult;
110
+ _classPrivateFieldLooseBase(this, _setResult)[_setResult](newResult);
93
111
  if (!this.hasListeners()) {
94
112
  return;
95
113
  }
@@ -105,7 +123,7 @@ class QueriesObserver extends Subscribable {
105
123
  });
106
124
  }
107
125
  getCurrentResult() {
108
- return _classPrivateFieldLooseBase(this, _result)[_result];
126
+ return _classPrivateFieldLooseBase(this, _combinedResult)[_combinedResult];
109
127
  }
110
128
  getQueries() {
111
129
  return _classPrivateFieldLooseBase(this, _observers)[_observers].map(observer => observer.getCurrentQuery());
@@ -114,8 +132,29 @@ class QueriesObserver extends Subscribable {
114
132
  return _classPrivateFieldLooseBase(this, _observers)[_observers];
115
133
  }
116
134
  getOptimisticResult(queries) {
117
- return _classPrivateFieldLooseBase(this, _findMatchingObservers)[_findMatchingObservers](queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
135
+ const matches = _classPrivateFieldLooseBase(this, _findMatchingObservers)[_findMatchingObservers](queries);
136
+ const result = matches.map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
137
+ return [result, r => {
138
+ return _classPrivateFieldLooseBase(this, _combineResult)[_combineResult](r != null ? r : result);
139
+ }, () => {
140
+ return matches.map((match, index) => {
141
+ const observerResult = result[index];
142
+ return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult) : observerResult;
143
+ });
144
+ }];
145
+ }
146
+ }
147
+ function _setResult2(value) {
148
+ _classPrivateFieldLooseBase(this, _result)[_result] = value;
149
+ _classPrivateFieldLooseBase(this, _combinedResult)[_combinedResult] = _classPrivateFieldLooseBase(this, _combineResult)[_combineResult](value);
150
+ }
151
+ function _combineResult2(input) {
152
+ var _classPrivateFieldLoo;
153
+ const combine = (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _options)[_options]) == null ? void 0 : _classPrivateFieldLoo.combine;
154
+ if (combine) {
155
+ return replaceEqualDeep(_classPrivateFieldLooseBase(this, _combinedResult)[_combinedResult], combine(input));
118
156
  }
157
+ return input;
119
158
  }
120
159
  function _findMatchingObservers2(queries) {
121
160
  const prevObservers = _classPrivateFieldLooseBase(this, _observers)[_observers];
@@ -150,7 +189,7 @@ function _findMatchingObservers2(queries) {
150
189
  function _onUpdate2(observer, result) {
151
190
  const index = _classPrivateFieldLooseBase(this, _observers)[_observers].indexOf(observer);
152
191
  if (index !== -1) {
153
- _classPrivateFieldLooseBase(this, _result)[_result] = replaceAt(_classPrivateFieldLooseBase(this, _result)[_result], index, result);
192
+ _classPrivateFieldLooseBase(this, _setResult)[_setResult](replaceAt(_classPrivateFieldLooseBase(this, _result)[_result], index, result));
154
193
  _classPrivateFieldLooseBase(this, _notify)[_notify]();
155
194
  }
156
195
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queriesObserver.esm.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { 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\nfunction difference<T>(array1: T[], array2: T[]): T[] {\n return array1.filter((x) => array2.indexOf(x) === -1)\n}\n\nfunction replaceAt<T>(array: T[], index: number, value: T): T[] {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result: QueryObserverResult[]\n #queries: QueryObserverOptions[]\n #observers: 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\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 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.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\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 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.#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 #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 getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const currentObserver = this.#observers.find(\n (o) => o.options.queryHash === defaultedOptions.queryHash,\n )\n return (\n currentObserver ?? new QueryObserver(this.#client, defaultedOptions)\n )\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options) => {\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 #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 #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":["difference","array1","array2","filter","x","indexOf","replaceAt","array","index","value","copy","slice","QueriesObserver","Subscribable","constructor","client","queries","setQueries","onSubscribe","listeners","size","forEach","observer","subscribe","result","onUnsubscribe","destroy","Set","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","match","setOptions","defaultedQueryOptions","newObservers","map","newResult","getCurrentResult","hasIndexChange","some","length","hasListeners","getQueries","getCurrentQuery","getObservers","getOptimisticResult","prevObserversMap","Map","options","queryHash","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","unmatchedQueries","has","getObserver","currentObserver","find","o","QueryObserver","newOrReusedObservers","sortMatchesByOrderOfQueries","a","b","concat","sort","listener"],"mappings":"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"}
1
+ {"version":3,"file":"queriesObserver.esm.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { 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'\nimport { replaceEqualDeep } from './utils'\n\nfunction difference<T>(array1: T[], array2: T[]): T[] {\n return array1.filter((x) => array2.indexOf(x) === -1)\n}\n\nfunction replaceAt<T>(array: T[], index: number, value: T): T[] {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport interface QueriesObserverOptions<\n TCombinedResult = QueryObserverResult[],\n> {\n combine?: (result: QueryObserverResult[]) => TCombinedResult\n}\n\nexport class QueriesObserver<\n TCombinedResult = QueryObserverResult[],\n> extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result!: QueryObserverResult[]\n #queries: QueryObserverOptions[]\n #observers: QueryObserver[]\n #options?: QueriesObserverOptions<TCombinedResult>\n #combinedResult!: TCombinedResult\n\n constructor(\n client: QueryClient,\n queries: QueryObserverOptions[],\n options?: QueriesObserverOptions<TCombinedResult>,\n ) {\n super()\n\n this.#client = client\n this.#queries = []\n this.#observers = []\n\n this.#setResult([])\n this.setQueries(queries, options)\n }\n\n #setResult(value: QueryObserverResult[]) {\n this.#result = value\n this.#combinedResult = this.#combineResult(value)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 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.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n options?: QueriesObserverOptions<TCombinedResult>,\n notifyOptions?: NotifyOptions,\n ): void {\n this.#queries = queries\n this.#options = options\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 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.#setResult(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(): TCombinedResult {\n return this.#combinedResult\n }\n\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.#observers\n }\n\n getOptimisticResult(\n queries: QueryObserverOptions[],\n ): [\n rawResult: QueryObserverResult[],\n combineResult: (r?: QueryObserverResult[]) => TCombinedResult,\n trackResult: () => QueryObserverResult[],\n ] {\n const matches = this.#findMatchingObservers(queries)\n const result = matches.map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n\n return [\n result,\n (r?: QueryObserverResult[]) => {\n return this.#combineResult(r ?? result)\n },\n () => {\n return matches.map((match, index) => {\n const observerResult = result[index]!\n return !match.defaultedQueryOptions.notifyOnChangeProps\n ? match.observer.trackResult(observerResult)\n : observerResult\n })\n },\n ]\n }\n\n #combineResult(input: QueryObserverResult[]): TCombinedResult {\n const combine = this.#options?.combine\n if (combine) {\n return replaceEqualDeep(this.#combinedResult, combine(input))\n }\n return input as any\n }\n\n #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 getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const currentObserver = this.#observers.find(\n (o) => o.options.queryHash === defaultedOptions.queryHash,\n )\n return (\n currentObserver ?? new QueryObserver(this.#client, defaultedOptions)\n )\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options) => {\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 #onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.#observers.indexOf(observer)\n if (index !== -1) {\n this.#setResult(replaceAt(this.#result, index, result))\n this.#notify()\n }\n }\n\n #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":["difference","array1","array2","filter","x","indexOf","replaceAt","array","index","value","copy","slice","QueriesObserver","Subscribable","constructor","client","queries","options","setQueries","onSubscribe","listeners","size","forEach","observer","subscribe","result","onUnsubscribe","destroy","Set","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","match","setOptions","defaultedQueryOptions","newObservers","map","newResult","getCurrentResult","hasIndexChange","some","length","hasListeners","getQueries","getCurrentQuery","getObservers","getOptimisticResult","matches","r","observerResult","notifyOnChangeProps","trackResult","input","combine","replaceEqualDeep","prevObserversMap","Map","queryHash","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","unmatchedQueries","has","getObserver","currentObserver","find","o","QueryObserver","newOrReusedObservers","sortMatchesByOrderOfQueries","a","b","concat","sort","listener"],"mappings":"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"}
@@ -4,6 +4,7 @@ var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js
4
4
  var notifyManager = require('./notifyManager.js');
5
5
  var queryObserver = require('./queryObserver.js');
6
6
  var subscribable = require('./subscribable.js');
7
+ var utils = require('./utils.js');
7
8
 
8
9
  function difference(array1, array2) {
9
10
  return array1.filter(x => array2.indexOf(x) === -1);
@@ -17,11 +18,15 @@ var _client = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("
17
18
  var _result = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("result");
18
19
  var _queries = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("queries");
19
20
  var _observers = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("observers");
21
+ var _options = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("options");
22
+ var _combinedResult = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("combinedResult");
23
+ var _setResult = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("setResult");
24
+ var _combineResult = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("combineResult");
20
25
  var _findMatchingObservers = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("findMatchingObservers");
21
26
  var _onUpdate = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("onUpdate");
22
27
  var _notify = /*#__PURE__*/_rollupPluginBabelHelpers.classPrivateFieldLooseKey("notify");
23
28
  class QueriesObserver extends subscribable.Subscribable {
24
- constructor(client, _queries2) {
29
+ constructor(client, _queries2, _options2) {
25
30
  super();
26
31
  Object.defineProperty(this, _notify, {
27
32
  value: _notify2
@@ -32,6 +37,12 @@ class QueriesObserver extends subscribable.Subscribable {
32
37
  Object.defineProperty(this, _findMatchingObservers, {
33
38
  value: _findMatchingObservers2
34
39
  });
40
+ Object.defineProperty(this, _combineResult, {
41
+ value: _combineResult2
42
+ });
43
+ Object.defineProperty(this, _setResult, {
44
+ value: _setResult2
45
+ });
35
46
  Object.defineProperty(this, _client, {
36
47
  writable: true,
37
48
  value: void 0
@@ -48,13 +59,19 @@ class QueriesObserver extends subscribable.Subscribable {
48
59
  writable: true,
49
60
  value: void 0
50
61
  });
62
+ Object.defineProperty(this, _options, {
63
+ writable: true,
64
+ value: void 0
65
+ });
66
+ Object.defineProperty(this, _combinedResult, {
67
+ writable: true,
68
+ value: void 0
69
+ });
51
70
  _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _client)[_client] = client;
52
71
  _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _queries)[_queries] = [];
53
- _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _result)[_result] = [];
54
72
  _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _observers)[_observers] = [];
55
- if (_queries2) {
56
- this.setQueries(_queries2);
57
- }
73
+ _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _setResult)[_setResult]([]);
74
+ this.setQueries(_queries2, _options2);
58
75
  }
59
76
  onSubscribe() {
60
77
  if (this.listeners.size === 1) {
@@ -76,8 +93,9 @@ class QueriesObserver extends subscribable.Subscribable {
76
93
  observer.destroy();
77
94
  });
78
95
  }
79
- setQueries(queries, notifyOptions) {
96
+ setQueries(queries, options, notifyOptions) {
80
97
  _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _queries)[_queries] = queries;
98
+ _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _options)[_options] = options;
81
99
  notifyManager.notifyManager.batch(() => {
82
100
  const prevObservers = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _observers)[_observers];
83
101
  const newObserverMatches = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _findMatchingObservers)[_findMatchingObservers](_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _queries)[_queries]);
@@ -91,7 +109,7 @@ class QueriesObserver extends subscribable.Subscribable {
91
109
  return;
92
110
  }
93
111
  _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _observers)[_observers] = newObservers;
94
- _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _result)[_result] = newResult;
112
+ _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _setResult)[_setResult](newResult);
95
113
  if (!this.hasListeners()) {
96
114
  return;
97
115
  }
@@ -107,7 +125,7 @@ class QueriesObserver extends subscribable.Subscribable {
107
125
  });
108
126
  }
109
127
  getCurrentResult() {
110
- return _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _result)[_result];
128
+ return _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _combinedResult)[_combinedResult];
111
129
  }
112
130
  getQueries() {
113
131
  return _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _observers)[_observers].map(observer => observer.getCurrentQuery());
@@ -116,8 +134,29 @@ class QueriesObserver extends subscribable.Subscribable {
116
134
  return _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _observers)[_observers];
117
135
  }
118
136
  getOptimisticResult(queries) {
119
- return _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _findMatchingObservers)[_findMatchingObservers](queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
137
+ const matches = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _findMatchingObservers)[_findMatchingObservers](queries);
138
+ const result = matches.map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
139
+ return [result, r => {
140
+ return _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _combineResult)[_combineResult](r != null ? r : result);
141
+ }, () => {
142
+ return matches.map((match, index) => {
143
+ const observerResult = result[index];
144
+ return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult) : observerResult;
145
+ });
146
+ }];
147
+ }
148
+ }
149
+ function _setResult2(value) {
150
+ _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _result)[_result] = value;
151
+ _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _combinedResult)[_combinedResult] = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _combineResult)[_combineResult](value);
152
+ }
153
+ function _combineResult2(input) {
154
+ var _classPrivateFieldLoo;
155
+ const combine = (_classPrivateFieldLoo = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _options)[_options]) == null ? void 0 : _classPrivateFieldLoo.combine;
156
+ if (combine) {
157
+ return utils.replaceEqualDeep(_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _combinedResult)[_combinedResult], combine(input));
120
158
  }
159
+ return input;
121
160
  }
122
161
  function _findMatchingObservers2(queries) {
123
162
  const prevObservers = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _observers)[_observers];
@@ -152,7 +191,7 @@ function _findMatchingObservers2(queries) {
152
191
  function _onUpdate2(observer, result) {
153
192
  const index = _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _observers)[_observers].indexOf(observer);
154
193
  if (index !== -1) {
155
- _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _result)[_result] = replaceAt(_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _result)[_result], index, result);
194
+ _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _setResult)[_setResult](replaceAt(_rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _result)[_result], index, result));
156
195
  _rollupPluginBabelHelpers.classPrivateFieldLooseBase(this, _notify)[_notify]();
157
196
  }
158
197
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queriesObserver.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { 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\nfunction difference<T>(array1: T[], array2: T[]): T[] {\n return array1.filter((x) => array2.indexOf(x) === -1)\n}\n\nfunction replaceAt<T>(array: T[], index: number, value: T): T[] {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result: QueryObserverResult[]\n #queries: QueryObserverOptions[]\n #observers: 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\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 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.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\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 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.#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 #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 getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const currentObserver = this.#observers.find(\n (o) => o.options.queryHash === defaultedOptions.queryHash,\n )\n return (\n currentObserver ?? new QueryObserver(this.#client, defaultedOptions)\n )\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options) => {\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 #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 #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":["difference","array1","array2","filter","x","indexOf","replaceAt","array","index","value","copy","slice","_classPrivateFieldLooseKey","QueriesObserver","Subscribable","constructor","client","queries","_classPrivateFieldLooseBase","setQueries","onSubscribe","listeners","size","forEach","observer","subscribe","result","onUnsubscribe","destroy","Set","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","match","setOptions","defaultedQueryOptions","newObservers","map","newResult","getCurrentResult","hasIndexChange","some","length","hasListeners","getQueries","getCurrentQuery","getObservers","getOptimisticResult","prevObserversMap","Map","options","queryHash","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","unmatchedQueries","has","getObserver","currentObserver","find","o","QueryObserver","newOrReusedObservers","sortMatchesByOrderOfQueries","a","b","concat","sort","listener"],"mappings":"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"}
1
+ {"version":3,"file":"queriesObserver.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { 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'\nimport { replaceEqualDeep } from './utils'\n\nfunction difference<T>(array1: T[], array2: T[]): T[] {\n return array1.filter((x) => array2.indexOf(x) === -1)\n}\n\nfunction replaceAt<T>(array: T[], index: number, value: T): T[] {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport interface QueriesObserverOptions<\n TCombinedResult = QueryObserverResult[],\n> {\n combine?: (result: QueryObserverResult[]) => TCombinedResult\n}\n\nexport class QueriesObserver<\n TCombinedResult = QueryObserverResult[],\n> extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result!: QueryObserverResult[]\n #queries: QueryObserverOptions[]\n #observers: QueryObserver[]\n #options?: QueriesObserverOptions<TCombinedResult>\n #combinedResult!: TCombinedResult\n\n constructor(\n client: QueryClient,\n queries: QueryObserverOptions[],\n options?: QueriesObserverOptions<TCombinedResult>,\n ) {\n super()\n\n this.#client = client\n this.#queries = []\n this.#observers = []\n\n this.#setResult([])\n this.setQueries(queries, options)\n }\n\n #setResult(value: QueryObserverResult[]) {\n this.#result = value\n this.#combinedResult = this.#combineResult(value)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 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.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n options?: QueriesObserverOptions<TCombinedResult>,\n notifyOptions?: NotifyOptions,\n ): void {\n this.#queries = queries\n this.#options = options\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 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.#setResult(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(): TCombinedResult {\n return this.#combinedResult\n }\n\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.#observers\n }\n\n getOptimisticResult(\n queries: QueryObserverOptions[],\n ): [\n rawResult: QueryObserverResult[],\n combineResult: (r?: QueryObserverResult[]) => TCombinedResult,\n trackResult: () => QueryObserverResult[],\n ] {\n const matches = this.#findMatchingObservers(queries)\n const result = matches.map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n\n return [\n result,\n (r?: QueryObserverResult[]) => {\n return this.#combineResult(r ?? result)\n },\n () => {\n return matches.map((match, index) => {\n const observerResult = result[index]!\n return !match.defaultedQueryOptions.notifyOnChangeProps\n ? match.observer.trackResult(observerResult)\n : observerResult\n })\n },\n ]\n }\n\n #combineResult(input: QueryObserverResult[]): TCombinedResult {\n const combine = this.#options?.combine\n if (combine) {\n return replaceEqualDeep(this.#combinedResult, combine(input))\n }\n return input as any\n }\n\n #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 getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const currentObserver = this.#observers.find(\n (o) => o.options.queryHash === defaultedOptions.queryHash,\n )\n return (\n currentObserver ?? new QueryObserver(this.#client, defaultedOptions)\n )\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options) => {\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 #onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.#observers.indexOf(observer)\n if (index !== -1) {\n this.#setResult(replaceAt(this.#result, index, result))\n this.#notify()\n }\n }\n\n #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":["difference","array1","array2","filter","x","indexOf","replaceAt","array","index","value","copy","slice","_classPrivateFieldLooseKey","QueriesObserver","Subscribable","constructor","client","queries","options","_classPrivateFieldLooseBase","setQueries","onSubscribe","listeners","size","forEach","observer","subscribe","result","onUnsubscribe","destroy","Set","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","match","setOptions","defaultedQueryOptions","newObservers","map","newResult","getCurrentResult","hasIndexChange","some","length","hasListeners","getQueries","getCurrentQuery","getObservers","getOptimisticResult","matches","r","observerResult","notifyOnChangeProps","trackResult","input","combine","replaceEqualDeep","prevObserversMap","Map","queryHash","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","unmatchedQueries","has","getObserver","currentObserver","find","o","QueryObserver","newOrReusedObservers","sortMatchesByOrderOfQueries","a","b","concat","sort","listener"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { notifyManager } from './notifyManager.mjs';
2
2
  import { QueryObserver } from './queryObserver.mjs';
3
3
  import { Subscribable } from './subscribable.mjs';
4
+ import { replaceEqualDeep } from './utils.mjs';
4
5
 
5
6
  function difference(array1, array2) {
6
7
  return array1.filter(x => array2.indexOf(x) === -1);
@@ -15,15 +16,19 @@ class QueriesObserver extends Subscribable {
15
16
  #result;
16
17
  #queries;
17
18
  #observers;
18
- constructor(client, queries) {
19
+ #options;
20
+ #combinedResult;
21
+ constructor(client, queries, options) {
19
22
  super();
20
23
  this.#client = client;
21
24
  this.#queries = [];
22
- this.#result = [];
23
25
  this.#observers = [];
24
- if (queries) {
25
- this.setQueries(queries);
26
- }
26
+ this.#setResult([]);
27
+ this.setQueries(queries, options);
28
+ }
29
+ #setResult(value) {
30
+ this.#result = value;
31
+ this.#combinedResult = this.#combineResult(value);
27
32
  }
28
33
  onSubscribe() {
29
34
  if (this.listeners.size === 1) {
@@ -45,8 +50,9 @@ class QueriesObserver extends Subscribable {
45
50
  observer.destroy();
46
51
  });
47
52
  }
48
- setQueries(queries, notifyOptions) {
53
+ setQueries(queries, options, notifyOptions) {
49
54
  this.#queries = queries;
55
+ this.#options = options;
50
56
  notifyManager.batch(() => {
51
57
  const prevObservers = this.#observers;
52
58
  const newObserverMatches = this.#findMatchingObservers(this.#queries);
@@ -60,7 +66,7 @@ class QueriesObserver extends Subscribable {
60
66
  return;
61
67
  }
62
68
  this.#observers = newObservers;
63
- this.#result = newResult;
69
+ this.#setResult(newResult);
64
70
  if (!this.hasListeners()) {
65
71
  return;
66
72
  }
@@ -76,7 +82,7 @@ class QueriesObserver extends Subscribable {
76
82
  });
77
83
  }
78
84
  getCurrentResult() {
79
- return this.#result;
85
+ return this.#combinedResult;
80
86
  }
81
87
  getQueries() {
82
88
  return this.#observers.map(observer => observer.getCurrentQuery());
@@ -85,7 +91,23 @@ class QueriesObserver extends Subscribable {
85
91
  return this.#observers;
86
92
  }
87
93
  getOptimisticResult(queries) {
88
- return this.#findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
94
+ const matches = this.#findMatchingObservers(queries);
95
+ const result = matches.map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
96
+ return [result, r => {
97
+ return this.#combineResult(r ?? result);
98
+ }, () => {
99
+ return matches.map((match, index) => {
100
+ const observerResult = result[index];
101
+ return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult) : observerResult;
102
+ });
103
+ }];
104
+ }
105
+ #combineResult(input) {
106
+ const combine = this.#options?.combine;
107
+ if (combine) {
108
+ return replaceEqualDeep(this.#combinedResult, combine(input));
109
+ }
110
+ return input;
89
111
  }
90
112
  #findMatchingObservers(queries) {
91
113
  const prevObservers = this.#observers;
@@ -120,7 +142,7 @@ class QueriesObserver extends Subscribable {
120
142
  #onUpdate(observer, result) {
121
143
  const index = this.#observers.indexOf(observer);
122
144
  if (index !== -1) {
123
- this.#result = replaceAt(this.#result, index, result);
145
+ this.#setResult(replaceAt(this.#result, index, result));
124
146
  this.#notify();
125
147
  }
126
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queriesObserver.mjs","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { 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\nfunction difference<T>(array1: T[], array2: T[]): T[] {\n return array1.filter((x) => array2.indexOf(x) === -1)\n}\n\nfunction replaceAt<T>(array: T[], index: number, value: T): T[] {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result: QueryObserverResult[]\n #queries: QueryObserverOptions[]\n #observers: 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\n if (queries) {\n this.setQueries(queries)\n }\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 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.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\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 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.#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 #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 getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const currentObserver = this.#observers.find(\n (o) => o.options.queryHash === defaultedOptions.queryHash,\n )\n return (\n currentObserver ?? new QueryObserver(this.#client, defaultedOptions)\n )\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options) => {\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 #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 #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":["difference","array1","array2","filter","x","indexOf","replaceAt","array","index","value","copy","slice","QueriesObserver","Subscribable","constructor","client","queries","setQueries","onSubscribe","listeners","size","forEach","observer","subscribe","result","onUnsubscribe","destroy","Set","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","match","setOptions","defaultedQueryOptions","newObservers","map","newResult","getCurrentResult","hasIndexChange","some","length","hasListeners","getQueries","getCurrentQuery","getObservers","getOptimisticResult","prevObserversMap","Map","options","queryHash","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","unmatchedQueries","has","getObserver","currentObserver","find","o","QueryObserver","newOrReusedObservers","sortMatchesByOrderOfQueries","a","b","concat","sort","listener"],"mappings":"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"}
1
+ {"version":3,"file":"queriesObserver.mjs","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { 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'\nimport { replaceEqualDeep } from './utils'\n\nfunction difference<T>(array1: T[], array2: T[]): T[] {\n return array1.filter((x) => array2.indexOf(x) === -1)\n}\n\nfunction replaceAt<T>(array: T[], index: number, value: T): T[] {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport interface QueriesObserverOptions<\n TCombinedResult = QueryObserverResult[],\n> {\n combine?: (result: QueryObserverResult[]) => TCombinedResult\n}\n\nexport class QueriesObserver<\n TCombinedResult = QueryObserverResult[],\n> extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result!: QueryObserverResult[]\n #queries: QueryObserverOptions[]\n #observers: QueryObserver[]\n #options?: QueriesObserverOptions<TCombinedResult>\n #combinedResult!: TCombinedResult\n\n constructor(\n client: QueryClient,\n queries: QueryObserverOptions[],\n options?: QueriesObserverOptions<TCombinedResult>,\n ) {\n super()\n\n this.#client = client\n this.#queries = []\n this.#observers = []\n\n this.#setResult([])\n this.setQueries(queries, options)\n }\n\n #setResult(value: QueryObserverResult[]) {\n this.#result = value\n this.#combinedResult = this.#combineResult(value)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 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.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: QueryObserverOptions[],\n options?: QueriesObserverOptions<TCombinedResult>,\n notifyOptions?: NotifyOptions,\n ): void {\n this.#queries = queries\n this.#options = options\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 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.#setResult(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(): TCombinedResult {\n return this.#combinedResult\n }\n\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.#observers\n }\n\n getOptimisticResult(\n queries: QueryObserverOptions[],\n ): [\n rawResult: QueryObserverResult[],\n combineResult: (r?: QueryObserverResult[]) => TCombinedResult,\n trackResult: () => QueryObserverResult[],\n ] {\n const matches = this.#findMatchingObservers(queries)\n const result = matches.map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n\n return [\n result,\n (r?: QueryObserverResult[]) => {\n return this.#combineResult(r ?? result)\n },\n () => {\n return matches.map((match, index) => {\n const observerResult = result[index]!\n return !match.defaultedQueryOptions.notifyOnChangeProps\n ? match.observer.trackResult(observerResult)\n : observerResult\n })\n },\n ]\n }\n\n #combineResult(input: QueryObserverResult[]): TCombinedResult {\n const combine = this.#options?.combine\n if (combine) {\n return replaceEqualDeep(this.#combinedResult, combine(input))\n }\n return input as any\n }\n\n #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 getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const currentObserver = this.#observers.find(\n (o) => o.options.queryHash === defaultedOptions.queryHash,\n )\n return (\n currentObserver ?? new QueryObserver(this.#client, defaultedOptions)\n )\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options) => {\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 #onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.#observers.indexOf(observer)\n if (index !== -1) {\n this.#setResult(replaceAt(this.#result, index, result))\n this.#notify()\n }\n }\n\n #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":["difference","array1","array2","filter","x","indexOf","replaceAt","array","index","value","copy","slice","QueriesObserver","Subscribable","constructor","client","queries","options","setQueries","onSubscribe","listeners","size","forEach","observer","subscribe","result","onUnsubscribe","destroy","Set","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","match","setOptions","defaultedQueryOptions","newObservers","map","newResult","getCurrentResult","hasIndexChange","some","length","hasListeners","getQueries","getCurrentQuery","getObservers","getOptimisticResult","matches","r","observerResult","notifyOnChangeProps","trackResult","input","combine","replaceEqualDeep","prevObserversMap","Map","queryHash","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","unmatchedQueries","has","getObserver","currentObserver","find","o","QueryObserver","newOrReusedObservers","sortMatchesByOrderOfQueries","a","b","concat","sort","listener"],"mappings":"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"}