diff options
| author | Asko Nõmm <asko@nmm.ee> | 2025-04-18 19:24:23 +0300 |
|---|---|---|
| committer | Asko Nõmm <asko@nmm.ee> | 2025-04-18 19:24:23 +0300 |
| commit | 8fa2077f292ed0fcabbdb01a436fc267fb16ae79 (patch) | |
| tree | 2572ba5811d4de48d327cd2a038ccba490d4fc7f | |
| parent | 94f8cc415b7827b86d5c7bed3adf0b5c81b0e194 (diff) | |
Add state() helper method
| -rw-r--r-- | README.md | 8 | ||||
| -rw-r--r-- | src/shapex.test.ts | 17 | ||||
| -rw-r--r-- | src/shapex.ts | 15 |
3 files changed, 39 insertions, 1 deletions
@@ -222,3 +222,11 @@ If you want to get all subscriptions, you can use the `subscriptions` method. Th ```typescript app.subscriptions(); ``` + +#### Get current app state + +If you want to get the current state of the app, you can use the `state` method. This method returns the current state of the app. + +```typescript +app.state(); +``` diff --git a/src/shapex.test.ts b/src/shapex.test.ts index 0e7b08d..35207bb 100644 --- a/src/shapex.test.ts +++ b/src/shapex.test.ts @@ -1,7 +1,7 @@ import { assertArrayIncludes, assertEquals } from "@std/assert"; import { assertSpyCall, spy } from "@std/testing/mock"; import { describe, it } from "@std/testing/bdd"; -import ShapeX, { EventCallback } from "./shapex.ts"; +import ShapeX, { type EventCallback } from "./shapex.ts"; describe("subscribe", () => { it("subscribes to an event", () => { @@ -364,4 +364,19 @@ describe("utility methods", () => { assertEquals($.subscriptionCount("event1"), 2); assertEquals($.subscriptionCount("event2"), 1); }); + + it("returns updated state", () => { + const $ = ShapeX({ counter: 1 }); + + $.subscribe( + "event1", + (state) => ({ state: { counter: state.counter + 1 } }), + ); + + $.dispatch("event1"); + + assertEquals($.state(), { + counter: 2, + }); + }); }); diff --git a/src/shapex.ts b/src/shapex.ts index 3d9fd21..fce55d4 100644 --- a/src/shapex.ts +++ b/src/shapex.ts @@ -68,6 +68,11 @@ export type ShapeXInstance<T> = { * Dispatch an event. */ dispatch: (eventName: string, ...args: unknown[]) => void; + + /** + * Get the current state. + */ + state: () => T; }; /** @@ -272,6 +277,15 @@ export default function ShapeX<T extends object>( return Array.from(_subscriptions.keys()); }; + /** + * Returns the current state. + * + * @returns {T} The current state. + */ + const state = (): T => { + return _state; + } + return { subscribe, subscribeOnce, @@ -279,5 +293,6 @@ export default function ShapeX<T extends object>( subscriptionCount, subscriptions, dispatch, + state, }; } |
