@veams/status-quo 1.7.0 → 1.8.1
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/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-test.log +115 -15
- package/CHANGELOG.md +2 -0
- package/README.md +51 -7
- package/dist/config/status-quo-config.d.ts +22 -1
- package/dist/config/status-quo-config.js +46 -2
- package/dist/config/status-quo-config.js.map +1 -1
- package/dist/index.d.ts +13 -3
- package/dist/index.js +22 -2
- package/dist/index.js.map +1 -1
- package/dist/react/hooks/__tests__/state-provider.spec.js +2 -2
- package/dist/react/hooks/__tests__/state-provider.spec.js.map +1 -1
- package/dist/react/hooks/index.d.ts +6 -3
- package/dist/react/hooks/index.js +12 -3
- package/dist/react/hooks/index.js.map +1 -1
- package/dist/react/hooks/state-actions.d.ts +9 -1
- package/dist/react/hooks/state-actions.js +21 -2
- package/dist/react/hooks/state-actions.js.map +1 -1
- package/dist/react/hooks/state-factory.d.ts +7 -0
- package/dist/react/hooks/state-factory.js +23 -1
- package/dist/react/hooks/state-factory.js.map +1 -1
- package/dist/react/hooks/state-handler.d.ts +4 -0
- package/dist/react/hooks/state-handler.js +18 -1
- package/dist/react/hooks/state-handler.js.map +1 -1
- package/dist/react/hooks/state-provider.d.ts +18 -9
- package/dist/react/hooks/state-provider.js +25 -17
- package/dist/react/hooks/state-provider.js.map +1 -1
- package/dist/react/hooks/state-singleton.d.ts +8 -2
- package/dist/react/hooks/state-singleton.js +21 -3
- package/dist/react/hooks/state-singleton.js.map +1 -1
- package/dist/react/hooks/state-subscription-selector.d.ts +4 -0
- package/dist/react/hooks/state-subscription-selector.js +64 -8
- package/dist/react/hooks/state-subscription-selector.js.map +1 -1
- package/dist/react/hooks/state-subscription.d.ts +12 -0
- package/dist/react/hooks/state-subscription.js +49 -1
- package/dist/react/hooks/state-subscription.js.map +1 -1
- package/dist/react/index.d.ts +4 -1
- package/dist/react/index.js +5 -1
- package/dist/react/index.js.map +1 -1
- package/dist/store/__tests__/native-state-handler.spec.d.ts +1 -0
- package/dist/store/__tests__/native-state-handler.spec.js +210 -0
- package/dist/store/__tests__/native-state-handler.spec.js.map +1 -0
- package/dist/store/__tests__/observable-state-handler.spec.d.ts +7 -0
- package/dist/store/__tests__/observable-state-handler.spec.js.map +1 -1
- package/dist/store/base-state-handler.d.ts +42 -0
- package/dist/store/base-state-handler.js +73 -10
- package/dist/store/base-state-handler.js.map +1 -1
- package/dist/store/dev-tools.d.ts +42 -17
- package/dist/store/dev-tools.js +24 -8
- package/dist/store/dev-tools.js.map +1 -1
- package/dist/store/index.d.ts +7 -0
- package/dist/store/index.js +9 -0
- package/dist/store/index.js.map +1 -1
- package/dist/store/native-state-handler.d.ts +44 -0
- package/dist/store/native-state-handler.js +62 -0
- package/dist/store/native-state-handler.js.map +1 -0
- package/dist/store/observable-state-handler.d.ts +34 -0
- package/dist/store/observable-state-handler.js +45 -1
- package/dist/store/observable-state-handler.js.map +1 -1
- package/dist/store/signal-state-handler.d.ts +26 -0
- package/dist/store/signal-state-handler.js +35 -0
- package/dist/store/signal-state-handler.js.map +1 -1
- package/dist/store/state-singleton.d.ts +14 -0
- package/dist/store/state-singleton.js +20 -1
- package/dist/store/state-singleton.js.map +1 -1
- package/dist/types/types.d.ts +9 -0
- package/dist/types/types.js +3 -0
- package/dist/types/types.js.map +1 -1
- package/dist/utils/selector-cache.d.ts +17 -0
- package/dist/utils/selector-cache.js +28 -1
- package/dist/utils/selector-cache.js.map +1 -1
- package/package.json +26 -1
- package/src/config/status-quo-config.ts +64 -1
- package/src/index.ts +31 -2
- package/src/react/hooks/__tests__/state-provider.spec.tsx +2 -2
- package/src/react/hooks/index.ts +13 -8
- package/src/react/hooks/state-actions.tsx +23 -2
- package/src/react/hooks/state-factory.tsx +34 -0
- package/src/react/hooks/state-handler.tsx +15 -0
- package/src/react/hooks/state-provider.tsx +36 -40
- package/src/react/hooks/state-singleton.tsx +37 -7
- package/src/react/hooks/state-subscription-selector.tsx +85 -7
- package/src/react/hooks/state-subscription.tsx +75 -0
- package/src/react/index.ts +16 -1
- package/src/store/__tests__/native-state-handler.spec.ts +291 -0
- package/src/store/__tests__/observable-state-handler.spec.ts +8 -0
- package/src/store/base-state-handler.ts +89 -12
- package/src/store/dev-tools.ts +72 -27
- package/src/store/index.ts +16 -0
- package/src/store/native-state-handler.ts +98 -0
- package/src/store/observable-state-handler.ts +57 -0
- package/src/store/signal-state-handler.ts +47 -1
- package/src/store/state-singleton.ts +30 -0
- package/src/types/types.ts +16 -0
- package/src/utils/selector-cache.ts +37 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { resetStatusQuoForTests, setupStatusQuo } from '../../config/status-quo-config.js';
|
|
2
|
+
import { NativeStateHandler } from '../native-state-handler.js';
|
|
3
|
+
import { makeStateSingleton } from '../state-singleton.js';
|
|
4
|
+
class TestNativeStateHandler extends NativeStateHandler {
|
|
5
|
+
constructor({ withDevTools, distinct, useDistinctUntilChanged } = {}) {
|
|
6
|
+
super({
|
|
7
|
+
initialState: {
|
|
8
|
+
test: 'testValue',
|
|
9
|
+
test2: 'testValue2',
|
|
10
|
+
},
|
|
11
|
+
options: {
|
|
12
|
+
...(withDevTools && {
|
|
13
|
+
devTools: {
|
|
14
|
+
enabled: true,
|
|
15
|
+
namespace: 'TestNativeStateHandler',
|
|
16
|
+
},
|
|
17
|
+
}),
|
|
18
|
+
...(distinct && {
|
|
19
|
+
distinct,
|
|
20
|
+
}),
|
|
21
|
+
...(typeof useDistinctUntilChanged === 'boolean' && {
|
|
22
|
+
useDistinctUntilChanged,
|
|
23
|
+
}),
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
getActions() {
|
|
28
|
+
return {
|
|
29
|
+
testAction: () => {
|
|
30
|
+
this.setState({ test: 'newValue' });
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
class CounterNativeStateHandler extends NativeStateHandler {
|
|
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 CounterNativeBridgeStateHandler extends NativeStateHandler {
|
|
52
|
+
constructor(counterSingleton, onCounterSync) {
|
|
53
|
+
super({
|
|
54
|
+
initialState: {
|
|
55
|
+
count: 0,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
const counterStateHandler = counterSingleton.getInstance();
|
|
59
|
+
this.bindSubscribable(counterStateHandler, (nextCounterState) => {
|
|
60
|
+
onCounterSync(nextCounterState);
|
|
61
|
+
this.setState({ count: nextCounterState.count }, 'sync-counter');
|
|
62
|
+
}, (counterState) => counterState);
|
|
63
|
+
}
|
|
64
|
+
getActions() {
|
|
65
|
+
return {
|
|
66
|
+
noop: () => undefined,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
class CounterNativeBucketBridgeStateHandler extends NativeStateHandler {
|
|
71
|
+
constructor(counterSingleton, onCounterSync) {
|
|
72
|
+
super({
|
|
73
|
+
initialState: {
|
|
74
|
+
bucket: -1,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
const counterStateHandler = counterSingleton.getInstance();
|
|
78
|
+
this.bindSubscribable(counterStateHandler, (nextSelection) => {
|
|
79
|
+
onCounterSync(nextSelection);
|
|
80
|
+
this.setState({ bucket: nextSelection.bucket }, 'sync-counter-bucket');
|
|
81
|
+
}, (counterState) => ({
|
|
82
|
+
bucket: Math.floor(counterState.count / 2),
|
|
83
|
+
}), (current, next) => current.bucket === next.bucket);
|
|
84
|
+
}
|
|
85
|
+
getActions() {
|
|
86
|
+
return {
|
|
87
|
+
noop: () => undefined,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
describe('Native State Handler', () => {
|
|
92
|
+
let stateHandler;
|
|
93
|
+
beforeEach(() => {
|
|
94
|
+
resetStatusQuoForTests();
|
|
95
|
+
stateHandler = new TestNativeStateHandler();
|
|
96
|
+
});
|
|
97
|
+
afterEach(() => {
|
|
98
|
+
resetStatusQuoForTests();
|
|
99
|
+
});
|
|
100
|
+
it('should provide initial state', () => {
|
|
101
|
+
expect(stateHandler.getInitialState()).toStrictEqual({
|
|
102
|
+
test: 'testValue',
|
|
103
|
+
test2: 'testValue2',
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
it('should provide current state', () => {
|
|
107
|
+
expect(stateHandler.getState()).toStrictEqual({
|
|
108
|
+
test: 'testValue',
|
|
109
|
+
test2: 'testValue2',
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
it('should support state changing via setter and merge state object on first level', () => {
|
|
113
|
+
const expected = {
|
|
114
|
+
test: 'change',
|
|
115
|
+
test2: 'testValue2',
|
|
116
|
+
};
|
|
117
|
+
stateHandler.setState(expected);
|
|
118
|
+
expect(stateHandler.getState()).toStrictEqual(expected);
|
|
119
|
+
});
|
|
120
|
+
it('should support additional subscriptions handling', () => {
|
|
121
|
+
const spy = jest.fn();
|
|
122
|
+
const subscription = { unsubscribe: spy };
|
|
123
|
+
stateHandler.subscriptions = [subscription];
|
|
124
|
+
stateHandler.destroy();
|
|
125
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
126
|
+
});
|
|
127
|
+
it('should call subscriber when state has changed and also on initial subscribe', () => {
|
|
128
|
+
const spy = jest.fn();
|
|
129
|
+
const unsubscribe = stateHandler.subscribe(spy);
|
|
130
|
+
stateHandler.setState({
|
|
131
|
+
test: 'test',
|
|
132
|
+
});
|
|
133
|
+
stateHandler.setState({
|
|
134
|
+
test: 'test2',
|
|
135
|
+
});
|
|
136
|
+
stateHandler.setState({
|
|
137
|
+
test: 'test2',
|
|
138
|
+
});
|
|
139
|
+
stateHandler.setState({
|
|
140
|
+
test: 'test2',
|
|
141
|
+
});
|
|
142
|
+
unsubscribe();
|
|
143
|
+
expect(spy).toHaveBeenCalledTimes(3); // initial + change + change
|
|
144
|
+
});
|
|
145
|
+
it('should respect global distinct setup when disabled', () => {
|
|
146
|
+
setupStatusQuo({
|
|
147
|
+
distinct: {
|
|
148
|
+
enabled: false,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
const handler = new TestNativeStateHandler();
|
|
152
|
+
const spy = jest.fn();
|
|
153
|
+
const unsubscribe = handler.subscribe(spy);
|
|
154
|
+
handler.setState({ test: 'same' });
|
|
155
|
+
handler.setState({ test: 'same' });
|
|
156
|
+
unsubscribe();
|
|
157
|
+
expect(spy).toHaveBeenCalledTimes(3); // initial + change + change
|
|
158
|
+
});
|
|
159
|
+
it('should respect global custom distinct comparator from setupStatusQuo', () => {
|
|
160
|
+
setupStatusQuo({
|
|
161
|
+
distinct: {
|
|
162
|
+
comparator: (previous, next) => {
|
|
163
|
+
return previous.test === next.test;
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
const handler = new TestNativeStateHandler();
|
|
168
|
+
const spy = jest.fn();
|
|
169
|
+
const unsubscribe = handler.subscribe(spy);
|
|
170
|
+
handler.setState({ test2: 'newValue2' }); // test remains same -> skipped
|
|
171
|
+
handler.setState({ test: 'newValue' }); // test changed -> notified
|
|
172
|
+
unsubscribe();
|
|
173
|
+
expect(spy).toHaveBeenCalledTimes(2); // initial + one change
|
|
174
|
+
});
|
|
175
|
+
it('should notify another state handler for each singleton counter update', () => {
|
|
176
|
+
const counterSingleton = makeStateSingleton(() => new CounterNativeStateHandler(0), {
|
|
177
|
+
destroyOnNoConsumers: false,
|
|
178
|
+
});
|
|
179
|
+
const syncSpy = jest.fn();
|
|
180
|
+
const bridgeStateHandler = new CounterNativeBridgeStateHandler(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
|
+
});
|
|
191
|
+
it('should support selector + equality filtering for bindSubscribable', () => {
|
|
192
|
+
const counterSingleton = makeStateSingleton(() => new CounterNativeStateHandler(0), {
|
|
193
|
+
destroyOnNoConsumers: false,
|
|
194
|
+
});
|
|
195
|
+
const syncSpy = jest.fn();
|
|
196
|
+
const bridgeStateHandler = new CounterNativeBucketBridgeStateHandler(counterSingleton, syncSpy);
|
|
197
|
+
const counterStateHandler = counterSingleton.getInstance();
|
|
198
|
+
counterStateHandler.getActions().increase(); // count 1 -> bucket 0 (no change)
|
|
199
|
+
counterStateHandler.getActions().increase(); // count 2 -> bucket 1
|
|
200
|
+
counterStateHandler.getActions().increase(); // count 3 -> bucket 1 (no change)
|
|
201
|
+
counterStateHandler.getActions().increase(); // count 4 -> bucket 2
|
|
202
|
+
expect(syncSpy).toHaveBeenCalledTimes(3);
|
|
203
|
+
expect(syncSpy).toHaveBeenNthCalledWith(1, { bucket: 0 });
|
|
204
|
+
expect(syncSpy).toHaveBeenNthCalledWith(2, { bucket: 1 });
|
|
205
|
+
expect(syncSpy).toHaveBeenNthCalledWith(3, { bucket: 2 });
|
|
206
|
+
expect(bridgeStateHandler.getState()).toStrictEqual({ bucket: 2 });
|
|
207
|
+
bridgeStateHandler.destroy();
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
//# sourceMappingURL=native-state-handler.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-state-handler.spec.js","sourceRoot":"","sources":["../../../src/store/__tests__/native-state-handler.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-state-handler.spec.js","sourceRoot":"","sources":["../../../src/store/__tests__/observable-state-handler.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"observable-state-handler.spec.js","sourceRoot":"","sources":["../../../src/store/__tests__/observable-state-handler.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import necessary types for state management and Redux DevTools integration.
|
|
3
|
+
*/
|
|
1
4
|
import type { StateSubscriptionHandler } from '../types/types.js';
|
|
2
5
|
import type { EqualityFn, Selector } from '../utils/selector-cache.js';
|
|
3
6
|
import type { DevTools } from './dev-tools.js';
|
|
4
7
|
import type { DevToolsOptions } from '../config/status-quo-config.js';
|
|
8
|
+
/**
|
|
9
|
+
* Interface for objects that can be subscribed to.
|
|
10
|
+
*/
|
|
5
11
|
type Subscribable<T> = {
|
|
6
12
|
subscribe: (listener: (value: T) => void) => () => void;
|
|
7
13
|
getSnapshot?: () => T;
|
|
8
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* Abstract base class for all state handlers in the system.
|
|
17
|
+
* Implements core logic for initialization, DevTools integration, and subscriptions.
|
|
18
|
+
*/
|
|
9
19
|
export declare abstract class BaseStateHandler<S, A> implements StateSubscriptionHandler<S, A> {
|
|
10
20
|
protected readonly initialState: S;
|
|
11
21
|
protected devTools: DevTools | null;
|
|
12
22
|
subscriptions: Array<{
|
|
13
23
|
unsubscribe: () => void;
|
|
14
24
|
}>;
|
|
25
|
+
/**
|
|
26
|
+
* Initializes the handler with the given initial state.
|
|
27
|
+
*/
|
|
15
28
|
protected constructor(initialState: S);
|
|
29
|
+
/**
|
|
30
|
+
* Sets up Redux DevTools integration based on the provided options.
|
|
31
|
+
*/
|
|
16
32
|
protected initDevTools(devToolsOptions?: DevToolsOptions): void;
|
|
33
|
+
/**
|
|
34
|
+
* Returns the initial state of the handler.
|
|
35
|
+
*/
|
|
17
36
|
getInitialState(): S;
|
|
37
|
+
/**
|
|
38
|
+
* Returns the current state.
|
|
39
|
+
*/
|
|
18
40
|
getState(): S;
|
|
41
|
+
/**
|
|
42
|
+
* Alias for getState, often used by React's useSyncExternalStore.
|
|
43
|
+
*/
|
|
19
44
|
getSnapshot(): S;
|
|
45
|
+
/**
|
|
46
|
+
* Updates the state by merging the partial new state into the current one.
|
|
47
|
+
* Also sends the update to DevTools if enabled.
|
|
48
|
+
*/
|
|
20
49
|
setState(newState: Partial<S>, actionName?: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Cleans up all active subscriptions when the handler is destroyed.
|
|
52
|
+
*/
|
|
21
53
|
destroy(): void;
|
|
22
54
|
protected abstract getStateValue(): S;
|
|
23
55
|
protected abstract setStateValue(nextState: S): void;
|
|
56
|
+
/**
|
|
57
|
+
* Returns a default namespace for DevTools based on the class name.
|
|
58
|
+
*/
|
|
24
59
|
protected getDevToolsNamespace(): string;
|
|
60
|
+
/**
|
|
61
|
+
* Binds an external subscribable source to this handler's state.
|
|
62
|
+
* Useful for bridging different state systems.
|
|
63
|
+
*/
|
|
25
64
|
protected bindSubscribable<T, Sel>(service: Subscribable<T>, onChange: (value: Sel) => void, selector: Selector<T, Sel>, isEqual?: EqualityFn<Sel>): void;
|
|
26
65
|
protected bindSubscribable<T>(service: Subscribable<T>, onChange: (value: T) => void): void;
|
|
27
66
|
abstract subscribe(listener: () => void): () => void;
|
|
28
67
|
abstract subscribe(listener: (value: S) => void): () => void;
|
|
29
68
|
abstract getActions(): A;
|
|
69
|
+
/**
|
|
70
|
+
* Handles messages dispatched from the Redux DevTools extension.
|
|
71
|
+
*/
|
|
30
72
|
private handleDevToolsEvents;
|
|
31
73
|
}
|
|
32
74
|
export {};
|
|
@@ -1,90 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import internal configuration and utility functions.
|
|
3
|
+
*/
|
|
1
4
|
import { resolveDevToolsOptions } from '../config/status-quo-config.js';
|
|
2
5
|
import { createSelectorCache, selectWithCache } from '../utils/selector-cache.js';
|
|
3
6
|
import { withDevTools } from './dev-tools.js';
|
|
7
|
+
/**
|
|
8
|
+
* Configuration for Redux DevTools features enabled in this handler.
|
|
9
|
+
*/
|
|
4
10
|
const devToolsFeatures = {
|
|
5
|
-
pause: true,
|
|
6
|
-
lock: true,
|
|
7
|
-
persist: false,
|
|
8
|
-
export: true,
|
|
9
|
-
import: 'custom',
|
|
10
|
-
jump: true,
|
|
11
|
-
skip: true,
|
|
12
|
-
reorder: true,
|
|
13
|
-
dispatch: false,
|
|
14
|
-
test: false,
|
|
11
|
+
pause: true, // Allow pausing the recording of actions.
|
|
12
|
+
lock: true, // Allow locking the state.
|
|
13
|
+
persist: false, // Do not persist state across reloads by default.
|
|
14
|
+
export: true, // Allow exporting the state/actions.
|
|
15
|
+
import: 'custom', // Use custom import logic.
|
|
16
|
+
jump: true, // Allow jumping to specific states.
|
|
17
|
+
skip: true, // Allow skipping specific actions.
|
|
18
|
+
reorder: true, // Allow reordering actions.
|
|
19
|
+
dispatch: false, // Do not allow dispatching actions from DevTools.
|
|
20
|
+
test: false, // Do not generate tests.
|
|
15
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Abstract base class for all state handlers in the system.
|
|
24
|
+
* Implements core logic for initialization, DevTools integration, and subscriptions.
|
|
25
|
+
*/
|
|
16
26
|
export class BaseStateHandler {
|
|
27
|
+
// Stores the initial state passed during construction.
|
|
17
28
|
initialState;
|
|
29
|
+
// Holds the Redux DevTools instance if enabled.
|
|
18
30
|
devTools = null;
|
|
31
|
+
// Keeps track of active subscriptions to allow for cleanup.
|
|
19
32
|
subscriptions = [];
|
|
33
|
+
/**
|
|
34
|
+
* Initializes the handler with the given initial state.
|
|
35
|
+
*/
|
|
20
36
|
constructor(initialState) {
|
|
21
37
|
this.initialState = initialState;
|
|
22
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Sets up Redux DevTools integration based on the provided options.
|
|
41
|
+
*/
|
|
23
42
|
initDevTools(devToolsOptions) {
|
|
43
|
+
// Resolve the final DevTools configuration.
|
|
24
44
|
const resolvedOptions = resolveDevToolsOptions(devToolsOptions);
|
|
45
|
+
// If DevTools is disabled, stop here.
|
|
25
46
|
if (!resolvedOptions.enabled) {
|
|
26
47
|
this.devTools = null;
|
|
27
48
|
return;
|
|
28
49
|
}
|
|
50
|
+
// Determine the namespace for the DevTools instance.
|
|
29
51
|
const namespace = devToolsOptions?.namespace ?? this.getDevToolsNamespace();
|
|
52
|
+
// Connect to the Redux DevTools extension.
|
|
30
53
|
this.devTools = withDevTools(this.initialState, {
|
|
31
54
|
name: namespace,
|
|
32
55
|
instanceId: namespace.toLowerCase().replaceAll(' ', '-'),
|
|
33
56
|
actionCreators: this.getActions(),
|
|
34
57
|
features: devToolsFeatures,
|
|
35
58
|
});
|
|
59
|
+
// Subscribe to events coming from the DevTools extension (e.g., time travel).
|
|
36
60
|
this.devTools?.subscribe(this.handleDevToolsEvents);
|
|
37
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Returns the initial state of the handler.
|
|
64
|
+
*/
|
|
38
65
|
getInitialState() {
|
|
39
66
|
return this.initialState;
|
|
40
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns the current state.
|
|
70
|
+
*/
|
|
41
71
|
getState() {
|
|
42
72
|
return this.getStateValue();
|
|
43
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Alias for getState, often used by React's useSyncExternalStore.
|
|
76
|
+
*/
|
|
44
77
|
getSnapshot() {
|
|
45
78
|
return this.getState();
|
|
46
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Updates the state by merging the partial new state into the current one.
|
|
82
|
+
* Also sends the update to DevTools if enabled.
|
|
83
|
+
*/
|
|
47
84
|
setState(newState, actionName = 'change') {
|
|
85
|
+
// Merge current state with the new partial state.
|
|
48
86
|
const nextState = { ...this.getState(), ...newState };
|
|
87
|
+
// Update the underlying state value (implemented by subclasses).
|
|
49
88
|
this.setStateValue(nextState);
|
|
89
|
+
// Notify DevTools of the state change.
|
|
50
90
|
this.devTools?.send(actionName, nextState);
|
|
51
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Cleans up all active subscriptions when the handler is destroyed.
|
|
94
|
+
*/
|
|
52
95
|
destroy() {
|
|
96
|
+
// Execute the unsubscribe function for each tracked subscription.
|
|
53
97
|
this.subscriptions.forEach((subscription) => subscription.unsubscribe());
|
|
54
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Returns a default namespace for DevTools based on the class name.
|
|
101
|
+
*/
|
|
55
102
|
getDevToolsNamespace() {
|
|
56
103
|
return this.constructor.name || 'Store';
|
|
57
104
|
}
|
|
58
105
|
bindSubscribable(service, onChange, selector, isEqual = Object.is) {
|
|
106
|
+
// Default to identity selector if none is provided.
|
|
59
107
|
const selectorFn = (selector ?? ((value) => value));
|
|
108
|
+
// Create a cache for selector results to avoid unnecessary updates.
|
|
60
109
|
const selectorCache = createSelectorCache();
|
|
110
|
+
// Flag to track if we received an initial value synchronously during subscription.
|
|
61
111
|
let receivedSyncValue = false;
|
|
112
|
+
// Internal function to handle value changes from the external source.
|
|
62
113
|
const notifySelectedValue = (value) => {
|
|
63
114
|
receivedSyncValue = true;
|
|
115
|
+
// Extract the selected value and check if it has actually changed.
|
|
64
116
|
const { value: nextSelection, hasChanged } = selectWithCache(selectorCache, value, selectorFn, isEqual);
|
|
117
|
+
// Only trigger the callback if the selected value changed.
|
|
65
118
|
if (!hasChanged) {
|
|
66
119
|
return;
|
|
67
120
|
}
|
|
68
121
|
onChange(nextSelection);
|
|
69
122
|
};
|
|
123
|
+
// Subscribe to the external source.
|
|
70
124
|
const unsubscribe = service.subscribe(notifySelectedValue);
|
|
125
|
+
// Track the subscription for later cleanup.
|
|
71
126
|
this.subscriptions = [...(this.subscriptions ?? []), { unsubscribe }];
|
|
127
|
+
// If the source has a getSnapshot method and we haven't received a value yet, pull it manually.
|
|
72
128
|
if (service.getSnapshot && !receivedSyncValue)
|
|
73
129
|
notifySelectedValue(service.getSnapshot());
|
|
74
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Handles messages dispatched from the Redux DevTools extension.
|
|
133
|
+
*/
|
|
75
134
|
handleDevToolsEvents = (message) => {
|
|
135
|
+
// We only care about DISPATCH type messages (e.g., reset, jump).
|
|
76
136
|
if (message.type !== 'DISPATCH') {
|
|
77
137
|
return;
|
|
78
138
|
}
|
|
79
139
|
switch (message.payload.type) {
|
|
140
|
+
// Revert state to the initial state.
|
|
80
141
|
case 'RESET':
|
|
81
142
|
this.setStateValue(this.getInitialState());
|
|
82
143
|
this.devTools?.init(this.getInitialState());
|
|
83
144
|
break;
|
|
145
|
+
// Commit the current state in DevTools.
|
|
84
146
|
case 'COMMIT':
|
|
85
147
|
this.setStateValue(this.getState());
|
|
86
148
|
this.devTools?.init(this.getState());
|
|
87
149
|
break;
|
|
150
|
+
// Handle time travel actions.
|
|
88
151
|
case 'JUMP_TO_STATE':
|
|
89
152
|
case 'JUMP_TO_ACTION':
|
|
90
153
|
this.setStateValue(JSON.parse(message.state));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-state-handler.js","sourceRoot":"","sources":["../../src/store/base-state-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-state-handler.js","sourceRoot":"","sources":["../../src/store/base-state-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export type MessagePayload = {
|
|
1
|
+
/**
|
|
2
|
+
* Redux DevTools extension types and constants.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Interface for messages dispatched from the Redux DevTools extension.
|
|
6
|
+
*/
|
|
7
|
+
export interface MessagePayload {
|
|
9
8
|
type: string;
|
|
10
9
|
payload: {
|
|
11
10
|
type: string;
|
|
12
|
-
|
|
11
|
+
stateIndex?: number;
|
|
12
|
+
id?: string;
|
|
13
13
|
};
|
|
14
14
|
state: string;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Interface for the Redux DevTools instance returned by the extension.
|
|
18
|
+
*/
|
|
19
|
+
export interface DevTools {
|
|
20
20
|
send: (action: string, state: unknown) => void;
|
|
21
|
-
subscribe: (
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
subscribe: (listener: (message: MessagePayload) => void) => () => void;
|
|
22
|
+
init: (state: unknown) => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Interface for Redux DevTools connection options.
|
|
26
|
+
*/
|
|
27
|
+
export interface DevToolsConnectionOptions {
|
|
28
|
+
name?: string;
|
|
29
|
+
instanceId?: string;
|
|
30
|
+
actionCreators?: unknown;
|
|
31
|
+
features?: {
|
|
32
|
+
pause?: boolean;
|
|
33
|
+
lock?: boolean;
|
|
34
|
+
persist?: boolean;
|
|
35
|
+
export?: boolean | 'custom';
|
|
36
|
+
import?: boolean | 'custom';
|
|
37
|
+
jump?: boolean;
|
|
38
|
+
skip?: boolean;
|
|
39
|
+
reorder?: boolean;
|
|
40
|
+
dispatch?: boolean;
|
|
41
|
+
test?: boolean;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Connects the state handler to the Redux DevTools browser extension.
|
|
46
|
+
* Returns a DevTools object to communicate with the extension.
|
|
47
|
+
*/
|
|
48
|
+
export declare function withDevTools(initialState: unknown, options: DevToolsConnectionOptions): DevTools | null;
|
package/dist/store/dev-tools.js
CHANGED
|
@@ -1,13 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Redux DevTools extension types and constants.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Connects the state handler to the Redux DevTools browser extension.
|
|
6
|
+
* Returns a DevTools object to communicate with the extension.
|
|
7
|
+
*/
|
|
8
|
+
export function withDevTools(initialState, options) {
|
|
9
|
+
// Check if the Redux DevTools extension is available in the browser.
|
|
10
|
+
const extension = globalThis?.__REDUX_DEVTOOLS_EXTENSION__;
|
|
11
|
+
// If the extension is not found, we cannot connect.
|
|
12
|
+
if (!extension) {
|
|
3
13
|
return null;
|
|
4
14
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
const devTools = window.__REDUX_DEVTOOLS_EXTENSION__.connect(options);
|
|
15
|
+
// Connect to the extension and get an instance.
|
|
16
|
+
const devTools = extension.connect(options);
|
|
17
|
+
// Initialize the DevTools instance with the initial state.
|
|
10
18
|
devTools.init(initialState);
|
|
11
|
-
|
|
19
|
+
// Return an interface to interact with the extension.
|
|
20
|
+
return {
|
|
21
|
+
// Send a new action and state to the DevTools.
|
|
22
|
+
send: (action, state) => devTools.send(action, state),
|
|
23
|
+
// Subscribe to events coming from the DevTools.
|
|
24
|
+
subscribe: (listener) => devTools.subscribe(listener),
|
|
25
|
+
// Re-initialize the state in the extension.
|
|
26
|
+
init: (state) => devTools.init(state),
|
|
27
|
+
};
|
|
12
28
|
}
|
|
13
29
|
//# sourceMappingURL=dev-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-tools.js","sourceRoot":"","sources":["../../src/store/dev-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev-tools.js","sourceRoot":"","sources":["../../src/store/dev-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0DH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,YAAqB,EAAE,OAAkC;IACpF,qEAAqE;IACrE,MAAM,SAAS,GAAI,UAAkB,EAAE,4BAA4B,CAAC;IAEpE,oDAAoD;IACpD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5C,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE5B,sDAAsD;IACtD,OAAO;QACL,+CAA+C;QAC/C,IAAI,EAAE,CAAC,MAAc,EAAE,KAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;QACtE,gDAAgD;QAChD,SAAS,EAAE,CAAC,QAA2C,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC;QACxF,4CAA4C;QAC5C,IAAI,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;KAC/C,CAAC;AACJ,CAAC"}
|
package/dist/store/index.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export core state handler classes and factory functions.
|
|
3
|
+
*/
|
|
1
4
|
export { BaseStateHandler } from './base-state-handler.js';
|
|
5
|
+
export { NativeStateHandler } from './native-state-handler.js';
|
|
2
6
|
export { ObservableStateHandler } from './observable-state-handler.js';
|
|
3
7
|
export { SignalStateHandler } from './signal-state-handler.js';
|
|
8
|
+
/**
|
|
9
|
+
* Export singleton related types and factory function.
|
|
10
|
+
*/
|
|
4
11
|
export type { StateSingleton, StateSingletonOptions } from './state-singleton.js';
|
|
5
12
|
export { makeStateSingleton } from './state-singleton.js';
|