phaser-hooks 0.2.1 → 0.3.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 (32) hide show
  1. package/dist/hooks/type.d.ts +16 -0
  2. package/dist/hooks/type.d.ts.map +1 -1
  3. package/dist/hooks/with-computed-state.d.ts.map +1 -1
  4. package/dist/hooks/with-computed-state.js +5 -1
  5. package/dist/hooks/with-computed-state.js.map +1 -1
  6. package/dist/hooks/with-debounced-state.d.ts.map +1 -1
  7. package/dist/hooks/with-debounced-state.js +3 -0
  8. package/dist/hooks/with-debounced-state.js.map +1 -1
  9. package/dist/hooks/with-global-state.spec.d.ts +2 -0
  10. package/dist/hooks/with-global-state.spec.d.ts.map +1 -0
  11. package/dist/hooks/with-global-state.spec.js +158 -0
  12. package/dist/hooks/with-global-state.spec.js.map +1 -0
  13. package/dist/hooks/with-local-state.spec.d.ts +2 -0
  14. package/dist/hooks/with-local-state.spec.d.ts.map +1 -0
  15. package/dist/hooks/with-local-state.spec.js +155 -0
  16. package/dist/hooks/with-local-state.spec.js.map +1 -0
  17. package/dist/hooks/with-state-def.d.ts +32 -5
  18. package/dist/hooks/with-state-def.d.ts.map +1 -1
  19. package/dist/hooks/with-state-def.js +288 -104
  20. package/dist/hooks/with-state-def.js.map +1 -1
  21. package/dist/hooks/with-undoable-state.d.ts.map +1 -1
  22. package/dist/hooks/with-undoable-state.js +3 -0
  23. package/dist/hooks/with-undoable-state.js.map +1 -1
  24. package/dist/hooks/with-undoable-state.spec.d.ts +2 -0
  25. package/dist/hooks/with-undoable-state.spec.d.ts.map +1 -0
  26. package/dist/hooks/with-undoable-state.spec.js +262 -0
  27. package/dist/hooks/with-undoable-state.spec.js.map +1 -0
  28. package/dist/test/scene-mock.d.ts +3 -0
  29. package/dist/test/scene-mock.d.ts.map +1 -0
  30. package/dist/test/scene-mock.js +13 -0
  31. package/dist/test/scene-mock.js.map +1 -0
  32. package/package.json +1 -1
@@ -55,5 +55,21 @@ export type HookState<T> = {
55
55
  * @param callback Function to call when state changes
56
56
  */
57
57
  onChange: (callback: StateChangeCallback<T>) => void;
58
+ /**
59
+ * Registers a callback to be called whenever the state changes
60
+ * @param callback Function to call when state changes
61
+ */
62
+ on: (event: 'change', callback: () => void) => () => void;
63
+ /**
64
+ * Registers a callback to be called whenever the state changes
65
+ * @param callback Function to call when state changes
66
+ */
67
+ once: (event: 'change', callback: () => void) => () => void;
68
+ /**
69
+ * Removes an event listener
70
+ * @param event The event to remove
71
+ * @param callback The callback to remove
72
+ */
73
+ off: (event: 'change', callback: () => void) => void;
58
74
  };
59
75
  //# 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;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;;;;;;;;;;;;;;;;;;;;;;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 +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,CAoBb,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,CAwBb,CAAC"}
@@ -25,7 +25,8 @@ export const withComputedState = (scene, key, sourceState, selector) => {
25
25
  const initialValue = selector(sourceState.get());
26
26
  const computedState = withLocalState(scene, key, initialValue);
27
27
  // Update computed state when source changes
28
- sourceState.onChange(newSourceValue => {
28
+ sourceState.on('change', () => {
29
+ const newSourceValue = sourceState.get();
29
30
  const newComputedValue = selector(newSourceValue);
30
31
  computedState.set(newComputedValue);
31
32
  });
@@ -35,6 +36,9 @@ export const withComputedState = (scene, key, sourceState, selector) => {
35
36
  throw new Error(`[withComputedState] Cannot directly set computed state "${key}". Update the source state instead.`);
36
37
  },
37
38
  onChange: computedState.onChange,
39
+ on: computedState.on,
40
+ once: computedState.once,
41
+ off: computedState.off,
38
42
  };
39
43
  };
40
44
  //# 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,QAAQ,CAAC,cAAc,CAAC,EAAE;QACpC,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;KACjC,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,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 +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,CAoBb,CAAC"}
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"}
@@ -34,6 +34,9 @@ export const withDebouncedState = (scene, key, initialValue, debounceMs) => {
34
34
  get: actualState.get,
35
35
  set: debouncedSet,
36
36
  onChange: actualState.onChange,
37
+ on: actualState.on,
38
+ once: actualState.once,
39
+ off: actualState.off,
37
40
  };
38
41
  };
39
42
  //# 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;KAC/B,CAAC;AACJ,CAAC,CAAC"}
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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with-global-state.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-global-state.spec.d.ts","sourceRoot":"","sources":["../../src/hooks/with-global-state.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
1
+ /* eslint-disable max-lines-per-function */
2
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
3
+ import { buildSceneMock } from '../test/scene-mock';
4
+ import { withGlobalState } from './with-global-state';
5
+ describe('withGlobalState', () => {
6
+ const baseState = {
7
+ life: 100,
8
+ };
9
+ beforeEach(() => {
10
+ vi.clearAllMocks();
11
+ });
12
+ describe('validation', () => {
13
+ it('should throw an error if the scene is not provided', () => {
14
+ const scene = null;
15
+ expect(() => withGlobalState(scene, 'test-state', baseState)).toThrow('[withGlobalState] Scene parameter is required');
16
+ });
17
+ it('should throw an error if the registry manager is not provided', () => {
18
+ const scene = buildSceneMock();
19
+ // @ts-expect-error - we want to test the error case
20
+ scene.registry = null;
21
+ expect(() => withGlobalState(scene, 'test-state', baseState)).toThrow('[withStateDef] Scene registry is not available. Ensure the scene is properly initialized.');
22
+ });
23
+ });
24
+ it('should be defined', () => {
25
+ expect(withGlobalState).toBeDefined();
26
+ });
27
+ describe('initial state definition', () => {
28
+ it('should set initial state value if not provided in first call', () => {
29
+ const scene = buildSceneMock();
30
+ const key = `test-state-${Date.now()}`;
31
+ const initialState = { ...baseState, life: 90 };
32
+ const setSpy = vi.spyOn(scene.registry, 'set');
33
+ withGlobalState(scene, key, initialState);
34
+ // withGlobalState uses scene.registry, not scene.data, for global state
35
+ expect(setSpy).toHaveBeenCalledWith(`phaser-hooks:global:${key}`, initialState);
36
+ setSpy.mockRestore();
37
+ });
38
+ it('should not set state in second call', () => {
39
+ const scene = buildSceneMock();
40
+ const key = `test-state-${Date.now()}`;
41
+ const initialState = { ...baseState, life: 75 };
42
+ const setSpy = vi.spyOn(scene.registry, 'set');
43
+ withGlobalState(scene, key, initialState);
44
+ expect(setSpy).toHaveBeenCalledWith(`phaser-hooks:global:${key}`, initialState);
45
+ // second call should not set state
46
+ const hook = withGlobalState(scene, key, {
47
+ ...baseState,
48
+ life: 100,
49
+ });
50
+ expect(setSpy).toHaveBeenCalledTimes(1);
51
+ expect(hook.get()).toEqual(initialState);
52
+ setSpy.mockRestore();
53
+ });
54
+ });
55
+ describe('get/set', () => {
56
+ it('should return the initial state', () => {
57
+ const scene = buildSceneMock();
58
+ const key = `test-state-${Date.now()}`;
59
+ const initialState = { ...baseState, life: 100 };
60
+ const hook = withGlobalState(scene, key, initialState);
61
+ expect(hook.get()).toEqual(initialState);
62
+ });
63
+ it('should return the updated state', () => {
64
+ const scene = buildSceneMock();
65
+ const key = `test-state-${Date.now()}`;
66
+ const initialState = { ...baseState, life: 100 };
67
+ const hook = withGlobalState(scene, key, initialState);
68
+ hook.set({ ...baseState, life: 90 });
69
+ expect(hook.get()).toEqual({ ...baseState, life: 90 });
70
+ });
71
+ });
72
+ describe('events', () => {
73
+ describe('on', () => {
74
+ it('should register a change listener', () => {
75
+ const scene = buildSceneMock();
76
+ const key = `test-state-${Date.now()}`;
77
+ const initialState = { ...baseState, life: 100 };
78
+ const callback = vi.fn();
79
+ const hook = withGlobalState(scene, key, initialState);
80
+ hook.on('change', callback);
81
+ hook.set({ ...baseState, life: 90 });
82
+ expect(callback).toHaveBeenCalled();
83
+ });
84
+ it('should call multiple listeners', () => {
85
+ const scene = buildSceneMock();
86
+ const key = `test-state-${Date.now()}`;
87
+ const initialState = { ...baseState, life: 100 };
88
+ const callback1 = vi.fn();
89
+ const callback2 = vi.fn();
90
+ const hook = withGlobalState(scene, key, initialState);
91
+ hook.on('change', callback1);
92
+ hook.on('change', callback2);
93
+ hook.set({ ...baseState, life: 90 });
94
+ expect(callback1).toHaveBeenCalled();
95
+ expect(callback2).toHaveBeenCalled();
96
+ });
97
+ it('should not call listener when call unsubscribe returned by .on function', () => {
98
+ const scene = buildSceneMock();
99
+ const key = `test-state-${Date.now()}`;
100
+ const initialState = { ...baseState, life: 100 };
101
+ const callback = vi.fn();
102
+ const hook = withGlobalState(scene, key, initialState);
103
+ const unsubscribe = hook.on('change', callback);
104
+ hook.set({ ...baseState, life: 90 });
105
+ expect(callback).toHaveBeenCalled();
106
+ unsubscribe();
107
+ hook.set({ ...baseState, life: 100 });
108
+ expect(callback).toHaveBeenCalledTimes(1);
109
+ });
110
+ it('should not call listener when add .off method to remove listener', () => {
111
+ const scene = buildSceneMock();
112
+ const key = `test-state-${Date.now()}`;
113
+ const initialState = { ...baseState, life: 100 };
114
+ const callback = vi.fn();
115
+ const hook = withGlobalState(scene, key, initialState);
116
+ hook.on('change', callback);
117
+ hook.off('change', callback);
118
+ hook.set({ ...baseState, life: 90 });
119
+ expect(callback).not.toHaveBeenCalled();
120
+ });
121
+ it('should call listener when call .once method', () => {
122
+ const scene = buildSceneMock();
123
+ const key = `test-state-${Date.now()}`;
124
+ const initialState = { ...baseState, life: 100 };
125
+ const callback = vi.fn();
126
+ const hook = withGlobalState(scene, key, initialState);
127
+ hook.once('change', callback);
128
+ hook.set({ ...baseState, life: 90 });
129
+ expect(callback).toHaveBeenCalled();
130
+ });
131
+ it('should call listener once when call .once method', () => {
132
+ const scene = buildSceneMock();
133
+ const key = `test-state-${Date.now()}`;
134
+ const initialState = { ...baseState, life: 100 };
135
+ const callback = vi.fn();
136
+ const hook = withGlobalState(scene, key, initialState);
137
+ hook.once('change', callback);
138
+ hook.set({ ...baseState, life: 90 });
139
+ expect(callback).toHaveBeenCalled();
140
+ hook.set({ ...baseState, life: 100 });
141
+ expect(callback).toHaveBeenCalledTimes(1);
142
+ });
143
+ it('should not call listener when call unsubscribe returned by .once function', () => {
144
+ const scene = buildSceneMock();
145
+ const key = `test-state-${Date.now()}`;
146
+ const initialState = { ...baseState, life: 100 };
147
+ const callback = vi.fn();
148
+ const hook = withGlobalState(scene, key, initialState);
149
+ const unsubscribe = hook.once('change', callback);
150
+ unsubscribe();
151
+ hook.set({ ...baseState, life: 90 });
152
+ hook.set({ ...baseState, life: 100 });
153
+ expect(callback).not.toHaveBeenCalled();
154
+ });
155
+ });
156
+ });
157
+ });
158
+ //# sourceMappingURL=with-global-state.spec.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with-local-state.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-local-state.spec.d.ts","sourceRoot":"","sources":["../../src/hooks/with-local-state.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,155 @@
1
+ /* eslint-disable max-lines-per-function */
2
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
3
+ import { buildSceneMock } from "../test/scene-mock";
4
+ import { withLocalState } from "./with-local-state";
5
+ describe('withLocalState', () => {
6
+ const baseState = {
7
+ life: 100,
8
+ };
9
+ beforeEach(() => {
10
+ vi.clearAllMocks();
11
+ });
12
+ describe('validation', () => {
13
+ it('should throw an error if the scene is not provided', () => {
14
+ // @ts-expect-error - we want to test the error case
15
+ expect(() => withLocalState(null, 'test-state', baseState)).toThrow('[withLocalState] Scene parameter is required');
16
+ });
17
+ it('should throw an error if the data manager is not provided', () => {
18
+ const scene = buildSceneMock();
19
+ // @ts-expect-error - we want to test the error case
20
+ scene.data = null;
21
+ expect(() => withLocalState(scene, 'test-state', baseState)).toThrow('[withStateDef] Scene data is not available. Ensure the scene is properly initialized.');
22
+ });
23
+ });
24
+ it('should be defined', () => {
25
+ expect(withLocalState).toBeDefined();
26
+ });
27
+ describe('initial state definition', () => {
28
+ it('should set initial state value if not provided in first call', () => {
29
+ const scene = buildSceneMock();
30
+ const key = `test-state-${Date.now()}`;
31
+ const initialState = { ...baseState, life: 90 };
32
+ const setSpy = vi.spyOn(scene.data, 'set');
33
+ withLocalState(scene, key, initialState);
34
+ // withLocalState uses scene.data, not scene.registry, for local state
35
+ expect(setSpy).toHaveBeenCalledWith(`phaser-hooks:local:test-scene:${key}`, initialState);
36
+ setSpy.mockRestore();
37
+ });
38
+ it('should not set state in second call', () => {
39
+ const scene = buildSceneMock();
40
+ const key = `test-state-${Date.now()}`;
41
+ const initialState = { ...baseState, life: 75 };
42
+ const setSpy = vi.spyOn(scene.data, 'set');
43
+ withLocalState(scene, key, initialState);
44
+ expect(setSpy).toHaveBeenCalledWith(`phaser-hooks:local:test-scene:${key}`, initialState);
45
+ // second call should not set state
46
+ const hook = withLocalState(scene, key, { ...baseState, life: 100 });
47
+ expect(setSpy).toHaveBeenCalledTimes(1);
48
+ expect(hook.get()).toEqual(initialState);
49
+ setSpy.mockRestore();
50
+ });
51
+ });
52
+ describe('get/set', () => {
53
+ it('should return the initial state', () => {
54
+ const scene = buildSceneMock();
55
+ const key = `test-state-${Date.now()}`;
56
+ const initialState = { ...baseState, life: 100 };
57
+ const hook = withLocalState(scene, key, initialState);
58
+ expect(hook.get()).toEqual(initialState);
59
+ });
60
+ it('should return the updated state', () => {
61
+ const scene = buildSceneMock();
62
+ const key = `test-state-${Date.now()}`;
63
+ const initialState = { ...baseState, life: 100 };
64
+ const hook = withLocalState(scene, key, initialState);
65
+ hook.set({ ...baseState, life: 90 });
66
+ expect(hook.get()).toEqual({ ...baseState, life: 90 });
67
+ });
68
+ });
69
+ describe('events', () => {
70
+ describe('on', () => {
71
+ it('should register a change listener', () => {
72
+ const scene = buildSceneMock();
73
+ const key = `test-state-${Date.now()}`;
74
+ const initialState = { ...baseState, life: 100 };
75
+ const callback = vi.fn();
76
+ const hook = withLocalState(scene, key, initialState);
77
+ hook.on('change', callback);
78
+ hook.set({ ...baseState, life: 90 });
79
+ expect(callback).toHaveBeenCalled();
80
+ });
81
+ it('should call multiple listeners', () => {
82
+ const scene = buildSceneMock();
83
+ const key = `test-state-${Date.now()}`;
84
+ const initialState = { ...baseState, life: 100 };
85
+ const callback1 = vi.fn();
86
+ const callback2 = vi.fn();
87
+ const hook = withLocalState(scene, key, initialState);
88
+ hook.on('change', callback1);
89
+ hook.on('change', callback2);
90
+ hook.set({ ...baseState, life: 90 });
91
+ expect(callback1).toHaveBeenCalled();
92
+ expect(callback2).toHaveBeenCalled();
93
+ });
94
+ it('should not call listener when call unsubscribe returned by .on function', () => {
95
+ const scene = buildSceneMock();
96
+ const key = `test-state-${Date.now()}`;
97
+ const initialState = { ...baseState, life: 100 };
98
+ const callback = vi.fn();
99
+ const hook = withLocalState(scene, key, initialState);
100
+ const unsubscribe = hook.on('change', callback);
101
+ hook.set({ ...baseState, life: 90 });
102
+ expect(callback).toHaveBeenCalled();
103
+ unsubscribe();
104
+ hook.set({ ...baseState, life: 100 });
105
+ expect(callback).toHaveBeenCalledTimes(1);
106
+ });
107
+ it('should not call listener when add .off method to remove listener', () => {
108
+ const scene = buildSceneMock();
109
+ const key = `test-state-${Date.now()}`;
110
+ const initialState = { ...baseState, life: 100 };
111
+ const callback = vi.fn();
112
+ const hook = withLocalState(scene, key, initialState);
113
+ hook.on('change', callback);
114
+ hook.off('change', callback);
115
+ hook.set({ ...baseState, life: 90 });
116
+ expect(callback).not.toHaveBeenCalled();
117
+ });
118
+ it('should call listener when call .once method', () => {
119
+ const scene = buildSceneMock();
120
+ const key = `test-state-${Date.now()}`;
121
+ const initialState = { ...baseState, life: 100 };
122
+ const callback = vi.fn();
123
+ const hook = withLocalState(scene, key, initialState);
124
+ hook.once('change', callback);
125
+ hook.set({ ...baseState, life: 90 });
126
+ expect(callback).toHaveBeenCalled();
127
+ });
128
+ it('should call listener once when call .once method', () => {
129
+ const scene = buildSceneMock();
130
+ const key = `test-state-${Date.now()}`;
131
+ const initialState = { ...baseState, life: 100 };
132
+ const callback = vi.fn();
133
+ const hook = withLocalState(scene, key, initialState);
134
+ hook.once('change', callback);
135
+ hook.set({ ...baseState, life: 90 });
136
+ expect(callback).toHaveBeenCalled();
137
+ hook.set({ ...baseState, life: 100 });
138
+ expect(callback).toHaveBeenCalledTimes(1);
139
+ });
140
+ it('should not call listener when call unsubscribe returned by .once function', () => {
141
+ const scene = buildSceneMock();
142
+ const key = `test-state-${Date.now()}`;
143
+ const initialState = { ...baseState, life: 100 };
144
+ const callback = vi.fn();
145
+ const hook = withLocalState(scene, key, initialState);
146
+ const unsubscribe = hook.once('change', callback);
147
+ unsubscribe();
148
+ hook.set({ ...baseState, life: 90 });
149
+ hook.set({ ...baseState, life: 100 });
150
+ expect(callback).not.toHaveBeenCalled();
151
+ });
152
+ });
153
+ });
154
+ });
155
+ //# sourceMappingURL=with-local-state.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-local-state.spec.js","sourceRoot":"","sources":["../../src/hooks/with-local-state.spec.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,11 @@ import * as Phaser from 'phaser';
2
2
  import { type HookState } from './type';
3
3
  /**
4
4
  * Configuration options for state definition
5
+ * @typedef {Object} StateDefOptions
6
+ * @property {boolean} [persistent] Whether to persist state across scene changes. @default true
7
+ * @property {(value: unknown) => boolean | string} [validator] Custom validator function for state values. Returns true if valid, false or error message if invalid.
8
+ * @property {boolean} [debug] Whether to enable debug logging for this state. @default false
9
+ * @property {boolean} [global] Whether to use global state. @default false
5
10
  */
6
11
  export type StateDefOptions = {
7
12
  /**
@@ -35,11 +40,11 @@ export type StateDefOptions = {
35
40
  * for most use cases unless you need specific registry control.
36
41
  *
37
42
  * @template T The type of the state value
38
- * @param scene The Phaser scene instance that owns this state
39
- * @param key Unique identifier for the state in the registry
40
- * @param initialValue Optional initial value to set if key doesn't exist
41
- * @param options Optional configuration for state behavior
42
- * @returns HookState interface for managing the state
43
+ * @param {Phaser.Scene} scene The Phaser scene instance that owns this state
44
+ * @param {string} key Unique identifier for the state in the registry
45
+ * @param {T} [initialValue] Optional initial value to set if key doesn't exist
46
+ * @param {StateDefOptions} [options] Optional configuration for state behavior
47
+ * @returns {HookState<T>} HookState interface for managing the state
43
48
  *
44
49
  * @throws {Error} When scene or registry is not available
45
50
  * @throws {Error} When key is invalid (empty or non-string)
@@ -74,7 +79,29 @@ export type StateDefOptions = {
74
79
  * 'initial',
75
80
  * { debug: true }
76
81
  * );
82
+ *
83
+ * // Listening to changes
84
+ * playerState.on('change', (newValue, oldValue) => {
85
+ * console.log('Player state changed:', newValue, oldValue);
86
+ * });
87
+ *
88
+ * // Listening to changes only once
89
+ * playerState.once('change', (newValue, oldValue) => {
90
+ * console.log('Player state changed once:', newValue, oldValue);
91
+ * });
92
+ *
93
+ * // Removing a listener
94
+ * const unsubscribe = playerState.on('change', callback);
95
+ * unsubscribe(); // Removes the listener
96
+ * playerState.off('change', callback); // Also removes the listener
77
97
  * ```
98
+ *
99
+ * @method get Gets the current state value
100
+ * @method set Sets a new state value and triggers change listeners
101
+ * @method on Registers a callback to be called whenever the state changes. Returns an unsubscribe function.
102
+ * @method once Registers a callback to be called once when the state changes. Returns an unsubscribe function.
103
+ * @method off Removes an event listener for the state
104
+ * @method onChange (DEPRECATED) Registers a callback to be called whenever the state changes
78
105
  */
79
106
  export declare const withStateDef: <T>(scene: Phaser.Scene, key: string, initialValue?: T, options?: StateDefOptions) => HookState<T>;
80
107
  //# sourceMappingURL=with-state-def.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-state-def.d.ts","sourceRoot":"","sources":["../../src/hooks/with-state-def.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,KAAK,SAAS,EAA4B,MAAM,QAAQ,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,MAAM,CAAC;IAEjD;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAIH,eAAO,MAAM,YAAY,GAAI,CAAC,EAC5B,OAAO,MAAM,CAAC,KAAK,EACnB,KAAK,MAAM,EACX,eAAe,CAAC,EAChB,UAAS,eAAoB,KAC5B,SAAS,CAAC,CAAC,CAgIb,CAAC"}
1
+ {"version":3,"file":"with-state-def.d.ts","sourceRoot":"","sources":["../../src/hooks/with-state-def.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,KAAK,SAAS,EAA4B,MAAM,QAAQ,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,MAAM,CAAC;IAEjD;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAqSF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAC5B,OAAO,MAAM,CAAC,KAAK,EACnB,KAAK,MAAM,EACX,eAAe,CAAC,EAChB,UAAS,eAAoB,KAC5B,SAAS,CAAC,CAAC,CAiDb,CAAC"}