md-preview-pdf 1.0.6 → 1.1.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/CHANGELOG.md +66 -0
- package/README.md +82 -22
- package/SECURITY.md +3 -2
- 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 +22 -6
- 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 +42 -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 +64 -19
- 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 +31 -2
- 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,72 @@ 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.1] - 2026-02-25
|
|
9
|
+
|
|
10
|
+
### Security
|
|
11
|
+
|
|
12
|
+
- **Dependency vulnerability fixes**: Resolved 6 npm audit vulnerabilities (1 critical, 1 high, 3 moderate, 1 low)
|
|
13
|
+
- `basic-ftp` critical path traversal (CVE in `downloadToDir()`)
|
|
14
|
+
- `minimatch` high ReDoS via repeated wildcards
|
|
15
|
+
- `markdown-it` moderate ReDoS
|
|
16
|
+
- `ajv` moderate ReDoS with `$data` option
|
|
17
|
+
- `lodash-es` moderate prototype pollution in `_.unset`/`_.omit`
|
|
18
|
+
- `diff` (jsdiff) DoS in `parsePatch`/`applyPatch`
|
|
19
|
+
|
|
20
|
+
- **XSS prevention in Mermaid renderer**: Diagram content is now base64-encoded and decoded in the browser context instead of being injected raw into HTML templates
|
|
21
|
+
- **JS injection prevention**: Mermaid theme and fontFamily options are now validated/sanitized before interpolation into JavaScript contexts
|
|
22
|
+
- **HTML escaping in error fallbacks**: Mermaid error fallback HTML now escapes diagram content and error messages
|
|
23
|
+
- **HTML escaping in markdown parser**: Custom container titles, details/summary titles, and the default fence fallback now properly escape HTML entities
|
|
24
|
+
- **Image path traversal protection**: `processImages` now validates that resolved image paths stay within the document's base directory
|
|
25
|
+
- **Puppeteer hardening**: Added additional Chrome launch flags (`--disable-extensions`, `--disable-background-networking`, `--disable-sync`, `--disable-translate`, `--no-first-run`, etc.) to both PDF and Mermaid browser instances
|
|
26
|
+
- **Security documentation**: Added inline comment in markdown parser noting that `html: true` is required for GFM but untrusted input should be sanitised
|
|
27
|
+
|
|
28
|
+
## [1.1.0] - 2026-01-11
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- **Full-width Gantt chart rendering**: Gantt charts now span the entire page width
|
|
32
|
+
- Configured ganttConfig in Mermaid initialization with `useWidth` parameter
|
|
33
|
+
- Optimized padding and margins for better Gantt diagram display
|
|
34
|
+
- Enhanced CSS for `.mermaid-container.gantt` to prevent width constraints
|
|
35
|
+
|
|
36
|
+
- **Official Mermaid theme rendering**: Use official Mermaid themes and validate user selection
|
|
37
|
+
- Removed custom CSS and theme overrides for Mermaid
|
|
38
|
+
- Dark-mode themes (`github-dark`, `vscode-dark`) use Mermaid's `dark` theme
|
|
39
|
+
- Light/default themes (`github`, `github-light`, `vscode-light`) use Mermaid's `default` theme
|
|
40
|
+
- Validate Mermaid theme names; allowed themes: `default`, `forest`, `dark`, `neutral`, `base`
|
|
41
|
+
- Invalid themes now log a warning and fallback to `default`
|
|
42
|
+
|
|
43
|
+
- **Modular CSS rendering architecture**: Improved code organization
|
|
44
|
+
- Extracted base document CSS into separate `base-styles.ts` module
|
|
45
|
+
- Extracted KaTeX styles into separate `katex-styles.ts` module
|
|
46
|
+
- Reduced `html-renderer.ts` complexity for better maintainability
|
|
47
|
+
- Each CSS module independently testable and reusable
|
|
48
|
+
|
|
49
|
+
- **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)).
|
|
50
|
+
|
|
51
|
+
- **Enhanced security measures**:
|
|
52
|
+
- Added SRI (Subresource Integrity) hashes to all CDN resources for tamper detection
|
|
53
|
+
- Implemented HTML escaping for document title field to prevent XSS
|
|
54
|
+
- Changed Mermaid security level from `'loose'` to `'antiscript'` for safer diagram rendering
|
|
55
|
+
- Added validation for custom CSS paths to prevent path traversal attacks
|
|
56
|
+
- Added executable path validation for Chrome/Chromium detection
|
|
57
|
+
|
|
58
|
+
### Improved
|
|
59
|
+
- **Code organization**: CSS generation logic separated into focused modules
|
|
60
|
+
- Better separation of concerns
|
|
61
|
+
- Easier to locate and modify specific CSS rules
|
|
62
|
+
- Improved code reusability
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
- 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)).
|
|
66
|
+
|
|
67
|
+
### CI / Tests
|
|
68
|
+
- 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)).
|
|
69
|
+
- 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)).
|
|
70
|
+
|
|
71
|
+
### Chore
|
|
72
|
+
- Regenerated sample PDFs and updated documentation/changelog metadata ([eebc2d0](https://github.com/anuragkr29/md-preview-pdf/commit/eebc2d0)).
|
|
73
|
+
|
|
8
74
|
## [1.0.6] - 2026-01-05
|
|
9
75
|
|
|
10
76
|
### 🔧 Fixed
|
package/README.md
CHANGED
|
@@ -22,6 +22,13 @@ 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.1
|
|
26
|
+
- Fixed 6 dependency vulnerabilities (critical path traversal, high ReDoS, prototype pollution, DoS)
|
|
27
|
+
- XSS prevention: Mermaid diagram content is now base64-encoded instead of raw HTML injection
|
|
28
|
+
- HTML escaping for container titles, details summaries, and fence fallback output
|
|
29
|
+
- Image path traversal protection preventing reads outside the document directory
|
|
30
|
+
- Hardened Puppeteer browser launch flags for both PDF and Mermaid rendering
|
|
31
|
+
|
|
25
32
|
## 📦 Installation
|
|
26
33
|
|
|
27
34
|
### From Source (Development)
|
|
@@ -70,8 +77,21 @@ md-preview-pdf document.md --page-numbers
|
|
|
70
77
|
|
|
71
78
|
# Generate table of contents
|
|
72
79
|
md-preview-pdf document.md --toc
|
|
80
|
+
|
|
81
|
+
# TOC with custom depth
|
|
82
|
+
md-preview-pdf document.md --toc --toc-depth 2
|
|
73
83
|
```
|
|
74
84
|
|
|
85
|
+
> **Note**: Table of contents generation requires a `${toc}` marker in your markdown file where you want the TOC to appear. Example:
|
|
86
|
+
> ```markdown
|
|
87
|
+
> # My Document
|
|
88
|
+
>
|
|
89
|
+
> ${toc}
|
|
90
|
+
>
|
|
91
|
+
> ## Section 1
|
|
92
|
+
> Content here...
|
|
93
|
+
> ```
|
|
94
|
+
|
|
75
95
|
### Programmatic Usage
|
|
76
96
|
|
|
77
97
|
```typescript
|
|
@@ -112,7 +132,7 @@ await converter.cleanup();
|
|
|
112
132
|
| `--no-math` | Disable KaTeX math rendering | `true` |
|
|
113
133
|
| `--no-emoji` | Disable emoji conversion | `true` |
|
|
114
134
|
| `--no-highlight` | Disable syntax highlighting | `true` |
|
|
115
|
-
| `--mermaid-theme <theme>` | Mermaid theme (default, forest, dark, neutral) | `default` |
|
|
135
|
+
| `--mermaid-theme <theme>` | Mermaid theme (default, forest, dark, neutral, base) | `default` |
|
|
116
136
|
| `--header <template>` | Custom header HTML template | - |
|
|
117
137
|
| `--footer <template>` | Custom footer HTML template | - |
|
|
118
138
|
| `--page-numbers` | Add page numbers to footer | `false` |
|
|
@@ -138,34 +158,47 @@ md-preview-pdf themes
|
|
|
138
158
|
|
|
139
159
|
### Customizing Theme Styling
|
|
140
160
|
|
|
141
|
-
|
|
161
|
+
Themes use a modular architecture with separate color palettes and CSS styling:
|
|
162
|
+
|
|
163
|
+
**Structure:**
|
|
164
|
+
- Color palettes: `src/themes/colors/*.ts` (defines CSS variables)
|
|
165
|
+
- Theme CSS: `src/themes/*.ts` (imports colors and applies styling)
|
|
166
|
+
|
|
167
|
+
**Available Themes:**
|
|
142
168
|
|
|
143
|
-
1. **GitHub Light Theme**
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
169
|
+
1. **GitHub Light Theme**
|
|
170
|
+
- Colors: [src/themes/colors/github-colors.ts](src/themes/colors/github-colors.ts)
|
|
171
|
+
- CSS: [src/themes/github.ts](src/themes/github.ts)
|
|
172
|
+
- Primary colors: `--bgColor-default: #ffffff`, `--fgColor-default: #1f2328`
|
|
147
173
|
|
|
148
|
-
2. **GitHub Dark Theme**
|
|
149
|
-
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
174
|
+
2. **GitHub Dark Theme**
|
|
175
|
+
- Colors: [src/themes/colors/github-dark-colors.ts](src/themes/colors/github-dark-colors.ts)
|
|
176
|
+
- CSS: [src/themes/github-dark.ts](src/themes/github-dark.ts)
|
|
177
|
+
- Primary colors: `--bgColor-default: #0d1117`, `--fgColor-default: #e6edf3`
|
|
152
178
|
|
|
153
|
-
3. **VS Code Light Theme**
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
-
|
|
179
|
+
3. **VS Code Light Theme**
|
|
180
|
+
- Colors: [src/themes/colors/vscode-light-colors.ts](src/themes/colors/vscode-light-colors.ts)
|
|
181
|
+
- CSS: [src/themes/vscode-light.ts](src/themes/vscode-light.ts)
|
|
182
|
+
- Primary colors: `--bgColor-default: #ffffff`, `--fgColor-default: #333333`
|
|
157
183
|
|
|
158
|
-
4. **VS Code Dark Theme**
|
|
159
|
-
-
|
|
160
|
-
-
|
|
161
|
-
-
|
|
184
|
+
4. **VS Code Dark Theme**
|
|
185
|
+
- Colors: [src/themes/colors/vscode-dark-colors.ts](src/themes/colors/vscode-dark-colors.ts)
|
|
186
|
+
- CSS: [src/themes/vscode-dark.ts](src/themes/vscode-dark.ts)
|
|
187
|
+
- Primary colors: `--bgColor-default: #1e1e1e`, `--fgColor-default: #d4d4d4`
|
|
188
|
+
|
|
189
|
+
**To customize a theme:**
|
|
190
|
+
|
|
191
|
+
1. Edit color values in the appropriate `colors/*.ts` file (uses CSS custom properties)
|
|
192
|
+
2. Modify styling rules in the theme's main `.ts` file if needed
|
|
193
|
+
3. Rebuild and test:
|
|
162
194
|
|
|
163
|
-
To test your theme changes:
|
|
164
195
|
```bash
|
|
165
196
|
npm run build
|
|
166
197
|
md-preview-pdf tests/samples/simple-test.md output.pdf --theme github-dark
|
|
167
198
|
```
|
|
168
199
|
|
|
200
|
+
This modular approach separates color definitions from styling logic, making themes easier to maintain and extend.
|
|
201
|
+
|
|
169
202
|
### Sample Output
|
|
170
203
|
|
|
171
204
|
The following PDFs demonstrate the output quality across all themes:
|
|
@@ -194,11 +227,37 @@ Supported diagram types:
|
|
|
194
227
|
- Class diagrams
|
|
195
228
|
- State diagrams
|
|
196
229
|
- Entity Relationship diagrams
|
|
197
|
-
- Gantt charts
|
|
230
|
+
- Gantt charts (full-width rendering)
|
|
198
231
|
- Pie charts
|
|
199
232
|
- Git graphs
|
|
200
233
|
- User Journey diagrams
|
|
201
234
|
|
|
235
|
+
### Mermaid Themes and Configuration
|
|
236
|
+
|
|
237
|
+
The converter automatically selects the appropriate Mermaid theme based on your document theme:
|
|
238
|
+
|
|
239
|
+
| Document Theme | Mermaid Theme |
|
|
240
|
+
|---|---|
|
|
241
|
+
| `github` | `default` |
|
|
242
|
+
| `github-dark` | `dark` |
|
|
243
|
+
| `vscode-light` | `default` |
|
|
244
|
+
| `vscode-dark` | `dark` |
|
|
245
|
+
|
|
246
|
+
You can also explicitly set the Mermaid theme via CLI:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# Use forest theme
|
|
250
|
+
md-preview-pdf document.md --mermaid-theme forest
|
|
251
|
+
|
|
252
|
+
# Use neutral theme
|
|
253
|
+
md-preview-pdf document.md --mermaid-theme neutral
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Available Mermaid themes**: `default`, `forest`, `dark`, `neutral`, `base`
|
|
257
|
+
|
|
258
|
+
> **Note**: Invalid theme names will trigger a warning and fallback to the `default` theme automatically.
|
|
259
|
+
|
|
260
|
+
|
|
202
261
|
## ➗ Math Equations
|
|
203
262
|
|
|
204
263
|
Inline math with single dollar signs:
|
|
@@ -224,15 +283,16 @@ Use YAML front matter to configure document-specific options:
|
|
|
224
283
|
title: "My Document"
|
|
225
284
|
author: "John Doe"
|
|
226
285
|
date: "2024-01-01"
|
|
227
|
-
|
|
286
|
+
pdfs:
|
|
228
287
|
format: Letter
|
|
229
288
|
margin:
|
|
230
289
|
top: "25mm"
|
|
231
290
|
bottom: "25mm"
|
|
232
|
-
theme: github-dark
|
|
233
291
|
---
|
|
234
292
|
```
|
|
235
293
|
|
|
294
|
+
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.
|
|
295
|
+
|
|
236
296
|
## 📁 Custom Containers
|
|
237
297
|
|
|
238
298
|
```markdown
|
package/SECURITY.md
CHANGED
|
@@ -6,6 +6,7 @@ We release patches for security vulnerabilities. Which versions are eligible for
|
|
|
6
6
|
|
|
7
7
|
| Version | Supported |
|
|
8
8
|
| ------- | ------------------ |
|
|
9
|
+
| 1.1.x | :white_check_mark: |
|
|
9
10
|
| 1.0.x | :white_check_mark: |
|
|
10
11
|
|
|
11
12
|
## Reporting a Vulnerability
|
|
@@ -17,7 +18,7 @@ We take the security of MD Preview PDF seriously. If you believe you have found
|
|
|
17
18
|
**Please do not report security vulnerabilities through public GitHub issues.**
|
|
18
19
|
|
|
19
20
|
Instead, please report them via email to:
|
|
20
|
-
- **Email**: anuragkr29@
|
|
21
|
+
- **Email**: anuragkr29@gmail.com
|
|
21
22
|
- **Subject**: [SECURITY] MD Preview PDF - Brief Description
|
|
22
23
|
|
|
23
24
|
### What to Include
|
|
@@ -97,4 +98,4 @@ This security policy may be updated periodically. Significant changes will be an
|
|
|
97
98
|
|
|
98
99
|
---
|
|
99
100
|
|
|
100
|
-
Last Updated:
|
|
101
|
+
Last Updated: February 25, 2026
|
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":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0UH,0CAEC;AAKD,0BAaC;AAKD,sCAWC;AA5WD,2CAA6B;AAM7B,qCAAyC;AACzC,2CAAoE;AACpE,mCAQiB;AACjB,qCAAqD;AAErD;;GAEG;AACH,MAAM,cAAc,GAAqB;IACvC,GAAG,EAAE;QACH,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE;YACN,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;SACZ;QACD,eAAe,EAAE,IAAI;KACtB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,QAAQ;KACf;IACD,OAAO,EAAE;QACP,KAAK,EAAE,SAAS;KACjB;IACD,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,KAAK;CACb,CAAC;AAEF;;GAEG;AACH,SAAS,YAAY,CAAC,WAA6B;IACjD,OAAO;QACL,GAAG,cAAc;QACjB,GAAG,WAAW;QACd,GAAG,EAAE;YACH,GAAG,cAAc,CAAC,GAAG;YACrB,GAAG,WAAW,CAAC,GAAG;YAClB,MAAM,EAAE;gBACN,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM;gBAC7B,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM;aAC3B;SACF;QACD,KAAK,EAAE;YACL,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ;YACvE,GAAG,cAAc,CAAC,KAAK;YACvB,GAAG,WAAW,CAAC,KAAK;SACrB;QACD,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,WAAW,CAAC,OAAO;SACvB;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAa,SAAS;IACZ,OAAO,CAAmB;IAElC,YAAY,UAA4B,EAAE;QACxC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAErC,8CAA8C;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG;gBACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ;gBAC1C,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;gBACrB,cAAc,EAAE,IAAA,kCAAyB,EAAC,SAAS,CAAC;aACrD,CAAC;QACJ,CAAC;QACD,+DAA+D;QAC/D,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;gBACrB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;gBACvB,KAAK,EAAE,YAAY;aACpB,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChG,oEAAoE;YACpE,cAAM,CAAC,IAAI,CACT,2BAA2B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,oBAAoB;gBACzE,wDAAwD,CACzD,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;gBACrB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;gBACvB,KAAK,EAAE,SAAS;aACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;MAEE;IACM,+BAA+B,CAAC,aAAqB;QAC3D,QAAQ,aAAa,EAAE,CAAC;YACtB,KAAK,QAAQ;gBACX,OAAO,SAAS,CAAC;YACnB,KAAK,aAAa;gBAChB,OAAO,MAAM,CAAC;YAChB,KAAK,cAAc;gBACjB,OAAO,SAAS,CAAC;YACnB,KAAK,aAAa;gBAChB,OAAO,MAAM,CAAC;YAChB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;MAEE;IACM,mBAAmB,CAAC,KAAa;QACvC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAiB;QACrD,MAAM,OAAO,GAAG;YACd,GAAG,IAAI,CAAC,OAAO;YACf,QAAQ,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE;SACpC,CAAC;QAEF,iBAAiB;QACjB,cAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEhD,gBAAgB;QAChB,cAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEjD,eAAe;QACf,cAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,IAAA,qBAAS,EAAC,IAAI,EAAE;YACtC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,SAAiB,EACjB,UAAmB;QAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,kBAAkB,GAAG,UAAU;gBACnC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC1B,CAAC,CAAC,IAAA,uBAAe,EAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAEjD,cAAM,CAAC,IAAI,CAAC,eAAe,iBAAiB,EAAE,CAAC,CAAC;YAChD,cAAM,CAAC,KAAK,CAAC,WAAW,kBAAkB,EAAE,CAAC,CAAC;YAE9C,qBAAqB;YACrB,MAAM,QAAQ,GAAG,MAAM,IAAA,gBAAQ,EAAC,iBAAiB,CAAC,CAAC;YAEnD,uCAAuC;YACvC,MAAM,OAAO,GAAG;gBACd,GAAG,IAAI,CAAC,OAAO;gBACf,QAAQ;aACT,CAAC;YAEF,iBAAiB;YACjB,cAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEhD,6BAA6B;YAC7B,IAAI,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YAC9D,CAAC;YAED,gBAAgB;YAChB,cAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEjD,yBAAyB;YACzB,IAAI,QAA4B,CAAC;YACjC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,QAAQ,GAAG,IAAA,uBAAe,EAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;gBACvD,MAAM,IAAA,iBAAS,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAChC,cAAM,CAAC,IAAI,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;YACzC,CAAC;YAED,eAAe;YACf,cAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjC,MAAM,SAAS,GAAG,MAAM,IAAA,qBAAS,EAAC,IAAI,EAAE;gBACtC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YAEH,WAAW;YACX,MAAM,IAAA,iBAAS,EAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAW,EAAC,kBAAkB,CAAC,CAAC;YAEvD,cAAM,CAAC,IAAI,CAAC,oBAAoB,kBAAkB,EAAE,CAAC,CAAC;YACtD,cAAM,CAAC,IAAI,CAAC,WAAW,IAAA,sBAAc,EAAC,QAAQ,CAAC,WAAW,QAAQ,IAAI,CAAC,CAAC;YAExE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,kBAAkB;gBAC9B,QAAQ;gBACR,KAAK,EAAE;oBACL,QAAQ;oBACR,QAAQ;iBACT;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC;YAC3C,cAAM,CAAC,KAAK,CAAC,sBAAsB,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAE9D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,eAAe,CAAC,OAAO;gBAC9B,KAAK,EAAE;oBACL,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACjC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,UAAoB,EACpB,SAAkB;QAElB,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,UAA8B,CAAC;YAEnC,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC1C,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAA,uBAAe,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,OAAO,IAAA,sBAAa,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,QAAiB;QACpD,MAAM,OAAO,GAAG;YACd,GAAG,IAAI,CAAC,OAAO;YACf,QAAQ,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE;SACpC,CAAC;QAEF,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAA,wBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAkC;QAC3C,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAA,wBAAY,GAAE,CAAC;QACrB,cAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC7C,CAAC;CACF;AArPD,8BAqPC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,UAA4B,EAAE;IAC5D,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,MAAe,EACf,OAA0B;IAE1B,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,OAA0B;IAE1B,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,kBAAe,SAAS,CAAC"}
|
|
@@ -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;AA6M5C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,gBAAqB,GAAG,UAAU,CA2E/E;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -19,6 +19,17 @@ const markdown_it_task_lists_1 = __importDefault(require("markdown-it-task-lists
|
|
|
19
19
|
const markdown_it_toc_done_right_1 = __importDefault(require("markdown-it-toc-done-right"));
|
|
20
20
|
const markdown_it_attrs_1 = __importDefault(require("markdown-it-attrs"));
|
|
21
21
|
const utils_1 = require("../utils");
|
|
22
|
+
/**
|
|
23
|
+
* Escape HTML entities to prevent XSS in rendered output
|
|
24
|
+
*/
|
|
25
|
+
function escapeHtml(text) {
|
|
26
|
+
return text
|
|
27
|
+
.replace(/&/g, '&')
|
|
28
|
+
.replace(/</g, '<')
|
|
29
|
+
.replace(/>/g, '>')
|
|
30
|
+
.replace(/"/g, '"')
|
|
31
|
+
.replace(/'/g, ''');
|
|
32
|
+
}
|
|
22
33
|
/**
|
|
23
34
|
* Custom plugin to render math equations with KaTeX
|
|
24
35
|
*/
|
|
@@ -29,6 +40,8 @@ function mathPlugin(md) {
|
|
|
29
40
|
return false;
|
|
30
41
|
if (state.src[state.pos + 1] === '$')
|
|
31
42
|
return false; // Skip block math
|
|
43
|
+
if (state.src[state.pos + 1] === '{')
|
|
44
|
+
return false; // Skip ${...} template literals
|
|
32
45
|
const start = state.pos + 1;
|
|
33
46
|
let end = start;
|
|
34
47
|
while (end < state.posMax && state.src[end] !== '$') {
|
|
@@ -120,7 +133,7 @@ function mathPlugin(md) {
|
|
|
120
133
|
function mermaidPlugin(md) {
|
|
121
134
|
const defaultFence = md.renderer.rules.fence || ((tokens, idx, _options) => {
|
|
122
135
|
const token = tokens[idx];
|
|
123
|
-
return `<pre><code class="language-${token.info}">${token.content}</code></pre>`;
|
|
136
|
+
return `<pre><code class="language-${escapeHtml(token.info)}">${escapeHtml(token.content)}</code></pre>`;
|
|
124
137
|
});
|
|
125
138
|
md.renderer.rules.fence = ((tokens, idx, _options, _env, _self) => {
|
|
126
139
|
const token = tokens[idx];
|
|
@@ -173,7 +186,7 @@ function addContainers(md) {
|
|
|
173
186
|
render: ((tokens, idx, _options) => {
|
|
174
187
|
if (tokens[idx].nesting === 1) {
|
|
175
188
|
const info = tokens[idx].info?.trim() || '';
|
|
176
|
-
const title = info.slice(type.length).trim() || type.charAt(0).toUpperCase() + type.slice(1);
|
|
189
|
+
const title = escapeHtml(info.slice(type.length).trim() || type.charAt(0).toUpperCase() + type.slice(1));
|
|
177
190
|
return `<div class="custom-container ${type}">\n<p class="custom-container-title">${title}</p>\n`;
|
|
178
191
|
}
|
|
179
192
|
return '</div>\n';
|
|
@@ -186,7 +199,7 @@ function addContainers(md) {
|
|
|
186
199
|
render: ((tokens, idx, _options) => {
|
|
187
200
|
if (tokens[idx].nesting === 1) {
|
|
188
201
|
const info = tokens[idx].info?.trim() || '';
|
|
189
|
-
const summary = info.slice(7).trim() || 'Details';
|
|
202
|
+
const summary = escapeHtml(info.slice(7).trim() || 'Details');
|
|
190
203
|
return `<details>\n<summary>${summary}</summary>\n`;
|
|
191
204
|
}
|
|
192
205
|
return '</details>\n';
|
|
@@ -198,6 +211,9 @@ function addContainers(md) {
|
|
|
198
211
|
*/
|
|
199
212
|
function createMarkdownParser(options = {}) {
|
|
200
213
|
const md = new markdown_it_1.default({
|
|
214
|
+
// SECURITY NOTE: html:true allows raw HTML in markdown, which is required
|
|
215
|
+
// for full GFM compatibility. When processing untrusted input, consider
|
|
216
|
+
// sanitising the output with a library like DOMPurify before rendering.
|
|
201
217
|
html: true,
|
|
202
218
|
xhtmlOut: true,
|
|
203
219
|
breaks: true,
|
|
@@ -211,9 +227,7 @@ function createMarkdownParser(options = {}) {
|
|
|
211
227
|
// Anchor plugin for headers
|
|
212
228
|
md.use(markdown_it_anchor_1.default, {
|
|
213
229
|
level: [1, 2, 3, 4, 5, 6],
|
|
214
|
-
permalink:
|
|
215
|
-
safariReaderFix: true,
|
|
216
|
-
}),
|
|
230
|
+
permalink: false,
|
|
217
231
|
slugify: (s) => s
|
|
218
232
|
.toLowerCase()
|
|
219
233
|
.trim()
|
|
@@ -244,6 +258,8 @@ function createMarkdownParser(options = {}) {
|
|
|
244
258
|
// Custom attributes
|
|
245
259
|
md.use(markdown_it_attrs_1.default, {
|
|
246
260
|
allowedAttributes: ['id', 'class', 'style', 'width', 'height'],
|
|
261
|
+
leftDelimiter: '{:',
|
|
262
|
+
rightDelimiter: '}',
|
|
247
263
|
});
|
|
248
264
|
// Math support (KaTeX)
|
|
249
265
|
if (options.math !== false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../src/parser/markdown-parser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;
|
|
1
|
+
{"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../src/parser/markdown-parser.ts"],"names":[],"mappings":"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"}
|