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

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 (91) hide show
  1. package/README.md +43 -2
  2. package/dist/client.d.ts +33 -2
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +138 -19
  5. package/dist/client.js.map +1 -1
  6. package/dist/edit/session.d.ts +91 -0
  7. package/dist/edit/session.d.ts.map +1 -0
  8. package/dist/edit/session.js +179 -0
  9. package/dist/edit/session.js.map +1 -0
  10. package/dist/edit-log.d.ts +32 -0
  11. package/dist/edit-log.d.ts.map +1 -0
  12. package/dist/edit-log.js +74 -0
  13. package/dist/edit-log.js.map +1 -0
  14. package/dist/find/controller.d.ts +6 -0
  15. package/dist/find/controller.d.ts.map +1 -1
  16. package/dist/find/controller.js +69 -2
  17. package/dist/find/controller.js.map +1 -1
  18. package/dist/history/history.d.ts +9 -0
  19. package/dist/history/history.d.ts.map +1 -1
  20. package/dist/history/history.js.map +1 -1
  21. package/dist/index.d.ts +8 -5
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/layers/link-layer.d.ts +33 -0
  26. package/dist/layers/link-layer.d.ts.map +1 -1
  27. package/dist/layers/link-layer.js +251 -3
  28. package/dist/layers/link-layer.js.map +1 -1
  29. package/dist/layers/link-preview.d.ts +77 -0
  30. package/dist/layers/link-preview.d.ts.map +1 -0
  31. package/dist/layers/link-preview.js +202 -0
  32. package/dist/layers/link-preview.js.map +1 -0
  33. package/dist/layers/text-layer.d.ts +7 -3
  34. package/dist/layers/text-layer.d.ts.map +1 -1
  35. package/dist/layers/text-layer.js +3 -5
  36. package/dist/layers/text-layer.js.map +1 -1
  37. package/dist/layout/page-layout.d.ts +7 -0
  38. package/dist/layout/page-layout.d.ts.map +1 -1
  39. package/dist/layout/page-layout.js +15 -0
  40. package/dist/layout/page-layout.js.map +1 -1
  41. package/dist/protocol.d.ts +119 -1
  42. package/dist/protocol.d.ts.map +1 -1
  43. package/dist/protocol.js +17 -2
  44. package/dist/protocol.js.map +1 -1
  45. package/dist/thumbnails/strip.d.ts.map +1 -1
  46. package/dist/thumbnails/strip.js +34 -1
  47. package/dist/thumbnails/strip.js.map +1 -1
  48. package/dist/view/previews.d.ts +47 -0
  49. package/dist/view/previews.d.ts.map +1 -0
  50. package/dist/view/previews.js +97 -0
  51. package/dist/view/previews.js.map +1 -0
  52. package/dist/view/viewer.d.ts +84 -6
  53. package/dist/view/viewer.d.ts.map +1 -1
  54. package/dist/view/viewer.js +344 -12
  55. package/dist/view/viewer.js.map +1 -1
  56. package/dist/worker/document.d.ts +43 -5
  57. package/dist/worker/document.d.ts.map +1 -1
  58. package/dist/worker/document.js +72 -2
  59. package/dist/worker/document.js.map +1 -1
  60. package/dist/worker/edit.d.ts +35 -0
  61. package/dist/worker/edit.d.ts.map +1 -0
  62. package/dist/worker/edit.js +305 -0
  63. package/dist/worker/edit.js.map +1 -0
  64. package/dist/worker/find.d.ts +2 -2
  65. package/dist/worker/find.d.ts.map +1 -1
  66. package/dist/worker/find.js +3 -3
  67. package/dist/worker/find.js.map +1 -1
  68. package/dist/worker/fingerprint.d.ts +10 -0
  69. package/dist/worker/fingerprint.d.ts.map +1 -0
  70. package/dist/worker/fingerprint.js +42 -0
  71. package/dist/worker/fingerprint.js.map +1 -0
  72. package/dist/worker/methods.d.ts.map +1 -1
  73. package/dist/worker/methods.js +19 -0
  74. package/dist/worker/methods.js.map +1 -1
  75. package/dist/worker/navigation.d.ts +2 -2
  76. package/dist/worker/navigation.d.ts.map +1 -1
  77. package/dist/worker/navigation.js +3 -3
  78. package/dist/worker/navigation.js.map +1 -1
  79. package/dist/worker/recent-pages.d.ts +2 -0
  80. package/dist/worker/recent-pages.d.ts.map +1 -1
  81. package/dist/worker/recent-pages.js +15 -0
  82. package/dist/worker/recent-pages.js.map +1 -1
  83. package/dist/worker/session.d.ts +59 -0
  84. package/dist/worker/session.d.ts.map +1 -0
  85. package/dist/worker/session.js +152 -0
  86. package/dist/worker/session.js.map +1 -0
  87. package/dist/worker/text.d.ts +2 -2
  88. package/dist/worker/text.d.ts.map +1 -1
  89. package/dist/worker/text.js +5 -4
  90. package/dist/worker/text.js.map +1 -1
  91. package/package.json +8 -8
@@ -0,0 +1,305 @@
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.
8
+ import { current, currentBackend, filling, followEdit } from "./document.js";
9
+ import { forgetSearch } from "./find.js";
10
+ import { forgetLinks } from "./navigation.js";
11
+ import { clearRedo, historyOf, record, removeStep, restore, snapshot, stepBack, walkTo, } from "./session.js";
12
+ import { forgetText } from "./text.js";
13
+ /** Why an edit that failed left the model and the pages drawn apart: the document must be opened again. */
14
+ const DIVERGED = "an edit failed and couldn't be undone: the document and the pages drawn may differ; open it again";
15
+ /** Why an encrypted document takes no edit: its edits can't be written into memory to be drawn. */
16
+ const ENCRYPTED = "an encrypted document can't be edited yet: its edits can't be saved (encrypted-base)";
17
+ /** The edit session's history of document `id`. */
18
+ export function editHistory(id) {
19
+ const { edit } = current(id);
20
+ return historyOf(edit.session, edit.diverged);
21
+ }
22
+ /** Throws why document `opened` can't take an edit, undo or redo now, if it can't. */
23
+ function editable(opened) {
24
+ if (opened.edit.diverged)
25
+ throw new Error(DIVERGED);
26
+ if (opened.model.isEncrypted)
27
+ throw new Error(ENCRYPTED);
28
+ }
29
+ /**
30
+ * Applies `ops` to document `id`'s model as one transaction; when it touched pages, writes the
31
+ * edit and draws those pages from it from now on. The edit session records it as a step named
32
+ * `label`; an edit that changed nothing records none.
33
+ *
34
+ * @throws the op's error (nothing changed); a save or reopen error, after the transaction is
35
+ * undone, so the model again matches what is drawn; an error saying the document must be opened
36
+ * again when that undo failed too, and for every edit after it; an encrypted document's refusal.
37
+ */
38
+ export function applyEdit(ops, id, signal, label = describe(ops)) {
39
+ return serial(current(id), () => apply(ops, id, signal, label));
40
+ }
41
+ async function apply(ops, id, signal, label) {
42
+ const opened = current(id);
43
+ editable(opened);
44
+ const { model, edit } = opened;
45
+ const count = await model.ensure(() => model.pageCount, { signal });
46
+ const edited = await model.ensure(() => model.apply(ops), { signal });
47
+ if (!edited.changed)
48
+ return { pages: [], history: historyOf(edit.session, false) };
49
+ // The transaction cleared the model's redo stack, whatever happens next.
50
+ clearRedo(edit.session);
51
+ if (edited.touchedPages.length > 0) {
52
+ try {
53
+ await samePages(model, count);
54
+ await redraw(opened);
55
+ }
56
+ catch (e) {
57
+ // The edit never reached the screen: take it back out of the model, so the model matches
58
+ // what is drawn. The undone transaction is left on the model's redo stack, but the session
59
+ // has no step for it, so nothing redoes it, and the next edit clears it.
60
+ await revert(model, edit, "undo", e);
61
+ throw e;
62
+ }
63
+ }
64
+ followEdit(opened, ops);
65
+ const pages = await touched(opened, edited.touchedPages);
66
+ record(edit.session, label, pages.map((page) => page.index), Date.now());
67
+ return { pages, history: historyOf(edit.session, false) };
68
+ }
69
+ /**
70
+ * Undoes or redoes steps of document `id`'s edit session until `position` of them are done, then
71
+ * draws the pages they touched, once. A move that fails half way is taken back, so the document,
72
+ * the history and the pages drawn stay together.
73
+ */
74
+ export function goToStep(position, id, signal) {
75
+ return serial(current(id), () => moveTo(() => position, id, signal));
76
+ }
77
+ /**
78
+ * Undoes (`delta` -1) or redoes (+1) one step of document `id`'s edit session, reading where it
79
+ * stands only once the calls before it are done.
80
+ */
81
+ export function stepEdit(delta, id, signal) {
82
+ const opened = current(id);
83
+ return serial(opened, () => moveTo(() => opened.edit.session.position + delta, id, signal));
84
+ }
85
+ /**
86
+ * Runs `call` after document `opened`'s edit calls before it have settled: the worker serves
87
+ * calls as they come, and an edit's awaits would otherwise let another start against the history
88
+ * it is changing.
89
+ */
90
+ function serial(opened, call) {
91
+ const run = opened.edit.queue.then(call);
92
+ opened.edit.queue = run.catch(() => undefined);
93
+ return run;
94
+ }
95
+ async function moveTo(position, id, signal) {
96
+ const opened = current(id);
97
+ editable(opened);
98
+ const { model, edit } = opened;
99
+ const { session } = edit;
100
+ const kept = snapshot(session);
101
+ const done = [];
102
+ const ids = new Set();
103
+ try {
104
+ await walkTo(session, position(), async (way) => {
105
+ const reverted = await model.ensure(() => (way === "undo" ? model.undo() : model.redo()), { signal });
106
+ // The model has no entry where the session has a step: they disagree, which only a bug does.
107
+ if (reverted === undefined)
108
+ throw new Error(`the document has nothing to ${way}`);
109
+ for (const page of reverted.touchedPages)
110
+ ids.add(page);
111
+ followEdit(opened, way);
112
+ return reverted.outcome;
113
+ }, done);
114
+ if (ids.size > 0)
115
+ await redraw(opened);
116
+ }
117
+ catch (e) {
118
+ await takeBack(opened, kept, done, e);
119
+ throw e;
120
+ }
121
+ const pages = await touched(opened, [...ids]);
122
+ return { pages, history: historyOf(session, false), reverted: done };
123
+ }
124
+ /**
125
+ * Takes back the undos and redos in `done`, newest first, and puts the history back as `kept`
126
+ * was, less the steps the model dropped (a skipped undo or redo leaves it no entry).
127
+ */
128
+ async function takeBack(opened, kept, done, failure) {
129
+ const { model, edit } = opened;
130
+ for (const step of [...done].reverse()) {
131
+ if (step.outcome === "skipped")
132
+ continue;
133
+ await revert(model, edit, step.way === "undo" ? "redo" : "undo", failure);
134
+ followEdit(opened, step.way === "undo" ? "redo" : "undo");
135
+ }
136
+ const { session } = edit;
137
+ restore(session, kept);
138
+ for (const step of done) {
139
+ if (step.outcome !== "skipped")
140
+ continue;
141
+ const index = session.steps.findIndex((s) => s.id === step.step.id);
142
+ if (index >= 0)
143
+ removeStep(session, index, step.way);
144
+ }
145
+ }
146
+ /**
147
+ * Applies `steps` to document `id` again, one transaction each, then undoes the newest `undone`
148
+ * of them, and draws once: a restarted worker's document takes back the edits the old one had.
149
+ * The history keeps their labels and times.
150
+ *
151
+ * @throws an op's error, or a save or reopen error: the document is then marked diverged, since
152
+ * the edits applied so far can't all be taken back (the depth limit may have dropped some).
153
+ */
154
+ export function restoreEdits(steps, undone, id, signal) {
155
+ return serial(current(id), () => replay(steps, undone, id, signal));
156
+ }
157
+ async function replay(steps, undone, id, signal) {
158
+ const opened = current(id);
159
+ editable(opened);
160
+ const { model, edit } = opened;
161
+ const ids = new Set();
162
+ try {
163
+ const count = await model.ensure(() => model.pageCount, { signal });
164
+ for (const step of steps) {
165
+ const edited = await model.ensure(() => model.apply(step.ops), { signal });
166
+ if (!edited.changed)
167
+ continue;
168
+ for (const page of edited.touchedPages)
169
+ ids.add(page);
170
+ followEdit(opened, step.ops);
171
+ const pages = await model.ensure(() => model.pages);
172
+ const wanted = new Set(edited.touchedPages);
173
+ const indices = pages.filter((page) => wanted.has(page.id)).map((page) => page.index);
174
+ record(edit.session, step.label, indices, step.at);
175
+ }
176
+ for (let i = 0; i < undone && edit.session.position > 0; i++) {
177
+ const reverted = await model.ensure(() => model.undo(), { signal });
178
+ if (reverted === undefined)
179
+ break;
180
+ stepBack(edit.session, reverted.outcome);
181
+ followEdit(opened, "undo");
182
+ }
183
+ await samePages(model, count);
184
+ if (ids.size > 0)
185
+ await redraw(opened);
186
+ }
187
+ catch (e) {
188
+ edit.diverged = true;
189
+ throw new Error(DIVERGED, { cause: e });
190
+ }
191
+ // The file reopened as it was: the saved document is the one opened.
192
+ edit.session.saved = 0;
193
+ return { pages: await touched(opened, [...ids]), history: historyOf(edit.session, false) };
194
+ }
195
+ /** A label for an edit whose caller gave none: its ops' names. */
196
+ function describe(ops) {
197
+ return ops.map((op) => op.op).join(", ");
198
+ }
199
+ /**
200
+ * Refuses an edit that added, removed or moved pages: the view finds pages by index, and
201
+ * `EditResult` names pages by their indices after the edit.
202
+ */
203
+ async function samePages(model, before) {
204
+ const after = await model.ensure(() => model.pageCount);
205
+ if (after !== before)
206
+ throw new Error(`an edit that changes the page count (${before} → ${after}) can't be shown yet`);
207
+ }
208
+ /**
209
+ * Undoes (or redoes) the transaction just applied (or undone); when that fails too, marks the
210
+ * document diverged.
211
+ */
212
+ async function revert(model, edit, way, failure) {
213
+ let reverted;
214
+ try {
215
+ reverted = await model.ensure(() => (way === "undo" ? model.undo() : model.redo()));
216
+ }
217
+ catch (e) {
218
+ edit.diverged = true;
219
+ throw new Error(DIVERGED, { cause: [failure, e] });
220
+ }
221
+ // A partial outcome still restored what it could; only nothing at all leaves them apart.
222
+ if (reverted === undefined || reverted.outcome === "skipped") {
223
+ edit.diverged = true;
224
+ throw new Error(DIVERGED, { cause: failure });
225
+ }
226
+ }
227
+ /** The pages with these IDs, as they are now, in index order; what the worker kept of them is forgotten. */
228
+ async function touched(opened, ids) {
229
+ if (ids.length === 0)
230
+ return [];
231
+ const wanted = new Set(ids);
232
+ const { model } = opened;
233
+ const pages = (await model.ensure(() => model.pages)).filter((page) => wanted.has(page.id));
234
+ const indices = pages.map((page) => page.index);
235
+ forgetText(indices);
236
+ forgetSearch(indices);
237
+ forgetLinks(indices);
238
+ return pages;
239
+ }
240
+ /**
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.
243
+ */
244
+ async function redraw(opened) {
245
+ 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)]);
253
+ 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.
255
+ const next = await filling(opened.remote, () => currentBackend().open(source, options), new AbortController().signal);
256
+ const old = opened.render;
257
+ opened.render = next;
258
+ old.close();
259
+ }
260
+ function bytesSource(bytes) {
261
+ return { size: bytes.length, readSync: (offset, length) => bytes.subarray(offset, offset + length) };
262
+ }
263
+ /**
264
+ * `parts` one after another, read in place: the file and the revisions appended to it, never
265
+ * copied into one buffer. A part that answers `undefined` (a remote file's bytes not fetched yet)
266
+ * makes the read answer `undefined`, which `filling` fetches.
267
+ */
268
+ function joined(parts) {
269
+ const starts = [];
270
+ let size = 0;
271
+ for (const part of parts) {
272
+ starts.push(size);
273
+ size += part.size;
274
+ }
275
+ return {
276
+ size,
277
+ readSync(offset, length) {
278
+ const end = Math.min(size, offset + length);
279
+ const pieces = [];
280
+ for (let i = 0; i < parts.length; i++) {
281
+ const start = starts[i];
282
+ const part = parts[i];
283
+ const from = Math.max(offset, start);
284
+ const to = Math.min(end, start + part.size);
285
+ if (from >= to)
286
+ continue;
287
+ const piece = part.readSync(from - start, to - from);
288
+ if (piece === undefined)
289
+ return undefined;
290
+ pieces.push(piece);
291
+ }
292
+ return pieces.length === 1 ? pieces[0] : concat(pieces);
293
+ },
294
+ };
295
+ }
296
+ function concat(pieces) {
297
+ const out = new Uint8Array(pieces.reduce((sum, piece) => sum + piece.length, 0));
298
+ let at = 0;
299
+ for (const piece of pieces) {
300
+ out.set(piece, at);
301
+ at += piece.length;
302
+ }
303
+ return out;
304
+ }
305
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/worker/edit.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,6 @@ import type { FindOptions } from "../find/fold.js";
2
2
  import type { FindPageResult } from "../protocol.js";
3
3
  /** The matches of `query` on each of `pages`, in that order. */
4
4
  export declare function find(query: string, options: FindOptions, pages: readonly number[], signal: AbortSignal): Promise<FindPageResult[]>;
5
- /** Forgets every page's searchable text: the document closed. */
6
- export declare function forgetSearch(): void;
5
+ /** Forgets `pages`' searchable text (an edit changed them), or every page's (the document closed). */
6
+ export declare function forgetSearch(pages?: Iterable<number>): void;
7
7
  //# sourceMappingURL=find.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../src/worker/find.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAoBrD,gEAAgE;AAChE,wBAAsB,IAAI,CACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC,CAkB3B;AAED,iEAAiE;AACjE,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../src/worker/find.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAoBrD,gEAAgE;AAChE,wBAAsB,IAAI,CACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC,CAkB3B;AAED,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAE3D"}
@@ -39,8 +39,8 @@ export async function find(query, options, pages, signal) {
39
39
  }
40
40
  return out;
41
41
  }
42
- /** Forgets every page's searchable text: the document closed. */
43
- export function forgetSearch() {
44
- cache.clear();
42
+ /** Forgets `pages`' searchable text (an edit changed them), or every page's (the document closed). */
43
+ export function forgetSearch(pages) {
44
+ cache.forget(pages);
45
45
  }
46
46
  //# sourceMappingURL=find.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/worker/find.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,6FAA6F;AAC7F,+FAA+F;AAC/F,+FAA+F;AAC/F,iGAAiG;AACjG,wCAAwC;AAGxC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAmB,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtG,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,kEAAkE;AAClE,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;AAE9G,MAAM,KAAK,GAAG,IAAI,WAAW,CAAa,kBAAkB,EAAE,OAAO,CAAC,CAAC;AAEvE,mEAAmE;AACnE,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,MAAmB;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAClE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,KAAa,EACb,OAAoB,EACpB,KAAwB,EACxB,MAAmB;IAEnB,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QACxC,oFAAoF;QACpF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,KAAK,GACT,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3G,GAAG,CAAC,IAAI,CAAC;YACP,IAAI;YACJ,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY;IAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/worker/find.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,6FAA6F;AAC7F,+FAA+F;AAC/F,+FAA+F;AAC/F,iGAAiG;AACjG,wCAAwC;AAGxC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAmB,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtG,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,kEAAkE;AAClE,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;AAE9G,MAAM,KAAK,GAAG,IAAI,WAAW,CAAa,kBAAkB,EAAE,OAAO,CAAC,CAAC;AAEvE,mEAAmE;AACnE,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,MAAmB;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAClE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,KAAa,EACb,OAAoB,EACpB,KAAwB,EACxB,MAAmB;IAEnB,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QACxC,oFAAoF;QACpF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,KAAK,GACT,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3G,GAAG,CAAC,IAAI,CAAC;YACP,IAAI;YACJ,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** How much of the file's start is read: the first revision's end is looked for in it. */
2
+ export declare const HEAD_BYTES: number;
3
+ /** The bytes the fingerprint covers: `head` through the end of its first `%%EOF`, else all of it. */
4
+ export declare function fingerprintedBytes(head: Uint8Array): Uint8Array;
5
+ /**
6
+ * The fingerprint of a file whose first bytes are `head` (its first {@link HEAD_BYTES}, or the
7
+ * whole file when it is smaller): `"fp1:"` and a SHA-256 in hex.
8
+ */
9
+ export declare function documentFingerprint(head: Uint8Array): Promise<string>;
10
+ //# sourceMappingURL=fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/worker/fingerprint.ts"],"names":[],"mappings":"AAMA,0FAA0F;AAC1F,eAAO,MAAM,UAAU,QAAY,CAAC;AAWpC,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAG/D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAO3E"}
@@ -0,0 +1,42 @@
1
+ // A document's fingerprint, the key its reading position is kept under: a hash of the file's head,
2
+ // up to the end of its first revision. An incremental update appends to the file (ISO 32000-2
3
+ // §7.5.6) and leaves the head alone, so a file reopens at its place after someone adds a note or
4
+ // a signature; a full rewrite changes the head, so its output starts without one. `/ID[0]` stays
5
+ // out of it: a file without one gains one on its first save, which would change the key.
6
+ /** How much of the file's start is read: the first revision's end is looked for in it. */
7
+ export const HEAD_BYTES = 64 * 1024;
8
+ /** The fingerprint's version, so a later scheme can live beside this one. */
9
+ const PREFIX = "fp1:";
10
+ /** What the hash starts with: the scheme's name and a zero byte. */
11
+ const TAG = new TextEncoder().encode("laminapdf.fp/1\0");
12
+ /** `%%EOF`, the marker that ends a revision (§7.5.5). */
13
+ const EOF_MARKER = new TextEncoder().encode("%%EOF");
14
+ /** The bytes the fingerprint covers: `head` through the end of its first `%%EOF`, else all of it. */
15
+ export function fingerprintedBytes(head) {
16
+ const at = indexOf(head, EOF_MARKER);
17
+ return at < 0 ? head : head.subarray(0, at + EOF_MARKER.length);
18
+ }
19
+ /**
20
+ * The fingerprint of a file whose first bytes are `head` (its first {@link HEAD_BYTES}, or the
21
+ * whole file when it is smaller): `"fp1:"` and a SHA-256 in hex.
22
+ */
23
+ export async function documentFingerprint(head) {
24
+ const covered = fingerprintedBytes(head.subarray(0, HEAD_BYTES));
25
+ const input = new Uint8Array(TAG.length + covered.length);
26
+ input.set(TAG);
27
+ input.set(covered, TAG.length);
28
+ const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", input));
29
+ return PREFIX + Array.from(digest, (b) => b.toString(16).padStart(2, "0")).join("");
30
+ }
31
+ /** Where `needle` first starts in `bytes`, or −1. */
32
+ function indexOf(bytes, needle) {
33
+ for (let i = 0; i + needle.length <= bytes.length; i++) {
34
+ let j = 0;
35
+ while (j < needle.length && bytes[i + j] === needle[j])
36
+ j++;
37
+ if (j === needle.length)
38
+ return i;
39
+ }
40
+ return -1;
41
+ }
42
+ //# sourceMappingURL=fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/worker/fingerprint.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,8FAA8F;AAC9F,iGAAiG;AACjG,iGAAiG;AACjG,yFAAyF;AAEzF,0FAA0F;AAC1F,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpC,6EAA6E;AAC7E,MAAM,MAAM,GAAG,MAAM,CAAC;AAEtB,oEAAoE;AACpE,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAEzD,yDAAyD;AACzD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAErD,qGAAqG;AACrG,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAgB;IACxD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACf,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5E,OAAO,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,qDAAqD;AACrD,SAAS,OAAO,CAAC,KAAiB,EAAE,MAAkB;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../src/worker/methods.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAmBpE,2EAA2E;AAC3E,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAsDnE,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;AAoBpE,2EAA2E;AAC3E,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CA0EnE,CAAC"}
@@ -1,6 +1,7 @@
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
3
  import { closeDocument, current, currentDocument, initBackend, openDocument, textModel, workerMemory, } from "./document.js";
4
+ import { applyEdit, editHistory, goToStep, restoreEdits, stepEdit } from "./edit.js";
4
5
  import { find, forgetSearch } from "./find.js";
5
6
  import { forgetLinks, namedDestination, outline, pageLinks } from "./navigation.js";
6
7
  import { networkLog } from "./network.js";
@@ -22,6 +23,24 @@ export const viewerMethods = {
22
23
  return closeDocument();
23
24
  },
24
25
  },
26
+ applyEdit: {
27
+ run: ([ops, id, label], { signal }) => applyEdit(ops, id, signal, label),
28
+ },
29
+ undoEdit: {
30
+ run: ([id], { signal }) => stepEdit(-1, id, signal),
31
+ },
32
+ redoEdit: {
33
+ run: ([id], { signal }) => stepEdit(1, id, signal),
34
+ },
35
+ goToStep: {
36
+ run: ([position, id], { signal }) => goToStep(position, id, signal),
37
+ },
38
+ editHistory: {
39
+ run: ([id]) => editHistory(id),
40
+ },
41
+ restoreEdits: {
42
+ run: ([steps, undone, id], { signal }) => restoreEdits(steps, undone, id, signal),
43
+ },
25
44
  pageInfo: {
26
45
  run: ([index], { signal }) => {
27
46
  const { model } = current();
@@ -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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"}
@@ -5,6 +5,6 @@ export declare function outline(signal: AbortSignal): Promise<OutlineNode[]>;
5
5
  export declare function namedDestination(name: string, signal: AbortSignal): Promise<Target | undefined>;
6
6
  /** Page `index`'s links, in annotation order (cached). */
7
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;
8
+ /** Forgets `pages`' links (an edit changed them), or every page's (the document closed). */
9
+ export declare function forgetLinks(pages?: Iterable<number>): void;
10
10
  //# sourceMappingURL=navigation.d.ts.map
@@ -1 +1 @@
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
+ {"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,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAE1D"}
@@ -27,8 +27,8 @@ export async function pageLinks(index, signal) {
27
27
  links.set(index, read);
28
28
  return read;
29
29
  }
30
- /** Forgets every page's links: the document closed. */
31
- export function forgetLinks() {
32
- links.clear();
30
+ /** Forgets `pages`' links (an edit changed them), or every page's (the document closed). */
31
+ export function forgetLinks(pages) {
32
+ links.forget(pages);
33
33
  }
34
34
  //# sourceMappingURL=navigation.js.map
@@ -1 +1 @@
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"}
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,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,KAAwB;IAClD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}
@@ -8,6 +8,8 @@ export declare class RecentPages<T> {
8
8
  get(index: number): T | undefined;
9
9
  /** Keeps `value` for page `index` of the open document, letting the oldest go over the budget. */
10
10
  set(index: number, value: T): void;
11
+ /** Forgets `pages` of the open document (an edit changed them), or every page (the document closed). */
12
+ forget(pages?: Iterable<number>): void;
11
13
  /** Forgets every page: the document closed. */
12
14
  clear(): void;
13
15
  }
@@ -1 +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"}
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,wGAAwG;IACxG,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAYrC;IAED,+CAA+C;IAC/C,KAAK,IAAI,IAAI,CAGZ;CAKF"}
@@ -41,6 +41,21 @@ export class RecentPages {
41
41
  this.#weight -= this.#weigh(kept);
42
42
  }
43
43
  }
44
+ /** Forgets `pages` of the open document (an edit changed them), or every page (the document closed). */
45
+ forget(pages) {
46
+ if (pages === undefined) {
47
+ this.clear();
48
+ return;
49
+ }
50
+ for (const index of pages) {
51
+ const key = this.#key(index);
52
+ const old = this.#entries.get(key);
53
+ if (old === undefined)
54
+ continue;
55
+ this.#entries.delete(key);
56
+ this.#weight -= this.#weigh(old);
57
+ }
58
+ }
44
59
  /** Forgets every page: the document closed. */
45
60
  clear() {
46
61
  this.#entries.clear();
@@ -1 +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
+ {"version":3,"file":"recent-pages.js","sourceRoot":"","sources":["../../src/worker/recent-pages.ts"],"names":[],"mappings":"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"}