@xiboplayer/renderer 0.3.7 → 0.4.0
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/package.json +3 -3
- package/src/layout.js +12 -9
- package/src/renderer-lite.js +594 -34
- package/src/renderer-lite.test.js +1269 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xiboplayer/renderer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "RendererLite - Fast, efficient XLF layout rendering engine",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.js",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"nanoevents": "^9.1.0",
|
|
14
14
|
"pdfjs-dist": "^4.10.38",
|
|
15
|
-
"@xiboplayer/cache": "0.
|
|
16
|
-
"@xiboplayer/utils": "0.
|
|
15
|
+
"@xiboplayer/cache": "0.4.0",
|
|
16
|
+
"@xiboplayer/utils": "0.4.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"vitest": "^2.0.0",
|
package/src/layout.js
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { cacheWidgetHtml } from '@xiboplayer/cache';
|
|
7
|
+
import { createLogger } from '@xiboplayer/utils';
|
|
8
|
+
|
|
9
|
+
const log = createLogger('Layout');
|
|
7
10
|
|
|
8
11
|
export class LayoutTranslator {
|
|
9
12
|
constructor(xmds) {
|
|
@@ -124,9 +127,9 @@ export class LayoutTranslator {
|
|
|
124
127
|
|
|
125
128
|
for (let attempt = 1; attempt <= retries; attempt++) {
|
|
126
129
|
try {
|
|
127
|
-
|
|
130
|
+
log.info(`Fetching resource for ${type} widget (layout=${layoutId}, region=${regionId}, media=${id}) - attempt ${attempt}/${retries}`);
|
|
128
131
|
raw = await this.xmds.getResource(layoutId, regionId, id);
|
|
129
|
-
|
|
132
|
+
log.info(`Got resource HTML (${raw.length} chars)`);
|
|
130
133
|
|
|
131
134
|
// Store widget HTML in cache and save cache key for iframe src generation
|
|
132
135
|
const widgetCacheKey = await cacheWidgetHtml(layoutId, regionId, id, raw);
|
|
@@ -137,12 +140,12 @@ export class LayoutTranslator {
|
|
|
137
140
|
|
|
138
141
|
} catch (error) {
|
|
139
142
|
lastError = error;
|
|
140
|
-
|
|
143
|
+
log.warn(`Failed to get resource (attempt ${attempt}/${retries}):`, error.message);
|
|
141
144
|
|
|
142
145
|
// If not last attempt, wait before retry
|
|
143
146
|
if (attempt < retries) {
|
|
144
147
|
const delay = attempt * 2000; // 2s, 4s backoff
|
|
145
|
-
|
|
148
|
+
log.info(`Retrying in ${delay}ms...`);
|
|
146
149
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
147
150
|
}
|
|
148
151
|
}
|
|
@@ -150,7 +153,7 @@ export class LayoutTranslator {
|
|
|
150
153
|
|
|
151
154
|
// If all retries failed, try to use cached version as fallback
|
|
152
155
|
if (!raw && lastError) {
|
|
153
|
-
|
|
156
|
+
log.warn('All retries failed, checking for cached widget HTML...');
|
|
154
157
|
|
|
155
158
|
// Try to get cached widget HTML directly from Cache API
|
|
156
159
|
try {
|
|
@@ -161,14 +164,14 @@ export class LayoutTranslator {
|
|
|
161
164
|
if (cached) {
|
|
162
165
|
raw = await cached.text();
|
|
163
166
|
options.widgetCacheKey = cachedKey;
|
|
164
|
-
|
|
167
|
+
log.info(`Using cached widget HTML (${raw.length} chars) - CMS update pending`);
|
|
165
168
|
} else {
|
|
166
|
-
|
|
169
|
+
log.error(`No cached version available for widget ${id}`);
|
|
167
170
|
// Show minimal placeholder that doesn't look like an error
|
|
168
171
|
raw = `<div style="display:flex;align-items:center;justify-content:center;height:100%;color:#999;font-size:18px;">Content updating...</div>`;
|
|
169
172
|
}
|
|
170
173
|
} catch (cacheError) {
|
|
171
|
-
|
|
174
|
+
log.error('Cache fallback failed:', cacheError);
|
|
172
175
|
raw = `<div style="display:flex;align-items:center;justify-content:center;height:100%;color:#999;font-size:18px;">Content updating...</div>`;
|
|
173
176
|
}
|
|
174
177
|
}
|
|
@@ -894,7 +897,7 @@ ${mediaJS}
|
|
|
894
897
|
startFn = iframe.startFn;
|
|
895
898
|
stopFn = iframe.stopFn;
|
|
896
899
|
} else {
|
|
897
|
-
|
|
900
|
+
log.warn(`Unsupported media type: ${media.type}`);
|
|
898
901
|
startFn = `() => console.log('Unsupported media type: ${media.type}')`;
|
|
899
902
|
}
|
|
900
903
|
}
|