zustand-store
Advanced tools
Comparing version 0.0.12-beta.0 to 0.0.12-beta.2
@@ -37,9 +37,37 @@ import * as zustand from 'zustand'; | ||
} | ||
type FilterPromiseKeys<T extends object> = { | ||
[K in keyof T]-?: T[K] extends (...args: any[]) => Promise<any> ? K : never; | ||
}[keyof T]; | ||
type LoadingKeys<T extends object> = Exclude<FilterPromiseKeys<T>, 'set'>; | ||
export default class Store { | ||
static BaseStore: typeof BaseStore; | ||
static loading: typeof loading; | ||
static create<T extends new (set: any, get: any) => BaseStore<any>>(Clazz: T): zustand.UseBoundStore<Omit<zustand.StoreApi<unknown>, "subscribe"> & { | ||
static create<T extends new (set: any, get: any) => BaseStore<any>>(Clazz: T): zustand.UseBoundStore<Omit<Omit<zustand.StoreApi<InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}>, "subscribe"> & { | ||
subscribe: { | ||
(listener: (selectedState: unknown, previousSelectedState: unknown) => void): () => void; | ||
<U>(selector: (state: unknown) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: { | ||
(listener: (selectedState: InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}, previousSelectedState: InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}) => void): () => void; | ||
<U>(selector: (state: InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: { | ||
equalityFn?: ((a: U, b: U) => boolean) | undefined; | ||
@@ -49,3 +77,23 @@ fireImmediately?: boolean | undefined; | ||
}; | ||
}, "setState"> & { | ||
setState(nextStateOrUpdater: (InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}) | Partial<InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}> | ((state: Draft<InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}>) => void), shouldReplace?: boolean | undefined): void; | ||
}>; | ||
} |
@@ -78,3 +78,3 @@ var __create = Object.create; | ||
static create(Clazz) { | ||
const realRet = create( | ||
const realRet = create()( | ||
(0, import_middleware.subscribeWithSelector)( | ||
@@ -81,0 +81,0 @@ (0, import_immer.immer)((set, get) => { |
@@ -37,9 +37,37 @@ import * as zustand from 'zustand'; | ||
} | ||
type FilterPromiseKeys<T extends object> = { | ||
[K in keyof T]-?: T[K] extends (...args: any[]) => Promise<any> ? K : never; | ||
}[keyof T]; | ||
type LoadingKeys<T extends object> = Exclude<FilterPromiseKeys<T>, 'set'>; | ||
export default class Store { | ||
static BaseStore: typeof BaseStore; | ||
static loading: typeof loading; | ||
static create<T extends new (set: any, get: any) => BaseStore<any>>(Clazz: T): zustand.UseBoundStore<Omit<zustand.StoreApi<unknown>, "subscribe"> & { | ||
static create<T extends new (set: any, get: any) => BaseStore<any>>(Clazz: T): zustand.UseBoundStore<Omit<Omit<zustand.StoreApi<InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}>, "subscribe"> & { | ||
subscribe: { | ||
(listener: (selectedState: unknown, previousSelectedState: unknown) => void): () => void; | ||
<U>(selector: (state: unknown) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: { | ||
(listener: (selectedState: InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}, previousSelectedState: InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}) => void): () => void; | ||
<U>(selector: (state: InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: { | ||
equalityFn?: ((a: U, b: U) => boolean) | undefined; | ||
@@ -49,3 +77,23 @@ fireImmediately?: boolean | undefined; | ||
}; | ||
}, "setState"> & { | ||
setState(nextStateOrUpdater: (InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}) | Partial<InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}> | ((state: Draft<InstanceType<T> & { | ||
loading: { [key in Exclude<FilterPromiseKeys<InstanceType<T>>, "set">]: boolean | undefined; }; | ||
set: StoreImmer<{ | ||
getState(): InstanceType<T>; | ||
setState(): InstanceType<T>; | ||
}>; | ||
}>) => void), shouldReplace?: boolean | undefined): void; | ||
}>; | ||
} |
@@ -65,3 +65,3 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } | ||
value: function create(Clazz) { | ||
var realRet = _create(subscribeWithSelector(immer(function (set, get) { | ||
var realRet = _create()(subscribeWithSelector(immer(function (set, get) { | ||
var ret = new Clazz(set, get); | ||
@@ -68,0 +68,0 @@ loopPrototype(ret, function (key, proto) { |
{ | ||
"name": "zustand-store", | ||
"version": "0.0.12-beta.0", | ||
"version": "0.0.12-beta.2", | ||
"description": "zustand store", | ||
@@ -5,0 +5,0 @@ "module": "dist/esm/index.js", |
24282
517