md-preview-pdf 1.0.5 → 1.1.0
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/CHANGELOG.md +111 -0
- package/README.md +151 -26
- package/dist/converter.d.ts +8 -0
- package/dist/converter.d.ts.map +1 -1
- package/dist/converter.js +46 -4
- package/dist/converter.js.map +1 -1
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +81 -1
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/markdown-parser.d.ts.map +1 -1
- package/dist/parser/markdown-parser.js +5 -3
- package/dist/parser/markdown-parser.js.map +1 -1
- package/dist/renderers/base-styles.d.ts +16 -0
- package/dist/renderers/base-styles.d.ts.map +1 -0
- package/dist/renderers/base-styles.js +322 -0
- package/dist/renderers/base-styles.js.map +1 -0
- package/dist/renderers/html-renderer.d.ts.map +1 -1
- package/dist/renderers/html-renderer.js +36 -319
- package/dist/renderers/html-renderer.js.map +1 -1
- package/dist/renderers/katex-styles.d.ts +10 -0
- package/dist/renderers/katex-styles.d.ts.map +1 -0
- package/dist/renderers/katex-styles.js +54 -0
- package/dist/renderers/katex-styles.js.map +1 -0
- package/dist/renderers/mermaid-renderer.d.ts.map +1 -1
- package/dist/renderers/mermaid-renderer.js +15 -7
- package/dist/renderers/mermaid-renderer.js.map +1 -1
- package/dist/renderers/pdf-renderer.d.ts.map +1 -1
- package/dist/renderers/pdf-renderer.js +110 -4
- package/dist/renderers/pdf-renderer.js.map +1 -1
- package/dist/themes/colors/github-colors.d.ts +5 -0
- package/dist/themes/colors/github-colors.d.ts.map +1 -0
- package/dist/themes/colors/github-colors.js +114 -0
- package/dist/themes/colors/github-colors.js.map +1 -0
- package/dist/themes/colors/github-dark-colors.d.ts +5 -0
- package/dist/themes/colors/github-dark-colors.d.ts.map +1 -0
- package/dist/themes/colors/github-dark-colors.js +114 -0
- package/dist/themes/colors/github-dark-colors.js.map +1 -0
- package/dist/themes/colors/vscode-dark-colors.d.ts +6 -0
- package/dist/themes/colors/vscode-dark-colors.d.ts.map +1 -0
- package/dist/themes/colors/vscode-dark-colors.js +95 -0
- package/dist/themes/colors/vscode-dark-colors.js.map +1 -0
- package/dist/themes/colors/vscode-light-colors.d.ts +6 -0
- package/dist/themes/colors/vscode-light-colors.d.ts.map +1 -0
- package/dist/themes/colors/vscode-light-colors.js +96 -0
- package/dist/themes/colors/vscode-light-colors.js.map +1 -0
- package/dist/themes/github-dark.d.ts +1 -2
- package/dist/themes/github-dark.d.ts.map +1 -1
- package/dist/themes/github-dark.js +914 -199
- package/dist/themes/github-dark.js.map +1 -1
- package/dist/themes/github.d.ts +1 -2
- package/dist/themes/github.d.ts.map +1 -1
- package/dist/themes/github.js +969 -226
- package/dist/themes/github.js.map +1 -1
- package/dist/themes/vscode-dark.d.ts +1 -1
- package/dist/themes/vscode-dark.d.ts.map +1 -1
- package/dist/themes/vscode-dark.js +75 -50
- package/dist/themes/vscode-dark.js.map +1 -1
- package/dist/themes/vscode-light.d.ts +1 -1
- package/dist/themes/vscode-light.d.ts.map +1 -1
- package/dist/themes/vscode-light.js +55 -31
- package/dist/themes/vscode-light.js.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,117 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.1.0] - 2026-01-11
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Full-width Gantt chart rendering**: Gantt charts now span the entire page width
|
|
12
|
+
- Configured ganttConfig in Mermaid initialization with `useWidth` parameter
|
|
13
|
+
- Optimized padding and margins for better Gantt diagram display
|
|
14
|
+
- Enhanced CSS for `.mermaid-container.gantt` to prevent width constraints
|
|
15
|
+
|
|
16
|
+
- **Official Mermaid theme rendering**: Use official Mermaid themes and validate user selection
|
|
17
|
+
- Removed custom CSS and theme overrides for Mermaid
|
|
18
|
+
- Dark-mode themes (`github-dark`, `vscode-dark`) use Mermaid's `dark` theme
|
|
19
|
+
- Light/default themes (`github`, `github-light`, `vscode-light`) use Mermaid's `default` theme
|
|
20
|
+
- Validate Mermaid theme names; allowed themes: `default`, `forest`, `dark`, `neutral`, `base`
|
|
21
|
+
- Invalid themes now log a warning and fallback to `default`
|
|
22
|
+
|
|
23
|
+
- **Modular CSS rendering architecture**: Improved code organization
|
|
24
|
+
- Extracted base document CSS into separate `base-styles.ts` module
|
|
25
|
+
- Extracted KaTeX styles into separate `katex-styles.ts` module
|
|
26
|
+
- Reduced `html-renderer.ts` complexity for better maintainability
|
|
27
|
+
- Each CSS module independently testable and reusable
|
|
28
|
+
|
|
29
|
+
- **Render YAML front matter as an HTML table**: Render YAML front matter as an HTML table in generated PDFs for clearer metadata presentation ([963b163](https://github.com/anuragkr29/md-preview-pdf/commit/963b163)).
|
|
30
|
+
|
|
31
|
+
- **Enhanced security measures**:
|
|
32
|
+
- Added SRI (Subresource Integrity) hashes to all CDN resources for tamper detection
|
|
33
|
+
- Implemented HTML escaping for document title field to prevent XSS
|
|
34
|
+
- Changed Mermaid security level from `'loose'` to `'antiscript'` for safer diagram rendering
|
|
35
|
+
- Added validation for custom CSS paths to prevent path traversal attacks
|
|
36
|
+
- Added executable path validation for Chrome/Chromium detection
|
|
37
|
+
|
|
38
|
+
### Improved
|
|
39
|
+
- **Code organization**: CSS generation logic separated into focused modules
|
|
40
|
+
- Better separation of concerns
|
|
41
|
+
- Easier to locate and modify specific CSS rules
|
|
42
|
+
- Improved code reusability
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
- Rendering issues for the `github-dark` theme in generated PDFs; removed unused variables and minor cleanups ([e88e723](https://github.com/anuragkr29/md-preview-pdf/commit/e88e723)).
|
|
46
|
+
|
|
47
|
+
### CI / Tests
|
|
48
|
+
- Added Node 24.x to the GitHub Actions Node matrix (see `.github/workflows/ci.yml`) ([3390c1b](https://github.com/anuragkr29/md-preview-pdf/commit/3390c1b)).
|
|
49
|
+
- Increased Jest timeout to 120s for PDF generation tests to reduce flaky failures (tests/margin-verification.test.ts) ([3390c1b](https://github.com/anuragkr29/md-preview-pdf/commit/3390c1b)).
|
|
50
|
+
|
|
51
|
+
### Chore
|
|
52
|
+
- Regenerated sample PDFs and updated documentation/changelog metadata ([eebc2d0](https://github.com/anuragkr29/md-preview-pdf/commit/eebc2d0)).
|
|
53
|
+
|
|
54
|
+
## [1.0.6] - 2026-01-05
|
|
55
|
+
|
|
56
|
+
### 🔧 Fixed
|
|
57
|
+
|
|
58
|
+
#### System Chrome Fallback for Older OS Versions
|
|
59
|
+
- **Issue**: Bundled Chromium failed on macOS 10.x (Catalina and older) with error: `dyld: cannot load 'Google Chrome for Testing' (load command 0x80000034 is unknown)`
|
|
60
|
+
- **Root Cause**: Chrome for Testing binaries require macOS 11+ / Windows 10 1809+. Older systems are incompatible.
|
|
61
|
+
- **Solution**: Implemented automatic fallback to system-installed Chrome when bundled Chromium fails
|
|
62
|
+
- Automatically detects Chrome installation at common paths
|
|
63
|
+
- Supports environment variable `PUPPETEER_EXECUTABLE_PATH` for custom Chrome location
|
|
64
|
+
- Falls back gracefully with clear error messages if no Chrome found
|
|
65
|
+
- Works on macOS, Windows, and Linux
|
|
66
|
+
|
|
67
|
+
#### Compatibility Improvements
|
|
68
|
+
- Added `findSystemChrome()` function that checks:
|
|
69
|
+
- Environment variable `PUPPETEER_EXECUTABLE_PATH`
|
|
70
|
+
- Common Chrome installation paths (macOS, Windows, Linux)
|
|
71
|
+
- System PATH using `which` (Unix) or `where` (Windows) commands
|
|
72
|
+
- Enhanced browser launch with try-catch fallback mechanism
|
|
73
|
+
- Improved error messages with actionable troubleshooting steps
|
|
74
|
+
|
|
75
|
+
### 📚 Documentation
|
|
76
|
+
|
|
77
|
+
#### System Requirements (README.md)
|
|
78
|
+
- **macOS**: Minimum macOS 11 (Big Sur). For macOS 10.x, install Google Chrome manually.
|
|
79
|
+
- **Windows**: Minimum Windows 10 (version 1809). Older versions need manual Chrome installation.
|
|
80
|
+
- **Linux**: Ubuntu 18.04+, Debian 10+, Fedora 32+, and most modern distributions.
|
|
81
|
+
- Added memory requirements: 512MB minimum, 1GB+ recommended.
|
|
82
|
+
|
|
83
|
+
#### Troubleshooting Guide (README.md)
|
|
84
|
+
New comprehensive troubleshooting section covering:
|
|
85
|
+
- "dyld: cannot load" error on macOS (Chrome installation solution)
|
|
86
|
+
- "Failed to launch browser" on Windows (Chrome path configuration)
|
|
87
|
+
- Missing dependencies on Linux (package installation commands)
|
|
88
|
+
- Out of memory errors (Node.js memory limits)
|
|
89
|
+
- Slow performance tips (feature toggles)
|
|
90
|
+
- How to get help (issue reporting guidelines)
|
|
91
|
+
|
|
92
|
+
#### Why This Happens
|
|
93
|
+
- **Chromium Compatibility**: Puppeteer downloads Chrome for Testing which has minimum OS requirements
|
|
94
|
+
- **macOS 10.x limitation**: Apple's dyld (dynamic linker) in macOS 10.x doesn't support load command 0x80000034 used by modern Chrome builds
|
|
95
|
+
- **Windows limitation**: Modern Chrome requires Windows 10 1809+ for certain APIs
|
|
96
|
+
- **Solution**: System-installed Chrome has broader OS compatibility and is updated independently
|
|
97
|
+
|
|
98
|
+
### ✅ Testing
|
|
99
|
+
- ✅ Verified on macOS 11+: Bundled Chromium works
|
|
100
|
+
- ✅ Verified fallback on older systems: System Chrome detected and used
|
|
101
|
+
- ✅ Tested environment variable override
|
|
102
|
+
- ✅ Tested error handling when no Chrome available
|
|
103
|
+
|
|
104
|
+
### 🎯 Supported Systems
|
|
105
|
+
|
|
106
|
+
| OS | Minimum Version | Notes |
|
|
107
|
+
|----|----------------|-------|
|
|
108
|
+
| macOS | 11 (Big Sur) | Older versions: install Chrome manually |
|
|
109
|
+
| Windows | 10 (1809) | Older versions: install Chrome manually |
|
|
110
|
+
| Linux | Ubuntu 18.04+, Debian 10+ | Most modern distributions supported |
|
|
111
|
+
|
|
112
|
+
### 🔗 Related Links
|
|
113
|
+
- [Puppeteer System Requirements](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md)
|
|
114
|
+
- [Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing/)
|
|
115
|
+
- [Google Chrome Download](https://www.google.com/chrome/)
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
8
119
|
## [1.0.5] - 2026-01-05
|
|
9
120
|
|
|
10
121
|
### 🎉 First Official Release with read me updated
|
package/README.md
CHANGED
|
@@ -22,6 +22,11 @@ A state-of-the-art Markdown to PDF converter that preserves the exact visual app
|
|
|
22
22
|
- **Emoji Support**: Convert `:emoji:` shortcodes to unicode
|
|
23
23
|
- **High-Fidelity Output**: Uses Puppeteer for pixel-perfect PDF generation
|
|
24
24
|
|
|
25
|
+
### What's new in v1.1.0
|
|
26
|
+
- Render YAML front matter as an HTML table in generated PDFs for clearer metadata presentation
|
|
27
|
+
- Comprehensive security hardening (SRI for CDNs, improved escaping, stricter Mermaid security level)
|
|
28
|
+
- Refactored CSS rendering into dedicated modules for improved maintainability
|
|
29
|
+
|
|
25
30
|
## 📦 Installation
|
|
26
31
|
|
|
27
32
|
### From Source (Development)
|
|
@@ -70,8 +75,21 @@ md-preview-pdf document.md --page-numbers
|
|
|
70
75
|
|
|
71
76
|
# Generate table of contents
|
|
72
77
|
md-preview-pdf document.md --toc
|
|
78
|
+
|
|
79
|
+
# TOC with custom depth
|
|
80
|
+
md-preview-pdf document.md --toc --toc-depth 2
|
|
73
81
|
```
|
|
74
82
|
|
|
83
|
+
> **Note**: Table of contents generation requires a `${toc}` marker in your markdown file where you want the TOC to appear. Example:
|
|
84
|
+
> ```markdown
|
|
85
|
+
> # My Document
|
|
86
|
+
>
|
|
87
|
+
> ${toc}
|
|
88
|
+
>
|
|
89
|
+
> ## Section 1
|
|
90
|
+
> Content here...
|
|
91
|
+
> ```
|
|
92
|
+
|
|
75
93
|
### Programmatic Usage
|
|
76
94
|
|
|
77
95
|
```typescript
|
|
@@ -112,7 +130,7 @@ await converter.cleanup();
|
|
|
112
130
|
| `--no-math` | Disable KaTeX math rendering | `true` |
|
|
113
131
|
| `--no-emoji` | Disable emoji conversion | `true` |
|
|
114
132
|
| `--no-highlight` | Disable syntax highlighting | `true` |
|
|
115
|
-
| `--mermaid-theme <theme>` | Mermaid theme (default, forest, dark, neutral) | `default` |
|
|
133
|
+
| `--mermaid-theme <theme>` | Mermaid theme (default, forest, dark, neutral, base) | `default` |
|
|
116
134
|
| `--header <template>` | Custom header HTML template | - |
|
|
117
135
|
| `--footer <template>` | Custom footer HTML template | - |
|
|
118
136
|
| `--page-numbers` | Add page numbers to footer | `false` |
|
|
@@ -138,7 +156,13 @@ md-preview-pdf themes
|
|
|
138
156
|
|
|
139
157
|
### Customizing Theme Styling
|
|
140
158
|
|
|
141
|
-
Each theme is defined as a CSS string in the `src/themes/` directory. To customize a theme
|
|
159
|
+
Each theme is defined as a CSS string in the `src/themes/` directory. Color palettes are split out into `src/themes/colors/` as separate modules (for example: `github-colors.ts`, `github-dark-colors.ts`, `vscode-light-colors.ts`, `vscode-dark-colors.ts`). To customize a theme you can either edit the theme file itself or adjust the palette module it imports.
|
|
160
|
+
|
|
161
|
+
Tips:
|
|
162
|
+
- Edit `src/themes/colors/*-colors.ts` to change shared color variables used across themes.
|
|
163
|
+
- Or override CSS variables in your own custom stylesheet and pass it via `--css <path>`.
|
|
164
|
+
|
|
165
|
+
To customize a theme:
|
|
142
166
|
|
|
143
167
|
1. **GitHub Light Theme** (`src/themes/github.ts`)
|
|
144
168
|
- Background color: `#ffffff` (white)
|
|
@@ -194,11 +218,37 @@ Supported diagram types:
|
|
|
194
218
|
- Class diagrams
|
|
195
219
|
- State diagrams
|
|
196
220
|
- Entity Relationship diagrams
|
|
197
|
-
- Gantt charts
|
|
221
|
+
- Gantt charts (full-width rendering)
|
|
198
222
|
- Pie charts
|
|
199
223
|
- Git graphs
|
|
200
224
|
- User Journey diagrams
|
|
201
225
|
|
|
226
|
+
### Mermaid Themes and Configuration
|
|
227
|
+
|
|
228
|
+
The converter automatically selects the appropriate Mermaid theme based on your document theme:
|
|
229
|
+
|
|
230
|
+
| Document Theme | Mermaid Theme |
|
|
231
|
+
|---|---|
|
|
232
|
+
| `github` | `default` |
|
|
233
|
+
| `github-dark` | `dark` |
|
|
234
|
+
| `vscode-light` | `default` |
|
|
235
|
+
| `vscode-dark` | `dark` |
|
|
236
|
+
|
|
237
|
+
You can also explicitly set the Mermaid theme via CLI:
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Use forest theme
|
|
241
|
+
md-preview-pdf document.md --mermaid-theme forest
|
|
242
|
+
|
|
243
|
+
# Use neutral theme
|
|
244
|
+
md-preview-pdf document.md --mermaid-theme neutral
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Available Mermaid themes**: `default`, `forest`, `dark`, `neutral`, `base`
|
|
248
|
+
|
|
249
|
+
> **Note**: Invalid theme names will trigger a warning and fallback to the `default` theme automatically.
|
|
250
|
+
|
|
251
|
+
|
|
202
252
|
## ➗ Math Equations
|
|
203
253
|
|
|
204
254
|
Inline math with single dollar signs:
|
|
@@ -224,15 +274,16 @@ Use YAML front matter to configure document-specific options:
|
|
|
224
274
|
title: "My Document"
|
|
225
275
|
author: "John Doe"
|
|
226
276
|
date: "2024-01-01"
|
|
227
|
-
|
|
277
|
+
pdfs:
|
|
228
278
|
format: Letter
|
|
229
279
|
margin:
|
|
230
280
|
top: "25mm"
|
|
231
281
|
bottom: "25mm"
|
|
232
|
-
theme: github-dark
|
|
233
282
|
---
|
|
234
283
|
```
|
|
235
284
|
|
|
285
|
+
In v1.1.0 the YAML front matter is also rendered as an HTML table in the generated PDF, providing a clear metadata summary at the top of the document.
|
|
286
|
+
|
|
236
287
|
## 📁 Custom Containers
|
|
237
288
|
|
|
238
289
|
```markdown
|
|
@@ -276,27 +327,6 @@ npm run dev -- input.md
|
|
|
276
327
|
npm run lint
|
|
277
328
|
```
|
|
278
329
|
|
|
279
|
-
## 📂 Project Structure
|
|
280
|
-
|
|
281
|
-
```
|
|
282
|
-
md-preview-pdf/
|
|
283
|
-
├── src/
|
|
284
|
-
│ ├── index.ts # Main entry point
|
|
285
|
-
│ ├── cli.ts # CLI interface
|
|
286
|
-
│ ├── converter.ts # Main converter class
|
|
287
|
-
│ ├── parser/ # Markdown parsing
|
|
288
|
-
│ ├── renderers/ # HTML/PDF/Mermaid rendering
|
|
289
|
-
│ ├── themes/ # CSS themes
|
|
290
|
-
│ ├── utils/ # Utilities
|
|
291
|
-
│ └── types/ # TypeScript types
|
|
292
|
-
├── tests/
|
|
293
|
-
│ ├── samples/ # Test markdown files
|
|
294
|
-
│ └── *.test.ts # Test files
|
|
295
|
-
├── package.json
|
|
296
|
-
├── tsconfig.json
|
|
297
|
-
└── README.md
|
|
298
|
-
```
|
|
299
|
-
|
|
300
330
|
## 🔧 API Reference
|
|
301
331
|
|
|
302
332
|
### Converter Class
|
|
@@ -348,6 +378,101 @@ interface ConverterOptions {
|
|
|
348
378
|
debug?: boolean; // Debug mode
|
|
349
379
|
}
|
|
350
380
|
```
|
|
381
|
+
## 💻 System Requirements
|
|
382
|
+
|
|
383
|
+
### Minimum Requirements
|
|
384
|
+
- **Node.js**: >= 18.0.0
|
|
385
|
+
- **npm**: >= 8.0.0
|
|
386
|
+
- **Memory**: 512MB minimum (1GB+ recommended for large documents)
|
|
387
|
+
|
|
388
|
+
### Operating System Compatibility
|
|
389
|
+
|
|
390
|
+
#### macOS
|
|
391
|
+
- **Minimum**: macOS 11 (Big Sur) or later
|
|
392
|
+
- **Why**: Bundled Chromium requires macOS 11+
|
|
393
|
+
- **Older Macs**: For macOS 10.x, install Google Chrome manually and the tool will automatically use it
|
|
394
|
+
|
|
395
|
+
#### Windows
|
|
396
|
+
- **Minimum**: Windows 10 (version 1809) or later
|
|
397
|
+
- **Why**: Bundled Chromium requires Windows 10 1809+
|
|
398
|
+
- **Older Windows**: Install Google Chrome manually for compatibility
|
|
399
|
+
|
|
400
|
+
#### Linux
|
|
401
|
+
- **Most distributions supported** (Ubuntu 18.04+, Debian 10+, Fedora 32+, etc.)
|
|
402
|
+
- Required system packages may vary by distribution
|
|
403
|
+
- See [Puppeteer system requirements](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md) for details
|
|
404
|
+
|
|
405
|
+
### Browser Requirements
|
|
406
|
+
|
|
407
|
+
This tool uses Puppeteer which automatically downloads Chromium. However, if the bundled Chromium is incompatible with your system:
|
|
408
|
+
|
|
409
|
+
1. **Install Google Chrome** (recommended): The tool will automatically detect and use it
|
|
410
|
+
2. **Set custom Chrome path**:
|
|
411
|
+
```bash
|
|
412
|
+
export PUPPETEER_EXECUTABLE_PATH="/path/to/chrome"
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
## 🔧 Troubleshooting
|
|
416
|
+
|
|
417
|
+
### "dyld: cannot load 'Google Chrome for Testing'" (macOS)
|
|
418
|
+
|
|
419
|
+
**Problem**: This error occurs on macOS 10.x (Catalina and older) because the bundled Chromium requires macOS 11+.
|
|
420
|
+
|
|
421
|
+
**Solution**:
|
|
422
|
+
1. Install [Google Chrome](https://www.google.com/chrome/) from the official website
|
|
423
|
+
2. The tool will automatically detect and use your system Chrome installation
|
|
424
|
+
3. Alternatively, set the Chrome path manually:
|
|
425
|
+
```bash
|
|
426
|
+
export PUPPETEER_EXECUTABLE_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
427
|
+
md-preview-pdf document.md
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### "Failed to launch the browser process" (Windows)
|
|
431
|
+
|
|
432
|
+
**Problem**: Bundled Chromium incompatible with older Windows versions.
|
|
433
|
+
|
|
434
|
+
**Solution**:
|
|
435
|
+
1. Install [Google Chrome](https://www.google.com/chrome/)
|
|
436
|
+
2. Or set Chrome path:
|
|
437
|
+
```bash
|
|
438
|
+
set PUPPETEER_EXECUTABLE_PATH="C:\Program Files\Google\Chrome\Application\chrome.exe"
|
|
439
|
+
md-preview-pdf document.md
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### Out of Memory Errors
|
|
443
|
+
|
|
444
|
+
**Problem**: Large documents exhaust available memory.
|
|
445
|
+
|
|
446
|
+
**Solution**:
|
|
447
|
+
1. Increase Node.js memory limit:
|
|
448
|
+
```bash
|
|
449
|
+
export NODE_OPTIONS="--max-old-space-size=4096"
|
|
450
|
+
md-preview-pdf large-document.md
|
|
451
|
+
```
|
|
452
|
+
2. Split large documents into smaller files
|
|
453
|
+
3. Disable resource-intensive features:
|
|
454
|
+
```bash
|
|
455
|
+
md-preview-pdf document.md --no-highlight --no-math
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### Slow Performance
|
|
459
|
+
|
|
460
|
+
**Tips**:
|
|
461
|
+
- First conversion is slower (Chromium downloads)
|
|
462
|
+
- Use `--no-mermaid` if you don't have diagrams
|
|
463
|
+
- Disable unused features (`--no-math`, `--no-emoji`, `--no-highlight`)
|
|
464
|
+
- Consider SSD for faster file I/O
|
|
465
|
+
|
|
466
|
+
### Getting Help
|
|
467
|
+
|
|
468
|
+
1. Check [Puppeteer troubleshooting](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md)
|
|
469
|
+
2. Search [existing issues](https://github.com/anuragkr29/md-preview-pdf/issues)
|
|
470
|
+
3. Create a [new issue](https://github.com/anuragkr29/md-preview-pdf/issues/new) with:
|
|
471
|
+
- Operating system and version
|
|
472
|
+
- Node.js version (`node --version`)
|
|
473
|
+
- Full error message
|
|
474
|
+
- Command that failed
|
|
475
|
+
|
|
351
476
|
|
|
352
477
|
## 🧪 Testing
|
|
353
478
|
|
package/dist/converter.d.ts
CHANGED
|
@@ -9,6 +9,14 @@ import { ConverterOptions, ConversionResult, ParsedMarkdown } from './types';
|
|
|
9
9
|
export declare class Converter {
|
|
10
10
|
private options;
|
|
11
11
|
constructor(options?: ConverterOptions);
|
|
12
|
+
/**
|
|
13
|
+
* Map document theme to Mermaid predefined theme
|
|
14
|
+
*/
|
|
15
|
+
private getMermaidThemeForDocumentTheme;
|
|
16
|
+
/**
|
|
17
|
+
* Validate Mermaid theme is one of the predefined themes
|
|
18
|
+
*/
|
|
19
|
+
private isValidMermaidTheme;
|
|
12
20
|
/**
|
|
13
21
|
* Convert markdown string to PDF buffer
|
|
14
22
|
*/
|
package/dist/converter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,SAAS,CAAC;AAsEjB;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,GAAE,gBAAqB;
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,SAAS,CAAC;AAsEjB;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,GAAE,gBAAqB;IAiC1C;;MAEE;IACF,OAAO,CAAC,+BAA+B;IAevC;;MAEE;IACF,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyBzE;;OAEG;IACG,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC;IAoF5B;;OAEG;IACG,YAAY,CAChB,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAkB9B;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAI/C;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxE;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAIpD;;OAEG;IACH,UAAU,IAAI,gBAAgB;IAI9B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,SAAS,CAEzE;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,eAAe,SAAS,CAAC"}
|
package/dist/converter.js
CHANGED
|
@@ -53,10 +53,10 @@ const defaultOptions = {
|
|
|
53
53
|
pdf: {
|
|
54
54
|
format: 'A4',
|
|
55
55
|
margin: {
|
|
56
|
-
top: '
|
|
57
|
-
right: '
|
|
58
|
-
bottom: '
|
|
59
|
-
left: '
|
|
56
|
+
top: '5mm',
|
|
57
|
+
right: '5mm',
|
|
58
|
+
bottom: '5mm',
|
|
59
|
+
left: '5mm',
|
|
60
60
|
},
|
|
61
61
|
printBackground: true,
|
|
62
62
|
},
|
|
@@ -116,6 +116,48 @@ class Converter {
|
|
|
116
116
|
highlightTheme: (0, themes_1.getMatchingHighlightTheme)(themeName),
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
|
+
// Set Mermaid theme based on document theme if not already set
|
|
120
|
+
if (this.options.mermaid?.theme === 'default' || !this.options.mermaid?.theme) {
|
|
121
|
+
const themeName = this.options.theme?.name || 'github';
|
|
122
|
+
const mermaidTheme = this.getMermaidThemeForDocumentTheme(themeName);
|
|
123
|
+
this.options.mermaid = {
|
|
124
|
+
...this.options.mermaid,
|
|
125
|
+
theme: mermaidTheme,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
else if (this.options.mermaid?.theme && !this.isValidMermaidTheme(this.options.mermaid.theme)) {
|
|
129
|
+
// Validate that user-provided theme is one of the predefined themes
|
|
130
|
+
utils_1.logger.warn(`Invalid Mermaid theme: "${this.options.mermaid.theme}". Using default. ` +
|
|
131
|
+
`Valid themes are: default, forest, dark, neutral, base`);
|
|
132
|
+
this.options.mermaid = {
|
|
133
|
+
...this.options.mermaid,
|
|
134
|
+
theme: 'default',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Map document theme to Mermaid predefined theme
|
|
140
|
+
*/
|
|
141
|
+
getMermaidThemeForDocumentTheme(documentTheme) {
|
|
142
|
+
switch (documentTheme) {
|
|
143
|
+
case 'github':
|
|
144
|
+
return 'default';
|
|
145
|
+
case 'github-dark':
|
|
146
|
+
return 'dark';
|
|
147
|
+
case 'vscode-light':
|
|
148
|
+
return 'default';
|
|
149
|
+
case 'vscode-dark':
|
|
150
|
+
return 'dark';
|
|
151
|
+
default:
|
|
152
|
+
return 'default';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Validate Mermaid theme is one of the predefined themes
|
|
157
|
+
*/
|
|
158
|
+
isValidMermaidTheme(theme) {
|
|
159
|
+
const validThemes = ['default', 'forest', 'dark', 'neutral', 'base'];
|
|
160
|
+
return validThemes.includes(theme);
|
|
119
161
|
}
|
|
120
162
|
/**
|
|
121
163
|
* Convert markdown string to PDF buffer
|
package/dist/converter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGzE,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAcxF;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGzE,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAcxF;AAyFD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE,gBAAqB,GAC7B,cAAc,CAyChB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKvE;;;;;;;;;AAED,wBAOE"}
|
package/dist/parser/index.js
CHANGED
|
@@ -36,6 +36,80 @@ function parseFrontMatter(content) {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Convert front matter object to nested HTML table with colspan/rowspan
|
|
41
|
+
*/
|
|
42
|
+
function frontMatterToTable(obj) {
|
|
43
|
+
// Calculate column span for each key
|
|
44
|
+
function getColumnCount(value) {
|
|
45
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
46
|
+
const entries = Object.entries(value);
|
|
47
|
+
return entries.reduce((sum, [_, v]) => sum + getColumnCount(v), 0);
|
|
48
|
+
}
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
// Calculate max depth
|
|
52
|
+
function getDepth(value) {
|
|
53
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
54
|
+
const entries = Object.entries(value);
|
|
55
|
+
return 1 + Math.max(...entries.map(([_, v]) => getDepth(v)));
|
|
56
|
+
}
|
|
57
|
+
return 1;
|
|
58
|
+
}
|
|
59
|
+
const maxDepth = Math.max(...Object.values(obj).map(v => getDepth(v)));
|
|
60
|
+
const entries = Object.entries(obj);
|
|
61
|
+
// Total rows = maxDepth (for headers at each level) + 1 (for deepest values)
|
|
62
|
+
const totalRows = maxDepth + 1;
|
|
63
|
+
// Build HTML table with minimal margins
|
|
64
|
+
let html = '<table class="frontmatter-table" style="margin: 0 0 12px 0; border-collapse: collapse; width: 100%;">\n';
|
|
65
|
+
// Track which cells have been filled by rowspan
|
|
66
|
+
const occupiedCells = new Set();
|
|
67
|
+
// Build each row
|
|
68
|
+
for (let row = 0; row < totalRows; row++) {
|
|
69
|
+
html += ' <tr>\n';
|
|
70
|
+
function renderRow(entries, currentDepth, colOffset) {
|
|
71
|
+
let col = colOffset;
|
|
72
|
+
entries.forEach(([key, value]) => {
|
|
73
|
+
const cellKey = `${row},${col}`;
|
|
74
|
+
const isLeaf = typeof value !== 'object' || value === null || Array.isArray(value);
|
|
75
|
+
const colspan = getColumnCount(value);
|
|
76
|
+
// Check if this position is already occupied by a rowspan from above
|
|
77
|
+
if (occupiedCells.has(cellKey) && isLeaf) {
|
|
78
|
+
col += colspan;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (row === currentDepth) {
|
|
82
|
+
// This row shows headers for this depth
|
|
83
|
+
html += ` <th colspan="${colspan}">${key}</th>\n`;
|
|
84
|
+
col += colspan;
|
|
85
|
+
}
|
|
86
|
+
else if (row === currentDepth + 1 && isLeaf) {
|
|
87
|
+
// This row shows values for simple values at this depth
|
|
88
|
+
const displayValue = value === null ? '' : String(value);
|
|
89
|
+
const rowspan = totalRows - row;
|
|
90
|
+
// Mark cells as occupied by this rowspan
|
|
91
|
+
for (let r = row; r < row + rowspan; r++) {
|
|
92
|
+
occupiedCells.add(`${r},${col}`);
|
|
93
|
+
}
|
|
94
|
+
html += ` <td rowspan="${rowspan}">${displayValue}</td>\n`;
|
|
95
|
+
col += 1;
|
|
96
|
+
}
|
|
97
|
+
else if (row > currentDepth && !isLeaf) {
|
|
98
|
+
// Recurse into nested object
|
|
99
|
+
renderRow(Object.entries(value), currentDepth + 1, col);
|
|
100
|
+
col += colspan;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
col += colspan;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
renderRow(entries, 0, 0);
|
|
108
|
+
html += ' </tr>\n';
|
|
109
|
+
}
|
|
110
|
+
html += '</table>\n';
|
|
111
|
+
return html;
|
|
112
|
+
}
|
|
39
113
|
/**
|
|
40
114
|
* Parse markdown content and return structured result
|
|
41
115
|
*/
|
|
@@ -59,8 +133,14 @@ function parseMarkdown(markdownContent, options = {}) {
|
|
|
59
133
|
};
|
|
60
134
|
// Create parser with merged options
|
|
61
135
|
const parser = (0, markdown_parser_1.createMarkdownParser)(mergedOptions);
|
|
136
|
+
// If there's front matter, convert it to HTML table and prepend
|
|
137
|
+
let contentToRender = content;
|
|
138
|
+
if (Object.keys(frontMatter).length > 0 && markdownContent.startsWith('---')) {
|
|
139
|
+
const frontMatterTable = '<div class="frontmatter-wrapper">' + frontMatterToTable(frontMatter) + '</div>\n';
|
|
140
|
+
contentToRender = frontMatterTable + content;
|
|
141
|
+
}
|
|
62
142
|
// Parse markdown to HTML
|
|
63
|
-
const html = parser.render(
|
|
143
|
+
const html = parser.render(contentToRender);
|
|
64
144
|
utils_1.logger.debug('Markdown parsed successfully');
|
|
65
145
|
return {
|
|
66
146
|
frontMatter,
|
package/dist/parser/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAYH,4CAcC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-parser.d.ts","sourceRoot":"","sources":["../../src/parser/markdown-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,UAAqB,MAAM,aAAa,CAAC;AAahD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown-parser.d.ts","sourceRoot":"","sources":["../../src/parser/markdown-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,UAAqB,MAAM,aAAa,CAAC;AAahD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiM5C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,gBAAqB,GAAG,UAAU,CAwE/E;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -29,6 +29,8 @@ function mathPlugin(md) {
|
|
|
29
29
|
return false;
|
|
30
30
|
if (state.src[state.pos + 1] === '$')
|
|
31
31
|
return false; // Skip block math
|
|
32
|
+
if (state.src[state.pos + 1] === '{')
|
|
33
|
+
return false; // Skip ${...} template literals
|
|
32
34
|
const start = state.pos + 1;
|
|
33
35
|
let end = start;
|
|
34
36
|
while (end < state.posMax && state.src[end] !== '$') {
|
|
@@ -211,9 +213,7 @@ function createMarkdownParser(options = {}) {
|
|
|
211
213
|
// Anchor plugin for headers
|
|
212
214
|
md.use(markdown_it_anchor_1.default, {
|
|
213
215
|
level: [1, 2, 3, 4, 5, 6],
|
|
214
|
-
permalink:
|
|
215
|
-
safariReaderFix: true,
|
|
216
|
-
}),
|
|
216
|
+
permalink: false,
|
|
217
217
|
slugify: (s) => s
|
|
218
218
|
.toLowerCase()
|
|
219
219
|
.trim()
|
|
@@ -244,6 +244,8 @@ function createMarkdownParser(options = {}) {
|
|
|
244
244
|
// Custom attributes
|
|
245
245
|
md.use(markdown_it_attrs_1.default, {
|
|
246
246
|
allowedAttributes: ['id', 'class', 'style', 'width', 'height'],
|
|
247
|
+
leftDelimiter: '{:',
|
|
248
|
+
rightDelimiter: '}',
|
|
247
249
|
});
|
|
248
250
|
// Math support (KaTeX)
|
|
249
251
|
if (options.math !== false) {
|