@pyreon/document 0.14.0 → 0.15.0
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 → confluence-Db_NpGvv.js} +2 -2
- package/lib/{csv-COrS4qdy.js → csv-I0OmxyUq.js} +1 -1
- package/lib/{discord-BLUnkEh9.js → discord-CO2LO9iv.js} +2 -2
- package/lib/{docx-D_wt3a7y.js → docx-CwLhLA6_.js} +3 -3
- package/lib/{email-D0bbfWq4.js → email-euU37d-3.js} +2 -2
- package/lib/{google-chat-CkKCBUWC.js → google-chat-CkO1akkX.js} +2 -2
- package/lib/{html-DtsbNARB.js → html-CQAgtR1o.js} +2 -2
- package/lib/index.js +36 -36
- package/lib/{markdown-BYkSLplL.js → markdown-DV0jLhLG.js} +2 -2
- package/lib/{notion-iG2C5bEY.js → notion-BJOgw53C.js} +2 -2
- package/lib/{pdf-NApJCU6I.js → pdf-D5Pitjpc.js} +3 -5
- package/lib/{pptx-DLhvPIMn.js → pptx-CLDls4po.js} +3 -3
- package/lib/{sanitize-O_3j1mNJ.js → sanitize-C3_11gZA.js} +1 -1
- package/lib/{slack-BI3EQwYm.js → slack-BRuNDD9v.js} +2 -2
- package/lib/{svg-uFnPWNCU.js → svg-B4vksv2i.js} +2 -2
- package/lib/{teams-Cwz9lce0.js → teams-CFNa5umk.js} +2 -2
- package/lib/{telegram-gYFqyMXb.js → telegram-C4lbO-VY.js} +2 -2
- package/lib/{text-l1XNXBOC.js → text-C08DaebN.js} +1 -1
- package/lib/{whatsapp-CjSGoOKx.js → whatsapp-D8sjWdfY.js} +2 -2
- package/lib/{xlsx-D8XqTBoR.js → xlsx-CTiQRiu4.js} +2 -2
- package/package.json +7 -6
- package/src/manifest.ts +2 -2
- package/src/tests/document.test.ts +18 -18
- package/src/tests/manifest-snapshot.test.ts +3 -3
- package/lib/chunk-B4VCYm32.js +0 -48
- package/lib/confluence-Bd3ua1Ut.js.map +0 -1
- package/lib/csv-COrS4qdy.js.map +0 -1
- package/lib/discord-BLUnkEh9.js.map +0 -1
- package/lib/dist-dSdlKzJ8.js +0 -20185
- package/lib/dist-dSdlKzJ8.js.map +0 -1
- package/lib/docx-D_wt3a7y.js.map +0 -1
- package/lib/email-D0bbfWq4.js.map +0 -1
- package/lib/exceljs-Bj6LWg5N.js +0 -34391
- package/lib/exceljs-Bj6LWg5N.js.map +0 -1
- package/lib/google-chat-CkKCBUWC.js.map +0 -1
- package/lib/html-DtsbNARB.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/markdown-BYkSLplL.js.map +0 -1
- package/lib/notion-iG2C5bEY.js.map +0 -1
- package/lib/pdf-NApJCU6I.js.map +0 -1
- package/lib/pdfmake-DPyTSQ91.js +0 -55517
- package/lib/pdfmake-DPyTSQ91.js.map +0 -1
- package/lib/pptx-DLhvPIMn.js.map +0 -1
- package/lib/pptxgen.es-CFrPYgTY.js +0 -5699
- package/lib/pptxgen.es-CFrPYgTY.js.map +0 -1
- package/lib/sanitize-O_3j1mNJ.js.map +0 -1
- package/lib/slack-BI3EQwYm.js.map +0 -1
- package/lib/svg-uFnPWNCU.js.map +0 -1
- package/lib/teams-Cwz9lce0.js.map +0 -1
- package/lib/telegram-gYFqyMXb.js.map +0 -1
- package/lib/text-l1XNXBOC.js.map +0 -1
- package/lib/types/index.d.ts.map +0 -1
- package/lib/vfs_fonts-BSrGAfkk.js +0 -19
- package/lib/vfs_fonts-BSrGAfkk.js.map +0 -1
- package/lib/whatsapp-CjSGoOKx.js.map +0 -1
- package/lib/xlsx-D8XqTBoR.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/confluence.ts
|
|
4
4
|
/**
|
|
@@ -191,4 +191,4 @@ const confluenceRenderer = { async render(node, _options) {
|
|
|
191
191
|
|
|
192
192
|
//#endregion
|
|
193
193
|
export { confluenceRenderer };
|
|
194
|
-
//# sourceMappingURL=confluence-
|
|
194
|
+
//# sourceMappingURL=confluence-Db_NpGvv.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/discord.ts
|
|
4
4
|
/**
|
|
@@ -133,4 +133,4 @@ const discordRenderer = { async render(node, _options) {
|
|
|
133
133
|
|
|
134
134
|
//#endregion
|
|
135
135
|
export { discordRenderer };
|
|
136
|
-
//# sourceMappingURL=discord-
|
|
136
|
+
//# sourceMappingURL=discord-CO2LO9iv.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as sanitizeXmlColor, n as sanitizeHref } from "./sanitize-
|
|
1
|
+
import { a as sanitizeXmlColor, n as sanitizeHref } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/docx.ts
|
|
4
4
|
/**
|
|
@@ -292,7 +292,7 @@ function renderButtonOrQuote(ctx, n) {
|
|
|
292
292
|
const docxRenderer = { async render(node, _options) {
|
|
293
293
|
let docx;
|
|
294
294
|
try {
|
|
295
|
-
docx = await import("
|
|
295
|
+
docx = await import("docx");
|
|
296
296
|
} catch {
|
|
297
297
|
throw new Error("[@pyreon/document] DOCX renderer requires \"docx\" package. Install it: bun add docx");
|
|
298
298
|
}
|
|
@@ -461,4 +461,4 @@ const docxRenderer = { async render(node, _options) {
|
|
|
461
461
|
|
|
462
462
|
//#endregion
|
|
463
463
|
export { docxRenderer };
|
|
464
|
-
//# sourceMappingURL=docx-
|
|
464
|
+
//# sourceMappingURL=docx-CwLhLA6_.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/email.ts
|
|
4
4
|
/**
|
|
@@ -130,4 +130,4 @@ const emailRenderer = { async render(node, _options) {
|
|
|
130
130
|
|
|
131
131
|
//#endregion
|
|
132
132
|
export { emailRenderer };
|
|
133
|
-
//# sourceMappingURL=email-
|
|
133
|
+
//# sourceMappingURL=email-euU37d-3.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/google-chat.ts
|
|
4
4
|
/**
|
|
@@ -124,4 +124,4 @@ const googleChatRenderer = { async render(node, _options) {
|
|
|
124
124
|
|
|
125
125
|
//#endregion
|
|
126
126
|
export { googleChatRenderer };
|
|
127
|
-
//# sourceMappingURL=google-chat-
|
|
127
|
+
//# sourceMappingURL=google-chat-CkO1akkX.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as sanitizeStyle, n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-
|
|
1
|
+
import { i as sanitizeStyle, n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/html.ts
|
|
4
4
|
function escapeHtml(str) {
|
|
@@ -150,4 +150,4 @@ const htmlRenderer = { async render(node, options) {
|
|
|
150
150
|
|
|
151
151
|
//#endregion
|
|
152
152
|
export { htmlRenderer };
|
|
153
|
-
//# sourceMappingURL=html-
|
|
153
|
+
//# sourceMappingURL=html-CQAgtR1o.js.map
|
package/lib/index.js
CHANGED
|
@@ -24,24 +24,24 @@ function registerRenderer(format, renderer) {
|
|
|
24
24
|
function unregisterRenderer(format) {
|
|
25
25
|
renderers.delete(format);
|
|
26
26
|
}
|
|
27
|
-
registerRenderer("html", () => import("./html-
|
|
28
|
-
registerRenderer("email", () => import("./email-
|
|
29
|
-
registerRenderer("md", () => import("./markdown-
|
|
30
|
-
registerRenderer("text", () => import("./text-
|
|
31
|
-
registerRenderer("csv", () => import("./csv-
|
|
32
|
-
registerRenderer("pdf", () => import("./pdf-
|
|
33
|
-
registerRenderer("docx", () => import("./docx-
|
|
34
|
-
registerRenderer("xlsx", () => import("./xlsx-
|
|
35
|
-
registerRenderer("pptx", () => import("./pptx-
|
|
36
|
-
registerRenderer("slack", () => import("./slack-
|
|
37
|
-
registerRenderer("svg", () => import("./svg-
|
|
38
|
-
registerRenderer("teams", () => import("./teams-
|
|
39
|
-
registerRenderer("discord", () => import("./discord-
|
|
40
|
-
registerRenderer("telegram", () => import("./telegram-
|
|
41
|
-
registerRenderer("notion", () => import("./notion-
|
|
42
|
-
registerRenderer("confluence", () => import("./confluence-
|
|
43
|
-
registerRenderer("whatsapp", () => import("./whatsapp-
|
|
44
|
-
registerRenderer("google-chat", () => import("./google-chat-
|
|
27
|
+
registerRenderer("html", () => import("./html-CQAgtR1o.js").then((m) => m.htmlRenderer));
|
|
28
|
+
registerRenderer("email", () => import("./email-euU37d-3.js").then((m) => m.emailRenderer));
|
|
29
|
+
registerRenderer("md", () => import("./markdown-DV0jLhLG.js").then((m) => m.markdownRenderer));
|
|
30
|
+
registerRenderer("text", () => import("./text-C08DaebN.js").then((m) => m.textRenderer));
|
|
31
|
+
registerRenderer("csv", () => import("./csv-I0OmxyUq.js").then((m) => m.csvRenderer));
|
|
32
|
+
registerRenderer("pdf", () => import("./pdf-D5Pitjpc.js").then((m) => m.pdfRenderer));
|
|
33
|
+
registerRenderer("docx", () => import("./docx-CwLhLA6_.js").then((m) => m.docxRenderer));
|
|
34
|
+
registerRenderer("xlsx", () => import("./xlsx-CTiQRiu4.js").then((m) => m.xlsxRenderer));
|
|
35
|
+
registerRenderer("pptx", () => import("./pptx-CLDls4po.js").then((m) => m.pptxRenderer));
|
|
36
|
+
registerRenderer("slack", () => import("./slack-BRuNDD9v.js").then((m) => m.slackRenderer));
|
|
37
|
+
registerRenderer("svg", () => import("./svg-B4vksv2i.js").then((m) => m.svgRenderer));
|
|
38
|
+
registerRenderer("teams", () => import("./teams-CFNa5umk.js").then((m) => m.teamsRenderer));
|
|
39
|
+
registerRenderer("discord", () => import("./discord-CO2LO9iv.js").then((m) => m.discordRenderer));
|
|
40
|
+
registerRenderer("telegram", () => import("./telegram-C4lbO-VY.js").then((m) => m.telegramRenderer));
|
|
41
|
+
registerRenderer("notion", () => import("./notion-BJOgw53C.js").then((m) => m.notionRenderer));
|
|
42
|
+
registerRenderer("confluence", () => import("./confluence-Db_NpGvv.js").then((m) => m.confluenceRenderer));
|
|
43
|
+
registerRenderer("whatsapp", () => import("./whatsapp-D8sjWdfY.js").then((m) => m.whatsappRenderer));
|
|
44
|
+
registerRenderer("google-chat", () => import("./google-chat-CkO1akkX.js").then((m) => m.googleChatRenderer));
|
|
45
45
|
async function resolveRenderer(format) {
|
|
46
46
|
const entry = renderers.get(format);
|
|
47
47
|
if (!entry) throw new Error(`[@pyreon/document] No renderer registered for format '${format}'. Available: ${[...renderers.keys()].join(", ")}`);
|
|
@@ -72,24 +72,24 @@ async function render(node, format, options) {
|
|
|
72
72
|
/** @internal For testing — reset renderer registry to defaults. */
|
|
73
73
|
function _resetRenderers() {
|
|
74
74
|
renderers.clear();
|
|
75
|
-
registerRenderer("html", () => import("./html-
|
|
76
|
-
registerRenderer("email", () => import("./email-
|
|
77
|
-
registerRenderer("md", () => import("./markdown-
|
|
78
|
-
registerRenderer("text", () => import("./text-
|
|
79
|
-
registerRenderer("csv", () => import("./csv-
|
|
80
|
-
registerRenderer("pdf", () => import("./pdf-
|
|
81
|
-
registerRenderer("docx", () => import("./docx-
|
|
82
|
-
registerRenderer("xlsx", () => import("./xlsx-
|
|
83
|
-
registerRenderer("pptx", () => import("./pptx-
|
|
84
|
-
registerRenderer("slack", () => import("./slack-
|
|
85
|
-
registerRenderer("svg", () => import("./svg-
|
|
86
|
-
registerRenderer("teams", () => import("./teams-
|
|
87
|
-
registerRenderer("discord", () => import("./discord-
|
|
88
|
-
registerRenderer("telegram", () => import("./telegram-
|
|
89
|
-
registerRenderer("notion", () => import("./notion-
|
|
90
|
-
registerRenderer("confluence", () => import("./confluence-
|
|
91
|
-
registerRenderer("whatsapp", () => import("./whatsapp-
|
|
92
|
-
registerRenderer("google-chat", () => import("./google-chat-
|
|
75
|
+
registerRenderer("html", () => import("./html-CQAgtR1o.js").then((m) => m.htmlRenderer));
|
|
76
|
+
registerRenderer("email", () => import("./email-euU37d-3.js").then((m) => m.emailRenderer));
|
|
77
|
+
registerRenderer("md", () => import("./markdown-DV0jLhLG.js").then((m) => m.markdownRenderer));
|
|
78
|
+
registerRenderer("text", () => import("./text-C08DaebN.js").then((m) => m.textRenderer));
|
|
79
|
+
registerRenderer("csv", () => import("./csv-I0OmxyUq.js").then((m) => m.csvRenderer));
|
|
80
|
+
registerRenderer("pdf", () => import("./pdf-D5Pitjpc.js").then((m) => m.pdfRenderer));
|
|
81
|
+
registerRenderer("docx", () => import("./docx-CwLhLA6_.js").then((m) => m.docxRenderer));
|
|
82
|
+
registerRenderer("xlsx", () => import("./xlsx-CTiQRiu4.js").then((m) => m.xlsxRenderer));
|
|
83
|
+
registerRenderer("pptx", () => import("./pptx-CLDls4po.js").then((m) => m.pptxRenderer));
|
|
84
|
+
registerRenderer("slack", () => import("./slack-BRuNDD9v.js").then((m) => m.slackRenderer));
|
|
85
|
+
registerRenderer("svg", () => import("./svg-B4vksv2i.js").then((m) => m.svgRenderer));
|
|
86
|
+
registerRenderer("teams", () => import("./teams-CFNa5umk.js").then((m) => m.teamsRenderer));
|
|
87
|
+
registerRenderer("discord", () => import("./discord-CO2LO9iv.js").then((m) => m.discordRenderer));
|
|
88
|
+
registerRenderer("telegram", () => import("./telegram-C4lbO-VY.js").then((m) => m.telegramRenderer));
|
|
89
|
+
registerRenderer("notion", () => import("./notion-BJOgw53C.js").then((m) => m.notionRenderer));
|
|
90
|
+
registerRenderer("confluence", () => import("./confluence-Db_NpGvv.js").then((m) => m.confluenceRenderer));
|
|
91
|
+
registerRenderer("whatsapp", () => import("./whatsapp-D8sjWdfY.js").then((m) => m.whatsappRenderer));
|
|
92
|
+
registerRenderer("google-chat", () => import("./google-chat-CkO1akkX.js").then((m) => m.googleChatRenderer));
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/markdown.ts
|
|
4
4
|
function resolveColumn(col) {
|
|
@@ -95,4 +95,4 @@ const markdownRenderer = { async render(node, _options) {
|
|
|
95
95
|
|
|
96
96
|
//#endregion
|
|
97
97
|
export { markdownRenderer };
|
|
98
|
-
//# sourceMappingURL=markdown-
|
|
98
|
+
//# sourceMappingURL=markdown-DV0jLhLG.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/notion.ts
|
|
4
4
|
/**
|
|
@@ -186,4 +186,4 @@ const notionRenderer = { async render(node, _options) {
|
|
|
186
186
|
|
|
187
187
|
//#endregion
|
|
188
188
|
export { notionRenderer };
|
|
189
|
-
//# sourceMappingURL=notion-
|
|
189
|
+
//# sourceMappingURL=notion-BJOgw53C.js.map
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { o as __toESM } from "./chunk-B4VCYm32.js";
|
|
2
|
-
|
|
3
1
|
//#region src/renderers/pdf.ts
|
|
4
2
|
/**
|
|
5
3
|
* PDF renderer — lazy-loads pdfmake on first use.
|
|
@@ -372,8 +370,8 @@ const pdfRenderer = { async render(node, _options) {
|
|
|
372
370
|
let pdfMakeModule;
|
|
373
371
|
let pdfFontsModule;
|
|
374
372
|
try {
|
|
375
|
-
pdfMakeModule = await import("
|
|
376
|
-
pdfFontsModule = await import("
|
|
373
|
+
pdfMakeModule = await import("pdfmake/build/pdfmake");
|
|
374
|
+
pdfFontsModule = await import("pdfmake/build/vfs_fonts");
|
|
377
375
|
} catch {
|
|
378
376
|
throw new Error("[@pyreon/document] PDF renderer requires \"pdfmake\" package. Install it: bun add pdfmake");
|
|
379
377
|
}
|
|
@@ -422,4 +420,4 @@ const pdfRenderer = { async render(node, _options) {
|
|
|
422
420
|
|
|
423
421
|
//#endregion
|
|
424
422
|
export { pdfRenderer };
|
|
425
|
-
//# sourceMappingURL=pdf-
|
|
423
|
+
//# sourceMappingURL=pdf-D5Pitjpc.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as sanitizeXmlColor, n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-
|
|
1
|
+
import { a as sanitizeXmlColor, n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/pptx.ts
|
|
4
4
|
/**
|
|
@@ -231,7 +231,7 @@ function processSlide(pageNode, pptx) {
|
|
|
231
231
|
const pptxRenderer = { async render(node, _options) {
|
|
232
232
|
let PptxGenJS;
|
|
233
233
|
try {
|
|
234
|
-
PptxGenJS = await import("
|
|
234
|
+
PptxGenJS = await import("pptxgenjs");
|
|
235
235
|
} catch {
|
|
236
236
|
throw new Error("[@pyreon/document] PPTX renderer requires \"pptxgenjs\" package. Install it: bun add pptxgenjs");
|
|
237
237
|
}
|
|
@@ -256,4 +256,4 @@ const pptxRenderer = { async render(node, _options) {
|
|
|
256
256
|
|
|
257
257
|
//#endregion
|
|
258
258
|
export { pptxRenderer };
|
|
259
|
-
//# sourceMappingURL=pptx-
|
|
259
|
+
//# sourceMappingURL=pptx-CLDls4po.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/slack.ts
|
|
4
4
|
/**
|
|
@@ -138,4 +138,4 @@ const slackRenderer = { async render(node, _options) {
|
|
|
138
138
|
|
|
139
139
|
//#endregion
|
|
140
140
|
export { slackRenderer };
|
|
141
|
-
//# sourceMappingURL=slack-
|
|
141
|
+
//# sourceMappingURL=slack-BRuNDD9v.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/svg.ts
|
|
4
4
|
/**
|
|
@@ -185,4 +185,4 @@ ${content}
|
|
|
185
185
|
|
|
186
186
|
//#endregion
|
|
187
187
|
export { svgRenderer };
|
|
188
|
-
//# sourceMappingURL=svg-
|
|
188
|
+
//# sourceMappingURL=svg-B4vksv2i.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/teams.ts
|
|
4
4
|
/**
|
|
@@ -175,4 +175,4 @@ const teamsRenderer = { async render(node, _options) {
|
|
|
175
175
|
|
|
176
176
|
//#endregion
|
|
177
177
|
export { teamsRenderer };
|
|
178
|
-
//# sourceMappingURL=teams-
|
|
178
|
+
//# sourceMappingURL=teams-CFNa5umk.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/telegram.ts
|
|
4
4
|
/**
|
|
@@ -76,4 +76,4 @@ const telegramRenderer = { async render(node, _options) {
|
|
|
76
76
|
|
|
77
77
|
//#endregion
|
|
78
78
|
export { telegramRenderer };
|
|
79
|
-
//# sourceMappingURL=telegram-
|
|
79
|
+
//# sourceMappingURL=telegram-C4lbO-VY.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as sanitizeHref } from "./sanitize-
|
|
1
|
+
import { n as sanitizeHref } from "./sanitize-C3_11gZA.js";
|
|
2
2
|
|
|
3
3
|
//#region src/renderers/whatsapp.ts
|
|
4
4
|
/**
|
|
@@ -63,4 +63,4 @@ const whatsappRenderer = { async render(node, _options) {
|
|
|
63
63
|
|
|
64
64
|
//#endregion
|
|
65
65
|
export { whatsappRenderer };
|
|
66
|
-
//# sourceMappingURL=whatsapp-
|
|
66
|
+
//# sourceMappingURL=whatsapp-D8sjWdfY.js.map
|
|
@@ -171,7 +171,7 @@ function autoFitColumns(ws) {
|
|
|
171
171
|
const xlsxRenderer = { async render(node, _options) {
|
|
172
172
|
let ExcelJS;
|
|
173
173
|
try {
|
|
174
|
-
ExcelJS = await import("
|
|
174
|
+
ExcelJS = await import("exceljs");
|
|
175
175
|
} catch {
|
|
176
176
|
throw new Error("[@pyreon/document] XLSX renderer requires \"exceljs\" package. Install it: bun add exceljs");
|
|
177
177
|
}
|
|
@@ -202,4 +202,4 @@ const xlsxRenderer = { async render(node, _options) {
|
|
|
202
202
|
|
|
203
203
|
//#endregion
|
|
204
204
|
export { xlsxRenderer };
|
|
205
|
-
//# sourceMappingURL=xlsx-
|
|
205
|
+
//# sourceMappingURL=xlsx-CTiQRiu4.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pyreon/document",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Universal document rendering for Pyreon — one template, every output format (HTML, PDF, DOCX, email, XLSX, Markdown, and more)",
|
|
5
5
|
"homepage": "https://github.com/pyreon/pyreon/tree/main/packages/document#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
16
|
"lib",
|
|
17
|
+
"!lib/**/*.map",
|
|
17
18
|
"src",
|
|
18
19
|
"README.md",
|
|
19
20
|
"LICENSE"
|
|
@@ -42,19 +43,19 @@
|
|
|
42
43
|
},
|
|
43
44
|
"devDependencies": {
|
|
44
45
|
"@happy-dom/global-registrator": "^20.8.9",
|
|
45
|
-
"@pyreon/core": "^0.
|
|
46
|
+
"@pyreon/core": "^0.15.0",
|
|
46
47
|
"@pyreon/manifest": "0.13.1",
|
|
47
|
-
"@pyreon/reactivity": "^0.
|
|
48
|
+
"@pyreon/reactivity": "^0.15.0",
|
|
48
49
|
"@types/pdfmake": "^0.3.2",
|
|
49
|
-
"@vitus-labs/tools-lint": "^
|
|
50
|
+
"@vitus-labs/tools-lint": "^2.3.0",
|
|
50
51
|
"docx": "^9.6.0",
|
|
51
52
|
"exceljs": "^4.4.0",
|
|
52
53
|
"pdfmake": "^0.3.7",
|
|
53
54
|
"pptxgenjs": "^4.0.1"
|
|
54
55
|
},
|
|
55
56
|
"peerDependencies": {
|
|
56
|
-
"@pyreon/core": "^0.
|
|
57
|
-
"@pyreon/reactivity": "^0.
|
|
57
|
+
"@pyreon/core": "^0.15.0",
|
|
58
|
+
"@pyreon/reactivity": "^0.15.0"
|
|
58
59
|
},
|
|
59
60
|
"optionalDependencies": {
|
|
60
61
|
"docx": "^9.6.0",
|
package/src/manifest.ts
CHANGED
|
@@ -6,7 +6,7 @@ export default defineManifest({
|
|
|
6
6
|
tagline:
|
|
7
7
|
'Universal document rendering — 18 primitives, 14+ output formats',
|
|
8
8
|
description:
|
|
9
|
-
'Universal document rendering for Pyreon. One template, every output format: HTML, PDF, DOCX, XLSX, PPTX, email, Markdown, plain text, CSV, SVG, Slack, Teams, Discord, Telegram, Notion, Confluence, WhatsApp, Google Chat. Heavy renderers (PDF ~
|
|
9
|
+
'Universal document rendering for Pyreon. One template, every output format: HTML, PDF, DOCX, XLSX, PPTX, email, Markdown, plain text, CSV, SVG, Slack, Teams, Discord, Telegram, Notion, Confluence, WhatsApp, Google Chat. Heavy renderers are lazy-loaded — chunks (PDF ~3MB pdfmake + fonts, DOCX ~700KB, XLSX ~1.1MB, PPTX ~400KB) only load when invoked. The vendored architecture means one npm install covers every format; apps that never render to a heavy format never pay its chunk cost. Supports both JSX primitives and a fluent builder API.',
|
|
10
10
|
category: 'universal',
|
|
11
11
|
longExample: `import { Document, Page, Heading, Text, Table, Image, List, Code, Divider, render, createDocument, download } from '@pyreon/document'
|
|
12
12
|
|
|
@@ -133,7 +133,7 @@ download(pdf, 'report.pdf')`,
|
|
|
133
133
|
},
|
|
134
134
|
],
|
|
135
135
|
gotchas: [
|
|
136
|
-
'Heavy format renderers are lazy-loaded: PDF (~
|
|
136
|
+
'Heavy format renderers are lazy-loaded: PDF (~3MB via pdfmake + bundled fonts), DOCX (~700KB via docx), XLSX (~1.1MB via exceljs), PPTX (~400KB via pptxgenjs). First render of each format triggers the dynamic import; subsequent renders are instant. The vendored architecture means apps download all renderer chunks during npm install (14MB total `lib/`), but consumer-side bundlers tree-shake to only ship the renderers an app actually invokes.',
|
|
137
137
|
{
|
|
138
138
|
label: 'Format return types',
|
|
139
139
|
note: 'Binary formats (pdf, docx, xlsx, pptx) return Uint8Array. Text formats (html, email, md, text, csv, slack, teams, discord, telegram, notion, confluence, whatsapp, gchat, svg) return string.',
|
|
@@ -1420,7 +1420,7 @@ describe('DOCX renderer', () => {
|
|
|
1420
1420
|
// DOCX files are ZIP archives — first two bytes are PK (0x50, 0x4B)
|
|
1421
1421
|
expect((result as Uint8Array)[0]).toBe(0x50)
|
|
1422
1422
|
expect((result as Uint8Array)[1]).toBe(0x4b)
|
|
1423
|
-
},
|
|
1423
|
+
}, 30000)
|
|
1424
1424
|
|
|
1425
1425
|
it('embeds base64 images via ImageRun', async () => {
|
|
1426
1426
|
// 1x1 red pixel PNG as base64
|
|
@@ -1436,7 +1436,7 @@ describe('DOCX renderer', () => {
|
|
|
1436
1436
|
const result = await render(doc, 'docx')
|
|
1437
1437
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1438
1438
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1439
|
-
},
|
|
1439
|
+
}, 30000)
|
|
1440
1440
|
|
|
1441
1441
|
it('renders external URL images as placeholders', async () => {
|
|
1442
1442
|
const doc = Document({
|
|
@@ -1450,7 +1450,7 @@ describe('DOCX renderer', () => {
|
|
|
1450
1450
|
const result = await render(doc, 'docx')
|
|
1451
1451
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1452
1452
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1453
|
-
},
|
|
1453
|
+
}, 30000)
|
|
1454
1454
|
|
|
1455
1455
|
it('renders page with header and footer', async () => {
|
|
1456
1456
|
const doc = Document({
|
|
@@ -1464,7 +1464,7 @@ describe('DOCX renderer', () => {
|
|
|
1464
1464
|
const result = await render(doc, 'docx')
|
|
1465
1465
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1466
1466
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1467
|
-
},
|
|
1467
|
+
}, 30000)
|
|
1468
1468
|
|
|
1469
1469
|
it('renders table with bordered option and column widths', async () => {
|
|
1470
1470
|
const doc = Document({
|
|
@@ -1481,7 +1481,7 @@ describe('DOCX renderer', () => {
|
|
|
1481
1481
|
const result = await render(doc, 'docx')
|
|
1482
1482
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1483
1483
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1484
|
-
},
|
|
1484
|
+
}, 30000)
|
|
1485
1485
|
|
|
1486
1486
|
it('renders nested lists', async () => {
|
|
1487
1487
|
const doc = Document({
|
|
@@ -1502,7 +1502,7 @@ describe('DOCX renderer', () => {
|
|
|
1502
1502
|
const result = await render(doc, 'docx')
|
|
1503
1503
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1504
1504
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1505
|
-
},
|
|
1505
|
+
}, 30000)
|
|
1506
1506
|
})
|
|
1507
1507
|
|
|
1508
1508
|
// ─── XLSX Renderer (integration) ────────────────────────────────────────────
|
|
@@ -1534,7 +1534,7 @@ describe('XLSX renderer', () => {
|
|
|
1534
1534
|
// XLSX files are ZIP archives — first two bytes are PK (0x50, 0x4B)
|
|
1535
1535
|
expect((result as Uint8Array)[0]).toBe(0x50)
|
|
1536
1536
|
expect((result as Uint8Array)[1]).toBe(0x4b)
|
|
1537
|
-
},
|
|
1537
|
+
}, 30000)
|
|
1538
1538
|
|
|
1539
1539
|
it('parses currency values as numbers', async () => {
|
|
1540
1540
|
const doc = Document({
|
|
@@ -1547,7 +1547,7 @@ describe('XLSX renderer', () => {
|
|
|
1547
1547
|
const result = await render(doc, 'xlsx')
|
|
1548
1548
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1549
1549
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1550
|
-
},
|
|
1550
|
+
}, 30000)
|
|
1551
1551
|
|
|
1552
1552
|
it('parses percentage values', async () => {
|
|
1553
1553
|
const doc = Document({
|
|
@@ -1560,7 +1560,7 @@ describe('XLSX renderer', () => {
|
|
|
1560
1560
|
const result = await render(doc, 'xlsx')
|
|
1561
1561
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1562
1562
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1563
|
-
},
|
|
1563
|
+
}, 30000)
|
|
1564
1564
|
|
|
1565
1565
|
it('renders multiple tables on the same sheet with spacing', async () => {
|
|
1566
1566
|
const doc = Document({
|
|
@@ -1585,7 +1585,7 @@ describe('XLSX renderer', () => {
|
|
|
1585
1585
|
const result = await render(doc, 'xlsx')
|
|
1586
1586
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1587
1587
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1588
|
-
},
|
|
1588
|
+
}, 30000)
|
|
1589
1589
|
|
|
1590
1590
|
it('renders bordered tables', async () => {
|
|
1591
1591
|
const doc = Document({
|
|
@@ -1599,7 +1599,7 @@ describe('XLSX renderer', () => {
|
|
|
1599
1599
|
const result = await render(doc, 'xlsx')
|
|
1600
1600
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1601
1601
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1602
|
-
},
|
|
1602
|
+
}, 30000)
|
|
1603
1603
|
|
|
1604
1604
|
it('renders empty document with default sheet', async () => {
|
|
1605
1605
|
const doc = Document({ children: Text({ children: 'no tables' }) })
|
|
@@ -1607,7 +1607,7 @@ describe('XLSX renderer', () => {
|
|
|
1607
1607
|
const result = await render(doc, 'xlsx')
|
|
1608
1608
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1609
1609
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1610
|
-
},
|
|
1610
|
+
}, 30000)
|
|
1611
1611
|
})
|
|
1612
1612
|
|
|
1613
1613
|
// ─── PDF Renderer (integration) ─────────────────────────────────────────────
|
|
@@ -1653,7 +1653,7 @@ describe('PDF renderer', () => {
|
|
|
1653
1653
|
// PDF files start with %PDF
|
|
1654
1654
|
const header = String.fromCharCode(...(result as Uint8Array).slice(0, 5))
|
|
1655
1655
|
expect(header).toBe('%PDF-')
|
|
1656
|
-
},
|
|
1656
|
+
}, 30000)
|
|
1657
1657
|
|
|
1658
1658
|
it('renders images with HTTP URLs as placeholder text', async () => {
|
|
1659
1659
|
const doc = Document({
|
|
@@ -1669,7 +1669,7 @@ describe('PDF renderer', () => {
|
|
|
1669
1669
|
const result = await render(doc, 'pdf')
|
|
1670
1670
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1671
1671
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1672
|
-
},
|
|
1672
|
+
}, 30000)
|
|
1673
1673
|
|
|
1674
1674
|
it('renders page with header and footer', async () => {
|
|
1675
1675
|
const doc = Document({
|
|
@@ -1684,7 +1684,7 @@ describe('PDF renderer', () => {
|
|
|
1684
1684
|
const result = await render(doc, 'pdf')
|
|
1685
1685
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1686
1686
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1687
|
-
},
|
|
1687
|
+
}, 30000)
|
|
1688
1688
|
})
|
|
1689
1689
|
|
|
1690
1690
|
// ─── PPTX Renderer (integration) ────────────────────────────────────────────
|
|
@@ -1727,7 +1727,7 @@ describe('PPTX renderer', () => {
|
|
|
1727
1727
|
// PPTX files are ZIP archives — first two bytes are PK (0x50, 0x4B)
|
|
1728
1728
|
expect((result as Uint8Array)[0]).toBe(0x50)
|
|
1729
1729
|
expect((result as Uint8Array)[1]).toBe(0x4b)
|
|
1730
|
-
},
|
|
1730
|
+
}, 30000)
|
|
1731
1731
|
|
|
1732
1732
|
it('renders a document without explicit pages as a single slide', async () => {
|
|
1733
1733
|
const doc = Document({
|
|
@@ -1741,7 +1741,7 @@ describe('PPTX renderer', () => {
|
|
|
1741
1741
|
const result = await render(doc, 'pptx')
|
|
1742
1742
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1743
1743
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1744
|
-
},
|
|
1744
|
+
}, 30000)
|
|
1745
1745
|
|
|
1746
1746
|
it('renders all node types without errors', async () => {
|
|
1747
1747
|
// 1x1 red pixel PNG as base64
|
|
@@ -1769,7 +1769,7 @@ describe('PPTX renderer', () => {
|
|
|
1769
1769
|
const result = await render(doc, 'pptx')
|
|
1770
1770
|
expect(result).toBeInstanceOf(Uint8Array)
|
|
1771
1771
|
expect((result as Uint8Array).length).toBeGreaterThan(0)
|
|
1772
|
-
},
|
|
1772
|
+
}, 30000)
|
|
1773
1773
|
})
|
|
1774
1774
|
|
|
1775
1775
|
// ─── Slack Renderer ─────────────────────────────────────────────────────────
|
|
@@ -7,14 +7,14 @@ import manifest from '../manifest'
|
|
|
7
7
|
|
|
8
8
|
describe('gen-docs — document snapshot', () => {
|
|
9
9
|
it('renders to llms.txt bullet', () => {
|
|
10
|
-
expect(renderLlmsTxtLine(manifest)).toMatchInlineSnapshot(`"- @pyreon/document — Universal document rendering — 18 primitives, 14+ output formats. Heavy format renderers are lazy-loaded: PDF (~
|
|
10
|
+
expect(renderLlmsTxtLine(manifest)).toMatchInlineSnapshot(`"- @pyreon/document — Universal document rendering — 18 primitives, 14+ output formats. Heavy format renderers are lazy-loaded: PDF (~3MB via pdfmake + bundled fonts), DOCX (~700KB via docx), XLSX (~1.1MB via exceljs), PPTX (~400KB via pptxgenjs). First render of each format triggers the dynamic import; subsequent renders are instant. The vendored architecture means apps download all renderer chunks during npm install (14MB total \`lib/\`), but consumer-side bundlers tree-shake to only ship the renderers an app actually invokes."`)
|
|
11
11
|
})
|
|
12
12
|
|
|
13
13
|
it('renders to llms-full.txt section', () => {
|
|
14
14
|
expect(renderLlmsFullSection(manifest)).toMatchInlineSnapshot(`
|
|
15
15
|
"## @pyreon/document — Universal Document Rendering
|
|
16
16
|
|
|
17
|
-
Universal document rendering for Pyreon. One template, every output format: HTML, PDF, DOCX, XLSX, PPTX, email, Markdown, plain text, CSV, SVG, Slack, Teams, Discord, Telegram, Notion, Confluence, WhatsApp, Google Chat. Heavy renderers (PDF ~
|
|
17
|
+
Universal document rendering for Pyreon. One template, every output format: HTML, PDF, DOCX, XLSX, PPTX, email, Markdown, plain text, CSV, SVG, Slack, Teams, Discord, Telegram, Notion, Confluence, WhatsApp, Google Chat. Heavy renderers are lazy-loaded — chunks (PDF ~3MB pdfmake + fonts, DOCX ~700KB, XLSX ~1.1MB, PPTX ~400KB) only load when invoked. The vendored architecture means one npm install covers every format; apps that never render to a heavy format never pay its chunk cost. Supports both JSX primitives and a fluent builder API.
|
|
18
18
|
|
|
19
19
|
\`\`\`typescript
|
|
20
20
|
import { Document, Page, Heading, Text, Table, Image, List, Code, Divider, render, createDocument, download } from '@pyreon/document'
|
|
@@ -68,7 +68,7 @@ describe('gen-docs — document snapshot', () => {
|
|
|
68
68
|
await doc.toNotion() // Notion blocks
|
|
69
69
|
\`\`\`
|
|
70
70
|
|
|
71
|
-
> **Note**: Heavy format renderers are lazy-loaded: PDF (~
|
|
71
|
+
> **Note**: Heavy format renderers are lazy-loaded: PDF (~3MB via pdfmake + bundled fonts), DOCX (~700KB via docx), XLSX (~1.1MB via exceljs), PPTX (~400KB via pptxgenjs). First render of each format triggers the dynamic import; subsequent renders are instant. The vendored architecture means apps download all renderer chunks during npm install (14MB total \`lib/\`), but consumer-side bundlers tree-shake to only ship the renderers an app actually invokes.
|
|
72
72
|
>
|
|
73
73
|
> **Format return types**: Binary formats (pdf, docx, xlsx, pptx) return Uint8Array. Text formats (html, email, md, text, csv, slack, teams, discord, telegram, notion, confluence, whatsapp, gchat, svg) return string.
|
|
74
74
|
>
|