@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.
- package/build/lib/focusManager.js +91 -0
- package/build/lib/focusManager.js.map +1 -0
- package/build/lib/focusManager.mjs +86 -0
- package/build/lib/focusManager.mjs.map +1 -0
- package/build/lib/hydration.js +102 -0
- package/build/lib/hydration.js.map +1 -0
- package/build/lib/hydration.mjs +97 -0
- package/build/lib/hydration.mjs.map +1 -0
- package/build/lib/index.js +36 -3110
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +13 -3091
- package/build/lib/index.mjs.map +1 -1
- package/build/lib/infiniteQueryBehavior.js +150 -0
- package/build/lib/infiniteQueryBehavior.js.map +1 -0
- package/build/lib/infiniteQueryBehavior.mjs +142 -0
- package/build/lib/infiniteQueryBehavior.mjs.map +1 -0
- package/build/lib/infiniteQueryObserver.js +82 -0
- package/build/lib/infiniteQueryObserver.js.map +1 -0
- package/build/lib/infiniteQueryObserver.mjs +78 -0
- package/build/lib/infiniteQueryObserver.mjs.map +1 -0
- package/build/lib/logger.js +8 -0
- package/build/lib/logger.js.map +1 -0
- package/build/lib/logger.mjs +4 -0
- package/build/lib/logger.mjs.map +1 -0
- package/build/lib/logger.native.js +16 -0
- package/build/lib/logger.native.js.map +1 -0
- package/build/lib/logger.native.mjs +12 -0
- package/build/lib/logger.native.mjs.map +1 -0
- package/build/lib/mutation.js +248 -0
- package/build/lib/mutation.js.map +1 -0
- package/build/lib/mutation.mjs +243 -0
- package/build/lib/mutation.mjs.map +1 -0
- package/build/lib/mutationCache.js +89 -0
- package/build/lib/mutationCache.js.map +1 -0
- package/build/lib/mutationCache.mjs +85 -0
- package/build/lib/mutationCache.mjs.map +1 -0
- package/build/lib/mutationObserver.js +130 -0
- package/build/lib/mutationObserver.js.map +1 -0
- package/build/lib/mutationObserver.mjs +126 -0
- package/build/lib/mutationObserver.mjs.map +1 -0
- package/build/lib/notifyManager.js +104 -0
- package/build/lib/notifyManager.js.map +1 -0
- package/build/lib/notifyManager.mjs +99 -0
- package/build/lib/notifyManager.mjs.map +1 -0
- package/build/lib/onlineManager.js +90 -0
- package/build/lib/onlineManager.js.map +1 -0
- package/build/lib/onlineManager.mjs +85 -0
- package/build/lib/onlineManager.mjs.map +1 -0
- package/build/lib/queriesObserver.js +160 -0
- package/build/lib/queriesObserver.js.map +1 -0
- package/build/lib/queriesObserver.mjs +156 -0
- package/build/lib/queriesObserver.mjs.map +1 -0
- package/build/lib/query.js +464 -0
- package/build/lib/query.js.map +1 -0
- package/build/lib/query.mjs +460 -0
- package/build/lib/query.mjs.map +1 -0
- package/build/lib/queryCache.js +130 -0
- package/build/lib/queryCache.js.map +1 -0
- package/build/lib/queryCache.mjs +126 -0
- package/build/lib/queryCache.mjs.map +1 -0
- package/build/lib/queryClient.js +343 -0
- package/build/lib/queryClient.js.map +1 -0
- package/build/lib/queryClient.mjs +339 -0
- package/build/lib/queryClient.mjs.map +1 -0
- package/build/lib/queryObserver.js +519 -0
- package/build/lib/queryObserver.js.map +1 -0
- package/build/lib/queryObserver.mjs +515 -0
- package/build/lib/queryObserver.mjs.map +1 -0
- package/build/lib/removable.js +37 -0
- package/build/lib/removable.js.map +1 -0
- package/build/lib/removable.mjs +33 -0
- package/build/lib/removable.mjs.map +1 -0
- package/build/lib/retryer.js +167 -0
- package/build/lib/retryer.js.map +1 -0
- package/build/lib/retryer.mjs +160 -0
- package/build/lib/retryer.mjs.map +1 -0
- package/build/lib/subscribable.js +33 -0
- package/build/lib/subscribable.js.map +1 -0
- package/build/lib/subscribable.mjs +29 -0
- package/build/lib/subscribable.mjs.map +1 -0
- package/build/lib/utils.js +348 -0
- package/build/lib/utils.js.map +1 -0
- package/build/lib/utils.mjs +318 -0
- package/build/lib/utils.mjs.map +1 -0
- package/build/umd/index.development.js +0 -10
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +0 -10
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var logger = require('./logger.js');
|
|
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.options = { ...config.defaultOptions,
|
|
15
|
+
...config.options
|
|
16
|
+
};
|
|
17
|
+
this.mutationId = config.mutationId;
|
|
18
|
+
this.mutationCache = config.mutationCache;
|
|
19
|
+
this.logger = config.logger || logger.defaultLogger;
|
|
20
|
+
this.observers = [];
|
|
21
|
+
this.state = config.state || getDefaultState();
|
|
22
|
+
this.meta = config.meta;
|
|
23
|
+
this.updateCacheTime(this.options.cacheTime);
|
|
24
|
+
this.scheduleGc();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
setState(state) {
|
|
28
|
+
this.dispatch({
|
|
29
|
+
type: 'setState',
|
|
30
|
+
state
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
addObserver(observer) {
|
|
35
|
+
if (this.observers.indexOf(observer) === -1) {
|
|
36
|
+
this.observers.push(observer); // Stop the mutation from being garbage collected
|
|
37
|
+
|
|
38
|
+
this.clearGcTimeout();
|
|
39
|
+
this.mutationCache.notify({
|
|
40
|
+
type: 'observerAdded',
|
|
41
|
+
mutation: this,
|
|
42
|
+
observer
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
removeObserver(observer) {
|
|
48
|
+
this.observers = this.observers.filter(x => x !== observer);
|
|
49
|
+
this.scheduleGc();
|
|
50
|
+
this.mutationCache.notify({
|
|
51
|
+
type: 'observerRemoved',
|
|
52
|
+
mutation: this,
|
|
53
|
+
observer
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
optionalRemove() {
|
|
58
|
+
if (!this.observers.length) {
|
|
59
|
+
if (this.state.status === 'loading') {
|
|
60
|
+
this.scheduleGc();
|
|
61
|
+
} else {
|
|
62
|
+
this.mutationCache.remove(this);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
continue() {
|
|
68
|
+
if (this.retryer) {
|
|
69
|
+
this.retryer.continue();
|
|
70
|
+
return this.retryer.promise;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return this.execute();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async execute() {
|
|
77
|
+
const executeMutation = () => {
|
|
78
|
+
var _this$options$retry;
|
|
79
|
+
|
|
80
|
+
this.retryer = retryer.createRetryer({
|
|
81
|
+
fn: () => {
|
|
82
|
+
if (!this.options.mutationFn) {
|
|
83
|
+
return Promise.reject('No mutationFn found');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return this.options.mutationFn(this.state.variables);
|
|
87
|
+
},
|
|
88
|
+
onFail: () => {
|
|
89
|
+
this.dispatch({
|
|
90
|
+
type: 'failed'
|
|
91
|
+
});
|
|
92
|
+
},
|
|
93
|
+
onPause: () => {
|
|
94
|
+
this.dispatch({
|
|
95
|
+
type: 'pause'
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
onContinue: () => {
|
|
99
|
+
this.dispatch({
|
|
100
|
+
type: 'continue'
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
retry: (_this$options$retry = this.options.retry) != null ? _this$options$retry : 0,
|
|
104
|
+
retryDelay: this.options.retryDelay,
|
|
105
|
+
networkMode: this.options.networkMode
|
|
106
|
+
});
|
|
107
|
+
return this.retryer.promise;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const restored = this.state.status === 'loading';
|
|
111
|
+
|
|
112
|
+
try {
|
|
113
|
+
var _this$mutationCache$c3, _this$mutationCache$c4, _this$options$onSucce, _this$options2, _this$options$onSettl, _this$options3;
|
|
114
|
+
|
|
115
|
+
if (!restored) {
|
|
116
|
+
var _this$mutationCache$c, _this$mutationCache$c2, _this$options$onMutat, _this$options;
|
|
117
|
+
|
|
118
|
+
this.dispatch({
|
|
119
|
+
type: 'loading',
|
|
120
|
+
variables: this.options.variables
|
|
121
|
+
}); // Notify cache callback
|
|
122
|
+
|
|
123
|
+
(_this$mutationCache$c = (_this$mutationCache$c2 = this.mutationCache.config).onMutate) == null ? void 0 : _this$mutationCache$c.call(_this$mutationCache$c2, this.state.variables, this);
|
|
124
|
+
const context = await ((_this$options$onMutat = (_this$options = this.options).onMutate) == null ? void 0 : _this$options$onMutat.call(_this$options, this.state.variables));
|
|
125
|
+
|
|
126
|
+
if (context !== this.state.context) {
|
|
127
|
+
this.dispatch({
|
|
128
|
+
type: 'loading',
|
|
129
|
+
context,
|
|
130
|
+
variables: this.state.variables
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const data = await executeMutation(); // Notify cache callback
|
|
136
|
+
|
|
137
|
+
(_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);
|
|
138
|
+
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));
|
|
139
|
+
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));
|
|
140
|
+
this.dispatch({
|
|
141
|
+
type: 'success',
|
|
142
|
+
data
|
|
143
|
+
});
|
|
144
|
+
return data;
|
|
145
|
+
} catch (error) {
|
|
146
|
+
try {
|
|
147
|
+
var _this$mutationCache$c5, _this$mutationCache$c6, _this$options$onError, _this$options4, _this$options$onSettl2, _this$options5;
|
|
148
|
+
|
|
149
|
+
// Notify cache callback
|
|
150
|
+
(_this$mutationCache$c5 = (_this$mutationCache$c6 = this.mutationCache.config).onError) == null ? void 0 : _this$mutationCache$c5.call(_this$mutationCache$c6, error, this.state.variables, this.state.context, this);
|
|
151
|
+
|
|
152
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
153
|
+
this.logger.error(error);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
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));
|
|
157
|
+
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));
|
|
158
|
+
throw error;
|
|
159
|
+
} finally {
|
|
160
|
+
this.dispatch({
|
|
161
|
+
type: 'error',
|
|
162
|
+
error: error
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
dispatch(action) {
|
|
169
|
+
const reducer = state => {
|
|
170
|
+
switch (action.type) {
|
|
171
|
+
case 'failed':
|
|
172
|
+
return { ...state,
|
|
173
|
+
failureCount: state.failureCount + 1
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
case 'pause':
|
|
177
|
+
return { ...state,
|
|
178
|
+
isPaused: true
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
case 'continue':
|
|
182
|
+
return { ...state,
|
|
183
|
+
isPaused: false
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
case 'loading':
|
|
187
|
+
return { ...state,
|
|
188
|
+
context: action.context,
|
|
189
|
+
data: undefined,
|
|
190
|
+
error: null,
|
|
191
|
+
isPaused: !retryer.canFetch(this.options.networkMode),
|
|
192
|
+
status: 'loading',
|
|
193
|
+
variables: action.variables
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
case 'success':
|
|
197
|
+
return { ...state,
|
|
198
|
+
data: action.data,
|
|
199
|
+
error: null,
|
|
200
|
+
status: 'success',
|
|
201
|
+
isPaused: false
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
case 'error':
|
|
205
|
+
return { ...state,
|
|
206
|
+
data: undefined,
|
|
207
|
+
error: action.error,
|
|
208
|
+
failureCount: state.failureCount + 1,
|
|
209
|
+
isPaused: false,
|
|
210
|
+
status: 'error'
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
case 'setState':
|
|
214
|
+
return { ...state,
|
|
215
|
+
...action.state
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
this.state = reducer(this.state);
|
|
221
|
+
notifyManager.notifyManager.batch(() => {
|
|
222
|
+
this.observers.forEach(observer => {
|
|
223
|
+
observer.onMutationUpdate(action);
|
|
224
|
+
});
|
|
225
|
+
this.mutationCache.notify({
|
|
226
|
+
mutation: this,
|
|
227
|
+
type: 'updated',
|
|
228
|
+
action
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
}
|
|
234
|
+
function getDefaultState() {
|
|
235
|
+
return {
|
|
236
|
+
context: undefined,
|
|
237
|
+
data: undefined,
|
|
238
|
+
error: null,
|
|
239
|
+
failureCount: 0,
|
|
240
|
+
isPaused: false,
|
|
241
|
+
status: 'idle',
|
|
242
|
+
variables: undefined
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
exports.Mutation = Mutation;
|
|
247
|
+
exports.getDefaultState = getDefaultState;
|
|
248
|
+
//# sourceMappingURL=mutation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation.js","sources":["../../src/mutation.ts"],"sourcesContent":["import type { MutationOptions, MutationStatus, MutationMeta } from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport { defaultLogger, Logger } from './logger'\nimport { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport { canFetch, Retryer, createRetryer } 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 isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n}\n\ninterface FailedAction {\n type: 'failed'\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\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 meta: MutationMeta | undefined\n\n private observers: MutationObserver<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.options = {\n ...config.defaultOptions,\n ...config.options,\n }\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 this.meta = config.meta\n\n this.updateCacheTime(this.options.cacheTime)\n this.scheduleGc()\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.indexOf(observer) === -1) {\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<TData> {\n if (this.retryer) {\n this.retryer.continue()\n return this.retryer.promise\n }\n return 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: () => {\n this.dispatch({ type: 'failed' })\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 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 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 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 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 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: state.failureCount + 1,\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 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 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 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 isPaused: false,\n status: 'idle',\n variables: undefined,\n }\n}\n"],"names":["Mutation","Removable","constructor","config","options","defaultOptions","mutationId","mutationCache","logger","defaultLogger","observers","state","getDefaultState","meta","updateCacheTime","cacheTime","scheduleGc","setState","dispatch","type","addObserver","observer","indexOf","push","clearGcTimeout","notify","mutation","removeObserver","filter","x","optionalRemove","length","status","remove","continue","retryer","promise","execute","executeMutation","createRetryer","fn","mutationFn","Promise","reject","variables","onFail","onPause","onContinue","retry","retryDelay","networkMode","restored","onMutate","context","data","onSuccess","onSettled","error","onError","process","env","NODE_ENV","undefined","action","reducer","failureCount","isPaused","canFetch","notifyManager","batch","forEach","onMutationUpdate"],"mappings":"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"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { defaultLogger } from './logger.mjs';
|
|
2
|
+
import { notifyManager } from './notifyManager.mjs';
|
|
3
|
+
import { Removable } from './removable.mjs';
|
|
4
|
+
import { createRetryer, canFetch } from './retryer.mjs';
|
|
5
|
+
|
|
6
|
+
// CLASS
|
|
7
|
+
class Mutation extends Removable {
|
|
8
|
+
constructor(config) {
|
|
9
|
+
super();
|
|
10
|
+
this.options = { ...config.defaultOptions,
|
|
11
|
+
...config.options
|
|
12
|
+
};
|
|
13
|
+
this.mutationId = config.mutationId;
|
|
14
|
+
this.mutationCache = config.mutationCache;
|
|
15
|
+
this.logger = config.logger || defaultLogger;
|
|
16
|
+
this.observers = [];
|
|
17
|
+
this.state = config.state || getDefaultState();
|
|
18
|
+
this.meta = config.meta;
|
|
19
|
+
this.updateCacheTime(this.options.cacheTime);
|
|
20
|
+
this.scheduleGc();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
setState(state) {
|
|
24
|
+
this.dispatch({
|
|
25
|
+
type: 'setState',
|
|
26
|
+
state
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
addObserver(observer) {
|
|
31
|
+
if (this.observers.indexOf(observer) === -1) {
|
|
32
|
+
this.observers.push(observer); // Stop the mutation from being garbage collected
|
|
33
|
+
|
|
34
|
+
this.clearGcTimeout();
|
|
35
|
+
this.mutationCache.notify({
|
|
36
|
+
type: 'observerAdded',
|
|
37
|
+
mutation: this,
|
|
38
|
+
observer
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
removeObserver(observer) {
|
|
44
|
+
this.observers = this.observers.filter(x => x !== observer);
|
|
45
|
+
this.scheduleGc();
|
|
46
|
+
this.mutationCache.notify({
|
|
47
|
+
type: 'observerRemoved',
|
|
48
|
+
mutation: this,
|
|
49
|
+
observer
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
optionalRemove() {
|
|
54
|
+
if (!this.observers.length) {
|
|
55
|
+
if (this.state.status === 'loading') {
|
|
56
|
+
this.scheduleGc();
|
|
57
|
+
} else {
|
|
58
|
+
this.mutationCache.remove(this);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
continue() {
|
|
64
|
+
if (this.retryer) {
|
|
65
|
+
this.retryer.continue();
|
|
66
|
+
return this.retryer.promise;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return this.execute();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async execute() {
|
|
73
|
+
const executeMutation = () => {
|
|
74
|
+
var _this$options$retry;
|
|
75
|
+
|
|
76
|
+
this.retryer = createRetryer({
|
|
77
|
+
fn: () => {
|
|
78
|
+
if (!this.options.mutationFn) {
|
|
79
|
+
return Promise.reject('No mutationFn found');
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return this.options.mutationFn(this.state.variables);
|
|
83
|
+
},
|
|
84
|
+
onFail: () => {
|
|
85
|
+
this.dispatch({
|
|
86
|
+
type: 'failed'
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
onPause: () => {
|
|
90
|
+
this.dispatch({
|
|
91
|
+
type: 'pause'
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
onContinue: () => {
|
|
95
|
+
this.dispatch({
|
|
96
|
+
type: 'continue'
|
|
97
|
+
});
|
|
98
|
+
},
|
|
99
|
+
retry: (_this$options$retry = this.options.retry) != null ? _this$options$retry : 0,
|
|
100
|
+
retryDelay: this.options.retryDelay,
|
|
101
|
+
networkMode: this.options.networkMode
|
|
102
|
+
});
|
|
103
|
+
return this.retryer.promise;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const restored = this.state.status === 'loading';
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
var _this$mutationCache$c3, _this$mutationCache$c4, _this$options$onSucce, _this$options2, _this$options$onSettl, _this$options3;
|
|
110
|
+
|
|
111
|
+
if (!restored) {
|
|
112
|
+
var _this$mutationCache$c, _this$mutationCache$c2, _this$options$onMutat, _this$options;
|
|
113
|
+
|
|
114
|
+
this.dispatch({
|
|
115
|
+
type: 'loading',
|
|
116
|
+
variables: this.options.variables
|
|
117
|
+
}); // Notify cache callback
|
|
118
|
+
|
|
119
|
+
(_this$mutationCache$c = (_this$mutationCache$c2 = this.mutationCache.config).onMutate) == null ? void 0 : _this$mutationCache$c.call(_this$mutationCache$c2, this.state.variables, this);
|
|
120
|
+
const context = await ((_this$options$onMutat = (_this$options = this.options).onMutate) == null ? void 0 : _this$options$onMutat.call(_this$options, this.state.variables));
|
|
121
|
+
|
|
122
|
+
if (context !== this.state.context) {
|
|
123
|
+
this.dispatch({
|
|
124
|
+
type: 'loading',
|
|
125
|
+
context,
|
|
126
|
+
variables: this.state.variables
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const data = await executeMutation(); // Notify cache callback
|
|
132
|
+
|
|
133
|
+
(_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);
|
|
134
|
+
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));
|
|
135
|
+
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));
|
|
136
|
+
this.dispatch({
|
|
137
|
+
type: 'success',
|
|
138
|
+
data
|
|
139
|
+
});
|
|
140
|
+
return data;
|
|
141
|
+
} catch (error) {
|
|
142
|
+
try {
|
|
143
|
+
var _this$mutationCache$c5, _this$mutationCache$c6, _this$options$onError, _this$options4, _this$options$onSettl2, _this$options5;
|
|
144
|
+
|
|
145
|
+
// Notify cache callback
|
|
146
|
+
(_this$mutationCache$c5 = (_this$mutationCache$c6 = this.mutationCache.config).onError) == null ? void 0 : _this$mutationCache$c5.call(_this$mutationCache$c6, error, this.state.variables, this.state.context, this);
|
|
147
|
+
|
|
148
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
149
|
+
this.logger.error(error);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
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));
|
|
153
|
+
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));
|
|
154
|
+
throw error;
|
|
155
|
+
} finally {
|
|
156
|
+
this.dispatch({
|
|
157
|
+
type: 'error',
|
|
158
|
+
error: error
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
dispatch(action) {
|
|
165
|
+
const reducer = state => {
|
|
166
|
+
switch (action.type) {
|
|
167
|
+
case 'failed':
|
|
168
|
+
return { ...state,
|
|
169
|
+
failureCount: state.failureCount + 1
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
case 'pause':
|
|
173
|
+
return { ...state,
|
|
174
|
+
isPaused: true
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
case 'continue':
|
|
178
|
+
return { ...state,
|
|
179
|
+
isPaused: false
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
case 'loading':
|
|
183
|
+
return { ...state,
|
|
184
|
+
context: action.context,
|
|
185
|
+
data: undefined,
|
|
186
|
+
error: null,
|
|
187
|
+
isPaused: !canFetch(this.options.networkMode),
|
|
188
|
+
status: 'loading',
|
|
189
|
+
variables: action.variables
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
case 'success':
|
|
193
|
+
return { ...state,
|
|
194
|
+
data: action.data,
|
|
195
|
+
error: null,
|
|
196
|
+
status: 'success',
|
|
197
|
+
isPaused: false
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
case 'error':
|
|
201
|
+
return { ...state,
|
|
202
|
+
data: undefined,
|
|
203
|
+
error: action.error,
|
|
204
|
+
failureCount: state.failureCount + 1,
|
|
205
|
+
isPaused: false,
|
|
206
|
+
status: 'error'
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
case 'setState':
|
|
210
|
+
return { ...state,
|
|
211
|
+
...action.state
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
this.state = reducer(this.state);
|
|
217
|
+
notifyManager.batch(() => {
|
|
218
|
+
this.observers.forEach(observer => {
|
|
219
|
+
observer.onMutationUpdate(action);
|
|
220
|
+
});
|
|
221
|
+
this.mutationCache.notify({
|
|
222
|
+
mutation: this,
|
|
223
|
+
type: 'updated',
|
|
224
|
+
action
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
}
|
|
230
|
+
function getDefaultState() {
|
|
231
|
+
return {
|
|
232
|
+
context: undefined,
|
|
233
|
+
data: undefined,
|
|
234
|
+
error: null,
|
|
235
|
+
failureCount: 0,
|
|
236
|
+
isPaused: false,
|
|
237
|
+
status: 'idle',
|
|
238
|
+
variables: undefined
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export { Mutation, getDefaultState };
|
|
243
|
+
//# sourceMappingURL=mutation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation.mjs","sources":["../../src/mutation.ts"],"sourcesContent":["import type { MutationOptions, MutationStatus, MutationMeta } from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport { defaultLogger, Logger } from './logger'\nimport { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport { canFetch, Retryer, createRetryer } 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 isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n}\n\ninterface FailedAction {\n type: 'failed'\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\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 meta: MutationMeta | undefined\n\n private observers: MutationObserver<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.options = {\n ...config.defaultOptions,\n ...config.options,\n }\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 this.meta = config.meta\n\n this.updateCacheTime(this.options.cacheTime)\n this.scheduleGc()\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.indexOf(observer) === -1) {\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<TData> {\n if (this.retryer) {\n this.retryer.continue()\n return this.retryer.promise\n }\n return 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: () => {\n this.dispatch({ type: 'failed' })\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 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 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 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 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 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: state.failureCount + 1,\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 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 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 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 isPaused: false,\n status: 'idle',\n variables: undefined,\n }\n}\n"],"names":["Mutation","Removable","constructor","config","options","defaultOptions","mutationId","mutationCache","logger","defaultLogger","observers","state","getDefaultState","meta","updateCacheTime","cacheTime","scheduleGc","setState","dispatch","type","addObserver","observer","indexOf","push","clearGcTimeout","notify","mutation","removeObserver","filter","x","optionalRemove","length","status","remove","continue","retryer","promise","execute","executeMutation","createRetryer","fn","mutationFn","Promise","reject","variables","onFail","onPause","onContinue","retry","retryDelay","networkMode","restored","onMutate","context","data","onSuccess","onSettled","error","onError","process","env","NODE_ENV","undefined","action","reducer","failureCount","isPaused","canFetch","notifyManager","batch","forEach","onMutationUpdate"],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var notifyManager = require('./notifyManager.js');
|
|
6
|
+
var mutation = require('./mutation.js');
|
|
7
|
+
var utils = require('./utils.js');
|
|
8
|
+
var subscribable = require('./subscribable.js');
|
|
9
|
+
|
|
10
|
+
// CLASS
|
|
11
|
+
class MutationCache extends subscribable.Subscribable {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
super();
|
|
14
|
+
this.config = config || {};
|
|
15
|
+
this.mutations = [];
|
|
16
|
+
this.mutationId = 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
build(client, options, state) {
|
|
20
|
+
const mutation$1 = new mutation.Mutation({
|
|
21
|
+
mutationCache: this,
|
|
22
|
+
logger: client.getLogger(),
|
|
23
|
+
mutationId: ++this.mutationId,
|
|
24
|
+
options: client.defaultMutationOptions(options),
|
|
25
|
+
state,
|
|
26
|
+
defaultOptions: options.mutationKey ? client.getMutationDefaults(options.mutationKey) : undefined,
|
|
27
|
+
meta: options.meta
|
|
28
|
+
});
|
|
29
|
+
this.add(mutation$1);
|
|
30
|
+
return mutation$1;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
add(mutation) {
|
|
34
|
+
this.mutations.push(mutation);
|
|
35
|
+
this.notify({
|
|
36
|
+
type: 'added',
|
|
37
|
+
mutation
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
remove(mutation) {
|
|
42
|
+
this.mutations = this.mutations.filter(x => x !== mutation);
|
|
43
|
+
this.notify({
|
|
44
|
+
type: 'removed',
|
|
45
|
+
mutation
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
clear() {
|
|
50
|
+
notifyManager.notifyManager.batch(() => {
|
|
51
|
+
this.mutations.forEach(mutation => {
|
|
52
|
+
this.remove(mutation);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
getAll() {
|
|
58
|
+
return this.mutations;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
find(filters) {
|
|
62
|
+
if (typeof filters.exact === 'undefined') {
|
|
63
|
+
filters.exact = true;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return this.mutations.find(mutation => utils.matchMutation(filters, mutation));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
findAll(filters) {
|
|
70
|
+
return this.mutations.filter(mutation => utils.matchMutation(filters, mutation));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
notify(event) {
|
|
74
|
+
notifyManager.notifyManager.batch(() => {
|
|
75
|
+
this.listeners.forEach(listener => {
|
|
76
|
+
listener(event);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
resumePausedMutations() {
|
|
82
|
+
const pausedMutations = this.mutations.filter(x => x.state.isPaused);
|
|
83
|
+
return notifyManager.notifyManager.batch(() => pausedMutations.reduce((promise, mutation) => promise.then(() => mutation.continue().catch(utils.noop)), Promise.resolve()));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
exports.MutationCache = MutationCache;
|
|
89
|
+
//# sourceMappingURL=mutationCache.js.map
|