@qiaopeng/tanstack-query-plus 0.4.1 → 0.4.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"useDataGuardMutation.d.ts","sourceRoot":"","sources":["../../src/hooks/useDataGuardMutation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,uBAAuB,CAAC;AAOzF,MAAM,WAAW,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAE,SAAQ,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;IACzI,aAAa;IACb,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,eAAe,GAAG,eAAe,EAC/C,MAAM,GAAG,KAAK,EACd,UAAU,SAAS,eAAe,GAAG,eAAe,EACpD,QAAQ,GAAG,OAAO,EAElB,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,KAAK,CAAC,EAChD,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,GACtE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CA2GxD"}
1
+ {"version":3,"file":"useDataGuardMutation.d.ts","sourceRoot":"","sources":["../../src/hooks/useDataGuardMutation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,uBAAuB,CAAC;AAOzF,MAAM,WAAW,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAE,SAAQ,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;IACzI,aAAa;IACb,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,eAAe,GAAG,eAAe,EAC/C,MAAM,GAAG,KAAK,EACd,UAAU,SAAS,eAAe,GAAG,eAAe,EACpD,QAAQ,GAAG,OAAO,EAElB,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,KAAK,CAAC,EAChD,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,GACtE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAqHxD"}
@@ -87,30 +87,42 @@ export function useDataGuardMutation(mutationFn, queryKey, options) {
87
87
  } : undefined;
88
88
  // 增强的成功回调
89
89
  const enhancedOnSuccess = (data, variables, onMutateResult, context) => {
90
- // 更新所有家族缓存的元数据
91
- const familyKey = Array.isArray(queryKey) ? queryKey.slice(0, -1) : [queryKey];
92
- updateFamilyMetadata(queryClient, familyKey, data);
93
- // 计算清理延迟时间(基于 invalidationDelay + 缓冲时间)
94
- const invalidationDelay = options?.consistency?.invalidationDelay || 3000;
95
- const cleanupDelay = invalidationDelay + 2000; // 在失效后2秒清理
96
- // 延迟清理最近更新标记
97
- setTimeout(() => {
98
- // 检查 variables.id 是否存在
99
- if (variables.id === undefined || variables.id === null) {
100
- return;
101
- }
102
- const cache = queryClient.getQueryCache();
103
- const queries = cache.findAll({
104
- predicate: (q) => startsWithKeyPrefix(q.queryKey, familyKey)
105
- });
106
- queries.forEach((q) => {
107
- const old = queryClient.getQueryData(q.queryKey);
108
- if (old?._recentlyUpdatedIds) {
109
- const cleared = clearRecentlyUpdated(old, variables.id);
110
- queryClient.setQueryData(q.queryKey, cleared);
90
+ try {
91
+ // 更新所有家族缓存的元数据
92
+ const familyKey = Array.isArray(queryKey) ? queryKey.slice(0, -1) : [queryKey];
93
+ updateFamilyMetadata(queryClient, familyKey, data);
94
+ // 计算清理延迟时间(基于 invalidationDelay + 缓冲时间)
95
+ const invalidationDelay = options?.consistency?.invalidationDelay || 3000;
96
+ const cleanupDelay = invalidationDelay + 2000; // 在失效后2秒清理
97
+ // 延迟清理最近更新标记
98
+ setTimeout(() => {
99
+ try {
100
+ // 检查 variables.id 是否存在
101
+ if (variables.id === undefined || variables.id === null) {
102
+ return;
103
+ }
104
+ const cache = queryClient.getQueryCache();
105
+ const queries = cache.findAll({
106
+ predicate: (q) => startsWithKeyPrefix(q.queryKey, familyKey)
107
+ });
108
+ queries.forEach((q) => {
109
+ const old = queryClient.getQueryData(q.queryKey);
110
+ if (old?._recentlyUpdatedIds) {
111
+ const cleared = clearRecentlyUpdated(old, variables.id);
112
+ queryClient.setQueryData(q.queryKey, cleared);
113
+ }
114
+ });
111
115
  }
112
- });
113
- }, cleanupDelay);
116
+ catch (error) {
117
+ // 清理标记失败不应该影响用户操作
118
+ console.warn('[Data Guard] 清理更新标记失败', error);
119
+ }
120
+ }, cleanupDelay);
121
+ }
122
+ catch (error) {
123
+ // 元数据更新失败不应该影响用户操作
124
+ console.warn('[Data Guard] 更新元数据失败', error);
125
+ }
114
126
  // 调用用户的 onSuccess
115
127
  onSuccess?.(data, variables, onMutateResult, context);
116
128
  };
@@ -233,8 +233,8 @@ export function updateFamilyMetadata(queryClient, familyKey, response) {
233
233
  else if (old.updatedAt !== undefined) {
234
234
  updated.updatedAt = new Date().toISOString();
235
235
  }
236
- // 更新哈希
237
- if (old._hash !== undefined) {
236
+ // 更新哈希(安全检查:确保 items 存在)
237
+ if (old._hash !== undefined && updated.items) {
238
238
  updated._hash = hashObject(updated.items);
239
239
  }
240
240
  queryClient.setQueryData(q.queryKey, updated);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qiaopeng/tanstack-query-plus",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "Enhanced TanStack Query toolkit: defaults, hooks, persistence, offline, data guard, utils",
5
5
  "author": "qiaopeng",
6
6
  "license": "MIT",