@fukict/flux 0.1.9 → 0.1.11
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 +138 -165
- package/dist/Flux.d.ts +3 -7
- package/dist/Flux.d.ts.map +1 -1
- package/dist/Flux.js +4 -22
- package/dist/Flux.js.map +1 -1
- package/dist/defineStore.d.ts.map +1 -1
- package/dist/defineStore.js +57 -0
- package/dist/defineStore.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +5 -42
- package/dist/types.d.ts.map +1 -1
- package/package.json +20 -17
- package/dist/createFlux.d.ts +0 -26
- package/dist/createFlux.d.ts.map +0 -1
- package/dist/createFlux.js +0 -41
- package/dist/createFlux.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,12 +4,13 @@ Minimal state management library for Fukict framework with Flux pattern and reac
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- **Minimal API**: Simple `
|
|
7
|
+
- **Minimal API**: Simple `defineStore()` factory function
|
|
8
8
|
- **Reactive Subscriptions**: Subscribe to state changes with automatic updates
|
|
9
9
|
- **Selector Pattern**: Subscribe to derived/computed values
|
|
10
10
|
- **Type-Safe**: Full TypeScript support with type inference
|
|
11
|
-
- **Action Pattern**: Organized state mutations through actions
|
|
11
|
+
- **Action Pattern**: Organized state mutations through sync and async actions
|
|
12
12
|
- **Dev Mode Protection**: Prevents direct state mutation in development
|
|
13
|
+
- **DevTools Integration**: Built-in support for Fukict DevTools via `scope`
|
|
13
14
|
- **Zero Dependencies**: No external dependencies
|
|
14
15
|
|
|
15
16
|
## Installation
|
|
@@ -24,26 +25,19 @@ pnpm add @fukict/flux
|
|
|
24
25
|
|
|
25
26
|
```tsx
|
|
26
27
|
import { Fukict } from '@fukict/basic';
|
|
27
|
-
import {
|
|
28
|
+
import { defineStore } from '@fukict/flux';
|
|
28
29
|
|
|
29
|
-
// Create
|
|
30
|
-
const
|
|
30
|
+
// Create store
|
|
31
|
+
const counterStore = defineStore({
|
|
32
|
+
scope: 'counter',
|
|
31
33
|
state: {
|
|
32
34
|
count: 0,
|
|
33
35
|
},
|
|
34
|
-
actions:
|
|
35
|
-
increment()
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
decrement() {
|
|
40
|
-
const state = flux.getState();
|
|
41
|
-
flux.setState({ count: state.count - 1 });
|
|
42
|
-
},
|
|
43
|
-
setCount(value: number) {
|
|
44
|
-
flux.setState({ count: value });
|
|
45
|
-
},
|
|
46
|
-
}),
|
|
36
|
+
actions: {
|
|
37
|
+
increment: state => ({ count: state.count + 1 }),
|
|
38
|
+
decrement: state => ({ count: state.count - 1 }),
|
|
39
|
+
setCount: (_state, value: number) => ({ count: value }),
|
|
40
|
+
},
|
|
47
41
|
});
|
|
48
42
|
|
|
49
43
|
// Use in component
|
|
@@ -52,7 +46,7 @@ class Counter extends Fukict {
|
|
|
52
46
|
|
|
53
47
|
mounted() {
|
|
54
48
|
// Subscribe to state changes
|
|
55
|
-
this.unsubscribe =
|
|
49
|
+
this.unsubscribe = counterStore.subscribe(() => {
|
|
56
50
|
this.update(this.props);
|
|
57
51
|
});
|
|
58
52
|
}
|
|
@@ -63,14 +57,13 @@ class Counter extends Fukict {
|
|
|
63
57
|
}
|
|
64
58
|
|
|
65
59
|
render() {
|
|
66
|
-
const
|
|
67
|
-
const actions = counterFlux.actions;
|
|
60
|
+
const { count } = counterStore.state;
|
|
68
61
|
|
|
69
62
|
return (
|
|
70
63
|
<div>
|
|
71
|
-
<p>Count: {
|
|
72
|
-
<button on:click={actions.increment}>+</button>
|
|
73
|
-
<button on:click={actions.decrement}>-</button>
|
|
64
|
+
<p>Count: {count}</p>
|
|
65
|
+
<button on:click={() => counterStore.actions.increment()}>+</button>
|
|
66
|
+
<button on:click={() => counterStore.actions.decrement()}>-</button>
|
|
74
67
|
</div>
|
|
75
68
|
);
|
|
76
69
|
}
|
|
@@ -79,40 +72,33 @@ class Counter extends Fukict {
|
|
|
79
72
|
|
|
80
73
|
## Core Concepts
|
|
81
74
|
|
|
82
|
-
### Creating
|
|
75
|
+
### Creating a Store
|
|
83
76
|
|
|
84
77
|
```typescript
|
|
85
|
-
import {
|
|
78
|
+
import { defineStore } from '@fukict/flux';
|
|
86
79
|
|
|
87
80
|
interface TodoState {
|
|
88
81
|
todos: Todo[];
|
|
89
82
|
filter: 'all' | 'active' | 'completed';
|
|
90
83
|
}
|
|
91
84
|
|
|
92
|
-
const
|
|
85
|
+
const todoStore = defineStore({
|
|
86
|
+
scope: 'todo',
|
|
93
87
|
state: {
|
|
94
88
|
todos: [],
|
|
95
89
|
filter: 'all',
|
|
96
90
|
} as TodoState,
|
|
97
|
-
actions:
|
|
98
|
-
addTodo(text: string) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
todo.id === id ? { ...todo, completed: !todo.completed } : todo,
|
|
109
|
-
),
|
|
110
|
-
});
|
|
111
|
-
},
|
|
112
|
-
setFilter(filter: TodoState['filter']) {
|
|
113
|
-
flux.setState({ filter });
|
|
114
|
-
},
|
|
115
|
-
}),
|
|
91
|
+
actions: {
|
|
92
|
+
addTodo: (state, text: string) => ({
|
|
93
|
+
todos: [...state.todos, { id: Date.now(), text, completed: false }],
|
|
94
|
+
}),
|
|
95
|
+
toggleTodo: (state, id: number) => ({
|
|
96
|
+
todos: state.todos.map(todo =>
|
|
97
|
+
todo.id === id ? { ...todo, completed: !todo.completed } : todo,
|
|
98
|
+
),
|
|
99
|
+
}),
|
|
100
|
+
setFilter: (_state, filter: TodoState['filter']) => ({ filter }),
|
|
101
|
+
},
|
|
116
102
|
});
|
|
117
103
|
```
|
|
118
104
|
|
|
@@ -124,7 +110,7 @@ class TodoList extends Fukict {
|
|
|
124
110
|
|
|
125
111
|
mounted() {
|
|
126
112
|
// Subscribe to all state changes
|
|
127
|
-
this.unsubscribe =
|
|
113
|
+
this.unsubscribe = todoStore.subscribe(() => {
|
|
128
114
|
this.update(this.props);
|
|
129
115
|
});
|
|
130
116
|
}
|
|
@@ -134,7 +120,7 @@ class TodoList extends Fukict {
|
|
|
134
120
|
}
|
|
135
121
|
|
|
136
122
|
render() {
|
|
137
|
-
const { todos } =
|
|
123
|
+
const { todos } = todoStore.state;
|
|
138
124
|
return (
|
|
139
125
|
<ul>
|
|
140
126
|
{todos.map(todo => (
|
|
@@ -168,7 +154,7 @@ class FilteredTodoList extends Fukict {
|
|
|
168
154
|
|
|
169
155
|
mounted() {
|
|
170
156
|
// Subscribe to selector (only updates when selector result changes)
|
|
171
|
-
this.unsubscribe =
|
|
157
|
+
this.unsubscribe = todoStore.subscribe(
|
|
172
158
|
visibleTodosSelector,
|
|
173
159
|
visibleTodos => {
|
|
174
160
|
console.log('Visible todos changed:', visibleTodos);
|
|
@@ -182,7 +168,7 @@ class FilteredTodoList extends Fukict {
|
|
|
182
168
|
}
|
|
183
169
|
|
|
184
170
|
render() {
|
|
185
|
-
const visibleTodos = visibleTodosSelector(
|
|
171
|
+
const visibleTodos = visibleTodosSelector(todoStore.getState());
|
|
186
172
|
return (
|
|
187
173
|
<ul>
|
|
188
174
|
{visibleTodos.map(todo => (
|
|
@@ -197,30 +183,31 @@ class FilteredTodoList extends Fukict {
|
|
|
197
183
|
### Async Actions
|
|
198
184
|
|
|
199
185
|
```typescript
|
|
200
|
-
const
|
|
186
|
+
const userStore = defineStore({
|
|
187
|
+
scope: 'user',
|
|
201
188
|
state: {
|
|
202
189
|
user: null as User | null,
|
|
203
190
|
loading: false,
|
|
204
191
|
error: null as string | null,
|
|
205
192
|
},
|
|
206
|
-
|
|
207
|
-
async login(email: string, password: string) {
|
|
208
|
-
|
|
193
|
+
asyncActions: {
|
|
194
|
+
async login(ctx, email: string, password: string) {
|
|
195
|
+
ctx.setState({ loading: true, error: null });
|
|
209
196
|
|
|
210
197
|
try {
|
|
211
198
|
const user = await api.login(email, password);
|
|
212
|
-
|
|
199
|
+
ctx.setState({ user, loading: false });
|
|
213
200
|
} catch (error) {
|
|
214
|
-
|
|
201
|
+
ctx.setState({
|
|
215
202
|
error: error.message,
|
|
216
203
|
loading: false,
|
|
217
204
|
});
|
|
218
205
|
}
|
|
219
206
|
},
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
},
|
|
223
|
-
}
|
|
207
|
+
},
|
|
208
|
+
actions: {
|
|
209
|
+
logout: () => ({ user: null }),
|
|
210
|
+
},
|
|
224
211
|
});
|
|
225
212
|
```
|
|
226
213
|
|
|
@@ -236,7 +223,7 @@ class App extends Fukict {
|
|
|
236
223
|
|
|
237
224
|
mounted() {
|
|
238
225
|
// App subscribes, all children read state
|
|
239
|
-
this.unsubscribe =
|
|
226
|
+
this.unsubscribe = globalStore.subscribe(() => {
|
|
240
227
|
this.update(this.props);
|
|
241
228
|
});
|
|
242
229
|
}
|
|
@@ -265,9 +252,9 @@ class Dashboard extends Fukict {
|
|
|
265
252
|
render() {
|
|
266
253
|
return (
|
|
267
254
|
<div>
|
|
268
|
-
<CounterPanel /> {/* Subscribes to
|
|
269
|
-
<TodoPanel /> {/* Subscribes to
|
|
270
|
-
<UserPanel /> {/* Subscribes to
|
|
255
|
+
<CounterPanel /> {/* Subscribes to counterStore */}
|
|
256
|
+
<TodoPanel /> {/* Subscribes to todoStore */}
|
|
257
|
+
<UserPanel /> {/* Subscribes to userStore */}
|
|
271
258
|
</div>
|
|
272
259
|
);
|
|
273
260
|
}
|
|
@@ -296,19 +283,17 @@ class Parent extends Fukict {
|
|
|
296
283
|
In development mode, Flux prevents direct state mutation:
|
|
297
284
|
|
|
298
285
|
```typescript
|
|
299
|
-
const
|
|
286
|
+
const store = defineStore({
|
|
287
|
+
scope: 'example',
|
|
300
288
|
state: { count: 0 },
|
|
301
|
-
actions:
|
|
302
|
-
// ✅ Good:
|
|
303
|
-
increment()
|
|
304
|
-
|
|
305
|
-
flux.setState({ count: state.count + 1 });
|
|
306
|
-
},
|
|
307
|
-
}),
|
|
289
|
+
actions: {
|
|
290
|
+
// ✅ Good: Return partial state
|
|
291
|
+
increment: state => ({ count: state.count + 1 }),
|
|
292
|
+
},
|
|
308
293
|
});
|
|
309
294
|
|
|
310
295
|
// ❌ Bad: Direct mutation (warning in dev mode)
|
|
311
|
-
const state =
|
|
296
|
+
const state = store.state;
|
|
312
297
|
state.count++; // Warning: [Flux] Direct state mutation is not allowed
|
|
313
298
|
```
|
|
314
299
|
|
|
@@ -318,26 +303,22 @@ state.count++; // Warning: [Flux] Direct state mutation is not allowed
|
|
|
318
303
|
|
|
319
304
|
```typescript
|
|
320
305
|
// User store
|
|
321
|
-
const
|
|
306
|
+
const userStore = defineStore({
|
|
307
|
+
scope: 'user',
|
|
322
308
|
state: { user: null },
|
|
323
|
-
actions:
|
|
324
|
-
setUser(user: User) {
|
|
325
|
-
|
|
326
|
-
},
|
|
327
|
-
}),
|
|
309
|
+
actions: {
|
|
310
|
+
setUser: (_state, user: User) => ({ user }),
|
|
311
|
+
},
|
|
328
312
|
});
|
|
329
313
|
|
|
330
314
|
// Settings store
|
|
331
|
-
const
|
|
315
|
+
const settingsStore = defineStore({
|
|
316
|
+
scope: 'settings',
|
|
332
317
|
state: { theme: 'light', language: 'en' },
|
|
333
|
-
actions:
|
|
334
|
-
setTheme(theme: string) {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
setLanguage(language: string) {
|
|
338
|
-
flux.setState({ language });
|
|
339
|
-
},
|
|
340
|
-
}),
|
|
318
|
+
actions: {
|
|
319
|
+
setTheme: (_state, theme: string) => ({ theme }),
|
|
320
|
+
setLanguage: (_state, language: string) => ({ language }),
|
|
321
|
+
},
|
|
341
322
|
});
|
|
342
323
|
|
|
343
324
|
// Use both in component
|
|
@@ -346,8 +327,8 @@ class Profile extends Fukict {
|
|
|
346
327
|
private unsubscribeSettings?: () => void;
|
|
347
328
|
|
|
348
329
|
mounted() {
|
|
349
|
-
this.unsubscribeUser =
|
|
350
|
-
this.unsubscribeSettings =
|
|
330
|
+
this.unsubscribeUser = userStore.subscribe(() => this.update(this.props));
|
|
331
|
+
this.unsubscribeSettings = settingsStore.subscribe(() =>
|
|
351
332
|
this.update(this.props)
|
|
352
333
|
);
|
|
353
334
|
}
|
|
@@ -358,8 +339,8 @@ class Profile extends Fukict {
|
|
|
358
339
|
}
|
|
359
340
|
|
|
360
341
|
render() {
|
|
361
|
-
const { user } =
|
|
362
|
-
const { theme } =
|
|
342
|
+
const { user } = userStore.state;
|
|
343
|
+
const { theme } = settingsStore.state;
|
|
363
344
|
return <div class={theme}>{user?.name}</div>;
|
|
364
345
|
}
|
|
365
346
|
}
|
|
@@ -378,7 +359,7 @@ class TodoStats extends Fukict {
|
|
|
378
359
|
private unsubscribe?: () => void;
|
|
379
360
|
|
|
380
361
|
mounted() {
|
|
381
|
-
this.unsubscribe =
|
|
362
|
+
this.unsubscribe = todoStore.subscribe(statsSelector, (stats) => {
|
|
382
363
|
console.log('Stats changed:', stats);
|
|
383
364
|
this.update(this.props);
|
|
384
365
|
});
|
|
@@ -389,7 +370,7 @@ class TodoStats extends Fukict {
|
|
|
389
370
|
}
|
|
390
371
|
|
|
391
372
|
render() {
|
|
392
|
-
const stats = statsSelector(
|
|
373
|
+
const stats = statsSelector(todoStore.getState());
|
|
393
374
|
return (
|
|
394
375
|
<div>
|
|
395
376
|
<p>Total: {stats.total}</p>
|
|
@@ -401,85 +382,81 @@ class TodoStats extends Fukict {
|
|
|
401
382
|
}
|
|
402
383
|
```
|
|
403
384
|
|
|
404
|
-
### Store Composition
|
|
405
|
-
|
|
406
|
-
```typescript
|
|
407
|
-
const createAppFlux = () => {
|
|
408
|
-
const userFlux = createFlux({
|
|
409
|
-
state: { user: null },
|
|
410
|
-
actions: (flux) => ({ /*...*/ }),
|
|
411
|
-
});
|
|
412
|
-
|
|
413
|
-
const todoFlux = createFlux({
|
|
414
|
-
state: { todos: [] },
|
|
415
|
-
actions: (flux) => ({ /*...*/ }),
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
return {
|
|
419
|
-
user: userFlux,
|
|
420
|
-
todo: todoFlux,
|
|
421
|
-
};
|
|
422
|
-
};
|
|
423
|
-
|
|
424
|
-
const appFlux = createAppFlux();
|
|
425
|
-
|
|
426
|
-
// Use in components
|
|
427
|
-
appFlux.user.getState();
|
|
428
|
-
appFlux.user.actions.setUser(...);
|
|
429
|
-
appFlux.todo.getState();
|
|
430
|
-
appFlux.todo.actions.addTodo(...);
|
|
431
|
-
```
|
|
432
|
-
|
|
433
385
|
## API Reference
|
|
434
386
|
|
|
435
|
-
###
|
|
387
|
+
### defineStore(config)
|
|
436
388
|
|
|
437
|
-
Creates a new
|
|
389
|
+
Creates a new store.
|
|
438
390
|
|
|
439
391
|
```typescript
|
|
440
|
-
const
|
|
392
|
+
const store = defineStore({
|
|
393
|
+
scope: 'my-store', // Required: unique identifier for DevTools
|
|
441
394
|
state: initialState,
|
|
442
|
-
actions:
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
395
|
+
actions: {
|
|
396
|
+
// Sync actions: (state, ...args) => Partial<State>
|
|
397
|
+
actionName: (state, ...args) => ({
|
|
398
|
+
/* partial state */
|
|
399
|
+
}),
|
|
400
|
+
},
|
|
401
|
+
asyncActions: {
|
|
402
|
+
// Async actions: (ctx, ...args) => Promise<void>
|
|
403
|
+
async asyncAction(ctx, ...args) {
|
|
404
|
+
ctx.setState({
|
|
405
|
+
/* partial state */
|
|
406
|
+
});
|
|
446
407
|
},
|
|
447
|
-
}
|
|
408
|
+
},
|
|
448
409
|
});
|
|
449
410
|
```
|
|
450
411
|
|
|
451
|
-
###
|
|
412
|
+
### store.state
|
|
413
|
+
|
|
414
|
+
Current state (readonly, protected from mutation in dev mode).
|
|
415
|
+
|
|
416
|
+
```typescript
|
|
417
|
+
const { count } = store.state;
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### store.getState()
|
|
452
421
|
|
|
453
|
-
Returns current state (
|
|
422
|
+
Returns current state snapshot (readonly).
|
|
454
423
|
|
|
455
424
|
```typescript
|
|
456
|
-
const state =
|
|
425
|
+
const state = store.getState();
|
|
457
426
|
console.log(state.count);
|
|
458
427
|
```
|
|
459
428
|
|
|
460
|
-
###
|
|
429
|
+
### store.setState(partial)
|
|
461
430
|
|
|
462
431
|
Updates state with partial state object.
|
|
463
432
|
|
|
464
433
|
```typescript
|
|
465
|
-
|
|
434
|
+
store.setState({ count: 10 });
|
|
466
435
|
```
|
|
467
436
|
|
|
468
|
-
###
|
|
437
|
+
### store.actions
|
|
469
438
|
|
|
470
|
-
|
|
439
|
+
Wrapped sync actions (state parameter is automatically injected).
|
|
471
440
|
|
|
472
441
|
```typescript
|
|
473
|
-
|
|
474
|
-
actions.
|
|
442
|
+
store.actions.increment();
|
|
443
|
+
store.actions.add(5);
|
|
475
444
|
```
|
|
476
445
|
|
|
477
|
-
###
|
|
446
|
+
### store.asyncActions
|
|
447
|
+
|
|
448
|
+
Wrapped async actions (context parameter is automatically injected).
|
|
449
|
+
|
|
450
|
+
```typescript
|
|
451
|
+
await store.asyncActions.fetchUser('123');
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### store.subscribe(listener)
|
|
478
455
|
|
|
479
456
|
Subscribes to all state changes.
|
|
480
457
|
|
|
481
458
|
```typescript
|
|
482
|
-
const unsubscribe =
|
|
459
|
+
const unsubscribe = store.subscribe(() => {
|
|
483
460
|
console.log('State changed');
|
|
484
461
|
});
|
|
485
462
|
|
|
@@ -487,12 +464,12 @@ const unsubscribe = flux.subscribe(() => {
|
|
|
487
464
|
unsubscribe();
|
|
488
465
|
```
|
|
489
466
|
|
|
490
|
-
###
|
|
467
|
+
### store.subscribe(selector, listener)
|
|
491
468
|
|
|
492
469
|
Subscribes to selector changes (only triggers when selector result changes).
|
|
493
470
|
|
|
494
471
|
```typescript
|
|
495
|
-
const unsubscribe =
|
|
472
|
+
const unsubscribe = store.subscribe(
|
|
496
473
|
state => state.user.name,
|
|
497
474
|
name => {
|
|
498
475
|
console.log('Name changed:', name);
|
|
@@ -506,25 +483,21 @@ const unsubscribe = flux.subscribe(
|
|
|
506
483
|
|
|
507
484
|
```typescript
|
|
508
485
|
// ✅ Good: Group related actions
|
|
509
|
-
const
|
|
486
|
+
const userStore = defineStore({
|
|
487
|
+
scope: 'user',
|
|
510
488
|
state: { user: null, preferences: {} },
|
|
511
|
-
actions:
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
},
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
updatePreference(key, value) {
|
|
522
|
-
/*...*/
|
|
523
|
-
},
|
|
524
|
-
resetPreferences() {
|
|
525
|
-
/*...*/
|
|
489
|
+
actions: {
|
|
490
|
+
logout: () => ({ user: null }),
|
|
491
|
+
updatePreference: (state, key: string, value: any) => ({
|
|
492
|
+
preferences: { ...state.preferences, [key]: value },
|
|
493
|
+
}),
|
|
494
|
+
resetPreferences: () => ({ preferences: {} }),
|
|
495
|
+
},
|
|
496
|
+
asyncActions: {
|
|
497
|
+
async login(ctx, credentials: Credentials) {
|
|
498
|
+
/* ... */
|
|
526
499
|
},
|
|
527
|
-
}
|
|
500
|
+
},
|
|
528
501
|
});
|
|
529
502
|
```
|
|
530
503
|
|
|
@@ -538,7 +511,7 @@ const expensiveSelector = (state) => {
|
|
|
538
511
|
|
|
539
512
|
// ❌ Bad: Compute in render
|
|
540
513
|
render() {
|
|
541
|
-
const state =
|
|
514
|
+
const state = store.getState();
|
|
542
515
|
const result = state.items.filter(/*...*/).map(/*...*/).reduce(/*...*/);
|
|
543
516
|
}
|
|
544
517
|
```
|
|
@@ -551,7 +524,7 @@ class MyComponent extends Fukict {
|
|
|
551
524
|
private unsubscribe?: () => void;
|
|
552
525
|
|
|
553
526
|
mounted() {
|
|
554
|
-
this.unsubscribe =
|
|
527
|
+
this.unsubscribe = store.subscribe(() => this.update(this.props));
|
|
555
528
|
}
|
|
556
529
|
|
|
557
530
|
beforeUnmount() {
|
|
@@ -566,7 +539,7 @@ class MyComponent extends Fukict {
|
|
|
566
539
|
// ✅ Good: Subscribe at parent, read in children
|
|
567
540
|
class App extends Fukict {
|
|
568
541
|
mounted() {
|
|
569
|
-
this.unsubscribe =
|
|
542
|
+
this.unsubscribe = store.subscribe(() => this.update(this.props));
|
|
570
543
|
}
|
|
571
544
|
render() {
|
|
572
545
|
return (
|
|
@@ -579,7 +552,7 @@ class App extends Fukict {
|
|
|
579
552
|
|
|
580
553
|
class Child extends Fukict {
|
|
581
554
|
render() {
|
|
582
|
-
const state =
|
|
555
|
+
const state = store.state; // Just read
|
|
583
556
|
return <div>{state.value}</div>;
|
|
584
557
|
}
|
|
585
558
|
}
|
package/dist/Flux.d.ts
CHANGED
|
@@ -35,10 +35,10 @@ export declare class Flux<T> implements FluxInstance<T> {
|
|
|
35
35
|
*/
|
|
36
36
|
getState(): T;
|
|
37
37
|
/**
|
|
38
|
-
* Update state
|
|
39
|
-
* @param
|
|
38
|
+
* Update state (partial merge)
|
|
39
|
+
* @param partial Partial state to merge
|
|
40
40
|
*/
|
|
41
|
-
setState(
|
|
41
|
+
setState(partial: Partial<T>): void;
|
|
42
42
|
/**
|
|
43
43
|
* Subscribe to state changes
|
|
44
44
|
*/
|
|
@@ -48,10 +48,6 @@ export declare class Flux<T> implements FluxInstance<T> {
|
|
|
48
48
|
* Notify all subscribers
|
|
49
49
|
*/
|
|
50
50
|
private notify;
|
|
51
|
-
/**
|
|
52
|
-
* Determine if it's a partial update
|
|
53
|
-
*/
|
|
54
|
-
private isPartialUpdate;
|
|
55
51
|
/**
|
|
56
52
|
* Shallow compare two values for equality
|
|
57
53
|
*/
|
package/dist/Flux.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flux.d.ts","sourceRoot":"","sources":["../src/Flux.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,SAAS,CAAC;AAWjB;;;;;;;;GAQG;AACH,qBAAa,IAAI,CAAC,CAAC,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC7C;;OAEG;IACH,OAAO,CAAC,aAAa,CAAI;IAEzB;;OAEG;IACH,OAAO,CAAC,UAAU,CAAI;IAEtB;;OAEG;IACH,OAAO,CAAC,aAAa,CAAwC;IAE7D;;;OAGG;gBACS,YAAY,EAAE,CAAC;IAK3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiD3B;;OAEG;IACH,QAAQ,IAAI,CAAC;IAIb;;;OAGG;IACH,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"Flux.d.ts","sourceRoot":"","sources":["../src/Flux.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,SAAS,CAAC;AAWjB;;;;;;;;GAQG;AACH,qBAAa,IAAI,CAAC,CAAC,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC7C;;OAEG;IACH,OAAO,CAAC,aAAa,CAAI;IAEzB;;OAEG;IACH,OAAO,CAAC,UAAU,CAAI;IAEtB;;OAEG;IACH,OAAO,CAAC,aAAa,CAAwC;IAE7D;;;OAGG;gBACS,YAAY,EAAE,CAAC;IAK3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiD3B;;OAEG;IACH,QAAQ,IAAI,CAAC;IAIb;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAUnC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW;IACjD,SAAS,CAAC,CAAC,EACT,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GACxB,WAAW;IAkCd;;OAEG;IACH,OAAO,CAAC,MAAM;IAgBd;;OAEG;IACH,OAAO,CAAC,YAAY;CAoCrB"}
|
package/dist/Flux.js
CHANGED
|
@@ -76,19 +76,11 @@ export class Flux {
|
|
|
76
76
|
return this.stateProxy;
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
|
-
* Update state
|
|
80
|
-
* @param
|
|
79
|
+
* Update state (partial merge)
|
|
80
|
+
* @param partial Partial state to merge
|
|
81
81
|
*/
|
|
82
|
-
setState(
|
|
83
|
-
|
|
84
|
-
if (this.isPartialUpdate(newState)) {
|
|
85
|
-
// Partial update: shallow merge
|
|
86
|
-
this.internalState = { ...this.internalState, ...newState };
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
// Full replacement
|
|
90
|
-
this.internalState = newState;
|
|
91
|
-
}
|
|
82
|
+
setState(partial) {
|
|
83
|
+
this.internalState = { ...this.internalState, ...partial };
|
|
92
84
|
// Update proxy
|
|
93
85
|
this.stateProxy = this.createReadonlyProxy(this.internalState);
|
|
94
86
|
// Notify all subscribers
|
|
@@ -139,16 +131,6 @@ export class Flux {
|
|
|
139
131
|
}
|
|
140
132
|
}
|
|
141
133
|
}
|
|
142
|
-
/**
|
|
143
|
-
* Determine if it's a partial update
|
|
144
|
-
*/
|
|
145
|
-
isPartialUpdate(newState) {
|
|
146
|
-
// Simple heuristic:
|
|
147
|
-
// If newState has fewer keys than current state, consider it a partial update
|
|
148
|
-
const newKeys = Object.keys(newState);
|
|
149
|
-
const stateKeys = Object.keys(this.internalState);
|
|
150
|
-
return newKeys.length < stateKeys.length;
|
|
151
|
-
}
|
|
152
134
|
/**
|
|
153
135
|
* Shallow compare two values for equality
|
|
154
136
|
*/
|
package/dist/Flux.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flux.js","sourceRoot":"","sources":["../src/Flux.ts"],"names":[],"mappings":"AAgBA;;;;;;;;GAQG;AACH,MAAM,OAAO,IAAI;IACf;;OAEG;IACK,aAAa,CAAI;IAEzB;;OAEG;IACK,UAAU,CAAI;IAEtB;;OAEG;IACK,aAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;IAE7D;;;OAGG;IACH,YAAY,YAAe;QACzB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,KAAQ;QAClC,OAAO,IAAI,KAAK,CAAC,KAAe,EAAE;YAChC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;gBACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAY,CAAC;gBAE7D,uDAAuD;gBACvD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAChD,OAAO,IAAI,KAAK,CAAC,KAAe,EAAE;wBAChC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAY;wBACjD,GAAG,EAAE,GAAG,EAAE;4BACR,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gCAC1C,OAAO,CAAC,IAAI,CACV,4EAA4E,CAC7E,CAAC;4BACJ,CAAC;4BACD,OAAO,KAAK,CAAC;wBACf,CAAC;wBACD,cAAc,EAAE,GAAG,EAAE;4BACnB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gCAC1C,OAAO,CAAC,IAAI,CACV,4EAA4E,CAC7E,CAAC;4BACJ,CAAC;4BACD,OAAO,KAAK,CAAC;wBACf,CAAC;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;YACD,GAAG,EAAE,GAAG,EAAE;gBACR,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC1C,OAAO,CAAC,IAAI,CACV,4EAA4E,CAC7E,CAAC;gBACJ,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,cAAc,EAAE,GAAG,EAAE;gBACnB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC1C,OAAO,CAAC,IAAI,CACV,4EAA4E,CAC7E,CAAC;gBACJ,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;SACF,CAAM,CAAC;IACV,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"Flux.js","sourceRoot":"","sources":["../src/Flux.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineStore.d.ts","sourceRoot":"","sources":["../src/defineStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defineStore.d.ts","sourceRoot":"","sources":["../src/defineStore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,YAAY,EACZ,iBAAiB,EAGjB,KAAK,EACL,WAAW,EAEZ,MAAM,SAAS,CAAC;AAKjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,WAAW,CACzB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,EAC7B,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,EAC/B,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAiKtD"}
|
package/dist/defineStore.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { registerDevContext } from '@fukict/basic';
|
|
1
2
|
import { Flux } from './Flux';
|
|
3
|
+
/** Module-level store registry for dev mode */
|
|
4
|
+
const devStores = [];
|
|
2
5
|
/**
|
|
3
6
|
* 创建状态管理 Store
|
|
4
7
|
*
|
|
@@ -83,6 +86,60 @@ export function defineStore(config) {
|
|
|
83
86
|
};
|
|
84
87
|
}
|
|
85
88
|
}
|
|
89
|
+
// Dev mode: track store registration, actions, and state changes
|
|
90
|
+
if (process.env.NODE_ENV !== 'production' && typeof window !== 'undefined') {
|
|
91
|
+
devStores.push({
|
|
92
|
+
scope: config.scope,
|
|
93
|
+
store: {
|
|
94
|
+
state: config.state,
|
|
95
|
+
actions: wrappedActions,
|
|
96
|
+
asyncActions: wrappedAsyncActions,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
registerDevContext('stores', devStores);
|
|
100
|
+
const storeId = config.scope;
|
|
101
|
+
// Wrap sync actions for tracking
|
|
102
|
+
const syncActions = wrappedActions;
|
|
103
|
+
for (const key of Object.keys(syncActions)) {
|
|
104
|
+
const original = syncActions[key];
|
|
105
|
+
syncActions[key] = (...args) => {
|
|
106
|
+
window.dispatchEvent(new CustomEvent('fukict:store:action', {
|
|
107
|
+
detail: { storeId, actionName: key, args },
|
|
108
|
+
}));
|
|
109
|
+
return original(...args);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Wrap async actions for tracking
|
|
113
|
+
const asyncActions = wrappedAsyncActions;
|
|
114
|
+
for (const key of Object.keys(asyncActions)) {
|
|
115
|
+
const original = asyncActions[key];
|
|
116
|
+
asyncActions[key] = async (...args) => {
|
|
117
|
+
window.dispatchEvent(new CustomEvent('fukict:store:action', {
|
|
118
|
+
detail: { storeId, actionName: key, args },
|
|
119
|
+
}));
|
|
120
|
+
return original(...args);
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// Track state changes
|
|
124
|
+
let prevState = flux.getState();
|
|
125
|
+
flux.subscribe((newState) => {
|
|
126
|
+
window.dispatchEvent(new CustomEvent('fukict:store:state', {
|
|
127
|
+
detail: { storeId, prevState, nextState: newState },
|
|
128
|
+
}));
|
|
129
|
+
prevState = newState;
|
|
130
|
+
});
|
|
131
|
+
// Dispatch registration event (after wrapping actions)
|
|
132
|
+
window.dispatchEvent(new CustomEvent('fukict:store', {
|
|
133
|
+
detail: {
|
|
134
|
+
scope: config.scope,
|
|
135
|
+
store: {
|
|
136
|
+
state: config.state,
|
|
137
|
+
actions: wrappedActions,
|
|
138
|
+
asyncActions: wrappedAsyncActions,
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
86
143
|
// 创建 store 对象
|
|
87
144
|
const store = {
|
|
88
145
|
// 状态访问(只读代理)
|
package/dist/defineStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineStore.js","sourceRoot":"","sources":["../src/defineStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAY9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,UAAU,WAAW,CAIzB,MAAmC;IACnC,aAAa;IACb,MAAM,IAAI,GAAG,IAAI,IAAI,CAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvC,kCAAkC;IAClC,MAAM,aAAa,GAAG,GAAqB,EAAE,CAAC,CAAC;QAC7C,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC/B,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;KAC5C,CAAC,CAAC;IAEH,eAAe;IACf,MAAM,cAAc,GAAG,EAItB,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAgB,EAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,8BAA8B;YAC9B,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;gBAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,IAAI,CAAe,CAAC;gBAC5D,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBAC9C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,eAAe;IACf,MAAM,mBAAmB,GAAG,EAO3B,CAAC;IAEF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAiB,EAAE,CAAC;YACnE,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC7C,8BAA8B;YAC9B,mBAAmB,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;gBACtD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;gBAC5B,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,cAAc;IACd,MAAM,KAAK,GAAoB;QAC7B,aAAa;QACb,IAAI,KAAK;YACP,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC;QAED,aAAa;QACb,OAAO,EAAE,cAAc;QAEvB,aAAa;QACb,YAAY,EAAE,mBAAmB;QAEjC,OAAO;QACP,SAAS,EAAE,CAAC,CACV,kBAA8D,EAC9D,QAAgC,EACnB,EAAE;YACf,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,SAAS,CACnB,kBAA8C,EAC9C,QAAQ,CACT,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAqC,CAAC,CAAC;QAC/D,CAAC,CAAiC;QAElC,SAAS;QACT,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;QAE/B,eAAe;QACf,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;KAC5C,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"defineStore.js","sourceRoot":"","sources":["../src/defineStore.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,5 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export { Flux } from './Flux';
|
|
7
7
|
export { defineStore } from './defineStore';
|
|
8
|
-
export {
|
|
9
|
-
export type { FluxListener, FluxSelector, Unsubscribe, ActionContext, AsyncAction, AsyncActions, DefineStoreConfig, Store, SyncAction, SyncActions, WrappedAsyncAction, WrappedSyncAction, CreateFluxConfig, FluxInstance, FluxStore, } from './types';
|
|
8
|
+
export type { FluxListener, FluxSelector, Unsubscribe, ActionContext, AsyncAction, AsyncActions, DefineStoreConfig, Store, SyncAction, SyncActions, WrappedAsyncAction, WrappedSyncAction, } from './types';
|
|
10
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,YAAY,EAEV,YAAY,EACZ,YAAY,EACZ,WAAW,EAEX,aAAa,EACb,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,KAAK,EACL,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -10,53 +10,12 @@ export type FluxSelector<T, S> = (state: T) => S;
|
|
|
10
10
|
* Unsubscribe function type
|
|
11
11
|
*/
|
|
12
12
|
export type Unsubscribe = () => void;
|
|
13
|
-
/**
|
|
14
|
-
* createFlux configuration type
|
|
15
|
-
* @deprecated 推荐使用 defineStore
|
|
16
|
-
*/
|
|
17
|
-
export interface CreateFluxConfig<T, A> {
|
|
18
|
-
/**
|
|
19
|
-
* Initial state
|
|
20
|
-
*/
|
|
21
|
-
state: T;
|
|
22
|
-
/**
|
|
23
|
-
* Actions definition (optional)
|
|
24
|
-
*/
|
|
25
|
-
actions?: (flux: FluxInstance<T>) => A;
|
|
26
|
-
}
|
|
27
13
|
/**
|
|
28
14
|
* Flux instance interface (internal use)
|
|
29
15
|
*/
|
|
30
16
|
export interface FluxInstance<T> {
|
|
31
17
|
getState(): T;
|
|
32
|
-
setState(
|
|
33
|
-
subscribe(listener: FluxListener<T>): Unsubscribe;
|
|
34
|
-
subscribe<S>(selector: FluxSelector<T, S>, listener: FluxListener<S>): Unsubscribe;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* createFlux return type
|
|
38
|
-
* @deprecated 推荐使用 defineStore
|
|
39
|
-
*/
|
|
40
|
-
export interface FluxStore<T, A> {
|
|
41
|
-
/**
|
|
42
|
-
* Flux instance
|
|
43
|
-
*/
|
|
44
|
-
flux: FluxInstance<T>;
|
|
45
|
-
/**
|
|
46
|
-
* Actions object
|
|
47
|
-
*/
|
|
48
|
-
actions: A;
|
|
49
|
-
/**
|
|
50
|
-
* Get current state (shortcut method)
|
|
51
|
-
*/
|
|
52
|
-
getState(): T;
|
|
53
|
-
/**
|
|
54
|
-
* Update state (shortcut method)
|
|
55
|
-
*/
|
|
56
|
-
setState(newState: Partial<T> | T): void;
|
|
57
|
-
/**
|
|
58
|
-
* Subscribe to state changes (shortcut method)
|
|
59
|
-
*/
|
|
18
|
+
setState(partial: Partial<T>): void;
|
|
60
19
|
subscribe(listener: FluxListener<T>): Unsubscribe;
|
|
61
20
|
subscribe<S>(selector: FluxSelector<T, S>, listener: FluxListener<S>): Unsubscribe;
|
|
62
21
|
}
|
|
@@ -101,6 +60,10 @@ export type AsyncActions<T> = {
|
|
|
101
60
|
* defineStore 配置类型
|
|
102
61
|
*/
|
|
103
62
|
export interface DefineStoreConfig<T extends object, A extends SyncActions<T> = {}, AA extends AsyncActions<T> = {}> {
|
|
63
|
+
/**
|
|
64
|
+
* Store scope (用于 DevTools 识别,必填)
|
|
65
|
+
*/
|
|
66
|
+
scope: string;
|
|
104
67
|
/**
|
|
105
68
|
* 初始状态
|
|
106
69
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fukict/flux",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "Minimal state management library for Fukict framework",
|
|
5
5
|
"keywords": [
|
|
6
|
-
"fukict",
|
|
7
6
|
"flux",
|
|
7
|
+
"fukict",
|
|
8
|
+
"reactive",
|
|
8
9
|
"state-management",
|
|
9
|
-
"store"
|
|
10
|
-
"reactive"
|
|
10
|
+
"store"
|
|
11
11
|
],
|
|
12
12
|
"bugs": {
|
|
13
13
|
"url": "https://github.com/fukict/fukict/issues"
|
|
14
14
|
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"author": "Fukict Team",
|
|
15
17
|
"repository": {
|
|
16
18
|
"type": "git",
|
|
17
19
|
"url": "https://github.com/fukict/fukict.git",
|
|
18
20
|
"directory": "packages/flux"
|
|
19
21
|
},
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"README.md"
|
|
25
|
+
],
|
|
23
26
|
"type": "module",
|
|
27
|
+
"sideEffects": false,
|
|
28
|
+
"main": "./dist/index.js",
|
|
29
|
+
"module": "./dist/index.js",
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
24
31
|
"exports": {
|
|
25
32
|
".": {
|
|
26
33
|
"types": "./dist/index.d.ts",
|
|
@@ -28,22 +35,18 @@
|
|
|
28
35
|
"default": "./dist/index.js"
|
|
29
36
|
}
|
|
30
37
|
},
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
],
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"registry": "https://registry.npmjs.org/"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@fukict/basic": "0.1.11"
|
|
43
|
+
},
|
|
38
44
|
"devDependencies": {
|
|
39
45
|
"typescript": "^5.6.3"
|
|
40
46
|
},
|
|
41
47
|
"engines": {
|
|
42
48
|
"node": ">=16.0.0"
|
|
43
49
|
},
|
|
44
|
-
"publishConfig": {
|
|
45
|
-
"registry": "https://registry.npmjs.org/"
|
|
46
|
-
},
|
|
47
50
|
"scripts": {
|
|
48
51
|
"build": "tsx ../../scripts/build-package.ts --pkg-name flux --no-watch",
|
|
49
52
|
"dev": "tsx ../../scripts/build-package.ts --pkg-name flux --watch",
|
package/dist/createFlux.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { CreateFluxConfig, FluxStore } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Factory function to create Flux Store
|
|
4
|
-
*
|
|
5
|
-
* @param config Configuration object
|
|
6
|
-
* @returns Flux Store object
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* const counterStore = createFlux({
|
|
11
|
-
* state: { count: 0 },
|
|
12
|
-
* actions: (flux) => ({
|
|
13
|
-
* increment() {
|
|
14
|
-
* const state = flux.getState();
|
|
15
|
-
* flux.setState({ count: state.count + 1 });
|
|
16
|
-
* }
|
|
17
|
-
* })
|
|
18
|
-
* });
|
|
19
|
-
*
|
|
20
|
-
* // Usage
|
|
21
|
-
* counterStore.actions.increment();
|
|
22
|
-
* counterStore.subscribe((state) => console.log(state.count));
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function createFlux<T, A = {}>(config: CreateFluxConfig<T, A>): FluxStore<T, A>;
|
|
26
|
-
//# sourceMappingURL=createFlux.d.ts.map
|
package/dist/createFlux.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createFlux.d.ts","sourceRoot":"","sources":["../src/createFlux.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAClC,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC7B,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAmBjB"}
|
package/dist/createFlux.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Flux } from './Flux';
|
|
2
|
-
/**
|
|
3
|
-
* Factory function to create Flux Store
|
|
4
|
-
*
|
|
5
|
-
* @param config Configuration object
|
|
6
|
-
* @returns Flux Store object
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* const counterStore = createFlux({
|
|
11
|
-
* state: { count: 0 },
|
|
12
|
-
* actions: (flux) => ({
|
|
13
|
-
* increment() {
|
|
14
|
-
* const state = flux.getState();
|
|
15
|
-
* flux.setState({ count: state.count + 1 });
|
|
16
|
-
* }
|
|
17
|
-
* })
|
|
18
|
-
* });
|
|
19
|
-
*
|
|
20
|
-
* // Usage
|
|
21
|
-
* counterStore.actions.increment();
|
|
22
|
-
* counterStore.subscribe((state) => console.log(state.count));
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export function createFlux(config) {
|
|
26
|
-
// Create Flux instance
|
|
27
|
-
const flux = new Flux(config.state);
|
|
28
|
-
// Create Actions (if provided)
|
|
29
|
-
const actions = (config.actions ? config.actions(flux) : {});
|
|
30
|
-
// Return unified interface
|
|
31
|
-
return {
|
|
32
|
-
flux,
|
|
33
|
-
actions,
|
|
34
|
-
// Shortcut methods: delegate to flux instance
|
|
35
|
-
getState: () => flux.getState(),
|
|
36
|
-
setState: newState => flux.setState(newState),
|
|
37
|
-
// subscribe method - TypeScript will infer the correct overload from FluxStore<T, A>
|
|
38
|
-
subscribe: flux.subscribe.bind(flux),
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=createFlux.js.map
|
package/dist/createFlux.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createFlux.js","sourceRoot":"","sources":["../src/createFlux.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,UAAU,CACxB,MAA8B;IAE9B,uBAAuB;IACvB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvC,+BAA+B;IAC/B,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAM,CAAC;IAElE,2BAA2B;IAC3B,OAAO;QACL,IAAI;QACJ,OAAO;QAEP,8CAA8C;QAC9C,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC/B,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAE7C,qFAAqF;QACrF,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;KACrC,CAAC;AACJ,CAAC"}
|