@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,416 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Virtual DOM Diffing Engine for Coherent.js
|
|
3
|
+
* Implements efficient diffing algorithm to minimize DOM updates
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Types of virtual DOM operations
|
|
7
|
+
*/
|
|
8
|
+
export const VDOM_OPERATIONS = {
|
|
9
|
+
CREATE: 'CREATE',
|
|
10
|
+
UPDATE: 'UPDATE',
|
|
11
|
+
REMOVE: 'REMOVE',
|
|
12
|
+
REPLACE: 'REPLACE',
|
|
13
|
+
MOVE: 'MOVE'
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Virtual DOM node structure
|
|
17
|
+
*/
|
|
18
|
+
export function createVNode(type, props = {}, children = []) {
|
|
19
|
+
return {
|
|
20
|
+
type,
|
|
21
|
+
props: props || {},
|
|
22
|
+
children: Array.isArray(children) ? children : [children].filter(Boolean),
|
|
23
|
+
key: props?.key,
|
|
24
|
+
_coherent: true
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Convert Coherent object to virtual DOM node
|
|
29
|
+
*/
|
|
30
|
+
export function objectToVNode(component, depth = 0) {
|
|
31
|
+
if (depth > 100) {
|
|
32
|
+
console.warn('Maximum depth reached in virtual DOM creation');
|
|
33
|
+
return createVNode('span', {}, ['Maximum depth exceeded']);
|
|
34
|
+
}
|
|
35
|
+
if (component === null || component === undefined) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
if (typeof component === 'string' || typeof component === 'number') {
|
|
39
|
+
return String(component);
|
|
40
|
+
}
|
|
41
|
+
if (typeof component === 'boolean') {
|
|
42
|
+
return component ? 'true' : 'false';
|
|
43
|
+
}
|
|
44
|
+
if (Array.isArray(component)) {
|
|
45
|
+
return component.map(child => objectToVNode(child, depth + 1)).filter(Boolean);
|
|
46
|
+
}
|
|
47
|
+
if (typeof component === 'function') {
|
|
48
|
+
try {
|
|
49
|
+
const result = component();
|
|
50
|
+
return objectToVNode(result, depth + 1);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error('Error executing function component:', error);
|
|
54
|
+
return createVNode('span', { className: 'error' }, [`Error: ${error.message}`]);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (typeof component === 'object' && component !== null) {
|
|
58
|
+
const entries = Object.entries(component);
|
|
59
|
+
if (entries.length === 1) {
|
|
60
|
+
const [tagName, props] = entries[0];
|
|
61
|
+
if (typeof props === 'object' && props !== null) {
|
|
62
|
+
const { children, text, ...otherProps } = props;
|
|
63
|
+
let childNodes = [];
|
|
64
|
+
if (text !== undefined) {
|
|
65
|
+
childNodes = [String(text)];
|
|
66
|
+
}
|
|
67
|
+
else if (children) {
|
|
68
|
+
if (Array.isArray(children)) {
|
|
69
|
+
childNodes = children.map(child => objectToVNode(child, depth + 1)).filter(Boolean);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const child = objectToVNode(children, depth + 1);
|
|
73
|
+
if (child)
|
|
74
|
+
childNodes = [child];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return createVNode(tagName, otherProps, childNodes);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Simple case: { div: 'text content' }
|
|
81
|
+
return createVNode(tagName, {}, [String(_props)]);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Compare two virtual DOM nodes and generate patch operations
|
|
89
|
+
*/
|
|
90
|
+
export function diff(oldVNode, newVNode, patches = [], path = []) {
|
|
91
|
+
// Handle null cases
|
|
92
|
+
if (!oldVNode && !newVNode) {
|
|
93
|
+
return patches;
|
|
94
|
+
}
|
|
95
|
+
if (!oldVNode && newVNode) {
|
|
96
|
+
patches.push({
|
|
97
|
+
type: VDOM_OPERATIONS.CREATE,
|
|
98
|
+
path: [...path],
|
|
99
|
+
vnode: newVNode
|
|
100
|
+
});
|
|
101
|
+
return patches;
|
|
102
|
+
}
|
|
103
|
+
if (oldVNode && !newVNode) {
|
|
104
|
+
patches.push({
|
|
105
|
+
type: VDOM_OPERATIONS.REMOVE,
|
|
106
|
+
path: [...path]
|
|
107
|
+
});
|
|
108
|
+
return patches;
|
|
109
|
+
}
|
|
110
|
+
// Handle text nodes
|
|
111
|
+
if (typeof oldVNode === 'string' || typeof newVNode === 'string') {
|
|
112
|
+
if (oldVNode !== newVNode) {
|
|
113
|
+
patches.push({
|
|
114
|
+
type: VDOM_OPERATIONS.REPLACE,
|
|
115
|
+
path: [...path],
|
|
116
|
+
vnode: newVNode
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return patches;
|
|
120
|
+
}
|
|
121
|
+
// Handle array diffing (fragment children)
|
|
122
|
+
if (Array.isArray(oldVNode) || Array.isArray(newVNode)) {
|
|
123
|
+
return diffArrays(oldVNode, newVNode, patches, path);
|
|
124
|
+
}
|
|
125
|
+
// Handle element diffing
|
|
126
|
+
if (oldVNode.type !== newVNode.type) {
|
|
127
|
+
patches.push({
|
|
128
|
+
type: VDOM_OPERATIONS.REPLACE,
|
|
129
|
+
path: [...path],
|
|
130
|
+
vnode: newVNode
|
|
131
|
+
});
|
|
132
|
+
return patches;
|
|
133
|
+
}
|
|
134
|
+
// Diff props
|
|
135
|
+
const propPatches = diffProps(oldVNode.props, newVNode.props, path);
|
|
136
|
+
patches.push(...propPatches);
|
|
137
|
+
// Diff children
|
|
138
|
+
diffArrays(oldVNode.children, newVNode.children, patches, [...path, 'children']);
|
|
139
|
+
return patches;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Diff arrays of virtual nodes (optimized for keyed elements)
|
|
143
|
+
*/
|
|
144
|
+
function diffArrays(oldChildren = [], newChildren = [], patches = [], path = []) {
|
|
145
|
+
const oldArray = Array.isArray(oldChildren) ? oldChildren : [oldChildren].filter(Boolean);
|
|
146
|
+
const newArray = Array.isArray(newChildren) ? newChildren : [newChildren].filter(Boolean);
|
|
147
|
+
// Simple case: lengths differ significantly, replace all
|
|
148
|
+
if (Math.abs(oldArray.length - newArray.length) > Math.max(oldArray.length, newArray.length) * 0.5) {
|
|
149
|
+
patches.push({
|
|
150
|
+
type: VDOM_OPERATIONS.REPLACE,
|
|
151
|
+
path: [...path],
|
|
152
|
+
vnode: newArray
|
|
153
|
+
});
|
|
154
|
+
return patches;
|
|
155
|
+
}
|
|
156
|
+
// Track keys for efficient reordering
|
|
157
|
+
const oldKeyMap = new Map();
|
|
158
|
+
const newKeyMap = new Map();
|
|
159
|
+
oldArray.forEach((child, index) => {
|
|
160
|
+
if (child && child.key !== undefined) {
|
|
161
|
+
oldKeyMap.set(child.key, { child, index });
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
newArray.forEach((child, index) => {
|
|
165
|
+
if (child && child.key !== undefined) {
|
|
166
|
+
newKeyMap.set(child.key, { child, index });
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
// Process children
|
|
170
|
+
const maxLength = Math.max(oldArray.length, newArray.length);
|
|
171
|
+
for (let i = 0; i < maxLength; i++) {
|
|
172
|
+
const oldChild = oldArray[i];
|
|
173
|
+
const newChild = newArray[i];
|
|
174
|
+
const childPath = [...path, i];
|
|
175
|
+
if (oldChild && newChild && oldChild.key && newChild.key) {
|
|
176
|
+
// Handle keyed elements
|
|
177
|
+
if (oldChild.key !== newChild.key) {
|
|
178
|
+
// Check if this is a move operation
|
|
179
|
+
const oldPos = newKeyMap.get(oldChild.key);
|
|
180
|
+
if (oldPos && oldPos.index !== i) {
|
|
181
|
+
patches.push({
|
|
182
|
+
type: VDOM_OPERATIONS.MOVE,
|
|
183
|
+
path: childPath,
|
|
184
|
+
from: oldPos.index,
|
|
185
|
+
to: i
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
// Replace with new element
|
|
190
|
+
patches.push({
|
|
191
|
+
type: VDOM_OPERATIONS.REPLACE,
|
|
192
|
+
path: childPath,
|
|
193
|
+
vnode: newChild
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// Same key, diff the elements
|
|
199
|
+
diff(oldChild, newChild, patches, childPath);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
// Handle non-keyed elements
|
|
204
|
+
diff(oldChild, newChild, patches, childPath);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return patches;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Diff element properties
|
|
211
|
+
*/
|
|
212
|
+
function diffProps(oldProps = {}, newProps = {}, path = []) {
|
|
213
|
+
const patches = [];
|
|
214
|
+
const allKeys = new Set([...Object.keys(oldProps), ...Object.keys(newProps)]);
|
|
215
|
+
for (const key of allKeys) {
|
|
216
|
+
if (key === 'children')
|
|
217
|
+
continue; // Children handled separately
|
|
218
|
+
const oldValue = oldProps[key];
|
|
219
|
+
const newValue = newProps[key];
|
|
220
|
+
if (oldValue !== newValue) {
|
|
221
|
+
patches.push({
|
|
222
|
+
type: VDOM_OPERATIONS.UPDATE,
|
|
223
|
+
path: [...path, 'props', key],
|
|
224
|
+
oldValue,
|
|
225
|
+
newValue
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return patches;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Apply patches to a DOM element
|
|
233
|
+
*/
|
|
234
|
+
export function patch(element, patches) {
|
|
235
|
+
if (!element || !patches.length) {
|
|
236
|
+
return element;
|
|
237
|
+
}
|
|
238
|
+
const patchResults = [];
|
|
239
|
+
for (const p of patches) {
|
|
240
|
+
try {
|
|
241
|
+
const result = applyPatch(element, p);
|
|
242
|
+
patchResults.push(result);
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
console.error('Error applying patch:', error, p);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return element;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Apply a single patch operation
|
|
252
|
+
*/
|
|
253
|
+
function applyPatch(rootElement, patch) {
|
|
254
|
+
const target = getElementByPath(rootElement, patch.path);
|
|
255
|
+
switch (patch.type) {
|
|
256
|
+
case VDOM_OPERATIONS.CREATE:
|
|
257
|
+
const newElement = vnodeToDOM(patch.vnode);
|
|
258
|
+
if (target && target.parentNode) {
|
|
259
|
+
target.parentNode.appendChild(newElement);
|
|
260
|
+
}
|
|
261
|
+
return newElement;
|
|
262
|
+
case VDOM_OPERATIONS.REMOVE:
|
|
263
|
+
if (target && target.parentNode) {
|
|
264
|
+
target.parentNode.removeChild(target);
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
case VDOM_OPERATIONS.REPLACE:
|
|
268
|
+
const replacement = vnodeToDOM(patch.vnode);
|
|
269
|
+
if (target && target.parentNode) {
|
|
270
|
+
target.parentNode.replaceChild(replacement, target);
|
|
271
|
+
}
|
|
272
|
+
return replacement;
|
|
273
|
+
case VDOM_OPERATIONS.UPDATE:
|
|
274
|
+
if (target && patch.path[patch.path.length - 2] === 'props') {
|
|
275
|
+
const propName = patch.path[patch.path.length - 1];
|
|
276
|
+
updateDOMProperty(target, propName, patch.oldValue, patch.newValue);
|
|
277
|
+
}
|
|
278
|
+
return target;
|
|
279
|
+
case VDOM_OPERATIONS.MOVE:
|
|
280
|
+
if (target && target.parentNode) {
|
|
281
|
+
const parent = target.parentNode;
|
|
282
|
+
const children = Array.from(parent.children);
|
|
283
|
+
const fromElement = children[patch.from];
|
|
284
|
+
const toPosition = patch.to;
|
|
285
|
+
if (fromElement && toPosition < children.length) {
|
|
286
|
+
parent.insertBefore(fromElement, children[toPosition]);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return target;
|
|
290
|
+
default:
|
|
291
|
+
console.warn('Unknown patch operation:', patch.type);
|
|
292
|
+
return target;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Navigate DOM tree by path
|
|
297
|
+
*/
|
|
298
|
+
function getElementByPath(element, path) {
|
|
299
|
+
let current = element;
|
|
300
|
+
for (const segment of path) {
|
|
301
|
+
if (!current)
|
|
302
|
+
return null;
|
|
303
|
+
if (segment === 'children') {
|
|
304
|
+
continue; // Skip children marker
|
|
305
|
+
}
|
|
306
|
+
if (typeof segment === 'number') {
|
|
307
|
+
current = current.children[segment];
|
|
308
|
+
}
|
|
309
|
+
else if (segment === 'props') {
|
|
310
|
+
continue; // Props handled in UPDATE operations
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return current;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Convert virtual node to DOM element
|
|
317
|
+
*/
|
|
318
|
+
function vnodeToDOM(vnode) {
|
|
319
|
+
if (typeof vnode === 'string') {
|
|
320
|
+
return document.createTextNode(vnode);
|
|
321
|
+
}
|
|
322
|
+
if (Array.isArray(vnode)) {
|
|
323
|
+
const fragment = document.createDocumentFragment();
|
|
324
|
+
vnode.forEach(child => {
|
|
325
|
+
const childElement = vnodeToDOM(child);
|
|
326
|
+
if (childElement) {
|
|
327
|
+
fragment.appendChild(childElement);
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
return fragment;
|
|
331
|
+
}
|
|
332
|
+
if (vnode && vnode.type) {
|
|
333
|
+
const element = document.createElement(vnode.type);
|
|
334
|
+
// Set properties
|
|
335
|
+
Object.entries(vnode._props).forEach(([key, value]) => {
|
|
336
|
+
updateDOMProperty(element, key, undefined, value);
|
|
337
|
+
});
|
|
338
|
+
// Append children
|
|
339
|
+
vnode.children.forEach(child => {
|
|
340
|
+
const childElement = vnodeToDOM(child);
|
|
341
|
+
if (childElement) {
|
|
342
|
+
element.appendChild(childElement);
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
return element;
|
|
346
|
+
}
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Update DOM element property
|
|
351
|
+
*/
|
|
352
|
+
function updateDOMProperty(element, name, oldValue, newValue) {
|
|
353
|
+
// Handle special properties
|
|
354
|
+
if (name === 'className' || name === 'class') {
|
|
355
|
+
element.className = newValue || '';
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
if (name.startsWith('on') && typeof newValue === 'function') {
|
|
359
|
+
const eventType = name.slice(2).toLowerCase();
|
|
360
|
+
// Remove old event listener
|
|
361
|
+
if (typeof oldValue === 'function') {
|
|
362
|
+
element.removeEventListener(eventType, oldValue);
|
|
363
|
+
}
|
|
364
|
+
// Add new event listener
|
|
365
|
+
element.addEventListener(eventType, newValue);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
if (newValue === null || newValue === undefined) {
|
|
369
|
+
element.removeAttribute(name);
|
|
370
|
+
}
|
|
371
|
+
else if (typeof newValue === 'boolean') {
|
|
372
|
+
if (newValue) {
|
|
373
|
+
element.setAttribute(name, '');
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
element.removeAttribute(name);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
element.setAttribute(name, String(newValue));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Create a virtual DOM differ for component updates
|
|
385
|
+
*/
|
|
386
|
+
export class VDOMDiffer {
|
|
387
|
+
constructor() {
|
|
388
|
+
this.cache = new Map();
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Perform efficient diff and patch
|
|
392
|
+
*/
|
|
393
|
+
update(element, oldComponent, newComponent) {
|
|
394
|
+
const oldVNode = objectToVNode(oldComponent);
|
|
395
|
+
const newVNode = objectToVNode(newComponent);
|
|
396
|
+
const patches = diff(oldVNode, newVNode);
|
|
397
|
+
if (patches.length > 0) {
|
|
398
|
+
patch(element, patches);
|
|
399
|
+
}
|
|
400
|
+
return patches.length;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Cache virtual nodes for performance
|
|
404
|
+
*/
|
|
405
|
+
cacheVNode(key, vnode) {
|
|
406
|
+
this.cache.set(key, vnode);
|
|
407
|
+
}
|
|
408
|
+
getCachedVNode(key) {
|
|
409
|
+
return this.cache.get(key);
|
|
410
|
+
}
|
|
411
|
+
clearCache() {
|
|
412
|
+
this.cache.clear();
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
export default VDOMDiffer;
|
|
416
|
+
//# sourceMappingURL=vdom-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vdom-diff.js","sourceRoot":"","sources":["../../../../src/rendering/vdom-diff.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create router instance
|
|
3
|
+
*/
|
|
4
|
+
export function createRouter(options: any): Router;
|
|
5
|
+
/**
|
|
6
|
+
* Route configuration structure
|
|
7
|
+
*/
|
|
8
|
+
export class Route {
|
|
9
|
+
constructor(config: any);
|
|
10
|
+
path: any;
|
|
11
|
+
name: any;
|
|
12
|
+
component: any;
|
|
13
|
+
children: any;
|
|
14
|
+
meta: any;
|
|
15
|
+
beforeEnter: any;
|
|
16
|
+
beforeLeave: any;
|
|
17
|
+
redirect: any;
|
|
18
|
+
alias: any;
|
|
19
|
+
params: {};
|
|
20
|
+
query: {};
|
|
21
|
+
hash: string;
|
|
22
|
+
/**
|
|
23
|
+
* Check if this route matches a path
|
|
24
|
+
*/
|
|
25
|
+
matches(path: any): {
|
|
26
|
+
params: {};
|
|
27
|
+
match: any;
|
|
28
|
+
} | null;
|
|
29
|
+
/**
|
|
30
|
+
* Match path against route pattern with parameters
|
|
31
|
+
*/
|
|
32
|
+
matchPath(path: any, pattern: any): {
|
|
33
|
+
params: {};
|
|
34
|
+
match: any;
|
|
35
|
+
} | null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Advanced router with nested routing support
|
|
39
|
+
*/
|
|
40
|
+
export class Router {
|
|
41
|
+
constructor(options?: {});
|
|
42
|
+
options: {
|
|
43
|
+
mode: any;
|
|
44
|
+
base: any;
|
|
45
|
+
fallback: boolean;
|
|
46
|
+
scrollBehavior: any;
|
|
47
|
+
};
|
|
48
|
+
routes: any[];
|
|
49
|
+
currentRoute: any;
|
|
50
|
+
history: any[];
|
|
51
|
+
guards: {
|
|
52
|
+
beforeEach: never[];
|
|
53
|
+
beforeResolve: never[];
|
|
54
|
+
afterEach: never[];
|
|
55
|
+
};
|
|
56
|
+
state: ReactiveState;
|
|
57
|
+
/**
|
|
58
|
+
* Initialize router
|
|
59
|
+
*/
|
|
60
|
+
init(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Setup browser environment
|
|
63
|
+
*/
|
|
64
|
+
setupBrowser(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Setup server environment
|
|
67
|
+
*/
|
|
68
|
+
setupServer(): void;
|
|
69
|
+
isServer: boolean | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Add routes to router
|
|
72
|
+
*/
|
|
73
|
+
addRoutes(routes: any): void;
|
|
74
|
+
/**
|
|
75
|
+
* Navigate to a route
|
|
76
|
+
*/
|
|
77
|
+
push(location: any): Promise<any>;
|
|
78
|
+
/**
|
|
79
|
+
* Replace current route
|
|
80
|
+
*/
|
|
81
|
+
replace(location: any): Promise<any>;
|
|
82
|
+
/**
|
|
83
|
+
* Go back in history
|
|
84
|
+
*/
|
|
85
|
+
back(): void;
|
|
86
|
+
/**
|
|
87
|
+
* Go forward in history
|
|
88
|
+
*/
|
|
89
|
+
forward(): void;
|
|
90
|
+
/**
|
|
91
|
+
* Navigate to specific history index
|
|
92
|
+
*/
|
|
93
|
+
go(delta: any): void;
|
|
94
|
+
/**
|
|
95
|
+
* Main navigation method
|
|
96
|
+
*/
|
|
97
|
+
navigate(location: any, method?: string): any;
|
|
98
|
+
/**
|
|
99
|
+
* Normalize location input
|
|
100
|
+
*/
|
|
101
|
+
normalizeLocation(location: any): {
|
|
102
|
+
path: string;
|
|
103
|
+
params: {};
|
|
104
|
+
query: {
|
|
105
|
+
[k: string]: string;
|
|
106
|
+
};
|
|
107
|
+
hash: string;
|
|
108
|
+
} | {
|
|
109
|
+
path: any;
|
|
110
|
+
params: any;
|
|
111
|
+
query: any;
|
|
112
|
+
hash: any;
|
|
113
|
+
name: any;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Parse URL string into route object
|
|
117
|
+
*/
|
|
118
|
+
parseURL(url: any): {
|
|
119
|
+
path: string;
|
|
120
|
+
params: {};
|
|
121
|
+
query: {
|
|
122
|
+
[k: string]: string;
|
|
123
|
+
};
|
|
124
|
+
hash: string;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Resolve route by path
|
|
128
|
+
*/
|
|
129
|
+
resolveRoute(path: any, routes?: any[], parentRoute?: null): any;
|
|
130
|
+
/**
|
|
131
|
+
* Run navigation guards
|
|
132
|
+
*/
|
|
133
|
+
runGuards(context: any): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Run individual guard
|
|
136
|
+
*/
|
|
137
|
+
runGuard(guard: any, context: any): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Update browser URL
|
|
140
|
+
*/
|
|
141
|
+
updateURL(route: any, method?: string): void;
|
|
142
|
+
/**
|
|
143
|
+
* Build URL from route
|
|
144
|
+
*/
|
|
145
|
+
buildURL(route: any): any;
|
|
146
|
+
/**
|
|
147
|
+
* Update reactive state
|
|
148
|
+
*/
|
|
149
|
+
updateState(route: any): void;
|
|
150
|
+
/**
|
|
151
|
+
* Handle browser popstate event
|
|
152
|
+
*/
|
|
153
|
+
handlePopState(): void;
|
|
154
|
+
/**
|
|
155
|
+
* Sync router state from browser location
|
|
156
|
+
*/
|
|
157
|
+
syncFromLocation(): void;
|
|
158
|
+
/**
|
|
159
|
+
* Resolve initial route
|
|
160
|
+
*/
|
|
161
|
+
resolveInitialRoute(): void;
|
|
162
|
+
/**
|
|
163
|
+
* Add navigation guards
|
|
164
|
+
*/
|
|
165
|
+
beforeEach(guard: any): () => void;
|
|
166
|
+
beforeResolve(guard: any): () => void;
|
|
167
|
+
afterEach(guard: any): () => void;
|
|
168
|
+
/**
|
|
169
|
+
* Get current route information
|
|
170
|
+
*/
|
|
171
|
+
getCurrentRoute(): any;
|
|
172
|
+
/**
|
|
173
|
+
* Check if route is current
|
|
174
|
+
*/
|
|
175
|
+
isActive(route: any, exact?: boolean): any;
|
|
176
|
+
/**
|
|
177
|
+
* Generate URL for route
|
|
178
|
+
*/
|
|
179
|
+
resolve(location: any): any;
|
|
180
|
+
/**
|
|
181
|
+
* Get router statistics
|
|
182
|
+
*/
|
|
183
|
+
getStats(): {
|
|
184
|
+
totalRoutes: number;
|
|
185
|
+
currentRoute: any;
|
|
186
|
+
historyLength: number;
|
|
187
|
+
guards: {
|
|
188
|
+
beforeEach: number;
|
|
189
|
+
beforeResolve: number;
|
|
190
|
+
afterEach: number;
|
|
191
|
+
};
|
|
192
|
+
isLoading: any;
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* Cleanup router
|
|
196
|
+
*/
|
|
197
|
+
destroy(): void;
|
|
198
|
+
}
|
|
199
|
+
export namespace routeGuards {
|
|
200
|
+
/**
|
|
201
|
+
* Authentication guard
|
|
202
|
+
*/
|
|
203
|
+
function requireAuth(authCheck: any): (to: any, from: any, next: any) => void;
|
|
204
|
+
/**
|
|
205
|
+
* Role-based access guard
|
|
206
|
+
*/
|
|
207
|
+
function requireRole(roleCheck: any, roles: any): (to: any, from: any, next: any) => void;
|
|
208
|
+
/**
|
|
209
|
+
* Meta-based guard
|
|
210
|
+
*/
|
|
211
|
+
function requireMeta(metaKey: any, expectedValue: any): (to: any, from: any, next: any) => void;
|
|
212
|
+
/**
|
|
213
|
+
* Confirmation guard
|
|
214
|
+
*/
|
|
215
|
+
function requireConfirmation(message: any, confirmCallback: any): (to: any, from: any, next: any) => void;
|
|
216
|
+
}
|
|
217
|
+
export namespace routeComponents {
|
|
218
|
+
/**
|
|
219
|
+
* Router link component
|
|
220
|
+
*/
|
|
221
|
+
function RouterLink(props?: {}): {
|
|
222
|
+
a: {
|
|
223
|
+
href: any;
|
|
224
|
+
className: string;
|
|
225
|
+
onclick: (event: any) => void;
|
|
226
|
+
children: any;
|
|
227
|
+
};
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Router view component
|
|
231
|
+
*/
|
|
232
|
+
function RouterView(props?: {}): {
|
|
233
|
+
div: {
|
|
234
|
+
className: string;
|
|
235
|
+
children: any;
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
export default Router;
|
|
240
|
+
import { ReactiveState } from '../state/reactive-state.js';
|
|
241
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../src/routing/router.js"],"names":[],"mappings":"AAuqBA;;GAEG;AACH,mDAEC;AAnqBD;;GAEG;AACH;IACI,yBAgBC;IAfG,UAAuB;IACvB,UAAuB;IACvB,eAAiC;IACjC,cAAqC;IACrC,UAA6B;IAC7B,iBAAqC;IACrC,iBAAqC;IACrC,cAA+B;IAC/B,WAAyB;IACzB,WAAgB;IAChB,UAAe;IACf,aAAc;IAMlB;;OAEG;IACH;;;aAEC;IAED;;OAEG;IACH;;;aAyBC;CACJ;AA6BD;;GAEG;AACH;IACI,0BA+BC;IA9BG;;;;;MAMC;IAED,cAAgB;IAChB,kBAAwB;IACxB,eAAiB;IACjB;;;;MAIC;IAGD,qBAQE;IAMN;;OAEG;IACH,aASC;IAED;;OAEG;IACH,qBAYC;IAED;;OAEG;IACH,oBAGC;IADG,8BAAoB;IAGxB;;OAEG;IACH,6BAIC;IAED;;OAEG;IACH,kCAEC;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,aAIC;IAED;;OAEG;IACH,gBAIC;IAED;;OAEG;IACH,qBAIC;IAED;;OAEG;IACH,8CAsEC;IAED;;OAEG;IACH;;;;;;;;;;;;;MAYC;IAED;;OAEG;IACH;;;;;;;MASC;IAED;;OAEG;IACH,iEA6CC;IAED;;OAEG;IACH,uCAwBC;IAED;;OAEG;IACH,kDAoBC;IAED;;OAEG;IACH,6CAUC;IAED;;OAEG;IACH,0BAeC;IAED;;OAEG;IACH,8BASC;IAED;;OAEG;IACH,uBAEC;IAED;;OAEG;IACH,yBAUC;IAED;;OAEG;IACH,4BAUC;IAED;;OAEG;IACH,mCAMC;IAED,sCAMC;IAED,kCAMC;IAED;;OAEG;IACH,uBAEC;IAED;;OAEG;IACH,2CAQC;IAED;;OAEG;IACH,4BAGC;IAED;;OAEG;IACH;;;;;;;;;;MAYC;IAED;;OAEG;IACH,gBAgBC;CACJ;;IAMG;;OAEG;IACH,uCACY,OAAE,EAAE,SAAI,EAAE,SAAI,UAOzB;IAED;;OAEG;IACH,mDACY,OAAE,EAAE,SAAI,EAAE,SAAI,UAUzB;IAED;;OAEG;IACH,yDACY,OAAE,EAAE,SAAI,EAAE,SAAI,UAOzB;IAED;;OAEG;IACH,mEACY,OAAE,EAAE,SAAI,EAAE,SAAI,UAczB;;;IAcD;;OAEG;IACH;;;;;;;MAgBC;IAED;;OAEG;IACH;;;;;MAQC;;;8BA7sByB,4BAA4B"}
|