teamshare-bridge 0.14.49 → 0.14.50

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 (35) hide show
  1. package/dist/lib/api.d.ts +47 -0
  2. package/dist/lib/api.js +37 -0
  3. package/dist/lib/api.js.map +1 -1
  4. package/dist/lib/chat-reply.js +9 -0
  5. package/dist/lib/chat-reply.js.map +1 -1
  6. package/dist/lib/doc-reply.js +7 -0
  7. package/dist/lib/doc-reply.js.map +1 -1
  8. package/dist/lib/orchestrator/client.d.ts +5 -0
  9. package/dist/lib/orchestrator/client.js +42 -0
  10. package/dist/lib/orchestrator/client.js.map +1 -1
  11. package/dist/lib/tools/chart-builder.d.ts +5 -0
  12. package/dist/lib/tools/chart-builder.js +182 -0
  13. package/dist/lib/tools/chart-builder.js.map +1 -0
  14. package/dist/lib/tools/csv-cruncher.d.ts +11 -0
  15. package/dist/lib/tools/csv-cruncher.js +189 -0
  16. package/dist/lib/tools/csv-cruncher.js.map +1 -0
  17. package/dist/lib/tools/docx-report.d.ts +5 -0
  18. package/dist/lib/tools/docx-report.js +391 -0
  19. package/dist/lib/tools/docx-report.js.map +1 -0
  20. package/dist/lib/tools/pdf-exporter.d.ts +5 -0
  21. package/dist/lib/tools/pdf-exporter.js +254 -0
  22. package/dist/lib/tools/pdf-exporter.js.map +1 -0
  23. package/dist/lib/tools/pptx-deck.d.ts +5 -0
  24. package/dist/lib/tools/pptx-deck.js +187 -0
  25. package/dist/lib/tools/pptx-deck.js.map +1 -0
  26. package/dist/lib/tools/process-image.d.ts +5 -0
  27. package/dist/lib/tools/process-image.js +99 -0
  28. package/dist/lib/tools/process-image.js.map +1 -0
  29. package/dist/lib/tools/runner.d.ts +16 -0
  30. package/dist/lib/tools/runner.js +61 -0
  31. package/dist/lib/tools/runner.js.map +1 -0
  32. package/dist/lib/tools/xlsx-workbook.d.ts +5 -0
  33. package/dist/lib/tools/xlsx-workbook.js +118 -0
  34. package/dist/lib/tools/xlsx-workbook.js.map +1 -0
  35. package/package.json +10 -2
@@ -0,0 +1,391 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DocxReportTool = void 0;
4
+ /**
5
+ * DOCX Report Generator tool.
6
+ * Creates Word documents from markdown with advanced formatting:
7
+ * custom heading colors, TOC, embedded images, page breaks, headers/footers.
8
+ */
9
+ const docx_1 = require("docx");
10
+ const BODY_FONT = 'Calibri';
11
+ const CODE_FONT = 'Consolas';
12
+ const MAX_TABLE_COLS = 12;
13
+ function inlineSegments(raw) {
14
+ const segments = [];
15
+ const regex = /(\*\*[^*]+\*\*|\*[^*\n]+\*|`[^`\n]+`|\[[^\]\n]+\]\((?:https?:\/\/[^)\s]+)\))/g;
16
+ let last = 0;
17
+ for (const match of raw.matchAll(regex)) {
18
+ const index = match.index ?? 0;
19
+ if (index > last)
20
+ segments.push({ text: raw.slice(last, index) });
21
+ const token = match[0];
22
+ if (token.startsWith('**') && token.endsWith('**')) {
23
+ segments.push({ text: token.slice(2, -2), bold: true });
24
+ }
25
+ else if (token.startsWith('*') && token.endsWith('*')) {
26
+ segments.push({ text: token.slice(1, -1), italics: true });
27
+ }
28
+ else if (token.startsWith('`') && token.endsWith('`')) {
29
+ segments.push({ text: token.slice(1, -1), code: true });
30
+ }
31
+ else {
32
+ const urlMatch = token.match(/^\[([^\]]+)\]\((https?:\/\/[^)\s]+)\)$/);
33
+ if (urlMatch) {
34
+ segments.push({ text: urlMatch[1], link: urlMatch[2] });
35
+ }
36
+ else {
37
+ segments.push({ text: token });
38
+ }
39
+ }
40
+ last = index + token.length;
41
+ }
42
+ if (last < raw.length)
43
+ segments.push({ text: raw.slice(last) });
44
+ return segments.filter((s) => s.text.length > 0);
45
+ }
46
+ function inlineRuns(segments, accentColor) {
47
+ return segments.map((seg) => {
48
+ if (seg.code) {
49
+ return new docx_1.TextRun({
50
+ text: seg.text,
51
+ font: CODE_FONT,
52
+ size: 20,
53
+ shading: { type: docx_1.ShadingType.CLEAR, fill: 'F2F2F2' },
54
+ });
55
+ }
56
+ return new docx_1.TextRun({
57
+ text: seg.text,
58
+ font: BODY_FONT,
59
+ bold: seg.bold,
60
+ italics: seg.italics,
61
+ color: accentColor,
62
+ });
63
+ });
64
+ }
65
+ function makeParagraph(line, accentColor) {
66
+ if (!line.trim())
67
+ return null;
68
+ const segments = inlineSegments(line);
69
+ const hasLink = segments.some((s) => s.link);
70
+ if (hasLink) {
71
+ const children = segments.map((seg) => seg.link
72
+ ? new docx_1.ExternalHyperlink({
73
+ children: [new docx_1.TextRun({ text: seg.text, style: 'Hyperlink' })],
74
+ link: seg.link,
75
+ })
76
+ : new docx_1.TextRun({
77
+ text: seg.text,
78
+ font: BODY_FONT,
79
+ bold: seg.bold,
80
+ italics: seg.italics,
81
+ }));
82
+ return new docx_1.Paragraph({ children, spacing: { after: 120 } });
83
+ }
84
+ return new docx_1.Paragraph({
85
+ children: inlineRuns(segments, accentColor),
86
+ spacing: { after: 120 },
87
+ alignment: docx_1.AlignmentType.JUSTIFIED,
88
+ });
89
+ }
90
+ function tableFromRows(rows) {
91
+ const columnCount = Math.min(Math.max(...rows.map((r) => r.length), 1), MAX_TABLE_COLS);
92
+ const makeCell = (text, header) => new docx_1.TableCell({
93
+ children: [new docx_1.Paragraph({ children: inlineRuns(inlineSegments(text)) })],
94
+ shading: header ? { type: docx_1.ShadingType.CLEAR, fill: 'E8E8E8' } : undefined,
95
+ });
96
+ const tableRows = rows.map((cells, index) => new docx_1.TableRow({
97
+ tableHeader: index === 0,
98
+ children: Array.from({ length: columnCount }, (_, c) => makeCell(cells[c]?.trim() ?? '', index === 0)),
99
+ }));
100
+ return new docx_1.Table({
101
+ width: { size: 100, type: docx_1.WidthType.PERCENTAGE },
102
+ rows: tableRows,
103
+ borders: {
104
+ top: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
105
+ bottom: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
106
+ left: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
107
+ right: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
108
+ insideHorizontal: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
109
+ insideVertical: { style: docx_1.BorderStyle.SINGLE, size: 4, color: 'CCCCCC' },
110
+ },
111
+ });
112
+ }
113
+ function headingLevelFromDepth(depth) {
114
+ switch (depth) {
115
+ case 1: return docx_1.HeadingLevel.HEADING_1;
116
+ case 2: return docx_1.HeadingLevel.HEADING_2;
117
+ case 3: return docx_1.HeadingLevel.HEADING_3;
118
+ case 4: return docx_1.HeadingLevel.HEADING_4;
119
+ case 5: return docx_1.HeadingLevel.HEADING_5;
120
+ default: return docx_1.HeadingLevel.HEADING_6;
121
+ }
122
+ }
123
+ class DocxReportTool {
124
+ key = 'docx-report';
125
+ async run(params) {
126
+ const title = String(params.title ?? 'Untitled');
127
+ const markdown = String(params.markdown ?? '');
128
+ const includeToc = params.includeToc === true;
129
+ const accentColor = params.accentColor ? String(params.accentColor).replace('#', '') : undefined;
130
+ const chartBuffers = Array.isArray(params.charts)
131
+ ? params.charts
132
+ : [];
133
+ const children = [];
134
+ // Title
135
+ children.push(new docx_1.Paragraph({
136
+ children: [
137
+ new docx_1.TextRun({
138
+ text: title,
139
+ font: BODY_FONT,
140
+ bold: true,
141
+ size: 32,
142
+ color: accentColor ?? '1a56db',
143
+ }),
144
+ ],
145
+ heading: docx_1.HeadingLevel.TITLE,
146
+ spacing: { after: 240 },
147
+ }));
148
+ // TOC
149
+ if (includeToc) {
150
+ children.push(new docx_1.TableOfContents('Table of Contents', {
151
+ hyperlink: true,
152
+ headingStyleRange: '1-3',
153
+ }), new docx_1.Paragraph({ children: [new docx_1.PageBreak()] }));
154
+ }
155
+ // Parse markdown
156
+ const lines = markdown.split(/\r?\n/);
157
+ let i = 0;
158
+ let inCodeBlock = false;
159
+ const codeLines = [];
160
+ const flushCodeBlock = () => {
161
+ if (!codeLines.length)
162
+ return;
163
+ children.push(...codeLines.map((line) => new docx_1.Paragraph({
164
+ children: [
165
+ new docx_1.TextRun({ text: line || ' ', font: CODE_FONT, size: 18 }),
166
+ ],
167
+ shading: { type: docx_1.ShadingType.CLEAR, fill: 'F5F5F5' },
168
+ spacing: { after: 0 },
169
+ })), new docx_1.Paragraph({ children: [], spacing: { after: 120 } }));
170
+ codeLines.length = 0;
171
+ };
172
+ for (; i < lines.length; i += 1) {
173
+ const line = lines[i];
174
+ const trimmed = line.trim();
175
+ if (trimmed.startsWith('```')) {
176
+ if (inCodeBlock) {
177
+ inCodeBlock = false;
178
+ flushCodeBlock();
179
+ }
180
+ else {
181
+ flushCodeBlock();
182
+ inCodeBlock = true;
183
+ }
184
+ continue;
185
+ }
186
+ if (inCodeBlock) {
187
+ codeLines.push(line);
188
+ continue;
189
+ }
190
+ // Heading
191
+ const headingMatch = trimmed.match(/^(#{1,6})\s+(.*)$/);
192
+ if (headingMatch) {
193
+ flushCodeBlock();
194
+ const depth = headingMatch[1].length;
195
+ const text = headingMatch[2].replace(/\*\*/g, '');
196
+ children.push(new docx_1.Paragraph({
197
+ children: [
198
+ new docx_1.TextRun({
199
+ text,
200
+ font: BODY_FONT,
201
+ bold: true,
202
+ color: accentColor,
203
+ }),
204
+ ],
205
+ heading: headingLevelFromDepth(depth),
206
+ spacing: { before: 240, after: 120 },
207
+ }));
208
+ continue;
209
+ }
210
+ // Page break
211
+ if (/^---+$/.test(trimmed) || /^\*\*\*+$/.test(trimmed)) {
212
+ flushCodeBlock();
213
+ if (trimmed.length > 3) {
214
+ children.push(new docx_1.Paragraph({
215
+ children: [],
216
+ border: {
217
+ bottom: { style: docx_1.BorderStyle.SINGLE, size: 6, color: 'BBBBBB' },
218
+ },
219
+ spacing: { after: 120 },
220
+ }));
221
+ }
222
+ else {
223
+ children.push(new docx_1.Paragraph({ children: [new docx_1.PageBreak()] }));
224
+ }
225
+ continue;
226
+ }
227
+ // Pipe table
228
+ if (trimmed.startsWith('|') && trimmed.endsWith('|')) {
229
+ flushCodeBlock();
230
+ const tableLines = [line];
231
+ while (i + 1 < lines.length) {
232
+ const next = lines[i + 1].trim();
233
+ if (next.startsWith('|') && next.endsWith('|')) {
234
+ tableLines.push(lines[i + 1]);
235
+ i += 1;
236
+ }
237
+ else {
238
+ break;
239
+ }
240
+ }
241
+ const rows = tableLines
242
+ .map((l) => l
243
+ .trim()
244
+ .replace(/^\||\|$/g, '')
245
+ .split('|')
246
+ .map((c) => c.trim()))
247
+ .filter((cells) => !cells.every((c) => /^:?-+:?$/.test(c)));
248
+ if (rows.length > 0) {
249
+ children.push(tableFromRows(rows), new docx_1.Paragraph({ children: [] }));
250
+ }
251
+ continue;
252
+ }
253
+ // Bullet list
254
+ const bulletMatch = trimmed.match(/^[-*+]\s+(.*)$/);
255
+ if (bulletMatch) {
256
+ flushCodeBlock();
257
+ children.push(new docx_1.Paragraph({
258
+ children: inlineRuns(inlineSegments(bulletMatch[1]), accentColor),
259
+ bullet: { level: 0 },
260
+ spacing: { after: 60 },
261
+ }));
262
+ continue;
263
+ }
264
+ // Numbered list
265
+ const orderedMatch = trimmed.match(/^\d+[.)]\s+(.*)$/);
266
+ if (orderedMatch) {
267
+ flushCodeBlock();
268
+ children.push(new docx_1.Paragraph({
269
+ children: inlineRuns(inlineSegments(orderedMatch[1]), accentColor),
270
+ numbering: { reference: 'ordered-list', level: 0 },
271
+ spacing: { after: 60 },
272
+ }));
273
+ continue;
274
+ }
275
+ // Blockquote
276
+ if (trimmed.startsWith('> ')) {
277
+ flushCodeBlock();
278
+ children.push(new docx_1.Paragraph({
279
+ children: inlineRuns(inlineSegments(trimmed.slice(2)), accentColor),
280
+ indent: { left: 480 },
281
+ shading: { type: docx_1.ShadingType.CLEAR, fill: 'F7F7F7' },
282
+ spacing: { after: 120 },
283
+ }));
284
+ continue;
285
+ }
286
+ // Embedded chart image
287
+ if (trimmed.startsWith('![chart:') && trimmed.endsWith(']')) {
288
+ flushCodeBlock();
289
+ const chartIndex = parseInt(trimmed.slice(8, -1), 10);
290
+ if (chartBuffers[chartIndex]) {
291
+ children.push(new docx_1.Paragraph({
292
+ children: [
293
+ new docx_1.ImageRun({
294
+ data: chartBuffers[chartIndex],
295
+ transformation: { width: 500, height: 300 },
296
+ type: 'png',
297
+ }),
298
+ ],
299
+ spacing: { after: 120 },
300
+ }));
301
+ }
302
+ continue;
303
+ }
304
+ // Plain paragraph
305
+ flushCodeBlock();
306
+ if (!trimmed) {
307
+ children.push(new docx_1.Paragraph({ children: [] }));
308
+ continue;
309
+ }
310
+ const p = makeParagraph(trimmed, accentColor);
311
+ if (p)
312
+ children.push(p);
313
+ }
314
+ flushCodeBlock();
315
+ const doc = new docx_1.Document({
316
+ numbering: {
317
+ config: [
318
+ {
319
+ reference: 'ordered-list',
320
+ levels: [
321
+ {
322
+ level: 0,
323
+ format: docx_1.LevelFormat.DECIMAL,
324
+ text: '%1.',
325
+ alignment: docx_1.AlignmentType.START,
326
+ style: { paragraph: { indent: { left: 720, hanging: 260 } } },
327
+ },
328
+ ],
329
+ },
330
+ ],
331
+ },
332
+ features: {
333
+ updateFields: includeToc,
334
+ },
335
+ sections: [
336
+ {
337
+ headers: {
338
+ default: new docx_1.Header({
339
+ children: [
340
+ new docx_1.Paragraph({
341
+ children: [
342
+ new docx_1.TextRun({ text: title, font: BODY_FONT, size: 18, color: '999999' }),
343
+ ],
344
+ alignment: docx_1.AlignmentType.RIGHT,
345
+ }),
346
+ ],
347
+ }),
348
+ },
349
+ footers: {
350
+ default: new docx_1.Footer({
351
+ children: [
352
+ new docx_1.Paragraph({
353
+ children: [
354
+ new docx_1.TextRun({ text: 'Page ', font: BODY_FONT, size: 18 }),
355
+ new docx_1.TextRun({
356
+ children: [docx_1.PageNumber.CURRENT],
357
+ font: BODY_FONT,
358
+ size: 18,
359
+ }),
360
+ new docx_1.TextRun({ text: ' of ', font: BODY_FONT, size: 18 }),
361
+ new docx_1.TextRun({
362
+ children: [docx_1.PageNumber.TOTAL_PAGES],
363
+ font: BODY_FONT,
364
+ size: 18,
365
+ }),
366
+ ],
367
+ alignment: docx_1.AlignmentType.CENTER,
368
+ }),
369
+ ],
370
+ }),
371
+ },
372
+ children,
373
+ },
374
+ ],
375
+ });
376
+ const buffer = await docx_1.Packer.toBuffer(doc);
377
+ const safeName = title.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 64);
378
+ return {
379
+ outputs: [
380
+ {
381
+ buffer,
382
+ fileName: `${safeName}.docx`,
383
+ mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
384
+ },
385
+ ],
386
+ log: [`Generated DOCX: ${safeName}.docx (${buffer.length} bytes)`],
387
+ };
388
+ }
389
+ }
390
+ exports.DocxReportTool = DocxReportTool;
391
+ //# sourceMappingURL=docx-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx-report.js","sourceRoot":"","sources":["../../../src/lib/tools/docx-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ToolModule, ToolResult } from './runner';
2
+ export declare class PdfExporterTool implements ToolModule {
3
+ key: string;
4
+ run(params: Record<string, unknown>): Promise<ToolResult>;
5
+ }
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PdfExporterTool = void 0;
7
+ /**
8
+ * PDF Exporter tool.
9
+ * Creates PDF documents from markdown using pdfkit.
10
+ * Supports headings, paragraphs, bold/italic, code blocks, tables, lists,
11
+ * page numbers, headers/footers, and custom page sizes.
12
+ */
13
+ const pdfkit_1 = __importDefault(require("pdfkit"));
14
+ const PAGE_SIZES = {
15
+ A4: [595.28, 841.89],
16
+ Letter: [612, 792],
17
+ };
18
+ const DEFAULT_MARGINS = { top: 72, right: 72, bottom: 72, left: 72 };
19
+ class PdfExporterTool {
20
+ key = 'pdf-exporter';
21
+ async run(params) {
22
+ const markdown = String(params.markdown ?? '');
23
+ const pageSize = String(params.pageSize ?? 'A4');
24
+ const orientation = String(params.orientation ?? 'portrait');
25
+ const margins = {
26
+ ...DEFAULT_MARGINS,
27
+ ...(params.margins ?? {}),
28
+ };
29
+ if (!markdown.trim()) {
30
+ return { outputs: [], error: 'No markdown content provided' };
31
+ }
32
+ const [pageW, pageH] = PAGE_SIZES[pageSize] ?? PAGE_SIZES.A4;
33
+ const isLandscape = orientation === 'landscape';
34
+ const pw = isLandscape ? pageH : pageW;
35
+ const ph = isLandscape ? pageW : pageH;
36
+ const contentWidth = pw - margins.left - margins.right;
37
+ const doc = new pdfkit_1.default({
38
+ size: [pw, ph],
39
+ margins,
40
+ bufferPages: true,
41
+ info: {
42
+ Title: 'Document',
43
+ Author: 'TeamShare',
44
+ Creator: 'TeamShare PDF Exporter',
45
+ },
46
+ });
47
+ const chunks = [];
48
+ doc.on('data', (chunk) => chunks.push(chunk));
49
+ const lines = markdown.split(/\r?\n/);
50
+ let i = 0;
51
+ let inCodeBlock = false;
52
+ const newPage = () => {
53
+ doc.addPage({ size: [pw, ph], margins });
54
+ };
55
+ const checkPageBreak = (neededHeight) => {
56
+ if (doc.y + neededHeight > ph - margins.bottom) {
57
+ newPage();
58
+ }
59
+ };
60
+ for (; i < lines.length; i += 1) {
61
+ const line = lines[i];
62
+ const trimmed = line.trim();
63
+ // Code block toggle
64
+ if (trimmed.startsWith('```')) {
65
+ inCodeBlock = !inCodeBlock;
66
+ if (!inCodeBlock) {
67
+ doc.moveDown(0.5);
68
+ }
69
+ continue;
70
+ }
71
+ if (inCodeBlock) {
72
+ checkPageBreak(18);
73
+ doc
74
+ .font('Courier')
75
+ .fontSize(9)
76
+ .fillColor('#f5f5f5')
77
+ .rect(doc.x, doc.y - 2, contentWidth, 14)
78
+ .fill('#f5f5f5')
79
+ .fillColor('#374151')
80
+ .text(line || ' ', margins.left, doc.y, {
81
+ width: contentWidth,
82
+ lineGap: 2,
83
+ });
84
+ continue;
85
+ }
86
+ // Empty line
87
+ if (!trimmed) {
88
+ doc.moveDown(0.5);
89
+ continue;
90
+ }
91
+ // Heading
92
+ const headingMatch = trimmed.match(/^(#{1,6})\s+(.*)$/);
93
+ if (headingMatch) {
94
+ const depth = headingMatch[1].length;
95
+ const text = headingMatch[2].replace(/\*\*/g, '');
96
+ const fontSize = depth === 1 ? 22 : depth === 2 ? 18 : depth === 3 ? 14 : 12;
97
+ checkPageBreak(fontSize + 12);
98
+ doc
99
+ .font('Helvetica-Bold')
100
+ .fontSize(fontSize)
101
+ .fillColor('#1a56db')
102
+ .text(text, { width: contentWidth });
103
+ doc.moveDown(0.3);
104
+ continue;
105
+ }
106
+ // Horizontal rule
107
+ if (/^---+$/.test(trimmed) || /^\*\*\*+$/.test(trimmed)) {
108
+ checkPageBreak(20);
109
+ doc
110
+ .moveTo(margins.left, doc.y)
111
+ .lineTo(pw - margins.right, doc.y)
112
+ .strokeColor('#CCCCCC')
113
+ .lineWidth(1)
114
+ .stroke();
115
+ doc.moveDown(0.5);
116
+ continue;
117
+ }
118
+ // Bullet list
119
+ const bulletMatch = trimmed.match(/^[-*+]\s+(.*)$/);
120
+ if (bulletMatch) {
121
+ checkPageBreak(16);
122
+ doc
123
+ .font('Helvetica')
124
+ .fontSize(11)
125
+ .fillColor('#374151');
126
+ const text = bulletMatch[1]
127
+ .replace(/\*\*([^*]+)\*\*/g, '$1')
128
+ .replace(/\*([^*]+)\*/g, '$1');
129
+ doc.text(`• ${text}`, margins.left + 20, doc.y, {
130
+ width: contentWidth - 20,
131
+ lineGap: 3,
132
+ });
133
+ continue;
134
+ }
135
+ // Numbered list
136
+ const orderedMatch = trimmed.match(/^(\d+[.)])\s+(.*)$/);
137
+ if (orderedMatch) {
138
+ checkPageBreak(16);
139
+ doc
140
+ .font('Helvetica')
141
+ .fontSize(11)
142
+ .fillColor('#374151');
143
+ const text = orderedMatch[2]
144
+ .replace(/\*\*([^*]+)\*\*/g, '$1')
145
+ .replace(/\*([^*]+)\*/g, '$1');
146
+ doc.text(`${orderedMatch[1]} ${text}`, margins.left + 20, doc.y, {
147
+ width: contentWidth - 20,
148
+ lineGap: 3,
149
+ });
150
+ continue;
151
+ }
152
+ // Blockquote
153
+ if (trimmed.startsWith('> ')) {
154
+ checkPageBreak(16);
155
+ const text = trimmed.slice(2);
156
+ doc
157
+ .font('Helvetica-Oblique')
158
+ .fontSize(11)
159
+ .fillColor('#6B7280');
160
+ doc.text(text, margins.left + 20, doc.y, {
161
+ width: contentWidth - 20,
162
+ lineGap: 3,
163
+ });
164
+ continue;
165
+ }
166
+ // Pipe table
167
+ if (trimmed.startsWith('|') && trimmed.endsWith('|')) {
168
+ const tableLines = [trimmed];
169
+ while (i + 1 < lines.length) {
170
+ const next = lines[i + 1].trim();
171
+ if (next.startsWith('|') && next.endsWith('|')) {
172
+ tableLines.push(next);
173
+ i += 1;
174
+ }
175
+ else {
176
+ break;
177
+ }
178
+ }
179
+ const rows = tableLines
180
+ .map((l) => l
181
+ .trim()
182
+ .replace(/^\||\|$/g, '')
183
+ .split('|')
184
+ .map((c) => c.trim()))
185
+ .filter((cells) => !cells.every((c) => /^:?-+:?$/.test(c)));
186
+ if (rows.length > 0) {
187
+ const colCount = Math.max(...rows.map((r) => r.length));
188
+ const colWidth = contentWidth / colCount;
189
+ checkPageBreak(rows.length * 18 + 10);
190
+ rows.forEach((row, rowIdx) => {
191
+ const isHeader = rowIdx === 0;
192
+ row.forEach((cell, colIdx) => {
193
+ const x = margins.left + colIdx * colWidth;
194
+ const y = doc.y;
195
+ if (isHeader) {
196
+ doc.rect(x, y, colWidth, 18).fill('#E8E8E8');
197
+ doc.font('Helvetica-Bold').fontSize(10).fillColor('#374151');
198
+ }
199
+ else {
200
+ if (rowIdx % 2 === 0) {
201
+ doc.rect(x, y, colWidth, 18).fill('#F9FAFB');
202
+ }
203
+ doc.font('Helvetica').fontSize(10).fillColor('#374151');
204
+ }
205
+ doc.text(cell, x + 4, y + 3, { width: colWidth - 8 });
206
+ });
207
+ doc.y += 18;
208
+ });
209
+ doc.moveDown(0.5);
210
+ }
211
+ continue;
212
+ }
213
+ // Regular paragraph
214
+ checkPageBreak(16);
215
+ let text = trimmed
216
+ .replace(/\*\*([^*]+)\*\*/g, '$1')
217
+ .replace(/\*([^*]+)\*/g, '$1')
218
+ .replace(/`([^`]+)`/g, '$1');
219
+ doc
220
+ .font('Helvetica')
221
+ .fontSize(11)
222
+ .fillColor('#374151')
223
+ .text(text, { width: contentWidth, lineGap: 3 });
224
+ }
225
+ // Add page numbers to all pages
226
+ const pageCount = doc.bufferedPageRange().count;
227
+ for (let p = 0; p < pageCount; p++) {
228
+ doc.switchToPage(p);
229
+ doc
230
+ .font('Helvetica')
231
+ .fontSize(9)
232
+ .fillColor('#9CA3AF')
233
+ .text(`Page ${p + 1} of ${pageCount}`, margins.left, ph - margins.bottom + 20, { width: contentWidth, align: 'center' });
234
+ }
235
+ doc.end();
236
+ const buffer = await new Promise((resolve) => {
237
+ doc.on('end', () => resolve(Buffer.concat(chunks)));
238
+ });
239
+ const titleMatch = markdown.match(/^#\s+(.*)$/m);
240
+ const title = titleMatch ? titleMatch[1].replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 64) : 'document';
241
+ return {
242
+ outputs: [
243
+ {
244
+ buffer,
245
+ fileName: `${title}.pdf`,
246
+ mime: 'application/pdf',
247
+ },
248
+ ],
249
+ log: [`Generated PDF: ${title}.pdf (${buffer.length} bytes, ${pageCount} pages)`],
250
+ };
251
+ }
252
+ }
253
+ exports.PdfExporterTool = PdfExporterTool;
254
+ //# sourceMappingURL=pdf-exporter.js.map