@sunafterrainwm/telegram-entities-builder 0.1.2 → 0.2.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/dist/index.cjs +365 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +247 -0
- package/dist/index.d.mts +186 -184
- package/dist/index.mjs +325 -345
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -3
- package/src/cjs.cts +3 -0
- package/src/index.ts +3 -1
- package/dist/index.d.ts +0 -240
- package/dist/index.js +0 -385
- package/dist/index.js.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type * as TT from '@grammyjs/types';\n\ntype Telegram = TT.ApiMethods<never>;\ntype ApiParameters<T extends keyof Telegram> = Parameters<Telegram[T]>[0];\n\n/**\n * Represents a Telegram MessageEntity without the offset and length properties.\n */\nexport type PartialEntity<E extends TT.MessageEntity = TT.MessageEntity> = Omit<E, 'offset' | 'length'>;\n/**\n * Represents any draft entity that can be used before calculating the final offset and length.\n */\nexport type AnyDraftEntity =\n\t| PartialEntity<TT.MessageEntity.CommonMessageEntity>\n\t| PartialEntity<TT.MessageEntity.CustomEmojiMessageEntity>\n\t| PartialEntity<TT.MessageEntity.PreMessageEntity>\n\t| PartialEntity<TT.MessageEntity.TextLinkMessageEntity>\n\t| PartialEntity<TT.MessageEntity.TextMentionMessageEntity>;\n\n/**\n * Represents a segment of text which may contain one or multiple entities.\n */\nexport type TextSegment = TextSegment.SingleTextSegment | TextSegment.MultiTextSegment;\n\n/**\n * Namespace for TextSegment types.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport declare namespace TextSegment {\n\tinterface SingleTextSegment {\n\t\ttext: string;\n\t\tentity?: AnyDraftEntity;\n\t\tentities?: never;\n\t}\n\n\tinterface MultiTextSegment {\n\t\ttext: string;\n\t\tentity?: never;\n\t\tentities: AnyDraftEntity[];\n\t}\n}\n\ntype PartialRequired<T, REQUIRED extends keyof T, OPTIONAL extends keyof T> = Required<Pick<T, REQUIRED>> &\n\tPick<T, OPTIONAL>;\n\n/**\n * Base interface for entity builders, providing fundamental operations for appending text and managing builder state.\n */\nexport interface IEntityBuilderBase {\n\t/**\n\t * Appends plain text.\n\t */\n\taddText(text: string): this;\n\t/**\n\t * Appends text with a single entity.\n\t */\n\taddTextEntity(text: string, entity: AnyDraftEntity): this;\n\t/**\n\t * Appends text with multiple entities.\n\t */\n\taddTextEntities(text: string, entities: AnyDraftEntity[]): this;\n\t/**\n\t * Appends a list of text segments.\n\t */\n\taddTextSegmentList(segments: TextSegment[]): this;\n\n\t/**\n\t * Creates a deep clone of this builder.\n\t */\n\tclone(): IEntityBuilderBase;\n\t/**\n\t * Creates a child builder that forks from this instance.\n\t */\n\tfork(): IEntityBuilderBase;\n\t/**\n\t * Merges a forked builder back into its parent.\n\t */\n\tmerge(wrapperEntities?: AnyDraftEntity[]): void;\n}\n\n/**\n * Advanced entity builder interface supporting string manipulation, entity sorting, and payload generation.\n */\nexport interface IEntityBuilder extends IEntityBuilderBase {\n\t/**\n\t * Trims or slices the string in-place, and automatically recalculates, filters, or truncates the affected entities.\n\t */\n\tsliceInplace(start?: number, end?: number): this;\n\t/**\n\t * Returns a new sliced instance.\n\t */\n\tslice(start?: number, end?: number): IEntityBuilder;\n\t/**\n\t * Removes leading whitespace in-place.\n\t */\n\ttrimStart(): this;\n\t/**\n\t * Removes trailing whitespace in-place.\n\t */\n\ttrimEnd(): this;\n\t/**\n\t * Removes leading and trailing whitespace in-place.\n\t */\n\ttrim(): this;\n\n\t/**\n\t * Sorts the entities based on their offset and length.\n\t */\n\tsortEntities(): this;\n\n\t/**\n\t * Builds the payload for sending a text message.\n\t */\n\tbuildTextPayload(): PartialRequired<ApiParameters<'sendMessage'>, 'text', 'entities' | 'link_preview_options'>;\n\t/**\n\t * Builds the payload for sending a document with a caption.\n\t */\n\tbuildCaptionPayload(): PartialRequired<ApiParameters<'sendDocument'>, 'caption', 'caption_entities'>;\n\t/**\n\t * Builds the payload for inline query results.\n\t */\n\tbuildInlinePayload(): PartialRequired<\n\t\tTT.InputTextMessageContent,\n\t\t'message_text',\n\t\t'entities' | 'link_preview_options'\n\t>;\n\n\tclone(): IEntityBuilder;\n\tfork(): IEntityBuilder;\n}\n\n/**\n * Main implementation of IEntityBuilder that eagerly evaluates and stores entities.\n */\nexport class EntityBuilder implements IEntityBuilder {\n\t#text = '';\n\t#entities: TT.MessageEntity[] = [];\n\t#parent?: EntityBuilder;\n\n\tpublic addText(text: string): this {\n\t\tthis.#text += text;\n\t\treturn this;\n\t}\n\n\tpublic addTextEntity(text: string, entity: AnyDraftEntity): this {\n\t\ttext = String(text);\n\t\tif (text.length > 0) {\n\t\t\tthis.#entities.push({\n\t\t\t\t...entity,\n\t\t\t\toffset: this.#text.length,\n\t\t\t\tlength: text.length,\n\t\t\t});\n\t\t\tthis.#text += text;\n\t\t}\n\t\treturn this;\n\t}\n\n\tpublic addTextEntities(text: string, entities: AnyDraftEntity[]): this {\n\t\tfor (const entity of entities) {\n\t\t\tthis.#entities.push({\n\t\t\t\t...entity,\n\t\t\t\toffset: this.#text.length,\n\t\t\t\tlength: text.length,\n\t\t\t} as TT.MessageEntity);\n\t\t}\n\t\tthis.#text += text;\n\t\treturn this;\n\t}\n\n\tpublic addTextSegmentList(segments: TextSegment[]): this {\n\t\tfor (const segment of segments) {\n\t\t\tif (segment.entity) {\n\t\t\t\tthis.addTextEntity(segment.text, segment.entity);\n\t\t\t} else if (segment.entities) {\n\t\t\t\tthis.addTextEntities(segment.text, segment.entities);\n\t\t\t} else {\n\t\t\t\tthis.#text += segment.text;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\tpublic buildTextPayload() {\n\t\treturn {\n\t\t\ttext: this.#text,\n\t\t\tentities: this.#entities,\n\t\t};\n\t}\n\n\tpublic buildCaptionPayload() {\n\t\treturn {\n\t\t\tcaption: this.#text,\n\t\t\tcaption_entities: this.#entities as TT.MessageEntity[],\n\t\t};\n\t}\n\n\tpublic buildInlinePayload() {\n\t\treturn {\n\t\t\tmessage_text: this.#text,\n\t\t\tentities: this.#entities,\n\t\t};\n\t}\n\n\tpublic sortEntities() {\n\t\tthis.#entities.sort((a, b) => a.offset - b.offset || a.length - b.length);\n\t\treturn this;\n\t}\n\n\tpublic sliceInplace(start?: number, end?: number): this {\n\t\tif (!start && !end) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst len = this.#text.length;\n\n\t\tconst s = start === undefined ? 0 : start < 0 ? Math.max(len + start, 0) : Math.min(start, len);\n\t\tconst e = end === undefined ? len : end < 0 ? Math.max(len + end, 0) : Math.min(end, len);\n\n\t\tif (s >= e) {\n\t\t\tthis.#text = '';\n\t\t\tthis.#entities = [];\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.#text = this.#text.slice(s, e);\n\t\tthis.#entities = this.#entities.flatMap<TT.MessageEntity>((entity) => {\n\t\t\t// 計算 Entity 區間與保留文字區間 [s, e) 的交集\n\t\t\tconst overlapStart = Math.max(s, entity.offset);\n\t\t\tconst overlapEnd = Math.min(e, entity.offset + entity.length);\n\n\t\t\t// 若交集長度大於 0,代表此 Entity 仍有部分存活於新字串中\n\t\t\tif (overlapStart < overlapEnd) {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\t...entity,\n\t\t\t\t\t\toffset: overlapStart - s,\n\t\t\t\t\t\tlength: overlapEnd - overlapStart,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\n\t\t\t// 剔除沒有交集的 Entity\n\t\t\treturn [];\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tpublic slice(start?: number, end?: number): EntityBuilder {\n\t\treturn this.clone().sliceInplace(start, end);\n\t}\n\n\tpublic trimStart(): this {\n\t\tconst trimmedLength = this.#text.trimStart().length;\n\t\tconst diff = this.#text.length - trimmedLength;\n\t\tif (diff > 0) {\n\t\t\tthis.sliceInplace(diff);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic trimEnd(): this {\n\t\tconst trimmedLength = this.#text.trimEnd().length;\n\t\tif (trimmedLength < this.#text.length) {\n\t\t\tthis.sliceInplace(0, trimmedLength);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic trim(): this {\n\t\tconst originalLength = this.#text.length;\n\n\t\t// Calculate the number of leading whitespace characters\n\t\tconst startOffset = originalLength - this.#text.trimStart().length;\n\t\t// Calculate the effective length of the string after removing trailing whitespace (i.e., end index)\n\t\tconst endOffset = this.#text.trimEnd().length;\n\n\t\tif (startOffset > 0 || endOffset < originalLength) {\n\t\t\tthis.sliceInplace(startOffset, endOffset);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic clone(): EntityBuilder {\n\t\tconst instance = new EntityBuilder();\n\t\tinstance.#text = this.#text;\n\t\tinstance.#entities = structuredClone(this.#entities);\n\t\treturn instance;\n\t}\n\n\tpublic fork(): EntityBuilder {\n\t\tconst instance = new EntityBuilder();\n\t\tinstance.#parent = this;\n\t\treturn instance;\n\t}\n\n\t/**\n\t * Merges a payload text and its entities into this builder, optionally wrapping them with additional entities.\n\t */\n\tpublic mergePayload(text: string, entities: TT.MessageEntity[], wrappers: AnyDraftEntity[] = []): void {\n\t\tconst startOffset = this.#text.length;\n\t\tthis.#text += text;\n\n\t\tthis.#entities.push(\n\t\t\t// 1. Mount Wrapper (length covers the entire sub-block)\n\t\t\t...wrappers.map(\n\t\t\t\t(w) =>\n\t\t\t\t\t({\n\t\t\t\t\t\t...w,\n\t\t\t\t\t\toffset: startOffset,\n\t\t\t\t\t\tlength: text.length,\n\t\t\t\t\t}) as TT.MessageEntity,\n\t\t\t),\n\t\t\t// 2. Offset the entities of the child node itself\n\t\t\t...entities.map((e) => ({\n\t\t\t\t...e,\n\t\t\t\toffset: e.offset + startOffset,\n\t\t\t})),\n\t\t);\n\t}\n\n\tpublic merge(wrapperEntities: AnyDraftEntity[] = []): void {\n\t\tif (!this.#parent) {\n\t\t\tthrow new Error('Cannot merge: This builder is not a fork or has already been merged.');\n\t\t}\n\t\tthis.#parent.mergePayload(this.#text, this.#entities, wrapperEntities);\n\t\tthis.#parent = undefined;\n\t}\n}\n\n/**\n * A lazy implementation of IEntityBuilderBase that stores segments and flattens them into an EntityBuilder only when needed.\n */\nexport class LazyEntityBuilder implements IEntityBuilderBase {\n\t#segments: TextSegment[] = [];\n\t#parent?: LazyEntityBuilder;\n\n\t/**\n\t * Flattens the lazy segments into a new EntityBuilder instance.\n\t */\n\tpublic flatten(): EntityBuilder {\n\t\tconst builder = new EntityBuilder();\n\t\tbuilder.addTextSegmentList(this.#segments);\n\t\treturn builder;\n\t}\n\n\tpublic addText(text: string): this {\n\t\tthis.#segments.push({ text });\n\t\treturn this;\n\t}\n\n\tpublic addTextEntity(text: string, entity: AnyDraftEntity): this {\n\t\tthis.#segments.push({ text, entity });\n\t\treturn this;\n\t}\n\n\tpublic addTextEntities(text: string, entities: AnyDraftEntity[]): this {\n\t\tthis.#segments.push({ text, entities });\n\t\treturn this;\n\t}\n\n\tpublic addTextSegmentList(segments: TextSegment[]): this {\n\t\tthis.#segments.push(...segments);\n\t\treturn this;\n\t}\n\n\tpublic clone(): LazyEntityBuilder {\n\t\tconst instance = new LazyEntityBuilder();\n\t\tinstance.#segments = structuredClone(this.#segments);\n\t\treturn instance;\n\t}\n\n\tpublic fork(): LazyEntityBuilder {\n\t\tconst instance = new LazyEntityBuilder();\n\t\tinstance.#parent = this;\n\t\treturn instance;\n\t}\n\n\tpublic merge(wrapperEntities: AnyDraftEntity[] = []): void {\n\t\tif (!this.#parent) {\n\t\t\tthrow new Error('Cannot merge: This builder is not a fork or has already been merged.');\n\t\t}\n\n\t\tconst wrappedSegments: TextSegment[] = this.#segments.map((seg) => {\n\t\t\tif (seg.text.length === 0) {\n\t\t\t\t// Skip empty strings directly\n\t\t\t\treturn seg;\n\t\t\t}\n\n\t\t\t// Collect all original entities of this segment\n\t\t\tconst existing = seg.entities ? [...seg.entities] : seg.entity ? [seg.entity] : [];\n\n\t\t\treturn {\n\t\t\t\ttext: seg.text,\n\t\t\t\tentities: [...existing, ...wrapperEntities],\n\t\t\t};\n\t\t});\n\n\t\tthis.#parent.addTextSegmentList(wrappedSegments);\n\t\tthis.#parent = undefined;\n\t}\n}\n\n/**\n * Abstract proxy class that delegates all IEntityBuilder operations to an underlying builder instance.\n */\nexport abstract class EntityBuilderProxy<THIS extends IEntityBuilder = IEntityBuilder> implements IEntityBuilder {\n\tprotected constructor(protected _entities: IEntityBuilder) {}\n\n\tpublic get entities(): IEntityBuilder {\n\t\treturn this._entities;\n\t}\n\n\tpublic addText(...args: Parameters<IEntityBuilder['addText']>): this {\n\t\tthis._entities.addText(...args);\n\t\treturn this;\n\t}\n\n\tpublic addTextEntity(...args: Parameters<IEntityBuilder['addTextEntity']>): this {\n\t\tthis._entities.addTextEntity(...args);\n\t\treturn this;\n\t}\n\n\tpublic addTextEntities(...args: Parameters<IEntityBuilder['addTextEntities']>): this {\n\t\tthis._entities.addTextEntities(...args);\n\t\treturn this;\n\t}\n\n\tpublic addTextSegmentList(...args: Parameters<IEntityBuilder['addTextSegmentList']>): this {\n\t\tthis._entities.addTextSegmentList(...args);\n\t\treturn this;\n\t}\n\n\tpublic sliceInplace(...args: Parameters<IEntityBuilder['sliceInplace']>): this {\n\t\tthis._entities.sliceInplace(...args);\n\t\treturn this;\n\t}\n\n\tpublic slice(...args: Parameters<IEntityBuilder['slice']>): THIS {\n\t\treturn this.fork().sliceInplace(...args) as THIS;\n\t}\n\n\tpublic trim(): this {\n\t\tthis._entities.trim();\n\t\treturn this;\n\t}\n\n\tpublic trimStart(): this {\n\t\tthis._entities.trimStart();\n\t\treturn this;\n\t}\n\n\tpublic trimEnd(): this {\n\t\tthis._entities.trimEnd();\n\t\treturn this;\n\t}\n\n\tpublic sortEntities(): this {\n\t\tthis._entities.sortEntities();\n\t\treturn this;\n\t}\n\n\tpublic clone(): THIS {\n\t\tconst newInstance = Object.create(this.constructor.prototype) as EntityBuilderProxy;\n\t\tnewInstance._entities.clone();\n\t\treturn newInstance as IEntityBuilder as THIS;\n\t}\n\n\tpublic fork() {\n\t\treturn this._entities.fork();\n\t}\n\n\tpublic merge(...args: Parameters<IEntityBuilder['merge']>) {\n\t\tthis._entities.merge(...args);\n\t}\n\n\tpublic buildTextPayload() {\n\t\treturn this._entities.buildTextPayload();\n\t}\n\n\tpublic buildCaptionPayload() {\n\t\tconst { text, entities } = this.buildTextPayload();\n\t\treturn {\n\t\t\tcaption: text,\n\t\t\tcaption_entities: entities,\n\t\t};\n\t}\n\n\tpublic buildInlinePayload() {\n\t\tconst { text, entities, link_preview_options } = this.buildTextPayload();\n\t\treturn {\n\t\t\tmessage_text: text,\n\t\t\tentities: entities,\n\t\t\tlink_preview_options,\n\t\t};\n\t}\n}\n\nfunction upperFirst(input: string) {\n\treturn input.slice(0, 1).toUpperCase() + input.slice(1);\n}\n\n/**\n * Escapes a string to be used as a valid tag by removing or replacing invalid characters.\n */\nexport function escapeTag(input: string) {\n\t// return input.replace(/[^\\p{L}\\p{N}_]/gu, \"\");\n\treturn input\n\t\t.replaceAll(/[\"'′]/g, '') // It's => Its\n\t\t.split(/[^\\p{L}\\p{N}_]/gu)\n\t\t.map((s) => upperFirst(s))\n\t\t.join('');\n}\n\nconst SymbolMessageComposer = Symbol('MessageComposer');\n\n/**\n * A high-level composer that wraps an IEntityBuilder and provides additional features like tags and link preview options.\n */\nexport class MessageComposer extends EntityBuilderProxy<MessageComposer> {\n\tprotected [SymbolMessageComposer] = true as const;\n\n\t#upperTags = new Set<string>();\n\t#tags: string[] = [];\n\n\t/**\n\t * Options for link preview generation.\n\t */\n\tpublic linkPreviewOptions?: TT.LinkPreviewOptions;\n\n\tpublic constructor(entities?: IEntityBuilder & { [SymbolMessageComposer]?: never }) {\n\t\tif (entities && SymbolMessageComposer in entities) {\n\t\t\tthrow new Error('Cannot nest MessageComposer inside MessageComposer');\n\t\t}\n\t\tsuper(entities ?? new EntityBuilder());\n\t}\n\n\t/**\n\t * Gets the current list of tags.\n\t */\n\tpublic get tags(): string[] {\n\t\treturn [...this.#tags];\n\t}\n\n\t/**\n\t * Adds one or more tags, escaping them and avoiding duplicates.\n\t */\n\tpublic addTags(...tags: string[]) {\n\t\tfor (let tag of tags) {\n\t\t\ttag = escapeTag(tag);\n\t\t\tconst upperTag = tag.toUpperCase();\n\t\t\tif (this.#upperTags.has(upperTag)) {\n\t\t\t\t// Deduplicate\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.#upperTags.add(upperTag);\n\t\t\tthis.#tags.push(tag);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tpublic override buildTextPayload() {\n\t\tconst entities = this.entities.clone();\n\n\t\tentities.trimEnd().addText('\\n\\n');\n\n\t\tfor (const tag of this.tags) {\n\t\t\tentities.addTextEntity(`#${tag}`, { type: 'hashtag' }).addText(' ');\n\t\t}\n\n\t\tentities.trimEnd();\n\n\t\treturn {\n\t\t\t...entities.buildTextPayload(),\n\t\t\tlink_preview_options: this.linkPreviewOptions,\n\t\t};\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#text","#entities","#parent","#segments","#tags","#upperTags"],"sources":["../src/index.ts"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sunafterrainwm/telegram-entities-builder",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "sunafterrainwm",
|
|
6
6
|
"email": "sunafterrainwm@gmail.com"
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"dist",
|
|
17
17
|
"src"
|
|
18
18
|
],
|
|
19
|
+
"type": "module",
|
|
19
20
|
"main": "dist/index.cjs",
|
|
20
21
|
"module": "dist/index.mjs",
|
|
21
22
|
"types": "dist/index.d.cts",
|
|
@@ -43,6 +44,8 @@
|
|
|
43
44
|
"@eslint/js": "^9.17.0",
|
|
44
45
|
"@grammyjs/types": "^3.20.0",
|
|
45
46
|
"@stylistic/eslint-plugin": "^2.12.1",
|
|
47
|
+
"@swc/core": "^1.15.40",
|
|
48
|
+
"@swc/jest": "^0.2.39",
|
|
46
49
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
47
50
|
"@types/jest": "^30.0.0",
|
|
48
51
|
"@types/lodash-es": "^4.17.12",
|
|
@@ -55,7 +58,7 @@
|
|
|
55
58
|
"jest": "^29.7.0",
|
|
56
59
|
"lint-staged": "^17.0.7",
|
|
57
60
|
"ts-jest": "^29.4.11",
|
|
58
|
-
"
|
|
61
|
+
"tsdown": "^0.22.2",
|
|
59
62
|
"typescript": "^5.8.3",
|
|
60
63
|
"typescript-eslint": "^8.18.1"
|
|
61
64
|
},
|
|
@@ -66,7 +69,7 @@
|
|
|
66
69
|
"node": ">=18"
|
|
67
70
|
},
|
|
68
71
|
"scripts": {
|
|
69
|
-
"build": "
|
|
72
|
+
"build": "tsdown",
|
|
70
73
|
"lint": "eslint . --fix",
|
|
71
74
|
"test": "jest"
|
|
72
75
|
}
|
package/src/cjs.cts
ADDED
package/src/index.ts
CHANGED
|
@@ -533,7 +533,7 @@ export class MessageComposer extends EntityBuilderProxy<MessageComposer> {
|
|
|
533
533
|
|
|
534
534
|
public constructor(entities?: IEntityBuilder & { [SymbolMessageComposer]?: never }) {
|
|
535
535
|
if (entities && SymbolMessageComposer in entities) {
|
|
536
|
-
throw new
|
|
536
|
+
throw new TypeError('Cannot nest MessageComposer inside MessageComposer');
|
|
537
537
|
}
|
|
538
538
|
super(entities ?? new EntityBuilder());
|
|
539
539
|
}
|
|
@@ -580,3 +580,5 @@ export class MessageComposer extends EntityBuilderProxy<MessageComposer> {
|
|
|
580
580
|
};
|
|
581
581
|
}
|
|
582
582
|
}
|
|
583
|
+
|
|
584
|
+
export default MessageComposer;
|
package/dist/index.d.ts
DELETED
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import * as TT from '@grammyjs/types';
|
|
2
|
-
|
|
3
|
-
type Telegram = TT.ApiMethods<never>;
|
|
4
|
-
type ApiParameters<T extends keyof Telegram> = Parameters<Telegram[T]>[0];
|
|
5
|
-
/**
|
|
6
|
-
* Represents a Telegram MessageEntity without the offset and length properties.
|
|
7
|
-
*/
|
|
8
|
-
type PartialEntity<E extends TT.MessageEntity = TT.MessageEntity> = Omit<E, 'offset' | 'length'>;
|
|
9
|
-
/**
|
|
10
|
-
* Represents any draft entity that can be used before calculating the final offset and length.
|
|
11
|
-
*/
|
|
12
|
-
type AnyDraftEntity = PartialEntity<TT.MessageEntity.CommonMessageEntity> | PartialEntity<TT.MessageEntity.CustomEmojiMessageEntity> | PartialEntity<TT.MessageEntity.PreMessageEntity> | PartialEntity<TT.MessageEntity.TextLinkMessageEntity> | PartialEntity<TT.MessageEntity.TextMentionMessageEntity>;
|
|
13
|
-
/**
|
|
14
|
-
* Represents a segment of text which may contain one or multiple entities.
|
|
15
|
-
*/
|
|
16
|
-
type TextSegment = TextSegment.SingleTextSegment | TextSegment.MultiTextSegment;
|
|
17
|
-
/**
|
|
18
|
-
* Namespace for TextSegment types.
|
|
19
|
-
*/
|
|
20
|
-
declare namespace TextSegment {
|
|
21
|
-
interface SingleTextSegment {
|
|
22
|
-
text: string;
|
|
23
|
-
entity?: AnyDraftEntity;
|
|
24
|
-
entities?: never;
|
|
25
|
-
}
|
|
26
|
-
interface MultiTextSegment {
|
|
27
|
-
text: string;
|
|
28
|
-
entity?: never;
|
|
29
|
-
entities: AnyDraftEntity[];
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
type PartialRequired<T, REQUIRED extends keyof T, OPTIONAL extends keyof T> = Required<Pick<T, REQUIRED>> & Pick<T, OPTIONAL>;
|
|
33
|
-
/**
|
|
34
|
-
* Base interface for entity builders, providing fundamental operations for appending text and managing builder state.
|
|
35
|
-
*/
|
|
36
|
-
interface IEntityBuilderBase {
|
|
37
|
-
/**
|
|
38
|
-
* Appends plain text.
|
|
39
|
-
*/
|
|
40
|
-
addText(text: string): this;
|
|
41
|
-
/**
|
|
42
|
-
* Appends text with a single entity.
|
|
43
|
-
*/
|
|
44
|
-
addTextEntity(text: string, entity: AnyDraftEntity): this;
|
|
45
|
-
/**
|
|
46
|
-
* Appends text with multiple entities.
|
|
47
|
-
*/
|
|
48
|
-
addTextEntities(text: string, entities: AnyDraftEntity[]): this;
|
|
49
|
-
/**
|
|
50
|
-
* Appends a list of text segments.
|
|
51
|
-
*/
|
|
52
|
-
addTextSegmentList(segments: TextSegment[]): this;
|
|
53
|
-
/**
|
|
54
|
-
* Creates a deep clone of this builder.
|
|
55
|
-
*/
|
|
56
|
-
clone(): IEntityBuilderBase;
|
|
57
|
-
/**
|
|
58
|
-
* Creates a child builder that forks from this instance.
|
|
59
|
-
*/
|
|
60
|
-
fork(): IEntityBuilderBase;
|
|
61
|
-
/**
|
|
62
|
-
* Merges a forked builder back into its parent.
|
|
63
|
-
*/
|
|
64
|
-
merge(wrapperEntities?: AnyDraftEntity[]): void;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Advanced entity builder interface supporting string manipulation, entity sorting, and payload generation.
|
|
68
|
-
*/
|
|
69
|
-
interface IEntityBuilder extends IEntityBuilderBase {
|
|
70
|
-
/**
|
|
71
|
-
* Trims or slices the string in-place, and automatically recalculates, filters, or truncates the affected entities.
|
|
72
|
-
*/
|
|
73
|
-
sliceInplace(start?: number, end?: number): this;
|
|
74
|
-
/**
|
|
75
|
-
* Returns a new sliced instance.
|
|
76
|
-
*/
|
|
77
|
-
slice(start?: number, end?: number): IEntityBuilder;
|
|
78
|
-
/**
|
|
79
|
-
* Removes leading whitespace in-place.
|
|
80
|
-
*/
|
|
81
|
-
trimStart(): this;
|
|
82
|
-
/**
|
|
83
|
-
* Removes trailing whitespace in-place.
|
|
84
|
-
*/
|
|
85
|
-
trimEnd(): this;
|
|
86
|
-
/**
|
|
87
|
-
* Removes leading and trailing whitespace in-place.
|
|
88
|
-
*/
|
|
89
|
-
trim(): this;
|
|
90
|
-
/**
|
|
91
|
-
* Sorts the entities based on their offset and length.
|
|
92
|
-
*/
|
|
93
|
-
sortEntities(): this;
|
|
94
|
-
/**
|
|
95
|
-
* Builds the payload for sending a text message.
|
|
96
|
-
*/
|
|
97
|
-
buildTextPayload(): PartialRequired<ApiParameters<'sendMessage'>, 'text', 'entities' | 'link_preview_options'>;
|
|
98
|
-
/**
|
|
99
|
-
* Builds the payload for sending a document with a caption.
|
|
100
|
-
*/
|
|
101
|
-
buildCaptionPayload(): PartialRequired<ApiParameters<'sendDocument'>, 'caption', 'caption_entities'>;
|
|
102
|
-
/**
|
|
103
|
-
* Builds the payload for inline query results.
|
|
104
|
-
*/
|
|
105
|
-
buildInlinePayload(): PartialRequired<TT.InputTextMessageContent, 'message_text', 'entities' | 'link_preview_options'>;
|
|
106
|
-
clone(): IEntityBuilder;
|
|
107
|
-
fork(): IEntityBuilder;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Main implementation of IEntityBuilder that eagerly evaluates and stores entities.
|
|
111
|
-
*/
|
|
112
|
-
declare class EntityBuilder implements IEntityBuilder {
|
|
113
|
-
#private;
|
|
114
|
-
addText(text: string): this;
|
|
115
|
-
addTextEntity(text: string, entity: AnyDraftEntity): this;
|
|
116
|
-
addTextEntities(text: string, entities: AnyDraftEntity[]): this;
|
|
117
|
-
addTextSegmentList(segments: TextSegment[]): this;
|
|
118
|
-
buildTextPayload(): {
|
|
119
|
-
text: string;
|
|
120
|
-
entities: TT.MessageEntity[];
|
|
121
|
-
};
|
|
122
|
-
buildCaptionPayload(): {
|
|
123
|
-
caption: string;
|
|
124
|
-
caption_entities: TT.MessageEntity[];
|
|
125
|
-
};
|
|
126
|
-
buildInlinePayload(): {
|
|
127
|
-
message_text: string;
|
|
128
|
-
entities: TT.MessageEntity[];
|
|
129
|
-
};
|
|
130
|
-
sortEntities(): this;
|
|
131
|
-
sliceInplace(start?: number, end?: number): this;
|
|
132
|
-
slice(start?: number, end?: number): EntityBuilder;
|
|
133
|
-
trimStart(): this;
|
|
134
|
-
trimEnd(): this;
|
|
135
|
-
trim(): this;
|
|
136
|
-
clone(): EntityBuilder;
|
|
137
|
-
fork(): EntityBuilder;
|
|
138
|
-
/**
|
|
139
|
-
* Merges a payload text and its entities into this builder, optionally wrapping them with additional entities.
|
|
140
|
-
*/
|
|
141
|
-
mergePayload(text: string, entities: TT.MessageEntity[], wrappers?: AnyDraftEntity[]): void;
|
|
142
|
-
merge(wrapperEntities?: AnyDraftEntity[]): void;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* A lazy implementation of IEntityBuilderBase that stores segments and flattens them into an EntityBuilder only when needed.
|
|
146
|
-
*/
|
|
147
|
-
declare class LazyEntityBuilder implements IEntityBuilderBase {
|
|
148
|
-
#private;
|
|
149
|
-
/**
|
|
150
|
-
* Flattens the lazy segments into a new EntityBuilder instance.
|
|
151
|
-
*/
|
|
152
|
-
flatten(): EntityBuilder;
|
|
153
|
-
addText(text: string): this;
|
|
154
|
-
addTextEntity(text: string, entity: AnyDraftEntity): this;
|
|
155
|
-
addTextEntities(text: string, entities: AnyDraftEntity[]): this;
|
|
156
|
-
addTextSegmentList(segments: TextSegment[]): this;
|
|
157
|
-
clone(): LazyEntityBuilder;
|
|
158
|
-
fork(): LazyEntityBuilder;
|
|
159
|
-
merge(wrapperEntities?: AnyDraftEntity[]): void;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Abstract proxy class that delegates all IEntityBuilder operations to an underlying builder instance.
|
|
163
|
-
*/
|
|
164
|
-
declare abstract class EntityBuilderProxy<THIS extends IEntityBuilder = IEntityBuilder> implements IEntityBuilder {
|
|
165
|
-
protected _entities: IEntityBuilder;
|
|
166
|
-
protected constructor(_entities: IEntityBuilder);
|
|
167
|
-
get entities(): IEntityBuilder;
|
|
168
|
-
addText(...args: Parameters<IEntityBuilder['addText']>): this;
|
|
169
|
-
addTextEntity(...args: Parameters<IEntityBuilder['addTextEntity']>): this;
|
|
170
|
-
addTextEntities(...args: Parameters<IEntityBuilder['addTextEntities']>): this;
|
|
171
|
-
addTextSegmentList(...args: Parameters<IEntityBuilder['addTextSegmentList']>): this;
|
|
172
|
-
sliceInplace(...args: Parameters<IEntityBuilder['sliceInplace']>): this;
|
|
173
|
-
slice(...args: Parameters<IEntityBuilder['slice']>): THIS;
|
|
174
|
-
trim(): this;
|
|
175
|
-
trimStart(): this;
|
|
176
|
-
trimEnd(): this;
|
|
177
|
-
sortEntities(): this;
|
|
178
|
-
clone(): THIS;
|
|
179
|
-
fork(): IEntityBuilder;
|
|
180
|
-
merge(...args: Parameters<IEntityBuilder['merge']>): void;
|
|
181
|
-
buildTextPayload(): PartialRequired<{
|
|
182
|
-
business_connection_id?: string;
|
|
183
|
-
chat_id: number | string;
|
|
184
|
-
message_thread_id?: number;
|
|
185
|
-
text: string;
|
|
186
|
-
parse_mode?: TT.ParseMode;
|
|
187
|
-
entities?: TT.MessageEntity[];
|
|
188
|
-
link_preview_options?: TT.LinkPreviewOptions;
|
|
189
|
-
disable_notification?: boolean;
|
|
190
|
-
protect_content?: boolean;
|
|
191
|
-
allow_paid_broadcast?: boolean;
|
|
192
|
-
message_effect_id?: string;
|
|
193
|
-
reply_parameters?: TT.ReplyParameters;
|
|
194
|
-
reply_markup?: TT.InlineKeyboardMarkup | TT.ReplyKeyboardMarkup | TT.ReplyKeyboardRemove | TT.ForceReply;
|
|
195
|
-
reply_to_message_id?: number;
|
|
196
|
-
}, "text", "entities" | "link_preview_options">;
|
|
197
|
-
buildCaptionPayload(): {
|
|
198
|
-
caption: string;
|
|
199
|
-
caption_entities: TT.MessageEntity[] | undefined;
|
|
200
|
-
};
|
|
201
|
-
buildInlinePayload(): {
|
|
202
|
-
message_text: string;
|
|
203
|
-
entities: TT.MessageEntity[] | undefined;
|
|
204
|
-
link_preview_options: TT.LinkPreviewOptions | undefined;
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Escapes a string to be used as a valid tag by removing or replacing invalid characters.
|
|
209
|
-
*/
|
|
210
|
-
declare function escapeTag(input: string): string;
|
|
211
|
-
declare const SymbolMessageComposer: unique symbol;
|
|
212
|
-
/**
|
|
213
|
-
* A high-level composer that wraps an IEntityBuilder and provides additional features like tags and link preview options.
|
|
214
|
-
*/
|
|
215
|
-
declare class MessageComposer extends EntityBuilderProxy<MessageComposer> {
|
|
216
|
-
#private;
|
|
217
|
-
protected [SymbolMessageComposer]: true;
|
|
218
|
-
/**
|
|
219
|
-
* Options for link preview generation.
|
|
220
|
-
*/
|
|
221
|
-
linkPreviewOptions?: TT.LinkPreviewOptions;
|
|
222
|
-
constructor(entities?: IEntityBuilder & {
|
|
223
|
-
[SymbolMessageComposer]?: never;
|
|
224
|
-
});
|
|
225
|
-
/**
|
|
226
|
-
* Gets the current list of tags.
|
|
227
|
-
*/
|
|
228
|
-
get tags(): string[];
|
|
229
|
-
/**
|
|
230
|
-
* Adds one or more tags, escaping them and avoiding duplicates.
|
|
231
|
-
*/
|
|
232
|
-
addTags(...tags: string[]): this;
|
|
233
|
-
buildTextPayload(): {
|
|
234
|
-
link_preview_options: TT.LinkPreviewOptions | undefined;
|
|
235
|
-
text: string;
|
|
236
|
-
entities?: TT.MessageEntity[] | undefined;
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
export { type AnyDraftEntity, EntityBuilder, EntityBuilderProxy, type IEntityBuilder, type IEntityBuilderBase, LazyEntityBuilder, MessageComposer, type PartialEntity, TextSegment, escapeTag };
|