pretext-pdf 0.8.3 → 0.9.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.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,210 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * pretext-pdf CLI — JSON in, PDF out.
4
+ *
5
+ * pretext-pdf doc.json out.pdf
6
+ * pretext-pdf doc.json > out.pdf
7
+ * cat doc.json | pretext-pdf > out.pdf
8
+ * echo '{"content":[...]}' | pretext-pdf -o out.pdf
9
+ *
10
+ * Optional flags:
11
+ * -o, --output <path> Write PDF to path instead of stdout
12
+ * -i, --input <path> Read JSON from path instead of first positional
13
+ * --markdown Treat input as Markdown (requires `marked` peer dep)
14
+ * --code-font <name> Pair with --markdown to enable styled code blocks
15
+ * -v, --version Print pretext-pdf version
16
+ * -h, --help Print this help
17
+ *
18
+ * Exit codes:
19
+ * 0 success
20
+ * 1 user error (bad arguments, file not found, invalid JSON)
21
+ * 2 render error (validation, font, image, pagination etc.)
22
+ */
23
+ import { promises as fs } from 'node:fs';
24
+ import path from 'node:path';
25
+ import { createRequire } from 'node:module';
26
+ const require = createRequire(import.meta.url);
27
+ const pkg = require('../package.json');
28
+ const HELP = `pretext-pdf v${pkg.version} — JSON → PDF
29
+
30
+ Usage:
31
+ pretext-pdf [<input.json>] [<output.pdf>]
32
+ pretext-pdf -i <input> -o <output>
33
+ cat doc.json | pretext-pdf > out.pdf
34
+
35
+ Options:
36
+ -i, --input <path> Read JSON (or Markdown with --markdown) from path
37
+ -o, --output <path> Write PDF to path (default: stdout)
38
+ --markdown Treat input as Markdown — converts via pretext-pdf/markdown
39
+ --code-font <name> With --markdown, font family for fenced code blocks
40
+ -v, --version Print pretext-pdf version
41
+ -h, --help Print this help
42
+
43
+ Examples:
44
+ pretext-pdf doc.json invoice.pdf
45
+ echo '{"content":[{"type":"heading","level":1,"text":"Hi"}]}' | pretext-pdf > out.pdf
46
+ pretext-pdf --markdown --code-font 'Courier New' README.md docs.pdf
47
+ `;
48
+ function parseArgs(argv) {
49
+ const args = { markdown: false };
50
+ const positional = [];
51
+ for (let i = 0; i < argv.length; i++) {
52
+ const a = argv[i];
53
+ if (a === '-h' || a === '--help')
54
+ return { exit: 0, message: HELP };
55
+ if (a === '-v' || a === '--version')
56
+ return { exit: 0, message: pkg.version };
57
+ if (a === '-i' || a === '--input') {
58
+ const next = argv[++i];
59
+ if (!next)
60
+ return { error: `${a} requires a path argument` };
61
+ args.inputPath = next;
62
+ continue;
63
+ }
64
+ if (a === '-o' || a === '--output') {
65
+ const next = argv[++i];
66
+ if (!next)
67
+ return { error: `${a} requires a path argument` };
68
+ args.outputPath = next;
69
+ continue;
70
+ }
71
+ if (a === '--markdown') {
72
+ args.markdown = true;
73
+ continue;
74
+ }
75
+ if (a === '--code-font') {
76
+ const next = argv[++i];
77
+ if (!next)
78
+ return { error: `${a} requires a font family argument` };
79
+ args.codeFont = next;
80
+ continue;
81
+ }
82
+ if (a.startsWith('-'))
83
+ return { error: `unknown option: ${a}` };
84
+ positional.push(a);
85
+ }
86
+ // Positional fallback: first positional is input, second is output
87
+ if (!args.inputPath && positional[0])
88
+ args.inputPath = positional[0];
89
+ if (!args.outputPath && positional[1])
90
+ args.outputPath = positional[1];
91
+ if (positional.length > 2)
92
+ return { error: `too many positional arguments (got ${positional.length}, max 2)` };
93
+ return args;
94
+ }
95
+ async function readInput(inputPath) {
96
+ if (inputPath) {
97
+ const abs = path.resolve(inputPath);
98
+ try {
99
+ return await fs.readFile(abs, 'utf-8');
100
+ }
101
+ catch (err) {
102
+ throw new CliError(`failed to read ${inputPath}: ${err instanceof Error ? err.message : String(err)}`);
103
+ }
104
+ }
105
+ // stdin
106
+ if (process.stdin.isTTY) {
107
+ throw new CliError('no input — pass a file path or pipe JSON to stdin. Run with -h for help.');
108
+ }
109
+ const chunks = [];
110
+ for await (const chunk of process.stdin) {
111
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
112
+ }
113
+ return Buffer.concat(chunks).toString('utf-8');
114
+ }
115
+ async function writeOutput(outputPath, bytes) {
116
+ if (outputPath) {
117
+ const abs = path.resolve(outputPath);
118
+ await fs.writeFile(abs, bytes);
119
+ return;
120
+ }
121
+ // stdout
122
+ if (process.stdout.isTTY) {
123
+ throw new CliError('refusing to write binary PDF to a TTY. Pass an output path or redirect (> out.pdf).');
124
+ }
125
+ await new Promise((resolve, reject) => {
126
+ process.stdout.write(Buffer.from(bytes), (err) => (err ? reject(err) : resolve()));
127
+ });
128
+ }
129
+ class CliError extends Error {
130
+ }
131
+ async function main() {
132
+ const parsed = parseArgs(process.argv.slice(2));
133
+ if ('exit' in parsed) {
134
+ process.stdout.write(parsed.message + '\n');
135
+ return parsed.exit;
136
+ }
137
+ if ('error' in parsed) {
138
+ process.stderr.write(`pretext-pdf: ${parsed.error}\n\n${HELP}`);
139
+ return 1;
140
+ }
141
+ let raw;
142
+ try {
143
+ raw = await readInput(parsed.inputPath);
144
+ }
145
+ catch (err) {
146
+ process.stderr.write(`pretext-pdf: ${err instanceof Error ? err.message : String(err)}\n`);
147
+ return 1;
148
+ }
149
+ // Build the PdfDocument. Either parse as JSON, or convert Markdown.
150
+ const { render } = await import('./index.js');
151
+ let doc;
152
+ if (parsed.markdown) {
153
+ let markdownToContent;
154
+ try {
155
+ ({ markdownToContent } = await import('./markdown.js'));
156
+ }
157
+ catch (err) {
158
+ process.stderr.write(`pretext-pdf: failed to load markdown converter: ${err instanceof Error ? err.message : String(err)}\n`);
159
+ return 2;
160
+ }
161
+ const opts = {};
162
+ if (parsed.codeFont)
163
+ opts.codeFontFamily = parsed.codeFont;
164
+ try {
165
+ const content = await markdownToContent(raw, opts);
166
+ doc = { content };
167
+ }
168
+ catch (err) {
169
+ process.stderr.write(`pretext-pdf: markdown conversion failed: ${err instanceof Error ? err.message : String(err)}\n`);
170
+ return 2;
171
+ }
172
+ }
173
+ else {
174
+ try {
175
+ doc = JSON.parse(raw);
176
+ }
177
+ catch (err) {
178
+ process.stderr.write(`pretext-pdf: invalid JSON in input: ${err instanceof Error ? err.message : String(err)}\n`);
179
+ return 1;
180
+ }
181
+ }
182
+ let pdf;
183
+ try {
184
+ pdf = await render(doc);
185
+ }
186
+ catch (err) {
187
+ const code = err?.code ?? 'RENDER_ERROR';
188
+ process.stderr.write(`pretext-pdf: ${code}: ${err instanceof Error ? err.message : String(err)}\n`);
189
+ return 2;
190
+ }
191
+ try {
192
+ await writeOutput(parsed.outputPath, pdf);
193
+ }
194
+ catch (err) {
195
+ process.stderr.write(`pretext-pdf: failed to write output: ${err instanceof Error ? err.message : String(err)}\n`);
196
+ return 1;
197
+ }
198
+ // Success: only print a confirmation when writing to a real file (not stdout).
199
+ if (parsed.outputPath && !process.env.PRETEXT_PDF_QUIET) {
200
+ process.stderr.write(`pretext-pdf: wrote ${pdf.byteLength} bytes to ${parsed.outputPath}\n`);
201
+ }
202
+ return 0;
203
+ }
204
+ main()
205
+ .then((code) => process.exit(code))
206
+ .catch((err) => {
207
+ process.stderr.write(`pretext-pdf: unexpected error: ${err instanceof Error ? err.stack ?? err.message : String(err)}\n`);
208
+ process.exit(2);
209
+ });
210
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * pretext-pdf/compat — translate a pdfmake document descriptor into a
3
+ * pretext-pdf PdfDocument so existing pdfmake codebases can switch with
4
+ * a one-line change at the entry point.
5
+ *
6
+ * import { fromPdfmake } from 'pretext-pdf/compat'
7
+ * import { render } from 'pretext-pdf'
8
+ *
9
+ * const pdfmakeDoc = { content: [...], styles: {...} }
10
+ * const pdf = await render(fromPdfmake(pdfmakeDoc))
11
+ *
12
+ * What's translated:
13
+ * - pageSize ('A4', 'LETTER', { width, height }), pageOrientation, pageMargins
14
+ * - defaultStyle + styles map (style names referenced via { text, style: 'h1' })
15
+ * - String content → paragraph
16
+ * - { text } → paragraph or rich-paragraph (depends on inline styling)
17
+ * - { ul } / { ol } → list (recursive)
18
+ * - { table: {body, widths, headerRows} } → table
19
+ * - { image } → image
20
+ * - { qr, fit } → qr-code (requires the `qrcode` peer dep at render time)
21
+ * - { pageBreak } → page-break
22
+ * - { stack } → recurse children inline
23
+ * - header / footer (string forms only — pdfmake function-style headers are not supported)
24
+ *
25
+ * What's NOT translated (skipped, optionally warns):
26
+ * - { columns } — flattened into a stack with a console warning
27
+ * - { canvas } — drawing primitives are unsupported
28
+ * - Function-style headers/footers
29
+ * - styles[name].marginX / marginY / decoration
30
+ *
31
+ * Heading detection:
32
+ * By default style names like 'header', 'h1'..'h4', 'title', 'subheader' map
33
+ * to pretext-pdf heading levels 1..4. Override with `options.headingMap`.
34
+ */
35
+ import type { PdfDocument } from './types.js';
36
+ /** A pdfmake-style document descriptor, stripped to the fields this shim handles. */
37
+ export interface PdfmakeDocument {
38
+ content: PdfmakeNode | PdfmakeNode[];
39
+ styles?: Record<string, PdfmakeStyle>;
40
+ defaultStyle?: PdfmakeStyle;
41
+ pageSize?: string | {
42
+ width: number;
43
+ height: number;
44
+ };
45
+ pageOrientation?: 'portrait' | 'landscape';
46
+ pageMargins?: number | [number, number] | [number, number, number, number];
47
+ header?: string | {
48
+ text: string;
49
+ alignment?: PdfmakeStyle['alignment'];
50
+ fontSize?: number;
51
+ color?: string;
52
+ };
53
+ footer?: string | {
54
+ text: string;
55
+ alignment?: PdfmakeStyle['alignment'];
56
+ fontSize?: number;
57
+ color?: string;
58
+ };
59
+ info?: {
60
+ title?: string;
61
+ author?: string;
62
+ subject?: string;
63
+ keywords?: string;
64
+ };
65
+ }
66
+ export type PdfmakeNode = string | PdfmakeObjectNode;
67
+ export interface PdfmakeObjectNode {
68
+ text?: string | PdfmakeNode | PdfmakeNode[];
69
+ style?: string | string[];
70
+ bold?: boolean;
71
+ italics?: boolean;
72
+ color?: string;
73
+ fontSize?: number;
74
+ alignment?: 'left' | 'center' | 'right' | 'justify';
75
+ font?: string;
76
+ ul?: PdfmakeNode[];
77
+ ol?: PdfmakeNode[];
78
+ table?: {
79
+ body: PdfmakeNode[][];
80
+ widths?: Array<number | string>;
81
+ headerRows?: number;
82
+ };
83
+ image?: string;
84
+ width?: number | string;
85
+ height?: number;
86
+ qr?: string;
87
+ fit?: number | [number, number];
88
+ pageBreak?: 'before' | 'after';
89
+ stack?: PdfmakeNode[];
90
+ columns?: PdfmakeNode[];
91
+ link?: string;
92
+ canvas?: unknown[];
93
+ }
94
+ export interface PdfmakeStyle {
95
+ fontSize?: number;
96
+ bold?: boolean;
97
+ italics?: boolean;
98
+ color?: string;
99
+ alignment?: 'left' | 'center' | 'right' | 'justify';
100
+ font?: string;
101
+ }
102
+ export interface CompatOptions {
103
+ /**
104
+ * Map of pdfmake style names to pretext-pdf heading levels (1–4).
105
+ * Default: { header: 1, h1: 1, title: 1, subheader: 2, h2: 2, h3: 3, h4: 4 }
106
+ * Pass `{}` to disable heading detection entirely (everything becomes paragraphs).
107
+ */
108
+ headingMap?: Record<string, 1 | 2 | 3 | 4>;
109
+ /**
110
+ * Called when a pdfmake feature is encountered that the shim doesn't translate
111
+ * (canvas, function-style headers, etc.). Default: log a one-time warning.
112
+ */
113
+ onUnsupported?: (feature: string) => void;
114
+ }
115
+ /**
116
+ * Translate a pdfmake document descriptor into a pretext-pdf PdfDocument.
117
+ * The result can be passed straight to `render()` from the main entry point.
118
+ */
119
+ export declare function fromPdfmake(doc: PdfmakeDocument, options?: CompatOptions): PdfDocument;
120
+ //# sourceMappingURL=compat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.d.ts","sourceRoot":"","sources":["../src/compat.ts"],"names":[],"mappings":"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"}