pretext-pdf 2.0.2 → 2.0.14

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 (115) hide show
  1. package/CHANGELOG.md +239 -0
  2. package/dist/assets/loaders/images.d.ts.map +1 -1
  3. package/dist/assets/loaders/images.js +4 -1
  4. package/dist/assets/loaders/images.js.map +1 -1
  5. package/dist/assets/security/path-allowlist.d.ts.map +1 -1
  6. package/dist/assets/security/path-allowlist.js +10 -1
  7. package/dist/assets/security/path-allowlist.js.map +1 -1
  8. package/dist/assets/svg/resolve-content.d.ts.map +1 -1
  9. package/dist/assets/svg/resolve-content.js +4 -1
  10. package/dist/assets/svg/resolve-content.js.map +1 -1
  11. package/dist/builder.js +1 -1
  12. package/dist/builder.js.map +1 -1
  13. package/dist/compat/normalize.d.ts +13 -0
  14. package/dist/compat/normalize.d.ts.map +1 -0
  15. package/dist/compat/normalize.js +146 -0
  16. package/dist/compat/normalize.js.map +1 -0
  17. package/dist/compat/pdfmake-types.d.ts +91 -0
  18. package/dist/compat/pdfmake-types.d.ts.map +1 -0
  19. package/dist/compat/pdfmake-types.js +8 -0
  20. package/dist/compat/pdfmake-types.js.map +1 -0
  21. package/dist/compat/translate.d.ts +7 -0
  22. package/dist/compat/translate.d.ts.map +1 -0
  23. package/dist/compat/translate.js +205 -0
  24. package/dist/compat/translate.js.map +1 -0
  25. package/dist/compat.d.ts +6 -161
  26. package/dist/compat.d.ts.map +1 -1
  27. package/dist/compat.js +13 -404
  28. package/dist/compat.js.map +1 -1
  29. package/dist/fonts/bundled-paths.d.ts +13 -0
  30. package/dist/fonts/bundled-paths.d.ts.map +1 -0
  31. package/dist/fonts/bundled-paths.js +43 -0
  32. package/dist/fonts/bundled-paths.js.map +1 -0
  33. package/dist/fonts/collect-needed.d.ts +10 -0
  34. package/dist/fonts/collect-needed.d.ts.map +1 -0
  35. package/dist/fonts/collect-needed.js +85 -0
  36. package/dist/fonts/collect-needed.js.map +1 -0
  37. package/dist/fonts/collect-text.d.ts +9 -0
  38. package/dist/fonts/collect-text.d.ts.map +1 -0
  39. package/dist/fonts/collect-text.js +162 -0
  40. package/dist/fonts/collect-text.js.map +1 -0
  41. package/dist/fonts/load-bytes.d.ts +10 -0
  42. package/dist/fonts/load-bytes.d.ts.map +1 -0
  43. package/dist/fonts/load-bytes.js +56 -0
  44. package/dist/fonts/load-bytes.js.map +1 -0
  45. package/dist/fonts.d.ts +11 -10
  46. package/dist/fonts.d.ts.map +1 -1
  47. package/dist/fonts.js +17 -421
  48. package/dist/fonts.js.map +1 -1
  49. package/dist/pipeline-footnotes.d.ts +2 -2
  50. package/dist/pipeline-footnotes.d.ts.map +1 -1
  51. package/dist/pipeline-footnotes.js +5 -2
  52. package/dist/pipeline-footnotes.js.map +1 -1
  53. package/dist/pipeline.d.ts.map +1 -1
  54. package/dist/pipeline.js +9 -5
  55. package/dist/pipeline.js.map +1 -1
  56. package/dist/render-utils.d.ts +1 -7
  57. package/dist/render-utils.d.ts.map +1 -1
  58. package/dist/render-utils.js +9 -30
  59. package/dist/render-utils.js.map +1 -1
  60. package/dist/schema/document.d.ts +2115 -0
  61. package/dist/schema/document.d.ts.map +1 -0
  62. package/dist/schema/document.js +275 -0
  63. package/dist/schema/document.js.map +1 -0
  64. package/dist/schema/elements-block.d.ts +481 -0
  65. package/dist/schema/elements-block.d.ts.map +1 -0
  66. package/dist/schema/elements-block.js +155 -0
  67. package/dist/schema/elements-block.js.map +1 -0
  68. package/dist/schema/elements-media.d.ts +282 -0
  69. package/dist/schema/elements-media.d.ts.map +1 -0
  70. package/dist/schema/elements-media.js +83 -0
  71. package/dist/schema/elements-media.js.map +1 -0
  72. package/dist/schema/elements-table.d.ts +134 -0
  73. package/dist/schema/elements-table.d.ts.map +1 -0
  74. package/dist/schema/elements-table.js +60 -0
  75. package/dist/schema/elements-table.js.map +1 -0
  76. package/dist/schema/elements-text.d.ts +782 -0
  77. package/dist/schema/elements-text.d.ts.map +1 -0
  78. package/dist/schema/elements-text.js +260 -0
  79. package/dist/schema/elements-text.js.map +1 -0
  80. package/dist/schema/shared.d.ts +84 -0
  81. package/dist/schema/shared.d.ts.map +1 -0
  82. package/dist/schema/shared.js +29 -0
  83. package/dist/schema/shared.js.map +1 -0
  84. package/dist/schema.d.ts +10 -2116
  85. package/dist/schema.d.ts.map +1 -1
  86. package/dist/schema.js +10 -852
  87. package/dist/schema.js.map +1 -1
  88. package/dist/types-public/document.d.ts +99 -101
  89. package/dist/types-public/document.d.ts.map +1 -1
  90. package/dist/validate/document.d.ts.map +1 -1
  91. package/dist/validate/document.js +5 -1
  92. package/dist/validate/document.js.map +1 -1
  93. package/dist/validate/elements/media.d.ts.map +1 -1
  94. package/dist/validate/elements/media.js +14 -0
  95. package/dist/validate/elements/media.js.map +1 -1
  96. package/dist/validate/helpers.d.ts +6 -6
  97. package/dist/validate/helpers.d.ts.map +1 -1
  98. package/dist/validate/helpers.js +7 -7
  99. package/dist/validate/helpers.js.map +1 -1
  100. package/dist/vendor/pretext/VERSION.d.ts +2 -2
  101. package/dist/vendor/pretext/VERSION.js +2 -2
  102. package/dist/vendor/pretext/layout.d.ts.map +1 -1
  103. package/dist/vendor/pretext/layout.js +90 -15
  104. package/dist/vendor/pretext/layout.js.map +1 -1
  105. package/dist/vendor/pretext/line-text.d.ts.map +1 -1
  106. package/dist/vendor/pretext/line-text.js +4 -5
  107. package/dist/vendor/pretext/line-text.js.map +1 -1
  108. package/dist/vendor/pretext/measurement.d.ts +2 -1
  109. package/dist/vendor/pretext/measurement.d.ts.map +1 -1
  110. package/dist/vendor/pretext/measurement.js +14 -18
  111. package/dist/vendor/pretext/measurement.js.map +1 -1
  112. package/dist/vendor/pretext/rich-inline.d.ts.map +1 -1
  113. package/dist/vendor/pretext/rich-inline.js +31 -42
  114. package/dist/vendor/pretext/rich-inline.js.map +1 -1
  115. package/package.json +1 -1
package/dist/fonts.js CHANGED
@@ -1,104 +1,46 @@
1
+ /**
2
+ * Font loading, embedding, and subsetting.
3
+ * Public exports: loadFonts (pipeline stage 2), collectTextByFont (subsetting pre-pass).
4
+ *
5
+ * Implementation split across src/fonts/:
6
+ * bundled-paths.ts — IS_NODE, __dirname, resolveInterFile, BUNDLED_INTER_*_PATHS
7
+ * load-bytes.ts — loadFontBytes (file / Uint8Array / bundled-Inter loader)
8
+ * collect-needed.ts — collectNeededFonts (document font-variant scanner)
9
+ * collect-text.ts — collectTextByFont (text-by-font map for font subsetting)
10
+ */
1
11
  import { PDFDocument } from '@cantoo/pdf-lib';
2
12
  import fontkit from '@pdf-lib/fontkit';
3
- import fs from 'fs';
4
- import path from 'path';
5
- import { fileURLToPath } from 'url';
6
- import { createRequire } from 'module';
7
13
  import { PretextPdfError } from './errors.js';
8
14
  import { buildFontKey } from './font-key.js';
9
- import { assertPathAllowed } from './assets.js';
10
- // Browser detection. The bundled-font paths below depend on Node-only APIs
11
- // (fileURLToPath, createRequire, fs). In a browser, these are guarded so that
12
- // import-time evaluation never throws and consumers must supply fonts via doc.fonts.
13
- const IS_NODE = typeof window === 'undefined' && typeof process !== 'undefined' && !!(process.versions?.node);
14
- const __dirname = IS_NODE ? path.dirname(fileURLToPath(import.meta.url)) : '';
15
- const _require = IS_NODE ? createRequire(import.meta.url) : null;
16
- /**
17
- * Font loading strategy:
18
- * - TTF files for pdf-lib embedding (fontkit handles TTF natively, woff2 has glyph corruption bugs)
19
- * - woff2 for @napi-rs/canvas measurement (canvas handles woff2 perfectly via Skia)
20
- *
21
- * TTF priority: bundled fonts/ dir first, then @fontsource woff2 as fallback
22
- *
23
- * NOTE: @fontsource/inter is resolved via createRequire to handle npm hoisting correctly.
24
- * When pretext-pdf is installed as a package, @fontsource/inter is hoisted to the
25
- * consumer's node_modules, NOT to node_modules/pretext-pdf/node_modules/@fontsource/inter.
26
- * path.join(__dirname, '..', 'node_modules', ...) would fail in that case.
27
- */
28
- function resolveInterFile(filename) {
29
- if (!_require)
30
- return null;
31
- try {
32
- const pkgJson = _require.resolve('@fontsource/inter/package.json');
33
- return path.join(path.dirname(pkgJson), 'files', filename);
34
- }
35
- catch {
36
- return null;
37
- }
38
- }
39
- /** Path to bundled Inter 400 normal font — TTF preferred for pdf-lib (Node only) */
40
- const BUNDLED_INTER_PATHS = IS_NODE ? [
41
- path.join(__dirname, '..', 'fonts', 'Inter-Regular.ttf'),
42
- resolveInterFile('inter-latin-400-normal.woff2'),
43
- resolveInterFile('inter-all-400-normal.woff2'),
44
- ].filter(Boolean) : [];
45
- /** Path to bundled Inter 700 (bold) font — TTF preferred for pdf-lib (Node only) */
46
- const BUNDLED_INTER_BOLD_PATHS = IS_NODE ? [
47
- path.join(__dirname, '..', 'fonts', 'Inter-Bold.ttf'),
48
- resolveInterFile('inter-latin-700-normal.woff2'),
49
- resolveInterFile('inter-all-700-normal.woff2'),
50
- ].filter(Boolean) : [];
51
- /** Path to bundled Inter 400 italic font */
52
- const BUNDLED_INTER_ITALIC_PATHS = IS_NODE ? [
53
- path.join(__dirname, '..', 'fonts', 'Inter-Italic.ttf'),
54
- resolveInterFile('inter-latin-400-italic.woff2'),
55
- resolveInterFile('inter-all-400-italic.woff2'),
56
- ].filter(Boolean) : [];
57
- /** Path to bundled Inter 700 italic font */
58
- const BUNDLED_INTER_BOLD_ITALIC_PATHS = IS_NODE ? [
59
- path.join(__dirname, '..', 'fonts', 'Inter-BoldItalic.ttf'),
60
- resolveInterFile('inter-latin-700-italic.woff2'),
61
- resolveInterFile('inter-all-700-italic.woff2'),
62
- ].filter(Boolean) : [];
15
+ import { collectNeededFonts } from './fonts/collect-needed.js';
16
+ import { loadFontBytes } from './fonts/load-bytes.js';
17
+ import { collectTextByFont } from './fonts/collect-text.js';
18
+ export { collectTextByFont } from './fonts/collect-text.js';
63
19
  /**
64
20
  * Stage 2: Load and embed all fonts.
65
21
  * - Scans document for all font references
66
22
  * - Loads font bytes (file system or Uint8Array)
67
23
  * - Embeds each into pdfDoc via fontkit
68
24
  * - Returns FontMap for use in measure + render stages
69
- *
70
- * NOTE: pdfDoc is already created by the caller. Fonts are embedded into it here.
71
- * The same pdfDoc is used in Stage 5 (render).
72
25
  */
73
26
  export async function loadFonts(doc, pdfDoc) {
74
27
  pdfDoc.registerFontkit(fontkit);
75
28
  const fontMap = new Map();
76
29
  const defaultFamily = doc.defaultFont ?? 'Inter';
77
- // Collect all font variants referenced in the document
78
30
  const needed = collectNeededFonts(doc);
79
- // Always ensure Inter 400 is available as the default fallback
80
31
  if (!needed.has(buildFontKey('Inter', 400, 'normal'))) {
81
- needed.set(buildFontKey('Inter', 400, 'normal'), {
82
- family: 'Inter', weight: 400, style: 'normal', src: 'bundled'
83
- });
32
+ needed.set(buildFontKey('Inter', 400, 'normal'), { family: 'Inter', weight: 400, style: 'normal', src: 'bundled' });
84
33
  }
85
34
  if (!needed.has(buildFontKey('Inter', 700, 'normal'))) {
86
- needed.set(buildFontKey('Inter', 700, 'normal'), {
87
- family: 'Inter', weight: 700, style: 'normal', src: 'bundled'
88
- });
35
+ needed.set(buildFontKey('Inter', 700, 'normal'), { family: 'Inter', weight: 700, style: 'normal', src: 'bundled' });
89
36
  }
90
- // Load all font bytes in parallel
91
37
  const loadPromises = Array.from(needed.entries()).map(async ([key, spec]) => {
92
38
  const bytes = await loadFontBytes(spec, doc.allowedFileDirs);
93
39
  return { key, bytes, spec };
94
40
  });
95
41
  const loaded = await Promise.all(loadPromises);
96
- // Embed each font into pdfDoc (must be sequential — pdf-lib limitation)
97
42
  for (const { key, bytes, spec } of loaded) {
98
43
  try {
99
- // Use fontkit's built-in subsetting for TTF fonts.
100
- // TTF magic bytes: 0x00010000 (TrueType) or 0x74727565 ('true').
101
- // woff2 starts with 0x774F4632 — fontkit has a known subsetting bug for woff2.
102
44
  const isTTF = bytes.length >= 4 && ((bytes[0] === 0x00 && bytes[1] === 0x01 && bytes[2] === 0x00 && bytes[3] === 0x00) ||
103
45
  (bytes[0] === 0x74 && bytes[1] === 0x72 && bytes[2] === 0x75 && bytes[3] === 0x65));
104
46
  const pdfFont = await pdfDoc.embedFont(bytes, { subset: isTTF });
@@ -108,9 +50,6 @@ export async function loadFonts(doc, pdfDoc) {
108
50
  throw new PretextPdfError('FONT_EMBED_FAILED', `Failed to embed font "${spec.family ?? key}": ${err instanceof Error ? err.message : String(err)}`);
109
51
  }
110
52
  }
111
- // Pre-compute font subsets by encoding all document text.
112
- // Calling pdfFont.encodeText() registers glyph IDs into the subset table
113
- // before pdfDoc.save(), producing smaller and faster-to-save PDFs.
114
53
  const textByFont = collectTextByFont(doc);
115
54
  for (const [key, text] of textByFont) {
116
55
  const pdfFont = fontMap.get(key);
@@ -123,356 +62,13 @@ export async function loadFonts(doc, pdfDoc) {
123
62
  }
124
63
  }
125
64
  }
126
- // Set default font
127
65
  const defaultKey = buildFontKey(defaultFamily, 400, 'normal');
128
66
  if (!fontMap.has(defaultKey)) {
129
- // Default font wasn't explicitly added — try Inter as fallback
130
67
  const interKey = buildFontKey('Inter', 400, 'normal');
131
68
  const interFont = fontMap.get(interKey);
132
- if (interFont) {
69
+ if (interFont)
133
70
  fontMap.set(defaultKey, interFont);
134
- }
135
71
  }
136
72
  return fontMap;
137
73
  }
138
- /**
139
- * Scan document to collect every unique font variant needed.
140
- * Returns a Map from fontKey → FontSpec-like descriptor.
141
- */
142
- function collectNeededFonts(doc) {
143
- const needed = new Map();
144
- const defaultFamily = doc.defaultFont ?? 'Inter';
145
- // Build lookup from user-provided fonts
146
- const userFonts = new Map();
147
- for (const f of doc.fonts ?? []) {
148
- const key = buildFontKey(f.family, f.weight ?? 400, f.style ?? 'normal');
149
- userFonts.set(key, f);
150
- }
151
- const addFont = (family, weight, style) => {
152
- const key = buildFontKey(family, weight, style);
153
- if (needed.has(key))
154
- return;
155
- const userFont = userFonts.get(key);
156
- if (userFont) {
157
- needed.set(key, { ...userFont, src: userFont.src });
158
- }
159
- else if (family === 'Inter') {
160
- needed.set(key, { family, weight, style, src: 'bundled' });
161
- }
162
- else {
163
- // Font variant referenced but not in doc.fonts.
164
- // validate() should have caught this — if we reach here it's a bug in the validation layer.
165
- throw new PretextPdfError('FONT_EMBED_FAILED', `Font variant "${key}" is required by the document but was not found in doc.fonts and is not a bundled variant. This is a bug — font validation should have caught this.`);
166
- }
167
- };
168
- // Default font always needed
169
- addFont(defaultFamily, 400, 'normal');
170
- // Scan content — collect every font variant referenced by every element type
171
- for (const el of doc.content) {
172
- if (el.type === 'paragraph') {
173
- const family = el.fontFamily ?? defaultFamily;
174
- const weight = el.fontWeight ?? 400;
175
- addFont(family, weight, 'normal');
176
- }
177
- else if (el.type === 'heading') {
178
- const family = el.fontFamily ?? defaultFamily;
179
- const weight = el.fontWeight ?? 700;
180
- addFont(family, weight, 'normal');
181
- }
182
- else if (el.type === 'code') {
183
- addFont(el.fontFamily, 400, 'normal');
184
- }
185
- else if (el.type === 'rich-paragraph') {
186
- for (const span of el.spans) {
187
- addFont(span.fontFamily ?? defaultFamily, span.fontWeight ?? 400, span.fontStyle ?? 'normal');
188
- }
189
- }
190
- else if (el.type === 'list') {
191
- for (const item of el.items) {
192
- if ((item.fontWeight ?? 400) === 700)
193
- addFont(defaultFamily, 700, 'normal');
194
- for (const nested of item.items ?? []) {
195
- if ((nested.fontWeight ?? 400) === 700)
196
- addFont(defaultFamily, 700, 'normal');
197
- }
198
- }
199
- }
200
- else if (el.type === 'table') {
201
- // Table cells can use bold (headers) or custom weights
202
- addFont(defaultFamily, 400, 'normal');
203
- for (const row of el.rows) {
204
- for (const cell of row.cells) {
205
- const cellFamily = cell.fontFamily ?? defaultFamily;
206
- const cellWeight = cell.fontWeight ?? (row.isHeader ? 700 : 400);
207
- addFont(cellFamily, cellWeight, 'normal');
208
- }
209
- if (row.isHeader)
210
- addFont(defaultFamily, 700, 'normal');
211
- }
212
- }
213
- else if (el.type === 'blockquote') {
214
- const family = el.fontFamily ?? defaultFamily;
215
- const weight = el.fontWeight ?? 400;
216
- const style = el.fontStyle ?? 'normal';
217
- addFont(family, weight, style);
218
- }
219
- else if (el.type === 'image' && el.floatFontFamily) {
220
- addFont(el.floatFontFamily, 400, 'normal');
221
- }
222
- else if (el.type === 'footnote-def') {
223
- const family = el.fontFamily ?? defaultFamily;
224
- addFont(family, 400, 'normal');
225
- }
226
- // spacer, image, hr, page-break use default font (already added)
227
- }
228
- // Header/footer fonts
229
- if (doc.header) {
230
- const family = doc.header.fontFamily ?? defaultFamily;
231
- addFont(family, doc.header.fontWeight ?? 400, 'normal');
232
- }
233
- if (doc.footer) {
234
- const family = doc.footer.fontFamily ?? defaultFamily;
235
- addFont(family, doc.footer.fontWeight ?? 400, 'normal');
236
- }
237
- // Watermark font (text watermark only)
238
- if (doc.watermark?.text) {
239
- const family = doc.watermark.fontFamily ?? defaultFamily;
240
- addFont(family, doc.watermark.fontWeight ?? 400, 'normal');
241
- }
242
- return needed;
243
- }
244
- /** Load font bytes from file path, Uint8Array, or bundled Inter */
245
- async function loadFontBytes(spec, allowedFileDirs) {
246
- if (spec.src instanceof Uint8Array) {
247
- return spec.src;
248
- }
249
- if (spec.src === 'bundled') {
250
- if (!IS_NODE) {
251
- throw new PretextPdfError('FONT_LOAD_FAILED', `Bundled Inter font is not available in the browser. Supply font bytes via doc.fonts: [{ family: 'Inter', weight: 400, src: <Uint8Array> }, { family: 'Inter', weight: 700, src: <Uint8Array> }]`);
252
- }
253
- const weight = spec.weight ?? 400;
254
- const style = spec.style ?? 'normal';
255
- let paths;
256
- if (style === 'italic') {
257
- paths = weight >= 600 ? BUNDLED_INTER_BOLD_ITALIC_PATHS : BUNDLED_INTER_ITALIC_PATHS;
258
- }
259
- else {
260
- paths = weight >= 600 ? BUNDLED_INTER_BOLD_PATHS : BUNDLED_INTER_PATHS;
261
- }
262
- for (const p of paths) {
263
- if (fs.existsSync(p)) {
264
- try {
265
- const buffer = fs.readFileSync(p);
266
- return new Uint8Array(buffer);
267
- }
268
- catch {
269
- // Try next
270
- }
271
- }
272
- }
273
- throw new PretextPdfError('FONT_LOAD_FAILED', `Bundled Inter font not found. Make sure @fontsource/inter is installed: npm install @fontsource/inter`);
274
- }
275
- // Browser context cannot read local file paths — only Uint8Array is supported
276
- if (!IS_NODE) {
277
- throw new PretextPdfError('FONT_LOAD_FAILED', `Font path "${spec.src}" is a string, but file paths cannot be read in the browser. Fetch the font yourself and pass the bytes as a Uint8Array in doc.fonts[].src.`);
278
- }
279
- // String path — relative paths will likely fail on different working directories
280
- if (!path.isAbsolute(spec.src)) {
281
- throw new PretextPdfError('FONT_LOAD_FAILED', `Font path "${spec.src}" is relative. Use an absolute path (e.g. path.join(__dirname, 'fonts/Roboto.ttf')) to avoid resolution issues.`);
282
- }
283
- const resolvedSrc = path.resolve(spec.src);
284
- // Path traversal guard — delegates to shared assertPathAllowed (assets/security/path-allowlist.ts)
285
- assertPathAllowed(resolvedSrc, allowedFileDirs, 'Font');
286
- if (!fs.existsSync(resolvedSrc)) {
287
- throw new PretextPdfError('FONT_LOAD_FAILED', `Font file not found: "${path.basename(spec.src)}". Check the path in doc.fonts[].src.`);
288
- }
289
- try {
290
- const buffer = fs.readFileSync(resolvedSrc);
291
- return new Uint8Array(buffer);
292
- }
293
- catch (err) {
294
- throw new PretextPdfError('FONT_LOAD_FAILED', `Failed to read font file "${path.basename(spec.src)}": ${err instanceof Error ? err.message : String(err)}`);
295
- }
296
- }
297
- /**
298
- * Walk all content elements + header/footer and collect text strings grouped by font key.
299
- * Used by font subsetting to determine which glyphs each font needs.
300
- *
301
- * Returns: Map<fontKey, concatenated text string>
302
- */
303
- export function collectTextByFont(doc) {
304
- const defaultFont = doc.defaultFont ?? 'Inter';
305
- const textSets = new Map();
306
- function addText(fontKey, text) {
307
- if (!textSets.has(fontKey))
308
- textSets.set(fontKey, new Set());
309
- textSets.get(fontKey).add(text);
310
- }
311
- for (const el of doc.content) {
312
- switch (el.type) {
313
- case 'paragraph': {
314
- const key = buildFontKey(el.fontFamily ?? defaultFont, el.fontWeight ?? 400, 'normal');
315
- addText(key, el.text);
316
- break;
317
- }
318
- case 'heading': {
319
- const key = buildFontKey(el.fontFamily ?? defaultFont, el.fontWeight ?? 700, 'normal');
320
- addText(key, el.text);
321
- break;
322
- }
323
- case 'blockquote': {
324
- const key = buildFontKey(el.fontFamily ?? defaultFont, el.fontWeight ?? 400, el.fontStyle ?? 'normal');
325
- addText(key, el.text);
326
- break;
327
- }
328
- case 'code': {
329
- const key = buildFontKey(el.fontFamily, 400, 'normal');
330
- addText(key, el.text);
331
- break;
332
- }
333
- case 'rich-paragraph': {
334
- for (const span of el.spans) {
335
- const key = buildFontKey(span.fontFamily ?? defaultFont, span.fontWeight ?? 400, span.fontStyle ?? 'normal');
336
- addText(key, span.text);
337
- }
338
- break;
339
- }
340
- case 'table': {
341
- for (const row of el.rows) {
342
- for (const cell of row.cells) {
343
- const key = buildFontKey(cell.fontFamily ?? defaultFont, cell.fontWeight ?? (row.isHeader ? 700 : 400), 'normal');
344
- addText(key, cell.text);
345
- }
346
- }
347
- break;
348
- }
349
- case 'list': {
350
- // List marker characters: bullets (•, ◦) for unordered, digits+dot for ordered
351
- const listFont = buildFontKey(defaultFont, 400, 'normal');
352
- if (el.style === 'ordered') {
353
- addText(listFont, '0123456789.');
354
- }
355
- else {
356
- addText(listFont, el.marker ?? '•');
357
- addText(listFont, '◦'); // nested unordered uses hollow bullet
358
- }
359
- const collectItems = (items) => {
360
- for (const item of items) {
361
- const key = buildFontKey(defaultFont, item.fontWeight ?? 400, 'normal');
362
- addText(key, item.text);
363
- if (item.items)
364
- collectItems(item.items);
365
- }
366
- };
367
- collectItems(el.items);
368
- break;
369
- }
370
- case 'footnote-def': {
371
- const key = buildFontKey(el.fontFamily ?? defaultFont, 400, 'normal');
372
- addText(key, el.text);
373
- break;
374
- }
375
- // Note: 'toc-entry' is intentionally not handled here. TocEntryElement is an
376
- // internal synthesized type (not in the public ContentElement union) and
377
- // never appears in user-supplied doc.content. TOC entry glyphs (digits,
378
- // leader chars) are collected separately during the measurement pass.
379
- case 'callout': {
380
- const key = buildFontKey(el.fontFamily ?? defaultFont, el.fontWeight ?? 400, 'normal');
381
- addText(key, el.content);
382
- if (el.title) {
383
- const titleKey = buildFontKey(el.fontFamily ?? defaultFont, 700, 'normal');
384
- addText(titleKey, el.title);
385
- }
386
- break;
387
- }
388
- case 'form-field': {
389
- const key = buildFontKey(defaultFont, 400, 'normal');
390
- if (el.label)
391
- addText(key, el.label);
392
- if (el.fieldType === 'text') {
393
- if (el.placeholder)
394
- addText(key, el.placeholder);
395
- if (typeof el.defaultValue === 'string')
396
- addText(key, el.defaultValue);
397
- }
398
- if (el.fieldType === 'radio' || el.fieldType === 'dropdown') {
399
- for (const opt of el.options)
400
- addText(key, opt.label);
401
- }
402
- break;
403
- }
404
- case 'float-group': {
405
- // Float-group contains multiple content elements — collect text from each
406
- for (const contentEl of el.content) {
407
- if (contentEl.type === 'paragraph') {
408
- const key = buildFontKey(contentEl.fontFamily ?? defaultFont, contentEl.fontWeight ?? 400, 'normal');
409
- addText(key, contentEl.text);
410
- }
411
- else if (contentEl.type === 'heading') {
412
- const key = buildFontKey(contentEl.fontFamily ?? defaultFont, contentEl.fontWeight ?? 700, 'normal');
413
- addText(key, contentEl.text);
414
- }
415
- else if (contentEl.type === 'rich-paragraph') {
416
- for (const span of contentEl.spans) {
417
- const key = buildFontKey(span.fontFamily ?? defaultFont, span.fontWeight ?? 400, span.fontStyle ?? 'normal');
418
- addText(key, span.text);
419
- }
420
- }
421
- }
422
- break;
423
- }
424
- // spacer, hr, page-break, image, chart, barcode, qr, float-group (already
425
- // handled above), svg, comment, toc-entry (internal): no text to collect.
426
- // The explicit default arm ensures newly-added element types surface
427
- // here at compile-time rather than silently skipping glyph collection.
428
- default:
429
- break;
430
- }
431
- }
432
- // Header/footer: include static text + digits for {{pageNumber}}/{{totalPages}} expansion
433
- const DIGITS = '0123456789';
434
- if (doc.header) {
435
- const key = buildFontKey(doc.header.fontFamily ?? defaultFont, doc.header.fontWeight ?? 400, 'normal');
436
- addText(key, doc.header.text + DIGITS);
437
- }
438
- if (doc.footer) {
439
- const key = buildFontKey(doc.footer.fontFamily ?? defaultFont, doc.footer.fontWeight ?? 400, 'normal');
440
- addText(key, doc.footer.text + DIGITS);
441
- }
442
- // Section-specific header/footer overrides (per-page-range)
443
- if (doc.sections) {
444
- for (const section of doc.sections) {
445
- if (section.header) {
446
- const key = buildFontKey(section.header.fontFamily ?? defaultFont, section.header.fontWeight ?? 400, 'normal');
447
- addText(key, section.header.text + DIGITS);
448
- }
449
- if (section.footer) {
450
- const key = buildFontKey(section.footer.fontFamily ?? defaultFont, section.footer.fontWeight ?? 400, 'normal');
451
- addText(key, section.footer.text + DIGITS);
452
- }
453
- }
454
- }
455
- // Watermark text (if present)
456
- if (doc.watermark?.text) {
457
- const key = buildFontKey(doc.watermark.fontFamily ?? defaultFont, doc.watermark.fontWeight ?? 400, 'normal');
458
- addText(key, doc.watermark.text);
459
- }
460
- // Signature placeholder (renders labels + user text using Inter-400-normal)
461
- if (doc.signature) {
462
- const sigKey = buildFontKey(defaultFont, 400, 'normal');
463
- addText(sigKey, 'Signed by: Signature Date');
464
- if (doc.signature.signerName)
465
- addText(sigKey, doc.signature.signerName);
466
- if (doc.signature.reason)
467
- addText(sigKey, doc.signature.reason);
468
- if (doc.signature.location)
469
- addText(sigKey, doc.signature.location);
470
- }
471
- // Concatenate all text for each font key into one string
472
- const result = new Map();
473
- for (const [key, texts] of textSets) {
474
- result.set(key, Array.from(texts).join(''));
475
- }
476
- return result;
477
- }
478
74
  //# sourceMappingURL=fonts.js.map
package/dist/fonts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { ContentElement } from './types-public/index.js';
2
2
  import type { MeasuredBlock, PaginatedDocument } from './types-internal.js';
3
3
  /** Build document-order footnote numbering by scanning rich-paragraphs in content order. */
4
- export declare function buildFootnoteNumbering(content: ContentElement[]): Map<string, number>;
4
+ export declare function buildFootnoteNumbering(content: readonly ContentElement[]): Map<string, number>;
5
5
  /**
6
6
  * Two-pass footnote pagination.
7
7
  *
@@ -13,6 +13,6 @@ export declare function runFootnoteTwoPass(measuredBlocks: MeasuredBlock[], cont
13
13
  minOrphanLines: number;
14
14
  minWidowLines: number;
15
15
  }, doc: {
16
- content: ContentElement[];
16
+ content: readonly ContentElement[];
17
17
  }): PaginatedDocument;
18
18
  //# sourceMappingURL=pipeline-footnotes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-footnotes.d.ts","sourceRoot":"","sources":["../src/pipeline-footnotes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,yBAAyB,CAAA;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAM3E,4FAA4F;AAC5F,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAarF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,aAAa,EAAE,EAC/B,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EACjE,GAAG,EAAE;IAAE,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,GACjC,iBAAiB,CAiFnB"}
1
+ {"version":3,"file":"pipeline-footnotes.d.ts","sourceRoot":"","sources":["../src/pipeline-footnotes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,yBAAyB,CAAA;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAM3E,4FAA4F;AAC5F,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAa9F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,aAAa,EAAE,EAC/B,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EACjE,GAAG,EAAE;IAAE,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,GAC1C,iBAAiB,CAuFnB"}
@@ -85,8 +85,11 @@ export function runFootnoteTwoPass(measuredBlocks, contentHeight, paginateConfig
85
85
  page.footnoteItems = refIds
86
86
  .map(id => {
87
87
  const def = footnoteDefElements.find(d => d.id === id);
88
- const num = footnoteNumbering.get(id) ?? 0;
89
- return def ? { def, number: num } : null;
88
+ const rawNum = footnoteNumbering.get(id);
89
+ if (rawNum === undefined) {
90
+ throw new PretextPdfError('PAGINATION_FAILED', `Footnote ref "${id}" has no assigned number — doc.content may have been mutated between pipeline stages`);
91
+ }
92
+ return def ? { def, number: rawNum } : null;
90
93
  })
91
94
  .filter(Boolean);
92
95
  const zoneHeight = footnoteZones.get(pageIdx);
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-footnotes.js","sourceRoot":"","sources":["../src/pipeline-footnotes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-footnotes.js","sourceRoot":"","sources":["../src/pipeline-footnotes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,gBAAgB,GAAG,EAAE,CAAA,CAAE,uCAAuC;AAEpE,4FAA4F;AAC5F,MAAM,UAAU,sBAAsB,CAAC,OAAkC;IACvE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC3C,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBACzD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,cAA+B,EAC/B,aAAqB,EACrB,cAAiE,EACjE,GAA2C;IAE3C,MAAM,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAC5C,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CACT,CAAA;IAEzB,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC,cAAc,EAAE,aAAa,EAAE,cAAc,CAAC,CAAA;IAChE,CAAC;IAED,+EAA+E;IAC/E,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAA;IACtD,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,OAA6B,CAAA;YAC/C,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;IAEhF,uFAAuF;IACvF,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAE7D,yDAAyD;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAA;IAEjE,mDAAmD;IACnD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoB,CAAA;IACpD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAE,CAAA;QAClC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;QACvC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,EAAE,GAAG,UAAU,CAAC,aAAa,CAAC,OAAO,CAAA;YAC3C,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACjC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;oBAC5B,IAAI,IAAI,CAAC,WAAW;wBAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC3D,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC/C,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjD,IAAI,UAAU,GAAG,gBAAgB,CAAA;QACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,UAAU,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACpD,CAAC;QACD,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IACxC,CAAC;IAED,uCAAuC;IACvC,MAAM,WAAW,GAAG,EAAE,GAAG,cAAc,EAAE,aAAa,EAAE,CAAA;IACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,CAAA;IACrE,YAAY,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;IAElD,qDAAqD;IACrD,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjD,IAAI,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,mCAAmC,OAAO,0BAA0B,YAAY,CAAC,KAAK,CAAC,MAAM,mCAAmC,CAAC,CAAA;QAClL,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAE,CAAA;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,mCAAmC,OAAO,0BAA0B,YAAY,CAAC,KAAK,CAAC,MAAM,mCAAmC,CAAC,CAAA;QAClL,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,MAAM;aACxB,GAAG,CAAC,EAAE,CAAC,EAAE;YACR,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;YACtD,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,eAAe,CACvB,mBAAmB,EACnB,iBAAiB,EAAE,sFAAsF,CAC1G,CAAA;YACH,CAAC;YACD,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QAC7C,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAuD,CAAA;QACxE,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC7C,IAAI,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAA;IACpE,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyB,MAAM,iBAAiB,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAW,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAUzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAI5D,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAE7E;AAID,wBAAsB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,cAAc,GAAG,cAAc,CAAC,CAAA;IAC1E,WAAW,EAAE,MAAM,CAAA;CACpB,CAAC,CA6DD;AAID,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,EAAE,EACxD,MAAM,CAAC,EAAE,OAAO,yBAAyB,EAAE,MAAM,GAChD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAKnD;AAID,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,cAAc,GAAG,cAAc,CAAC,EACjF,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAiCvB;AAID,wBAAsB,YAAY,CAChC,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,EAAE,GACvD,OAAO,CAAC,aAAa,EAAE,CAAC,CAI1B;AAID,wBAAgB,aAAa,CAC3B,cAAc,EAAE,aAAa,EAAE,EAC/B,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,WAAW,GACf,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAGvC;AAID,wBAAsB,WAAW,CAC/B,YAAY,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,EAC9C,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,YAAY,EACjB,OAAO,CAAC,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,EAAE,EACxD,MAAM,CAAC,EAAE,OAAO,yBAAyB,EAAE,MAAM,GAChD,OAAO,CAAC,UAAU,CAAC,CAErB;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBhG"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoC,MAAM,iBAAiB,CAAA;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAW,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAUzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAI5D,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAE7E;AAID,wBAAsB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,cAAc,GAAG,cAAc,CAAC,CAAA;IAC1E,WAAW,EAAE,MAAM,CAAA;CACpB,CAAC,CAiED;AAID,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,EAAE,EACxD,MAAM,CAAC,EAAE,OAAO,yBAAyB,EAAE,MAAM,GAChD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAKnD;AAID,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,cAAc,GAAG,cAAc,CAAC,EACjF,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAiCvB;AAID,wBAAsB,YAAY,CAChC,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,EAAE,GACvD,OAAO,CAAC,aAAa,EAAE,CAAC,CAI1B;AAID,wBAAgB,aAAa,CAC3B,cAAc,EAAE,aAAa,EAAE,EAC/B,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,WAAW,GACf,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAGvC;AAID,wBAAsB,WAAW,CAC/B,YAAY,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,EAC9C,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,YAAY,EACjB,OAAO,CAAC,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,EAAE,EACxD,MAAM,CAAC,EAAE,OAAO,yBAAyB,EAAE,MAAM,GAChD,OAAO,CAAC,UAAU,CAAC,CAErB;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBhG"}
package/dist/pipeline.js CHANGED
@@ -1,4 +1,4 @@
1
- import { PDFDocument, PDFHexString, PDFName } from '@cantoo/pdf-lib';
1
+ import { PDFDocument, PDFHexString, PDFName, PDFString } from '@cantoo/pdf-lib';
2
2
  import { PretextPdfError } from './errors.js';
3
3
  import { resolvePageDimensions } from './page-sizes.js';
4
4
  import { validate } from './validate/index.js';
@@ -30,9 +30,11 @@ export async function stageInit(doc) {
30
30
  if (doc.metadata) {
31
31
  const m = doc.metadata;
32
32
  if (m.language) {
33
- // Lang lives in the catalog, not Info dict always write it first.
34
- // PDFHexString encodes as <hex> immune to unbalanced-parenthesis injection.
35
- pdfDoc.catalog.set(PDFName.of('Lang'), PDFHexString.of(m.language));
33
+ // /Lang is a text string per PDF 32000 §14.9.2. PDFString (literal string) is correct
34
+ // here matching pdf-lib's own setLanguage() behavior. BCP47 tags are validated to
35
+ // ASCII letters/digits/hyphens only (no parentheses), so literal-string injection risk
36
+ // is zero. PDFHexString.fromText() would add a UTF-16 BOM that some readers misparse.
37
+ pdfDoc.catalog.set(PDFName.of('Lang'), PDFString.of(m.language));
36
38
  }
37
39
  // Write all Info dict entries via PDFHexString to prevent PDF literal-string
38
40
  // injection through unbalanced parentheses in user-controlled content (B3).
@@ -58,7 +60,9 @@ export async function stageInit(doc) {
58
60
  if (m.semantic)
59
61
  infoDict.set(PDFName.of('Semantic'), PDFHexString.fromText(JSON.stringify(m.semantic)));
60
62
  }
61
- catch {
63
+ catch (err) {
64
+ // getInfoDict() is not part of the official @cantoo/pdf-lib API surface — log before falling back.
65
+ console.warn('[pretext-pdf] metadata write via PDFHexString failed, using fallback:', err instanceof Error ? err.message : String(err));
62
66
  // Fallback: convenience methods may use literal strings but are better than no metadata.
63
67
  if (m.title)
64
68
  pdfDoc.setTitle(m.title);