@yaebal/rich 0.0.1 → 0.0.2
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/README.md +104 -30
- package/lib/blocks.d.ts +93 -32
- package/lib/blocks.d.ts.map +1 -1
- package/lib/blocks.js +227 -71
- package/lib/blocks.js.map +1 -1
- package/lib/blocks.test.d.ts +2 -0
- package/lib/blocks.test.d.ts.map +1 -0
- package/lib/blocks.test.js +142 -0
- package/lib/blocks.test.js.map +1 -0
- package/lib/document.d.ts +28 -0
- package/lib/document.d.ts.map +1 -0
- package/lib/document.js +46 -0
- package/lib/document.js.map +1 -0
- package/lib/draft.d.ts +46 -9
- package/lib/draft.d.ts.map +1 -1
- package/lib/draft.js +115 -19
- package/lib/draft.js.map +1 -1
- package/lib/draft.test.d.ts +2 -0
- package/lib/draft.test.d.ts.map +1 -0
- package/lib/draft.test.js +122 -0
- package/lib/draft.test.js.map +1 -0
- package/lib/escape.d.ts +8 -0
- package/lib/escape.d.ts.map +1 -1
- package/lib/escape.js +17 -0
- package/lib/escape.js.map +1 -1
- package/lib/escape.test.d.ts +2 -0
- package/lib/escape.test.d.ts.map +1 -0
- package/lib/escape.test.js +28 -0
- package/lib/escape.test.js.map +1 -0
- package/lib/guards.test.d.ts +2 -0
- package/lib/guards.test.d.ts.map +1 -0
- package/lib/guards.test.js +85 -0
- package/lib/guards.test.js.map +1 -0
- package/lib/index.d.ts +18 -9
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +17 -8
- package/lib/index.js.map +1 -1
- package/lib/index.test.js +73 -103
- package/lib/index.test.js.map +1 -1
- package/lib/inline.d.ts +48 -59
- package/lib/inline.d.ts.map +1 -1
- package/lib/inline.js +87 -82
- package/lib/inline.js.map +1 -1
- package/lib/inline.test.d.ts +2 -0
- package/lib/inline.test.d.ts.map +1 -0
- package/lib/inline.test.js +84 -0
- package/lib/inline.test.js.map +1 -0
- package/lib/node.d.ts +25 -0
- package/lib/node.d.ts.map +1 -0
- package/lib/node.js +21 -0
- package/lib/node.js.map +1 -0
- package/lib/plaintext.test.d.ts +2 -0
- package/lib/plaintext.test.d.ts.map +1 -0
- package/lib/plaintext.test.js +100 -0
- package/lib/plaintext.test.js.map +1 -0
- package/lib/render.d.ts +17 -0
- package/lib/render.d.ts.map +1 -0
- package/lib/render.js +30 -0
- package/lib/render.js.map +1 -0
- package/lib/send.d.ts +6 -3
- package/lib/send.d.ts.map +1 -1
- package/lib/send.js +12 -3
- package/lib/send.js.map +1 -1
- package/lib/template.d.ts +46 -0
- package/lib/template.d.ts.map +1 -0
- package/lib/template.js +82 -0
- package/lib/template.js.map +1 -0
- package/lib/template.test.d.ts +2 -0
- package/lib/template.test.d.ts.map +1 -0
- package/lib/template.test.js +78 -0
- package/lib/template.test.js.map +1 -0
- package/package.json +6 -5
- package/src/blocks.test.ts +233 -0
- package/src/blocks.ts +304 -86
- package/src/document.ts +51 -0
- package/src/draft.test.ts +167 -0
- package/src/draft.ts +148 -21
- package/src/escape.test.ts +38 -0
- package/src/escape.ts +20 -0
- package/src/guards.test.ts +138 -0
- package/src/index.test.ts +79 -140
- package/src/index.ts +26 -11
- package/src/inline.test.ts +125 -0
- package/src/inline.ts +131 -97
- package/src/node.ts +43 -0
- package/src/plaintext.test.ts +141 -0
- package/src/render.ts +54 -0
- package/src/send.ts +17 -10
- package/src/template.test.ts +100 -0
- package/src/template.ts +115 -0
- package/lib/message.d.ts +0 -26
- package/lib/message.d.ts.map +0 -1
- package/lib/message.js +0 -31
- package/lib/message.js.map +0 -1
- package/src/message.ts +0 -45
package/lib/blocks.js
CHANGED
|
@@ -1,61 +1,128 @@
|
|
|
1
|
-
import { escapeAttr,
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
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>${
|
|
10
|
-
return `<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
|
|
14
|
-
export function paragraph(...
|
|
15
|
-
return
|
|
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
|
|
18
|
-
export function heading(level, ...
|
|
19
|
-
return
|
|
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
|
-
/** `
|
|
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
|
-
|
|
24
|
-
|
|
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
|
|
27
|
-
export function footer(...
|
|
28
|
-
return
|
|
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
|
|
59
|
+
/** `RichBlockDivider` — `<hr/>` / `---`. */
|
|
31
60
|
export function divider() {
|
|
32
|
-
return
|
|
61
|
+
return makeNode("block", (d) => (d === "markdown" ? "---" : "<hr/>"));
|
|
33
62
|
}
|
|
34
|
-
/** `RichBlockMathematicalExpression
|
|
63
|
+
/** `RichBlockMathematicalExpression` — confirmed `<tg-math-block>` / `$$…$$` (raw LaTeX, unescaped in markdown). */
|
|
35
64
|
export function mathBlock(expression) {
|
|
36
|
-
return
|
|
65
|
+
return makeNode("block", (d) => d === "markdown"
|
|
66
|
+
? `$$${expression}$$`
|
|
67
|
+
: `<tg-math-block>${escapeFor(expression, "html")}</tg-math-block>`);
|
|
37
68
|
}
|
|
38
|
-
/** `RichBlockAnchor
|
|
69
|
+
/** `RichBlockAnchor` — `<a name="…">` at block level, in both dialects. */
|
|
39
70
|
export function anchorBlock(name) {
|
|
40
|
-
return
|
|
71
|
+
return makeNode("block", () => `<a name="${escapeAttr(name)}"></a>`);
|
|
41
72
|
}
|
|
42
|
-
/**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
|
94
|
+
/** `RichBlockPullQuotation` — loosely `<aside>` per the schema, with an optional `<cite>` credit. */
|
|
48
95
|
export function pullquote(text, credit) {
|
|
49
|
-
|
|
50
|
-
|
|
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
|
|
112
|
+
/** `RichBlockCollage` — confirmed custom tag `<tg-collage>` (raw in markdown too). */
|
|
53
113
|
export function collage(blocks, caption = {}) {
|
|
54
|
-
return
|
|
114
|
+
return mediaGroup("tg-collage", blocks, caption);
|
|
55
115
|
}
|
|
56
|
-
/** `RichBlockSlideshow
|
|
116
|
+
/** `RichBlockSlideshow` — confirmed custom tag `<tg-slideshow>` (raw in markdown too). */
|
|
57
117
|
export function slideshow(blocks, caption = {}) {
|
|
58
|
-
return
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
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
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
/**
|
|
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
|
-
|
|
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
|
|
91
|
-
(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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>`
|
|
104
|
-
* best-effort guess (lat/long/zoom/width/height
|
|
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
|
|
243
|
+
return makeNode("block", (d) => `<tg-map${attrs}>${figcaption(caption, d)}</tg-map>`);
|
|
110
244
|
}
|
|
111
245
|
function figure(tag, src, options) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
246
|
+
return makeNode("block", (d) => {
|
|
247
|
+
if (d === "markdown") {
|
|
248
|
+
// best-effort ``; `credit`/`spoiler` have no markdown form and are dropped.
|
|
249
|
+
const title = options.caption === undefined
|
|
250
|
+
? ""
|
|
251
|
+
: ` "${render(options.caption, d).replace(/"/g, """)}"`;
|
|
252
|
+
return `}${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(...
|
|
147
|
-
return
|
|
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 @@
|
|
|
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 < 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
|
+
"",
|
|
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
|
+
'',
|
|
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\n\n\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"}
|