@veams/status-quo 1.3.0 → 1.3.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.
@@ -53,6 +53,80 @@ class TestStateHandler {
53
53
  this.listeners.forEach((listener) => listener());
54
54
  }
55
55
  }
56
+ class CounterStateHandler {
57
+ initialState;
58
+ state;
59
+ listeners = new Set();
60
+ destroy = jest.fn();
61
+ constructor(initialCount = 0) {
62
+ this.initialState = { count: initialCount };
63
+ this.state = this.initialState;
64
+ }
65
+ subscribe = (listener) => {
66
+ this.listeners.add(listener);
67
+ return () => {
68
+ this.listeners.delete(listener);
69
+ };
70
+ };
71
+ getSnapshot = () => {
72
+ return this.state;
73
+ };
74
+ getInitialState = () => {
75
+ return this.initialState;
76
+ };
77
+ getActions = () => {
78
+ return {
79
+ increment: () => {
80
+ this.state = {
81
+ count: this.state.count + 1,
82
+ };
83
+ this.listeners.forEach((listener) => listener());
84
+ },
85
+ };
86
+ };
87
+ }
88
+ class CounterMirrorStateHandler {
89
+ initialState;
90
+ state;
91
+ listeners = new Set();
92
+ unsubscribeFromCounter;
93
+ destroy = jest.fn(() => {
94
+ this.unsubscribeFromCounter();
95
+ this.listeners.clear();
96
+ });
97
+ constructor(counterSingleton) {
98
+ const counterStateHandler = counterSingleton.getInstance();
99
+ const initialCounterState = counterStateHandler.getSnapshot();
100
+ this.initialState = {
101
+ mirroredCount: initialCounterState.count,
102
+ };
103
+ this.state = this.initialState;
104
+ this.unsubscribeFromCounter = counterStateHandler.subscribe(() => {
105
+ const nextCounterState = counterStateHandler.getSnapshot();
106
+ this.state = {
107
+ mirroredCount: nextCounterState.count,
108
+ };
109
+ this.listeners.forEach((listener) => listener());
110
+ });
111
+ }
112
+ subscribe = (listener) => {
113
+ this.listeners.add(listener);
114
+ return () => {
115
+ this.listeners.delete(listener);
116
+ };
117
+ };
118
+ getSnapshot = () => {
119
+ return this.state;
120
+ };
121
+ getInitialState = () => {
122
+ return this.initialState;
123
+ };
124
+ getActions = () => {
125
+ return {
126
+ noop: () => undefined,
127
+ };
128
+ };
129
+ }
56
130
  const ComposedHooksConsumer = ({ createStateHandler, onStateRender, onActionsReady, }) => {
57
131
  const stateHandler = useStateHandler(createStateHandler, []);
58
132
  const actions = useStateActions(stateHandler);
@@ -96,6 +170,11 @@ const FullSubscriptionConsumer = ({ createStateHandler, onRender, onActionsReady
96
170
  onActionsReady(actions);
97
171
  return React.createElement("span", null, state.user.name);
98
172
  };
173
+ const StrictModeMirrorFactoryConsumer = ({ createStateHandler, onRender, }) => {
174
+ const [count] = useStateFactory(createStateHandler, (state) => state.mirroredCount, []);
175
+ onRender(count);
176
+ return React.createElement("span", null, count);
177
+ };
99
178
  describe('Selector hooks', () => {
100
179
  let container;
101
180
  let root;
@@ -116,7 +195,7 @@ describe('Selector hooks', () => {
116
195
  afterAll(() => {
117
196
  globalThis.IS_REACT_ACT_ENVIRONMENT = false;
118
197
  });
119
- it('useStateFactory selector should only rerender when selected state changes', () => {
198
+ it('useStateFactory selector should only rerender when selected state changes', async () => {
120
199
  let stateHandler = null;
121
200
  const createStateHandler = jest.fn(() => {
122
201
  if (!stateHandler) {
@@ -147,6 +226,11 @@ describe('Selector hooks', () => {
147
226
  act(() => {
148
227
  root.render(React.createElement(React.Fragment, null));
149
228
  });
229
+ await act(async () => {
230
+ await new Promise((resolve) => {
231
+ setTimeout(resolve, 0);
232
+ });
233
+ });
150
234
  expect(stateHandler.destroy).toHaveBeenCalledTimes(1);
151
235
  });
152
236
  it('composed hook interface should support selector subscription and actions', () => {
@@ -380,5 +464,32 @@ describe('Selector hooks', () => {
380
464
  expect(createStateHandler).toHaveBeenCalledTimes(1);
381
465
  expect(renderSpy).toHaveBeenLastCalledWith('Ada');
382
466
  });
467
+ it('useStateFactory should keep bridge handler alive through StrictMode subscribe re-check', () => {
468
+ const counterStateHandler = new CounterStateHandler(0);
469
+ const counterSingleton = makeStateSingleton(() => counterStateHandler, {
470
+ destroyOnNoConsumers: false,
471
+ });
472
+ let counterMirrorStateHandler = null;
473
+ const createStateHandler = jest.fn(() => {
474
+ if (!counterMirrorStateHandler) {
475
+ counterMirrorStateHandler = new CounterMirrorStateHandler(counterSingleton);
476
+ }
477
+ return counterMirrorStateHandler;
478
+ });
479
+ const renderSpy = jest.fn();
480
+ act(() => {
481
+ root.render(React.createElement(React.StrictMode, null,
482
+ React.createElement(StrictModeMirrorFactoryConsumer, { createStateHandler: createStateHandler, onRender: renderSpy })));
483
+ });
484
+ act(() => {
485
+ counterStateHandler.getActions().increment();
486
+ });
487
+ act(() => {
488
+ counterStateHandler.getActions().increment();
489
+ });
490
+ expect(createStateHandler).toHaveBeenCalledTimes(1);
491
+ expect(renderSpy).toHaveBeenLastCalledWith(2);
492
+ expect(counterMirrorStateHandler.destroy).not.toHaveBeenCalled();
493
+ });
383
494
  });
384
495
  //# sourceMappingURL=state-selector.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-selector.spec.js","sourceRoot":"","sources":["../../../src/hooks/__tests__/state-selector.spec.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-selector.spec.js","sourceRoot":"","sources":["../../../src/hooks/__tests__/state-selector.spec.tsx"],"names":[],"mappings":"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"}
@@ -1,16 +1,54 @@
1
1
  import { useCallback, useMemo, useSyncExternalStore } from 'react';
2
+ const deferredDestroyMap = new WeakMap();
3
+ function getDeferredDestroyState(stateSubscriptionHandler) {
4
+ const existingState = deferredDestroyMap.get(stateSubscriptionHandler);
5
+ if (existingState) {
6
+ return existingState;
7
+ }
8
+ const nextState = {
9
+ refCount: 0,
10
+ timeoutId: null,
11
+ };
12
+ deferredDestroyMap.set(stateSubscriptionHandler, nextState);
13
+ return nextState;
14
+ }
2
15
  export function useStateSubscriptionSelector(stateSubscriptionHandler, selector, isEqual = Object.is, destroyOnCleanup = true) {
3
16
  const selectorCache = useMemo(() => ({
4
17
  hasValue: false,
5
18
  value: undefined,
6
19
  }), [stateSubscriptionHandler]);
7
20
  const subscribe = useCallback((listener) => {
21
+ const sharedStateSubscriptionHandler = stateSubscriptionHandler;
22
+ const deferredDestroyState = getDeferredDestroyState(sharedStateSubscriptionHandler);
23
+ deferredDestroyState.refCount += 1;
24
+ if (deferredDestroyState.timeoutId) {
25
+ clearTimeout(deferredDestroyState.timeoutId);
26
+ deferredDestroyState.timeoutId = null;
27
+ }
8
28
  const unsubscribe = stateSubscriptionHandler.subscribe(listener);
9
29
  return () => {
10
30
  unsubscribe();
11
- if (destroyOnCleanup) {
12
- stateSubscriptionHandler.destroy();
31
+ if (!destroyOnCleanup) {
32
+ return;
13
33
  }
34
+ const activeDeferredDestroyState = deferredDestroyMap.get(sharedStateSubscriptionHandler);
35
+ if (!activeDeferredDestroyState) {
36
+ return;
37
+ }
38
+ activeDeferredDestroyState.refCount -= 1;
39
+ if (activeDeferredDestroyState.refCount > 0) {
40
+ return;
41
+ }
42
+ activeDeferredDestroyState.refCount = 0;
43
+ activeDeferredDestroyState.timeoutId = setTimeout(() => {
44
+ const pendingDeferredDestroyState = deferredDestroyMap.get(sharedStateSubscriptionHandler);
45
+ if (!pendingDeferredDestroyState || pendingDeferredDestroyState.refCount > 0) {
46
+ return;
47
+ }
48
+ pendingDeferredDestroyState.timeoutId = null;
49
+ stateSubscriptionHandler.destroy();
50
+ deferredDestroyMap.delete(sharedStateSubscriptionHandler);
51
+ }, 0);
14
52
  };
15
53
  }, [destroyOnCleanup, stateSubscriptionHandler]);
16
54
  const selectSnapshot = useCallback((snapshot) => {
@@ -1 +1 @@
1
- {"version":3,"file":"state-subscription-selector.js","sourceRoot":"","sources":["../../src/hooks/state-subscription-selector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAanE,MAAM,UAAU,4BAA4B,CAC1C,wBAAwD,EACxD,QAA4B,EAC5B,UAA2B,MAAM,CAAC,EAAE,EACpC,gBAAgB,GAAG,IAAI;IAEvB,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,SAAS;KACjB,CAAC,EACF,CAAC,wBAAwB,CAAC,CAC3B,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,QAAkB,EAAE,EAAE;QACrB,MAAM,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEjE,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAC;YAEd,IAAI,gBAAgB,EAAE,CAAC;gBACrB,wBAAwB,CAAC,OAAO,EAAE,CAAC;YACrC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EACD,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAC7C,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,QAAW,EAAE,EAAE;QACd,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,aAAa,CAAC,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,KAAY,EAAE,aAAa,CAAC,EAAE,CAAC;YACjF,OAAO,aAAa,CAAC,KAAY,CAAC;QACpC,CAAC;QAED,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC9B,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC;QAEpC,OAAO,aAAa,CAAC;IACvB,CAAC,EACD,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CACnC,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,GAAG,EAAE,CAAC,cAAc,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC,EAC5D,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAC3C,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,GAAG,EAAE,CAAC,cAAc,CAAC,wBAAwB,CAAC,eAAe,EAAE,CAAC,EAChE,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAC3C,CAAC;IAEF,OAAO,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"state-subscription-selector.js","sourceRoot":"","sources":["../../src/hooks/state-subscription-selector.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { resetStatusQuoForTests, setupStatusQuo } from '../../config/status-quo-config.js';
2
2
  import { SignalStateHandler } from '../signal-state-handler.js';
3
+ import { makeStateSingleton } from '../state-singleton.js';
3
4
  class TestSignalStateHandler extends SignalStateHandler {
4
5
  constructor({ withDevTools, distinct, useDistinctUntilChanged } = {}) {
5
6
  super({
@@ -31,6 +32,44 @@ class TestSignalStateHandler extends SignalStateHandler {
31
32
  };
32
33
  }
33
34
  }
35
+ class CounterSignalStateHandler extends SignalStateHandler {
36
+ constructor(initialCount = 0) {
37
+ super({
38
+ initialState: {
39
+ count: initialCount,
40
+ },
41
+ });
42
+ }
43
+ getActions() {
44
+ return {
45
+ increase: () => {
46
+ this.setState({ count: this.getState().count + 1 }, 'increase');
47
+ },
48
+ };
49
+ }
50
+ }
51
+ class CounterSignalBridgeStateHandler extends SignalStateHandler {
52
+ constructor(counterSingleton, onCounterSync) {
53
+ super({
54
+ initialState: {
55
+ count: 0,
56
+ },
57
+ });
58
+ const counterStateHandler = counterSingleton.getInstance();
59
+ this.bindSubscribable({
60
+ subscribe: (listener) => counterStateHandler.subscribe(() => listener(counterStateHandler.getSnapshot())),
61
+ getSnapshot: () => counterStateHandler.getSnapshot(),
62
+ }, (nextCounterState) => {
63
+ onCounterSync(nextCounterState);
64
+ this.setState({ count: nextCounterState.count }, 'sync-counter');
65
+ });
66
+ }
67
+ getActions() {
68
+ return {
69
+ noop: () => undefined,
70
+ };
71
+ }
72
+ }
34
73
  describe('Signal State Handler', () => {
35
74
  let stateHandler;
36
75
  beforeEach(() => {
@@ -133,5 +172,21 @@ describe('Signal State Handler', () => {
133
172
  unsubscribe();
134
173
  expect(spy).toHaveBeenCalledTimes(1);
135
174
  });
175
+ it('should notify another signal state handler for each singleton counter update', () => {
176
+ const counterSingleton = makeStateSingleton(() => new CounterSignalStateHandler(0), {
177
+ destroyOnNoConsumers: false,
178
+ });
179
+ const syncSpy = jest.fn();
180
+ const bridgeStateHandler = new CounterSignalBridgeStateHandler(counterSingleton, syncSpy);
181
+ const counterStateHandler = counterSingleton.getInstance();
182
+ counterStateHandler.getActions().increase();
183
+ counterStateHandler.getActions().increase();
184
+ expect(syncSpy).toHaveBeenCalledTimes(3);
185
+ expect(syncSpy).toHaveBeenNthCalledWith(1, { count: 0 });
186
+ expect(syncSpy).toHaveBeenNthCalledWith(2, { count: 1 });
187
+ expect(syncSpy).toHaveBeenNthCalledWith(3, { count: 2 });
188
+ expect(bridgeStateHandler.getState()).toStrictEqual({ count: 2 });
189
+ bridgeStateHandler.destroy();
190
+ });
136
191
  });
137
192
  //# sourceMappingURL=signal-state-handler.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal-state-handler.spec.js","sourceRoot":"","sources":["../../../src/store/__tests__/signal-state-handler.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAWhE,MAAM,sBAAuB,SAAQ,kBAA0C;IAC7E,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,uBAAuB,KAA+B,EAAE;QAC5F,KAAK,CAAC;YACJ,YAAY,EAAE;gBACZ,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,YAAY;aACpB;YACD,OAAO,EAAE;gBACP,GAAG,CAAC,YAAY,IAAI;oBAClB,QAAQ,EAAE;wBACR,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,wBAAwB;qBACpC;iBACF,CAAC;gBACF,GAAG,CAAC,QAAQ,IAAI;oBACd,QAAQ;iBACT,CAAC;gBACF,GAAG,CAAC,OAAO,uBAAuB,KAAK,SAAS,IAAI;oBAClD,uBAAuB;iBACxB,CAAC;aACH;SACF,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,OAAO;YACL,UAAU,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACtC,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,YAAoC,CAAC;IAEzC,UAAU,CAAC,GAAG,EAAE;QACd,sBAAsB,EAAE,CAAC;QACzB,YAAY,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,sBAAsB,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,aAAa,CAAC;YACnD,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC;YAC5C,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,YAAY;SACpB,CAAC;QAEF,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEhC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;QAE1C,YAAY,CAAC,aAAa,GAAG,CAAC,YAAY,CAAC,CAAC;QAE5C,YAAY,CAAC,OAAO,EAAE,CAAC;QAEvB,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEhD,YAAY,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,YAAY,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,YAAY,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,YAAY,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,WAAW,EAAE,CAAC;QAEd,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,cAAc,CAAC;YACb,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE3C,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnC,WAAW,EAAE,CAAC;QAEd,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,cAAc,CAAC;YACb,QAAQ,EAAE;gBACR,UAAU,EAAE,CAAC,QAAmB,EAAE,IAAe,EAAE,EAAE;oBACnD,OAAO,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBACrC,CAAC;aACF;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE3C,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAEvC,WAAW,EAAE,CAAC;QAEd,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,cAAc,CAAC;YACb,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC;YACzC,QAAQ,EAAE;gBACR,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE3C,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnC,WAAW,EAAE,CAAC;QAEd,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"signal-state-handler.spec.js","sourceRoot":"","sources":["../../../src/store/__tests__/signal-state-handler.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAW3D,MAAM,sBAAuB,SAAQ,kBAA0C;IAC7E,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,uBAAuB,KAA+B,EAAE;QAC5F,KAAK,CAAC;YACJ,YAAY,EAAE;gBACZ,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,YAAY;aACpB;YACD,OAAO,EAAE;gBACP,GAAG,CAAC,YAAY,IAAI;oBAClB,QAAQ,EAAE;wBACR,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,wBAAwB;qBACpC;iBACF,CAAC;gBACF,GAAG,CAAC,QAAQ,IAAI;oBACd,QAAQ;iBACT,CAAC;gBACF,GAAG,CAAC,OAAO,uBAAuB,KAAK,SAAS,IAAI;oBAClD,uBAAuB;iBACxB,CAAC;aACH;SACF,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,OAAO;YACL,UAAU,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACtC,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAKD,MAAM,yBAA0B,SAAQ,kBAAgD;IACtF,YAAY,YAAY,GAAG,CAAC;QAC1B,KAAK,CAAC;YACJ,YAAY,EAAE;gBACZ,KAAK,EAAE,YAAY;aACpB;SACF,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,OAAO;YACL,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAClE,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,+BAAgC,SAAQ,kBAAsD;IAClG,YACE,gBAAqF,EACrF,aAAmD;QAEnD,KAAK,CAAC;YACJ,YAAY,EAAE;gBACZ,KAAK,EAAE,CAAC;aACT;SACF,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE3D,IAAI,CAAC,gBAAgB,CACnB;YACE,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CACtB,mBAAmB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC;YAClF,WAAW,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE;SACrD,EACD,CAAC,gBAAgB,EAAE,EAAE;YACnB,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,cAAc,CAAC,CAAC;QACnE,CAAC,CACF,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO;YACL,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;SACtB,CAAC;IACJ,CAAC;CACF;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,YAAoC,CAAC;IAEzC,UAAU,CAAC,GAAG,EAAE;QACd,sBAAsB,EAAE,CAAC;QACzB,YAAY,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,sBAAsB,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,aAAa,CAAC;YACnD,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC;YAC5C,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,YAAY;SACpB,CAAC;QAEF,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEhC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;QAE1C,YAAY,CAAC,aAAa,GAAG,CAAC,YAAY,CAAC,CAAC;QAE5C,YAAY,CAAC,OAAO,EAAE,CAAC;QAEvB,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEhD,YAAY,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,YAAY,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,YAAY,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,YAAY,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,WAAW,EAAE,CAAC;QAEd,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,cAAc,CAAC;YACb,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE3C,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnC,WAAW,EAAE,CAAC;QAEd,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,cAAc,CAAC;YACb,QAAQ,EAAE;gBACR,UAAU,EAAE,CAAC,QAAmB,EAAE,IAAe,EAAE,EAAE;oBACnD,OAAO,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBACrC,CAAC;aACF;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE3C,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAEvC,WAAW,EAAE,CAAC;QAEd,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,cAAc,CAAC;YACb,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC;YACzC,QAAQ,EAAE;gBACR,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE3C,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnC,WAAW,EAAE,CAAC;QAEd,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,yBAAyB,CAAC,CAAC,CAAC,EAAE;YAClF,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1B,MAAM,kBAAkB,GAAG,IAAI,+BAA+B,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1F,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE3D,mBAAmB,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC5C,mBAAmB,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;QAE5C,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAElE,kBAAkB,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -15,13 +15,11 @@ type SignalStateHandlerProps<S> = {
15
15
  type Listener = () => void;
16
16
  export declare abstract class SignalStateHandler<S, A> extends BaseStateHandler<S, A> {
17
17
  private readonly state;
18
- private readonly listeners;
19
18
  private readonly distinctOptions;
20
19
  protected constructor({ initialState, options }: SignalStateHandlerProps<S>);
21
20
  getSignal(): Signal<S>;
22
21
  subscribe(listener: Listener): () => void;
23
22
  protected getStateValue(): S;
24
23
  protected setStateValue(nextState: S): void;
25
- private notify;
26
24
  }
27
25
  export {};
@@ -3,7 +3,6 @@ import { BaseStateHandler } from './base-state-handler.js';
3
3
  import { resolveDistinctOptions } from '../config/status-quo-config.js';
4
4
  export class SignalStateHandler extends BaseStateHandler {
5
5
  state;
6
- listeners = new Map();
7
6
  distinctOptions;
8
7
  constructor({ initialState, options }) {
9
8
  super(initialState);
@@ -15,26 +14,27 @@ export class SignalStateHandler extends BaseStateHandler {
15
14
  return this.state;
16
15
  }
17
16
  subscribe(listener) {
18
- this.listeners.set(listener, this.state.value);
19
- return () => {
20
- this.listeners.delete(listener);
21
- };
17
+ let initialized = false;
18
+ let previousSnapshot = this.state.value;
19
+ return this.state.subscribe((nextState) => {
20
+ if (!initialized) {
21
+ initialized = true;
22
+ previousSnapshot = nextState;
23
+ return;
24
+ }
25
+ if (this.distinctOptions.enabled && this.distinctOptions.comparator(previousSnapshot, nextState)) {
26
+ previousSnapshot = nextState;
27
+ return;
28
+ }
29
+ previousSnapshot = nextState;
30
+ listener();
31
+ });
22
32
  }
23
33
  getStateValue() {
24
34
  return this.state.value;
25
35
  }
26
36
  setStateValue(nextState) {
27
37
  this.state.value = nextState;
28
- this.notify(nextState);
29
- }
30
- notify(nextState) {
31
- for (const [listener, lastSnapshot] of this.listeners.entries()) {
32
- if (this.distinctOptions.enabled && this.distinctOptions.comparator(lastSnapshot, nextState)) {
33
- continue;
34
- }
35
- this.listeners.set(listener, nextState);
36
- listener();
37
- }
38
38
  }
39
39
  }
40
40
  //# sourceMappingURL=signal-state-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal-state-handler.js","sourceRoot":"","sources":["../../src/store/signal-state-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAmBxE,MAAM,OAAgB,kBAAyB,SAAQ,gBAAsB;IAC1D,KAAK,CAAY;IACjB,SAAS,GAAG,IAAI,GAAG,EAAe,CAAC;IACnC,eAAe,CAA+C;IAE/E,YAAsB,EAAE,YAAY,EAAE,OAAO,EAA8B;QACzE,KAAK,CAAC,YAAY,CAAC,CAAC;QAEpB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAI,YAAY,CAAC,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC;QACnG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,QAAkB;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE/C,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAES,aAAa;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAES,aAAa,CAAC,SAAY;QAClC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,SAAY;QACzB,KAAK,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAChE,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC7F,SAAS;YACX,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACxC,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"signal-state-handler.js","sourceRoot":"","sources":["../../src/store/signal-state-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAmBxE,MAAM,OAAgB,kBAAyB,SAAQ,gBAAsB;IAC1D,KAAK,CAAY;IACjB,eAAe,CAA+C;IAE/E,YAAsB,EAAE,YAAY,EAAE,OAAO,EAA8B;QACzE,KAAK,CAAC,YAAY,CAAC,CAAC;QAEpB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAI,YAAY,CAAC,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC;QACnG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,QAAkB;QAC1B,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAExC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE;YACxC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,IAAI,CAAC;gBACnB,gBAAgB,GAAG,SAAS,CAAC;gBAC7B,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAE,CAAC;gBACjG,gBAAgB,GAAG,SAAS,CAAC;gBAC7B,OAAO;YACT,CAAC;YAED,gBAAgB,GAAG,SAAS,CAAC;YAC7B,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAES,aAAa;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAES,aAAa,CAAC,SAAY;QAClC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;IAC/B,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veams/status-quo",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "The manager to rule states in frontend.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -31,6 +31,22 @@ type TestActions = {
31
31
  increment: () => void;
32
32
  };
33
33
 
34
+ type CounterState = {
35
+ count: number;
36
+ };
37
+
38
+ type CounterActions = {
39
+ increment: () => void;
40
+ };
41
+
42
+ type CounterMirrorState = {
43
+ mirroredCount: number;
44
+ };
45
+
46
+ type CounterMirrorActions = {
47
+ noop: () => void;
48
+ };
49
+
34
50
  class TestStateHandler implements StateSubscriptionHandler<TestState, TestActions> {
35
51
  private readonly initialState: TestState;
36
52
  private state: TestState;
@@ -88,6 +104,99 @@ class TestStateHandler implements StateSubscriptionHandler<TestState, TestAction
88
104
  }
89
105
  }
90
106
 
107
+ class CounterStateHandler implements StateSubscriptionHandler<CounterState, CounterActions> {
108
+ private readonly initialState: CounterState;
109
+ private state: CounterState;
110
+ private readonly listeners = new Set<() => void>();
111
+
112
+ destroy = jest.fn();
113
+
114
+ constructor(initialCount = 0) {
115
+ this.initialState = { count: initialCount };
116
+ this.state = this.initialState;
117
+ }
118
+
119
+ subscribe = (listener: () => void) => {
120
+ this.listeners.add(listener);
121
+
122
+ return () => {
123
+ this.listeners.delete(listener);
124
+ };
125
+ };
126
+
127
+ getSnapshot = () => {
128
+ return this.state;
129
+ };
130
+
131
+ getInitialState = () => {
132
+ return this.initialState;
133
+ };
134
+
135
+ getActions = () => {
136
+ return {
137
+ increment: () => {
138
+ this.state = {
139
+ count: this.state.count + 1,
140
+ };
141
+
142
+ this.listeners.forEach((listener) => listener());
143
+ },
144
+ };
145
+ };
146
+ }
147
+
148
+ class CounterMirrorStateHandler
149
+ implements StateSubscriptionHandler<CounterMirrorState, CounterMirrorActions>
150
+ {
151
+ private readonly initialState: CounterMirrorState;
152
+ private state: CounterMirrorState;
153
+ private readonly listeners = new Set<() => void>();
154
+ private readonly unsubscribeFromCounter: () => void;
155
+
156
+ destroy = jest.fn(() => {
157
+ this.unsubscribeFromCounter();
158
+ this.listeners.clear();
159
+ });
160
+
161
+ constructor(counterSingleton: StateSingleton<CounterState, CounterActions>) {
162
+ const counterStateHandler = counterSingleton.getInstance();
163
+ const initialCounterState = counterStateHandler.getSnapshot();
164
+ this.initialState = {
165
+ mirroredCount: initialCounterState.count,
166
+ };
167
+ this.state = this.initialState;
168
+ this.unsubscribeFromCounter = counterStateHandler.subscribe(() => {
169
+ const nextCounterState = counterStateHandler.getSnapshot();
170
+ this.state = {
171
+ mirroredCount: nextCounterState.count,
172
+ };
173
+ this.listeners.forEach((listener) => listener());
174
+ });
175
+ }
176
+
177
+ subscribe = (listener: () => void) => {
178
+ this.listeners.add(listener);
179
+
180
+ return () => {
181
+ this.listeners.delete(listener);
182
+ };
183
+ };
184
+
185
+ getSnapshot = () => {
186
+ return this.state;
187
+ };
188
+
189
+ getInitialState = () => {
190
+ return this.initialState;
191
+ };
192
+
193
+ getActions = () => {
194
+ return {
195
+ noop: () => undefined,
196
+ };
197
+ };
198
+ }
199
+
91
200
  type ComposedHooksConsumerProps = {
92
201
  createStateHandler: () => StateSubscriptionHandler<TestState, TestActions>;
93
202
  onStateRender: (value: string) => void;
@@ -208,6 +317,21 @@ const FullSubscriptionConsumer = ({
208
317
  return <span>{state.user.name}</span>;
209
318
  };
210
319
 
320
+ type StrictModeMirrorFactoryConsumerProps = {
321
+ createStateHandler: () => StateSubscriptionHandler<CounterMirrorState, CounterMirrorActions>;
322
+ onRender: (count: number) => void;
323
+ };
324
+
325
+ const StrictModeMirrorFactoryConsumer = ({
326
+ createStateHandler,
327
+ onRender,
328
+ }: StrictModeMirrorFactoryConsumerProps) => {
329
+ const [count] = useStateFactory(createStateHandler, (state) => state.mirroredCount, []);
330
+ onRender(count);
331
+
332
+ return <span>{count}</span>;
333
+ };
334
+
211
335
  describe('Selector hooks', () => {
212
336
  let container: HTMLDivElement;
213
337
  let root: ReturnType<typeof createRoot>;
@@ -234,7 +358,7 @@ describe('Selector hooks', () => {
234
358
  globalThis.IS_REACT_ACT_ENVIRONMENT = false;
235
359
  });
236
360
 
237
- it('useStateFactory selector should only rerender when selected state changes', () => {
361
+ it('useStateFactory selector should only rerender when selected state changes', async () => {
238
362
  let stateHandler: TestStateHandler | null = null;
239
363
  const createStateHandler = jest.fn(() => {
240
364
  if (!stateHandler) {
@@ -277,6 +401,12 @@ describe('Selector hooks', () => {
277
401
  root.render(<></>);
278
402
  });
279
403
 
404
+ await act(async () => {
405
+ await new Promise((resolve) => {
406
+ setTimeout(resolve, 0);
407
+ });
408
+ });
409
+
280
410
  expect(stateHandler!.destroy).toHaveBeenCalledTimes(1);
281
411
  });
282
412
 
@@ -604,4 +734,40 @@ describe('Selector hooks', () => {
604
734
  expect(createStateHandler).toHaveBeenCalledTimes(1);
605
735
  expect(renderSpy).toHaveBeenLastCalledWith('Ada');
606
736
  });
737
+
738
+ it('useStateFactory should keep bridge handler alive through StrictMode subscribe re-check', () => {
739
+ const counterStateHandler = new CounterStateHandler(0);
740
+ const counterSingleton = makeStateSingleton(() => counterStateHandler, {
741
+ destroyOnNoConsumers: false,
742
+ });
743
+ let counterMirrorStateHandler: CounterMirrorStateHandler | null = null;
744
+ const createStateHandler = jest.fn(() => {
745
+ if (!counterMirrorStateHandler) {
746
+ counterMirrorStateHandler = new CounterMirrorStateHandler(counterSingleton);
747
+ }
748
+
749
+ return counterMirrorStateHandler;
750
+ });
751
+ const renderSpy = jest.fn();
752
+
753
+ act(() => {
754
+ root.render(
755
+ <React.StrictMode>
756
+ <StrictModeMirrorFactoryConsumer createStateHandler={createStateHandler} onRender={renderSpy} />
757
+ </React.StrictMode>
758
+ );
759
+ });
760
+
761
+ act(() => {
762
+ counterStateHandler.getActions().increment();
763
+ });
764
+
765
+ act(() => {
766
+ counterStateHandler.getActions().increment();
767
+ });
768
+
769
+ expect(createStateHandler).toHaveBeenCalledTimes(1);
770
+ expect(renderSpy).toHaveBeenLastCalledWith(2);
771
+ expect(counterMirrorStateHandler!.destroy).not.toHaveBeenCalled();
772
+ });
607
773
  });
@@ -10,6 +10,32 @@ type SelectorCache<SelectedState> = {
10
10
  type SelectorFn<State, SelectedState> = (state: State) => SelectedState;
11
11
  type EqualityFn<SelectedState> = (current: SelectedState, next: SelectedState) => boolean;
12
12
  type Listener = () => void;
13
+ type SharedStateSubscriptionHandler = StateSubscriptionHandler<unknown, unknown>;
14
+ type DeferredDestroy = {
15
+ refCount: number;
16
+ timeoutId: ReturnType<typeof setTimeout> | null;
17
+ };
18
+
19
+ const deferredDestroyMap = new WeakMap<SharedStateSubscriptionHandler, DeferredDestroy>();
20
+
21
+ function getDeferredDestroyState(
22
+ stateSubscriptionHandler: SharedStateSubscriptionHandler
23
+ ): DeferredDestroy {
24
+ const existingState = deferredDestroyMap.get(stateSubscriptionHandler);
25
+
26
+ if (existingState) {
27
+ return existingState;
28
+ }
29
+
30
+ const nextState: DeferredDestroy = {
31
+ refCount: 0,
32
+ timeoutId: null,
33
+ };
34
+
35
+ deferredDestroyMap.set(stateSubscriptionHandler, nextState);
36
+
37
+ return nextState;
38
+ }
13
39
 
14
40
  export function useStateSubscriptionSelector<V, A, Sel>(
15
41
  stateSubscriptionHandler: StateSubscriptionHandler<V, A>,
@@ -27,14 +53,49 @@ export function useStateSubscriptionSelector<V, A, Sel>(
27
53
 
28
54
  const subscribe = useCallback(
29
55
  (listener: Listener) => {
56
+ const sharedStateSubscriptionHandler =
57
+ stateSubscriptionHandler as unknown as SharedStateSubscriptionHandler;
58
+ const deferredDestroyState = getDeferredDestroyState(sharedStateSubscriptionHandler);
59
+ deferredDestroyState.refCount += 1;
60
+
61
+ if (deferredDestroyState.timeoutId) {
62
+ clearTimeout(deferredDestroyState.timeoutId);
63
+ deferredDestroyState.timeoutId = null;
64
+ }
65
+
30
66
  const unsubscribe = stateSubscriptionHandler.subscribe(listener);
31
67
 
32
68
  return () => {
33
69
  unsubscribe();
34
70
 
35
- if (destroyOnCleanup) {
36
- stateSubscriptionHandler.destroy();
71
+ if (!destroyOnCleanup) {
72
+ return;
73
+ }
74
+
75
+ const activeDeferredDestroyState = deferredDestroyMap.get(sharedStateSubscriptionHandler);
76
+
77
+ if (!activeDeferredDestroyState) {
78
+ return;
37
79
  }
80
+
81
+ activeDeferredDestroyState.refCount -= 1;
82
+
83
+ if (activeDeferredDestroyState.refCount > 0) {
84
+ return;
85
+ }
86
+
87
+ activeDeferredDestroyState.refCount = 0;
88
+ activeDeferredDestroyState.timeoutId = setTimeout(() => {
89
+ const pendingDeferredDestroyState = deferredDestroyMap.get(sharedStateSubscriptionHandler);
90
+
91
+ if (!pendingDeferredDestroyState || pendingDeferredDestroyState.refCount > 0) {
92
+ return;
93
+ }
94
+
95
+ pendingDeferredDestroyState.timeoutId = null;
96
+ stateSubscriptionHandler.destroy();
97
+ deferredDestroyMap.delete(sharedStateSubscriptionHandler);
98
+ }, 0);
38
99
  };
39
100
  },
40
101
  [destroyOnCleanup, stateSubscriptionHandler]
@@ -1,5 +1,6 @@
1
1
  import { resetStatusQuoForTests, setupStatusQuo } from '../../config/status-quo-config.js';
2
2
  import { SignalStateHandler } from '../signal-state-handler.js';
3
+ import { makeStateSingleton } from '../state-singleton.js';
3
4
  import type { DistinctOptions } from '../../config/status-quo-config.js';
4
5
 
5
6
  type TestState = { test: string; test2: string };
@@ -43,6 +44,60 @@ class TestSignalStateHandler extends SignalStateHandler<TestState, TestActions>
43
44
  }
44
45
  }
45
46
 
47
+ type CounterState = { count: number };
48
+ type CounterActions = { increase: () => void };
49
+
50
+ class CounterSignalStateHandler extends SignalStateHandler<CounterState, CounterActions> {
51
+ constructor(initialCount = 0) {
52
+ super({
53
+ initialState: {
54
+ count: initialCount,
55
+ },
56
+ });
57
+ }
58
+
59
+ getActions(): CounterActions {
60
+ return {
61
+ increase: () => {
62
+ this.setState({ count: this.getState().count + 1 }, 'increase');
63
+ },
64
+ };
65
+ }
66
+ }
67
+
68
+ class CounterSignalBridgeStateHandler extends SignalStateHandler<CounterState, { noop: () => void }> {
69
+ constructor(
70
+ counterSingleton: ReturnType<typeof makeStateSingleton<CounterState, CounterActions>>,
71
+ onCounterSync: (counterState: CounterState) => void
72
+ ) {
73
+ super({
74
+ initialState: {
75
+ count: 0,
76
+ },
77
+ });
78
+
79
+ const counterStateHandler = counterSingleton.getInstance();
80
+
81
+ this.bindSubscribable<CounterState>(
82
+ {
83
+ subscribe: (listener) =>
84
+ counterStateHandler.subscribe(() => listener(counterStateHandler.getSnapshot())),
85
+ getSnapshot: () => counterStateHandler.getSnapshot(),
86
+ },
87
+ (nextCounterState) => {
88
+ onCounterSync(nextCounterState);
89
+ this.setState({ count: nextCounterState.count }, 'sync-counter');
90
+ }
91
+ );
92
+ }
93
+
94
+ getActions(): { noop: () => void } {
95
+ return {
96
+ noop: () => undefined,
97
+ };
98
+ }
99
+ }
100
+
46
101
  describe('Signal State Handler', () => {
47
102
  let stateHandler: TestSignalStateHandler;
48
103
 
@@ -175,4 +230,24 @@ describe('Signal State Handler', () => {
175
230
 
176
231
  expect(spy).toHaveBeenCalledTimes(1);
177
232
  });
233
+
234
+ it('should notify another signal state handler for each singleton counter update', () => {
235
+ const counterSingleton = makeStateSingleton(() => new CounterSignalStateHandler(0), {
236
+ destroyOnNoConsumers: false,
237
+ });
238
+ const syncSpy = jest.fn();
239
+ const bridgeStateHandler = new CounterSignalBridgeStateHandler(counterSingleton, syncSpy);
240
+ const counterStateHandler = counterSingleton.getInstance();
241
+
242
+ counterStateHandler.getActions().increase();
243
+ counterStateHandler.getActions().increase();
244
+
245
+ expect(syncSpy).toHaveBeenCalledTimes(3);
246
+ expect(syncSpy).toHaveBeenNthCalledWith(1, { count: 0 });
247
+ expect(syncSpy).toHaveBeenNthCalledWith(2, { count: 1 });
248
+ expect(syncSpy).toHaveBeenNthCalledWith(3, { count: 2 });
249
+ expect(bridgeStateHandler.getState()).toStrictEqual({ count: 2 });
250
+
251
+ bridgeStateHandler.destroy();
252
+ });
178
253
  });
@@ -22,7 +22,6 @@ type Listener = () => void;
22
22
 
23
23
  export abstract class SignalStateHandler<S, A> extends BaseStateHandler<S, A> {
24
24
  private readonly state: Signal<S>;
25
- private readonly listeners = new Map<Listener, S>();
26
25
  private readonly distinctOptions: ReturnType<typeof resolveDistinctOptions<S>>;
27
26
 
28
27
  protected constructor({ initialState, options }: SignalStateHandlerProps<S>) {
@@ -38,11 +37,24 @@ export abstract class SignalStateHandler<S, A> extends BaseStateHandler<S, A> {
38
37
  }
39
38
 
40
39
  subscribe(listener: Listener) {
41
- this.listeners.set(listener, this.state.value);
40
+ let initialized = false;
41
+ let previousSnapshot = this.state.value;
42
42
 
43
- return () => {
44
- this.listeners.delete(listener);
45
- };
43
+ return this.state.subscribe((nextState) => {
44
+ if (!initialized) {
45
+ initialized = true;
46
+ previousSnapshot = nextState;
47
+ return;
48
+ }
49
+
50
+ if (this.distinctOptions.enabled && this.distinctOptions.comparator(previousSnapshot, nextState)) {
51
+ previousSnapshot = nextState;
52
+ return;
53
+ }
54
+
55
+ previousSnapshot = nextState;
56
+ listener();
57
+ });
46
58
  }
47
59
 
48
60
  protected getStateValue() {
@@ -51,17 +63,5 @@ export abstract class SignalStateHandler<S, A> extends BaseStateHandler<S, A> {
51
63
 
52
64
  protected setStateValue(nextState: S) {
53
65
  this.state.value = nextState;
54
- this.notify(nextState);
55
- }
56
-
57
- private notify(nextState: S) {
58
- for (const [listener, lastSnapshot] of this.listeners.entries()) {
59
- if (this.distinctOptions.enabled && this.distinctOptions.comparator(lastSnapshot, nextState)) {
60
- continue;
61
- }
62
-
63
- this.listeners.set(listener, nextState);
64
- listener();
65
- }
66
66
  }
67
67
  }