@stackoverfloweth/prefect-design
Version:
A collection of low-level Vue components.
112 lines (85 loc) • 3.57 kB
text/typescript
import { marked } from 'marked'
import { VNode, RendererNode, RendererElement } from 'vue'
export type Token = ReturnType<typeof marked.lexer>[number]
export type VNodeChildren = VNode<RendererNode, RendererElement, Record<string, unknown>>[]
export type MarkdownMessagePayload = {
id: string,
text: string,
}
export type ParseMessagePayload = {
id: string,
tokens: marked.TokensList,
}
export type ParserOptions = {
headingClasses?: string[],
baseLinkUrl?: string | null | undefined,
}
export function isToken(token: unknown): token is Token {
return !!token && typeof token == 'object' && 'type' in token
}
export function hasChildren(token: unknown): token is Token & { tokens: Token[] } {
return isToken(token) && 'tokens' in token
}
export function isCodeBlock(token: unknown): token is marked.Tokens.Code {
return isToken(token) && token.type === 'code'
}
export function isCodeSpan(token: unknown): token is marked.Tokens.Codespan {
return isToken(token) && token.type === 'codespan'
}
export function isCode(token: unknown): token is marked.Tokens.Code | marked.Tokens.Codespan {
return isCodeBlock(token) || isCodeSpan(token)
}
export function isTable(token: unknown): token is marked.Tokens.Table {
return isToken(token) && token.type === 'table'
}
export function isList(token: unknown): token is marked.Tokens.List {
return isToken(token) && token.type === 'list'
}
export function isListItem(token: unknown): token is marked.Tokens.ListItem {
return isToken(token) && token.type === 'list_item'
}
export function isHeading(token: unknown): token is marked.Tokens.Heading {
return isToken(token) && token.type === 'heading'
}
export function isLink(token: unknown): token is marked.Tokens.Link {
return isToken(token) && token.type === 'link'
}
export function isImage(token: unknown): token is marked.Tokens.Image {
return isToken(token) && token.type === 'image'
}
export function isHtml(token: unknown): token is marked.Tokens.HTML {
return isToken(token) && token.type === 'html'
}
export function isBlockquote(token: unknown): token is marked.Tokens.Blockquote {
return isToken(token) && token.type === 'blockquote'
}
export function isHorizontalRule(token: unknown): token is marked.Tokens.Hr {
return isToken(token) && token.type === 'hr'
}
export function isSpace(token: unknown): token is marked.Tokens.Space {
return isToken(token) && token.type === 'space'
}
export function isBreak(token: unknown): token is marked.Tokens.Br {
return isToken(token) && token.type === 'br'
}
export function isText(token: unknown): token is marked.Tokens.Text {
return isToken(token) && token.type === 'text'
}
export function isParagraph(token: unknown): token is marked.Tokens.Paragraph {
return isToken(token) && token.type === 'paragraph'
}
export function isStrong(token: unknown): token is marked.Tokens.Strong {
return isToken(token) && token.type === 'strong'
}
export function isEmphasis(token: unknown): token is marked.Tokens.Em {
return isToken(token) && token.type === 'em'
}
export function isDeleted(token: unknown): token is marked.Tokens.Del {
return isToken(token) && token.type === 'del'
}
export function isTextToken(token: unknown): token is marked.Tokens.Text | marked.Tokens.Em | marked.Tokens.Strong | marked.Tokens.Del {
return isText(token) || isParagraph(token) || isStrong(token) || isEmphasis(token) || isDeleted(token)
}
export function isEscape(token: unknown): token is marked.Tokens.Escape {
return isToken(token) && token.type === 'escape'
}