@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.
Files changed (108) hide show
  1. package/dist/coherent.d.ts +150 -10
  2. package/dist/coherent.d.ts.map +1 -1
  3. package/dist/coherent.js +166 -33
  4. package/dist/coherent.js.map +1 -1
  5. package/dist/components/component-system.js +109 -109
  6. package/dist/components/lifecycle.d.ts +212 -0
  7. package/dist/components/lifecycle.d.ts.map +1 -0
  8. package/dist/components/lifecycle.js +525 -0
  9. package/dist/components/lifecycle.js.map +1 -0
  10. package/dist/core/html-utils.js +5 -5
  11. package/dist/core/object-factory.js +21 -21
  12. package/dist/core/object-utils.js +2 -2
  13. package/dist/dev/dev-tools.d.ts +1 -1
  14. package/dist/dev/dev-tools.js +28 -28
  15. package/dist/forms/validation.d.ts +271 -0
  16. package/dist/forms/validation.d.ts.map +1 -0
  17. package/dist/forms/validation.js +573 -0
  18. package/dist/forms/validation.js.map +1 -0
  19. package/dist/index.cjs +185 -28
  20. package/dist/index.cjs.map +4 -4
  21. package/dist/index.js +181 -29
  22. package/dist/index.js.map +4 -4
  23. package/dist/performance/bundle-optimizer.js +11 -11
  24. package/dist/performance/cache-manager.js +6 -6
  25. package/dist/performance/component-cache.d.ts +120 -0
  26. package/dist/performance/component-cache.d.ts.map +1 -0
  27. package/dist/performance/component-cache.js +364 -0
  28. package/dist/performance/component-cache.js.map +1 -0
  29. package/dist/performance/monitor.js +10 -10
  30. package/dist/performance/monitor.js.map +1 -1
  31. package/dist/rendering/base-renderer.js +13 -13
  32. package/dist/rendering/css-manager.d.ts +73 -0
  33. package/dist/rendering/css-manager.d.ts.map +1 -0
  34. package/dist/rendering/css-manager.js +176 -0
  35. package/dist/rendering/css-manager.js.map +1 -0
  36. package/dist/rendering/dom-renderer.d.ts +23 -0
  37. package/dist/rendering/dom-renderer.d.ts.map +1 -1
  38. package/dist/rendering/dom-renderer.js +77 -9
  39. package/dist/rendering/dom-renderer.js.map +1 -1
  40. package/dist/rendering/html-renderer.d.ts +15 -0
  41. package/dist/rendering/html-renderer.d.ts.map +1 -1
  42. package/dist/rendering/html-renderer.js +85 -4
  43. package/dist/rendering/html-renderer.js.map +1 -1
  44. package/dist/rendering/streaming-renderer.js +12 -12
  45. package/dist/rendering/vdom-diff.d.ts +47 -0
  46. package/dist/rendering/vdom-diff.d.ts.map +1 -0
  47. package/dist/rendering/vdom-diff.js +416 -0
  48. package/dist/rendering/vdom-diff.js.map +1 -0
  49. package/dist/routing/router.d.ts +241 -0
  50. package/dist/routing/router.d.ts.map +1 -0
  51. package/dist/routing/router.js +648 -0
  52. package/dist/routing/router.js.map +1 -0
  53. package/dist/state/reactive-state.d.ts +166 -0
  54. package/dist/state/reactive-state.d.ts.map +1 -0
  55. package/dist/state/reactive-state.js +546 -0
  56. package/dist/state/reactive-state.js.map +1 -0
  57. package/dist/utils/dependency-utils.js +2 -2
  58. package/dist/utils/error-handler.d.ts +148 -0
  59. package/dist/utils/error-handler.d.ts.map +1 -0
  60. package/dist/utils/error-handler.js +468 -0
  61. package/dist/utils/error-handler.js.map +1 -0
  62. package/dist/utils/normalization.js +1 -1
  63. package/dist/utils/validation.js +1 -1
  64. package/package.json +5 -1
  65. package/dist/database/adapters/mongodb.d.ts +0 -15
  66. package/dist/database/adapters/mongodb.d.ts.map +0 -1
  67. package/dist/database/adapters/mongodb.js +0 -216
  68. package/dist/database/adapters/mongodb.js.map +0 -1
  69. package/dist/database/adapters/mysql.d.ts +0 -12
  70. package/dist/database/adapters/mysql.d.ts.map +0 -1
  71. package/dist/database/adapters/mysql.js +0 -171
  72. package/dist/database/adapters/mysql.js.map +0 -1
  73. package/dist/database/adapters/postgresql.d.ts +0 -12
  74. package/dist/database/adapters/postgresql.d.ts.map +0 -1
  75. package/dist/database/adapters/postgresql.js +0 -177
  76. package/dist/database/adapters/postgresql.js.map +0 -1
  77. package/dist/database/adapters/sqlite.d.ts +0 -15
  78. package/dist/database/adapters/sqlite.d.ts.map +0 -1
  79. package/dist/database/adapters/sqlite.js +0 -241
  80. package/dist/database/adapters/sqlite.js.map +0 -1
  81. package/dist/database/connection-manager.d.ts +0 -135
  82. package/dist/database/connection-manager.d.ts.map +0 -1
  83. package/dist/database/connection-manager.js +0 -362
  84. package/dist/database/connection-manager.js.map +0 -1
  85. package/dist/database/index.d.ts +0 -38
  86. package/dist/database/index.d.ts.map +0 -1
  87. package/dist/database/index.js +0 -60
  88. package/dist/database/index.js.map +0 -1
  89. package/dist/database/middleware.d.ts +0 -122
  90. package/dist/database/middleware.d.ts.map +0 -1
  91. package/dist/database/middleware.js +0 -390
  92. package/dist/database/middleware.js.map +0 -1
  93. package/dist/database/migration.d.ts +0 -62
  94. package/dist/database/migration.d.ts.map +0 -1
  95. package/dist/database/migration.js +0 -423
  96. package/dist/database/migration.js.map +0 -1
  97. package/dist/database/model.d.ts +0 -8
  98. package/dist/database/model.d.ts.map +0 -1
  99. package/dist/database/model.js +0 -167
  100. package/dist/database/model.js.map +0 -1
  101. package/dist/database/query-builder.d.ts +0 -111
  102. package/dist/database/query-builder.d.ts.map +0 -1
  103. package/dist/database/query-builder.js +0 -187
  104. package/dist/database/query-builder.js.map +0 -1
  105. package/dist/database/utils.d.ts +0 -196
  106. package/dist/database/utils.d.ts.map +0 -1
  107. package/dist/database/utils.js +0 -372
  108. 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 config = { ...this.config, ...options };
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 (_error) {
96
- this.recordError('renderToString', _error);
97
- throw _error;
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 config = { ...this.config, ...options };
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 (_error) {
52
- // Stream _error information
53
- yield this.createErrorChunk(_error);
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(props);
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(props)) {
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 _error chunk
161
+ * Create an error chunk
162
162
  */
163
- createErrorChunk(_error) {
164
- return this.createChunk(`<!-- Streaming Error: ${_error.message} -->`, {
165
- _error: true,
166
- errorMessage: _error.message,
167
- errorStack: _error.stack
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