telegram-transformer 1.1.1 → 1.3.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/README.md +81 -4
- package/lib/format.d.ts +1 -1
- package/lib/format.d.ts.map +1 -1
- package/lib/format.js +5 -3
- package/package.json +3 -3
- package/lib/constants.d.ts +0 -3
- package/lib/constants.d.ts.map +0 -1
- package/lib/constants.js +0 -8
- package/lib/formatters.d.ts +0 -5
- package/lib/formatters.d.ts.map +0 -1
- package/lib/formatters.js +0 -137
- package/lib/types.d.ts +0 -12
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -2
package/README.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
<header>
|
|
2
|
-
|
|
2
|
+
<div align="center">
|
|
3
3
|
<h1 align="center">Telegram message transformer</h1>
|
|
4
4
|
|
|
5
|
+
<a href="https://www.npmjs.com/package/telegram-transformer">
|
|
6
|
+
<img src="https://img.shields.io/npm/v/telegram-transformer.svg" alt="Latest Release">
|
|
7
|
+
</a>
|
|
8
|
+
|
|
9
|
+
</div>
|
|
5
10
|
</header>
|
|
6
11
|
|
|
7
12
|
## Introduction
|
|
@@ -29,7 +34,7 @@ import formatText, { htmlFormatters } from 'telegram-transformer';
|
|
|
29
34
|
import { MessageEntity } from 'typegram';
|
|
30
35
|
|
|
31
36
|
const text =
|
|
32
|
-
'Hello @username #awesome_hashtag $USD /start@jobs_bot https://telegram.org do-not-reply@telegram.org +1-212-555-0123 bold text italic text underlined text strikethrough text spoiler message monowidth string monowidth block text_link';
|
|
37
|
+
'Hello @username #awesome_hashtag $USD /start@jobs_bot https://telegram.org do-not-reply@telegram.org +1-212-555-0123 bold text italic text underlined text strikethrough text spoiler message monowidth string monowidth block text_link custom_emoji text_mention';
|
|
33
38
|
const entities: MessageEntity[] = [
|
|
34
39
|
{ offset: 6, length: 9, type: 'mention' },
|
|
35
40
|
{ offset: 16, length: 16, type: 'hashtag' },
|
|
@@ -52,6 +57,22 @@ const entities: MessageEntity[] = [
|
|
|
52
57
|
type: 'text_link',
|
|
53
58
|
url: 'https://telegram.org/',
|
|
54
59
|
},
|
|
60
|
+
{
|
|
61
|
+
offset: 233,
|
|
62
|
+
length: 12,
|
|
63
|
+
type: 'custom_emoji',
|
|
64
|
+
custom_emoji_id: '12345',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
offset: 246,
|
|
68
|
+
length: 12,
|
|
69
|
+
type: 'text_mention',
|
|
70
|
+
user: {
|
|
71
|
+
id: 9876543210,
|
|
72
|
+
is_bot: false,
|
|
73
|
+
first_name: 'First Name',
|
|
74
|
+
},
|
|
75
|
+
},
|
|
55
76
|
];
|
|
56
77
|
|
|
57
78
|
const formatted = formatText(text, entities, { formatters: htmlFormatters });
|
|
@@ -60,9 +81,9 @@ console.log(formatted);
|
|
|
60
81
|
|
|
61
82
|
/*
|
|
62
83
|
{
|
|
63
|
-
text: "Hello <a href='https://t.me/username'>@username</a> <a href='#awesome_hashtag'>#awesome_<strong>hashtag</strong></a> $USD /start@jobs_bot <a href='https://telegram.org'>https://telegram.org</a> <a href='mailto:do-not-reply@telegram.org'>do-not-reply@telegram.org</a> <a href='tel:+1-212-555-0123'>+1-212-555-0123</a> <strong>bold text</strong> <i>italic text</i> <u>under</u><u><strong>lined</strong> text</u> <strike>strikethrough text</strike> <span class='spoiler-hover'>spoiler message</span> monowidth string monowidth block <a href='https://telegram.org/'>text_link</a>",
|
|
84
|
+
text: "Hello <a href='https://t.me/username'>@username</a> <a href='#awesome_hashtag'>#awesome_<strong>hashtag</strong></a> $USD /start@jobs_bot <a href='https://telegram.org'>https://telegram.org</a> <a href='mailto:do-not-reply@telegram.org'>do-not-reply@telegram.org</a> <a href='tel:+1-212-555-0123'>+1-212-555-0123</a> <strong>bold text</strong> <i>italic text</i> <u>under</u><u><strong>lined</strong> text</u> <strike>strikethrough text</strike> <span class='spoiler-hover'>spoiler message</span> monowidth string monowidth block <a href='https://telegram.org/'>text_link</a> <span>custom_emoji | <b>EMOJI ID:12345</b></span> <span>text_mention: First Name | <b>ID:9876543210</b></span>",
|
|
64
85
|
entities: [
|
|
65
|
-
|
|
86
|
+
{ offset: 6, length: 45, type: 'mention' },
|
|
66
87
|
{ offset: 16, length: 16, type: 'hashtag' },
|
|
67
88
|
{ offset: 88, length: 24, type: 'bold' },
|
|
68
89
|
{ offset: 117, length: 4, type: 'cashtag' },
|
|
@@ -82,8 +103,64 @@ console.log(formatted);
|
|
|
82
103
|
length: 45,
|
|
83
104
|
type: 'text_link',
|
|
84
105
|
url: 'https://telegram.org/'
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
offset: 576,
|
|
109
|
+
length: 25,
|
|
110
|
+
type: 'custom_emoji',
|
|
111
|
+
custom_emoji_id: '12345'
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
offset: 626,
|
|
115
|
+
length: 25,
|
|
116
|
+
type: 'text_mention',
|
|
117
|
+
user: {
|
|
118
|
+
id: 9876543210,
|
|
119
|
+
is_bot: false,
|
|
120
|
+
first_name: 'First Name',
|
|
121
|
+
}
|
|
85
122
|
}
|
|
86
123
|
]
|
|
87
124
|
}
|
|
88
125
|
*/
|
|
89
126
|
```
|
|
127
|
+
|
|
128
|
+
### Custom transformer
|
|
129
|
+
|
|
130
|
+
```js
|
|
131
|
+
import formatText, { htmlFormatters } from 'telegram-transformer';
|
|
132
|
+
import { MessageEntity } from 'typegram';
|
|
133
|
+
|
|
134
|
+
const text = 'Hello @username #awesome_hashtag';
|
|
135
|
+
const entities: MessageEntity[] = [
|
|
136
|
+
{ offset: 6, length: 9, type: 'mention' },
|
|
137
|
+
{ offset: 16, length: 16, type: 'hashtag' },
|
|
138
|
+
];
|
|
139
|
+
|
|
140
|
+
const formatters = {
|
|
141
|
+
mention: (entityText: string, entity: MessageEntity, text: string) => ({
|
|
142
|
+
before: '<awesome-mention>',
|
|
143
|
+
after: '</awesome-mention>',
|
|
144
|
+
text: entityText,
|
|
145
|
+
}),
|
|
146
|
+
hashtag: (entityText: string, entity: MessageEntity, text: string) => ({
|
|
147
|
+
before: '<span class="hashtag">',
|
|
148
|
+
after: '</span>',
|
|
149
|
+
text: entityText,
|
|
150
|
+
}),
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
const formatted = formatText(text, entities, { formatters });
|
|
154
|
+
|
|
155
|
+
console.log(formatted);
|
|
156
|
+
|
|
157
|
+
/*
|
|
158
|
+
{
|
|
159
|
+
text: 'Hello <awesome-mention>@username</awesome-mention> <span class="hashtag">#awesome_hashtag</span>',
|
|
160
|
+
entities: [
|
|
161
|
+
{ offset: 6, length: 44, type: 'mention' },
|
|
162
|
+
{ offset: 51, length: 45, type: 'hashtag' }
|
|
163
|
+
]
|
|
164
|
+
}
|
|
165
|
+
*/
|
|
166
|
+
```
|
package/lib/format.d.ts
CHANGED
package/lib/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,OAAO,EAAe,OAAO,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,MAAM,SACX,MAAM,aACF,aAAa,EAAE,YAChB,OAAO;;;CA2EjB,CAAC"}
|
package/lib/format.js
CHANGED
|
@@ -23,7 +23,8 @@ const format = (text, entities = [], options = constants_1.DEFAULT_OPTIONS) => {
|
|
|
23
23
|
let prevLengthChange = 0;
|
|
24
24
|
for (let i = 0; i < newEntities.length; i++) {
|
|
25
25
|
const entity = { ...newEntities[i] };
|
|
26
|
-
const formatter = formatters[entity.type] ||
|
|
26
|
+
const formatter = (formatters[entity.type] ||
|
|
27
|
+
formatters_1.defaultFormatter);
|
|
27
28
|
const isNotInRange = entity.offset < startFrom;
|
|
28
29
|
newEntities[i] = entity;
|
|
29
30
|
entity.offset -= startFrom;
|
|
@@ -49,8 +50,9 @@ const format = (text, entities = [], options = constants_1.DEFAULT_OPTIONS) => {
|
|
|
49
50
|
prevOffsetChange = offsetChange;
|
|
50
51
|
prevLengthChange = formatted.before.length + formatted.after.length;
|
|
51
52
|
offsetChange += formatted.before.length;
|
|
52
|
-
afterOffsetChange +=
|
|
53
|
-
|
|
53
|
+
afterOffsetChange +=
|
|
54
|
+
formatted.after.length + (formatted.text.length - entityText.length);
|
|
55
|
+
newText = `${beforeEntity}${formatted.before}${formatted.text}${formatted.after}${afterEntity}`;
|
|
54
56
|
if (i === entities.length - 1) {
|
|
55
57
|
entity.offset += prevOffsetChange;
|
|
56
58
|
entity.length += prevLengthChange;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "telegram-transformer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Telegram message transformer",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
"url": "git+ssh://git@github.com/ivanodintsov/telegram-transformer.git"
|
|
24
24
|
},
|
|
25
25
|
"bugs": {
|
|
26
|
-
"url": "https://github.com/ivanodintsov/
|
|
26
|
+
"url": "https://github.com/ivanodintsov/telegram-transformer"
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
|
29
29
|
"lib/**/*"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"typegram": "^
|
|
32
|
+
"typegram": "^5.2.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/jest": "^29.2.4",
|
package/lib/constants.d.ts
DELETED
package/lib/constants.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,OAAO,CAG7C,CAAC"}
|
package/lib/constants.js
DELETED
package/lib/formatters.d.ts
DELETED
package/lib/formatters.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,WAS9B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAgBxB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,cAsH5B,CAAC"}
|
package/lib/formatters.js
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.htmlFormatters = exports.formatters = exports.defaultFormatter = void 0;
|
|
4
|
-
const defaultFormatter = (entityText, entity, text) => {
|
|
5
|
-
const before = '';
|
|
6
|
-
const after = '';
|
|
7
|
-
return {
|
|
8
|
-
before,
|
|
9
|
-
after,
|
|
10
|
-
text: `${before}${entityText}${after}`,
|
|
11
|
-
};
|
|
12
|
-
};
|
|
13
|
-
exports.defaultFormatter = defaultFormatter;
|
|
14
|
-
exports.formatters = {
|
|
15
|
-
mention: exports.defaultFormatter,
|
|
16
|
-
hashtag: exports.defaultFormatter,
|
|
17
|
-
cashtag: exports.defaultFormatter,
|
|
18
|
-
bot_command: exports.defaultFormatter,
|
|
19
|
-
url: exports.defaultFormatter,
|
|
20
|
-
email: exports.defaultFormatter,
|
|
21
|
-
phone_number: exports.defaultFormatter,
|
|
22
|
-
bold: exports.defaultFormatter,
|
|
23
|
-
italic: exports.defaultFormatter,
|
|
24
|
-
underline: exports.defaultFormatter,
|
|
25
|
-
strikethrough: exports.defaultFormatter,
|
|
26
|
-
spoiler: exports.defaultFormatter,
|
|
27
|
-
code: exports.defaultFormatter,
|
|
28
|
-
pre: exports.defaultFormatter,
|
|
29
|
-
text_link: exports.defaultFormatter,
|
|
30
|
-
};
|
|
31
|
-
exports.htmlFormatters = {
|
|
32
|
-
...exports.formatters,
|
|
33
|
-
mention: (entityText, entity, text) => {
|
|
34
|
-
const before = `<a href='https://t.me/${entityText.substring(1)}'>`;
|
|
35
|
-
const after = '</a>';
|
|
36
|
-
return {
|
|
37
|
-
before,
|
|
38
|
-
after,
|
|
39
|
-
text: `${before}${entityText}${after}`,
|
|
40
|
-
};
|
|
41
|
-
},
|
|
42
|
-
hashtag: (entityText, entity, text) => {
|
|
43
|
-
const before = `<a href='${entityText}'>`;
|
|
44
|
-
const after = '</a>';
|
|
45
|
-
return {
|
|
46
|
-
before,
|
|
47
|
-
after,
|
|
48
|
-
text: `${before}${entityText}${after}`,
|
|
49
|
-
};
|
|
50
|
-
},
|
|
51
|
-
url: (entityText, entity, text) => {
|
|
52
|
-
const url = entityText.startsWith('http')
|
|
53
|
-
? entityText
|
|
54
|
-
: `http://${entityText}`;
|
|
55
|
-
const before = `<a href='${url}'>`;
|
|
56
|
-
const after = '</a>';
|
|
57
|
-
return {
|
|
58
|
-
before,
|
|
59
|
-
after,
|
|
60
|
-
text: `${before}${entityText}${after}`,
|
|
61
|
-
};
|
|
62
|
-
},
|
|
63
|
-
email: (entityText, entity, text) => {
|
|
64
|
-
const before = `<a href='mailto:${entityText}'>`;
|
|
65
|
-
const after = '</a>';
|
|
66
|
-
return {
|
|
67
|
-
before,
|
|
68
|
-
after,
|
|
69
|
-
text: `${before}${entityText}${after}`,
|
|
70
|
-
};
|
|
71
|
-
},
|
|
72
|
-
phone_number: (entityText, entity, text) => {
|
|
73
|
-
const before = `<a href='tel:${entityText}'>`;
|
|
74
|
-
const after = '</a>';
|
|
75
|
-
return {
|
|
76
|
-
before,
|
|
77
|
-
after,
|
|
78
|
-
text: `${before}${entityText}${after}`,
|
|
79
|
-
};
|
|
80
|
-
},
|
|
81
|
-
spoiler: (entityText, entity, text) => {
|
|
82
|
-
const before = `<span class='spoiler-hover'>`;
|
|
83
|
-
const after = '</span>';
|
|
84
|
-
return {
|
|
85
|
-
before,
|
|
86
|
-
after,
|
|
87
|
-
text: `${before}${entityText}${after}`,
|
|
88
|
-
};
|
|
89
|
-
},
|
|
90
|
-
text_link: (entityText, entity, text) => {
|
|
91
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
92
|
-
// @ts-ignore
|
|
93
|
-
const before = `<a href='${entity.url}'>`;
|
|
94
|
-
const after = '</a>';
|
|
95
|
-
return {
|
|
96
|
-
before,
|
|
97
|
-
after,
|
|
98
|
-
text: `${before}${entityText}${after}`,
|
|
99
|
-
};
|
|
100
|
-
},
|
|
101
|
-
bold: (entityText, entity, text) => {
|
|
102
|
-
const before = `<strong>`;
|
|
103
|
-
const after = '</strong>';
|
|
104
|
-
return {
|
|
105
|
-
before,
|
|
106
|
-
after,
|
|
107
|
-
text: `${before}${entityText}${after}`,
|
|
108
|
-
};
|
|
109
|
-
},
|
|
110
|
-
italic: (entityText, entity, text) => {
|
|
111
|
-
const before = `<i>`;
|
|
112
|
-
const after = '</i>';
|
|
113
|
-
return {
|
|
114
|
-
before,
|
|
115
|
-
after,
|
|
116
|
-
text: `${before}${entityText}${after}`,
|
|
117
|
-
};
|
|
118
|
-
},
|
|
119
|
-
underline: (entityText, entity, text) => {
|
|
120
|
-
const before = `<u>`;
|
|
121
|
-
const after = '</u>';
|
|
122
|
-
return {
|
|
123
|
-
before,
|
|
124
|
-
after,
|
|
125
|
-
text: `${before}${entityText}${after}`,
|
|
126
|
-
};
|
|
127
|
-
},
|
|
128
|
-
strikethrough: (entityText, entity, text) => {
|
|
129
|
-
const before = `<strike>`;
|
|
130
|
-
const after = '</strike>';
|
|
131
|
-
return {
|
|
132
|
-
before,
|
|
133
|
-
after,
|
|
134
|
-
text: `${before}${entityText}${after}`,
|
|
135
|
-
};
|
|
136
|
-
},
|
|
137
|
-
};
|
package/lib/types.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { MessageEntity } from 'typegram';
|
|
2
|
-
export type FormatterFn = (entityText: string, entity: MessageEntity, text: string) => {
|
|
3
|
-
text: string;
|
|
4
|
-
before: string;
|
|
5
|
-
after: string;
|
|
6
|
-
};
|
|
7
|
-
export type FormattersDict = Record<string, FormatterFn>;
|
|
8
|
-
export type Options = {
|
|
9
|
-
formatters?: FormattersDict;
|
|
10
|
-
startFrom?: number;
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=types.d.ts.map
|
package/lib/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,WAAW,GAAG,CACxB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,KACT;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEzD,MAAM,MAAM,OAAO,GAAG;IAAE,UAAU,CAAC,EAAE,cAAc,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
package/lib/types.js
DELETED