nuxt-typed-vuex
Advanced tools
Comparing version
@@ -5,2 +5,9 @@ # Changelog | ||
### [0.1.2](https://github.com/danielroe/nuxt-typed-vuex/compare/v0.1.1...v0.1.2) (2019-10-04) | ||
### Features | ||
* add commit and dispatch options ([ef320e7](https://github.com/danielroe/nuxt-typed-vuex/commit/ef320e7)) | ||
### 0.1.1 (2019-10-04) | ||
@@ -7,0 +14,0 @@ |
@@ -1,3 +0,3 @@ | ||
import { Store, GetterTree, MutationTree, ActionTree } from 'vuex'; | ||
declare type MergedFunctionProcessor<T extends () => any> = Parameters<T>[1] extends undefined ? () => ReturnType<T> : (payload: Parameters<T>[1]) => ReturnType<T>; | ||
import { Store, GetterTree, MutationTree, ActionTree, DispatchOptions, CommitOptions } from 'vuex'; | ||
declare type MergedFunctionProcessor<T extends () => any, O> = Parameters<T>[1] extends undefined ? (options?: O) => ReturnType<T> : (payload: Parameters<T>[1], options?: O) => ReturnType<T>; | ||
declare type GettersTransformer<T extends Record<string, any>> = Readonly<{ | ||
@@ -7,6 +7,6 @@ [P in keyof T]: ReturnType<T[P]>; | ||
declare type MutationsTransformer<T extends Record<string, any>> = { | ||
[P in keyof T]: MergedFunctionProcessor<T[P]>; | ||
[P in keyof T]: MergedFunctionProcessor<T[P], CommitOptions>; | ||
}; | ||
declare type ActionTransformer<T extends Record<string, any>> = { | ||
[P in keyof T]: MergedFunctionProcessor<T[P]>; | ||
[P in keyof T]: MergedFunctionProcessor<T[P], DispatchOptions>; | ||
}; | ||
@@ -16,3 +16,3 @@ declare type ModuleTransformer<T> = T extends NuxtModules ? { | ||
} : {}; | ||
declare type BlankStore = { | ||
interface BlankStore { | ||
getters: {}; | ||
@@ -22,4 +22,4 @@ mutations: {}; | ||
modules: {}; | ||
}; | ||
declare type NuxtStore = { | ||
} | ||
interface NuxtStore { | ||
state: () => unknown; | ||
@@ -30,7 +30,7 @@ getters: Record<string, any>; | ||
modules: NuxtModules; | ||
}; | ||
} | ||
declare type NuxtModules = Record<string, NuxtStore>; | ||
declare type NuxtStoreInput<T extends () => any, G, M, A, S extends { | ||
interface NuxtStoreInput<T extends () => any, G, M, A, S extends { | ||
[key: string]: NuxtStore; | ||
}> = { | ||
}> { | ||
state: T; | ||
@@ -41,17 +41,27 @@ getters?: G; | ||
modules?: S; | ||
}; | ||
} | ||
declare type MergedStoreType<T extends NuxtStore> = ReturnType<T['state']> & GettersTransformer<T['getters']> & MutationsTransformer<T['mutations']> & ActionTransformer<T['actions']> & ModuleTransformer<T['modules']>; | ||
declare type StoreParameter<T extends () => any> = Parameters<T>[1] extends undefined ? [] : [Parameters<T>[1]]; | ||
declare type FunctionProcessor<M extends Record<string, () => any>> = <P extends keyof M>(mutation: P, ...args: StoreParameter<M[P]>) => ReturnType<M[P]>; | ||
export declare type StoreType<T extends Required<NuxtStore>> = { | ||
state: ReturnType<T['state']> & { | ||
[P in keyof T['modules']]: ReturnType<T['modules'][P]['state']>; | ||
}; | ||
declare type StoreParameter<T extends () => any> = Parameters<T>[1] extends undefined ? never : Parameters<T>[1]; | ||
interface Dispatch<T extends Record<string, () => any>> { | ||
<P extends keyof T>(action: P, payload: StoreParameter<T[P]>, options?: DispatchOptions): ReturnType<T[P]>; | ||
<P extends keyof T>(action: StoreParameter<T[P]> extends never ? P : never, options?: DispatchOptions): ReturnType<T[P]>; | ||
} | ||
interface Commit<T extends Record<string, () => any>> { | ||
<P extends keyof T>(mutation: P, payload: StoreParameter<T[P]>, options?: DispatchOptions): ReturnType<T[P]>; | ||
<P extends keyof T>(mutation: StoreParameter<T[P]> extends never ? P : never, options?: CommitOptions): ReturnType<T[P]>; | ||
} | ||
export declare type ActionContext<T extends Required<NuxtStore>> = { | ||
state: ReturnType<T['state']>; | ||
getters: { | ||
[P in keyof T['getters']]: ReturnType<T['getters'][P]>; | ||
}; | ||
commit: FunctionProcessor<T['mutations']>; | ||
dispatch: FunctionProcessor<T['actions']>; | ||
commit: Commit<T['mutations']>; | ||
dispatch: Dispatch<T['actions']>; | ||
rootState: any; | ||
rootGetters: any; | ||
}; | ||
export declare const getStoreType: <T extends () => any, G, M, A, S extends Record<string, NuxtStore>>(store: NuxtStoreInput<T, G, M, A, S>) => StoreType<NuxtStoreInput<T, G, M, A, S> & BlankStore> & Pick<Store<ReturnType<T>>, "app" | "state" | "replaceState" | "subscribe" | "subscribeAction" | "watch" | "registerModule" | "unregisterModule" | "hotUpdate" | "$router">; | ||
export declare const getStoreType: <T extends () => any, G, M, A, S extends Record<string, NuxtStore>>(store: NuxtStoreInput<T, G, M, A, S>) => { | ||
actionContext: ActionContext<NuxtStoreInput<T, G, M, A, S> & BlankStore>; | ||
storeInstance: ActionContext<NuxtStoreInput<T, G, M, A, S> & BlankStore> & Pick<Store<ReturnType<T>>, "app" | "replaceState" | "subscribe" | "subscribeAction" | "watch" | "registerModule" | "unregisterModule" | "hotUpdate" | "$router">; | ||
}; | ||
export declare const getAccessorType: <T extends () => any, G extends GetterTree<ReturnType<T>, ReturnType<T>>, M extends MutationTree<ReturnType<T>>, A extends ActionTree<ReturnType<T>, ReturnType<T>>, S extends Record<string, NuxtStore>>(store: NuxtStoreInput<T, G, M, A, S>) => MergedStoreType<NuxtStoreInput<T, G, M, A, S> & BlankStore>; | ||
@@ -58,0 +68,0 @@ export declare const useAccessor: <T extends () => any, G extends GetterTree<ReturnType<T>, ReturnType<T>>, M extends MutationTree<ReturnType<T>>, A extends ActionTree<ReturnType<T>, ReturnType<T>>, S extends Record<string, NuxtStore>>(store: Store<ReturnType<T>>, input: Required<NuxtStoreInput<T, G, M, A, S>>) => MergedStoreType<NuxtStoreInput<T, G, M, A, S> & BlankStore>; |
export const getStoreType = (store) => { | ||
return {}; | ||
return { | ||
actionContext: {}, | ||
storeInstance: {}, | ||
}; | ||
}; | ||
@@ -4,0 +7,0 @@ export const getAccessorType = (store) => { |
{ | ||
"name": "nuxt-typed-vuex", | ||
"version": "0.1.1", | ||
"version": "0.1.2", | ||
"description": "A typed store accessor for Nuxt.", | ||
@@ -5,0 +5,0 @@ "repository": "danielroe/nuxt-typed-vuex", |
@@ -39,5 +39,5 @@ # 🏦 Nuxt Typed Vuex | ||
const storeType = getStoreType(store) | ||
const { storeType, storeInstance } = getStoreType(store) | ||
const store: storeType | ||
const store: storeInstance | ||
// You will now get type checking on getters, actions, state and mutations | ||
@@ -131,4 +131,6 @@ store.commit('SAMPLE_MUTATION', 30) | ||
4. Note that this does not support [object-style commits](https://vuex.vuejs.org/guide/mutations.html#object-style-commit). | ||
## License | ||
[MIT License](./LICENSE) - Copyright © Daniel Roe |
Sorry, the diff of this file is not supported yet
17542
6.19%154
8.45%135
1.5%