@laminapdf/sdk 0.0.0-stage → 0.2.0-alpha.2

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 (139) hide show
  1. package/README.md +208 -2
  2. package/dist/api.d.ts +23 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +11 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/builder.d.ts +319 -0
  7. package/dist/builder.d.ts.map +1 -0
  8. package/dist/builder.js +540 -0
  9. package/dist/builder.js.map +1 -0
  10. package/dist/defined.d.ts +5 -0
  11. package/dist/defined.d.ts.map +1 -0
  12. package/dist/defined.js +7 -0
  13. package/dist/defined.js.map +1 -0
  14. package/dist/document.d.ts +241 -0
  15. package/dist/document.d.ts.map +1 -0
  16. package/dist/document.js +427 -0
  17. package/dist/document.js.map +1 -0
  18. package/dist/entry/node.d.ts +30 -0
  19. package/dist/entry/node.d.ts.map +1 -0
  20. package/dist/entry/node.js +37 -0
  21. package/dist/entry/node.js.map +1 -0
  22. package/dist/entry/workerd.d.ts +30 -0
  23. package/dist/entry/workerd.d.ts.map +1 -0
  24. package/dist/entry/workerd.js +37 -0
  25. package/dist/entry/workerd.js.map +1 -0
  26. package/dist/errors.d.ts +102 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +137 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/explain.d.ts +20 -0
  31. package/dist/explain.d.ts.map +1 -0
  32. package/dist/explain.js +14 -0
  33. package/dist/explain.js.map +1 -0
  34. package/dist/font.d.ts +66 -0
  35. package/dist/font.d.ts.map +1 -0
  36. package/dist/font.js +103 -0
  37. package/dist/font.js.map +1 -0
  38. package/dist/generated/builder-enums.d.ts +29 -0
  39. package/dist/generated/builder-enums.d.ts.map +1 -0
  40. package/dist/generated/builder-enums.js +80 -0
  41. package/dist/generated/builder-enums.js.map +1 -0
  42. package/dist/generated/codes.d.ts +97 -0
  43. package/dist/generated/codes.d.ts.map +1 -0
  44. package/dist/generated/codes.js +453 -0
  45. package/dist/generated/codes.js.map +1 -0
  46. package/dist/generated/explain.d.ts +6 -0
  47. package/dist/generated/explain.d.ts.map +1 -0
  48. package/dist/generated/explain.js +138 -0
  49. package/dist/generated/explain.js.map +1 -0
  50. package/dist/index.d.ts +30 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +37 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/init.d.ts +80 -0
  55. package/dist/init.d.ts.map +1 -0
  56. package/dist/init.js +127 -0
  57. package/dist/init.js.map +1 -0
  58. package/dist/loader/fetch.d.ts +3 -0
  59. package/dist/loader/fetch.d.ts.map +1 -0
  60. package/dist/loader/fetch.js +2 -0
  61. package/dist/loader/fetch.js.map +1 -0
  62. package/dist/loader/node.d.ts +3 -0
  63. package/dist/loader/node.d.ts.map +1 -0
  64. package/dist/loader/node.js +9 -0
  65. package/dist/loader/node.js.map +1 -0
  66. package/dist/loader/workerd.d.ts +3 -0
  67. package/dist/loader/workerd.d.ts.map +1 -0
  68. package/dist/loader/workerd.js +15 -0
  69. package/dist/loader/workerd.js.map +1 -0
  70. package/dist/matrix.d.ts +16 -0
  71. package/dist/matrix.d.ts.map +1 -0
  72. package/dist/matrix.js +36 -0
  73. package/dist/matrix.js.map +1 -0
  74. package/dist/path.d.ts +34 -0
  75. package/dist/path.d.ts.map +1 -0
  76. package/dist/path.js +49 -0
  77. package/dist/path.js.map +1 -0
  78. package/dist/source/http.d.ts +36 -0
  79. package/dist/source/http.d.ts.map +1 -0
  80. package/dist/source/http.js +211 -0
  81. package/dist/source/http.js.map +1 -0
  82. package/dist/source/range.d.ts +70 -0
  83. package/dist/source/range.d.ts.map +1 -0
  84. package/dist/source/range.js +96 -0
  85. package/dist/source/range.js.map +1 -0
  86. package/dist/text.d.ts +90 -0
  87. package/dist/text.d.ts.map +1 -0
  88. package/dist/text.js +127 -0
  89. package/dist/text.js.map +1 -0
  90. package/dist/transaction.d.ts +36 -0
  91. package/dist/transaction.d.ts.map +1 -0
  92. package/dist/transaction.js +47 -0
  93. package/dist/transaction.js.map +1 -0
  94. package/dist/types.d.ts +79 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +2 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/version.d.ts +3 -0
  99. package/dist/version.d.ts.map +1 -0
  100. package/dist/version.js +6 -0
  101. package/dist/version.js.map +1 -0
  102. package/dist/worker/client.d.ts +87 -0
  103. package/dist/worker/client.d.ts.map +1 -0
  104. package/dist/worker/client.js +405 -0
  105. package/dist/worker/client.js.map +1 -0
  106. package/dist/worker/emitter.d.ts +12 -0
  107. package/dist/worker/emitter.d.ts.map +1 -0
  108. package/dist/worker/emitter.js +34 -0
  109. package/dist/worker/emitter.js.map +1 -0
  110. package/dist/worker/entry.d.ts +2 -0
  111. package/dist/worker/entry.d.ts.map +1 -0
  112. package/dist/worker/entry.js +4 -0
  113. package/dist/worker/entry.js.map +1 -0
  114. package/dist/worker/index.d.ts +7 -0
  115. package/dist/worker/index.d.ts.map +1 -0
  116. package/dist/worker/index.js +4 -0
  117. package/dist/worker/index.js.map +1 -0
  118. package/dist/worker/protocol.d.ts +82 -0
  119. package/dist/worker/protocol.d.ts.map +1 -0
  120. package/dist/worker/protocol.js +11 -0
  121. package/dist/worker/protocol.js.map +1 -0
  122. package/dist/worker/server.d.ts +51 -0
  123. package/dist/worker/server.d.ts.map +1 -0
  124. package/dist/worker/server.js +460 -0
  125. package/dist/worker/server.js.map +1 -0
  126. package/dist/worker/support.d.ts +39 -0
  127. package/dist/worker/support.d.ts.map +1 -0
  128. package/dist/worker/support.js +25 -0
  129. package/dist/worker/support.js.map +1 -0
  130. package/dist/worker/transfer.d.ts +3 -0
  131. package/dist/worker/transfer.d.ts.map +1 -0
  132. package/dist/worker/transfer.js +13 -0
  133. package/dist/worker/transfer.js.map +1 -0
  134. package/dist/worker/types.d.ts +43 -0
  135. package/dist/worker/types.d.ts.map +1 -0
  136. package/dist/worker/types.js +2 -0
  137. package/dist/worker/types.js.map +1 -0
  138. package/package.json +91 -3
  139. package/schemas/error.schema.json +288 -0
@@ -0,0 +1,540 @@
1
+ import { defined } from "./defined.js";
2
+ import { Document } from "./document.js";
3
+ import { didYouMean, guard, packageError } from "./errors.js";
4
+ import { ARTIFACT_KINDS, TABLE_SCOPES, TAG_NAMES, } from "./generated/builder-enums.js";
5
+ import { readingModule, textModule } from "./init.js";
6
+ import { PathEncoder } from "./path.js";
7
+ const mm = (w, h) => [(w * 72) / 25.4, (h * 72) / 25.4];
8
+ /** Each named size in points, width × height. */
9
+ export const PAGE_SIZES = {
10
+ A0: mm(841, 1189),
11
+ A1: mm(594, 841),
12
+ A2: mm(420, 594),
13
+ A3: mm(297, 420),
14
+ A4: mm(210, 297),
15
+ A5: mm(148, 210),
16
+ A6: mm(105, 148),
17
+ Letter: [612, 792],
18
+ Legal: [612, 1008],
19
+ Tabloid: [792, 1224],
20
+ };
21
+ export { TAG_NAMES } from "./generated/builder-enums.js";
22
+ /** `name` when `names` has it, else `invalid-argument` with the closest names. */
23
+ function checked(names, name, argument, detail) {
24
+ if (names.includes(name))
25
+ return name;
26
+ throw packageError("invalid-argument", detail, { didYouMean: didYouMean(name, names), data: { argument, detail } });
27
+ }
28
+ /** The size of a named page; `invalid-argument` (with suggestions) for an unknown name. */
29
+ function namedSize(name) {
30
+ const size = PAGE_SIZES[name];
31
+ if (size !== undefined && Object.hasOwn(PAGE_SIZES, name))
32
+ return size;
33
+ throw packageError("invalid-argument", "not a page size name", {
34
+ didYouMean: didYouMean(name, Object.keys(PAGE_SIZES)),
35
+ data: { argument: "size", detail: "a page size is a name such as A4 or Letter, or [width, height] in points" },
36
+ });
37
+ }
38
+ /** Whether `a` and `b` hold the same bytes (identity first: no copy, no hash). */
39
+ function sameBytes(a, b) {
40
+ if (a === b)
41
+ return true;
42
+ if (a.length !== b.length)
43
+ return false;
44
+ for (let i = 0; i < a.length; i++)
45
+ if (a[i] !== b[i])
46
+ return false;
47
+ return true;
48
+ }
49
+ const HEX = "0123456789abcdef";
50
+ function hexId(id) {
51
+ if (typeof id === "string")
52
+ return id;
53
+ let out = "";
54
+ for (const byte of id)
55
+ out += (HEX[byte >> 4] ?? "") + (HEX[byte & 15] ?? "");
56
+ return out;
57
+ }
58
+ /** The record without the keys the TS layer handles, or `undefined` when nothing is left. */
59
+ function rest(record, keys) {
60
+ const out = Object.fromEntries(Object.entries(defined(record)).filter(([k]) => !keys.includes(k)));
61
+ return Object.keys(out).length > 0 ? out : undefined;
62
+ }
63
+ /** The raw page of a {@link Page}: freed when the page finishes, `builder-finished` afterwards. */
64
+ class LivePage {
65
+ #raw;
66
+ #onFree;
67
+ constructor(raw, onFree) {
68
+ this.#raw = raw;
69
+ this.#onFree = onFree;
70
+ }
71
+ get() {
72
+ if (this.#raw === undefined)
73
+ throw packageError("builder-finished", "the page has already finished");
74
+ return this.#raw;
75
+ }
76
+ free() {
77
+ this.#raw?.free();
78
+ this.#raw = undefined;
79
+ this.#onFree(this);
80
+ }
81
+ }
82
+ /** A path waiting to be painted: fill it, stroke it, both, or clip to it. */
83
+ export class PendingPath {
84
+ #surface;
85
+ #page;
86
+ #path;
87
+ /** @internal */
88
+ constructor(surface, page, path) {
89
+ this.#surface = surface;
90
+ this.#page = page;
91
+ this.#path = path;
92
+ }
93
+ /** Fills the path with the fill colour. @returns the surface. */
94
+ fill(rule = "nonZero") {
95
+ guard(() => this.#page.get().fillPath(this.#path, rule));
96
+ return this.#surface;
97
+ }
98
+ /** Strokes the path with the stroke colour and `style`. @returns the surface. */
99
+ stroke(style = {}) {
100
+ this.#surface.strokeStyle(style);
101
+ guard(() => this.#page.get().strokePath(this.#path));
102
+ return this.#surface;
103
+ }
104
+ /** Fills, then strokes the path. @returns the surface. */
105
+ fillStroke(rule = "nonZero", style = {}) {
106
+ this.#surface.strokeStyle(style);
107
+ guard(() => this.#page.get().fillStrokePath(this.#path, rule));
108
+ return this.#surface;
109
+ }
110
+ /** Clips what is drawn next to the path, until the next `restore`. @returns the surface. */
111
+ clip(rule = "nonZero") {
112
+ guard(() => this.#page.get().clipPath(this.#path, rule));
113
+ return this.#surface;
114
+ }
115
+ }
116
+ /**
117
+ * What a page is drawn with. Methods that set state return the surface, so calls chain; invalid
118
+ * geometry is reported by {@link Page.finish} (`invalid-geometry`).
119
+ */
120
+ export class Surface {
121
+ #builder;
122
+ #page;
123
+ /** @internal */
124
+ constructor(builder, page) {
125
+ this.#builder = builder;
126
+ this.#page = page;
127
+ }
128
+ /** Saves the graphics state (`q`). */
129
+ save() {
130
+ guard(() => this.#page.get().save());
131
+ return this;
132
+ }
133
+ /** Restores the graphics state (`Q`). */
134
+ restore() {
135
+ guard(() => this.#page.get().restore());
136
+ return this;
137
+ }
138
+ /** Applies `matrix` (page space) to what is drawn next. See {@link Matrix}. */
139
+ transform(matrix) {
140
+ guard(() => this.#page.get().transform(new Float64Array(matrix)));
141
+ return this;
142
+ }
143
+ /** The colour fills (and text) use. */
144
+ fillColor(color) {
145
+ guard(() => typeof color === "string"
146
+ ? this.#page.get().fillColorHex(color)
147
+ : this.#page.get().fillColor(new Float64Array(color)));
148
+ return this;
149
+ }
150
+ /** The colour strokes use. */
151
+ strokeColor(color) {
152
+ guard(() => typeof color === "string"
153
+ ? this.#page.get().strokeColorHex(color)
154
+ : this.#page.get().strokeColor(new Float64Array(color)));
155
+ return this;
156
+ }
157
+ /** Fill and stroke opacity, 0 to 1. */
158
+ opacity(fill, stroke) {
159
+ guard(() => this.#page.get().opacity(fill, stroke));
160
+ return this;
161
+ }
162
+ /** The blend mode. */
163
+ blendMode(mode) {
164
+ guard(() => this.#page.get().blendMode(mode));
165
+ return this;
166
+ }
167
+ /** @internal The stroke style the next stroke uses. */
168
+ strokeStyle(style) {
169
+ guard(() => this.#page
170
+ .get()
171
+ .strokeStyle(style.width ?? 1, style.cap ?? "butt", style.join ?? "miter", style.miterLimit ?? 10, new Float64Array(style.dash ?? []), style.dashPhase ?? 0));
172
+ }
173
+ /**
174
+ * A path, built by `build`, to paint.
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * surface.path((p) => p.moveTo(56, 590).lineTo(539, 590)).stroke({ width: 0.5 });
179
+ * ```
180
+ */
181
+ path(build) {
182
+ const encoder = new PathEncoder();
183
+ build(encoder);
184
+ return new PendingPath(this, this.#page, encoder.finish());
185
+ }
186
+ /**
187
+ * Draws `image` scaled into `rect`; with `alt`, as a `Figure` structure element with that
188
+ * alternate text.
189
+ */
190
+ image(image, rect, alt) {
191
+ const raw = image.in(this.#builder.glue);
192
+ const draw = () => guard(() => this.#page.get().image(raw, rect[0], rect[1], rect[2], rect[3]));
193
+ if (alt !== undefined)
194
+ return this.tag({ type: "Figure", alt }, draw);
195
+ draw();
196
+ return this;
197
+ }
198
+ /**
199
+ * Draws what `draw` draws inside the structure element `tag`: its text, paths and images
200
+ * become the element's content, elements opened inside it its children, links its `Link`
201
+ * children, in reading order. Elements and artifacts `draw` leaves open end with it, also when
202
+ * it throws. A page using an element makes the document tagged.
203
+ *
204
+ * @example
205
+ * ```ts
206
+ * s.tag("Sect", (s) => {
207
+ * s.text("Results", { font, size: 18, at: [56, 96], tag: "H1" });
208
+ * s.tag({ type: "P", lang: "en-GB" }, (s) => s.textBox(summary, { font, size: 11, box }));
209
+ * });
210
+ * ```
211
+ * @throws {@link LaminaPdfError} `invalid-argument` for an unknown type without a `role`.
212
+ */
213
+ tag(tag, draw) {
214
+ this.#begin(tag);
215
+ this.#within(draw);
216
+ return this;
217
+ }
218
+ /**
219
+ * Draws what `draw` draws as an artifact: decoration, running heads and footers, backgrounds;
220
+ * content outside the structure tree.
221
+ */
222
+ artifact(kind, draw) {
223
+ const name = checked(ARTIFACT_KINDS, kind, "kind", "not an artifact kind");
224
+ guard(() => this.#page.get().beginArtifact(name));
225
+ this.#within(draw);
226
+ return this;
227
+ }
228
+ #begin(tag) {
229
+ const t = typeof tag === "string" ? { type: tag } : tag;
230
+ const custom = !TAG_NAMES.includes(t.type) && t.role !== undefined;
231
+ const kind = custom
232
+ ? checked(TAG_NAMES, t.role ?? "", "role", "not a standard structure type")
233
+ : checked(TAG_NAMES, t.type, "type", "not a standard structure type (give a custom type a role)");
234
+ const scope = t.scope === undefined ? undefined : checked(TABLE_SCOPES, t.scope, "scope", "not a table scope");
235
+ guard(() => this.#page.get().beginTag(kind, custom ? t.type : undefined, t.alt, t.actualText, t.lang, t.expansion, scope));
236
+ }
237
+ /** Runs `draw`, then ends the element or artifact just begun. */
238
+ #within(draw) {
239
+ this.#ended(() => draw(this));
240
+ }
241
+ /**
242
+ * Runs `draw`, then ends the innermost element or artifact. When `draw` throws, its error is
243
+ * the one thrown (ending is still tried, and its own failure, a finished page, ignored).
244
+ */
245
+ #ended(draw) {
246
+ let result;
247
+ try {
248
+ result = draw();
249
+ }
250
+ catch (e) {
251
+ try {
252
+ this.#page.get().endTag();
253
+ }
254
+ catch {
255
+ // `draw`'s error is the one to report.
256
+ }
257
+ throw e;
258
+ }
259
+ guard(() => this.#page.get().endTag());
260
+ return result;
261
+ }
262
+ /** Runs `draw` inside `tag`, when there is one. */
263
+ #tagged(tag, draw) {
264
+ if (tag === undefined)
265
+ return draw();
266
+ this.#begin(tag);
267
+ return this.#ended(draw);
268
+ }
269
+ /** A link annotation over `rect`, with `contents` as its alternate text. */
270
+ link(rect, target, contents) {
271
+ guard(() => this.#page.get().link(rect[0], rect[1], rect[2], rect[3], target, contents));
272
+ return this;
273
+ }
274
+ /**
275
+ * Draws `text`: shaped, bidi-resolved, one line per line break (needs the text module).
276
+ *
277
+ * @returns what the run measures.
278
+ * @throws {@link LaminaPdfError} `text-module-not-loaded`, `missing-glyph`, `font-not-shapable`, …
279
+ */
280
+ text(text, options) {
281
+ const font = this.#builder.wasmFont(options.font);
282
+ const extra = rest(options, ["font", "size", "at", "tag"]);
283
+ return this.#tagged(options.tag, () => guard(() => this.#page.get().text(text, font, options.size, options.at[0], options.at[1], extra)));
284
+ }
285
+ /**
286
+ * Lays `text` out in `options.box`, breaking lines at Unicode line-break opportunities.
287
+ *
288
+ * @returns the lines drawn and where the overflow starts (UTF-16 offsets).
289
+ * @throws {@link LaminaPdfError} as {@link Surface.text}; `text-overflow` with `overflow: "error"`.
290
+ */
291
+ textBox(text, options) {
292
+ const font = this.#builder.wasmFont(options.font);
293
+ const [x, y, w, h] = options.box;
294
+ const extra = rest(options, ["font", "size", "box", "tag"]);
295
+ return this.#tagged(options.tag, () => guard(() => this.#page.get().textBox(text, font, options.size, x, y, w, h, extra)));
296
+ }
297
+ }
298
+ /** A page being drawn: its boxes and rotation, its {@link Surface}, then {@link Page.finish}. */
299
+ export class Page {
300
+ #page;
301
+ #surface;
302
+ /** @internal */
303
+ constructor(builder, page) {
304
+ this.#page = page;
305
+ this.#surface = new Surface(builder, this.#page);
306
+ }
307
+ /** What the page is drawn with (the same object on every call). */
308
+ surface() {
309
+ return this.#surface;
310
+ }
311
+ /** `/Rotate`: 0, 90, 180 or 270 degrees. */
312
+ rotate(degrees) {
313
+ guard(() => this.#page.get().rotate(degrees));
314
+ return this;
315
+ }
316
+ /** `/UserUnit`, for pages larger than 14,400 units. */
317
+ userUnit(unit) {
318
+ guard(() => this.#page.get().userUnit(unit));
319
+ return this;
320
+ }
321
+ /** `/CropBox` (the visible region), in the media box's page space. */
322
+ cropBox(rect) {
323
+ return this.#box("crop", rect);
324
+ }
325
+ /** `/BleedBox`. */
326
+ bleedBox(rect) {
327
+ return this.#box("bleed", rect);
328
+ }
329
+ /** `/TrimBox`. */
330
+ trimBox(rect) {
331
+ return this.#box("trim", rect);
332
+ }
333
+ /** `/ArtBox`. */
334
+ artBox(rect) {
335
+ return this.#box("art", rect);
336
+ }
337
+ #box(kind, rect) {
338
+ guard(() => this.#page.get().setBox(kind, rect[0], rect[1], rect[2], rect[3]));
339
+ return this;
340
+ }
341
+ /**
342
+ * Writes the page into its builder and frees the page's WASM side; the page takes no more
343
+ * drawing afterwards (`builder-finished`).
344
+ *
345
+ * @returns the page's ID.
346
+ * @throws {@link LaminaPdfError} `invalid-geometry`, `builder-finished`.
347
+ */
348
+ finish() {
349
+ const page = this.#page.get();
350
+ try {
351
+ return guard(() => page.finish());
352
+ }
353
+ finally {
354
+ this.#page.free();
355
+ }
356
+ }
357
+ /** Drops the page without writing it (frees its WASM side). */
358
+ free() {
359
+ this.#page.free();
360
+ }
361
+ }
362
+ /**
363
+ * Builds a new document: pages, navigation and metadata; {@link Builder.finish} returns a
364
+ * {@link Document} to save. Created in the text module when it is loaded (or `text: true`),
365
+ * else in the reading module (text, extract, then base; vector and image pages only).
366
+ *
367
+ * @example
368
+ * ```ts
369
+ * await init({ text: true });
370
+ * const b = new Builder({ producer: "my app" });
371
+ * const page = b.page("A4");
372
+ * page.surface().text("Hello, world!", { font: Font.standard("Helvetica"), size: 24, at: [72, 96] });
373
+ * page.finish();
374
+ * const bytes = b.finish().save();
375
+ * ```
376
+ */
377
+ export class Builder {
378
+ #raw;
379
+ #text;
380
+ /** Registered fonts: standard 14 by name, others by their bytes (one PDF font per distinct font). */
381
+ #fonts = new Map();
382
+ /** Pages not yet finished: freed with the builder, so they can't finish into nothing. */
383
+ #pages = new Set();
384
+ /** @internal The module the document is built in. */
385
+ glue;
386
+ /**
387
+ * @param options - version, file ID, producer, creation date, compression, tagging,
388
+ * conformance `profiles`; `text`.
389
+ * @throws {@link LaminaPdfError} `not-initialized`, `text-module-not-loaded`; `unknown-option`.
390
+ */
391
+ constructor(options = {}) {
392
+ const text = textModule();
393
+ if (options.text === true && text === undefined) {
394
+ throw packageError("text-module-not-loaded", "the text module is not loaded");
395
+ }
396
+ this.#text = options.text ?? text !== undefined;
397
+ // Without text, the reading module (text, extract, then base): the built document can then
398
+ // extract text whenever a module that extracts is loaded.
399
+ this.glue = this.#text && text !== undefined ? text : readingModule();
400
+ const glue = this.glue;
401
+ const init = rest(options, ["text", "id"]) ?? {};
402
+ const record = options.id === undefined ? init : { ...init, id: hexId(options.id) };
403
+ this.#raw = guard(() => new glue.WasmBuilder(record));
404
+ }
405
+ get #builder() {
406
+ if (this.#raw === undefined)
407
+ throw packageError("builder-finished", "the builder has already finished");
408
+ return this.#raw;
409
+ }
410
+ /** As `new Builder(options)`. */
411
+ static create(options) {
412
+ return new Builder(options);
413
+ }
414
+ /** Whether this builder draws in the text module (fonts and text). */
415
+ get hasText() {
416
+ return this.#text;
417
+ }
418
+ /** A new page of a named size or `[width, height]` in points. */
419
+ page(size = "A4") {
420
+ const [w, h] = typeof size === "string" ? namedSize(size) : size;
421
+ const raw = guard(() => this.#builder.page(w, h));
422
+ const live = new LivePage(raw, (p) => this.#pages.delete(p));
423
+ this.#pages.add(live);
424
+ return new Page(this, live);
425
+ }
426
+ /**
427
+ * Registers `font` with this builder (otherwise it is registered at first use).
428
+ *
429
+ * @throws {@link LaminaPdfError} `text-module-not-loaded`, `invalid-font`, `font-not-embeddable`.
430
+ */
431
+ font(font) {
432
+ const raw = this.wasmFont(font);
433
+ return { family: raw.family, postscriptName: raw.postscriptName, isStandard: raw.isStandard };
434
+ }
435
+ /** @internal The font in this builder's instance. */
436
+ wasmFont(font) {
437
+ const key = font.standard ?? this.#bytesKey(font.bytes ?? new Uint8Array());
438
+ let raw = this.#fonts.get(key);
439
+ if (raw !== undefined)
440
+ return raw;
441
+ if (!this.#text) {
442
+ throw packageError("text-module-not-loaded", "this builder was created without the text module");
443
+ }
444
+ const builder = this.#builder;
445
+ raw = guard(() => font.bytes !== undefined ? builder.fontBytes(font.bytes) : builder.standardFont(font.standard ?? ""));
446
+ this.#fonts.set(key, raw);
447
+ return raw;
448
+ }
449
+ /** The key of a font program already registered with equal bytes, else `bytes` itself. */
450
+ #bytesKey(bytes) {
451
+ for (const key of this.#fonts.keys()) {
452
+ if (typeof key !== "string" && sameBytes(key, bytes))
453
+ return key;
454
+ }
455
+ return bytes;
456
+ }
457
+ /** Defines the named destination `name`: page `index`, shown as `fit` (default: the page). */
458
+ destination(name, index, fit) {
459
+ guard(() => this.#builder.destination(name, index, fit));
460
+ return this;
461
+ }
462
+ /** Adds outline (bookmark) items with their children. @returns their IDs, in pre-order. */
463
+ outline(entries) {
464
+ return guard(() => this.#builder.outline(entries));
465
+ }
466
+ /** The page labels (`i, ii, 1, 2…`), ranges by first page; checked at finish. */
467
+ pageLabels(ranges) {
468
+ guard(() => this.#builder.pageLabels(ranges));
469
+ return this;
470
+ }
471
+ /** The metadata, written as the Info dictionary and an XMP packet. */
472
+ metadata(metadata) {
473
+ guard(() => this.#builder.metadata(metadata));
474
+ return this;
475
+ }
476
+ /** The natural language (`/Lang`), a BCP 47 tag. */
477
+ lang(tag) {
478
+ guard(() => this.#builder.lang(tag));
479
+ return this;
480
+ }
481
+ /**
482
+ * Attaches a file: PDF/A-3b's associated files, such as an e-invoice's XML. The same name
483
+ * again replaces the file. PDF/A-2b and PDF/A-2u refuse attachments at {@link Builder.finish},
484
+ * and every PDF/A profile refuses one without a MIME type there.
485
+ *
486
+ * @param name - the file name viewers show.
487
+ * @param bytes - the file's contents.
488
+ * @param mime - its MIME type, such as `text/xml`.
489
+ * @param options - how the file relates to the document (`relationship`, default
490
+ * `unspecified`), its `description` and `modDate`.
491
+ * @throws {@link LaminaPdfError} `invalid-argument` for a `modDate` that isn't a PDF date,
492
+ * `unknown-option` for an unknown key, `builder-finished` after {@link Builder.finish}.
493
+ */
494
+ attach(name, bytes, mime, options) {
495
+ guard(() => this.#builder.attach(name, bytes, mime, options));
496
+ return this;
497
+ }
498
+ /** How viewers present the document when it opens. */
499
+ viewerPreferences(preferences) {
500
+ guard(() => this.#builder.viewerPreferences(preferences));
501
+ return this;
502
+ }
503
+ /**
504
+ * Writes fonts, links, the page tree, outline and metadata; the builder (and its unfinished
505
+ * pages) take no more calls afterwards.
506
+ *
507
+ * @returns the new document (unsaved; its save is a full rewrite).
508
+ * @throws {@link LaminaPdfError} `page-index-out-of-range`, `unknown-destination`,
509
+ * `invalid-page-labels`, `invalid-geometry`, `subset-failed`, `builder-finished`; under a
510
+ * profile (`profiles` in the options), the first rule the document breaks, with that rule's
511
+ * code (the error reference lists them, from `profile-version-conflict` on).
512
+ */
513
+ finish() {
514
+ const builder = this.#builder;
515
+ try {
516
+ return new Document(guard(() => builder.finish()));
517
+ }
518
+ finally {
519
+ this.free();
520
+ }
521
+ }
522
+ /**
523
+ * Frees the builder's WASM memory now (`finish` does this itself); the builder takes no more
524
+ * calls afterwards. Unfinished pages are freed with {@link Page.free}.
525
+ */
526
+ free() {
527
+ for (const page of [...this.#pages])
528
+ page.free();
529
+ for (const font of this.#fonts.values())
530
+ font.free();
531
+ this.#fonts.clear();
532
+ this.#raw?.free();
533
+ this.#raw = undefined;
534
+ }
535
+ /** Frees the builder at the end of a `using` block. */
536
+ [Symbol.dispose]() {
537
+ this.free();
538
+ }
539
+ }
540
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** `record` without its `undefined` members, so the result holds under `exactOptionalPropertyTypes`. */
2
+ export declare function defined<T extends object>(record: T): {
3
+ [K in keyof T]?: Exclude<T[K], undefined>;
4
+ };
5
+ //# sourceMappingURL=defined.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defined.d.ts","sourceRoot":"","sources":["../src/defined.ts"],"names":[],"mappings":"AAGA,wGAAwG;AACxG,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;CAAE,CAIlG"}
@@ -0,0 +1,7 @@
1
+ // Records without their `undefined` members: the SDK's option objects go through it before they
2
+ // reach the WebAssembly or cross to the worker.
3
+ /** `record` without its `undefined` members, so the result holds under `exactOptionalPropertyTypes`. */
4
+ export function defined(record) {
5
+ return Object.fromEntries(Object.entries(record).filter(([, v]) => v !== undefined));
6
+ }
7
+ //# sourceMappingURL=defined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defined.js","sourceRoot":"","sources":["../src/defined.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,gDAAgD;AAEhD,wGAAwG;AACxG,MAAM,UAAU,OAAO,CAAmB,MAAS;IACjD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAElF,CAAC;AACJ,CAAC"}