phaser-hooks 0.4.0 โ 0.6.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.
- package/README.md +213 -677
- package/dist/hooks/type.d.ts +20 -2
- package/dist/hooks/type.d.ts.map +1 -1
- package/dist/hooks/with-debounced-state.d.ts.map +1 -1
- package/dist/hooks/with-debounced-state.js +8 -1
- package/dist/hooks/with-debounced-state.js.map +1 -1
- package/dist/hooks/with-local-state.spec.js +598 -0
- package/dist/hooks/with-local-state.spec.js.map +1 -1
- package/dist/hooks/with-state-def.d.ts +6 -0
- package/dist/hooks/with-state-def.d.ts.map +1 -1
- package/dist/hooks/with-state-def.js +94 -17
- package/dist/hooks/with-state-def.js.map +1 -1
- package/dist/hooks/with-undoable-state.d.ts.map +1 -1
- package/dist/hooks/with-undoable-state.js +12 -3
- package/dist/hooks/with-undoable-state.js.map +1 -1
- package/dist/phaser-hooks.js +1146 -0
- package/dist/phaser-hooks.min.js +1 -0
- package/dist/utils/__tests__/merge.test.d.ts +2 -0
- package/dist/utils/__tests__/merge.test.d.ts.map +1 -0
- package/dist/utils/__tests__/merge.test.js +390 -0
- package/dist/utils/__tests__/merge.test.js.map +1 -0
- package/dist/utils/merge.d.ts +17 -0
- package/dist/utils/merge.d.ts.map +1 -0
- package/dist/utils/merge.js +70 -0
- package/dist/utils/merge.js.map +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).PhaserHooks={})}(this,function(t){"use strict";var e={numberRange:function(t,e){return function(n){var o=n;return"number"!=typeof o||Number.isNaN(o)?"Value must be a number":!(o<t||o>e)||"Value must be between ".concat(t," and ").concat(e)}},nonEmptyString:function(t){return"string"==typeof t&&0!==t.trim().length||"Value must be a non-empty string"},arrayLength:function(t,e){return function(n){var o=n;return Array.isArray(o)?o.length<t?"Array must have at least ".concat(t," items"):!(void 0!==e&&o.length>e)||"Array must have at most ".concat(e," items"):"Value must be an array"}},oneOf:function(t){return function(e){return!!t.includes(e)||"Value must be one of: ".concat(t.join(", "))}}},n=function(){return n=Object.assign||function(t){for(var e,n=1,o=arguments.length;n<o;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t},n.apply(this,arguments)};function o(t,e,n){if(n||2===arguments.length)for(var o,r=0,a=e.length;r<a;r++)!o&&r in e||(o||(o=Array.prototype.slice.call(e,0,r)),o[r]=e[r]);return t.concat(o||Array.prototype.slice.call(e))}"function"==typeof SuppressedError&&SuppressedError;var r=function(){return(new Date).toISOString().replace("T"," ").replace("Z","")},a=function(t){var e=r(),n=t?" %c".concat(t,"%c"):"";return"%c[".concat(e,"]%c ").concat("%c[phaser-hooks]%c").concat(n)},c=function(t){var e=["color: #bd93f9; font-weight: bold;","color: inherit;","color: #2563eb; font-weight: bold;","color: inherit;"];return t&&e.push("color: #059669; font-weight: bold;","color: inherit;"),e},i=function(t,e,n){var i=a("STATE_SET"),l=c("STATE_SET");console.groupCollapsed.apply(console,o(["".concat(i,' Updating state "').concat(t,'"')],l,!1)),console.log("๐ Key:",t),console.log("๐ค Old Value:",e),console.log("๐ฅ New Value:",n),console.log("๐ Changed:",e!==n),console.log("โฐ Timestamp:",r()),console.groupEnd()},l=function(t,e,n){var i=a("EVENT_ADD"),l=c("EVENT_ADD");console.groupCollapsed.apply(console,o(["".concat(i,' Adding listener for "').concat(t,'"')],l,!1)),console.log("๐ Key:",t),console.log("๐ก Event:",e),console.log("๐ฏ Callback:",n.name||"anonymous"),console.log("โฐ Timestamp:",r()),console.groupEnd()},s=function(t,e,n){var i=a("EVENT_REMOVE"),l=c("EVENT_REMOVE");console.groupCollapsed.apply(console,o(["".concat(i,' Removing listener for "').concat(t,'"')],l,!1)),console.log("๐ Key:",t),console.log("๐ก Event:",e),console.log("๐ฏ Callback:",n.name||"anonymous"),console.log("โฐ Timestamp:",r()),console.groupEnd()},u=function(t,e,n){var i=a(t),l=c(t);console.groupCollapsed.apply(console,o(["".concat(i," WARNING")],l,!1)),console.warn("โ ๏ธ Operation:",t),console.warn("๐ข Message:",e),n&&console.warn("๐ Context:",n),console.warn("โฐ Timestamp:",r()),console.groupEnd()},f=function(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&"[object Object]"===Object.prototype.toString.call(t)},g=function(t){if(null===t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(function(t){return g(t)});if(f(t)){var e={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=g(t[n]));return e}return t},p=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(!f(t))return t;for(var o=g(t),r=0,a=e;r<a.length;r++){var c=a[r];if(f(c)){var i=g(c);for(var l in i)if(Object.prototype.hasOwnProperty.call(i,l)){var s=i[l],u=o[l];f(s)&&f(u)?o[l]=p(u,s):void 0!==s&&(o[l]=s)}}}return o},h=new WeakMap,v=function(t,e,n){var r=t.get(e);return n&&function(t,e){var n=a("STATE_GET"),r=c("STATE_GET");console.log.apply(console,o(o(["".concat(n,' Getting state "').concat(t,'":')],r,!1),[e],!1))}(e,r),r},d=function(t,e,n,l){if(u("DEPRECATED_ONCHANGE","onChange callback is deprecated in phaser-hooks. Use .on('change', callback) or .once('change', callback) instead.",{key:e}),!l||"function"!=typeof l)throw new Error("[withStateDef] onChange callback must be a function");t.events.on("changedata-".concat(e),function(t,e,s,u){n&&i(e,u,s);try{l(s,u)}catch(t){!function(t,e,n){var i=a(t),l=c(t);console.groupCollapsed.apply(console,o(["".concat(i," ERROR")],l,!1)),console.error("๐จ Operation:",t),console.error("๐ฅ Error:",e),n&&console.error("๐ Context:",n),console.error("โฐ Timestamp:",r()),console.groupEnd()}("ONCHANGE_CALLBACK_ERROR",t,{key:e})}})},y=function(t,e,n,i,l){if(!t.has(e)&&void 0!==l){if(i){var s=i(l);if(!0!==s){var u="string"==typeof s?s:'Invalid initial value for key "'.concat(e,'"');throw new Error("[withStateDef] ".concat(u))}}t.set(e,l),n&&function(t,e){var n=a("STATE_INIT"),i=c("STATE_INIT");console.groupCollapsed.apply(console,o(["".concat(n,' Initializing state "').concat(t,'"')],i,!1)),console.log("๐ง Key:",t),console.log("๐ฆ Initial Value:",e),console.log("โฐ Timestamp:",r()),console.groupEnd()}(e,l)}},w=function(t,e,n){t.events.removeAllListeners("changedata-".concat(e)),n&&function(t){var e=a("CLEAR_LISTENERS"),n=c("CLEAR_LISTENERS");console.groupCollapsed.apply(console,o(["".concat(e,' Clearing all listeners for "').concat(t,'"')],n,!1)),console.log("๐ Key:",t),console.log("๐งน Action:","Removing all event listeners"),console.log("โฐ Timestamp:",r()),console.groupEnd()}(e)},E=function(t,e,n,o){void 0===o&&(o={}),function(t,e,n){if(!t)throw new Error("[withStateDef] Scene parameter is required");if(!n||"string"!=typeof n||0===n.trim().length)throw new Error("[withStateDef] Key must be a non-empty string");if(e.global&&!t.registry)throw new Error("[withStateDef] Scene registry is not available. Ensure the scene is properly initialized.");if(!e.global&&!t.data)throw new Error("[withStateDef] Scene data is not available. Ensure the scene is properly initialized.")}(t,o,e);var r=o.validator,a=o.debug,c=void 0!==a&&a,f=o.global,g=void 0!==f&&f?t.registry:t.data;return y(g,e,c,r,n),{get:function(){return v(g,e,c)},set:function(t){return function(t,e,n,o,r){var a=t.get(e),c="function"==typeof n?n(a):n;if(r){var l=r(c);if(!0!==l){var s="string"==typeof l?l:'Invalid value for key "'.concat(e,'"');throw new Error("[withStateDef] ".concat(s))}}t.set(e,c),o&&i(e,a,c)}(g,e,t,c,r)},patch:function(t){return function(t,e,n,o,r){var a=t.get(e);if("object"!=typeof a||null===a)throw new Error("[withStateDef] Current value is not an object");var c="function"==typeof n?n(a):n,l=p({},a,c);if(r){var s=r(l);if(!0!==s){var u="string"==typeof s?s:'Invalid value for key "'.concat(e,'"');throw new Error("[withStateDef] ".concat(u))}}t.set(e,l),o&&i(e,a,l)}(g,e,t,c,r)},onChange:function(t){return d(g,e,c,t)},on:function(t,n){return function(t,e,n,o,r){if("change"!==e)throw new Error('[withStateDef] Invalid event. Only "change" is supported.');var a=function(t,e,n){r(e,n)};return h.has(r)||h.set(r,a),o&&l(n,e,a),t.events.on("changedata-".concat(n),a),function(){o&&s(n,e,a),t.events.off("changedata-".concat(n),a)}}(g,t,e,c,n)},once:function(t,n){return function(t,e,n,o,r){if("change"!==e)throw new Error('[withStateDef] Invalid event. Only "change" is supported.');var a=function(t,e,n){r(e,n)};return h.has(r)||h.set(r,a),o&&l(n,e,a),t.events.once("changedata-".concat(n),a),function(){o&&s(n,e,a),t.events.off("changedata-".concat(n),a)}}(g,t,e,c,n)},off:function(t,n){return function(t,e,n,o,r){if("change"!==e)throw new Error('[withStateDef] Invalid event. Only "change" is supported.');var a=h.get(r);a?(t.events.off("changedata-".concat(n),a),o&&s(n,e,a)):u("CALLBACK_NOT_FOUND",'Callback not found for key "'.concat(n,'"'),{key:n})}(g,t,e,c,n)},clearListeners:function(){return w(g,e,c)}}},m=function(t,e,o,r){var a;if(!t)throw new Error("[withLocalState] Scene parameter is required");var c=(null===(a=t.scene)||void 0===a?void 0:a.key)||"unknown-scene",i="phaser-hooks:local:".concat(c,":").concat(e);return E(t,i,o,n(n({},r),{persistent:!1,global:!1}))},S=function(t,e,o,r){if(!t)throw new Error("[withGlobalState] Scene parameter is required");var a="phaser-hooks:global:".concat(e);return E(t,a,o,n(n({},r),{persistent:!1,global:!0}))};t.batchStateUpdates=function(t){t()},t.isValidScene=function(t){return null!=t&&"object"==typeof t&&"registry"in t&&"scene"in t},t.validators=e,t.withComputedState=function(t,e,o,r){var a=r(o.get()),c=m(t,e,a);return o.on("change",function(){var t=o.get(),e=r(t);c.set(e)}),n(n({},c),{set:function(){throw new Error('[withComputedState] Cannot directly set computed state "'.concat(e,'". Update the source state instead.'))}})},t.withDebouncedState=function(t,e,o,r){var a=m(t,e,o),c=null,i=function(t){var e="function"==typeof t?t(a.get()):t;c&&clearTimeout(c),c=setTimeout(function(){a.set(e),c=null},r)};return n(n({},a),{set:i,patch:function(t){var e="function"==typeof t?t(a.get()):t;i(function(t){return p(t,e)})}})},t.withGlobalState=S,t.withLocalState=m,t.withPersistentState=function(t,e,n,o,r){void 0===r&&(r="local");var a=null!=o?o:"phaser-hooks-state:".concat(e),c=n;try{var i="local"===r?localStorage.getItem(a):sessionStorage.getItem(a);i&&(c=JSON.parse(i))}catch(t){console.warn('[withPersistentState] Failed to load stored state for "'.concat(e,'":'),t)}var l=S(t,e,c);return l.onChange(function(t){try{("local"===r?localStorage:sessionStorage).setItem(a,JSON.stringify(t))}catch(t){console.warn('[withPersistentState] Failed to save state for "'.concat(e,'":'),t)}}),l},t.withStateDef=E,t.withUndoableState=function(t,e,o,r){var a=m(t,e,o),c=m(t,"".concat(e,":history"),[o]),i=m(t,"".concat(e,":historyIndex"),0),l=function(t){var e="function"==typeof t?t(a.get()):t;!function(t){var e=c.get(),n=i.get(),o=e.slice(0,n+1);o.push(t),o.length>r?o.shift():i.set(n+1),c.set(o)}(e),a.set(e)};return n(n({},a),{set:function(t){var e="function"==typeof t?t(a.get()):t;l(e)},patch:function(t){var e="function"==typeof t?t(a.get()):t;l(function(t){return p(t,e)})},undo:function(){var t=i.get();if(t>0){var e=t-1;i.set(e);var n=c.get()[e];if(void 0!==n)return a.set(n),!0}return!1},redo:function(){var t=i.get(),e=c.get();if(t<e.length-1){var n=t+1;i.set(n);var o=e[n];if(void 0!==o)return a.set(o),!0}return!1},canUndo:function(){return i.get()>0},canRedo:function(){return i.get()<c.get().length-1},clearHistory:function(){var t=a.get();c.set([t]),i.set(0)}})}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/merge.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
/* eslint-disable no-magic-numbers */
|
|
3
|
+
/* eslint-disable max-lines-per-function */
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import { merge } from '../merge';
|
|
6
|
+
describe('merge', () => {
|
|
7
|
+
describe('basic functionality', () => {
|
|
8
|
+
it('should merge simple objects', () => {
|
|
9
|
+
const target = { a: 1, b: 2 };
|
|
10
|
+
const source = { b: 3, c: 4 };
|
|
11
|
+
const result = merge(target, source);
|
|
12
|
+
expect(result).toEqual({ a: 1, b: 3, c: 4 });
|
|
13
|
+
expect(result).not.toBe(target);
|
|
14
|
+
expect(result).not.toBe(source);
|
|
15
|
+
});
|
|
16
|
+
it('should merge multiple sources', () => {
|
|
17
|
+
const target = { a: 1, b: 2 };
|
|
18
|
+
const source1 = { b: 3, c: 4 };
|
|
19
|
+
const source2 = { c: 5, d: 6 };
|
|
20
|
+
const result = merge(target, source1, source2);
|
|
21
|
+
expect(result).toEqual({ a: 1, b: 3, c: 5, d: 6 });
|
|
22
|
+
expect(result).not.toBe(target);
|
|
23
|
+
expect(result).not.toBe(source1);
|
|
24
|
+
expect(result).not.toBe(source2);
|
|
25
|
+
});
|
|
26
|
+
it('should handle empty objects', () => {
|
|
27
|
+
const target = {};
|
|
28
|
+
const source = { a: 1, b: 2 };
|
|
29
|
+
const result = merge(target, source);
|
|
30
|
+
expect(result).toEqual({ a: 1, b: 2 });
|
|
31
|
+
expect(result).not.toBe(target);
|
|
32
|
+
expect(result).not.toBe(source);
|
|
33
|
+
});
|
|
34
|
+
it('should handle null and undefined sources', () => {
|
|
35
|
+
const target = { a: 1 };
|
|
36
|
+
const result = merge(target, null, undefined);
|
|
37
|
+
expect(result).toEqual({ a: 1 });
|
|
38
|
+
expect(result).not.toBe(target);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('deep merging and immutability', () => {
|
|
42
|
+
it('should deep merge nested objects', () => {
|
|
43
|
+
const target = {
|
|
44
|
+
a: 1,
|
|
45
|
+
b: {
|
|
46
|
+
c: 2,
|
|
47
|
+
d: 3
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const source = {
|
|
51
|
+
b: {
|
|
52
|
+
c: 4,
|
|
53
|
+
e: 5
|
|
54
|
+
},
|
|
55
|
+
f: 6
|
|
56
|
+
};
|
|
57
|
+
const result = merge(target, source);
|
|
58
|
+
expect(result).toEqual({
|
|
59
|
+
a: 1,
|
|
60
|
+
b: {
|
|
61
|
+
c: 4,
|
|
62
|
+
d: 3,
|
|
63
|
+
e: 5
|
|
64
|
+
},
|
|
65
|
+
f: 6
|
|
66
|
+
});
|
|
67
|
+
// Check immutability
|
|
68
|
+
expect(result).not.toBe(target);
|
|
69
|
+
expect(result).not.toBe(source);
|
|
70
|
+
expect(result.b).not.toBe(target.b);
|
|
71
|
+
expect(result.b).not.toBe(source.b);
|
|
72
|
+
});
|
|
73
|
+
it('should create new references for all nested objects', () => {
|
|
74
|
+
const target = {
|
|
75
|
+
life: 100,
|
|
76
|
+
nested: {
|
|
77
|
+
value: 10
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const source = { life: 90 };
|
|
81
|
+
const result = merge(target, source);
|
|
82
|
+
expect(result).toEqual({
|
|
83
|
+
life: 90,
|
|
84
|
+
nested: {
|
|
85
|
+
value: 10
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Critical test: nested objects should have new references
|
|
89
|
+
expect(result).not.toBe(target);
|
|
90
|
+
expect(result.nested).not.toBe(target.nested);
|
|
91
|
+
expect(result.nested).toEqual(target.nested);
|
|
92
|
+
});
|
|
93
|
+
it('should deep merge multiple levels', () => {
|
|
94
|
+
const target = {
|
|
95
|
+
a: {
|
|
96
|
+
b: {
|
|
97
|
+
c: 1,
|
|
98
|
+
d: 2
|
|
99
|
+
},
|
|
100
|
+
e: 3
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const source = {
|
|
104
|
+
a: {
|
|
105
|
+
b: {
|
|
106
|
+
c: 4,
|
|
107
|
+
f: 5
|
|
108
|
+
},
|
|
109
|
+
g: 6
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const result = merge(target, source);
|
|
113
|
+
expect(result).toEqual({
|
|
114
|
+
a: {
|
|
115
|
+
b: {
|
|
116
|
+
c: 4,
|
|
117
|
+
d: 2,
|
|
118
|
+
f: 5
|
|
119
|
+
},
|
|
120
|
+
e: 3,
|
|
121
|
+
g: 6
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
// Check immutability at all levels
|
|
125
|
+
expect(result).not.toBe(target);
|
|
126
|
+
expect(result.a).not.toBe(target.a);
|
|
127
|
+
expect(result.a.b).not.toBe(target.a.b);
|
|
128
|
+
});
|
|
129
|
+
it('should replace non-object values', () => {
|
|
130
|
+
const target = {
|
|
131
|
+
a: {
|
|
132
|
+
b: 1
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const source = {
|
|
136
|
+
a: 2
|
|
137
|
+
};
|
|
138
|
+
const result = merge(target, source);
|
|
139
|
+
expect(result).toEqual({ a: 2 });
|
|
140
|
+
expect(result).not.toBe(target);
|
|
141
|
+
expect(result).not.toBe(source);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe('array handling', () => {
|
|
145
|
+
it('should replace arrays instead of merging', () => {
|
|
146
|
+
const target = {
|
|
147
|
+
a: [1, 2, 3],
|
|
148
|
+
b: {
|
|
149
|
+
c: [4, 5]
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const source = {
|
|
153
|
+
a: [6, 7],
|
|
154
|
+
b: {
|
|
155
|
+
c: [8, 9, 10]
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
const result = merge(target, source);
|
|
159
|
+
expect(result).toEqual({
|
|
160
|
+
a: [6, 7],
|
|
161
|
+
b: {
|
|
162
|
+
c: [8, 9, 10]
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
// Arrays should be new references
|
|
166
|
+
expect(result.a).not.toBe(target.a);
|
|
167
|
+
expect(result.b.c).not.toBe(target.b.c);
|
|
168
|
+
});
|
|
169
|
+
it('should create new array references', () => {
|
|
170
|
+
const target = {
|
|
171
|
+
items: [1, 2, 3]
|
|
172
|
+
};
|
|
173
|
+
const source = {
|
|
174
|
+
items: [4, 5, 6]
|
|
175
|
+
};
|
|
176
|
+
const result = merge(target, source);
|
|
177
|
+
expect(result.items).toEqual([4, 5, 6]);
|
|
178
|
+
expect(result.items).not.toBe(target.items);
|
|
179
|
+
expect(result.items).not.toBe(source.items);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
describe('edge cases', () => {
|
|
183
|
+
it('should handle non-object target', () => {
|
|
184
|
+
const target = 'string';
|
|
185
|
+
const source = { a: 1 };
|
|
186
|
+
const result = merge(target, source);
|
|
187
|
+
expect(result).toBe('string');
|
|
188
|
+
});
|
|
189
|
+
it('should handle non-object sources', () => {
|
|
190
|
+
const target = { a: 1 };
|
|
191
|
+
const source = 'string';
|
|
192
|
+
const result = merge(target, source);
|
|
193
|
+
expect(result).toEqual({ a: 1 });
|
|
194
|
+
expect(result).not.toBe(target);
|
|
195
|
+
});
|
|
196
|
+
it('should not mutate original target', () => {
|
|
197
|
+
const target = { a: 1, b: { c: 2 } };
|
|
198
|
+
const source = { b: { d: 3 } };
|
|
199
|
+
const originalTarget = JSON.parse(JSON.stringify(target));
|
|
200
|
+
merge(target, source);
|
|
201
|
+
expect(target).toEqual(originalTarget);
|
|
202
|
+
});
|
|
203
|
+
it('should handle undefined values in source', () => {
|
|
204
|
+
const target = { a: 1, b: 2 };
|
|
205
|
+
const source = { a: undefined, c: 3 };
|
|
206
|
+
const result = merge(target, source);
|
|
207
|
+
expect(result).toEqual({ a: 1, b: 2, c: 3 });
|
|
208
|
+
expect(result).not.toBe(target);
|
|
209
|
+
});
|
|
210
|
+
it('should handle null values', () => {
|
|
211
|
+
const target = { a: 1, b: 2 };
|
|
212
|
+
const source = { a: null, c: 3 };
|
|
213
|
+
const result = merge(target, source);
|
|
214
|
+
expect(result).toEqual({ a: null, b: 2, c: 3 });
|
|
215
|
+
expect(result).not.toBe(target);
|
|
216
|
+
});
|
|
217
|
+
it('should handle empty source objects', () => {
|
|
218
|
+
const target = { a: 1, b: 2 };
|
|
219
|
+
const source = {};
|
|
220
|
+
const result = merge(target, source);
|
|
221
|
+
expect(result).toEqual({ a: 1, b: 2 });
|
|
222
|
+
expect(result).not.toBe(target);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe('type safety', () => {
|
|
226
|
+
it('should maintain type safety with typed objects', () => {
|
|
227
|
+
const user = {
|
|
228
|
+
id: 1,
|
|
229
|
+
name: 'John',
|
|
230
|
+
profile: {
|
|
231
|
+
age: 30,
|
|
232
|
+
email: 'john@example.com'
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
const updates = {
|
|
236
|
+
name: 'Jane',
|
|
237
|
+
profile: {
|
|
238
|
+
age: 31
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
const result = merge(user, updates);
|
|
242
|
+
expect(result).toEqual({
|
|
243
|
+
id: 1,
|
|
244
|
+
name: 'Jane',
|
|
245
|
+
profile: {
|
|
246
|
+
age: 31,
|
|
247
|
+
email: 'john@example.com'
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
// Type should be preserved
|
|
251
|
+
expect(typeof result['id']).toBe('number');
|
|
252
|
+
expect(typeof result['name']).toBe('string');
|
|
253
|
+
expect(typeof result['profile']['age']).toBe('number');
|
|
254
|
+
expect(typeof result['profile']['email']).toBe('string');
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
describe('complex scenarios', () => {
|
|
258
|
+
it('should handle theme-like objects', () => {
|
|
259
|
+
const defaultTheme = {
|
|
260
|
+
colors: {
|
|
261
|
+
primary: 'blue',
|
|
262
|
+
secondary: 'gray'
|
|
263
|
+
},
|
|
264
|
+
spacing: {
|
|
265
|
+
small: 8,
|
|
266
|
+
medium: 16
|
|
267
|
+
},
|
|
268
|
+
typography: {
|
|
269
|
+
fontFamily: 'Arial',
|
|
270
|
+
fontSize: 14
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
const customTheme = {
|
|
274
|
+
colors: {
|
|
275
|
+
primary: 'red',
|
|
276
|
+
accent: 'yellow'
|
|
277
|
+
},
|
|
278
|
+
spacing: {
|
|
279
|
+
large: 24
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
const result = merge(defaultTheme, customTheme);
|
|
283
|
+
expect(result).toEqual({
|
|
284
|
+
colors: {
|
|
285
|
+
primary: 'red',
|
|
286
|
+
secondary: 'gray',
|
|
287
|
+
accent: 'yellow'
|
|
288
|
+
},
|
|
289
|
+
spacing: {
|
|
290
|
+
small: 8,
|
|
291
|
+
medium: 16,
|
|
292
|
+
large: 24
|
|
293
|
+
},
|
|
294
|
+
typography: {
|
|
295
|
+
fontFamily: 'Arial',
|
|
296
|
+
fontSize: 14
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
// All nested objects should be new references
|
|
300
|
+
expect(result).not.toBe(defaultTheme);
|
|
301
|
+
expect(result.colors).not.toBe(defaultTheme.colors);
|
|
302
|
+
expect(result.spacing).not.toBe(defaultTheme.spacing);
|
|
303
|
+
expect(result.typography).not.toBe(defaultTheme.typography);
|
|
304
|
+
});
|
|
305
|
+
it('should handle deeply nested objects with mixed types', () => {
|
|
306
|
+
const target = {
|
|
307
|
+
config: {
|
|
308
|
+
database: {
|
|
309
|
+
host: 'localhost',
|
|
310
|
+
port: 5432,
|
|
311
|
+
credentials: {
|
|
312
|
+
username: 'admin',
|
|
313
|
+
password: 'secret'
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
features: ['auth', 'logging'],
|
|
317
|
+
debug: true
|
|
318
|
+
},
|
|
319
|
+
metadata: {
|
|
320
|
+
version: '1.0.0',
|
|
321
|
+
author: 'Developer'
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
const source = {
|
|
325
|
+
config: {
|
|
326
|
+
database: {
|
|
327
|
+
port: 3306,
|
|
328
|
+
credentials: {
|
|
329
|
+
username: 'root'
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
features: ['auth', 'logging', 'monitoring'],
|
|
333
|
+
production: false
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
const result = merge(target, source);
|
|
337
|
+
expect(result).toEqual({
|
|
338
|
+
config: {
|
|
339
|
+
database: {
|
|
340
|
+
host: 'localhost',
|
|
341
|
+
port: 3306,
|
|
342
|
+
credentials: {
|
|
343
|
+
username: 'root',
|
|
344
|
+
password: 'secret'
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
features: ['auth', 'logging', 'monitoring'],
|
|
348
|
+
debug: true,
|
|
349
|
+
production: false
|
|
350
|
+
},
|
|
351
|
+
metadata: {
|
|
352
|
+
version: '1.0.0',
|
|
353
|
+
author: 'Developer'
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
// Verify immutability
|
|
357
|
+
expect(result).not.toBe(target);
|
|
358
|
+
expect(result['config']).not.toBe(target['config']);
|
|
359
|
+
expect(result['config']['database']).not.toBe(target['config']['database']);
|
|
360
|
+
expect(result['metadata']).not.toBe(target['metadata']);
|
|
361
|
+
});
|
|
362
|
+
});
|
|
363
|
+
describe('performance and memory', () => {
|
|
364
|
+
it('should not create unnecessary references for primitive values', () => {
|
|
365
|
+
const target = { a: 1, b: 'string', c: true };
|
|
366
|
+
const source = { a: 2 };
|
|
367
|
+
const result = merge(target, source);
|
|
368
|
+
expect(result).toEqual({ a: 2, b: 'string', c: true });
|
|
369
|
+
expect(result).not.toBe(target);
|
|
370
|
+
});
|
|
371
|
+
it('should handle large objects efficiently', () => {
|
|
372
|
+
const target = {};
|
|
373
|
+
const source = {};
|
|
374
|
+
// Create large objects
|
|
375
|
+
for (let i = 0; i < 1000; i++) {
|
|
376
|
+
target[`key${i}`] = { value: i, nested: { deep: i * 2 } };
|
|
377
|
+
source[`key${i}`] = { value: i + 1000, nested: { deep: (i + 1000) * 2 } };
|
|
378
|
+
}
|
|
379
|
+
const result = merge(target, source);
|
|
380
|
+
expect(Object.keys(result)).toHaveLength(1000);
|
|
381
|
+
expect(result['key0']).toEqual({ value: 1000, nested: { deep: 2000 } });
|
|
382
|
+
expect(result['key999']).toEqual({ value: 1999, nested: { deep: 3998 } });
|
|
383
|
+
// Verify immutability
|
|
384
|
+
expect(result).not.toBe(target);
|
|
385
|
+
expect(result['key0']).not.toBe(target['key0']);
|
|
386
|
+
expect(result['key0']['nested']).not.toBe(target['key0']['nested']);
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
//# sourceMappingURL=merge.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/merge.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep merge utility function that recursively merges objects
|
|
3
|
+
* Similar to lodash.merge but implemented natively
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Type for plain objects (not arrays, null, or other types)
|
|
7
|
+
*/
|
|
8
|
+
type PlainObject = Record<string, unknown>;
|
|
9
|
+
/**
|
|
10
|
+
* Deep merge multiple objects into the first one
|
|
11
|
+
* @param target - The target object to merge into
|
|
12
|
+
* @param sources - Source objects to merge from
|
|
13
|
+
* @returns The merged object
|
|
14
|
+
*/
|
|
15
|
+
export declare const merge: <T extends PlainObject>(target: T, ...sources: PlainObject[]) => T;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAyC3C;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,WAAW,EACzC,QAAQ,CAAC,EACT,GAAG,SAAS,WAAW,EAAE,KACxB,CA+BF,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep merge utility function that recursively merges objects
|
|
3
|
+
* Similar to lodash.merge but implemented natively
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Checks if a value is a plain object (not array, null, or other types)
|
|
7
|
+
*/
|
|
8
|
+
const isPlainObject = (value) => {
|
|
9
|
+
return (value !== null &&
|
|
10
|
+
typeof value === 'object' &&
|
|
11
|
+
!Array.isArray(value) &&
|
|
12
|
+
Object.prototype.toString.call(value) === '[object Object]');
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Deep clone utility function that creates new references for all nested objects
|
|
16
|
+
* @param obj - The object to clone
|
|
17
|
+
* @returns A deep clone of the object with new references
|
|
18
|
+
*/
|
|
19
|
+
const deepClone = (obj) => {
|
|
20
|
+
if (obj === null || typeof obj !== 'object') {
|
|
21
|
+
return obj;
|
|
22
|
+
}
|
|
23
|
+
if (Array.isArray(obj)) {
|
|
24
|
+
return obj.map(item => deepClone(item));
|
|
25
|
+
}
|
|
26
|
+
if (isPlainObject(obj)) {
|
|
27
|
+
const cloned = {};
|
|
28
|
+
for (const key in obj) {
|
|
29
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
30
|
+
cloned[key] = deepClone(obj[key]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return cloned;
|
|
34
|
+
}
|
|
35
|
+
return obj;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Deep merge multiple objects into the first one
|
|
39
|
+
* @param target - The target object to merge into
|
|
40
|
+
* @param sources - Source objects to merge from
|
|
41
|
+
* @returns The merged object
|
|
42
|
+
*/
|
|
43
|
+
export const merge = (target, ...sources) => {
|
|
44
|
+
if (!isPlainObject(target)) {
|
|
45
|
+
return target;
|
|
46
|
+
}
|
|
47
|
+
// Start with a deep clone of the target
|
|
48
|
+
let result = deepClone(target);
|
|
49
|
+
for (const source of sources) {
|
|
50
|
+
if (!isPlainObject(source)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// Deep clone the source to ensure we create new references
|
|
54
|
+
const clonedSource = deepClone(source);
|
|
55
|
+
for (const key in clonedSource) {
|
|
56
|
+
if (Object.prototype.hasOwnProperty.call(clonedSource, key)) {
|
|
57
|
+
const sourceValue = clonedSource[key];
|
|
58
|
+
const targetValue = result[key];
|
|
59
|
+
if (isPlainObject(sourceValue) && isPlainObject(targetValue)) {
|
|
60
|
+
result[key] = merge(targetValue, sourceValue);
|
|
61
|
+
}
|
|
62
|
+
else if (sourceValue !== undefined) {
|
|
63
|
+
result[key] = sourceValue;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/utils/merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,KAAc,EAAwB,EAAE;IAC7D,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAC5D,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,SAAS,GAAG,CAAI,GAAM,EAAK,EAAE;IACjC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAM,CAAC;IAC/C,CAAC;IAED,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,EAA6B,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACnD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,MAAS,EACT,GAAG,OAAsB,EACtB,EAAE;IACL,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wCAAwC;IACxC,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAA4B,CAAC;IAE1D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,2DAA2D;QAC3D,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAEvC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC5D,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAEhC,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC7D,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBAChD,CAAC;qBAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBACrC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAW,CAAC;AACrB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "phaser-hooks",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Hooks in react-style for Phaser games",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -10,11 +10,16 @@
|
|
|
10
10
|
".": {
|
|
11
11
|
"import": "./dist/index.js",
|
|
12
12
|
"types": "./dist/index.d.ts"
|
|
13
|
-
}
|
|
13
|
+
},
|
|
14
|
+
"./umd": "./dist/phaser-hooks.js",
|
|
15
|
+
"./umd.min": "./dist/phaser-hooks.min.js"
|
|
14
16
|
},
|
|
15
17
|
"files": [
|
|
16
18
|
"dist"
|
|
17
19
|
],
|
|
20
|
+
"browser": "./dist/phaser-hooks.js",
|
|
21
|
+
"unpkg": "./dist/phaser-hooks.min.js",
|
|
22
|
+
"jsdelivr": "./dist/phaser-hooks.min.js",
|
|
18
23
|
"keywords": [
|
|
19
24
|
"phaser",
|
|
20
25
|
"game-development",
|
|
@@ -46,7 +51,7 @@
|
|
|
46
51
|
"eslint-plugin-security": "^3.0.1",
|
|
47
52
|
"eslint-plugin-sonarjs": "^3.0.5",
|
|
48
53
|
"eslint-plugin-unicorn": "^50.0.1",
|
|
49
|
-
"typescript": "^5.3
|
|
54
|
+
"typescript": "^5.9.3",
|
|
50
55
|
"vitest": "^3.2.4"
|
|
51
56
|
},
|
|
52
57
|
"peerDependencies": {
|