@veams/status-quo 0.0.2 → 0.0.4
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/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/store/__tests__/state-handler.spec.ts +2 -2
package/.nvmrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
v22
|
|
@@ -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.0.4",
|
|
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"
|
|
@@ -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
|
});
|