[updux - v1.2.0](README.md) › [Globals](globals.md) # updux - v1.2.0 ## Index ### Classes * [Updux](classes/updux.md) ### Type aliases * [Action](globals.md#action) * [ActionPair](globals.md#actionpair) * [ActionPayloadGenerator](globals.md#actionpayloadgenerator) * [ActionsOf](globals.md#actionsof) * [CoduxesOf](globals.md#coduxesof) * [Dictionary](globals.md#dictionary) * [Dux](globals.md#dux) * [DuxActions](globals.md#duxactions) * [DuxActionsCoduxes](globals.md#duxactionscoduxes) * [DuxActionsSubduxes](globals.md#duxactionssubduxes) * [DuxSelectors](globals.md#duxselectors) * [DuxState](globals.md#duxstate) * [DuxStateCoduxes](globals.md#duxstatecoduxes) * [DuxStateGlobSub](globals.md#duxstateglobsub) * [DuxStateSubduxes](globals.md#duxstatesubduxes) * [Effect](globals.md#effect) * [GenericActions](globals.md#genericactions) * [ItemsOf](globals.md#itemsof) * [LocalDuxState](globals.md#localduxstate) * [MaybePayload](globals.md#maybepayload) * [MaybeReturnType](globals.md#maybereturntype) * [Merge](globals.md#merge) * [Mutation](globals.md#mutation) * [MutationEntry](globals.md#mutationentry) * [MwGen](globals.md#mwgen) * [Next](globals.md#next) * [RebaseSelector](globals.md#rebaseselector) * [Selector](globals.md#selector) * [SelectorsOf](globals.md#selectorsof) * [StateOf](globals.md#stateof) * [StoreWithDispatchActions](globals.md#storewithdispatchactions) * [SubMutations](globals.md#submutations) * [Submws](globals.md#submws) * [UnionToIntersection](globals.md#uniontointersection) * [UpduxActions](globals.md#upduxactions) * [UpduxConfig](globals.md#upduxconfig) * [UpduxLocalActions](globals.md#upduxlocalactions) * [UpduxMiddleware](globals.md#upduxmiddleware) * [Upreducer](globals.md#upreducer) ### Variables * [subEffects](globals.md#const-subeffects) * [updux](globals.md#const-updux) ### Functions * [MiddlewareFor](globals.md#const-middlewarefor) * [buildActions](globals.md#buildactions) * [buildCreateStore](globals.md#buildcreatestore) * [buildInitial](globals.md#buildinitial) * [buildMiddleware](globals.md#buildmiddleware) * [buildMutations](globals.md#buildmutations) * [buildSelectors](globals.md#buildselectors) * [buildUpreducer](globals.md#buildupreducer) * [coduxes](globals.md#const-coduxes) * [composeMutations](globals.md#const-composemutations) * [composeMw](globals.md#const-composemw) * [dux](globals.md#const-dux) * [effectToMw](globals.md#const-effecttomw) * [sliceMw](globals.md#slicemw) * [subMiddleware](globals.md#const-submiddleware) * [subSelectors](globals.md#subselectors) ## Type aliases ### Action Ƭ **Action**: *object & [MaybePayload](globals.md#maybepayload)‹P›* ___ ### ActionPair Ƭ **ActionPair**: *[string, ActionCreator]* ___ ### ActionPayloadGenerator Ƭ **ActionPayloadGenerator**: *function* #### Type declaration: ▸ (...`args`: any[]): *any* **Parameters:** Name | Type | ------ | ------ | `...args` | any[] | ___ ### ActionsOf Ƭ **ActionsOf**: *U extends Updux ? U["actions"] : object* ___ ### CoduxesOf Ƭ **CoduxesOf**: *U extends Updux ? S : []* ___ ### Dictionary Ƭ **Dictionary**: *object* #### Type declaration: * \[ **key**: *string*\]: T ___ ### Dux Ƭ **Dux**: *object* #### Type declaration: * **actions**: *A* * **coduxes**: *[Dux](globals.md#dux)[]* * **initial**: *AggDuxState‹S, C›* * **subduxes**: *[Dictionary](globals.md#dictionary)‹[Dux](globals.md#dux)›* ___ ### DuxActions Ƭ **DuxActions**: ___ ### DuxActionsCoduxes Ƭ **DuxActionsCoduxes**: *C extends Array ? UnionToIntersection> : object* ___ ### DuxActionsSubduxes Ƭ **DuxActionsSubduxes**: *C extends object ? ActionsOf : unknown* ___ ### DuxSelectors Ƭ **DuxSelectors**: *unknown extends X ? object : X* ___ ### DuxState Ƭ **DuxState**: *D extends object ? S : unknown* ___ ### DuxStateCoduxes Ƭ **DuxStateCoduxes**: *C extends Array ? UnionToIntersection> : unknown* ___ ### DuxStateGlobSub Ƭ **DuxStateGlobSub**: *S extends object ? StateOf : unknown* ___ ### DuxStateSubduxes Ƭ **DuxStateSubduxes**: *C extends object ? object : C extends object ? object : unknown* ___ ### Effect Ƭ **Effect**: *[string, [UpduxMiddleware](globals.md#upduxmiddleware) | [MwGen](globals.md#mwgen), undefined | false | true]* ___ ### GenericActions Ƭ **GenericActions**: *[Dictionary](globals.md#dictionary)‹ActionCreator‹string, function››* ___ ### ItemsOf Ƭ **ItemsOf**: *C extends object ? C[keyof C] : unknown* ___ ### LocalDuxState Ƭ **LocalDuxState**: *S extends never[] ? unknown[] : S* ___ ### MaybePayload Ƭ **MaybePayload**: *P extends object | string | boolean | number ? object : object* ___ ### MaybeReturnType Ƭ **MaybeReturnType**: *X extends function ? ReturnType : unknown* ___ ### Merge Ƭ **Merge**: *[UnionToIntersection](globals.md#uniontointersection)‹T[keyof T]›* ___ ### Mutation Ƭ **Mutation**: *function* #### Type declaration: ▸ (`payload`: A["payload"], `action`: A): *function* **Parameters:** Name | Type | ------ | ------ | `payload` | A["payload"] | `action` | A | ▸ (`state`: S): *S* **Parameters:** Name | Type | ------ | ------ | `state` | S | ___ ### MutationEntry Ƭ **MutationEntry**: *[ActionCreator | string, [Mutation](globals.md#mutation)‹any, [Action](globals.md#action)‹string, any››, undefined | false | true]* ___ ### MwGen Ƭ **MwGen**: *function* #### Type declaration: ▸ (): *[UpduxMiddleware](globals.md#upduxmiddleware)* ___ ### Next Ƭ **Next**: *function* #### Type declaration: ▸ (`action`: [Action](globals.md#action)): *any* **Parameters:** Name | Type | ------ | ------ | `action` | [Action](globals.md#action) | ___ ### RebaseSelector Ƭ **RebaseSelector**: *object* #### Type declaration: ___ ### Selector Ƭ **Selector**: *function* #### Type declaration: ▸ (`state`: S): *unknown* **Parameters:** Name | Type | ------ | ------ | `state` | S | ___ ### SelectorsOf Ƭ **SelectorsOf**: *C extends object ? S : unknown* ___ ### StateOf Ƭ **StateOf**: *D extends object ? I : unknown* ___ ### StoreWithDispatchActions Ƭ **StoreWithDispatchActions**: *Store‹S› & object* ___ ### SubMutations Ƭ **SubMutations**: *object* #### Type declaration: * \[ **slice**: *string*\]: [Dictionary](globals.md#dictionary)‹[Mutation](globals.md#mutation)› ___ ### Submws Ƭ **Submws**: *[Dictionary](globals.md#dictionary)‹[UpduxMiddleware](globals.md#upduxmiddleware)›* ___ ### UnionToIntersection Ƭ **UnionToIntersection**: *U extends any ? function : never extends function ? I : never* ___ ### UpduxActions Ƭ **UpduxActions**: *U extends Updux ? UnionToIntersection | ActionsOf[keyof CoduxesOf]>> : object* ___ ### UpduxConfig Ƭ **UpduxConfig**: *Partial‹object›* Configuration object given to Updux's constructor. #### arguments ##### initial Default initial state of the reducer. If applicable, is merged with the subduxes initial states, with the parent having precedence. If not provided, defaults to an empty object. ##### actions [Actions](/concepts/Actions) used by the updux. ```js import { dux } from 'updux'; import { action, payload } from 'ts-action'; const bar = action('BAR', payload()); const foo = action('FOO'); const myDux = dux({ actions: { bar }, mutations: [ [ foo, () => state => state ] ] }); myDux.actions.foo({ x: 1, y: 2 }); // => { type: foo, x:1, y:2 } myDux.actions.bar(2); // => { type: bar, payload: 2 } ``` New actions used directly in mutations and effects will be added to the dux actions -- that is, they will be accessible via `dux.actions` -- but will not appear as part of its Typescript type. ##### selectors Dictionary of selectors for the current updux. The updux also inherit its subduxes' selectors. The selectors are available via the class' getter. ##### mutations mutations: [ [ action, mutation, isSink ], ... ] or mutations: { action: mutation, ... } List of mutations for assign to the dux. If you want Typescript goodness, you probably want to use `addMutation()` instead. In its generic array-of-array form, each mutation tuple contains: the action, the mutation, and boolean indicating if this is a sink mutation. The action can be an action creator function or a string. If it's a string, it's considered to be the action type and a generic `action( actionName, payload() )` creator will be generated for it. If an action is not already defined in the `actions` parameter, it'll be automatically added. The pseudo-action type `*` can be used to match any action not explicitly matched by other mutations. ```js const todosUpdux = updux({ mutations: { add: todo => state => [ ...state, todo ], done: done_id => u.map( u.if( ({id} => id === done_id), {done: true} ) ), '*' (payload,action) => state => { console.warn( "unexpected action ", action.type ); return state; }, } }); ``` The signature of the mutations is `(payload,action) => state => newState`. It is designed to play well with `Updeep` (and [Immer](https://immerjs.github.io/immer/docs/introduction)). This way, instead of doing ```js mutation: { renameTodo: newName => state => { ...state, name: newName } } ``` we can do ```js mutation: { renameTodo: newName => u({ name: newName }) } ``` The final argument is the optional boolean `isSink`. If it is true, it'll prevent subduxes' mutations on the same action. It defaults to `false`. The object version of the argument can be used as a shortcut when all actions are strings. In that case, `isSink` is `false` for all mutations. ##### groomMutations Function that can be provided to alter all local mutations of the updux (the mutations of subduxes are left untouched). Can be used, for example, for Immer integration: ```js import Updux from 'updux'; import { produce } from 'Immer'; const updux = new Updux({ initial: { counter: 0 }, groomMutations: mutation => (...args) => produce( mutation(...args) ), mutations: { add: (inc=1) => draft => draft.counter += inc } }); ``` Or perhaps for debugging: ```js import Updux from 'updux'; const updux = new Updux({ initial: { counter: 0 }, groomMutations: mutation => (...args) => state => { console.log( "got action ", args[1] ); return mutation(...args)(state); } }); ``` ##### subduxes Object mapping slices of the state to sub-upduxes. In addition to creating sub-reducers for those slices, it'll make the parend updux inherit all the actions and middleware from its subduxes. For example, if in plain Redux you would do ```js import { combineReducers } from 'redux'; import todosReducer from './todos'; import statisticsReducer from './statistics'; const rootReducer = combineReducers({ todos: todosReducer, stats: statisticsReducer, }); ``` then with Updux you'd do ```js import { updux } from 'updux'; import todos from './todos'; import statistics from './statistics'; const rootUpdux = updux({ subduxes: { todos, statistics } }); ``` ##### effects Array of arrays or plain object defining asynchronous actions and side-effects triggered by actions. The effects themselves are Redux middleware, with the `dispatch` property of the first argument augmented with all the available actions. ``` updux({ effects: { fetch: ({dispatch}) => next => async (action) => { next(action); let result = await fetch(action.payload.url).then( result => result.json() ); dispatch.fetchSuccess(result); } } }); ``` **`example`** ``` import Updux from 'updux'; import { actions, payload } from 'ts-action'; import u from 'updeep'; const todoUpdux = new Updux({ initial: { done: false, note: "", }, actions: { finish: action('FINISH', payload()), edit: action('EDIT', payload()), }, mutations: [ [ edit, note => u({note}) ] ], selectors: { getNote: state => state.note }, groomMutations: mutation => transform(mutation), subduxes: { foo }, effects: { finish: () => next => action => { console.log( "Woo! one more bites the dust" ); } } }) ``` ___ ### UpduxLocalActions Ƭ **UpduxLocalActions**: *S extends Updux ? object : S extends Updux ? A : object* ___ ### UpduxMiddleware Ƭ **UpduxMiddleware**: *function* #### Type declaration: ▸ (`api`: UpduxMiddlewareAPI‹S, X›): *function* **Parameters:** Name | Type | ------ | ------ | `api` | UpduxMiddlewareAPI‹S, X› | ▸ (`next`: Function): *function* **Parameters:** Name | Type | ------ | ------ | `next` | Function | ▸ (`action`: A): *any* **Parameters:** Name | Type | ------ | ------ | `action` | A | ___ ### Upreducer Ƭ **Upreducer**: *function* #### Type declaration: ▸ (`action`: [Action](globals.md#action)): *function* **Parameters:** Name | Type | ------ | ------ | `action` | [Action](globals.md#action) | ▸ (`state`: S): *S* **Parameters:** Name | Type | ------ | ------ | `state` | S | ## Variables ### `Const` subEffects • **subEffects**: *[Effect](globals.md#effect)* = [ '*', subMiddleware ] as any ___ ### `Const` updux • **updux**: *[Updux](classes/updux.md)‹unknown, null, unknown, object›* = new Updux({ subduxes: { foo: dux({ initial: "banana" }) } }) ## Functions ### `Const` MiddlewareFor ▸ **MiddlewareFor**(`type`: any, `mw`: Middleware): *Middleware* **Parameters:** Name | Type | ------ | ------ | `type` | any | `mw` | Middleware | **Returns:** *Middleware* ___ ### buildActions ▸ **buildActions**(`actions`: [ActionPair](globals.md#actionpair)[]): *[Dictionary](globals.md#dictionary)‹ActionCreator‹string, function››* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `actions` | [ActionPair](globals.md#actionpair)[] | [] | **Returns:** *[Dictionary](globals.md#dictionary)‹ActionCreator‹string, function››* ___ ### buildCreateStore ▸ **buildCreateStore**<**S**, **A**>(`reducer`: Reducer‹S›, `middleware`: Middleware, `actions`: A): *function* **Type parameters:** ▪ **S** ▪ **A** **Parameters:** Name | Type | Default | ------ | ------ | ------ | `reducer` | Reducer‹S› | - | `middleware` | Middleware | - | `actions` | A | {} as A | **Returns:** *function* ▸ (`initial?`: S, `injectEnhancer?`: Function): *Store‹S› & object* **Parameters:** Name | Type | ------ | ------ | `initial?` | S | `injectEnhancer?` | Function | ___ ### buildInitial ▸ **buildInitial**(`initial`: any, `coduxes`: any, `subduxes`: any): *any* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `initial` | any | - | `coduxes` | any | [] | `subduxes` | any | {} | **Returns:** *any* ___ ### buildMiddleware ▸ **buildMiddleware**<**S**>(`local`: [UpduxMiddleware](globals.md#upduxmiddleware)[], `co`: [UpduxMiddleware](globals.md#upduxmiddleware)[], `sub`: [Submws](globals.md#submws)): *[UpduxMiddleware](globals.md#upduxmiddleware)‹S›* **Type parameters:** ▪ **S** **Parameters:** Name | Type | Default | ------ | ------ | ------ | `local` | [UpduxMiddleware](globals.md#upduxmiddleware)[] | [] | `co` | [UpduxMiddleware](globals.md#upduxmiddleware)[] | [] | `sub` | [Submws](globals.md#submws) | {} | **Returns:** *[UpduxMiddleware](globals.md#upduxmiddleware)‹S›* ___ ### buildMutations ▸ **buildMutations**(`mutations`: [Dictionary](globals.md#dictionary)‹[Mutation](globals.md#mutation) | [[Mutation](globals.md#mutation), boolean | undefined]›, `subduxes`: object, `coduxes`: [Upreducer](globals.md#upreducer)[]): *object* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `mutations` | [Dictionary](globals.md#dictionary)‹[Mutation](globals.md#mutation) | [[Mutation](globals.md#mutation), boolean | undefined]› | {} | `subduxes` | object | {} | `coduxes` | [Upreducer](globals.md#upreducer)[] | [] | **Returns:** *object* ___ ### buildSelectors ▸ **buildSelectors**(`localSelectors`: [Dictionary](globals.md#dictionary)‹[Selector](globals.md#selector)›, `coduxes`: [Dictionary](globals.md#dictionary)‹[Selector](globals.md#selector)›[], `subduxes`: [Dictionary](globals.md#dictionary)‹[Selector](globals.md#selector)›): *object* **Parameters:** Name | Type | Default | ------ | ------ | ------ | `localSelectors` | [Dictionary](globals.md#dictionary)‹[Selector](globals.md#selector)› | {} | `coduxes` | [Dictionary](globals.md#dictionary)‹[Selector](globals.md#selector)›[] | [] | `subduxes` | [Dictionary](globals.md#dictionary)‹[Selector](globals.md#selector)› | {} | **Returns:** *object* ___ ### buildUpreducer ▸ **buildUpreducer**<**S**>(`initial`: S, `mutations`: [Dictionary](globals.md#dictionary)‹[Mutation](globals.md#mutation)‹S››): *[Upreducer](globals.md#upreducer)‹S›* **Type parameters:** ▪ **S** **Parameters:** Name | Type | ------ | ------ | `initial` | S | `mutations` | [Dictionary](globals.md#dictionary)‹[Mutation](globals.md#mutation)‹S›› | **Returns:** *[Upreducer](globals.md#upreducer)‹S›* ___ ### `Const` coduxes ▸ **coduxes**<**C**, **U**>(...`coduxes`: U): *object* **Type parameters:** ▪ **C**: *[Dux](globals.md#dux)* ▪ **U**: *[C]* **Parameters:** Name | Type | ------ | ------ | `...coduxes` | U | **Returns:** *object* * **coduxes**: *U* ___ ### `Const` composeMutations ▸ **composeMutations**(`mutations`: [Mutation](globals.md#mutation)[]): *function | (Anonymous function)* **Parameters:** Name | Type | ------ | ------ | `mutations` | [Mutation](globals.md#mutation)[] | **Returns:** *function | (Anonymous function)* ___ ### `Const` composeMw ▸ **composeMw**(`mws`: [UpduxMiddleware](globals.md#upduxmiddleware)[]): *(Anonymous function)* **Parameters:** Name | Type | ------ | ------ | `mws` | [UpduxMiddleware](globals.md#upduxmiddleware)[] | **Returns:** *(Anonymous function)* ___ ### `Const` dux ▸ **dux**<**S**, **A**, **X**, **C**>(`config`: C): *object* **Type parameters:** ▪ **S** ▪ **A** ▪ **X** ▪ **C**: *[UpduxConfig](globals.md#upduxconfig)* **Parameters:** Name | Type | ------ | ------ | `config` | C | **Returns:** *object* * **actions**: = this.actions * **coduxes**: *object[]* = this.coduxes * **createStore**(): *function* * (`initial?`: S, `injectEnhancer?`: Function): *Store‹S› & object* * **initial**: = this.initial * **middleware**(): *function* * (`api`: UpduxMiddlewareAPI‹S, X›): *function* * (`next`: Function): *function* * (`action`: A): *any* * **mutations**(): *object* * **reducer**(): *function* * (`state`: S | undefined, `action`: [Action](globals.md#action)): *S* * **selectors**: = this.selectors * **subduxes**(): *object* * **upreducer**(): *function* * (`action`: [Action](globals.md#action)): *function* * (`state`: S): *S* ___ ### `Const` effectToMw ▸ **effectToMw**(`effect`: [Effect](globals.md#effect), `actions`: [Dictionary](globals.md#dictionary)‹ActionCreator›, `selectors`: [Dictionary](globals.md#dictionary)‹[Selector](globals.md#selector)›): *subMiddleware | augmented* **Parameters:** Name | Type | ------ | ------ | `effect` | [Effect](globals.md#effect) | `actions` | [Dictionary](globals.md#dictionary)‹ActionCreator› | `selectors` | [Dictionary](globals.md#dictionary)‹[Selector](globals.md#selector)› | **Returns:** *subMiddleware | augmented* ___ ### sliceMw ▸ **sliceMw**(`slice`: string, `mw`: [UpduxMiddleware](globals.md#upduxmiddleware)): *[UpduxMiddleware](globals.md#upduxmiddleware)* **Parameters:** Name | Type | ------ | ------ | `slice` | string | `mw` | [UpduxMiddleware](globals.md#upduxmiddleware) | **Returns:** *[UpduxMiddleware](globals.md#upduxmiddleware)* ___ ### `Const` subMiddleware ▸ **subMiddleware**(): *(Anonymous function)* **Returns:** *(Anonymous function)* ___ ### subSelectors ▸ **subSelectors**(`__namedParameters`: [string, Function]): *[string, [Selector](globals.md#selector)][]* **Parameters:** Name | Type | ------ | ------ | `__namedParameters` | [string, Function] | **Returns:** *[string, [Selector](globals.md#selector)][]*