@veams/status-quo 0.0.2 → 0.1.0
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/.nvmrc +1 -1
- package/README.md +47 -1
- package/dist/hooks/state-factory.js +1 -1
- package/dist/hooks/state-factory.js.map +1 -1
- package/dist/store/__tests__/state-handler.spec.js +2 -2
- package/dist/store/__tests__/state-handler.spec.js.map +1 -1
- package/dist/types/hooks/index.d.ts +2 -0
- package/dist/types/hooks/state-factory.d.ts +2 -0
- package/dist/types/hooks/state-singleton.d.ts +2 -0
- package/dist/types/hooks/state-subscription.d.ts +3 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/store/__tests__/state-handler.spec.d.ts +1 -0
- package/dist/types/store/dev-tools.d.ts +23 -0
- package/dist/types/store/index.d.ts +3 -0
- package/dist/types/store/state-handler.d.ts +36 -0
- package/dist/types/store/state-singleton.d.ts +5 -0
- package/dist/types/types/types.d.ts +7 -0
- package/package.json +18 -18
- package/src/hooks/state-factory.tsx +1 -1
- package/src/store/__tests__/state-handler.spec.ts +2 -2
package/.nvmrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
v22
|
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ _Please keep in mind that dependencies for the hook needs to be flattened and ca
|
|
|
26
26
|
## Example
|
|
27
27
|
|
|
28
28
|
Let's start with a simple state example.
|
|
29
|
-
You should start with the abstract class `
|
|
29
|
+
You should start with the abstract class `StateHandler`:
|
|
30
30
|
|
|
31
31
|
```ts
|
|
32
32
|
import { useStateFactory, StateHandler } from '@veams/status-quo';
|
|
@@ -126,5 +126,51 @@ const GlobalCounterDisplay = () => {
|
|
|
126
126
|
}
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
+
### What about debugging?
|
|
129
130
|
|
|
131
|
+
You know redux-devtools? You like it? We covered you (at least a bit)!
|
|
132
|
+
You can enable the devtools in an easy way:
|
|
130
133
|
|
|
134
|
+
```ts
|
|
135
|
+
|
|
136
|
+
class CounterStateHandler extends StateHandler<CounterState, CounterActions> {
|
|
137
|
+
constructor([startCount = 0]) {
|
|
138
|
+
super({
|
|
139
|
+
initialState: { count: startCount },
|
|
140
|
+
devTools: { enabled: true, namespace: 'Counter' },
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
getActions() {
|
|
145
|
+
return {
|
|
146
|
+
increase() {
|
|
147
|
+
this.setState(
|
|
148
|
+
{
|
|
149
|
+
count: this.getState() + 1,
|
|
150
|
+
},
|
|
151
|
+
'increase'
|
|
152
|
+
);
|
|
153
|
+
},
|
|
154
|
+
decrease() {
|
|
155
|
+
const currentState = this.getState();
|
|
156
|
+
|
|
157
|
+
if (currentState.count > 0) {
|
|
158
|
+
this.setState(
|
|
159
|
+
{
|
|
160
|
+
count: currentState - 1,
|
|
161
|
+
},
|
|
162
|
+
'decrease'
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function CounterStateFactory(...args) {
|
|
171
|
+
return new CounterStateHandler(...args);
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
We just added the `devTools` option and also updated the `setState()` function by passing a second argument into it which is the actions name.
|
|
176
|
+
Now you can open up the the browser extension and you are able to take a look at your actions and state(s).
|
|
@@ -4,6 +4,6 @@ export function useStateFactory(stateFactoryFunction, params = []) {
|
|
|
4
4
|
const stateHandler = useRef(stateFactoryFunction(...params));
|
|
5
5
|
const actions = useRef(stateHandler.current.getActions());
|
|
6
6
|
const state = useStateSubscription(stateHandler.current);
|
|
7
|
-
return [state, actions];
|
|
7
|
+
return [state, actions.current];
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=state-factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-factory.js","sourceRoot":"","sources":["../../src/hooks/state-factory.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAI/D,MAAM,UAAU,eAAe,CAC7B,oBAAoE,EACpE,SAAY,EAAkB;IAE9B,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAEzD,OAAO,CAAC,KAAK,EAAE,OAAO,CAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"state-factory.js","sourceRoot":"","sources":["../../src/hooks/state-factory.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAI/D,MAAM,UAAU,eAAe,CAC7B,oBAAoE,EACpE,SAAY,EAAkB;IAE9B,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAEzD,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAW,CAAC;AAC5C,CAAC"}
|
|
@@ -62,7 +62,7 @@ describe('State Handler', () => {
|
|
|
62
62
|
stateHandler.destroy();
|
|
63
63
|
customSubject.next(2);
|
|
64
64
|
customSubject.next(3);
|
|
65
|
-
expect(spy).
|
|
65
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
66
66
|
});
|
|
67
67
|
it('should only call subscriber when object state has changed', async () => {
|
|
68
68
|
const spy = jest.fn();
|
|
@@ -79,7 +79,7 @@ describe('State Handler', () => {
|
|
|
79
79
|
stateHandler.setState({
|
|
80
80
|
test: 'test2',
|
|
81
81
|
});
|
|
82
|
-
expect(spy).
|
|
82
|
+
expect(spy).toHaveBeenCalledTimes(3); // 1. testValue (Initial value), 2. test (first setter), 3. test2 (second setter)
|
|
83
83
|
});
|
|
84
84
|
});
|
|
85
85
|
//# sourceMappingURL=state-handler.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-handler.spec.js","sourceRoot":"","sources":["../../../src/store/__tests__/state-handler.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,gBAAiB,SAAQ,YAG9B;IACC,YAAY,YAAsB;QAChC,KAAK,CAAC;YACJ,YAAY,EAAE;gBACZ,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,YAAY;aACpB;YACD,GAAG,CAAC,YAAY,IAAI;gBAClB,QAAQ,EAAE;oBACR,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,kBAAkB;iBAC9B;aACF,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACrC,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,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,YAA8B,CAAC;IAEnC,UAAU,CAAC,GAAG,EAAE;QACd,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACxC,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,KAAK,IAAI,EAAE;QAC9F,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,YAAY;SACpB,CAAC;QAEF,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEhC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9E,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtC,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,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAElD,YAAY,CAAC,aAAa,GAAG,CAAC,YAAY,CAAC,CAAC;QAE5C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtB,YAAY,CAAC,OAAO,EAAE,CAAC;QAEvB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtB,MAAM,CAAC,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"state-handler.spec.js","sourceRoot":"","sources":["../../../src/store/__tests__/state-handler.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useStateFactory, useStateSingleton } from './hooks/index.js';
|
|
2
|
+
import { makeStateSingleton, StateHandler } from './store/index.js';
|
|
3
|
+
import type { StateSingleton } from './store/index.js';
|
|
4
|
+
import type { StateSubscriptionHandler } from './types/types.js';
|
|
5
|
+
export { makeStateSingleton, StateHandler, useStateFactory, useStateSingleton };
|
|
6
|
+
export type { StateSingleton, StateSubscriptionHandler };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
interface Window {
|
|
3
|
+
__REDUX_DEVTOOLS_EXTENSION__?: {
|
|
4
|
+
connect: (opts: Record<string, unknown>) => DevTools;
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export type MessagePayload = {
|
|
9
|
+
type: string;
|
|
10
|
+
payload: {
|
|
11
|
+
type: string;
|
|
12
|
+
actionId: number;
|
|
13
|
+
};
|
|
14
|
+
state: string;
|
|
15
|
+
id: string;
|
|
16
|
+
source: '@devtools-extension';
|
|
17
|
+
};
|
|
18
|
+
export type DevTools = {
|
|
19
|
+
init: (state: unknown) => void;
|
|
20
|
+
send: (action: string, state: unknown) => void;
|
|
21
|
+
subscribe: (cb: (message: MessagePayload) => void) => void;
|
|
22
|
+
};
|
|
23
|
+
export declare function withDevTools<S>(initialState: S, options?: {}): DevTools | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
import type { StateSubscriptionHandler } from '../types/types.js';
|
|
3
|
+
import type { Observable, Subscription } from 'rxjs';
|
|
4
|
+
type Subscriptions = Subscription[];
|
|
5
|
+
type StateHandlerProps<S> = {
|
|
6
|
+
initialState: S;
|
|
7
|
+
options?: {
|
|
8
|
+
devTools: {
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
namespace: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
type StateObservableOptions = {
|
|
15
|
+
useDistinctUntilChanged?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare abstract class StateHandler<S, A> implements StateSubscriptionHandler<S, A> {
|
|
18
|
+
private readonly updates$;
|
|
19
|
+
private readonly state$;
|
|
20
|
+
private readonly initialState;
|
|
21
|
+
private devTools;
|
|
22
|
+
subscriptions: Subscriptions;
|
|
23
|
+
protected constructor({ initialState, options }: StateHandlerProps<S>);
|
|
24
|
+
getInitialState(): S;
|
|
25
|
+
getState(): S;
|
|
26
|
+
setState(newState: Partial<S>, actionName?: string): void;
|
|
27
|
+
destroy(): void;
|
|
28
|
+
getStateItemAsObservable(key: keyof S): Observable<S[keyof S]>;
|
|
29
|
+
getStateAsObservable(options?: StateObservableOptions): BehaviorSubject<S>;
|
|
30
|
+
getObservableItem(key: keyof S): Observable<S[keyof S]>;
|
|
31
|
+
private bindUpdatesAndEvents;
|
|
32
|
+
private handleDevToolsEvents;
|
|
33
|
+
getObservable(): Observable<S>;
|
|
34
|
+
abstract getActions(): A;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { StateSubscriptionHandler } from '../types/types.js';
|
|
2
|
+
export interface StateSingleton<V, A> {
|
|
3
|
+
getInstance: () => StateSubscriptionHandler<V, A>;
|
|
4
|
+
}
|
|
5
|
+
export declare function makeStateSingleton<S, A>(stateHandlerFactory: () => StateSubscriptionHandler<S, A>): StateSingleton<S, A>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veams/status-quo",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "The manager to rule states in frontend.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -40,33 +40,33 @@
|
|
|
40
40
|
"lint": "pnpm run lint:ts",
|
|
41
41
|
"lint:ts": "eslint --fix \"src/**/*.{tsx,ts}\" --config ./.eslintrc.cjs",
|
|
42
42
|
"start": "npm-run-all --parallel watch:**",
|
|
43
|
-
"watch:bundle:ts": "npm run bundle:ts -w",
|
|
44
|
-
"watch:generate:types": "npm run generate:types --watch",
|
|
43
|
+
"watch:bundle:ts": "npm run bundle:ts -- -w",
|
|
44
|
+
"watch:generate:types": "npm run generate:types -- --watch",
|
|
45
45
|
"test": "cross-env NODE_ENV=test jest --config jest.config.cjs",
|
|
46
46
|
"test:ci": "cross-env NODE_ENV=test jest --ci --silent --no-cache --config jest.config.ci.cjs",
|
|
47
47
|
"release": "npm run build && release-it"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"react": "
|
|
51
|
-
"rxjs": "
|
|
50
|
+
"react": ">=18.0.0",
|
|
51
|
+
"rxjs": ">=7.5.4"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@types/jest": "
|
|
55
|
-
"@types/node": "
|
|
56
|
-
"@types/react": "
|
|
54
|
+
"@types/jest": "30.0.0",
|
|
55
|
+
"@types/node": "24.0.13",
|
|
56
|
+
"@types/react": "19.1.8",
|
|
57
57
|
"cross-env": "7.0.3",
|
|
58
58
|
"eslint": "8.55.0",
|
|
59
|
-
"jest": "
|
|
60
|
-
"jest-environment-jsdom": "
|
|
59
|
+
"jest": "30.0.4",
|
|
60
|
+
"jest-environment-jsdom": "30.0.4",
|
|
61
61
|
"npm-run-all": "4.1.5",
|
|
62
|
-
"prettier": "3.
|
|
63
|
-
"react": "
|
|
64
|
-
"rxjs": "7.8.
|
|
65
|
-
"tslib": "2.
|
|
66
|
-
"typescript": "5.3
|
|
67
|
-
"@swc/jest": "0.2.
|
|
68
|
-
"@swc/core": "1.
|
|
69
|
-
"release-it": "
|
|
62
|
+
"prettier": "3.6.2",
|
|
63
|
+
"react": "19.1.0",
|
|
64
|
+
"rxjs": "7.8.2",
|
|
65
|
+
"tslib": "2.8.1",
|
|
66
|
+
"typescript": "5.8.3",
|
|
67
|
+
"@swc/jest": "0.2.39",
|
|
68
|
+
"@swc/core": "1.12.11",
|
|
69
|
+
"release-it": "19.0.3"
|
|
70
70
|
},
|
|
71
71
|
"keywords": [
|
|
72
72
|
"State Management"
|
|
@@ -12,5 +12,5 @@ export function useStateFactory<V, A, P extends unknown[]>(
|
|
|
12
12
|
const actions = useRef(stateHandler.current.getActions());
|
|
13
13
|
const state = useStateSubscription(stateHandler.current);
|
|
14
14
|
|
|
15
|
-
return [state, actions] as [V, A];
|
|
15
|
+
return [state, actions.current] as [V, A];
|
|
16
16
|
}
|
|
@@ -83,7 +83,7 @@ describe('State Handler', () => {
|
|
|
83
83
|
customSubject.next(2);
|
|
84
84
|
customSubject.next(3);
|
|
85
85
|
|
|
86
|
-
expect(spy).
|
|
86
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
it('should only call subscriber when object state has changed', async () => {
|
|
@@ -103,6 +103,6 @@ describe('State Handler', () => {
|
|
|
103
103
|
test: 'test2',
|
|
104
104
|
});
|
|
105
105
|
|
|
106
|
-
expect(spy).
|
|
106
|
+
expect(spy).toHaveBeenCalledTimes(3); // 1. testValue (Initial value), 2. test (first setter), 3. test2 (second setter)
|
|
107
107
|
});
|
|
108
108
|
});
|