Add email to content parser
This commit is contained in:
@@ -41,6 +41,7 @@ export enum ParsedType {
|
|||||||
Cashu = "cashu",
|
Cashu = "cashu",
|
||||||
Code = "code",
|
Code = "code",
|
||||||
Ellipsis = "ellipsis",
|
Ellipsis = "ellipsis",
|
||||||
|
Email = "email",
|
||||||
Emoji = "emoji",
|
Emoji = "emoji",
|
||||||
Event = "event",
|
Event = "event",
|
||||||
Invoice = "invoice",
|
Invoice = "invoice",
|
||||||
@@ -71,6 +72,11 @@ export type ParsedEllipsis = ParsedBase & {
|
|||||||
value: string
|
value: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ParsedEmail = ParsedBase & {
|
||||||
|
type: ParsedType.Email
|
||||||
|
value: string
|
||||||
|
}
|
||||||
|
|
||||||
export type ParsedEmojiValue = {
|
export type ParsedEmojiValue = {
|
||||||
name: string
|
name: string
|
||||||
url?: string
|
url?: string
|
||||||
@@ -140,6 +146,7 @@ export type Parsed =
|
|||||||
| ParsedCashu
|
| ParsedCashu
|
||||||
| ParsedCode
|
| ParsedCode
|
||||||
| ParsedEllipsis
|
| ParsedEllipsis
|
||||||
|
| ParsedEmail
|
||||||
| ParsedEmoji
|
| ParsedEmoji
|
||||||
| ParsedEvent
|
| ParsedEvent
|
||||||
| ParsedInvoice
|
| ParsedInvoice
|
||||||
@@ -158,6 +165,7 @@ export const isCashu = (parsed: Parsed): parsed is ParsedCashu => parsed.type ==
|
|||||||
export const isCode = (parsed: Parsed): parsed is ParsedCode => parsed.type === ParsedType.Code
|
export const isCode = (parsed: Parsed): parsed is ParsedCode => parsed.type === ParsedType.Code
|
||||||
export const isEllipsis = (parsed: Parsed): parsed is ParsedEllipsis =>
|
export const isEllipsis = (parsed: Parsed): parsed is ParsedEllipsis =>
|
||||||
parsed.type === ParsedType.Ellipsis
|
parsed.type === ParsedType.Ellipsis
|
||||||
|
export const isEmail = (parsed: Parsed): parsed is ParsedEmail => parsed.type === ParsedType.Email
|
||||||
export const isEmoji = (parsed: Parsed): parsed is ParsedEmoji => parsed.type === ParsedType.Emoji
|
export const isEmoji = (parsed: Parsed): parsed is ParsedEmoji => parsed.type === ParsedType.Emoji
|
||||||
export const isEvent = (parsed: Parsed): parsed is ParsedEvent => parsed.type === ParsedType.Event
|
export const isEvent = (parsed: Parsed): parsed is ParsedEvent => parsed.type === ParsedType.Event
|
||||||
export const isInvoice = (parsed: Parsed): parsed is ParsedInvoice =>
|
export const isInvoice = (parsed: Parsed): parsed is ParsedInvoice =>
|
||||||
@@ -239,6 +247,15 @@ export const parseEvent = (text: string, context: ParseContext): ParsedEvent | v
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const parseEmail = (text: string, context: ParseContext): ParsedEmail | void => {
|
||||||
|
const [raw, _, value] =
|
||||||
|
text.match(/^(mailto:)?([a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,})\b/i) || []
|
||||||
|
|
||||||
|
if (raw && value) {
|
||||||
|
return {type: ParsedType.Email, value, raw}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export const parseInvoice = (text: string, context: ParseContext): ParsedInvoice | void => {
|
export const parseInvoice = (text: string, context: ParseContext): ParsedInvoice | void => {
|
||||||
const [raw, _, value] = text.match(/^(lightning:)(ln(bc|url)[0-9a-z]{10,})/i) || []
|
const [raw, _, value] = text.match(/^(lightning:)(ln(bc|url)[0-9a-z]{10,})/i) || []
|
||||||
|
|
||||||
@@ -368,6 +385,7 @@ export const parsers = [
|
|||||||
parseEvent,
|
parseEvent,
|
||||||
parseCashu,
|
parseCashu,
|
||||||
parseInvoice,
|
parseInvoice,
|
||||||
|
parseEmail,
|
||||||
parseLink,
|
parseLink,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import {
|
|||||||
ParsedInvoice,
|
ParsedInvoice,
|
||||||
ParsedEvent,
|
ParsedEvent,
|
||||||
ParsedEmoji,
|
ParsedEmoji,
|
||||||
|
ParsedEmail,
|
||||||
ParsedEllipsis,
|
ParsedEllipsis,
|
||||||
ParsedCode,
|
ParsedCode,
|
||||||
ParsedCashu,
|
ParsedCashu,
|
||||||
@@ -93,6 +94,8 @@ export const renderCode = (p: ParsedCode, r: Renderer) => r.addText(p.value)
|
|||||||
|
|
||||||
export const renderEllipsis = (p: ParsedEllipsis, r: Renderer) => r.addText("…")
|
export const renderEllipsis = (p: ParsedEllipsis, r: Renderer) => r.addText("…")
|
||||||
|
|
||||||
|
export const renderEmail = (p: ParsedEmail, r: Renderer) => r.addLink("mailto:" + p.value, p.value)
|
||||||
|
|
||||||
export const renderEmoji = (p: ParsedEmoji, r: Renderer) => r.addText(p.raw)
|
export const renderEmoji = (p: ParsedEmoji, r: Renderer) => r.addText(p.raw)
|
||||||
|
|
||||||
export const renderInvoice = (p: ParsedInvoice, r: Renderer) =>
|
export const renderInvoice = (p: ParsedInvoice, r: Renderer) =>
|
||||||
@@ -130,6 +133,9 @@ export const renderOne = (parsed: Parsed, renderer: Renderer) => {
|
|||||||
case ParsedType.Ellipsis:
|
case ParsedType.Ellipsis:
|
||||||
renderEllipsis(parsed as ParsedEllipsis, renderer)
|
renderEllipsis(parsed as ParsedEllipsis, renderer)
|
||||||
break
|
break
|
||||||
|
case ParsedType.Email:
|
||||||
|
renderEmail(parsed as ParsedEmail, renderer)
|
||||||
|
break
|
||||||
case ParsedType.Emoji:
|
case ParsedType.Emoji:
|
||||||
renderEmoji(parsed as ParsedEmoji, renderer)
|
renderEmoji(parsed as ParsedEmoji, renderer)
|
||||||
break
|
break
|
||||||
|
|||||||
Reference in New Issue
Block a user