@pyreon/document 0.10.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/analysis/index.js.html +1 -1
- package/lib/confluence-Bd3ua1Ut.js.map +1 -1
- package/lib/csv-COrS4qdy.js.map +1 -1
- package/lib/discord-BLUnkEh9.js.map +1 -1
- package/lib/{dist-BsqdI2nY.js → dist-CYL41kqQ.js} +2 -2
- package/lib/dist-CYL41kqQ.js.map +1 -0
- package/lib/{docx-BEBOihjl.js → docx-uNAel545.js} +7 -2
- package/lib/docx-uNAel545.js.map +1 -0
- package/lib/email-D0bbfWq4.js.map +1 -1
- package/lib/{exceljs-BoIDUUaw.js → exceljs-BYETsesT.js} +314 -314
- package/lib/exceljs-BYETsesT.js.map +1 -0
- package/lib/google-chat-CkKCBUWC.js.map +1 -1
- package/lib/html-B5biprN2.js.map +1 -1
- package/lib/index.js +17 -8
- package/lib/index.js.map +1 -1
- package/lib/markdown-CdtlFGC0.js.map +1 -1
- package/lib/notion-iG2C5bEY.js.map +1 -1
- package/lib/{pdf-DIUQUEdj.js → pdf-IuBgTb3T.js} +9 -3
- package/lib/pdf-IuBgTb3T.js.map +1 -0
- package/lib/{pdfmake-DnmLxK4Q.js → pdfmake-CKMX5URW.js} +2 -4
- package/lib/pdfmake-CKMX5URW.js.map +1 -0
- package/lib/{pptx-Dd33oL3_.js → pptx-DXiMiYFM.js} +7 -2
- package/lib/pptx-DXiMiYFM.js.map +1 -0
- package/lib/{pptxgen.es-COcgXsyx.js → pptxgen.es-FsqHs8mD.js} +3 -6
- package/lib/pptxgen.es-FsqHs8mD.js.map +1 -0
- package/lib/sanitize-O_3j1mNJ.js.map +1 -1
- package/lib/slack-BI3EQwYm.js.map +1 -1
- package/lib/svg-BKxumy-p.js.map +1 -1
- package/lib/teams-Cwz9lce0.js.map +1 -1
- package/lib/telegram-gYFqyMXb.js.map +1 -1
- package/lib/text-l1XNXBOC.js.map +1 -1
- package/lib/types/index.d.ts +43 -39
- package/lib/types/index.d.ts.map +1 -1
- package/lib/{vfs_fonts-Df1kkZ4Y.js → vfs_fonts-Cap07Jg3.js} +2 -2
- package/lib/vfs_fonts-Cap07Jg3.js.map +1 -0
- package/lib/whatsapp-CjSGoOKx.js.map +1 -1
- package/lib/{xlsx-Bb5TWyXQ.js → xlsx-Cvu4LBNy.js} +8 -2
- package/lib/xlsx-Cvu4LBNy.js.map +1 -0
- package/package.json +19 -7
- package/src/builder.ts +53 -44
- package/src/download.ts +32 -36
- package/src/env.d.ts +3 -17
- package/src/index.ts +6 -8
- package/src/nodes.ts +45 -45
- package/src/render.ts +45 -118
- package/src/renderers/confluence.ts +64 -80
- package/src/renderers/csv.ts +11 -18
- package/src/renderers/discord.ts +38 -50
- package/src/renderers/docx.ts +78 -120
- package/src/renderers/email.ts +73 -92
- package/src/renderers/google-chat.ts +35 -47
- package/src/renderers/html.ts +78 -101
- package/src/renderers/markdown.ts +43 -53
- package/src/renderers/notion.ts +63 -85
- package/src/renderers/pdf.ts +92 -115
- package/src/renderers/pptx.ts +60 -66
- package/src/renderers/slack.ts +49 -61
- package/src/renderers/svg.ts +49 -63
- package/src/renderers/teams.ts +68 -80
- package/src/renderers/telegram.ts +40 -54
- package/src/renderers/text.ts +44 -66
- package/src/renderers/whatsapp.ts +34 -48
- package/src/renderers/xlsx.ts +47 -61
- package/src/sanitize.ts +21 -25
- package/src/tests/document.test.ts +1337 -1385
- package/src/tests/stress.test.ts +111 -111
- package/src/types.ts +66 -65
- package/lib/dist-BsqdI2nY.js.map +0 -1
- package/lib/docx-BEBOihjl.js.map +0 -1
- package/lib/exceljs-BoIDUUaw.js.map +0 -1
- package/lib/pdf-DIUQUEdj.js.map +0 -1
- package/lib/pdfmake-DnmLxK4Q.js.map +0 -1
- package/lib/pptx-Dd33oL3_.js.map +0 -1
- package/lib/pptxgen.es-COcgXsyx.js.map +0 -1
- package/lib/vfs_fonts-Df1kkZ4Y.js.map +0 -1
- package/lib/xlsx-Bb5TWyXQ.js.map +0 -1
package/src/nodes.ts
CHANGED
|
@@ -19,7 +19,7 @@ import type {
|
|
|
19
19
|
SpacerProps,
|
|
20
20
|
TableProps,
|
|
21
21
|
TextProps,
|
|
22
|
-
} from
|
|
22
|
+
} from "./types"
|
|
23
23
|
|
|
24
24
|
// ─── Node Constructor ───────────────────────────────────────────────────────
|
|
25
25
|
|
|
@@ -33,13 +33,13 @@ function createNode(type: NodeType, props: object, children: unknown): DocNode {
|
|
|
33
33
|
|
|
34
34
|
function normalizeChildren(children: unknown): DocChild[] {
|
|
35
35
|
if (children == null || children === false) return []
|
|
36
|
-
if (typeof children ===
|
|
37
|
-
if (typeof children ===
|
|
36
|
+
if (typeof children === "string") return [children]
|
|
37
|
+
if (typeof children === "number") return [String(children)]
|
|
38
38
|
if (Array.isArray(children)) return children.flatMap(normalizeChildren)
|
|
39
39
|
if (isDocNode(children)) return [children]
|
|
40
|
-
if (typeof children ===
|
|
40
|
+
if (typeof children === "object") {
|
|
41
41
|
throw new Error(
|
|
42
|
-
|
|
42
|
+
"[@pyreon/document] Invalid child: plain objects are not valid document children. Use a document node (Text, Heading, etc.) instead.",
|
|
43
43
|
)
|
|
44
44
|
}
|
|
45
45
|
return [String(children)]
|
|
@@ -48,11 +48,11 @@ function normalizeChildren(children: unknown): DocChild[] {
|
|
|
48
48
|
/** Type guard — checks if a value is a DocNode. */
|
|
49
49
|
export function isDocNode(value: unknown): value is DocNode {
|
|
50
50
|
return (
|
|
51
|
-
typeof value ===
|
|
51
|
+
typeof value === "object" &&
|
|
52
52
|
value !== null &&
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
"type" in value &&
|
|
54
|
+
"props" in value &&
|
|
55
|
+
"children" in value
|
|
56
56
|
)
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -70,9 +70,9 @@ export function isDocNode(value: unknown): value is DocNode {
|
|
|
70
70
|
*/
|
|
71
71
|
export function Document(props: DocumentProps): DocNode {
|
|
72
72
|
const { children, ...rest } = props
|
|
73
|
-
return createNode(
|
|
73
|
+
return createNode("document", rest, children)
|
|
74
74
|
}
|
|
75
|
-
Document._documentType =
|
|
75
|
+
Document._documentType = "document" as const
|
|
76
76
|
|
|
77
77
|
/**
|
|
78
78
|
* Page container. Maps to a PDF page, DOCX section, or email block.
|
|
@@ -86,9 +86,9 @@ Document._documentType = 'document' as const
|
|
|
86
86
|
*/
|
|
87
87
|
export function Page(props: PageProps): DocNode {
|
|
88
88
|
const { children, ...rest } = props
|
|
89
|
-
return createNode(
|
|
89
|
+
return createNode("page", rest, children)
|
|
90
90
|
}
|
|
91
|
-
Page._documentType =
|
|
91
|
+
Page._documentType = "page" as const
|
|
92
92
|
|
|
93
93
|
/**
|
|
94
94
|
* Layout section — groups content with optional direction, padding, background.
|
|
@@ -103,9 +103,9 @@ Page._documentType = 'page' as const
|
|
|
103
103
|
*/
|
|
104
104
|
export function Section(props: SectionProps): DocNode {
|
|
105
105
|
const { children, ...rest } = props
|
|
106
|
-
return createNode(
|
|
106
|
+
return createNode("section", rest, children)
|
|
107
107
|
}
|
|
108
|
-
Section._documentType =
|
|
108
|
+
Section._documentType = "section" as const
|
|
109
109
|
|
|
110
110
|
/**
|
|
111
111
|
* Horizontal layout container.
|
|
@@ -120,18 +120,18 @@ Section._documentType = 'section' as const
|
|
|
120
120
|
*/
|
|
121
121
|
export function Row(props: RowProps): DocNode {
|
|
122
122
|
const { children, ...rest } = props
|
|
123
|
-
return createNode(
|
|
123
|
+
return createNode("row", rest, children)
|
|
124
124
|
}
|
|
125
|
-
Row._documentType =
|
|
125
|
+
Row._documentType = "row" as const
|
|
126
126
|
|
|
127
127
|
/**
|
|
128
128
|
* Column within a Row.
|
|
129
129
|
*/
|
|
130
130
|
export function Column(props: ColumnProps): DocNode {
|
|
131
131
|
const { children, ...rest } = props
|
|
132
|
-
return createNode(
|
|
132
|
+
return createNode("column", rest, children)
|
|
133
133
|
}
|
|
134
|
-
Column._documentType =
|
|
134
|
+
Column._documentType = "column" as const
|
|
135
135
|
|
|
136
136
|
/**
|
|
137
137
|
* Heading text (h1–h6).
|
|
@@ -144,9 +144,9 @@ Column._documentType = 'column' as const
|
|
|
144
144
|
*/
|
|
145
145
|
export function Heading(props: HeadingProps): DocNode {
|
|
146
146
|
const { children, ...rest } = props
|
|
147
|
-
return createNode(
|
|
147
|
+
return createNode("heading", { level: 1, ...rest }, children)
|
|
148
148
|
}
|
|
149
|
-
Heading._documentType =
|
|
149
|
+
Heading._documentType = "heading" as const
|
|
150
150
|
|
|
151
151
|
/**
|
|
152
152
|
* Text paragraph with optional formatting.
|
|
@@ -159,9 +159,9 @@ Heading._documentType = 'heading' as const
|
|
|
159
159
|
*/
|
|
160
160
|
export function Text(props: TextProps): DocNode {
|
|
161
161
|
const { children, ...rest } = props
|
|
162
|
-
return createNode(
|
|
162
|
+
return createNode("text", rest, children)
|
|
163
163
|
}
|
|
164
|
-
Text._documentType =
|
|
164
|
+
Text._documentType = "text" as const
|
|
165
165
|
|
|
166
166
|
/**
|
|
167
167
|
* Hyperlink.
|
|
@@ -173,9 +173,9 @@ Text._documentType = 'text' as const
|
|
|
173
173
|
*/
|
|
174
174
|
export function Link(props: LinkProps): DocNode {
|
|
175
175
|
const { children, ...rest } = props
|
|
176
|
-
return createNode(
|
|
176
|
+
return createNode("link", rest, children)
|
|
177
177
|
}
|
|
178
|
-
Link._documentType =
|
|
178
|
+
Link._documentType = "link" as const
|
|
179
179
|
|
|
180
180
|
/**
|
|
181
181
|
* Image with optional sizing and caption.
|
|
@@ -187,9 +187,9 @@ Link._documentType = 'link' as const
|
|
|
187
187
|
* ```
|
|
188
188
|
*/
|
|
189
189
|
export function Image(props: ImageProps): DocNode {
|
|
190
|
-
return createNode(
|
|
190
|
+
return createNode("image", props, [])
|
|
191
191
|
}
|
|
192
|
-
Image._documentType =
|
|
192
|
+
Image._documentType = "image" as const
|
|
193
193
|
|
|
194
194
|
/**
|
|
195
195
|
* Data table with columns and rows.
|
|
@@ -205,9 +205,9 @@ Image._documentType = 'image' as const
|
|
|
205
205
|
* ```
|
|
206
206
|
*/
|
|
207
207
|
export function Table(props: TableProps): DocNode {
|
|
208
|
-
return createNode(
|
|
208
|
+
return createNode("table", props, [])
|
|
209
209
|
}
|
|
210
|
-
Table._documentType =
|
|
210
|
+
Table._documentType = "table" as const
|
|
211
211
|
|
|
212
212
|
/**
|
|
213
213
|
* Ordered or unordered list.
|
|
@@ -222,18 +222,18 @@ Table._documentType = 'table' as const
|
|
|
222
222
|
*/
|
|
223
223
|
export function List(props: ListProps): DocNode {
|
|
224
224
|
const { children, ...rest } = props
|
|
225
|
-
return createNode(
|
|
225
|
+
return createNode("list", rest, children)
|
|
226
226
|
}
|
|
227
|
-
List._documentType =
|
|
227
|
+
List._documentType = "list" as const
|
|
228
228
|
|
|
229
229
|
/**
|
|
230
230
|
* Single list item within a List.
|
|
231
231
|
*/
|
|
232
232
|
export function ListItem(props: ListItemProps): DocNode {
|
|
233
233
|
const { children } = props
|
|
234
|
-
return createNode(
|
|
234
|
+
return createNode("list-item", {}, children)
|
|
235
235
|
}
|
|
236
|
-
ListItem._documentType =
|
|
236
|
+
ListItem._documentType = "list-item" as const
|
|
237
237
|
|
|
238
238
|
/**
|
|
239
239
|
* Code block with optional language hint.
|
|
@@ -245,9 +245,9 @@ ListItem._documentType = 'list-item' as const
|
|
|
245
245
|
*/
|
|
246
246
|
export function Code(props: CodeProps): DocNode {
|
|
247
247
|
const { children, ...rest } = props
|
|
248
|
-
return createNode(
|
|
248
|
+
return createNode("code", rest, children)
|
|
249
249
|
}
|
|
250
|
-
Code._documentType =
|
|
250
|
+
Code._documentType = "code" as const
|
|
251
251
|
|
|
252
252
|
/**
|
|
253
253
|
* Horizontal divider line.
|
|
@@ -258,9 +258,9 @@ Code._documentType = 'code' as const
|
|
|
258
258
|
* ```
|
|
259
259
|
*/
|
|
260
260
|
export function Divider(props: DividerProps = {}): DocNode {
|
|
261
|
-
return createNode(
|
|
261
|
+
return createNode("divider", props, [])
|
|
262
262
|
}
|
|
263
|
-
Divider._documentType =
|
|
263
|
+
Divider._documentType = "divider" as const
|
|
264
264
|
|
|
265
265
|
/**
|
|
266
266
|
* Page break — forces content after this point to the next page (PDF/DOCX)
|
|
@@ -272,9 +272,9 @@ Divider._documentType = 'divider' as const
|
|
|
272
272
|
* ```
|
|
273
273
|
*/
|
|
274
274
|
export function PageBreak(): DocNode {
|
|
275
|
-
return createNode(
|
|
275
|
+
return createNode("page-break", {}, [])
|
|
276
276
|
}
|
|
277
|
-
PageBreak._documentType =
|
|
277
|
+
PageBreak._documentType = "page-break" as const
|
|
278
278
|
|
|
279
279
|
/**
|
|
280
280
|
* Vertical spacer.
|
|
@@ -285,9 +285,9 @@ PageBreak._documentType = 'page-break' as const
|
|
|
285
285
|
* ```
|
|
286
286
|
*/
|
|
287
287
|
export function Spacer(props: SpacerProps): DocNode {
|
|
288
|
-
return createNode(
|
|
288
|
+
return createNode("spacer", props, [])
|
|
289
289
|
}
|
|
290
|
-
Spacer._documentType =
|
|
290
|
+
Spacer._documentType = "spacer" as const
|
|
291
291
|
|
|
292
292
|
/**
|
|
293
293
|
* CTA button — renders as a bulletproof button in email, styled link in PDF/DOCX.
|
|
@@ -301,9 +301,9 @@ Spacer._documentType = 'spacer' as const
|
|
|
301
301
|
*/
|
|
302
302
|
export function Button(props: ButtonProps): DocNode {
|
|
303
303
|
const { children, ...rest } = props
|
|
304
|
-
return createNode(
|
|
304
|
+
return createNode("button", rest, children)
|
|
305
305
|
}
|
|
306
|
-
Button._documentType =
|
|
306
|
+
Button._documentType = "button" as const
|
|
307
307
|
|
|
308
308
|
/**
|
|
309
309
|
* Block quote.
|
|
@@ -315,6 +315,6 @@ Button._documentType = 'button' as const
|
|
|
315
315
|
*/
|
|
316
316
|
export function Quote(props: QuoteProps): DocNode {
|
|
317
317
|
const { children, ...rest } = props
|
|
318
|
-
return createNode(
|
|
318
|
+
return createNode("quote", rest, children)
|
|
319
319
|
}
|
|
320
|
-
Quote._documentType =
|
|
320
|
+
Quote._documentType = "quote" as const
|
package/src/render.ts
CHANGED
|
@@ -1,17 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
DocNode,
|
|
3
|
-
DocumentRenderer,
|
|
4
|
-
OutputFormat,
|
|
5
|
-
RenderOptions,
|
|
6
|
-
RenderResult,
|
|
7
|
-
} from './types'
|
|
1
|
+
import type { DocNode, DocumentRenderer, OutputFormat, RenderOptions, RenderResult } from "./types"
|
|
8
2
|
|
|
9
3
|
// ─── Renderer Registry ──────────────────────────────────────────────────────
|
|
10
4
|
|
|
11
|
-
const renderers = new Map<
|
|
12
|
-
string,
|
|
13
|
-
DocumentRenderer | (() => Promise<DocumentRenderer>)
|
|
14
|
-
>()
|
|
5
|
+
const renderers = new Map<string, DocumentRenderer | (() => Promise<DocumentRenderer>)>()
|
|
15
6
|
|
|
16
7
|
/**
|
|
17
8
|
* Register a custom renderer for a format.
|
|
@@ -46,76 +37,44 @@ export function unregisterRenderer(format: string): void {
|
|
|
46
37
|
|
|
47
38
|
// Built-in renderers are registered lazily — only loaded when first used.
|
|
48
39
|
|
|
49
|
-
registerRenderer(
|
|
50
|
-
import('./renderers/html').then((m) => m.htmlRenderer),
|
|
51
|
-
)
|
|
40
|
+
registerRenderer("html", () => import("./renderers/html").then((m) => m.htmlRenderer))
|
|
52
41
|
|
|
53
|
-
registerRenderer(
|
|
54
|
-
import('./renderers/email').then((m) => m.emailRenderer),
|
|
55
|
-
)
|
|
42
|
+
registerRenderer("email", () => import("./renderers/email").then((m) => m.emailRenderer))
|
|
56
43
|
|
|
57
|
-
registerRenderer(
|
|
58
|
-
import('./renderers/markdown').then((m) => m.markdownRenderer),
|
|
59
|
-
)
|
|
44
|
+
registerRenderer("md", () => import("./renderers/markdown").then((m) => m.markdownRenderer))
|
|
60
45
|
|
|
61
|
-
registerRenderer(
|
|
62
|
-
import('./renderers/text').then((m) => m.textRenderer),
|
|
63
|
-
)
|
|
46
|
+
registerRenderer("text", () => import("./renderers/text").then((m) => m.textRenderer))
|
|
64
47
|
|
|
65
|
-
registerRenderer(
|
|
66
|
-
import('./renderers/csv').then((m) => m.csvRenderer),
|
|
67
|
-
)
|
|
48
|
+
registerRenderer("csv", () => import("./renderers/csv").then((m) => m.csvRenderer))
|
|
68
49
|
|
|
69
|
-
registerRenderer(
|
|
70
|
-
import('./renderers/pdf').then((m) => m.pdfRenderer),
|
|
71
|
-
)
|
|
50
|
+
registerRenderer("pdf", () => import("./renderers/pdf").then((m) => m.pdfRenderer))
|
|
72
51
|
|
|
73
|
-
registerRenderer(
|
|
74
|
-
import('./renderers/docx').then((m) => m.docxRenderer),
|
|
75
|
-
)
|
|
52
|
+
registerRenderer("docx", () => import("./renderers/docx").then((m) => m.docxRenderer))
|
|
76
53
|
|
|
77
|
-
registerRenderer(
|
|
78
|
-
import('./renderers/xlsx').then((m) => m.xlsxRenderer),
|
|
79
|
-
)
|
|
54
|
+
registerRenderer("xlsx", () => import("./renderers/xlsx").then((m) => m.xlsxRenderer))
|
|
80
55
|
|
|
81
|
-
registerRenderer(
|
|
82
|
-
import('./renderers/pptx').then((m) => m.pptxRenderer),
|
|
83
|
-
)
|
|
56
|
+
registerRenderer("pptx", () => import("./renderers/pptx").then((m) => m.pptxRenderer))
|
|
84
57
|
|
|
85
|
-
registerRenderer(
|
|
86
|
-
import('./renderers/slack').then((m) => m.slackRenderer),
|
|
87
|
-
)
|
|
58
|
+
registerRenderer("slack", () => import("./renderers/slack").then((m) => m.slackRenderer))
|
|
88
59
|
|
|
89
|
-
registerRenderer(
|
|
90
|
-
import('./renderers/svg').then((m) => m.svgRenderer),
|
|
91
|
-
)
|
|
60
|
+
registerRenderer("svg", () => import("./renderers/svg").then((m) => m.svgRenderer))
|
|
92
61
|
|
|
93
|
-
registerRenderer(
|
|
94
|
-
import('./renderers/teams').then((m) => m.teamsRenderer),
|
|
95
|
-
)
|
|
62
|
+
registerRenderer("teams", () => import("./renderers/teams").then((m) => m.teamsRenderer))
|
|
96
63
|
|
|
97
|
-
registerRenderer(
|
|
98
|
-
import('./renderers/discord').then((m) => m.discordRenderer),
|
|
99
|
-
)
|
|
64
|
+
registerRenderer("discord", () => import("./renderers/discord").then((m) => m.discordRenderer))
|
|
100
65
|
|
|
101
|
-
registerRenderer(
|
|
102
|
-
import('./renderers/telegram').then((m) => m.telegramRenderer),
|
|
103
|
-
)
|
|
66
|
+
registerRenderer("telegram", () => import("./renderers/telegram").then((m) => m.telegramRenderer))
|
|
104
67
|
|
|
105
|
-
registerRenderer(
|
|
106
|
-
import('./renderers/notion').then((m) => m.notionRenderer),
|
|
107
|
-
)
|
|
68
|
+
registerRenderer("notion", () => import("./renderers/notion").then((m) => m.notionRenderer))
|
|
108
69
|
|
|
109
|
-
registerRenderer(
|
|
110
|
-
import(
|
|
70
|
+
registerRenderer("confluence", () =>
|
|
71
|
+
import("./renderers/confluence").then((m) => m.confluenceRenderer),
|
|
111
72
|
)
|
|
112
73
|
|
|
113
|
-
registerRenderer(
|
|
114
|
-
import('./renderers/whatsapp').then((m) => m.whatsappRenderer),
|
|
115
|
-
)
|
|
74
|
+
registerRenderer("whatsapp", () => import("./renderers/whatsapp").then((m) => m.whatsappRenderer))
|
|
116
75
|
|
|
117
|
-
registerRenderer(
|
|
118
|
-
import(
|
|
76
|
+
registerRenderer("google-chat", () =>
|
|
77
|
+
import("./renderers/google-chat").then((m) => m.googleChatRenderer),
|
|
119
78
|
)
|
|
120
79
|
|
|
121
80
|
// ─── Render Function ────────────────────────────────────────────────────────
|
|
@@ -124,11 +83,11 @@ async function resolveRenderer(format: string): Promise<DocumentRenderer> {
|
|
|
124
83
|
const entry = renderers.get(format)
|
|
125
84
|
if (!entry) {
|
|
126
85
|
throw new Error(
|
|
127
|
-
`[@pyreon/document] No renderer registered for format '${format}'. Available: ${[...renderers.keys()].join(
|
|
86
|
+
`[@pyreon/document] No renderer registered for format '${format}'. Available: ${[...renderers.keys()].join(", ")}`,
|
|
128
87
|
)
|
|
129
88
|
}
|
|
130
89
|
|
|
131
|
-
if (typeof entry ===
|
|
90
|
+
if (typeof entry === "function") {
|
|
132
91
|
const renderer = await entry()
|
|
133
92
|
// Cache the resolved renderer so we don't re-import
|
|
134
93
|
renderers.set(format, renderer)
|
|
@@ -165,58 +124,26 @@ export async function render(
|
|
|
165
124
|
export function _resetRenderers(): void {
|
|
166
125
|
renderers.clear()
|
|
167
126
|
// Re-register built-in lazy loaders
|
|
168
|
-
registerRenderer(
|
|
169
|
-
|
|
170
|
-
)
|
|
171
|
-
registerRenderer(
|
|
172
|
-
|
|
173
|
-
)
|
|
174
|
-
registerRenderer(
|
|
175
|
-
|
|
176
|
-
)
|
|
177
|
-
registerRenderer(
|
|
178
|
-
|
|
179
|
-
)
|
|
180
|
-
registerRenderer(
|
|
181
|
-
|
|
182
|
-
)
|
|
183
|
-
registerRenderer(
|
|
184
|
-
import(
|
|
185
|
-
)
|
|
186
|
-
registerRenderer(
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
registerRenderer('xlsx', () =>
|
|
190
|
-
import('./renderers/xlsx').then((m) => m.xlsxRenderer),
|
|
191
|
-
)
|
|
192
|
-
registerRenderer('pptx', () =>
|
|
193
|
-
import('./renderers/pptx').then((m) => m.pptxRenderer),
|
|
194
|
-
)
|
|
195
|
-
registerRenderer('slack', () =>
|
|
196
|
-
import('./renderers/slack').then((m) => m.slackRenderer),
|
|
197
|
-
)
|
|
198
|
-
registerRenderer('svg', () =>
|
|
199
|
-
import('./renderers/svg').then((m) => m.svgRenderer),
|
|
200
|
-
)
|
|
201
|
-
registerRenderer('teams', () =>
|
|
202
|
-
import('./renderers/teams').then((m) => m.teamsRenderer),
|
|
203
|
-
)
|
|
204
|
-
registerRenderer('discord', () =>
|
|
205
|
-
import('./renderers/discord').then((m) => m.discordRenderer),
|
|
206
|
-
)
|
|
207
|
-
registerRenderer('telegram', () =>
|
|
208
|
-
import('./renderers/telegram').then((m) => m.telegramRenderer),
|
|
209
|
-
)
|
|
210
|
-
registerRenderer('notion', () =>
|
|
211
|
-
import('./renderers/notion').then((m) => m.notionRenderer),
|
|
212
|
-
)
|
|
213
|
-
registerRenderer('confluence', () =>
|
|
214
|
-
import('./renderers/confluence').then((m) => m.confluenceRenderer),
|
|
215
|
-
)
|
|
216
|
-
registerRenderer('whatsapp', () =>
|
|
217
|
-
import('./renderers/whatsapp').then((m) => m.whatsappRenderer),
|
|
218
|
-
)
|
|
219
|
-
registerRenderer('google-chat', () =>
|
|
220
|
-
import('./renderers/google-chat').then((m) => m.googleChatRenderer),
|
|
127
|
+
registerRenderer("html", () => import("./renderers/html").then((m) => m.htmlRenderer))
|
|
128
|
+
registerRenderer("email", () => import("./renderers/email").then((m) => m.emailRenderer))
|
|
129
|
+
registerRenderer("md", () => import("./renderers/markdown").then((m) => m.markdownRenderer))
|
|
130
|
+
registerRenderer("text", () => import("./renderers/text").then((m) => m.textRenderer))
|
|
131
|
+
registerRenderer("csv", () => import("./renderers/csv").then((m) => m.csvRenderer))
|
|
132
|
+
registerRenderer("pdf", () => import("./renderers/pdf").then((m) => m.pdfRenderer))
|
|
133
|
+
registerRenderer("docx", () => import("./renderers/docx").then((m) => m.docxRenderer))
|
|
134
|
+
registerRenderer("xlsx", () => import("./renderers/xlsx").then((m) => m.xlsxRenderer))
|
|
135
|
+
registerRenderer("pptx", () => import("./renderers/pptx").then((m) => m.pptxRenderer))
|
|
136
|
+
registerRenderer("slack", () => import("./renderers/slack").then((m) => m.slackRenderer))
|
|
137
|
+
registerRenderer("svg", () => import("./renderers/svg").then((m) => m.svgRenderer))
|
|
138
|
+
registerRenderer("teams", () => import("./renderers/teams").then((m) => m.teamsRenderer))
|
|
139
|
+
registerRenderer("discord", () => import("./renderers/discord").then((m) => m.discordRenderer))
|
|
140
|
+
registerRenderer("telegram", () => import("./renderers/telegram").then((m) => m.telegramRenderer))
|
|
141
|
+
registerRenderer("notion", () => import("./renderers/notion").then((m) => m.notionRenderer))
|
|
142
|
+
registerRenderer("confluence", () =>
|
|
143
|
+
import("./renderers/confluence").then((m) => m.confluenceRenderer),
|
|
144
|
+
)
|
|
145
|
+
registerRenderer("whatsapp", () => import("./renderers/whatsapp").then((m) => m.whatsappRenderer))
|
|
146
|
+
registerRenderer("google-chat", () =>
|
|
147
|
+
import("./renderers/google-chat").then((m) => m.googleChatRenderer),
|
|
221
148
|
)
|
|
222
149
|
}
|