UNPKG

xaco-store

Version:

A lightweight state management library for Angular using Signals

1 lines 6.13 kB
{"version":3,"file":"xaco-store.mjs","sources":["../../../src/lib/middlewares/log/log.ts","../../../src/lib/store/store.service.ts","../../../src/lib/public-api.ts","../../../src/lib/xaco-store.ts"],"sourcesContent":["export const CURRENT_STATE_TEXT = 'Current state:';\r\nexport const NEXT_STATE_TEXT = 'Next state:';\r\nexport const ACTION_TEXT = 'Action:';\r\nexport const PAYLOAD_TEXT = 'Payload:';\r\n\r\nexport function logMiddleware<T>(currentState: T, nextState: T, action: string, payload?: any): void {\r\n console.log(CURRENT_STATE_TEXT, currentState);\r\n console.log(NEXT_STATE_TEXT, nextState);\r\n console.log(ACTION_TEXT, action);\r\n if(payload) console.log(PAYLOAD_TEXT, payload);\r\n}","import { Injectable, Signal, signal } from '@angular/core';\r\nimport { Middleware, Store, StoreAction, StoreMap } from '../models/store';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class StoreService {\r\n private _stores: StoreMap<any> = new Map();\r\n\r\n public createStore<T>(key: string, initialState: T, actions: StoreAction<T>, middlewares?: Array<Middleware<T>>): Store<T> {\r\n if (!this._stores.has(key)) {\r\n const state = signal(initialState);\r\n this._stores.set(key, {\r\n state,\r\n readonlyState: state.asReadonly(),\r\n initialState,\r\n actions,\r\n middlewares\r\n });\r\n }\r\n return this.getStore<T>(key);\r\n }\r\n\r\n public getStore<T>(key: string): Store<T> {\r\n const store = this._stores.get(key);\r\n if (!store) {\r\n throw new Error(\r\n `Store with key \"${key}\" not found. Create it first using createStore.`\r\n );\r\n }\r\n\r\n const actionCreators = Object.keys(store.actions).reduce(\r\n (acc, actionIndex) => {\r\n acc[actionIndex] = (payload?: unknown): void => {\r\n const currentState = store.state() as T;\r\n\r\n const stateActionResult = store.actions[actionIndex](\r\n currentState,\r\n payload\r\n ) as T;\r\n\r\n if (store.middlewares) {\r\n store.middlewares.forEach((middleware) => {\r\n middleware(currentState, stateActionResult, actionIndex, payload);\r\n });\r\n }\r\n\r\n store.state.set(stateActionResult);\r\n };\r\n return acc;\r\n },\r\n {} as { [K in keyof StoreAction<T>]: (payload?: any) => void }\r\n );\r\n\r\n return {\r\n state: store.readonlyState,\r\n resetStore: () => store.state.set(store.initialState),\r\n ...actionCreators,\r\n } as Store<T>;\r\n }\r\n\r\n public getStateSignal<T>(key: string): Signal<T> {\r\n const store = this._stores.get(key);\r\n if (!store) {\r\n throw new Error(`Store with key \"${key}\" not found`);\r\n }\r\n return store.readonlyState;\r\n }\r\n\r\n public clearStore(key: string): void {\r\n this._stores.delete(key);\r\n }\r\n\r\n public clearAllStores(): void {\r\n this._stores.clear();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of xaco-store\r\n */\r\n\r\nexport * from './middlewares/index';\r\nexport * from './store/store.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}