@pdfme/converter 6.1.1-dev.28 → 6.1.1-dev.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/md2pdf.js +83 -32
- package/dist/md2pdf.js.map +1 -1
- package/package.json +1 -1
package/dist/md2pdf.js
CHANGED
|
@@ -10,21 +10,51 @@ var DEFAULT_PAGE_MARGIN = [
|
|
|
10
10
|
15
|
|
11
11
|
];
|
|
12
12
|
var DEFAULT_FONT_SIZE = 10;
|
|
13
|
-
var DEFAULT_LINE_HEIGHT = 1;
|
|
14
|
-
var DEFAULT_FONT_COLOR = "#
|
|
13
|
+
var DEFAULT_LINE_HEIGHT = 1.25;
|
|
14
|
+
var DEFAULT_FONT_COLOR = "#111827";
|
|
15
15
|
var DEFAULT_HEADING_SCALE = {
|
|
16
16
|
1: 2,
|
|
17
17
|
2: 1.65,
|
|
18
18
|
3: 1.35,
|
|
19
19
|
4: 1.15,
|
|
20
20
|
5: 1,
|
|
21
|
-
6:
|
|
21
|
+
6: 1
|
|
22
22
|
};
|
|
23
|
-
var BLOCK_GAP =
|
|
24
|
-
var LIST_ITEM_SPACING = 1;
|
|
25
|
-
var TABLE_HEADER_HEIGHT =
|
|
26
|
-
var TABLE_ROW_HEIGHT =
|
|
23
|
+
var BLOCK_GAP = 4;
|
|
24
|
+
var LIST_ITEM_SPACING = 1.4;
|
|
25
|
+
var TABLE_HEADER_HEIGHT = 8.5;
|
|
26
|
+
var TABLE_ROW_HEIGHT = 7.5;
|
|
27
27
|
var IMAGE_HEIGHT = 45;
|
|
28
|
+
var CODE_BLOCK_BACKGROUND_COLOR = "#f6f8fa";
|
|
29
|
+
var CODE_BLOCK_BORDER_COLOR = "#d0d7de";
|
|
30
|
+
var CODE_BLOCK_BORDER_WIDTH = .1;
|
|
31
|
+
var CODE_BLOCK_PADDING = {
|
|
32
|
+
top: 2,
|
|
33
|
+
right: 3,
|
|
34
|
+
bottom: 2,
|
|
35
|
+
left: 3
|
|
36
|
+
};
|
|
37
|
+
var BLOCKQUOTE_BACKGROUND_COLOR = "#f8fafc";
|
|
38
|
+
var BLOCKQUOTE_BORDER_COLOR = "#d0d7de";
|
|
39
|
+
var BLOCKQUOTE_BORDER_WIDTH = {
|
|
40
|
+
top: 0,
|
|
41
|
+
right: 0,
|
|
42
|
+
bottom: 0,
|
|
43
|
+
left: .8
|
|
44
|
+
};
|
|
45
|
+
var BLOCKQUOTE_PADDING = {
|
|
46
|
+
top: 2,
|
|
47
|
+
right: 3,
|
|
48
|
+
bottom: 2,
|
|
49
|
+
left: 3
|
|
50
|
+
};
|
|
51
|
+
var HORIZONTAL_RULE_COLOR = "#d0d7de";
|
|
52
|
+
var HORIZONTAL_RULE_HEIGHT = .25;
|
|
53
|
+
var TABLE_BORDER_COLOR = "#d0d7de";
|
|
54
|
+
var TABLE_CELL_BORDER_WIDTH = .1;
|
|
55
|
+
var TABLE_HEAD_BACKGROUND_COLOR = "#f6f8fa";
|
|
56
|
+
var TABLE_BODY_ALTERNATE_BACKGROUND_COLOR = "#f9fafb";
|
|
57
|
+
var TABLE_CELL_PADDING = 3;
|
|
28
58
|
var MARKDOWN_ESCAPE_PATTERN = /[\\*~`[\]()]/g;
|
|
29
59
|
var DATA_IMAGE_PATTERN = /^data:image\/(?:png|jpe?g);base64,/i;
|
|
30
60
|
var RENDERABLE_BLOCK_TYPES = new Set([
|
|
@@ -145,7 +175,7 @@ var renderHeading = (node, builder) => {
|
|
|
145
175
|
content,
|
|
146
176
|
fontSize,
|
|
147
177
|
height: estimateTextHeight(content, fontSize, builder.lineHeight),
|
|
148
|
-
gap: depth <= 2 ? 4 : BLOCK_GAP,
|
|
178
|
+
gap: depth <= 1 ? 5 : depth === 2 ? 4.5 : BLOCK_GAP,
|
|
149
179
|
textFormat: "inline-markdown"
|
|
150
180
|
});
|
|
151
181
|
};
|
|
@@ -198,9 +228,11 @@ var renderCode = (node, builder) => {
|
|
|
198
228
|
const content = node.value;
|
|
199
229
|
addTextSchema(builder, {
|
|
200
230
|
content,
|
|
201
|
-
backgroundColor:
|
|
202
|
-
|
|
203
|
-
|
|
231
|
+
backgroundColor: CODE_BLOCK_BACKGROUND_COLOR,
|
|
232
|
+
borderColor: CODE_BLOCK_BORDER_COLOR,
|
|
233
|
+
borderWidth: resolveBoxSides(CODE_BLOCK_BORDER_WIDTH),
|
|
234
|
+
padding: CODE_BLOCK_PADDING,
|
|
235
|
+
textFormat: "plain"
|
|
204
236
|
});
|
|
205
237
|
};
|
|
206
238
|
var renderBlockquote = (node, builder) => {
|
|
@@ -208,10 +240,11 @@ var renderBlockquote = (node, builder) => {
|
|
|
208
240
|
if (!content.trim()) return;
|
|
209
241
|
addTextSchema(builder, {
|
|
210
242
|
content,
|
|
211
|
-
backgroundColor:
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
243
|
+
backgroundColor: BLOCKQUOTE_BACKGROUND_COLOR,
|
|
244
|
+
borderColor: BLOCKQUOTE_BORDER_COLOR,
|
|
245
|
+
borderWidth: BLOCKQUOTE_BORDER_WIDTH,
|
|
246
|
+
padding: BLOCKQUOTE_PADDING,
|
|
247
|
+
textFormat: "inline-markdown"
|
|
215
248
|
});
|
|
216
249
|
};
|
|
217
250
|
var renderTable = (node, builder) => {
|
|
@@ -238,17 +271,20 @@ var renderTable = (node, builder) => {
|
|
|
238
271
|
head,
|
|
239
272
|
headWidthPercentages: columnWidths,
|
|
240
273
|
tableStyles: {
|
|
241
|
-
borderColor:
|
|
242
|
-
borderWidth: .
|
|
274
|
+
borderColor: TABLE_BORDER_COLOR,
|
|
275
|
+
borderWidth: .2
|
|
243
276
|
},
|
|
244
277
|
headStyles: {
|
|
245
278
|
...defaultCellStyle(builder),
|
|
246
|
-
|
|
247
|
-
|
|
279
|
+
backgroundColor: TABLE_HEAD_BACKGROUND_COLOR,
|
|
280
|
+
borderColor: TABLE_BORDER_COLOR,
|
|
281
|
+
borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH)
|
|
248
282
|
},
|
|
249
283
|
bodyStyles: {
|
|
250
284
|
...defaultCellStyle(builder),
|
|
251
|
-
|
|
285
|
+
borderColor: TABLE_BORDER_COLOR,
|
|
286
|
+
borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),
|
|
287
|
+
alternateBackgroundColor: TABLE_BODY_ALTERNATE_BACKGROUND_COLOR
|
|
252
288
|
},
|
|
253
289
|
columnStyles: {}
|
|
254
290
|
});
|
|
@@ -285,14 +321,15 @@ var renderLine = (builder) => {
|
|
|
285
321
|
y: builder.cursorY
|
|
286
322
|
},
|
|
287
323
|
width: builder.contentFrame.width,
|
|
288
|
-
height:
|
|
324
|
+
height: HORIZONTAL_RULE_HEIGHT,
|
|
289
325
|
readOnly: true,
|
|
290
|
-
color:
|
|
326
|
+
color: HORIZONTAL_RULE_COLOR
|
|
291
327
|
});
|
|
292
328
|
};
|
|
293
329
|
var addTextSchema = (builder, options) => {
|
|
294
330
|
const fontSize = options.fontSize ?? builder.fontSize;
|
|
295
331
|
const content = options.content;
|
|
332
|
+
const boxVerticalInset = getBoxVerticalInset(options);
|
|
296
333
|
addSchema(builder, {
|
|
297
334
|
name: options.name ?? resolveAutoName(builder, "text"),
|
|
298
335
|
type: "text",
|
|
@@ -302,7 +339,7 @@ var addTextSchema = (builder, options) => {
|
|
|
302
339
|
y: builder.cursorY
|
|
303
340
|
},
|
|
304
341
|
width: options.width ?? builder.contentFrame.width,
|
|
305
|
-
height: options.height ?? estimateTextHeight(content, fontSize, builder.lineHeight),
|
|
342
|
+
height: (options.height ?? estimateTextHeight(content, fontSize, builder.lineHeight)) + boxVerticalInset,
|
|
306
343
|
readOnly: true,
|
|
307
344
|
alignment: "left",
|
|
308
345
|
verticalAlignment: "top",
|
|
@@ -312,6 +349,9 @@ var addTextSchema = (builder, options) => {
|
|
|
312
349
|
characterSpacing: 0,
|
|
313
350
|
fontColor: builder.fontColor,
|
|
314
351
|
backgroundColor: options.backgroundColor ?? "",
|
|
352
|
+
borderColor: options.borderColor,
|
|
353
|
+
borderWidth: options.borderWidth,
|
|
354
|
+
padding: options.padding,
|
|
315
355
|
textFormat: options.textFormat ?? "plain",
|
|
316
356
|
overflow: "expand"
|
|
317
357
|
}, options.gap);
|
|
@@ -377,16 +417,27 @@ var defaultCellStyle = (builder) => ({
|
|
|
377
417
|
characterSpacing: 0,
|
|
378
418
|
fontColor: builder.fontColor,
|
|
379
419
|
backgroundColor: "#ffffff",
|
|
380
|
-
borderColor:
|
|
381
|
-
borderWidth: resolveBoxSides(
|
|
382
|
-
padding: resolveBoxSides(
|
|
383
|
-
});
|
|
384
|
-
var resolveBoxSides = (value) => ({
|
|
385
|
-
top: value,
|
|
386
|
-
right: value,
|
|
387
|
-
bottom: value,
|
|
388
|
-
left: value
|
|
420
|
+
borderColor: TABLE_BORDER_COLOR,
|
|
421
|
+
borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),
|
|
422
|
+
padding: resolveBoxSides(TABLE_CELL_PADDING)
|
|
389
423
|
});
|
|
424
|
+
var resolveBoxSides = (value) => {
|
|
425
|
+
if (typeof value === "number") return {
|
|
426
|
+
top: value,
|
|
427
|
+
right: value,
|
|
428
|
+
bottom: value,
|
|
429
|
+
left: value
|
|
430
|
+
};
|
|
431
|
+
const x = value.x ?? 0;
|
|
432
|
+
const y = value.y ?? 0;
|
|
433
|
+
return {
|
|
434
|
+
top: value.top ?? y,
|
|
435
|
+
right: value.right ?? x,
|
|
436
|
+
bottom: value.bottom ?? y,
|
|
437
|
+
left: value.left ?? x
|
|
438
|
+
};
|
|
439
|
+
};
|
|
440
|
+
var getBoxVerticalInset = (value) => (value.borderWidth?.top ?? 0) + (value.borderWidth?.bottom ?? 0) + (value.padding?.top ?? 0) + (value.padding?.bottom ?? 0);
|
|
390
441
|
var resolveAutoName = (builder, prefix) => {
|
|
391
442
|
let name = "";
|
|
392
443
|
do {
|
package/dist/md2pdf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"md2pdf.js","names":[],"sources":["../src/md2pdf.ts"],"sourcesContent":["import {\n normalizeLinkHref,\n pt2mm,\n resolvePageSize,\n type BlankPdf,\n type PageOrientation,\n type PageSize,\n type Schema,\n type Template,\n} from '@pdfme/common';\nimport type {\n BlockContent,\n Blockquote,\n Code,\n Heading,\n Image,\n InlineCode,\n Link,\n List,\n ListItem,\n Paragraph,\n PhrasingContent,\n Root,\n RootContent,\n Table,\n TableCell,\n TableRow,\n} from 'mdast';\nimport remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport { unified } from 'unified';\n\ntype BoxSides = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n x?: number;\n y?: number;\n};\ntype ResolvedBoxSides = { top: number; right: number; bottom: number; left: number };\ntype HeadingDepth = 1 | 2 | 3 | 4 | 5 | 6;\ntype MarkdownMargin = number | [number, number, number, number] | BoxSides;\n\nexport type Md2PdfOptions = {\n page?: {\n size?: PageSize;\n orientation?: PageOrientation;\n margin?: MarkdownMargin;\n };\n basePdf?: BlankPdf;\n style?: {\n fontName?: string;\n fontSize?: number;\n lineHeight?: number;\n fontColor?: string;\n headingScale?: Partial<Record<HeadingDepth, number>>;\n };\n};\n\nexport type Md2PdfResult = {\n template: Template;\n inputs: Record<string, string>[];\n};\n\ntype Builder = {\n basePdf: BlankPdf;\n contentFrame: { x: number; y: number; width: number; height: number };\n cursorY: number;\n fontName?: string;\n fontSize: number;\n lineHeight: number;\n fontColor: string;\n headingScale: Record<HeadingDepth, number>;\n nameCounters: Record<string, number>;\n schemas: Schema[];\n usedNames: Set<string>;\n};\n\ntype TableCellStyle = {\n fontName?: string;\n alignment: 'left' | 'center' | 'right';\n verticalAlignment: 'top' | 'middle' | 'bottom';\n fontSize: number;\n lineHeight: number;\n characterSpacing: number;\n fontColor: string;\n backgroundColor: string;\n borderColor: string;\n borderWidth: ResolvedBoxSides;\n padding: ResolvedBoxSides;\n alternateBackgroundColor?: string;\n};\n\nconst DEFAULT_PAGE_MARGIN: [number, number, number, number] = [20, 15, 20, 15];\nconst DEFAULT_FONT_SIZE = 10;\nconst DEFAULT_LINE_HEIGHT = 1;\nconst DEFAULT_FONT_COLOR = '#000000';\nconst DEFAULT_HEADING_SCALE: Record<HeadingDepth, number> = {\n 1: 2,\n 2: 1.65,\n 3: 1.35,\n 4: 1.15,\n 5: 1,\n 6: 0.9,\n};\nconst BLOCK_GAP = 3;\nconst LIST_ITEM_SPACING = 1;\nconst TABLE_HEADER_HEIGHT = 9;\nconst TABLE_ROW_HEIGHT = 6.5;\nconst IMAGE_HEIGHT = 45;\n\nconst MARKDOWN_ESCAPE_PATTERN = /[\\\\*~`[\\]()]/g;\nconst DATA_IMAGE_PATTERN = /^data:image\\/(?:png|jpe?g);base64,/i;\nconst RENDERABLE_BLOCK_TYPES = new Set([\n 'blockquote',\n 'code',\n 'heading',\n 'html',\n 'list',\n 'paragraph',\n 'table',\n 'thematicBreak',\n]);\n\nconst markdownProcessor = unified().use(remarkParse).use(remarkGfm);\n\nexport const md2pdf = async (\n markdown: string,\n options: Md2PdfOptions = {},\n): Promise<Md2PdfResult> => {\n const root = markdownProcessor.parse(markdown) as Root;\n const builder = createBuilder(options);\n\n root.children.forEach((node) => renderBlock(node, builder));\n\n return {\n template: {\n basePdf: builder.basePdf,\n schemas: [builder.schemas],\n },\n inputs: [{}],\n };\n};\n\nconst createBuilder = (options: Md2PdfOptions): Builder => {\n const basePdf = options.basePdf ?? createBlankPdf(options);\n const [top, right, bottom, left] = basePdf.padding;\n const headingScale = { ...DEFAULT_HEADING_SCALE, ...options.style?.headingScale };\n\n return {\n basePdf,\n contentFrame: {\n x: left,\n y: top,\n width: Math.max(0, basePdf.width - left - right),\n height: Math.max(0, basePdf.height - top - bottom),\n },\n cursorY: top,\n fontName: options.style?.fontName,\n fontSize: options.style?.fontSize ?? DEFAULT_FONT_SIZE,\n lineHeight: options.style?.lineHeight ?? DEFAULT_LINE_HEIGHT,\n fontColor: options.style?.fontColor ?? DEFAULT_FONT_COLOR,\n headingScale,\n nameCounters: {},\n schemas: [],\n usedNames: new Set(),\n };\n};\n\nconst createBlankPdf = (options: Md2PdfOptions): BlankPdf => {\n const pageSize = resolvePageSize(\n options.page?.size ?? 'A4',\n options.page?.orientation ?? 'portrait',\n );\n return {\n width: pageSize.width,\n height: pageSize.height,\n padding: resolveMargin(options.page?.margin ?? DEFAULT_PAGE_MARGIN),\n };\n};\n\nconst resolveMargin = (margin: MarkdownMargin): [number, number, number, number] => {\n if (typeof margin === 'number') return [margin, margin, margin, margin];\n if (Array.isArray(margin)) return margin;\n\n const x = margin.x ?? 0;\n const y = margin.y ?? 0;\n return [margin.top ?? y, margin.right ?? x, margin.bottom ?? y, margin.left ?? x];\n};\n\nconst renderBlock = (node: RootContent | BlockContent, builder: Builder): void => {\n switch (node.type) {\n case 'heading':\n renderHeading(node, builder);\n return;\n case 'paragraph':\n renderParagraph(node, builder);\n return;\n case 'list':\n renderList(node, builder);\n return;\n case 'code':\n renderCode(node, builder);\n return;\n case 'blockquote':\n renderBlockquote(node, builder);\n return;\n case 'table':\n renderTable(node, builder);\n return;\n case 'thematicBreak':\n renderLine(builder);\n return;\n case 'html':\n case 'definition':\n case 'footnoteDefinition':\n case 'yaml':\n return;\n default:\n renderNestedBlocks(node, builder);\n }\n};\n\nconst renderNestedBlocks = (node: RootContent | BlockContent, builder: Builder): void => {\n if ('children' in node && Array.isArray(node.children)) {\n node.children.forEach((child) => {\n if (isBlockContent(child)) renderBlock(child, builder);\n });\n }\n};\n\nconst renderHeading = (node: Heading, builder: Builder): void => {\n const depth = Math.min(Math.max(node.depth, 1), 6) as HeadingDepth;\n const content = renderInlineChildren(node.children);\n const fontSize = builder.fontSize * builder.headingScale[depth];\n addTextSchema(builder, {\n name: resolveName(builder, slugify(toPlainText(node)) || `heading_${depth}`),\n content,\n fontSize,\n height: estimateTextHeight(content, fontSize, builder.lineHeight),\n gap: depth <= 2 ? 4 : BLOCK_GAP,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderParagraph = (node: Paragraph, builder: Builder): void => {\n if (node.children.length === 1 && node.children[0]?.type === 'image') {\n renderImage(node.children[0], builder);\n return;\n }\n\n const content = renderInlineChildren(node.children);\n if (!content.trim()) return;\n addTextSchema(builder, {\n content,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderList = (node: List, builder: Builder): void => {\n const items = collectListItems(node);\n if (items.length === 0) return;\n\n const fontSize = builder.fontSize;\n const height =\n items.length * estimateTextHeight('', fontSize, builder.lineHeight) +\n Math.max(0, items.length - 1) * LIST_ITEM_SPACING;\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'list'),\n type: 'list',\n content: JSON.stringify(items),\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height,\n readOnly: true,\n alignment: 'left',\n verticalAlignment: 'top',\n fontSize,\n fontName: builder.fontName,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: '',\n listStyle: node.ordered ? 'ordered' : 'bullet',\n markerWidth: 6,\n markerGap: 2,\n indentSize: 6,\n itemSpacing: LIST_ITEM_SPACING,\n textFormat: 'inline-markdown',\n overflow: 'expand',\n };\n\n addSchema(builder, schema);\n};\n\nconst renderCode = (node: Code, builder: Builder): void => {\n const content = node.value;\n addTextSchema(builder, {\n content,\n backgroundColor: '#f5f5f5',\n textFormat: 'plain',\n height: estimateTextHeight(content, builder.fontSize, builder.lineHeight) + 2,\n });\n};\n\nconst renderBlockquote = (node: Blockquote, builder: Builder): void => {\n const content = node.children\n .map((child) => blockToMarkdown(child))\n .join('\\n')\n .trim();\n\n if (!content.trim()) return;\n addTextSchema(builder, {\n content,\n backgroundColor: '#f8f8f8',\n textFormat: 'inline-markdown',\n x: builder.contentFrame.x + 3,\n width: Math.max(0, builder.contentFrame.width - 3),\n });\n};\n\nconst renderTable = (node: Table, builder: Builder): void => {\n const rows = node.children.map(tableRowToStrings).filter((row) => row.length > 0);\n if (rows.length === 0) return;\n\n const columnCount = Math.max(...rows.map((row) => row.length));\n const head = normalizeRowLength(rows[0], columnCount);\n const body = rows.slice(1).map((row) => normalizeRowLength(row, columnCount));\n const height = TABLE_HEADER_HEIGHT + Math.max(1, body.length) * TABLE_ROW_HEIGHT;\n const columnWidths = Array.from({ length: columnCount }, () => 100 / columnCount);\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'table'),\n type: 'table',\n content: JSON.stringify(body),\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height,\n readOnly: true,\n showHead: true,\n repeatHead: false,\n head,\n headWidthPercentages: columnWidths,\n tableStyles: {\n borderColor: '#000000',\n borderWidth: 0.3,\n },\n headStyles: {\n ...defaultCellStyle(builder),\n fontColor: '#ffffff',\n backgroundColor: '#2980ba',\n },\n bodyStyles: {\n ...defaultCellStyle(builder),\n alternateBackgroundColor: '#f5f5f5',\n },\n columnStyles: {},\n };\n\n addSchema(builder, schema);\n};\n\nconst renderImage = (node: Image, builder: Builder): void => {\n if (!DATA_IMAGE_PATTERN.test(node.url)) {\n const link = normalizeLinkHref(node.url);\n const label = node.alt || node.title || node.url;\n addTextSchema(builder, {\n content: link\n ? `[${escapeInlineMarkdown(label)}](${escapeLinkDestination(link)})`\n : escapeInlineMarkdown(label),\n textFormat: 'inline-markdown',\n });\n return;\n }\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'image'),\n type: 'image',\n content: node.url,\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height: IMAGE_HEIGHT,\n readOnly: true,\n };\n\n addSchema(builder, schema);\n};\n\nconst renderLine = (builder: Builder): void => {\n const schema: Schema = {\n name: resolveAutoName(builder, 'line'),\n type: 'line',\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height: 0.3,\n readOnly: true,\n color: '#000000',\n };\n\n addSchema(builder, schema);\n};\n\nconst addTextSchema = (\n builder: Builder,\n options: {\n name?: string;\n content: string;\n fontSize?: number;\n height?: number;\n gap?: number;\n backgroundColor?: string;\n textFormat?: 'plain' | 'inline-markdown';\n x?: number;\n width?: number;\n },\n): void => {\n const fontSize = options.fontSize ?? builder.fontSize;\n const content = options.content;\n const schema: Schema = {\n name: options.name ?? resolveAutoName(builder, 'text'),\n type: 'text',\n content,\n position: { x: options.x ?? builder.contentFrame.x, y: builder.cursorY },\n width: options.width ?? builder.contentFrame.width,\n height: options.height ?? estimateTextHeight(content, fontSize, builder.lineHeight),\n readOnly: true,\n alignment: 'left',\n verticalAlignment: 'top',\n fontSize,\n fontName: builder.fontName,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: options.backgroundColor ?? '',\n textFormat: options.textFormat ?? 'plain',\n overflow: 'expand',\n };\n\n addSchema(builder, schema, options.gap);\n};\n\nconst addSchema = (builder: Builder, schema: Schema, gap = BLOCK_GAP): void => {\n builder.schemas.push(schema);\n builder.cursorY += schema.height + gap;\n};\n\nconst collectListItems = (node: List, level = 0): string[] =>\n node.children.flatMap((item) => {\n const prefix = typeof item.checked === 'boolean' ? `[${item.checked ? 'x' : ' '}] ` : '';\n const text = item.children\n .filter((child) => child.type !== 'list')\n .map((child) => blockToMarkdown(child))\n .join(' ')\n .trim();\n const current = `${'\\t'.repeat(level)}${prefix}${text}`;\n const nested = item.children\n .filter(isList)\n .flatMap((child) => collectListItems(child, level + 1));\n return [current, ...nested];\n });\n\nconst blockToMarkdown = (node: RootContent | BlockContent): string => {\n switch (node.type) {\n case 'paragraph':\n case 'heading':\n return renderInlineChildren(node.children);\n case 'code':\n return node.value;\n case 'list':\n return collectListItems(node).join('\\n');\n case 'blockquote':\n return node.children.map(blockToMarkdown).join('\\n');\n case 'table':\n return node.children.map((row) => tableRowToStrings(row).join(' | ')).join('\\n');\n case 'thematicBreak':\n return '---';\n default:\n return '';\n }\n};\n\nconst renderInlineChildren = (children: PhrasingContent[]): string =>\n children.map(renderInline).join('');\n\nconst renderInline = (node: PhrasingContent): string => {\n switch (node.type) {\n case 'text':\n return escapeInlineMarkdown(node.value);\n case 'emphasis':\n return `*${renderInlineChildren(node.children)}*`;\n case 'strong':\n return `**${renderInlineChildren(node.children)}**`;\n case 'delete':\n return `~~${renderInlineChildren(node.children)}~~`;\n case 'inlineCode':\n return renderInlineCode(node);\n case 'break':\n return '\\n';\n case 'link':\n return renderLink(node);\n case 'image':\n return renderInlineImage(node);\n case 'html':\n return '';\n default:\n return 'children' in node && Array.isArray(node.children)\n ? renderInlineChildren(node.children as PhrasingContent[])\n : '';\n }\n};\n\nconst renderInlineCode = (node: InlineCode): string => `\\`${node.value.replaceAll('`', '\\\\`')}\\``;\n\nconst renderLink = (node: Link): string => {\n const label = renderInlineChildren(node.children);\n const href = normalizeLinkHref(node.url);\n if (!href) return label;\n return `[${label}](${escapeLinkDestination(href)})`;\n};\n\nconst renderInlineImage = (node: Image): string => {\n const label = node.alt || node.title || node.url;\n const href = normalizeLinkHref(node.url);\n if (!href) return escapeInlineMarkdown(label);\n return `[${escapeInlineMarkdown(label)}](${escapeLinkDestination(href)})`;\n};\n\nconst tableRowToStrings = (row: TableRow): string[] => row.children.map(tableCellToString);\n\nconst tableCellToString = (cell: TableCell): string =>\n cell.children.map(inlineToPlainText).join('');\n\nconst normalizeRowLength = (row: string[], columnCount: number): string[] =>\n Array.from({ length: columnCount }, (_, index) => row[index] ?? '');\n\nconst defaultCellStyle = (builder: Builder): TableCellStyle => ({\n fontName: builder.fontName,\n alignment: 'left',\n verticalAlignment: 'middle',\n fontSize: builder.fontSize,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: '#ffffff',\n borderColor: '#000000',\n borderWidth: resolveBoxSides(0),\n padding: resolveBoxSides(5),\n});\n\nconst resolveBoxSides = (value: number): ResolvedBoxSides => ({\n top: value,\n right: value,\n bottom: value,\n left: value,\n});\n\nconst resolveAutoName = (builder: Builder, prefix: string): string => {\n let name = '';\n do {\n builder.nameCounters[prefix] = (builder.nameCounters[prefix] ?? 0) + 1;\n name = `${prefix}_${builder.nameCounters[prefix]}`;\n } while (builder.usedNames.has(name));\n builder.usedNames.add(name);\n return name;\n};\n\nconst resolveName = (builder: Builder, baseName: string): string => {\n let name = baseName;\n let index = 0;\n while (builder.usedNames.has(name)) {\n index += 1;\n name = `${baseName}_${index}`;\n }\n builder.usedNames.add(name);\n return name;\n};\n\nconst estimateTextHeight = (content: string, fontSize: number, lineHeight: number): number => {\n const lineCount = Math.max(1, content.split('\\n').length);\n return Math.max(4, lineCount * pt2mm(fontSize * lineHeight) + 1);\n};\n\nconst escapeInlineMarkdown = (value: string): string =>\n value.replace(MARKDOWN_ESCAPE_PATTERN, (match) => `\\\\${match}`);\n\nconst escapeLinkDestination = (href: string): string =>\n encodeURI(href).replace(/[\\\\()]/g, (match) => `\\\\${match}`);\n\nconst slugify = (value: string): string =>\n value\n .trim()\n .toLowerCase()\n .replace(/[^\\p{Letter}\\p{Number}]+/gu, '-')\n .replace(/^-|-$/g, '');\n\nconst toPlainText = (node: Heading): string =>\n node.children\n .map((child) => {\n if ('value' in child && typeof child.value === 'string') return child.value;\n if ('alt' in child && typeof child.alt === 'string') return child.alt;\n if ('children' in child && Array.isArray(child.children)) {\n return (child.children as PhrasingContent[])\n .map((grandchild) => toPlainInlineText(grandchild))\n .join('');\n }\n return '';\n })\n .join('');\n\nconst toPlainInlineText = (node: PhrasingContent): string => {\n if ('value' in node && typeof node.value === 'string') return node.value;\n if ('alt' in node && typeof node.alt === 'string') return node.alt;\n if ('children' in node && Array.isArray(node.children)) {\n return (node.children as PhrasingContent[]).map(toPlainInlineText).join('');\n }\n return '';\n};\n\nconst inlineToPlainText = (node: PhrasingContent): string => {\n switch (node.type) {\n case 'text':\n case 'inlineCode':\n return node.value;\n case 'break':\n return '\\n';\n case 'image':\n return node.alt || node.title || node.url;\n case 'link':\n case 'emphasis':\n case 'strong':\n case 'delete':\n return node.children.map(inlineToPlainText).join('');\n case 'html':\n return '';\n default:\n return 'children' in node && Array.isArray(node.children)\n ? (node.children as PhrasingContent[]).map(inlineToPlainText).join('')\n : '';\n }\n};\n\nconst isBlockContent = (node: unknown): node is BlockContent =>\n typeof node === 'object' &&\n node !== null &&\n 'type' in node &&\n typeof node.type === 'string' &&\n RENDERABLE_BLOCK_TYPES.has(node.type);\n\nconst isList = (node: ListItem['children'][number]): node is List => node.type === 'list';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"md2pdf.js","names":[],"sources":["../src/md2pdf.ts"],"sourcesContent":["import {\n normalizeLinkHref,\n pt2mm,\n resolvePageSize,\n type BlankPdf,\n type PageOrientation,\n type PageSize,\n type Schema,\n type Template,\n} from '@pdfme/common';\nimport type {\n BlockContent,\n Blockquote,\n Code,\n Heading,\n Image,\n InlineCode,\n Link,\n List,\n ListItem,\n Paragraph,\n PhrasingContent,\n Root,\n RootContent,\n Table,\n TableCell,\n TableRow,\n} from 'mdast';\nimport remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport { unified } from 'unified';\n\ntype BoxSides = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n x?: number;\n y?: number;\n};\ntype ResolvedBoxSides = { top: number; right: number; bottom: number; left: number };\ntype HeadingDepth = 1 | 2 | 3 | 4 | 5 | 6;\ntype MarkdownMargin = number | [number, number, number, number] | BoxSides;\n\nexport type Md2PdfOptions = {\n page?: {\n size?: PageSize;\n orientation?: PageOrientation;\n margin?: MarkdownMargin;\n };\n basePdf?: BlankPdf;\n style?: {\n fontName?: string;\n fontSize?: number;\n lineHeight?: number;\n fontColor?: string;\n headingScale?: Partial<Record<HeadingDepth, number>>;\n };\n};\n\nexport type Md2PdfResult = {\n template: Template;\n inputs: Record<string, string>[];\n};\n\ntype Builder = {\n basePdf: BlankPdf;\n contentFrame: { x: number; y: number; width: number; height: number };\n cursorY: number;\n fontName?: string;\n fontSize: number;\n lineHeight: number;\n fontColor: string;\n headingScale: Record<HeadingDepth, number>;\n nameCounters: Record<string, number>;\n schemas: Schema[];\n usedNames: Set<string>;\n};\n\ntype TableCellStyle = {\n fontName?: string;\n alignment: 'left' | 'center' | 'right';\n verticalAlignment: 'top' | 'middle' | 'bottom';\n fontSize: number;\n lineHeight: number;\n characterSpacing: number;\n fontColor: string;\n backgroundColor: string;\n borderColor: string;\n borderWidth: ResolvedBoxSides;\n padding: ResolvedBoxSides;\n alternateBackgroundColor?: string;\n};\n\nconst DEFAULT_PAGE_MARGIN: [number, number, number, number] = [20, 15, 20, 15];\nconst DEFAULT_FONT_SIZE = 10;\nconst DEFAULT_LINE_HEIGHT = 1.25;\nconst DEFAULT_FONT_COLOR = '#111827';\nconst DEFAULT_HEADING_SCALE: Record<HeadingDepth, number> = {\n 1: 2,\n 2: 1.65,\n 3: 1.35,\n 4: 1.15,\n 5: 1,\n 6: 1,\n};\nconst BLOCK_GAP = 4;\nconst LIST_ITEM_SPACING = 1.4;\nconst TABLE_HEADER_HEIGHT = 8.5;\nconst TABLE_ROW_HEIGHT = 7.5;\nconst IMAGE_HEIGHT = 45;\nconst CODE_BLOCK_BACKGROUND_COLOR = '#f6f8fa';\nconst CODE_BLOCK_BORDER_COLOR = '#d0d7de';\nconst CODE_BLOCK_BORDER_WIDTH = 0.1;\nconst CODE_BLOCK_PADDING: ResolvedBoxSides = { top: 2, right: 3, bottom: 2, left: 3 };\nconst BLOCKQUOTE_BACKGROUND_COLOR = '#f8fafc';\nconst BLOCKQUOTE_BORDER_COLOR = '#d0d7de';\nconst BLOCKQUOTE_BORDER_WIDTH: ResolvedBoxSides = { top: 0, right: 0, bottom: 0, left: 0.8 };\nconst BLOCKQUOTE_PADDING: ResolvedBoxSides = { top: 2, right: 3, bottom: 2, left: 3 };\nconst HORIZONTAL_RULE_COLOR = '#d0d7de';\nconst HORIZONTAL_RULE_HEIGHT = 0.25;\nconst TABLE_BORDER_COLOR = '#d0d7de';\nconst TABLE_CELL_BORDER_WIDTH = 0.1;\nconst TABLE_HEAD_BACKGROUND_COLOR = '#f6f8fa';\nconst TABLE_BODY_ALTERNATE_BACKGROUND_COLOR = '#f9fafb';\nconst TABLE_CELL_PADDING = 3;\n\nconst MARKDOWN_ESCAPE_PATTERN = /[\\\\*~`[\\]()]/g;\nconst DATA_IMAGE_PATTERN = /^data:image\\/(?:png|jpe?g);base64,/i;\nconst RENDERABLE_BLOCK_TYPES = new Set([\n 'blockquote',\n 'code',\n 'heading',\n 'html',\n 'list',\n 'paragraph',\n 'table',\n 'thematicBreak',\n]);\n\nconst markdownProcessor = unified().use(remarkParse).use(remarkGfm);\n\nexport const md2pdf = async (\n markdown: string,\n options: Md2PdfOptions = {},\n): Promise<Md2PdfResult> => {\n const root = markdownProcessor.parse(markdown) as Root;\n const builder = createBuilder(options);\n\n root.children.forEach((node) => renderBlock(node, builder));\n\n return {\n template: {\n basePdf: builder.basePdf,\n schemas: [builder.schemas],\n },\n inputs: [{}],\n };\n};\n\nconst createBuilder = (options: Md2PdfOptions): Builder => {\n const basePdf = options.basePdf ?? createBlankPdf(options);\n const [top, right, bottom, left] = basePdf.padding;\n const headingScale = { ...DEFAULT_HEADING_SCALE, ...options.style?.headingScale };\n\n return {\n basePdf,\n contentFrame: {\n x: left,\n y: top,\n width: Math.max(0, basePdf.width - left - right),\n height: Math.max(0, basePdf.height - top - bottom),\n },\n cursorY: top,\n fontName: options.style?.fontName,\n fontSize: options.style?.fontSize ?? DEFAULT_FONT_SIZE,\n lineHeight: options.style?.lineHeight ?? DEFAULT_LINE_HEIGHT,\n fontColor: options.style?.fontColor ?? DEFAULT_FONT_COLOR,\n headingScale,\n nameCounters: {},\n schemas: [],\n usedNames: new Set(),\n };\n};\n\nconst createBlankPdf = (options: Md2PdfOptions): BlankPdf => {\n const pageSize = resolvePageSize(\n options.page?.size ?? 'A4',\n options.page?.orientation ?? 'portrait',\n );\n return {\n width: pageSize.width,\n height: pageSize.height,\n padding: resolveMargin(options.page?.margin ?? DEFAULT_PAGE_MARGIN),\n };\n};\n\nconst resolveMargin = (margin: MarkdownMargin): [number, number, number, number] => {\n if (typeof margin === 'number') return [margin, margin, margin, margin];\n if (Array.isArray(margin)) return margin;\n\n const x = margin.x ?? 0;\n const y = margin.y ?? 0;\n return [margin.top ?? y, margin.right ?? x, margin.bottom ?? y, margin.left ?? x];\n};\n\nconst renderBlock = (node: RootContent | BlockContent, builder: Builder): void => {\n switch (node.type) {\n case 'heading':\n renderHeading(node, builder);\n return;\n case 'paragraph':\n renderParagraph(node, builder);\n return;\n case 'list':\n renderList(node, builder);\n return;\n case 'code':\n renderCode(node, builder);\n return;\n case 'blockquote':\n renderBlockquote(node, builder);\n return;\n case 'table':\n renderTable(node, builder);\n return;\n case 'thematicBreak':\n renderLine(builder);\n return;\n case 'html':\n case 'definition':\n case 'footnoteDefinition':\n case 'yaml':\n return;\n default:\n renderNestedBlocks(node, builder);\n }\n};\n\nconst renderNestedBlocks = (node: RootContent | BlockContent, builder: Builder): void => {\n if ('children' in node && Array.isArray(node.children)) {\n node.children.forEach((child) => {\n if (isBlockContent(child)) renderBlock(child, builder);\n });\n }\n};\n\nconst renderHeading = (node: Heading, builder: Builder): void => {\n const depth = Math.min(Math.max(node.depth, 1), 6) as HeadingDepth;\n const content = renderInlineChildren(node.children);\n const fontSize = builder.fontSize * builder.headingScale[depth];\n addTextSchema(builder, {\n name: resolveName(builder, slugify(toPlainText(node)) || `heading_${depth}`),\n content,\n fontSize,\n height: estimateTextHeight(content, fontSize, builder.lineHeight),\n gap: depth <= 1 ? 5 : depth === 2 ? 4.5 : BLOCK_GAP,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderParagraph = (node: Paragraph, builder: Builder): void => {\n if (node.children.length === 1 && node.children[0]?.type === 'image') {\n renderImage(node.children[0], builder);\n return;\n }\n\n const content = renderInlineChildren(node.children);\n if (!content.trim()) return;\n addTextSchema(builder, {\n content,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderList = (node: List, builder: Builder): void => {\n const items = collectListItems(node);\n if (items.length === 0) return;\n\n const fontSize = builder.fontSize;\n const height =\n items.length * estimateTextHeight('', fontSize, builder.lineHeight) +\n Math.max(0, items.length - 1) * LIST_ITEM_SPACING;\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'list'),\n type: 'list',\n content: JSON.stringify(items),\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height,\n readOnly: true,\n alignment: 'left',\n verticalAlignment: 'top',\n fontSize,\n fontName: builder.fontName,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: '',\n listStyle: node.ordered ? 'ordered' : 'bullet',\n markerWidth: 6,\n markerGap: 2,\n indentSize: 6,\n itemSpacing: LIST_ITEM_SPACING,\n textFormat: 'inline-markdown',\n overflow: 'expand',\n };\n\n addSchema(builder, schema);\n};\n\nconst renderCode = (node: Code, builder: Builder): void => {\n const content = node.value;\n addTextSchema(builder, {\n content,\n backgroundColor: CODE_BLOCK_BACKGROUND_COLOR,\n borderColor: CODE_BLOCK_BORDER_COLOR,\n borderWidth: resolveBoxSides(CODE_BLOCK_BORDER_WIDTH),\n padding: CODE_BLOCK_PADDING,\n textFormat: 'plain',\n });\n};\n\nconst renderBlockquote = (node: Blockquote, builder: Builder): void => {\n const content = node.children\n .map((child) => blockToMarkdown(child))\n .join('\\n')\n .trim();\n\n if (!content.trim()) return;\n addTextSchema(builder, {\n content,\n backgroundColor: BLOCKQUOTE_BACKGROUND_COLOR,\n borderColor: BLOCKQUOTE_BORDER_COLOR,\n borderWidth: BLOCKQUOTE_BORDER_WIDTH,\n padding: BLOCKQUOTE_PADDING,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderTable = (node: Table, builder: Builder): void => {\n const rows = node.children.map(tableRowToStrings).filter((row) => row.length > 0);\n if (rows.length === 0) return;\n\n const columnCount = Math.max(...rows.map((row) => row.length));\n const head = normalizeRowLength(rows[0], columnCount);\n const body = rows.slice(1).map((row) => normalizeRowLength(row, columnCount));\n const height = TABLE_HEADER_HEIGHT + Math.max(1, body.length) * TABLE_ROW_HEIGHT;\n const columnWidths = Array.from({ length: columnCount }, () => 100 / columnCount);\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'table'),\n type: 'table',\n content: JSON.stringify(body),\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height,\n readOnly: true,\n showHead: true,\n repeatHead: false,\n head,\n headWidthPercentages: columnWidths,\n tableStyles: {\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: 0.2,\n },\n headStyles: {\n ...defaultCellStyle(builder),\n backgroundColor: TABLE_HEAD_BACKGROUND_COLOR,\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),\n },\n bodyStyles: {\n ...defaultCellStyle(builder),\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),\n alternateBackgroundColor: TABLE_BODY_ALTERNATE_BACKGROUND_COLOR,\n },\n columnStyles: {},\n };\n\n addSchema(builder, schema);\n};\n\nconst renderImage = (node: Image, builder: Builder): void => {\n if (!DATA_IMAGE_PATTERN.test(node.url)) {\n const link = normalizeLinkHref(node.url);\n const label = node.alt || node.title || node.url;\n addTextSchema(builder, {\n content: link\n ? `[${escapeInlineMarkdown(label)}](${escapeLinkDestination(link)})`\n : escapeInlineMarkdown(label),\n textFormat: 'inline-markdown',\n });\n return;\n }\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'image'),\n type: 'image',\n content: node.url,\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height: IMAGE_HEIGHT,\n readOnly: true,\n };\n\n addSchema(builder, schema);\n};\n\nconst renderLine = (builder: Builder): void => {\n const schema: Schema = {\n name: resolveAutoName(builder, 'line'),\n type: 'line',\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height: HORIZONTAL_RULE_HEIGHT,\n readOnly: true,\n color: HORIZONTAL_RULE_COLOR,\n };\n\n addSchema(builder, schema);\n};\n\nconst addTextSchema = (\n builder: Builder,\n options: {\n name?: string;\n content: string;\n fontSize?: number;\n height?: number;\n gap?: number;\n backgroundColor?: string;\n borderColor?: string;\n borderWidth?: ResolvedBoxSides;\n padding?: ResolvedBoxSides;\n textFormat?: 'plain' | 'inline-markdown';\n x?: number;\n width?: number;\n },\n): void => {\n const fontSize = options.fontSize ?? builder.fontSize;\n const content = options.content;\n const boxVerticalInset = getBoxVerticalInset(options);\n const schema: Schema = {\n name: options.name ?? resolveAutoName(builder, 'text'),\n type: 'text',\n content,\n position: { x: options.x ?? builder.contentFrame.x, y: builder.cursorY },\n width: options.width ?? builder.contentFrame.width,\n height:\n (options.height ?? estimateTextHeight(content, fontSize, builder.lineHeight)) +\n boxVerticalInset,\n readOnly: true,\n alignment: 'left',\n verticalAlignment: 'top',\n fontSize,\n fontName: builder.fontName,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: options.backgroundColor ?? '',\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n padding: options.padding,\n textFormat: options.textFormat ?? 'plain',\n overflow: 'expand',\n };\n\n addSchema(builder, schema, options.gap);\n};\n\nconst addSchema = (builder: Builder, schema: Schema, gap = BLOCK_GAP): void => {\n builder.schemas.push(schema);\n builder.cursorY += schema.height + gap;\n};\n\nconst collectListItems = (node: List, level = 0): string[] =>\n node.children.flatMap((item) => {\n const prefix = typeof item.checked === 'boolean' ? `[${item.checked ? 'x' : ' '}] ` : '';\n const text = item.children\n .filter((child) => child.type !== 'list')\n .map((child) => blockToMarkdown(child))\n .join(' ')\n .trim();\n const current = `${'\\t'.repeat(level)}${prefix}${text}`;\n const nested = item.children\n .filter(isList)\n .flatMap((child) => collectListItems(child, level + 1));\n return [current, ...nested];\n });\n\nconst blockToMarkdown = (node: RootContent | BlockContent): string => {\n switch (node.type) {\n case 'paragraph':\n case 'heading':\n return renderInlineChildren(node.children);\n case 'code':\n return node.value;\n case 'list':\n return collectListItems(node).join('\\n');\n case 'blockquote':\n return node.children.map(blockToMarkdown).join('\\n');\n case 'table':\n return node.children.map((row) => tableRowToStrings(row).join(' | ')).join('\\n');\n case 'thematicBreak':\n return '---';\n default:\n return '';\n }\n};\n\nconst renderInlineChildren = (children: PhrasingContent[]): string =>\n children.map(renderInline).join('');\n\nconst renderInline = (node: PhrasingContent): string => {\n switch (node.type) {\n case 'text':\n return escapeInlineMarkdown(node.value);\n case 'emphasis':\n return `*${renderInlineChildren(node.children)}*`;\n case 'strong':\n return `**${renderInlineChildren(node.children)}**`;\n case 'delete':\n return `~~${renderInlineChildren(node.children)}~~`;\n case 'inlineCode':\n return renderInlineCode(node);\n case 'break':\n return '\\n';\n case 'link':\n return renderLink(node);\n case 'image':\n return renderInlineImage(node);\n case 'html':\n return '';\n default:\n return 'children' in node && Array.isArray(node.children)\n ? renderInlineChildren(node.children as PhrasingContent[])\n : '';\n }\n};\n\nconst renderInlineCode = (node: InlineCode): string => `\\`${node.value.replaceAll('`', '\\\\`')}\\``;\n\nconst renderLink = (node: Link): string => {\n const label = renderInlineChildren(node.children);\n const href = normalizeLinkHref(node.url);\n if (!href) return label;\n return `[${label}](${escapeLinkDestination(href)})`;\n};\n\nconst renderInlineImage = (node: Image): string => {\n const label = node.alt || node.title || node.url;\n const href = normalizeLinkHref(node.url);\n if (!href) return escapeInlineMarkdown(label);\n return `[${escapeInlineMarkdown(label)}](${escapeLinkDestination(href)})`;\n};\n\nconst tableRowToStrings = (row: TableRow): string[] => row.children.map(tableCellToString);\n\nconst tableCellToString = (cell: TableCell): string =>\n cell.children.map(inlineToPlainText).join('');\n\nconst normalizeRowLength = (row: string[], columnCount: number): string[] =>\n Array.from({ length: columnCount }, (_, index) => row[index] ?? '');\n\nconst defaultCellStyle = (builder: Builder): TableCellStyle => ({\n fontName: builder.fontName,\n alignment: 'left',\n verticalAlignment: 'middle',\n fontSize: builder.fontSize,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: '#ffffff',\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),\n padding: resolveBoxSides(TABLE_CELL_PADDING),\n});\n\nconst resolveBoxSides = (value: number | BoxSides): ResolvedBoxSides => {\n if (typeof value === 'number') return { top: value, right: value, bottom: value, left: value };\n const x = value.x ?? 0;\n const y = value.y ?? 0;\n return {\n top: value.top ?? y,\n right: value.right ?? x,\n bottom: value.bottom ?? y,\n left: value.left ?? x,\n };\n};\n\nconst getBoxVerticalInset = (value: {\n borderWidth?: ResolvedBoxSides;\n padding?: ResolvedBoxSides;\n}) =>\n (value.borderWidth?.top ?? 0) +\n (value.borderWidth?.bottom ?? 0) +\n (value.padding?.top ?? 0) +\n (value.padding?.bottom ?? 0);\n\nconst resolveAutoName = (builder: Builder, prefix: string): string => {\n let name = '';\n do {\n builder.nameCounters[prefix] = (builder.nameCounters[prefix] ?? 0) + 1;\n name = `${prefix}_${builder.nameCounters[prefix]}`;\n } while (builder.usedNames.has(name));\n builder.usedNames.add(name);\n return name;\n};\n\nconst resolveName = (builder: Builder, baseName: string): string => {\n let name = baseName;\n let index = 0;\n while (builder.usedNames.has(name)) {\n index += 1;\n name = `${baseName}_${index}`;\n }\n builder.usedNames.add(name);\n return name;\n};\n\nconst estimateTextHeight = (content: string, fontSize: number, lineHeight: number): number => {\n const lineCount = Math.max(1, content.split('\\n').length);\n return Math.max(4, lineCount * pt2mm(fontSize * lineHeight) + 1);\n};\n\nconst escapeInlineMarkdown = (value: string): string =>\n value.replace(MARKDOWN_ESCAPE_PATTERN, (match) => `\\\\${match}`);\n\nconst escapeLinkDestination = (href: string): string =>\n encodeURI(href).replace(/[\\\\()]/g, (match) => `\\\\${match}`);\n\nconst slugify = (value: string): string =>\n value\n .trim()\n .toLowerCase()\n .replace(/[^\\p{Letter}\\p{Number}]+/gu, '-')\n .replace(/^-|-$/g, '');\n\nconst toPlainText = (node: Heading): string =>\n node.children\n .map((child) => {\n if ('value' in child && typeof child.value === 'string') return child.value;\n if ('alt' in child && typeof child.alt === 'string') return child.alt;\n if ('children' in child && Array.isArray(child.children)) {\n return (child.children as PhrasingContent[])\n .map((grandchild) => toPlainInlineText(grandchild))\n .join('');\n }\n return '';\n })\n .join('');\n\nconst toPlainInlineText = (node: PhrasingContent): string => {\n if ('value' in node && typeof node.value === 'string') return node.value;\n if ('alt' in node && typeof node.alt === 'string') return node.alt;\n if ('children' in node && Array.isArray(node.children)) {\n return (node.children as PhrasingContent[]).map(toPlainInlineText).join('');\n }\n return '';\n};\n\nconst inlineToPlainText = (node: PhrasingContent): string => {\n switch (node.type) {\n case 'text':\n case 'inlineCode':\n return node.value;\n case 'break':\n return '\\n';\n case 'image':\n return node.alt || node.title || node.url;\n case 'link':\n case 'emphasis':\n case 'strong':\n case 'delete':\n return node.children.map(inlineToPlainText).join('');\n case 'html':\n return '';\n default:\n return 'children' in node && Array.isArray(node.children)\n ? (node.children as PhrasingContent[]).map(inlineToPlainText).join('')\n : '';\n }\n};\n\nconst isBlockContent = (node: unknown): node is BlockContent =>\n typeof node === 'object' &&\n node !== null &&\n 'type' in node &&\n typeof node.type === 'string' &&\n RENDERABLE_BLOCK_TYPES.has(node.type);\n\nconst isList = (node: ListItem['children'][number]): node is List => node.type === 'list';\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pdfme/converter",
|
|
3
|
-
"version": "6.1.1-dev.
|
|
3
|
+
"version": "6.1.1-dev.30",
|
|
4
4
|
"description": "TypeScript base PDF generator and React base UI. Open source, developed by the community, and completely free to use under the MIT license!",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pdf",
|