@trazum/core 2.4.1 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/pricing.js CHANGED
@@ -28,8 +28,13 @@
28
28
  * catalogue's headline date derived as the oldest of them rather than typed.
29
29
  */
30
30
  export const PROVIDER_REVIEWED = Object.freeze({
31
- /* platform.claude.com/docs/en/about-claude/pricing, read 2026-08-27. */
32
- anthropic: '2026-08-27',
31
+ /*
32
+ * platform.claude.com/docs/en/about-claude/pricing, the models overview and
33
+ * each model's own page, read 2026-10-10. Every existing row matched; five
34
+ * models were added and one (Claude Haiku 5.5) deliberately was not, see the
35
+ * comment above its would-be place in MODELS.
36
+ */
37
+ anthropic: '2026-10-10',
33
38
  /*
34
39
  * developers.openai.com/api/docs/pricing, read 2026-08-31.
35
40
  *
@@ -90,11 +95,12 @@ export const PRICING_LAST_REVIEWED = Object.values(PROVIDER_REVIEWED).reduce((ol
90
95
  /**
91
96
  * The defaults, which are Anthropic's numbers.
92
97
  *
93
- * Still exported and still correct for every Anthropic model, but no longer the
94
- * whole story: a model can override any of these through `multipliers`, and
95
- * anything computing a cost should go through `multipliersFor` rather than
96
- * reading these directly. A cache read is ~10% of input on Anthropic and ~50%
97
- * on OpenAI, and using one number for both invents a saving.
98
+ * Still exported, and still Anthropic's numbers for every model up to Opus 5
99
+ * and Sonnet 5, but no longer the whole story even there: Claude Fable 5.1 and
100
+ * Mythos 5.1 read the cache at 0.025x and Opus 5.5 and Sonnet 5.5 at 0.05x, so
101
+ * a model overrides any of these through `multipliers`, and anything computing
102
+ * a cost should go through `multipliersFor` rather than reading these
103
+ * directly. Using one cache-read ratio for every model invents a saving.
98
104
  */
99
105
  export const COST_MULTIPLIERS = {
100
106
  /** Cache write with a 5-minute TTL. */
@@ -130,6 +136,46 @@ export function multipliersFor(model) {
130
136
  return result;
131
137
  }
132
138
  export const MODELS = [
139
+ {
140
+ /*
141
+ * platform.claude.com/docs/en/about-claude/pricing and the Fable 5.1 model
142
+ * page, read 2026-10-10. The same $10/$50 as Fable 5; what moved is the
143
+ * cache read, $0.25 against $10 of input, a quarter of the 0.1x every
144
+ * earlier Claude model pays. Writes stay at 1.25x and 2x ($12.50, $20),
145
+ * and the Batch API halves both sides ($5/$25).
146
+ */
147
+ id: 'claude-fable-5-1',
148
+ provider: 'anthropic',
149
+ displayName: 'Claude Fable 5.1',
150
+ inputPerMTok: 10,
151
+ outputPerMTok: 50,
152
+ contextWindow: 1_000_000,
153
+ cacheMinTokens: 512,
154
+ multipliers: { cacheRead: 0.025, cacheWrite5m: 1.25, cacheWrite1h: 2, batch: 0.5 },
155
+ capability: 'frontier',
156
+ tier: 'frontier',
157
+ notes: 'Cache hits cost 2.5% of the input price ($0.25). Requires 30-day data retention.',
158
+ },
159
+ {
160
+ /*
161
+ * The same page and prices as Fable 5.1, cache read included ($0.25,
162
+ * 0.025x). Sold only to verified organisations, so priced for the logs that
163
+ * carry it and never offered as somebody's cheaper alternative.
164
+ */
165
+ id: 'claude-mythos-5-1',
166
+ provider: 'anthropic',
167
+ displayName: 'Claude Mythos 5.1',
168
+ recommendable: false,
169
+ inputPerMTok: 10,
170
+ outputPerMTok: 50,
171
+ contextWindow: 1_000_000,
172
+ cacheMinTokens: 512,
173
+ multipliers: { cacheRead: 0.025, cacheWrite5m: 1.25, cacheWrite1h: 2, batch: 0.5 },
174
+ capability: 'frontier',
175
+ tier: 'frontier',
176
+ notes: 'Available only to organizations verified through Anthropic\'s verification programs.'
177
+ + ' Requires 30-day data retention.',
178
+ },
133
179
  {
134
180
  id: 'claude-fable-5',
135
181
  provider: 'anthropic',
@@ -140,7 +186,7 @@ export const MODELS = [
140
186
  cacheMinTokens: 512,
141
187
  capability: 'frontier',
142
188
  tier: 'frontier',
143
- notes: 'Highest capability. Requires 30-day data retention.',
189
+ notes: 'Legacy: superseded by Claude Fable 5.1 at the same prices. Requires 30-day data retention.',
144
190
  },
145
191
  {
146
192
  id: 'claude-mythos-5',
@@ -153,7 +199,27 @@ export const MODELS = [
153
199
  cacheMinTokens: 512,
154
200
  capability: 'frontier',
155
201
  tier: 'frontier',
156
- notes: 'Available only through Project Glasswing.',
202
+ notes: 'Available only to organizations verified through Anthropic\'s verification programs.'
203
+ + ' Requires 30-day data retention.',
204
+ },
205
+ {
206
+ /*
207
+ * The pricing page and the Opus 5.5 model page, read 2026-10-10. Cheaper
208
+ * than Opus 5 at both ends, $4/$20, and the overview now says to start
209
+ * there for most workloads. Cache read $0.20 is 0.05x, half the ratio of
210
+ * every earlier Opus; writes $5 and $8 are 1.25x and 2x; batch $2/$10.
211
+ */
212
+ id: 'claude-opus-5-5',
213
+ provider: 'anthropic',
214
+ displayName: 'Claude Opus 5.5',
215
+ inputPerMTok: 4,
216
+ outputPerMTok: 20,
217
+ contextWindow: 1_000_000,
218
+ cacheMinTokens: 512,
219
+ multipliers: { cacheRead: 0.05, cacheWrite5m: 1.25, cacheWrite1h: 2, batch: 0.5 },
220
+ capability: 'large',
221
+ tier: 'opus',
222
+ notes: 'Cache hits cost 5% of the input price ($0.20), against 10% on Opus 5 and earlier.',
157
223
  },
158
224
  {
159
225
  id: 'claude-opus-5',
@@ -200,6 +266,45 @@ export const MODELS = [
200
266
  capability: 'large',
201
267
  tier: 'opus',
202
268
  },
269
+ {
270
+ /*
271
+ * Legacy and still served, and never carried here before, so every
272
+ * Claude Code log from late 2025 had it as an unpriced gap. The Opus 4.5
273
+ * model page, read 2026-10-10: model id claude-opus-4-5-20251101, alias
274
+ * claude-opus-4-5, 200K context, $5/$25, 4,096-token cache minimum (the
275
+ * prompt caching page). Like Haiku 4.5, the short alias is the id and the
276
+ * dated canonical form is declared, not derived.
277
+ */
278
+ id: 'claude-opus-4-5',
279
+ aliases: ['claude-opus-4-5-20251101'],
280
+ provider: 'anthropic',
281
+ displayName: 'Claude Opus 4.5',
282
+ inputPerMTok: 5,
283
+ outputPerMTok: 25,
284
+ contextWindow: 200_000,
285
+ cacheMinTokens: 4096,
286
+ capability: 'large',
287
+ tier: 'opus',
288
+ notes: '200K context window and a 64K output cap.',
289
+ },
290
+ {
291
+ /*
292
+ * The pricing page and the Sonnet 5.5 model page, read 2026-10-10. The
293
+ * same $2/$10 as Sonnet 5, with the cache read at $0.10, 0.05x, where
294
+ * Sonnet 5 reads at $0.20. Writes $2.50 and $4; batch $1/$5.
295
+ */
296
+ id: 'claude-sonnet-5-5',
297
+ provider: 'anthropic',
298
+ displayName: 'Claude Sonnet 5.5',
299
+ inputPerMTok: 2,
300
+ outputPerMTok: 10,
301
+ contextWindow: 1_000_000,
302
+ cacheMinTokens: 512,
303
+ multipliers: { cacheRead: 0.05, cacheWrite5m: 1.25, cacheWrite1h: 2, batch: 0.5 },
304
+ capability: 'mid',
305
+ tier: 'sonnet',
306
+ notes: 'Cache hits cost 5% of the input price ($0.10), against 10% ($0.20) on Sonnet 5.',
307
+ },
203
308
  {
204
309
  id: 'claude-sonnet-5',
205
310
  provider: 'anthropic',
@@ -224,6 +329,18 @@ export const MODELS = [
224
329
  capability: 'mid',
225
330
  tier: 'sonnet',
226
331
  },
332
+ /*
333
+ * Claude Haiku 5.5 is not here, on purpose, and its calls are an unpriced
334
+ * gap that names it. The pricing page (read 2026-10-10) prices it by prompt
335
+ * length: $0.10/$0.50 up to 100,000 tokens and $0.50/$2.50 above, where the
336
+ * length counts cache reads and writes and each request is priced on its
337
+ * own. A tier can say that, but nothing that prices a usage log passes one
338
+ * request's prompt length to `effectivePricing`: records are summed per
339
+ * workload, model and day before they are priced. Added today, every Haiku
340
+ * 5.5 call would fall to the undecided ceiling, five times the price most of
341
+ * them paid. It goes in with the change that prices tiered models per
342
+ * request, not before.
343
+ */
227
344
  {
228
345
  id: 'claude-haiku-4-5',
229
346
  // The dated form is the canonical API id and is what a real usage log
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trazum/core",
3
- "version": "2.4.1",
3
+ "version": "2.4.2",
4
4
  "description": "Trazum core: priced advisories for LLM prompts (caching, model tier, batching, schemas), plus deterministic trimming, token counting and pricing.",
5
5
  "license": "MIT",
6
6
  "author": "David Mu\u00f1oz Rey",
@@ -51,7 +51,7 @@
51
51
  "prepublishOnly": "npm run build && npm test"
52
52
  },
53
53
  "devDependencies": {
54
- "@types/node": "^26.4.0",
54
+ "@types/node": "^26.6.3",
55
55
  "typescript": "^7.0.2"
56
56
  },
57
57
  "engines": {
package/src/index.ts CHANGED
@@ -45,6 +45,10 @@ export {
45
45
  profileToCsv,
46
46
  } from './csv.js';
47
47
  export type { ProfileCsvOptions, ProfileCsvShape } from './csv.js';
48
+ // A PDF writer over the standard fonts, with no dependency and no embedded
49
+ // font, so a bill can be handed to the person who signs it off. See pdf.ts.
50
+ export { PDF_PAGE, PdfDocument, pdfEncode, pdfFit, pdfTextWidth, pdfWrap } from './pdf.js';
51
+ export type { PdfColor, PdfFont, PdfMetadata, PdfShapeOptions, PdfTextOptions } from './pdf.js';
48
52
  export { driversBetween } from './against.js';
49
53
  export type { AgainstDriver } from './against.js';
50
54
  export { coverageDrift, COVERAGE_FIELDS, COVERAGE_DRIFT_MIN } from './coverage-drift.js';
package/src/pdf.ts ADDED
@@ -0,0 +1,356 @@
1
+ /**
2
+ * A PDF writer with nothing behind it.
3
+ *
4
+ * ## Why this exists
5
+ *
6
+ * The person who signs off a bill reads it as a PDF: attached to an email,
7
+ * filed beside an invoice, printed for a meeting. The HTML report renders the
8
+ * same everywhere a browser does, and a browser is still one step a finance
9
+ * reader should not have to take. This writes the file directly.
10
+ *
11
+ * ## Why it is small on purpose
12
+ *
13
+ * This package has no runtime dependencies, and a PDF library would be the
14
+ * largest thing in it by an order of magnitude. A bill report needs very little
15
+ * of the format: text in two weights, filled and stroked rectangles, lines, and
16
+ * pages. So this is exactly that, over the 14 standard fonts every PDF reader
17
+ * carries, which means no font is embedded and a three-page bill weighs a few
18
+ * kilobytes.
19
+ *
20
+ * ## What that costs, said plainly
21
+ *
22
+ * The standard fonts speak WinAnsiEncoding: Latin script, which covers every
23
+ * locale this product ships (English, Spanish, French, German, Portuguese)
24
+ * and nothing beyond it. A character outside it is written as its closest
25
+ * ASCII form when there is an obvious one (`→` as `->`) and as `?` when there
26
+ * is not, never dropped silently: a label in Japanese arrives as question
27
+ * marks, which a reader can see is wrong, rather than as an empty cell, which
28
+ * reads as nothing.
29
+ *
30
+ * ## Deterministic
31
+ *
32
+ * The same calls write the same bytes. No creation date unless one is passed,
33
+ * no random ids, content streams uncompressed, so a test can compare the file
34
+ * and a reader can open it in a text editor and find their figures. The file
35
+ * is plain ASCII: every byte past 127 is written as an octal escape.
36
+ */
37
+
38
+ export type PdfFont = 'regular' | 'bold' | 'mono';
39
+
40
+ /** A colour as `#rrggbb`. */
41
+ export type PdfColor = `#${string}`;
42
+
43
+ export interface PdfTextOptions {
44
+ font?: PdfFont;
45
+ size?: number;
46
+ color?: PdfColor;
47
+ }
48
+
49
+ export interface PdfShapeOptions {
50
+ fill?: PdfColor;
51
+ stroke?: PdfColor;
52
+ lineWidth?: number;
53
+ }
54
+
55
+ export interface PdfMetadata {
56
+ title?: string;
57
+ subject?: string;
58
+ author?: string;
59
+ /** Omitted unless given, so the same report writes the same bytes. */
60
+ createdAt?: Date;
61
+ }
62
+
63
+ /** A4, in points. Letter readers print it with a small margin and lose nothing. */
64
+ export const PDF_PAGE = { width: 595.28, height: 841.89 } as const;
65
+
66
+ const FONT_NAME: Readonly<Record<PdfFont, string>> = {
67
+ regular: 'Helvetica',
68
+ bold: 'Helvetica-Bold',
69
+ mono: 'Courier',
70
+ };
71
+
72
+ const FONT_KEY: Readonly<Record<PdfFont, string>> = { regular: 'F1', bold: 'F2', mono: 'F3' };
73
+
74
+ /*
75
+ Advance widths in thousandths of an em for character codes 32 to 126, from
76
+ the Adobe font metrics every reader ships with these fonts. Needed for one
77
+ thing: right-aligning a column of figures and wrapping a sentence, both of
78
+ which a report has on every page.
79
+ */
80
+ const HELVETICA = [
81
+ 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278,
82
+ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556,
83
+ 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778,
84
+ 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556,
85
+ 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556,
86
+ 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584,
87
+ ];
88
+
89
+ const HELVETICA_BOLD = [
90
+ 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278,
91
+ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611,
92
+ 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778,
93
+ 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556,
94
+ 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611,
95
+ 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584,
96
+ ];
97
+
98
+ /** The WinAnsi code points that are not Latin-1's, and the punctuation reports use. */
99
+ const WIN_ANSI_EXTRA: ReadonlyMap<string, number> = new Map([
100
+ ['€', 0x80], ['‚', 0x82], ['ƒ', 0x83], ['„', 0x84], ['…', 0x85], ['†', 0x86],
101
+ ['‡', 0x87], ['ˆ', 0x88], ['‰', 0x89], ['Š', 0x8a], ['‹', 0x8b], ['Œ', 0x8c],
102
+ ['Ž', 0x8e], ['‘', 0x91], ['’', 0x92], ['“', 0x93], ['”', 0x94], ['•', 0x95],
103
+ ['–', 0x96], ['—', 0x97], ['˜', 0x98], ['™', 0x99], ['š', 0x9a], ['›', 0x9b],
104
+ ['œ', 0x9c], ['ž', 0x9e], ['Ÿ', 0x9f],
105
+ ]);
106
+
107
+ /** Characters outside WinAnsi with an obvious ASCII reading. */
108
+ const TRANSLITERATE: ReadonlyMap<string, string> = new Map([
109
+ ['→', '->'], ['←', '<-'], ['↔', '<->'], ['≈', '~'], ['≤', '<='], ['≥', '>='],
110
+ ['−', '-'], ['‑', '-'], ['‐', '-'], ['≠', '!='], ['✓', 'v'], ['✗', 'x'],
111
+ // Thin and narrow spaces, which some locales use as a thousands separator.
112
+ [' ', ' '], [' ', ' '], [' ', ' '], ['​', ''],
113
+ ]);
114
+
115
+ /** Widths for the WinAnsi codes above 127 that are not an accented letter. */
116
+ const HIGH_WIDTH: ReadonlyMap<number, number> = new Map([
117
+ [0x80, 556], [0x85, 1000], [0x91, 222], [0x92, 222], [0x93, 333], [0x94, 333],
118
+ [0x95, 350], [0x96, 556], [0x97, 1000], [0x99, 1000], [0xa0, 278], [0xa1, 333],
119
+ [0xa2, 556], [0xa3, 556], [0xa5, 556], [0xa7, 556], [0xa9, 737], [0xab, 556],
120
+ [0xae, 737], [0xb0, 400], [0xb7, 278], [0xbb, 556], [0xbf, 611], [0xc6, 1000],
121
+ [0xd7, 584], [0xd8, 778], [0xdf, 611], [0xe6, 889], [0xf7, 584], [0xf8, 611],
122
+ ]);
123
+
124
+ /** One character as WinAnsi byte codes: one, several when transliterated, `?` when neither. */
125
+ function winAnsi(char: string): number[] {
126
+ const code = char.codePointAt(0) ?? 63;
127
+ if (code === 0x0a || code === 0x0d || code === 0x09) return [32];
128
+ if (code >= 32 && code <= 126) return [code];
129
+ if (code >= 0xa0 && code <= 0xff) return [code];
130
+ const extra = WIN_ANSI_EXTRA.get(char);
131
+ if (extra !== undefined) return [extra];
132
+ const ascii = TRANSLITERATE.get(char);
133
+ if (ascii !== undefined) return [...ascii].map((c) => c.charCodeAt(0));
134
+ return [63];
135
+ }
136
+
137
+ /** The text as WinAnsi codes, the form both the width and the stream are measured in. */
138
+ export function pdfEncode(text: string): number[] {
139
+ const codes: number[] = [];
140
+ for (const char of text) codes.push(...winAnsi(char));
141
+ return codes;
142
+ }
143
+
144
+ function codeWidth(code: number, font: PdfFont): number {
145
+ if (font === 'mono') return 600;
146
+ const table = font === 'bold' ? HELVETICA_BOLD : HELVETICA;
147
+ if (code >= 32 && code <= 126) return table[code - 32] ?? 556;
148
+ const high = HIGH_WIDTH.get(code);
149
+ if (high !== undefined) return high;
150
+ // An accented letter is as wide as the letter under the accent.
151
+ const base = String.fromCharCode(code).normalize('NFD').charCodeAt(0);
152
+ if (base >= 32 && base <= 126) return table[base - 32] ?? 556;
153
+ return 556;
154
+ }
155
+
156
+ /** How wide `text` sets in `font` at `size` points. */
157
+ export function pdfTextWidth(text: string, font: PdfFont, size: number): number {
158
+ let units = 0;
159
+ for (const code of pdfEncode(text)) units += codeWidth(code, font);
160
+ return (units * size) / 1000;
161
+ }
162
+
163
+ /**
164
+ * `text` broken into lines no wider than `maxWidth`, at spaces.
165
+ *
166
+ * A word wider than the line on its own (a model id, a path) is broken
167
+ * mid-word rather than left to run off the page, because a figure that leaves
168
+ * the paper is a figure nobody reads.
169
+ */
170
+ export function pdfWrap(text: string, font: PdfFont, size: number, maxWidth: number): string[] {
171
+ const lines: string[] = [];
172
+ for (const paragraph of text.split('\n')) {
173
+ let line = '';
174
+ for (const word of paragraph.split(/ +/)) {
175
+ const candidate = line === '' ? word : `${line} ${word}`;
176
+ if (pdfTextWidth(candidate, font, size) <= maxWidth) {
177
+ line = candidate;
178
+ continue;
179
+ }
180
+ if (line !== '') lines.push(line);
181
+ let rest = word;
182
+ while (pdfTextWidth(rest, font, size) > maxWidth && rest.length > 1) {
183
+ let cut = rest.length - 1;
184
+ while (cut > 1 && pdfTextWidth(rest.slice(0, cut), font, size) > maxWidth) cut -= 1;
185
+ lines.push(rest.slice(0, cut));
186
+ rest = rest.slice(cut);
187
+ }
188
+ line = rest;
189
+ }
190
+ lines.push(line);
191
+ }
192
+ return lines;
193
+ }
194
+
195
+ /** `text` cut to fit `maxWidth`, with an ellipsis saying it was cut. */
196
+ export function pdfFit(text: string, font: PdfFont, size: number, maxWidth: number): string {
197
+ if (pdfTextWidth(text, font, size) <= maxWidth) return text;
198
+ let cut = text.length;
199
+ while (cut > 0 && pdfTextWidth(`${text.slice(0, cut)}…`, font, size) > maxWidth) cut -= 1;
200
+ return `${text.slice(0, cut)}…`;
201
+ }
202
+
203
+ /** A PDF string literal: parentheses and backslashes escaped, every byte past 127 in octal. */
204
+ function literal(text: string): string {
205
+ let out = '(';
206
+ for (const code of pdfEncode(text)) {
207
+ if (code === 0x28 || code === 0x29 || code === 0x5c) out += `\\${String.fromCharCode(code)}`;
208
+ else if (code < 32 || code > 126) out += `\\${code.toString(8).padStart(3, '0')}`;
209
+ else out += String.fromCharCode(code);
210
+ }
211
+ return `${out})`;
212
+ }
213
+
214
+ /** Numbers as PDF writes them: at most two decimals, no exponent, no `-0`. */
215
+ function num(value: number): string {
216
+ const rounded = Math.round(value * 100) / 100;
217
+ return Object.is(rounded, -0) ? '0' : String(rounded);
218
+ }
219
+
220
+ function rgb(color: PdfColor): string {
221
+ const hex = color.slice(1);
222
+ const channel = (offset: number): string => num(parseInt(hex.slice(offset, offset + 2), 16) / 255);
223
+ return `${channel(0)} ${channel(2)} ${channel(4)}`;
224
+ }
225
+
226
+ /**
227
+ * Pages of text and shapes, written as one PDF.
228
+ *
229
+ * Coordinates are in points from the **top-left** corner, the way a layout is
230
+ * thought about, and converted to PDF's bottom-left origin on the way out. A
231
+ * text call's `y` is the baseline.
232
+ */
233
+ export class PdfDocument {
234
+ readonly width = PDF_PAGE.width;
235
+ readonly height = PDF_PAGE.height;
236
+ private readonly pages: string[][] = [];
237
+ private current = -1;
238
+
239
+ constructor() {
240
+ this.addPage();
241
+ }
242
+
243
+ /** Starts a new page and makes it the one drawn on. */
244
+ addPage(): number {
245
+ this.pages.push([]);
246
+ this.current = this.pages.length - 1;
247
+ return this.current;
248
+ }
249
+
250
+ get pageCount(): number {
251
+ return this.pages.length;
252
+ }
253
+
254
+ /** Draws on an earlier page, which is how a footer learns the page count. */
255
+ setPage(index: number): void {
256
+ if (!Number.isInteger(index) || index < 0 || index >= this.pages.length) {
257
+ throw new RangeError(`no page ${index}: the document has ${this.pages.length}`);
258
+ }
259
+ this.current = index;
260
+ }
261
+
262
+ private ops(): string[] {
263
+ const page = this.pages[this.current];
264
+ if (page === undefined) throw new RangeError('no page to draw on');
265
+ return page;
266
+ }
267
+
268
+ text(x: number, y: number, text: string, options: PdfTextOptions = {}): void {
269
+ const font = options.font ?? 'regular';
270
+ const size = options.size ?? 10;
271
+ const color = options.color ?? '#000000';
272
+ this.ops().push(
273
+ `BT /${FONT_KEY[font]} ${num(size)} Tf ${rgb(color)} rg ${num(x)} ${num(this.height - y)} Td ${literal(text)} Tj ET`,
274
+ );
275
+ }
276
+
277
+ /** Text ending at `right`, for a column of figures. */
278
+ textRight(right: number, y: number, text: string, options: PdfTextOptions = {}): void {
279
+ const width = pdfTextWidth(text, options.font ?? 'regular', options.size ?? 10);
280
+ this.text(right - width, y, text, options);
281
+ }
282
+
283
+ rect(x: number, y: number, width: number, height: number, options: PdfShapeOptions = {}): void {
284
+ const { fill, stroke } = options;
285
+ if (fill === undefined && stroke === undefined) return;
286
+ const parts: string[] = ['q'];
287
+ if (fill !== undefined) parts.push(`${rgb(fill)} rg`);
288
+ if (stroke !== undefined) parts.push(`${rgb(stroke)} RG ${num(options.lineWidth ?? 1)} w`);
289
+ parts.push(`${num(x)} ${num(this.height - y - height)} ${num(width)} ${num(height)} re`);
290
+ parts.push(fill !== undefined && stroke !== undefined ? 'B' : fill !== undefined ? 'f' : 'S');
291
+ parts.push('Q');
292
+ this.ops().push(parts.join(' '));
293
+ }
294
+
295
+ line(x1: number, y1: number, x2: number, y2: number, options: { color?: PdfColor; width?: number } = {}): void {
296
+ this.ops().push(
297
+ `q ${rgb(options.color ?? '#000000')} RG ${num(options.width ?? 1)} w ${num(x1)} ${num(this.height - y1)} m ${num(x2)} ${num(this.height - y2)} l S Q`,
298
+ );
299
+ }
300
+
301
+ /** The whole file, as ASCII bytes. */
302
+ toBytes(metadata: PdfMetadata = {}): Uint8Array {
303
+ const text = this.toString(metadata);
304
+ const bytes = new Uint8Array(text.length);
305
+ for (let i = 0; i < text.length; i += 1) bytes[i] = text.charCodeAt(i);
306
+ return bytes;
307
+ }
308
+
309
+ /** The whole file as a string; every character is ASCII, so its length is its byte count. */
310
+ toString(metadata: PdfMetadata = {}): string {
311
+ /*
312
+ Object numbers: 1 catalog, 2 page tree, 3 to 5 fonts, 6 info, then a page
313
+ and its content stream for each page in order.
314
+ */
315
+ const objects: string[] = [];
316
+ const pageIds = this.pages.map((_, i) => 7 + i * 2);
317
+ objects.push('<< /Type /Catalog /Pages 2 0 R >>');
318
+ objects.push(`<< /Type /Pages /Kids [${pageIds.map((id) => `${id} 0 R`).join(' ')}] /Count ${this.pages.length} >>`);
319
+ for (const font of ['regular', 'bold', 'mono'] as const) {
320
+ objects.push(`<< /Type /Font /Subtype /Type1 /BaseFont /${FONT_NAME[font]} /Encoding /WinAnsiEncoding >>`);
321
+ }
322
+ const info: string[] = ['/Producer (Trazum)'];
323
+ if (metadata.title !== undefined) info.push(`/Title ${literal(metadata.title)}`);
324
+ if (metadata.subject !== undefined) info.push(`/Subject ${literal(metadata.subject)}`);
325
+ if (metadata.author !== undefined) info.push(`/Author ${literal(metadata.author)}`);
326
+ if (metadata.createdAt !== undefined) info.push(`/CreationDate (${pdfDate(metadata.createdAt)})`);
327
+ objects.push(`<< ${info.join(' ')} >>`);
328
+ const resources = '<< /Font << /F1 3 0 R /F2 4 0 R /F3 5 0 R >> >>';
329
+ this.pages.forEach((ops, i) => {
330
+ const contentId = 8 + i * 2;
331
+ objects.push(
332
+ `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${num(this.width)} ${num(this.height)}] /Resources ${resources} /Contents ${contentId} 0 R >>`,
333
+ );
334
+ const stream = ops.join('\n');
335
+ objects.push(`<< /Length ${stream.length} >>\nstream\n${stream}\nendstream`);
336
+ });
337
+
338
+ let out = '%PDF-1.4\n';
339
+ const offsets: number[] = [];
340
+ objects.forEach((body, i) => {
341
+ offsets.push(out.length);
342
+ out += `${i + 1} 0 obj\n${body}\nendobj\n`;
343
+ });
344
+ const xref = out.length;
345
+ out += `xref\n0 ${objects.length + 1}\n0000000000 65535 f \n`;
346
+ for (const offset of offsets) out += `${String(offset).padStart(10, '0')} 00000 n \n`;
347
+ out += `trailer\n<< /Size ${objects.length + 1} /Root 1 0 R /Info 6 0 R >>\nstartxref\n${xref}\n%%EOF\n`;
348
+ return out;
349
+ }
350
+ }
351
+
352
+ /** `D:YYYYMMDDHHmmSSZ`, in UTC. */
353
+ function pdfDate(date: Date): string {
354
+ const pad = (value: number): string => String(value).padStart(2, '0');
355
+ return `D:${date.getUTCFullYear()}${pad(date.getUTCMonth() + 1)}${pad(date.getUTCDate())}${pad(date.getUTCHours())}${pad(date.getUTCMinutes())}${pad(date.getUTCSeconds())}Z`;
356
+ }