@tanstack/query-core 4.3.0-beta.4 → 4.3.0

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 (89) hide show
  1. package/build/lib/focusManager.js +91 -0
  2. package/build/lib/focusManager.js.map +1 -0
  3. package/build/lib/focusManager.mjs +86 -0
  4. package/build/lib/focusManager.mjs.map +1 -0
  5. package/build/lib/hydration.js +102 -0
  6. package/build/lib/hydration.js.map +1 -0
  7. package/build/lib/hydration.mjs +97 -0
  8. package/build/lib/hydration.mjs.map +1 -0
  9. package/build/lib/index.js +36 -3110
  10. package/build/lib/index.js.map +1 -1
  11. package/build/lib/index.mjs +13 -3091
  12. package/build/lib/index.mjs.map +1 -1
  13. package/build/lib/infiniteQueryBehavior.js +150 -0
  14. package/build/lib/infiniteQueryBehavior.js.map +1 -0
  15. package/build/lib/infiniteQueryBehavior.mjs +142 -0
  16. package/build/lib/infiniteQueryBehavior.mjs.map +1 -0
  17. package/build/lib/infiniteQueryObserver.js +82 -0
  18. package/build/lib/infiniteQueryObserver.js.map +1 -0
  19. package/build/lib/infiniteQueryObserver.mjs +78 -0
  20. package/build/lib/infiniteQueryObserver.mjs.map +1 -0
  21. package/build/lib/logger.js +8 -0
  22. package/build/lib/logger.js.map +1 -0
  23. package/build/lib/logger.mjs +4 -0
  24. package/build/lib/logger.mjs.map +1 -0
  25. package/build/lib/logger.native.js +16 -0
  26. package/build/lib/logger.native.js.map +1 -0
  27. package/build/lib/logger.native.mjs +12 -0
  28. package/build/lib/logger.native.mjs.map +1 -0
  29. package/build/lib/mutation.js +248 -0
  30. package/build/lib/mutation.js.map +1 -0
  31. package/build/lib/mutation.mjs +243 -0
  32. package/build/lib/mutation.mjs.map +1 -0
  33. package/build/lib/mutationCache.js +89 -0
  34. package/build/lib/mutationCache.js.map +1 -0
  35. package/build/lib/mutationCache.mjs +85 -0
  36. package/build/lib/mutationCache.mjs.map +1 -0
  37. package/build/lib/mutationObserver.js +130 -0
  38. package/build/lib/mutationObserver.js.map +1 -0
  39. package/build/lib/mutationObserver.mjs +126 -0
  40. package/build/lib/mutationObserver.mjs.map +1 -0
  41. package/build/lib/notifyManager.js +104 -0
  42. package/build/lib/notifyManager.js.map +1 -0
  43. package/build/lib/notifyManager.mjs +99 -0
  44. package/build/lib/notifyManager.mjs.map +1 -0
  45. package/build/lib/onlineManager.js +90 -0
  46. package/build/lib/onlineManager.js.map +1 -0
  47. package/build/lib/onlineManager.mjs +85 -0
  48. package/build/lib/onlineManager.mjs.map +1 -0
  49. package/build/lib/queriesObserver.js +160 -0
  50. package/build/lib/queriesObserver.js.map +1 -0
  51. package/build/lib/queriesObserver.mjs +156 -0
  52. package/build/lib/queriesObserver.mjs.map +1 -0
  53. package/build/lib/query.js +464 -0
  54. package/build/lib/query.js.map +1 -0
  55. package/build/lib/query.mjs +460 -0
  56. package/build/lib/query.mjs.map +1 -0
  57. package/build/lib/queryCache.js +130 -0
  58. package/build/lib/queryCache.js.map +1 -0
  59. package/build/lib/queryCache.mjs +126 -0
  60. package/build/lib/queryCache.mjs.map +1 -0
  61. package/build/lib/queryClient.js +343 -0
  62. package/build/lib/queryClient.js.map +1 -0
  63. package/build/lib/queryClient.mjs +339 -0
  64. package/build/lib/queryClient.mjs.map +1 -0
  65. package/build/lib/queryObserver.js +519 -0
  66. package/build/lib/queryObserver.js.map +1 -0
  67. package/build/lib/queryObserver.mjs +515 -0
  68. package/build/lib/queryObserver.mjs.map +1 -0
  69. package/build/lib/removable.js +37 -0
  70. package/build/lib/removable.js.map +1 -0
  71. package/build/lib/removable.mjs +33 -0
  72. package/build/lib/removable.mjs.map +1 -0
  73. package/build/lib/retryer.js +167 -0
  74. package/build/lib/retryer.js.map +1 -0
  75. package/build/lib/retryer.mjs +160 -0
  76. package/build/lib/retryer.mjs.map +1 -0
  77. package/build/lib/subscribable.js +33 -0
  78. package/build/lib/subscribable.js.map +1 -0
  79. package/build/lib/subscribable.mjs +29 -0
  80. package/build/lib/subscribable.mjs.map +1 -0
  81. package/build/lib/utils.js +348 -0
  82. package/build/lib/utils.js.map +1 -0
  83. package/build/lib/utils.mjs +318 -0
  84. package/build/lib/utils.mjs.map +1 -0
  85. package/build/umd/index.development.js +0 -10
  86. package/build/umd/index.development.js.map +1 -1
  87. package/build/umd/index.production.js +0 -10
  88. package/build/umd/index.production.js.map +1 -1
  89. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationCache.js","sources":["../../src/mutationCache.ts"],"sourcesContent":["import { MutationObserver } from './mutationObserver'\nimport type { MutationOptions } from './types'\nimport type { QueryClient } from './queryClient'\nimport { notifyManager } from './notifyManager'\nimport { Action, Mutation, MutationState } from './mutation'\nimport { matchMutation, MutationFilters, noop } from './utils'\nimport { Subscribable } from './subscribable'\n\n// TYPES\n\ninterface MutationCacheConfig {\n onError?: (\n error: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => void\n onSuccess?: (\n data: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => void\n onMutate?: (\n variables: unknown,\n mutation: Mutation<unknown, unknown, unknown, unknown>,\n ) => void\n}\n\ninterface NotifyEventMutationAdded {\n type: 'added'\n mutation: Mutation<any, any, any, any>\n}\ninterface NotifyEventMutationRemoved {\n type: 'removed'\n mutation: Mutation<any, any, any, any>\n}\n\ninterface NotifyEventMutationObserverAdded {\n type: 'observerAdded'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverRemoved {\n type: 'observerRemoved'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated {\n type: 'observerOptionsUpdated'\n mutation?: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any, any>\n}\n\ninterface NotifyEventMutationUpdated {\n type: 'updated'\n mutation: Mutation<any, any, any, any>\n action: Action<any, any, any, any>\n}\n\ntype MutationCacheNotifyEvent =\n | NotifyEventMutationAdded\n | NotifyEventMutationRemoved\n | NotifyEventMutationObserverAdded\n | NotifyEventMutationObserverRemoved\n | NotifyEventMutationObserverOptionsUpdated\n | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable<MutationCacheListener> {\n config: MutationCacheConfig\n\n private mutations: Mutation<any, any, any, any>[]\n private mutationId: number\n\n constructor(config?: MutationCacheConfig) {\n super()\n this.config = config || {}\n this.mutations = []\n this.mutationId = 0\n }\n\n build<TData, TError, TVariables, TContext>(\n client: QueryClient,\n options: MutationOptions<TData, TError, TVariables, TContext>,\n state?: MutationState<TData, TError, TVariables, TContext>,\n ): Mutation<TData, TError, TVariables, TContext> {\n const mutation = new Mutation({\n mutationCache: this,\n logger: client.getLogger(),\n mutationId: ++this.mutationId,\n options: client.defaultMutationOptions(options),\n state,\n defaultOptions: options.mutationKey\n ? client.getMutationDefaults(options.mutationKey)\n : undefined,\n meta: options.meta,\n })\n\n this.add(mutation)\n\n return mutation\n }\n\n add(mutation: Mutation<any, any, any, any>): void {\n this.mutations.push(mutation)\n this.notify({ type: 'added', mutation })\n }\n\n remove(mutation: Mutation<any, any, any, any>): void {\n this.mutations = this.mutations.filter((x) => x !== mutation)\n this.notify({ type: 'removed', mutation })\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.mutations.forEach((mutation) => {\n this.remove(mutation)\n })\n })\n }\n\n getAll(): Mutation[] {\n return this.mutations\n }\n\n find<TData = unknown, TError = unknown, TVariables = any, TContext = unknown>(\n filters: MutationFilters,\n ): Mutation<TData, TError, TVariables, TContext> | undefined {\n if (typeof filters.exact === 'undefined') {\n filters.exact = true\n }\n\n return this.mutations.find((mutation) => matchMutation(filters, mutation))\n }\n\n findAll(filters: MutationFilters): Mutation[] {\n return this.mutations.filter((mutation) => matchMutation(filters, mutation))\n }\n\n notify(event: MutationCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n resumePausedMutations(): Promise<void> {\n const pausedMutations = this.mutations.filter((x) => x.state.isPaused)\n return notifyManager.batch(() =>\n pausedMutations.reduce(\n (promise, mutation) =>\n promise.then(() => mutation.continue().catch(noop)),\n Promise.resolve(),\n ),\n )\n }\n}\n"],"names":["MutationCache","Subscribable","constructor","config","mutations","mutationId","build","client","options","state","mutation","Mutation","mutationCache","logger","getLogger","defaultMutationOptions","defaultOptions","mutationKey","getMutationDefaults","undefined","meta","add","push","notify","type","remove","filter","x","clear","notifyManager","batch","forEach","getAll","find","filters","exact","matchMutation","findAll","event","listeners","listener","resumePausedMutations","pausedMutations","isPaused","reduce","promise","then","continue","catch","noop","Promise","resolve"],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { notifyManager } from './notifyManager.mjs';
2
+ import { Mutation } from './mutation.mjs';
3
+ import { matchMutation, noop } from './utils.mjs';
4
+ import { Subscribable } from './subscribable.mjs';
5
+
6
+ // CLASS
7
+ class MutationCache extends Subscribable {
8
+ constructor(config) {
9
+ super();
10
+ this.config = config || {};
11
+ this.mutations = [];
12
+ this.mutationId = 0;
13
+ }
14
+
15
+ build(client, options, state) {
16
+ const mutation = new Mutation({
17
+ mutationCache: this,
18
+ logger: client.getLogger(),
19
+ mutationId: ++this.mutationId,
20
+ options: client.defaultMutationOptions(options),
21
+ state,
22
+ defaultOptions: options.mutationKey ? client.getMutationDefaults(options.mutationKey) : undefined,
23
+ meta: options.meta
24
+ });
25
+ this.add(mutation);
26
+ return mutation;
27
+ }
28
+
29
+ add(mutation) {
30
+ this.mutations.push(mutation);
31
+ this.notify({
32
+ type: 'added',
33
+ mutation
34
+ });
35
+ }
36
+
37
+ remove(mutation) {
38
+ this.mutations = this.mutations.filter(x => x !== mutation);
39
+ this.notify({
40
+ type: 'removed',
41
+ mutation
42
+ });
43
+ }
44
+
45
+ clear() {
46
+ notifyManager.batch(() => {
47
+ this.mutations.forEach(mutation => {
48
+ this.remove(mutation);
49
+ });
50
+ });
51
+ }
52
+
53
+ getAll() {
54
+ return this.mutations;
55
+ }
56
+
57
+ find(filters) {
58
+ if (typeof filters.exact === 'undefined') {
59
+ filters.exact = true;
60
+ }
61
+
62
+ return this.mutations.find(mutation => matchMutation(filters, mutation));
63
+ }
64
+
65
+ findAll(filters) {
66
+ return this.mutations.filter(mutation => matchMutation(filters, mutation));
67
+ }
68
+
69
+ notify(event) {
70
+ notifyManager.batch(() => {
71
+ this.listeners.forEach(listener => {
72
+ listener(event);
73
+ });
74
+ });
75
+ }
76
+
77
+ resumePausedMutations() {
78
+ const pausedMutations = this.mutations.filter(x => x.state.isPaused);
79
+ return notifyManager.batch(() => pausedMutations.reduce((promise, mutation) => promise.then(() => mutation.continue().catch(noop)), Promise.resolve()));
80
+ }
81
+
82
+ }
83
+
84
+ export { MutationCache };
85
+ //# sourceMappingURL=mutationCache.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationCache.mjs","sources":["../../src/mutationCache.ts"],"sourcesContent":["import { MutationObserver } from './mutationObserver'\nimport type { MutationOptions } from './types'\nimport type { QueryClient } from './queryClient'\nimport { notifyManager } from './notifyManager'\nimport { Action, Mutation, MutationState } from './mutation'\nimport { matchMutation, MutationFilters, noop } from './utils'\nimport { Subscribable } from './subscribable'\n\n// TYPES\n\ninterface MutationCacheConfig {\n onError?: (\n error: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => void\n onSuccess?: (\n data: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation<unknown, unknown, unknown>,\n ) => void\n onMutate?: (\n variables: unknown,\n mutation: Mutation<unknown, unknown, unknown, unknown>,\n ) => void\n}\n\ninterface NotifyEventMutationAdded {\n type: 'added'\n mutation: Mutation<any, any, any, any>\n}\ninterface NotifyEventMutationRemoved {\n type: 'removed'\n mutation: Mutation<any, any, any, any>\n}\n\ninterface NotifyEventMutationObserverAdded {\n type: 'observerAdded'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverRemoved {\n type: 'observerRemoved'\n mutation: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any>\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated {\n type: 'observerOptionsUpdated'\n mutation?: Mutation<any, any, any, any>\n observer: MutationObserver<any, any, any, any>\n}\n\ninterface NotifyEventMutationUpdated {\n type: 'updated'\n mutation: Mutation<any, any, any, any>\n action: Action<any, any, any, any>\n}\n\ntype MutationCacheNotifyEvent =\n | NotifyEventMutationAdded\n | NotifyEventMutationRemoved\n | NotifyEventMutationObserverAdded\n | NotifyEventMutationObserverRemoved\n | NotifyEventMutationObserverOptionsUpdated\n | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable<MutationCacheListener> {\n config: MutationCacheConfig\n\n private mutations: Mutation<any, any, any, any>[]\n private mutationId: number\n\n constructor(config?: MutationCacheConfig) {\n super()\n this.config = config || {}\n this.mutations = []\n this.mutationId = 0\n }\n\n build<TData, TError, TVariables, TContext>(\n client: QueryClient,\n options: MutationOptions<TData, TError, TVariables, TContext>,\n state?: MutationState<TData, TError, TVariables, TContext>,\n ): Mutation<TData, TError, TVariables, TContext> {\n const mutation = new Mutation({\n mutationCache: this,\n logger: client.getLogger(),\n mutationId: ++this.mutationId,\n options: client.defaultMutationOptions(options),\n state,\n defaultOptions: options.mutationKey\n ? client.getMutationDefaults(options.mutationKey)\n : undefined,\n meta: options.meta,\n })\n\n this.add(mutation)\n\n return mutation\n }\n\n add(mutation: Mutation<any, any, any, any>): void {\n this.mutations.push(mutation)\n this.notify({ type: 'added', mutation })\n }\n\n remove(mutation: Mutation<any, any, any, any>): void {\n this.mutations = this.mutations.filter((x) => x !== mutation)\n this.notify({ type: 'removed', mutation })\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.mutations.forEach((mutation) => {\n this.remove(mutation)\n })\n })\n }\n\n getAll(): Mutation[] {\n return this.mutations\n }\n\n find<TData = unknown, TError = unknown, TVariables = any, TContext = unknown>(\n filters: MutationFilters,\n ): Mutation<TData, TError, TVariables, TContext> | undefined {\n if (typeof filters.exact === 'undefined') {\n filters.exact = true\n }\n\n return this.mutations.find((mutation) => matchMutation(filters, mutation))\n }\n\n findAll(filters: MutationFilters): Mutation[] {\n return this.mutations.filter((mutation) => matchMutation(filters, mutation))\n }\n\n notify(event: MutationCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n resumePausedMutations(): Promise<void> {\n const pausedMutations = this.mutations.filter((x) => x.state.isPaused)\n return notifyManager.batch(() =>\n pausedMutations.reduce(\n (promise, mutation) =>\n promise.then(() => mutation.continue().catch(noop)),\n Promise.resolve(),\n ),\n )\n }\n}\n"],"names":["MutationCache","Subscribable","constructor","config","mutations","mutationId","build","client","options","state","mutation","Mutation","mutationCache","logger","getLogger","defaultMutationOptions","defaultOptions","mutationKey","getMutationDefaults","undefined","meta","add","push","notify","type","remove","filter","x","clear","notifyManager","batch","forEach","getAll","find","filters","exact","matchMutation","findAll","event","listeners","listener","resumePausedMutations","pausedMutations","isPaused","reduce","promise","then","continue","catch","noop","Promise","resolve"],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var mutation = require('./mutation.js');
6
+ var notifyManager = require('./notifyManager.js');
7
+ var subscribable = require('./subscribable.js');
8
+ var utils = require('./utils.js');
9
+
10
+ // CLASS
11
+ class MutationObserver extends subscribable.Subscribable {
12
+ constructor(client, options) {
13
+ super();
14
+ this.client = client;
15
+ this.setOptions(options);
16
+ this.bindMethods();
17
+ this.updateResult();
18
+ }
19
+
20
+ bindMethods() {
21
+ this.mutate = this.mutate.bind(this);
22
+ this.reset = this.reset.bind(this);
23
+ }
24
+
25
+ setOptions(options) {
26
+ const prevOptions = this.options;
27
+ this.options = this.client.defaultMutationOptions(options);
28
+
29
+ if (!utils.shallowEqualObjects(prevOptions, this.options)) {
30
+ this.client.getMutationCache().notify({
31
+ type: 'observerOptionsUpdated',
32
+ mutation: this.currentMutation,
33
+ observer: this
34
+ });
35
+ }
36
+ }
37
+
38
+ onUnsubscribe() {
39
+ if (!this.listeners.length) {
40
+ var _this$currentMutation;
41
+
42
+ (_this$currentMutation = this.currentMutation) == null ? void 0 : _this$currentMutation.removeObserver(this);
43
+ }
44
+ }
45
+
46
+ onMutationUpdate(action) {
47
+ this.updateResult(); // Determine which callbacks to trigger
48
+
49
+ const notifyOptions = {
50
+ listeners: true
51
+ };
52
+
53
+ if (action.type === 'success') {
54
+ notifyOptions.onSuccess = true;
55
+ } else if (action.type === 'error') {
56
+ notifyOptions.onError = true;
57
+ }
58
+
59
+ this.notify(notifyOptions);
60
+ }
61
+
62
+ getCurrentResult() {
63
+ return this.currentResult;
64
+ }
65
+
66
+ reset() {
67
+ this.currentMutation = undefined;
68
+ this.updateResult();
69
+ this.notify({
70
+ listeners: true
71
+ });
72
+ }
73
+
74
+ mutate(variables, options) {
75
+ this.mutateOptions = options;
76
+
77
+ if (this.currentMutation) {
78
+ this.currentMutation.removeObserver(this);
79
+ }
80
+
81
+ this.currentMutation = this.client.getMutationCache().build(this.client, { ...this.options,
82
+ variables: typeof variables !== 'undefined' ? variables : this.options.variables
83
+ });
84
+ this.currentMutation.addObserver(this);
85
+ return this.currentMutation.execute();
86
+ }
87
+
88
+ updateResult() {
89
+ const state = this.currentMutation ? this.currentMutation.state : mutation.getDefaultState();
90
+ const result = { ...state,
91
+ isLoading: state.status === 'loading',
92
+ isSuccess: state.status === 'success',
93
+ isError: state.status === 'error',
94
+ isIdle: state.status === 'idle',
95
+ mutate: this.mutate,
96
+ reset: this.reset
97
+ };
98
+ this.currentResult = result;
99
+ }
100
+
101
+ notify(options) {
102
+ notifyManager.notifyManager.batch(() => {
103
+ // First trigger the mutate callbacks
104
+ if (this.mutateOptions) {
105
+ if (options.onSuccess) {
106
+ var _this$mutateOptions$o, _this$mutateOptions, _this$mutateOptions$o2, _this$mutateOptions2;
107
+
108
+ (_this$mutateOptions$o = (_this$mutateOptions = this.mutateOptions).onSuccess) == null ? void 0 : _this$mutateOptions$o.call(_this$mutateOptions, this.currentResult.data, this.currentResult.variables, this.currentResult.context);
109
+ (_this$mutateOptions$o2 = (_this$mutateOptions2 = this.mutateOptions).onSettled) == null ? void 0 : _this$mutateOptions$o2.call(_this$mutateOptions2, this.currentResult.data, null, this.currentResult.variables, this.currentResult.context);
110
+ } else if (options.onError) {
111
+ var _this$mutateOptions$o3, _this$mutateOptions3, _this$mutateOptions$o4, _this$mutateOptions4;
112
+
113
+ (_this$mutateOptions$o3 = (_this$mutateOptions3 = this.mutateOptions).onError) == null ? void 0 : _this$mutateOptions$o3.call(_this$mutateOptions3, this.currentResult.error, this.currentResult.variables, this.currentResult.context);
114
+ (_this$mutateOptions$o4 = (_this$mutateOptions4 = this.mutateOptions).onSettled) == null ? void 0 : _this$mutateOptions$o4.call(_this$mutateOptions4, undefined, this.currentResult.error, this.currentResult.variables, this.currentResult.context);
115
+ }
116
+ } // Then trigger the listeners
117
+
118
+
119
+ if (options.listeners) {
120
+ this.listeners.forEach(listener => {
121
+ listener(this.currentResult);
122
+ });
123
+ }
124
+ });
125
+ }
126
+
127
+ }
128
+
129
+ exports.MutationObserver = MutationObserver;
130
+ //# sourceMappingURL=mutationObserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationObserver.js","sources":["../../src/mutationObserver.ts"],"sourcesContent":["import { Action, getDefaultState, Mutation } from './mutation'\nimport { notifyManager } from './notifyManager'\nimport type { QueryClient } from './queryClient'\nimport { Subscribable } from './subscribable'\nimport type {\n MutateOptions,\n MutationObserverBaseResult,\n MutationObserverResult,\n MutationObserverOptions,\n} from './types'\nimport { shallowEqualObjects } from './utils'\n\n// TYPES\n\ntype MutationObserverListener<TData, TError, TVariables, TContext> = (\n result: MutationObserverResult<TData, TError, TVariables, TContext>,\n) => void\n\ninterface NotifyOptions {\n listeners?: boolean\n onError?: boolean\n onSuccess?: boolean\n}\n\n// CLASS\n\nexport class MutationObserver<\n TData = unknown,\n TError = unknown,\n TVariables = void,\n TContext = unknown,\n> extends Subscribable<\n MutationObserverListener<TData, TError, TVariables, TContext>\n> {\n options!: MutationObserverOptions<TData, TError, TVariables, TContext>\n\n private client: QueryClient\n private currentResult!: MutationObserverResult<\n TData,\n TError,\n TVariables,\n TContext\n >\n private currentMutation?: Mutation<TData, TError, TVariables, TContext>\n private mutateOptions?: MutateOptions<TData, TError, TVariables, TContext>\n\n constructor(\n client: QueryClient,\n options: MutationObserverOptions<TData, TError, TVariables, TContext>,\n ) {\n super()\n\n this.client = client\n this.setOptions(options)\n this.bindMethods()\n this.updateResult()\n }\n\n protected bindMethods(): void {\n this.mutate = this.mutate.bind(this)\n this.reset = this.reset.bind(this)\n }\n\n setOptions(\n options?: MutationObserverOptions<TData, TError, TVariables, TContext>,\n ) {\n const prevOptions = this.options\n this.options = this.client.defaultMutationOptions(options)\n if (!shallowEqualObjects(prevOptions, this.options)) {\n this.client.getMutationCache().notify({\n type: 'observerOptionsUpdated',\n mutation: this.currentMutation,\n observer: this,\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.length) {\n this.currentMutation?.removeObserver(this)\n }\n }\n\n onMutationUpdate(action: Action<TData, TError, TVariables, TContext>): void {\n this.updateResult()\n\n // Determine which callbacks to trigger\n const notifyOptions: NotifyOptions = {\n listeners: true,\n }\n\n if (action.type === 'success') {\n notifyOptions.onSuccess = true\n } else if (action.type === 'error') {\n notifyOptions.onError = true\n }\n\n this.notify(notifyOptions)\n }\n\n getCurrentResult(): MutationObserverResult<\n TData,\n TError,\n TVariables,\n TContext\n > {\n return this.currentResult\n }\n\n reset(): void {\n this.currentMutation = undefined\n this.updateResult()\n this.notify({ listeners: true })\n }\n\n mutate(\n variables?: TVariables,\n options?: MutateOptions<TData, TError, TVariables, TContext>,\n ): Promise<TData> {\n this.mutateOptions = options\n\n if (this.currentMutation) {\n this.currentMutation.removeObserver(this)\n }\n\n this.currentMutation = this.client.getMutationCache().build(this.client, {\n ...this.options,\n variables:\n typeof variables !== 'undefined' ? variables : this.options.variables,\n })\n\n this.currentMutation.addObserver(this)\n\n return this.currentMutation.execute()\n }\n\n private updateResult(): void {\n const state = this.currentMutation\n ? this.currentMutation.state\n : getDefaultState<TData, TError, TVariables, TContext>()\n\n const result: MutationObserverBaseResult<\n TData,\n TError,\n TVariables,\n TContext\n > = {\n ...state,\n isLoading: state.status === 'loading',\n isSuccess: state.status === 'success',\n isError: state.status === 'error',\n isIdle: state.status === 'idle',\n mutate: this.mutate,\n reset: this.reset,\n }\n\n this.currentResult = result as MutationObserverResult<\n TData,\n TError,\n TVariables,\n TContext\n >\n }\n\n private notify(options: NotifyOptions) {\n notifyManager.batch(() => {\n // First trigger the mutate callbacks\n if (this.mutateOptions) {\n if (options.onSuccess) {\n this.mutateOptions.onSuccess?.(\n this.currentResult.data!,\n this.currentResult.variables!,\n this.currentResult.context!,\n )\n this.mutateOptions.onSettled?.(\n this.currentResult.data!,\n null,\n this.currentResult.variables!,\n this.currentResult.context,\n )\n } else if (options.onError) {\n this.mutateOptions.onError?.(\n this.currentResult.error!,\n this.currentResult.variables!,\n this.currentResult.context,\n )\n this.mutateOptions.onSettled?.(\n undefined,\n this.currentResult.error,\n this.currentResult.variables!,\n this.currentResult.context,\n )\n }\n }\n\n // Then trigger the listeners\n if (options.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.currentResult)\n })\n }\n })\n }\n}\n"],"names":["MutationObserver","Subscribable","constructor","client","options","setOptions","bindMethods","updateResult","mutate","bind","reset","prevOptions","defaultMutationOptions","shallowEqualObjects","getMutationCache","notify","type","mutation","currentMutation","observer","onUnsubscribe","listeners","length","removeObserver","onMutationUpdate","action","notifyOptions","onSuccess","onError","getCurrentResult","currentResult","undefined","variables","mutateOptions","build","addObserver","execute","state","getDefaultState","result","isLoading","status","isSuccess","isError","isIdle","notifyManager","batch","data","context","onSettled","error","forEach","listener"],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import { getDefaultState } from './mutation.mjs';
2
+ import { notifyManager } from './notifyManager.mjs';
3
+ import { Subscribable } from './subscribable.mjs';
4
+ import { shallowEqualObjects } from './utils.mjs';
5
+
6
+ // CLASS
7
+ class MutationObserver extends Subscribable {
8
+ constructor(client, options) {
9
+ super();
10
+ this.client = client;
11
+ this.setOptions(options);
12
+ this.bindMethods();
13
+ this.updateResult();
14
+ }
15
+
16
+ bindMethods() {
17
+ this.mutate = this.mutate.bind(this);
18
+ this.reset = this.reset.bind(this);
19
+ }
20
+
21
+ setOptions(options) {
22
+ const prevOptions = this.options;
23
+ this.options = this.client.defaultMutationOptions(options);
24
+
25
+ if (!shallowEqualObjects(prevOptions, this.options)) {
26
+ this.client.getMutationCache().notify({
27
+ type: 'observerOptionsUpdated',
28
+ mutation: this.currentMutation,
29
+ observer: this
30
+ });
31
+ }
32
+ }
33
+
34
+ onUnsubscribe() {
35
+ if (!this.listeners.length) {
36
+ var _this$currentMutation;
37
+
38
+ (_this$currentMutation = this.currentMutation) == null ? void 0 : _this$currentMutation.removeObserver(this);
39
+ }
40
+ }
41
+
42
+ onMutationUpdate(action) {
43
+ this.updateResult(); // Determine which callbacks to trigger
44
+
45
+ const notifyOptions = {
46
+ listeners: true
47
+ };
48
+
49
+ if (action.type === 'success') {
50
+ notifyOptions.onSuccess = true;
51
+ } else if (action.type === 'error') {
52
+ notifyOptions.onError = true;
53
+ }
54
+
55
+ this.notify(notifyOptions);
56
+ }
57
+
58
+ getCurrentResult() {
59
+ return this.currentResult;
60
+ }
61
+
62
+ reset() {
63
+ this.currentMutation = undefined;
64
+ this.updateResult();
65
+ this.notify({
66
+ listeners: true
67
+ });
68
+ }
69
+
70
+ mutate(variables, options) {
71
+ this.mutateOptions = options;
72
+
73
+ if (this.currentMutation) {
74
+ this.currentMutation.removeObserver(this);
75
+ }
76
+
77
+ this.currentMutation = this.client.getMutationCache().build(this.client, { ...this.options,
78
+ variables: typeof variables !== 'undefined' ? variables : this.options.variables
79
+ });
80
+ this.currentMutation.addObserver(this);
81
+ return this.currentMutation.execute();
82
+ }
83
+
84
+ updateResult() {
85
+ const state = this.currentMutation ? this.currentMutation.state : getDefaultState();
86
+ const result = { ...state,
87
+ isLoading: state.status === 'loading',
88
+ isSuccess: state.status === 'success',
89
+ isError: state.status === 'error',
90
+ isIdle: state.status === 'idle',
91
+ mutate: this.mutate,
92
+ reset: this.reset
93
+ };
94
+ this.currentResult = result;
95
+ }
96
+
97
+ notify(options) {
98
+ notifyManager.batch(() => {
99
+ // First trigger the mutate callbacks
100
+ if (this.mutateOptions) {
101
+ if (options.onSuccess) {
102
+ var _this$mutateOptions$o, _this$mutateOptions, _this$mutateOptions$o2, _this$mutateOptions2;
103
+
104
+ (_this$mutateOptions$o = (_this$mutateOptions = this.mutateOptions).onSuccess) == null ? void 0 : _this$mutateOptions$o.call(_this$mutateOptions, this.currentResult.data, this.currentResult.variables, this.currentResult.context);
105
+ (_this$mutateOptions$o2 = (_this$mutateOptions2 = this.mutateOptions).onSettled) == null ? void 0 : _this$mutateOptions$o2.call(_this$mutateOptions2, this.currentResult.data, null, this.currentResult.variables, this.currentResult.context);
106
+ } else if (options.onError) {
107
+ var _this$mutateOptions$o3, _this$mutateOptions3, _this$mutateOptions$o4, _this$mutateOptions4;
108
+
109
+ (_this$mutateOptions$o3 = (_this$mutateOptions3 = this.mutateOptions).onError) == null ? void 0 : _this$mutateOptions$o3.call(_this$mutateOptions3, this.currentResult.error, this.currentResult.variables, this.currentResult.context);
110
+ (_this$mutateOptions$o4 = (_this$mutateOptions4 = this.mutateOptions).onSettled) == null ? void 0 : _this$mutateOptions$o4.call(_this$mutateOptions4, undefined, this.currentResult.error, this.currentResult.variables, this.currentResult.context);
111
+ }
112
+ } // Then trigger the listeners
113
+
114
+
115
+ if (options.listeners) {
116
+ this.listeners.forEach(listener => {
117
+ listener(this.currentResult);
118
+ });
119
+ }
120
+ });
121
+ }
122
+
123
+ }
124
+
125
+ export { MutationObserver };
126
+ //# sourceMappingURL=mutationObserver.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationObserver.mjs","sources":["../../src/mutationObserver.ts"],"sourcesContent":["import { Action, getDefaultState, Mutation } from './mutation'\nimport { notifyManager } from './notifyManager'\nimport type { QueryClient } from './queryClient'\nimport { Subscribable } from './subscribable'\nimport type {\n MutateOptions,\n MutationObserverBaseResult,\n MutationObserverResult,\n MutationObserverOptions,\n} from './types'\nimport { shallowEqualObjects } from './utils'\n\n// TYPES\n\ntype MutationObserverListener<TData, TError, TVariables, TContext> = (\n result: MutationObserverResult<TData, TError, TVariables, TContext>,\n) => void\n\ninterface NotifyOptions {\n listeners?: boolean\n onError?: boolean\n onSuccess?: boolean\n}\n\n// CLASS\n\nexport class MutationObserver<\n TData = unknown,\n TError = unknown,\n TVariables = void,\n TContext = unknown,\n> extends Subscribable<\n MutationObserverListener<TData, TError, TVariables, TContext>\n> {\n options!: MutationObserverOptions<TData, TError, TVariables, TContext>\n\n private client: QueryClient\n private currentResult!: MutationObserverResult<\n TData,\n TError,\n TVariables,\n TContext\n >\n private currentMutation?: Mutation<TData, TError, TVariables, TContext>\n private mutateOptions?: MutateOptions<TData, TError, TVariables, TContext>\n\n constructor(\n client: QueryClient,\n options: MutationObserverOptions<TData, TError, TVariables, TContext>,\n ) {\n super()\n\n this.client = client\n this.setOptions(options)\n this.bindMethods()\n this.updateResult()\n }\n\n protected bindMethods(): void {\n this.mutate = this.mutate.bind(this)\n this.reset = this.reset.bind(this)\n }\n\n setOptions(\n options?: MutationObserverOptions<TData, TError, TVariables, TContext>,\n ) {\n const prevOptions = this.options\n this.options = this.client.defaultMutationOptions(options)\n if (!shallowEqualObjects(prevOptions, this.options)) {\n this.client.getMutationCache().notify({\n type: 'observerOptionsUpdated',\n mutation: this.currentMutation,\n observer: this,\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.length) {\n this.currentMutation?.removeObserver(this)\n }\n }\n\n onMutationUpdate(action: Action<TData, TError, TVariables, TContext>): void {\n this.updateResult()\n\n // Determine which callbacks to trigger\n const notifyOptions: NotifyOptions = {\n listeners: true,\n }\n\n if (action.type === 'success') {\n notifyOptions.onSuccess = true\n } else if (action.type === 'error') {\n notifyOptions.onError = true\n }\n\n this.notify(notifyOptions)\n }\n\n getCurrentResult(): MutationObserverResult<\n TData,\n TError,\n TVariables,\n TContext\n > {\n return this.currentResult\n }\n\n reset(): void {\n this.currentMutation = undefined\n this.updateResult()\n this.notify({ listeners: true })\n }\n\n mutate(\n variables?: TVariables,\n options?: MutateOptions<TData, TError, TVariables, TContext>,\n ): Promise<TData> {\n this.mutateOptions = options\n\n if (this.currentMutation) {\n this.currentMutation.removeObserver(this)\n }\n\n this.currentMutation = this.client.getMutationCache().build(this.client, {\n ...this.options,\n variables:\n typeof variables !== 'undefined' ? variables : this.options.variables,\n })\n\n this.currentMutation.addObserver(this)\n\n return this.currentMutation.execute()\n }\n\n private updateResult(): void {\n const state = this.currentMutation\n ? this.currentMutation.state\n : getDefaultState<TData, TError, TVariables, TContext>()\n\n const result: MutationObserverBaseResult<\n TData,\n TError,\n TVariables,\n TContext\n > = {\n ...state,\n isLoading: state.status === 'loading',\n isSuccess: state.status === 'success',\n isError: state.status === 'error',\n isIdle: state.status === 'idle',\n mutate: this.mutate,\n reset: this.reset,\n }\n\n this.currentResult = result as MutationObserverResult<\n TData,\n TError,\n TVariables,\n TContext\n >\n }\n\n private notify(options: NotifyOptions) {\n notifyManager.batch(() => {\n // First trigger the mutate callbacks\n if (this.mutateOptions) {\n if (options.onSuccess) {\n this.mutateOptions.onSuccess?.(\n this.currentResult.data!,\n this.currentResult.variables!,\n this.currentResult.context!,\n )\n this.mutateOptions.onSettled?.(\n this.currentResult.data!,\n null,\n this.currentResult.variables!,\n this.currentResult.context,\n )\n } else if (options.onError) {\n this.mutateOptions.onError?.(\n this.currentResult.error!,\n this.currentResult.variables!,\n this.currentResult.context,\n )\n this.mutateOptions.onSettled?.(\n undefined,\n this.currentResult.error,\n this.currentResult.variables!,\n this.currentResult.context,\n )\n }\n }\n\n // Then trigger the listeners\n if (options.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.currentResult)\n })\n }\n })\n }\n}\n"],"names":["MutationObserver","Subscribable","constructor","client","options","setOptions","bindMethods","updateResult","mutate","bind","reset","prevOptions","defaultMutationOptions","shallowEqualObjects","getMutationCache","notify","type","mutation","currentMutation","observer","onUnsubscribe","listeners","length","removeObserver","onMutationUpdate","action","notifyOptions","onSuccess","onError","getCurrentResult","currentResult","undefined","variables","mutateOptions","build","addObserver","execute","state","getDefaultState","result","isLoading","status","isSuccess","isError","isIdle","notifyManager","batch","data","context","onSettled","error","forEach","listener"],"mappings":";;;;;AAwBA;AAEO,MAAMA,gBAAN,SAKGC,YALH,CAOL;AAaAC,EAAAA,WAAW,CACTC,MADS,EAETC,OAFS,EAGT;AACA,IAAA,KAAA,EAAA,CAAA;IAEA,IAAKD,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKE,CAAAA,UAAL,CAAgBD,OAAhB,CAAA,CAAA;AACA,IAAA,IAAA,CAAKE,WAAL,EAAA,CAAA;AACA,IAAA,IAAA,CAAKC,YAAL,EAAA,CAAA;AACD,GAAA;;AAESD,EAAAA,WAAW,GAAS;IAC5B,IAAKE,CAAAA,MAAL,GAAc,IAAKA,CAAAA,MAAL,CAAYC,IAAZ,CAAiB,IAAjB,CAAd,CAAA;IACA,IAAKC,CAAAA,KAAL,GAAa,IAAKA,CAAAA,KAAL,CAAWD,IAAX,CAAgB,IAAhB,CAAb,CAAA;AACD,GAAA;;EAEDJ,UAAU,CACRD,OADQ,EAER;IACA,MAAMO,WAAW,GAAG,IAAA,CAAKP,OAAzB,CAAA;IACA,IAAKA,CAAAA,OAAL,GAAe,IAAKD,CAAAA,MAAL,CAAYS,sBAAZ,CAAmCR,OAAnC,CAAf,CAAA;;IACA,IAAI,CAACS,mBAAmB,CAACF,WAAD,EAAc,IAAKP,CAAAA,OAAnB,CAAxB,EAAqD;AACnD,MAAA,IAAA,CAAKD,MAAL,CAAYW,gBAAZ,EAAA,CAA+BC,MAA/B,CAAsC;AACpCC,QAAAA,IAAI,EAAE,wBAD8B;QAEpCC,QAAQ,EAAE,KAAKC,eAFqB;AAGpCC,QAAAA,QAAQ,EAAE,IAAA;OAHZ,CAAA,CAAA;AAKD,KAAA;AACF,GAAA;;AAESC,EAAAA,aAAa,GAAS;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAKC,SAAL,CAAeC,MAApB,EAA4B;AAAA,MAAA,IAAA,qBAAA,CAAA;;AAC1B,MAAA,CAAA,qBAAA,GAAA,IAAA,CAAKJ,eAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAsBK,cAAtB,CAAqC,IAArC,CAAA,CAAA;AACD,KAAA;AACF,GAAA;;EAEDC,gBAAgB,CAACC,MAAD,EAA4D;IAC1E,IAAKlB,CAAAA,YAAL,GAD0E;;AAI1E,IAAA,MAAMmB,aAA4B,GAAG;AACnCL,MAAAA,SAAS,EAAE,IAAA;KADb,CAAA;;AAIA,IAAA,IAAII,MAAM,CAACT,IAAP,KAAgB,SAApB,EAA+B;MAC7BU,aAAa,CAACC,SAAd,GAA0B,IAA1B,CAAA;AACD,KAFD,MAEO,IAAIF,MAAM,CAACT,IAAP,KAAgB,OAApB,EAA6B;MAClCU,aAAa,CAACE,OAAd,GAAwB,IAAxB,CAAA;AACD,KAAA;;IAED,IAAKb,CAAAA,MAAL,CAAYW,aAAZ,CAAA,CAAA;AACD,GAAA;;AAEDG,EAAAA,gBAAgB,GAKd;AACA,IAAA,OAAO,KAAKC,aAAZ,CAAA;AACD,GAAA;;AAEDpB,EAAAA,KAAK,GAAS;IACZ,IAAKQ,CAAAA,eAAL,GAAuBa,SAAvB,CAAA;AACA,IAAA,IAAA,CAAKxB,YAAL,EAAA,CAAA;AACA,IAAA,IAAA,CAAKQ,MAAL,CAAY;AAAEM,MAAAA,SAAS,EAAE,IAAA;KAAzB,CAAA,CAAA;AACD,GAAA;;AAEDb,EAAAA,MAAM,CACJwB,SADI,EAEJ5B,OAFI,EAGY;IAChB,IAAK6B,CAAAA,aAAL,GAAqB7B,OAArB,CAAA;;IAEA,IAAI,IAAA,CAAKc,eAAT,EAA0B;AACxB,MAAA,IAAA,CAAKA,eAAL,CAAqBK,cAArB,CAAoC,IAApC,CAAA,CAAA;AACD,KAAA;;AAED,IAAA,IAAA,CAAKL,eAAL,GAAuB,IAAKf,CAAAA,MAAL,CAAYW,gBAAZ,EAAA,CAA+BoB,KAA/B,CAAqC,KAAK/B,MAA1C,EAAkD,EACvE,GAAG,KAAKC,OAD+D;MAEvE4B,SAAS,EACP,OAAOA,SAAP,KAAqB,WAArB,GAAmCA,SAAnC,GAA+C,IAAK5B,CAAAA,OAAL,CAAa4B,SAAAA;AAHS,KAAlD,CAAvB,CAAA;AAMA,IAAA,IAAA,CAAKd,eAAL,CAAqBiB,WAArB,CAAiC,IAAjC,CAAA,CAAA;AAEA,IAAA,OAAO,IAAKjB,CAAAA,eAAL,CAAqBkB,OAArB,EAAP,CAAA;AACD,GAAA;;AAEO7B,EAAAA,YAAY,GAAS;IAC3B,MAAM8B,KAAK,GAAG,IAAA,CAAKnB,eAAL,GACV,IAAKA,CAAAA,eAAL,CAAqBmB,KADX,GAEVC,eAAe,EAFnB,CAAA;AAIA,IAAA,MAAMC,MAKL,GAAG,EACF,GAAGF,KADD;AAEFG,MAAAA,SAAS,EAAEH,KAAK,CAACI,MAAN,KAAiB,SAF1B;AAGFC,MAAAA,SAAS,EAAEL,KAAK,CAACI,MAAN,KAAiB,SAH1B;AAIFE,MAAAA,OAAO,EAAEN,KAAK,CAACI,MAAN,KAAiB,OAJxB;AAKFG,MAAAA,MAAM,EAAEP,KAAK,CAACI,MAAN,KAAiB,MALvB;MAMFjC,MAAM,EAAE,KAAKA,MANX;AAOFE,MAAAA,KAAK,EAAE,IAAKA,CAAAA,KAAAA;KAZd,CAAA;IAeA,IAAKoB,CAAAA,aAAL,GAAqBS,MAArB,CAAA;AAMD,GAAA;;EAEOxB,MAAM,CAACX,OAAD,EAAyB;IACrCyC,aAAa,CAACC,KAAd,CAAoB,MAAM;AACxB;MACA,IAAI,IAAA,CAAKb,aAAT,EAAwB;QACtB,IAAI7B,OAAO,CAACuB,SAAZ,EAAuB;AAAA,UAAA,IAAA,qBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,oBAAA,CAAA;;AACrB,UAAA,CAAA,qBAAA,GAAA,CAAA,mBAAA,GAAA,IAAA,CAAKM,aAAL,EAAmBN,SAAnB,KACE,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,IAAA,CAAA,mBAAA,EAAA,IAAA,CAAKG,aAAL,CAAmBiB,IADrB,EAEE,IAAA,CAAKjB,aAAL,CAAmBE,SAFrB,EAGE,IAAKF,CAAAA,aAAL,CAAmBkB,OAHrB,CAAA,CAAA;AAKA,UAAA,CAAA,sBAAA,GAAA,CAAA,oBAAA,GAAA,IAAA,CAAKf,aAAL,EAAmBgB,SAAnB,uEACE,IAAKnB,CAAAA,aAAL,CAAmBiB,IADrB,EAEE,IAFF,EAGE,IAAA,CAAKjB,aAAL,CAAmBE,SAHrB,EAIE,IAAKF,CAAAA,aAAL,CAAmBkB,OAJrB,CAAA,CAAA;AAMD,SAZD,MAYO,IAAI5C,OAAO,CAACwB,OAAZ,EAAqB;AAAA,UAAA,IAAA,sBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,oBAAA,CAAA;;AAC1B,UAAA,CAAA,sBAAA,GAAA,CAAA,oBAAA,GAAA,IAAA,CAAKK,aAAL,EAAmBL,OAAnB,KACE,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAA,IAAA,CAAA,oBAAA,EAAA,IAAA,CAAKE,aAAL,CAAmBoB,KADrB,EAEE,IAAA,CAAKpB,aAAL,CAAmBE,SAFrB,EAGE,IAAKF,CAAAA,aAAL,CAAmBkB,OAHrB,CAAA,CAAA;AAKA,UAAA,CAAA,sBAAA,GAAA,CAAA,oBAAA,GAAA,IAAA,CAAKf,aAAL,EAAmBgB,SAAnB,uEACElB,SADF,EAEE,KAAKD,aAAL,CAAmBoB,KAFrB,EAGE,IAAA,CAAKpB,aAAL,CAAmBE,SAHrB,EAIE,IAAKF,CAAAA,aAAL,CAAmBkB,OAJrB,CAAA,CAAA;AAMD,SAAA;AACF,OA5BuB;;;MA+BxB,IAAI5C,OAAO,CAACiB,SAAZ,EAAuB;AACrB,QAAA,IAAA,CAAKA,SAAL,CAAe8B,OAAf,CAAwBC,QAAD,IAAc;UACnCA,QAAQ,CAAC,IAAKtB,CAAAA,aAAN,CAAR,CAAA;SADF,CAAA,CAAA;AAGD,OAAA;KAnCH,CAAA,CAAA;AAqCD,GAAA;;AAzKD;;;;"}
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var utils = require('./utils.js');
6
+
7
+ function createNotifyManager() {
8
+ let queue = [];
9
+ let transactions = 0;
10
+
11
+ let notifyFn = callback => {
12
+ callback();
13
+ };
14
+
15
+ let batchNotifyFn = callback => {
16
+ callback();
17
+ };
18
+
19
+ const batch = callback => {
20
+ let result;
21
+ transactions++;
22
+
23
+ try {
24
+ result = callback();
25
+ } finally {
26
+ transactions--;
27
+
28
+ if (!transactions) {
29
+ flush();
30
+ }
31
+ }
32
+
33
+ return result;
34
+ };
35
+
36
+ const schedule = callback => {
37
+ if (transactions) {
38
+ queue.push(callback);
39
+ } else {
40
+ utils.scheduleMicrotask(() => {
41
+ notifyFn(callback);
42
+ });
43
+ }
44
+ };
45
+ /**
46
+ * All calls to the wrapped function will be batched.
47
+ */
48
+
49
+
50
+ const batchCalls = callback => {
51
+ return (...args) => {
52
+ schedule(() => {
53
+ callback(...args);
54
+ });
55
+ };
56
+ };
57
+
58
+ const flush = () => {
59
+ const originalQueue = queue;
60
+ queue = [];
61
+
62
+ if (originalQueue.length) {
63
+ utils.scheduleMicrotask(() => {
64
+ batchNotifyFn(() => {
65
+ originalQueue.forEach(callback => {
66
+ notifyFn(callback);
67
+ });
68
+ });
69
+ });
70
+ }
71
+ };
72
+ /**
73
+ * Use this method to set a custom notify function.
74
+ * This can be used to for example wrap notifications with `React.act` while running tests.
75
+ */
76
+
77
+
78
+ const setNotifyFunction = fn => {
79
+ notifyFn = fn;
80
+ };
81
+ /**
82
+ * Use this method to set a custom function to batch notifications together into a single tick.
83
+ * By default React Query will use the batch function provided by ReactDOM or React Native.
84
+ */
85
+
86
+
87
+ const setBatchNotifyFunction = fn => {
88
+ batchNotifyFn = fn;
89
+ };
90
+
91
+ return {
92
+ batch,
93
+ batchCalls,
94
+ schedule,
95
+ setNotifyFunction,
96
+ setBatchNotifyFunction
97
+ };
98
+ } // SINGLETON
99
+
100
+ const notifyManager = createNotifyManager();
101
+
102
+ exports.createNotifyManager = createNotifyManager;
103
+ exports.notifyManager = notifyManager;
104
+ //# sourceMappingURL=notifyManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifyManager.js","sources":["../../src/notifyManager.ts"],"sourcesContent":["import { scheduleMicrotask } from './utils'\n\n// TYPES\n\ntype NotifyCallback = () => void\n\ntype NotifyFunction = (callback: () => void) => void\n\ntype BatchNotifyFunction = (callback: () => void) => void\n\nexport function createNotifyManager() {\n let queue: NotifyCallback[] = []\n let transactions = 0\n let notifyFn: NotifyFunction = (callback) => {\n callback()\n }\n let batchNotifyFn: BatchNotifyFunction = (callback: () => void) => {\n callback()\n }\n\n const batch = <T>(callback: () => T): T => {\n let result\n transactions++\n try {\n result = callback()\n } finally {\n transactions--\n if (!transactions) {\n flush()\n }\n }\n return result\n }\n\n const schedule = (callback: NotifyCallback): void => {\n if (transactions) {\n queue.push(callback)\n } else {\n scheduleMicrotask(() => {\n notifyFn(callback)\n })\n }\n }\n\n /**\n * All calls to the wrapped function will be batched.\n */\n const batchCalls = <T extends Function>(callback: T): T => {\n return ((...args: any[]) => {\n schedule(() => {\n callback(...args)\n })\n }) as any\n }\n\n const flush = (): void => {\n const originalQueue = queue\n queue = []\n if (originalQueue.length) {\n scheduleMicrotask(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback)\n })\n })\n })\n }\n }\n\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n const setNotifyFunction = (fn: NotifyFunction) => {\n notifyFn = fn\n }\n\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n const setBatchNotifyFunction = (fn: BatchNotifyFunction) => {\n batchNotifyFn = fn\n }\n\n return {\n batch,\n batchCalls,\n schedule,\n setNotifyFunction,\n setBatchNotifyFunction,\n } as const\n}\n\n// SINGLETON\nexport const notifyManager = createNotifyManager()\n"],"names":["createNotifyManager","queue","transactions","notifyFn","callback","batchNotifyFn","batch","result","flush","schedule","push","scheduleMicrotask","batchCalls","args","originalQueue","length","forEach","setNotifyFunction","fn","setBatchNotifyFunction","notifyManager"],"mappings":";;;;;;AAUO,SAASA,mBAAT,GAA+B;EACpC,IAAIC,KAAuB,GAAG,EAA9B,CAAA;EACA,IAAIC,YAAY,GAAG,CAAnB,CAAA;;EACA,IAAIC,QAAwB,GAAIC,QAAD,IAAc;IAC3CA,QAAQ,EAAA,CAAA;GADV,CAAA;;EAGA,IAAIC,aAAkC,GAAID,QAAD,IAA0B;IACjEA,QAAQ,EAAA,CAAA;GADV,CAAA;;EAIA,MAAME,KAAK,GAAOF,QAAJ,IAA6B;AACzC,IAAA,IAAIG,MAAJ,CAAA;IACAL,YAAY,EAAA,CAAA;;IACZ,IAAI;MACFK,MAAM,GAAGH,QAAQ,EAAjB,CAAA;AACD,KAFD,SAEU;MACRF,YAAY,EAAA,CAAA;;MACZ,IAAI,CAACA,YAAL,EAAmB;QACjBM,KAAK,EAAA,CAAA;AACN,OAAA;AACF,KAAA;;AACD,IAAA,OAAOD,MAAP,CAAA;GAXF,CAAA;;EAcA,MAAME,QAAQ,GAAIL,QAAD,IAAoC;AACnD,IAAA,IAAIF,YAAJ,EAAkB;MAChBD,KAAK,CAACS,IAAN,CAAWN,QAAX,CAAA,CAAA;AACD,KAFD,MAEO;AACLO,MAAAA,uBAAiB,CAAC,MAAM;QACtBR,QAAQ,CAACC,QAAD,CAAR,CAAA;AACD,OAFgB,CAAjB,CAAA;AAGD,KAAA;GAPH,CAAA;AAUA;AACF;AACA;;;EACE,MAAMQ,UAAU,GAAwBR,QAArB,IAAwC;IACzD,OAAQ,CAAC,GAAGS,IAAJ,KAAoB;AAC1BJ,MAAAA,QAAQ,CAAC,MAAM;QACbL,QAAQ,CAAC,GAAGS,IAAJ,CAAR,CAAA;AACD,OAFO,CAAR,CAAA;KADF,CAAA;GADF,CAAA;;EAQA,MAAML,KAAK,GAAG,MAAY;IACxB,MAAMM,aAAa,GAAGb,KAAtB,CAAA;AACAA,IAAAA,KAAK,GAAG,EAAR,CAAA;;IACA,IAAIa,aAAa,CAACC,MAAlB,EAA0B;AACxBJ,MAAAA,uBAAiB,CAAC,MAAM;AACtBN,QAAAA,aAAa,CAAC,MAAM;AAClBS,UAAAA,aAAa,CAACE,OAAd,CAAuBZ,QAAD,IAAc;YAClCD,QAAQ,CAACC,QAAD,CAAR,CAAA;WADF,CAAA,CAAA;AAGD,SAJY,CAAb,CAAA;AAKD,OANgB,CAAjB,CAAA;AAOD,KAAA;GAXH,CAAA;AAcA;AACF;AACA;AACA;;;EACE,MAAMa,iBAAiB,GAAIC,EAAD,IAAwB;AAChDf,IAAAA,QAAQ,GAAGe,EAAX,CAAA;GADF,CAAA;AAIA;AACF;AACA;AACA;;;EACE,MAAMC,sBAAsB,GAAID,EAAD,IAA6B;AAC1Db,IAAAA,aAAa,GAAGa,EAAhB,CAAA;GADF,CAAA;;EAIA,OAAO;IACLZ,KADK;IAELM,UAFK;IAGLH,QAHK;IAILQ,iBAJK;AAKLE,IAAAA,sBAAAA;GALF,CAAA;AAOD;;AAGYC,MAAAA,aAAa,GAAGpB,mBAAmB;;;;;"}
@@ -0,0 +1,99 @@
1
+ import { scheduleMicrotask } from './utils.mjs';
2
+
3
+ function createNotifyManager() {
4
+ let queue = [];
5
+ let transactions = 0;
6
+
7
+ let notifyFn = callback => {
8
+ callback();
9
+ };
10
+
11
+ let batchNotifyFn = callback => {
12
+ callback();
13
+ };
14
+
15
+ const batch = callback => {
16
+ let result;
17
+ transactions++;
18
+
19
+ try {
20
+ result = callback();
21
+ } finally {
22
+ transactions--;
23
+
24
+ if (!transactions) {
25
+ flush();
26
+ }
27
+ }
28
+
29
+ return result;
30
+ };
31
+
32
+ const schedule = callback => {
33
+ if (transactions) {
34
+ queue.push(callback);
35
+ } else {
36
+ scheduleMicrotask(() => {
37
+ notifyFn(callback);
38
+ });
39
+ }
40
+ };
41
+ /**
42
+ * All calls to the wrapped function will be batched.
43
+ */
44
+
45
+
46
+ const batchCalls = callback => {
47
+ return (...args) => {
48
+ schedule(() => {
49
+ callback(...args);
50
+ });
51
+ };
52
+ };
53
+
54
+ const flush = () => {
55
+ const originalQueue = queue;
56
+ queue = [];
57
+
58
+ if (originalQueue.length) {
59
+ scheduleMicrotask(() => {
60
+ batchNotifyFn(() => {
61
+ originalQueue.forEach(callback => {
62
+ notifyFn(callback);
63
+ });
64
+ });
65
+ });
66
+ }
67
+ };
68
+ /**
69
+ * Use this method to set a custom notify function.
70
+ * This can be used to for example wrap notifications with `React.act` while running tests.
71
+ */
72
+
73
+
74
+ const setNotifyFunction = fn => {
75
+ notifyFn = fn;
76
+ };
77
+ /**
78
+ * Use this method to set a custom function to batch notifications together into a single tick.
79
+ * By default React Query will use the batch function provided by ReactDOM or React Native.
80
+ */
81
+
82
+
83
+ const setBatchNotifyFunction = fn => {
84
+ batchNotifyFn = fn;
85
+ };
86
+
87
+ return {
88
+ batch,
89
+ batchCalls,
90
+ schedule,
91
+ setNotifyFunction,
92
+ setBatchNotifyFunction
93
+ };
94
+ } // SINGLETON
95
+
96
+ const notifyManager = createNotifyManager();
97
+
98
+ export { createNotifyManager, notifyManager };
99
+ //# sourceMappingURL=notifyManager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifyManager.mjs","sources":["../../src/notifyManager.ts"],"sourcesContent":["import { scheduleMicrotask } from './utils'\n\n// TYPES\n\ntype NotifyCallback = () => void\n\ntype NotifyFunction = (callback: () => void) => void\n\ntype BatchNotifyFunction = (callback: () => void) => void\n\nexport function createNotifyManager() {\n let queue: NotifyCallback[] = []\n let transactions = 0\n let notifyFn: NotifyFunction = (callback) => {\n callback()\n }\n let batchNotifyFn: BatchNotifyFunction = (callback: () => void) => {\n callback()\n }\n\n const batch = <T>(callback: () => T): T => {\n let result\n transactions++\n try {\n result = callback()\n } finally {\n transactions--\n if (!transactions) {\n flush()\n }\n }\n return result\n }\n\n const schedule = (callback: NotifyCallback): void => {\n if (transactions) {\n queue.push(callback)\n } else {\n scheduleMicrotask(() => {\n notifyFn(callback)\n })\n }\n }\n\n /**\n * All calls to the wrapped function will be batched.\n */\n const batchCalls = <T extends Function>(callback: T): T => {\n return ((...args: any[]) => {\n schedule(() => {\n callback(...args)\n })\n }) as any\n }\n\n const flush = (): void => {\n const originalQueue = queue\n queue = []\n if (originalQueue.length) {\n scheduleMicrotask(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback)\n })\n })\n })\n }\n }\n\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n const setNotifyFunction = (fn: NotifyFunction) => {\n notifyFn = fn\n }\n\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n const setBatchNotifyFunction = (fn: BatchNotifyFunction) => {\n batchNotifyFn = fn\n }\n\n return {\n batch,\n batchCalls,\n schedule,\n setNotifyFunction,\n setBatchNotifyFunction,\n } as const\n}\n\n// SINGLETON\nexport const notifyManager = createNotifyManager()\n"],"names":["createNotifyManager","queue","transactions","notifyFn","callback","batchNotifyFn","batch","result","flush","schedule","push","scheduleMicrotask","batchCalls","args","originalQueue","length","forEach","setNotifyFunction","fn","setBatchNotifyFunction","notifyManager"],"mappings":";;AAUO,SAASA,mBAAT,GAA+B;EACpC,IAAIC,KAAuB,GAAG,EAA9B,CAAA;EACA,IAAIC,YAAY,GAAG,CAAnB,CAAA;;EACA,IAAIC,QAAwB,GAAIC,QAAD,IAAc;IAC3CA,QAAQ,EAAA,CAAA;GADV,CAAA;;EAGA,IAAIC,aAAkC,GAAID,QAAD,IAA0B;IACjEA,QAAQ,EAAA,CAAA;GADV,CAAA;;EAIA,MAAME,KAAK,GAAOF,QAAJ,IAA6B;AACzC,IAAA,IAAIG,MAAJ,CAAA;IACAL,YAAY,EAAA,CAAA;;IACZ,IAAI;MACFK,MAAM,GAAGH,QAAQ,EAAjB,CAAA;AACD,KAFD,SAEU;MACRF,YAAY,EAAA,CAAA;;MACZ,IAAI,CAACA,YAAL,EAAmB;QACjBM,KAAK,EAAA,CAAA;AACN,OAAA;AACF,KAAA;;AACD,IAAA,OAAOD,MAAP,CAAA;GAXF,CAAA;;EAcA,MAAME,QAAQ,GAAIL,QAAD,IAAoC;AACnD,IAAA,IAAIF,YAAJ,EAAkB;MAChBD,KAAK,CAACS,IAAN,CAAWN,QAAX,CAAA,CAAA;AACD,KAFD,MAEO;AACLO,MAAAA,iBAAiB,CAAC,MAAM;QACtBR,QAAQ,CAACC,QAAD,CAAR,CAAA;AACD,OAFgB,CAAjB,CAAA;AAGD,KAAA;GAPH,CAAA;AAUA;AACF;AACA;;;EACE,MAAMQ,UAAU,GAAwBR,QAArB,IAAwC;IACzD,OAAQ,CAAC,GAAGS,IAAJ,KAAoB;AAC1BJ,MAAAA,QAAQ,CAAC,MAAM;QACbL,QAAQ,CAAC,GAAGS,IAAJ,CAAR,CAAA;AACD,OAFO,CAAR,CAAA;KADF,CAAA;GADF,CAAA;;EAQA,MAAML,KAAK,GAAG,MAAY;IACxB,MAAMM,aAAa,GAAGb,KAAtB,CAAA;AACAA,IAAAA,KAAK,GAAG,EAAR,CAAA;;IACA,IAAIa,aAAa,CAACC,MAAlB,EAA0B;AACxBJ,MAAAA,iBAAiB,CAAC,MAAM;AACtBN,QAAAA,aAAa,CAAC,MAAM;AAClBS,UAAAA,aAAa,CAACE,OAAd,CAAuBZ,QAAD,IAAc;YAClCD,QAAQ,CAACC,QAAD,CAAR,CAAA;WADF,CAAA,CAAA;AAGD,SAJY,CAAb,CAAA;AAKD,OANgB,CAAjB,CAAA;AAOD,KAAA;GAXH,CAAA;AAcA;AACF;AACA;AACA;;;EACE,MAAMa,iBAAiB,GAAIC,EAAD,IAAwB;AAChDf,IAAAA,QAAQ,GAAGe,EAAX,CAAA;GADF,CAAA;AAIA;AACF;AACA;AACA;;;EACE,MAAMC,sBAAsB,GAAID,EAAD,IAA6B;AAC1Db,IAAAA,aAAa,GAAGa,EAAhB,CAAA;GADF,CAAA;;EAIA,OAAO;IACLZ,KADK;IAELM,UAFK;IAGLH,QAHK;IAILQ,iBAJK;AAKLE,IAAAA,sBAAAA;GALF,CAAA;AAOD;;AAGYC,MAAAA,aAAa,GAAGpB,mBAAmB;;;;"}