@veams/status-quo 1.10.0 → 1.11.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.
Files changed (52) hide show
  1. package/.turbo/turbo-build.log +14 -12
  2. package/README.md +22 -3
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.js +2 -6
  5. package/dist/index.js.map +1 -1
  6. package/dist/observable/index.d.ts +5 -0
  7. package/dist/observable/index.js +6 -0
  8. package/dist/observable/index.js.map +1 -0
  9. package/dist/signals/index.d.ts +5 -0
  10. package/dist/signals/index.js +6 -0
  11. package/dist/signals/index.js.map +1 -0
  12. package/dist/store/index.d.ts +0 -2
  13. package/dist/store/index.js +0 -4
  14. package/dist/store/index.js.map +1 -1
  15. package/package.json +15 -1
  16. package/src/index.ts +0 -6
  17. package/src/observable/index.ts +5 -0
  18. package/src/signals/index.ts +5 -0
  19. package/src/store/index.ts +0 -4
  20. package/dist/hooks/__tests__/state-provider.spec.d.ts +0 -4
  21. package/dist/hooks/__tests__/state-provider.spec.js +0 -179
  22. package/dist/hooks/__tests__/state-provider.spec.js.map +0 -1
  23. package/dist/hooks/__tests__/state-selector.spec.d.ts +0 -4
  24. package/dist/hooks/__tests__/state-selector.spec.js +0 -499
  25. package/dist/hooks/__tests__/state-selector.spec.js.map +0 -1
  26. package/dist/hooks/__tests__/state-singleton.spec.d.ts +0 -4
  27. package/dist/hooks/__tests__/state-singleton.spec.js +0 -96
  28. package/dist/hooks/__tests__/state-singleton.spec.js.map +0 -1
  29. package/dist/hooks/index.d.ts +0 -6
  30. package/dist/hooks/index.js +0 -7
  31. package/dist/hooks/index.js.map +0 -1
  32. package/dist/hooks/state-actions.d.ts +0 -2
  33. package/dist/hooks/state-actions.js +0 -5
  34. package/dist/hooks/state-actions.js.map +0 -1
  35. package/dist/hooks/state-factory.d.ts +0 -7
  36. package/dist/hooks/state-factory.js +0 -13
  37. package/dist/hooks/state-factory.js.map +0 -1
  38. package/dist/hooks/state-handler.d.ts +0 -2
  39. package/dist/hooks/state-handler.js +0 -9
  40. package/dist/hooks/state-handler.js.map +0 -1
  41. package/dist/hooks/state-provider.d.ts +0 -14
  42. package/dist/hooks/state-provider.js +0 -24
  43. package/dist/hooks/state-provider.js.map +0 -1
  44. package/dist/hooks/state-singleton.d.ts +0 -6
  45. package/dist/hooks/state-singleton.js +0 -7
  46. package/dist/hooks/state-singleton.js.map +0 -1
  47. package/dist/hooks/state-subscription-selector.d.ts +0 -3
  48. package/dist/hooks/state-subscription-selector.js +0 -63
  49. package/dist/hooks/state-subscription-selector.js.map +0 -1
  50. package/dist/hooks/state-subscription.d.ts +0 -9
  51. package/dist/hooks/state-subscription.js +0 -53
  52. package/dist/hooks/state-subscription.js.map +0 -1
@@ -1,12 +1,14 @@
1
-
2
- > @veams/status-quo@1.8.0 build
3
- > cross-env NODE_ENV=production npm-run-all compile
4
-
5
-
6
- > @veams/status-quo@1.8.0 compile
7
- > npm-run-all bundle:ts
8
-
9
-
10
- > @veams/status-quo@1.8.0 bundle:ts
11
- > tsc --project tsconfig.json
12
-
1
+
2
+ 
3
+ > @veams/status-quo@1.10.0 build
4
+ > cross-env NODE_ENV=production npm-run-all compile
5
+
6
+
7
+ > @veams/status-quo@1.10.0 compile
8
+ > npm-run-all bundle:ts
9
+
10
+
11
+ > @veams/status-quo@1.10.0 bundle:ts
12
+ > tsc --project tsconfig.json
13
+
14
+ ⠙⠙⠙
package/README.md CHANGED
@@ -105,12 +105,14 @@ setupStatusQuo({
105
105
 
106
106
  StatusQuo provides three handler implementations with the same public interface:
107
107
 
108
- - `NativeStateHandler` (**Zero dependency**, plain JS)
109
- - `ObservableStateHandler` (RxJS-backed)
110
- - `SignalStateHandler` (Signals-backed)
108
+ - `NativeStateHandler` (**Zero dependency**, plain JS) — `import { NativeStateHandler } from '@veams/status-quo'`
109
+ - `ObservableStateHandler` (RxJS-backed) — `import { ObservableStateHandler } from '@veams/status-quo/observable'`
110
+ - `SignalStateHandler` (Signals-backed) — `import { SignalStateHandler } from '@veams/status-quo/signals'`
111
111
 
112
112
  All are built on `BaseStateHandler`, which provides the shared lifecycle and devtools support.
113
113
 
114
+ The RxJS and Signals handlers live in dedicated subpaths to avoid pulling in their peer dependencies when you are only using `NativeStateHandler`.
115
+
114
116
  ## Hooks
115
117
 
116
118
  The React layer lives under `@veams/status-quo/react`.
@@ -228,6 +230,7 @@ Use only the slice you need. RxJS makes multi-source composition powerful and de
228
230
 
229
231
  ```ts
230
232
  import { combineLatest } from 'rxjs';
233
+ import { SignalStateHandler } from '@veams/status-quo/signals';
231
234
 
232
235
  // RxJS: combine handler streams (RxJS shines here)
233
236
  class AppSignalStore extends SignalStateHandler<AppState, AppActions> {
@@ -254,6 +257,7 @@ class AppSignalStore extends SignalStateHandler<AppState, AppActions> {
254
257
 
255
258
  // Signals: combine derived values via computed + bindSubscribable
256
259
  import { computed } from '@preact/signals-core';
260
+ import { SignalStateHandler } from '@veams/status-quo/signals';
257
261
 
258
262
  class AppSignalStore extends SignalStateHandler<AppState, AppActions> {
259
263
  private counter = CounterSignalHandler.getInstance();
@@ -581,6 +585,8 @@ setupStatusQuo({
581
585
  Override it per handler when needed:
582
586
 
583
587
  ```ts
588
+ import { ObservableStateHandler } from '@veams/status-quo/observable';
589
+
584
590
  class CounterStore extends ObservableStateHandler<CounterState, CounterActions> {
585
591
  constructor() {
586
592
  super({
@@ -711,6 +717,8 @@ Notes:
711
717
 
712
718
  ### `ObservableStateHandler<S, A>`
713
719
 
720
+ Import from `@veams/status-quo/observable`. Requires `rxjs` as a peer dependency.
721
+
714
722
  RxJS-backed handler. Extends `BaseStateHandler`.
715
723
 
716
724
  Constructor:
@@ -748,6 +756,8 @@ Notes:
748
756
 
749
757
  ### `SignalStateHandler<S, A>`
750
758
 
759
+ Import from `@veams/status-quo/signals`. Requires `@preact/signals-core` as a peer dependency.
760
+
751
761
  Signals-backed handler. Extends `BaseStateHandler`.
752
762
 
753
763
  Constructor:
@@ -840,6 +850,15 @@ Lifecycle behavior:
840
850
 
841
851
  ## Migration
842
852
 
853
+ From 1.x to 2.0:
854
+
855
+ `ObservableStateHandler` and `SignalStateHandler` are no longer exported from the main entry (`@veams/status-quo`). They now live in dedicated subpaths:
856
+
857
+ 1. Replace `import { ObservableStateHandler } from '@veams/status-quo'` with `import { ObservableStateHandler } from '@veams/status-quo/observable'`.
858
+ 2. Replace `import { SignalStateHandler } from '@veams/status-quo'` with `import { SignalStateHandler } from '@veams/status-quo/signals'`.
859
+
860
+ Everything else (`NativeStateHandler`, `makeStateSingleton`, `setupStatusQuo`, all types, `@veams/status-quo/react`, `@veams/status-quo/store`) is unchanged.
861
+
843
862
  From pre-1.0 releases:
844
863
 
845
864
  1. Rename `StateHandler` -> `ObservableStateHandler`.
package/dist/index.d.ts CHANGED
@@ -3,14 +3,14 @@
3
3
  * Exports core functionality for both store and React integration.
4
4
  */
5
5
  import { setupStatusQuo } from './config/status-quo-config.js';
6
- import { BaseStateHandler, makeStateSingleton, NativeStateHandler, ObservableStateHandler, SignalStateHandler } from './store/index.js';
6
+ import { BaseStateHandler, makeStateSingleton, NativeStateHandler } from './store/index.js';
7
7
  import type { DevToolsOptions, GlobalDevToolsOptions, DistinctComparator, DistinctOptions, StatusQuoConfig } from './config/status-quo-config.js';
8
8
  import type { StateSingleton, StateSingletonOptions } from './store/index.js';
9
9
  import type { StateSubscriptionHandler } from './types/types.js';
10
10
  /**
11
11
  * Core state management functions and classes.
12
12
  */
13
- export { BaseStateHandler, makeStateSingleton, NativeStateHandler, ObservableStateHandler, setupStatusQuo, SignalStateHandler, };
13
+ export { BaseStateHandler, makeStateSingleton, NativeStateHandler, setupStatusQuo, };
14
14
  /**
15
15
  * Type definitions for public API.
16
16
  */
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  */
5
5
  // Import internal setup functions and core state handlers.
6
6
  import { setupStatusQuo } from './config/status-quo-config.js';
7
- import { BaseStateHandler, makeStateSingleton, NativeStateHandler, ObservableStateHandler, SignalStateHandler, } from './store/index.js';
7
+ import { BaseStateHandler, makeStateSingleton, NativeStateHandler, } from './store/index.js';
8
8
  /**
9
9
  * Core state management functions and classes.
10
10
  */
@@ -15,10 +15,6 @@ BaseStateHandler,
15
15
  makeStateSingleton,
16
16
  // Lightweight state handler using plain JavaScript.
17
17
  NativeStateHandler,
18
- // State handler powered by RxJS BehaviorSubjects.
19
- ObservableStateHandler,
20
18
  // Global configuration function for Status Quo.
21
- setupStatusQuo,
22
- // State handler powered by Preact Signals.
23
- SignalStateHandler, };
19
+ setupStatusQuo, };
24
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2DAA2D;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAa1B;;GAEG;AACH,OAAO;AACL,8CAA8C;AAC9C,gBAAgB;AAChB,0DAA0D;AAC1D,kBAAkB;AAClB,oDAAoD;AACpD,kBAAkB;AAClB,kDAAkD;AAClD,sBAAsB;AACtB,gDAAgD;AAChD,cAAc;AACd,2CAA2C;AAC3C,kBAAkB,GACnB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2DAA2D;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAa1B;;GAEG;AACH,OAAO;AACL,8CAA8C;AAC9C,gBAAgB;AAChB,0DAA0D;AAC1D,kBAAkB;AAClB,oDAAoD;AACpD,kBAAkB;AAClB,gDAAgD;AAChD,cAAc,GACf,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Subpath entry for the RxJS-based ObservableStateHandler.
3
+ * Import from '@veams/status-quo/observable' to avoid pulling rxjs into the main bundle.
4
+ */
5
+ export { ObservableStateHandler } from '../store/observable-state-handler.js';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Subpath entry for the RxJS-based ObservableStateHandler.
3
+ * Import from '@veams/status-quo/observable' to avoid pulling rxjs into the main bundle.
4
+ */
5
+ export { ObservableStateHandler } from '../store/observable-state-handler.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observable/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Subpath entry for the Preact Signals-based SignalStateHandler.
3
+ * Import from '@veams/status-quo/signals' to avoid pulling @preact/signals-core into the main bundle.
4
+ */
5
+ export { SignalStateHandler } from '../store/signal-state-handler.js';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Subpath entry for the Preact Signals-based SignalStateHandler.
3
+ * Import from '@veams/status-quo/signals' to avoid pulling @preact/signals-core into the main bundle.
4
+ */
5
+ export { SignalStateHandler } from '../store/signal-state-handler.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC"}
@@ -3,8 +3,6 @@
3
3
  */
4
4
  export { BaseStateHandler } from './base-state-handler.js';
5
5
  export { NativeStateHandler } from './native-state-handler.js';
6
- export { ObservableStateHandler } from './observable-state-handler.js';
7
- export { SignalStateHandler } from './signal-state-handler.js';
8
6
  /**
9
7
  * Export singleton related types and factory function.
10
8
  */
@@ -5,10 +5,6 @@
5
5
  export { BaseStateHandler } from './base-state-handler.js';
6
6
  // Export the lightweight state handler using plain JavaScript.
7
7
  export { NativeStateHandler } from './native-state-handler.js';
8
- // Export the state handler powered by RxJS BehaviorSubjects.
9
- export { ObservableStateHandler } from './observable-state-handler.js';
10
- // Export the state handler powered by Preact Signals.
11
- export { SignalStateHandler } from './signal-state-handler.js';
12
8
  // Export the factory function to create singleton state handler instances.
13
9
  export { makeStateSingleton } from './state-singleton.js';
14
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yDAAyD;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,+DAA+D;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,6DAA6D;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,sDAAsD;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,2EAA2E;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yDAAyD;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,+DAA+D;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,2EAA2E;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veams/status-quo",
3
- "version": "1.10.0",
3
+ "version": "1.11.0",
4
4
  "description": "The manager to rule states in frontend.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -25,6 +25,20 @@
25
25
  "default": "./dist/store/index.js"
26
26
  },
27
27
  "require": "./dist/store/index.js"
28
+ },
29
+ "./observable": {
30
+ "import": {
31
+ "types": "./dist/observable/index.d.ts",
32
+ "default": "./dist/observable/index.js"
33
+ },
34
+ "require": "./dist/observable/index.js"
35
+ },
36
+ "./signals": {
37
+ "import": {
38
+ "types": "./dist/signals/index.d.ts",
39
+ "default": "./dist/signals/index.js"
40
+ },
41
+ "require": "./dist/signals/index.js"
28
42
  }
29
43
  },
30
44
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -9,8 +9,6 @@ import {
9
9
  BaseStateHandler,
10
10
  makeStateSingleton,
11
11
  NativeStateHandler,
12
- ObservableStateHandler,
13
- SignalStateHandler,
14
12
  } from './store/index.js';
15
13
 
16
14
  // Import necessary types for external use.
@@ -34,12 +32,8 @@ export {
34
32
  makeStateSingleton,
35
33
  // Lightweight state handler using plain JavaScript.
36
34
  NativeStateHandler,
37
- // State handler powered by RxJS BehaviorSubjects.
38
- ObservableStateHandler,
39
35
  // Global configuration function for Status Quo.
40
36
  setupStatusQuo,
41
- // State handler powered by Preact Signals.
42
- SignalStateHandler,
43
37
  };
44
38
 
45
39
  /**
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Subpath entry for the RxJS-based ObservableStateHandler.
3
+ * Import from '@veams/status-quo/observable' to avoid pulling rxjs into the main bundle.
4
+ */
5
+ export { ObservableStateHandler } from '../store/observable-state-handler.js';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Subpath entry for the Preact Signals-based SignalStateHandler.
3
+ * Import from '@veams/status-quo/signals' to avoid pulling @preact/signals-core into the main bundle.
4
+ */
5
+ export { SignalStateHandler } from '../store/signal-state-handler.js';
@@ -6,10 +6,6 @@
6
6
  export { BaseStateHandler } from './base-state-handler.js';
7
7
  // Export the lightweight state handler using plain JavaScript.
8
8
  export { NativeStateHandler } from './native-state-handler.js';
9
- // Export the state handler powered by RxJS BehaviorSubjects.
10
- export { ObservableStateHandler } from './observable-state-handler.js';
11
- // Export the state handler powered by Preact Signals.
12
- export { SignalStateHandler } from './signal-state-handler.js';
13
9
 
14
10
  /**
15
11
  * Export singleton related types and factory function.
@@ -1,4 +0,0 @@
1
- declare global {
2
- var IS_REACT_ACT_ENVIRONMENT: boolean;
3
- }
4
- export {};
@@ -1,179 +0,0 @@
1
- import React, { act } from 'react';
2
- import { createRoot } from 'react-dom/client';
3
- import { StateProvider, useProvidedStateActions, useProvidedStateHandler, useProvidedStateSubscription, } from '../state-provider.js';
4
- class TestStateHandler {
5
- initialState;
6
- state;
7
- listeners = new Set();
8
- destroy = jest.fn();
9
- constructor(initialState) {
10
- this.initialState = initialState;
11
- this.state = initialState;
12
- }
13
- subscribe(listener) {
14
- const typedListener = listener;
15
- this.listeners.add(typedListener);
16
- return () => {
17
- this.listeners.delete(typedListener);
18
- };
19
- }
20
- getSnapshot = () => {
21
- return this.state;
22
- };
23
- getInitialState = () => {
24
- return this.initialState;
25
- };
26
- getActions = () => {
27
- return {
28
- increment: () => {
29
- this.state = {
30
- ...this.state,
31
- count: this.state.count + 1,
32
- };
33
- this.emitStateChange();
34
- },
35
- rename: (label) => {
36
- this.state = {
37
- ...this.state,
38
- label,
39
- };
40
- this.emitStateChange();
41
- },
42
- };
43
- };
44
- emitStateChange() {
45
- const nextState = this.state;
46
- this.listeners.forEach((listener) => listener(nextState));
47
- }
48
- }
49
- function CountConsumer({ onRender }) {
50
- const [count] = useProvidedStateSubscription((state) => state.count);
51
- onRender(count);
52
- return React.createElement("span", null, count);
53
- }
54
- function FullStateConsumer({ onActionsReady, onRender, }) {
55
- const [state, actions] = useProvidedStateSubscription();
56
- onRender(state);
57
- onActionsReady(actions);
58
- return React.createElement("span", null, state.label);
59
- }
60
- function ActionsOnlyConsumer({ onActionsReady, onRender, }) {
61
- const actions = useProvidedStateActions();
62
- onRender();
63
- onActionsReady(actions);
64
- return React.createElement("span", null, "actions-only");
65
- }
66
- function HandlerConsumer({ onHandlerReady, }) {
67
- const handler = useProvidedStateHandler();
68
- onHandlerReady(handler);
69
- return React.createElement("span", null, "handler");
70
- }
71
- function MissingProviderConsumer() {
72
- useProvidedStateActions();
73
- return null;
74
- }
75
- describe('StateProvider', () => {
76
- let container;
77
- let root;
78
- beforeAll(() => {
79
- globalThis.IS_REACT_ACT_ENVIRONMENT = true;
80
- });
81
- beforeEach(() => {
82
- container = document.createElement('div');
83
- document.body.appendChild(container);
84
- root = createRoot(container);
85
- });
86
- afterEach(() => {
87
- act(() => {
88
- root.unmount();
89
- });
90
- container.remove();
91
- });
92
- afterAll(() => {
93
- globalThis.IS_REACT_ACT_ENVIRONMENT = false;
94
- });
95
- it('should share one handler instance across the provider subtree', () => {
96
- const stateHandler = new TestStateHandler({
97
- count: 0,
98
- label: 'Counter',
99
- });
100
- const countRenderSpy = jest.fn();
101
- const actionsRenderSpy = jest.fn();
102
- const actionsReadySpy = jest.fn();
103
- const handlerReadySpy = jest.fn();
104
- act(() => {
105
- root.render(React.createElement(StateProvider, { instance: stateHandler },
106
- React.createElement(CountConsumer, { onRender: countRenderSpy }),
107
- React.createElement(ActionsOnlyConsumer, { onActionsReady: actionsReadySpy, onRender: actionsRenderSpy }),
108
- React.createElement(HandlerConsumer, { onHandlerReady: handlerReadySpy })));
109
- });
110
- expect(countRenderSpy).toHaveBeenCalledTimes(1);
111
- expect(countRenderSpy).toHaveBeenLastCalledWith(0);
112
- expect(actionsRenderSpy).toHaveBeenCalledTimes(1);
113
- expect(handlerReadySpy).toHaveBeenCalledWith(stateHandler);
114
- const [[actions]] = actionsReadySpy.mock.calls;
115
- act(() => {
116
- actions.rename('Renamed');
117
- });
118
- expect(countRenderSpy).toHaveBeenCalledTimes(1);
119
- expect(actionsRenderSpy).toHaveBeenCalledTimes(1);
120
- act(() => {
121
- actions.increment();
122
- });
123
- expect(countRenderSpy).toHaveBeenCalledTimes(2);
124
- expect(countRenderSpy).toHaveBeenLastCalledWith(1);
125
- expect(actionsRenderSpy).toHaveBeenCalledTimes(1);
126
- });
127
- it('should return the full snapshot when no selector is provided', () => {
128
- const stateHandler = new TestStateHandler({
129
- count: 2,
130
- label: 'Counter',
131
- });
132
- const renderSpy = jest.fn();
133
- const actionsReadySpy = jest.fn();
134
- act(() => {
135
- root.render(React.createElement(StateProvider, { instance: stateHandler },
136
- React.createElement(FullStateConsumer, { onActionsReady: actionsReadySpy, onRender: renderSpy })));
137
- });
138
- expect(renderSpy).toHaveBeenCalledTimes(1);
139
- expect(renderSpy).toHaveBeenLastCalledWith({ count: 2, label: 'Counter' });
140
- const [[actions]] = actionsReadySpy.mock.calls;
141
- act(() => {
142
- actions.increment();
143
- });
144
- expect(renderSpy).toHaveBeenCalledTimes(2);
145
- expect(renderSpy).toHaveBeenLastCalledWith({ count: 3, label: 'Counter' });
146
- });
147
- it('should follow a new instance when the provider instance changes', () => {
148
- const firstHandler = new TestStateHandler({
149
- count: 1,
150
- label: 'First',
151
- });
152
- const secondHandler = new TestStateHandler({
153
- count: 8,
154
- label: 'Second',
155
- });
156
- const renderSpy = jest.fn();
157
- act(() => {
158
- root.render(React.createElement(StateProvider, { instance: firstHandler },
159
- React.createElement(CountConsumer, { onRender: renderSpy })));
160
- });
161
- act(() => {
162
- root.render(React.createElement(StateProvider, { instance: secondHandler },
163
- React.createElement(CountConsumer, { onRender: renderSpy })));
164
- });
165
- expect(renderSpy).toHaveBeenCalledTimes(2);
166
- expect(renderSpy).toHaveBeenNthCalledWith(1, 1);
167
- expect(renderSpy).toHaveBeenNthCalledWith(2, 8);
168
- });
169
- it('should throw when provider hooks are used outside StateProvider', () => {
170
- const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => undefined);
171
- expect(() => {
172
- act(() => {
173
- root.render(React.createElement(MissingProviderConsumer, null));
174
- });
175
- }).toThrow('No StateProvider instance found in the current React tree.');
176
- consoleErrorSpy.mockRestore();
177
- });
178
- });
179
- //# sourceMappingURL=state-provider.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-provider.spec.js","sourceRoot":"","sources":["../../../src/hooks/__tests__/state-provider.spec.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- declare global {
2
- var IS_REACT_ACT_ENVIRONMENT: boolean;
3
- }
4
- export {};