@coherent.js/core 1.0.0-beta.2
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/LICENSE +21 -0
- package/README.md +130 -0
- package/dist/coherent.d.ts +472 -0
- package/dist/coherent.d.ts.map +1 -0
- package/dist/coherent.js +590 -0
- package/dist/coherent.js.map +1 -0
- package/dist/components/component-system.d.ts +1138 -0
- package/dist/components/component-system.d.ts.map +1 -0
- package/dist/components/component-system.js +2220 -0
- package/dist/components/component-system.js.map +1 -0
- package/dist/components/lifecycle.d.ts +212 -0
- package/dist/components/lifecycle.d.ts.map +1 -0
- package/dist/components/lifecycle.js +525 -0
- package/dist/components/lifecycle.js.map +1 -0
- package/dist/core/html-utils.d.ts +14 -0
- package/dist/core/html-utils.d.ts.map +1 -0
- package/dist/core/html-utils.js +166 -0
- package/dist/core/html-utils.js.map +1 -0
- package/dist/core/object-factory.d.ts +38 -0
- package/dist/core/object-factory.d.ts.map +1 -0
- package/dist/core/object-factory.js +63 -0
- package/dist/core/object-factory.js.map +1 -0
- package/dist/core/object-utils.d.ts +77 -0
- package/dist/core/object-utils.d.ts.map +1 -0
- package/dist/core/object-utils.js +502 -0
- package/dist/core/object-utils.js.map +1 -0
- package/dist/dev/dev-tools.d.ts +194 -0
- package/dist/dev/dev-tools.d.ts.map +1 -0
- package/dist/dev/dev-tools.js +846 -0
- package/dist/dev/dev-tools.js.map +1 -0
- package/dist/forms/validation.d.ts +271 -0
- package/dist/forms/validation.d.ts.map +1 -0
- package/dist/forms/validation.js +573 -0
- package/dist/forms/validation.js.map +1 -0
- package/dist/index.cjs +5281 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +5204 -0
- package/dist/index.js.map +7 -0
- package/dist/performance/bundle-optimizer.d.ts +95 -0
- package/dist/performance/bundle-optimizer.d.ts.map +1 -0
- package/dist/performance/bundle-optimizer.js +192 -0
- package/dist/performance/bundle-optimizer.js.map +1 -0
- package/dist/performance/cache-manager.d.ts +107 -0
- package/dist/performance/cache-manager.d.ts.map +1 -0
- package/dist/performance/cache-manager.js +314 -0
- package/dist/performance/cache-manager.js.map +1 -0
- package/dist/performance/component-cache.d.ts +120 -0
- package/dist/performance/component-cache.d.ts.map +1 -0
- package/dist/performance/component-cache.js +364 -0
- package/dist/performance/component-cache.js.map +1 -0
- package/dist/performance/monitor.d.ts +189 -0
- package/dist/performance/monitor.d.ts.map +1 -0
- package/dist/performance/monitor.js +347 -0
- package/dist/performance/monitor.js.map +1 -0
- package/dist/rendering/base-renderer.d.ts +140 -0
- package/dist/rendering/base-renderer.d.ts.map +1 -0
- package/dist/rendering/base-renderer.js +409 -0
- package/dist/rendering/base-renderer.js.map +1 -0
- package/dist/rendering/css-manager.d.ts +73 -0
- package/dist/rendering/css-manager.d.ts.map +1 -0
- package/dist/rendering/css-manager.js +176 -0
- package/dist/rendering/css-manager.js.map +1 -0
- package/dist/rendering/dom-renderer.d.ts +62 -0
- package/dist/rendering/dom-renderer.d.ts.map +1 -0
- package/dist/rendering/dom-renderer.js +252 -0
- package/dist/rendering/dom-renderer.js.map +1 -0
- package/dist/rendering/html-renderer.d.ts +67 -0
- package/dist/rendering/html-renderer.d.ts.map +1 -0
- package/dist/rendering/html-renderer.js +444 -0
- package/dist/rendering/html-renderer.js.map +1 -0
- package/dist/rendering/renderer-config.d.ts +282 -0
- package/dist/rendering/renderer-config.d.ts.map +1 -0
- package/dist/rendering/renderer-config.js +144 -0
- package/dist/rendering/renderer-config.js.map +1 -0
- package/dist/rendering/streaming-renderer.d.ts +117 -0
- package/dist/rendering/streaming-renderer.d.ts.map +1 -0
- package/dist/rendering/streaming-renderer.js +326 -0
- package/dist/rendering/streaming-renderer.js.map +1 -0
- package/dist/rendering/vdom-diff.d.ts +47 -0
- package/dist/rendering/vdom-diff.d.ts.map +1 -0
- package/dist/rendering/vdom-diff.js +416 -0
- package/dist/rendering/vdom-diff.js.map +1 -0
- package/dist/routing/router.d.ts +241 -0
- package/dist/routing/router.d.ts.map +1 -0
- package/dist/routing/router.js +648 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/state/reactive-state.d.ts +166 -0
- package/dist/state/reactive-state.d.ts.map +1 -0
- package/dist/state/reactive-state.js +546 -0
- package/dist/state/reactive-state.js.map +1 -0
- package/dist/state/state-manager.d.ts +45 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +151 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/types/constants.d.ts +8 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/constants.js +36 -0
- package/dist/types/constants.js.map +1 -0
- package/dist/utils/dependency-utils.d.ts +43 -0
- package/dist/utils/dependency-utils.d.ts.map +1 -0
- package/dist/utils/dependency-utils.js +105 -0
- package/dist/utils/dependency-utils.js.map +1 -0
- package/dist/utils/error-handler.d.ts +148 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +468 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/normalization.d.ts +3 -0
- package/dist/utils/normalization.d.ts.map +1 -0
- package/dist/utils/normalization.js +24 -0
- package/dist/utils/normalization.js.map +1 -0
- package/dist/utils/validation.d.ts +10 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +32 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +44 -0
- package/types/index.d.ts +734 -0
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Object Utilities for Coherent.js
|
|
3
|
+
* Handles object validation, manipulation, and analysis
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Deep clone an object with optimizations for common patterns
|
|
7
|
+
* Handles circular references, functions, dates, regex, and more
|
|
8
|
+
*/
|
|
9
|
+
export function deepClone(obj, seen = new WeakMap()) {
|
|
10
|
+
// Handle primitives
|
|
11
|
+
if (obj === null || typeof obj !== 'object') {
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
// Handle circular references
|
|
15
|
+
if (seen.has(obj)) {
|
|
16
|
+
return seen.get(obj);
|
|
17
|
+
}
|
|
18
|
+
// Handle Date objects
|
|
19
|
+
if (obj instanceof Date) {
|
|
20
|
+
return new Date(obj.getTime());
|
|
21
|
+
}
|
|
22
|
+
// Handle RegExp objects
|
|
23
|
+
if (obj instanceof RegExp) {
|
|
24
|
+
return new RegExp(obj.source, obj.flags);
|
|
25
|
+
}
|
|
26
|
+
// Handle Array objects
|
|
27
|
+
if (Array.isArray(obj)) {
|
|
28
|
+
const clonedArray = [];
|
|
29
|
+
seen.set(obj, clonedArray);
|
|
30
|
+
for (let i = 0; i < obj.length; i++) {
|
|
31
|
+
clonedArray[i] = deepClone(obj[i], seen);
|
|
32
|
+
}
|
|
33
|
+
return clonedArray;
|
|
34
|
+
}
|
|
35
|
+
// Handle Function objects (preserve reference for performance)
|
|
36
|
+
if (typeof obj === 'function') {
|
|
37
|
+
// For Coherent components, we typically want to preserve function references
|
|
38
|
+
// rather than cloning them, as they represent behavior
|
|
39
|
+
return obj;
|
|
40
|
+
}
|
|
41
|
+
// Handle Map objects
|
|
42
|
+
if (obj instanceof Map) {
|
|
43
|
+
const clonedMap = new Map();
|
|
44
|
+
seen.set(obj, clonedMap);
|
|
45
|
+
for (const [key, value] of obj) {
|
|
46
|
+
clonedMap.set(deepClone(key, seen), deepClone(value, seen));
|
|
47
|
+
}
|
|
48
|
+
return clonedMap;
|
|
49
|
+
}
|
|
50
|
+
// Handle Set objects
|
|
51
|
+
if (obj instanceof Set) {
|
|
52
|
+
const clonedSet = new Set();
|
|
53
|
+
seen.set(obj, clonedSet);
|
|
54
|
+
for (const value of obj) {
|
|
55
|
+
clonedSet.add(deepClone(value, seen));
|
|
56
|
+
}
|
|
57
|
+
return clonedSet;
|
|
58
|
+
}
|
|
59
|
+
// Handle WeakMap and WeakSet (cannot be cloned, return new empty instance)
|
|
60
|
+
if (obj instanceof WeakMap) {
|
|
61
|
+
return new WeakMap();
|
|
62
|
+
}
|
|
63
|
+
if (obj instanceof WeakSet) {
|
|
64
|
+
return new WeakSet();
|
|
65
|
+
}
|
|
66
|
+
// Handle plain objects and other object types
|
|
67
|
+
const clonedObj = {};
|
|
68
|
+
seen.set(obj, clonedObj);
|
|
69
|
+
// Handle objects with custom prototypes
|
|
70
|
+
if (obj.constructor && obj.constructor !== Object) {
|
|
71
|
+
try {
|
|
72
|
+
// Attempt to create instance with same constructor
|
|
73
|
+
clonedObj.__proto__ = obj.__proto__;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Fallback to Object.create if direct prototype assignment fails
|
|
77
|
+
Object.setPrototypeOf(clonedObj, Object.getPrototypeOf(obj));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Clone all enumerable properties
|
|
81
|
+
for (const key in obj) {
|
|
82
|
+
if (obj.hasOwnProperty(key)) {
|
|
83
|
+
clonedObj[key] = deepClone(obj[key], seen);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Clone non-enumerable properties (important for some objects)
|
|
87
|
+
const descriptors = Object.getOwnPropertyDescriptors(obj);
|
|
88
|
+
for (const key of Object.keys(descriptors)) {
|
|
89
|
+
if (!descriptors[key].enumerable && descriptors[key].configurable) {
|
|
90
|
+
try {
|
|
91
|
+
Object.defineProperty(clonedObj, key, {
|
|
92
|
+
...descriptors[key],
|
|
93
|
+
value: deepClone(descriptors[key].value, seen)
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Skip properties that can't be cloned
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return clonedObj;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Shallow clone optimized for Coherent objects
|
|
105
|
+
* Much faster than deep clone when you only need one level
|
|
106
|
+
*/
|
|
107
|
+
export function shallowClone(obj) {
|
|
108
|
+
if (obj === null || typeof obj !== 'object') {
|
|
109
|
+
return obj;
|
|
110
|
+
}
|
|
111
|
+
if (Array.isArray(obj)) {
|
|
112
|
+
return [...obj];
|
|
113
|
+
}
|
|
114
|
+
if (obj instanceof Date) {
|
|
115
|
+
return new Date(obj.getTime());
|
|
116
|
+
}
|
|
117
|
+
if (obj instanceof RegExp) {
|
|
118
|
+
return new RegExp(obj.source, obj.flags);
|
|
119
|
+
}
|
|
120
|
+
// For objects, spread operator is fastest for shallow clone
|
|
121
|
+
return { ...obj };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Smart clone that chooses between shallow and deep based on structure
|
|
125
|
+
* Optimized for Coherent component patterns
|
|
126
|
+
*/
|
|
127
|
+
export function smartClone(obj, maxDepth = 10, currentDepth = 0) {
|
|
128
|
+
// Prevent infinite recursion
|
|
129
|
+
if (currentDepth >= maxDepth) {
|
|
130
|
+
return shallowClone(obj);
|
|
131
|
+
}
|
|
132
|
+
// Use shallow clone for simple structures
|
|
133
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
134
|
+
return obj;
|
|
135
|
+
}
|
|
136
|
+
// For arrays, check if elements need deep cloning
|
|
137
|
+
if (Array.isArray(obj)) {
|
|
138
|
+
const needsDeepClone = obj.some(item => typeof item === 'object' && item !== null && !isSimpleObject(item));
|
|
139
|
+
if (!needsDeepClone && currentDepth < 3) {
|
|
140
|
+
return obj.map(item => smartClone(item, maxDepth, currentDepth + 1));
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
return obj.map(item => shallowClone(item));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// For Coherent objects, intelligently clone based on content
|
|
147
|
+
if (isCoherentObject(obj)) {
|
|
148
|
+
const cloned = {};
|
|
149
|
+
for (const [tag, props] of Object.entries(obj)) {
|
|
150
|
+
if (props && typeof props === 'object') {
|
|
151
|
+
// Deep clone children, shallow clone other props
|
|
152
|
+
if (props.children) {
|
|
153
|
+
cloned[tag] = {
|
|
154
|
+
...props,
|
|
155
|
+
children: smartClone(props.children, maxDepth, currentDepth + 1)
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
cloned[tag] = shallowClone(_props);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
cloned[tag] = props;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return cloned;
|
|
167
|
+
}
|
|
168
|
+
// Fallback to shallow clone for other objects
|
|
169
|
+
return shallowClone(obj);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Check if object is a simple structure (no nested objects/arrays)
|
|
173
|
+
*/
|
|
174
|
+
function isSimpleObject(obj) {
|
|
175
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
if (Array.isArray(obj)) {
|
|
179
|
+
return obj.every(item => typeof item !== 'object' || item === null);
|
|
180
|
+
}
|
|
181
|
+
return Object.values(obj).every(value => typeof value !== 'object' || value === null || value instanceof Date || value instanceof RegExp);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Clone with performance monitoring
|
|
185
|
+
* Useful for debugging clone performance in development
|
|
186
|
+
*/
|
|
187
|
+
export function monitoredClone(obj, options = {}) {
|
|
188
|
+
const { method = 'deep', logTiming = false, maxDepth = 10 } = options;
|
|
189
|
+
const start = performance.now();
|
|
190
|
+
let result;
|
|
191
|
+
switch (method) {
|
|
192
|
+
case 'shallow':
|
|
193
|
+
result = shallowClone(obj);
|
|
194
|
+
break;
|
|
195
|
+
case 'smart':
|
|
196
|
+
result = smartClone(obj, maxDepth);
|
|
197
|
+
break;
|
|
198
|
+
case 'deep':
|
|
199
|
+
default:
|
|
200
|
+
result = deepClone(obj);
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
const end = performance.now();
|
|
204
|
+
if (logTiming) {
|
|
205
|
+
console.log(`🔄 ${method} clone took ${(end - start).toFixed(2)}ms`);
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
// Rest of your existing object-utils.js code...
|
|
210
|
+
/**
|
|
211
|
+
* Validate that a component structure is valid for rendering
|
|
212
|
+
*/
|
|
213
|
+
export function validateComponent(component, path = 'root') {
|
|
214
|
+
if (component === null || component === undefined) {
|
|
215
|
+
throw new Error(`Invalid component at ${path}: null or undefined`);
|
|
216
|
+
}
|
|
217
|
+
// Allow strings, numbers, booleans as text content
|
|
218
|
+
if (['string', 'number', 'boolean'].includes(typeof component)) {
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
// Allow functions (will be evaluated during render)
|
|
222
|
+
if (typeof component === 'function') {
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
// Handle arrays
|
|
226
|
+
if (Array.isArray(component)) {
|
|
227
|
+
component.forEach((child, index) => {
|
|
228
|
+
validateComponent(child, `${path}[${index}]`);
|
|
229
|
+
});
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
// Handle objects
|
|
233
|
+
if (typeof component === 'object') {
|
|
234
|
+
const keys = Object.keys(component);
|
|
235
|
+
if (keys.length === 0) {
|
|
236
|
+
throw new Error(`Empty object at ${path}`);
|
|
237
|
+
}
|
|
238
|
+
keys.forEach(key => {
|
|
239
|
+
const value = component[key];
|
|
240
|
+
// Validate HTML tag names (basic validation)
|
|
241
|
+
if (!/^[a-zA-Z][a-zA-Z0-9-]*$/.test(key) && key !== 'text') {
|
|
242
|
+
console.warn(`Potentially invalid tag name at ${path}: ${key}`);
|
|
243
|
+
}
|
|
244
|
+
// If value is an object, it should be props
|
|
245
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
246
|
+
// Validate children if present
|
|
247
|
+
if (value.children) {
|
|
248
|
+
validateComponent(value.children, `${path}.${key}.children`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else if (value && typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'function') {
|
|
252
|
+
throw new Error(`Invalid value type at ${path}.${key}: ${typeof value}`);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
throw new Error(`Invalid component type at ${path}: ${typeof component}`);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Check if an object follows Coherent.js object syntax
|
|
261
|
+
*/
|
|
262
|
+
export function isCoherentObject(obj) {
|
|
263
|
+
if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
const keys = Object.keys(obj);
|
|
267
|
+
// Empty objects are not coherent objects
|
|
268
|
+
if (keys.length === 0) {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
// Check if all keys look like HTML tags or 'text'
|
|
272
|
+
return keys.every(key => {
|
|
273
|
+
// Allow 'text' as a special key
|
|
274
|
+
if (key === 'text')
|
|
275
|
+
return true;
|
|
276
|
+
// Basic HTML tag validation
|
|
277
|
+
return /^[a-zA-Z][a-zA-Z0-9-]*$/.test(key);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Extract props from a Coherent object
|
|
282
|
+
*/
|
|
283
|
+
export function extractProps(coherentObj) {
|
|
284
|
+
if (!isCoherentObject(coherentObj)) {
|
|
285
|
+
return {};
|
|
286
|
+
}
|
|
287
|
+
const props = {};
|
|
288
|
+
const keys = Object.keys(coherentObj);
|
|
289
|
+
keys.forEach(tag => {
|
|
290
|
+
const value = coherentObj[tag];
|
|
291
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
292
|
+
props[tag] = { ...value };
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
props[tag] = { text: value };
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
return props;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Check if a component has children
|
|
302
|
+
*/
|
|
303
|
+
export function hasChildren(component) {
|
|
304
|
+
if (Array.isArray(component)) {
|
|
305
|
+
return component.length > 0;
|
|
306
|
+
}
|
|
307
|
+
if (isCoherentObject(component)) {
|
|
308
|
+
// First check if the component itself has a children property
|
|
309
|
+
if (component.children !== undefined && component.children !== null) {
|
|
310
|
+
return Array.isArray(component.children) ? component.children.length > 0 : true;
|
|
311
|
+
}
|
|
312
|
+
// Then check if any of its properties have children
|
|
313
|
+
const keys = Object.keys(component);
|
|
314
|
+
return keys.some(key => {
|
|
315
|
+
const value = component[key];
|
|
316
|
+
return value && typeof value === 'object' && value.children;
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Normalize children to a consistent array format
|
|
323
|
+
*/
|
|
324
|
+
export function normalizeChildren(children) {
|
|
325
|
+
if (children === null || children === undefined) {
|
|
326
|
+
return [];
|
|
327
|
+
}
|
|
328
|
+
if (Array.isArray(children)) {
|
|
329
|
+
return children.flat().filter(child => child !== null && child !== undefined);
|
|
330
|
+
}
|
|
331
|
+
return [children];
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Get children from a component's props
|
|
335
|
+
*/
|
|
336
|
+
export function getChildren(_props) {
|
|
337
|
+
if (!props || typeof props !== 'object') {
|
|
338
|
+
return [];
|
|
339
|
+
}
|
|
340
|
+
if (props.children === undefined) {
|
|
341
|
+
return [];
|
|
342
|
+
}
|
|
343
|
+
return normalizeChildren(props.children);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Merge props objects with conflict resolution
|
|
347
|
+
*/
|
|
348
|
+
export function mergeProps(base = {}, override = {}) {
|
|
349
|
+
const merged = { ...base };
|
|
350
|
+
Object.keys(override).forEach(key => {
|
|
351
|
+
if (key === 'children') {
|
|
352
|
+
// Merge children arrays
|
|
353
|
+
const baseChildren = normalizeChildren(base.children);
|
|
354
|
+
const overrideChildren = normalizeChildren(override.children);
|
|
355
|
+
merged.children = [...baseChildren, ...overrideChildren];
|
|
356
|
+
}
|
|
357
|
+
else if (key === 'className' && base.className) {
|
|
358
|
+
// Merge class names
|
|
359
|
+
merged.className = `${base.className} ${override.className}`;
|
|
360
|
+
}
|
|
361
|
+
else if (key === 'style' && base.style && typeof base.style === 'object') {
|
|
362
|
+
// Merge style objects
|
|
363
|
+
merged.style = { ...base.style, ...override.style };
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
// Override other properties
|
|
367
|
+
merged[key] = override[key];
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
return merged;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Get nested value from object using dot notation
|
|
374
|
+
*/
|
|
375
|
+
export function getNestedValue(obj, path) {
|
|
376
|
+
if (!obj || typeof path !== 'string') {
|
|
377
|
+
return undefined;
|
|
378
|
+
}
|
|
379
|
+
return path.split('.').reduce((current, key) => {
|
|
380
|
+
return current && current[key] !== undefined ? current[key] : undefined;
|
|
381
|
+
}, obj);
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Set nested value in object using dot notation
|
|
385
|
+
*/
|
|
386
|
+
export function setNestedValue(obj, path, value) {
|
|
387
|
+
if (!obj || typeof path !== 'string') {
|
|
388
|
+
return obj;
|
|
389
|
+
}
|
|
390
|
+
const keys = path.split('.');
|
|
391
|
+
const lastKey = keys.pop();
|
|
392
|
+
const target = keys.reduce((current, key) => {
|
|
393
|
+
if (!current[key] || typeof current[key] !== 'object') {
|
|
394
|
+
current[key] = {};
|
|
395
|
+
}
|
|
396
|
+
return current[key];
|
|
397
|
+
}, obj);
|
|
398
|
+
target[lastKey] = value;
|
|
399
|
+
return obj;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Compare two components for equality (useful for optimization)
|
|
403
|
+
*/
|
|
404
|
+
export function isEqual(a, b, maxDepth = 5, currentDepth = 0) {
|
|
405
|
+
// Prevent deep comparisons that are too expensive
|
|
406
|
+
if (currentDepth > maxDepth) {
|
|
407
|
+
return a === b;
|
|
408
|
+
}
|
|
409
|
+
if (a === b)
|
|
410
|
+
return true;
|
|
411
|
+
if (a === null || b === null || a === undefined || b === undefined)
|
|
412
|
+
return false;
|
|
413
|
+
if (typeof a !== typeof b)
|
|
414
|
+
return false;
|
|
415
|
+
if (typeof a === 'function') {
|
|
416
|
+
// Functions are compared by reference
|
|
417
|
+
return a === b;
|
|
418
|
+
}
|
|
419
|
+
if (Array.isArray(a)) {
|
|
420
|
+
if (!Array.isArray(b) || a.length !== b.length)
|
|
421
|
+
return false;
|
|
422
|
+
return a.every((item, i) => isEqual(item, b[i], maxDepth, currentDepth + 1));
|
|
423
|
+
}
|
|
424
|
+
if (typeof a === 'object') {
|
|
425
|
+
const keysA = Object.keys(a);
|
|
426
|
+
const keysB = Object.keys(b);
|
|
427
|
+
if (keysA.length !== keysB.length)
|
|
428
|
+
return false;
|
|
429
|
+
return keysA.every(key => keysB.includes(key) &&
|
|
430
|
+
isEqual(a[key], b[key], maxDepth, currentDepth + 1));
|
|
431
|
+
}
|
|
432
|
+
return false;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Create a frozen (immutable) version of a component
|
|
436
|
+
*/
|
|
437
|
+
export function freeze(obj) {
|
|
438
|
+
if (obj && typeof obj === 'object') {
|
|
439
|
+
Object.freeze(obj);
|
|
440
|
+
// Recursively freeze nested objects
|
|
441
|
+
Object.values(obj).forEach(value => {
|
|
442
|
+
if (value && typeof value === 'object') {
|
|
443
|
+
freeze(value);
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
return obj;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Check if component tree contains circular references
|
|
451
|
+
*/
|
|
452
|
+
export function hasCircularReferences(obj, seen = new WeakSet()) {
|
|
453
|
+
if (obj && typeof obj === 'object') {
|
|
454
|
+
if (seen.has(obj)) {
|
|
455
|
+
return true;
|
|
456
|
+
}
|
|
457
|
+
seen.add(obj);
|
|
458
|
+
for (const value of Object.values(obj)) {
|
|
459
|
+
if (hasCircularReferences(value, seen)) {
|
|
460
|
+
return true;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Get memory footprint estimate of a component tree
|
|
468
|
+
*/
|
|
469
|
+
export function getMemoryFootprint(obj, visited = new WeakSet()) {
|
|
470
|
+
if (obj === null || obj === undefined)
|
|
471
|
+
return 0;
|
|
472
|
+
if (visited.has(obj))
|
|
473
|
+
return 0;
|
|
474
|
+
let size = 0;
|
|
475
|
+
if (typeof obj === 'string') {
|
|
476
|
+
size = obj.length * 2; // Rough estimate: 2 bytes per character
|
|
477
|
+
}
|
|
478
|
+
else if (typeof obj === 'number') {
|
|
479
|
+
size = 8; // 64-bit number
|
|
480
|
+
}
|
|
481
|
+
else if (typeof obj === 'boolean') {
|
|
482
|
+
size = 4; // Boolean
|
|
483
|
+
}
|
|
484
|
+
else if (typeof obj === 'object') {
|
|
485
|
+
visited.add(obj);
|
|
486
|
+
size = 48; // Base object overhead
|
|
487
|
+
if (Array.isArray(obj)) {
|
|
488
|
+
size += obj.length * 8; // Array overhead
|
|
489
|
+
obj.forEach(item => {
|
|
490
|
+
size += getMemoryFootprint(item, visited);
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
Object.keys(obj).forEach(key => {
|
|
495
|
+
size += key.length * 2; // Key string
|
|
496
|
+
size += getMemoryFootprint(obj[key], visited);
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return size;
|
|
501
|
+
}
|
|
502
|
+
//# sourceMappingURL=object-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-utils.js","sourceRoot":"","sources":["../../../../src/core/object-utils.js"],"names":[],"mappings":"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"}
|