@laminapdf/viewer 0.2.0-alpha.4 → 0.2.0-alpha.5

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 (90) hide show
  1. package/README.md +36 -8
  2. package/dist/client.d.ts +28 -1
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +105 -5
  5. package/dist/client.js.map +1 -1
  6. package/dist/first-draw.d.ts +10 -0
  7. package/dist/first-draw.d.ts.map +1 -0
  8. package/dist/first-draw.js +33 -0
  9. package/dist/first-draw.js.map +1 -0
  10. package/dist/history/history.d.ts +65 -0
  11. package/dist/history/history.d.ts.map +1 -0
  12. package/dist/history/history.js +135 -0
  13. package/dist/history/history.js.map +1 -0
  14. package/dist/index.d.ts +7 -2
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/layers/copy.d.ts +26 -0
  19. package/dist/layers/copy.d.ts.map +1 -0
  20. package/dist/layers/copy.js +150 -0
  21. package/dist/layers/copy.js.map +1 -0
  22. package/dist/layers/link-layer.d.ts +68 -0
  23. package/dist/layers/link-layer.d.ts.map +1 -0
  24. package/dist/layers/link-layer.js +279 -0
  25. package/dist/layers/link-layer.js.map +1 -0
  26. package/dist/layers/link-url.d.ts +19 -0
  27. package/dist/layers/link-url.d.ts.map +1 -0
  28. package/dist/layers/link-url.js +47 -0
  29. package/dist/layers/link-url.js.map +1 -0
  30. package/dist/layers/spans.d.ts +0 -6
  31. package/dist/layers/spans.d.ts.map +1 -1
  32. package/dist/layers/spans.js +2 -20
  33. package/dist/layers/spans.js.map +1 -1
  34. package/dist/layers/structure-layer.d.ts.map +1 -1
  35. package/dist/layers/structure-layer.js +3 -0
  36. package/dist/layers/structure-layer.js.map +1 -1
  37. package/dist/layers/text-layer.d.ts +20 -3
  38. package/dist/layers/text-layer.d.ts.map +1 -1
  39. package/dist/layers/text-layer.js +307 -23
  40. package/dist/layers/text-layer.js.map +1 -1
  41. package/dist/protocol.d.ts +79 -5
  42. package/dist/protocol.d.ts.map +1 -1
  43. package/dist/protocol.js +16 -4
  44. package/dist/protocol.js.map +1 -1
  45. package/dist/source/opfs.d.ts +35 -0
  46. package/dist/source/opfs.d.ts.map +1 -0
  47. package/dist/source/opfs.js +178 -0
  48. package/dist/source/opfs.js.map +1 -0
  49. package/dist/thumbnails/strip.d.ts +1 -1
  50. package/dist/thumbnails/strip.d.ts.map +1 -1
  51. package/dist/thumbnails/strip.js +14 -3
  52. package/dist/thumbnails/strip.js.map +1 -1
  53. package/dist/view/user-select.d.ts +3 -0
  54. package/dist/view/user-select.d.ts.map +1 -0
  55. package/dist/view/user-select.js +10 -0
  56. package/dist/view/user-select.js.map +1 -0
  57. package/dist/view/viewer.d.ts +61 -1
  58. package/dist/view/viewer.d.ts.map +1 -1
  59. package/dist/view/viewer.js +248 -40
  60. package/dist/view/viewer.js.map +1 -1
  61. package/dist/worker/document.d.ts +23 -1
  62. package/dist/worker/document.d.ts.map +1 -1
  63. package/dist/worker/document.js +68 -22
  64. package/dist/worker/document.js.map +1 -1
  65. package/dist/worker/find.d.ts.map +1 -1
  66. package/dist/worker/find.js +5 -18
  67. package/dist/worker/find.js.map +1 -1
  68. package/dist/worker/methods.d.ts.map +1 -1
  69. package/dist/worker/methods.js +23 -4
  70. package/dist/worker/methods.js.map +1 -1
  71. package/dist/worker/navigation.d.ts +5 -1
  72. package/dist/worker/navigation.d.ts.map +1 -1
  73. package/dist/worker/navigation.js +22 -4
  74. package/dist/worker/navigation.js.map +1 -1
  75. package/dist/worker/print.d.ts +14 -0
  76. package/dist/worker/print.d.ts.map +1 -0
  77. package/dist/worker/print.js +49 -0
  78. package/dist/worker/print.js.map +1 -0
  79. package/dist/worker/recent-pages.d.ts +14 -0
  80. package/dist/worker/recent-pages.d.ts.map +1 -0
  81. package/dist/worker/recent-pages.js +53 -0
  82. package/dist/worker/recent-pages.js.map +1 -0
  83. package/dist/worker/render.d.ts.map +1 -1
  84. package/dist/worker/render.js +5 -2
  85. package/dist/worker/render.js.map +1 -1
  86. package/dist/worker/text.d.ts +9 -1
  87. package/dist/worker/text.d.ts.map +1 -1
  88. package/dist/worker/text.js +29 -22
  89. package/dist/worker/text.js.map +1 -1
  90. package/package.json +6 -5
@@ -1,21 +1,24 @@
1
1
  // The viewer's methods on the document worker: the extension `entry.ts` serves, and test
2
2
  // workers too, which add their own hooks on top so none ships.
3
- import { closeDocument, current, initBackend, openDocument, workerMemory } from "./document.js";
3
+ import { closeDocument, current, currentDocument, initBackend, openDocument, textModel, workerMemory, } from "./document.js";
4
4
  import { find, forgetSearch } from "./find.js";
5
- import { namedDestination, outline } from "./navigation.js";
5
+ import { forgetLinks, namedDestination, outline, pageLinks } from "./navigation.js";
6
6
  import { networkLog } from "./network.js";
7
+ import { fileBytes, printPage, replyBytes } from "./print.js";
7
8
  import { render, reply } from "./render.js";
8
- import { forgetText, pageText, replyText, structure } from "./text.js";
9
+ import { forgetText, pageText, readingOrder, reflow, replyText, structure } from "./text.js";
9
10
  /** The viewer's worker methods, by name (see `Methods` in protocol.ts). */
10
11
  export const viewerMethods = {
11
12
  initBackend: { run: ([init]) => initBackend(init) },
12
13
  openDocument: {
13
- run: ([source, options], { signal }) => openDocument(source, options, signal),
14
+ run: ([source, options, ticket], { signal }) => openDocument(source, options, signal, ticket),
14
15
  },
16
+ currentDocument: { run: () => currentDocument() },
15
17
  closeDocument: {
16
18
  run: () => {
17
19
  forgetText();
18
20
  forgetSearch();
21
+ forgetLinks();
19
22
  return closeDocument();
20
23
  },
21
24
  },
@@ -36,10 +39,26 @@ export const viewerMethods = {
36
39
  reply: (text) => replyText(text),
37
40
  },
38
41
  structure: { run: (_params, { signal }) => structure(signal) },
42
+ reflow: { run: (_params, { signal }) => reflow(signal) },
43
+ readingOrder: { run: ([index], { signal }) => readingOrder(index, signal) },
39
44
  find: {
40
45
  run: ([query, options, pages], { signal }) => find(query, options, pages, signal),
41
46
  },
42
47
  outline: { run: (_params, { signal }) => outline(signal) },
43
48
  namedDestination: { run: ([name], { signal }) => namedDestination(name, signal) },
49
+ pageLinks: { run: ([index], { signal }) => pageLinks(index, signal) },
50
+ properties: {
51
+ run: async (_params, { signal }) => {
52
+ const model = await textModel(signal);
53
+ return model.ensure(() => model.properties(), { signal });
54
+ },
55
+ },
56
+ printPage: {
57
+ run: ([index, options], { signal }) => printPage(index, options, signal),
58
+ },
59
+ fileBytes: {
60
+ run: (_params, { signal }) => fileBytes(signal),
61
+ reply: (bytes) => replyBytes(bytes),
62
+ },
44
63
  };
45
64
  //# sourceMappingURL=methods.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"methods.js","sourceRoot":"","sources":["../../src/worker/methods.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"methods.js","sourceRoot":"","sources":["../../src/worker/methods.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
- import type { OutlineNode, Target } from "@laminapdf/sdk";
1
+ import type { OutlineNode, PageLink, Target } from "@laminapdf/sdk";
2
2
  /** The outline's top-level items, each with its children; empty without one. */
3
3
  export declare function outline(signal: AbortSignal): Promise<OutlineNode[]>;
4
4
  /** Where the named destination `name` goes, or `undefined` when the document has no such name. */
5
5
  export declare function namedDestination(name: string, signal: AbortSignal): Promise<Target | undefined>;
6
+ /** Page `index`'s links, in annotation order (cached). */
7
+ export declare function pageLinks(index: number, signal: AbortSignal): Promise<readonly PageLink[]>;
8
+ /** Forgets every page's links: the document closed. */
9
+ export declare function forgetLinks(): void;
6
10
  //# sourceMappingURL=navigation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/worker/navigation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG1D,gFAAgF;AAChF,wBAAsB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAGzE;AAED,kGAAkG;AAClG,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGrG"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/worker/navigation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAOpE,gFAAgF;AAChF,wBAAsB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAGzE;AAED,kGAAkG;AAClG,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGrG;AAED,0DAA0D;AAC1D,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC,CAOhG;AAED,uDAAuD;AACvD,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
@@ -1,8 +1,12 @@
1
- // Moving through the open document: its outline and named destinations, read by Lamina PDF in the
2
- // worker (the extract module, which the text layer loads too), each target a page and a view in
3
- // page space. The outline is read when a reader first asks for it, since it can hold thousands of
4
- // items.
1
+ // Moving through the open document: its outline, named destinations and each page's links, read
2
+ // by Lamina PDF in the worker (the extract module, which the text layer loads too), each target a
3
+ // page and a view in page space. The outline is read when a reader first asks for it, since it can
4
+ // hold thousands of items. The last pages' links are kept, since a page scrolled back into view
5
+ // asks again.
5
6
  import { textModel } from "./document.js";
7
+ import { CACHED_PAGES, RecentPages } from "./recent-pages.js";
8
+ /** The last pages' links. */
9
+ const links = new RecentPages(CACHED_PAGES);
6
10
  /** The outline's top-level items, each with its children; empty without one. */
7
11
  export async function outline(signal) {
8
12
  const model = await textModel(signal);
@@ -13,4 +17,18 @@ export async function namedDestination(name, signal) {
13
17
  const model = await textModel(signal);
14
18
  return model.ensure(() => model.namedDestination(name), { signal });
15
19
  }
20
+ /** Page `index`'s links, in annotation order (cached). */
21
+ export async function pageLinks(index, signal) {
22
+ const cached = links.get(index);
23
+ if (cached !== undefined)
24
+ return cached;
25
+ const model = await textModel(signal);
26
+ const read = await model.ensure(() => model.pageLinks(index), { signal });
27
+ links.set(index, read);
28
+ return read;
29
+ }
30
+ /** Forgets every page's links: the document closed. */
31
+ export function forgetLinks() {
32
+ links.clear();
33
+ }
16
34
  //# sourceMappingURL=navigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/worker/navigation.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,gGAAgG;AAChG,kGAAkG;AAClG,SAAS;AAGT,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAmB;IAC/C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAmB;IACtE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/worker/navigation.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,kGAAkG;AAClG,mGAAmG;AACnG,gGAAgG;AAChG,cAAc;AAGd,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,6BAA6B;AAC7B,MAAM,KAAK,GAAG,IAAI,WAAW,CAAsB,YAAY,CAAC,CAAC;AAEjE,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAmB;IAC/C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAmB;IACtE,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,MAAmB;IAChE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,WAAW;IACzB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { PrintedPage, PrintOptions } from "../protocol.js";
2
+ /**
3
+ * Page `index` drawn for printing at `options.dpi` (lowered when the page would pass
4
+ * MAX_PRINT_PIXELS; `dpi` says what it was drawn at), as a PNG.
5
+ */
6
+ export declare function printPage(index: number, options: PrintOptions, signal: AbortSignal): Promise<PrintedPage>;
7
+ /**
8
+ * Every byte of the open file as it was opened: a remote file's from its block cache and its
9
+ * host, unchanged. A local file's bytes stay where the page has them.
10
+ */
11
+ export declare function fileBytes(signal: AbortSignal): Promise<Uint8Array>;
12
+ /** One caller's answer: its own copy of the bytes, transferred. */
13
+ export declare function replyBytes(bytes: Uint8Array): [Uint8Array, Transferable[]];
14
+ //# sourceMappingURL=print.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.d.ts","sourceRoot":"","sources":["../../src/worker/print.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAOhE;;;GAGG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAmB/G;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAIlE;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAG1E"}
@@ -0,0 +1,49 @@
1
+ // Printing in the document worker (R09): a page drawn at print resolution with the print
2
+ // intent (annotations as their print flags say), encoded as PNG here, so the page that prints
3
+ // it only ever holds one small file per page, never its pixels. One page per call, so the
4
+ // pixels of the page before are released before the next is drawn.
5
+ import { readAll } from "../source.js";
6
+ import { current, filling } from "./document.js";
7
+ /** The most pixels one printed page holds: about 16 million, a 300 dpi page of 11 × 17 inches. */
8
+ const MAX_PRINT_PIXELS = 16_000_000;
9
+ /**
10
+ * Page `index` drawn for printing at `options.dpi` (lowered when the page would pass
11
+ * MAX_PRINT_PIXELS; `dpi` says what it was drawn at), as a PNG.
12
+ */
13
+ export async function printPage(index, options, signal) {
14
+ const doc = current();
15
+ const page = doc.render.page(index);
16
+ const wanted = options.dpi / 72;
17
+ const area = page.width * page.height;
18
+ const scale = Math.min(wanted, Math.sqrt(MAX_PRINT_PIXELS / Math.max(1, area)));
19
+ const request = {
20
+ page: index,
21
+ scale,
22
+ flags: { annotations: options.annotations, formWidgets: options.annotations, print: true, grayscale: false },
23
+ };
24
+ const tile = await filling(doc.remote, () => doc.render.render(request, { signal }), signal);
25
+ signal.throwIfAborted();
26
+ const canvas = new OffscreenCanvas(tile.width, tile.height);
27
+ const context = canvas.getContext("2d");
28
+ if (context === null)
29
+ throw new Error("no 2D context for printing");
30
+ context.putImageData(new ImageData(tile.pixels, tile.width, tile.height), 0, 0);
31
+ const image = await canvas.convertToBlob({ type: "image/png" });
32
+ return { image, width: page.width, height: page.height, dpi: Math.round(scale * 72) };
33
+ }
34
+ /**
35
+ * Every byte of the open file as it was opened: a remote file's from its block cache and its
36
+ * host, unchanged. A local file's bytes stay where the page has them.
37
+ */
38
+ export function fileBytes(signal) {
39
+ const { remote } = current();
40
+ if (remote === undefined)
41
+ return Promise.reject(new Error("the open file isn't remote: read it where it was opened"));
42
+ return remote.whole === undefined ? readAll(remote, signal) : Promise.resolve(remote.whole);
43
+ }
44
+ /** One caller's answer: its own copy of the bytes, transferred. */
45
+ export function replyBytes(bytes) {
46
+ const copy = bytes.slice();
47
+ return [copy, [copy.buffer]];
48
+ }
49
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../../src/worker/print.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /** How many pages' text and links stay cached (a screenful of pages and the margin, at most zoom). */
2
+ export declare const CACHED_PAGES = 24;
3
+ /** A cache of the pages read last, of the open document and those before it. */
4
+ export declare class RecentPages<T> {
5
+ #private;
6
+ constructor(budget: number, weigh?: (value: T) => number);
7
+ /** Page `index` of the open document, now the newest; `undefined` when it isn't kept. */
8
+ get(index: number): T | undefined;
9
+ /** Keeps `value` for page `index` of the open document, letting the oldest go over the budget. */
10
+ set(index: number, value: T): void;
11
+ /** Forgets every page: the document closed. */
12
+ clear(): void;
13
+ }
14
+ //# sourceMappingURL=recent-pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-pages.d.ts","sourceRoot":"","sources":["../../src/worker/recent-pages.ts"],"names":[],"mappings":"AAOA,sGAAsG;AACtG,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B,gFAAgF;AAChF,qBAAa,WAAW,CAAC,CAAC;;IAMxB,YAAY,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAgB,EAGhE;IAED,yFAAyF;IACzF,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAQhC;IAED,kGAAkG;IAClG,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAYjC;IAED,+CAA+C;IAC/C,KAAK,IAAI,IAAI,CAGZ;CAKF"}
@@ -0,0 +1,53 @@
1
+ // What the document Web Worker keeps of the pages it read last: a page's text, its searchable
2
+ // text, its links. Entries are keyed by document and page, so another document never reads one's
3
+ // pages; reading one makes it the newest, and the oldest go first once the entries weigh more than
4
+ // the budget (a count of pages, unless `weigh` gives each its size).
5
+ import { current } from "./document.js";
6
+ /** How many pages' text and links stay cached (a screenful of pages and the margin, at most zoom). */
7
+ export const CACHED_PAGES = 24;
8
+ /** A cache of the pages read last, of the open document and those before it. */
9
+ export class RecentPages {
10
+ #entries = new Map();
11
+ #budget;
12
+ #weigh;
13
+ #weight = 0;
14
+ constructor(budget, weigh = () => 1) {
15
+ this.#budget = budget;
16
+ this.#weigh = weigh;
17
+ }
18
+ /** Page `index` of the open document, now the newest; `undefined` when it isn't kept. */
19
+ get(index) {
20
+ const key = this.#key(index);
21
+ const value = this.#entries.get(key);
22
+ if (value !== undefined) {
23
+ this.#entries.delete(key);
24
+ this.#entries.set(key, value);
25
+ }
26
+ return value;
27
+ }
28
+ /** Keeps `value` for page `index` of the open document, letting the oldest go over the budget. */
29
+ set(index, value) {
30
+ const key = this.#key(index);
31
+ const old = this.#entries.get(key);
32
+ if (old !== undefined)
33
+ this.#weight -= this.#weigh(old);
34
+ this.#entries.delete(key);
35
+ this.#entries.set(key, value);
36
+ this.#weight += this.#weigh(value);
37
+ for (const [oldest, kept] of this.#entries) {
38
+ if (this.#weight <= this.#budget)
39
+ break;
40
+ this.#entries.delete(oldest);
41
+ this.#weight -= this.#weigh(kept);
42
+ }
43
+ }
44
+ /** Forgets every page: the document closed. */
45
+ clear() {
46
+ this.#entries.clear();
47
+ this.#weight = 0;
48
+ }
49
+ #key(index) {
50
+ return `${current().id}:${index}`;
51
+ }
52
+ }
53
+ //# sourceMappingURL=recent-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-pages.js","sourceRoot":"","sources":["../../src/worker/recent-pages.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,iGAAiG;AACjG,mGAAmG;AACnG,qEAAqE;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,sGAAsG;AACtG,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAE/B,gFAAgF;AAChF,MAAM,OAAO,WAAW;IACb,QAAQ,GAAG,IAAI,GAAG,EAAa,CAAC;IAChC,OAAO,CAAS;IAChB,MAAM,CAAuB;IACtC,OAAO,GAAG,CAAC,CAAC;IAEZ,YAAY,MAAc,EAAE,KAAK,GAAyB,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,yFAAyF;IACzF,GAAG,CAAC,KAAa;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kGAAkG;IAClG,GAAG,CAAC,KAAa,EAAE,KAAQ;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM;YACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,OAAO,GAAG,OAAO,EAAE,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;IACpC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/worker/render.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,gBAAgB,CAAC;AAGhE;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAUrG;AAED,qCAAqC;AACrC,wBAAsB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,CAKzF"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/worker/render.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,gBAAgB,CAAC;AAGhE;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAarG;AAED,qCAAqC;AACrC,wBAAsB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,CAKzF"}
@@ -3,7 +3,7 @@
3
3
  // coalesced render is drawn once; each caller gets its own bitmap of the same pixels.
4
4
  import { emit } from "@laminapdf/sdk/worker/server";
5
5
  import { renderKey } from "../protocol.js";
6
- import { current, filling } from "./document.js";
6
+ import { current, filling, warmExtract } from "./document.js";
7
7
  /**
8
8
  * Renders `request` on document `id` (a render queued for a document since replaced is
9
9
  * `disposed`). A remote document's render fetches the bytes it meets missing and draws again.
@@ -17,7 +17,10 @@ export function render(request, id, signal) {
17
17
  emit("render-start", { page: request.page, scale: request.scale, key });
18
18
  return doc.render.render(request, { signal });
19
19
  };
20
- return filling(doc.remote, draw, signal, () => emit("render-fetching", { key }));
20
+ const tile = filling(doc.remote, draw, signal, () => emit("render-fetching", { key }));
21
+ // A page is on screen: the text layer's module may load now without delaying it.
22
+ void tile.then(warmExtract, () => undefined);
23
+ return tile;
21
24
  }
22
25
  /** One caller's bitmap of `tile`. */
23
26
  export async function reply(tile) {
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/worker/render.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,yFAAyF;AACzF,sFAAsF;AAGtF,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAuB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjD;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,OAAsB,EAAE,EAAU,EAAE,MAAmB;IAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,kFAAkF;QAClF,yDAAyD;QACzD,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC;IACF,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAkB;IAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvC,6FAA6F;IAC7F,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/worker/render.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,yFAAyF;AACzF,sFAAsF;AAGtF,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAuB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,OAAsB,EAAE,EAAU,EAAE,MAAmB;IAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,kFAAkF;QAClF,yDAAyD;QACzD,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACvF,iFAAiF;IACjF,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAkB;IAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvC,6FAA6F;IAC7F,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -1,5 +1,6 @@
1
+ import type { Reflow } from "@laminapdf/sdk";
1
2
  import type { PageGlyphs } from "../find/page.js";
2
- import type { PageTextData, StructureData } from "../protocol.js";
3
+ import type { PageTextData, ReadingBlock, StructureData } from "../protocol.js";
3
4
  /** Page `index`'s text runs and glyph quads (cached; `signal` stops a read of pending data). */
4
5
  export declare function pageText(index: number, signal: AbortSignal): Promise<PageTextData>;
5
6
  /**
@@ -12,6 +13,13 @@ export declare function pageGlyphs(index: number, signal: AbortSignal, keep?: bo
12
13
  export declare function replyText(data: PageTextData): [PageTextData, Transferable[]];
13
14
  /** Whether the document says it is tagged, and its structure tree when it has one. */
14
15
  export declare function structure(signal: AbortSignal): Promise<StructureData>;
16
+ /** The open document for reader mode (`doc.reflow()`): blocks in the structure tree's order, or why not. */
17
+ export declare function reflow(signal: AbortSignal): Promise<Reflow>;
18
+ /**
19
+ * Page `index`'s blocks in reading order (cached). Running headers and footers stay in, as
20
+ * blocks of their own: a selection that takes them in copies them.
21
+ */
22
+ export declare function readingOrder(index: number, signal: AbortSignal): Promise<ReadingBlock[]>;
15
23
  /** Forgets every page's text: the document closed. */
16
24
  export declare function forgetText(): void;
17
25
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/worker/text.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAY/E,gGAAgG;AAChG,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAGxF;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,UAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAgCrG;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAG5E;AAED,sFAAsF;AACtF,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAK3E;AAED,sDAAsD;AACtD,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/worker/text.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAO7F,gGAAgG;AAChG,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAGxF;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,UAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBrG;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAG5E;AAED,sFAAsF;AACtF,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAK3E;AAED,4GAA4G;AAC5G,wBAAsB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjE;AAKD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAW9F;AAED,sDAAsD;AACtD,wBAAgB,UAAU,IAAI,IAAI,CAGjC"}
@@ -3,14 +3,10 @@
3
3
  // every glyph's quad in one Float32Array, which each caller gets its own copy of to transfer, so a
4
4
  // page of thousands of glyphs is three objects, not thousands. The last pages read are kept, since
5
5
  // a page scrolled back into view asks again.
6
- import { current, textModel } from "./document.js";
7
- /** How many pages' text stay cached (a screenful of pages and the margin, at most zoom). */
8
- const CACHED_PAGES = 24;
9
- /**
10
- * The cache, by document ID and page: another document never reads one's pages, and the oldest
11
- * go. Each page keeps its glyphs' text too, for find; only the runs and quads reach the page.
12
- */
13
- const cache = new Map();
6
+ import { textModel } from "./document.js";
7
+ import { CACHED_PAGES, RecentPages } from "./recent-pages.js";
8
+ /** The last pages' text. Each keeps its glyphs' text too, for find; only the runs and quads reach the page. */
9
+ const cache = new RecentPages(CACHED_PAGES);
14
10
  /** Page `index`'s text runs and glyph quads (cached; `signal` stops a read of pending data). */
15
11
  export async function pageText(index, signal) {
16
12
  const { runs, quads } = await pageGlyphs(index, signal);
@@ -22,15 +18,9 @@ export async function pageText(index, signal) {
22
18
  * the pages in view.
23
19
  */
24
20
  export async function pageGlyphs(index, signal, keep = true) {
25
- const { id } = current();
26
- const key = `${id}:${index}`;
27
- const cached = cache.get(key);
28
- if (cached !== undefined) {
29
- // Most recently used last, so the oldest goes first.
30
- cache.delete(key);
31
- cache.set(key, cached);
21
+ const cached = cache.get(index);
22
+ if (cached !== undefined)
32
23
  return cached;
33
- }
34
24
  signal.throwIfAborted();
35
25
  const model = await textModel(signal);
36
26
  const text = await model.ensure(() => model.page(index).text(), { signal });
@@ -48,12 +38,7 @@ export async function pageGlyphs(index, signal, keep = true) {
48
38
  const data = { runs, quads, glyphText, glyphOffsets };
49
39
  if (!keep)
50
40
  return data;
51
- cache.set(key, data);
52
- for (const old of cache.keys()) {
53
- if (cache.size <= CACHED_PAGES)
54
- break;
55
- cache.delete(old);
56
- }
41
+ cache.set(index, data);
57
42
  return data;
58
43
  }
59
44
  /** One caller's answer: its own copy of the quads, transferred. */
@@ -68,8 +53,30 @@ export async function structure(signal) {
68
53
  const tree = await model.ensure(() => model.structureTree(), { signal });
69
54
  return tree === undefined ? { tagged } : { tagged, tree };
70
55
  }
56
+ /** The open document for reader mode (`doc.reflow()`): blocks in the structure tree's order, or why not. */
57
+ export async function reflow(signal) {
58
+ const model = await textModel(signal);
59
+ return model.ensure(() => model.reflow(), { signal });
60
+ }
61
+ /** The reading-order blocks of the last pages a selection reached. */
62
+ const blocks = new RecentPages(CACHED_PAGES);
63
+ /**
64
+ * Page `index`'s blocks in reading order (cached). Running headers and footers stay in, as
65
+ * blocks of their own: a selection that takes them in copies them.
66
+ */
67
+ export async function readingOrder(index, signal) {
68
+ const cached = blocks.get(index);
69
+ if (cached !== undefined)
70
+ return cached;
71
+ const model = await textModel(signal);
72
+ const extraction = await model.ensure(() => model.extract({ format: "json", pages: [index], drop: { furniture: false } }), { signal });
73
+ const found = extraction.blocks.map((b) => ({ bbox: b.bbox, type: b.type }));
74
+ blocks.set(index, found);
75
+ return found;
76
+ }
71
77
  /** Forgets every page's text: the document closed. */
72
78
  export function forgetText() {
73
79
  cache.clear();
80
+ blocks.clear();
74
81
  }
75
82
  //# sourceMappingURL=text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/worker/text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/worker/text.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@laminapdf/viewer",
3
- "version": "0.2.0-alpha.4",
3
+ "version": "0.2.0-alpha.5",
4
4
  "description": "The web reader's framework-free viewer core (ADR 0009). Part 1 (C3a): one document worker per document, hosting @laminapdf/sdk and a RenderBackend, behind a typed RPC that extends @laminapdf/sdk/worker with priorities, coalescing, cancellation, timeouts and restart.",
5
5
  "license": "MIT OR Apache-2.0",
6
6
  "homepage": "https://laminapdf.com",
@@ -31,10 +31,10 @@
31
31
  "./package.json": "./package.json"
32
32
  },
33
33
  "dependencies": {
34
- "@laminapdf/render": "0.2.0-alpha.4",
35
- "@laminapdf/sdk": "0.2.0-alpha.4",
36
- "@laminapdf/render-hayro": "0.2.0-alpha.4",
37
- "@laminapdf/render-pdfium": "0.2.0-alpha.4"
34
+ "@laminapdf/sdk": "0.2.0-alpha.5",
35
+ "@laminapdf/render": "0.2.0-alpha.5",
36
+ "@laminapdf/render-hayro": "0.2.0-alpha.5",
37
+ "@laminapdf/render-pdfium": "0.2.0-alpha.5"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@embedpdf/pdfium": "2.15.1",
@@ -53,6 +53,7 @@
53
53
  "build:wasm": "pnpm --filter @laminapdf/render --filter @laminapdf/render-pdfium run build && pnpm --filter @laminapdf/render-hayro run build:wasm && tsc -p tsconfig.build.json",
54
54
  "typecheck:wasm": "pnpm --filter @laminapdf/render --filter @laminapdf/render-pdfium run build && pnpm --filter @laminapdf/render-hayro run build:wasm && tsc -p tsconfig.build.json && tsc --noEmit -p tsconfig.json",
55
55
  "perf": "node perf/run.ts",
56
+ "perf:gate": "node perf/gate.ts",
56
57
  "test:wasm": "pnpm --filter @laminapdf/render --filter @laminapdf/render-pdfium run build && pnpm --filter @laminapdf/render-hayro run build:wasm && tsc -p tsconfig.build.json && tsc --noEmit -p tsconfig.json && vitest run -c vitest.node.config.ts"
57
58
  }
58
59
  }