@qiaopeng/tanstack-query-plus 0.5.3 → 0.5.8

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/README.md CHANGED
@@ -291,18 +291,30 @@ function App() {
291
291
  queries: {
292
292
  staleTime: 30000,
293
293
  gcTime: 600000,
294
- retry: defaultQueryRetryStrategy,
294
+ retry: defaultQueryRetryStrategy, // 智能重试:4XX不重试,5XX最多1次
295
295
  retryDelay: exponentialBackoff,
296
296
  refetchOnWindowFocus: true,
297
297
  refetchOnReconnect: true,
298
298
  },
299
299
  mutations: {
300
- retry: 0,
300
+ retry: 0, // Mutation 默认不重试
301
301
  gcTime: 600000,
302
302
  }
303
303
  }
304
304
  ```
305
305
 
306
+ **重试策略说明:**
307
+
308
+ - **Query 重试**(`defaultQueryRetryStrategy`):
309
+ - 4XX 客户端错误:不重试(客户端问题,重试无意义)
310
+ - 5XX 服务端错误:最多重试 1 次(避免过度重试)
311
+ - 网络错误:最多重试 2 次
312
+
313
+ - **Mutation 重试**(`defaultMutationRetryStrategy`):
314
+ - 4XX 客户端错误:不重试
315
+ - 5XX 服务端错误:不重试(避免重复操作)
316
+ - 网络错误:最多重试 1 次
317
+
306
318
  这些值是经过实践验证的最佳实践,适合大多数应用场景。
307
319
 
308
320
  ### 3.4 根据环境选择配置
@@ -322,10 +334,58 @@ const queryClient = new QueryClient({ defaultOptions: config })
322
334
  | 配置项 | development | production | test |
323
335
  |--------|-------------|------------|------|
324
336
  | staleTime | 0 | 10 分钟 | 0 |
325
- | retry | 1 | 3 | 0 |
337
+ | retry (Query) | 智能重试* | 智能重试* | 0 |
338
+ | retry (Mutation) | 0 | 0 | 0 |
326
339
  | refetchOnWindowFocus | true | true | false |
327
340
 
328
- ### 3.5 添加 DevTools(开发环境)
341
+ *智能重试:4XX 不重试,5XX 最多 1 次,网络错误最多 2 次
342
+
343
+ ### 3.5 自定义重试策略
344
+
345
+ 如果默认的重试策略不满足你的需求,可以使用 `createSafeRetryStrategy` 和 `createErrorSafeConfig` 来自定义:
346
+
347
+ ```tsx
348
+ import {
349
+ createSafeRetryStrategy,
350
+ createErrorSafeConfig
351
+ } from '@qiaopeng/tanstack-query-plus/core'
352
+
353
+ // 方式一:创建自定义重试策略
354
+ const customRetry = createSafeRetryStrategy(
355
+ 0, // 4XX 错误重试次数
356
+ 1, // 5XX 错误重试次数
357
+ 2 // 其他错误重试次数
358
+ )
359
+
360
+ const queryClient = new QueryClient({
361
+ defaultOptions: {
362
+ queries: {
363
+ retry: customRetry,
364
+ }
365
+ }
366
+ })
367
+
368
+ // 方式二:使用错误安全配置(推荐)
369
+ const errorSafeConfig = createErrorSafeConfig({
370
+ maxRetries4xx: 0, // 4XX 不重试
371
+ maxRetries5xx: 0, // 5XX 不重试(严格模式)
372
+ maxRetriesOther: 1, // 网络错误最多 1 次
373
+ disableFocus: false, // 是否禁用窗口聚焦时 refetch
374
+ disableReconnect: false // 是否禁用重连时 refetch
375
+ })
376
+
377
+ const queryClient = new QueryClient({
378
+ defaultOptions: errorSafeConfig
379
+ })
380
+ ```
381
+
382
+ **使用场景:**
383
+
384
+ 1. **严格模式**:完全禁用 4XX/5XX 重试,避免不必要的请求
385
+ 2. **宽松模式**:增加重试次数,适合网络不稳定的环境
386
+ 3. **自定义场景**:根据业务需求精确控制重试行为
387
+
388
+ ### 3.6 添加 DevTools(开发环境)
329
389
 
330
390
  在开发环境中,强烈建议添加 DevTools 来调试查询状态:
331
391
 
@@ -3902,8 +3962,8 @@ useEnhancedQuery({
3902
3962
  - `QueryClient`、`QueryClientProvider`、`useQueryClient`、`skipToken`、`useIsMutating`(直接再导出原生 API)
3903
3963
 
3904
3964
  - `@qiaopeng/tanstack-query-plus/core`
3905
- - 配置:`GLOBAL_QUERY_CONFIG`、`createCustomConfig`、`DEFAULT_STALE_TIME`、`DEFAULT_GC_TIME`
3906
- - 重试:`defaultQueryRetryStrategy`、`defaultMutationRetryStrategy`、`exponentialBackoff`
3965
+ - 配置:`GLOBAL_QUERY_CONFIG`、`createCustomConfig`、`createErrorSafeConfig`、`DEFAULT_STALE_TIME`、`DEFAULT_GC_TIME`
3966
+ - 重试:`defaultQueryRetryStrategy`、`defaultMutationRetryStrategy`、`createSafeRetryStrategy`、`exponentialBackoff`
3907
3967
  - 环境:`isDev`、`isProd`、`isTest`
3908
3968
  - DevTools:`ReactQueryDevtools`、`isDevToolsEnabled`、`createDevToolsConfig`(src/core/devtools.ts:28)
3909
3969
  - 焦点管理:`focusManager`、`getSmartFocusManager`、`pauseFocusManager`、`resumeFocusManager`
@@ -11,7 +11,19 @@ export declare const TIME_CONSTANTS: {
11
11
  };
12
12
  export declare const DEFAULT_STALE_TIME: number;
13
13
  export declare const DEFAULT_GC_TIME: number;
14
+ /**
15
+ * 默认 Query 重试策略
16
+ * - 4XX 客户端错误:不重试(客户端问题,重试无意义)
17
+ * - 5XX 服务端错误:最多重试 1 次(避免过度重试)
18
+ * - 其他错误(网络等):最多重试 2 次
19
+ */
14
20
  export declare function defaultQueryRetryStrategy(failureCount: number, error: unknown): boolean;
21
+ /**
22
+ * 默认 Mutation 重试策略
23
+ * - 4XX 客户端错误:不重试
24
+ * - 5XX 服务端错误:不重试(Mutation 更谨慎,避免重复操作)
25
+ * - 其他错误:最多重试 1 次
26
+ */
15
27
  export declare function defaultMutationRetryStrategy(failureCount: number, error: unknown): boolean;
16
28
  export declare function exponentialBackoff(attemptIndex: number): number;
17
29
  export declare const DEFAULT_QUERY_CONFIG: DefaultOptions["queries"];
@@ -33,4 +45,36 @@ export declare function validateConfig(config: DefaultOptions): {
33
45
  warnings: string[];
34
46
  };
35
47
  export declare function ensureBestPractices(config: DefaultOptions): DefaultOptions;
48
+ /**
49
+ * 创建安全的重试策略
50
+ * @param maxRetries4xx - 4XX 错误最大重试次数(默认 0,不重试)
51
+ * @param maxRetries5xx - 5XX 错误最大重试次数(默认 0,不重试)
52
+ * @param maxRetriesOther - 其他错误最大重试次数(默认 1)
53
+ */
54
+ export declare function createSafeRetryStrategy(maxRetries4xx?: number, maxRetries5xx?: number, maxRetriesOther?: number): (failureCount: number, error: unknown) => boolean;
55
+ /**
56
+ * 创建错误安全配置
57
+ * 适用于需要严格控制重试和 refetch 行为的场景
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * // 完全禁用重试
62
+ * const config = createErrorSafeConfig({
63
+ * maxRetries4xx: 0,
64
+ * maxRetries5xx: 0,
65
+ * maxRetriesOther: 0,
66
+ * disableFocus: true,
67
+ * disableReconnect: true
68
+ * });
69
+ * ```
70
+ */
71
+ export declare function createErrorSafeConfig(options?: {
72
+ maxRetries4xx?: number;
73
+ maxRetries5xx?: number;
74
+ maxRetriesOther?: number;
75
+ disableFocus?: boolean;
76
+ disableReconnect?: boolean;
77
+ conditionalRefetchInterval?: number | ((data: unknown, query: any) => number | false);
78
+ overrides?: Partial<DefaultOptions>;
79
+ }): DefaultOptions;
36
80
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,eAAO,MAAM,cAAc;;;;;;;;;CASjB,CAAC;AAEX,eAAO,MAAM,kBAAkB,QAAgC,CAAC;AAChE,eAAO,MAAM,eAAe,QAA6B,CAAC;AAO1D,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAKvF;AAED,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAK1F;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,SAAS,CAQ1D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,WAAW,CAI/D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAGjC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,cAAc,CAAC,WAAW,CAInE,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,cAYhC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,cAY/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,cAa/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAW7B,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,GAAG,cAAc,CAwBjG;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAWrF;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAQxG;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA2B/F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAkC1E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,eAAO,MAAM,cAAc;;;;;;;;;CASjB,CAAC;AAEX,eAAO,MAAM,kBAAkB,QAAgC,CAAC;AAChE,eAAO,MAAM,eAAe,QAA6B,CAAC;AAkC1D;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAevF;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAe1F;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,SAAS,CAQ1D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,WAAW,CAI/D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAGjC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,cAAc,CAAC,WAAW,CAInE,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,cAYhC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,cAY/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,cAa/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAW7B,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,GAAG,cAAc,CAwBjG;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAWrF;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAQxG;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA2B/F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAkC1E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,GAAE,MAAU,EACzB,aAAa,GAAE,MAAU,EACzB,eAAe,GAAE,MAAU,IAEnB,cAAc,MAAM,EAAE,OAAO,OAAO,KAAG,OAAO,CAgBvD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0BAA0B,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,CAAC,CAAC;IACtF,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CAChC,GAAG,cAAc,CAsCtB"}
@@ -11,21 +11,65 @@ export const TIME_CONSTANTS = {
11
11
  };
12
12
  export const DEFAULT_STALE_TIME = TIME_CONSTANTS.THIRTY_SECONDS;
13
13
  export const DEFAULT_GC_TIME = TIME_CONSTANTS.TEN_MINUTES;
14
+ /**
15
+ * 从错误对象中提取 HTTP 状态码
16
+ * 兼容多种错误对象结构:axios、fetch、自定义等
17
+ */
18
+ function extractHttpStatus(error) {
19
+ if (!error || typeof error !== "object")
20
+ return undefined;
21
+ const err = error;
22
+ // 直接在错误对象上的 status
23
+ if (typeof err.status === "number")
24
+ return err.status;
25
+ if (typeof err.statusCode === "number")
26
+ return err.statusCode;
27
+ // 在 response 对象中的 status (axios 等)
28
+ if (err.response) {
29
+ if (typeof err.response.status === "number")
30
+ return err.response.status;
31
+ if (typeof err.response.statusCode === "number")
32
+ return err.response.statusCode;
33
+ }
34
+ return undefined;
35
+ }
36
+ /**
37
+ * 默认 Query 重试策略
38
+ * - 4XX 客户端错误:不重试(客户端问题,重试无意义)
39
+ * - 5XX 服务端错误:最多重试 1 次(避免过度重试)
40
+ * - 其他错误(网络等):最多重试 2 次
41
+ */
14
42
  export function defaultQueryRetryStrategy(failureCount, error) {
15
- const httpError = error;
16
- if (httpError?.status && httpError.status >= 400 && httpError.status < 500)
43
+ const status = extractHttpStatus(error);
44
+ // 4XX 客户端错误:不重试
45
+ if (status && status >= 400 && status < 500) {
17
46
  return false;
18
- if (httpError?.status && httpError.status >= 500)
19
- return failureCount < 3;
20
- return failureCount < 3;
47
+ }
48
+ // 5XX 服务端错误:最多重试 1 次
49
+ if (status && status >= 500 && status < 600) {
50
+ return failureCount < 1;
51
+ }
52
+ // 其他错误(网络错误等):最多重试 2 次
53
+ return failureCount < 2;
21
54
  }
55
+ /**
56
+ * 默认 Mutation 重试策略
57
+ * - 4XX 客户端错误:不重试
58
+ * - 5XX 服务端错误:不重试(Mutation 更谨慎,避免重复操作)
59
+ * - 其他错误:最多重试 1 次
60
+ */
22
61
  export function defaultMutationRetryStrategy(failureCount, error) {
23
- const httpError = error;
24
- if (httpError?.status && httpError.status >= 400 && httpError.status < 500)
62
+ const status = extractHttpStatus(error);
63
+ // 4XX 客户端错误:不重试
64
+ if (status && status >= 400 && status < 500) {
25
65
  return false;
26
- if (httpError?.status && httpError.status >= 500)
27
- return failureCount < 2;
28
- return failureCount < 2;
66
+ }
67
+ // 5XX 服务端错误:不重试(Mutation 避免重复操作)
68
+ if (status && status >= 500 && status < 600) {
69
+ return false;
70
+ }
71
+ // 其他错误(网络错误等):最多重试 1 次
72
+ return failureCount < 1;
29
73
  }
30
74
  export function exponentialBackoff(attemptIndex) {
31
75
  return Math.min(1000 * 2 ** attemptIndex, 30000);
@@ -58,7 +102,7 @@ export const DEVELOPMENT_CONFIG = {
58
102
  ...DEFAULT_QUERY_CONFIG,
59
103
  staleTime: 0,
60
104
  gcTime: TIME_CONSTANTS.TEN_MINUTES,
61
- retry: 1,
105
+ retry: defaultQueryRetryStrategy,
62
106
  refetchOnWindowFocus: true
63
107
  },
64
108
  mutations: {
@@ -71,7 +115,7 @@ export const PRODUCTION_CONFIG = {
71
115
  ...DEFAULT_QUERY_CONFIG,
72
116
  staleTime: TIME_CONSTANTS.TEN_MINUTES,
73
117
  gcTime: TIME_CONSTANTS.THIRTY_MINUTES,
74
- retry: 3,
118
+ retry: defaultQueryRetryStrategy,
75
119
  refetchOnWindowFocus: true
76
120
  },
77
121
  mutations: {
@@ -84,7 +128,7 @@ export const LONG_CACHE_CONFIG = {
84
128
  ...DEFAULT_QUERY_CONFIG,
85
129
  staleTime: TIME_CONSTANTS.FIFTEEN_MINUTES,
86
130
  gcTime: TIME_CONSTANTS.ONE_HOUR,
87
- retry: 2,
131
+ retry: defaultQueryRetryStrategy,
88
132
  refetchOnWindowFocus: true,
89
133
  refetchOnReconnect: true
90
134
  },
@@ -98,7 +142,7 @@ export const REALTIME_CONFIG = {
98
142
  ...DEFAULT_QUERY_CONFIG,
99
143
  staleTime: 0,
100
144
  gcTime: TIME_CONSTANTS.ONE_MINUTE * 2,
101
- retry: 5,
145
+ retry: defaultQueryRetryStrategy,
102
146
  refetchOnWindowFocus: true,
103
147
  refetchOnReconnect: true,
104
148
  refetchInterval: TIME_CONSTANTS.THIRTY_SECONDS
@@ -211,3 +255,67 @@ export function ensureBestPractices(config) {
211
255
  }
212
256
  return result;
213
257
  }
258
+ /**
259
+ * 创建安全的重试策略
260
+ * @param maxRetries4xx - 4XX 错误最大重试次数(默认 0,不重试)
261
+ * @param maxRetries5xx - 5XX 错误最大重试次数(默认 0,不重试)
262
+ * @param maxRetriesOther - 其他错误最大重试次数(默认 1)
263
+ */
264
+ export function createSafeRetryStrategy(maxRetries4xx = 0, maxRetries5xx = 0, maxRetriesOther = 1) {
265
+ return (failureCount, error) => {
266
+ const status = extractHttpStatus(error);
267
+ // 4XX 客户端错误
268
+ if (status && status >= 400 && status < 500) {
269
+ return failureCount < maxRetries4xx;
270
+ }
271
+ // 5XX 服务端错误
272
+ if (status && status >= 500 && status < 600) {
273
+ return failureCount < maxRetries5xx;
274
+ }
275
+ // 其他错误(网络等)
276
+ return failureCount < maxRetriesOther;
277
+ };
278
+ }
279
+ /**
280
+ * 创建错误安全配置
281
+ * 适用于需要严格控制重试和 refetch 行为的场景
282
+ *
283
+ * @example
284
+ * ```typescript
285
+ * // 完全禁用重试
286
+ * const config = createErrorSafeConfig({
287
+ * maxRetries4xx: 0,
288
+ * maxRetries5xx: 0,
289
+ * maxRetriesOther: 0,
290
+ * disableFocus: true,
291
+ * disableReconnect: true
292
+ * });
293
+ * ```
294
+ */
295
+ export function createErrorSafeConfig(options = {}) {
296
+ const { maxRetries4xx = 0, maxRetries5xx = 0, maxRetriesOther = 1, disableFocus = false, disableReconnect = false, conditionalRefetchInterval, overrides } = options;
297
+ const queries = {
298
+ ...DEFAULT_QUERY_CONFIG,
299
+ retry: createSafeRetryStrategy(maxRetries4xx, maxRetries5xx, maxRetriesOther),
300
+ retryDelay: exponentialBackoff,
301
+ refetchOnWindowFocus: disableFocus ? false : true,
302
+ refetchOnReconnect: disableReconnect ? false : true
303
+ };
304
+ if (conditionalRefetchInterval !== undefined) {
305
+ if (typeof conditionalRefetchInterval === "number") {
306
+ queries.refetchInterval = (_data, query) => (query?.state?.error ? false : conditionalRefetchInterval);
307
+ }
308
+ else {
309
+ queries.refetchInterval = conditionalRefetchInterval;
310
+ }
311
+ }
312
+ const mutations = {
313
+ ...DEFAULT_MUTATION_CONFIG,
314
+ retry: createSafeRetryStrategy(maxRetries4xx, maxRetries5xx, maxRetriesOther)
315
+ };
316
+ const result = {
317
+ queries: { ...queries, ...(overrides?.queries || {}) },
318
+ mutations: { ...mutations, ...(overrides?.mutations || {}) }
319
+ };
320
+ return result;
321
+ }
@@ -1,4 +1,4 @@
1
- export { createCustomConfig, DEFAULT_GC_TIME, DEFAULT_MUTATION_CONFIG, DEFAULT_QUERY_CONFIG, DEFAULT_STALE_TIME, defaultMutationRetryStrategy, defaultQueryRetryStrategy, DEVELOPMENT_CONFIG, ensureBestPractices, exponentialBackoff, getConfigByEnvironment, GLOBAL_QUERY_CONFIG, LONG_CACHE_CONFIG, PRODUCTION_CONFIG, REALTIME_CONFIG, SMART_RETRY_MUTATION_CONFIG, TIME_CONSTANTS, validateConfig, validateGcTime } from "./config.js";
1
+ export { createCustomConfig, DEFAULT_GC_TIME, DEFAULT_MUTATION_CONFIG, DEFAULT_QUERY_CONFIG, DEFAULT_STALE_TIME, defaultMutationRetryStrategy, defaultQueryRetryStrategy, DEVELOPMENT_CONFIG, ensureBestPractices, exponentialBackoff, getConfigByEnvironment, GLOBAL_QUERY_CONFIG, LONG_CACHE_CONFIG, PRODUCTION_CONFIG, REALTIME_CONFIG, createErrorSafeConfig, createSafeRetryStrategy, SMART_RETRY_MUTATION_CONFIG, TIME_CONSTANTS, validateConfig, validateGcTime } from "./config.js";
2
2
  export { createDevToolsConfig, defaultDevToolsConfig, type DevToolsConfig, isDevToolsEnabled } from "./devtools.js";
3
3
  export { ReactQueryDevtools } from "./devtools.js";
4
4
  export { isDev, isProd, isTest } from "./env.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC3B,cAAc,EACd,cAAc,EACd,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,cAAc,EACd,cAAc,EACd,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,4 +1,4 @@
1
- export { createCustomConfig, DEFAULT_GC_TIME, DEFAULT_MUTATION_CONFIG, DEFAULT_QUERY_CONFIG, DEFAULT_STALE_TIME, defaultMutationRetryStrategy, defaultQueryRetryStrategy, DEVELOPMENT_CONFIG, ensureBestPractices, exponentialBackoff, getConfigByEnvironment, GLOBAL_QUERY_CONFIG, LONG_CACHE_CONFIG, PRODUCTION_CONFIG, REALTIME_CONFIG, SMART_RETRY_MUTATION_CONFIG, TIME_CONSTANTS, validateConfig, validateGcTime } from "./config.js";
1
+ export { createCustomConfig, DEFAULT_GC_TIME, DEFAULT_MUTATION_CONFIG, DEFAULT_QUERY_CONFIG, DEFAULT_STALE_TIME, defaultMutationRetryStrategy, defaultQueryRetryStrategy, DEVELOPMENT_CONFIG, ensureBestPractices, exponentialBackoff, getConfigByEnvironment, GLOBAL_QUERY_CONFIG, LONG_CACHE_CONFIG, PRODUCTION_CONFIG, REALTIME_CONFIG, createErrorSafeConfig, createSafeRetryStrategy, SMART_RETRY_MUTATION_CONFIG, TIME_CONSTANTS, validateConfig, validateGcTime } from "./config.js";
2
2
  export { createDevToolsConfig, defaultDevToolsConfig, isDevToolsEnabled } from "./devtools.js";
3
3
  export { ReactQueryDevtools } from "./devtools.js";
4
4
  export { isDev, isProd, isTest } from "./env.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qiaopeng/tanstack-query-plus",
3
- "version": "0.5.3",
3
+ "version": "0.5.8",
4
4
  "description": "Enhanced TanStack Query toolkit: defaults, hooks, persistence, offline, data guard, utils",
5
5
  "author": "qiaopeng",
6
6
  "license": "MIT",