qortex-core 0.2.2 → 0.2.4
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/index.d.ts +3 -3
- package/index.js +6 -6
- package/index.mjs +2 -2
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Using readonly to prevent accidental mutations
|
|
4
4
|
*/
|
|
5
5
|
type QueryKey = string | readonly (string | number)[];
|
|
6
|
-
/** Function that fetches data,
|
|
7
|
-
type Fetcher<T = any> = () => Promise<T
|
|
6
|
+
/** Function that fetches data, must be async */
|
|
7
|
+
type Fetcher<T = any> = () => Promise<T>;
|
|
8
8
|
/** Function that compares two values for equality */
|
|
9
9
|
type EqualityFn<T = any> = (a: T | undefined, b: T | undefined) => boolean;
|
|
10
10
|
/** Strategy for equality comparison */
|
|
@@ -66,7 +66,7 @@ type DefaultConfig = {
|
|
|
66
66
|
* Public query state returned by getQueryState
|
|
67
67
|
* Improved with stricter error typing and better generic constraints
|
|
68
68
|
*/
|
|
69
|
-
type QueryState<T = any, E =
|
|
69
|
+
type QueryState<T = any, E = unknown> = {
|
|
70
70
|
data?: T;
|
|
71
71
|
error?: E;
|
|
72
72
|
status: QueryStatus;
|
package/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
function c(t){return Array.isArray(t)?t.join(","):String(t)}function
|
|
3
|
+
function c(t){return Array.isArray(t)?t.join(","):String(t)}function y(t,r,a="shallow"){if(t===r)return !0;if(t==null||r==null)return t===r;if(typeof t!="object"||typeof r!="object")return !1;try{let e=t,s=r;if(Array.isArray(e)&&Array.isArray(s)){if(e.length!==s.length)return !1;for(let o=0;o<e.length;o++)if(a==="deep"){if(!y(e[o],s[o],a))return !1}else if(e[o]!==s[o])return !1;return !0}if(Array.isArray(e)||Array.isArray(s))return !1;let n=Object.keys(e),i=Object.keys(s);if(n.length!==i.length)return !1;for(let o=0;o<n.length;o++){let l=n[o];if(a==="deep"){if(!y(e[l],s[l],a))return !1}else if(e[l]!==s[l])return !1}return !0}catch{return !1}}function g(t,r){return r||((a,e)=>y(a,e,t||"shallow"))}function h(t,r){return {status:"idle",updatedAt:void 0,staleTime:t?.staleTime??0,isInvalidated:!1,fetcher:t?.fetcher,equalityFn:g(t?.equalityStrategy,t?.equalityFn),equalityStrategy:t?.equalityStrategy??"shallow",placeholderData:t?.placeholderData,usePreviousDataOnError:t?.usePreviousDataOnError??!1,usePlaceholderOnError:t?.usePlaceholderOnError??!1,refetchOnSubscribe:t?.refetchOnSubscribe??"stale",enabled:t?.enabled!==!1,refetch:r||(()=>Promise.resolve(void 0)),isSuccess:!1,isError:!1}}function d(t){let a=Date.now()-(t.updatedAt||0)>t.staleTime||t.isInvalidated,e=t.data,s=!1;switch(t.status){case"error":t.usePlaceholderOnError&&t.placeholderData!==void 0&&(e=t.placeholderData,s=!0);break;case"fetching":!t.data&&t.placeholderData&&(e=t.placeholderData,s=!0);break;case"success":case"idle":e=t.data??t.placeholderData,s=t.data?!1:!!t.placeholderData;break}return {data:e,error:t.error,status:t.status,updatedAt:t.updatedAt,isStale:a,isPlaceholderData:s,isLoading:t.status==="fetching"&&!t.updatedAt,isFetching:t.status==="fetching",isError:t.isError,isSuccess:t.isSuccess,refetch:t.refetch}}function Q(t){console.warn(`[qortex] No fetcher or data for key "${c(t)}". Register a fetcher or set initial data.`);}var f=class{constructor(){this.cache=new Map;this.subs=new Map;this.lastReturnedState=new Map;this.defaultConfig={};this.throttleTime=50;}dangerClearCache(){this.cache.clear(),this.subs.clear(),this.lastReturnedState.clear();}setDefaultConfig({throttleTime:r,...a}){this.defaultConfig={...this.defaultConfig,...a},r!==void 0&&(this.throttleTime=r);}ensureState(r,a={}){let e=c(r),s=this.cache.get(e);if(s){let n={...this.defaultConfig,...s,...a};Object.assign(s,n),s.enabled=n.enabled!==!1,this.cache.set(e,s);}else {let n={...this.defaultConfig,...a},i=h(n,()=>this.fetchQuery(r));this.cache.set(e,i);}return this.cache.get(e)}emit(r,a){let e=c(r);this.cache.set(e,a);let s=this.subs.get(e);if(!s)return;let n=d(a);for(let i of Array.from(s))i(n);}registerFetcher(r,a){let e=this.ensureState(r,a);this.handleMountLogic(r,e);}fetchQuery(r,a){let e=this.ensureState(r,a);if(e.fetchPromise)return e.fetchPromise;let s=e.fetcher;if(!s)return e.updatedAt===void 0&&Q(r),Promise.resolve(e.data);let n=s();return e.status="fetching",e.lastFetchTime=Date.now(),e.fetchPromise=n,this.emit(r,e),n.then(i=>{e.data=e.equalityFn(e.data,i)?e.data:i,e.status="success",e.isError=!1,e.isSuccess=!0;}).catch(i=>{e.error=i,e.status="error",e.isError=!0,e.isSuccess=!1;}).finally(()=>{e.updatedAt=Date.now(),e.fetchPromise=void 0,this.emit(r,e);}),n}setQueryData(r,a){let e=this.ensureState(r),s=e.data;e.equalityFn(s,a)||(e.data=a,e.updatedAt=Date.now(),e.error=void 0,e.status="success",e.isInvalidated=!1,e.isError=!1,e.isSuccess=!0,this.emit(r,e));}getQueryData(r,a){let e=this.ensureState(r,a);return this.handleMountLogic(r,e),e.data??e.placeholderData}getQueryState(r,a){let e=this.ensureState(r,a);this.handleMountLogic(r,e);let s=d(e),n=c(r),i=this.lastReturnedState?.get(n);return !i||!y(i,s,"shallow")?(this.lastReturnedState||(this.lastReturnedState=new Map),this.lastReturnedState.set(n,s),s):i}invalidateQuery(r){let a=this.ensureState(r);a.isInvalidated=!0,this.emit(r,a),this.fetchQuery(r);}subscribeQuery(r,a,e){let s=c(r),n=this.ensureState(r,e);return this.subs.has(s)||this.subs.set(s,new Set),this.subs.get(s).add(a),this.handleMountLogic(r,n),()=>{this.subs.get(s).delete(a);}}handleMountLogic(r,a){let e=a.lastFetchTime&&Date.now()-a.lastFetchTime<this.throttleTime;if(a?.status==="fetching"||!a?.enabled||e||!a?.fetcher)return;let s=Date.now(),n=a?.updatedAt==null||s-(a.updatedAt||0)>a.staleTime||a.isInvalidated,i=!1;a.refetchOnSubscribe==="always"&&(i=!0),a.refetchOnSubscribe==="stale"&&(i=n),i&&this.fetchQuery(r);}},p=f;var u=new p,v=u.registerFetcher.bind(u),O=u.fetchQuery.bind(u),K=u.setQueryData.bind(u),w=u.getQueryData.bind(u),C=u.getQueryState.bind(u),x=u.invalidateQuery.bind(u),E=u.subscribeQuery.bind(u),A=u.setDefaultConfig.bind(u),I=u.dangerClearCache.bind(u);
|
|
4
4
|
|
|
5
5
|
exports.QueryManagerCore = f;
|
|
6
|
-
exports._queryManager =
|
|
6
|
+
exports._queryManager = u;
|
|
7
7
|
exports.dangerClearCache = I;
|
|
8
8
|
exports.fetchQuery = O;
|
|
9
|
-
exports.getQueryData =
|
|
10
|
-
exports.getQueryState =
|
|
9
|
+
exports.getQueryData = w;
|
|
10
|
+
exports.getQueryState = C;
|
|
11
11
|
exports.invalidateQuery = x;
|
|
12
12
|
exports.registerFetcher = v;
|
|
13
13
|
exports.serializeKey = c;
|
|
14
|
-
exports.setDefaultConfig =
|
|
14
|
+
exports.setDefaultConfig = A;
|
|
15
15
|
exports.setQueryData = K;
|
|
16
|
-
exports.subscribeQuery =
|
|
16
|
+
exports.subscribeQuery = E;
|
package/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
function c(t){return Array.isArray(t)?t.join(","):String(t)}function
|
|
1
|
+
function c(t){return Array.isArray(t)?t.join(","):String(t)}function y(t,r,a="shallow"){if(t===r)return !0;if(t==null||r==null)return t===r;if(typeof t!="object"||typeof r!="object")return !1;try{let e=t,s=r;if(Array.isArray(e)&&Array.isArray(s)){if(e.length!==s.length)return !1;for(let o=0;o<e.length;o++)if(a==="deep"){if(!y(e[o],s[o],a))return !1}else if(e[o]!==s[o])return !1;return !0}if(Array.isArray(e)||Array.isArray(s))return !1;let n=Object.keys(e),i=Object.keys(s);if(n.length!==i.length)return !1;for(let o=0;o<n.length;o++){let l=n[o];if(a==="deep"){if(!y(e[l],s[l],a))return !1}else if(e[l]!==s[l])return !1}return !0}catch{return !1}}function g(t,r){return r||((a,e)=>y(a,e,t||"shallow"))}function h(t,r){return {status:"idle",updatedAt:void 0,staleTime:t?.staleTime??0,isInvalidated:!1,fetcher:t?.fetcher,equalityFn:g(t?.equalityStrategy,t?.equalityFn),equalityStrategy:t?.equalityStrategy??"shallow",placeholderData:t?.placeholderData,usePreviousDataOnError:t?.usePreviousDataOnError??!1,usePlaceholderOnError:t?.usePlaceholderOnError??!1,refetchOnSubscribe:t?.refetchOnSubscribe??"stale",enabled:t?.enabled!==!1,refetch:r||(()=>Promise.resolve(void 0)),isSuccess:!1,isError:!1}}function d(t){let a=Date.now()-(t.updatedAt||0)>t.staleTime||t.isInvalidated,e=t.data,s=!1;switch(t.status){case"error":t.usePlaceholderOnError&&t.placeholderData!==void 0&&(e=t.placeholderData,s=!0);break;case"fetching":!t.data&&t.placeholderData&&(e=t.placeholderData,s=!0);break;case"success":case"idle":e=t.data??t.placeholderData,s=t.data?!1:!!t.placeholderData;break}return {data:e,error:t.error,status:t.status,updatedAt:t.updatedAt,isStale:a,isPlaceholderData:s,isLoading:t.status==="fetching"&&!t.updatedAt,isFetching:t.status==="fetching",isError:t.isError,isSuccess:t.isSuccess,refetch:t.refetch}}function Q(t){console.warn(`[qortex] No fetcher or data for key "${c(t)}". Register a fetcher or set initial data.`);}var f=class{constructor(){this.cache=new Map;this.subs=new Map;this.lastReturnedState=new Map;this.defaultConfig={};this.throttleTime=50;}dangerClearCache(){this.cache.clear(),this.subs.clear(),this.lastReturnedState.clear();}setDefaultConfig({throttleTime:r,...a}){this.defaultConfig={...this.defaultConfig,...a},r!==void 0&&(this.throttleTime=r);}ensureState(r,a={}){let e=c(r),s=this.cache.get(e);if(s){let n={...this.defaultConfig,...s,...a};Object.assign(s,n),s.enabled=n.enabled!==!1,this.cache.set(e,s);}else {let n={...this.defaultConfig,...a},i=h(n,()=>this.fetchQuery(r));this.cache.set(e,i);}return this.cache.get(e)}emit(r,a){let e=c(r);this.cache.set(e,a);let s=this.subs.get(e);if(!s)return;let n=d(a);for(let i of Array.from(s))i(n);}registerFetcher(r,a){let e=this.ensureState(r,a);this.handleMountLogic(r,e);}fetchQuery(r,a){let e=this.ensureState(r,a);if(e.fetchPromise)return e.fetchPromise;let s=e.fetcher;if(!s)return e.updatedAt===void 0&&Q(r),Promise.resolve(e.data);let n=s();return e.status="fetching",e.lastFetchTime=Date.now(),e.fetchPromise=n,this.emit(r,e),n.then(i=>{e.data=e.equalityFn(e.data,i)?e.data:i,e.status="success",e.isError=!1,e.isSuccess=!0;}).catch(i=>{e.error=i,e.status="error",e.isError=!0,e.isSuccess=!1;}).finally(()=>{e.updatedAt=Date.now(),e.fetchPromise=void 0,this.emit(r,e);}),n}setQueryData(r,a){let e=this.ensureState(r),s=e.data;e.equalityFn(s,a)||(e.data=a,e.updatedAt=Date.now(),e.error=void 0,e.status="success",e.isInvalidated=!1,e.isError=!1,e.isSuccess=!0,this.emit(r,e));}getQueryData(r,a){let e=this.ensureState(r,a);return this.handleMountLogic(r,e),e.data??e.placeholderData}getQueryState(r,a){let e=this.ensureState(r,a);this.handleMountLogic(r,e);let s=d(e),n=c(r),i=this.lastReturnedState?.get(n);return !i||!y(i,s,"shallow")?(this.lastReturnedState||(this.lastReturnedState=new Map),this.lastReturnedState.set(n,s),s):i}invalidateQuery(r){let a=this.ensureState(r);a.isInvalidated=!0,this.emit(r,a),this.fetchQuery(r);}subscribeQuery(r,a,e){let s=c(r),n=this.ensureState(r,e);return this.subs.has(s)||this.subs.set(s,new Set),this.subs.get(s).add(a),this.handleMountLogic(r,n),()=>{this.subs.get(s).delete(a);}}handleMountLogic(r,a){let e=a.lastFetchTime&&Date.now()-a.lastFetchTime<this.throttleTime;if(a?.status==="fetching"||!a?.enabled||e||!a?.fetcher)return;let s=Date.now(),n=a?.updatedAt==null||s-(a.updatedAt||0)>a.staleTime||a.isInvalidated,i=!1;a.refetchOnSubscribe==="always"&&(i=!0),a.refetchOnSubscribe==="stale"&&(i=n),i&&this.fetchQuery(r);}},p=f;var u=new p,v=u.registerFetcher.bind(u),O=u.fetchQuery.bind(u),K=u.setQueryData.bind(u),w=u.getQueryData.bind(u),C=u.getQueryState.bind(u),x=u.invalidateQuery.bind(u),E=u.subscribeQuery.bind(u),A=u.setDefaultConfig.bind(u),I=u.dangerClearCache.bind(u);
|
|
2
2
|
|
|
3
|
-
export { f as QueryManagerCore,
|
|
3
|
+
export { f as QueryManagerCore, u as _queryManager, I as dangerClearCache, O as fetchQuery, w as getQueryData, C as getQueryState, x as invalidateQuery, v as registerFetcher, c as serializeKey, A as setDefaultConfig, K as setQueryData, E as subscribeQuery };
|