@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.
- package/README.md +87 -0
- 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.
|
|
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.
|
|
83
|
+
"@lite-fsm/core": "2.0.2"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
86
86
|
"immer": ">=9.x"
|