@build-qube/papyra 0.4.0 → 0.6.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/README.md +12 -1
- package/dist/attachments.d.ts +6 -1
- package/dist/attachments.d.ts.map +1 -1
- package/dist/attachments.js +6 -1
- package/dist/attachments.js.map +1 -1
- package/dist/cache.d.ts +5 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +8 -0
- package/dist/cache.js.map +1 -1
- package/dist/canvas.d.ts +2 -2
- package/dist/canvas.d.ts.map +1 -1
- package/dist/canvas.js +20 -7
- package/dist/canvas.js.map +1 -1
- package/dist/core.d.ts +57 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +40 -0
- package/dist/core.js.map +1 -0
- package/dist/document.d.ts +28 -20
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +79 -360
- package/dist/document.js.map +1 -1
- package/dist/engine.d.ts +327 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +485 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts +2 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -1
- package/dist/errors.js.map +1 -1
- package/dist/fingerprint.d.ts +2 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +2 -1
- package/dist/fingerprint.js.map +1 -1
- package/dist/index.d.ts +6 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -14
- package/dist/index.js.map +1 -1
- package/dist/links.d.ts +6 -1
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +6 -1
- package/dist/links.js.map +1 -1
- package/dist/office.d.ts +85 -0
- package/dist/office.d.ts.map +1 -0
- package/dist/office.js +135 -0
- package/dist/office.js.map +1 -0
- package/dist/papyra-engine.d.ts +68 -0
- package/dist/papyra-engine.d.ts.map +1 -0
- package/dist/papyra-engine.js +173 -0
- package/dist/papyra-engine.js.map +1 -0
- package/dist/runtime.d.ts +7 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +11 -0
- package/dist/runtime.js.map +1 -1
- package/dist/scheduler.d.ts +10 -2
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +26 -7
- package/dist/scheduler.js.map +1 -1
- package/dist/sheets.d.ts +160 -0
- package/dist/sheets.d.ts.map +1 -0
- package/dist/sheets.js +153 -0
- package/dist/sheets.js.map +1 -0
- package/dist/source.d.ts +1 -1
- package/dist/source.js +1 -1
- package/dist/text.d.ts +6 -1
- package/dist/text.d.ts.map +1 -1
- package/dist/text.js +6 -1
- package/dist/text.js.map +1 -1
- package/dist/tiff-image.d.ts +97 -0
- package/dist/tiff-image.d.ts.map +1 -0
- package/dist/tiff-image.js +65 -0
- package/dist/tiff-image.js.map +1 -0
- package/dist/tiff.d.ts +2 -73
- package/dist/tiff.d.ts.map +1 -1
- package/dist/tiff.js +4 -53
- package/dist/tiff.js.map +1 -1
- package/dist/types.d.ts +22 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/workbook.d.ts +3 -134
- package/dist/workbook.d.ts.map +1 -1
- package/dist/workbook.js +6 -141
- package/dist/workbook.js.map +1 -1
- package/package.json +24 -3
package/dist/engine.js
ADDED
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
import { RenderCache } from './cache.js';
|
|
2
|
+
import { DEFAULT_PRIORITY, Scheduler } from './scheduler.js';
|
|
3
|
+
import { searchPageText } from './search.js';
|
|
4
|
+
import { pageTextBytes } from './text.js';
|
|
5
|
+
const DEFAULT_DPI = 72;
|
|
6
|
+
/**
|
|
7
|
+
* Refuse renders large enough to take down the tab.
|
|
8
|
+
*
|
|
9
|
+
* 100 MP is ~400 MB of RGBA — beyond this you almost certainly meant `fitWidth`.
|
|
10
|
+
*/
|
|
11
|
+
const MAX_PIXELS = 100_000_000;
|
|
12
|
+
/** Default bytes of rendered pages to keep. Roughly eleven 2000px ARCH-E sheets. */
|
|
13
|
+
const DEFAULT_CACHE_BYTES = 128 * 1024 * 1024;
|
|
14
|
+
/**
|
|
15
|
+
* Default bytes of extracted text to keep.
|
|
16
|
+
*
|
|
17
|
+
* Text is three orders of magnitude smaller than the pixels of the same page — a
|
|
18
|
+
* dense page of a paper is ~80 KB against ~11 MB — so this holds hundreds of pages
|
|
19
|
+
* and a repeated search never re-extracts.
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_TEXT_CACHE_BYTES = 32 * 1024 * 1024;
|
|
22
|
+
/**
|
|
23
|
+
* Bytes of page links to keep.
|
|
24
|
+
*
|
|
25
|
+
* Not an option, unlike the render and text budgets: links are two orders of
|
|
26
|
+
* magnitude smaller again — a page of a linked table of contents is a few hundred
|
|
27
|
+
* bytes — so 4 MB holds tens of thousands of them and there is nothing to tune.
|
|
28
|
+
*/
|
|
29
|
+
const LINK_CACHE_BYTES = 4 * 1024 * 1024;
|
|
30
|
+
/** Rough bytes per cached link: two objects, a rect, and a short string. */
|
|
31
|
+
const LINK_BYTES = 96;
|
|
32
|
+
/** Used when neither the caller nor the backend names a concurrency. */
|
|
33
|
+
const FALLBACK_CONCURRENCY = 4;
|
|
34
|
+
/**
|
|
35
|
+
* Where text extraction sits in the queue by default.
|
|
36
|
+
*
|
|
37
|
+
* Behind rendering: a search that stalls the page the user is looking at is worse
|
|
38
|
+
* than one that takes another beat to fill in.
|
|
39
|
+
*/
|
|
40
|
+
export const DEFAULT_TEXT_PRIORITY = 3;
|
|
41
|
+
/** No capabilities at all: an engine that only renders pages. */
|
|
42
|
+
export const RENDER_ONLY = {
|
|
43
|
+
text: false,
|
|
44
|
+
outline: false,
|
|
45
|
+
links: false,
|
|
46
|
+
attachments: false,
|
|
47
|
+
structure: false,
|
|
48
|
+
pageLabels: false,
|
|
49
|
+
annotationsToggle: false,
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Every live document, keyed by its handle.
|
|
53
|
+
*
|
|
54
|
+
* Module-level rather than per engine so that an alias — papyra's `Document`, which
|
|
55
|
+
* is a handle in its own right — can share the state of the handle it wraps.
|
|
56
|
+
*/
|
|
57
|
+
const states = new WeakMap();
|
|
58
|
+
/** @internal The state behind a handle, checked against the engine asking. */
|
|
59
|
+
export function stateOf(engine, doc) {
|
|
60
|
+
const state = states.get(doc);
|
|
61
|
+
if (!state || state.closed) {
|
|
62
|
+
throw new Error('papyra: this document is closed, or was never opened');
|
|
63
|
+
}
|
|
64
|
+
if (engine && state.engine !== engine) {
|
|
65
|
+
throw new Error(`papyra: this document was opened by another engine (${state.engine.id})`);
|
|
66
|
+
}
|
|
67
|
+
return state;
|
|
68
|
+
}
|
|
69
|
+
/** @internal Make `alias` stand for the same open document as `doc`. */
|
|
70
|
+
export function adopt(alias, doc) {
|
|
71
|
+
states.set(alias, stateOf(null, doc));
|
|
72
|
+
}
|
|
73
|
+
/** @internal Cache key of one page's extracted text. */
|
|
74
|
+
export function textKey(index) {
|
|
75
|
+
return `text:${index}`;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Cache- and coalescing-key suffix for the annotation switch.
|
|
79
|
+
*
|
|
80
|
+
* Empty in the default case, so the ordinary key keeps the shape it has always had.
|
|
81
|
+
* The suffix has to exist at all because the scheduler coalesces on this string and
|
|
82
|
+
* the cache is looked up by it: without it, asking for a page with annotations off
|
|
83
|
+
* would be served the bitmap that still has them drawn on.
|
|
84
|
+
*
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
87
|
+
export function annotationKey(options) {
|
|
88
|
+
return options.annotations === false ? ':noannots' : '';
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Wire an `AbortSignal` to a queued job. Cancelling only drops work not yet started.
|
|
92
|
+
*
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
export function attachSignal(handle, signal) {
|
|
96
|
+
if (!signal)
|
|
97
|
+
return;
|
|
98
|
+
if (signal.aborted) {
|
|
99
|
+
handle.cancel('signal aborted');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
signal.addEventListener('abort', () => handle.cancel('signal aborted'), {
|
|
103
|
+
once: true,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Turn `fitWidth`/`dpi` into a concrete DPI, and refuse absurd outputs.
|
|
108
|
+
*
|
|
109
|
+
* `fitWidth` exists because page sizes vary by two orders of magnitude in area: a
|
|
110
|
+
* DPI that is sensible for US Letter produces a 113 MB bitmap for an ARCH-E drawing.
|
|
111
|
+
*
|
|
112
|
+
* @internal
|
|
113
|
+
*/
|
|
114
|
+
export function resolveDpi(backend, index, options) {
|
|
115
|
+
const { width, height } = backend.pageSize(index);
|
|
116
|
+
const dpi = options.fitWidth !== undefined && width > 0
|
|
117
|
+
? (options.fitWidth / width) * 72
|
|
118
|
+
: (options.dpi ?? DEFAULT_DPI);
|
|
119
|
+
const pixels = ((width * dpi) / 72) * ((height * dpi) / 72);
|
|
120
|
+
if (pixels > MAX_PIXELS) {
|
|
121
|
+
const mb = Math.round((pixels * 4) / 1e6);
|
|
122
|
+
throw new RangeError(`papyra: page ${index} at ${dpi.toFixed(1)} DPI would be ` +
|
|
123
|
+
`${Math.round((width * dpi) / 72)}x${Math.round((height * dpi) / 72)} ` +
|
|
124
|
+
`(${mb} MB). The page is ${(width / 72).toFixed(1)}x${(height / 72).toFixed(1)}in — ` +
|
|
125
|
+
'use { fitWidth } to size by output pixels instead of DPI.');
|
|
126
|
+
}
|
|
127
|
+
return dpi;
|
|
128
|
+
}
|
|
129
|
+
/** @internal `[start, end)` as an array. */
|
|
130
|
+
export function range(start, end) {
|
|
131
|
+
const out = [];
|
|
132
|
+
for (let i = start; i < end; i++)
|
|
133
|
+
out.push(i);
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
/** Bytes a cached page holds: exact for RGBA, the decoded size for a bitmap. */
|
|
137
|
+
function pageBytes(page) {
|
|
138
|
+
return 'data' in page ? page.data.byteLength : page.width * page.height * 4;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Opens documents with pages, and does everything to them.
|
|
142
|
+
*
|
|
143
|
+
* The queue, the caches and `fitWidth` live here, written once: an implementation
|
|
144
|
+
* supplies {@link load} and {@link handle} and gets priority scheduling,
|
|
145
|
+
* coalescing, a byte-bounded render cache and streaming for nothing. Constructing an
|
|
146
|
+
* engine loads nothing — whatever it renders with is fetched by the first `open`.
|
|
147
|
+
*
|
|
148
|
+
* @typeParam D - The handle `open` returns.
|
|
149
|
+
* @typeParam B - The backend `load` produces.
|
|
150
|
+
*/
|
|
151
|
+
export class PagedEngine {
|
|
152
|
+
/**
|
|
153
|
+
* Open a document. The handle is passed to this engine's other methods; see
|
|
154
|
+
* {@link OpenOptions} for the queue and cache settings it is opened with.
|
|
155
|
+
*/
|
|
156
|
+
async open(source, options = {}) {
|
|
157
|
+
const backend = await this.load(source, options);
|
|
158
|
+
const limit = Math.max(1, options.concurrency ?? backend.concurrency ?? FALLBACK_CONCURRENCY);
|
|
159
|
+
const doc = this.handle(backend);
|
|
160
|
+
const state = {
|
|
161
|
+
engine: this,
|
|
162
|
+
backend,
|
|
163
|
+
scheduler: new Scheduler(limit, { yieldToUrgent: options.yieldToUrgent }),
|
|
164
|
+
limit,
|
|
165
|
+
cache: new RenderCache(options.cacheBytes ?? DEFAULT_CACHE_BYTES, pageBytes),
|
|
166
|
+
text: new RenderCache(options.textCacheBytes ?? DEFAULT_TEXT_CACHE_BYTES, pageTextBytes),
|
|
167
|
+
links: new RenderCache(LINK_CACHE_BYTES, (links) => links.length * LINK_BYTES),
|
|
168
|
+
linksPending: new Map(),
|
|
169
|
+
};
|
|
170
|
+
states.set(doc, state);
|
|
171
|
+
return doc;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Release a document: its caches, and whatever its backend holds. The handle, and
|
|
175
|
+
* any alias of it, is unusable from the moment this returns; the promise settles
|
|
176
|
+
* when the backend has let go, and rejects if it could not. Work already running
|
|
177
|
+
* finishes.
|
|
178
|
+
*
|
|
179
|
+
* Throws at once, not through the promise, for a document that is not open here.
|
|
180
|
+
*/
|
|
181
|
+
close(doc) {
|
|
182
|
+
const state = stateOf(this, doc);
|
|
183
|
+
state.closed = true;
|
|
184
|
+
states.delete(doc);
|
|
185
|
+
// Closed rather than cleared: work already running still resolves into these.
|
|
186
|
+
state.cache.close();
|
|
187
|
+
state.text.close();
|
|
188
|
+
state.links.close();
|
|
189
|
+
try {
|
|
190
|
+
return Promise.resolve(state.backend.close?.());
|
|
191
|
+
}
|
|
192
|
+
catch (e) {
|
|
193
|
+
return Promise.reject(e);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Render a page, returning a handle you can reprioritise or drop.
|
|
198
|
+
*
|
|
199
|
+
* This is the viewer path: as the user scrolls, promote what came into view and
|
|
200
|
+
* demote what left, without re-submitting or duplicating work. Requests for the
|
|
201
|
+
* same page at the same size coalesce into one render, taking the most urgent
|
|
202
|
+
* priority asked for, and finished pages are served from a byte-bounded cache.
|
|
203
|
+
*/
|
|
204
|
+
render(doc, index, options = {}) {
|
|
205
|
+
const { backend, cache, scheduler } = stateOf(this, doc);
|
|
206
|
+
const dpi = resolveDpi(backend, index, options);
|
|
207
|
+
const key = `${index}@${dpi.toFixed(4)}${annotationKey(options)}`;
|
|
208
|
+
const hit = cache.get(key);
|
|
209
|
+
if (hit)
|
|
210
|
+
return cachedHandle(key, hit);
|
|
211
|
+
const handle = scheduler.submit({
|
|
212
|
+
key,
|
|
213
|
+
priority: options.priority ?? DEFAULT_PRIORITY,
|
|
214
|
+
abortable: backend.abortable,
|
|
215
|
+
run: (signal) => backend
|
|
216
|
+
.renderPage(index, { dpi, annotations: options.annotations }, signal)
|
|
217
|
+
.then((page) => {
|
|
218
|
+
cache.set(key, page);
|
|
219
|
+
return page;
|
|
220
|
+
}),
|
|
221
|
+
});
|
|
222
|
+
attachSignal(handle, options.signal);
|
|
223
|
+
return liveHandle(handle);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Render pages as an async iterable, yielding each as soon as it finishes.
|
|
227
|
+
*
|
|
228
|
+
* At most `concurrency` renders are in flight, so memory stays bounded. Breaking
|
|
229
|
+
* out of the loop stops scheduling further work and drops what is still queued.
|
|
230
|
+
*/
|
|
231
|
+
async *stream(doc, options = {}) {
|
|
232
|
+
const state = stateOf(this, doc);
|
|
233
|
+
const { limit } = state;
|
|
234
|
+
const pages = options.order ?? range(0, doc.pageCount);
|
|
235
|
+
const window = Math.max(1, options.concurrency ?? Math.min(limit, pages.length || 1));
|
|
236
|
+
const inflight = new Map();
|
|
237
|
+
const handles = new Map();
|
|
238
|
+
let next = 0;
|
|
239
|
+
const schedule = (slot) => {
|
|
240
|
+
const page = pages[slot];
|
|
241
|
+
if (page === undefined)
|
|
242
|
+
return;
|
|
243
|
+
const handle = this.render(doc, page, options);
|
|
244
|
+
handles.set(slot, handle);
|
|
245
|
+
inflight.set(slot, handle.promise.then((bitmap) => ({ slot, page, bitmap })));
|
|
246
|
+
};
|
|
247
|
+
try {
|
|
248
|
+
while (next < pages.length && inflight.size < window)
|
|
249
|
+
schedule(next++);
|
|
250
|
+
while (inflight.size > 0) {
|
|
251
|
+
const { slot, page, bitmap } = await Promise.race(inflight.values());
|
|
252
|
+
inflight.delete(slot);
|
|
253
|
+
handles.delete(slot);
|
|
254
|
+
// Closing a document ends its streams: a viewer swapping files closes the old
|
|
255
|
+
// one while a thumbnail strip may still be iterating it.
|
|
256
|
+
if (next < pages.length && !state.closed)
|
|
257
|
+
schedule(next++);
|
|
258
|
+
yield { page, bitmap };
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
// Breaking out of the loop drops everything still queued, so "thumbnails for
|
|
263
|
+
// the rows I can see" does not keep rendering the rows I cannot.
|
|
264
|
+
for (const [slot, handle] of handles) {
|
|
265
|
+
handle.cancel('stream ended');
|
|
266
|
+
// The derived promise rejects once cancelled; nobody is listening any more.
|
|
267
|
+
inflight.get(slot)?.catch(() => { });
|
|
268
|
+
}
|
|
269
|
+
inflight.clear();
|
|
270
|
+
handles.clear();
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/** Rendered pages held for reuse, and how often that has paid off. */
|
|
274
|
+
cacheStats(doc) {
|
|
275
|
+
return stateOf(this, doc).cache.stats;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Opens PDFs. Adds text, search and the document's own structure — outline, links,
|
|
280
|
+
* labels, attachments, tags — to {@link PagedEngine}, each memoised or cached here
|
|
281
|
+
* so an implementation only has to read them.
|
|
282
|
+
*
|
|
283
|
+
* @typeParam B - The backend `load` produces.
|
|
284
|
+
*/
|
|
285
|
+
export class PdfEngine extends PagedEngine {
|
|
286
|
+
handle(backend) {
|
|
287
|
+
let metadata;
|
|
288
|
+
return {
|
|
289
|
+
engine: this.id,
|
|
290
|
+
pageCount: backend.pageCount,
|
|
291
|
+
pageSize: (index) => backend.pageSize(index),
|
|
292
|
+
capabilities: backend.capabilities,
|
|
293
|
+
fingerprint: backend.fingerprint,
|
|
294
|
+
get metadata() {
|
|
295
|
+
metadata ??= backend.metadata();
|
|
296
|
+
return metadata;
|
|
297
|
+
},
|
|
298
|
+
get pdfVersion() {
|
|
299
|
+
return backend.pdfVersion();
|
|
300
|
+
},
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Extract the text of one page.
|
|
305
|
+
*
|
|
306
|
+
* Scheduled like a render, but behind one by default: a search should not stall the
|
|
307
|
+
* page the user is looking at. Results are cached, so searching the same document
|
|
308
|
+
* repeatedly extracts each page once. A page reads as empty on an engine without
|
|
309
|
+
* {@link Capabilities.text}.
|
|
310
|
+
*/
|
|
311
|
+
async pageText(doc, index, options = {}) {
|
|
312
|
+
const { backend, text, scheduler } = stateOf(this, doc);
|
|
313
|
+
const key = textKey(index);
|
|
314
|
+
const hit = text.get(key);
|
|
315
|
+
if (hit)
|
|
316
|
+
return hit;
|
|
317
|
+
if (!backend.pageText) {
|
|
318
|
+
return { page: index, lines: [], undecodedGlyphs: 0 };
|
|
319
|
+
}
|
|
320
|
+
const extract = backend.pageText.bind(backend);
|
|
321
|
+
// One queue for renders and text both, so priority means something across them.
|
|
322
|
+
// Coalescing by key is what stops a search and a text selection extracting the
|
|
323
|
+
// same page twice.
|
|
324
|
+
const handle = scheduler.submit({
|
|
325
|
+
key,
|
|
326
|
+
priority: options.priority ?? DEFAULT_TEXT_PRIORITY,
|
|
327
|
+
run: async () => {
|
|
328
|
+
const page = await extract(index);
|
|
329
|
+
text.set(key, page);
|
|
330
|
+
return page;
|
|
331
|
+
},
|
|
332
|
+
});
|
|
333
|
+
attachSignal(handle, options.signal);
|
|
334
|
+
return handle.promise;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Find `query` in the document, yielding matches as each page is searched.
|
|
338
|
+
*
|
|
339
|
+
* Streaming rather than collected, because the first hit is usually the one the
|
|
340
|
+
* user wants. Breaking out of the loop stops the search. `order` is the lever a
|
|
341
|
+
* viewer wants: searching outward from the current page finds the nearest hit first.
|
|
342
|
+
*/
|
|
343
|
+
async *search(doc, query, options = {}) {
|
|
344
|
+
if (query.trim() === '')
|
|
345
|
+
return;
|
|
346
|
+
const pages = options.order ?? range(0, doc.pageCount);
|
|
347
|
+
const limit = options.limit ?? Number.POSITIVE_INFINITY;
|
|
348
|
+
let found = 0;
|
|
349
|
+
for (const page of pages) {
|
|
350
|
+
if (options.signal?.aborted)
|
|
351
|
+
return;
|
|
352
|
+
const text = await this.pageText(doc, page, {
|
|
353
|
+
priority: options.priority ?? DEFAULT_TEXT_PRIORITY,
|
|
354
|
+
signal: options.signal,
|
|
355
|
+
});
|
|
356
|
+
for (const match of searchPageText(text, query, options)) {
|
|
357
|
+
yield match;
|
|
358
|
+
if (++found >= limit)
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/** The outline as a tree, memoised. Empty when there is none. */
|
|
364
|
+
outline(doc) {
|
|
365
|
+
const state = stateOf(this, doc);
|
|
366
|
+
const read = state.backend.outline;
|
|
367
|
+
if (!read)
|
|
368
|
+
return Promise.resolve([]);
|
|
369
|
+
state.outline ??= read.call(state.backend).catch((e) => {
|
|
370
|
+
// A failed walk must not be cached as a permanent empty outline.
|
|
371
|
+
state.outline = undefined;
|
|
372
|
+
throw e;
|
|
373
|
+
});
|
|
374
|
+
return state.outline;
|
|
375
|
+
}
|
|
376
|
+
/** One label per page, memoised. Empty when the document defines none. */
|
|
377
|
+
pageLabels(doc) {
|
|
378
|
+
const state = stateOf(this, doc);
|
|
379
|
+
const read = state.backend.pageLabels;
|
|
380
|
+
if (!read)
|
|
381
|
+
return Promise.resolve([]);
|
|
382
|
+
state.labels ??= read.call(state.backend).catch((e) => {
|
|
383
|
+
// A failed walk must not be cached as a permanent absence of labels.
|
|
384
|
+
state.labels = undefined;
|
|
385
|
+
throw e;
|
|
386
|
+
});
|
|
387
|
+
return state.labels;
|
|
388
|
+
}
|
|
389
|
+
/** The structure tree, memoised. Empty for an untagged document. */
|
|
390
|
+
structTree(doc) {
|
|
391
|
+
const state = stateOf(this, doc);
|
|
392
|
+
const read = state.backend.structTree;
|
|
393
|
+
if (!read)
|
|
394
|
+
return Promise.resolve([]);
|
|
395
|
+
state.structure ??= read.call(state.backend).catch((e) => {
|
|
396
|
+
// A failed walk must not be cached as a permanent absence of structure.
|
|
397
|
+
state.structure = undefined;
|
|
398
|
+
throw e;
|
|
399
|
+
});
|
|
400
|
+
return state.structure;
|
|
401
|
+
}
|
|
402
|
+
/** The embedded files, metadata only, memoised. Empty when there are none. */
|
|
403
|
+
attachments(doc) {
|
|
404
|
+
const state = stateOf(this, doc);
|
|
405
|
+
const read = state.backend.attachments;
|
|
406
|
+
if (!read)
|
|
407
|
+
return Promise.resolve([]);
|
|
408
|
+
state.attachments ??= read.call(state.backend).catch((e) => {
|
|
409
|
+
// A failed walk must not be cached as a permanent absence of attachments.
|
|
410
|
+
state.attachments = undefined;
|
|
411
|
+
throw e;
|
|
412
|
+
});
|
|
413
|
+
return state.attachments;
|
|
414
|
+
}
|
|
415
|
+
/** One embedded file's bytes, by {@link Attachment.index}. Not cached. */
|
|
416
|
+
attachmentData(doc, index) {
|
|
417
|
+
const { backend } = stateOf(this, doc);
|
|
418
|
+
if (!backend.attachmentData) {
|
|
419
|
+
return Promise.reject(new RangeError(`papyra: ${this.id} reads no attachments`));
|
|
420
|
+
}
|
|
421
|
+
return backend.attachmentData(index);
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* The links on one page. Not queued — an object-graph read is roughly a
|
|
425
|
+
* thousandth of a render, and waiting behind renders would add latency for
|
|
426
|
+
* nothing. Cached, and two calls for one page share one read.
|
|
427
|
+
*/
|
|
428
|
+
links(doc, index) {
|
|
429
|
+
const { backend, links, linksPending } = stateOf(this, doc);
|
|
430
|
+
if (!backend.links)
|
|
431
|
+
return Promise.resolve([]);
|
|
432
|
+
const key = `links:${index}`;
|
|
433
|
+
const hit = links.get(key);
|
|
434
|
+
if (hit)
|
|
435
|
+
return Promise.resolve(hit);
|
|
436
|
+
const pending = linksPending.get(index);
|
|
437
|
+
if (pending)
|
|
438
|
+
return pending;
|
|
439
|
+
const read = backend
|
|
440
|
+
.links(index)
|
|
441
|
+
.then((found) => {
|
|
442
|
+
links.set(key, found);
|
|
443
|
+
return found;
|
|
444
|
+
})
|
|
445
|
+
.finally(() => {
|
|
446
|
+
linksPending.delete(index);
|
|
447
|
+
});
|
|
448
|
+
linksPending.set(index, read);
|
|
449
|
+
return read;
|
|
450
|
+
}
|
|
451
|
+
/** Extracted page text held for reuse, and how often that has paid off. */
|
|
452
|
+
textCacheStats(doc) {
|
|
453
|
+
return stateOf(this, doc).text.stats;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Wrap a scheduler handle as a {@link RenderHandle}.
|
|
458
|
+
*
|
|
459
|
+
* Delegates rather than spreading: `timing` is a getter that is null until the job
|
|
460
|
+
* settles, and a spread would freeze it at null forever.
|
|
461
|
+
*/
|
|
462
|
+
function liveHandle(handle) {
|
|
463
|
+
return {
|
|
464
|
+
key: handle.key,
|
|
465
|
+
cached: false,
|
|
466
|
+
promise: handle.promise,
|
|
467
|
+
get timing() {
|
|
468
|
+
return handle.timing;
|
|
469
|
+
},
|
|
470
|
+
setPriority: (priority) => handle.setPriority(priority),
|
|
471
|
+
cancel: (reason) => handle.cancel(reason),
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
/** A handle for work that never had to happen. */
|
|
475
|
+
function cachedHandle(key, page) {
|
|
476
|
+
return {
|
|
477
|
+
key,
|
|
478
|
+
cached: true,
|
|
479
|
+
promise: Promise.resolve(page),
|
|
480
|
+
timing: { waitMs: 0, runMs: 0 },
|
|
481
|
+
setPriority: () => { },
|
|
482
|
+
cancel: () => { },
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -51,7 +51,8 @@ export declare class EncryptedWorkbookError extends Error {
|
|
|
51
51
|
/**
|
|
52
52
|
* Rethrow a load failure as itself, or as the typed error it was tagged as.
|
|
53
53
|
*
|
|
54
|
-
*
|
|
54
|
+
* Exported for engines whose host answers in the native bindings' shapes, as
|
|
55
|
+
* `tauri-plugin-papyra` does, so they normalise exactly as papyra's own engine does.
|
|
55
56
|
*/
|
|
56
57
|
export declare function rethrowLoadError(error: unknown): never;
|
|
57
58
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAS;CACjC;AAED,mFAAmF;AACnF,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,wCAAwC;IACxC,SAAkB,IAAI,2BAA2B;IACjD,SAAkB,KAAK,SAAS;IAChC,YAAY,OAAO,SAAmC,EAErD;CACF;AAED,gEAAgE;AAChE,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,yCAAyC;IACzC,SAAkB,IAAI,4BAA4B;IAClD,SAAkB,KAAK,QAAQ;IAC/B,YAAY,OAAO,SAAuC,EAEzD;CACF;AAED;;;;;;GAMG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,yCAAyC;IACzC,SAAkB,IAAI,4BAA4B;IAClD,YAAY,OAAO,SAAwC,EAE1D;CACF;AAED
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAS;CACjC;AAED,mFAAmF;AACnF,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,wCAAwC;IACxC,SAAkB,IAAI,2BAA2B;IACjD,SAAkB,KAAK,SAAS;IAChC,YAAY,OAAO,SAAmC,EAErD;CACF;AAED,gEAAgE;AAChE,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,yCAAyC;IACzC,SAAkB,IAAI,4BAA4B;IAClD,SAAkB,KAAK,QAAQ;IAC/B,YAAY,OAAO,SAAuC,EAEzD;CACF;AAED;;;;;;GAMG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,yCAAyC;IACzC,SAAkB,IAAI,4BAA4B;IAClD,YAAY,OAAO,SAAwC,EAE1D;CACF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAQtD"}
|
package/dist/errors.js
CHANGED
|
@@ -71,7 +71,8 @@ export class EncryptedWorkbookError extends Error {
|
|
|
71
71
|
/**
|
|
72
72
|
* Rethrow a load failure as itself, or as the typed error it was tagged as.
|
|
73
73
|
*
|
|
74
|
-
*
|
|
74
|
+
* Exported for engines whose host answers in the native bindings' shapes, as
|
|
75
|
+
* `tauri-plugin-papyra` does, so they normalise exactly as papyra's own engine does.
|
|
75
76
|
*/
|
|
76
77
|
export function rethrowLoadError(error) {
|
|
77
78
|
const message = error instanceof Error ? error.message : String(error);
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,IAAI,GAAG;IACX,0BAA0B,EAAE,CAAC,OAAe,EAAE,EAAE,CAC9C,IAAI,qBAAqB,CAAC,OAAO,CAAC;IACpC,2BAA2B,EAAE,CAAC,OAAe,EAAE,EAAE,CAC/C,IAAI,sBAAsB,CAAC,OAAO,CAAC;IACrC,2BAA2B,EAAE,CAAC,OAAe,EAAE,EAAE,CAC/C,IAAI,sBAAsB,CAAC,OAAO,CAAC;CAC7B,CAAC;AAEX;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC;;;;OAIG;IACM,KAAK,GAAY,KAAK,CAAC;CACjC;AAED,mFAAmF;AACnF,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IACtD,wCAAwC;IACtB,IAAI,GAAG,uBAAuB,CAAC;IAC/B,KAAK,GAAG,KAAK,CAAC;IAChC,YAAY,OAAO,GAAG,gCAAgC;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,gEAAgE;AAChE,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IACvD,yCAAyC;IACvB,IAAI,GAAG,wBAAwB,CAAC;IAChC,KAAK,GAAG,IAAI,CAAC;IAC/B,YAAY,OAAO,GAAG,oCAAoC;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,yCAAyC;IACvB,IAAI,GAAG,wBAAwB,CAAC;IAClD,YAAY,OAAO,GAAG,qCAAqC;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,IAAI,GAAG;IACX,0BAA0B,EAAE,CAAC,OAAe,EAAE,EAAE,CAC9C,IAAI,qBAAqB,CAAC,OAAO,CAAC;IACpC,2BAA2B,EAAE,CAAC,OAAe,EAAE,EAAE,CAC/C,IAAI,sBAAsB,CAAC,OAAO,CAAC;IACrC,2BAA2B,EAAE,CAAC,OAAe,EAAE,EAAE,CAC/C,IAAI,sBAAsB,CAAC,OAAO,CAAC;CAC7B,CAAC;AAEX;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC;;;;OAIG;IACM,KAAK,GAAY,KAAK,CAAC;CACjC;AAED,mFAAmF;AACnF,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IACtD,wCAAwC;IACtB,IAAI,GAAG,uBAAuB,CAAC;IAC/B,KAAK,GAAG,KAAK,CAAC;IAChC,YAAY,OAAO,GAAG,gCAAgC;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,gEAAgE;AAChE,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IACvD,yCAAyC;IACvB,IAAI,GAAG,wBAAwB,CAAC;IAChC,KAAK,GAAG,IAAI,CAAC;IAC/B,YAAY,OAAO,GAAG,oCAAoC;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,yCAAyC;IACvB,IAAI,GAAG,wBAAwB,CAAC;IAClD,YAAY,OAAO,GAAG,qCAAqC;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,MAAM,KAAK,CAAC;AACd,CAAC"}
|
package/dist/fingerprint.d.ts
CHANGED
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* is for, hashing the bytes is the stronger answer anyway — it also distinguishes two
|
|
13
13
|
* documents that were copied from one another and kept the same `/ID`.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
15
|
+
* Exported for engines: one that fingerprints with this gives the same file the same
|
|
16
|
+
* key as papyra's own, so what a viewer remembers survives a change of engine.
|
|
16
17
|
*/
|
|
17
18
|
export declare function fingerprint(bytes: Uint8Array): string;
|
|
18
19
|
//# sourceMappingURL=fingerprint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAqBA
|
|
1
|
+
{"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAarD"}
|
package/dist/fingerprint.js
CHANGED
|
@@ -31,7 +31,8 @@ function fnv1a(bytes, seed) {
|
|
|
31
31
|
* is for, hashing the bytes is the stronger answer anyway — it also distinguishes two
|
|
32
32
|
* documents that were copied from one another and kept the same `/ID`.
|
|
33
33
|
*
|
|
34
|
-
*
|
|
34
|
+
* Exported for engines: one that fingerprints with this gives the same file the same
|
|
35
|
+
* key as papyra's own, so what a viewer remembers survives a change of engine.
|
|
35
36
|
*/
|
|
36
37
|
export function fingerprint(bytes) {
|
|
37
38
|
const head = bytes.subarray(0, SAMPLE);
|
package/dist/fingerprint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,GAAG,IAAI,CAAC;AAEpB,4EAA4E;AAC5E,SAAS,KAAK,CAAC,KAAiB,EAAE,IAAY;IAC5C,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,IAAI,CAAC;QACb,+EAA+E;QAC/E,gEAAgE;QAChE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,GAAG,IAAI,CAAC;AAEpB,4EAA4E;AAC5E,SAAS,KAAK,CAAC,KAAiB,EAAE,IAAY;IAC5C,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,IAAI,CAAC;QACb,+EAA+E;QAC/E,gEAAgE;QAChE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvC,kFAAkF;IAClF,yBAAyB;IACzB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAEhE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACjD,mFAAmF;IACnF,+EAA+E;IAC/E,6CAA6C;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;IAE1D,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,38 +14,13 @@
|
|
|
14
14
|
* onScroll(() => job.setPriority(0));
|
|
15
15
|
* ```
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
18
|
-
export {
|
|
19
|
-
export type { CacheStats } from './cache.js';
|
|
20
|
-
export type { PaintOptions } from './canvas.js';
|
|
21
|
-
export { paintToCanvas, toImageData } from './canvas.js';
|
|
22
|
-
export type { BoolCell, Cell, CellKind, DateCell, DurationCell, EmptyCell, ErrorCell, MergedRange, NumberCell, TextCell, } from './cells.js';
|
|
23
|
-
export { CellWindow, columnName } from './cells.js';
|
|
24
|
-
export type { ImageHandle, RenderHandle, SvgHandle } from './document.js';
|
|
17
|
+
export * from './core.js';
|
|
18
|
+
export type { ImageHandle, SvgHandle } from './document.js';
|
|
25
19
|
export { Document, open } from './document.js';
|
|
26
|
-
export
|
|
27
|
-
export {
|
|
28
|
-
export { EncryptedWorkbookError, IncorrectPasswordError, PasswordError, PasswordRequiredError, } from './errors.js';
|
|
29
|
-
export type { LinkTarget, PageLink } from './links.js';
|
|
30
|
-
export type { DestinationKind, OutlineDestination, OutlineNode, } from './outline.js';
|
|
31
|
-
export { buildOutlineTree, walkOutline } from './outline.js';
|
|
20
|
+
export { encode, PageImage } from './encode.js';
|
|
21
|
+
export { defaultPdfEngine, PapyraEngine } from './papyra-engine.js';
|
|
32
22
|
export type { Runtime } from './runtime.js';
|
|
33
23
|
export { backend, currentRuntime, hardwareConcurrency, init, } from './runtime.js';
|
|
34
|
-
export
|
|
35
|
-
export {
|
|
36
|
-
export type { MatchOptions, SearchMatch } from './search.js';
|
|
37
|
-
export { findRanges, searchPageText } from './search.js';
|
|
38
|
-
export type { MarkedContent, OrderedLine, StructNode, } from './structure.js';
|
|
39
|
-
export { buildStructTree, readingOrder, structuredPageString, walkStructTree, } from './structure.js';
|
|
40
|
-
export type { BorderEdge, BorderStyle, CellStyle, ColumnSpan, HorizontalAlign, RowSize, SheetLayout, VerticalAlign, } from './styles.js';
|
|
41
|
-
export { cssColor } from './styles.js';
|
|
42
|
-
export type { PageText, Quad, Rect, TextLine } from './text.js';
|
|
43
|
-
export { lineQuad, pageString, quadBounds, scaleQuad, scaleRect, } from './text.js';
|
|
44
|
-
export type { TiffCompression, TiffPage, TiffRenderOptions, } from './tiff.js';
|
|
45
|
-
export { openTiff, TIFF_MAX_PIXELS, TiffImage } from './tiff.js';
|
|
46
|
-
export type { DocumentMetadata, OpenOptions, PageSize, PdfSource, RenderedPage, RenderOptions, SearchOptions, StreamedPage, StreamOptions, SvgOptions, } from './types.js';
|
|
47
|
-
export type { Rotation, Viewport, ViewportOptions } from './viewport.js';
|
|
48
|
-
export { rotatePage, rotateSize, viewport, viewportQuad, viewportRect, } from './viewport.js';
|
|
49
|
-
export type { SheetInfo, SheetKind, SheetVisibility, WindowRange, WorkbookFormat, WorkbookOptions, } from './workbook.js';
|
|
50
|
-
export { openWorkbook, Sheet, Workbook } from './workbook.js';
|
|
24
|
+
export { openTiff } from './tiff.js';
|
|
25
|
+
export { openWorkbook } from './workbook.js';
|
|
51
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,cAAc,WAAW,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|