@tanstack/query-core 4.39.0 → 4.39.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/build/lib/focusManager.esm.js +91 -0
  2. package/build/lib/focusManager.esm.js.map +1 -0
  3. package/build/lib/focusManager.js +96 -0
  4. package/build/lib/focusManager.js.map +1 -0
  5. package/build/lib/focusManager.mjs +91 -0
  6. package/build/lib/focusManager.mjs.map +1 -0
  7. package/build/lib/hydration.esm.js +109 -0
  8. package/build/lib/hydration.esm.js.map +1 -0
  9. package/build/lib/hydration.js +116 -0
  10. package/build/lib/hydration.js.map +1 -0
  11. package/build/lib/hydration.mjs +109 -0
  12. package/build/lib/hydration.mjs.map +1 -0
  13. package/build/lib/index.esm.js +15 -0
  14. package/build/lib/index.esm.js.map +1 -0
  15. package/build/lib/index.js +48 -0
  16. package/build/lib/index.js.map +1 -0
  17. package/build/lib/index.mjs +15 -0
  18. package/build/lib/index.mjs.map +1 -0
  19. package/build/lib/infiniteQueryBehavior.esm.js +146 -0
  20. package/build/lib/infiniteQueryBehavior.esm.js.map +1 -0
  21. package/build/lib/infiniteQueryBehavior.js +154 -0
  22. package/build/lib/infiniteQueryBehavior.js.map +1 -0
  23. package/build/lib/infiniteQueryBehavior.mjs +146 -0
  24. package/build/lib/infiniteQueryBehavior.mjs.map +1 -0
  25. package/build/lib/infiniteQueryObserver.esm.js +85 -0
  26. package/build/lib/infiniteQueryObserver.esm.js.map +1 -0
  27. package/build/lib/infiniteQueryObserver.js +89 -0
  28. package/build/lib/infiniteQueryObserver.js.map +1 -0
  29. package/build/lib/infiniteQueryObserver.mjs +85 -0
  30. package/build/lib/infiniteQueryObserver.mjs.map +1 -0
  31. package/build/lib/logger.esm.js +4 -0
  32. package/build/lib/logger.esm.js.map +1 -0
  33. package/build/lib/logger.js +8 -0
  34. package/build/lib/logger.js.map +1 -0
  35. package/build/lib/logger.mjs +4 -0
  36. package/build/lib/logger.mjs.map +1 -0
  37. package/build/lib/logger.native.esm.js +12 -0
  38. package/build/lib/logger.native.esm.js.map +1 -0
  39. package/build/lib/logger.native.js +16 -0
  40. package/build/lib/logger.native.js.map +1 -0
  41. package/build/lib/logger.native.mjs +12 -0
  42. package/build/lib/logger.native.mjs.map +1 -0
  43. package/build/lib/mutation.esm.js +261 -0
  44. package/build/lib/mutation.esm.js.map +1 -0
  45. package/build/lib/mutation.js +266 -0
  46. package/build/lib/mutation.js.map +1 -0
  47. package/build/lib/mutation.mjs +261 -0
  48. package/build/lib/mutation.mjs.map +1 -0
  49. package/build/lib/mutationCache.esm.js +93 -0
  50. package/build/lib/mutationCache.esm.js.map +1 -0
  51. package/build/lib/mutationCache.js +97 -0
  52. package/build/lib/mutationCache.js.map +1 -0
  53. package/build/lib/mutationCache.mjs +93 -0
  54. package/build/lib/mutationCache.mjs.map +1 -0
  55. package/build/lib/mutationObserver.esm.js +134 -0
  56. package/build/lib/mutationObserver.esm.js.map +1 -0
  57. package/build/lib/mutationObserver.js +138 -0
  58. package/build/lib/mutationObserver.js.map +1 -0
  59. package/build/lib/mutationObserver.mjs +134 -0
  60. package/build/lib/mutationObserver.mjs.map +1 -0
  61. package/build/lib/notifyManager.esm.js +99 -0
  62. package/build/lib/notifyManager.esm.js.map +1 -0
  63. package/build/lib/notifyManager.js +104 -0
  64. package/build/lib/notifyManager.js.map +1 -0
  65. package/build/lib/notifyManager.mjs +99 -0
  66. package/build/lib/notifyManager.mjs.map +1 -0
  67. package/build/lib/onlineManager.esm.js +93 -0
  68. package/build/lib/onlineManager.esm.js.map +1 -0
  69. package/build/lib/onlineManager.js +98 -0
  70. package/build/lib/onlineManager.js.map +1 -0
  71. package/build/lib/onlineManager.mjs +93 -0
  72. package/build/lib/onlineManager.mjs.map +1 -0
  73. package/build/lib/queriesObserver.esm.js +168 -0
  74. package/build/lib/queriesObserver.esm.js.map +1 -0
  75. package/build/lib/queriesObserver.js +172 -0
  76. package/build/lib/queriesObserver.js.map +1 -0
  77. package/build/lib/queriesObserver.mjs +168 -0
  78. package/build/lib/queriesObserver.mjs.map +1 -0
  79. package/build/lib/query.esm.js +475 -0
  80. package/build/lib/query.esm.js.map +1 -0
  81. package/build/lib/query.js +479 -0
  82. package/build/lib/query.js.map +1 -0
  83. package/build/lib/query.mjs +475 -0
  84. package/build/lib/query.mjs.map +1 -0
  85. package/build/lib/queryCache.esm.js +133 -0
  86. package/build/lib/queryCache.esm.js.map +1 -0
  87. package/build/lib/queryCache.js +137 -0
  88. package/build/lib/queryCache.js.map +1 -0
  89. package/build/lib/queryCache.mjs +133 -0
  90. package/build/lib/queryCache.mjs.map +1 -0
  91. package/build/lib/queryClient.esm.js +402 -0
  92. package/build/lib/queryClient.esm.js.map +1 -0
  93. package/build/lib/queryClient.js +406 -0
  94. package/build/lib/queryClient.js.map +1 -0
  95. package/build/lib/queryClient.mjs +402 -0
  96. package/build/lib/queryClient.mjs.map +1 -0
  97. package/build/lib/queryObserver.esm.js +580 -0
  98. package/build/lib/queryObserver.esm.js.map +1 -0
  99. package/build/lib/queryObserver.js +584 -0
  100. package/build/lib/queryObserver.js.map +1 -0
  101. package/build/lib/queryObserver.mjs +580 -0
  102. package/build/lib/queryObserver.mjs.map +1 -0
  103. package/build/lib/removable.esm.js +33 -0
  104. package/build/lib/removable.esm.js.map +1 -0
  105. package/build/lib/removable.js +37 -0
  106. package/build/lib/removable.js.map +1 -0
  107. package/build/lib/removable.mjs +33 -0
  108. package/build/lib/removable.mjs.map +1 -0
  109. package/build/lib/retryer.esm.js +167 -0
  110. package/build/lib/retryer.esm.js.map +1 -0
  111. package/build/lib/retryer.js +174 -0
  112. package/build/lib/retryer.js.map +1 -0
  113. package/build/lib/retryer.mjs +167 -0
  114. package/build/lib/retryer.mjs.map +1 -0
  115. package/build/lib/subscribable.esm.js +32 -0
  116. package/build/lib/subscribable.esm.js.map +1 -0
  117. package/build/lib/subscribable.js +36 -0
  118. package/build/lib/subscribable.js.map +1 -0
  119. package/build/lib/subscribable.mjs +32 -0
  120. package/build/lib/subscribable.mjs.map +1 -0
  121. package/build/lib/utils.esm.js +320 -0
  122. package/build/lib/utils.esm.js.map +1 -0
  123. package/build/lib/utils.js +350 -0
  124. package/build/lib/utils.js.map +1 -0
  125. package/build/lib/utils.mjs +320 -0
  126. package/build/lib/utils.mjs.map +1 -0
  127. package/build/umd/index.development.js +3361 -0
  128. package/build/umd/index.development.js.map +1 -0
  129. package/build/umd/index.production.js +2 -0
  130. package/build/umd/index.production.js.map +1 -0
  131. package/package.json +1 -1
@@ -0,0 +1,261 @@
1
+ import { defaultLogger } from './logger.esm.js';
2
+ import { notifyManager } from './notifyManager.esm.js';
3
+ import { Removable } from './removable.esm.js';
4
+ import { createRetryer, canFetch } from './retryer.esm.js';
5
+
6
+ // CLASS
7
+ class Mutation extends Removable {
8
+ constructor(config) {
9
+ super();
10
+ this.defaultOptions = config.defaultOptions;
11
+ this.mutationId = config.mutationId;
12
+ this.mutationCache = config.mutationCache;
13
+ this.logger = config.logger || defaultLogger;
14
+ this.observers = [];
15
+ this.state = config.state || getDefaultState();
16
+ this.setOptions(config.options);
17
+ this.scheduleGc();
18
+ }
19
+
20
+ setOptions(options) {
21
+ this.options = { ...this.defaultOptions,
22
+ ...options
23
+ };
24
+ this.updateCacheTime(this.options.cacheTime);
25
+ }
26
+
27
+ get meta() {
28
+ return this.options.meta;
29
+ }
30
+
31
+ setState(state) {
32
+ this.dispatch({
33
+ type: 'setState',
34
+ state
35
+ });
36
+ }
37
+
38
+ addObserver(observer) {
39
+ if (!this.observers.includes(observer)) {
40
+ this.observers.push(observer); // Stop the mutation from being garbage collected
41
+
42
+ this.clearGcTimeout();
43
+ this.mutationCache.notify({
44
+ type: 'observerAdded',
45
+ mutation: this,
46
+ observer
47
+ });
48
+ }
49
+ }
50
+
51
+ removeObserver(observer) {
52
+ this.observers = this.observers.filter(x => x !== observer);
53
+ this.scheduleGc();
54
+ this.mutationCache.notify({
55
+ type: 'observerRemoved',
56
+ mutation: this,
57
+ observer
58
+ });
59
+ }
60
+
61
+ optionalRemove() {
62
+ if (!this.observers.length) {
63
+ if (this.state.status === 'loading') {
64
+ this.scheduleGc();
65
+ } else {
66
+ this.mutationCache.remove(this);
67
+ }
68
+ }
69
+ }
70
+
71
+ continue() {
72
+ var _this$retryer$continu, _this$retryer;
73
+
74
+ return (_this$retryer$continu = (_this$retryer = this.retryer) == null ? void 0 : _this$retryer.continue()) != null ? _this$retryer$continu : this.execute();
75
+ }
76
+
77
+ async execute() {
78
+ const executeMutation = () => {
79
+ var _this$options$retry;
80
+
81
+ this.retryer = createRetryer({
82
+ fn: () => {
83
+ if (!this.options.mutationFn) {
84
+ return Promise.reject('No mutationFn found');
85
+ }
86
+
87
+ return this.options.mutationFn(this.state.variables);
88
+ },
89
+ onFail: (failureCount, error) => {
90
+ this.dispatch({
91
+ type: 'failed',
92
+ failureCount,
93
+ error
94
+ });
95
+ },
96
+ onPause: () => {
97
+ this.dispatch({
98
+ type: 'pause'
99
+ });
100
+ },
101
+ onContinue: () => {
102
+ this.dispatch({
103
+ type: 'continue'
104
+ });
105
+ },
106
+ retry: (_this$options$retry = this.options.retry) != null ? _this$options$retry : 0,
107
+ retryDelay: this.options.retryDelay,
108
+ networkMode: this.options.networkMode
109
+ });
110
+ return this.retryer.promise;
111
+ };
112
+
113
+ const restored = this.state.status === 'loading';
114
+
115
+ try {
116
+ var _this$mutationCache$c3, _this$mutationCache$c4, _this$options$onSucce, _this$options2, _this$mutationCache$c5, _this$mutationCache$c6, _this$options$onSettl, _this$options3;
117
+
118
+ if (!restored) {
119
+ var _this$mutationCache$c, _this$mutationCache$c2, _this$options$onMutat, _this$options;
120
+
121
+ this.dispatch({
122
+ type: 'loading',
123
+ variables: this.options.variables
124
+ }); // Notify cache callback
125
+
126
+ await ((_this$mutationCache$c = (_this$mutationCache$c2 = this.mutationCache.config).onMutate) == null ? void 0 : _this$mutationCache$c.call(_this$mutationCache$c2, this.state.variables, this));
127
+ const context = await ((_this$options$onMutat = (_this$options = this.options).onMutate) == null ? void 0 : _this$options$onMutat.call(_this$options, this.state.variables));
128
+
129
+ if (context !== this.state.context) {
130
+ this.dispatch({
131
+ type: 'loading',
132
+ context,
133
+ variables: this.state.variables
134
+ });
135
+ }
136
+ }
137
+
138
+ const data = await executeMutation(); // Notify cache callback
139
+
140
+ await ((_this$mutationCache$c3 = (_this$mutationCache$c4 = this.mutationCache.config).onSuccess) == null ? void 0 : _this$mutationCache$c3.call(_this$mutationCache$c4, data, this.state.variables, this.state.context, this));
141
+ await ((_this$options$onSucce = (_this$options2 = this.options).onSuccess) == null ? void 0 : _this$options$onSucce.call(_this$options2, data, this.state.variables, this.state.context)); // Notify cache callback
142
+
143
+ await ((_this$mutationCache$c5 = (_this$mutationCache$c6 = this.mutationCache.config).onSettled) == null ? void 0 : _this$mutationCache$c5.call(_this$mutationCache$c6, data, null, this.state.variables, this.state.context, this));
144
+ await ((_this$options$onSettl = (_this$options3 = this.options).onSettled) == null ? void 0 : _this$options$onSettl.call(_this$options3, data, null, this.state.variables, this.state.context));
145
+ this.dispatch({
146
+ type: 'success',
147
+ data
148
+ });
149
+ return data;
150
+ } catch (error) {
151
+ try {
152
+ var _this$mutationCache$c7, _this$mutationCache$c8, _this$options$onError, _this$options4, _this$mutationCache$c9, _this$mutationCache$c10, _this$options$onSettl2, _this$options5;
153
+
154
+ // Notify cache callback
155
+ await ((_this$mutationCache$c7 = (_this$mutationCache$c8 = this.mutationCache.config).onError) == null ? void 0 : _this$mutationCache$c7.call(_this$mutationCache$c8, error, this.state.variables, this.state.context, this));
156
+
157
+ if (process.env.NODE_ENV !== 'production') {
158
+ this.logger.error(error);
159
+ }
160
+
161
+ await ((_this$options$onError = (_this$options4 = this.options).onError) == null ? void 0 : _this$options$onError.call(_this$options4, error, this.state.variables, this.state.context)); // Notify cache callback
162
+
163
+ await ((_this$mutationCache$c9 = (_this$mutationCache$c10 = this.mutationCache.config).onSettled) == null ? void 0 : _this$mutationCache$c9.call(_this$mutationCache$c10, undefined, error, this.state.variables, this.state.context, this));
164
+ await ((_this$options$onSettl2 = (_this$options5 = this.options).onSettled) == null ? void 0 : _this$options$onSettl2.call(_this$options5, undefined, error, this.state.variables, this.state.context));
165
+ throw error;
166
+ } finally {
167
+ this.dispatch({
168
+ type: 'error',
169
+ error: error
170
+ });
171
+ }
172
+ }
173
+ }
174
+
175
+ dispatch(action) {
176
+ const reducer = state => {
177
+ switch (action.type) {
178
+ case 'failed':
179
+ return { ...state,
180
+ failureCount: action.failureCount,
181
+ failureReason: action.error
182
+ };
183
+
184
+ case 'pause':
185
+ return { ...state,
186
+ isPaused: true
187
+ };
188
+
189
+ case 'continue':
190
+ return { ...state,
191
+ isPaused: false
192
+ };
193
+
194
+ case 'loading':
195
+ return { ...state,
196
+ context: action.context,
197
+ data: undefined,
198
+ failureCount: 0,
199
+ failureReason: null,
200
+ error: null,
201
+ isPaused: !canFetch(this.options.networkMode),
202
+ status: 'loading',
203
+ variables: action.variables
204
+ };
205
+
206
+ case 'success':
207
+ return { ...state,
208
+ data: action.data,
209
+ failureCount: 0,
210
+ failureReason: null,
211
+ error: null,
212
+ status: 'success',
213
+ isPaused: false
214
+ };
215
+
216
+ case 'error':
217
+ return { ...state,
218
+ data: undefined,
219
+ error: action.error,
220
+ failureCount: state.failureCount + 1,
221
+ failureReason: action.error,
222
+ isPaused: false,
223
+ status: 'error'
224
+ };
225
+
226
+ case 'setState':
227
+ return { ...state,
228
+ ...action.state
229
+ };
230
+ }
231
+ };
232
+
233
+ this.state = reducer(this.state);
234
+ notifyManager.batch(() => {
235
+ this.observers.forEach(observer => {
236
+ observer.onMutationUpdate(action);
237
+ });
238
+ this.mutationCache.notify({
239
+ mutation: this,
240
+ type: 'updated',
241
+ action
242
+ });
243
+ });
244
+ }
245
+
246
+ }
247
+ function getDefaultState() {
248
+ return {
249
+ context: undefined,
250
+ data: undefined,
251
+ error: null,
252
+ failureCount: 0,
253
+ failureReason: null,
254
+ isPaused: false,
255
+ status: 'idle',
256
+ variables: undefined
257
+ };
258
+ }
259
+
260
+ export { Mutation, getDefaultState };
261
+ //# sourceMappingURL=mutation.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation.esm.js","sources":["../../src/mutation.ts"],"sourcesContent":["import { defaultLogger } from './logger'\nimport { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport { canFetch, createRetryer } from './retryer'\nimport type { MutationMeta, MutationOptions, MutationStatus } from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport type { Logger } from './logger'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface MutationConfig<TData, TError, TVariables, TContext> {\n mutationId: number\n mutationCache: MutationCache\n options: MutationOptions<TData, TError, TVariables, TContext>\n logger?: Logger\n defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n state?: MutationState<TData, TError, TVariables, TContext>\n meta?: MutationMeta\n}\n\nexport interface MutationState<\n TData = unknown,\n TError = unknown,\n TVariables = void,\n TContext = unknown,\n> {\n context: TContext | undefined\n data: TData | undefined\n error: TError | null\n failureCount: number\n failureReason: TError | null\n isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError | null\n}\n\ninterface LoadingAction<TVariables, TContext> {\n type: 'loading'\n variables?: TVariables\n context?: TContext\n}\n\ninterface SuccessAction<TData> {\n type: 'success'\n data: TData\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\ninterface SetStateAction<TData, TError, TVariables, TContext> {\n type: 'setState'\n state: MutationState<TData, TError, TVariables, TContext>\n}\n\nexport type Action<TData, TError, TVariables, TContext> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | LoadingAction<TVariables, TContext>\n | PauseAction\n | SetStateAction<TData, TError, TVariables, TContext>\n | SuccessAction<TData>\n\n// CLASS\n\nexport class Mutation<\n TData = unknown,\n TError = unknown,\n TVariables = void,\n TContext = unknown,\n> extends Removable {\n state: MutationState<TData, TError, TVariables, TContext>\n options!: MutationOptions<TData, TError, TVariables, TContext>\n mutationId: number\n\n private observers: MutationObserver<TData, TError, TVariables, TContext>[]\n private defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n private mutationCache: MutationCache\n private logger: Logger\n private retryer?: Retryer<TData>\n\n constructor(config: MutationConfig<TData, TError, TVariables, TContext>) {\n super()\n\n this.defaultOptions = config.defaultOptions\n this.mutationId = config.mutationId\n this.mutationCache = config.mutationCache\n this.logger = config.logger || defaultLogger\n this.observers = []\n this.state = config.state || getDefaultState()\n\n this.setOptions(config.options)\n this.scheduleGc()\n }\n\n setOptions(\n options?: MutationOptions<TData, TError, TVariables, TContext>,\n ): void {\n this.options = { ...this.defaultOptions, ...options }\n\n this.updateCacheTime(this.options.cacheTime)\n }\n\n get meta(): MutationMeta | undefined {\n return this.options.meta\n }\n\n setState(state: MutationState<TData, TError, TVariables, TContext>): void {\n this.dispatch({ type: 'setState', state })\n }\n\n addObserver(observer: MutationObserver<any, any, any, any>): void {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer)\n\n // Stop the mutation from being garbage collected\n this.clearGcTimeout()\n\n this.mutationCache.notify({\n type: 'observerAdded',\n mutation: this,\n observer,\n })\n }\n }\n\n removeObserver(observer: MutationObserver<any, any, any, any>): void {\n this.observers = this.observers.filter((x) => x !== observer)\n\n this.scheduleGc()\n\n this.mutationCache.notify({\n type: 'observerRemoved',\n mutation: this,\n observer,\n })\n }\n\n protected optionalRemove() {\n if (!this.observers.length) {\n if (this.state.status === 'loading') {\n this.scheduleGc()\n } else {\n this.mutationCache.remove(this)\n }\n }\n }\n\n continue(): Promise<unknown> {\n return this.retryer?.continue() ?? this.execute()\n }\n\n async execute(): Promise<TData> {\n const executeMutation = () => {\n this.retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject('No mutationFn found')\n }\n return this.options.mutationFn(this.state.variables!)\n },\n onFail: (failureCount, error) => {\n this.dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.dispatch({ type: 'continue' })\n },\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n })\n\n return this.retryer.promise\n }\n\n const restored = this.state.status === 'loading'\n try {\n if (!restored) {\n this.dispatch({ type: 'loading', variables: this.options.variables! })\n // Notify cache callback\n await this.mutationCache.config.onMutate?.(\n this.state.variables,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n const context = await this.options.onMutate?.(this.state.variables!)\n if (context !== this.state.context) {\n this.dispatch({\n type: 'loading',\n context,\n variables: this.state.variables,\n })\n }\n }\n const data = await executeMutation()\n\n // Notify cache callback\n await this.mutationCache.config.onSuccess?.(\n data,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSuccess?.(\n data,\n this.state.variables!,\n this.state.context!,\n )\n\n // Notify cache callback\n await this.mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(\n data,\n null,\n this.state.variables!,\n this.state.context,\n )\n\n this.dispatch({ type: 'success', data })\n return data\n } catch (error) {\n try {\n // Notify cache callback\n await this.mutationCache.config.onError?.(\n error,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n if (process.env.NODE_ENV !== 'production') {\n this.logger.error(error)\n }\n\n await this.options.onError?.(\n error as TError,\n this.state.variables!,\n this.state.context,\n )\n\n // Notify cache callback\n await this.mutationCache.config.onSettled?.(\n undefined,\n error,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(\n undefined,\n error as TError,\n this.state.variables!,\n this.state.context,\n )\n throw error\n } finally {\n this.dispatch({ type: 'error', error: error as TError })\n }\n }\n }\n\n private dispatch(action: Action<TData, TError, TVariables, TContext>): void {\n const reducer = (\n state: MutationState<TData, TError, TVariables, TContext>,\n ): MutationState<TData, TError, TVariables, TContext> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n isPaused: true,\n }\n case 'continue':\n return {\n ...state,\n isPaused: false,\n }\n case 'loading':\n return {\n ...state,\n context: action.context,\n data: undefined,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: !canFetch(this.options.networkMode),\n status: 'loading',\n variables: action.variables,\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: 'success',\n isPaused: false,\n }\n case 'error':\n return {\n ...state,\n data: undefined,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: 'error',\n }\n case 'setState':\n return {\n ...state,\n ...action.state,\n }\n }\n }\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onMutationUpdate(action)\n })\n this.mutationCache.notify({\n mutation: this,\n type: 'updated',\n action,\n })\n })\n }\n}\n\nexport function getDefaultState<\n TData,\n TError,\n TVariables,\n TContext,\n>(): MutationState<TData, TError, TVariables, TContext> {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: 'idle',\n variables: undefined,\n }\n}\n"],"names":["Mutation","Removable","constructor","config","defaultOptions","mutationId","mutationCache","logger","defaultLogger","observers","state","getDefaultState","setOptions","options","scheduleGc","updateCacheTime","cacheTime","meta","setState","dispatch","type","addObserver","observer","includes","push","clearGcTimeout","notify","mutation","removeObserver","filter","x","optionalRemove","length","status","remove","continue","retryer","execute","executeMutation","createRetryer","fn","mutationFn","Promise","reject","variables","onFail","failureCount","error","onPause","onContinue","retry","retryDelay","networkMode","promise","restored","onMutate","context","data","onSuccess","onSettled","onError","process","env","NODE_ENV","undefined","action","reducer","failureReason","isPaused","canFetch","notifyManager","batch","forEach","onMutationUpdate"],"mappings":"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"}
@@ -0,0 +1,266 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var logger = require('./logger');
6
+ var notifyManager = require('./notifyManager.js');
7
+ var removable = require('./removable.js');
8
+ var retryer = require('./retryer.js');
9
+
10
+ // CLASS
11
+ class Mutation extends removable.Removable {
12
+ constructor(config) {
13
+ super();
14
+ this.defaultOptions = config.defaultOptions;
15
+ this.mutationId = config.mutationId;
16
+ this.mutationCache = config.mutationCache;
17
+ this.logger = config.logger || logger.defaultLogger;
18
+ this.observers = [];
19
+ this.state = config.state || getDefaultState();
20
+ this.setOptions(config.options);
21
+ this.scheduleGc();
22
+ }
23
+
24
+ setOptions(options) {
25
+ this.options = { ...this.defaultOptions,
26
+ ...options
27
+ };
28
+ this.updateCacheTime(this.options.cacheTime);
29
+ }
30
+
31
+ get meta() {
32
+ return this.options.meta;
33
+ }
34
+
35
+ setState(state) {
36
+ this.dispatch({
37
+ type: 'setState',
38
+ state
39
+ });
40
+ }
41
+
42
+ addObserver(observer) {
43
+ if (!this.observers.includes(observer)) {
44
+ this.observers.push(observer); // Stop the mutation from being garbage collected
45
+
46
+ this.clearGcTimeout();
47
+ this.mutationCache.notify({
48
+ type: 'observerAdded',
49
+ mutation: this,
50
+ observer
51
+ });
52
+ }
53
+ }
54
+
55
+ removeObserver(observer) {
56
+ this.observers = this.observers.filter(x => x !== observer);
57
+ this.scheduleGc();
58
+ this.mutationCache.notify({
59
+ type: 'observerRemoved',
60
+ mutation: this,
61
+ observer
62
+ });
63
+ }
64
+
65
+ optionalRemove() {
66
+ if (!this.observers.length) {
67
+ if (this.state.status === 'loading') {
68
+ this.scheduleGc();
69
+ } else {
70
+ this.mutationCache.remove(this);
71
+ }
72
+ }
73
+ }
74
+
75
+ continue() {
76
+ var _this$retryer$continu, _this$retryer;
77
+
78
+ return (_this$retryer$continu = (_this$retryer = this.retryer) == null ? void 0 : _this$retryer.continue()) != null ? _this$retryer$continu : this.execute();
79
+ }
80
+
81
+ async execute() {
82
+ const executeMutation = () => {
83
+ var _this$options$retry;
84
+
85
+ this.retryer = retryer.createRetryer({
86
+ fn: () => {
87
+ if (!this.options.mutationFn) {
88
+ return Promise.reject('No mutationFn found');
89
+ }
90
+
91
+ return this.options.mutationFn(this.state.variables);
92
+ },
93
+ onFail: (failureCount, error) => {
94
+ this.dispatch({
95
+ type: 'failed',
96
+ failureCount,
97
+ error
98
+ });
99
+ },
100
+ onPause: () => {
101
+ this.dispatch({
102
+ type: 'pause'
103
+ });
104
+ },
105
+ onContinue: () => {
106
+ this.dispatch({
107
+ type: 'continue'
108
+ });
109
+ },
110
+ retry: (_this$options$retry = this.options.retry) != null ? _this$options$retry : 0,
111
+ retryDelay: this.options.retryDelay,
112
+ networkMode: this.options.networkMode
113
+ });
114
+ return this.retryer.promise;
115
+ };
116
+
117
+ const restored = this.state.status === 'loading';
118
+
119
+ try {
120
+ var _this$mutationCache$c3, _this$mutationCache$c4, _this$options$onSucce, _this$options2, _this$mutationCache$c5, _this$mutationCache$c6, _this$options$onSettl, _this$options3;
121
+
122
+ if (!restored) {
123
+ var _this$mutationCache$c, _this$mutationCache$c2, _this$options$onMutat, _this$options;
124
+
125
+ this.dispatch({
126
+ type: 'loading',
127
+ variables: this.options.variables
128
+ }); // Notify cache callback
129
+
130
+ await ((_this$mutationCache$c = (_this$mutationCache$c2 = this.mutationCache.config).onMutate) == null ? void 0 : _this$mutationCache$c.call(_this$mutationCache$c2, this.state.variables, this));
131
+ const context = await ((_this$options$onMutat = (_this$options = this.options).onMutate) == null ? void 0 : _this$options$onMutat.call(_this$options, this.state.variables));
132
+
133
+ if (context !== this.state.context) {
134
+ this.dispatch({
135
+ type: 'loading',
136
+ context,
137
+ variables: this.state.variables
138
+ });
139
+ }
140
+ }
141
+
142
+ const data = await executeMutation(); // Notify cache callback
143
+
144
+ await ((_this$mutationCache$c3 = (_this$mutationCache$c4 = this.mutationCache.config).onSuccess) == null ? void 0 : _this$mutationCache$c3.call(_this$mutationCache$c4, data, this.state.variables, this.state.context, this));
145
+ await ((_this$options$onSucce = (_this$options2 = this.options).onSuccess) == null ? void 0 : _this$options$onSucce.call(_this$options2, data, this.state.variables, this.state.context)); // Notify cache callback
146
+
147
+ await ((_this$mutationCache$c5 = (_this$mutationCache$c6 = this.mutationCache.config).onSettled) == null ? void 0 : _this$mutationCache$c5.call(_this$mutationCache$c6, data, null, this.state.variables, this.state.context, this));
148
+ await ((_this$options$onSettl = (_this$options3 = this.options).onSettled) == null ? void 0 : _this$options$onSettl.call(_this$options3, data, null, this.state.variables, this.state.context));
149
+ this.dispatch({
150
+ type: 'success',
151
+ data
152
+ });
153
+ return data;
154
+ } catch (error) {
155
+ try {
156
+ var _this$mutationCache$c7, _this$mutationCache$c8, _this$options$onError, _this$options4, _this$mutationCache$c9, _this$mutationCache$c10, _this$options$onSettl2, _this$options5;
157
+
158
+ // Notify cache callback
159
+ await ((_this$mutationCache$c7 = (_this$mutationCache$c8 = this.mutationCache.config).onError) == null ? void 0 : _this$mutationCache$c7.call(_this$mutationCache$c8, error, this.state.variables, this.state.context, this));
160
+
161
+ if (process.env.NODE_ENV !== 'production') {
162
+ this.logger.error(error);
163
+ }
164
+
165
+ await ((_this$options$onError = (_this$options4 = this.options).onError) == null ? void 0 : _this$options$onError.call(_this$options4, error, this.state.variables, this.state.context)); // Notify cache callback
166
+
167
+ await ((_this$mutationCache$c9 = (_this$mutationCache$c10 = this.mutationCache.config).onSettled) == null ? void 0 : _this$mutationCache$c9.call(_this$mutationCache$c10, undefined, error, this.state.variables, this.state.context, this));
168
+ await ((_this$options$onSettl2 = (_this$options5 = this.options).onSettled) == null ? void 0 : _this$options$onSettl2.call(_this$options5, undefined, error, this.state.variables, this.state.context));
169
+ throw error;
170
+ } finally {
171
+ this.dispatch({
172
+ type: 'error',
173
+ error: error
174
+ });
175
+ }
176
+ }
177
+ }
178
+
179
+ dispatch(action) {
180
+ const reducer = state => {
181
+ switch (action.type) {
182
+ case 'failed':
183
+ return { ...state,
184
+ failureCount: action.failureCount,
185
+ failureReason: action.error
186
+ };
187
+
188
+ case 'pause':
189
+ return { ...state,
190
+ isPaused: true
191
+ };
192
+
193
+ case 'continue':
194
+ return { ...state,
195
+ isPaused: false
196
+ };
197
+
198
+ case 'loading':
199
+ return { ...state,
200
+ context: action.context,
201
+ data: undefined,
202
+ failureCount: 0,
203
+ failureReason: null,
204
+ error: null,
205
+ isPaused: !retryer.canFetch(this.options.networkMode),
206
+ status: 'loading',
207
+ variables: action.variables
208
+ };
209
+
210
+ case 'success':
211
+ return { ...state,
212
+ data: action.data,
213
+ failureCount: 0,
214
+ failureReason: null,
215
+ error: null,
216
+ status: 'success',
217
+ isPaused: false
218
+ };
219
+
220
+ case 'error':
221
+ return { ...state,
222
+ data: undefined,
223
+ error: action.error,
224
+ failureCount: state.failureCount + 1,
225
+ failureReason: action.error,
226
+ isPaused: false,
227
+ status: 'error'
228
+ };
229
+
230
+ case 'setState':
231
+ return { ...state,
232
+ ...action.state
233
+ };
234
+ }
235
+ };
236
+
237
+ this.state = reducer(this.state);
238
+ notifyManager.notifyManager.batch(() => {
239
+ this.observers.forEach(observer => {
240
+ observer.onMutationUpdate(action);
241
+ });
242
+ this.mutationCache.notify({
243
+ mutation: this,
244
+ type: 'updated',
245
+ action
246
+ });
247
+ });
248
+ }
249
+
250
+ }
251
+ function getDefaultState() {
252
+ return {
253
+ context: undefined,
254
+ data: undefined,
255
+ error: null,
256
+ failureCount: 0,
257
+ failureReason: null,
258
+ isPaused: false,
259
+ status: 'idle',
260
+ variables: undefined
261
+ };
262
+ }
263
+
264
+ exports.Mutation = Mutation;
265
+ exports.getDefaultState = getDefaultState;
266
+ //# sourceMappingURL=mutation.js.map