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
@@ -0,0 +1,85 @@
1
+ /** Scan document to collect every unique font variant needed. */
2
+ import { PretextPdfError } from '../errors.js';
3
+ import { buildFontKey } from '../font-key.js';
4
+ /**
5
+ * Returns a Map from fontKey → FontSpec-like descriptor for every font variant
6
+ * referenced in the document (content + header/footer/watermark/signature).
7
+ */
8
+ export function collectNeededFonts(doc) {
9
+ const needed = new Map();
10
+ const defaultFamily = doc.defaultFont ?? 'Inter';
11
+ const userFonts = new Map();
12
+ for (const f of doc.fonts ?? []) {
13
+ const key = buildFontKey(f.family, f.weight ?? 400, f.style ?? 'normal');
14
+ userFonts.set(key, f);
15
+ }
16
+ const addFont = (family, weight, style) => {
17
+ const key = buildFontKey(family, weight, style);
18
+ if (needed.has(key))
19
+ return;
20
+ const userFont = userFonts.get(key);
21
+ if (userFont) {
22
+ needed.set(key, { ...userFont, src: userFont.src });
23
+ }
24
+ else if (family === 'Inter') {
25
+ needed.set(key, { family, weight, style, src: 'bundled' });
26
+ }
27
+ else {
28
+ throw new PretextPdfError('FONT_EMBED_FAILED', `Font variant "${key}" is used in the document but was not found in doc.fonts. Make sure all custom fonts are declared in doc.fonts[]. If using a bundled font, check the font family name matches exactly.`);
29
+ }
30
+ };
31
+ addFont(defaultFamily, 400, 'normal');
32
+ for (const el of doc.content) {
33
+ if (el.type === 'paragraph') {
34
+ addFont(el.fontFamily ?? defaultFamily, el.fontWeight ?? 400, 'normal');
35
+ }
36
+ else if (el.type === 'heading') {
37
+ addFont(el.fontFamily ?? defaultFamily, el.fontWeight ?? 700, 'normal');
38
+ }
39
+ else if (el.type === 'code') {
40
+ addFont(el.fontFamily, 400, 'normal');
41
+ }
42
+ else if (el.type === 'rich-paragraph') {
43
+ for (const span of el.spans) {
44
+ addFont(span.fontFamily ?? defaultFamily, span.fontWeight ?? 400, span.fontStyle ?? 'normal');
45
+ }
46
+ }
47
+ else if (el.type === 'list') {
48
+ for (const item of el.items) {
49
+ if ((item.fontWeight ?? 400) === 700)
50
+ addFont(defaultFamily, 700, 'normal');
51
+ for (const nested of item.items ?? []) {
52
+ if ((nested.fontWeight ?? 400) === 700)
53
+ addFont(defaultFamily, 700, 'normal');
54
+ }
55
+ }
56
+ }
57
+ else if (el.type === 'table') {
58
+ addFont(defaultFamily, 400, 'normal');
59
+ for (const row of el.rows) {
60
+ for (const cell of row.cells) {
61
+ addFont(cell.fontFamily ?? defaultFamily, cell.fontWeight ?? (row.isHeader ? 700 : 400), 'normal');
62
+ }
63
+ if (row.isHeader)
64
+ addFont(defaultFamily, 700, 'normal');
65
+ }
66
+ }
67
+ else if (el.type === 'blockquote') {
68
+ addFont(el.fontFamily ?? defaultFamily, el.fontWeight ?? 400, el.fontStyle ?? 'normal');
69
+ }
70
+ else if (el.type === 'image' && el.floatFontFamily) {
71
+ addFont(el.floatFontFamily, 400, 'normal');
72
+ }
73
+ else if (el.type === 'footnote-def') {
74
+ addFont(el.fontFamily ?? defaultFamily, 400, 'normal');
75
+ }
76
+ }
77
+ if (doc.header)
78
+ addFont(doc.header.fontFamily ?? defaultFamily, doc.header.fontWeight ?? 400, 'normal');
79
+ if (doc.footer)
80
+ addFont(doc.footer.fontFamily ?? defaultFamily, doc.footer.fontWeight ?? 400, 'normal');
81
+ if (doc.watermark?.text)
82
+ addFont(doc.watermark.fontFamily ?? defaultFamily, doc.watermark.fontWeight ?? 400, 'normal');
83
+ return needed;
84
+ }
85
+ //# sourceMappingURL=collect-needed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-needed.js","sourceRoot":"","sources":["../../src/fonts/collect-needed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Walk all content elements + header/footer/watermark/signature and collect
3
+ * text strings grouped by font key for font subsetting.
4
+ *
5
+ * Returns: Map<fontKey, concatenated text string>
6
+ */
7
+ import type { PdfDocument } from '../types.js';
8
+ export declare function collectTextByFont(doc: PdfDocument): Map<string, string>;
9
+ //# sourceMappingURL=collect-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-text.d.ts","sourceRoot":"","sources":["../../src/fonts/collect-text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA0JvE"}
@@ -0,0 +1,162 @@
1
+ import { buildFontKey } from '../font-key.js';
2
+ export function collectTextByFont(doc) {
3
+ const defaultFont = doc.defaultFont ?? 'Inter';
4
+ const textSets = new Map();
5
+ function addText(fontKey, text) {
6
+ if (!textSets.has(fontKey))
7
+ textSets.set(fontKey, new Set());
8
+ textSets.get(fontKey).add(text);
9
+ }
10
+ for (const el of doc.content) {
11
+ switch (el.type) {
12
+ case 'paragraph': {
13
+ const key = buildFontKey(el.fontFamily ?? defaultFont, el.fontWeight ?? 400, 'normal');
14
+ addText(key, el.text);
15
+ break;
16
+ }
17
+ case 'heading': {
18
+ const key = buildFontKey(el.fontFamily ?? defaultFont, el.fontWeight ?? 700, 'normal');
19
+ addText(key, el.text);
20
+ break;
21
+ }
22
+ case 'blockquote': {
23
+ const key = buildFontKey(el.fontFamily ?? defaultFont, el.fontWeight ?? 400, el.fontStyle ?? 'normal');
24
+ addText(key, el.text);
25
+ break;
26
+ }
27
+ case 'code': {
28
+ const key = buildFontKey(el.fontFamily, 400, 'normal');
29
+ addText(key, el.text);
30
+ break;
31
+ }
32
+ case 'rich-paragraph': {
33
+ for (const span of el.spans) {
34
+ const key = buildFontKey(span.fontFamily ?? defaultFont, span.fontWeight ?? 400, span.fontStyle ?? 'normal');
35
+ addText(key, span.text);
36
+ }
37
+ break;
38
+ }
39
+ case 'table': {
40
+ for (const row of el.rows) {
41
+ for (const cell of row.cells) {
42
+ const key = buildFontKey(cell.fontFamily ?? defaultFont, cell.fontWeight ?? (row.isHeader ? 700 : 400), 'normal');
43
+ addText(key, cell.text);
44
+ }
45
+ }
46
+ break;
47
+ }
48
+ case 'list': {
49
+ const listFont = buildFontKey(defaultFont, 400, 'normal');
50
+ if (el.style === 'ordered') {
51
+ addText(listFont, '0123456789.');
52
+ }
53
+ else {
54
+ addText(listFont, el.marker ?? '•');
55
+ addText(listFont, '◦');
56
+ }
57
+ const collectItems = (items) => {
58
+ for (const item of items) {
59
+ const key = buildFontKey(defaultFont, item.fontWeight ?? 400, 'normal');
60
+ addText(key, item.text);
61
+ if (item.items)
62
+ collectItems(item.items);
63
+ }
64
+ };
65
+ collectItems(el.items);
66
+ break;
67
+ }
68
+ case 'footnote-def': {
69
+ const key = buildFontKey(el.fontFamily ?? defaultFont, 400, 'normal');
70
+ addText(key, el.text);
71
+ break;
72
+ }
73
+ case 'callout': {
74
+ const key = buildFontKey(el.fontFamily ?? defaultFont, el.fontWeight ?? 400, 'normal');
75
+ addText(key, el.content);
76
+ if (el.title) {
77
+ const titleKey = buildFontKey(el.fontFamily ?? defaultFont, 700, 'normal');
78
+ addText(titleKey, el.title);
79
+ }
80
+ break;
81
+ }
82
+ case 'form-field': {
83
+ const key = buildFontKey(defaultFont, 400, 'normal');
84
+ if (el.label)
85
+ addText(key, el.label);
86
+ if (el.fieldType === 'text') {
87
+ if (el.placeholder)
88
+ addText(key, el.placeholder);
89
+ if (typeof el.defaultValue === 'string')
90
+ addText(key, el.defaultValue);
91
+ }
92
+ if (el.fieldType === 'radio' || el.fieldType === 'dropdown') {
93
+ for (const opt of el.options)
94
+ addText(key, opt.label);
95
+ }
96
+ break;
97
+ }
98
+ case 'float-group': {
99
+ for (const contentEl of el.content) {
100
+ if (contentEl.type === 'paragraph') {
101
+ const key = buildFontKey(contentEl.fontFamily ?? defaultFont, contentEl.fontWeight ?? 400, 'normal');
102
+ addText(key, contentEl.text);
103
+ }
104
+ else if (contentEl.type === 'heading') {
105
+ const key = buildFontKey(contentEl.fontFamily ?? defaultFont, contentEl.fontWeight ?? 700, 'normal');
106
+ addText(key, contentEl.text);
107
+ }
108
+ else if (contentEl.type === 'rich-paragraph') {
109
+ for (const span of contentEl.spans) {
110
+ const key = buildFontKey(span.fontFamily ?? defaultFont, span.fontWeight ?? 400, span.fontStyle ?? 'normal');
111
+ addText(key, span.text);
112
+ }
113
+ }
114
+ }
115
+ break;
116
+ }
117
+ default:
118
+ break;
119
+ }
120
+ }
121
+ const DIGITS = '0123456789';
122
+ if (doc.header) {
123
+ const key = buildFontKey(doc.header.fontFamily ?? defaultFont, doc.header.fontWeight ?? 400, 'normal');
124
+ addText(key, doc.header.text + DIGITS);
125
+ }
126
+ if (doc.footer) {
127
+ const key = buildFontKey(doc.footer.fontFamily ?? defaultFont, doc.footer.fontWeight ?? 400, 'normal');
128
+ addText(key, doc.footer.text + DIGITS);
129
+ }
130
+ if (doc.sections) {
131
+ for (const section of doc.sections) {
132
+ if (section.header) {
133
+ const key = buildFontKey(section.header.fontFamily ?? defaultFont, section.header.fontWeight ?? 400, 'normal');
134
+ addText(key, section.header.text + DIGITS);
135
+ }
136
+ if (section.footer) {
137
+ const key = buildFontKey(section.footer.fontFamily ?? defaultFont, section.footer.fontWeight ?? 400, 'normal');
138
+ addText(key, section.footer.text + DIGITS);
139
+ }
140
+ }
141
+ }
142
+ if (doc.watermark?.text) {
143
+ const key = buildFontKey(doc.watermark.fontFamily ?? defaultFont, doc.watermark.fontWeight ?? 400, 'normal');
144
+ addText(key, doc.watermark.text);
145
+ }
146
+ if (doc.signature) {
147
+ const sigKey = buildFontKey(defaultFont, 400, 'normal');
148
+ addText(sigKey, 'Signed by: Signature Date');
149
+ if (doc.signature.signerName)
150
+ addText(sigKey, doc.signature.signerName);
151
+ if (doc.signature.reason)
152
+ addText(sigKey, doc.signature.reason);
153
+ if (doc.signature.location)
154
+ addText(sigKey, doc.signature.location);
155
+ }
156
+ const result = new Map();
157
+ for (const [key, texts] of textSets) {
158
+ result.set(key, Array.from(texts).join(''));
159
+ }
160
+ return result;
161
+ }
162
+ //# sourceMappingURL=collect-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-text.js","sourceRoot":"","sources":["../../src/fonts/collect-text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** Load font bytes from file path, Uint8Array, or bundled Inter. */
2
+ import type { FontSpec } from '../types.js';
3
+ export declare function loadFontBytes(spec: {
4
+ family: string;
5
+ weight?: number;
6
+ style?: 'normal' | 'italic';
7
+ src: string | Uint8Array | 'bundled';
8
+ }, allowedFileDirs?: string[]): Promise<Uint8Array>;
9
+ export type { FontSpec };
10
+ //# sourceMappingURL=load-bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-bytes.d.ts","sourceRoot":"","sources":["../../src/fonts/load-bytes.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAIpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAW3C,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CAAE,EAC5G,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,UAAU,CAAC,CAqErB;AAGD,YAAY,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,56 @@
1
+ /** Load font bytes from file path, Uint8Array, or bundled Inter. */
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { PretextPdfError } from '../errors.js';
5
+ import { assertPathAllowed } from '../assets.js';
6
+ import { IS_NODE, BUNDLED_INTER_PATHS, BUNDLED_INTER_BOLD_PATHS, BUNDLED_INTER_ITALIC_PATHS, BUNDLED_INTER_BOLD_ITALIC_PATHS, } from './bundled-paths.js';
7
+ export async function loadFontBytes(spec, allowedFileDirs) {
8
+ if (spec.src instanceof Uint8Array) {
9
+ return spec.src;
10
+ }
11
+ if (spec.src === 'bundled') {
12
+ if (!IS_NODE) {
13
+ 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> }]`);
14
+ }
15
+ const weight = spec.weight ?? 400;
16
+ const style = spec.style ?? 'normal';
17
+ let paths;
18
+ if (style === 'italic') {
19
+ paths = weight >= 600 ? BUNDLED_INTER_BOLD_ITALIC_PATHS : BUNDLED_INTER_ITALIC_PATHS;
20
+ }
21
+ else {
22
+ paths = weight >= 600 ? BUNDLED_INTER_BOLD_PATHS : BUNDLED_INTER_PATHS;
23
+ }
24
+ for (const p of paths) {
25
+ if (fs.existsSync(p)) {
26
+ try {
27
+ const buffer = fs.readFileSync(p);
28
+ return new Uint8Array(buffer);
29
+ }
30
+ catch {
31
+ // Try next path
32
+ }
33
+ }
34
+ }
35
+ throw new PretextPdfError('FONT_LOAD_FAILED', `Bundled Inter font not found. Make sure @fontsource/inter is installed: npm install @fontsource/inter`);
36
+ }
37
+ if (!IS_NODE) {
38
+ 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.`);
39
+ }
40
+ if (!path.isAbsolute(spec.src)) {
41
+ 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.`);
42
+ }
43
+ const resolvedSrc = path.resolve(spec.src);
44
+ assertPathAllowed(resolvedSrc, allowedFileDirs, 'Font');
45
+ if (!fs.existsSync(resolvedSrc)) {
46
+ throw new PretextPdfError('FONT_LOAD_FAILED', `Font file not found: "${path.basename(spec.src)}". Check the path in doc.fonts[].src.`);
47
+ }
48
+ try {
49
+ const buffer = fs.readFileSync(resolvedSrc);
50
+ return new Uint8Array(buffer);
51
+ }
52
+ catch (err) {
53
+ throw new PretextPdfError('FONT_LOAD_FAILED', `Failed to read font file "${path.basename(spec.src)}": ${err instanceof Error ? err.message : String(err)}`);
54
+ }
55
+ }
56
+ //# sourceMappingURL=load-bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-bytes.js","sourceRoot":"","sources":["../../src/fonts/load-bytes.ts"],"names":[],"mappings":"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"}
package/dist/fonts.d.ts CHANGED
@@ -1,22 +1,23 @@
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 type { PdfDocument } from './types.js';
3
13
  import type { FontMap } from './types-internal.js';
14
+ export { collectTextByFont } from './fonts/collect-text.js';
4
15
  /**
5
16
  * Stage 2: Load and embed all fonts.
6
17
  * - Scans document for all font references
7
18
  * - Loads font bytes (file system or Uint8Array)
8
19
  * - Embeds each into pdfDoc via fontkit
9
20
  * - Returns FontMap for use in measure + render stages
10
- *
11
- * NOTE: pdfDoc is already created by the caller. Fonts are embedded into it here.
12
- * The same pdfDoc is used in Stage 5 (render).
13
21
  */
14
22
  export declare function loadFonts(doc: PdfDocument, pdfDoc: PDFDocument): Promise<FontMap>;
15
- /**
16
- * Walk all content elements + header/footer and collect text strings grouped by font key.
17
- * Used by font subsetting to determine which glyphs each font needs.
18
- *
19
- * Returns: Map<fontKey, concatenated text string>
20
- */
21
- export declare function collectTextByFont(doc: PdfDocument): Map<string, string>;
22
23
  //# sourceMappingURL=fonts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAM7C,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAgElD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC,CA+ElB;AA6LD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,WAAW,GACf,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAyKrB"}
1
+ {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAOlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC,CA6DlB"}