@laminapdf/viewer 0.2.0-alpha.6 → 0.3.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.
Files changed (55) hide show
  1. package/README.md +5 -4
  2. package/dist/client.d.ts +50 -4
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +115 -4
  5. package/dist/client.js.map +1 -1
  6. package/dist/edit/session.d.ts +24 -2
  7. package/dist/edit/session.d.ts.map +1 -1
  8. package/dist/edit/session.js +54 -1
  9. package/dist/edit/session.js.map +1 -1
  10. package/dist/edit-log.d.ts +5 -0
  11. package/dist/edit-log.d.ts.map +1 -1
  12. package/dist/edit-log.js +32 -8
  13. package/dist/edit-log.js.map +1 -1
  14. package/dist/index.d.ts +2 -2
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/protocol.d.ts +96 -1
  18. package/dist/protocol.d.ts.map +1 -1
  19. package/dist/protocol.js.map +1 -1
  20. package/dist/thumbnails/strip.d.ts +1 -1
  21. package/dist/thumbnails/strip.d.ts.map +1 -1
  22. package/dist/thumbnails/strip.js +31 -17
  23. package/dist/thumbnails/strip.js.map +1 -1
  24. package/dist/view/viewer.d.ts +2 -2
  25. package/dist/view/viewer.d.ts.map +1 -1
  26. package/dist/view/viewer.js +3 -0
  27. package/dist/view/viewer.js.map +1 -1
  28. package/dist/worker/document.d.ts +18 -5
  29. package/dist/worker/document.d.ts.map +1 -1
  30. package/dist/worker/document.js +2 -1
  31. package/dist/worker/document.js.map +1 -1
  32. package/dist/worker/edit.d.ts +30 -2
  33. package/dist/worker/edit.d.ts.map +1 -1
  34. package/dist/worker/edit.js +108 -19
  35. package/dist/worker/edit.js.map +1 -1
  36. package/dist/worker/export-tiff.d.ts +8 -0
  37. package/dist/worker/export-tiff.d.ts.map +1 -0
  38. package/dist/worker/export-tiff.js +82 -0
  39. package/dist/worker/export-tiff.js.map +1 -0
  40. package/dist/worker/export.d.ts +38 -0
  41. package/dist/worker/export.d.ts.map +1 -0
  42. package/dist/worker/export.js +175 -0
  43. package/dist/worker/export.js.map +1 -0
  44. package/dist/worker/methods.d.ts.map +1 -1
  45. package/dist/worker/methods.js +38 -2
  46. package/dist/worker/methods.js.map +1 -1
  47. package/dist/worker/navigation.d.ts +9 -1
  48. package/dist/worker/navigation.d.ts.map +1 -1
  49. package/dist/worker/navigation.js +22 -1
  50. package/dist/worker/navigation.js.map +1 -1
  51. package/dist/worker/session.d.ts +2 -0
  52. package/dist/worker/session.d.ts.map +1 -1
  53. package/dist/worker/session.js +7 -0
  54. package/dist/worker/session.js.map +1 -1
  55. package/package.json +14 -7
@@ -1,14 +1,19 @@
1
- // Edits on screen (E1 plan §6). PDFium draws the pages from the bytes it opened, so an edit to
2
- // Lamina PDF's model reaches the screen as bytes: after a transaction that touched pages, the
3
- // model saves incrementally into memory (only the appended revision; the model rebases onto the
4
- // file with it) and the backend opens the file with every revision appended so far. The new render
5
- // document replaces the old one only once it is open, so a failure leaves the pages drawn as they
6
- // were. The worker runs one call at a time, so no render runs while the documents are swapped: a
7
- // render answered before this call drew the old file, one answered after it draws the new one.
1
+ // Edits on screen (E1 plan §6) and saving them (§7). PDFium draws the pages from the bytes it
2
+ // opened, so an edit to Lamina PDF's model reaches the screen as bytes: after a transaction that
3
+ // touched pages, the model writes a copy of every edit since the last save, as one revision
4
+ // appended to the saved file (`saveCopy`: the model isn't rebased, so its plan still sees every
5
+ // change), and the backend opens the file with it. The new render document replaces the old one
6
+ // only once it is open, so a failure leaves the pages drawn as they were. The worker runs one call
7
+ // at a time, so no render runs while the documents are swapped: a render answered before this call
8
+ // drew the old file, one answered after it draws the new one.
9
+ //
10
+ // A save is a copy too (`copyEdits`), which the page writes where the file lives; only once that
11
+ // worked does the model adopt it as its saved file (`adoptEdits`), so a failed write leaves every
12
+ // edit unsaved.
8
13
  import { current, currentBackend, filling, followEdit } from "./document.js";
9
14
  import { forgetSearch } from "./find.js";
10
15
  import { forgetLinks } from "./navigation.js";
11
- import { clearRedo, historyOf, record, removeStep, restore, snapshot, stepBack, walkTo, } from "./session.js";
16
+ import { clearHistory, clearRedo, historyOf, markSaved, record, removeStep, restore, snapshot, stepBack, walkTo, } from "./session.js";
12
17
  import { forgetText } from "./text.js";
13
18
  /** Why an edit that failed left the model and the pages drawn apart: the document must be opened again. */
14
19
  const DIVERGED = "an edit failed and couldn't be undone: the document and the pages drawn may differ; open it again";
@@ -46,6 +51,7 @@ async function apply(ops, id, signal, label) {
46
51
  const edited = await model.ensure(() => model.apply(ops), { signal });
47
52
  if (!edited.changed)
48
53
  return { pages: [], history: historyOf(edit.session, false) };
54
+ edit.copy = undefined;
49
55
  // The transaction cleared the model's redo stack, whatever happens next.
50
56
  clearRedo(edit.session);
51
57
  if (edited.touchedPages.length > 0) {
@@ -64,7 +70,12 @@ async function apply(ops, id, signal, label) {
64
70
  followEdit(opened, ops);
65
71
  const pages = await touched(opened, edited.touchedPages);
66
72
  record(edit.session, label, pages.map((page) => page.index), Date.now());
67
- return { pages, history: historyOf(edit.session, false) };
73
+ return {
74
+ pages,
75
+ history: historyOf(edit.session, false),
76
+ createdOutlineItems: edited.createdOutlineItems,
77
+ outlineRepaired: edited.outlineRepaired,
78
+ };
68
79
  }
69
80
  /**
70
81
  * Undoes or redoes steps of document `id`'s edit session until `position` of them are done, then
@@ -98,6 +109,7 @@ async function moveTo(position, id, signal) {
98
109
  const { model, edit } = opened;
99
110
  const { session } = edit;
100
111
  const kept = snapshot(session);
112
+ edit.copy = undefined;
101
113
  const done = [];
102
114
  const ids = new Set();
103
115
  try {
@@ -159,6 +171,7 @@ async function replay(steps, undone, id, signal) {
159
171
  editable(opened);
160
172
  const { model, edit } = opened;
161
173
  const ids = new Set();
174
+ edit.copy = undefined;
162
175
  try {
163
176
  const count = await model.ensure(() => model.pageCount, { signal });
164
177
  for (const step of steps) {
@@ -238,25 +251,101 @@ async function touched(opened, ids) {
238
251
  return pages;
239
252
  }
240
253
  /**
241
- * Saves the model's changes into memory and swaps in a render document opened from the result.
242
- * The old one keeps drawing until the new one is open, and is closed after.
254
+ * Writes a copy of the model's changes since the last save and swaps in a render document opened
255
+ * from the saved file with it. The old one keeps drawing until the new one is open, and is closed
256
+ * after. The copy overrides signatures a change breaks (`invalidateSignatures`): the pages must
257
+ * show the edit, and only a save asks before it breaks one.
243
258
  */
244
259
  async function redraw(opened) {
245
260
  const { model, edit } = opened;
246
- // Only the appended revision: the model rebases onto the old file with it, copying nothing.
247
- const { bytes } = await model.ensure(() => model.saveWithReport({ mode: "incremental", output: "appendedOnly" }));
248
- // Kept even if the reopen below fails: the model's file now ends with this revision, and the
249
- // next save appends to it. Each edit adds one revision, and one more section to the chain of
250
- // cross-reference sections PDFium reads on open; compacting them is the edit session's to decide.
251
- edit.appended.push(bytes);
252
- const source = joined([edit.source, ...edit.appended.map(bytesSource)]);
261
+ // Only the appended revision, unless the saved file must be rewritten (a repaired one).
262
+ const { bytes, report } = await model.ensure(() => model.saveCopy({ mode: "auto", output: "appendedOnly", invalidateSignatures: true }));
263
+ edit.drawn = { bytes, whole: report.mode === "fullRewrite" };
264
+ await reopen(opened);
265
+ }
266
+ /** Swaps in a render document opened from the saved file and the copy drawn after it. */
267
+ async function reopen(opened) {
268
+ const { edit } = opened;
269
+ const { drawn } = edit;
270
+ const source = drawn === undefined
271
+ ? edit.source
272
+ : drawn.whole
273
+ ? bytesSource(drawn.bytes)
274
+ : joined([edit.source, bytesSource(drawn.bytes)]);
253
275
  const options = edit.renderLimits === undefined ? {} : { limits: edit.renderLimits };
254
- // Not the caller's signal: the model is already saved, so the reopen finishes either way.
276
+ // Not the caller's signal: the model has moved on, so the reopen finishes either way.
255
277
  const next = await filling(opened.remote, () => currentBackend().open(source, options), new AbortController().signal);
256
278
  const old = opened.render;
257
279
  opened.render = next;
258
280
  old.close();
259
281
  }
282
+ /** How saving document `id` with `options` would go: its constraint, signatures, mode and warnings. */
283
+ export function planSave(options, id, signal) {
284
+ const opened = current(id);
285
+ return serial(opened, () => opened.model.ensure(() => opened.model.plan(options), { signal }));
286
+ }
287
+ /**
288
+ * Document `id`'s metadata as its edits leave it (Info and XMP read together), for the properties
289
+ * dialog's form. Read from the edited document, never the text copy, which takes the edits only once it has
290
+ * replayed them.
291
+ */
292
+ export function readMetadata(id, signal) {
293
+ const opened = current(id);
294
+ return serial(opened, () => opened.model.ensure(() => opened.model.metadata(), { signal }));
295
+ }
296
+ /** Document `id`'s XMP metadata as text, as its edits leave it, for the properties dialog's XMP tab. */
297
+ export function readXmpPacket(id, signal) {
298
+ const opened = current(id);
299
+ return serial(opened, () => opened.model.ensure(() => opened.model.xmpPacket(), { signal }));
300
+ }
301
+ /** The token of the next copy a save writes. */
302
+ let nextCopy = 1;
303
+ /**
304
+ * Writes document `id` as a save with `options` would, for the page to write where the file
305
+ * lives; the document stays unsaved until `adoptEdits` takes the copy. `whole` copies are the
306
+ * file a save writes; Save a copy writes one too and never adopts it.
307
+ *
308
+ * @throws the save's refusals (`would-invalidate-signatures`, `requires-rewrite`, …); a diverged
309
+ * or encrypted document's.
310
+ */
311
+ export function copyEdits(options, id, signal) {
312
+ const opened = current(id);
313
+ return serial(opened, async () => {
314
+ editable(opened);
315
+ const { model, edit } = opened;
316
+ const { bytes, report } = await model.ensure(() => model.saveCopy({ ...options, output: "whole" }), { signal });
317
+ const token = nextCopy++;
318
+ edit.copy = { token, bytes, historyCleared: report.historyCleared };
319
+ return { token, bytes, report };
320
+ });
321
+ }
322
+ /**
323
+ * Makes the copy `token` names document `id`'s saved file, once the page has written it where
324
+ * the file lives: the model rebases onto it, the pages are drawn from it, and the history marks
325
+ * this point saved (or empties, when the save couldn't keep it).
326
+ *
327
+ * @throws when an edit, undo or redo since the copy made it stale: the copy written isn't the
328
+ * document any more, which stays unsaved.
329
+ */
330
+ export function adoptEdits(token, id) {
331
+ const opened = current(id);
332
+ return serial(opened, async () => {
333
+ const { model, edit } = opened;
334
+ const { copy } = edit;
335
+ if (copy?.token !== token)
336
+ throw new Error("the document changed after this copy was written: it stays unsaved");
337
+ edit.copy = undefined;
338
+ await model.ensure(() => model.adoptCopy(copy.bytes, copy.historyCleared));
339
+ edit.source = bytesSource(copy.bytes);
340
+ edit.drawn = undefined;
341
+ if (copy.historyCleared)
342
+ clearHistory(edit.session);
343
+ else
344
+ markSaved(edit.session);
345
+ await reopen(opened);
346
+ return historyOf(edit.session, false);
347
+ });
348
+ }
260
349
  function bytesSource(bytes) {
261
350
  return { size: bytes.length, readSync: (offset, length) => bytes.subarray(offset, offset + length) };
262
351
  }
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/worker/edit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/worker/edit.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,iGAAiG;AACjG,4FAA4F;AAC5F,gGAAgG;AAChG,gGAAgG;AAChG,mGAAmG;AACnG,mGAAmG;AACnG,8DAA8D;AAC9D,EAAE;AACF,iGAAiG;AACjG,kGAAkG;AAClG,gBAAgB;AAchB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAkB,OAAO,EAAE,UAAU,EAAa,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,EACN,UAAU,EACV,OAAO,EAEP,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,2GAA2G;AAC3G,MAAM,QAAQ,GAAG,mGAAmG,CAAC;AAErH,mGAAmG;AACnG,MAAM,SAAS,GAAG,sFAAsF,CAAC;AAEzG,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,OAAO,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,sFAAsF;AACtF,SAAS,QAAQ,CAAC,MAAY;IAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACvB,GAAkB,EAClB,EAAU,EACV,MAAmB,EACnB,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;IAErB,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,GAAkB,EAAE,EAAU,EAAE,MAAmB,EAAE,KAAa;IACrF,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IACnF,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACtB,yEAAyE;IACzE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC9B,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,yFAAyF;YACzF,2FAA2F;YAC3F,yEAAyE;YACzE,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IACD,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,CACJ,IAAI,CAAC,OAAO,EACZ,KAAK,EACL,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAC/B,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;IACF,OAAO;QACL,KAAK;QACL,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QACvC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,EAAU,EAAE,MAAmB;IACxE,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,EAAU,EAAE,MAAmB;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAI,MAAY,EAAE,IAAsB;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,QAAsB,EAAE,EAAU,EAAE,MAAmB;IAC3E,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACtB,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,CACV,OAAO,EACP,QAAQ,EAAE,EACV,KAAK,EAAE,GAAG,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACtG,6FAA6F;YAC7F,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;YAClF,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,YAAY;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxD,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,CAAC,EACD,IAAI,CACL,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,CAAC;IACV,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,QAAQ,CAAC,MAAY,EAAE,IAAa,EAAE,IAA6B,EAAE,OAAgB;IAClG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,SAAS;QACzC,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1E,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,SAAS;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,IAAI,CAAC;YAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,KAA8B,EAC9B,MAAc,EACd,EAAU,EACV,MAAmB;IAEnB,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,MAAM,CACnB,KAA8B,EAC9B,MAAc,EACd,EAAU,EACV,MAAmB;IAEnB,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,SAAS;YAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,YAAY;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtD,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACpE,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM;YAClC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,qEAAqE;IACrE,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;IACvB,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,kEAAkE;AAClE,SAAS,QAAQ,CAAC,GAAkB;IAClC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,SAAS,CAAC,KAAe,EAAE,MAAc;IACtD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,MAAM;QAClB,MAAM,IAAI,KAAK,CAAC,wCAAwC,MAAM,MAAM,KAAK,sBAAsB,CAAC,CAAC;AACrG,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,MAAM,CAAC,KAAe,EAAE,IAAe,EAAE,GAAoB,EAAE,OAAgB;IAC5F,IAAI,QAA8B,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,yFAAyF;IACzF,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC7D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,4GAA4G;AAC5G,KAAK,UAAU,OAAO,CAAC,MAAY,EAAE,GAAsB;IACzD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,UAAU,CAAC,OAAO,CAAC,CAAC;IACpB,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,MAAM,CAAC,MAAY;IAChC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC/B,wFAAwF;IACxF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAChD,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CACrF,CAAC;IACF,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;IAC7D,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AAED,yFAAyF;AACzF,KAAK,UAAU,MAAM,CAAC,MAAY;IAChC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,MAAM,MAAM,GACV,KAAK,KAAK,SAAS;QACjB,CAAC,CAAC,IAAI,CAAC,MAAM;QACb,CAAC,CAAC,KAAK,CAAC,KAAK;YACX,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;IACrF,sFAAsF;IACtF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC;IACtH,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,KAAK,EAAE,CAAC;AACd,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,QAAQ,CAAC,OAAoB,EAAE,EAAU,EAAE,MAAmB;IAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACjG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU,EAAE,MAAmB;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,aAAa,CAAC,EAAU,EAAE,MAAmB;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,gDAAgD;AAChD,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,OAAoB,EAAE,EAAU,EAAE,MAAmB;IAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QAC/B,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAC/B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAChH,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC;QACpE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,EAAU;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,EAAE,KAAK,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACjH,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,IAAI,CAAC,cAAc;YAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;YAC/C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AACvG,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAC,KAA8B;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;IACpB,CAAC;IACD,OAAO;QACL,IAAI;QACJ,QAAQ,CAAC,MAAM,EAAE,MAAM;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAW,CAAC;gBAClC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAiB,CAAC;gBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACrC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,IAAI,IAAI,EAAE;oBAAE,SAAS;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;gBACrD,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,SAAS,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,MAA6B;IAC3C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnB,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ExportedTiff, ExportTiffOptions } from "../protocol.js";
2
+ /**
3
+ * Pages `indexes` (0-based, in order) drawn at `options.dpi` on white, as TIFF: one file when
4
+ * `options.multiPage` asks for it and the pages' pixels fit MAX_MULTI_PAGE_BYTES, else a file
5
+ * per page.
6
+ */
7
+ export declare function exportTiff(indexes: readonly number[], options: ExportTiffOptions, signal: AbortSignal): Promise<ExportedTiff>;
8
+ //# sourceMappingURL=export-tiff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-tiff.d.ts","sourceRoot":"","sources":["../../src/worker/export-tiff.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA2BtE;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CA0BvB"}
@@ -0,0 +1,82 @@
1
+ // TIFF export in the document worker: pages drawn one at a time, as for PNG and JPEG, and handed
2
+ // to the TIFF module (`@laminapdf/wasm/tiff`, laminapdf-render's TiffWriter), which this file
3
+ // loads the first time a TIFF export starts, so the reader's startup never fetches it. Several
4
+ // pages go into one multi-page file while their pixels fit the export's memory budget, else into
5
+ // one file each.
6
+ import { current } from "./document.js";
7
+ import { drawForExport, exportDpi, scaleFor } from "./export.js";
8
+ /** The most pixel bytes one multi-page TIFF holds (256 MiB, about four pages at the render limit): past it, a file per page. */
9
+ const MAX_MULTI_PAGE_BYTES = 256 * 1024 * 1024;
10
+ /** The TIFF module's load: the one under way, or a new one after a failed one. */
11
+ let loading;
12
+ function tiffModule() {
13
+ if (loading === undefined) {
14
+ const load = import("@laminapdf/wasm/tiff").then(async (glue) => {
15
+ await glue.default();
16
+ return glue;
17
+ });
18
+ loading = load;
19
+ // A failed load is forgotten (the next export tries again), while its callers still see it fail.
20
+ load.catch(() => {
21
+ if (loading === load)
22
+ loading = undefined;
23
+ });
24
+ }
25
+ return loading;
26
+ }
27
+ /**
28
+ * Pages `indexes` (0-based, in order) drawn at `options.dpi` on white, as TIFF: one file when
29
+ * `options.multiPage` asks for it and the pages' pixels fit MAX_MULTI_PAGE_BYTES, else a file
30
+ * per page.
31
+ */
32
+ export async function exportTiff(indexes, options, signal) {
33
+ if (indexes.length === 0)
34
+ throw new RangeError("a TIFF export needs at least one page");
35
+ const glue = await tiffModule();
36
+ signal.throwIfAborted();
37
+ const together = options.multiPage && pixelBytes(indexes, options.dpi) <= MAX_MULTI_PAGE_BYTES;
38
+ const files = [];
39
+ const dpis = [];
40
+ let file;
41
+ try {
42
+ for (const index of indexes) {
43
+ const { tile, dpi } = await drawForExport(index, options.dpi, signal);
44
+ file ??= new glue.TiffFile();
45
+ const pixels = new Uint8Array(tile.pixels.buffer, tile.pixels.byteOffset, tile.pixels.byteLength);
46
+ file.addPage(tile.width, tile.height, pixels, dpi);
47
+ dpis.push(dpi);
48
+ if (!together) {
49
+ files.push(finished(file));
50
+ file = undefined;
51
+ }
52
+ }
53
+ if (file !== undefined)
54
+ files.push(finished(file));
55
+ file = undefined;
56
+ }
57
+ finally {
58
+ file?.free();
59
+ }
60
+ return { files, dpis };
61
+ }
62
+ /** `file`'s bytes, in a buffer of their own, and `file` freed. */
63
+ function finished(file) {
64
+ try {
65
+ return new Uint8Array(file.finish());
66
+ }
67
+ finally {
68
+ file.free();
69
+ }
70
+ }
71
+ /** The RGBA bytes `indexes` hold drawn at `dpi` (each page lowered as {@link exportDpi} lowers it). */
72
+ function pixelBytes(indexes, dpi) {
73
+ const { render } = current();
74
+ let total = 0;
75
+ for (const index of indexes) {
76
+ const page = render.page(index);
77
+ const scale = scaleFor(exportDpi(index, dpi));
78
+ total += Math.floor(page.width * scale) * Math.floor(page.height * scale) * 4;
79
+ }
80
+ return total;
81
+ }
82
+ //# sourceMappingURL=export-tiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-tiff.js","sourceRoot":"","sources":["../../src/worker/export-tiff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { type RenderedTile } from "@laminapdf/render";
2
+ import type { ExportedPage, ExportPageOptions } from "../protocol.js";
3
+ /**
4
+ * Page `index` drawn at `options.dpi` (lowered when the page would pass the renderers' limits;
5
+ * `dpi` says what it was drawn at), on white, and encoded as `options.format`.
6
+ */
7
+ export declare function exportPage(index: number, options: ExportPageOptions, signal: AbortSignal): Promise<ExportedPage>;
8
+ /**
9
+ * The resolution page `index` is exported at when `wanted` is asked for: see {@link fittedDpi}.
10
+ */
11
+ export declare function exportDpi(index: number, wanted: number): number;
12
+ /**
13
+ * `wanted`, lowered when a `width` × `height` point page drawn at it would pass the renderers'
14
+ * pixel or side limit. The renderers size a page as each side times {@link scaleFor}'s scale,
15
+ * rounded down, and that scale can round up: the result is checked as they will draw it, and
16
+ * lowered a hair at a time until it fits.
17
+ */
18
+ export declare function fittedDpi(width: number, height: number, wanted: number): number;
19
+ /** Page `index` drawn on white at {@link exportDpi}`(index, wanted)`, and that resolution. */
20
+ export declare function drawForExport(index: number, wanted: number, signal: AbortSignal): Promise<{
21
+ tile: RenderedTile;
22
+ dpi: number;
23
+ }>;
24
+ /**
25
+ * Pixels per point for `dpi`, as the renderers take it: the nearest 32-bit float, nudged up when
26
+ * it lands below `dpi / 72`. A render's size is the page's size times the scale, rounded down,
27
+ * so a scale a hair low would cost a page that is a whole number of pixels its last column
28
+ * (Letter at 150 dpi: 1,274, not 1,275).
29
+ */
30
+ export declare function scaleFor(dpi: number): number;
31
+ /**
32
+ * `png` with its resolution `dpi` (as pixels per metre) in a `pHYs` chunk: the encoder's own one
33
+ * rewritten, or a new one after the `IHDR`.
34
+ */
35
+ export declare function withPngDensity(png: Uint8Array, dpi: number): Uint8Array<ArrayBuffer>;
36
+ /** `jpeg` with its JFIF density set to `dpi`: the canvas's own APP0 segment, or a new one. */
37
+ export declare function withJpegDensity(jpeg: Uint8Array, dpi: number): Uint8Array<ArrayBuffer>;
38
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/worker/export.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,KAAK,YAAY,EAAsB,MAAM,mBAAmB,CAAC;AAC1F,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AActE;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAevB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM/E;AAUD,8FAA8F;AAC9F,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAO9C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO5C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CA2BpF;AAED,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAsBtF"}
@@ -0,0 +1,175 @@
1
+ // Page export in the document worker: a page drawn at the resolution asked for and encoded as
2
+ // PNG or JPEG by the canvas, with the resolution written into the file (PNG `pHYs`, JFIF
3
+ // density) as the Rust export writes it, so the image prints at the page's size. One page per
4
+ // call: the pixels of the page before are released before the next is drawn.
5
+ import { DEFAULT_LIMITS } from "@laminapdf/render";
6
+ import { current, filling } from "./document.js";
7
+ /**
8
+ * The most pixels one exported page holds, and the longest side: the renderers' own limits
9
+ * (about 16.8 million pixels, Letter at about 424 dpi; 16,384 pixels a side), since a page is
10
+ * drawn as one tile.
11
+ */
12
+ const MAX_EXPORT_PIXELS = DEFAULT_LIMITS.maxRenderPixels;
13
+ const MAX_EXPORT_SIDE = DEFAULT_LIMITS.maxRenderSide;
14
+ /** JPEG quality when none is given, on the 1–100 scale. */
15
+ const DEFAULT_QUALITY = 90;
16
+ /**
17
+ * Page `index` drawn at `options.dpi` (lowered when the page would pass the renderers' limits;
18
+ * `dpi` says what it was drawn at), on white, and encoded as `options.format`.
19
+ */
20
+ export async function exportPage(index, options, signal) {
21
+ const { tile, dpi } = await drawForExport(index, options.dpi, signal);
22
+ const canvas = new OffscreenCanvas(tile.width, tile.height);
23
+ const context = canvas.getContext("2d");
24
+ if (context === null)
25
+ throw new Error("no 2D context for exporting");
26
+ context.putImageData(new ImageData(tile.pixels, tile.width, tile.height), 0, 0);
27
+ const jpeg = options.format === "jpeg";
28
+ const quality = Math.min(100, Math.max(1, Math.round(options.quality ?? DEFAULT_QUALITY)));
29
+ const blob = await canvas.convertToBlob(jpeg ? { type: "image/jpeg", quality: quality / 100 } : { type: "image/png" });
30
+ signal.throwIfAborted();
31
+ const bytes = new Uint8Array(await blob.arrayBuffer());
32
+ const image = jpeg ? withJpegDensity(bytes, dpi) : withPngDensity(bytes, dpi);
33
+ return { image, width: tile.width, height: tile.height, dpi };
34
+ }
35
+ /**
36
+ * The resolution page `index` is exported at when `wanted` is asked for: see {@link fittedDpi}.
37
+ */
38
+ export function exportDpi(index, wanted) {
39
+ if (!(wanted > 0 && Number.isFinite(wanted)))
40
+ throw new RangeError("dpi must be a positive number");
41
+ const page = current().render.page(index);
42
+ return fittedDpi(page.width, page.height, wanted);
43
+ }
44
+ /**
45
+ * `wanted`, lowered when a `width` × `height` point page drawn at it would pass the renderers'
46
+ * pixel or side limit. The renderers size a page as each side times {@link scaleFor}'s scale,
47
+ * rounded down, and that scale can round up: the result is checked as they will draw it, and
48
+ * lowered a hair at a time until it fits.
49
+ */
50
+ export function fittedDpi(width, height, wanted) {
51
+ const area = Math.max(1, width * height);
52
+ const side = Math.max(1, width, height);
53
+ let dpi = Math.min(wanted, 72 * Math.sqrt(MAX_EXPORT_PIXELS / area), (72 * MAX_EXPORT_SIDE) / side);
54
+ for (let tries = 0; tries < 64 && !fits(width, height, dpi); tries++)
55
+ dpi *= 1 - 1e-6;
56
+ return dpi;
57
+ }
58
+ /** Whether a `width` × `height` point page drawn at `dpi` stays within the renderers' limits. */
59
+ function fits(width, height, dpi) {
60
+ const scale = scaleFor(dpi);
61
+ const w = Math.floor(width * scale);
62
+ const h = Math.floor(height * scale);
63
+ return w * h <= MAX_EXPORT_PIXELS && w <= MAX_EXPORT_SIDE && h <= MAX_EXPORT_SIDE;
64
+ }
65
+ /** Page `index` drawn on white at {@link exportDpi}`(index, wanted)`, and that resolution. */
66
+ export async function drawForExport(index, wanted, signal) {
67
+ const dpi = exportDpi(index, wanted);
68
+ const doc = current();
69
+ const request = { page: index, scale: scaleFor(dpi) };
70
+ const tile = await filling(doc.remote, () => doc.render.render(request, { signal }), signal);
71
+ signal.throwIfAborted();
72
+ return { tile, dpi };
73
+ }
74
+ /**
75
+ * Pixels per point for `dpi`, as the renderers take it: the nearest 32-bit float, nudged up when
76
+ * it lands below `dpi / 72`. A render's size is the page's size times the scale, rounded down,
77
+ * so a scale a hair low would cost a page that is a whole number of pixels its last column
78
+ * (Letter at 150 dpi: 1,274, not 1,275).
79
+ */
80
+ export function scaleFor(dpi) {
81
+ const exact = dpi / 72;
82
+ const rounded = Math.fround(exact);
83
+ if (rounded >= exact)
84
+ return rounded;
85
+ const bits = new Uint32Array(new Float32Array([rounded]).buffer);
86
+ bits[0] = (bits[0] ?? 0) + 1;
87
+ return new Float32Array(bits.buffer)[0] ?? exact;
88
+ }
89
+ /**
90
+ * `png` with its resolution `dpi` (as pixels per metre) in a `pHYs` chunk: the encoder's own one
91
+ * rewritten, or a new one after the `IHDR`.
92
+ */
93
+ export function withPngDensity(png, dpi) {
94
+ const perMetre = Math.round(dpi / 0.0254);
95
+ const own = chunkAt(png, "pHYs");
96
+ if (own !== undefined) {
97
+ const out = png.slice();
98
+ const view = new DataView(out.buffer);
99
+ view.setUint32(own + 8, perMetre);
100
+ view.setUint32(own + 12, perMetre);
101
+ out[own + 16] = 1;
102
+ view.setUint32(own + 17, crc32(out.subarray(own + 4, own + 17)));
103
+ return out;
104
+ }
105
+ // Signature (8) and IHDR (length 4, type 4, data 13, CRC 4).
106
+ const at = 8 + 25;
107
+ const chunk = new Uint8Array(21);
108
+ const view = new DataView(chunk.buffer);
109
+ view.setUint32(0, 9);
110
+ chunk.set([0x70, 0x48, 0x59, 0x73], 4); // "pHYs"
111
+ view.setUint32(8, perMetre);
112
+ view.setUint32(12, perMetre);
113
+ chunk[16] = 1; // unit: the metre
114
+ view.setUint32(17, crc32(chunk.subarray(4, 17)));
115
+ const out = new Uint8Array(png.length + chunk.length);
116
+ out.set(png.subarray(0, at));
117
+ out.set(chunk, at);
118
+ out.set(png.subarray(at), at + chunk.length);
119
+ return out;
120
+ }
121
+ /** `jpeg` with its JFIF density set to `dpi`: the canvas's own APP0 segment, or a new one. */
122
+ export function withJpegDensity(jpeg, dpi) {
123
+ const density = Math.min(0xffff, Math.max(1, Math.round(dpi)));
124
+ const isJfif = jpeg[2] === 0xff && jpeg[3] === 0xe0 && String.fromCharCode(...jpeg.subarray(6, 11)) === "JFIF\0";
125
+ if (isJfif) {
126
+ const out = jpeg.slice();
127
+ const view = new DataView(out.buffer);
128
+ out[13] = 1; // units: dots per inch
129
+ view.setUint16(14, density);
130
+ view.setUint16(16, density);
131
+ return out;
132
+ }
133
+ // SOI, then an APP0 (18 bytes with its marker; its length field counts 16): "JFIF\0", version 1.1, dots per inch, the density, no thumbnail.
134
+ const app0 = new Uint8Array([0xff, 0xe0, 0, 16, 0x4a, 0x46, 0x49, 0x46, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0]);
135
+ const view = new DataView(app0.buffer);
136
+ // In the segment: marker 0–1, length 2–3, "JFIF\0" 4–8, version 9–10, units 11, density 12–15.
137
+ view.setUint16(12, density);
138
+ view.setUint16(14, density);
139
+ const out = new Uint8Array(jpeg.length + app0.length);
140
+ out.set(jpeg.subarray(0, 2));
141
+ out.set(app0, 2);
142
+ out.set(jpeg.subarray(2), 2 + app0.length);
143
+ return out;
144
+ }
145
+ /** Where the first chunk of `type` starts in `png` (its length field), before the image data. */
146
+ function chunkAt(png, type) {
147
+ const view = new DataView(png.buffer, png.byteOffset, png.byteLength);
148
+ for (let at = 8; at + 8 <= png.length;) {
149
+ const name = String.fromCharCode(...png.subarray(at + 4, at + 8));
150
+ if (name === type)
151
+ return at;
152
+ if (name === "IDAT" || name === "IEND")
153
+ return undefined;
154
+ at += 12 + view.getUint32(at);
155
+ }
156
+ return undefined;
157
+ }
158
+ const CRC_TABLE = (() => {
159
+ const table = new Uint32Array(256);
160
+ for (let n = 0; n < 256; n++) {
161
+ let c = n;
162
+ for (let k = 0; k < 8; k++)
163
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
164
+ table[n] = c >>> 0;
165
+ }
166
+ return table;
167
+ })();
168
+ /** The CRC-32 a PNG chunk carries, over its type and data. */
169
+ function crc32(bytes) {
170
+ let c = 0xffffffff;
171
+ for (const byte of bytes)
172
+ c = (CRC_TABLE[(c ^ byte) & 0xff] ?? 0) ^ (c >>> 8);
173
+ return (c ^ 0xffffffff) >>> 0;
174
+ }
175
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/worker/export.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../src/worker/methods.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAoBpE,2EAA2E;AAC3E,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CA0EnE,CAAC"}
1
+ {"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../src/worker/methods.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAqDpE,2EAA2E;AAC3E,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CA6GnE,CAAC"}