pretext-pdf 0.9.3 → 1.0.1

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 (106) hide show
  1. package/CHANGELOG.md +141 -1
  2. package/README.md +874 -795
  3. package/dist/allowed-props.d.ts +1 -0
  4. package/dist/allowed-props.d.ts.map +1 -1
  5. package/dist/allowed-props.js +2 -0
  6. package/dist/allowed-props.js.map +1 -1
  7. package/dist/assets.d.ts +4 -2
  8. package/dist/assets.d.ts.map +1 -1
  9. package/dist/assets.js +22 -1
  10. package/dist/assets.js.map +1 -1
  11. package/dist/benchmarks/corpora.d.ts +11 -0
  12. package/dist/benchmarks/corpora.d.ts.map +1 -0
  13. package/dist/benchmarks/corpora.js +228 -0
  14. package/dist/benchmarks/corpora.js.map +1 -0
  15. package/dist/builder.d.ts +10 -2
  16. package/dist/builder.d.ts.map +1 -1
  17. package/dist/builder.js +12 -4
  18. package/dist/builder.js.map +1 -1
  19. package/dist/cli.js +19 -19
  20. package/dist/element-types.d.ts +16 -0
  21. package/dist/element-types.d.ts.map +1 -0
  22. package/dist/element-types.js +16 -0
  23. package/dist/element-types.js.map +1 -0
  24. package/dist/errors.d.ts +8 -1
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js +4 -0
  27. package/dist/errors.js.map +1 -1
  28. package/dist/fonts.d.ts +2 -1
  29. package/dist/fonts.d.ts.map +1 -1
  30. package/dist/fonts.js.map +1 -1
  31. package/dist/index.d.ts +21 -17
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +25 -309
  34. package/dist/index.js.map +1 -1
  35. package/dist/layout-state.d.ts +39 -0
  36. package/dist/layout-state.d.ts.map +1 -0
  37. package/dist/layout-state.js +46 -0
  38. package/dist/layout-state.js.map +1 -0
  39. package/dist/measure-blocks.d.ts +2 -1
  40. package/dist/measure-blocks.d.ts.map +1 -1
  41. package/dist/measure-blocks.js.map +1 -1
  42. package/dist/measure.d.ts +4 -2
  43. package/dist/measure.d.ts.map +1 -1
  44. package/dist/measure.js +15 -5
  45. package/dist/measure.js.map +1 -1
  46. package/dist/page-sizes.d.ts +1 -0
  47. package/dist/page-sizes.d.ts.map +1 -1
  48. package/dist/page-sizes.js.map +1 -1
  49. package/dist/paginate.d.ts +1 -1
  50. package/dist/paginate.d.ts.map +1 -1
  51. package/dist/paginate.js +11 -2
  52. package/dist/paginate.js.map +1 -1
  53. package/dist/pipeline-footnotes.d.ts +18 -0
  54. package/dist/pipeline-footnotes.d.ts.map +1 -0
  55. package/dist/pipeline-footnotes.js +98 -0
  56. package/dist/pipeline-footnotes.js.map +1 -0
  57. package/dist/pipeline-toc.d.ts +11 -0
  58. package/dist/pipeline-toc.d.ts.map +1 -0
  59. package/dist/pipeline-toc.js +28 -0
  60. package/dist/pipeline-toc.js.map +1 -0
  61. package/dist/pipeline.d.ts +24 -0
  62. package/dist/pipeline.d.ts.map +1 -0
  63. package/dist/pipeline.js +116 -0
  64. package/dist/pipeline.js.map +1 -0
  65. package/dist/plugin-registry.d.ts +40 -0
  66. package/dist/plugin-registry.d.ts.map +1 -0
  67. package/dist/plugin-registry.js +104 -0
  68. package/dist/plugin-registry.js.map +1 -0
  69. package/dist/plugin-types.d.ts +185 -0
  70. package/dist/plugin-types.d.ts.map +1 -0
  71. package/dist/plugin-types.js +27 -0
  72. package/dist/plugin-types.js.map +1 -0
  73. package/dist/post-process.d.ts +16 -0
  74. package/dist/post-process.d.ts.map +1 -0
  75. package/dist/post-process.js +80 -0
  76. package/dist/post-process.js.map +1 -0
  77. package/dist/render-blocks.d.ts +2 -1
  78. package/dist/render-blocks.d.ts.map +1 -1
  79. package/dist/render-blocks.js.map +1 -1
  80. package/dist/render-extras.d.ts +2 -2
  81. package/dist/render-extras.d.ts.map +1 -1
  82. package/dist/render-extras.js.map +1 -1
  83. package/dist/render.d.ts +4 -2
  84. package/dist/render.d.ts.map +1 -1
  85. package/dist/render.js +23 -4
  86. package/dist/render.js.map +1 -1
  87. package/dist/types-internal.d.ts +302 -0
  88. package/dist/types-internal.d.ts.map +1 -0
  89. package/dist/types-internal.js +9 -0
  90. package/dist/types-internal.js.map +1 -0
  91. package/dist/types-public.d.ts +1031 -0
  92. package/dist/types-public.d.ts.map +1 -0
  93. package/dist/types-public.js +2 -0
  94. package/dist/types-public.js.map +1 -0
  95. package/dist/types.d.ts +6 -1224
  96. package/dist/types.d.ts.map +1 -1
  97. package/dist/types.js +7 -0
  98. package/dist/types.js.map +1 -1
  99. package/dist/validate.d.ts +6 -4
  100. package/dist/validate.d.ts.map +1 -1
  101. package/dist/validate.js +50 -17
  102. package/dist/validate.js.map +1 -1
  103. package/package.json +192 -184
  104. package/docs/screenshots/showcase-invoice.png +0 -0
  105. package/docs/screenshots/showcase-report.png +0 -0
  106. package/docs/screenshots/showcase-resume.png +0 -0
package/dist/index.js CHANGED
@@ -1,14 +1,7 @@
1
- import path from 'node:path';
2
- import { PDFDocument, PDFName, PDFString } from '@cantoo/pdf-lib';
1
+ import { PDFDocument } from '@cantoo/pdf-lib';
3
2
  import { PretextPdfError } from './errors.js';
4
- import { resolvePageDimensions } from './page-sizes.js';
5
- import { validate } from './validate.js';
6
- import { loadFonts } from './fonts.js';
7
- import { loadImages } from './assets.js';
8
- import { measureAllBlocks, measureHeaderFooterHeight } from './measure.js';
9
- import { LINE_HEIGHT_COMPACT } from './render-utils.js';
10
- import { paginate } from './paginate.js';
11
- import { renderDocument } from './render.js';
3
+ import { runPipeline } from './pipeline.js';
4
+ import { applyPostProcessing } from './post-process.js';
12
5
  export { PretextPdfError } from './errors.js';
13
6
  export { createPdf } from './builder.js';
14
7
  export { validate } from './validate.js';
@@ -20,6 +13,10 @@ let _fnSetCounter = 0;
20
13
  * - `id`: unique string for use as `InlineSpan.footnoteRef`
21
14
  * - `def`: a `FootnoteDefElement` ready to push into `doc.content`
22
15
  *
16
+ * @remarks
17
+ * IDs are generated using a module-level counter and are unique within a process.
18
+ * They are not stable across separate module loads.
19
+ *
23
20
  * @example
24
21
  * ```ts
25
22
  * const fns = createFootnoteSet([
@@ -27,9 +24,10 @@ let _fnSetCounter = 0;
27
24
  * { text: 'Ibid., p. 42.' },
28
25
  * ])
29
26
  * // In content:
30
- * // { type: 'rich-paragraph', spans: [{ text: 'Text', footnoteRef: fns[0].id }] }
27
+ * // \{ type: 'rich-paragraph', spans: [\{ text: 'Text', footnoteRef: fns[0].id \}] \}
31
28
  * // ...fns.map(f => f.def)
32
29
  * ```
30
+ * @beta
33
31
  */
34
32
  export function createFootnoteSet(items) {
35
33
  const base = _fnSetCounter++;
@@ -38,232 +36,37 @@ export function createFootnoteSet(items) {
38
36
  return { id, def: { type: 'footnote-def', id, ...item } };
39
37
  });
40
38
  }
41
- /**
42
- * Resolve the active header and footer for a given 1-based page number.
43
- * The first matching section (fromPage/toPage range) wins; falls back to
44
- * doc.header / doc.footer when no section matches.
45
- * Internal — used by the render pipeline. Not part of the public API.
46
- */
47
- function resolveHeaderFooter(doc, pageNumber) {
48
- const section = doc.sections?.find(s => {
49
- const from = s.fromPage ?? 1;
50
- const to = s.toPage ?? Infinity;
51
- return pageNumber >= from && pageNumber <= to;
52
- });
53
- return {
54
- header: section?.header ?? doc.header,
55
- footer: section?.footer ?? doc.footer,
56
- };
57
- }
58
39
  /**
59
40
  * Render a PdfDocument to PDF bytes.
60
41
  *
61
- * Works in Node.js (requires @napi-rs/canvas peer dep) and in the browser.
42
+ * Works in Node.js (requires `@napi-rs/canvas` peer dep) and in the browser.
62
43
  *
63
44
  * @example
64
45
  * ```ts
65
46
  * import { render } from 'pretext-pdf'
66
47
  *
67
- * const pdf = await render({
48
+ * const pdf = await render(\{
68
49
  * content: [
69
- * { type: 'heading', level: 1, text: 'Hello World' },
70
- * { type: 'paragraph', text: 'This is a paragraph.' },
71
- * { type: 'hr' },
72
- * { type: 'list', style: 'unordered', items: [{ text: 'Item one' }, { text: 'Item two' }] },
50
+ * \{ type: 'heading', level: 1, text: 'Hello World' \},
51
+ * \{ type: 'paragraph', text: 'This is a paragraph.' \},
73
52
  * ]
74
- * })
53
+ * \})
75
54
  * fs.writeFileSync('output.pdf', pdf)
76
55
  * ```
56
+ * @public
77
57
  */
78
58
  export async function render(doc, options) {
79
- // ── Install Node.js canvas polyfill FIRST, before any Pretext import ─────────
80
- // This MUST happen before measure.ts lazily imports @chenglou/pretext.
81
- if (typeof OffscreenCanvas === 'undefined' && typeof window === 'undefined') {
82
- const { installNodePolyfill } = await import('./node-polyfill.js');
83
- await installNodePolyfill();
84
- }
85
- // ── Stage 1: Validate ─────────────────────────────────────────────────────────
86
- validate(doc, options);
87
- // ── Resolve page geometry ──────────────────────────────────────────────────────
88
- const [pageWidth, pageHeight] = resolvePageDimensions(doc.pageSize);
89
- const margins = {
90
- top: doc.margins?.top ?? 72,
91
- bottom: doc.margins?.bottom ?? 72,
92
- left: doc.margins?.left ?? 72,
93
- right: doc.margins?.right ?? 72,
94
- };
95
- const contentWidth = pageWidth - margins.left - margins.right;
96
- if (contentWidth <= 0) {
97
- throw new PretextPdfError('PAGE_TOO_SMALL', `Content width is ${contentWidth}pt after applying margins. Reduce margins or increase page size.`);
98
- }
99
- // ── Stage 2: Load Fonts + Images ──────────────────────────────────────────────
100
- // pdfDoc is created ONCE here and passed to all stages.
101
- const pdfDoc = await PDFDocument.create();
102
- // Set PDF metadata before loading anything else
103
- if (doc.metadata) {
104
- const m = doc.metadata;
105
- if (m.title)
106
- pdfDoc.setTitle(m.title);
107
- if (m.author)
108
- pdfDoc.setAuthor(m.author);
109
- if (m.subject)
110
- pdfDoc.setSubject(m.subject);
111
- if (m.keywords)
112
- pdfDoc.setKeywords(m.keywords);
113
- pdfDoc.setCreator(m.creator ?? 'pretext-pdf');
114
- if (m.producer)
115
- pdfDoc.setProducer(m.producer);
116
- if (m.language) {
117
- // Set PDF language attribute via catalog
118
- pdfDoc.catalog.set(PDFName.of('Lang'), PDFString.of(m.language));
119
- }
120
- }
121
- // Set PDF creation/modification date
122
- const creationDate = doc.renderDate
123
- ? (doc.renderDate instanceof Date ? doc.renderDate : new Date(doc.renderDate))
124
- : new Date();
125
- pdfDoc.setCreationDate(creationDate);
126
- pdfDoc.setModificationDate(creationDate);
127
- // Load fonts and images in parallel — both are I/O-bound and independent
128
- const [fontMap, imageMap] = await Promise.all([
129
- loadFonts(doc, pdfDoc),
130
- loadImages(doc, pdfDoc, contentWidth),
131
- ]);
132
- // ── Measure header/footer heights (needed to compute available content area) ───
133
- const defaultFont = doc.defaultFont ?? 'Inter';
134
- const headerHeight = doc.header
135
- ? await measureHeaderFooterHeight(doc.header.text, doc.header.fontSize ?? 10, doc.header.fontFamily ?? defaultFont, contentWidth, (doc.header.fontSize ?? 10) * LINE_HEIGHT_COMPACT) + 8 // 8pt padding between header and content
136
- : 0;
137
- const footerHeight = doc.footer
138
- ? await measureHeaderFooterHeight(doc.footer.text, doc.footer.fontSize ?? 10, doc.footer.fontFamily ?? defaultFont, contentWidth, (doc.footer.fontSize ?? 10) * LINE_HEIGHT_COMPACT) + 8
139
- : 0;
140
- const contentHeight = pageHeight - margins.top - margins.bottom - headerHeight - footerHeight;
141
- if (contentHeight <= 0) {
142
- throw new PretextPdfError('PAGE_TOO_SMALL', `Content height is ${contentHeight}pt after applying margins + header/footer. Try reducing margins, header/footer font size, or increasing page size.`);
143
- }
144
- // ── Stage 3: Measure ──────────────────────────────────────────────────────────
145
- // measureAllBlocks handles:
146
- // - image key resolution (content index → img-N key)
147
- // - list flattening (1 ListElement → N MeasuredBlocks)
148
- // - all other elements (direct 1:1 mapping)
149
- let measuredBlocks = await measureAllBlocks(doc, contentWidth, imageMap, contentHeight);
150
- // ── Two-Pass TOC (if document contains a toc element) ───────────────────────────
151
- const { buildTocEntryBlocks } = await import('./measure.js');
152
- const tocIndex = doc.content.findIndex(el => el.type === 'toc');
153
- if (tocIndex !== -1) {
154
- const tocElement = doc.content[tocIndex];
155
- if (!tocElement || tocElement.type !== 'toc')
156
- throw new Error('TOC element type mismatch'); // Type guard
157
- // Pass 1: paginate without real TOC content to collect heading page numbers
158
- const draftPaginatedDoc = paginate(measuredBlocks, contentHeight);
159
- // Build real TOC entry blocks using draft page numbers
160
- const tocEntryBlocks = await buildTocEntryBlocks(draftPaginatedDoc.headings, tocElement, contentWidth, doc);
161
- // Splice TOC entries into measuredBlocks at the placeholder index
162
- // The placeholder (zero-height) block at tocIndex is replaced by the entry blocks
163
- measuredBlocks = [
164
- ...measuredBlocks.slice(0, tocIndex),
165
- ...tocEntryBlocks,
166
- ...measuredBlocks.slice(tocIndex + 1),
167
- ];
59
+ if (typeof Intl?.Segmenter !== 'function') {
60
+ throw new PretextPdfError('RENDER_FAILED', 'Intl.Segmenter is not available in this runtime. Upgrade to Node.js 18+ or set NODE_ICU_DATA to a full-icu data file.');
168
61
  }
169
- // ────────────────────────────────────────────────────────────────────────────────
170
- // ── Stage 4: Paginate (pure function) ─────────────────────────────────────────
171
- const paginateConfig = { minOrphanLines: 2, minWidowLines: 2 };
172
- // ── Footnote two-pass orchestration ───────────────────────────────────────────
173
- const footnoteDefElements = doc.content.filter(el => el.type === 'footnote-def');
174
- let paginatedDoc;
175
- if (footnoteDefElements.length === 0) {
176
- // No footnotes — single pass, normal flow
177
- paginatedDoc = paginate(measuredBlocks, contentHeight, paginateConfig);
178
- }
179
- else {
180
- // Build a map of def id → measured height (already measured in measuredBlocks)
181
- const footnoteDefHeightMap = new Map();
182
- for (const block of measuredBlocks) {
183
- if (block.element.type === 'footnote-def') {
184
- const def = block.element;
185
- footnoteDefHeightMap.set(def.id, block.height + (block.spaceAfter ?? 0));
186
- }
187
- }
188
- // Strip footnote-def blocks from the block stream (defs are not placed in flow)
189
- const flowBlocks = measuredBlocks.filter(b => b.element.type !== 'footnote-def');
190
- // Build document-order footnote numbering before pagination (controls rendering order)
191
- const footnoteNumbering = buildFootnoteNumbering(doc.content);
192
- // PASS 1: Paginate without any footnote zone reservation
193
- const pass1 = paginate(flowBlocks, contentHeight, paginateConfig);
194
- // Determine which footnote refs land on which page
195
- const pageFootnoteRefs = new Map();
196
- for (let pageIdx = 0; pageIdx < pass1.pages.length; pageIdx++) {
197
- const page = pass1.pages[pageIdx];
198
- const refsOnPageSet = new Set();
199
- for (const pagedBlock of page.blocks) {
200
- const el = pagedBlock.measuredBlock.element;
201
- if (el.type === 'rich-paragraph') {
202
- for (const span of el.spans) {
203
- if (span.footnoteRef)
204
- refsOnPageSet.add(span.footnoteRef);
205
- }
206
- }
207
- }
208
- if (refsOnPageSet.size > 0) {
209
- pageFootnoteRefs.set(pageIdx, [...refsOnPageSet]);
210
- }
211
- }
212
- // Build per-page footnote zone heights
213
- const SEPARATOR_HEIGHT = 16; // separator line + padding above/below
214
- const footnoteZones = new Map();
215
- for (const [pageIdx, refIds] of pageFootnoteRefs) {
216
- let zoneHeight = SEPARATOR_HEIGHT;
217
- for (const refId of refIds) {
218
- zoneHeight += footnoteDefHeightMap.get(refId) ?? 0;
219
- }
220
- footnoteZones.set(pageIdx, zoneHeight);
221
- }
222
- // PASS 2: Paginate with zones reserved
223
- const pass2Config = { ...paginateConfig, footnoteZones };
224
- paginatedDoc = paginate(flowBlocks, contentHeight, pass2Config);
225
- paginatedDoc.footnoteNumbering = footnoteNumbering;
226
- // Annotate each RenderedPage with its footnote items
227
- for (const [pageIdx, refIds] of pageFootnoteRefs) {
228
- if (pageIdx >= paginatedDoc.pages.length) {
229
- throw new PretextPdfError('PAGINATION_FAILED', `Footnote zone computed for page ${pageIdx} but document only has ${paginatedDoc.pages.length} pages. This is a pagination bug.`);
230
- }
231
- const page = paginatedDoc.pages[pageIdx];
232
- if (!page) {
233
- throw new PretextPdfError('PAGINATION_FAILED', `Footnote zone computed for page ${pageIdx} but document only has ${paginatedDoc.pages.length} pages. This is a pagination bug.`);
234
- }
235
- {
236
- page.footnoteItems = refIds
237
- .map(id => {
238
- const def = footnoteDefElements.find(d => d.id === id);
239
- const num = footnoteNumbering.get(id) ?? 0;
240
- return def ? { def, number: num } : null;
241
- })
242
- .filter(Boolean);
243
- const zoneHeight = footnoteZones.get(pageIdx);
244
- if (zoneHeight !== undefined)
245
- page.footnoteZoneHeight = zoneHeight;
246
- }
247
- }
248
- }
249
- // ── Stage 5: Render ───────────────────────────────────────────────────────────
250
- const geo = {
251
- pageWidth,
252
- pageHeight,
253
- margins,
254
- contentWidth,
255
- contentHeight,
256
- headerHeight,
257
- footerHeight,
258
- };
259
- const rawBytes = await renderDocument(paginatedDoc, doc, fontMap, imageMap, pdfDoc, geo);
260
- const signedBytes = (doc.signature?.p12) ? await applySignature(rawBytes, doc.signature) : rawBytes;
261
- return doc.encryption ? await applyEncryption(signedBytes, doc.encryption) : signedBytes;
62
+ const rawBytes = await runPipeline(doc, options);
63
+ return applyPostProcessing(rawBytes, doc);
262
64
  }
263
65
  /**
264
66
  * Merge multiple pre-rendered PDFs into a single PDF.
265
- * @param pdfs Array of Uint8Array PDF bytes to combine
67
+ * @param pdfs - Array of Uint8Array PDF bytes to combine
266
68
  * @returns Combined PDF bytes
69
+ * @public
267
70
  */
268
71
  export async function merge(pdfs) {
269
72
  if (!pdfs || pdfs.length === 0) {
@@ -285,8 +88,9 @@ export async function merge(pdfs) {
285
88
  }
286
89
  /**
287
90
  * Assemble a PDF from a mix of new documents and pre-rendered PDF parts.
288
- * @param parts Array of AssemblyPart — each is either a doc to render or raw PDF bytes
91
+ * @param parts - Array of AssemblyPart — each is either a doc to render or raw PDF bytes
289
92
  * @returns Combined PDF bytes
93
+ * @public
290
94
  */
291
95
  export async function assemble(parts) {
292
96
  if (!parts || parts.length === 0) {
@@ -310,94 +114,6 @@ export async function assemble(parts) {
310
114
  }
311
115
  return target.save();
312
116
  }
313
- /**
314
- * Stage 6b: Apply cryptographic PKCS#7/CMS signature (post-process).
315
- * Requires the optional peer dep @signpdf/signpdf.
316
- */
317
- async function applySignature(pdfBytes, sig) {
318
- let signpdfMod;
319
- try {
320
- signpdfMod = await import('@signpdf/signpdf');
321
- }
322
- catch {
323
- throw new PretextPdfError('SIGNATURE_DEP_MISSING', 'Cryptographic signing requires the @signpdf/signpdf package. Install it: npm install @signpdf/signpdf');
324
- }
325
- const { SignPdf, pdflibAddPlaceholder } = signpdfMod;
326
- // Load P12 certificate bytes
327
- let p12Buffer;
328
- try {
329
- if (sig.p12 instanceof Uint8Array) {
330
- p12Buffer = Buffer.from(sig.p12);
331
- }
332
- else {
333
- const p12Path = sig.p12;
334
- if (!path.isAbsolute(p12Path)) {
335
- throw new PretextPdfError('SIGNATURE_P12_LOAD_FAILED', 'P12 path must be absolute');
336
- }
337
- const { promises: fs } = await import('node:fs');
338
- p12Buffer = await fs.readFile(p12Path);
339
- }
340
- }
341
- catch (e) {
342
- if (e instanceof PretextPdfError)
343
- throw e;
344
- throw new PretextPdfError('SIGNATURE_P12_LOAD_FAILED', 'Failed to load P12 certificate');
345
- }
346
- // Re-load into PDFDocument to inject the byte-range placeholder dict
347
- const pdfDoc = await PDFDocument.load(pdfBytes);
348
- pdflibAddPlaceholder({
349
- pdfDoc,
350
- reason: sig.reason ?? 'Signed',
351
- contactInfo: sig.contactInfo ?? '',
352
- name: sig.signerName ?? '',
353
- location: sig.location ?? '',
354
- });
355
- const pdfWithPlaceholder = await pdfDoc.save({ useObjectStreams: false });
356
- const signer = new SignPdf();
357
- let signedBuffer;
358
- try {
359
- signedBuffer = await signer.sign(Buffer.from(pdfWithPlaceholder), p12Buffer, sig.passphrase !== undefined ? { passphrase: sig.passphrase } : undefined);
360
- }
361
- catch (e) {
362
- throw new PretextPdfError('SIGNATURE_FAILED', `PDF signing failed: ${e instanceof Error ? e.message : String(e)}`);
363
- }
364
- return new Uint8Array(signedBuffer);
365
- }
366
- /**
367
- * Stage 6: Apply encryption (post-process).
368
- * @cantoo/pdf-lib is now a direct dependency — no lazy-load needed.
369
- */
370
- async function applyEncryption(pdfBytes, enc) {
371
- const encDoc = await PDFDocument.load(pdfBytes);
372
- encDoc.encrypt({
373
- userPassword: enc.userPassword ?? '',
374
- ownerPassword: enc.ownerPassword ?? (await import('node:crypto')).randomUUID(),
375
- permissions: {
376
- printing: enc.permissions?.printing ?? true,
377
- copying: enc.permissions?.copying ?? true,
378
- modifying: enc.permissions?.modifying ?? false,
379
- annotating: enc.permissions?.annotating ?? true,
380
- },
381
- });
382
- // useObjectStreams: false is required for Adobe Reader compatibility with encrypted PDFs
383
- return encDoc.save({ useObjectStreams: false });
384
- }
385
- /**
386
- * Build document-order footnote numbering by scanning rich-paragraphs in content order.
387
- * This step happens before paginate so that render order is stable and decoupled from pagination.
388
- */
389
- function buildFootnoteNumbering(content) {
390
- const numbering = new Map();
391
- let counter = 1;
392
- for (const el of content) {
393
- if (el.type === 'rich-paragraph') {
394
- for (const span of el.spans) {
395
- if (span.footnoteRef && !numbering.has(span.footnoteRef)) {
396
- numbering.set(span.footnoteRef, counter++);
397
- }
398
- }
399
- }
400
- }
401
- return numbering;
402
- }
117
+ // ─── Schema reflection ────────────────────────────────────────────────────────
118
+ export { ELEMENT_TYPES } from './element-types.js';
403
119
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Layout inspection API — run the pipeline up to pagination without rendering.
3
+ * @internal Not part of the stable public API. Subject to change without a semver bump.
4
+ */
5
+ import { PDFDocument } from '@cantoo/pdf-lib';
6
+ import type { PdfDocument, RenderOptions } from './types-public.js';
7
+ import type { MeasuredBlock, PaginatedDocument, PageGeometry, FontMap, ImageMap } from './types-internal.js';
8
+ export interface LayoutState {
9
+ doc: PdfDocument;
10
+ measuredBlocks: MeasuredBlock[];
11
+ paginatedDoc: PaginatedDocument;
12
+ pdfDoc: PDFDocument;
13
+ fontMap: FontMap;
14
+ imageMap: ImageMap;
15
+ pageGeometry: PageGeometry;
16
+ }
17
+ export interface LayoutTrace {
18
+ document: {
19
+ contentCount: number;
20
+ };
21
+ measuredBlocks: Array<{
22
+ type: string;
23
+ height: number;
24
+ isRTL: boolean;
25
+ }>;
26
+ pages: Array<{
27
+ blockCount: number;
28
+ }>;
29
+ }
30
+ /**
31
+ * Run pipeline stages 1-4 (validate → init → loadAssets → measure → paginate)
32
+ * without rendering. Returns intermediate state for inspection and testing.
33
+ */
34
+ export declare function prepareLayoutState(doc: PdfDocument, options?: RenderOptions): Promise<LayoutState>;
35
+ /**
36
+ * Produce a JSON-serializable summary of a LayoutState for debugging and contracts.
37
+ */
38
+ export declare function summarizeLayoutState(state: LayoutState): LayoutTrace;
39
+ //# sourceMappingURL=layout-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-state.d.ts","sourceRoot":"","sources":["../src/layout-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAI5G,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,WAAW,CAAA;IAChB,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,YAAY,EAAE,iBAAiB,CAAA;IAC/B,MAAM,EAAE,WAAW,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;IAClC,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACvE,KAAK,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACrC;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBxG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAcpE"}
@@ -0,0 +1,46 @@
1
+ import { stageValidate, stageInit, stageLoadAssets, stageFinalizeGeo, stageMeasure, stagePaginate } from './pipeline.js';
2
+ import { PretextPdfError } from './errors.js';
3
+ /**
4
+ * Run pipeline stages 1-4 (validate → init → loadAssets → measure → paginate)
5
+ * without rendering. Returns intermediate state for inspection and testing.
6
+ */
7
+ export async function prepareLayoutState(doc, options) {
8
+ if (typeof Intl?.Segmenter !== 'function') {
9
+ throw new PretextPdfError('RENDER_FAILED', 'Intl.Segmenter is not available in this runtime. Upgrade to Node.js 18+ or set NODE_ICU_DATA to a full-icu data file.');
10
+ }
11
+ if (typeof OffscreenCanvas === 'undefined' && typeof window === 'undefined') {
12
+ try {
13
+ const { installNodePolyfill } = await import('./node-polyfill.js');
14
+ await installNodePolyfill();
15
+ }
16
+ catch (e) {
17
+ throw new PretextPdfError('CANVAS_UNAVAILABLE', `Failed to initialize Node.js canvas polyfill: ${e instanceof Error ? e.message : String(e)}`);
18
+ }
19
+ }
20
+ stageValidate(doc, options);
21
+ const { pdfDoc, geo: partialGeo, defaultFont } = await stageInit(doc);
22
+ const { fontMap, imageMap } = await stageLoadAssets(doc, pdfDoc, partialGeo.contentWidth, options?.plugins);
23
+ const geo = await stageFinalizeGeo(doc, partialGeo, defaultFont);
24
+ const measuredBlocks = await stageMeasure(doc, geo.contentWidth, imageMap, geo.contentHeight, options?.plugins);
25
+ const paginatedDoc = stagePaginate(measuredBlocks, geo.contentHeight, doc);
26
+ return { doc, measuredBlocks, paginatedDoc, pdfDoc, fontMap, imageMap, pageGeometry: geo };
27
+ }
28
+ /**
29
+ * Produce a JSON-serializable summary of a LayoutState for debugging and contracts.
30
+ */
31
+ export function summarizeLayoutState(state) {
32
+ return {
33
+ document: {
34
+ contentCount: state.doc.content.length,
35
+ },
36
+ measuredBlocks: state.measuredBlocks.map(block => ({
37
+ type: block.element.type,
38
+ height: block.height,
39
+ isRTL: 'dir' in block.element && block.element.dir === 'rtl',
40
+ })),
41
+ pages: state.paginatedDoc.pages.map(page => ({
42
+ blockCount: page.blocks.length,
43
+ })),
44
+ };
45
+ }
46
+ //# sourceMappingURL=layout-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-state.js","sourceRoot":"","sources":["../src/layout-state.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACxH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAkB7C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAgB,EAAE,OAAuB;IAChF,IAAI,OAAO,IAAI,EAAE,SAAS,KAAK,UAAU,EAAE,CAAC;QAC1C,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,uHAAuH,CAAC,CAAA;IACrK,CAAC;IACD,IAAI,OAAO,eAAe,KAAK,WAAW,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAC5E,IAAI,CAAC;YACH,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;YAClE,MAAM,mBAAmB,EAAE,CAAA;QAC7B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,eAAe,CAAC,oBAAoB,EAAE,iDAAiD,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAChJ,CAAC;IACH,CAAC;IAED,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAE3B,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;IACrE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC3G,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC,CAAA;IAChE,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/G,MAAM,YAAY,GAAG,aAAa,CAAC,cAAc,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;IAE1E,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,CAAA;AAC5F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAkB;IACrD,OAAO;QACL,QAAQ,EAAE;YACR,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM;SACvC;QACD,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,IAAK,KAAK,CAAC,OAA4B,CAAC,GAAG,KAAK,KAAK;SACnF,CAAC,CAAC;QACH,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;SAC/B,CAAC,CAAC;KACJ,CAAA;AACH,CAAC"}
@@ -2,7 +2,8 @@
2
2
  * measure-blocks.ts — Per-element-type measurement functions
3
3
  * All the specific measurer functions for different content types.
4
4
  */
5
- import type { ContentElement, MeasuredBlock, ImageMap, ColumnDef, PdfDocument } from './types.js';
5
+ import type { ContentElement, ColumnDef, PdfDocument } from './types.js';
6
+ import type { MeasuredBlock, ImageMap } from './types-internal.js';
6
7
  import { HyphenatorOpts } from './measure-text.js';
7
8
  export declare function measureBlock(element: ContentElement, contentWidth: number, doc: PdfDocument, hyphenatorOpts?: HyphenatorOpts): Promise<MeasuredBlock | MeasuredBlock[]>;
8
9
  /** Measure an image element with its known imageMap key */
@@ -1 +1 @@
1
- {"version":3,"file":"measure-blocks.d.ts","sourceRoot":"","sources":["../src/measure-blocks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EAAE,aAAa,EAE7B,QAAQ,EAAE,SAAS,EAAgB,WAAW,EAE/C,MAAM,YAAY,CAAA;AAInB,OAAO,EAAe,cAAc,EAAmC,MAAM,mBAAmB,CAAA;AAwBhG,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,WAAW,EAChB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,aAAa,GAAG,aAAa,EAAE,CAAC,CAmgB1C;AAMD,2DAA2D;AAC3D,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,YAAY,EAAE,YAAY,EAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,CAAC,CAqExB;AAID,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,YAAY,EAAE,YAAY,EAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,OAAO,YAAY,EAAE,WAAW,GACpC,OAAO,CAAC,aAAa,CAAC,CAiFxB;AAID,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,YAAY,EAAE,iBAAiB,EAC/C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,WAAW,EAChB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,aAAa,CAAC,CA8GxB;AAmaD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,EAAE,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CA4EV;AA8ND;;;GAGG"}
1
+ {"version":3,"file":"measure-blocks.d.ts","sourceRoot":"","sources":["../src/measure-blocks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EAAE,SAAS,EAAgB,WAAW,EACrD,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EACV,aAAa,EAEb,QAAQ,EACT,MAAM,qBAAqB,CAAA;AAI5B,OAAO,EAAe,cAAc,EAAmC,MAAM,mBAAmB,CAAA;AAwBhG,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,WAAW,EAChB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,aAAa,GAAG,aAAa,EAAE,CAAC,CAmgB1C;AAMD,2DAA2D;AAC3D,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,YAAY,EAAE,YAAY,EAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,CAAC,CAqExB;AAID,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,YAAY,EAAE,YAAY,EAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,OAAO,YAAY,EAAE,WAAW,GACpC,OAAO,CAAC,aAAa,CAAC,CAiFxB;AAID,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,YAAY,EAAE,iBAAiB,EAC/C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,WAAW,EAChB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,aAAa,CAAC,CA8GxB;AAmaD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,EAAE,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CA4EV;AA8ND;;;GAGG"}