@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.
Files changed (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +130 -0
  3. package/dist/coherent.d.ts +472 -0
  4. package/dist/coherent.d.ts.map +1 -0
  5. package/dist/coherent.js +590 -0
  6. package/dist/coherent.js.map +1 -0
  7. package/dist/components/component-system.d.ts +1138 -0
  8. package/dist/components/component-system.d.ts.map +1 -0
  9. package/dist/components/component-system.js +2220 -0
  10. package/dist/components/component-system.js.map +1 -0
  11. package/dist/components/lifecycle.d.ts +212 -0
  12. package/dist/components/lifecycle.d.ts.map +1 -0
  13. package/dist/components/lifecycle.js +525 -0
  14. package/dist/components/lifecycle.js.map +1 -0
  15. package/dist/core/html-utils.d.ts +14 -0
  16. package/dist/core/html-utils.d.ts.map +1 -0
  17. package/dist/core/html-utils.js +166 -0
  18. package/dist/core/html-utils.js.map +1 -0
  19. package/dist/core/object-factory.d.ts +38 -0
  20. package/dist/core/object-factory.d.ts.map +1 -0
  21. package/dist/core/object-factory.js +63 -0
  22. package/dist/core/object-factory.js.map +1 -0
  23. package/dist/core/object-utils.d.ts +77 -0
  24. package/dist/core/object-utils.d.ts.map +1 -0
  25. package/dist/core/object-utils.js +502 -0
  26. package/dist/core/object-utils.js.map +1 -0
  27. package/dist/dev/dev-tools.d.ts +194 -0
  28. package/dist/dev/dev-tools.d.ts.map +1 -0
  29. package/dist/dev/dev-tools.js +846 -0
  30. package/dist/dev/dev-tools.js.map +1 -0
  31. package/dist/forms/validation.d.ts +271 -0
  32. package/dist/forms/validation.d.ts.map +1 -0
  33. package/dist/forms/validation.js +573 -0
  34. package/dist/forms/validation.js.map +1 -0
  35. package/dist/index.cjs +5281 -0
  36. package/dist/index.cjs.map +7 -0
  37. package/dist/index.js +5204 -0
  38. package/dist/index.js.map +7 -0
  39. package/dist/performance/bundle-optimizer.d.ts +95 -0
  40. package/dist/performance/bundle-optimizer.d.ts.map +1 -0
  41. package/dist/performance/bundle-optimizer.js +192 -0
  42. package/dist/performance/bundle-optimizer.js.map +1 -0
  43. package/dist/performance/cache-manager.d.ts +107 -0
  44. package/dist/performance/cache-manager.d.ts.map +1 -0
  45. package/dist/performance/cache-manager.js +314 -0
  46. package/dist/performance/cache-manager.js.map +1 -0
  47. package/dist/performance/component-cache.d.ts +120 -0
  48. package/dist/performance/component-cache.d.ts.map +1 -0
  49. package/dist/performance/component-cache.js +364 -0
  50. package/dist/performance/component-cache.js.map +1 -0
  51. package/dist/performance/monitor.d.ts +189 -0
  52. package/dist/performance/monitor.d.ts.map +1 -0
  53. package/dist/performance/monitor.js +347 -0
  54. package/dist/performance/monitor.js.map +1 -0
  55. package/dist/rendering/base-renderer.d.ts +140 -0
  56. package/dist/rendering/base-renderer.d.ts.map +1 -0
  57. package/dist/rendering/base-renderer.js +409 -0
  58. package/dist/rendering/base-renderer.js.map +1 -0
  59. package/dist/rendering/css-manager.d.ts +73 -0
  60. package/dist/rendering/css-manager.d.ts.map +1 -0
  61. package/dist/rendering/css-manager.js +176 -0
  62. package/dist/rendering/css-manager.js.map +1 -0
  63. package/dist/rendering/dom-renderer.d.ts +62 -0
  64. package/dist/rendering/dom-renderer.d.ts.map +1 -0
  65. package/dist/rendering/dom-renderer.js +252 -0
  66. package/dist/rendering/dom-renderer.js.map +1 -0
  67. package/dist/rendering/html-renderer.d.ts +67 -0
  68. package/dist/rendering/html-renderer.d.ts.map +1 -0
  69. package/dist/rendering/html-renderer.js +444 -0
  70. package/dist/rendering/html-renderer.js.map +1 -0
  71. package/dist/rendering/renderer-config.d.ts +282 -0
  72. package/dist/rendering/renderer-config.d.ts.map +1 -0
  73. package/dist/rendering/renderer-config.js +144 -0
  74. package/dist/rendering/renderer-config.js.map +1 -0
  75. package/dist/rendering/streaming-renderer.d.ts +117 -0
  76. package/dist/rendering/streaming-renderer.d.ts.map +1 -0
  77. package/dist/rendering/streaming-renderer.js +326 -0
  78. package/dist/rendering/streaming-renderer.js.map +1 -0
  79. package/dist/rendering/vdom-diff.d.ts +47 -0
  80. package/dist/rendering/vdom-diff.d.ts.map +1 -0
  81. package/dist/rendering/vdom-diff.js +416 -0
  82. package/dist/rendering/vdom-diff.js.map +1 -0
  83. package/dist/routing/router.d.ts +241 -0
  84. package/dist/routing/router.d.ts.map +1 -0
  85. package/dist/routing/router.js +648 -0
  86. package/dist/routing/router.js.map +1 -0
  87. package/dist/state/reactive-state.d.ts +166 -0
  88. package/dist/state/reactive-state.d.ts.map +1 -0
  89. package/dist/state/reactive-state.js +546 -0
  90. package/dist/state/reactive-state.js.map +1 -0
  91. package/dist/state/state-manager.d.ts +45 -0
  92. package/dist/state/state-manager.d.ts.map +1 -0
  93. package/dist/state/state-manager.js +151 -0
  94. package/dist/state/state-manager.js.map +1 -0
  95. package/dist/types/constants.d.ts +8 -0
  96. package/dist/types/constants.d.ts.map +1 -0
  97. package/dist/types/constants.js +36 -0
  98. package/dist/types/constants.js.map +1 -0
  99. package/dist/utils/dependency-utils.d.ts +43 -0
  100. package/dist/utils/dependency-utils.d.ts.map +1 -0
  101. package/dist/utils/dependency-utils.js +105 -0
  102. package/dist/utils/dependency-utils.js.map +1 -0
  103. package/dist/utils/error-handler.d.ts +148 -0
  104. package/dist/utils/error-handler.d.ts.map +1 -0
  105. package/dist/utils/error-handler.js +468 -0
  106. package/dist/utils/error-handler.js.map +1 -0
  107. package/dist/utils/normalization.d.ts +3 -0
  108. package/dist/utils/normalization.d.ts.map +1 -0
  109. package/dist/utils/normalization.js +24 -0
  110. package/dist/utils/normalization.js.map +1 -0
  111. package/dist/utils/validation.d.ts +10 -0
  112. package/dist/utils/validation.d.ts.map +1 -0
  113. package/dist/utils/validation.js +32 -0
  114. package/dist/utils/validation.js.map +1 -0
  115. package/package.json +44 -0
  116. package/types/index.d.ts +734 -0
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Streaming HTML Renderer
3
+ * Provides memory-efficient streaming capabilities for large component trees
4
+ * Ideal for server-side rendering of large pages or data-heavy components
5
+ */
6
+ import { validateComponent, isCoherentObject, hasChildren, normalizeChildren } from '../core/object-utils.js';
7
+ import { escapeHtml, isVoidElement, } from '../core/html-utils.js';
8
+ import { performanceMonitor } from '../performance/monitor.js';
9
+ // Import BaseRenderer for inheritance
10
+ import { BaseRenderer } from './base-renderer.js';
11
+ /**
12
+ * Streaming renderer class - extends BaseRenderer for shared functionality
13
+ */
14
+ export class StreamingRenderer extends BaseRenderer {
15
+ constructor(options = {}) {
16
+ // Call parent constructor with streaming-specific defaults
17
+ super({
18
+ maxDepth: 1000,
19
+ enableMetrics: false,
20
+ ...options
21
+ });
22
+ // Streaming-specific properties
23
+ this.buffer = '';
24
+ this.elementCount = 0;
25
+ // Override metrics with streaming-specific fields
26
+ this.metrics = {
27
+ ...this.metrics,
28
+ chunksGenerated: 0,
29
+ totalBytes: 0
30
+ };
31
+ }
32
+ /**
33
+ * Main streaming render method
34
+ */
35
+ async *render(component, options = {}) {
36
+ const _config = { ...this.config, ...options };
37
+ this.metrics.startTime = performance.now();
38
+ try {
39
+ // Validate input if requested
40
+ if (config.validateInput !== false) {
41
+ validateComponent(component);
42
+ }
43
+ // Start streaming the component
44
+ yield* this.streamComponent(component, config, 0);
45
+ // Flush any remaining buffer
46
+ if (this.buffer.length > 0) {
47
+ yield this.createChunk(this.buffer, { final: true });
48
+ this.buffer = '';
49
+ }
50
+ }
51
+ catch (error) {
52
+ // Stream error information
53
+ yield this.createErrorChunk(error);
54
+ }
55
+ finally {
56
+ this.metrics.endTime = performance.now();
57
+ }
58
+ }
59
+ /**
60
+ * Stream a single component
61
+ */
62
+ async *streamComponent(component, config, depth) {
63
+ if (depth > config.maxDepth) {
64
+ throw new Error(`Maximum nesting depth exceeded: ${config.maxDepth}`);
65
+ }
66
+ // Handle different component types
67
+ if (typeof component === 'string') {
68
+ yield* this.streamText(escapeHtml(component));
69
+ return;
70
+ }
71
+ if (typeof component === 'function') {
72
+ const evaluated = component();
73
+ yield* this.streamComponent(evaluated, config, depth);
74
+ return;
75
+ }
76
+ if (Array.isArray(component)) {
77
+ for (const child of component) {
78
+ yield* this.streamComponent(child, config, depth);
79
+ // Yield control periodically for large arrays
80
+ if (this.elementCount++ % config.yieldThreshold === 0) {
81
+ await this.yieldControl();
82
+ }
83
+ }
84
+ return;
85
+ }
86
+ if (!isCoherentObject(component)) {
87
+ return; // Skip invalid objects
88
+ }
89
+ // Process object-based component
90
+ for (const [tagName, props] of Object.entries(component)) {
91
+ yield* this.streamElement(tagName, props, config, depth + 1);
92
+ }
93
+ }
94
+ /**
95
+ * Stream a single HTML element
96
+ */
97
+ async *streamElement(tagName, props, config, depth) {
98
+ const isVoid = isVoidElement(tagName);
99
+ // Opening tag
100
+ let openTag = `<${tagName}`;
101
+ // Add attributes
102
+ const attributes = this.utils.extractAttributes(_props);
103
+ if (attributes) {
104
+ openTag += ` ${attributes}`;
105
+ }
106
+ openTag += isVoid ? '/>' : '>';
107
+ yield* this.streamText(openTag);
108
+ // Content for non-void elements
109
+ if (!isVoid) {
110
+ // Handle text content
111
+ if (props.text !== undefined) {
112
+ const text = typeof props.text === 'function' ? props.text() : props.text;
113
+ yield* this.streamText(escapeHtml(String(text)));
114
+ }
115
+ // Handle children
116
+ if (hasChildren(_props)) {
117
+ const children = normalizeChildren(props.children);
118
+ for (const child of children) {
119
+ yield* this.streamComponent(child, config, depth);
120
+ // Periodic yielding
121
+ if (this.elementCount++ % config.yieldThreshold === 0) {
122
+ await this.yieldControl();
123
+ }
124
+ }
125
+ }
126
+ // Closing tag
127
+ yield* this.streamText(`</${tagName}>`);
128
+ }
129
+ this.metrics.elementsProcessed++;
130
+ }
131
+ /**
132
+ * Stream text content with buffering
133
+ */
134
+ async *streamText(text) {
135
+ this.buffer += text;
136
+ // Flush buffer when it reaches chunk size
137
+ if (this.buffer.length >= this.config.chunkSize) {
138
+ const chunk = this.buffer.substring(0, this.config.chunkSize);
139
+ this.buffer = this.buffer.substring(this.config.chunkSize);
140
+ yield this.createChunk(chunk);
141
+ }
142
+ }
143
+ /**
144
+ * Create a chunk object with metadata
145
+ */
146
+ createChunk(content, metadata = {}) {
147
+ const chunk = {
148
+ chunk: content,
149
+ size: Buffer.byteLength(content, this.config.encoding),
150
+ index: this.metrics.totalChunks++,
151
+ timestamp: performance.now(),
152
+ ...metadata
153
+ };
154
+ this.metrics.totalBytes += chunk.size;
155
+ if (this.config.enableMetrics) {
156
+ chunk.metrics = { ...this.metrics };
157
+ }
158
+ return chunk;
159
+ }
160
+ /**
161
+ * Create an error chunk
162
+ */
163
+ createErrorChunk(error) {
164
+ return this.createChunk(`<!-- Streaming Error: ${error.message} -->`, {
165
+ error: true,
166
+ errorMessage: error.message,
167
+ errorStack: error.stack
168
+ });
169
+ }
170
+ /**
171
+ * Yield control to the event loop
172
+ */
173
+ async yieldControl() {
174
+ return new Promise(resolve => setImmediate(resolve));
175
+ }
176
+ /**
177
+ * Get streaming metrics
178
+ */
179
+ getMetrics() {
180
+ const duration = this.metrics.endTime ?
181
+ this.metrics.endTime - this.metrics.startTime :
182
+ performance.now() - this.metrics.startTime;
183
+ return {
184
+ ...this.metrics,
185
+ duration,
186
+ throughput: this.metrics.totalBytes / (duration / 1000), // bytes per second
187
+ elementsPerSecond: this.metrics.elementsProcessed / (duration / 1000)
188
+ };
189
+ }
190
+ /**
191
+ * Reset metrics for new render
192
+ */
193
+ reset() {
194
+ this.metrics = {
195
+ totalChunks: 0,
196
+ totalBytes: 0,
197
+ elementsProcessed: 0,
198
+ startTime: null,
199
+ endTime: null
200
+ };
201
+ this.buffer = '';
202
+ this.elementCount = 0;
203
+ }
204
+ }
205
+ /**
206
+ * Convenience function to create streaming renderer
207
+ */
208
+ export function createStreamingRenderer(options = {}) {
209
+ return new StreamingRenderer(options);
210
+ }
211
+ /**
212
+ * Simple streaming render function
213
+ */
214
+ export async function* renderToStream(component, options = {}) {
215
+ const renderer = new StreamingRenderer(options);
216
+ yield* renderer.render(component, options);
217
+ }
218
+ /**
219
+ * Streaming utilities
220
+ */
221
+ export const streamingUtils = {
222
+ /**
223
+ * Collect all chunks into a single string
224
+ */
225
+ async collectChunks(chunkGenerator) {
226
+ let html = '';
227
+ for await (const chunk of chunkGenerator) {
228
+ html += chunk.chunk;
229
+ }
230
+ return html;
231
+ },
232
+ /**
233
+ * Write chunks directly to a Node.js response
234
+ */
235
+ async streamToResponse(chunkGenerator, response) {
236
+ let totalBytes = 0;
237
+ for await (const chunk of chunkGenerator) {
238
+ response.write(chunk.chunk);
239
+ totalBytes += chunk.size;
240
+ }
241
+ response.end();
242
+ return totalBytes;
243
+ },
244
+ /**
245
+ * Stream with backpressure handling
246
+ */
247
+ async streamWithBackpressure(chunkGenerator, writeFunction, highWaterMark = 16384) {
248
+ let bufferedBytes = 0;
249
+ for await (const chunk of chunkGenerator) {
250
+ bufferedBytes += chunk.size;
251
+ const success = writeFunction(chunk.chunk);
252
+ if (!success && bufferedBytes > highWaterMark) {
253
+ // Wait for drain event or timeout
254
+ await new Promise((resolve) => {
255
+ const timeout = setTimeout(resolve, 100);
256
+ writeFunction.once?.('drain', () => {
257
+ clearTimeout(timeout);
258
+ resolve();
259
+ });
260
+ });
261
+ bufferedBytes = 0;
262
+ }
263
+ }
264
+ },
265
+ /**
266
+ * Transform chunks (e.g., compression, encoding)
267
+ */
268
+ async *transformChunks(chunkGenerator, transformer) {
269
+ for await (const chunk of chunkGenerator) {
270
+ const transformed = await transformer(chunk);
271
+ if (transformed) {
272
+ yield transformed;
273
+ }
274
+ }
275
+ },
276
+ /**
277
+ * Merge small chunks for efficiency
278
+ */
279
+ async *mergeSmallChunks(chunkGenerator, minSize = 1024) {
280
+ let buffer = '';
281
+ for await (const chunk of chunkGenerator) {
282
+ buffer += chunk.chunk;
283
+ if (buffer.length >= minSize || chunk.final) {
284
+ yield {
285
+ chunk: buffer,
286
+ size: Buffer.byteLength(buffer),
287
+ merged: true
288
+ };
289
+ buffer = '';
290
+ }
291
+ }
292
+ if (buffer.length > 0) {
293
+ yield {
294
+ chunk: buffer,
295
+ size: Buffer.byteLength(buffer),
296
+ merged: true,
297
+ final: true
298
+ };
299
+ }
300
+ }
301
+ };
302
+ /**
303
+ * Performance monitoring integration
304
+ */
305
+ if (performanceMonitor) {
306
+ const originalRender = StreamingRenderer.prototype.render;
307
+ StreamingRenderer.prototype.render = async function* (...args) {
308
+ const startTime = performance.now();
309
+ let chunkCount = 0;
310
+ try {
311
+ for await (const chunk of originalRender.apply(this, args)) {
312
+ chunkCount++;
313
+ yield chunk;
314
+ }
315
+ }
316
+ finally {
317
+ const duration = performance.now() - startTime;
318
+ performanceMonitor.recordRender('streaming', duration, {
319
+ chunks: chunkCount,
320
+ bytes: this.metrics.totalBytes
321
+ });
322
+ }
323
+ };
324
+ }
325
+ export default StreamingRenderer;
326
+ //# sourceMappingURL=streaming-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-renderer.js","sourceRoot":"","sources":["../../../../src/rendering/streaming-renderer.js"],"names":[],"mappings":"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"}
@@ -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"}