phaser-hooks 0.1.0 → 0.1.1

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validators.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.spec.d.ts","sourceRoot":"","sources":["../../src/hooks/validators.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ /* eslint-disable no-magic-numbers */
2
+ import { describe, expect, it } from 'vitest';
3
+ import { validators } from './validators';
4
+ /* eslint-disable max-lines-per-function */
5
+ describe('validators', () => {
6
+ describe('numberRange', () => {
7
+ const validator = validators.numberRange(0, 100);
8
+ it('should return true for valid numbers in range', () => {
9
+ expect(validator(50)).toBe(true);
10
+ expect(validator(0)).toBe(true);
11
+ expect(validator(100)).toBe(true);
12
+ });
13
+ it('should return error message for invalid numbers', () => {
14
+ expect(validator(-1)).toBe('Value must be between 0 and 100');
15
+ expect(validator(101)).toBe('Value must be between 0 and 100');
16
+ expect(validator('50')).toBe('Value must be a number');
17
+ expect(validator(NaN)).toBe('Value must be a number');
18
+ });
19
+ });
20
+ describe('nonEmptyString', () => {
21
+ it('should return true for valid non-empty strings', () => {
22
+ expect(validators.nonEmptyString('test')).toBe(true);
23
+ expect(validators.nonEmptyString(' test ')).toBe(true);
24
+ });
25
+ it('should return error message for invalid strings', () => {
26
+ const message = 'Value must be a non-empty string';
27
+ expect(validators.nonEmptyString('')).toBe(message);
28
+ expect(validators.nonEmptyString(' ')).toBe(message);
29
+ expect(validators.nonEmptyString(123)).toBe(message);
30
+ });
31
+ });
32
+ describe('arrayLength', () => {
33
+ const validator = validators.arrayLength(2, 4);
34
+ it('should return true for arrays with valid length', () => {
35
+ expect(validator([1, 2])).toBe(true);
36
+ expect(validator([1, 2, 3])).toBe(true);
37
+ expect(validator([1, 2, 3, 4])).toBe(true);
38
+ });
39
+ it('should return error message for invalid arrays', () => {
40
+ expect(validator([1])).toBe('Array must have at least 2 items');
41
+ expect(validator([1, 2, 3, 4, 5])).toBe('Array must have at most 4 items');
42
+ expect(validator('not an array')).toBe('Value must be an array');
43
+ });
44
+ it('should work with only minimum length specified', () => {
45
+ const minOnlyValidator = validators.arrayLength(2);
46
+ expect(minOnlyValidator([1, 2])).toBe(true);
47
+ expect(minOnlyValidator([1, 2, 3, 4, 5])).toBe(true);
48
+ expect(minOnlyValidator([1])).toBe('Array must have at least 2 items');
49
+ });
50
+ });
51
+ describe('oneOf', () => {
52
+ const validator = validators.oneOf(['a', 'b', 'c']);
53
+ it('should return true for allowed values', () => {
54
+ expect(validator('a')).toBe(true);
55
+ expect(validator('b')).toBe(true);
56
+ expect(validator('c')).toBe(true);
57
+ });
58
+ it('should return error message for disallowed values', () => {
59
+ expect(validator('d')).toBe('Value must be one of: a, b, c');
60
+ expect(validator(123)).toBe('Value must be one of: a, b, c');
61
+ });
62
+ });
63
+ });
64
+ //# sourceMappingURL=validators.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.spec.js","sourceRoot":"","sources":["../../src/hooks/validators.spec.ts"],"names":[],"mappings":"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"}
@@ -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,32 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { withGlobalState } from './with-global-state';
3
+ describe('withGlobalState', () => {
4
+ it('should create a global state and get the initial value', () => {
5
+ const state = withGlobalState('test', 0);
6
+ expect(state.get()).toBe(0);
7
+ });
8
+ it('should create a global state and set a new value', () => {
9
+ const state = withGlobalState('test2', 0);
10
+ expect(state.get()).toBe(0);
11
+ state.set(1);
12
+ expect(state.get()).toBe(1);
13
+ });
14
+ it('should create a global state and set a new value with a validator', () => {
15
+ const state = withGlobalState('test3', 1, {
16
+ validator: (value) => {
17
+ return typeof value === 'number' && value > 0;
18
+ },
19
+ });
20
+ expect(state.get()).toBe(1);
21
+ expect(() => state.set(-1)).toThrow();
22
+ expect(state.get()).toBe(1);
23
+ });
24
+ it('should create a global state and listen to changes', () => {
25
+ const state = withGlobalState('test4', 0);
26
+ const callback = vi.fn();
27
+ state.onChange(callback);
28
+ state.set(1);
29
+ expect(callback).toHaveBeenCalledWith(1, 0);
30
+ });
31
+ });
32
+ //# 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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAsB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE5D,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACxD,MAAM,KAAK,GAAsB,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE7D,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEb,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QACzE,MAAM,KAAK,GAAsB,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE;YACzD,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE;gBAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC;YAClD,CAAC;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,KAAK,GAAsB,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEb,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phaser-hooks",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Hooks in react-style for Phaser games",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -34,29 +34,29 @@
34
34
  "homepage": "https://github.com/renatocassino/phaser-toolkit/tree/main/packages/phaser-hooks#readme",
35
35
  "devDependencies": {
36
36
  "@eslint-recommended/eslint-config": "^28.0.0",
37
- "@types/node": "^24.1.0",
38
- "@typescript-eslint/eslint-plugin": "^7.0.0",
37
+ "@types/node": "^24.3.0",
38
+ "@typescript-eslint/eslint-plugin": "^8.40.0",
39
39
  "@typescript-eslint/parser": "^6.15.0",
40
40
  "eslint": "^8.55.0",
41
- "eslint-config-prettier": "^9.1.0",
41
+ "eslint-config-prettier": "^10.1.8",
42
42
  "eslint-plugin-import": "^2.29.1",
43
43
  "eslint-plugin-node": "^11.1.0",
44
44
  "eslint-plugin-prefer-arrow": "^1.2.3",
45
- "eslint-plugin-promise": "^6.1.1",
46
- "eslint-plugin-security": "^1.7.1",
47
- "eslint-plugin-sonarjs": "^0.23.0",
45
+ "eslint-plugin-promise": "^7.2.1",
46
+ "eslint-plugin-security": "^3.0.1",
47
+ "eslint-plugin-sonarjs": "^3.0.4",
48
48
  "eslint-plugin-unicorn": "^50.0.1",
49
49
  "typescript": "^5.3.0",
50
50
  "vitest": "^3.2.4"
51
51
  },
52
52
  "peerDependencies": {
53
- "phaser": "^3.70.0"
53
+ "phaser": "*"
54
54
  },
55
55
  "publishConfig": {
56
56
  "access": "public"
57
57
  },
58
58
  "scripts": {
59
- "build": "tsc --build",
59
+ "build": "tsc --build --force",
60
60
  "dev": "tsc --build --watch",
61
61
  "clean": "rm -rf dist",
62
62
  "test": "vitest run",
@@ -64,6 +64,7 @@
64
64
  "typecheck": "tsc --noEmit",
65
65
  "lint": "eslint src --ext .ts,.tsx --max-warnings 0",
66
66
  "lint:fix": "eslint src --ext .ts,.tsx --fix",
67
- "lint:report": "eslint src --ext .ts,.tsx --format html --output-file eslint-report.html"
67
+ "lint:report": "eslint src --ext .ts,.tsx --format html --output-file eslint-report.html",
68
+ "validate": "pnpm run lint && pnpm run typecheck && pnpm run test && lint-staged"
68
69
  }
69
70
  }