md-preview-pdf 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.editorconfig +37 -0
  2. package/CHANGELOG.md +405 -0
  3. package/CODE_OF_CONDUCT.md +128 -0
  4. package/CONTRIBUTING.md +170 -0
  5. package/LICENSE +21 -0
  6. package/README.md +391 -0
  7. package/SECURITY.md +100 -0
  8. package/dist/cli.d.ts +7 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +275 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/converter.d.ts +58 -0
  13. package/dist/converter.d.ts.map +1 -0
  14. package/dist/converter.js +301 -0
  15. package/dist/converter.js.map +1 -0
  16. package/dist/index.d.ts +13 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +53 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/parser/index.d.ts +40 -0
  21. package/dist/parser/index.d.ts.map +1 -0
  22. package/dist/parser/index.js +100 -0
  23. package/dist/parser/index.js.map +1 -0
  24. package/dist/parser/markdown-parser.d.ts +12 -0
  25. package/dist/parser/markdown-parser.d.ts.map +1 -0
  26. package/dist/parser/markdown-parser.js +260 -0
  27. package/dist/parser/markdown-parser.js.map +1 -0
  28. package/dist/renderers/html-renderer.d.ts +19 -0
  29. package/dist/renderers/html-renderer.d.ts.map +1 -0
  30. package/dist/renderers/html-renderer.js +451 -0
  31. package/dist/renderers/html-renderer.js.map +1 -0
  32. package/dist/renderers/index.d.ts +8 -0
  33. package/dist/renderers/index.d.ts.map +1 -0
  34. package/dist/renderers/index.js +21 -0
  35. package/dist/renderers/index.js.map +1 -0
  36. package/dist/renderers/mermaid-renderer.d.ts +31 -0
  37. package/dist/renderers/mermaid-renderer.d.ts.map +1 -0
  38. package/dist/renderers/mermaid-renderer.js +221 -0
  39. package/dist/renderers/mermaid-renderer.js.map +1 -0
  40. package/dist/renderers/pdf-renderer.d.ts +40 -0
  41. package/dist/renderers/pdf-renderer.d.ts.map +1 -0
  42. package/dist/renderers/pdf-renderer.js +253 -0
  43. package/dist/renderers/pdf-renderer.js.map +1 -0
  44. package/dist/themes/github-dark.d.ts +7 -0
  45. package/dist/themes/github-dark.d.ts.map +1 -0
  46. package/dist/themes/github-dark.js +400 -0
  47. package/dist/themes/github-dark.js.map +1 -0
  48. package/dist/themes/github.d.ts +7 -0
  49. package/dist/themes/github.d.ts.map +1 -0
  50. package/dist/themes/github.js +362 -0
  51. package/dist/themes/github.js.map +1 -0
  52. package/dist/themes/highlight.d.ts +21 -0
  53. package/dist/themes/highlight.d.ts.map +1 -0
  54. package/dist/themes/highlight.js +384 -0
  55. package/dist/themes/highlight.js.map +1 -0
  56. package/dist/themes/index.d.ts +41 -0
  57. package/dist/themes/index.d.ts.map +1 -0
  58. package/dist/themes/index.js +83 -0
  59. package/dist/themes/index.js.map +1 -0
  60. package/dist/themes/vscode-dark.d.ts +7 -0
  61. package/dist/themes/vscode-dark.d.ts.map +1 -0
  62. package/dist/themes/vscode-dark.js +312 -0
  63. package/dist/themes/vscode-dark.js.map +1 -0
  64. package/dist/themes/vscode-light.d.ts +7 -0
  65. package/dist/themes/vscode-light.d.ts.map +1 -0
  66. package/dist/themes/vscode-light.js +259 -0
  67. package/dist/themes/vscode-light.js.map +1 -0
  68. package/dist/types/index.d.ts +170 -0
  69. package/dist/types/index.d.ts.map +1 -0
  70. package/dist/types/index.js +34 -0
  71. package/dist/types/index.js.map +1 -0
  72. package/dist/utils/error-handler.d.ts +39 -0
  73. package/dist/utils/error-handler.d.ts.map +1 -0
  74. package/dist/utils/error-handler.js +136 -0
  75. package/dist/utils/error-handler.js.map +1 -0
  76. package/dist/utils/file-utils.d.ts +78 -0
  77. package/dist/utils/file-utils.d.ts.map +1 -0
  78. package/dist/utils/file-utils.js +234 -0
  79. package/dist/utils/file-utils.js.map +1 -0
  80. package/dist/utils/index.d.ts +4 -0
  81. package/dist/utils/index.d.ts.map +1 -0
  82. package/dist/utils/index.js +30 -0
  83. package/dist/utils/index.js.map +1 -0
  84. package/dist/utils/logger.d.ts +10 -0
  85. package/dist/utils/logger.d.ts.map +1 -0
  86. package/dist/utils/logger.js +61 -0
  87. package/dist/utils/logger.js.map +1 -0
  88. package/eslint.config.js +70 -0
  89. package/index.d.ts +43 -0
  90. package/package.json +81 -0
package/dist/cli.js ADDED
@@ -0,0 +1,275 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * MD Preview PDF CLI
5
+ * Command-line interface for converting Markdown to PDF
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ const commander_1 = require("commander");
45
+ const path = __importStar(require("path"));
46
+ const fs = __importStar(require("fs"));
47
+ const chalk_1 = __importDefault(require("chalk"));
48
+ const ora_1 = __importDefault(require("ora"));
49
+ const converter_1 = require("./converter");
50
+ const utils_1 = require("./utils");
51
+ const themes_1 = require("./themes");
52
+ const package_json_1 = __importDefault(require("../package.json"));
53
+ // Create CLI program
54
+ const program = new commander_1.Command();
55
+ program
56
+ .name('md-preview-pdf')
57
+ .description('Convert Markdown files to PDF with Mermaid diagrams, syntax highlighting, and more')
58
+ .version(package_json_1.default.version);
59
+ // Main convert command
60
+ program
61
+ .argument('<input>', 'Input markdown file or glob pattern')
62
+ .argument('[output]', 'Output PDF file path (optional)')
63
+ .option('-t, --theme <theme>', `Theme to use (${(0, themes_1.getAvailableThemes)().join(', ')})`, 'github')
64
+ .option('-f, --format <format>', 'Page format (A4, A3, A5, Letter, Legal, Tabloid)', 'A4')
65
+ .option('--landscape', 'Use landscape orientation')
66
+ .option('--no-background', 'Disable background printing')
67
+ .option('-m, --margin <margin>', 'Page margins (e.g., "20mm" or "10mm,15mm,20mm,15mm")')
68
+ .option('--toc', 'Generate table of contents')
69
+ .option('--toc-depth <depth>', 'TOC depth (1-6)', '3')
70
+ .option('--html', 'Also output HTML file')
71
+ .option('--no-math', 'Disable math (KaTeX) rendering')
72
+ .option('--no-emoji', 'Disable emoji conversion')
73
+ .option('--no-highlight', 'Disable syntax highlighting')
74
+ .option('--mermaid-theme <theme>', 'Mermaid theme (default, forest, dark, neutral)', 'default')
75
+ .option('--header <template>', 'Custom header HTML template')
76
+ .option('--footer <template>', 'Custom footer HTML template')
77
+ .option('--page-numbers', 'Add page numbers to footer')
78
+ .option('--css <path>', 'Custom CSS file path')
79
+ .option('--debug', 'Run in debug mode (show browser)')
80
+ .option('-v, --verbose', 'Verbose output')
81
+ .option('-q, --quiet', 'Quiet mode (minimal output)')
82
+ .action(async (input, output, opts) => {
83
+ // Set log level
84
+ if (opts.quiet) {
85
+ (0, utils_1.setLogLevel)('error');
86
+ }
87
+ else if (opts.verbose) {
88
+ (0, utils_1.setLogLevel)('debug');
89
+ }
90
+ else {
91
+ (0, utils_1.setLogLevel)('info');
92
+ }
93
+ // Parse options
94
+ const options = parseOptions(opts);
95
+ // Check if input is a glob pattern or multiple files
96
+ const inputFiles = resolveInputFiles(input);
97
+ if (inputFiles.length === 0) {
98
+ console.error(chalk_1.default.red(`Error: No files found matching "${input}"`));
99
+ process.exit(1);
100
+ }
101
+ // Create converter
102
+ const converter = new converter_1.Converter(options);
103
+ const spinner = (0, ora_1.default)();
104
+ let successCount = 0;
105
+ let failCount = 0;
106
+ try {
107
+ for (const inputFile of inputFiles) {
108
+ const outputFile = inputFiles.length === 1 && output
109
+ ? output
110
+ : undefined;
111
+ spinner.start(chalk_1.default.blue(`Converting ${path.basename(inputFile)}...`));
112
+ const result = await converter.convertFile(inputFile, outputFile);
113
+ if (result.success) {
114
+ successCount++;
115
+ spinner.succeed(chalk_1.default.green(`${path.basename(inputFile)} → ${path.basename(result.outputPath)}`) +
116
+ chalk_1.default.gray(` (${(0, utils_1.formatFileSize)(result.stats?.fileSize || 0)}, ${result.stats?.duration}ms)`));
117
+ }
118
+ else {
119
+ failCount++;
120
+ spinner.fail(chalk_1.default.red(`Failed: ${inputFile} - ${result.error}`));
121
+ }
122
+ }
123
+ // Summary
124
+ if (inputFiles.length > 1) {
125
+ console.log();
126
+ console.log(chalk_1.default.bold('Summary:'));
127
+ console.log(chalk_1.default.green(` ✓ ${successCount} succeeded`));
128
+ if (failCount > 0) {
129
+ console.log(chalk_1.default.red(` ✗ ${failCount} failed`));
130
+ }
131
+ }
132
+ process.exit(failCount > 0 ? 1 : 0);
133
+ }
134
+ catch (error) {
135
+ spinner.fail(chalk_1.default.red('Conversion failed'));
136
+ console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error'));
137
+ process.exit(1);
138
+ }
139
+ finally {
140
+ await converter.cleanup();
141
+ }
142
+ });
143
+ // List themes command
144
+ program
145
+ .command('themes')
146
+ .description('List available themes')
147
+ .action(() => {
148
+ console.log(chalk_1.default.bold('\nAvailable Themes:\n'));
149
+ const themes = (0, themes_1.getAvailableThemes)();
150
+ themes.forEach((theme) => {
151
+ console.log(` • ${chalk_1.default.cyan(theme)}`);
152
+ });
153
+ console.log();
154
+ });
155
+ // Parse margin string to object
156
+ function parseMargin(margin) {
157
+ // Support both comma-separated and space-separated formats
158
+ // Comma format: "10mm,15mm,20mm,15mm"
159
+ // Space format: "10mm 15mm 20mm 15mm" (standard CSS format)
160
+ const separator = margin.includes(',') ? ',' : ' ';
161
+ const parts = margin.split(separator).map(s => s.trim()).filter(s => s.length > 0);
162
+ if (parts.length === 1) {
163
+ return {
164
+ top: parts[0],
165
+ right: parts[0],
166
+ bottom: parts[0],
167
+ left: parts[0],
168
+ };
169
+ }
170
+ if (parts.length === 2) {
171
+ return {
172
+ top: parts[0],
173
+ right: parts[1],
174
+ bottom: parts[0],
175
+ left: parts[1],
176
+ };
177
+ }
178
+ if (parts.length === 4) {
179
+ return {
180
+ top: parts[0],
181
+ right: parts[1],
182
+ bottom: parts[2],
183
+ left: parts[3],
184
+ };
185
+ }
186
+ return undefined;
187
+ }
188
+ // Parse CLI options to ConverterOptions
189
+ function parseOptions(opts) {
190
+ const options = {
191
+ theme: {
192
+ name: opts.theme,
193
+ },
194
+ pdf: {
195
+ format: opts.format,
196
+ landscape: opts.landscape || false,
197
+ printBackground: opts.background !== false,
198
+ },
199
+ mermaid: {
200
+ theme: opts.mermaidTheme,
201
+ },
202
+ toc: opts.toc || false,
203
+ tocDepth: parseInt(opts.tocDepth, 10),
204
+ outputHtml: opts.html || false,
205
+ math: opts.math !== false,
206
+ emoji: opts.emoji !== false,
207
+ highlight: opts.highlight !== false,
208
+ debug: opts.debug || false,
209
+ };
210
+ // Parse margins
211
+ if (opts.margin) {
212
+ options.pdf.margin = parseMargin(opts.margin);
213
+ }
214
+ // Custom CSS
215
+ if (opts.css) {
216
+ options.theme.customCSSPath = opts.css;
217
+ }
218
+ // Headers and footers
219
+ if (opts.header) {
220
+ options.pdf.headerTemplate = opts.header;
221
+ options.pdf.displayHeaderFooter = true;
222
+ }
223
+ if (opts.footer) {
224
+ options.pdf.footerTemplate = opts.footer;
225
+ options.pdf.displayHeaderFooter = true;
226
+ }
227
+ // Page numbers
228
+ if (opts.pageNumbers) {
229
+ options.pdf.displayHeaderFooter = true;
230
+ if (!opts.footer) {
231
+ options.pdf.footerTemplate = `
232
+ <div style="font-size: 10px; color: #666; width: 100%; text-align: center; padding: 10px;">
233
+ <span class="pageNumber"></span> / <span class="totalPages"></span>
234
+ </div>
235
+ `;
236
+ }
237
+ if (!opts.header) {
238
+ options.pdf.headerTemplate = '<div></div>';
239
+ }
240
+ }
241
+ return options;
242
+ }
243
+ // Resolve input files from path or glob
244
+ function resolveInputFiles(input) {
245
+ const absolutePath = path.resolve(input);
246
+ // Check if it's a directory
247
+ if (fs.existsSync(absolutePath) && fs.statSync(absolutePath).isDirectory()) {
248
+ // Get all .md files in directory
249
+ return fs.readdirSync(absolutePath)
250
+ .filter(file => file.endsWith('.md'))
251
+ .map(file => path.join(absolutePath, file));
252
+ }
253
+ // Check if file exists
254
+ if (fs.existsSync(absolutePath)) {
255
+ return [absolutePath];
256
+ }
257
+ // Try as glob pattern (basic implementation)
258
+ const dir = path.dirname(absolutePath);
259
+ const pattern = path.basename(absolutePath);
260
+ if (fs.existsSync(dir)) {
261
+ const files = fs.readdirSync(dir);
262
+ const regex = new RegExp('^' + pattern.replace(/\*/g, '.*').replace(/\?/g, '.') + '$');
263
+ return files
264
+ .filter(file => regex.test(file) && file.endsWith('.md'))
265
+ .map(file => path.join(dir, file));
266
+ }
267
+ return [];
268
+ }
269
+ // Parse arguments
270
+ program.parse(process.argv);
271
+ // Show help if no arguments
272
+ if (process.argv.length === 2) {
273
+ program.help();
274
+ }
275
+ //# 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,58 @@
1
+ /**
2
+ * MD Preview PDF Converter
3
+ * Main converter class that orchestrates the conversion process
4
+ */
5
+ import { ConverterOptions, ConversionResult, ParsedMarkdown } from './types';
6
+ /**
7
+ * MD Preview PDF Converter class
8
+ */
9
+ export declare class Converter {
10
+ private options;
11
+ constructor(options?: ConverterOptions);
12
+ /**
13
+ * Convert markdown string to PDF buffer
14
+ */
15
+ convertString(markdown: string, basePath?: string): Promise<Buffer>;
16
+ /**
17
+ * Convert markdown file to PDF file
18
+ */
19
+ convertFile(inputPath: string, outputPath?: string): Promise<ConversionResult>;
20
+ /**
21
+ * Convert multiple files
22
+ */
23
+ convertFiles(inputPaths: string[], outputDir?: string): Promise<ConversionResult[]>;
24
+ /**
25
+ * Parse markdown and return structured result (useful for previewing)
26
+ */
27
+ parseMarkdown(markdown: string): ParsedMarkdown;
28
+ /**
29
+ * Generate HTML from markdown (useful for previewing)
30
+ */
31
+ generateHtml(markdown: string, basePath?: string): Promise<string>;
32
+ /**
33
+ * Update converter options
34
+ */
35
+ setOptions(options: Partial<ConverterOptions>): void;
36
+ /**
37
+ * Get current options
38
+ */
39
+ getOptions(): ConverterOptions;
40
+ /**
41
+ * Clean up resources (close browser)
42
+ */
43
+ cleanup(): Promise<void>;
44
+ }
45
+ /**
46
+ * Create a converter instance with options
47
+ */
48
+ export declare function createConverter(options?: ConverterOptions): Converter;
49
+ /**
50
+ * Quick convert function for simple use cases
51
+ */
52
+ export declare function convert(input: string, output?: string, options?: ConverterOptions): Promise<ConversionResult>;
53
+ /**
54
+ * Convert markdown string to PDF buffer
55
+ */
56
+ export declare function convertString(markdown: string, options?: ConverterOptions): Promise<Buffer>;
57
+ export default Converter;
58
+ //# sourceMappingURL=converter.d.ts.map
@@ -0,0 +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;IAc1C;;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"}
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ /**
3
+ * MD Preview PDF Converter
4
+ * Main converter class that orchestrates the conversion process
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.Converter = void 0;
41
+ exports.createConverter = createConverter;
42
+ exports.convert = convert;
43
+ exports.convertString = convertString;
44
+ const path = __importStar(require("path"));
45
+ const parser_1 = require("./parser");
46
+ const renderers_1 = require("./renderers");
47
+ const utils_1 = require("./utils");
48
+ const themes_1 = require("./themes");
49
+ /**
50
+ * Default converter options
51
+ */
52
+ const defaultOptions = {
53
+ pdf: {
54
+ format: 'A4',
55
+ margin: {
56
+ top: '10mm',
57
+ right: '10mm',
58
+ bottom: '10mm',
59
+ left: '10mm',
60
+ },
61
+ printBackground: true,
62
+ },
63
+ theme: {
64
+ name: 'github',
65
+ },
66
+ mermaid: {
67
+ theme: 'default',
68
+ },
69
+ toc: false,
70
+ tocDepth: 3,
71
+ outputHtml: false,
72
+ math: true,
73
+ emoji: true,
74
+ highlight: true,
75
+ debug: false,
76
+ };
77
+ /**
78
+ * Merge user options with defaults
79
+ */
80
+ function mergeOptions(userOptions) {
81
+ return {
82
+ ...defaultOptions,
83
+ ...userOptions,
84
+ pdf: {
85
+ ...defaultOptions.pdf,
86
+ ...userOptions.pdf,
87
+ margin: {
88
+ ...defaultOptions.pdf?.margin,
89
+ ...userOptions.pdf?.margin,
90
+ },
91
+ },
92
+ theme: {
93
+ name: userOptions.theme?.name || defaultOptions.theme?.name || 'github',
94
+ ...defaultOptions.theme,
95
+ ...userOptions.theme,
96
+ },
97
+ mermaid: {
98
+ ...defaultOptions.mermaid,
99
+ ...userOptions.mermaid,
100
+ },
101
+ };
102
+ }
103
+ /**
104
+ * MD Preview PDF Converter class
105
+ */
106
+ class Converter {
107
+ options;
108
+ constructor(options = {}) {
109
+ this.options = mergeOptions(options);
110
+ // Set highlight theme based on document theme
111
+ if (!this.options.theme?.highlightTheme) {
112
+ const themeName = this.options.theme?.name || 'github';
113
+ this.options.theme = {
114
+ name: this.options.theme?.name || 'github',
115
+ ...this.options.theme,
116
+ highlightTheme: (0, themes_1.getMatchingHighlightTheme)(themeName),
117
+ };
118
+ }
119
+ }
120
+ /**
121
+ * Convert markdown string to PDF buffer
122
+ */
123
+ async convertString(markdown, basePath) {
124
+ const options = {
125
+ ...this.options,
126
+ basePath: basePath || process.cwd(),
127
+ };
128
+ // Parse markdown
129
+ utils_1.logger.info('Parsing markdown content...');
130
+ const parsed = (0, parser_1.parseMarkdown)(markdown, options);
131
+ // Generate HTML
132
+ utils_1.logger.info('Generating HTML...');
133
+ const html = await (0, renderers_1.generateHtml)(parsed, options);
134
+ // Generate PDF
135
+ utils_1.logger.info('Generating PDF...');
136
+ const pdfBuffer = await (0, renderers_1.renderPDF)(html, {
137
+ pdf: options.pdf,
138
+ mermaid: options.mermaid,
139
+ debug: options.debug,
140
+ });
141
+ return pdfBuffer;
142
+ }
143
+ /**
144
+ * Convert markdown file to PDF file
145
+ */
146
+ async convertFile(inputPath, outputPath) {
147
+ const startTime = Date.now();
148
+ try {
149
+ const absoluteInputPath = path.resolve(inputPath);
150
+ const absoluteOutputPath = outputPath
151
+ ? path.resolve(outputPath)
152
+ : (0, utils_1.changeExtension)(absoluteInputPath, 'pdf');
153
+ const basePath = path.dirname(absoluteInputPath);
154
+ utils_1.logger.info(`Converting: ${absoluteInputPath}`);
155
+ utils_1.logger.debug(`Output: ${absoluteOutputPath}`);
156
+ // Read markdown file
157
+ const markdown = await (0, utils_1.readFile)(absoluteInputPath);
158
+ // Set base path for relative resources
159
+ const options = {
160
+ ...this.options,
161
+ basePath,
162
+ };
163
+ // Parse markdown
164
+ utils_1.logger.info('Parsing markdown...');
165
+ const parsed = (0, parser_1.parseMarkdown)(markdown, options);
166
+ // Merge front matter options
167
+ if (parsed.frontMatter.pdf) {
168
+ options.pdf = { ...options.pdf, ...parsed.frontMatter.pdf };
169
+ }
170
+ // Generate HTML
171
+ utils_1.logger.info('Generating HTML...');
172
+ const html = await (0, renderers_1.generateHtml)(parsed, options);
173
+ // Save HTML if requested
174
+ let htmlPath;
175
+ if (options.outputHtml) {
176
+ htmlPath = (0, utils_1.changeExtension)(absoluteOutputPath, 'html');
177
+ await (0, utils_1.writeFile)(htmlPath, html);
178
+ utils_1.logger.info(`HTML saved: ${htmlPath}`);
179
+ }
180
+ // Generate PDF
181
+ utils_1.logger.info('Generating PDF...');
182
+ const pdfBuffer = await (0, renderers_1.renderPDF)(html, {
183
+ pdf: options.pdf,
184
+ mermaid: options.mermaid,
185
+ debug: options.debug,
186
+ });
187
+ // Save PDF
188
+ await (0, utils_1.writeFile)(absoluteOutputPath, pdfBuffer);
189
+ const duration = Date.now() - startTime;
190
+ const fileSize = await (0, utils_1.getFileSize)(absoluteOutputPath);
191
+ utils_1.logger.info(`✓ PDF generated: ${absoluteOutputPath}`);
192
+ utils_1.logger.info(` Size: ${(0, utils_1.formatFileSize)(fileSize)}, Time: ${duration}ms`);
193
+ return {
194
+ success: true,
195
+ outputPath: absoluteOutputPath,
196
+ htmlPath,
197
+ stats: {
198
+ duration,
199
+ fileSize,
200
+ },
201
+ };
202
+ }
203
+ catch (error) {
204
+ const conversionError = (0, utils_1.handleError)(error);
205
+ utils_1.logger.error(`Conversion failed: ${conversionError.message}`);
206
+ return {
207
+ success: false,
208
+ error: conversionError.message,
209
+ stats: {
210
+ duration: Date.now() - startTime,
211
+ },
212
+ };
213
+ }
214
+ }
215
+ /**
216
+ * Convert multiple files
217
+ */
218
+ async convertFiles(inputPaths, outputDir) {
219
+ const results = [];
220
+ for (const inputPath of inputPaths) {
221
+ let outputPath;
222
+ if (outputDir) {
223
+ const basename = path.basename(inputPath);
224
+ outputPath = path.join(outputDir, (0, utils_1.changeExtension)(basename, 'pdf'));
225
+ }
226
+ const result = await this.convertFile(inputPath, outputPath);
227
+ results.push(result);
228
+ }
229
+ return results;
230
+ }
231
+ /**
232
+ * Parse markdown and return structured result (useful for previewing)
233
+ */
234
+ parseMarkdown(markdown) {
235
+ return (0, parser_1.parseMarkdown)(markdown, this.options);
236
+ }
237
+ /**
238
+ * Generate HTML from markdown (useful for previewing)
239
+ */
240
+ async generateHtml(markdown, basePath) {
241
+ const options = {
242
+ ...this.options,
243
+ basePath: basePath || process.cwd(),
244
+ };
245
+ const parsed = (0, parser_1.parseMarkdown)(markdown, options);
246
+ return (0, renderers_1.generateHtml)(parsed, options);
247
+ }
248
+ /**
249
+ * Update converter options
250
+ */
251
+ setOptions(options) {
252
+ this.options = mergeOptions({ ...this.options, ...options });
253
+ }
254
+ /**
255
+ * Get current options
256
+ */
257
+ getOptions() {
258
+ return { ...this.options };
259
+ }
260
+ /**
261
+ * Clean up resources (close browser)
262
+ */
263
+ async cleanup() {
264
+ await (0, renderers_1.closeBrowser)();
265
+ utils_1.logger.debug('Converter cleanup complete');
266
+ }
267
+ }
268
+ exports.Converter = Converter;
269
+ /**
270
+ * Create a converter instance with options
271
+ */
272
+ function createConverter(options = {}) {
273
+ return new Converter(options);
274
+ }
275
+ /**
276
+ * Quick convert function for simple use cases
277
+ */
278
+ async function convert(input, output, options) {
279
+ const converter = createConverter(options);
280
+ try {
281
+ const result = await converter.convertFile(input, output);
282
+ return result;
283
+ }
284
+ finally {
285
+ await converter.cleanup();
286
+ }
287
+ }
288
+ /**
289
+ * Convert markdown string to PDF buffer
290
+ */
291
+ async function convertString(markdown, options) {
292
+ const converter = createConverter(options);
293
+ try {
294
+ return await converter.convertString(markdown);
295
+ }
296
+ finally {
297
+ await converter.cleanup();
298
+ }
299
+ }
300
+ exports.default = Converter;
301
+ //# sourceMappingURL=converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * MD Preview PDF
3
+ * Main entry point for the library
4
+ */
5
+ export { Converter, createConverter, convert, convertString } from './converter';
6
+ export { ConverterOptions, ConversionResult, PDFOptions, ThemeOptions, MermaidOptions, FrontMatter, ParsedMarkdown, ConversionError, ErrorCode, } from './types';
7
+ export { parseMarkdown, parseFrontMatter, createMarkdownParser } from './parser';
8
+ export { generateHtml, generateStandaloneHtml, renderPDF, renderMermaidToSvg, processMermaidInHtml, closeBrowser } from './renderers';
9
+ export { getThemeCSS, getAvailableThemes, themeExists, getHighlightThemeCSS, githubTheme, githubDarkTheme, vscodeLightTheme, vscodeDarkTheme, } from './themes';
10
+ export { logger, setLogLevel, getLogLevel, readFile, writeFile, fileExists, formatFileSize, } from './utils';
11
+ import { Converter } from './converter';
12
+ export default Converter;
13
+ //# sourceMappingURL=index.d.ts.map