1 line
5.8 KiB
Plaintext
1 line
5.8 KiB
Plaintext
{"version":3,"sources":["../../src/core/parser.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n ContentEntity,\n LinkEntity,\n MentionEntity,\n ParsedMention,\n ProcessedContent,\n TagEntity,\n} from \"./types\";\n\nexport const mentionLinkRegexp =\n /@\\[[^\\]]+]\\([0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\)/g;\n\nexport const parseMention = (mention: string): ParsedMention | null => {\n const regex = /@\\[([^\\]]+)\\]\\(([\\w-]{36})\\)/;\n const match = mention.match(regex);\n\n if (!match) {\n return null;\n }\n\n const mentionText = match[1];\n const mentionId = match[2];\n if (!mentionText || !mentionId) {\n return null;\n }\n\n return {\n mention: `@${mentionText}`,\n id: mentionId,\n };\n};\n\nexport const findMentions = (text: string): MentionEntity[] => {\n let match: RegExpExecArray | null;\n const matches: MentionEntity[] = [];\n\n while ((match = mentionLinkRegexp.exec(text)) !== null) {\n const parsed = parseMention(match[0]);\n const baseMention: Omit<MentionEntity, \"userId\"> = {\n start: match.index,\n end: mentionLinkRegexp.lastIndex,\n text: match[0],\n type: \"mention\",\n displayText: parsed?.mention ?? match[0],\n };\n\n matches.push(parsed?.id ? { ...baseMention, userId: parsed.id } : baseMention);\n }\n\n return matches;\n};\n\nexport const findTags = (content: string): TagEntity[] => {\n const regex = /#[^\\s]{1,201}/g;\n const results: TagEntity[] = [];\n let match: RegExpExecArray | null;\n\n while ((match = regex.exec(content)) !== null) {\n const value = match[0];\n results.push({\n start: match.index,\n end: match.index + value.length,\n text: value,\n type: \"tag\",\n tag: value.replace(\"#\", \"\"),\n });\n }\n\n return results;\n};\n\nexport const findLinks = (content: string): LinkEntity[] => {\n const regex =\n /\\b((https?:\\/\\/)?(?:[\\w-]+\\.)+[a-z]{2,}(\\/[\\w\\-._~:/?#[\\]@!$&'()*+,;=]*)?)/gi;\n const results: LinkEntity[] = [];\n let match: RegExpExecArray | null;\n\n while ((match = regex.exec(content)) !== null) {\n const rawUrl = match[0];\n const hasProtocol = /^https?:\\/\\//i.test(rawUrl);\n const fullUrl = hasProtocol ? rawUrl : `https://${rawUrl}`;\n\n results.push({\n start: match.index,\n end: match.index + rawUrl.length,\n text: rawUrl,\n url: fullUrl,\n type: \"link\",\n });\n }\n\n return results;\n};\n\nexport const findAllEntities = (content: string): ContentEntity[] => {\n const mentions = findMentions(content);\n const tags = findTags(content);\n const links = findLinks(content);\n\n return [...mentions, ...tags, ...links].sort((a, b) => a.start - b.start);\n};\n\nexport const processContent = (content: string): ProcessedContent => {\n const processedText = content.replace(mentionLinkRegexp, match => {\n const parsed = parseMention(match);\n return parsed ? parsed.mention : match;\n });\n\n const tags = findTags(content).map(tag => tag.tag);\n\n return {\n processedText,\n tags,\n };\n};\n"]} |