@spoosh/core 0.14.0 → 0.14.1
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/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +17 -0
- package/dist/index.mjs +17 -0
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -210,6 +210,7 @@ type EventEmitter = {
|
|
|
210
210
|
declare function createEventEmitter(): EventEmitter;
|
|
211
211
|
|
|
212
212
|
type Subscriber = () => void;
|
|
213
|
+
type DataChangeCallback = (key: string, oldData: unknown, newData: unknown) => void;
|
|
213
214
|
type CacheEntryWithKey<TData = unknown, TError = unknown> = {
|
|
214
215
|
key: string;
|
|
215
216
|
entry: CacheEntry<TData, TError>;
|
|
@@ -241,6 +242,11 @@ type StateManager = {
|
|
|
241
242
|
setPendingPromise: (key: string, promise: Promise<unknown> | undefined) => void;
|
|
242
243
|
/** Get a pending promise for a query key */
|
|
243
244
|
getPendingPromise: (key: string) => Promise<unknown> | undefined;
|
|
245
|
+
/**
|
|
246
|
+
* Register a callback to be invoked when cache data changes.
|
|
247
|
+
* @returns Unsubscribe function
|
|
248
|
+
*/
|
|
249
|
+
onDataChange: (callback: DataChangeCallback) => () => void;
|
|
244
250
|
clear: () => void;
|
|
245
251
|
};
|
|
246
252
|
declare function createStateManager(): StateManager;
|
package/dist/index.d.ts
CHANGED
|
@@ -210,6 +210,7 @@ type EventEmitter = {
|
|
|
210
210
|
declare function createEventEmitter(): EventEmitter;
|
|
211
211
|
|
|
212
212
|
type Subscriber = () => void;
|
|
213
|
+
type DataChangeCallback = (key: string, oldData: unknown, newData: unknown) => void;
|
|
213
214
|
type CacheEntryWithKey<TData = unknown, TError = unknown> = {
|
|
214
215
|
key: string;
|
|
215
216
|
entry: CacheEntry<TData, TError>;
|
|
@@ -241,6 +242,11 @@ type StateManager = {
|
|
|
241
242
|
setPendingPromise: (key: string, promise: Promise<unknown> | undefined) => void;
|
|
242
243
|
/** Get a pending promise for a query key */
|
|
243
244
|
getPendingPromise: (key: string) => Promise<unknown> | undefined;
|
|
245
|
+
/**
|
|
246
|
+
* Register a callback to be invoked when cache data changes.
|
|
247
|
+
* @returns Unsubscribe function
|
|
248
|
+
*/
|
|
249
|
+
onDataChange: (callback: DataChangeCallback) => () => void;
|
|
244
250
|
clear: () => void;
|
|
245
251
|
};
|
|
246
252
|
declare function createStateManager(): StateManager;
|
package/dist/index.js
CHANGED
|
@@ -767,6 +767,7 @@ function createStateManager() {
|
|
|
767
767
|
const cache = /* @__PURE__ */ new Map();
|
|
768
768
|
const subscribers = /* @__PURE__ */ new Map();
|
|
769
769
|
const pendingPromises = /* @__PURE__ */ new Map();
|
|
770
|
+
const dataChangeCallbacks = /* @__PURE__ */ new Set();
|
|
770
771
|
const notifySubscribers = (key) => {
|
|
771
772
|
const subs = subscribers.get(key);
|
|
772
773
|
subs?.forEach((cb) => cb());
|
|
@@ -786,6 +787,7 @@ function createStateManager() {
|
|
|
786
787
|
},
|
|
787
788
|
setCache(key, entry) {
|
|
788
789
|
const existing = cache.get(key);
|
|
790
|
+
const oldData = existing?.state.data;
|
|
789
791
|
if (existing) {
|
|
790
792
|
existing.state = { ...existing.state, ...entry.state };
|
|
791
793
|
if (entry.tags) {
|
|
@@ -798,6 +800,10 @@ function createStateManager() {
|
|
|
798
800
|
existing.stale = entry.stale;
|
|
799
801
|
}
|
|
800
802
|
notifySubscribers(key);
|
|
803
|
+
const newData = existing.state.data;
|
|
804
|
+
if (oldData !== newData) {
|
|
805
|
+
dataChangeCallbacks.forEach((cb) => cb(key, oldData, newData));
|
|
806
|
+
}
|
|
801
807
|
} else {
|
|
802
808
|
const newEntry = {
|
|
803
809
|
state: entry.state ?? createInitialState(),
|
|
@@ -809,6 +815,10 @@ function createStateManager() {
|
|
|
809
815
|
};
|
|
810
816
|
cache.set(key, newEntry);
|
|
811
817
|
notifySubscribers(key);
|
|
818
|
+
const newData = newEntry.state.data;
|
|
819
|
+
if (oldData !== newData) {
|
|
820
|
+
dataChangeCallbacks.forEach((cb) => cb(key, oldData, newData));
|
|
821
|
+
}
|
|
812
822
|
}
|
|
813
823
|
},
|
|
814
824
|
deleteCache(key) {
|
|
@@ -913,10 +923,17 @@ function createStateManager() {
|
|
|
913
923
|
getPendingPromise(key) {
|
|
914
924
|
return pendingPromises.get(key);
|
|
915
925
|
},
|
|
926
|
+
onDataChange(callback) {
|
|
927
|
+
dataChangeCallbacks.add(callback);
|
|
928
|
+
return () => {
|
|
929
|
+
dataChangeCallbacks.delete(callback);
|
|
930
|
+
};
|
|
931
|
+
},
|
|
916
932
|
clear() {
|
|
917
933
|
cache.clear();
|
|
918
934
|
subscribers.clear();
|
|
919
935
|
pendingPromises.clear();
|
|
936
|
+
dataChangeCallbacks.clear();
|
|
920
937
|
}
|
|
921
938
|
};
|
|
922
939
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -698,6 +698,7 @@ function createStateManager() {
|
|
|
698
698
|
const cache = /* @__PURE__ */ new Map();
|
|
699
699
|
const subscribers = /* @__PURE__ */ new Map();
|
|
700
700
|
const pendingPromises = /* @__PURE__ */ new Map();
|
|
701
|
+
const dataChangeCallbacks = /* @__PURE__ */ new Set();
|
|
701
702
|
const notifySubscribers = (key) => {
|
|
702
703
|
const subs = subscribers.get(key);
|
|
703
704
|
subs?.forEach((cb) => cb());
|
|
@@ -717,6 +718,7 @@ function createStateManager() {
|
|
|
717
718
|
},
|
|
718
719
|
setCache(key, entry) {
|
|
719
720
|
const existing = cache.get(key);
|
|
721
|
+
const oldData = existing?.state.data;
|
|
720
722
|
if (existing) {
|
|
721
723
|
existing.state = { ...existing.state, ...entry.state };
|
|
722
724
|
if (entry.tags) {
|
|
@@ -729,6 +731,10 @@ function createStateManager() {
|
|
|
729
731
|
existing.stale = entry.stale;
|
|
730
732
|
}
|
|
731
733
|
notifySubscribers(key);
|
|
734
|
+
const newData = existing.state.data;
|
|
735
|
+
if (oldData !== newData) {
|
|
736
|
+
dataChangeCallbacks.forEach((cb) => cb(key, oldData, newData));
|
|
737
|
+
}
|
|
732
738
|
} else {
|
|
733
739
|
const newEntry = {
|
|
734
740
|
state: entry.state ?? createInitialState(),
|
|
@@ -740,6 +746,10 @@ function createStateManager() {
|
|
|
740
746
|
};
|
|
741
747
|
cache.set(key, newEntry);
|
|
742
748
|
notifySubscribers(key);
|
|
749
|
+
const newData = newEntry.state.data;
|
|
750
|
+
if (oldData !== newData) {
|
|
751
|
+
dataChangeCallbacks.forEach((cb) => cb(key, oldData, newData));
|
|
752
|
+
}
|
|
743
753
|
}
|
|
744
754
|
},
|
|
745
755
|
deleteCache(key) {
|
|
@@ -844,10 +854,17 @@ function createStateManager() {
|
|
|
844
854
|
getPendingPromise(key) {
|
|
845
855
|
return pendingPromises.get(key);
|
|
846
856
|
},
|
|
857
|
+
onDataChange(callback) {
|
|
858
|
+
dataChangeCallbacks.add(callback);
|
|
859
|
+
return () => {
|
|
860
|
+
dataChangeCallbacks.delete(callback);
|
|
861
|
+
};
|
|
862
|
+
},
|
|
847
863
|
clear() {
|
|
848
864
|
cache.clear();
|
|
849
865
|
subscribers.clear();
|
|
850
866
|
pendingPromises.clear();
|
|
867
|
+
dataChangeCallbacks.clear();
|
|
851
868
|
}
|
|
852
869
|
};
|
|
853
870
|
}
|