@yaebal/rich 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +109 -35
  2. package/lib/blocks.d.ts +93 -32
  3. package/lib/blocks.d.ts.map +1 -1
  4. package/lib/blocks.js +227 -71
  5. package/lib/blocks.js.map +1 -1
  6. package/lib/blocks.test.d.ts +2 -0
  7. package/lib/blocks.test.d.ts.map +1 -0
  8. package/lib/blocks.test.js +142 -0
  9. package/lib/blocks.test.js.map +1 -0
  10. package/lib/document.d.ts +28 -0
  11. package/lib/document.d.ts.map +1 -0
  12. package/lib/document.js +46 -0
  13. package/lib/document.js.map +1 -0
  14. package/lib/draft.d.ts +46 -9
  15. package/lib/draft.d.ts.map +1 -1
  16. package/lib/draft.js +115 -19
  17. package/lib/draft.js.map +1 -1
  18. package/lib/draft.test.d.ts +2 -0
  19. package/lib/draft.test.d.ts.map +1 -0
  20. package/lib/draft.test.js +122 -0
  21. package/lib/draft.test.js.map +1 -0
  22. package/lib/escape.d.ts +8 -0
  23. package/lib/escape.d.ts.map +1 -1
  24. package/lib/escape.js +17 -0
  25. package/lib/escape.js.map +1 -1
  26. package/lib/escape.test.d.ts +2 -0
  27. package/lib/escape.test.d.ts.map +1 -0
  28. package/lib/escape.test.js +28 -0
  29. package/lib/escape.test.js.map +1 -0
  30. package/lib/guards.test.d.ts +2 -0
  31. package/lib/guards.test.d.ts.map +1 -0
  32. package/lib/guards.test.js +85 -0
  33. package/lib/guards.test.js.map +1 -0
  34. package/lib/index.d.ts +18 -9
  35. package/lib/index.d.ts.map +1 -1
  36. package/lib/index.js +17 -8
  37. package/lib/index.js.map +1 -1
  38. package/lib/index.test.js +73 -103
  39. package/lib/index.test.js.map +1 -1
  40. package/lib/inline.d.ts +48 -59
  41. package/lib/inline.d.ts.map +1 -1
  42. package/lib/inline.js +87 -82
  43. package/lib/inline.js.map +1 -1
  44. package/lib/inline.test.d.ts +2 -0
  45. package/lib/inline.test.d.ts.map +1 -0
  46. package/lib/inline.test.js +84 -0
  47. package/lib/inline.test.js.map +1 -0
  48. package/lib/node.d.ts +25 -0
  49. package/lib/node.d.ts.map +1 -0
  50. package/lib/node.js +21 -0
  51. package/lib/node.js.map +1 -0
  52. package/lib/plaintext.test.d.ts +2 -0
  53. package/lib/plaintext.test.d.ts.map +1 -0
  54. package/lib/plaintext.test.js +100 -0
  55. package/lib/plaintext.test.js.map +1 -0
  56. package/lib/render.d.ts +17 -0
  57. package/lib/render.d.ts.map +1 -0
  58. package/lib/render.js +30 -0
  59. package/lib/render.js.map +1 -0
  60. package/lib/send.d.ts +6 -3
  61. package/lib/send.d.ts.map +1 -1
  62. package/lib/send.js +12 -3
  63. package/lib/send.js.map +1 -1
  64. package/lib/template.d.ts +46 -0
  65. package/lib/template.d.ts.map +1 -0
  66. package/lib/template.js +82 -0
  67. package/lib/template.js.map +1 -0
  68. package/lib/template.test.d.ts +2 -0
  69. package/lib/template.test.d.ts.map +1 -0
  70. package/lib/template.test.js +78 -0
  71. package/lib/template.test.js.map +1 -0
  72. package/package.json +5 -4
  73. package/src/blocks.test.ts +233 -0
  74. package/src/blocks.ts +304 -86
  75. package/src/document.ts +51 -0
  76. package/src/draft.test.ts +167 -0
  77. package/src/draft.ts +148 -21
  78. package/src/escape.test.ts +38 -0
  79. package/src/escape.ts +20 -0
  80. package/src/guards.test.ts +138 -0
  81. package/src/index.test.ts +79 -140
  82. package/src/index.ts +26 -11
  83. package/src/inline.test.ts +125 -0
  84. package/src/inline.ts +131 -97
  85. package/src/node.ts +43 -0
  86. package/src/plaintext.test.ts +141 -0
  87. package/src/render.ts +54 -0
  88. package/src/send.ts +17 -10
  89. package/src/template.test.ts +100 -0
  90. package/src/template.ts +115 -0
  91. package/lib/message.d.ts +0 -26
  92. package/lib/message.d.ts.map +0 -1
  93. package/lib/message.js +0 -31
  94. package/lib/message.js.map +0 -1
  95. package/src/message.ts +0 -45
package/lib/blocks.js CHANGED
@@ -1,61 +1,128 @@
1
- import { escapeAttr, escapeText } from "./escape.js";
2
- import { toHtml } from "./inline.js";
3
- function join(children) {
4
- return children.map(toHtml).join("");
1
+ import { escapeAttr, escapeMarkdownUrl } from "./escape.js";
2
+ import { isRichNode, makeNode } from "./node.js";
3
+ import { escapeFor, render } from "./render.js";
4
+ // every builder here returns a dialect-agnostic block `RichNode`; the
5
+ // html/markdown choice happens at the `html`/`md`/`document()` boundary.
6
+ // where telegram's rich-markdown dialect has no native token for a block
7
+ // (footer, pull-quote, collage/slideshow, map, details, thinking), the raw html
8
+ // tag is embedded as-is — telegram's markdown parser accepts embedded html
9
+ // blocks as long as they are blank-line-separated from surrounding content.
10
+ function children(items, dialect) {
11
+ return items.map((item) => render(item, dialect)).join("");
5
12
  }
6
- function figcaption({ caption, credit }) {
13
+ function figcaption({ caption, credit }, dialect) {
7
14
  if (caption === undefined && credit === undefined)
8
15
  return "";
9
- const creditHtml = credit === undefined ? "" : `<cite>${toHtml(credit)}</cite>`;
10
- return `<figcaption>${toHtml(caption)}${creditHtml}</figcaption>`;
16
+ const creditHtml = credit === undefined ? "" : `<cite>${render(credit, dialect)}</cite>`;
17
+ return `<figcaption>${render(caption, dialect)}${creditHtml}</figcaption>`;
11
18
  }
12
19
  // --- confirmed tags ---
13
- /** `RichBlockParagraph`, `<p>`. */
14
- export function paragraph(...children) {
15
- return { html: `<p>${join(children)}</p>` };
20
+ /** `RichBlockParagraph` `<p>` in html, bare text in markdown (blocks are blank-line-joined). */
21
+ export function paragraph(...items) {
22
+ return makeNode("block", (d) => d === "markdown" ? children(items, d) : `<p>${children(items, d)}</p>`);
16
23
  }
17
- /** `RichBlockSectionHeading`, `<h1>`–`<h6>`. `level` is telegram's `size` (1 largest, 6 smallest). */
18
- export function heading(level, ...children) {
19
- return { html: `<h${level}>${join(children)}</h${level}>` };
24
+ /** `RichBlockSectionHeading` `<h1>`–`<h6>` / `#`–`######`. `level` is telegram's `size` (1 largest). */
25
+ export function heading(level, ...items) {
26
+ return makeNode("block", (d) => d === "markdown"
27
+ ? `${"#".repeat(level)} ${children(items, d)}`
28
+ : `<h${level}>${children(items, d)}</h${level}>`);
20
29
  }
21
- /** `RichBlockPreformatted`, nested `<pre><code>`, matching classic parse_mode html. */
30
+ /** `heading(1, …)`. */
31
+ export const h1 = (...items) => heading(1, ...items);
32
+ /** `heading(2, …)`. */
33
+ export const h2 = (...items) => heading(2, ...items);
34
+ /** `heading(3, …)`. */
35
+ export const h3 = (...items) => heading(3, ...items);
36
+ /** `heading(4, …)`. */
37
+ export const h4 = (...items) => heading(4, ...items);
38
+ /** `heading(5, …)`. */
39
+ export const h5 = (...items) => heading(5, ...items);
40
+ /** `heading(6, …)`. */
41
+ export const h6 = (...items) => heading(6, ...items);
42
+ /**
43
+ * `RichBlockPreformatted` — nested `<pre><code>` (matching classic parse_mode
44
+ * html) / a fenced code block. `text` is raw code: html-escaped in the html
45
+ * dialect, emitted verbatim inside the markdown fence.
46
+ */
22
47
  export function preformatted(text, language) {
23
- const cls = language ? ` class="language-${escapeAttr(language)}"` : "";
24
- return { html: `<pre><code${cls}>${escapeText(text)}</code></pre>` };
48
+ return makeNode("block", (d) => {
49
+ if (d === "markdown")
50
+ return `\`\`\`${language ?? ""}\n${text}\n\`\`\``;
51
+ const cls = language ? ` class="language-${escapeAttr(language)}"` : "";
52
+ return `<pre><code${cls}>${escapeFor(text, "html")}</code></pre>`;
53
+ });
25
54
  }
26
- /** `RichBlockFooter`, `<footer>`. */
27
- export function footer(...children) {
28
- return { html: `<footer>${join(children)}</footer>` };
55
+ /** `RichBlockFooter` `<footer>`; no markdown token, raw tag embedded there too. */
56
+ export function footer(...items) {
57
+ return makeNode("block", (d) => `<footer>${children(items, d)}</footer>`);
29
58
  }
30
- /** `RichBlockDivider`, `<hr/>`. */
59
+ /** `RichBlockDivider` `<hr/>` / `---`. */
31
60
  export function divider() {
32
- return { html: "<hr/>" };
61
+ return makeNode("block", (d) => (d === "markdown" ? "---" : "<hr/>"));
33
62
  }
34
- /** `RichBlockMathematicalExpression`, confirmed `<tg-math-block>` (LaTeX). */
63
+ /** `RichBlockMathematicalExpression` confirmed `<tg-math-block>` / `$$…$$` (raw LaTeX, unescaped in markdown). */
35
64
  export function mathBlock(expression) {
36
- return { html: `<tg-math-block>${escapeText(expression)}</tg-math-block>` };
65
+ return makeNode("block", (d) => d === "markdown"
66
+ ? `$$${expression}$$`
67
+ : `<tg-math-block>${escapeFor(expression, "html")}</tg-math-block>`);
37
68
  }
38
- /** `RichBlockAnchor`, `<a name="…">` at block level. */
69
+ /** `RichBlockAnchor` `<a name="…">` at block level, in both dialects. */
39
70
  export function anchorBlock(name) {
40
- return { html: `<a name="${escapeAttr(name)}"></a>` };
71
+ return makeNode("block", () => `<a name="${escapeAttr(name)}"></a>`);
41
72
  }
42
- /** `RichBlockBlockQuotation`, `<blockquote>`, with an optional `<cite>` credit. */
43
- export function blockquote(children, credit) {
44
- const creditHtml = credit === undefined ? "" : `<cite>${toHtml(credit)}</cite>`;
45
- return { html: `<blockquote>${join(children)}${creditHtml}</blockquote>` };
73
+ /**
74
+ * `RichBlockBlockQuotation` — `<blockquote>` with an optional `<cite>` credit;
75
+ * `>`-prefixed lines in markdown (each array item becomes its own line, the
76
+ * credit a trailing `> — credit` line).
77
+ */
78
+ export function blockquote(items, credit) {
79
+ return makeNode("block", (d) => {
80
+ if (d === "markdown") {
81
+ const body = items
82
+ .map((item) => render(item, d)
83
+ .split("\n")
84
+ .map((line) => `>${line}`)
85
+ .join("\n"))
86
+ .join("\n");
87
+ const creditLine = credit === undefined ? "" : `\n> — ${render(credit, d)}`;
88
+ return `${body}${creditLine}`;
89
+ }
90
+ const creditHtml = credit === undefined ? "" : `<cite>${render(credit, d)}</cite>`;
91
+ return `<blockquote>${children(items, d)}${creditHtml}</blockquote>`;
92
+ });
46
93
  }
47
- /** `RichBlockPullQuotation`, loosely `<aside>` per the schema, with an optional `<cite>` credit. */
94
+ /** `RichBlockPullQuotation` loosely `<aside>` per the schema, with an optional `<cite>` credit. */
48
95
  export function pullquote(text, credit) {
49
- const creditHtml = credit === undefined ? "" : `<cite>${toHtml(credit)}</cite>`;
50
- return { html: `<aside>${toHtml(text)}${creditHtml}</aside>` };
96
+ return makeNode("block", (d) => {
97
+ const creditHtml = credit === undefined ? "" : `<cite>${render(credit, d)}</cite>`;
98
+ return `<aside>${render(text, d)}${creditHtml}</aside>`;
99
+ });
100
+ }
101
+ // media inside an embedded html block must be blank-line-separated for
102
+ // telegram's markdown parser to pick it up.
103
+ function mediaGroup(tag, blocks, caption) {
104
+ return makeNode("block", (d) => {
105
+ const cap = figcaption(caption, d);
106
+ if (d === "markdown") {
107
+ return `<${tag}>\n\n${blocks.map((b) => render(b, d)).join("\n\n")}\n\n${cap}</${tag}>`;
108
+ }
109
+ return `<${tag}>${children(blocks, d)}${cap}</${tag}>`;
110
+ });
51
111
  }
52
- /** `RichBlockCollage`, confirmed custom tag `<tg-collage>`. */
112
+ /** `RichBlockCollage` confirmed custom tag `<tg-collage>` (raw in markdown too). */
53
113
  export function collage(blocks, caption = {}) {
54
- return { html: `<tg-collage>${join(blocks)}${figcaption(caption)}</tg-collage>` };
114
+ return mediaGroup("tg-collage", blocks, caption);
55
115
  }
56
- /** `RichBlockSlideshow`, confirmed custom tag `<tg-slideshow>`. */
116
+ /** `RichBlockSlideshow` confirmed custom tag `<tg-slideshow>` (raw in markdown too). */
57
117
  export function slideshow(blocks, caption = {}) {
58
- return { html: `<tg-slideshow>${join(blocks)}${figcaption(caption)}</tg-slideshow>` };
118
+ return mediaGroup("tg-slideshow", blocks, caption);
119
+ }
120
+ // --- tables ---
121
+ const TABLE_CELL = Symbol.for("yaebal.rich.table-cell");
122
+ function isTableCell(value) {
123
+ return (typeof value === "object" &&
124
+ value !== null &&
125
+ value[TABLE_CELL] === true);
59
126
  }
60
127
  /** one `<td>`/`<th>` cell; `content` omitted ⇒ an invisible cell (per `RichBlockTableCell`). */
61
128
  export function cell(content, options = {}) {
@@ -66,53 +133,129 @@ export function cell(content, options = {}) {
66
133
  // (left/center/right, top/middle/bottom) match the classic html attributes exactly.
67
134
  (options.align ? ` align="${options.align}"` : "") +
68
135
  (options.valign ? ` valign="${options.valign}"` : "");
69
- return {
70
- html: content === undefined
71
- ? `<${tag}${attrs}></${tag}>`
72
- : `<${tag}${attrs}>${toHtml(content)}</${tag}>`,
73
- };
136
+ const node = makeNode("inline", (d) => {
137
+ // markdown: bare cell text — `table()` owns the `|` framing and the alignment
138
+ // row; colspan/rowspan/valign/header have no gfm equivalent and are dropped.
139
+ if (d === "markdown")
140
+ return content === undefined ? "" : render(content, d);
141
+ return `<${tag}${attrs}>${content === undefined ? "" : render(content, d)}</${tag}>`;
142
+ });
143
+ return Object.assign(node, { [TABLE_CELL]: true, align: options.align });
74
144
  }
75
- /** `RichBlockTable`, confirmed `<table>`. build rows with `cell()`. */
145
+ const ALIGN_MARKER = {
146
+ left: ":--",
147
+ center: ":-:",
148
+ right: "--:",
149
+ };
150
+ /**
151
+ * `RichBlockTable`, confirmed `<table>` / a gfm table. build cells with `cell()`
152
+ * (a bare value is wrapped in a plain `cell()` automatically). gfm structurally
153
+ * requires a header row, so in markdown `rows[0]` always renders as the header
154
+ * line and `colspan`/`rowspan`/`valign`/`header`/`bordered`/`striped` are
155
+ * dropped; in html the header is per-cell opt-in (`cell(x, { header: true })`).
156
+ */
76
157
  export function table(rows, options = {}) {
77
- const attrs = (options.bordered ? " border" : "") + (options.striped ? " data-striped" : "");
78
- const body = rows.map((row) => `<tr>${join(row)}</tr>`).join("");
79
- const captionHtml = options.caption === undefined ? "" : `<caption>${toHtml(options.caption)}</caption>`;
80
- return { html: `<table${attrs}>${captionHtml}${body}</table>` };
158
+ const cells = rows.map((row) => row.map((c) => (isTableCell(c) ? c : cell(c))));
159
+ return makeNode("block", (d) => {
160
+ if (d === "markdown") {
161
+ // cell content is markdown-escaped by render(), so `|` inside a cell is pipe-safe.
162
+ const line = (row) => `| ${row.map((c) => c.render(d)).join(" | ")} |`;
163
+ const head = cells[0] ?? [];
164
+ const separator = `| ${head.map((c) => ALIGN_MARKER[c.align ?? "left"]).join(" | ")} |`;
165
+ const captionLine = options.caption === undefined ? "" : `${render(options.caption, d)}\n\n`;
166
+ return `${captionLine}${[line(head), separator, ...cells.slice(1).map(line)].join("\n")}`;
167
+ }
168
+ const attrs = (options.bordered ? " border" : "") + (options.striped ? " data-striped" : "");
169
+ const captionHtml = options.caption === undefined ? "" : `<caption>${render(options.caption, d)}</caption>`;
170
+ const body = cells.map((row) => `<tr>${row.map((c) => c.render(d)).join("")}</tr>`).join("");
171
+ return `<table${attrs}>${captionHtml}${body}</table>`;
172
+ });
81
173
  }
82
- /** `RichBlockDetails`, confirmed `<details>`/`<summary>`. */
174
+ /**
175
+ * `RichBlockDetails`, confirmed `<details>`/`<summary>` (an html-only tag, legal
176
+ * inside markdown too — there the body must be blank-line-separated or telegram
177
+ * renders it as literal text).
178
+ */
83
179
  export function details(summary, blocks, options = {}) {
84
- return {
85
- html: `<details${options.open ? " open" : ""}><summary>${toHtml(summary)}</summary>${join(blocks)}</details>`,
86
- };
180
+ return makeNode("block", (d) => {
181
+ const head = `<details${options.open ? " open" : ""}><summary>${render(summary, d)}</summary>`;
182
+ return d === "markdown"
183
+ ? `${head}\n\n${blocks.map((b) => render(b, d)).join("\n\n")}\n\n</details>`
184
+ : `${head}${children(blocks, d)}</details>`;
185
+ });
186
+ }
187
+ // --- lists ---
188
+ const LIST_ITEM = Symbol.for("yaebal.rich.list-item");
189
+ function isListItem(value) {
190
+ return (typeof value === "object" &&
191
+ value !== null &&
192
+ value[LIST_ITEM] === true);
87
193
  }
88
- /** one `<li>` for `list()`. */
194
+ /** one `<li>` for `list()` — only needed when a plain value isn't enough (checkbox, value, type). */
89
195
  export function item(blocks, options = {}) {
90
- const attrs = (options.value !== undefined ? ` value="${options.value}"` : "") +
91
- (options.type ? ` type="${options.type}"` : "");
92
- const checkboxHtml = options.checkbox === undefined
93
- ? ""
94
- : `<input type="checkbox"${options.checked ? " checked" : ""}/> `;
95
- return { html: `<li${attrs}>${checkboxHtml}${join(blocks)}</li>` };
96
- }
97
- /** `RichBlockList`, `<ul>`/`<ol>` of `item()`s. */
98
- export function list(items, options = {}) {
99
- const tag = options.ordered ? "ol" : "ul";
100
- return { html: `<${tag}>${join(items)}</${tag}>` };
196
+ const node = makeNode("inline", (d) => {
197
+ if (d === "markdown") {
198
+ // `- ` / `1. ` markers belong to list(); the item contributes the checkbox + content.
199
+ const checkbox = options.checkbox === undefined ? "" : `[${options.checked ? "x" : " "}] `;
200
+ return `${checkbox}${blocks.map((b) => render(b, d)).join("")}`;
201
+ }
202
+ const attrs = (options.value !== undefined ? ` value="${options.value}"` : "") +
203
+ (options.type ? ` type="${options.type}"` : "");
204
+ const checkboxHtml = options.checkbox === undefined
205
+ ? ""
206
+ : `<input type="checkbox"${options.checked ? " checked" : ""}/> `;
207
+ return `<li${attrs}>${checkboxHtml}${children(blocks, d)}</li>`;
208
+ });
209
+ return Object.assign(node, { [LIST_ITEM]: true, value: options.value });
210
+ }
211
+ /**
212
+ * `RichBlockList` — `<ul>`/`<ol>` / `- `/`1. ` lines. entries may be plain
213
+ * values (wrapped in a default `item()` automatically) or explicit `item()`s
214
+ * for checkboxes and numbering overrides.
215
+ */
216
+ export function list(entries, options = {}) {
217
+ const items = entries.map((entry) => (isListItem(entry) ? entry : item([entry])));
218
+ return makeNode("block", (d) => {
219
+ if (d === "markdown") {
220
+ let counter = options.start ?? 1;
221
+ return items
222
+ .map((it) => {
223
+ if (it.value !== undefined)
224
+ counter = it.value;
225
+ const marker = options.ordered ? `${counter++}.` : "-";
226
+ return `${marker} ${it.render(d)}`;
227
+ })
228
+ .join("\n");
229
+ }
230
+ const tag = options.ordered ? "ol" : "ul";
231
+ const start = options.ordered && options.start !== undefined ? ` start="${options.start}"` : "";
232
+ return `<${tag}${start}>${items.map((it) => it.render(d)).join("")}</${tag}>`;
233
+ });
101
234
  }
102
235
  /**
103
- * `RichBlockMap`, confirmed custom tag `<tg-map>` attribute names/encoding are a
104
- * best-effort guess (lat/long/zoom/width/height are telegram's own field names).
236
+ * `RichBlockMap`, confirmed custom tag `<tg-map>` (raw in markdown too)
237
+ * attribute names/encoding are a best-effort guess (lat/long/zoom/width/height
238
+ * are telegram's own field names).
105
239
  */
106
240
  export function map(location, options, caption = {}) {
107
241
  const attrs = ` latitude="${location.latitude}" longitude="${location.longitude}"` +
108
242
  ` zoom="${options.zoom}" width="${options.width}" height="${options.height}"`;
109
- return { html: `<tg-map${attrs}>${figcaption(caption)}</tg-map>` };
243
+ return makeNode("block", (d) => `<tg-map${attrs}>${figcaption(caption, d)}</tg-map>`);
110
244
  }
111
245
  function figure(tag, src, options) {
112
- const spoilerAttr = options.spoiler ? " data-media-spoiler" : "";
113
- const media = `<${tag} src="${escapeAttr(src)}"${spoilerAttr}></${tag}>`;
114
- const cap = figcaption(options);
115
- return { html: cap ? `<figure>${media}${cap}</figure>` : media };
246
+ return makeNode("block", (d) => {
247
+ if (d === "markdown") {
248
+ // best-effort `![](url "caption")`; `credit`/`spoiler` have no markdown form and are dropped.
249
+ const title = options.caption === undefined
250
+ ? ""
251
+ : ` "${render(options.caption, d).replace(/"/g, "&#34;")}"`;
252
+ return `![](${escapeMarkdownUrl(src)}${title})`;
253
+ }
254
+ const spoilerAttr = options.spoiler ? " data-media-spoiler" : "";
255
+ const media = `<${tag} src="${escapeAttr(src)}"${spoilerAttr}></${tag}>`;
256
+ const cap = figcaption(options, d);
257
+ return cap ? `<figure>${media}${cap}</figure>` : media;
258
+ });
116
259
  }
117
260
  /**
118
261
  * `RichBlockPhoto`, confirmed `<img>`. media is referenced by url — `sendRichMessage`
@@ -143,7 +286,20 @@ export function audio(src, options = {}) {
143
286
  * schema states it can be used in `sendRichMessageDraft` payloads but is never
144
287
  * received back on a real message. see `RichMessageDraft` in draft.ts.
145
288
  */
146
- export function thinking(...children) {
147
- return { html: `<tg-thinking>${join(children)}</tg-thinking>` };
289
+ export function thinking(...items) {
290
+ return makeNode("block", (d) => `<tg-thinking>${children(items, d)}</tg-thinking>`);
291
+ }
292
+ // --- composition ---
293
+ /**
294
+ * join content with a separator. if any entry is a block, the result is a block
295
+ * and entries are blank-line-joined (markdown) / concatenated (html) — the
296
+ * separator only applies to all-inline joins.
297
+ */
298
+ export function join(entries, separator = "") {
299
+ const block = entries.some((entry) => isRichNode(entry) && entry.level === "block");
300
+ return makeNode(block ? "block" : "inline", (d) => {
301
+ const sep = block ? (d === "markdown" ? "\n\n" : "") : render(separator, d);
302
+ return entries.map((entry) => render(entry, d)).join(sep);
303
+ });
148
304
  }
149
305
  //# sourceMappingURL=blocks.js.map
package/lib/blocks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=blocks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.test.d.ts","sourceRoot":"","sources":["../src/blocks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,142 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { anchorBlock, audio, blockquote, cell, collage, details, divider, footer, h2, heading, image, item, join, list, map, mathBlock, paragraph, preformatted, pullquote, slideshow, table, thinking, video, } from "./blocks.js";
4
+ import { bold, italic } from "./inline.js";
5
+ function both(node) {
6
+ return [node.render("html"), node.render("markdown")];
7
+ }
8
+ test("paragraph() — <p> in html, bare text in markdown", () => {
9
+ assert.deepEqual(both(paragraph("hi ", bold("there"))), [
10
+ "<p>hi <b>there</b></p>",
11
+ "hi **there**",
12
+ ]);
13
+ });
14
+ test("heading()/h1–h6 — <hN> / #-prefixed", () => {
15
+ assert.deepEqual(both(heading(3, "title")), ["<h3>title</h3>", "### title"]);
16
+ assert.deepEqual(both(h2("t")), ["<h2>t</h2>", "## t"]);
17
+ });
18
+ test("preformatted() — <pre><code> with language class / fenced block, code kept raw in the fence", () => {
19
+ assert.deepEqual(both(preformatted("if (a < b) {}", "ts")), [
20
+ '<pre><code class="language-ts">if (a &lt; b) {}</code></pre>',
21
+ "```ts\nif (a < b) {}\n```",
22
+ ]);
23
+ assert.equal(preformatted("x").render("html"), "<pre><code>x</code></pre>");
24
+ });
25
+ test("divider()/footer()/mathBlock()/anchorBlock()", () => {
26
+ assert.deepEqual(both(divider()), ["<hr/>", "---"]);
27
+ assert.deepEqual(both(footer("fin")), ["<footer>fin</footer>", "<footer>fin</footer>"]);
28
+ assert.deepEqual(both(mathBlock("E=mc^2")), [
29
+ "<tg-math-block>E=mc^2</tg-math-block>",
30
+ "$$E=mc^2$$",
31
+ ]);
32
+ assert.deepEqual(both(anchorBlock("s1")), ['<a name="s1"></a>', '<a name="s1"></a>']);
33
+ });
34
+ test("blockquote() — <blockquote> with <cite> / >-prefixed lines with a credit line", () => {
35
+ assert.deepEqual(both(blockquote([paragraph("a"), paragraph("b")], "someone")), [
36
+ "<blockquote><p>a</p><p>b</p><cite>someone</cite></blockquote>",
37
+ ">a\n>b\n> — someone",
38
+ ]);
39
+ });
40
+ test("blockquote() in markdown >-prefixes every line of multi-line content", () => {
41
+ assert.equal(blockquote([join([paragraph("a"), paragraph("b")])]).render("markdown"), ">a\n>\n>b");
42
+ });
43
+ test("pullquote() — <aside> with optional <cite> in both dialects", () => {
44
+ assert.deepEqual(both(pullquote("wow", "them")), [
45
+ "<aside>wow<cite>them</cite></aside>",
46
+ "<aside>wow<cite>them</cite></aside>",
47
+ ]);
48
+ });
49
+ test("table() — full html table; gfm with a structural header row in markdown", () => {
50
+ const node = table([
51
+ [cell("day", { header: true }), cell("count", { header: true, align: "right" })],
52
+ [cell("mon"), cell(128, { align: "right" })],
53
+ ], { bordered: true, caption: "week" });
54
+ assert.equal(node.render("html"), "<table border><caption>week</caption>" +
55
+ '<tr><th>day</th><th align="right">count</th></tr>' +
56
+ '<tr><td>mon</td><td align="right">128</td></tr></table>');
57
+ assert.equal(node.render("markdown"), "week\n\n| day | count |\n| :-- | --: |\n| mon | 128 |");
58
+ });
59
+ test("table() wraps bare values in a plain cell()", () => {
60
+ assert.deepEqual(both(table([["a", bold("b")]])), [
61
+ "<table><tr><td>a</td><td><b>b</b></td></tr></table>",
62
+ "| a | **b** |\n| :-- | :-- |",
63
+ ]);
64
+ });
65
+ test("cell() supports colspan/rowspan/valign and invisible cells in html; markdown keeps the text", () => {
66
+ const spanned = cell("x", { colspan: 2, rowspan: 3, valign: "middle" });
67
+ assert.equal(spanned.render("html"), '<td colspan="2" rowspan="3" valign="middle">x</td>');
68
+ assert.equal(spanned.render("markdown"), "x");
69
+ assert.equal(cell().render("html"), "<td></td>");
70
+ });
71
+ test("cell content is escaped, so a `|` cannot break the gfm row", () => {
72
+ assert.equal(table([[cell("a|b")]]).render("markdown"), "| a\\|b |\n| :-- |");
73
+ });
74
+ test("list() wraps bare values in <li> automatically", () => {
75
+ assert.deepEqual(both(list(["a", bold("b")])), [
76
+ "<ul><li>a</li><li><b>b</b></li></ul>",
77
+ "- a\n- **b**",
78
+ ]);
79
+ });
80
+ test("list({ ordered, start }) numbers items; item value restarts the numbering", () => {
81
+ const node = list(["a", "b", item(["c"], { value: 10 }), "d"], { ordered: true, start: 3 });
82
+ assert.equal(node.render("html"), '<ol start="3"><li>a</li><li>b</li><li value="10">c</li><li>d</li></ol>');
83
+ assert.equal(node.render("markdown"), "3. a\n4. b\n10. c\n11. d");
84
+ });
85
+ test("item() checkbox — <input type=checkbox> / gfm task marker", () => {
86
+ const node = list([
87
+ item(["done"], { checkbox: true, checked: true }),
88
+ item(["todo"], { checkbox: true }),
89
+ ]);
90
+ assert.equal(node.render("html"), '<ul><li><input type="checkbox" checked/> done</li><li><input type="checkbox"/> todo</li></ul>');
91
+ assert.equal(node.render("markdown"), "- [x] done\n- [ ] todo");
92
+ });
93
+ test("item() type override is html-only", () => {
94
+ assert.equal(list([item(["x"], { type: "i" })], { ordered: true }).render("html"), '<ol><li type="i">x</li></ol>');
95
+ assert.equal(list([item(["x"], { type: "i" })], { ordered: true }).render("markdown"), "1. x");
96
+ });
97
+ test("details() — html compact; markdown blank-line-separates the body", () => {
98
+ const node = details("more", [paragraph("hidden")], { open: true });
99
+ assert.equal(node.render("html"), "<details open><summary>more</summary><p>hidden</p></details>");
100
+ assert.equal(node.render("markdown"), "<details open><summary>more</summary>\n\nhidden\n\n</details>");
101
+ });
102
+ test("media builders — <img>/<video>/<audio> with figure+caption / markdown image with title", () => {
103
+ assert.deepEqual(both(image("https://x.dev/a.png")), [
104
+ '<img src="https://x.dev/a.png"></img>',
105
+ "![](https://x.dev/a.png)",
106
+ ]);
107
+ assert.deepEqual(both(video("https://x.dev/a.mp4", { caption: "clip", credit: "me" })), [
108
+ '<figure><video src="https://x.dev/a.mp4"></video><figcaption>clip<cite>me</cite></figcaption></figure>',
109
+ '![](https://x.dev/a.mp4 "clip")',
110
+ ]);
111
+ assert.equal(audio("https://x.dev/a.mp3", { spoiler: true }).render("html"), '<audio src="https://x.dev/a.mp3" data-media-spoiler></audio>');
112
+ });
113
+ test("collage()/slideshow() — compact html; blank-line-separated media in markdown", () => {
114
+ const node = collage([image("https://x.dev/1.png"), image("https://x.dev/2.png")], {
115
+ caption: "pair",
116
+ });
117
+ assert.equal(node.render("html"), '<tg-collage><img src="https://x.dev/1.png"></img><img src="https://x.dev/2.png"></img>' +
118
+ "<figcaption>pair</figcaption></tg-collage>");
119
+ assert.equal(node.render("markdown"), "<tg-collage>\n\n![](https://x.dev/1.png)\n\n![](https://x.dev/2.png)\n\n" +
120
+ "<figcaption>pair</figcaption></tg-collage>");
121
+ assert.equal(slideshow([image("https://x.dev/1.png")]).render("html"), '<tg-slideshow><img src="https://x.dev/1.png"></img></tg-slideshow>');
122
+ });
123
+ test("map() — <tg-map> with telegram's field names as attributes, in both dialects", () => {
124
+ const node = map({ latitude: 55.75, longitude: 37.61 }, { zoom: 14, width: 400, height: 300 }, { caption: "moscow" });
125
+ const expected = '<tg-map latitude="55.75" longitude="37.61" zoom="14" width="400" height="300">' +
126
+ "<figcaption>moscow</figcaption></tg-map>";
127
+ assert.deepEqual(both(node), [expected, expected]);
128
+ });
129
+ test("thinking() — draft-only <tg-thinking> in both dialects", () => {
130
+ assert.deepEqual(both(thinking("hmm ", italic("…"))), [
131
+ "<tg-thinking>hmm <i>…</i></tg-thinking>",
132
+ "<tg-thinking>hmm *…*</tg-thinking>",
133
+ ]);
134
+ });
135
+ test("join() — inline entries join with the separator, block entries blank-line-join in markdown", () => {
136
+ assert.equal(join(["a", "b"], " · ").render("html"), "a · b");
137
+ assert.equal(join([paragraph("a"), paragraph("b")]).render("markdown"), "a\n\nb");
138
+ assert.equal(join([paragraph("a"), paragraph("b")]).render("html"), "<p>a</p><p>b</p>");
139
+ assert.equal(join([paragraph("a"), "b"]).level, "block");
140
+ assert.equal(join(["a", "b"]).level, "inline");
141
+ });
142
+ //# sourceMappingURL=blocks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.test.js","sourceRoot":"","sources":["../src/blocks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { InputRichMessage } from "@yaebal/types";
2
+ import type { Dialect } from "./node.js";
3
+ /**
4
+ * the emitted rich message — a rendered dialect string plus the
5
+ * `InputRichMessage` flags, settable fluently (`.rtl()`, `.noEntityDetection()`).
6
+ *
7
+ * `sendRichMessage`/`RichMessageDraft` accept it directly, and `toJSON()`
8
+ * delegates to `toInputRichMessage()`, so even a raw `api.call` payload holding
9
+ * a `RichDocument` serializes into the correct `rich_message` shape.
10
+ */
11
+ export declare class RichDocument {
12
+ #private;
13
+ readonly dialect: Dialect;
14
+ readonly content: string;
15
+ constructor(dialect: Dialect, content: string);
16
+ /** `InputRichMessage.is_rtl` — show the message right-to-left. */
17
+ rtl(value?: boolean): this;
18
+ /**
19
+ * `InputRichMessage.skip_entity_detection` — turn off auto-detection of urls,
20
+ * emails, `@mentions`, `#hashtags`, `$cashtags`, `/bot_commands`, and phone
21
+ * numbers in plain text.
22
+ */
23
+ noEntityDetection(value?: boolean): this;
24
+ /** the `rich_message` method argument: `{ [dialect]: content, is_rtl?, skip_entity_detection? }`. */
25
+ toInputRichMessage(): InputRichMessage;
26
+ toJSON(): InputRichMessage;
27
+ }
28
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;;;GAOG;AACH,qBAAa,YAAY;;IAKvB,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM;gBADf,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM;IAGzB,kEAAkE;IAClE,GAAG,CAAC,KAAK,UAAO,GAAG,IAAI;IAKvB;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,UAAO,GAAG,IAAI;IAKrC,qGAAqG;IACrG,kBAAkB,IAAI,gBAAgB;IAUtC,MAAM,IAAI,gBAAgB;CAG1B"}