@tanstack/react-query-persist-client 5.0.0-beta.3 → 5.0.0-beta.31

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.
@@ -46,30 +46,31 @@ var PersistQueryClientProvider = ({
46
46
  }) => {
47
47
  const [isRestoring, setIsRestoring] = React.useState(true);
48
48
  const refs = React.useRef({ persistOptions, onSuccess });
49
+ const didRestore = React.useRef(false);
49
50
  React.useEffect(() => {
50
51
  refs.current = { persistOptions, onSuccess };
51
52
  });
52
53
  React.useEffect(() => {
53
- let isStale = false;
54
- setIsRestoring(true);
55
- const [unsubscribe, promise] = (0, import_query_persist_client_core.persistQueryClient)({
56
- ...refs.current.persistOptions,
57
- queryClient: client
58
- });
59
- promise.then(async () => {
60
- var _a, _b;
61
- if (!isStale) {
54
+ if (!didRestore.current) {
55
+ didRestore.current = true;
56
+ setIsRestoring(true);
57
+ const [unsubscribe, promise] = (0, import_query_persist_client_core.persistQueryClient)({
58
+ ...refs.current.persistOptions,
59
+ queryClient: client
60
+ });
61
+ promise.then(async () => {
62
+ var _a, _b;
62
63
  try {
63
64
  await ((_b = (_a = refs.current).onSuccess) == null ? void 0 : _b.call(_a));
64
65
  } finally {
65
66
  setIsRestoring(false);
66
67
  }
67
- }
68
- });
69
- return () => {
70
- isStale = true;
71
- unsubscribe();
72
- };
68
+ });
69
+ return () => {
70
+ unsubscribe();
71
+ };
72
+ }
73
+ return void 0;
73
74
  }, [client]);
74
75
  return /* @__PURE__ */ React.createElement(import_react_query.QueryClientProvider, { client, ...props }, /* @__PURE__ */ React.createElement(import_react_query.IsRestoringProvider, { value: isRestoring }, children));
75
76
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport { IsRestoringProvider, QueryClientProvider } from '@tanstack/react-query'\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => Promise<unknown> | unknown\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(async () => {\n if (!isStale) {\n try {\n await refs.current.onSuccess?.()\n } finally {\n setIsRestoring(false)\n }\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,YAAuB;AAEvB,uCAAmC;AACnC,yBAAyD;AASlD,IAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAoD;AAClD,QAAM,CAAC,aAAa,cAAc,IAAU,eAAS,IAAI;AACzD,QAAM,OAAa,aAAO,EAAE,gBAAgB,UAAU,CAAC;AAEvD,EAAM,gBAAU,MAAM;AACpB,SAAK,UAAU,EAAE,gBAAgB,UAAU;AAAA,EAC7C,CAAC;AAED,EAAM,gBAAU,MAAM;AACpB,QAAI,UAAU;AACd,mBAAe,IAAI;AACnB,UAAM,CAAC,aAAa,OAAO,QAAI,qDAAmB;AAAA,MAChD,GAAG,KAAK,QAAQ;AAAA,MAChB,aAAa;AAAA,IACf,CAAC;AAED,YAAQ,KAAK,YAAY;AAnC7B;AAoCM,UAAI,CAAC,SAAS;AACZ,YAAI;AACF,kBAAM,gBAAK,SAAQ,cAAb;AAAA,QACR,UAAE;AACA,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,gBAAU;AACV,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,oCAAC,0CAAoB,QAAiB,GAAG,SACvC,oCAAC,0CAAoB,OAAO,eAAc,QAAS,CACrD;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport { IsRestoringProvider, QueryClientProvider } from '@tanstack/react-query'\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => Promise<unknown> | unknown\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n const didRestore = React.useRef(false)\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n if (!didRestore.current) {\n didRestore.current = true\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(async () => {\n try {\n await refs.current.onSuccess?.()\n } finally {\n setIsRestoring(false)\n }\n })\n\n return () => {\n unsubscribe()\n }\n }\n return undefined\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,YAAuB;AAEvB,uCAAmC;AACnC,yBAAyD;AASlD,IAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAoD;AAClD,QAAM,CAAC,aAAa,cAAc,IAAU,eAAS,IAAI;AACzD,QAAM,OAAa,aAAO,EAAE,gBAAgB,UAAU,CAAC;AACvD,QAAM,aAAmB,aAAO,KAAK;AAErC,EAAM,gBAAU,MAAM;AACpB,SAAK,UAAU,EAAE,gBAAgB,UAAU;AAAA,EAC7C,CAAC;AAED,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,WAAW,SAAS;AACvB,iBAAW,UAAU;AACrB,qBAAe,IAAI;AACnB,YAAM,CAAC,aAAa,OAAO,QAAI,qDAAmB;AAAA,QAChD,GAAG,KAAK,QAAQ;AAAA,QAChB,aAAa;AAAA,MACf,CAAC;AAED,cAAQ,KAAK,YAAY;AArC/B;AAsCQ,YAAI;AACF,kBAAM,gBAAK,SAAQ,cAAb;AAAA,QACR,UAAE;AACA,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF,CAAC;AAED,aAAO,MAAM;AACX,oBAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,oCAAC,0CAAoB,QAAiB,GAAG,SACvC,oCAAC,0CAAoB,OAAO,eAAc,QAAS,CACrD;AAEJ;","names":[]}
@@ -13,30 +13,31 @@ var PersistQueryClientProvider = ({
13
13
  }) => {
14
14
  const [isRestoring, setIsRestoring] = React.useState(true);
15
15
  const refs = React.useRef({ persistOptions, onSuccess });
16
+ const didRestore = React.useRef(false);
16
17
  React.useEffect(() => {
17
18
  refs.current = { persistOptions, onSuccess };
18
19
  });
19
20
  React.useEffect(() => {
20
- let isStale = false;
21
- setIsRestoring(true);
22
- const [unsubscribe, promise] = persistQueryClient({
23
- ...refs.current.persistOptions,
24
- queryClient: client
25
- });
26
- promise.then(async () => {
27
- var _a, _b;
28
- if (!isStale) {
21
+ if (!didRestore.current) {
22
+ didRestore.current = true;
23
+ setIsRestoring(true);
24
+ const [unsubscribe, promise] = persistQueryClient({
25
+ ...refs.current.persistOptions,
26
+ queryClient: client
27
+ });
28
+ promise.then(async () => {
29
+ var _a, _b;
29
30
  try {
30
31
  await ((_b = (_a = refs.current).onSuccess) == null ? void 0 : _b.call(_a));
31
32
  } finally {
32
33
  setIsRestoring(false);
33
34
  }
34
- }
35
- });
36
- return () => {
37
- isStale = true;
38
- unsubscribe();
39
- };
35
+ });
36
+ return () => {
37
+ unsubscribe();
38
+ };
39
+ }
40
+ return void 0;
40
41
  }, [client]);
41
42
  return /* @__PURE__ */ React.createElement(QueryClientProvider, { client, ...props }, /* @__PURE__ */ React.createElement(IsRestoringProvider, { value: isRestoring }, children));
42
43
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport { IsRestoringProvider, QueryClientProvider } from '@tanstack/react-query'\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => Promise<unknown> | unknown\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(async () => {\n if (!isStale) {\n try {\n await refs.current.onSuccess?.()\n } finally {\n setIsRestoring(false)\n }\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"mappings":";;;AACA,YAAY,WAAW;AAEvB,SAAS,0BAA0B;AACnC,SAAS,qBAAqB,2BAA2B;AASlD,IAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAoD;AAClD,QAAM,CAAC,aAAa,cAAc,IAAU,eAAS,IAAI;AACzD,QAAM,OAAa,aAAO,EAAE,gBAAgB,UAAU,CAAC;AAEvD,EAAM,gBAAU,MAAM;AACpB,SAAK,UAAU,EAAE,gBAAgB,UAAU;AAAA,EAC7C,CAAC;AAED,EAAM,gBAAU,MAAM;AACpB,QAAI,UAAU;AACd,mBAAe,IAAI;AACnB,UAAM,CAAC,aAAa,OAAO,IAAI,mBAAmB;AAAA,MAChD,GAAG,KAAK,QAAQ;AAAA,MAChB,aAAa;AAAA,IACf,CAAC;AAED,YAAQ,KAAK,YAAY;AAnC7B;AAoCM,UAAI,CAAC,SAAS;AACZ,YAAI;AACF,kBAAM,gBAAK,SAAQ,cAAb;AAAA,QACR,UAAE;AACA,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,gBAAU;AACV,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,oCAAC,uBAAoB,QAAiB,GAAG,SACvC,oCAAC,uBAAoB,OAAO,eAAc,QAAS,CACrD;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport { IsRestoringProvider, QueryClientProvider } from '@tanstack/react-query'\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => Promise<unknown> | unknown\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n const didRestore = React.useRef(false)\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n if (!didRestore.current) {\n didRestore.current = true\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(async () => {\n try {\n await refs.current.onSuccess?.()\n } finally {\n setIsRestoring(false)\n }\n })\n\n return () => {\n unsubscribe()\n }\n }\n return undefined\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"mappings":";;;AACA,YAAY,WAAW;AAEvB,SAAS,0BAA0B;AACnC,SAAS,qBAAqB,2BAA2B;AASlD,IAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAoD;AAClD,QAAM,CAAC,aAAa,cAAc,IAAU,eAAS,IAAI;AACzD,QAAM,OAAa,aAAO,EAAE,gBAAgB,UAAU,CAAC;AACvD,QAAM,aAAmB,aAAO,KAAK;AAErC,EAAM,gBAAU,MAAM;AACpB,SAAK,UAAU,EAAE,gBAAgB,UAAU;AAAA,EAC7C,CAAC;AAED,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,WAAW,SAAS;AACvB,iBAAW,UAAU;AACrB,qBAAe,IAAI;AACnB,YAAM,CAAC,aAAa,OAAO,IAAI,mBAAmB;AAAA,QAChD,GAAG,KAAK,QAAQ;AAAA,QAChB,aAAa;AAAA,MACf,CAAC;AAED,cAAQ,KAAK,YAAY;AArC/B;AAsCQ,YAAI;AACF,kBAAM,gBAAK,SAAQ,cAAb;AAAA,QACR,UAAE;AACA,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF,CAAC;AAED,aAAO,MAAM;AACX,oBAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,oCAAC,uBAAoB,QAAiB,GAAG,SACvC,oCAAC,uBAAoB,OAAO,eAAc,QAAS,CACrD;AAEJ;","names":[]}
@@ -46,29 +46,30 @@ var PersistQueryClientProvider = ({
46
46
  }) => {
47
47
  const [isRestoring, setIsRestoring] = React.useState(true);
48
48
  const refs = React.useRef({ persistOptions, onSuccess });
49
+ const didRestore = React.useRef(false);
49
50
  React.useEffect(() => {
50
51
  refs.current = { persistOptions, onSuccess };
51
52
  });
52
53
  React.useEffect(() => {
53
- let isStale = false;
54
- setIsRestoring(true);
55
- const [unsubscribe, promise] = (0, import_query_persist_client_core.persistQueryClient)({
56
- ...refs.current.persistOptions,
57
- queryClient: client
58
- });
59
- promise.then(async () => {
60
- if (!isStale) {
54
+ if (!didRestore.current) {
55
+ didRestore.current = true;
56
+ setIsRestoring(true);
57
+ const [unsubscribe, promise] = (0, import_query_persist_client_core.persistQueryClient)({
58
+ ...refs.current.persistOptions,
59
+ queryClient: client
60
+ });
61
+ promise.then(async () => {
61
62
  try {
62
63
  await refs.current.onSuccess?.();
63
64
  } finally {
64
65
  setIsRestoring(false);
65
66
  }
66
- }
67
- });
68
- return () => {
69
- isStale = true;
70
- unsubscribe();
71
- };
67
+ });
68
+ return () => {
69
+ unsubscribe();
70
+ };
71
+ }
72
+ return void 0;
72
73
  }, [client]);
73
74
  return /* @__PURE__ */ React.createElement(import_react_query.QueryClientProvider, { client, ...props }, /* @__PURE__ */ React.createElement(import_react_query.IsRestoringProvider, { value: isRestoring }, children));
74
75
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport { IsRestoringProvider, QueryClientProvider } from '@tanstack/react-query'\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => Promise<unknown> | unknown\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(async () => {\n if (!isStale) {\n try {\n await refs.current.onSuccess?.()\n } finally {\n setIsRestoring(false)\n }\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,YAAuB;AAEvB,uCAAmC;AACnC,yBAAyD;AASlD,IAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAoD;AAClD,QAAM,CAAC,aAAa,cAAc,IAAU,eAAS,IAAI;AACzD,QAAM,OAAa,aAAO,EAAE,gBAAgB,UAAU,CAAC;AAEvD,EAAM,gBAAU,MAAM;AACpB,SAAK,UAAU,EAAE,gBAAgB,UAAU;AAAA,EAC7C,CAAC;AAED,EAAM,gBAAU,MAAM;AACpB,QAAI,UAAU;AACd,mBAAe,IAAI;AACnB,UAAM,CAAC,aAAa,OAAO,QAAI,qDAAmB;AAAA,MAChD,GAAG,KAAK,QAAQ;AAAA,MAChB,aAAa;AAAA,IACf,CAAC;AAED,YAAQ,KAAK,YAAY;AACvB,UAAI,CAAC,SAAS;AACZ,YAAI;AACF,gBAAM,KAAK,QAAQ,YAAY;AAAA,QACjC,UAAE;AACA,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,gBAAU;AACV,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,oCAAC,0CAAoB,QAAiB,GAAG,SACvC,oCAAC,0CAAoB,OAAO,eAAc,QAAS,CACrD;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport { IsRestoringProvider, QueryClientProvider } from '@tanstack/react-query'\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => Promise<unknown> | unknown\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n const didRestore = React.useRef(false)\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n if (!didRestore.current) {\n didRestore.current = true\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(async () => {\n try {\n await refs.current.onSuccess?.()\n } finally {\n setIsRestoring(false)\n }\n })\n\n return () => {\n unsubscribe()\n }\n }\n return undefined\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,YAAuB;AAEvB,uCAAmC;AACnC,yBAAyD;AASlD,IAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAoD;AAClD,QAAM,CAAC,aAAa,cAAc,IAAU,eAAS,IAAI;AACzD,QAAM,OAAa,aAAO,EAAE,gBAAgB,UAAU,CAAC;AACvD,QAAM,aAAmB,aAAO,KAAK;AAErC,EAAM,gBAAU,MAAM;AACpB,SAAK,UAAU,EAAE,gBAAgB,UAAU;AAAA,EAC7C,CAAC;AAED,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,WAAW,SAAS;AACvB,iBAAW,UAAU;AACrB,qBAAe,IAAI;AACnB,YAAM,CAAC,aAAa,OAAO,QAAI,qDAAmB;AAAA,QAChD,GAAG,KAAK,QAAQ;AAAA,QAChB,aAAa;AAAA,MACf,CAAC;AAED,cAAQ,KAAK,YAAY;AACvB,YAAI;AACF,gBAAM,KAAK,QAAQ,YAAY;AAAA,QACjC,UAAE;AACA,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF,CAAC;AAED,aAAO,MAAM;AACX,oBAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,oCAAC,0CAAoB,QAAiB,GAAG,SACvC,oCAAC,0CAAoB,OAAO,eAAc,QAAS,CACrD;AAEJ;","names":[]}
@@ -13,29 +13,30 @@ var PersistQueryClientProvider = ({
13
13
  }) => {
14
14
  const [isRestoring, setIsRestoring] = React.useState(true);
15
15
  const refs = React.useRef({ persistOptions, onSuccess });
16
+ const didRestore = React.useRef(false);
16
17
  React.useEffect(() => {
17
18
  refs.current = { persistOptions, onSuccess };
18
19
  });
19
20
  React.useEffect(() => {
20
- let isStale = false;
21
- setIsRestoring(true);
22
- const [unsubscribe, promise] = persistQueryClient({
23
- ...refs.current.persistOptions,
24
- queryClient: client
25
- });
26
- promise.then(async () => {
27
- if (!isStale) {
21
+ if (!didRestore.current) {
22
+ didRestore.current = true;
23
+ setIsRestoring(true);
24
+ const [unsubscribe, promise] = persistQueryClient({
25
+ ...refs.current.persistOptions,
26
+ queryClient: client
27
+ });
28
+ promise.then(async () => {
28
29
  try {
29
30
  await refs.current.onSuccess?.();
30
31
  } finally {
31
32
  setIsRestoring(false);
32
33
  }
33
- }
34
- });
35
- return () => {
36
- isStale = true;
37
- unsubscribe();
38
- };
34
+ });
35
+ return () => {
36
+ unsubscribe();
37
+ };
38
+ }
39
+ return void 0;
39
40
  }, [client]);
40
41
  return /* @__PURE__ */ React.createElement(QueryClientProvider, { client, ...props }, /* @__PURE__ */ React.createElement(IsRestoringProvider, { value: isRestoring }, children));
41
42
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport { IsRestoringProvider, QueryClientProvider } from '@tanstack/react-query'\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => Promise<unknown> | unknown\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n let isStale = false\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(async () => {\n if (!isStale) {\n try {\n await refs.current.onSuccess?.()\n } finally {\n setIsRestoring(false)\n }\n }\n })\n\n return () => {\n isStale = true\n unsubscribe()\n }\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"mappings":";;;AACA,YAAY,WAAW;AAEvB,SAAS,0BAA0B;AACnC,SAAS,qBAAqB,2BAA2B;AASlD,IAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAoD;AAClD,QAAM,CAAC,aAAa,cAAc,IAAU,eAAS,IAAI;AACzD,QAAM,OAAa,aAAO,EAAE,gBAAgB,UAAU,CAAC;AAEvD,EAAM,gBAAU,MAAM;AACpB,SAAK,UAAU,EAAE,gBAAgB,UAAU;AAAA,EAC7C,CAAC;AAED,EAAM,gBAAU,MAAM;AACpB,QAAI,UAAU;AACd,mBAAe,IAAI;AACnB,UAAM,CAAC,aAAa,OAAO,IAAI,mBAAmB;AAAA,MAChD,GAAG,KAAK,QAAQ;AAAA,MAChB,aAAa;AAAA,IACf,CAAC;AAED,YAAQ,KAAK,YAAY;AACvB,UAAI,CAAC,SAAS;AACZ,YAAI;AACF,gBAAM,KAAK,QAAQ,YAAY;AAAA,QACjC,UAAE;AACA,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,gBAAU;AACV,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,oCAAC,uBAAoB,QAAiB,GAAG,SACvC,oCAAC,uBAAoB,OAAO,eAAc,QAAS,CACrD;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/PersistQueryClientProvider.tsx"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { persistQueryClient } from '@tanstack/query-persist-client-core'\nimport { IsRestoringProvider, QueryClientProvider } from '@tanstack/react-query'\nimport type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core'\nimport type { QueryClientProviderProps } from '@tanstack/react-query'\n\nexport type PersistQueryClientProviderProps = QueryClientProviderProps & {\n persistOptions: Omit<PersistQueryClientOptions, 'queryClient'>\n onSuccess?: () => Promise<unknown> | unknown\n}\n\nexport const PersistQueryClientProvider = ({\n client,\n children,\n persistOptions,\n onSuccess,\n ...props\n}: PersistQueryClientProviderProps): JSX.Element => {\n const [isRestoring, setIsRestoring] = React.useState(true)\n const refs = React.useRef({ persistOptions, onSuccess })\n const didRestore = React.useRef(false)\n\n React.useEffect(() => {\n refs.current = { persistOptions, onSuccess }\n })\n\n React.useEffect(() => {\n if (!didRestore.current) {\n didRestore.current = true\n setIsRestoring(true)\n const [unsubscribe, promise] = persistQueryClient({\n ...refs.current.persistOptions,\n queryClient: client,\n })\n\n promise.then(async () => {\n try {\n await refs.current.onSuccess?.()\n } finally {\n setIsRestoring(false)\n }\n })\n\n return () => {\n unsubscribe()\n }\n }\n return undefined\n }, [client])\n\n return (\n <QueryClientProvider client={client} {...props}>\n <IsRestoringProvider value={isRestoring}>{children}</IsRestoringProvider>\n </QueryClientProvider>\n )\n}\n"],"mappings":";;;AACA,YAAY,WAAW;AAEvB,SAAS,0BAA0B;AACnC,SAAS,qBAAqB,2BAA2B;AASlD,IAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAoD;AAClD,QAAM,CAAC,aAAa,cAAc,IAAU,eAAS,IAAI;AACzD,QAAM,OAAa,aAAO,EAAE,gBAAgB,UAAU,CAAC;AACvD,QAAM,aAAmB,aAAO,KAAK;AAErC,EAAM,gBAAU,MAAM;AACpB,SAAK,UAAU,EAAE,gBAAgB,UAAU;AAAA,EAC7C,CAAC;AAED,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,WAAW,SAAS;AACvB,iBAAW,UAAU;AACrB,qBAAe,IAAI;AACnB,YAAM,CAAC,aAAa,OAAO,IAAI,mBAAmB;AAAA,QAChD,GAAG,KAAK,QAAQ;AAAA,QAChB,aAAa;AAAA,MACf,CAAC;AAED,cAAQ,KAAK,YAAY;AACvB,YAAI;AACF,gBAAM,KAAK,QAAQ,YAAY;AAAA,QACjC,UAAE;AACA,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF,CAAC;AAED,aAAO,MAAM;AACX,oBAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,CAAC;AAEX,SACE,oCAAC,uBAAoB,QAAiB,GAAG,SACvC,oCAAC,uBAAoB,OAAO,eAAc,QAAS,CACrD;AAEJ;","names":[]}
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "@tanstack/react-query-persist-client",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.31",
4
4
  "description": "React bindings to work with persisters in TanStack/react-query",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
7
- "repository": "tanstack/query",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/TanStack/query.git",
10
+ "directory": "packages/react-query-persist-client"
11
+ },
8
12
  "homepage": "https://tanstack.com/query",
9
13
  "funding": {
10
14
  "type": "github",
@@ -33,19 +37,19 @@
33
37
  "src"
34
38
  ],
35
39
  "dependencies": {
36
- "@tanstack/query-persist-client-core": "5.0.0-beta.0"
40
+ "@tanstack/query-persist-client-core": "5.0.0-beta.31"
37
41
  },
38
42
  "devDependencies": {
39
43
  "@types/react": "^18.2.4",
40
44
  "@types/react-dom": "^18.2.4",
41
45
  "react": "^18.2.0",
42
46
  "react-dom": "^18.2.0",
43
- "@tanstack/react-query": "5.0.0-beta.2"
47
+ "@tanstack/react-query": "5.0.0-beta.31"
44
48
  },
45
49
  "peerDependencies": {
46
50
  "react": "^18.0.0",
47
51
  "react-dom": "^18.0.0",
48
- "@tanstack/react-query": "5.0.0-beta.2"
52
+ "@tanstack/react-query": "^5.0.0-beta.31"
49
53
  },
50
54
  "scripts": {
51
55
  "clean": "rimraf ./build && rimraf ./coverage",
@@ -53,7 +57,7 @@
53
57
  "test:types": "tsc",
54
58
  "test:lib": "vitest run --coverage",
55
59
  "test:lib:dev": "pnpm run test:lib --watch",
56
- "test:build": "publint --strict && attw --pack",
60
+ "test:build": "publint --strict",
57
61
  "build": "tsup"
58
62
  }
59
63
  }
@@ -20,33 +20,34 @@ export const PersistQueryClientProvider = ({
20
20
  }: PersistQueryClientProviderProps): JSX.Element => {
21
21
  const [isRestoring, setIsRestoring] = React.useState(true)
22
22
  const refs = React.useRef({ persistOptions, onSuccess })
23
+ const didRestore = React.useRef(false)
23
24
 
24
25
  React.useEffect(() => {
25
26
  refs.current = { persistOptions, onSuccess }
26
27
  })
27
28
 
28
29
  React.useEffect(() => {
29
- let isStale = false
30
- setIsRestoring(true)
31
- const [unsubscribe, promise] = persistQueryClient({
32
- ...refs.current.persistOptions,
33
- queryClient: client,
34
- })
35
-
36
- promise.then(async () => {
37
- if (!isStale) {
30
+ if (!didRestore.current) {
31
+ didRestore.current = true
32
+ setIsRestoring(true)
33
+ const [unsubscribe, promise] = persistQueryClient({
34
+ ...refs.current.persistOptions,
35
+ queryClient: client,
36
+ })
37
+
38
+ promise.then(async () => {
38
39
  try {
39
40
  await refs.current.onSuccess?.()
40
41
  } finally {
41
42
  setIsRestoring(false)
42
43
  }
43
- }
44
- })
44
+ })
45
45
 
46
- return () => {
47
- isStale = true
48
- unsubscribe()
46
+ return () => {
47
+ unsubscribe()
48
+ }
49
49
  }
50
+ return undefined
50
51
  }, [client])
51
52
 
52
53
  return (
@@ -55,7 +55,7 @@ const createMockErrorPersister = (
55
55
  describe('PersistQueryClientProvider', () => {
56
56
  test('restores cache from persister', async () => {
57
57
  const key = queryKey()
58
- const states: UseQueryResult<string>[] = []
58
+ const states: Array<UseQueryResult<string>> = []
59
59
 
60
60
  const queryClient = createQueryClient()
61
61
  await queryClient.prefetchQuery({
@@ -130,7 +130,7 @@ describe('PersistQueryClientProvider', () => {
130
130
 
131
131
  test('should also put useQueries into idle state', async () => {
132
132
  const key = queryKey()
133
- const states: UseQueryResult[] = []
133
+ const states: Array<UseQueryResult> = []
134
134
 
135
135
  const queryClient = createQueryClient()
136
136
  await queryClient.prefetchQuery({
@@ -209,7 +209,7 @@ describe('PersistQueryClientProvider', () => {
209
209
 
210
210
  test('should show initialData while restoring', async () => {
211
211
  const key = queryKey()
212
- const states: DefinedUseQueryResult<string>[] = []
212
+ const states: Array<DefinedUseQueryResult<string>> = []
213
213
 
214
214
  const queryClient = createQueryClient()
215
215
  await queryClient.prefetchQuery({
@@ -289,7 +289,7 @@ describe('PersistQueryClientProvider', () => {
289
289
 
290
290
  test('should not refetch after restoring when data is fresh', async () => {
291
291
  const key = queryKey()
292
- const states: UseQueryResult<string>[] = []
292
+ const states: Array<UseQueryResult<string>> = []
293
293
 
294
294
  const queryClient = createQueryClient()
295
295
  await queryClient.prefetchQuery({
@@ -515,7 +515,7 @@ describe('PersistQueryClientProvider', () => {
515
515
 
516
516
  test('should be able to persist into multiple clients', async () => {
517
517
  const key = queryKey()
518
- const states: UseQueryResult[] = []
518
+ const states: Array<UseQueryResult> = []
519
519
 
520
520
  const queryClient = createQueryClient()
521
521
  await queryClient.prefetchQuery({
@@ -629,4 +629,77 @@ describe('PersistQueryClientProvider', () => {
629
629
  data: 'queryFn2',
630
630
  })
631
631
  })
632
+
633
+ test('should only restore once in StrictMode', async () => {
634
+ let restoreCount = 0
635
+ const createPersister = (): Persister => {
636
+ let storedState: PersistedClient | undefined
637
+
638
+ return {
639
+ async persistClient(persistClient) {
640
+ storedState = persistClient
641
+ },
642
+ async restoreClient() {
643
+ restoreCount++
644
+ await sleep(10)
645
+ return storedState
646
+ },
647
+ removeClient() {
648
+ storedState = undefined
649
+ },
650
+ }
651
+ }
652
+
653
+ const key = queryKey()
654
+
655
+ const queryClient = createQueryClient()
656
+ await queryClient.prefetchQuery({
657
+ queryKey: key,
658
+ queryFn: () => Promise.resolve('hydrated'),
659
+ })
660
+
661
+ const persister = createPersister()
662
+
663
+ const onSuccess = vi.fn()
664
+
665
+ await persistQueryClientSave({ queryClient, persister })
666
+
667
+ queryClient.clear()
668
+
669
+ function Page() {
670
+ const state = useQuery({
671
+ queryKey: key,
672
+ queryFn: async () => {
673
+ await sleep(10)
674
+ return 'fetched'
675
+ },
676
+ })
677
+
678
+ return (
679
+ <div>
680
+ <h1>{state.data}</h1>
681
+ <h2>fetchStatus: {state.fetchStatus}</h2>
682
+ </div>
683
+ )
684
+ }
685
+
686
+ const rendered = render(
687
+ <React.StrictMode>
688
+ <PersistQueryClientProvider
689
+ client={queryClient}
690
+ persistOptions={{ persister }}
691
+ onSuccess={onSuccess}
692
+ >
693
+ <Page />
694
+ </PersistQueryClientProvider>
695
+ </React.StrictMode>,
696
+ )
697
+
698
+ await waitFor(() => rendered.getByText('fetchStatus: idle'))
699
+ await waitFor(() => rendered.getByText('hydrated'))
700
+ await waitFor(() => rendered.getByText('fetched'))
701
+
702
+ expect(onSuccess).toHaveBeenCalledTimes(1)
703
+ expect(restoreCount).toBe(1)
704
+ })
632
705
  })