@tanstack/query-core 4.3.0-beta.1 → 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 +2 -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":"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"}
|
|
@@ -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;;;;"}
|