phaser-hooks 0.3.0 → 0.5.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.
@@ -16,6 +16,19 @@ export type StateSelector<T, U> = (state: T) => U;
16
16
  * @template T The state type
17
17
  */
18
18
  export type StateUpdater<T> = (currentState: T) => T;
19
+ /**
20
+ * Utility type for deep partial objects
21
+ * Makes all properties optional recursively
22
+ * @template T The state type
23
+ */
24
+ export type DeepPartial<T> = {
25
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
26
+ };
27
+ /**
28
+ * Utility type for state patch updaters
29
+ * @template T The state type
30
+ */
31
+ export type StatePatchUpdater<T> = (currentState: T) => DeepPartial<T>;
19
32
  /**
20
33
  * Core interface for all state management hooks in Phaser games.
21
34
  * Provides a React-like state management API with get/set/onChange functionality.
@@ -47,9 +60,14 @@ export type HookState<T> = {
47
60
  get: () => T;
48
61
  /**
49
62
  * Sets a new state value and triggers change listeners
50
- * @param value The new value to set
63
+ * @param value The new value to set or a function that receives current state and returns new state
64
+ */
65
+ set: (value: T | StateUpdater<T>) => void;
66
+ /**
67
+ * Patches the current state value with a new value
68
+ * @param value The new value to patch or a function that receives current state and returns new state
51
69
  */
52
- set: (value: T) => void;
70
+ patch: (value: DeepPartial<T> | StatePatchUpdater<T>) => void;
53
71
  /**
54
72
  * Registers a callback to be called whenever the state changes
55
73
  * @param callback Function to call when state changes
@@ -71,5 +89,9 @@ export type HookState<T> = {
71
89
  * @param callback The callback to remove
72
90
  */
73
91
  off: (event: 'change', callback: () => void) => void;
92
+ /**
93
+ * Removes all event listeners for this state
94
+ */
95
+ clearListeners: () => void;
74
96
  };
75
97
  //# sourceMappingURL=type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/hooks/type.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;AAExE;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC,CAAC;IAEb;;;OAGG;IACH,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAExB;;;OAGG;IACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAErD;;;OAGG;IACH,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAE1D;;;OAGG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAE5D;;;;OAIG;IACH,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACtD,CAAC"}
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/hooks/type.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;AAExE;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAChE,CAAC;AAGF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC,CAAC;IAEb;;;OAGG;IACH,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAE1C;;;OAGG;IACH,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAE9D;;;OAGG;IACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAErD;;;OAGG;IACH,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAE1D;;;OAGG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAE5D;;;;OAIG;IACH,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAErD;;OAEG;IACH,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"with-computed-state.d.ts","sourceRoot":"","sources":["../../src/hooks/with-computed-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAAE,CAAC,EACpC,OAAO,MAAM,CAAC,KAAK,EACnB,KAAK,MAAM,EACX,aAAa,SAAS,CAAC,CAAC,CAAC,EACzB,UAAU,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,KAC5B,SAAS,CAAC,CAAC,CAwBb,CAAC"}
1
+ {"version":3,"file":"with-computed-state.d.ts","sourceRoot":"","sources":["../../src/hooks/with-computed-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAAE,CAAC,EACpC,OAAO,MAAM,CAAC,KAAK,EACnB,KAAK,MAAM,EACX,aAAa,SAAS,CAAC,CAAC,CAAC,EACzB,UAAU,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,KAC5B,SAAS,CAAC,CAAC,CAoBb,CAAC"}
@@ -31,14 +31,10 @@ export const withComputedState = (scene, key, sourceState, selector) => {
31
31
  computedState.set(newComputedValue);
32
32
  });
33
33
  return {
34
- get: computedState.get,
34
+ ...computedState,
35
35
  set: () => {
36
36
  throw new Error(`[withComputedState] Cannot directly set computed state "${key}". Update the source state instead.`);
37
37
  },
38
- onChange: computedState.onChange,
39
- on: computedState.on,
40
- once: computedState.once,
41
- off: computedState.off,
42
38
  };
43
39
  };
44
40
  //# sourceMappingURL=with-computed-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-computed-state.js","sourceRoot":"","sources":["../../src/hooks/with-computed-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAmB,EACnB,GAAW,EACX,WAAyB,EACzB,QAA6B,EACf,EAAE;IAChB,iCAAiC;IACjC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,cAAc,CAAI,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAElE,4CAA4C;IAC5C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC5B,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACzC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClD,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,EAAE,aAAa,CAAC,GAAG;QACtB,GAAG,EAAE,GAAS,EAAE;YACd,MAAM,IAAI,KAAK,CACb,2DAA2D,GAAG,qCAAqC,CACpG,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,aAAa,CAAC,QAAQ;QAChC,EAAE,EAAE,aAAa,CAAC,EAAE;QACpB,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,GAAG,EAAE,aAAa,CAAC,GAAG;KACvB,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"with-computed-state.js","sourceRoot":"","sources":["../../src/hooks/with-computed-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAmB,EACnB,GAAW,EACX,WAAyB,EACzB,QAA6B,EACf,EAAE;IAChB,iCAAiC;IACjC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,cAAc,CAAI,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAElE,4CAA4C;IAC5C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC5B,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACzC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClD,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,aAAa;QAChB,GAAG,EAAE,GAAS,EAAE;YACd,MAAM,IAAI,KAAK,CACb,2DAA2D,GAAG,qCAAqC,CACpG,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"with-debounced-state.d.ts","sourceRoot":"","sources":["../../src/hooks/with-debounced-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAClC,OAAO,MAAM,CAAC,KAAK,EACnB,KAAK,MAAM,EACX,cAAc,CAAC,EACf,YAAY,MAAM,KACjB,SAAS,CAAC,CAAC,CAuBb,CAAC"}
1
+ {"version":3,"file":"with-debounced-state.d.ts","sourceRoot":"","sources":["../../src/hooks/with-debounced-state.ts"],"names":[],"mappings":"AAEA,OAAO,EAA+D,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGrG;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAClC,OAAO,MAAM,CAAC,KAAK,EACnB,KAAK,MAAM,EACX,cAAc,CAAC,EACf,YAAY,MAAM,KACjB,SAAS,CAAC,CAAC,CA0Bb,CAAC"}
@@ -1,3 +1,4 @@
1
+ import merge from 'lodash.merge';
1
2
  import { withLocalState } from './with-local-state';
2
3
  /**
3
4
  * Creates a state hook with debounced updates
@@ -22,21 +23,23 @@ export const withDebouncedState = (scene, key, initialValue, debounceMs) => {
22
23
  const actualState = withLocalState(scene, key, initialValue);
23
24
  let timeoutId = null;
24
25
  const debouncedSet = (value) => {
26
+ const newValue = typeof value === 'function' ? value(actualState.get()) : value;
25
27
  if (timeoutId) {
26
28
  clearTimeout(timeoutId);
27
29
  }
28
30
  timeoutId = setTimeout(() => {
29
- actualState.set(value);
31
+ actualState.set(newValue);
30
32
  timeoutId = null;
31
33
  }, debounceMs);
32
34
  };
35
+ const debouncedPatch = (value) => {
36
+ const patchValue = typeof value === 'function' ? value(actualState.get()) : value;
37
+ debouncedSet((currentState) => merge({}, currentState, patchValue));
38
+ };
33
39
  return {
34
- get: actualState.get,
40
+ ...actualState,
35
41
  set: debouncedSet,
36
- onChange: actualState.onChange,
37
- on: actualState.on,
38
- once: actualState.once,
39
- off: actualState.off,
42
+ patch: debouncedPatch,
40
43
  };
41
44
  };
42
45
  //# sourceMappingURL=with-debounced-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-debounced-state.js","sourceRoot":"","sources":["../../src/hooks/with-debounced-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAmB,EACnB,GAAW,EACX,YAAe,EACf,UAAkB,EACJ,EAAE;IAChB,MAAM,WAAW,GAAG,cAAc,CAAI,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,SAAS,GAAyC,IAAI,CAAC;IAE3D,MAAM,YAAY,GAAG,CAAC,KAAQ,EAAQ,EAAE;QACtC,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAED,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,WAAW,CAAC,GAAG;QACpB,GAAG,EAAE,YAAY;QACjB,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,EAAE,WAAW,CAAC,GAAG;KACrB,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"with-debounced-state.js","sourceRoot":"","sources":["../../src/hooks/with-debounced-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAmB,EACnB,GAAW,EACX,YAAe,EACf,UAAkB,EACJ,EAAE;IAChB,MAAM,WAAW,GAAG,cAAc,CAAI,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,SAAS,GAAyC,IAAI,CAAC;IAE3D,MAAM,YAAY,GAAG,CAAC,KAA0B,EAAQ,EAAE;QACxD,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAE,KAAyB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrG,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAED,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1B,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,KAA4C,EAAQ,EAAE;QAC5E,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAE,KAA8B,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5G,YAAY,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,WAAW;QACd,GAAG,EAAE,YAAY;QACjB,KAAK,EAAE,cAAc;KACtB,CAAC;AACJ,CAAC,CAAC"}
@@ -153,6 +153,137 @@ describe('withGlobalState', () => {
153
153
  expect(callback).not.toHaveBeenCalled();
154
154
  });
155
155
  });
156
+ describe('clearListeners', () => {
157
+ it('should clear all event listeners', () => {
158
+ const scene = buildSceneMock();
159
+ const key = `test-state-${Date.now()}`;
160
+ const initialState = { ...baseState, life: 100 };
161
+ const callback1 = vi.fn();
162
+ const callback2 = vi.fn();
163
+ const callback3 = vi.fn();
164
+ const hook = withGlobalState(scene, key, initialState);
165
+ // Add multiple listeners
166
+ hook.on('change', callback1);
167
+ hook.on('change', callback2);
168
+ hook.once('change', callback3);
169
+ // Verify listeners are working
170
+ hook.set({ ...baseState, life: 90 });
171
+ expect(callback1).toHaveBeenCalled();
172
+ expect(callback2).toHaveBeenCalled();
173
+ expect(callback3).toHaveBeenCalled();
174
+ // Clear all listeners
175
+ hook.clearListeners();
176
+ // Verify listeners are cleared
177
+ callback1.mockClear();
178
+ callback2.mockClear();
179
+ callback3.mockClear();
180
+ hook.set({ ...baseState, life: 80 });
181
+ expect(callback1).not.toHaveBeenCalled();
182
+ expect(callback2).not.toHaveBeenCalled();
183
+ expect(callback3).not.toHaveBeenCalled();
184
+ });
185
+ it('should clear listeners added via onChange (deprecated)', () => {
186
+ const scene = buildSceneMock();
187
+ const key = `test-state-${Date.now()}`;
188
+ const initialState = { ...baseState, life: 100 };
189
+ const callback = vi.fn();
190
+ const hook = withGlobalState(scene, key, initialState);
191
+ // Add listener via deprecated onChange
192
+ hook.onChange(callback);
193
+ // Verify listener is working
194
+ hook.set({ ...baseState, life: 90 });
195
+ expect(callback).toHaveBeenCalled();
196
+ // Clear all listeners
197
+ hook.clearListeners();
198
+ // Verify listener is cleared
199
+ callback.mockClear();
200
+ hook.set({ ...baseState, life: 80 });
201
+ expect(callback).not.toHaveBeenCalled();
202
+ });
203
+ it('should work with debug mode enabled', () => {
204
+ const scene = buildSceneMock();
205
+ const key = `test-state-${Date.now()}`;
206
+ const initialState = { ...baseState, life: 100 };
207
+ // Test that debug mode doesn't throw errors
208
+ const hook = withGlobalState(scene, key, initialState, { debug: true });
209
+ const callback = vi.fn();
210
+ hook.on('change', callback);
211
+ // Clear listeners with debug enabled - should not throw
212
+ expect(() => hook.clearListeners()).not.toThrow();
213
+ });
214
+ it('should not affect other state instances', () => {
215
+ const scene = buildSceneMock();
216
+ const key1 = `test-state-1-${Date.now()}`;
217
+ const key2 = `test-state-2-${Date.now()}`;
218
+ const initialState = { ...baseState, life: 100 };
219
+ const callback1 = vi.fn();
220
+ const callback2 = vi.fn();
221
+ const hook1 = withGlobalState(scene, key1, initialState);
222
+ const hook2 = withGlobalState(scene, key2, initialState);
223
+ // Add listeners to both hooks
224
+ hook1.on('change', callback1);
225
+ hook2.on('change', callback2);
226
+ // Clear listeners from hook1 only
227
+ hook1.clearListeners();
228
+ // Verify hook1 listeners are cleared but hook2 listeners still work
229
+ hook1.set({ ...baseState, life: 90 });
230
+ hook2.set({ ...baseState, life: 90 });
231
+ expect(callback1).not.toHaveBeenCalled();
232
+ expect(callback2).toHaveBeenCalled();
233
+ });
234
+ it('should work when no listeners are present', () => {
235
+ const scene = buildSceneMock();
236
+ const key = `test-state-${Date.now()}`;
237
+ const initialState = { ...baseState, life: 100 };
238
+ const hook = withGlobalState(scene, key, initialState);
239
+ // Should not throw when clearing listeners that don't exist
240
+ expect(() => hook.clearListeners()).not.toThrow();
241
+ });
242
+ it('should clear listeners after partial removal', () => {
243
+ const scene = buildSceneMock();
244
+ const key = `test-state-${Date.now()}`;
245
+ const initialState = { ...baseState, life: 100 };
246
+ const callback1 = vi.fn();
247
+ const callback2 = vi.fn();
248
+ const callback3 = vi.fn();
249
+ const hook = withGlobalState(scene, key, initialState);
250
+ // Add multiple listeners
251
+ hook.on('change', callback1);
252
+ hook.on('change', callback2);
253
+ hook.on('change', callback3);
254
+ // Remove one listener manually
255
+ hook.off('change', callback2);
256
+ // Clear all remaining listeners
257
+ hook.clearListeners();
258
+ // Verify all listeners are cleared
259
+ callback1.mockClear();
260
+ callback2.mockClear();
261
+ callback3.mockClear();
262
+ hook.set({ ...baseState, life: 90 });
263
+ expect(callback1).not.toHaveBeenCalled();
264
+ expect(callback2).not.toHaveBeenCalled();
265
+ expect(callback3).not.toHaveBeenCalled();
266
+ });
267
+ it('should work with global state persistence', () => {
268
+ const scene = buildSceneMock();
269
+ const key = `test-state-${Date.now()}`;
270
+ const initialState = { ...baseState, life: 100 };
271
+ const callback = vi.fn();
272
+ const hook = withGlobalState(scene, key, initialState);
273
+ // Add listener
274
+ hook.on('change', callback);
275
+ // Verify listener works
276
+ hook.set({ ...baseState, life: 90 });
277
+ expect(callback).toHaveBeenCalled();
278
+ // Clear listeners
279
+ hook.clearListeners();
280
+ // Verify listener is cleared but state persists
281
+ callback.mockClear();
282
+ hook.set({ ...baseState, life: 80 });
283
+ expect(callback).not.toHaveBeenCalled();
284
+ expect(hook.get()).toEqual({ ...baseState, life: 80 });
285
+ });
286
+ });
156
287
  });
157
288
  });
158
289
  //# sourceMappingURL=with-global-state.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-global-state.spec.js","sourceRoot":"","sources":["../../src/hooks/with-global-state.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"with-global-state.spec.js","sourceRoot":"","sources":["../../src/hooks/with-global-state.spec.ts"],"names":[],"mappings":"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"}