@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,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML-specific utility functions
|
|
3
|
+
*/
|
|
4
|
+
export function escapeHtml(text) {
|
|
5
|
+
if (typeof text !== 'string')
|
|
6
|
+
return text;
|
|
7
|
+
return text
|
|
8
|
+
.replace(/&/g, '&')
|
|
9
|
+
.replace(/</g, '<')
|
|
10
|
+
.replace(/>/g, '>')
|
|
11
|
+
.replace(/"/g, '"')
|
|
12
|
+
.replace(/'/g, ''');
|
|
13
|
+
}
|
|
14
|
+
export function unescapeHtml(text) {
|
|
15
|
+
if (typeof text !== 'string')
|
|
16
|
+
return text;
|
|
17
|
+
return text
|
|
18
|
+
.replace(/"/g, '"')
|
|
19
|
+
.replace(/'/g, "'")
|
|
20
|
+
.replace(/>/g, '>')
|
|
21
|
+
.replace(/</g, '<')
|
|
22
|
+
.replace(/&/g, '&');
|
|
23
|
+
}
|
|
24
|
+
export function isVoidElement(tagName) {
|
|
25
|
+
// Ensure tagName is a string before processing
|
|
26
|
+
if (typeof tagName !== 'string') {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
const voidElements = new Set([
|
|
30
|
+
'area',
|
|
31
|
+
'base',
|
|
32
|
+
'br',
|
|
33
|
+
'col',
|
|
34
|
+
'embed',
|
|
35
|
+
'hr',
|
|
36
|
+
'img',
|
|
37
|
+
'input',
|
|
38
|
+
'link',
|
|
39
|
+
'meta',
|
|
40
|
+
'param',
|
|
41
|
+
'source',
|
|
42
|
+
'track',
|
|
43
|
+
'wbr',
|
|
44
|
+
]);
|
|
45
|
+
return voidElements.has(tagName.toLowerCase());
|
|
46
|
+
}
|
|
47
|
+
export function formatAttributes(_props) {
|
|
48
|
+
let formatted = '';
|
|
49
|
+
for (const key in _props) {
|
|
50
|
+
if (props.hasOwnProperty(key)) {
|
|
51
|
+
let value = props[key];
|
|
52
|
+
// Convert className to class for HTML output
|
|
53
|
+
const attributeName = key === 'className' ? 'class' : key;
|
|
54
|
+
// Handle function values - for event handlers, use data-action attributes
|
|
55
|
+
if (typeof value === 'function') {
|
|
56
|
+
// Check if this is an event handler (starts with 'on')
|
|
57
|
+
if (attributeName.startsWith('on')) {
|
|
58
|
+
// For event handlers, create a unique action identifier
|
|
59
|
+
const actionId = `__coherent_action_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
60
|
+
const DEBUG = (typeof process !== 'undefined' && process && process.env && (process.env.COHERENT_DEBUG === '1' || process.env.NODE_ENV === 'development'))
|
|
61
|
+
|| (typeof window !== 'undefined' && window && window.COHERENT_DEBUG === true);
|
|
62
|
+
// Store the function in a global registry that will be available during hydration
|
|
63
|
+
// Check if we're in Node.js or browser environment
|
|
64
|
+
if (typeof global !== 'undefined') {
|
|
65
|
+
// Server-side, store in global for hydration
|
|
66
|
+
if (!global.__coherentActionRegistry) {
|
|
67
|
+
global.__coherentActionRegistry = {};
|
|
68
|
+
if (DEBUG)
|
|
69
|
+
console.log('Initialized global action registry');
|
|
70
|
+
}
|
|
71
|
+
global.__coherentActionRegistry[actionId] = value;
|
|
72
|
+
if (DEBUG)
|
|
73
|
+
console.log(`Added action ${actionId} to global registry, total: ${Object.keys(global.__coherentActionRegistry).length}`);
|
|
74
|
+
if (DEBUG)
|
|
75
|
+
console.log(`Global registry keys: ${Object.keys(global.__coherentActionRegistry).join(', ')}`);
|
|
76
|
+
// Log the global object to see if it's being reset
|
|
77
|
+
if (DEBUG) {
|
|
78
|
+
if (typeof global.__coherentActionRegistryLog === 'undefined') {
|
|
79
|
+
global.__coherentActionRegistryLog = [];
|
|
80
|
+
}
|
|
81
|
+
global.__coherentActionRegistryLog.push({
|
|
82
|
+
action: 'add',
|
|
83
|
+
actionId: actionId,
|
|
84
|
+
timestamp: Date.now(),
|
|
85
|
+
registrySize: Object.keys(global.__coherentActionRegistry).length
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (typeof window !== 'undefined') {
|
|
90
|
+
// Browser-side, store in window
|
|
91
|
+
if (!window.__coherentActionRegistry) {
|
|
92
|
+
window.__coherentActionRegistry = {};
|
|
93
|
+
if (DEBUG)
|
|
94
|
+
console.log('Initialized window action registry');
|
|
95
|
+
}
|
|
96
|
+
window.__coherentActionRegistry[actionId] = value;
|
|
97
|
+
if (DEBUG)
|
|
98
|
+
console.log(`Added action ${actionId} to window registry, total: ${Object.keys(window.__coherentActionRegistry).length}`);
|
|
99
|
+
if (DEBUG)
|
|
100
|
+
console.log(`Window registry keys: ${Object.keys(window.__coherentActionRegistry).join(', ')}`);
|
|
101
|
+
}
|
|
102
|
+
// Use data-action and data-event attributes instead of inline JS
|
|
103
|
+
const eventType = attributeName.substring(2); // Remove 'on' prefix
|
|
104
|
+
formatted += ` data-action="${actionId}" data-event="${eventType}"`;
|
|
105
|
+
continue; // Skip normal processing
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// For other function attributes, call them to get the value
|
|
109
|
+
try {
|
|
110
|
+
value = value();
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.warn(`Error executing function for attribute '${key}':`, {
|
|
114
|
+
error: error.message,
|
|
115
|
+
stack: error.stack,
|
|
116
|
+
attributeKey: key,
|
|
117
|
+
});
|
|
118
|
+
// Consider different fallback strategies based on attribute type
|
|
119
|
+
value = '';
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (value === true) {
|
|
124
|
+
formatted += ` ${attributeName}`;
|
|
125
|
+
}
|
|
126
|
+
else if (value !== false && value !== null && value !== undefined) {
|
|
127
|
+
formatted += ` ${attributeName}="${escapeHtml(String(value))}"`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return formatted.trim();
|
|
132
|
+
}
|
|
133
|
+
export function minifyHtml(html, options = {}) {
|
|
134
|
+
if (!options.minify)
|
|
135
|
+
return html;
|
|
136
|
+
return (html
|
|
137
|
+
// Remove comments
|
|
138
|
+
.replace(/<!--[\s\S]*?-->/g, '')
|
|
139
|
+
// Remove extra whitespace
|
|
140
|
+
.replace(/\s+/g, ' ')
|
|
141
|
+
// Remove whitespace around tags
|
|
142
|
+
.replace(/>\s+</g, '><')
|
|
143
|
+
// Remove leading/trailing whitespace
|
|
144
|
+
.trim());
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* HTML Void Elements - elements that cannot have children
|
|
148
|
+
* These elements are self-closing and don't need closing tags
|
|
149
|
+
*/
|
|
150
|
+
export const voidElements = new Set([
|
|
151
|
+
'area',
|
|
152
|
+
'base',
|
|
153
|
+
'br',
|
|
154
|
+
'col',
|
|
155
|
+
'embed',
|
|
156
|
+
'hr',
|
|
157
|
+
'img',
|
|
158
|
+
'input',
|
|
159
|
+
'link',
|
|
160
|
+
'meta',
|
|
161
|
+
'param',
|
|
162
|
+
'source',
|
|
163
|
+
'track',
|
|
164
|
+
'wbr',
|
|
165
|
+
]);
|
|
166
|
+
//# sourceMappingURL=html-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-utils.js","sourceRoot":"","sources":["../../../../src/core/html-utils.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a Coherent object with the specified tag and properties
|
|
3
|
+
* @param {string} tag - HTML tag name
|
|
4
|
+
* @param {Object} [props={}] - Properties object
|
|
5
|
+
* @returns {Object} Coherent object with element structure
|
|
6
|
+
* @throws {Error} When invalid HTML element is provided
|
|
7
|
+
*/
|
|
8
|
+
export function createElement(tag: string, props?: Object): Object;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a text node
|
|
11
|
+
* @param {string} text - Text content
|
|
12
|
+
* @returns {Object} Coherent text object
|
|
13
|
+
*/
|
|
14
|
+
export function createTextNode(text: string): Object;
|
|
15
|
+
export namespace h {
|
|
16
|
+
function div(props: any): Object;
|
|
17
|
+
function span(props: any): Object;
|
|
18
|
+
function p(props: any): Object;
|
|
19
|
+
function h1(props: any): Object;
|
|
20
|
+
function h2(props: any): Object;
|
|
21
|
+
function h3(props: any): Object;
|
|
22
|
+
function h4(props: any): Object;
|
|
23
|
+
function h5(props: any): Object;
|
|
24
|
+
function h6(props: any): Object;
|
|
25
|
+
function a(props: any): Object;
|
|
26
|
+
function img(props: any): Object;
|
|
27
|
+
function button(props: any): Object;
|
|
28
|
+
function input(props: any): Object;
|
|
29
|
+
function form(props: any): Object;
|
|
30
|
+
function ul(props: any): Object;
|
|
31
|
+
function ol(props: any): Object;
|
|
32
|
+
function li(props: any): Object;
|
|
33
|
+
function table(props: any): Object;
|
|
34
|
+
function tr(props: any): Object;
|
|
35
|
+
function td(props: any): Object;
|
|
36
|
+
function th(props: any): Object;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=object-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-factory.d.ts","sourceRoot":"","sources":["../../../../src/core/object-factory.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,mCALW,MAAM,UACN,MAAM,GACJ,MAAM,CAiBlB;AAED;;;;GAIG;AACH,qCAHW,MAAM,GACJ,MAAM,CAOlB;;IAMQ,iCAAsC;IACrC,kCAAuC;IAC1C,+BAAoC;IACnC,gCAAqC;IACrC,gCAAqC;IACrC,gCAAqC;IACrC,gCAAqC;IACrC,gCAAqC;IACrC,gCAAqC;IACtC,+BAAoC;IAClC,iCAAsC;IACnC,oCAAyC;IAC1C,mCAAwC;IACzC,kCAAuC;IACzC,gCAAqC;IACrC,gCAAqC;IACrC,gCAAqC;IAClC,mCAAwC;IAC3C,gCAAqC;IACrC,gCAAqC;IACrC,gCAAqC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Object Factory for Coherent.js
|
|
3
|
+
* @fileoverview Creates Coherent objects with HTML elements and text nodes
|
|
4
|
+
*/
|
|
5
|
+
import { HTML_ELEMENTS, CoherentTypes } from '../types/constants.js';
|
|
6
|
+
/**
|
|
7
|
+
* Creates a Coherent object with the specified tag and properties
|
|
8
|
+
* @param {string} tag - HTML tag name
|
|
9
|
+
* @param {Object} [props={}] - Properties object
|
|
10
|
+
* @returns {Object} Coherent object with element structure
|
|
11
|
+
* @throws {Error} When invalid HTML element is provided
|
|
12
|
+
*/
|
|
13
|
+
export function createElement(tag, props = {}) {
|
|
14
|
+
if (!HTML_ELEMENTS.has(tag)) {
|
|
15
|
+
throw new Error(`Invalid HTML element: ${tag}`);
|
|
16
|
+
}
|
|
17
|
+
// Create the coherent object structure
|
|
18
|
+
const coherentObj = {
|
|
19
|
+
[tag]: {
|
|
20
|
+
...props,
|
|
21
|
+
_type: CoherentTypes.ELEMENT
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
return coherentObj;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Creates a text node
|
|
28
|
+
* @param {string} text - Text content
|
|
29
|
+
* @returns {Object} Coherent text object
|
|
30
|
+
*/
|
|
31
|
+
export function createTextNode(text) {
|
|
32
|
+
return {
|
|
33
|
+
text: String(text),
|
|
34
|
+
_type: CoherentTypes.OBJECT
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Helper function to create common elements
|
|
39
|
+
*/
|
|
40
|
+
export const h = {
|
|
41
|
+
div: (_props) => createElement('div', _props),
|
|
42
|
+
span: (_props) => createElement('span', _props),
|
|
43
|
+
p: (_props) => createElement('p', _props),
|
|
44
|
+
h1: (_props) => createElement('h1', _props),
|
|
45
|
+
h2: (_props) => createElement('h2', _props),
|
|
46
|
+
h3: (_props) => createElement('h3', _props),
|
|
47
|
+
h4: (_props) => createElement('h4', _props),
|
|
48
|
+
h5: (_props) => createElement('h5', _props),
|
|
49
|
+
h6: (_props) => createElement('h6', _props),
|
|
50
|
+
a: (_props) => createElement('a', _props),
|
|
51
|
+
img: (_props) => createElement('img', _props),
|
|
52
|
+
button: (_props) => createElement('button', _props),
|
|
53
|
+
input: (_props) => createElement('input', _props),
|
|
54
|
+
form: (_props) => createElement('form', _props),
|
|
55
|
+
ul: (_props) => createElement('ul', _props),
|
|
56
|
+
ol: (_props) => createElement('ol', _props),
|
|
57
|
+
li: (_props) => createElement('li', _props),
|
|
58
|
+
table: (_props) => createElement('table', _props),
|
|
59
|
+
tr: (_props) => createElement('tr', _props),
|
|
60
|
+
td: (_props) => createElement('td', _props),
|
|
61
|
+
th: (_props) => createElement('th', _props)
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=object-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-factory.js","sourceRoot":"","sources":["../../../../src/core/object-factory.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
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: any, seen?: WeakMap<object, any>): any;
|
|
10
|
+
/**
|
|
11
|
+
* Shallow clone optimized for Coherent objects
|
|
12
|
+
* Much faster than deep clone when you only need one level
|
|
13
|
+
*/
|
|
14
|
+
export function shallowClone(obj: any): any;
|
|
15
|
+
/**
|
|
16
|
+
* Smart clone that chooses between shallow and deep based on structure
|
|
17
|
+
* Optimized for Coherent component patterns
|
|
18
|
+
*/
|
|
19
|
+
export function smartClone(obj: any, maxDepth?: number, currentDepth?: number): any;
|
|
20
|
+
/**
|
|
21
|
+
* Clone with performance monitoring
|
|
22
|
+
* Useful for debugging clone performance in development
|
|
23
|
+
*/
|
|
24
|
+
export function monitoredClone(obj: any, options?: {}): any;
|
|
25
|
+
/**
|
|
26
|
+
* Validate that a component structure is valid for rendering
|
|
27
|
+
*/
|
|
28
|
+
export function validateComponent(component: any, path?: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Check if an object follows Coherent.js object syntax
|
|
31
|
+
*/
|
|
32
|
+
export function isCoherentObject(obj: any): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Extract props from a Coherent object
|
|
35
|
+
*/
|
|
36
|
+
export function extractProps(coherentObj: any): {};
|
|
37
|
+
/**
|
|
38
|
+
* Check if a component has children
|
|
39
|
+
*/
|
|
40
|
+
export function hasChildren(component: any): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Normalize children to a consistent array format
|
|
43
|
+
*/
|
|
44
|
+
export function normalizeChildren(children: any): any[];
|
|
45
|
+
/**
|
|
46
|
+
* Get children from a component's props
|
|
47
|
+
*/
|
|
48
|
+
export function getChildren(props: any): any[];
|
|
49
|
+
/**
|
|
50
|
+
* Merge props objects with conflict resolution
|
|
51
|
+
*/
|
|
52
|
+
export function mergeProps(base?: {}, override?: {}): {};
|
|
53
|
+
/**
|
|
54
|
+
* Get nested value from object using dot notation
|
|
55
|
+
*/
|
|
56
|
+
export function getNestedValue(obj: any, path: any): any;
|
|
57
|
+
/**
|
|
58
|
+
* Set nested value in object using dot notation
|
|
59
|
+
*/
|
|
60
|
+
export function setNestedValue(obj: any, path: any, value: any): any;
|
|
61
|
+
/**
|
|
62
|
+
* Compare two components for equality (useful for optimization)
|
|
63
|
+
*/
|
|
64
|
+
export function isEqual(a: any, b: any, maxDepth?: number, currentDepth?: number): any;
|
|
65
|
+
/**
|
|
66
|
+
* Create a frozen (immutable) version of a component
|
|
67
|
+
*/
|
|
68
|
+
export function freeze(obj: any): any;
|
|
69
|
+
/**
|
|
70
|
+
* Check if component tree contains circular references
|
|
71
|
+
*/
|
|
72
|
+
export function hasCircularReferences(obj: any, seen?: WeakSet<object>): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Get memory footprint estimate of a component tree
|
|
75
|
+
*/
|
|
76
|
+
export function getMemoryFootprint(obj: any, visited?: WeakSet<object>): number;
|
|
77
|
+
//# sourceMappingURL=object-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-utils.d.ts","sourceRoot":"","sources":["../../../../src/core/object-utils.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,sEA+GC;AAED;;;GAGG;AACH,4CAmBC;AAED;;;GAGG;AACH,oFAiDC;AAmBD;;;GAGG;AACH,4DA8BC;AAID;;GAEG;AACH,0EAsDC;AAED;;GAEG;AACH,oDAoBC;AAED;;GAEG;AACH,mDAkBC;AAED;;GAEG;AACH,qDAoBC;AAED;;GAEG;AACH,wDAUC;AAED;;GAEG;AACH,+CAUC;AAED;;GAEG;AACH,yDAsBC;AAED;;GAEG;AACH,yDAQC;AAED;;GAEG;AACH,qEAiBC;AAED;;GAEG;AACH,uFAiCC;AAED;;GAEG;AACH,sCAaC;AAED;;GAEG;AACH,iFAgBC;AAED;;GAEG;AACH,gFA8BC"}
|