@lite-fsm/middleware 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +87 -0
  2. package/package.json +2 -2
package/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # @lite-fsm/middleware
2
+
3
+ Optional middleware integrations for `lite-fsm`. The package includes Immer support, Redux DevTools support, and the public pattern for writing custom `MachineManager` middleware.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @lite-fsm/middleware
9
+ ```
10
+
11
+ Install `immer` too when using `immerMiddleware`:
12
+
13
+ ```bash
14
+ npm install @lite-fsm/middleware immer
15
+ ```
16
+
17
+ ## Entry Points
18
+
19
+ ```ts
20
+ import { devToolsMiddleware, immerMiddleware } from "@lite-fsm/middleware";
21
+
22
+ import { devToolsMiddleware } from "@lite-fsm/middleware/devTools";
23
+ import { immerMiddleware } from "@lite-fsm/middleware/immer";
24
+ ```
25
+
26
+ ## Immer Example
27
+
28
+ ```ts
29
+ import { MachineManager, createMachine, type FSMEvent } from "@lite-fsm/core";
30
+ import { immerMiddleware } from "@lite-fsm/middleware/immer";
31
+
32
+ type TodoEvent = FSMEvent<"ADD_TODO", { id: string; text: string }> | FSMEvent<"TOGGLE_TODO", { id: string }>;
33
+
34
+ const todos = createMachine<TodoEvent>({
35
+ config: {
36
+ READY: {
37
+ ADD_TODO: null,
38
+ TOGGLE_TODO: null,
39
+ },
40
+ },
41
+ initialState: "READY",
42
+ initialContext: {
43
+ items: [] as Array<{ id: string; text: string; completed: boolean }>,
44
+ },
45
+ reducer: (slice, event) => {
46
+ switch (event.type) {
47
+ case "ADD_TODO":
48
+ slice.context.items.push({ ...event.payload, completed: false });
49
+ return;
50
+ case "TOGGLE_TODO": {
51
+ const item = slice.context.items.find((todo) => todo.id === event.payload.id);
52
+ if (item) item.completed = !item.completed;
53
+ return;
54
+ }
55
+ }
56
+ },
57
+ });
58
+
59
+ const manager = MachineManager({ todos }, { middleware: [immerMiddleware] });
60
+
61
+ manager.transition({ type: "ADD_TODO", payload: { id: "1", text: "Ship README" } });
62
+ manager.transition({ type: "TOGGLE_TODO", payload: { id: "1" } });
63
+ ```
64
+
65
+ ## Redux DevTools Example
66
+
67
+ ```ts
68
+ import { MachineManager } from "@lite-fsm/core";
69
+ import { devToolsMiddleware } from "@lite-fsm/middleware/devTools";
70
+
71
+ const manager = MachineManager(
72
+ { todos },
73
+ {
74
+ middleware: [
75
+ devToolsMiddleware({
76
+ blacklistActions: ["TIMER_TICK", "AUTO_SAVE"],
77
+ }),
78
+ ],
79
+ },
80
+ );
81
+ ```
82
+
83
+ ## Documentation
84
+
85
+ - [Full documentation](https://alexandergureev.github.io/lite-fsm/)
86
+ - [Middleware package guide](https://alexandergureev.github.io/lite-fsm/packages/middleware)
87
+ - [Middleware API reference](https://alexandergureev.github.io/lite-fsm/api/middleware)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lite-fsm/middleware",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "type": "module",
5
5
  "description": "Optional middleware integrations for lite-fsm",
6
6
  "license": "MIT",
@@ -80,7 +80,7 @@
80
80
  "node": ">=16"
81
81
  },
82
82
  "dependencies": {
83
- "@lite-fsm/core": "2.0.0"
83
+ "@lite-fsm/core": "2.0.2"
84
84
  },
85
85
  "peerDependencies": {
86
86
  "immer": ">=9.x"