@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 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 `createFlux()` factory function
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 { createFlux } from '@fukict/flux';
28
+ import { defineStore } from '@fukict/flux';
28
29
 
29
- // Create flux store
30
- const counterFlux = createFlux({
30
+ // Create store
31
+ const counterStore = defineStore({
32
+ scope: 'counter',
31
33
  state: {
32
34
  count: 0,
33
35
  },
34
- actions: flux => ({
35
- increment() {
36
- const state = flux.getState();
37
- flux.setState({ count: state.count + 1 });
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 = counterFlux.subscribe(() => {
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 state = counterFlux.getState();
67
- const actions = counterFlux.actions;
60
+ const { count } = counterStore.state;
68
61
 
69
62
  return (
70
63
  <div>
71
- <p>Count: {state.count}</p>
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 Flux Store
75
+ ### Creating a Store
83
76
 
84
77
  ```typescript
85
- import { createFlux } from '@fukict/flux';
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 todoFlux = createFlux({
85
+ const todoStore = defineStore({
86
+ scope: 'todo',
93
87
  state: {
94
88
  todos: [],
95
89
  filter: 'all',
96
90
  } as TodoState,
97
- actions: flux => ({
98
- addTodo(text: string) {
99
- const state = flux.getState();
100
- flux.setState({
101
- todos: [...state.todos, { id: Date.now(), text, completed: false }],
102
- });
103
- },
104
- toggleTodo(id: number) {
105
- const state = flux.getState();
106
- flux.setState({
107
- todos: state.todos.map(todo =>
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 = todoFlux.subscribe(() => {
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 } = todoFlux.getState();
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 = todoFlux.subscribe(
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(todoFlux.getState());
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 userFlux = createFlux({
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
- actions: flux => ({
207
- async login(email: string, password: string) {
208
- flux.setState({ loading: true, error: null });
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
- flux.setState({ user, loading: false });
199
+ ctx.setState({ user, loading: false });
213
200
  } catch (error) {
214
- flux.setState({
201
+ ctx.setState({
215
202
  error: error.message,
216
203
  loading: false,
217
204
  });
218
205
  }
219
206
  },
220
- logout() {
221
- flux.setState({ user: null });
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 = globalFlux.subscribe(() => {
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 counterFlux */}
269
- <TodoPanel /> {/* Subscribes to todoFlux */}
270
- <UserPanel /> {/* Subscribes to userFlux */}
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 flux = createFlux({
286
+ const store = defineStore({
287
+ scope: 'example',
300
288
  state: { count: 0 },
301
- actions: flux => ({
302
- // ✅ Good: Use setState
303
- increment() {
304
- const state = flux.getState();
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 = flux.getState();
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 userFlux = createFlux({
306
+ const userStore = defineStore({
307
+ scope: 'user',
322
308
  state: { user: null },
323
- actions: (flux) => ({
324
- setUser(user: User) {
325
- flux.setState({ user });
326
- },
327
- }),
309
+ actions: {
310
+ setUser: (_state, user: User) => ({ user }),
311
+ },
328
312
  });
329
313
 
330
314
  // Settings store
331
- const settingsFlux = createFlux({
315
+ const settingsStore = defineStore({
316
+ scope: 'settings',
332
317
  state: { theme: 'light', language: 'en' },
333
- actions: (flux) => ({
334
- setTheme(theme: string) {
335
- flux.setState({ theme });
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 = userFlux.subscribe(() => this.update(this.props));
350
- this.unsubscribeSettings = settingsFlux.subscribe(() =>
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 } = userFlux.getState();
362
- const { theme } = settingsFlux.getState();
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 = todoFlux.subscribe(statsSelector, (stats) => {
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(todoFlux.getState());
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
- ### createFlux(config)
387
+ ### defineStore(config)
436
388
 
437
- Creates a new flux store.
389
+ Creates a new store.
438
390
 
439
391
  ```typescript
440
- const flux = createFlux({
392
+ const store = defineStore({
393
+ scope: 'my-store', // Required: unique identifier for DevTools
441
394
  state: initialState,
442
- actions: flux => ({
443
- actionName(...args) {
444
- // Action implementation
445
- flux.setState(newState);
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
- ### flux.getState()
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 (protected from mutation in dev mode).
422
+ Returns current state snapshot (readonly).
454
423
 
455
424
  ```typescript
456
- const state = flux.getState();
425
+ const state = store.getState();
457
426
  console.log(state.count);
458
427
  ```
459
428
 
460
- ### flux.setState(partial)
429
+ ### store.setState(partial)
461
430
 
462
431
  Updates state with partial state object.
463
432
 
464
433
  ```typescript
465
- flux.setState({ count: 10 });
434
+ store.setState({ count: 10 });
466
435
  ```
467
436
 
468
- ### flux.actions
437
+ ### store.actions
469
438
 
470
- Actions object defined in createFlux config.
439
+ Wrapped sync actions (state parameter is automatically injected).
471
440
 
472
441
  ```typescript
473
- const actions = flux.actions;
474
- actions.increment();
442
+ store.actions.increment();
443
+ store.actions.add(5);
475
444
  ```
476
445
 
477
- ### flux.subscribe(listener)
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 = flux.subscribe(() => {
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
- ### flux.subscribe(selector, listener)
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 = flux.subscribe(
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 userFlux = createFlux({
486
+ const userStore = defineStore({
487
+ scope: 'user',
510
488
  state: { user: null, preferences: {} },
511
- actions: flux => ({
512
- // Auth actions
513
- login(credentials) {
514
- /*...*/
515
- },
516
- logout() {
517
- /*...*/
518
- },
519
-
520
- // Preference actions
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 = flux.getState();
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 = flux.subscribe(() => this.update(this.props));
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 = flux.subscribe(() => this.update(this.props));
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 = flux.getState(); // Just read
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 newState New state (full replacement or partial update)
38
+ * Update state (partial merge)
39
+ * @param partial Partial state to merge
40
40
  */
41
- setState(newState: Partial<T> | T): void;
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
  */
@@ -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,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAiBxC;;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,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,YAAY;CAoCrB"}
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 newState New state (full replacement or partial update)
79
+ * Update state (partial merge)
80
+ * @param partial Partial state to merge
81
81
  */
82
- setState(newState) {
83
- // Determine if it's a full replacement or partial update
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":"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"}
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,OAAmB;QAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;QAE3D,eAAe;QACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE/D,yBAAyB;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAUD,SAAS,CACP,kBAAwD,EACxD,QAA0B;QAE1B,IAAI,YAAkC,CAAC;QAEvC,mEAAmE;QACnE,IAAI,QAAQ,EAAE,CAAC;YACb,wBAAwB;YACxB,MAAM,QAAQ,GAAG,kBAAwC,CAAC;YAC1D,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAElD,YAAY,GAAG;gBACb,QAAQ;gBACR,QAAQ;gBACR,SAAS,EAAE,YAAY;aACxB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,sBAAsB;YACtB,YAAY,GAAG;gBACb,QAAQ,EAAE,kBAAqC;aAChD,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAErC,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM;QACZ,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAC1B,oDAAoD;gBACpD,MAAM,QAAQ,GAAY,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACpE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;oBACzD,YAAY,CAAC,SAAS,GAAG,QAAQ,CAAC;oBAClC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,oDAAoD;gBACpD,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAI,CAAK,EAAE,CAAK;QAClC,4BAA4B;QAC5B,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,4BAA4B;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4BAA4B;QAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,IACE,CAAC,MAAM,CAAC,EAAE,CACP,CAA6B,CAAC,GAAG,CAAC,EAClC,CAA6B,CAAC,GAAG,CAAC,CACpC,EACD,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"defineStore.d.ts","sourceRoot":"","sources":["../src/defineStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,YAAY,EACZ,iBAAiB,EAGjB,KAAK,EACL,WAAW,EAEZ,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,CAuFtD"}
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"}
@@ -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
  // 状态访问(只读代理)
@@ -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":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAY9B,+CAA+C;AAC/C,MAAM,SAAS,GAA6D,EAAE,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,iEAAiE;IACjE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3E,SAAS,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,mBAAmB;aAClC;SACF,CAAC,CAAC;QACH,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;QAE7B,iCAAiC;QACjC,MAAM,WAAW,GAAG,cAGnB,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAClC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;gBACxC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,qBAAqB,EAAE;oBACrC,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE;iBAC3C,CAAC,CACH,CAAC;gBACF,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3B,CAAC,CAAC;QACJ,CAAC;QAED,kCAAkC;QAClC,MAAM,YAAY,GAAG,mBAGpB,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACnC,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;gBAC/C,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,qBAAqB,EAAE;oBACrC,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE;iBAC3C,CAAC,CACH,CAAC;gBACF,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3B,CAAC,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAW,EAAE,EAAE;YAC7B,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,oBAAoB,EAAE;gBACpC,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE;aACpD,CAAC,CACH,CAAC;YACF,SAAS,GAAG,QAAQ,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,uDAAuD;QACvD,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,cAAc,EAAE;YAC9B,MAAM,EAAE;gBACN,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE;oBACL,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,cAAc;oBACvB,YAAY,EAAE,mBAAmB;iBAClC;aACF;SACF,CAAC,CACH,CAAC;IACJ,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"}
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 { createFlux } from './createFlux';
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
@@ -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,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,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,EAEjB,gBAAgB,EAChB,YAAY,EACZ,SAAS,GACV,MAAM,SAAS,CAAC"}
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
@@ -5,8 +5,6 @@
5
5
  */
6
6
  // 导出核心类
7
7
  export { Flux } from './Flux';
8
- // 导出新的工厂函数(推荐)
8
+ // 导出工厂函数
9
9
  export { defineStore } from './defineStore';
10
- // 导出旧的工厂函数(向后兼容)
11
- export { createFlux } from './createFlux';
12
10
  //# sourceMappingURL=index.js.map
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,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
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(newState: Partial<T> | T): void;
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
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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.9",
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
- "license": "MIT",
21
- "author": "Fukict Team",
22
- "sideEffects": false,
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
- "main": "./dist/index.js",
32
- "module": "./dist/index.js",
33
- "types": "./dist/index.d.ts",
34
- "files": [
35
- "dist",
36
- "README.md"
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",
@@ -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
@@ -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"}
@@ -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
@@ -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"}