Skip to main content

Store

Global state manager. Contains all the sub-states, combined modules and their subscriptions.


middlewares

List of store middlewares.

protected middlewares: Subscription<unknown>[];

index

Unique index used for subscriptions ids generation.

protected index: number;

combinedModules

List of store combined modules.

protected combinedModules: Partial<Record<string, {
moduleIds: string[];
reducer: Reducer<unknown>;
subscriptions: Partial<Record<string, Subscription<unknown>>>;
}>>;

modules

Global modules registry.

protected modules: Partial<Record<string, Module & {
combinedModules: string[];
actions: Partial<Record<string, ((api: ActionApi, data?: unknown) => Promise<unknown>)>>;
}>>;

constructor

Class constructor.

public constructor();

Usage

const store = new Store();

generateSubscriptionId

Generates a unique subscription id.

protected generateSubscriptionId(): string;

Returns

The generated subscription id.

Usage

store.generateSubscriptionId(); // "3e81922906bd7b"

register

Registers a new module into the store registry.

public register<T>(id: string, module: Module<T>): string;

Parameters

  • id: Module's unique identifier in registry. Can be any string, although it is recommended to follow a tree-structure pattern, like /my_app/module_a/module_b.
  • module: Module to register.

Returns

Module id.

Throws

  • If a module with the same id already exists in registry.

Usage

store.register('my_module', {
state: { count: 0 },
mutations: {
ADD({ state }) {
return {
count: state.count + 1,
};
},
},
});

unregister

Unregisters module with id id from the global modules registry.

public unregister(id: string): void;

Parameters

  • id: Id of the module to unregister.

Returns

Module id.

Throws

  • If module with id id does not exist.
  • If module still has related user-defined combined modules.

Usage

store.unregister('my_module');

combine

Combines one or several modules to allow subscriptions on that combination.

public combine<T>(id: string, moduleIds: string[], reducer: Reducer<T>): string;

Parameters

  • id: Combined module unique identifier in registry. Can be any string, although it is recommended to follow a tree-structure pattern, e.g. /my_app/module_a/module_b.
  • moduleIds: Ids of the modules to combine.
  • reducer: Transformation function. This function is called with every combined module state as arguments. For instance: (stateA, stateB, stateC) => ({ a: stateA.prop, b: stateB, c: stateC.propC })

Returns

Combined module id.

Throws

  • If a module with the same id already exists in registry.
  • If one of the modules ids does not exist.

Usage

store.combine('comined_module', ['module_a', 'module_b'], (stateA, stateB) => ({
a: stateA.key,
b: stateB
}));

uncombine

Uncombines user-defined combined module with id id.

public uncombine(id: string): void;

Parameters

  • id: Id of the combined module to uncombine.

Throws

  • If combined module with id id does not exist.
  • If the given id corresponds to a default combined module.
  • If combined module still has subscriptions.

Usage

store.uncombine('comined_module');

subscribe

Subscribes to changes on module with id id.

public subscribe<T>(id: string, handler: Subscription<T>): string;

Parameters

  • id: Id of the module to subscribe to.
  • handler: Callback to execute each time the module notifies changes.

Returns

Subscription id, used to unsubscribe.

Throws

  • If module with id id does not exist.

Usage

const subscriptionId = store.subscribe('my_module', (state) => {
console.log(state);
});

unsubscribe

Unsubscribes from changes on module with id id.

public unsubscribe(id: string, subscriptionId: string): void;

Parameters

  • id: Id of the module to unsubscribe from.
  • subscriptionId: Id of the subscription to remove.

Throws

  • If module with id id does not exist.
  • If subscription with id subscriptionId does not exist on that module.

Usage

store.unsubscribe('my_module', subscriptionId);

mutate

Performs a state mutation on module with id id.

public mutate(id: string, name: string, data?: unknown): void;

Parameters

  • id: Id of the module to perform the mutation on.
  • name: Name of the mutation to perform.
  • data: Additional data to pass to the mutation.

Throws

  • If module with id id does not exist or is a combined module.
  • If mutation name does not exist on that module.

Usage

store.mutate('my_module', 'UPDATE', { key: 'value' });

dispatch

Dispatches an asynchronous action to module with id id.

public dispatch<T>(id: string, name: string, data?: unknown): Promise<T>;

Parameters

  • id: Id of the module to dispatch action on.
  • name: Name of the action to perform.
  • data: Additional data to pass to the action.

Throws

  • If module with id id does not exist or is a combined module.
  • If action name does not exist on that module.

Usage

await store.dispatch('my_module', 'fetchData', { key: 'value' });

use

Applies the given middleware to the store.

public use<T>(middleware: Subscription<T>): void;

Parameters

  • middleware: Middleware to apply to the store.

Usage

store.use((newState) => {
console.log('Middleware triggered:', state);
});