@coherent.js/core 1.0.0-beta.6 → 1.0.0-beta.8
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/dist/coherent.d.ts +150 -10
- package/dist/coherent.d.ts.map +1 -1
- package/dist/coherent.js +166 -33
- package/dist/coherent.js.map +1 -1
- package/dist/components/component-system.js +109 -109
- 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.js +5 -5
- package/dist/core/object-factory.js +21 -21
- package/dist/core/object-utils.js +2 -2
- package/dist/dev/dev-tools.d.ts +1 -1
- package/dist/dev/dev-tools.js +28 -28
- 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 +185 -28
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +181 -29
- package/dist/index.js.map +4 -4
- package/dist/performance/bundle-optimizer.js +11 -11
- package/dist/performance/cache-manager.js +6 -6
- 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.js +10 -10
- package/dist/performance/monitor.js.map +1 -1
- package/dist/rendering/base-renderer.js +13 -13
- 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 +23 -0
- package/dist/rendering/dom-renderer.d.ts.map +1 -1
- package/dist/rendering/dom-renderer.js +77 -9
- package/dist/rendering/dom-renderer.js.map +1 -1
- package/dist/rendering/html-renderer.d.ts +15 -0
- package/dist/rendering/html-renderer.d.ts.map +1 -1
- package/dist/rendering/html-renderer.js +85 -4
- package/dist/rendering/html-renderer.js.map +1 -1
- package/dist/rendering/streaming-renderer.js +12 -12
- 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/utils/dependency-utils.js +2 -2
- 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.js +1 -1
- package/dist/utils/validation.js +1 -1
- package/package.json +5 -1
- package/dist/database/adapters/mongodb.d.ts +0 -15
- package/dist/database/adapters/mongodb.d.ts.map +0 -1
- package/dist/database/adapters/mongodb.js +0 -216
- package/dist/database/adapters/mongodb.js.map +0 -1
- package/dist/database/adapters/mysql.d.ts +0 -12
- package/dist/database/adapters/mysql.d.ts.map +0 -1
- package/dist/database/adapters/mysql.js +0 -171
- package/dist/database/adapters/mysql.js.map +0 -1
- package/dist/database/adapters/postgresql.d.ts +0 -12
- package/dist/database/adapters/postgresql.d.ts.map +0 -1
- package/dist/database/adapters/postgresql.js +0 -177
- package/dist/database/adapters/postgresql.js.map +0 -1
- package/dist/database/adapters/sqlite.d.ts +0 -15
- package/dist/database/adapters/sqlite.d.ts.map +0 -1
- package/dist/database/adapters/sqlite.js +0 -241
- package/dist/database/adapters/sqlite.js.map +0 -1
- package/dist/database/connection-manager.d.ts +0 -135
- package/dist/database/connection-manager.d.ts.map +0 -1
- package/dist/database/connection-manager.js +0 -362
- package/dist/database/connection-manager.js.map +0 -1
- package/dist/database/index.d.ts +0 -38
- package/dist/database/index.d.ts.map +0 -1
- package/dist/database/index.js +0 -60
- package/dist/database/index.js.map +0 -1
- package/dist/database/middleware.d.ts +0 -122
- package/dist/database/middleware.d.ts.map +0 -1
- package/dist/database/middleware.js +0 -390
- package/dist/database/middleware.js.map +0 -1
- package/dist/database/migration.d.ts +0 -62
- package/dist/database/migration.d.ts.map +0 -1
- package/dist/database/migration.js +0 -423
- package/dist/database/migration.js.map +0 -1
- package/dist/database/model.d.ts +0 -8
- package/dist/database/model.d.ts.map +0 -1
- package/dist/database/model.js +0 -167
- package/dist/database/model.js.map +0 -1
- package/dist/database/query-builder.d.ts +0 -111
- package/dist/database/query-builder.d.ts.map +0 -1
- package/dist/database/query-builder.js +0 -187
- package/dist/database/query-builder.js.map +0 -1
- package/dist/database/utils.d.ts +0 -196
- package/dist/database/utils.d.ts.map +0 -1
- package/dist/database/utils.js +0 -372
- package/dist/database/utils.js.map +0 -1
|
@@ -7,6 +7,7 @@ import { hasChildren, normalizeChildren, } from '../core/object-utils.js';
|
|
|
7
7
|
import { escapeHtml, isVoidElement, formatAttributes, minifyHtml } from '../core/html-utils.js';
|
|
8
8
|
import { performanceMonitor } from '../performance/monitor.js';
|
|
9
9
|
import { createCacheManager } from '../performance/cache-manager.js';
|
|
10
|
+
import { cssUtils, defaultCSSManager } from './css-manager.js';
|
|
10
11
|
// Create a global cache instance for the renderer
|
|
11
12
|
const rendererCache = createCacheManager({
|
|
12
13
|
maxSize: 1000,
|
|
@@ -75,7 +76,7 @@ class HTMLRenderer extends BaseRenderer {
|
|
|
75
76
|
* });
|
|
76
77
|
*/
|
|
77
78
|
render(component, options = {}) {
|
|
78
|
-
const
|
|
79
|
+
const _config = { ...this.config, ...options };
|
|
79
80
|
this.startTiming();
|
|
80
81
|
try {
|
|
81
82
|
// Input validation
|
|
@@ -92,9 +93,9 @@ class HTMLRenderer extends BaseRenderer {
|
|
|
92
93
|
});
|
|
93
94
|
return finalHtml;
|
|
94
95
|
}
|
|
95
|
-
catch (
|
|
96
|
-
this.recordError('renderToString',
|
|
97
|
-
throw
|
|
96
|
+
catch (error) {
|
|
97
|
+
this.recordError('renderToString', error);
|
|
98
|
+
throw error;
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
/**
|
|
@@ -265,6 +266,86 @@ export function renderToString(component, options = {}) {
|
|
|
265
266
|
const renderer = new HTMLRenderer(mergedOptions);
|
|
266
267
|
return renderer.render(component, mergedOptions);
|
|
267
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Renders component to complete HTML document with DOCTYPE
|
|
271
|
+
* Better alternative to manual DOCTYPE concatenation
|
|
272
|
+
* Supports CSS file inclusion and inline styles
|
|
273
|
+
*/
|
|
274
|
+
export async function renderHTML(component, options = {}) {
|
|
275
|
+
const htmlContent = renderToString(component, options);
|
|
276
|
+
// Process CSS options
|
|
277
|
+
const cssOptions = cssUtils.processCSSOptions(options);
|
|
278
|
+
// Generate CSS HTML if any CSS is specified
|
|
279
|
+
let cssHtml = '';
|
|
280
|
+
if (cssOptions.files.length > 0 || cssOptions.links.length > 0 || cssOptions.inline) {
|
|
281
|
+
cssHtml = await cssUtils.generateCSSHtml(cssOptions, defaultCSSManager);
|
|
282
|
+
}
|
|
283
|
+
// If the component includes a head tag, inject CSS into it
|
|
284
|
+
if (cssHtml && htmlContent.includes('<head>')) {
|
|
285
|
+
const htmlWithCSS = htmlContent.replace('</head>', `${cssHtml}\n</head>`);
|
|
286
|
+
return `<!DOCTYPE html>\n${htmlWithCSS}`;
|
|
287
|
+
}
|
|
288
|
+
// If there's CSS but no head tag, wrap the component with a basic HTML structure
|
|
289
|
+
if (cssHtml) {
|
|
290
|
+
return `<!DOCTYPE html>
|
|
291
|
+
<html>
|
|
292
|
+
<head>
|
|
293
|
+
<meta charset="utf-8">
|
|
294
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
295
|
+
${cssHtml}
|
|
296
|
+
</head>
|
|
297
|
+
<body>
|
|
298
|
+
${htmlContent}
|
|
299
|
+
</body>
|
|
300
|
+
</html>`;
|
|
301
|
+
}
|
|
302
|
+
return `<!DOCTYPE html>\n${htmlContent}`;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Synchronous version of renderHTML for cases without CSS files
|
|
306
|
+
* Falls back to async if CSS files are detected
|
|
307
|
+
*/
|
|
308
|
+
export function renderHTMLSync(component, options = {}) {
|
|
309
|
+
const cssOptions = cssUtils.processCSSOptions(options);
|
|
310
|
+
// If CSS files are specified, return a promise
|
|
311
|
+
if (cssOptions.files.length > 0) {
|
|
312
|
+
console.warn('CSS files detected, use renderHTML() (async) instead of renderHTMLSync()');
|
|
313
|
+
return renderHTML(component, options);
|
|
314
|
+
}
|
|
315
|
+
const htmlContent = renderToString(component, options);
|
|
316
|
+
// Handle inline CSS and external links only
|
|
317
|
+
let cssHtml = '';
|
|
318
|
+
if (cssOptions.links.length > 0) {
|
|
319
|
+
cssHtml += defaultCSSManager.generateCSSLinks(cssOptions.links);
|
|
320
|
+
}
|
|
321
|
+
if (cssOptions.inline) {
|
|
322
|
+
cssHtml += `\n${defaultCSSManager.generateInlineStyles(cssOptions.inline)}`;
|
|
323
|
+
}
|
|
324
|
+
if (cssHtml && htmlContent.includes('<head>')) {
|
|
325
|
+
const htmlWithCSS = htmlContent.replace('</head>', `${cssHtml}\n</head>`);
|
|
326
|
+
return `<!DOCTYPE html>\n${htmlWithCSS}`;
|
|
327
|
+
}
|
|
328
|
+
if (cssHtml) {
|
|
329
|
+
return `<!DOCTYPE html>
|
|
330
|
+
<html>
|
|
331
|
+
<head>
|
|
332
|
+
<meta charset="utf-8">
|
|
333
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
334
|
+
${cssHtml}
|
|
335
|
+
</head>
|
|
336
|
+
<body>
|
|
337
|
+
${htmlContent}
|
|
338
|
+
</body>
|
|
339
|
+
</html>`;
|
|
340
|
+
}
|
|
341
|
+
return `<!DOCTYPE html>\n${htmlContent}`;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Alias for renderHTML - more semantic name for HTML rendering
|
|
345
|
+
*/
|
|
346
|
+
export function render(component, options = {}) {
|
|
347
|
+
return renderHTML(component, options);
|
|
348
|
+
}
|
|
268
349
|
// Old functions removed - now part of HTMLRenderer class
|
|
269
350
|
// Old helper functions removed - now available in RendererUtils from BaseRenderer
|
|
270
351
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-renderer.js","sourceRoot":"","sources":["../../../../src/rendering/html-renderer.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"html-renderer.js","sourceRoot":"","sources":["../../../../src/rendering/html-renderer.js"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ export class StreamingRenderer extends BaseRenderer {
|
|
|
33
33
|
* Main streaming render method
|
|
34
34
|
*/
|
|
35
35
|
async *render(component, options = {}) {
|
|
36
|
-
const
|
|
36
|
+
const _config = { ...this.config, ...options };
|
|
37
37
|
this.metrics.startTime = performance.now();
|
|
38
38
|
try {
|
|
39
39
|
// Validate input if requested
|
|
@@ -48,9 +48,9 @@ export class StreamingRenderer extends BaseRenderer {
|
|
|
48
48
|
this.buffer = '';
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
catch (
|
|
52
|
-
// Stream
|
|
53
|
-
yield this.createErrorChunk(
|
|
51
|
+
catch (error) {
|
|
52
|
+
// Stream error information
|
|
53
|
+
yield this.createErrorChunk(error);
|
|
54
54
|
}
|
|
55
55
|
finally {
|
|
56
56
|
this.metrics.endTime = performance.now();
|
|
@@ -99,7 +99,7 @@ export class StreamingRenderer extends BaseRenderer {
|
|
|
99
99
|
// Opening tag
|
|
100
100
|
let openTag = `<${tagName}`;
|
|
101
101
|
// Add attributes
|
|
102
|
-
const attributes = this.utils.extractAttributes(
|
|
102
|
+
const attributes = this.utils.extractAttributes(_props);
|
|
103
103
|
if (attributes) {
|
|
104
104
|
openTag += ` ${attributes}`;
|
|
105
105
|
}
|
|
@@ -113,7 +113,7 @@ export class StreamingRenderer extends BaseRenderer {
|
|
|
113
113
|
yield* this.streamText(escapeHtml(String(text)));
|
|
114
114
|
}
|
|
115
115
|
// Handle children
|
|
116
|
-
if (hasChildren(
|
|
116
|
+
if (hasChildren(_props)) {
|
|
117
117
|
const children = normalizeChildren(props.children);
|
|
118
118
|
for (const child of children) {
|
|
119
119
|
yield* this.streamComponent(child, config, depth);
|
|
@@ -158,13 +158,13 @@ export class StreamingRenderer extends BaseRenderer {
|
|
|
158
158
|
return chunk;
|
|
159
159
|
}
|
|
160
160
|
/**
|
|
161
|
-
* Create an
|
|
161
|
+
* Create an error chunk
|
|
162
162
|
*/
|
|
163
|
-
createErrorChunk(
|
|
164
|
-
return this.createChunk(`<!-- Streaming Error: ${
|
|
165
|
-
|
|
166
|
-
errorMessage:
|
|
167
|
-
errorStack:
|
|
163
|
+
createErrorChunk(error) {
|
|
164
|
+
return this.createChunk(`<!-- Streaming Error: ${error.message} -->`, {
|
|
165
|
+
error: true,
|
|
166
|
+
errorMessage: error.message,
|
|
167
|
+
errorStack: error.stack
|
|
168
168
|
});
|
|
169
169
|
}
|
|
170
170
|
/**
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Virtual DOM node structure
|
|
3
|
+
*/
|
|
4
|
+
export function createVNode(type: any, props?: {}, children?: any[]): {
|
|
5
|
+
type: any;
|
|
6
|
+
props: {};
|
|
7
|
+
children: any[];
|
|
8
|
+
key: any;
|
|
9
|
+
_coherent: boolean;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Convert Coherent object to virtual DOM node
|
|
13
|
+
*/
|
|
14
|
+
export function objectToVNode(component: any, depth?: number): any;
|
|
15
|
+
/**
|
|
16
|
+
* Compare two virtual DOM nodes and generate patch operations
|
|
17
|
+
*/
|
|
18
|
+
export function diff(oldVNode: any, newVNode: any, patches?: any[], path?: any[]): any[];
|
|
19
|
+
/**
|
|
20
|
+
* Apply patches to a DOM element
|
|
21
|
+
*/
|
|
22
|
+
export function patch(element: any, patches: any): any;
|
|
23
|
+
export namespace VDOM_OPERATIONS {
|
|
24
|
+
let CREATE: string;
|
|
25
|
+
let UPDATE: string;
|
|
26
|
+
let REMOVE: string;
|
|
27
|
+
let REPLACE: string;
|
|
28
|
+
let MOVE: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a virtual DOM differ for component updates
|
|
32
|
+
*/
|
|
33
|
+
export class VDOMDiffer {
|
|
34
|
+
cache: Map<any, any>;
|
|
35
|
+
/**
|
|
36
|
+
* Perform efficient diff and patch
|
|
37
|
+
*/
|
|
38
|
+
update(element: any, oldComponent: any, newComponent: any): number;
|
|
39
|
+
/**
|
|
40
|
+
* Cache virtual nodes for performance
|
|
41
|
+
*/
|
|
42
|
+
cacheVNode(key: any, vnode: any): void;
|
|
43
|
+
getCachedVNode(key: any): any;
|
|
44
|
+
clearCache(): void;
|
|
45
|
+
}
|
|
46
|
+
export default VDOMDiffer;
|
|
47
|
+
//# sourceMappingURL=vdom-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vdom-diff.d.ts","sourceRoot":"","sources":["../../../../src/rendering/vdom-diff.js"],"names":[],"mappings":"AAgBA;;GAEG;AACH;;;;;;EAQC;AAED;;GAEG;AACH,mEA6DC;AAED;;GAEG;AACH,yFA0DC;AAqGD;;GAEG;AACH,uDAiBC;;;;;;;;AA2JD;;GAEG;AACH;IAEQ,qBAAsB;IAG1B;;OAEG;IACH,mEAWC;IAED;;OAEG;IACH,uCAEC;IAED,8BAEC;IAED,mBAEC;CACJ"}
|
|
@@ -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
|