@tanstack/query-core 5.0.0-alpha.84 → 5.0.0-alpha.86
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/hydration.cjs +12 -4
- package/build/lib/hydration.cjs.map +1 -1
- package/build/lib/hydration.d.ts +3 -1
- package/build/lib/hydration.d.ts.map +1 -1
- package/build/lib/hydration.js +12 -4
- package/build/lib/hydration.js.map +1 -1
- package/build/lib/hydration.legacy.cjs +12 -4
- package/build/lib/hydration.legacy.cjs.map +1 -1
- package/build/lib/hydration.legacy.js +12 -4
- package/build/lib/hydration.legacy.js.map +1 -1
- package/build/lib/onlineManager.cjs +12 -29
- package/build/lib/onlineManager.cjs.map +1 -1
- package/build/lib/onlineManager.d.ts +4 -4
- package/build/lib/onlineManager.d.ts.map +1 -1
- package/build/lib/onlineManager.js +12 -29
- package/build/lib/onlineManager.js.map +1 -1
- package/build/lib/onlineManager.legacy.cjs +12 -29
- package/build/lib/onlineManager.legacy.cjs.map +1 -1
- package/build/lib/onlineManager.legacy.js +12 -29
- package/build/lib/onlineManager.legacy.js.map +1 -1
- package/build/lib/tests/utils.d.ts +3 -2
- package/build/lib/tests/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/hydration.ts +8 -0
- package/src/onlineManager.ts +16 -41
- package/src/tests/hydration.test.tsx +114 -3
- package/src/tests/onlineManager.test.tsx +6 -10
- package/src/tests/queryClient.test.tsx +9 -9
- package/src/tests/utils.ts +9 -5
package/build/lib/hydration.cjs
CHANGED
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
function dehydrateMutation(mutation) {
|
|
8
8
|
return {
|
|
9
9
|
mutationKey: mutation.options.mutationKey,
|
|
10
|
-
state: mutation.state
|
|
10
|
+
state: mutation.state,
|
|
11
|
+
...(mutation.meta && {
|
|
12
|
+
meta: mutation.meta
|
|
13
|
+
})
|
|
11
14
|
};
|
|
12
15
|
}
|
|
13
16
|
|
|
@@ -19,7 +22,10 @@ function dehydrateQuery(query) {
|
|
|
19
22
|
return {
|
|
20
23
|
state: query.state,
|
|
21
24
|
queryKey: query.queryKey,
|
|
22
|
-
queryHash: query.queryHash
|
|
25
|
+
queryHash: query.queryHash,
|
|
26
|
+
...(query.meta && {
|
|
27
|
+
meta: query.meta
|
|
28
|
+
})
|
|
23
29
|
};
|
|
24
30
|
}
|
|
25
31
|
function defaultShouldDehydrateMutation(mutation) {
|
|
@@ -52,7 +58,8 @@ function hydrate(client, dehydratedState, options) {
|
|
|
52
58
|
mutations.forEach(dehydratedMutation => {
|
|
53
59
|
mutationCache.build(client, {
|
|
54
60
|
...options?.defaultOptions?.mutations,
|
|
55
|
-
mutationKey: dehydratedMutation.mutationKey
|
|
61
|
+
mutationKey: dehydratedMutation.mutationKey,
|
|
62
|
+
meta: dehydratedMutation.meta
|
|
56
63
|
}, dehydratedMutation.state);
|
|
57
64
|
});
|
|
58
65
|
queries.forEach(dehydratedQuery => {
|
|
@@ -77,7 +84,8 @@ function hydrate(client, dehydratedState, options) {
|
|
|
77
84
|
queryCache.build(client, {
|
|
78
85
|
...options?.defaultOptions?.queries,
|
|
79
86
|
queryKey: dehydratedQuery.queryKey,
|
|
80
|
-
queryHash: dehydratedQuery.queryHash
|
|
87
|
+
queryHash: dehydratedQuery.queryHash,
|
|
88
|
+
meta: dehydratedQuery.meta
|
|
81
89
|
}, dehydratedQueryState);
|
|
82
90
|
});
|
|
83
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.cjs","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) => (filterQuery(query) ? [dehydrateQuery(query)] : []))\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","filterMutation","shouldDehydrateMutation","mutations","getMutationCache","getAll","flatMap","filterQuery","shouldDehydrateQuery","queries","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","forEach","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"hydration.cjs","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationMeta,\n MutationOptions,\n QueryKey,\n QueryMeta,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n meta?: MutationMeta\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n meta?: QueryMeta\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...(mutation.meta && { meta: mutation.meta }),\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...(query.meta && { meta: query.meta }),\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) => (filterQuery(query) ? [dehydrateQuery(query)] : []))\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n meta: dehydratedMutation.meta,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n meta: dehydratedQuery.meta,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","meta","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","filterMutation","shouldDehydrateMutation","mutations","getMutationCache","getAll","flatMap","filterQuery","shouldDehydrateQuery","queries","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","forEach","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"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"}
|
package/build/lib/hydration.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { QueryClient } from './queryClient';
|
|
2
2
|
import type { Query, QueryState } from './query';
|
|
3
|
-
import type { MutationKey, MutationOptions, QueryKey, QueryOptions } from './types';
|
|
3
|
+
import type { MutationKey, MutationMeta, MutationOptions, QueryKey, QueryMeta, QueryOptions } from './types';
|
|
4
4
|
import type { Mutation, MutationState } from './mutation';
|
|
5
5
|
export interface DehydrateOptions {
|
|
6
6
|
shouldDehydrateMutation?: (mutation: Mutation) => boolean;
|
|
@@ -15,11 +15,13 @@ export interface HydrateOptions {
|
|
|
15
15
|
interface DehydratedMutation {
|
|
16
16
|
mutationKey?: MutationKey;
|
|
17
17
|
state: MutationState;
|
|
18
|
+
meta?: MutationMeta;
|
|
18
19
|
}
|
|
19
20
|
interface DehydratedQuery {
|
|
20
21
|
queryHash: string;
|
|
21
22
|
queryKey: QueryKey;
|
|
22
23
|
state: QueryState;
|
|
24
|
+
meta?: QueryMeta;
|
|
23
25
|
}
|
|
24
26
|
export interface DehydratedState {
|
|
25
27
|
mutations: DehydratedMutation[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/hydration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,QAAQ,EACR,YAAY,EACb,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAIzD,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAA;IACzD,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE;QACf,OAAO,CAAC,EAAE,YAAY,CAAA;QACtB,SAAS,CAAC,EAAE,eAAe,CAAA;KAC5B,CAAA;CACF;AAED,UAAU,kBAAkB;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,EAAE,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/hydration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,SAAS,EACT,YAAY,EACb,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAIzD,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAA;IACzD,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE;QACf,OAAO,CAAC,EAAE,YAAY,CAAA;QACtB,SAAS,CAAC,EAAE,eAAe,CAAA;KAC5B,CAAA;CACF;AAED,UAAU,kBAAkB;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,EAAE,aAAa,CAAA;IACpB,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,kBAAkB,EAAE,CAAA;IAC/B,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B;AAyBD,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,QAAQ,WAEhE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,KAAK,WAEvD;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,gBAAqB,GAC7B,eAAe,CAoBjB;AAED,wBAAgB,OAAO,CACrB,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,OAAO,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,IAAI,CAuDN"}
|
package/build/lib/hydration.js
CHANGED
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
function dehydrateMutation(mutation) {
|
|
6
6
|
return {
|
|
7
7
|
mutationKey: mutation.options.mutationKey,
|
|
8
|
-
state: mutation.state
|
|
8
|
+
state: mutation.state,
|
|
9
|
+
...(mutation.meta && {
|
|
10
|
+
meta: mutation.meta
|
|
11
|
+
})
|
|
9
12
|
};
|
|
10
13
|
}
|
|
11
14
|
|
|
@@ -17,7 +20,10 @@ function dehydrateQuery(query) {
|
|
|
17
20
|
return {
|
|
18
21
|
state: query.state,
|
|
19
22
|
queryKey: query.queryKey,
|
|
20
|
-
queryHash: query.queryHash
|
|
23
|
+
queryHash: query.queryHash,
|
|
24
|
+
...(query.meta && {
|
|
25
|
+
meta: query.meta
|
|
26
|
+
})
|
|
21
27
|
};
|
|
22
28
|
}
|
|
23
29
|
function defaultShouldDehydrateMutation(mutation) {
|
|
@@ -50,7 +56,8 @@ function hydrate(client, dehydratedState, options) {
|
|
|
50
56
|
mutations.forEach(dehydratedMutation => {
|
|
51
57
|
mutationCache.build(client, {
|
|
52
58
|
...options?.defaultOptions?.mutations,
|
|
53
|
-
mutationKey: dehydratedMutation.mutationKey
|
|
59
|
+
mutationKey: dehydratedMutation.mutationKey,
|
|
60
|
+
meta: dehydratedMutation.meta
|
|
54
61
|
}, dehydratedMutation.state);
|
|
55
62
|
});
|
|
56
63
|
queries.forEach(dehydratedQuery => {
|
|
@@ -75,7 +82,8 @@ function hydrate(client, dehydratedState, options) {
|
|
|
75
82
|
queryCache.build(client, {
|
|
76
83
|
...options?.defaultOptions?.queries,
|
|
77
84
|
queryKey: dehydratedQuery.queryKey,
|
|
78
|
-
queryHash: dehydratedQuery.queryHash
|
|
85
|
+
queryHash: dehydratedQuery.queryHash,
|
|
86
|
+
meta: dehydratedQuery.meta
|
|
79
87
|
}, dehydratedQueryState);
|
|
80
88
|
});
|
|
81
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.js","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) => (filterQuery(query) ? [dehydrateQuery(query)] : []))\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","filterMutation","shouldDehydrateMutation","mutations","getMutationCache","getAll","flatMap","filterQuery","shouldDehydrateQuery","queries","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","forEach","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"
|
|
1
|
+
{"version":3,"file":"hydration.js","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationMeta,\n MutationOptions,\n QueryKey,\n QueryMeta,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n meta?: MutationMeta\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n meta?: QueryMeta\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...(mutation.meta && { meta: mutation.meta }),\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...(query.meta && { meta: query.meta }),\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) => (filterQuery(query) ? [dehydrateQuery(query)] : []))\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n meta: dehydratedMutation.meta,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n meta: dehydratedQuery.meta,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","meta","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","filterMutation","shouldDehydrateMutation","mutations","getMutationCache","getAll","flatMap","filterQuery","shouldDehydrateQuery","queries","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","forEach","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"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"}
|
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
function dehydrateMutation(mutation) {
|
|
8
8
|
return {
|
|
9
9
|
mutationKey: mutation.options.mutationKey,
|
|
10
|
-
state: mutation.state
|
|
10
|
+
state: mutation.state,
|
|
11
|
+
...(mutation.meta && {
|
|
12
|
+
meta: mutation.meta
|
|
13
|
+
})
|
|
11
14
|
};
|
|
12
15
|
}
|
|
13
16
|
|
|
@@ -19,7 +22,10 @@ function dehydrateQuery(query) {
|
|
|
19
22
|
return {
|
|
20
23
|
state: query.state,
|
|
21
24
|
queryKey: query.queryKey,
|
|
22
|
-
queryHash: query.queryHash
|
|
25
|
+
queryHash: query.queryHash,
|
|
26
|
+
...(query.meta && {
|
|
27
|
+
meta: query.meta
|
|
28
|
+
})
|
|
23
29
|
};
|
|
24
30
|
}
|
|
25
31
|
function defaultShouldDehydrateMutation(mutation) {
|
|
@@ -54,7 +60,8 @@ function hydrate(client, dehydratedState, options) {
|
|
|
54
60
|
var _options$defaultOptio;
|
|
55
61
|
mutationCache.build(client, {
|
|
56
62
|
...(options == null ? void 0 : (_options$defaultOptio = options.defaultOptions) == null ? void 0 : _options$defaultOptio.mutations),
|
|
57
|
-
mutationKey: dehydratedMutation.mutationKey
|
|
63
|
+
mutationKey: dehydratedMutation.mutationKey,
|
|
64
|
+
meta: dehydratedMutation.meta
|
|
58
65
|
}, dehydratedMutation.state);
|
|
59
66
|
});
|
|
60
67
|
queries.forEach(dehydratedQuery => {
|
|
@@ -80,7 +87,8 @@ function hydrate(client, dehydratedState, options) {
|
|
|
80
87
|
queryCache.build(client, {
|
|
81
88
|
...(options == null ? void 0 : (_options$defaultOptio2 = options.defaultOptions) == null ? void 0 : _options$defaultOptio2.queries),
|
|
82
89
|
queryKey: dehydratedQuery.queryKey,
|
|
83
|
-
queryHash: dehydratedQuery.queryHash
|
|
90
|
+
queryHash: dehydratedQuery.queryHash,
|
|
91
|
+
meta: dehydratedQuery.meta
|
|
84
92
|
}, dehydratedQueryState);
|
|
85
93
|
});
|
|
86
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.legacy.cjs","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) => (filterQuery(query) ? [dehydrateQuery(query)] : []))\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","_options$shouldDehydr","_options$shouldDehydr2","filterMutation","shouldDehydrateMutation","mutations","getMutationCache","getAll","flatMap","filterQuery","shouldDehydrateQuery","queries","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","forEach","dehydratedMutation","_options$defaultOptio","build","defaultOptions","dehydratedQuery","_options$defaultOptio2","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"hydration.legacy.cjs","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationMeta,\n MutationOptions,\n QueryKey,\n QueryMeta,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n meta?: MutationMeta\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n meta?: QueryMeta\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...(mutation.meta && { meta: mutation.meta }),\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...(query.meta && { meta: query.meta }),\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) => (filterQuery(query) ? [dehydrateQuery(query)] : []))\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n meta: dehydratedMutation.meta,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n meta: dehydratedQuery.meta,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","meta","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","_options$shouldDehydr","_options$shouldDehydr2","filterMutation","shouldDehydrateMutation","mutations","getMutationCache","getAll","flatMap","filterQuery","shouldDehydrateQuery","queries","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","forEach","dehydratedMutation","_options$defaultOptio","build","defaultOptions","dehydratedQuery","_options$defaultOptio2","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"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"}
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
function dehydrateMutation(mutation) {
|
|
6
6
|
return {
|
|
7
7
|
mutationKey: mutation.options.mutationKey,
|
|
8
|
-
state: mutation.state
|
|
8
|
+
state: mutation.state,
|
|
9
|
+
...(mutation.meta && {
|
|
10
|
+
meta: mutation.meta
|
|
11
|
+
})
|
|
9
12
|
};
|
|
10
13
|
}
|
|
11
14
|
|
|
@@ -17,7 +20,10 @@ function dehydrateQuery(query) {
|
|
|
17
20
|
return {
|
|
18
21
|
state: query.state,
|
|
19
22
|
queryKey: query.queryKey,
|
|
20
|
-
queryHash: query.queryHash
|
|
23
|
+
queryHash: query.queryHash,
|
|
24
|
+
...(query.meta && {
|
|
25
|
+
meta: query.meta
|
|
26
|
+
})
|
|
21
27
|
};
|
|
22
28
|
}
|
|
23
29
|
function defaultShouldDehydrateMutation(mutation) {
|
|
@@ -52,7 +58,8 @@ function hydrate(client, dehydratedState, options) {
|
|
|
52
58
|
var _options$defaultOptio;
|
|
53
59
|
mutationCache.build(client, {
|
|
54
60
|
...(options == null ? void 0 : (_options$defaultOptio = options.defaultOptions) == null ? void 0 : _options$defaultOptio.mutations),
|
|
55
|
-
mutationKey: dehydratedMutation.mutationKey
|
|
61
|
+
mutationKey: dehydratedMutation.mutationKey,
|
|
62
|
+
meta: dehydratedMutation.meta
|
|
56
63
|
}, dehydratedMutation.state);
|
|
57
64
|
});
|
|
58
65
|
queries.forEach(dehydratedQuery => {
|
|
@@ -78,7 +85,8 @@ function hydrate(client, dehydratedState, options) {
|
|
|
78
85
|
queryCache.build(client, {
|
|
79
86
|
...(options == null ? void 0 : (_options$defaultOptio2 = options.defaultOptions) == null ? void 0 : _options$defaultOptio2.queries),
|
|
80
87
|
queryKey: dehydratedQuery.queryKey,
|
|
81
|
-
queryHash: dehydratedQuery.queryHash
|
|
88
|
+
queryHash: dehydratedQuery.queryHash,
|
|
89
|
+
meta: dehydratedQuery.meta
|
|
82
90
|
}, dehydratedQueryState);
|
|
83
91
|
});
|
|
84
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.legacy.js","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) => (filterQuery(query) ? [dehydrateQuery(query)] : []))\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","_options$shouldDehydr","_options$shouldDehydr2","filterMutation","shouldDehydrateMutation","mutations","getMutationCache","getAll","flatMap","filterQuery","shouldDehydrateQuery","queries","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","forEach","dehydratedMutation","_options$defaultOptio","build","defaultOptions","dehydratedQuery","_options$defaultOptio2","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"
|
|
1
|
+
{"version":3,"file":"hydration.legacy.js","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationMeta,\n MutationOptions,\n QueryKey,\n QueryMeta,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n meta?: MutationMeta\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n meta?: QueryMeta\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...(mutation.meta && { meta: mutation.meta }),\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...(query.meta && { meta: query.meta }),\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) => (filterQuery(query) ? [dehydrateQuery(query)] : []))\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n meta: dehydratedMutation.meta,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n meta: dehydratedQuery.meta,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","meta","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","_options$shouldDehydr","_options$shouldDehydr2","filterMutation","shouldDehydrateMutation","mutations","getMutationCache","getAll","flatMap","filterQuery","shouldDehydrateQuery","queries","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","forEach","dehydratedMutation","_options$defaultOptio","build","defaultOptions","dehydratedQuery","_options$defaultOptio2","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"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"}
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
var subscribable = require('./subscribable.cjs');
|
|
4
4
|
var utils = require('./utils.cjs');
|
|
5
5
|
|
|
6
|
-
const onlineEvents = ['online', 'offline'];
|
|
7
6
|
class OnlineManager extends subscribable.Subscribable {
|
|
8
|
-
#online;
|
|
7
|
+
#online = true;
|
|
9
8
|
#cleanup;
|
|
10
9
|
#setup;
|
|
11
10
|
constructor() {
|
|
@@ -14,16 +13,15 @@ class OnlineManager extends subscribable.Subscribable {
|
|
|
14
13
|
// addEventListener does not exist in React Native, but window does
|
|
15
14
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
16
15
|
if (!utils.isServer && window.addEventListener) {
|
|
17
|
-
const
|
|
16
|
+
const onlineListener = () => onOnline(true);
|
|
17
|
+
const offlineListener = () => onOnline(false);
|
|
18
18
|
// Listen to online
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
19
|
+
window.addEventListener('online', onlineListener, false);
|
|
20
|
+
window.addEventListener('offline', offlineListener, false);
|
|
22
21
|
return () => {
|
|
23
22
|
// Be sure to unsubscribe if a new handler is set
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
});
|
|
23
|
+
window.removeEventListener('online', onlineListener);
|
|
24
|
+
window.removeEventListener('offline', offlineListener);
|
|
27
25
|
};
|
|
28
26
|
}
|
|
29
27
|
return;
|
|
@@ -43,34 +41,19 @@ class OnlineManager extends subscribable.Subscribable {
|
|
|
43
41
|
setEventListener(setup) {
|
|
44
42
|
this.#setup = setup;
|
|
45
43
|
this.#cleanup?.();
|
|
46
|
-
this.#cleanup = setup(
|
|
47
|
-
if (typeof online === 'boolean') {
|
|
48
|
-
this.setOnline(online);
|
|
49
|
-
} else {
|
|
50
|
-
this.onOnline();
|
|
51
|
-
}
|
|
52
|
-
});
|
|
44
|
+
this.#cleanup = setup(this.setOnline.bind(this));
|
|
53
45
|
}
|
|
54
46
|
setOnline(online) {
|
|
55
47
|
const changed = this.#online !== online;
|
|
56
48
|
if (changed) {
|
|
57
49
|
this.#online = online;
|
|
58
|
-
this.
|
|
50
|
+
this.listeners.forEach(listener => {
|
|
51
|
+
listener(online);
|
|
52
|
+
});
|
|
59
53
|
}
|
|
60
54
|
}
|
|
61
|
-
onOnline() {
|
|
62
|
-
this.listeners.forEach(listener => {
|
|
63
|
-
listener();
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
55
|
isOnline() {
|
|
67
|
-
|
|
68
|
-
return this.#online;
|
|
69
|
-
}
|
|
70
|
-
if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
return navigator.onLine;
|
|
56
|
+
return this.#online;
|
|
74
57
|
}
|
|
75
58
|
}
|
|
76
59
|
const onlineManager = new OnlineManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onlineManager.cjs","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype
|
|
1
|
+
{"version":3,"file":"onlineManager.cjs","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable<Listener> {\n #online = true\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onOnline) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const onlineListener = () => onOnline(true)\n const offlineListener = () => onOnline(false)\n // Listen to online\n window.addEventListener('online', onlineListener, false)\n window.addEventListener('offline', offlineListener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', onlineListener)\n window.removeEventListener('offline', offlineListener)\n }\n }\n\n return\n }\n }\n\n protected onSubscribe(): void {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.()\n this.#cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.#setup = setup\n this.#cleanup?.()\n this.#cleanup = setup(this.setOnline.bind(this))\n }\n\n setOnline(online: boolean): void {\n const changed = this.#online !== online\n\n if (changed) {\n this.#online = online\n this.listeners.forEach((listener) => {\n listener(online)\n })\n }\n }\n\n isOnline(): boolean {\n return this.#online\n }\n}\n\nexport const onlineManager = new OnlineManager()\n"],"names":["OnlineManager","Subscribable","constructor","onOnline","isServer","window","addEventListener","onlineListener","offlineListener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","undefined","setup","setOnline","bind","online","changed","listeners","forEach","listener","isOnline","onlineManager"],"mappings":";;;;;AAMO,MAAMA,aAAa,SAASC,yBAAY,CAAW;EACxD,OAAO,GAAG,IAAI,CAAA;AACd,EAAA,QAAQ,CAAA;AAER,EAAA,MAAM,CAAA;AAENC,EAAAA,WAAWA,GAAG;AACZ,IAAA,KAAK,EAAE,CAAA;AACP,IAAA,IAAI,CAAC,MAAM,GAAIC,QAAQ,IAAK;AAC1B;AACA;AACA,MAAA,IAAI,CAACC,cAAQ,IAAIC,MAAM,CAACC,gBAAgB,EAAE;AACxC,QAAA,MAAMC,cAAc,GAAGA,MAAMJ,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC3C,QAAA,MAAMK,eAAe,GAAGA,MAAML,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7C;QACAE,MAAM,CAACC,gBAAgB,CAAC,QAAQ,EAAEC,cAAc,EAAE,KAAK,CAAC,CAAA;QACxDF,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEE,eAAe,EAAE,KAAK,CAAC,CAAA;AAE1D,QAAA,OAAO,MAAM;AACX;AACAH,UAAAA,MAAM,CAACI,mBAAmB,CAAC,QAAQ,EAAEF,cAAc,CAAC,CAAA;AACpDF,UAAAA,MAAM,CAACI,mBAAmB,CAAC,SAAS,EAAED,eAAe,CAAC,CAAA;SACvD,CAAA;AACH,OAAA;AAEA,MAAA,OAAA;KACD,CAAA;AACH,GAAA;AAEUE,EAAAA,WAAWA,GAAS;AAC5B,IAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,MAAA,IAAI,CAACC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACpC,KAAA;AACF,GAAA;AAEUC,EAAAA,aAAaA,GAAG;AACxB,IAAA,IAAI,CAAC,IAAI,CAACC,YAAY,EAAE,EAAE;AACxB,MAAA,IAAI,CAAC,QAAQ,IAAI,CAAA;AACjB,MAAA,IAAI,CAAC,QAAQ,GAAGC,SAAS,CAAA;AAC3B,KAAA;AACF,GAAA;EAEAH,gBAAgBA,CAACI,KAAc,EAAQ;AACrC,IAAA,IAAI,CAAC,MAAM,GAAGA,KAAK,CAAA;AACnB,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAA;AACjB,IAAA,IAAI,CAAC,QAAQ,GAAGA,KAAK,CAAC,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAClD,GAAA;EAEAD,SAASA,CAACE,MAAe,EAAQ;AAC/B,IAAA,MAAMC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAKD,MAAM,CAAA;AAEvC,IAAA,IAAIC,OAAO,EAAE;AACX,MAAA,IAAI,CAAC,OAAO,GAAGD,MAAM,CAAA;AACrB,MAAA,IAAI,CAACE,SAAS,CAACC,OAAO,CAAEC,QAAQ,IAAK;QACnCA,QAAQ,CAACJ,MAAM,CAAC,CAAA;AAClB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AAEAK,EAAAA,QAAQA,GAAY;IAClB,OAAO,IAAI,CAAC,OAAO,CAAA;AACrB,GAAA;AACF,CAAA;MAEaC,aAAa,GAAG,IAAIxB,aAAa;;;;;"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Subscribable } from './subscribable';
|
|
2
|
-
type
|
|
3
|
-
|
|
2
|
+
type Listener = (online: boolean) => void;
|
|
3
|
+
type SetupFn = (setOnline: Listener) => (() => void) | undefined;
|
|
4
|
+
export declare class OnlineManager extends Subscribable<Listener> {
|
|
4
5
|
#private;
|
|
5
6
|
constructor();
|
|
6
7
|
protected onSubscribe(): void;
|
|
7
8
|
protected onUnsubscribe(): void;
|
|
8
9
|
setEventListener(setup: SetupFn): void;
|
|
9
|
-
setOnline(online
|
|
10
|
-
onOnline(): void;
|
|
10
|
+
setOnline(online: boolean): void;
|
|
11
11
|
isOnline(): boolean;
|
|
12
12
|
}
|
|
13
13
|
export declare const onlineManager: OnlineManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onlineManager.d.ts","sourceRoot":"","sources":["../../src/onlineManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,KAAK,
|
|
1
|
+
{"version":3,"file":"onlineManager.d.ts","sourceRoot":"","sources":["../../src/onlineManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;AACzC,KAAK,OAAO,GAAG,CAAC,SAAS,EAAE,QAAQ,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;AAEhE,qBAAa,aAAc,SAAQ,YAAY,CAAC,QAAQ,CAAC;;;IA6BvD,SAAS,CAAC,WAAW,IAAI,IAAI;IAM7B,SAAS,CAAC,aAAa;IAOvB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMtC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAWhC,QAAQ,IAAI,OAAO;CAGpB;AAED,eAAO,MAAM,aAAa,eAAsB,CAAA"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Subscribable } from './subscribable.js';
|
|
2
2
|
import { isServer } from './utils.js';
|
|
3
3
|
|
|
4
|
-
const onlineEvents = ['online', 'offline'];
|
|
5
4
|
class OnlineManager extends Subscribable {
|
|
6
|
-
#online;
|
|
5
|
+
#online = true;
|
|
7
6
|
#cleanup;
|
|
8
7
|
#setup;
|
|
9
8
|
constructor() {
|
|
@@ -12,16 +11,15 @@ class OnlineManager extends Subscribable {
|
|
|
12
11
|
// addEventListener does not exist in React Native, but window does
|
|
13
12
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
14
13
|
if (!isServer && window.addEventListener) {
|
|
15
|
-
const
|
|
14
|
+
const onlineListener = () => onOnline(true);
|
|
15
|
+
const offlineListener = () => onOnline(false);
|
|
16
16
|
// Listen to online
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
});
|
|
17
|
+
window.addEventListener('online', onlineListener, false);
|
|
18
|
+
window.addEventListener('offline', offlineListener, false);
|
|
20
19
|
return () => {
|
|
21
20
|
// Be sure to unsubscribe if a new handler is set
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
21
|
+
window.removeEventListener('online', onlineListener);
|
|
22
|
+
window.removeEventListener('offline', offlineListener);
|
|
25
23
|
};
|
|
26
24
|
}
|
|
27
25
|
return;
|
|
@@ -41,34 +39,19 @@ class OnlineManager extends Subscribable {
|
|
|
41
39
|
setEventListener(setup) {
|
|
42
40
|
this.#setup = setup;
|
|
43
41
|
this.#cleanup?.();
|
|
44
|
-
this.#cleanup = setup(
|
|
45
|
-
if (typeof online === 'boolean') {
|
|
46
|
-
this.setOnline(online);
|
|
47
|
-
} else {
|
|
48
|
-
this.onOnline();
|
|
49
|
-
}
|
|
50
|
-
});
|
|
42
|
+
this.#cleanup = setup(this.setOnline.bind(this));
|
|
51
43
|
}
|
|
52
44
|
setOnline(online) {
|
|
53
45
|
const changed = this.#online !== online;
|
|
54
46
|
if (changed) {
|
|
55
47
|
this.#online = online;
|
|
56
|
-
this.
|
|
48
|
+
this.listeners.forEach(listener => {
|
|
49
|
+
listener(online);
|
|
50
|
+
});
|
|
57
51
|
}
|
|
58
52
|
}
|
|
59
|
-
onOnline() {
|
|
60
|
-
this.listeners.forEach(listener => {
|
|
61
|
-
listener();
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
53
|
isOnline() {
|
|
65
|
-
|
|
66
|
-
return this.#online;
|
|
67
|
-
}
|
|
68
|
-
if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
return navigator.onLine;
|
|
54
|
+
return this.#online;
|
|
72
55
|
}
|
|
73
56
|
}
|
|
74
57
|
const onlineManager = new OnlineManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onlineManager.js","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype
|
|
1
|
+
{"version":3,"file":"onlineManager.js","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable<Listener> {\n #online = true\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onOnline) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const onlineListener = () => onOnline(true)\n const offlineListener = () => onOnline(false)\n // Listen to online\n window.addEventListener('online', onlineListener, false)\n window.addEventListener('offline', offlineListener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', onlineListener)\n window.removeEventListener('offline', offlineListener)\n }\n }\n\n return\n }\n }\n\n protected onSubscribe(): void {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.()\n this.#cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.#setup = setup\n this.#cleanup?.()\n this.#cleanup = setup(this.setOnline.bind(this))\n }\n\n setOnline(online: boolean): void {\n const changed = this.#online !== online\n\n if (changed) {\n this.#online = online\n this.listeners.forEach((listener) => {\n listener(online)\n })\n }\n }\n\n isOnline(): boolean {\n return this.#online\n }\n}\n\nexport const onlineManager = new OnlineManager()\n"],"names":["OnlineManager","Subscribable","constructor","onOnline","isServer","window","addEventListener","onlineListener","offlineListener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","undefined","setup","setOnline","bind","online","changed","listeners","forEach","listener","isOnline","onlineManager"],"mappings":";;;AAMO,MAAMA,aAAa,SAASC,YAAY,CAAW;EACxD,OAAO,GAAG,IAAI,CAAA;AACd,EAAA,QAAQ,CAAA;AAER,EAAA,MAAM,CAAA;AAENC,EAAAA,WAAWA,GAAG;AACZ,IAAA,KAAK,EAAE,CAAA;AACP,IAAA,IAAI,CAAC,MAAM,GAAIC,QAAQ,IAAK;AAC1B;AACA;AACA,MAAA,IAAI,CAACC,QAAQ,IAAIC,MAAM,CAACC,gBAAgB,EAAE;AACxC,QAAA,MAAMC,cAAc,GAAGA,MAAMJ,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC3C,QAAA,MAAMK,eAAe,GAAGA,MAAML,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7C;QACAE,MAAM,CAACC,gBAAgB,CAAC,QAAQ,EAAEC,cAAc,EAAE,KAAK,CAAC,CAAA;QACxDF,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEE,eAAe,EAAE,KAAK,CAAC,CAAA;AAE1D,QAAA,OAAO,MAAM;AACX;AACAH,UAAAA,MAAM,CAACI,mBAAmB,CAAC,QAAQ,EAAEF,cAAc,CAAC,CAAA;AACpDF,UAAAA,MAAM,CAACI,mBAAmB,CAAC,SAAS,EAAED,eAAe,CAAC,CAAA;SACvD,CAAA;AACH,OAAA;AAEA,MAAA,OAAA;KACD,CAAA;AACH,GAAA;AAEUE,EAAAA,WAAWA,GAAS;AAC5B,IAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,MAAA,IAAI,CAACC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACpC,KAAA;AACF,GAAA;AAEUC,EAAAA,aAAaA,GAAG;AACxB,IAAA,IAAI,CAAC,IAAI,CAACC,YAAY,EAAE,EAAE;AACxB,MAAA,IAAI,CAAC,QAAQ,IAAI,CAAA;AACjB,MAAA,IAAI,CAAC,QAAQ,GAAGC,SAAS,CAAA;AAC3B,KAAA;AACF,GAAA;EAEAH,gBAAgBA,CAACI,KAAc,EAAQ;AACrC,IAAA,IAAI,CAAC,MAAM,GAAGA,KAAK,CAAA;AACnB,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAA;AACjB,IAAA,IAAI,CAAC,QAAQ,GAAGA,KAAK,CAAC,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAClD,GAAA;EAEAD,SAASA,CAACE,MAAe,EAAQ;AAC/B,IAAA,MAAMC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAKD,MAAM,CAAA;AAEvC,IAAA,IAAIC,OAAO,EAAE;AACX,MAAA,IAAI,CAAC,OAAO,GAAGD,MAAM,CAAA;AACrB,MAAA,IAAI,CAACE,SAAS,CAACC,OAAO,CAAEC,QAAQ,IAAK;QACnCA,QAAQ,CAACJ,MAAM,CAAC,CAAA;AAClB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AAEAK,EAAAA,QAAQA,GAAY;IAClB,OAAO,IAAI,CAAC,OAAO,CAAA;AACrB,GAAA;AACF,CAAA;MAEaC,aAAa,GAAG,IAAIxB,aAAa;;;;"}
|