@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,444 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-performance HTML renderer with caching, monitoring, and streaming support
|
|
3
|
+
* Converts object-based components to HTML strings with advanced optimizations
|
|
4
|
+
*/
|
|
5
|
+
import { BaseRenderer, RendererUtils } from './base-renderer.js';
|
|
6
|
+
import { hasChildren, normalizeChildren, } from '../core/object-utils.js';
|
|
7
|
+
import { escapeHtml, isVoidElement, formatAttributes, minifyHtml } from '../core/html-utils.js';
|
|
8
|
+
import { performanceMonitor } from '../performance/monitor.js';
|
|
9
|
+
import { createCacheManager } from '../performance/cache-manager.js';
|
|
10
|
+
import { cssUtils, defaultCSSManager } from './css-manager.js';
|
|
11
|
+
// Create a global cache instance for the renderer
|
|
12
|
+
const rendererCache = createCacheManager({
|
|
13
|
+
maxSize: 1000,
|
|
14
|
+
ttlMs: 300000 // 5 minutes
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* HTML Renderer Class extending BaseRenderer
|
|
18
|
+
*
|
|
19
|
+
* @class HTMLRenderer
|
|
20
|
+
* @extends BaseRenderer
|
|
21
|
+
* @description High-performance HTML renderer with caching, monitoring, and streaming support.
|
|
22
|
+
* Converts object-based components to HTML strings with advanced optimizations.
|
|
23
|
+
*
|
|
24
|
+
* @param {Object} [options={}] - Renderer configuration options
|
|
25
|
+
* @param {boolean} [options.enableCache=true] - Enable component caching
|
|
26
|
+
* @param {boolean} [options.enableMonitoring=true] - Enable performance monitoring
|
|
27
|
+
* @param {boolean} [options.minify=false] - Enable HTML minification
|
|
28
|
+
* @param {boolean} [options.streaming=false] - Enable streaming mode
|
|
29
|
+
* @param {number} [options.maxDepth=100] - Maximum rendering depth
|
|
30
|
+
* @param {number} [options.cacheSize=1000] - Cache size limit
|
|
31
|
+
* @param {number} [options.cacheTTL=300000] - Cache TTL in milliseconds
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* const renderer = new HTMLRenderer({
|
|
35
|
+
* enableCache: true,
|
|
36
|
+
* enableMonitoring: true,
|
|
37
|
+
* minify: true
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* const html = renderer.render({ div: { text: 'Hello World' } });
|
|
41
|
+
*/
|
|
42
|
+
class HTMLRenderer extends BaseRenderer {
|
|
43
|
+
constructor(options = {}) {
|
|
44
|
+
super({
|
|
45
|
+
enableCache: options.enableCache !== false,
|
|
46
|
+
enableMonitoring: options.enableMonitoring !== false,
|
|
47
|
+
minify: options.minify || false,
|
|
48
|
+
streaming: options.streaming || false,
|
|
49
|
+
maxDepth: options.maxDepth || 100,
|
|
50
|
+
...options
|
|
51
|
+
});
|
|
52
|
+
// Initialize cache if enabled
|
|
53
|
+
if (this.config.enableCache && !this.cache) {
|
|
54
|
+
this.cache = rendererCache;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Main render method - converts components to HTML string
|
|
59
|
+
*
|
|
60
|
+
* @param {Object|Array|string|Function} component - Component to render
|
|
61
|
+
* @param {Object} [options={}] - Rendering options
|
|
62
|
+
* @param {Object} [options.context] - Rendering context
|
|
63
|
+
* @param {boolean} [options.enableCache] - Override cache setting
|
|
64
|
+
* @param {number} [options.depth=0] - Current rendering depth
|
|
65
|
+
* @returns {string} Rendered HTML string
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* const html = renderer.render({
|
|
69
|
+
* div: {
|
|
70
|
+
* className: 'container',
|
|
71
|
+
* children: [
|
|
72
|
+
* { h1: { text: 'Title' } },
|
|
73
|
+
* { p: { text: 'Content' } }
|
|
74
|
+
* ]
|
|
75
|
+
* }
|
|
76
|
+
* });
|
|
77
|
+
*/
|
|
78
|
+
render(component, options = {}) {
|
|
79
|
+
const _config = { ...this.config, ...options };
|
|
80
|
+
this.startTiming();
|
|
81
|
+
try {
|
|
82
|
+
// Input validation
|
|
83
|
+
if (config.validateInput && !this.isValidComponent(component)) {
|
|
84
|
+
throw new Error('Invalid component structure');
|
|
85
|
+
}
|
|
86
|
+
// Main rendering logic
|
|
87
|
+
const html = this.renderComponent(component, config, 0);
|
|
88
|
+
const finalHtml = config.minify ? minifyHtml(html, config) : html;
|
|
89
|
+
// Performance monitoring
|
|
90
|
+
this.endTiming();
|
|
91
|
+
this.recordPerformance('renderToString', this.metrics.startTime, false, {
|
|
92
|
+
cacheEnabled: config.enableCache
|
|
93
|
+
});
|
|
94
|
+
return finalHtml;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
this.recordError('renderToString', error);
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Render a single component with full optimization pipeline
|
|
103
|
+
*/
|
|
104
|
+
renderComponent(component, options, depth = 0) {
|
|
105
|
+
// Use base class depth validation
|
|
106
|
+
this.validateDepth(depth);
|
|
107
|
+
// Use base class component type processing
|
|
108
|
+
const { type, value } = this.processComponentType(component);
|
|
109
|
+
switch (type) {
|
|
110
|
+
case 'empty':
|
|
111
|
+
return '';
|
|
112
|
+
case 'text':
|
|
113
|
+
return escapeHtml(value);
|
|
114
|
+
case 'function':
|
|
115
|
+
const result = this.executeFunctionComponent(value, depth);
|
|
116
|
+
return this.renderComponent(result, options, depth + 1);
|
|
117
|
+
case 'array':
|
|
118
|
+
return value.map(child => this.renderComponent(child, options, depth + 1)).join('');
|
|
119
|
+
case 'element':
|
|
120
|
+
// Process object-based component
|
|
121
|
+
const tagName = Object.keys(value)[0];
|
|
122
|
+
const elementContent = value[tagName];
|
|
123
|
+
return this.renderElement(tagName, elementContent, options, depth);
|
|
124
|
+
default:
|
|
125
|
+
this.recordError('renderComponent', new Error(`Unknown component type: ${type}`));
|
|
126
|
+
return '';
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Render an HTML element with advanced caching and optimization
|
|
131
|
+
*/
|
|
132
|
+
renderElement(tagName, element, options, depth = 0) {
|
|
133
|
+
const startTime = performance.now();
|
|
134
|
+
// Track element usage for performance analysis (via stats in the new cache manager)
|
|
135
|
+
if (options.enableMonitoring && this.cache) {
|
|
136
|
+
// The new cache manager tracks usage automatically via get/set operations
|
|
137
|
+
}
|
|
138
|
+
// Check cache first for static elements
|
|
139
|
+
if (options.enableCache && this.cache && RendererUtils.isStaticElement(element)) {
|
|
140
|
+
const cacheKey = `static:${tagName}:${JSON.stringify(element)}`;
|
|
141
|
+
const cached = this.cache.get('static', cacheKey);
|
|
142
|
+
if (cached) {
|
|
143
|
+
this.recordPerformance(tagName, startTime, true);
|
|
144
|
+
return cached.value; // Return the cached HTML
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Handle text-only elements including booleans
|
|
148
|
+
if (typeof element === 'string' || typeof element === 'number' || typeof element === 'boolean') {
|
|
149
|
+
const html = isVoidElement(tagName)
|
|
150
|
+
? `<${tagName}>`
|
|
151
|
+
: `<${tagName}>${escapeHtml(String(element))}</${tagName}>`;
|
|
152
|
+
this.cacheIfStatic(tagName, element, html, options);
|
|
153
|
+
this.recordPerformance(tagName, startTime, false);
|
|
154
|
+
return html;
|
|
155
|
+
}
|
|
156
|
+
// Handle function elements
|
|
157
|
+
if (typeof element === 'function') {
|
|
158
|
+
const result = this.executeFunctionComponent(element, depth);
|
|
159
|
+
return this.renderElement(tagName, result, options, depth);
|
|
160
|
+
}
|
|
161
|
+
// Handle object elements (complex elements with props and children)
|
|
162
|
+
if (element && typeof element === 'object') {
|
|
163
|
+
return this.renderObjectElement(tagName, element, options, depth);
|
|
164
|
+
}
|
|
165
|
+
// Handle null and undefined by returning empty tags
|
|
166
|
+
if (element === null || element === undefined) {
|
|
167
|
+
const html = isVoidElement(tagName)
|
|
168
|
+
? `<${tagName}>`
|
|
169
|
+
: `<${tagName}></${tagName}>`;
|
|
170
|
+
this.recordPerformance(tagName, startTime, false);
|
|
171
|
+
return html;
|
|
172
|
+
}
|
|
173
|
+
// Fallback for any other types
|
|
174
|
+
const html = `<${tagName}>${escapeHtml(String(element))}</${tagName}>`;
|
|
175
|
+
this.recordPerformance(tagName, startTime, false);
|
|
176
|
+
return html;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Cache element if it's static
|
|
180
|
+
*/
|
|
181
|
+
cacheIfStatic(tagName, element, html) {
|
|
182
|
+
if (this.config.enableCache && this.cache && RendererUtils.isStaticElement(element)) {
|
|
183
|
+
const cacheKey = `static:${tagName}:${JSON.stringify(element)}`;
|
|
184
|
+
this.cache.set('static', cacheKey, html, {
|
|
185
|
+
ttlMs: this.config.cacheTTL || 5 * 60 * 1000, // 5 minutes default
|
|
186
|
+
size: html.length // Approximate size
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Render complex object elements with attributes and children
|
|
192
|
+
*/
|
|
193
|
+
renderObjectElement(tagName, element, options, depth = 0) {
|
|
194
|
+
const startTime = performance.now();
|
|
195
|
+
// Check component-level cache
|
|
196
|
+
if (options.enableCache && this.cache) {
|
|
197
|
+
const cacheKey = RendererUtils.generateCacheKey(tagName, element);
|
|
198
|
+
if (cacheKey) {
|
|
199
|
+
const cached = this.cache.get(cacheKey);
|
|
200
|
+
if (cached) {
|
|
201
|
+
this.recordPerformance(tagName, startTime, true);
|
|
202
|
+
return cached;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Extract props and children directly from element content
|
|
207
|
+
const { children, text, ...attributes } = element || {};
|
|
208
|
+
// Build opening tag with attributes
|
|
209
|
+
const attributeString = formatAttributes(attributes);
|
|
210
|
+
const openingTag = attributeString
|
|
211
|
+
? `<${tagName} ${attributeString}>`
|
|
212
|
+
: `<${tagName}>`;
|
|
213
|
+
// Handle text content
|
|
214
|
+
let textContent = '';
|
|
215
|
+
if (text !== undefined) {
|
|
216
|
+
const isScript = tagName === 'script';
|
|
217
|
+
const isStyle = tagName === 'style';
|
|
218
|
+
const isRawTag = isScript || isStyle;
|
|
219
|
+
const raw = typeof text === 'function' ? String(text()) : String(text);
|
|
220
|
+
if (isRawTag) {
|
|
221
|
+
// Prevent </script> or </style> early-terminating the tag
|
|
222
|
+
const safe = raw
|
|
223
|
+
.replace(/<\/(script)/gi, '<\\/$1')
|
|
224
|
+
.replace(/<\/(style)/gi, '<\\/$1')
|
|
225
|
+
// Escape problematic Unicode line separators in JS
|
|
226
|
+
.replace(/\u2028/g, '\\u2028')
|
|
227
|
+
.replace(/\u2029/g, '\\u2029');
|
|
228
|
+
textContent = safe;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
textContent = escapeHtml(raw);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Handle children
|
|
235
|
+
let childrenHtml = '';
|
|
236
|
+
if (hasChildren(element)) {
|
|
237
|
+
const normalizedChildren = normalizeChildren(children);
|
|
238
|
+
childrenHtml = normalizedChildren
|
|
239
|
+
.map(child => this.renderComponent(child, options, depth + 1))
|
|
240
|
+
.join('');
|
|
241
|
+
}
|
|
242
|
+
// Build complete HTML
|
|
243
|
+
const html = `${openingTag}${textContent}${childrenHtml}</${tagName}>`;
|
|
244
|
+
// Cache the result if appropriate
|
|
245
|
+
if (options.enableCache && this.cache && RendererUtils.isCacheable(element, options)) {
|
|
246
|
+
const cacheKey = RendererUtils.generateCacheKey(tagName, element);
|
|
247
|
+
if (cacheKey) {
|
|
248
|
+
this.cache.set(cacheKey, html);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
this.recordPerformance(tagName, startTime, false);
|
|
252
|
+
return html;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Note: globalCache is now imported from cache-manager.js
|
|
256
|
+
/**
|
|
257
|
+
* Main render function - converts object components to HTML
|
|
258
|
+
*/
|
|
259
|
+
export function renderToString(component, options = {}) {
|
|
260
|
+
// Merge default options with provided options
|
|
261
|
+
const mergedOptions = {
|
|
262
|
+
enableCache: true,
|
|
263
|
+
enableMonitoring: false,
|
|
264
|
+
...options
|
|
265
|
+
};
|
|
266
|
+
const renderer = new HTMLRenderer(mergedOptions);
|
|
267
|
+
return renderer.render(component, mergedOptions);
|
|
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
|
+
}
|
|
349
|
+
// Old functions removed - now part of HTMLRenderer class
|
|
350
|
+
// Old helper functions removed - now available in RendererUtils from BaseRenderer
|
|
351
|
+
/**
|
|
352
|
+
* Batch rendering for multiple components
|
|
353
|
+
*/
|
|
354
|
+
export function renderBatch(components, options = {}) {
|
|
355
|
+
if (!Array.isArray(components)) {
|
|
356
|
+
throw new Error('renderBatch expects an array of components');
|
|
357
|
+
}
|
|
358
|
+
// Merge default options with provided options
|
|
359
|
+
const mergedOptions = {
|
|
360
|
+
enableCache: true,
|
|
361
|
+
enableMonitoring: false,
|
|
362
|
+
...options
|
|
363
|
+
};
|
|
364
|
+
const renderer = new HTMLRenderer(mergedOptions);
|
|
365
|
+
return components.map(component => renderer.render(component, mergedOptions));
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Render to chunks for large output (fake streaming - renders full HTML then chunks it)
|
|
369
|
+
* For true progressive streaming, use the streaming-renderer.js renderToStream function
|
|
370
|
+
*/
|
|
371
|
+
export function* renderToChunks(component, options = {}) {
|
|
372
|
+
// Merge default options with provided options
|
|
373
|
+
const mergedOptions = {
|
|
374
|
+
enableCache: true,
|
|
375
|
+
enableMonitoring: false,
|
|
376
|
+
...options,
|
|
377
|
+
chunkSize: options.chunkSize || 1024 // Default 1KB chunks
|
|
378
|
+
};
|
|
379
|
+
const html = renderToString(component, mergedOptions);
|
|
380
|
+
for (let i = 0; i < html.length; i += mergedOptions.chunkSize) {
|
|
381
|
+
yield html.slice(i, i + mergedOptions.chunkSize);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* @deprecated Use renderToChunks instead. This function will be removed in a future version.
|
|
386
|
+
* For true progressive streaming, use the streaming-renderer.js renderToStream function.
|
|
387
|
+
*/
|
|
388
|
+
export async function* renderToStream(component, options = {}) {
|
|
389
|
+
console.warn('renderToStream from html-renderer is deprecated. Use renderToChunks for chunking or streaming-renderer.js renderToStream for true streaming.');
|
|
390
|
+
return yield* renderToChunks(component, options);
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Get global cache instance for external access
|
|
394
|
+
*/
|
|
395
|
+
export function getCache() {
|
|
396
|
+
return rendererCache;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Reset cache (useful for testing)
|
|
400
|
+
*/
|
|
401
|
+
export function resetCache() {
|
|
402
|
+
if (rendererCache) {
|
|
403
|
+
rendererCache.clear();
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Get rendering statistics
|
|
408
|
+
*/
|
|
409
|
+
export function getRenderingStats() {
|
|
410
|
+
return {
|
|
411
|
+
cache: rendererCache ? rendererCache.getStats() : null,
|
|
412
|
+
performance: performanceMonitor.getStats()
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Precompile static components for maximum performance
|
|
417
|
+
*/
|
|
418
|
+
export function precompileComponent(component, options = {}) {
|
|
419
|
+
if (!isStaticElement(component)) {
|
|
420
|
+
throw new Error('Can only precompile static components');
|
|
421
|
+
}
|
|
422
|
+
const html = renderToString(component, { ...options, enableCache: false });
|
|
423
|
+
return {
|
|
424
|
+
html,
|
|
425
|
+
isPrecompiled: true,
|
|
426
|
+
render: () => html
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Development helper - render with detailed timing
|
|
431
|
+
*/
|
|
432
|
+
export function renderWithTiming(component, options = {}) {
|
|
433
|
+
const start = performance.now();
|
|
434
|
+
const html = renderToString(component, { ...options, enableMonitoring: true });
|
|
435
|
+
const end = performance.now();
|
|
436
|
+
return {
|
|
437
|
+
html,
|
|
438
|
+
timing: {
|
|
439
|
+
total: end - start,
|
|
440
|
+
breakdown: performanceMonitor.getStats()
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
//# sourceMappingURL=html-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-renderer.js","sourceRoot":"","sources":["../../../../src/rendering/html-renderer.js"],"names":[],"mappings":"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"}
|