@docmentis/udoc-viewer 0.2.1 → 0.2.3
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/package.json +1 -1
- package/dist/src/UDocClient.d.ts +113 -3
- package/dist/src/UDocClient.d.ts.map +1 -1
- package/dist/src/UDocClient.js +181 -24
- package/dist/src/UDocClient.js.map +1 -1
- package/dist/src/UDocViewer.d.ts +21 -5
- package/dist/src/UDocViewer.d.ts.map +1 -1
- package/dist/src/UDocViewer.js +45 -35
- package/dist/src/UDocViewer.js.map +1 -1
- package/dist/src/ui/viewer/components/LeftPanel.d.ts +2 -2
- package/dist/src/ui/viewer/components/LeftPanel.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/LeftPanel.js +6 -6
- package/dist/src/ui/viewer/components/LeftPanel.js.map +1 -1
- package/dist/src/ui/viewer/components/Spread.d.ts +2 -2
- package/dist/src/ui/viewer/components/Spread.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/Spread.js +2 -2
- package/dist/src/ui/viewer/components/Spread.js.map +1 -1
- package/dist/src/ui/viewer/components/ThumbnailPanel.d.ts +2 -2
- package/dist/src/ui/viewer/components/ThumbnailPanel.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/ThumbnailPanel.js +5 -5
- package/dist/src/ui/viewer/components/ThumbnailPanel.js.map +1 -1
- package/dist/src/ui/viewer/components/Viewport.d.ts +2 -2
- package/dist/src/ui/viewer/components/Viewport.d.ts.map +1 -1
- package/dist/src/ui/viewer/components/Viewport.js +9 -9
- package/dist/src/ui/viewer/components/Viewport.js.map +1 -1
- package/dist/src/ui/viewer/effects.d.ts +2 -2
- package/dist/src/ui/viewer/effects.d.ts.map +1 -1
- package/dist/src/ui/viewer/effects.js +7 -6
- package/dist/src/ui/viewer/effects.js.map +1 -1
- package/dist/src/ui/viewer/shell.d.ts +2 -5
- package/dist/src/ui/viewer/shell.d.ts.map +1 -1
- package/dist/src/ui/viewer/shell.js +4 -6
- package/dist/src/ui/viewer/shell.js.map +1 -1
- package/dist/src/wasm/udoc.d.ts +107 -27
- package/dist/src/wasm/udoc.js +223 -44
- package/dist/src/wasm/udoc_bg.wasm +0 -0
- package/dist/src/wasm/udoc_bg.wasm.d.ts +6 -1
- package/dist/src/worker/WorkerClient.d.ts +93 -9
- package/dist/src/worker/WorkerClient.d.ts.map +1 -1
- package/dist/src/worker/WorkerClient.js +295 -15
- package/dist/src/worker/WorkerClient.js.map +1 -1
- package/dist/src/worker/index.d.ts +1 -1
- package/dist/src/worker/index.d.ts.map +1 -1
- package/dist/src/worker/worker.d.ts +94 -3
- package/dist/src/worker/worker.d.ts.map +1 -1
- package/dist/src/worker/worker.js +47 -3
- package/dist/src/worker/worker.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/ui/viewer/rendering/RenderManager.d.ts +0 -76
- package/dist/src/ui/viewer/rendering/RenderManager.d.ts.map +0 -1
- package/dist/src/ui/viewer/rendering/RenderManager.js +0 -236
- package/dist/src/ui/viewer/rendering/RenderManager.js.map +0 -1
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RenderManager - Handles render queue and cache for document pages.
|
|
3
|
-
*
|
|
4
|
-
* Responsibilities:
|
|
5
|
-
* - Priority queue with boost-based ordering
|
|
6
|
-
* - Deduplication (same page/scale only rendered once)
|
|
7
|
-
* - Cache with LRU eviction
|
|
8
|
-
* - In-flight request tracking
|
|
9
|
-
*
|
|
10
|
-
* Priority scheme:
|
|
11
|
-
* - Base priority: page=100, thumbnail=50
|
|
12
|
-
* - boost() promotes target page and nearby pages above current max priority
|
|
13
|
-
*/
|
|
14
|
-
export type RenderType = "page" | "thumbnail";
|
|
15
|
-
export interface RenderRequest {
|
|
16
|
-
docId: string;
|
|
17
|
-
page: number;
|
|
18
|
-
type: RenderType;
|
|
19
|
-
scale: number;
|
|
20
|
-
}
|
|
21
|
-
export interface RenderResult {
|
|
22
|
-
bitmap: ImageBitmap;
|
|
23
|
-
width: number;
|
|
24
|
-
height: number;
|
|
25
|
-
}
|
|
26
|
-
export interface RenderAdapter {
|
|
27
|
-
render(docId: string, page: number, scale: number): Promise<ImageBitmap>;
|
|
28
|
-
}
|
|
29
|
-
export interface RenderManagerOptions {
|
|
30
|
-
/** Max cache entries before LRU eviction (default: 100) */
|
|
31
|
-
maxCacheSize?: number;
|
|
32
|
-
/** Max concurrent render requests (default: 2) */
|
|
33
|
-
maxConcurrent?: number;
|
|
34
|
-
}
|
|
35
|
-
export declare class RenderManager {
|
|
36
|
-
private adapter;
|
|
37
|
-
private cache;
|
|
38
|
-
private queue;
|
|
39
|
-
private inFlight;
|
|
40
|
-
private maxCacheSize;
|
|
41
|
-
private maxConcurrent;
|
|
42
|
-
private activeCount;
|
|
43
|
-
constructor(adapter: RenderAdapter, options?: RenderManagerOptions);
|
|
44
|
-
/**
|
|
45
|
-
* Request a render. Returns cached result if available,
|
|
46
|
-
* otherwise queues the request.
|
|
47
|
-
*/
|
|
48
|
-
request(req: RenderRequest): Promise<RenderResult>;
|
|
49
|
-
/**
|
|
50
|
-
* Get a cached result without queuing a render.
|
|
51
|
-
*/
|
|
52
|
-
get(docId: string, page: number, type: RenderType, scale: number): RenderResult | null;
|
|
53
|
-
/**
|
|
54
|
-
* Cancel pending requests matching criteria.
|
|
55
|
-
* Does not cancel in-flight requests.
|
|
56
|
-
*/
|
|
57
|
-
cancel(docId?: string, page?: number, type?: RenderType): void;
|
|
58
|
-
/**
|
|
59
|
-
* Invalidate cache entries. Call when document or zoom changes.
|
|
60
|
-
*/
|
|
61
|
-
invalidate(docId?: string): void;
|
|
62
|
-
/**
|
|
63
|
-
* Boost priority for the target page and nearby pages.
|
|
64
|
-
* Target page gets highest priority, nearby pages get slightly lower.
|
|
65
|
-
*/
|
|
66
|
-
boost(docId: string, page: number): void;
|
|
67
|
-
/**
|
|
68
|
-
* Clean up resources.
|
|
69
|
-
*/
|
|
70
|
-
destroy(): void;
|
|
71
|
-
private processQueue;
|
|
72
|
-
private doRender;
|
|
73
|
-
private addToCache;
|
|
74
|
-
private evictLRU;
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=RenderManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RenderManager.d.ts","sourceRoot":"","sources":["../../../../../src/ui/viewer/rendering/RenderManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5E;AAsBD,MAAM,WAAW,oBAAoB;IACjC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAK;gBAEZ,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,oBAAyB;IAMtE;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAqClD;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAUtF;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAc9D;;OAEG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAkBhC;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IA2BxC;;OAEG;IACH,OAAO,IAAI,IAAI;YAcD,YAAY;YAmCZ,QAAQ;IAoBtB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,QAAQ;CAmBnB"}
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RenderManager - Handles render queue and cache for document pages.
|
|
3
|
-
*
|
|
4
|
-
* Responsibilities:
|
|
5
|
-
* - Priority queue with boost-based ordering
|
|
6
|
-
* - Deduplication (same page/scale only rendered once)
|
|
7
|
-
* - Cache with LRU eviction
|
|
8
|
-
* - In-flight request tracking
|
|
9
|
-
*
|
|
10
|
-
* Priority scheme:
|
|
11
|
-
* - Base priority: page=100, thumbnail=50
|
|
12
|
-
* - boost() promotes target page and nearby pages above current max priority
|
|
13
|
-
*/
|
|
14
|
-
function makeKey(docId, page, type, scale) {
|
|
15
|
-
return `${docId}:${page}:${type}:${scale}`;
|
|
16
|
-
}
|
|
17
|
-
/** Base priority by render type (page renders are more important than thumbnails) */
|
|
18
|
-
function getBasePriority(type) {
|
|
19
|
-
return type === "page" ? 100 : 50;
|
|
20
|
-
}
|
|
21
|
-
export class RenderManager {
|
|
22
|
-
adapter;
|
|
23
|
-
cache = new Map();
|
|
24
|
-
queue = [];
|
|
25
|
-
inFlight = new Map();
|
|
26
|
-
maxCacheSize;
|
|
27
|
-
maxConcurrent;
|
|
28
|
-
activeCount = 0;
|
|
29
|
-
constructor(adapter, options = {}) {
|
|
30
|
-
this.adapter = adapter;
|
|
31
|
-
this.maxCacheSize = options.maxCacheSize ?? 100;
|
|
32
|
-
this.maxConcurrent = options.maxConcurrent ?? 2;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Request a render. Returns cached result if available,
|
|
36
|
-
* otherwise queues the request.
|
|
37
|
-
*/
|
|
38
|
-
request(req) {
|
|
39
|
-
const key = makeKey(req.docId, req.page, req.type, req.scale);
|
|
40
|
-
// Check cache first
|
|
41
|
-
const cached = this.cache.get(key);
|
|
42
|
-
if (cached) {
|
|
43
|
-
cached.lastAccess = Date.now();
|
|
44
|
-
return Promise.resolve(cached.result);
|
|
45
|
-
}
|
|
46
|
-
// Check if already in-flight
|
|
47
|
-
const existing = this.inFlight.get(key);
|
|
48
|
-
if (existing) {
|
|
49
|
-
return existing;
|
|
50
|
-
}
|
|
51
|
-
// Queue the request
|
|
52
|
-
return new Promise((resolve, reject) => {
|
|
53
|
-
const queuedReq = {
|
|
54
|
-
...req,
|
|
55
|
-
priority: getBasePriority(req.type),
|
|
56
|
-
resolve,
|
|
57
|
-
reject
|
|
58
|
-
};
|
|
59
|
-
// Insert sorted by priority (highest first)
|
|
60
|
-
const insertIndex = this.queue.findIndex(q => q.priority < queuedReq.priority);
|
|
61
|
-
if (insertIndex === -1) {
|
|
62
|
-
this.queue.push(queuedReq);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
this.queue.splice(insertIndex, 0, queuedReq);
|
|
66
|
-
}
|
|
67
|
-
this.processQueue();
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Get a cached result without queuing a render.
|
|
72
|
-
*/
|
|
73
|
-
get(docId, page, type, scale) {
|
|
74
|
-
const key = makeKey(docId, page, type, scale);
|
|
75
|
-
const cached = this.cache.get(key);
|
|
76
|
-
if (cached) {
|
|
77
|
-
cached.lastAccess = Date.now();
|
|
78
|
-
return cached.result;
|
|
79
|
-
}
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Cancel pending requests matching criteria.
|
|
84
|
-
* Does not cancel in-flight requests.
|
|
85
|
-
*/
|
|
86
|
-
cancel(docId, page, type) {
|
|
87
|
-
this.queue = this.queue.filter(req => {
|
|
88
|
-
const match = (docId === undefined || req.docId === docId) &&
|
|
89
|
-
(page === undefined || req.page === page) &&
|
|
90
|
-
(type === undefined || req.type === type);
|
|
91
|
-
if (match) {
|
|
92
|
-
req.reject(new Error("Request cancelled"));
|
|
93
|
-
}
|
|
94
|
-
return !match;
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Invalidate cache entries. Call when document or zoom changes.
|
|
99
|
-
*/
|
|
100
|
-
invalidate(docId) {
|
|
101
|
-
if (docId === undefined) {
|
|
102
|
-
// Clear all
|
|
103
|
-
for (const entry of this.cache.values()) {
|
|
104
|
-
entry.result.bitmap.close();
|
|
105
|
-
}
|
|
106
|
-
this.cache.clear();
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// Clear for specific doc
|
|
110
|
-
for (const [key, entry] of this.cache) {
|
|
111
|
-
if (key.startsWith(docId + ":")) {
|
|
112
|
-
entry.result.bitmap.close();
|
|
113
|
-
this.cache.delete(key);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Boost priority for the target page and nearby pages.
|
|
120
|
-
* Target page gets highest priority, nearby pages get slightly lower.
|
|
121
|
-
*/
|
|
122
|
-
boost(docId, page) {
|
|
123
|
-
if (this.queue.length === 0)
|
|
124
|
-
return;
|
|
125
|
-
// Find highest priority in queue
|
|
126
|
-
let maxPriority = 0;
|
|
127
|
-
for (const req of this.queue) {
|
|
128
|
-
if (req.priority > maxPriority) {
|
|
129
|
-
maxPriority = req.priority;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
const boostBase = maxPriority + 10;
|
|
133
|
-
// Boost matching pages within a wider distance to cover more nearby renders.
|
|
134
|
-
for (const req of this.queue) {
|
|
135
|
-
if (req.docId === docId) {
|
|
136
|
-
const distance = Math.abs(req.page - page);
|
|
137
|
-
if (distance <= 4) {
|
|
138
|
-
req.priority = boostBase - distance;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// Re-sort queue by new priorities
|
|
143
|
-
this.queue.sort((a, b) => b.priority - a.priority);
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Clean up resources.
|
|
147
|
-
*/
|
|
148
|
-
destroy() {
|
|
149
|
-
// Cancel all pending
|
|
150
|
-
for (const req of this.queue) {
|
|
151
|
-
req.reject(new Error("RenderManager destroyed"));
|
|
152
|
-
}
|
|
153
|
-
this.queue = [];
|
|
154
|
-
// Close all cached bitmaps
|
|
155
|
-
for (const entry of this.cache.values()) {
|
|
156
|
-
entry.result.bitmap.close();
|
|
157
|
-
}
|
|
158
|
-
this.cache.clear();
|
|
159
|
-
}
|
|
160
|
-
async processQueue() {
|
|
161
|
-
while (this.activeCount < this.maxConcurrent && this.queue.length > 0) {
|
|
162
|
-
const req = this.queue.shift();
|
|
163
|
-
if (!req)
|
|
164
|
-
break;
|
|
165
|
-
const key = makeKey(req.docId, req.page, req.type, req.scale);
|
|
166
|
-
// Double-check cache (might have been filled while queued)
|
|
167
|
-
const cached = this.cache.get(key);
|
|
168
|
-
if (cached) {
|
|
169
|
-
cached.lastAccess = Date.now();
|
|
170
|
-
req.resolve(cached.result);
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
|
-
// Check if in-flight (might have been started by another request)
|
|
174
|
-
const existing = this.inFlight.get(key);
|
|
175
|
-
if (existing) {
|
|
176
|
-
existing.then(req.resolve, req.reject);
|
|
177
|
-
continue;
|
|
178
|
-
}
|
|
179
|
-
// Start the render
|
|
180
|
-
this.activeCount++;
|
|
181
|
-
const promise = this.doRender(req, key);
|
|
182
|
-
this.inFlight.set(key, promise);
|
|
183
|
-
promise.finally(() => {
|
|
184
|
-
this.activeCount--;
|
|
185
|
-
this.inFlight.delete(key);
|
|
186
|
-
this.processQueue();
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
async doRender(req, key) {
|
|
191
|
-
try {
|
|
192
|
-
const bitmap = await this.adapter.render(req.docId, req.page, req.scale);
|
|
193
|
-
const result = {
|
|
194
|
-
bitmap,
|
|
195
|
-
width: bitmap.width,
|
|
196
|
-
height: bitmap.height
|
|
197
|
-
};
|
|
198
|
-
// Add to cache
|
|
199
|
-
this.addToCache(key, result);
|
|
200
|
-
req.resolve(result);
|
|
201
|
-
return result;
|
|
202
|
-
}
|
|
203
|
-
catch (error) {
|
|
204
|
-
req.reject(error instanceof Error ? error : new Error(String(error)));
|
|
205
|
-
throw error;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
addToCache(key, result) {
|
|
209
|
-
// Evict if at capacity
|
|
210
|
-
while (this.cache.size >= this.maxCacheSize) {
|
|
211
|
-
this.evictLRU();
|
|
212
|
-
}
|
|
213
|
-
this.cache.set(key, {
|
|
214
|
-
result,
|
|
215
|
-
lastAccess: Date.now()
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
evictLRU() {
|
|
219
|
-
let oldest = null;
|
|
220
|
-
let oldestTime = Infinity;
|
|
221
|
-
for (const [key, entry] of this.cache) {
|
|
222
|
-
if (entry.lastAccess < oldestTime) {
|
|
223
|
-
oldestTime = entry.lastAccess;
|
|
224
|
-
oldest = key;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
if (oldest) {
|
|
228
|
-
const entry = this.cache.get(oldest);
|
|
229
|
-
if (entry) {
|
|
230
|
-
entry.result.bitmap.close();
|
|
231
|
-
}
|
|
232
|
-
this.cache.delete(oldest);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
//# sourceMappingURL=RenderManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RenderManager.js","sourceRoot":"","sources":["../../../../../src/ui/viewer/rendering/RenderManager.ts"],"names":[],"mappings":"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"}
|