@fonz/tgcc 0.6.14 → 0.6.17

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.
@@ -1,126 +0,0 @@
1
- import { marked, Renderer } from 'marked';
2
- /**
3
- * Escape HTML entities for safe use in Telegram HTML parse mode.
4
- */
5
- function esc(text) {
6
- return String(text)
7
- .replace(/&/g, '&')
8
- .replace(/</g, '&lt;')
9
- .replace(/>/g, '&gt;');
10
- }
11
- /**
12
- * Custom marked renderer that outputs only Telegram-supported HTML tags:
13
- * <b>, <i>, <u>, <s>, <code>, <pre>, <a href="">, <blockquote>, <tg-spoiler>
14
- */
15
- class TelegramRenderer extends Renderer {
16
- // Block-level
17
- code(token) {
18
- const lang = token.lang || '';
19
- const langAttr = lang ? ` class="language-${esc(lang)}"` : '';
20
- return `<pre><code${langAttr}>${esc(token.text)}</code></pre>\n`;
21
- }
22
- heading(token) {
23
- const text = this.parser.parseInline(token.tokens);
24
- return `\n<b>${text}</b>\n\n`;
25
- }
26
- paragraph(token) {
27
- const text = this.parser.parseInline(token.tokens);
28
- return `${text}\n\n`;
29
- }
30
- blockquote(token) {
31
- const body = this.parser.parse(token.tokens);
32
- return `<blockquote>${body.trim()}</blockquote>\n`;
33
- }
34
- list(token) {
35
- let counter = token.start || 1;
36
- const lines = token.items.map((item) => {
37
- const text = this.parser.parse(item.tokens).trim();
38
- if (token.ordered) {
39
- return `${counter++}. ${text}`;
40
- }
41
- return `• ${text}`;
42
- });
43
- return lines.join('\n') + '\n\n';
44
- }
45
- listitem(token) {
46
- return this.parser.parse(token.tokens).trim();
47
- }
48
- hr() {
49
- return '\n';
50
- }
51
- table(token) {
52
- // Convert table to readable text — Telegram has no table support
53
- const result = [];
54
- for (const row of token.rows) {
55
- const cells = row.map((cell) => this.parser.parseInline(cell.tokens));
56
- if (cells.length === 0)
57
- continue;
58
- const first = `<b>${cells[0]}</b>`;
59
- const rest = cells.slice(1);
60
- result.push(rest.length > 0 ? `${first} — ${rest.join(' — ')}` : first);
61
- }
62
- return result.join('\n') + '\n\n';
63
- }
64
- tablerow() { return ''; }
65
- tablecell() { return ''; }
66
- // Inline
67
- strong(token) {
68
- const text = this.parser.parseInline(token.tokens);
69
- return `<b>${text}</b>`;
70
- }
71
- em(token) {
72
- const text = this.parser.parseInline(token.tokens);
73
- return `<i>${text}</i>`;
74
- }
75
- del(token) {
76
- const text = this.parser.parseInline(token.tokens);
77
- return `<s>${text}</s>`;
78
- }
79
- codespan(token) {
80
- return `<code>${esc(token.text)}</code>`;
81
- }
82
- link(token) {
83
- const text = this.parser.parseInline(token.tokens);
84
- return `<a href="${esc(token.href)}">${text}</a>`;
85
- }
86
- image(token) {
87
- return token.text || '[image]';
88
- }
89
- text(token) {
90
- if (typeof token === 'string')
91
- return esc(token);
92
- // If the token has inline sub-tokens (e.g. bold/italic inside list items),
93
- // let the parser process them instead of returning the raw text.
94
- if (token.tokens?.length) {
95
- return this.parser.parseInline(token.tokens);
96
- }
97
- return esc(token.text);
98
- }
99
- br() {
100
- return '\n';
101
- }
102
- html(token) {
103
- // Telegram doesn't support arbitrary HTML — escape it
104
- return esc(token.text);
105
- }
106
- space() {
107
- return '';
108
- }
109
- }
110
- /**
111
- * Convert markdown text to Telegram-compatible HTML.
112
- * Uses `marked` with a custom renderer — no regex heuristics.
113
- */
114
- export function markdownToTelegramHtml(text) {
115
- if (!text)
116
- return '';
117
- const renderer = new TelegramRenderer();
118
- const result = marked(text, {
119
- gfm: true,
120
- breaks: false,
121
- renderer,
122
- });
123
- // Clean up excessive newlines
124
- return result.replace(/\n{3,}/g, '\n\n').trim();
125
- }
126
- //# sourceMappingURL=telegram-html.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telegram-html.js","sourceRoot":"","sources":["../src/telegram-html.ts"],"names":[],"mappings":"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"}