nrgy
Version:
The library for reactive programming using efficient computing and MVC/MVVM patterns
1,264 lines (759 loc) • 115 kB
Markdown
rx-effects
# rx-effects
## Table of contents
### Type Aliases
- [Action](README.md#action)
- [Computation](README.md#computation)
- [ComputationResolver](README.md#computationresolver)
- [Controller](README.md#controller)
- [ControllerFactory](README.md#controllerfactory)
- [DeclaredStoreFactory](README.md#declaredstorefactory)
- [Effect](README.md#effect)
- [EffectController](README.md#effectcontroller)
- [EffectError](README.md#effecterror)
- [EffectErrorOrigin](README.md#effecterrororigin)
- [EffectEventProject](README.md#effecteventproject)
- [EffectHandler](README.md#effecthandler)
- [EffectNotification](README.md#effectnotification)
- [EffectOptions](README.md#effectoptions)
- [EffectPipeline](README.md#effectpipeline)
- [EffectResult](README.md#effectresult)
- [EffectState](README.md#effectstate)
- [ExternalScope](README.md#externalscope)
- [InferredService](README.md#inferredservice)
- [InternalStoreOptions](README.md#internalstoreoptions)
- [Query](README.md#query)
- [Scope](README.md#scope)
- [StateMutation](README.md#statemutation)
- [StateMutationMetadata](README.md#statemutationmetadata)
- [StateUpdates](README.md#stateupdates)
- [Store](README.md#store)
- [StoreDeclaration](README.md#storedeclaration)
- [StoreEvent](README.md#storeevent)
- [StoreExtension](README.md#storeextension)
- [StoreOptions](README.md#storeoptions)
- [StoreQuery](README.md#storequery)
- [StoreUpdate](README.md#storeupdate)
- [StoreUpdateFunction](README.md#storeupdatefunction)
- [StoreUpdates](README.md#storeupdates)
- [StoreWithUpdates](README.md#storewithupdates)
- [ViewControllerFactory](README.md#viewcontrollerfactory)
### Variables
- [GLOBAL_EFFECT_UNHANDLED_ERROR$](README.md#global_effect_unhandled_error$)
### Functions
- [OBJECT_COMPARATOR](README.md#object_comparator)
- [compute](README.md#compute)
- [createAction](README.md#createaction)
- [createController](README.md#createcontroller)
- [createEffect](README.md#createeffect)
- [createEffectController](README.md#createeffectcontroller)
- [createScope](README.md#createscope)
- [createStore](README.md#createstore)
- [createStoreLoggerExtension](README.md#createstoreloggerextension)
- [createStoreUpdates](README.md#createstoreupdates)
- [declareController](README.md#declarecontroller)
- [declareStateUpdates](README.md#declarestateupdates)
- [declareStore](README.md#declarestore)
- [declareViewController](README.md#declareviewcontroller)
- [mapQuery](README.md#mapquery)
- [mergeQueries](README.md#mergequeries)
- [pipeStateMutations](README.md#pipestatemutations)
- [pipeStore](README.md#pipestore)
- [queryBehaviourSubject](README.md#querybehavioursubject)
- [registerStoreExtension](README.md#registerstoreextension)
- [withStoreUpdates](README.md#withstoreupdates)
## Type Aliases
### Action
Ƭ **Action**<`Event`\>: (`event`: `Event`) => `void` & [`Event`] extends [`undefined` \| `void`] ? (`event?`: `Event`) => `void` : (`event`: `Event`) => `void`
Action is an event emitter
**`Param`**
Optional transformation or handler for an event
**`Field`**
event$ - Observable for emitted events.
**`Example`**
```ts
// Create the action
const submitForm = createAction<{ login: string; password: string }>();
// Call the action
submitForm({ login: 'foo', password: 'bar' });
// Handle action's events
submitForm.even$.subscribe((formData) => {
// Process the formData
});
```
#### Type parameters
| Name |
| :------ |
| `Event` |
#### Defined in
[packages/rx-effects/src/action.ts:24](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/action.ts#L24)
---
### Computation
Ƭ **Computation**<`T`\>: (`resolver`: [`ComputationResolver`](README.md#computationresolver)) => `T`
#### Type parameters
| Name |
| :--- |
| `T` |
#### Type declaration
▸ (`resolver`): `T`
This function calculates a value from external sources or resolved sources by a provided "resolver".
##### Parameters
| Name | Type |
| :--------- | :----------------------------------------------------- |
| `resolver` | [`ComputationResolver`](README.md#computationresolver) |
##### Returns
`T`
#### Defined in
[packages/rx-effects/src/compute.ts:21](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/compute.ts#L21)
---
### ComputationResolver
Ƭ **ComputationResolver**: <T\>(`query`: `Readonly`<{ `get`: () => `T` ; `value$`: `Observable`<`T`\> }\>) => `T`<T, R\>(`query`: `Readonly`<{ `get`: () => `T` ; `value$`: `Observable`<`T`\> }\>, `selector`: (`value`: `T`) => `R`) => `R`
#### Type declaration
▸ <`T`\>(`query`): `T`
This function returns a current value of a provided Query and registers it as a dependency for computation.
##### Type parameters
| Name |
| :--- |
| `T` |
##### Parameters
| Name | Type |
| :------ | :--------------------------------------------------------------- |
| `query` | `Readonly`<{ `get`: () => `T` ; `value$`: `Observable`<`T`\> }\> |
##### Returns
`T`
▸ <`T`, `R`\>(`query`, `selector`): `R`
This function returns a current value of a provided Query and registers it as a dependency for computation.
##### Type parameters
| Name |
| :--- |
| `T` |
| `R` |
##### Parameters
| Name | Type |
| :--------- | :--------------------------------------------------------------- |
| `query` | `Readonly`<{ `get`: () => `T` ; `value$`: `Observable`<`T`\> }\> |
| `selector` | (`value`: `T`) => `R` |
##### Returns
`R`
#### Defined in
[packages/rx-effects/src/compute.ts:13](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/compute.ts#L13)
---
### Controller
Ƭ **Controller**<`ControllerProps`\>: `Readonly`<`ControllerProps` & { `destroy`: () => `void` }\>
Effects and business logic controller.
Implementation of the controller must provide `destroy()` method. It should
be used for closing subscriptions and disposing resources.
**`Example`**
```ts
type LoggerController = Controller<{
log: (message: string) => void;
}>;
```
#### Type parameters
| Name | Type |
| :---------------- | :-------------------------------- |
| `ControllerProps` | extends `AnyObject` = `AnyObject` |
#### Defined in
[packages/rx-effects/src/controller.ts:18](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/controller.ts#L18)
---
### ControllerFactory
Ƭ **ControllerFactory**<`Service`\>: (`container`: `Container`) => [`Controller`](README.md#controller)<`Service`\>
#### Type parameters
| Name | Type |
| :-------- | :------------------ |
| `Service` | extends `AnyObject` |
#### Type declaration
▸ (`container`): [`Controller`](README.md#controller)<`Service`\>
##### Parameters
| Name | Type |
| :---------- | :---------- |
| `container` | `Container` |
##### Returns
[`Controller`](README.md#controller)<`Service`\>
#### Defined in
[packages/rx-effects/src/declareViewController.ts:24](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/mvc.ts#L24)
---
### DeclaredStoreFactory
Ƭ **DeclaredStoreFactory**<`State`, `Updates`\>: `Object`
#### Type parameters
| Name | Type |
| :-------- | :--------------------------------------------------------- |
| `State` | `State` |
| `Updates` | extends [`StateUpdates`](README.md#stateupdates)<`State`\> |
#### Call signature
▸ (`initialState?`, `options?`): `Readonly`<`Readonly`<`Readonly`<`Readonly`<{ `get`: () => `T` ; `value$`: `Observable`<`T`\> }\> & { `query`: `StoreQueryFn`<`State`\> }\> & { `id`: `number` ; `name?`: `string` ; `notify`: () => `void` ; `set`: (`state`: `State`) => `void` ; `update`: [`StoreUpdateFunction`](README.md#storeupdatefunction)<`State`\> } & { `destroy`: () => `void` }\> & { `updates`: [`StoreUpdates`](README.md#storeupdates)<`State`, `Updates`\> }\>
##### Parameters
| Name | Type |
| :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------- |
| `initialState?` | `FactoryStateArg`<`State`\> |
| `options?` | `Readonly`<{ `comparator?`: (`prevState`: `State`, `nextState`: `State`) => `boolean` ; `name?`: `string` ; `onDestroy?`: () => `void` }\> |
##### Returns
`Readonly`<`Readonly`<`Readonly`<`Readonly`<{ `get`: () => `T` ; `value$`: `Observable`<`T`\> }\> & { `query`: `StoreQueryFn`<`State`\> }\> & { `id`: `number` ; `name?`: `string` ; `notify`: () => `void` ; `set`: (`state`: `State`) => `void` ; `update`: [`StoreUpdateFunction`](README.md#storeupdatefunction)<`State`\> } & { `destroy`: () => `void` }\> & { `updates`: [`StoreUpdates`](README.md#storeupdates)<`State`, `Updates`\> }\>
#### Type declaration
| Name | Type |
| :-------- | :-------- |
| `updates` | `Updates` |
#### Defined in
[packages/rx-effects/src/declareStore.ts:24](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/declareStore.ts#L24)
---
### Effect
Ƭ **Effect**<`Event`, `Result`, `ErrorType`\>: [`Controller`](README.md#controller)<[`EffectState`](README.md#effectstate)<`Event`, `Result`, `ErrorType`\> & { `handle`: (`source`: [`Action`](README.md#action)<`Event`\> \| `Observable`<`Event`\> \| [`Query`](README.md#query)<`Event`\>) => `Subscription` }\>
Effect encapsulates a handler for Action or Observable.
It provides the state of execution results, which can be used to construct
a graph of business logic.
Effect collects all internal subscriptions, and provides `destroy()` methods
unsubscribe from them and deactivate the effect.
#### Type parameters
| Name | Type |
| :---------- | :------ |
| `Event` | `Event` |
| `Result` | `void` |
| `ErrorType` | `Error` |
#### Defined in
[packages/rx-effects/src/effect.ts:56](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effect.ts#L56)
---
### EffectController
Ƭ **EffectController**<`Event`, `Result`, `ErrorType`\>: [`Controller`](README.md#controller)<{ `complete`: () => `void` ; `error`: (`error`: [`EffectError`](README.md#effecterror)<`Event`, `ErrorType`\>) => `void` ; `next`: (`result`: [`EffectResult`](README.md#effectresult)<`Event`, `Result`\>) => `void` ; `start`: () => `void` ; `state`: [`EffectState`](README.md#effectstate)<`Event`, `Result`, `ErrorType`\> }\>
#### Type parameters
| Name | Type |
| :---------- | :------- |
| `Event` | `Event` |
| `Result` | `Result` |
| `ErrorType` | `Error` |
#### Defined in
[packages/rx-effects/src/effectController.ts:28](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effectController.ts#L28)
---
### EffectError
Ƭ **EffectError**<`Event`, `ErrorType`\>: `Readonly`<{ `error`: `any` ; `event?`: `undefined` ; `origin`: `"source"` } \| { `error`: `ErrorType` ; `event`: `Event` ; `origin`: `"handler"` }\>
#### Type parameters
| Name |
| :---------- |
| `Event` |
| `ErrorType` |
#### Defined in
[packages/rx-effects/src/effectState.ts:11](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effectState.ts#L11)
---
### EffectErrorOrigin
Ƭ **EffectErrorOrigin**: `"source"` \| `"handler"`
#### Defined in
[packages/rx-effects/src/effectState.ts:9](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effectState.ts#L9)
---
### EffectEventProject
Ƭ **EffectEventProject**<`Event`, `Result`\>: (`event`: `Event`) => `Observable`<`Result`\>
#### Type parameters
| Name |
| :------- |
| `Event` |
| `Result` |
#### Type declaration
▸ (`event`): `Observable`<`Result`\>
##### Parameters
| Name | Type |
| :------ | :------ |
| `event` | `Event` |
##### Returns
`Observable`<`Result`\>
#### Defined in
[packages/rx-effects/src/effect.ts:27](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effect.ts#L27)
---
### EffectHandler
Ƭ **EffectHandler**<`Event`, `Result`\>: (`event`: `Event`) => `Result` \| `Promise`<`Result`\> \| `Observable`<`Result`\>
#### Type parameters
| Name |
| :------- |
| `Event` |
| `Result` |
#### Type declaration
▸ (`event`): `Result` \| `Promise`<`Result`\> \| `Observable`<`Result`\>
Handler for an event. It can be asynchronous.
**`Result`**
a result, Promise or Observable
##### Parameters
| Name | Type |
| :------ | :------ |
| `event` | `Event` |
##### Returns
`Result` \| `Promise`<`Result`\> \| `Observable`<`Result`\>
#### Defined in
[packages/rx-effects/src/effect.ts:23](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effect.ts#L23)
---
### EffectNotification
Ƭ **EffectNotification**<`Event`, `Result`, `ErrorType`\>: `Readonly`<{ `type`: `"result"` } & [`EffectResult`](README.md#effectresult)<`Event`, `Result`\> \| { `type`: `"error"` } & [`EffectError`](README.md#effecterror)<`Event`, `ErrorType`\>\>
#### Type parameters
| Name |
| :---------- |
| `Event` |
| `Result` |
| `ErrorType` |
#### Defined in
[packages/rx-effects/src/effectState.ts:24](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effectState.ts#L24)
---
### EffectOptions
Ƭ **EffectOptions**<`Event`, `Result`\>: `Readonly`<{ `pipeline?`: [`EffectPipeline`](README.md#effectpipeline)<`Event`, `Result`\> }\>
#### Type parameters
| Name |
| :------- |
| `Event` |
| `Result` |
#### Defined in
[packages/rx-effects/src/effect.ts:38](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effect.ts#L38)
---
### EffectPipeline
Ƭ **EffectPipeline**<`Event`, `Result`\>: (`eventProject`: [`EffectEventProject`](README.md#effecteventproject)<`Event`, `Result`\>) => `OperatorFunction`<`Event`, `Result`\>
#### Type parameters
| Name |
| :------- |
| `Event` |
| `Result` |
#### Type declaration
▸ (`eventProject`): `OperatorFunction`<`Event`, `Result`\>
##### Parameters
| Name | Type |
| :------------- | :----------------------------------------------------------------------- |
| `eventProject` | [`EffectEventProject`](README.md#effecteventproject)<`Event`, `Result`\> |
##### Returns
`OperatorFunction`<`Event`, `Result`\>
#### Defined in
[packages/rx-effects/src/effect.ts:31](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effect.ts#L31)
---
### EffectResult
Ƭ **EffectResult**<`Event`, `Value`\>: `Readonly`<{ `event`: `Event` ; `result`: `Value` }\>
#### Type parameters
| Name |
| :------ |
| `Event` |
| `Value` |
#### Defined in
[packages/rx-effects/src/effectState.ts:4](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effectState.ts#L4)
---
### EffectState
Ƭ **EffectState**<`Event`, `Result`, `ErrorType`\>: `Readonly`<{ `done$`: `Observable`<[`EffectResult`](README.md#effectresult)<`Event`, `Result`\>\> ; `error$`: `Observable`<[`EffectError`](README.md#effecterror)<`Event`, `ErrorType`\>\> ; `final$`: `Observable`<[`EffectNotification`](README.md#effectnotification)<`Event`, `Result`, `ErrorType`\>\> ; `pending`: [`Query`](README.md#query)<`boolean`\> ; `pendingCount`: [`Query`](README.md#query)<`number`\> ; `result$`: `Observable`<`Result`\> }\>
Details about performing the effect.
#### Type parameters
| Name | Type |
| :---------- | :------ |
| `Event` | `Event` |
| `Result` | `void` |
| `ErrorType` | `Error` |
#### Defined in
[packages/rx-effects/src/effectState.ts:32](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effectState.ts#L32)
---
### ExternalScope
Ƭ **ExternalScope**: `Omit`<[`Scope`](README.md#scope), `"destroy"`\>
`ExternalScope` and `Scope` types allow to distinct which third-party code can invoke `destroy()` method.
#### Defined in
[packages/rx-effects/src/scope.ts:76](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/scope.ts#L76)
---
### InferredService
Ƭ **InferredService**<`Factory`\>: `Factory` extends [`ViewControllerFactory`](README.md#viewcontrollerfactory)<infer Service, infer Params\> ? `Service` : `never`
#### Type parameters
| Name |
| :-------- |
| `Factory` |
#### Defined in
[packages/rx-effects/src/declareViewController.ts:54](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/mvc.ts#L54)
---
### InternalStoreOptions
Ƭ **InternalStoreOptions**<`State`\>: `Readonly`<[`StoreOptions`](README.md#storeoptions)<`State`\> & { `internal?`: `boolean` }\>
#### Type parameters
| Name |
| :------ |
| `State` |
#### Defined in
[packages/rx-effects/src/store.ts:174](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L174)
---
### Query
Ƭ **Query**<`T`\>: `Readonly`<{ `get`: () => `T` ; `value$`: `Observable`<`T`\> }\>
Provider for a value of a state.
#### Type parameters
| Name |
| :--- |
| `T` |
#### Defined in
[packages/rx-effects/src/query.ts:6](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/query.ts#L6)
---
### Scope
Ƭ **Scope**: [`Controller`](README.md#controller)<{ `add`: (`teardown`: `TeardownLogic`) => `void` ; `createController`: <ControllerProps\>(`factory`: () => [`Controller`](README.md#controller)<`ControllerProps`\>) => [`Controller`](README.md#controller)<`ControllerProps`\> ; `createEffect`: <Event, Result, ErrorType\>(`handler`: [`EffectHandler`](README.md#effecthandler)<`Event`, `Result`\>, `options?`: [`EffectOptions`](README.md#effectoptions)<`Event`, `Result`\>) => [`Effect`](README.md#effect)<`Event`, `Result`, `ErrorType`\> ; `handle`: <Event, Result, ErrorType\>(`source`: `Observable`<`Event`\> \| [`Action`](README.md#action)<`Event`\> \| [`Query`](README.md#query)<`Event`\>, `handler`: [`EffectHandler`](README.md#effecthandler)<`Event`, `Result`\>, `options?`: [`EffectOptions`](README.md#effectoptions)<`Event`, `Result`\>) => [`Effect`](README.md#effect)<`Event`, `Result`, `ErrorType`\> ; `onDestroy`: (`teardown`: () => `void`) => `void` ; `subscribe`: <T\>(`source`: `Observable`<`T`\>) => `Subscription`<T\>(`source`: `Observable`<`T`\>, `next`: (`value`: `T`) => `void`) => `Subscription`<T\>(`source`: `Observable`<`T`\>, `observer`: `Partial`<`Observer`<`T`\>\>) => `Subscription` ; `createStore`: <State\>(`initialState`: `State`, `options?`: `Readonly`<{ `comparator?`: (`prevState`: `State`, `nextState`: `State`) => `boolean` ; `name?`: `string` ; `onDestroy?`: () => `void` }\>) => `Readonly`<`Readonly`<`Readonly`<{ `get`: () => `T` ; `value$`: `Observable`<`T`\> }\> & { `query`: `StoreQueryFn`<`State`\> }\> & { `id`: `number` ; `name?`: `string` ; `notify`: () => `void` ; `set`: (`state`: `State`) => `void` ; `update`: [`StoreUpdateFunction`](README.md#storeupdatefunction)<`State`\> } & { `destroy`: () => `void` }\> }\>
A controller-like boundary for effects and business logic.
`Scope` collects all subscriptions which are made by child entities and provides
`destroy()` method to unsubscribe from them.
#### Defined in
[packages/rx-effects/src/scope.ts:15](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/scope.ts#L15)
---
### StateMutation
Ƭ **StateMutation**<`State`\>: (`state`: `State`) => `State`
#### Type parameters
| Name |
| :------ |
| `State` |
#### Type declaration
▸ (`state`): `State`
A function to update a state.
It is recommended to return a new state or the previous one.
Actually, the function can change the state in place, but it is responsible
for a developer to provide `comparator` function to the store which handles
the changes.
For making changes use a currying function to provide arguments:
```ts
const addPizzaToCart =
(name: string): StateMutation<Array<string>> =>
(state) =>
[...state, name];
```
##### Parameters
| Name | Type | Description |
| :------ | :------ | :--------------- |
| `state` | `State` | a previous state |
##### Returns
`State`
a next state
#### Defined in
[packages/rx-effects/src/store.ts:29](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L29)
---
### StateMutationMetadata
Ƭ **StateMutationMetadata**: `Readonly`<{ `name?`: `string` }\>
#### Defined in
[packages/rx-effects/src/storeMetadata.ts:6](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/storeMetadata.ts#L6)
---
### StateUpdates
Ƭ **StateUpdates**<`State`\>: `Readonly`<`Record`<`string`, (...`args`: `any`[]) => [`StateMutation`](README.md#statemutation)<`State`\>\>\>
A record of factories which create state mutations.
#### Type parameters
| Name |
| :------ |
| `State` |
#### Defined in
[packages/rx-effects/src/store.ts:34](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L34)
---
### Store
Ƭ **Store**<`State`\>: [`Controller`](README.md#controller)<[`StoreQuery`](README.md#storequery)<`State`\> & { `id`: `number` ; `name?`: `string` ; `notify`: () => `void` ; `set`: (`state`: `State`) => `void` ; `update`: [`StoreUpdateFunction`](README.md#storeupdatefunction)<`State`\> }\>
Store of a state
#### Type parameters
| Name |
| :------ |
| `State` |
#### Defined in
[packages/rx-effects/src/store.ts:137](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L137)
---
### StoreDeclaration
Ƭ **StoreDeclaration**<`State`, `Updates`\>: `Readonly`<{ `initialState`: `State` ; `options?`: [`StoreOptions`](README.md#storeoptions)<`State`\> ; `updates`: `Updates` }\>
#### Type parameters
| Name | Type |
| :-------- | :-------------------------------------------------------------------------------------------------------------- |
| `State` | `State` |
| `Updates` | extends [`StateUpdates`](README.md#stateupdates)<`State`\> = [`StateUpdates`](README.md#stateupdates)<`State`\> |
#### Defined in
[packages/rx-effects/src/declareStore.ts:11](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/declareStore.ts#L11)
---
### StoreEvent
Ƭ **StoreEvent**<`State`\>: { `store`: [`Store`](README.md#store)<`State`\> ; `type`: `"created"` } \| { `store`: [`Store`](README.md#store)<`State`\> ; `type`: `"destroyed"` } \| { `mutation`: [`StateMutation`](README.md#statemutation)<`State`\> ; `nextState`: `State` ; `prevState`: `State` ; `store`: [`Store`](README.md#store)<`State`\> ; `type`: `"mutation"` } \| { `nextState`: `State` ; `prevState`: `State` ; `store`: [`Store`](README.md#store)<`State`\> ; `type`: `"updated"` }
#### Type parameters
| Name |
| :------ |
| `State` |
#### Defined in
[packages/rx-effects/src/storeEvents.ts:4](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/storeEvents.ts#L4)
---
### StoreExtension
Ƭ **StoreExtension**<`State`\>: (`api`: `StoreExtensionApi`) => { `onStoreEvent?`: (`event`: [`StoreEvent`](README.md#storeevent)<`State`\>) => `void` }
#### Type parameters
| Name |
| :------ |
| `State` |
#### Type declaration
▸ (`api`): `Object`
##### Parameters
| Name | Type |
| :---- | :------------------ |
| `api` | `StoreExtensionApi` |
##### Returns
`Object`
| Name | Type |
| :-------------- | :------------------------------------------------------------------ |
| `onStoreEvent?` | (`event`: [`StoreEvent`](README.md#storeevent)<`State`\>) => `void` |
#### Defined in
[packages/rx-effects/src/storeExtensions.ts:9](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/storeExtensions.ts#L9)
---
### StoreOptions
Ƭ **StoreOptions**<`State`\>: `Readonly`<{ `comparator?`: (`prevState`: `State`, `nextState`: `State`) => `boolean` ; `name?`: `string` ; `onDestroy?`: () => `void` }\>
#### Type parameters
| Name |
| :------ |
| `State` |
#### Defined in
[packages/rx-effects/src/store.ts:163](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L163)
---
### StoreQuery
Ƭ **StoreQuery**<`State`\>: `Readonly`<[`Query`](README.md#query)<`State`\> & { `query`: `StoreQueryFn`<`State`\> }\>
Read-only interface of a store.
#### Type parameters
| Name |
| :------ |
| `State` |
#### Defined in
[packages/rx-effects/src/store.ts:93](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L93)
---
### StoreUpdate
Ƭ **StoreUpdate**<`Args`\>: (...`args`: `Args`) => `void`
#### Type parameters
| Name | Type |
| :----- | :------------------ |
| `Args` | extends `unknown`[] |
#### Type declaration
▸ (`...args`): `void`
Function which changes a state of the store
##### Parameters
| Name | Type |
| :-------- | :----- |
| `...args` | `Args` |
##### Returns
`void`
#### Defined in
[packages/rx-effects/src/store.ts:124](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L124)
---
### StoreUpdateFunction
Ƭ **StoreUpdateFunction**<`State`\>: (`mutation`: [`StateMutation`](README.md#statemutation)<`State`\> \| `ReadonlyArray`<[`StateMutation`](README.md#statemutation)<`State`\> \| `undefined` \| `null` \| `false`\>) => `void`
#### Type parameters
| Name |
| :------ |
| `State` |
#### Type declaration
▸ (`mutation`): `void`
Updates the state by provided mutations
##### Parameters
| Name | Type |
| :--------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `mutation` | [`StateMutation`](README.md#statemutation)<`State`\> \| `ReadonlyArray`<[`StateMutation`](README.md#statemutation)<`State`\> \| `undefined` \| `null` \| `false`\> |
##### Returns
`void`
#### Defined in
[packages/rx-effects/src/store.ts:117](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L117)
---
### StoreUpdates
Ƭ **StoreUpdates**<`State`, `Updates`\>: `Readonly`<{ [K in keyof Updates]: StoreUpdate<Parameters<Updates[K]\>\> }\>
Record of store update functions
#### Type parameters
| Name | Type |
| :-------- | :--------------------------------------------------------- |
| `State` | `State` |
| `Updates` | extends [`StateUpdates`](README.md#stateupdates)<`State`\> |
#### Defined in
[packages/rx-effects/src/store.ts:127](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L127)
---
### StoreWithUpdates
Ƭ **StoreWithUpdates**<`State`, `Updates`\>: `Readonly`<[`Store`](README.md#store)<`State`\> & { `updates`: [`StoreUpdates`](README.md#storeupdates)<`State`, `Updates`\> }\>
Store of a state with updating functions
#### Type parameters
| Name | Type |
| :-------- | :--------------------------------------------------------- |
| `State` | `State` |
| `Updates` | extends [`StateUpdates`](README.md#stateupdates)<`State`\> |
#### Defined in
[packages/rx-effects/src/store.ts:154](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L154)
---
### ViewControllerFactory
Ƭ **ViewControllerFactory**<`Service`, `Params`\>: (`container`: `Container`, ...`params`: `Params`) => [`Controller`](README.md#controller)<`Service`\>
#### Type parameters
| Name | Type |
| :-------- | :----------------------------------------------- |
| `Service` | extends `AnyObject` |
| `Params` | extends [`Query`](README.md#query)<`unknown`\>[] |
#### Type declaration
▸ (`container`, `...params`): [`Controller`](README.md#controller)<`Service`\>
##### Parameters
| Name | Type |
| :---------- | :---------- |
| `container` | `Container` |
| `...params` | `Params` |
##### Returns
[`Controller`](README.md#controller)<`Service`\>
#### Defined in
[packages/rx-effects/src/declareViewController.ts:49](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/mvc.ts#L49)
## Variables
### GLOBAL_EFFECT_UNHANDLED_ERROR$
• `Const` **GLOBAL_EFFECT_UNHANDLED_ERROR$**: `Observable`<[`EffectError`](README.md#effecterror)<`unknown`, `unknown`\>\>
#### Defined in
[packages/rx-effects/src/effectController.ts:15](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effectController.ts#L15)
## Functions
### OBJECT_COMPARATOR
▸ **OBJECT_COMPARATOR**(`objA`, `objB`): `boolean`
Makes shallow comparison of two objects.
#### Parameters
| Name | Type |
| :----- | :----------------------------- |
| `objA` | `Record`<`string`, `unknown`\> |
| `objB` | `Record`<`string`, `unknown`\> |
#### Returns
`boolean`
#### Defined in
[packages/rx-effects/src/utils.ts:15](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/utils.ts#L15)
---
### compute
▸ **compute**<`T`\>(`computation`, `comparator?`): [`Query`](README.md#query)<`T`\>
Creates a computable query which calculates its values by provided "computation" function and dependencies.
Rules of "Computation" function:
- it must have no side effects
- it recalculates only when specified dependencies are updated
- its "formula" may have other sources of values, however they don't trigger updates
"Computation" function provides a resolver for using a dependency withing a calculation expression.
Dependency can be declared explicitly as an array by the second argument. It has the following advantages:
- Faster dependency subscription
- Ability to specify extra queries or observables as dependencies
A custom value comparator can be specified by "options" object as the second argument.
It helps to decide if a new value differs from a previous one in complex cases.
**`Example`**
```ts
const greeting = createStore('Hello');
const username = createStore('World');
// Dependency are implicitly resolved
const message = compute((get) => get(greeting) + ' ' + get(username) + '!');
// Dependency declared explicitly
const messageUppercase = compute(() => message.get().toUpperCase(), [message]);
expect(message.get()).toBe('Hello World!');
expect(messageUppercase.get()).toBe('HELLO WORLD!');
```
#### Type parameters
| Name |
| :--- |
| `T` |
#### Parameters
| Name | Type |
| :------------ | :------------------------------------------- |
| `computation` | [`Computation`](README.md#computation)<`T`\> |
| `comparator?` | `Comparator`<`T`\> |
#### Returns
[`Query`](README.md#query)<`T`\>
#### Defined in
[packages/rx-effects/src/compute.ts:55](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/compute.ts#L55)
---
### createAction
▸ **createAction**<`Event`\>(`operator?`): [`Action`](README.md#action)<`Event`\>
#### Type parameters
| Name | Type |
| :------ | :----- |
| `Event` | `void` |
#### Parameters
| Name | Type |
| :---------- | :----------------------------------- |
| `operator?` | `MonoTypeOperatorFunction`<`Event`\> |
#### Returns
[`Action`](README.md#action)<`Event`\>
#### Defined in
[packages/rx-effects/src/action.ts:31](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/action.ts#L31)
---
### createController
▸ **createController**<`Service`\>(`factory`): [`Controller`](README.md#controller)<`Service`\>
#### Type parameters
| Name | Type |
| :-------- | :------------------ |
| `Service` | extends `AnyObject` |
#### Parameters
| Name | Type |
| :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `factory` | (`scope`: `Readonly`<{ `add`: (`teardown`: `TeardownLogic`) => `void` ; `createController`: <ControllerProps\>(`factory`: () => `Readonly`<`ControllerProps` & { `destroy`: () => `void` }\>) => `Readonly`<`ControllerProps` & { `destroy`: () => `void` }\> ; `createEffect`: <Event, Result, ErrorType\>(`handler`: [`EffectHandler`](README.md#effecthandler)<`Event`, `Result`\>, `options?`: `Readonly`<{ `pipeline?`: [`EffectPipeline`](README.md#effectpipeline)<`Event`, `Result`\> }\>) => `Readonly`<`Readonly`<{ `done$`: `Observable`<`Readonly`<{ `event`: `Event` ; `result`: `Result` }\>\> ; `error$`: `Observable`<[`EffectError`](README.md#effecterror)<`Event`, `ErrorType`\>\> ; `final$`: `Observable`<[`EffectNotification`](README.md#effectnotification)<`Event`, `Result`, `ErrorType`\>\> ; `pending`: `Readonly`<{ `get`: () => `boolean` ; `value$`: `Observable`<`boolean`\> }\> ; `pendingCount`: `Readonly`<{ `get`: () => `number` ; `value$`: `Observable`<`number`\> }\> ; `result$`: `Observable`<`Result`\> }\> & { `handle`: (`source`: [`Action`](README.md#action)<`Event`\> \| `Observable`<`Event`\> \| `Readonly`<{ `get`: () => `Event` ; `value$`: `Observable`<`Event`\> }\>) => `Subscription` } & { `destroy`: () => `void` }\> ; `handle`: <Event, Result, ErrorType\>(`source`: `Observable`<`Event`\> \| [`Action`](README.md#action)<`Event`\> \| `Readonly`<{ `get`: () => `Event` ; `value$`: `Observable`<`Event`\> }\>, `handler`: [`EffectHandler`](README.md#effecthandler)<`Event`, `Result`\>, `options?`: `Readonly`<{ `pipeline?`: [`EffectPipeline`](README.md#effectpipeline)<`Event`, `Result`\> }\>) => `Readonly`<`Readonly`<{ `done$`: `Observable`<`Readonly`<{ `event`: `Event` ; `result`: `Result` }\>\> ; `error$`: `Observable`<[`EffectError`](README.md#effecterror)<`Event`, `ErrorType`\>\> ; `final$`: `Observable`<[`EffectNotification`](README.md#effectnotification)<`Event`, `Result`, `ErrorType`\>\> ; `pending`: `Readonly`<{ `get`: () => `boolean` ; `value$`: `Observable`<`boolean`\> }\> ; `pendingCount`: `Readonly`<{ `get`: () => `number` ; `value$`: `Observable`<`number`\> }\> ; `result$`: `Observable`<`Result`\> }\> & { `handle`: (`source`: `Observable`<`Event`\> \| [`Action`](README.md#action)<`Event`\> \| `Readonly`<{ `get`: () => `Event` ; `value$`: `Observable`<`Event`\> }\>) => `Subscription` } & { `destroy`: () => `void` }\> ; `onDestroy`: (`teardown`: () => `void`) => `void` ; `subscribe`: <T\>(`source`: `Observable`<`T`\>) => `Subscription`<T\>(`source`: `Observable`<`T`\>, `next`: (`value`: `T`) => `void`) => `Subscription`<T\>(`source`: `Observable`<`T`\>, `observer`: `Partial`<`Observer`<`T`\>\>) => `Subscription` ; `createStore`: <State\>(`initialState`: `State`, `options?`: `Readonly`<{ `comparator?`: (`prevState`: `State`, `nextState`: `State`) => `boolean` ; `name?`: `string` ; `onDestroy?`: () => `void` }\>) => `Readonly`<`Readonly`<`Readonly`<{ `get`: () => `State` ; `value$`: `Observable`<`State`\> }\> & { `query`: `StoreQueryFn`<`State`\> }\> & { `id`: `number` ; `name?`: `string` ; `notify`: () => `void` ; `set`: (`state`: `State`) => `void` ; `update`: [`StoreUpdateFunction`](README.md#storeupdatefunction)<`State`\> } & { `destroy`: () => `void` }\> } & { `destroy`: () => `void` }\>) => `Service` & { `destroy?`: () => `void` } |
#### Returns
[`Controller`](README.md#controller)<`Service`\>
#### Defined in
[packages/rx-effects/src/declareViewController.ts:7](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/mvc.ts#L7)
---
### createEffect
▸ **createEffect**<`Event`, `Result`, `ErrorType`\>(`handler`, `options?`): [`Effect`](README.md#effect)<`Event`, `Result`, `ErrorType`\>
Creates `Effect` from the provided handler.
**`Example`**
```ts
const sumEffect = createEffect<{ a: number; b: number }, number>((event) => {
return a + b;
});
```
#### Type parameters
| Name | Type |
| :---------- | :------ |
| `Event` | `void` |
| `Result` | `void` |
| `ErrorType` | `Error` |
#### Parameters
| Name | Type |
| :--------- | :--------------------------------------------------------------------------------------------- |
| `handler` | [`EffectHandler`](README.md#effecthandler)<`Event`, `Result`\> |
| `options?` | `Readonly`<{ `pipeline?`: [`EffectPipeline`](README.md#effectpipeline)<`Event`, `Result`\> }\> |
#### Returns
[`Effect`](README.md#effect)<`Event`, `Result`, `ErrorType`\>
#### Defined in
[packages/rx-effects/src/effect.ts:74](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effect.ts#L74)
---
### createEffectController
▸ **createEffectController**<`Event`, `Result`, `ErrorType`\>(): [`EffectController`](README.md#effectcontroller)<`Event`, `Result`, `ErrorType`\>
#### Type parameters
| Name | Type |
| :---------- | :------- |
| `Event` | `Event` |
| `Result` | `Result` |
| `ErrorType` | `Error` |
#### Returns
[`EffectController`](README.md#effectcontroller)<`Event`, `Result`, `ErrorType`\>
#### Defined in
[packages/rx-effects/src/effectController.ts:40](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/effectController.ts#L40)
---
### createScope
▸ **createScope**(): [`Scope`](README.md#scope)
Creates `Scope` instance.
#### Returns
[`Scope`](README.md#scope)
#### Defined in
[packages/rx-effects/src/scope.ts:81](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/scope.ts#L81)
---
### createStore
▸ **createStore**<`State`\>(`initialState`, `options?`): [`Store`](README.md#store)<`State`\>
Creates the state store.
#### Type parameters
| Name |
| :------ |
| `State` |
#### Parameters
| Name | Type | Description |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------- | :----------------------- |
| `initialState` | `State` | Initial state |
| `options?` | `Readonly`<{ `comparator?`: (`prevState`: `State`, `nextState`: `State`) => `boolean` ; `name?`: `string` ; `onDestroy?`: () => `void` }\> | Parameters for the store |
#### Returns
[`Store`](README.md#store)<`State`\>
#### Defined in
[packages/rx-effects/src/store.ts:187](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L187)
---
### createStoreLoggerExtension
▸ **createStoreLoggerExtension**(`logger`): [`StoreExtension`](README.md#storeextension)<`unknown`\>
#### Parameters
| Name | Type |
| :------- | :---------------------------------------------------------------------------------------- |
| `logger` | (...`data`: `any`[]) => `void`(`message?`: `any`, ...`optionalParams`: `any`[]) => `void` |
#### Returns
[`StoreExtension`](README.md#storeextension)<`unknown`\>
#### Defined in
[packages/rx-effects/src/storeLoggerExtension.ts:3](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/storeLoggerExtension.ts#L3)
---
### createStoreUpdates
▸ **createStoreUpdates**<`State`, `Updates`\>(`storeUpdate`, `stateUpdates`): [`StoreUpdates`](README.md#storeupdates)<`State`, `Updates`\>
Creates StateUpdates for updating the store by provided state mutations
#### Type parameters
| Name | Type |
| :-------- | :--------------------------------------------------------------------------------------------------------------------- |
| `State` | `State` |
| `Updates` | extends `Readonly`<`Record`<`string`, (...`args`: `any`[]) => [`StateMutation`](README.md#statemutation)<`State`\>\>\> |
#### Parameters
| Name | Type |
| :------------- | :--------------------------------------------------------------- |
| `storeUpdate` | [`StoreUpdateFunction`](README.md#storeupdatefunction)<`State`\> |
| `stateUpdates` | `Updates` |
#### Returns
[`StoreUpdates`](README.md#storeupdates)<`State`, `Updates`\>
#### Defined in
[packages/rx-effects/src/store.ts:328](https://github.com/mnasyrov/rx-effects/blob/1454a59/packages/rx-effects/src/store.ts#L328)
---
### declareController
▸ **declareController**<`Dependencies`, `Service`\>(`tokens`, `factory`): [`ControllerFactory`](README.md#controllerfactory)<`Service`\>
#### Type parameters
| Name | Type |
| :------------- | :------------------------ |
| `Dependencies` | extends `DependencyProps` |
| `Service` | extends `AnyObject` |
#### Parameters
| Name | Type