@tanstack/svelte-query-persist-client 5.0.0-beta.26
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/LICENSE +21 -0
- package/dist/PersistQueryClientProvider.svelte +38 -0
- package/dist/PersistQueryClientProvider.svelte.d.ts +23 -0
- package/dist/PersistQueryClientProvider.svelte.d.ts.map +1 -0
- package/dist/__tests__/AwaitOnSuccess/AwaitOnSuccess.svelte +26 -0
- package/dist/__tests__/AwaitOnSuccess/AwaitOnSuccess.svelte.d.ts +19 -0
- package/dist/__tests__/AwaitOnSuccess/AwaitOnSuccess.svelte.d.ts.map +1 -0
- package/dist/__tests__/AwaitOnSuccess/Provider.svelte +12 -0
- package/dist/__tests__/AwaitOnSuccess/Provider.svelte.d.ts +24 -0
- package/dist/__tests__/AwaitOnSuccess/Provider.svelte.d.ts.map +1 -0
- package/dist/__tests__/FreshData/FreshData.svelte +31 -0
- package/dist/__tests__/FreshData/FreshData.svelte.d.ts +21 -0
- package/dist/__tests__/FreshData/FreshData.svelte.d.ts.map +1 -0
- package/dist/__tests__/FreshData/Provider.svelte +12 -0
- package/dist/__tests__/FreshData/Provider.svelte.d.ts +25 -0
- package/dist/__tests__/FreshData/Provider.svelte.d.ts.map +1 -0
- package/dist/__tests__/InitialData/InitialData.svelte +32 -0
- package/dist/__tests__/InitialData/InitialData.svelte.d.ts +20 -0
- package/dist/__tests__/InitialData/InitialData.svelte.d.ts.map +1 -0
- package/dist/__tests__/InitialData/Provider.svelte +11 -0
- package/dist/__tests__/InitialData/Provider.svelte.d.ts +24 -0
- package/dist/__tests__/InitialData/Provider.svelte.d.ts.map +1 -0
- package/dist/__tests__/OnSuccess/OnSuccess.svelte +23 -0
- package/dist/__tests__/OnSuccess/OnSuccess.svelte.d.ts +17 -0
- package/dist/__tests__/OnSuccess/OnSuccess.svelte.d.ts.map +1 -0
- package/dist/__tests__/OnSuccess/Provider.svelte +11 -0
- package/dist/__tests__/OnSuccess/Provider.svelte.d.ts +22 -0
- package/dist/__tests__/OnSuccess/Provider.svelte.d.ts.map +1 -0
- package/dist/__tests__/PersistQueryClientProvider.test.d.ts +2 -0
- package/dist/__tests__/PersistQueryClientProvider.test.d.ts.map +1 -0
- package/dist/__tests__/PersistQueryClientProvider.test.js +294 -0
- package/dist/__tests__/RemoveCache/Provider.svelte +10 -0
- package/dist/__tests__/RemoveCache/Provider.svelte.d.ts +21 -0
- package/dist/__tests__/RemoveCache/Provider.svelte.d.ts.map +1 -0
- package/dist/__tests__/RemoveCache/RemoveCache.svelte +23 -0
- package/dist/__tests__/RemoveCache/RemoveCache.svelte.d.ts +17 -0
- package/dist/__tests__/RemoveCache/RemoveCache.svelte.d.ts.map +1 -0
- package/dist/__tests__/RestoreCache/Provider.svelte +11 -0
- package/dist/__tests__/RestoreCache/Provider.svelte.d.ts +24 -0
- package/dist/__tests__/RestoreCache/Provider.svelte.d.ts.map +1 -0
- package/dist/__tests__/RestoreCache/RestoreCache.svelte +28 -0
- package/dist/__tests__/RestoreCache/RestoreCache.svelte.d.ts +20 -0
- package/dist/__tests__/RestoreCache/RestoreCache.svelte.d.ts.map +1 -0
- package/dist/__tests__/UseQueries/Provider.svelte +11 -0
- package/dist/__tests__/UseQueries/Provider.svelte.d.ts +24 -0
- package/dist/__tests__/UseQueries/Provider.svelte.d.ts.map +1 -0
- package/dist/__tests__/UseQueries/UseQueries.svelte +32 -0
- package/dist/__tests__/UseQueries/UseQueries.svelte.d.ts +20 -0
- package/dist/__tests__/UseQueries/UseQueries.svelte.d.ts.map +1 -0
- package/dist/__tests__/utils.d.ts +13 -0
- package/dist/__tests__/utils.d.ts.map +1 -0
- package/dist/__tests__/utils.js +22 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/package.json +55 -0
- package/src/PersistQueryClientProvider.svelte +43 -0
- package/src/__tests__/AwaitOnSuccess/AwaitOnSuccess.svelte +31 -0
- package/src/__tests__/AwaitOnSuccess/Provider.svelte +17 -0
- package/src/__tests__/FreshData/FreshData.svelte +38 -0
- package/src/__tests__/FreshData/Provider.svelte +18 -0
- package/src/__tests__/InitialData/InitialData.svelte +39 -0
- package/src/__tests__/InitialData/Provider.svelte +17 -0
- package/src/__tests__/OnSuccess/OnSuccess.svelte +27 -0
- package/src/__tests__/OnSuccess/Provider.svelte +15 -0
- package/src/__tests__/PersistQueryClientProvider.test.ts +377 -0
- package/src/__tests__/RemoveCache/Provider.svelte +14 -0
- package/src/__tests__/RemoveCache/RemoveCache.svelte +27 -0
- package/src/__tests__/RestoreCache/Provider.svelte +17 -0
- package/src/__tests__/RestoreCache/RestoreCache.svelte +34 -0
- package/src/__tests__/UseQueries/Provider.svelte +17 -0
- package/src/__tests__/UseQueries/UseQueries.svelte +38 -0
- package/src/__tests__/utils.ts +34 -0
- package/src/index.ts +3 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { render, waitFor } from '@testing-library/svelte';
|
|
2
|
+
import { describe, expect, test, vi } from 'vitest';
|
|
3
|
+
import { persistQueryClientSave } from '@tanstack/query-persist-client-core';
|
|
4
|
+
import { get, writable } from 'svelte/store';
|
|
5
|
+
import AwaitOnSuccess from './AwaitOnSuccess/Provider.svelte';
|
|
6
|
+
import FreshData from './FreshData/Provider.svelte';
|
|
7
|
+
import OnSuccess from './OnSuccess/Provider.svelte';
|
|
8
|
+
import InitialData from './InitialData/Provider.svelte';
|
|
9
|
+
import RemoveCache from './RemoveCache/Provider.svelte';
|
|
10
|
+
import RestoreCache from './RestoreCache/Provider.svelte';
|
|
11
|
+
import UseQueries from './UseQueries/Provider.svelte';
|
|
12
|
+
import { createQueryClient, queryKey, sleep } from './utils';
|
|
13
|
+
const createMockPersister = () => {
|
|
14
|
+
let storedState;
|
|
15
|
+
return {
|
|
16
|
+
async persistClient(persistClient) {
|
|
17
|
+
storedState = persistClient;
|
|
18
|
+
},
|
|
19
|
+
async restoreClient() {
|
|
20
|
+
await sleep(10);
|
|
21
|
+
return storedState;
|
|
22
|
+
},
|
|
23
|
+
removeClient() {
|
|
24
|
+
storedState = undefined;
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
const createMockErrorPersister = (removeClient) => {
|
|
29
|
+
const error = new Error('restore failed');
|
|
30
|
+
return [
|
|
31
|
+
error,
|
|
32
|
+
{
|
|
33
|
+
async persistClient() {
|
|
34
|
+
// noop
|
|
35
|
+
},
|
|
36
|
+
async restoreClient() {
|
|
37
|
+
await sleep(10);
|
|
38
|
+
throw error;
|
|
39
|
+
},
|
|
40
|
+
removeClient,
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
};
|
|
44
|
+
describe('PersistQueryClientProvider', () => {
|
|
45
|
+
test('restores cache from persister', async () => {
|
|
46
|
+
const key = queryKey();
|
|
47
|
+
const states = writable([]);
|
|
48
|
+
const queryClient = createQueryClient();
|
|
49
|
+
await queryClient.prefetchQuery({
|
|
50
|
+
queryKey: key,
|
|
51
|
+
queryFn: () => Promise.resolve('hydrated'),
|
|
52
|
+
});
|
|
53
|
+
const persister = createMockPersister();
|
|
54
|
+
await persistQueryClientSave({ queryClient, persister });
|
|
55
|
+
queryClient.clear();
|
|
56
|
+
const rendered = render(RestoreCache, {
|
|
57
|
+
props: {
|
|
58
|
+
queryClient,
|
|
59
|
+
persistOptions: { persister },
|
|
60
|
+
key,
|
|
61
|
+
states,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
await waitFor(() => rendered.getByText('fetchStatus: idle'));
|
|
65
|
+
await waitFor(() => rendered.getByText('hydrated'));
|
|
66
|
+
await waitFor(() => rendered.getByText('fetched'));
|
|
67
|
+
const states_ = get(states);
|
|
68
|
+
expect(states_).toHaveLength(4);
|
|
69
|
+
expect(states_[0]).toMatchObject({
|
|
70
|
+
status: 'pending',
|
|
71
|
+
fetchStatus: 'idle',
|
|
72
|
+
data: undefined,
|
|
73
|
+
});
|
|
74
|
+
expect(states_[1]).toMatchObject({
|
|
75
|
+
status: 'success',
|
|
76
|
+
fetchStatus: 'fetching',
|
|
77
|
+
data: 'hydrated',
|
|
78
|
+
});
|
|
79
|
+
expect(states_[2]).toMatchObject({
|
|
80
|
+
status: 'success',
|
|
81
|
+
fetchStatus: 'fetching',
|
|
82
|
+
data: 'hydrated',
|
|
83
|
+
});
|
|
84
|
+
expect(states_[3]).toMatchObject({
|
|
85
|
+
status: 'success',
|
|
86
|
+
fetchStatus: 'idle',
|
|
87
|
+
data: 'fetched',
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
test('should also put useQueries into idle state', async () => {
|
|
91
|
+
const key = queryKey();
|
|
92
|
+
const states = writable([]);
|
|
93
|
+
const queryClient = createQueryClient();
|
|
94
|
+
await queryClient.prefetchQuery({
|
|
95
|
+
queryKey: key,
|
|
96
|
+
queryFn: () => Promise.resolve('hydrated'),
|
|
97
|
+
});
|
|
98
|
+
const persister = createMockPersister();
|
|
99
|
+
await persistQueryClientSave({ queryClient, persister });
|
|
100
|
+
queryClient.clear();
|
|
101
|
+
const rendered = render(UseQueries, {
|
|
102
|
+
props: {
|
|
103
|
+
queryClient,
|
|
104
|
+
persistOptions: { persister },
|
|
105
|
+
key,
|
|
106
|
+
states,
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
await waitFor(() => rendered.getByText('fetchStatus: idle'));
|
|
110
|
+
await waitFor(() => rendered.getByText('hydrated'));
|
|
111
|
+
await waitFor(() => rendered.getByText('fetched'));
|
|
112
|
+
const states_ = get(states);
|
|
113
|
+
expect(states_).toHaveLength(4);
|
|
114
|
+
expect(states_[0]).toMatchObject({
|
|
115
|
+
status: 'pending',
|
|
116
|
+
fetchStatus: 'idle',
|
|
117
|
+
data: undefined,
|
|
118
|
+
});
|
|
119
|
+
expect(states_[1]).toMatchObject({
|
|
120
|
+
status: 'success',
|
|
121
|
+
fetchStatus: 'fetching',
|
|
122
|
+
data: 'hydrated',
|
|
123
|
+
});
|
|
124
|
+
expect(states_[2]).toMatchObject({
|
|
125
|
+
status: 'success',
|
|
126
|
+
fetchStatus: 'fetching',
|
|
127
|
+
data: 'hydrated',
|
|
128
|
+
});
|
|
129
|
+
expect(states_[3]).toMatchObject({
|
|
130
|
+
status: 'success',
|
|
131
|
+
fetchStatus: 'idle',
|
|
132
|
+
data: 'fetched',
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
test('should show initialData while restoring', async () => {
|
|
136
|
+
const key = queryKey();
|
|
137
|
+
const states = writable([]);
|
|
138
|
+
const queryClient = createQueryClient();
|
|
139
|
+
await queryClient.prefetchQuery({
|
|
140
|
+
queryKey: key,
|
|
141
|
+
queryFn: () => Promise.resolve('hydrated'),
|
|
142
|
+
});
|
|
143
|
+
const persister = createMockPersister();
|
|
144
|
+
await persistQueryClientSave({ queryClient, persister });
|
|
145
|
+
queryClient.clear();
|
|
146
|
+
const rendered = render(InitialData, {
|
|
147
|
+
props: {
|
|
148
|
+
queryClient,
|
|
149
|
+
persistOptions: { persister },
|
|
150
|
+
key,
|
|
151
|
+
states,
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
await waitFor(() => rendered.getByText('initial'));
|
|
155
|
+
await waitFor(() => rendered.getByText('hydrated'));
|
|
156
|
+
await waitFor(() => rendered.getByText('fetched'));
|
|
157
|
+
const states_ = get(states);
|
|
158
|
+
expect(states_).toHaveLength(4);
|
|
159
|
+
expect(states_[0]).toMatchObject({
|
|
160
|
+
status: 'success',
|
|
161
|
+
fetchStatus: 'idle',
|
|
162
|
+
data: 'initial',
|
|
163
|
+
});
|
|
164
|
+
expect(states_[1]).toMatchObject({
|
|
165
|
+
status: 'success',
|
|
166
|
+
fetchStatus: 'fetching',
|
|
167
|
+
data: 'hydrated',
|
|
168
|
+
});
|
|
169
|
+
expect(states_[2]).toMatchObject({
|
|
170
|
+
status: 'success',
|
|
171
|
+
fetchStatus: 'fetching',
|
|
172
|
+
data: 'hydrated',
|
|
173
|
+
});
|
|
174
|
+
expect(states_[3]).toMatchObject({
|
|
175
|
+
status: 'success',
|
|
176
|
+
fetchStatus: 'idle',
|
|
177
|
+
data: 'fetched',
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
test('should not refetch after restoring when data is fresh', async () => {
|
|
181
|
+
const key = queryKey();
|
|
182
|
+
const states = writable([]);
|
|
183
|
+
const queryClient = createQueryClient();
|
|
184
|
+
await queryClient.prefetchQuery({
|
|
185
|
+
queryKey: key,
|
|
186
|
+
queryFn: () => Promise.resolve('hydrated'),
|
|
187
|
+
});
|
|
188
|
+
const persister = createMockPersister();
|
|
189
|
+
await persistQueryClientSave({ queryClient, persister });
|
|
190
|
+
queryClient.clear();
|
|
191
|
+
const fetched = writable(false);
|
|
192
|
+
const rendered = render(FreshData, {
|
|
193
|
+
props: {
|
|
194
|
+
queryClient,
|
|
195
|
+
persistOptions: { persister },
|
|
196
|
+
key,
|
|
197
|
+
states,
|
|
198
|
+
fetched,
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
await waitFor(() => rendered.getByText('data: null'));
|
|
202
|
+
await waitFor(() => rendered.getByText('data: hydrated'));
|
|
203
|
+
const states_ = get(states);
|
|
204
|
+
expect(states_).toHaveLength(2);
|
|
205
|
+
expect(get(fetched)).toBe(false);
|
|
206
|
+
expect(states_[0]).toMatchObject({
|
|
207
|
+
status: 'pending',
|
|
208
|
+
fetchStatus: 'idle',
|
|
209
|
+
data: undefined,
|
|
210
|
+
});
|
|
211
|
+
expect(states_[1]).toMatchObject({
|
|
212
|
+
status: 'success',
|
|
213
|
+
fetchStatus: 'idle',
|
|
214
|
+
data: 'hydrated',
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
test('should call onSuccess after successful restoring', async () => {
|
|
218
|
+
const key = queryKey();
|
|
219
|
+
const queryClient = createQueryClient();
|
|
220
|
+
await queryClient.prefetchQuery({
|
|
221
|
+
queryKey: key,
|
|
222
|
+
queryFn: () => Promise.resolve('hydrated'),
|
|
223
|
+
});
|
|
224
|
+
const persister = createMockPersister();
|
|
225
|
+
await persistQueryClientSave({ queryClient, persister });
|
|
226
|
+
queryClient.clear();
|
|
227
|
+
const onSuccess = vi.fn();
|
|
228
|
+
const rendered = render(OnSuccess, {
|
|
229
|
+
props: {
|
|
230
|
+
queryClient,
|
|
231
|
+
persistOptions: { persister },
|
|
232
|
+
key,
|
|
233
|
+
onSuccess,
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
expect(onSuccess).toHaveBeenCalledTimes(0);
|
|
237
|
+
await waitFor(() => rendered.getByText('hydrated'));
|
|
238
|
+
expect(onSuccess).toHaveBeenCalledTimes(1);
|
|
239
|
+
await waitFor(() => rendered.getByText('fetched'));
|
|
240
|
+
});
|
|
241
|
+
test('should await onSuccess after successful restoring', async () => {
|
|
242
|
+
const key = queryKey();
|
|
243
|
+
const queryClient = createQueryClient();
|
|
244
|
+
await queryClient.prefetchQuery({
|
|
245
|
+
queryKey: key,
|
|
246
|
+
queryFn: () => Promise.resolve('hydrated'),
|
|
247
|
+
});
|
|
248
|
+
const persister = createMockPersister();
|
|
249
|
+
await persistQueryClientSave({ queryClient, persister });
|
|
250
|
+
queryClient.clear();
|
|
251
|
+
const states = writable([]);
|
|
252
|
+
const rendered = render(AwaitOnSuccess, {
|
|
253
|
+
props: {
|
|
254
|
+
queryClient,
|
|
255
|
+
persistOptions: { persister },
|
|
256
|
+
key,
|
|
257
|
+
states,
|
|
258
|
+
onSuccess: async () => {
|
|
259
|
+
states.update((s) => [...s, 'onSuccess']);
|
|
260
|
+
await sleep(20);
|
|
261
|
+
states.update((s) => [...s, 'onSuccess done']);
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
await waitFor(() => rendered.getByText('hydrated'));
|
|
266
|
+
await waitFor(() => rendered.getByText('fetched'));
|
|
267
|
+
expect(get(states)).toEqual([
|
|
268
|
+
'onSuccess',
|
|
269
|
+
'onSuccess done',
|
|
270
|
+
'fetching',
|
|
271
|
+
'fetched',
|
|
272
|
+
]);
|
|
273
|
+
});
|
|
274
|
+
test('should remove cache after non-successful restoring', async () => {
|
|
275
|
+
const key = queryKey();
|
|
276
|
+
const consoleMock = vi.spyOn(console, 'error');
|
|
277
|
+
const consoleWarn = vi
|
|
278
|
+
.spyOn(console, 'warn')
|
|
279
|
+
.mockImplementation(() => undefined);
|
|
280
|
+
consoleMock.mockImplementation(() => undefined);
|
|
281
|
+
const queryClient = createQueryClient();
|
|
282
|
+
const removeClient = vi.fn();
|
|
283
|
+
const [error, persister] = createMockErrorPersister(removeClient);
|
|
284
|
+
const rendered = render(RemoveCache, {
|
|
285
|
+
props: { queryClient, persistOptions: { persister }, key },
|
|
286
|
+
});
|
|
287
|
+
await waitFor(() => rendered.getByText('fetched'));
|
|
288
|
+
expect(removeClient).toHaveBeenCalledTimes(1);
|
|
289
|
+
expect(consoleMock).toHaveBeenCalledTimes(1);
|
|
290
|
+
expect(consoleMock).toHaveBeenNthCalledWith(1, error);
|
|
291
|
+
consoleMock.mockRestore();
|
|
292
|
+
consoleWarn.mockRestore();
|
|
293
|
+
});
|
|
294
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<script>import PersistQueryClientProvider from "../../PersistQueryClientProvider.svelte";
|
|
2
|
+
import RemoveCache from "./RemoveCache.svelte";
|
|
3
|
+
export let queryClient;
|
|
4
|
+
export let persistOptions;
|
|
5
|
+
export let key;
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<PersistQueryClientProvider client={queryClient} {persistOptions}>
|
|
9
|
+
<RemoveCache {key} />
|
|
10
|
+
</PersistQueryClientProvider>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { QueryClient } from '@tanstack/svelte-query';
|
|
3
|
+
import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core';
|
|
4
|
+
declare const __propDef: {
|
|
5
|
+
props: {
|
|
6
|
+
queryClient: QueryClient;
|
|
7
|
+
persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>;
|
|
8
|
+
key: Array<string>;
|
|
9
|
+
};
|
|
10
|
+
events: {
|
|
11
|
+
[evt: string]: CustomEvent<any>;
|
|
12
|
+
};
|
|
13
|
+
slots: {};
|
|
14
|
+
};
|
|
15
|
+
export type ProviderProps = typeof __propDef.props;
|
|
16
|
+
export type ProviderEvents = typeof __propDef.events;
|
|
17
|
+
export type ProviderSlots = typeof __propDef.slots;
|
|
18
|
+
export default class Provider extends SvelteComponentTyped<ProviderProps, ProviderEvents, ProviderSlots> {
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=Provider.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Provider.svelte.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/RemoveCache/Provider.svelte"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAE5C;AAGD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AAmBpF,QAAA,MAAM,SAAS;;qBADyF,WAAW;wBAAkB,KAAK,yBAAyB,EAAE,aAAa,CAAC;aAAO,MAAM,MAAM,CAAC;;;;;;CAChJ,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,oBAAoB,CAAC,aAAa,EAAE,cAAc,EAAE,aAAa,CAAC;CACvG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script>import { createQuery } from "@tanstack/svelte-query";
|
|
2
|
+
import { get } from "svelte/store";
|
|
3
|
+
import { sleep } from "../utils";
|
|
4
|
+
export let key;
|
|
5
|
+
const state = createQuery({
|
|
6
|
+
queryKey: key,
|
|
7
|
+
queryFn: async () => {
|
|
8
|
+
await sleep(10);
|
|
9
|
+
return "fetched";
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
let data = get(state).data;
|
|
13
|
+
let fetchStatus = get(state).fetchStatus;
|
|
14
|
+
state.subscribe((s) => {
|
|
15
|
+
data = s.data;
|
|
16
|
+
fetchStatus = s.fetchStatus;
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<div>
|
|
21
|
+
<h1>{data}</h1>
|
|
22
|
+
<h2>fetchStatus: {fetchStatus}</h2>
|
|
23
|
+
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
key: Array<string>;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
};
|
|
9
|
+
slots: {};
|
|
10
|
+
};
|
|
11
|
+
export type RemoveCacheProps = typeof __propDef.props;
|
|
12
|
+
export type RemoveCacheEvents = typeof __propDef.events;
|
|
13
|
+
export type RemoveCacheSlots = typeof __propDef.slots;
|
|
14
|
+
export default class RemoveCache extends SvelteComponentTyped<RemoveCacheProps, RemoveCacheEvents, RemoveCacheSlots> {
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=RemoveCache.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoveCache.svelte.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/RemoveCache/RemoveCache.svelte"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAE5C;AAmCD,QAAA,MAAM,SAAS;;aADqB,MAAM,MAAM,CAAC;;;;;;CACM,CAAC;AACxD,MAAM,MAAM,gBAAgB,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACtD,MAAM,MAAM,iBAAiB,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACxD,MAAM,MAAM,gBAAgB,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAEtD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,oBAAoB,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;CACnH"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<script>import PersistQueryClientProvider from "../../PersistQueryClientProvider.svelte";
|
|
2
|
+
import RestoreCache from "./RestoreCache.svelte";
|
|
3
|
+
export let queryClient;
|
|
4
|
+
export let persistOptions;
|
|
5
|
+
export let key;
|
|
6
|
+
export let states;
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<PersistQueryClientProvider client={queryClient} {persistOptions}>
|
|
10
|
+
<RestoreCache {key} {states} />
|
|
11
|
+
</PersistQueryClientProvider>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { QueryClient } from '@tanstack/svelte-query';
|
|
3
|
+
import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core';
|
|
4
|
+
import type { Writable } from 'svelte/store';
|
|
5
|
+
import type { StatusResult } from '../utils';
|
|
6
|
+
declare const __propDef: {
|
|
7
|
+
props: {
|
|
8
|
+
queryClient: QueryClient;
|
|
9
|
+
persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>;
|
|
10
|
+
key: Array<string>;
|
|
11
|
+
states: Writable<Array<StatusResult<string>>>;
|
|
12
|
+
};
|
|
13
|
+
events: {
|
|
14
|
+
[evt: string]: CustomEvent<any>;
|
|
15
|
+
};
|
|
16
|
+
slots: {};
|
|
17
|
+
};
|
|
18
|
+
export type ProviderProps = typeof __propDef.props;
|
|
19
|
+
export type ProviderEvents = typeof __propDef.events;
|
|
20
|
+
export type ProviderSlots = typeof __propDef.slots;
|
|
21
|
+
export default class Provider extends SvelteComponentTyped<ProviderProps, ProviderEvents, ProviderSlots> {
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=Provider.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Provider.svelte.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/RestoreCache/Provider.svelte"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAE5C;AAGD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAsB5C,QAAA,MAAM,SAAS;;qBAD0G,WAAW;wBAAkB,KAAK,yBAAyB,EAAE,aAAa,CAAC;aAAO,MAAM,MAAM,CAAC;gBAAU,SAAS,MAAM,aAAa,MAAM,CAAC,CAAC,CAAC;;;;;;CAChN,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,oBAAoB,CAAC,aAAa,EAAE,cAAc,EAAE,aAAa,CAAC;CACvG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script>import { createQuery } from "@tanstack/svelte-query";
|
|
2
|
+
import { get } from "svelte/store";
|
|
3
|
+
import { sleep } from "../utils";
|
|
4
|
+
export let key;
|
|
5
|
+
export let states;
|
|
6
|
+
const state = createQuery({
|
|
7
|
+
queryKey: key,
|
|
8
|
+
queryFn: async () => {
|
|
9
|
+
await sleep(10);
|
|
10
|
+
return "fetched";
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
let data = get(state).data;
|
|
14
|
+
let fetchStatus = get(state).fetchStatus;
|
|
15
|
+
state.subscribe((s) => {
|
|
16
|
+
states.update((prev) => [
|
|
17
|
+
...prev,
|
|
18
|
+
{ status: s.status, data: s.data, fetchStatus: s.fetchStatus }
|
|
19
|
+
]);
|
|
20
|
+
data = s.data;
|
|
21
|
+
fetchStatus = s.fetchStatus;
|
|
22
|
+
});
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<div>
|
|
26
|
+
<h1>{data}</h1>
|
|
27
|
+
<h2>fetchStatus: {fetchStatus}</h2>
|
|
28
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { Writable } from 'svelte/store';
|
|
3
|
+
import type { StatusResult } from '../utils';
|
|
4
|
+
declare const __propDef: {
|
|
5
|
+
props: {
|
|
6
|
+
key: Array<string>;
|
|
7
|
+
states: Writable<Array<StatusResult<string>>>;
|
|
8
|
+
};
|
|
9
|
+
events: {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
};
|
|
12
|
+
slots: {};
|
|
13
|
+
};
|
|
14
|
+
export type RestoreCacheProps = typeof __propDef.props;
|
|
15
|
+
export type RestoreCacheEvents = typeof __propDef.events;
|
|
16
|
+
export type RestoreCacheSlots = typeof __propDef.slots;
|
|
17
|
+
export default class RestoreCache extends SvelteComponentTyped<RestoreCacheProps, RestoreCacheEvents, RestoreCacheSlots> {
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=RestoreCache.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RestoreCache.svelte.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/RestoreCache/RestoreCache.svelte"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAE5C;AAID,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAuC5C,QAAA,MAAM,SAAS;;aADsC,MAAM,MAAM,CAAC;gBAAU,SAAS,MAAM,aAAa,MAAM,CAAC,CAAC,CAAC;;;;;;CAC1D,CAAC;AACxD,MAAM,MAAM,iBAAiB,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACvD,MAAM,MAAM,kBAAkB,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACzD,MAAM,MAAM,iBAAiB,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,oBAAoB,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;CACvH"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<script>import PersistQueryClientProvider from "../../PersistQueryClientProvider.svelte";
|
|
2
|
+
import UseQueries from "./UseQueries.svelte";
|
|
3
|
+
export let queryClient;
|
|
4
|
+
export let persistOptions;
|
|
5
|
+
export let key;
|
|
6
|
+
export let states;
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<PersistQueryClientProvider client={queryClient} {persistOptions}>
|
|
10
|
+
<UseQueries {key} {states} />
|
|
11
|
+
</PersistQueryClientProvider>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { QueryClient } from '@tanstack/svelte-query';
|
|
3
|
+
import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core';
|
|
4
|
+
import type { Writable } from 'svelte/store';
|
|
5
|
+
import type { StatusResult } from '../utils';
|
|
6
|
+
declare const __propDef: {
|
|
7
|
+
props: {
|
|
8
|
+
queryClient: QueryClient;
|
|
9
|
+
persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>;
|
|
10
|
+
key: Array<string>;
|
|
11
|
+
states: Writable<Array<StatusResult<string>>>;
|
|
12
|
+
};
|
|
13
|
+
events: {
|
|
14
|
+
[evt: string]: CustomEvent<any>;
|
|
15
|
+
};
|
|
16
|
+
slots: {};
|
|
17
|
+
};
|
|
18
|
+
export type ProviderProps = typeof __propDef.props;
|
|
19
|
+
export type ProviderEvents = typeof __propDef.events;
|
|
20
|
+
export type ProviderSlots = typeof __propDef.slots;
|
|
21
|
+
export default class Provider extends SvelteComponentTyped<ProviderProps, ProviderEvents, ProviderSlots> {
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=Provider.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Provider.svelte.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/UseQueries/Provider.svelte"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAE5C;AAGD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAsB5C,QAAA,MAAM,SAAS;;qBAD0G,WAAW;wBAAkB,KAAK,yBAAyB,EAAE,aAAa,CAAC;aAAO,MAAM,MAAM,CAAC;gBAAU,SAAS,MAAM,aAAa,MAAM,CAAC,CAAC,CAAC;;;;;;CAChN,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,oBAAoB,CAAC,aAAa,EAAE,cAAc,EAAE,aAAa,CAAC;CACvG"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<script>import { createQueries } from "@tanstack/svelte-query";
|
|
2
|
+
import { get } from "svelte/store";
|
|
3
|
+
import { sleep } from "../utils";
|
|
4
|
+
export let key;
|
|
5
|
+
export let states;
|
|
6
|
+
const state = createQueries({
|
|
7
|
+
queries: [
|
|
8
|
+
{
|
|
9
|
+
queryKey: key,
|
|
10
|
+
queryFn: async () => {
|
|
11
|
+
await sleep(10);
|
|
12
|
+
return "fetched";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
});
|
|
17
|
+
let data = get(state)[0].data;
|
|
18
|
+
let fetchStatus = get(state)[0].fetchStatus;
|
|
19
|
+
state.subscribe(([s]) => {
|
|
20
|
+
states.update((prev) => [
|
|
21
|
+
...prev,
|
|
22
|
+
{ status: s.status, data: s.data, fetchStatus: s.fetchStatus }
|
|
23
|
+
]);
|
|
24
|
+
data = s.data;
|
|
25
|
+
fetchStatus = s.fetchStatus;
|
|
26
|
+
});
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<div>
|
|
30
|
+
<h1>{data}</h1>
|
|
31
|
+
<h2>fetchStatus: {fetchStatus}</h2>
|
|
32
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { Writable } from 'svelte/store';
|
|
3
|
+
import type { StatusResult } from '../utils';
|
|
4
|
+
declare const __propDef: {
|
|
5
|
+
props: {
|
|
6
|
+
key: Array<string>;
|
|
7
|
+
states: Writable<Array<StatusResult<string>>>;
|
|
8
|
+
};
|
|
9
|
+
events: {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
};
|
|
12
|
+
slots: {};
|
|
13
|
+
};
|
|
14
|
+
export type UseQueriesProps = typeof __propDef.props;
|
|
15
|
+
export type UseQueriesEvents = typeof __propDef.events;
|
|
16
|
+
export type UseQueriesSlots = typeof __propDef.slots;
|
|
17
|
+
export default class UseQueries extends SvelteComponentTyped<UseQueriesProps, UseQueriesEvents, UseQueriesSlots> {
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=UseQueries.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseQueries.svelte.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/UseQueries/UseQueries.svelte"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAE5C;AAID,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AA2C5C,QAAA,MAAM,SAAS;;aADsC,MAAM,MAAM,CAAC;gBAAU,SAAS,MAAM,aAAa,MAAM,CAAC,CAAC,CAAC;;;;;;CAC1D,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACrD,MAAM,MAAM,gBAAgB,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACvD,MAAM,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,oBAAoB,CAAC,eAAe,EAAE,gBAAgB,EAAE,eAAe,CAAC;CAC/G"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { QueryClient } from '@tanstack/svelte-query';
|
|
3
|
+
import type { QueryClientConfig } from '@tanstack/svelte-query';
|
|
4
|
+
export declare function createQueryClient(config?: QueryClientConfig): QueryClient;
|
|
5
|
+
export declare function queryKey(): Array<string>;
|
|
6
|
+
export declare function sleep(timeout: number): Promise<void>;
|
|
7
|
+
export declare function setActTimeout(fn: () => void, ms?: number): NodeJS.Timeout;
|
|
8
|
+
export type StatusResult<T = unknown> = {
|
|
9
|
+
status: string;
|
|
10
|
+
fetchStatus: string;
|
|
11
|
+
data: T | undefined;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAEzE;AAGD,wBAAgB,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,CAGxC;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,kBAMxD;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,CAAC,GAAG,SAAS,CAAA;CACpB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { QueryClient } from '@tanstack/svelte-query';
|
|
2
|
+
import { act } from '@testing-library/svelte';
|
|
3
|
+
export function createQueryClient(config) {
|
|
4
|
+
return new QueryClient(config);
|
|
5
|
+
}
|
|
6
|
+
let queryKeyCount = 0;
|
|
7
|
+
export function queryKey() {
|
|
8
|
+
queryKeyCount++;
|
|
9
|
+
return [`query_${queryKeyCount}`];
|
|
10
|
+
}
|
|
11
|
+
export function sleep(timeout) {
|
|
12
|
+
return new Promise((resolve, _reject) => {
|
|
13
|
+
setTimeout(resolve, timeout);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export function setActTimeout(fn, ms) {
|
|
17
|
+
return setTimeout(() => {
|
|
18
|
+
act(() => {
|
|
19
|
+
fn();
|
|
20
|
+
});
|
|
21
|
+
}, ms);
|
|
22
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,qCAAqC,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,qCAAqC,CAAA"}
|
package/dist/index.js
ADDED